@argojun/react-components 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +163 -28
- package/dist/index.cjs.js +2 -2
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +2 -2
- package/dist/index.esm.js.map +1 -1
- package/dist/styles.css +1 -3
- package/package.json +21 -13
- package/src/tailwind.preset.cjs +23 -0
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../src/components/Icon.jsx","../src/components/button/Button.jsx","../src/components/checkbox/Checkbox.jsx","../src/components/datetime/DateTimePicker.jsx","../src/components/fileupload/FileUpload.jsx","../src/components/input/Input.jsx","../src/components/input/Textarea.jsx","../src/components/radio/Radio.jsx","../src/components/select/Select.jsx","../src/components/select/MultiSelect.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\n/**\n * Custom SVG Icon Library\n * \n * A collection of hand-crafted SVG icons inspired by modern design systems.\n * No external dependencies required.\n */\n\n// Icon paths - all designed on a 24x24 viewBox\nconst iconPaths = {\n // Navigation & UI\n 'chevron-down': 'M6 9l6 6 6-6',\n 'chevron-up': 'M18 15l-6-6-6 6',\n 'chevron-left': 'M15 18l-6-6 6-6',\n 'chevron-right': 'M9 6l6 6-6 6',\n 'arrow-left': 'M19 12H5m0 0l7 7m-7-7l7-7',\n 'arrow-right': 'M5 12h14m0 0l-7-7m7 7l-7 7',\n 'arrow-up': 'M12 19V5m0 0l-7 7m7-7l7 7',\n 'arrow-down': 'M12 5v14m0 0l7-7m-7 7l-7-7',\n 'menu': 'M4 6h16M4 12h16M4 18h16',\n 'x': 'M6 18L18 6M6 6l12 12',\n 'xmark': 'M6 18L18 6M6 6l12 12',\n 'plus': 'M12 5v14m-7-7h14',\n 'minus': 'M5 12h14',\n 'check': 'M5 13l4 4L19 7',\n 'external-link': 'M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14',\n\n // Actions\n 'search': 'M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z',\n 'filter': 'M3 4a1 1 0 011-1h16a1 1 0 011 1v2.586a1 1 0 01-.293.707l-6.414 6.414a1 1 0 00-.293.707V17l-4 4v-6.586a1 1 0 00-.293-.707L3.293 7.293A1 1 0 013 6.586V4z',\n 'edit': 'M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z',\n 'trash': 'M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16',\n 'copy': 'M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z',\n 'download': 'M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4',\n 'upload': 'M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-8l-4-4m0 0L8 8m4-4v12',\n 'refresh': 'M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15',\n 'settings': 'M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z M15 12a3 3 0 11-6 0 3 3 0 016 0z',\n 'cog': 'M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z M15 12a3 3 0 11-6 0 3 3 0 016 0z',\n\n // Status & Alerts\n 'info': 'M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z',\n 'circle-info': 'M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z',\n 'warning': 'M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z',\n 'triangle-exclamation': 'M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z',\n 'error': 'M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z',\n 'circle-exclamation': 'M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z',\n 'success': 'M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z',\n 'circle-check': 'M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z',\n 'question': 'M8.228 9c.549-1.165 2.03-2 3.772-2 2.21 0 4 1.343 4 3 0 1.4-1.278 2.575-3.006 2.907-.542.104-.994.54-.994 1.093m0 3h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z',\n 'circle-question': 'M8.228 9c.549-1.165 2.03-2 3.772-2 2.21 0 4 1.343 4 3 0 1.4-1.278 2.575-3.006 2.907-.542.104-.994.54-.994 1.093m0 3h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z',\n\n // Form Elements\n 'eye': 'M15 12a3 3 0 11-6 0 3 3 0 016 0z M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z',\n 'eye-slash': 'M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.88 9.88l-3.29-3.29m7.532 7.532l3.29 3.29M3 3l3.59 3.59m0 0A9.953 9.953 0 0112 5c4.478 0 8.268 2.943 9.543 7a10.025 10.025 0 01-4.132 5.411m0 0L21 21',\n 'lock': 'M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z',\n 'unlock': 'M8 11V7a4 4 0 118 0m-4 8v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2z',\n\n // Communication\n 'envelope': 'M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z',\n 'mail': 'M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z',\n 'phone': 'M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z',\n 'chat': 'M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z',\n 'comment': 'M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z',\n 'bell': 'M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9',\n\n // People\n 'user': 'M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z',\n 'users': 'M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197M13 7a4 4 0 11-8 0 4 4 0 018 0z',\n 'user-plus': 'M18 9v3m0 0v3m0-3h3m-3 0h-3m-2-5a4 4 0 11-8 0 4 4 0 018 0zM3 20a6 6 0 0112 0v1H3v-1z',\n\n // Media\n 'image': 'M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z',\n 'camera': 'M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z M15 13a3 3 0 11-6 0 3 3 0 016 0z',\n 'video': 'M15 10l4.553-2.276A1 1 0 0121 8.618v6.764a1 1 0 01-1.447.894L15 14M5 18h8a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v8a2 2 0 002 2z',\n 'music': 'M9 19V6l12-3v13M9 19c0 1.105-1.343 2-3 2s-3-.895-3-2 1.343-2 3-2 3 .895 3 2zm12-3c0 1.105-1.343 2-3 2s-3-.895-3-2 1.343-2 3-2 3 .895 3 2zM9 10l12-3',\n 'play': 'M14.752 11.168l-3.197-2.132A1 1 0 0010 9.87v4.263a1 1 0 001.555.832l3.197-2.132a1 1 0 000-1.664z M21 12a9 9 0 11-18 0 9 9 0 0118 0z',\n 'pause': 'M10 9v6m4-6v6m7-3a9 9 0 11-18 0 9 9 0 0118 0z',\n 'stop': 'M21 12a9 9 0 11-18 0 9 9 0 0118 0z M9 10a1 1 0 011-1h4a1 1 0 011 1v4a1 1 0 01-1 1h-4a1 1 0 01-1-1v-4z',\n\n // Files & Documents\n 'file': 'M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z',\n 'file-lines': 'M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z',\n 'folder': 'M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z',\n 'folder-open': 'M5 19a2 2 0 01-2-2V7a2 2 0 012-2h4l2 2h4a2 2 0 012 2v1M5 19h14a2 2 0 002-2v-5a2 2 0 00-2-2H9a2 2 0 00-2 2v5a2 2 0 01-2 2z',\n 'document': 'M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z',\n 'clipboard': 'M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2',\n\n // Date & Time\n 'calendar': 'M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z',\n 'calendar-days': 'M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z M7 14h.01M11 14h.01M15 14h.01M7 18h.01M11 18h.01',\n 'clock': 'M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z',\n 'time': 'M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z',\n\n // Layout & Design\n 'grid': 'M4 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2V6zM14 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2V6zM4 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2v-2zM14 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2v-2z',\n 'list': 'M4 6h16M4 10h16M4 14h16M4 18h16',\n 'list-check': 'M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4',\n 'table': 'M3 10h18M3 14h18m-9-4v8m-7 0h14a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v8a2 2 0 002 2z',\n 'columns': 'M9 4v16m6-16v16M3 4h18v16H3V4z',\n\n // Development\n 'code': 'M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4',\n 'terminal': 'M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z',\n 'bug': 'M12 19l9 2-9-18-9 18 9-2zm0 0v-8',\n 'database': 'M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4m0 5c0 2.21-3.582 4-8 4s-8-1.79-8-4',\n 'server': 'M5 12h14M5 12a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v4a2 2 0 01-2 2M5 12a2 2 0 00-2 2v4a2 2 0 002 2h14a2 2 0 002-2v-4a2 2 0 00-2-2m-2-4h.01M17 16h.01',\n\n // Commerce\n 'cart': 'M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z',\n 'shopping-cart': 'M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z',\n 'credit-card': 'M3 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z',\n 'tag': 'M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z',\n 'tags': 'M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z',\n 'gift': 'M12 8v13m0-13V6a2 2 0 112 2h-2zm0 0V5.5A2.5 2.5 0 109.5 8H12zm-7 4h14M5 12a2 2 0 110-4h14a2 2 0 110 4M5 12v7a2 2 0 002 2h10a2 2 0 002-2v-7',\n\n // Shapes & Symbols\n 'circle': 'M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0',\n 'circle-dot': 'M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0 M12 12m-3 0a3 3 0 1 0 6 0a3 3 0 1 0 -6 0',\n 'square': 'M5 5h14v14H5z',\n 'square-check': 'M9 12l2 2 4-4m5 2V7a2 2 0 00-2-2H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-1',\n 'heart': 'M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z',\n 'star': 'M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z',\n 'bookmark': 'M5 5a2 2 0 012-2h10a2 2 0 012 2v16l-7-3.5L5 21V5z',\n 'flag': 'M3 21v-4m0 0V5a2 2 0 012-2h6.5l1 1H21l-3 6 3 6h-8.5l-1-1H5a2 2 0 00-2 2zm9-13.5V9',\n\n // Weather & Nature\n 'sun': 'M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z',\n 'moon': 'M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z',\n 'cloud': 'M3 15a4 4 0 004 4h9a5 5 0 10-.1-9.999 5.002 5.002 0 10-9.78 2.096A4.001 4.001 0 003 15z',\n 'cloud-arrow-up': 'M6.5 19a4.5 4.5 0 01-.42-8.98 6 6 0 0111.84 0A4.5 4.5 0 0117.5 19h-11zM12 10v5m-2.5-2.5L12 10l2.5 2.5',\n 'cloud-arrow-down': 'M6.5 19a4.5 4.5 0 01-.42-8.98 6 6 0 0111.84 0A4.5 4.5 0 0117.5 19h-11zM12 10v5m-2.5-2.5L12 15l2.5-2.5',\n 'lightning': 'M13 10V3L4 14h7v7l9-11h-7z',\n 'bolt': 'M13 10V3L4 14h7v7l9-11h-7z',\n\n // Misc\n 'desktop': 'M3 5a2 2 0 012-2h14a2 2 0 012 2v10a2 2 0 01-2 2H5a2 2 0 01-2-2V5zM9 21h6M12 17v4',\n 'home': 'M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6',\n 'globe': 'M3.055 11H5a2 2 0 012 2v1a2 2 0 002 2 2 2 0 012 2v2.945M8 3.935V5.5A2.5 2.5 0 0010.5 8h.5a2 2 0 012 2 2 2 0 104 0 2 2 0 012-2h1.064M15 20.488V18a2 2 0 012-2h3.064M21 12a9 9 0 11-18 0 9 9 0 0118 0z',\n 'location': 'M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z M15 11a3 3 0 11-6 0 3 3 0 016 0z',\n 'map-pin': 'M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z M15 11a3 3 0 11-6 0 3 3 0 016 0z',\n 'link': 'M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1',\n 'paper-plane': 'M12 19l9 2-9-18-9 18 9-2zm0 0v-8',\n 'rocket': 'M15.59 14.37a6 6 0 01-5.84 7.38v-4.8m5.84-2.58a14.98 14.98 0 006.16-12.12A14.98 14.98 0 009.631 8.41m5.96 5.96a14.926 14.926 0 01-5.841 2.58m-.119-8.54a6 6 0 00-7.381 5.84h4.8m2.581-5.84a14.927 14.927 0 00-2.58 5.84m2.699 2.7c-.103.021-.207.041-.311.06a15.09 15.09 0 01-2.448-2.448 14.9 14.9 0 01.06-.312m-2.24 2.39a4.493 4.493 0 00-1.757 4.306 4.493 4.493 0 004.306-1.758M16.5 9a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0z',\n 'sparkles': 'M5 3v4M3 5h4M6 17v4m-2-2h4m5-16l2.286 6.857L21 12l-5.714 2.143L13 21l-2.286-6.857L5 12l5.714-2.143L13 3z',\n 'wand-magic-sparkles': 'M5 3v4M3 5h4M6 17v4m-2-2h4m5-16l2.286 6.857L21 12l-5.714 2.143L13 21l-2.286-6.857L5 12l5.714-2.143L13 3z',\n 'swatchbook': 'M7 21a4 4 0 01-4-4V5a2 2 0 012-2h4a2 2 0 012 2v12a4 4 0 01-4 4zm0 0h12a2 2 0 002-2v-4a2 2 0 00-2-2h-2.343M11 7.343l1.657-1.657a2 2 0 012.828 0l2.829 2.829a2 2 0 010 2.828l-8.486 8.485M7 17h.01',\n 'palette': 'M7 21a4 4 0 01-4-4V5a2 2 0 012-2h4a2 2 0 012 2v12a4 4 0 01-4 4zm0 0h12a2 2 0 002-2v-4a2 2 0 00-2-2h-2.343M11 7.343l1.657-1.657a2 2 0 012.828 0l2.829 2.829a2 2 0 010 2.828l-8.486 8.485M7 17h.01',\n 'fill-drip': 'M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z',\n 'font': 'M4 6h16M4 12h16m-7 6h7',\n 'align-left': 'M4 6h16M4 12h10M4 18h14',\n 'text-width': 'M4 6h16M8 12h8M6 18h12',\n 'icons': 'M4 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2V6zM14 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2V6zM4 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2v-2zM14 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2v-2z',\n 'toggle-on': 'M5 12a7 7 0 0114 0 7 7 0 01-14 0zm7-3a3 3 0 100 6 3 3 0 000-6z',\n 'compress': 'M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4',\n 'left-right': 'M7 16V4m0 0L3 8m4-4l4 4m6 8V4m0 12l-4-4m4 4l4-4',\n 'shield-check': 'M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z',\n 'spinner': 'M21 12a9 9 0 1 1-6.219-8.56',\n 'spinner-third': 'M12 2v4m0 12v4M4.93 4.93l2.83 2.83m8.48 8.48l2.83 2.83M2 12h4m12 0h4M4.93 19.07l2.83-2.83m8.48-8.48l2.83-2.83',\n 'box': 'M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4',\n 'universal-access': 'M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z',\n 'feather': 'M20.24 12.24a6 6 0 00-8.49-8.49L5 10.5V19h8.5z M16 8L2 22 M17.5 15H9',\n\n // Brands (simplified representations)\n 'github': 'M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 00-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0020 4.77 5.07 5.07 0 0019.91 1S18.73.65 16 2.48a13.38 13.38 0 00-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 005 4.77a5.44 5.44 0 00-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 009 18.13V22',\n 'npm': 'M3 3h18v18H3V3zm3 3v12h3V9h3v9h6V6H6z',\n 'yarn': 'M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5',\n 'facebook': 'M18 2h-3a5 5 0 00-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 011-1h3z',\n // 'twitter': 'M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z',\n 'instagram': 'M16 11.37A4 4 0 1112.63 8 4 4 0 0116 11.37z M17.5 6.5h.01 M7 2h10a5 5 0 015 5v10a5 5 0 01-5 5H7a5 5 0 01-5-5V7a5 5 0 015-5z',\n 'linkedin': 'M16 8a6 6 0 016 6v7h-4v-7a2 2 0 00-2-2 2 2 0 00-2 2v7h-4v-7a6 6 0 016-6z M2 9h4v12H2z M6 4a2 2 0 11-4 0 2 2 0 014 0z',\n 'youtube': 'M22.54 6.42a2.78 2.78 0 00-1.94-2C18.88 4 12 4 12 4s-6.88 0-8.6.46a2.78 2.78 0 00-1.94 2A29 29 0 001 11.75a29 29 0 00.46 5.33A2.78 2.78 0 003.4 19c1.72.46 8.6.46 8.6.46s6.88 0 8.6-.46a2.78 2.78 0 001.94-2 29 29 0 00.46-5.25 29 29 0 00-.46-5.33zM9.75 15.02l5.75-3.27-5.75-3.27z',\n 'twitch': 'M21 2H3v16h5v4l4-4h5l4-4V2zm-10 9V7m5 4V7',\n 'android': 'M17.6 9.48l1.84-3.18c.16-.31.04-.69-.26-.85-.29-.15-.65-.06-.83.22l-1.88 3.24c-2.86-1.21-6.08-1.21-8.94 0L5.65 5.67c-.19-.28-.54-.38-.83-.22-.3.16-.42.54-.26.85l1.84 3.18C2.92 11.03 1 14.22 1 17.8h22c0-3.58-1.92-6.77-5.4-8.32zM7.5 15c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm9 0c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z',\n // 'whatsapp': 'M3 21l1.9-5.7a8.5 8.5 0 113.8 3.8z M16.5 15.5c-.5.8-1.5 1-2.5.5-2-1-4-3-5-5-.5-1-.3-2 .5-2.5',\n 'telegram': 'M22 2L11 13M22 2l-7 20-4-9-9-4 20-7z',\n 'figma': 'M5 5.5A3.5 3.5 0 018.5 2H12v7H8.5A3.5 3.5 0 015 5.5zM12 2h3.5a3.5 3.5 0 110 7H12V2zM12 12.5a3.5 3.5 0 11-7 0 3.5 3.5 0 017 0zm0 7a3.5 3.5 0 1 1-7 0 3.5 3.5 0 0 1 7 0z',\n 'react': 'M12 22c5.52 0 10-4.48 10-10S17.52 2 12 2 2 6.48 2 12s4.48 10 10 10zm0-18c4.41 0 8 3.59 8 8s-3.59 8-8 8-8-3.59-8-8 3.59-8 8-8zm0 2c3.31 0 6 2.69 6 6s-2.69 6-6 6-6-2.69-6-6 2.69-6 6-6z',\n // 'google': 'M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z',\n 'apple': 'M17.05 20.28c-.98.95-2.05.8-3.08.35-1.09-.46-2.09-.48-3.24 0-1.44.62-2.2.44-3.06-.35C2.79 15.25 3.51 7.59 9.05 7.31c1.35.07 2.29.74 3.08.8 1.18-.24 2.31-.93 3.57-.84 1.51.12 2.65.72 3.4 1.8-3.12 1.87-2.38 5.98.48 7.13-.57 1.5-1.31 2.99-2.53 4.09l-.01-.01zM12.03 7.25c-.15-2.23 1.66-4.07 3.74-4.25.29 2.58-2.34 4.5-3.74 4.25z',\n // 'microsoft': 'M11.4 24H0V12.6h11.4V24zM24 24H12.6V12.6H24V24zM11.4 11.4H0V0h11.4v11.4zm12.6 0H12.6V0H24v11.4z',\n};\n\n// Filled/Solid icon paths - closed shapes with cutouts\nconst filledIconPaths = {\n 'home': 'M12.71 2.29a1 1 0 00-1.42 0l-9 9a1 1 0 001.42 1.42L4 12.41V21a1 1 0 001 1h5a1 1 0 001-1v-5h2v5a1 1 0 001 1h5a1 1 0 001-1v-8.59l.29.3a1 1 0 001.42-1.42l-9-9z',\n 'chevron-down': 'M5.293 7.293a1 1 0 011.414 0L12 12.586l5.293-5.293a1 1 0 111.414 1.414l-6 6a1 1 0 01-1.414 0l-6-6a1 1 0 010-1.414z',\n 'chevron-up': 'M18.707 16.707a1 1 0 01-1.414 0L12 11.414l-5.293 5.293a1 1 0 01-1.414-1.414l6-6a1 1 0 011.414 0l6 6a1 1 0 010 1.414z',\n 'chevron-left': 'M15.707 18.707a1 1 0 010-1.414L10.414 12l5.293-5.293a1 1 0 00-1.414-1.414l-6 6a1 1 0 000 1.414l6 6a1 1 0 001.414 0z',\n 'chevron-right': 'M8.293 5.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L13.586 12 8.293 6.707a1 1 0 010-1.414z',\n 'menu': 'M3 5a1 1 0 011-1h16a1 1 0 110 2H4a1 1 0 01-1-1zm0 6a1 1 0 011-1h16a1 1 0 110 2H4a1 1 0 01-1-1zm1 5a1 1 0 100 2h16a1 1 0 100-2H4z',\n 'x': 'M4.293 4.293a1 1 0 011.414 0L12 10.586l6.293-6.293a1 1 0 111.414 1.414L13.414 12l6.293 6.293a1 1 0 01-1.414 1.414L12 13.414l-6.293 6.293a1 1 0 01-1.414-1.414L10.586 12 4.293 5.707a1 1 0 010-1.414z',\n 'xmark': 'M4.293 4.293a1 1 0 011.414 0L12 10.586l6.293-6.293a1 1 0 111.414 1.414L13.414 12l6.293 6.293a1 1 0 01-1.414 1.414L12 13.414l-6.293 6.293a1 1 0 01-1.414-1.414L10.586 12 4.293 5.707a1 1 0 010-1.414z',\n 'check': 'M20.707 5.293a1 1 0 010 1.414l-11 11a1 1 0 01-1.414 0l-5-5a1 1 0 111.414-1.414L9 15.586 19.293 5.293a1 1 0 011.414 0z',\n 'plus': 'M12 4a1 1 0 011 1v6h6a1 1 0 110 2h-6v6a1 1 0 11-2 0v-6H5a1 1 0 110-2h6V5a1 1 0 011-1z',\n 'minus': 'M4 12a1 1 0 011-1h14a1 1 0 110 2H5a1 1 0 01-1-1z',\n 'circle-check': 'M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm4.707 8.707l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 111.414-1.414L11 13.586l4.293-4.293a1 1 0 111.414 1.414z',\n 'success': 'M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm4.707 8.707l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 111.414-1.414L11 13.586l4.293-4.293a1 1 0 111.414 1.414z',\n 'circle-exclamation': 'M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm0 5a1 1 0 011 1v4a1 1 0 11-2 0V8a1 1 0 011-1zm0 10a1.5 1.5 0 100-3 1.5 1.5 0 000 3z',\n 'warning': 'M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm0 5a1 1 0 011 1v4a1 1 0 11-2 0V8a1 1 0 011-1zm0 10a1.5 1.5 0 100-3 1.5 1.5 0 000 3z',\n 'triangle-exclamation': 'M12.866 3l9.526 16.5a1 1 0 01-.866 1.5H2.474a1 1 0 01-.866-1.5L11.134 3a1 1 0 011.732 0zM12 8a1 1 0 00-1 1v4a1 1 0 002 0V9a1 1 0 00-1-1zm0 10a1.5 1.5 0 100-3 1.5 1.5 0 000 3z',\n 'circle-info': 'M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm0 5a1.5 1.5 0 110 3 1.5 1.5 0 010-3zm1 10a1 1 0 01-2 0v-4a1 1 0 012 0v4z',\n 'info': 'M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm0 5a1.5 1.5 0 110 3 1.5 1.5 0 010-3zm1 10a1 1 0 01-2 0v-4a1 1 0 012 0v4z',\n 'search': 'M10 2a8 8 0 105.293 14.293l3.707 3.707a1.5 1.5 0 002.121-2.121l-3.707-3.707A8 8 0 0010 2zm0 3a5 5 0 110 10 5 5 0 010-10z',\n 'filter': 'M3 4a1 1 0 011-1h16a1 1 0 011 1v2a1 1 0 01-.293.707L15 12.414V19a1 1 0 01-.553.894l-4 2A1 1 0 019 21v-8.586L3.293 6.707A1 1 0 013 6V4z',\n 'edit': 'M16.707 2.293a1 1 0 00-1.414 0l-9.5 9.5a1 1 0 00-.263.464l-1.5 5a1 1 0 001.213 1.213l5-1.5a1 1 0 00.464-.263l9.5-9.5a1 1 0 000-1.414l-3.5-3.5zM5 21a1 1 0 011-1h12a1 1 0 110 2H6a1 1 0 01-1-1z',\n 'trash': 'M9 3a1 1 0 00-1 1H5a1 1 0 000 2h14a1 1 0 100-2h-3a1 1 0 00-1-1H9zM6 7v12a2 2 0 002 2h8a2 2 0 002-2V7H6zm3.5 2a.5.5 0 01.5.5v8a.5.5 0 01-1 0v-8a.5.5 0 01.5-.5zm5 0a.5.5 0 01.5.5v8a.5.5 0 01-1 0v-8a.5.5 0 01.5-.5z',\n 'copy': 'M7 4a2 2 0 00-2 2v10a2 2 0 002 2h1v1a2 2 0 002 2h8a2 2 0 002-2V9a2 2 0 00-2-2h-1V6a2 2 0 00-2-2H7zm3 5h8v10h-8V9z',\n 'download': 'M12 2a1 1 0 011 1v8.586l2.293-2.293a1 1 0 011.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L11 11.586V3a1 1 0 011-1zM3 16a1 1 0 011 1v2a1 1 0 001 1h14a1 1 0 001-1v-2a1 1 0 112 0v2a3 3 0 01-3 3H5a3 3 0 01-3-3v-2a1 1 0 011-1z',\n 'upload': 'M12 2a1 1 0 01.707.293l4 4a1 1 0 01-1.414 1.414L13 5.414V14a1 1 0 11-2 0V5.414L8.707 7.707a1 1 0 01-1.414-1.414l4-4A1 1 0 0112 2zM3 16a1 1 0 011 1v2a1 1 0 001 1h14a1 1 0 001-1v-2a1 1 0 112 0v2a3 3 0 01-3 3H5a3 3 0 01-3-3v-2a1 1 0 011-1z',\n 'refresh': 'M4 12a8 8 0 0114.93-4H15a1 1 0 100 2h6a1 1 0 001-1V3a1 1 0 10-2 0v3.07A10 10 0 002 12a1 1 0 102 0zm16 0a8 8 0 01-14.93 4H9a1 1 0 100-2H3a1 1 0 00-1 1v6a1 1 0 102 0v-3.07A10 10 0 0022 12a1 1 0 10-2 0z',\n 'settings': 'M12 8a4 4 0 100 8 4 4 0 000-8zm-2 4a2 2 0 114 0 2 2 0 01-4 0zM11 1a1 1 0 012 0v2.062a8.004 8.004 0 013.906 1.617l1.458-1.457a1 1 0 111.414 1.414l-1.457 1.458A8.004 8.004 0 0119.938 10H22a1 1 0 110 2h-2.062a8.004 8.004 0 01-1.617 3.906l1.457 1.458a1 1 0 01-1.414 1.414l-1.458-1.457A8.004 8.004 0 0114 19.938V22a1 1 0 11-2 0v-2.062a8.004 8.004 0 01-3.906-1.617l-1.458 1.457a1 1 0 01-1.414-1.414l1.457-1.458A8.004 8.004 0 015.062 14H3a1 1 0 110-2h2.062a8.004 8.004 0 011.617-3.906L5.222 6.636a1 1 0 011.414-1.414l1.458 1.457A8.004 8.004 0 0112 5.062V3z',\n 'cog': 'M10.325 2.317a1.724 1.724 0 013.35 0 1.724 1.724 0 002.573 1.066 1.724 1.724 0 012.37 2.37 1.724 1.724 0 001.065 2.572 1.724 1.724 0 010 3.35 1.724 1.724 0 00-1.066 2.573 1.724 1.724 0 01-2.37 2.37 1.724 1.724 0 00-2.572 1.065 1.724 1.724 0 01-3.35 0 1.724 1.724 0 00-2.573-1.066 1.724 1.724 0 01-2.37-2.37 1.724 1.724 0 00-1.065-2.572 1.724 1.724 0 010-3.35 1.724 1.724 0 001.066-2.573 1.724 1.724 0 012.37-2.37c.996.608 2.296.07 2.572-1.065zM12 15a3 3 0 100-6 3 3 0 000 6z',\n 'user': 'M12 4a4 4 0 100 8 4 4 0 000-8zM6 20a6 6 0 1112 0H6z',\n 'envelope': 'M3 5a2 2 0 012-2h14a2 2 0 012 2v14a2 2 0 01-2 2H5a2 2 0 01-2-2V5zm2 0l7 5 7-5H5zm0 2.236V19h14V7.236l-6.445 4.604a1 1 0 01-1.11 0L5 7.236z',\n 'mail': 'M3 5a2 2 0 012-2h14a2 2 0 012 2v14a2 2 0 01-2 2H5a2 2 0 01-2-2V5zm2 0l7 5 7-5H5zm0 2.236V19h14V7.236l-6.445 4.604a1 1 0 01-1.11 0L5 7.236z',\n 'bell': 'M10 2a1 1 0 012 0v1.07A7.002 7.002 0 0119 10v4.382l1.447 2.894A1 1 0 0119.553 19H4.447a1 1 0 01-.894-1.724L5 14.382V10a7.002 7.002 0 017-6.93V2zm0 18h4a2 2 0 11-4 0z',\n 'image': 'M4 3a2 2 0 00-2 2v14a2 2 0 002 2h16a2 2 0 002-2V5a2 2 0 00-2-2H4zm16 14l-4-4-2 2-4-4-6 6V5h16v12zM8 9a2 2 0 100-4 2 2 0 000 4z',\n 'play': 'M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm-2 14V8l6 4-6 4z',\n 'file': 'M4 4a2 2 0 012-2h7.586a1 1 0 01.707.293l4.414 4.414a1 1 0 01.293.707V20a2 2 0 01-2 2H6a2 2 0 01-2-2V4z',\n 'folder': 'M2 6a2 2 0 012-2h5l2 2h9a2 2 0 012 2v10a2 2 0 01-2 2H4a2 2 0 01-2-2V6z',\n 'calendar': 'M6 2a1 1 0 011 1v1h6V3a1 1 0 112 0v1h2a2 2 0 012 2v14a2 2 0 01-2 2H5a2 2 0 01-2-2V6a2 2 0 012-2h2V3a1 1 0 011-1zm11 8H5v10h14V10z',\n 'clock': 'M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm1 5a1 1 0 10-2 0v5a1 1 0 00.293.707l3 3a1 1 0 001.414-1.414L13 11.586V7z',\n 'time': 'M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm1 5a1 1 0 10-2 0v5a1 1 0 00.293.707l3 3a1 1 0 001.414-1.414L13 11.586V7z',\n 'desktop': 'M2 5a2 2 0 012-2h16a2 2 0 012 2v10a2 2 0 01-2 2H4a2 2 0 01-2-2V5zm9 14a1 1 0 011-1 1 1 0 011 1v1h2a1 1 0 110 2H9a1 1 0 110-2h2v-1z',\n 'heart': 'M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z',\n 'star': 'M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z',\n 'bookmark': 'M5 3a2 2 0 012-2h10a2 2 0 012 2v18l-7-4-7 4V3z',\n 'circle': 'M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2z',\n 'square': 'M4 4a2 2 0 012-2h12a2 2 0 012 2v16a2 2 0 01-2 2H6a2 2 0 01-2-2V4z',\n 'sun': 'M12 2a1 1 0 011 1v2a1 1 0 11-2 0V3a1 1 0 011-1zm0 14a4 4 0 100-8 4 4 0 000 8zm9-4a1 1 0 01-1 1h-2a1 1 0 110-2h2a1 1 0 011 1zM5 12a1 1 0 01-1 1H2a1 1 0 110-2h2a1 1 0 011 1z',\n 'moon': 'M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z',\n 'eye': 'M12 4C7 4 2.73 7.11 1 11.5 2.73 15.89 7 19 12 19s9.27-3.11 11-7.5C21.27 7.11 17 4 12 4zm0 12.5a5 5 0 110-10 5 5 0 010 10zm0-8a3 3 0 100 6 3 3 0 000-6z',\n 'lock': 'M12 2a5 5 0 00-5 5v2H6a2 2 0 00-2 2v9a2 2 0 002 2h12a2 2 0 002-2v-9a2 2 0 00-2-2h-1V7a5 5 0 00-5-5zm3 7H9V7a3 3 0 116 0v2z',\n 'bolt': 'M13 2L4 14h7v8l9-12h-7V2z',\n 'lightning': 'M13 2L4 14h7v8l9-12h-7V2z',\n 'paper-plane': 'M2.01 21L23 12 2.01 3 2 10l15 2-15 2z',\n 'sparkles': 'M9.813 2.126a1 1 0 011.874 0l1.5 4.001 4.001 1.5a1 1 0 010 1.874l-4.001 1.5-1.5 4.001a1 1 0 01-1.874 0l-1.5-4.001-4.001-1.5a1 1 0 010-1.874l4.001-1.5 1.5-4.001z',\n 'grid': 'M4 3a1 1 0 00-1 1v6a1 1 0 001 1h6a1 1 0 001-1V4a1 1 0 00-1-1H4zm10 0a1 1 0 00-1 1v6a1 1 0 001 1h6a1 1 0 001-1V4a1 1 0 00-1-1h-6zM3 14a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H4a1 1 0 01-1-1v-6zm11-1a1 1 0 00-1 1v6a1 1 0 001 1h6a1 1 0 001-1v-6a1 1 0 00-1-1h-6z',\n 'icons': 'M4 3a1 1 0 00-1 1v6a1 1 0 001 1h6a1 1 0 001-1V4a1 1 0 00-1-1H4zm10 0a1 1 0 00-1 1v6a1 1 0 001 1h6a1 1 0 001-1V4a1 1 0 00-1-1h-6zM3 14a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H4a1 1 0 01-1-1v-6zm11-1a1 1 0 00-1 1v6a1 1 0 001 1h6a1 1 0 001-1v-6a1 1 0 00-1-1h-6z',\n 'tag': 'M2 4a2 2 0 012-2h6.586a2 2 0 011.414.586l8.414 8.414a2 2 0 010 2.828l-6.586 6.586a2 2 0 01-2.828 0L2.586 12A2 2 0 012 10.586V4zm5 3a1 1 0 100 2 1 1 0 000-2z',\n 'github': 'M12 2C6.477 2 2 6.477 2 12c0 4.42 2.865 8.164 6.839 9.489.5.092.682-.217.682-.482 0-.237-.009-.866-.014-1.7-2.782.603-3.369-1.342-3.369-1.342-.455-1.156-1.11-1.463-1.11-1.463-.908-.62.069-.607.069-.607 1.003.07 1.531 1.03 1.531 1.03.892 1.529 2.341 1.088 2.91.832.091-.647.35-1.088.636-1.339-2.22-.252-4.555-1.11-4.555-4.943 0-1.091.39-1.984 1.03-2.682-.104-.254-.447-1.27.097-2.646 0 0 .84-.269 2.75 1.025A9.548 9.548 0 0112 6.836c.85.004 1.705.114 2.504.336 1.909-1.294 2.748-1.025 2.748-1.025.546 1.376.203 2.392.1 2.646.64.698 1.028 1.591 1.028 2.682 0 3.841-2.337 4.687-4.565 4.935.359.309.678.919.678 1.852 0 1.336-.012 2.415-.012 2.743 0 .267.18.578.688.48C19.138 20.16 22 16.416 22 12c0-5.523-4.477-10-10-10z',\n 'npm': 'M3 3h18v18H3V3zm3 3v12h3V9h3v9h6V6H6z',\n 'yarn': 'M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5',\n 'facebook': 'M18 2h-3a5 5 0 00-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 011-1h3z',\n 'twitter': 'M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z',\n 'instagram': 'M16 11.37A4 4 0 1112.63 8 4 4 0 0116 11.37z M17.5 6.5h.01 M7 2h10a5 5 0 015 5v10a5 5 0 01-5 5H7a5 5 0 01-5-5V7a5 5 0 015-5z',\n 'linkedin': 'M16 8a6 6 0 016 6v7h-4v-7a2 2 0 00-2-2 2 2 0 00-2 2v7h-4v-7a6 6 0 016-6z M2 9h4v12H2z M6 4a2 2 0 11-4 0 2 2 0 014 0z',\n 'youtube': 'M22.54 6.42a2.78 2.78 0 00-1.94-2C18.88 4 12 4 12 4s-6.88 0-8.6.46a2.78 2.78 0 00-1.94 2A29 29 0 001 11.75a29 29 0 00.46 5.33A2.78 2.78 0 003.4 19c1.72.46 8.6.46 8.6.46s6.88 0 8.6-.46a2.78 2.78 0 001.94-2 29 29 0 00.46-5.25 29 29 0 00-.46-5.33zM9.75 15.02l5.75-3.27-5.75-3.27z',\n 'twitch': 'M21 2H3v16h5v4l4-4h5l4-4V2zm-10 9V7m5 4V7',\n 'android': 'M17.6 9.48l1.84-3.18c.16-.31.04-.69-.26-.85-.29-.15-.65-.06-.83.22l-1.88 3.24c-2.86-1.21-6.08-1.21-8.94 0L5.65 5.67c-.19-.28-.54-.38-.83-.22-.3.16-.42.54-.26.85l1.84 3.18C2.92 11.03 1 14.22 1 17.8h22c0-3.58-1.92-6.77-5.4-8.32zM7.5 15c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm9 0c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z',\n 'whatsapp': 'M12 2a10 10 0 018.5 15.5l-1.3 4.6-4.6-1.3A10 10 0 1112 2zm0 2a8 8 0 00-6.8 12.3l.5.8-.8 3.1 3.1-.8.8.5A8 8 0 1012 4zm4.5 11.5c-.2-.1-1.3-.7-1.5-.7-.2-.1-.4-.1-.5.1-.1.2-.6.7-.7.9-.1.1-.3.1-.5 0-.9-.4-1.6-1-2.2-1.8-.1-.2 0-.3.1-.4.1-.1.2-.2.3-.4 0-.1.1-.2.2-.3.1-.2.1-.3 0-.4-.1-.1-.5-1.2-.7-1.6-.2-.4-.4-.4-.5-.4h-.5c-.2 0-.5.1-.7.4-.2.3-.9.9-.9 2.1s.9 2.4 1 2.6c.1.1 1.8 2.8 4.4 3.9 1.6.7 2.2.7 3 .6.9-.1 1.9-.8 2.1-1.6.3-.8.3-1.5.2-1.6 0 0-.2-.1-.4-.2z',\n 'telegram': 'M22 2L11 13M22 2l-7 20-4-9-9-4 20-7z',\n 'figma': 'M5 5.5A3.5 3.5 0 018.5 2H12v7H8.5A3.5 3.5 0 015 5.5zM12 2¯h3.5a3.5 3.5 0 110 7H12V2zM12 12.5a3.5 3.5 0 11-7 0 3.5 3.5 0 017 0zm0 7a3.5 3.5 0 1 1-7 0 3.5 3.5 0 0 1 7 0z',\n 'react': 'M12 22c5.52 0 10-4.48 10-10S17.52 2 12 2 2 6.48 2 12s4.48 10 10 10zm0-18c4.41 0 8 3.59 8 8s-3.59 8-8 8-8-3.59-8-8 3.59-8 8-8zm0 2c3.31 0 6 2.69 6 6s-2.69 6-6 6-6-2.69-6-6 2.69-6 6-6z',\n 'google': 'M0 0h24v24H0z M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z',\n 'apple': 'M17.05 20.28c-.98.95-2.05.8-3.08.35-1.09-.46-2.09-.48-3.24 0-1.44.62-2.2.44-3.06-.35C2.79 15.25 3.51 7.59 9.05 7.31c1.35.07 2.29.74 3.08.8 1.18-.24 2.31-.93 3.57-.84 1.51.12 2.65.72 3.4 1.8-3.12 1.87-2.38 5.98.48 7.13-.57 1.5-1.31 2.99-2.53 4.09l-.01-.01zM12.03 7.25c-.15-2.23 1.66-4.07 3.74-4.25.29 2.58-2.34 4.5-3.74 4.25z',\n 'microsoft': 'M0 0h11.75v11.75H0zM12.25 0h11.75v11.75H12.25zM0 12.25h11.75v11.75H0zM12.25 12.25h11.75v11.75H12.25z',\n};\n\n/**\n * Icon Component\n * \n * Renders custom SVG icons without external dependencies.\n * \n * @param {string} icon - Icon name from the icon library\n * @param {string} className - Additional CSS classes\n * @param {string} size - Size preset: 'xs', 'sm', 'md', 'lg', 'xl' or custom size\n */\nconst Icon = ({\n icon,\n className = '',\n size = 'md', // Default size\n variant = 'outline', // 'outline' | 'solid'\n ...props\n}) => {\n // Size mapping\n const sizeClasses = {\n 'xs': 'w-3 h-3',\n 'sm': 'w-4 h-4',\n 'md': 'w-5 h-5',\n 'lg': 'w-6 h-6',\n 'xl': 'w-8 h-8',\n '2xl': 'w-10 h-10',\n };\n\n const sizeClass = sizeClasses[size] || sizeClasses['md'];\n\n // Handle solid variant\n let path = iconPaths[icon];\n if (variant === 'solid') {\n path = filledIconPaths[icon] || iconPaths[icon];\n }\n\n if (!path) {\n console.warn(`Icon \"${icon}\" not found in icon library`);\n return null;\n }\n\n // Determine fill/stroke based on variant and if path is defined\n const isSolid = variant === 'solid';\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill={isSolid ? \"currentColor\" : \"none\"}\n stroke={isSolid ? \"none\" : \"currentColor\"}\n strokeWidth={isSolid ? 0 : 2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={`inline-block flex-shrink-0 ${sizeClass} ${className}`}\n aria-hidden=\"true\"\n {...props}\n >\n <path d={path} fillRule={isSolid ? \"evenodd\" : \"nonzero\"} />\n </svg>\n );\n};\n\nIcon.propTypes = {\n icon: PropTypes.string.isRequired,\n className: PropTypes.string,\n size: PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl', '2xl']),\n variant: PropTypes.oneOf(['outline', 'solid']),\n};\n\n// Export the list of available icons for documentation\nexport const iconNames = Object.keys(iconPaths);\nexport const iconCategories = {\n 'Navigation & UI': ['chevron-down', 'chevron-up', 'chevron-left', 'chevron-right', 'arrow-left', 'arrow-right', 'arrow-up', 'arrow-down', 'menu', 'x', 'xmark', 'plus', 'minus', 'check', 'external-link'],\n 'Actions': ['search', 'filter', 'edit', 'trash', 'copy', 'download', 'upload', 'refresh', 'settings', 'cog'],\n 'Status & Alerts': ['info', 'circle-info', 'warning', 'triangle-exclamation', 'error', 'circle-exclamation', 'success', 'circle-check', 'question', 'circle-question'],\n 'Form Elements': ['eye', 'eye-slash', 'lock', 'unlock'],\n 'Communication': ['envelope', 'mail', 'phone', 'chat', 'comment', 'bell'],\n 'People': ['user', 'users', 'user-plus'],\n 'Media': ['image', 'camera', 'video', 'music', 'play', 'pause', 'stop'],\n 'Files & Documents': ['file', 'file-lines', 'folder', 'folder-open', 'document', 'clipboard'],\n 'Date & Time': ['calendar', 'calendar-days', 'clock', 'time'],\n 'Layout & Design': ['grid', 'list', 'list-check', 'table', 'columns'],\n 'Development': ['code', 'terminal', 'bug', 'database', 'server'],\n 'Commerce': ['cart', 'shopping-cart', 'credit-card', 'tag', 'tags', 'gift'],\n 'Shapes & Symbols': ['circle', 'circle-dot', 'square', 'square-check', 'heart', 'star', 'bookmark', 'flag'],\n 'Weather & Nature': ['sun', 'moon', 'cloud', 'cloud-arrow-up', 'cloud-arrow-down', 'lightning', 'bolt'],\n 'Misc': ['desktop', 'home', 'globe', 'location', 'map-pin', 'link', 'paper-plane', 'rocket', 'sparkles', 'wand-magic-sparkles', 'swatchbook', 'palette'],\n 'Brands': ['github', 'npm', 'yarn', 'facebook', 'instagram', 'linkedin', 'youtube', 'twitch', 'android', 'figma', 'react', 'telegram', 'apple'],\n\n\n};\n\nexport default Icon;\n","import React, { forwardRef } from 'react';\nimport PropTypes from 'prop-types';\nimport Icon from '../Icon';\n\nconst Button = forwardRef(({\n children,\n variant = 'primary', // primary, secondary, outline, ghost, danger\n size = 'md', // sm, md, lg\n color = 'violet', // violet, blue, emerald, rose, amber, black\n isLoading = false,\n startIcon,\n endIcon,\n fullWidth = false,\n disabled = false,\n className = '',\n type = 'button',\n ...props\n}, ref) => {\n\n // Color Configurations\n const colorConfig = {\n violet: {\n primary: 'bg-violet-600 hover:bg-violet-700 text-white shadow-violet-500/20',\n secondary: 'bg-violet-100 hover:bg-violet-200 text-violet-700 dark:bg-violet-500/20 dark:hover:bg-violet-500/30 dark:text-violet-300',\n outline: 'border-violet-200 hover:border-violet-300 text-violet-700 hover:bg-violet-50 dark:border-violet-700 dark:text-violet-300 dark:hover:bg-violet-500/10',\n ghost: 'text-violet-700 hover:bg-violet-50 dark:text-violet-300 dark:hover:bg-violet-500/10',\n ring: 'focus:ring-violet-500'\n },\n blue: {\n primary: 'bg-blue-600 hover:bg-blue-700 text-white shadow-blue-500/20',\n secondary: 'bg-blue-100 hover:bg-blue-200 text-blue-700 dark:bg-blue-500/20 dark:hover:bg-blue-500/30 dark:text-blue-300',\n outline: 'border-blue-200 hover:border-blue-300 text-blue-700 hover:bg-blue-50 dark:border-blue-700 dark:text-blue-300 dark:hover:bg-blue-500/10',\n ghost: 'text-blue-700 hover:bg-blue-50 dark:text-blue-300 dark:hover:bg-blue-500/10',\n ring: 'focus:ring-blue-500'\n },\n emerald: {\n primary: 'bg-emerald-600 hover:bg-emerald-700 text-white shadow-emerald-500/20',\n secondary: 'bg-emerald-100 hover:bg-emerald-200 text-emerald-700 dark:bg-emerald-500/20 dark:hover:bg-emerald-500/30 dark:text-emerald-300',\n outline: 'border-emerald-200 hover:border-emerald-300 text-emerald-700 hover:bg-emerald-50 dark:border-emerald-700 dark:text-emerald-300 dark:hover:bg-emerald-500/10',\n ghost: 'text-emerald-700 hover:bg-emerald-50 dark:text-emerald-300 dark:hover:bg-emerald-500/10',\n ring: 'focus:ring-emerald-500'\n },\n rose: {\n primary: 'bg-rose-600 hover:bg-rose-700 text-white shadow-rose-500/20',\n secondary: 'bg-rose-100 hover:bg-rose-200 text-rose-700 dark:bg-rose-500/20 dark:hover:bg-rose-500/30 dark:text-rose-300',\n outline: 'border-rose-200 hover:border-rose-300 text-rose-700 hover:bg-rose-50 dark:border-rose-700 dark:text-rose-300 dark:hover:bg-rose-500/10',\n ghost: 'text-rose-700 hover:bg-rose-50 dark:text-rose-300 dark:hover:bg-rose-500/10',\n ring: 'focus:ring-rose-500'\n },\n amber: {\n primary: 'bg-amber-500 hover:bg-amber-600 text-white shadow-amber-500/20',\n secondary: 'bg-amber-100 hover:bg-amber-200 text-amber-700 dark:bg-amber-500/20 dark:hover:bg-amber-500/30 dark:text-amber-300',\n outline: 'border-amber-200 hover:border-amber-300 text-amber-700 hover:bg-amber-50 dark:border-amber-700 dark:text-amber-300 dark:hover:bg-amber-500/10',\n ghost: 'text-amber-700 hover:bg-amber-50 dark:text-amber-300 dark:hover:bg-amber-500/10',\n ring: 'focus:ring-amber-500'\n },\n black: {\n primary: 'bg-slate-900 hover:bg-slate-800 text-white shadow-slate-900/20 dark:bg-white dark:text-slate-900 dark:hover:bg-slate-200',\n secondary: 'bg-slate-100 hover:bg-slate-200 text-slate-800 dark:bg-slate-800 dark:hover:bg-slate-700 dark:text-slate-200',\n outline: 'border-slate-200 hover:border-slate-300 text-slate-700 hover:bg-slate-50 dark:border-slate-700 dark:text-slate-300 dark:hover:bg-slate-800',\n ghost: 'text-slate-700 hover:bg-slate-100 dark:text-slate-300 dark:hover:bg-slate-800',\n ring: 'focus:ring-slate-500'\n }\n };\n\n // Size Configurations\n const sizeConfig = {\n sm: 'px-3 py-1.5 text-xs font-medium',\n md: 'px-4 py-2 text-sm font-medium',\n lg: 'px-5 py-2.5 text-base font-medium'\n };\n\n const colors = colorConfig[color] || colorConfig.violet;\n\n // Get variant styles\n let variantStyles = colors[variant] || colors.primary;\n\n // Special case for 'danger' variant (usually red regardless of theme, but fitting the component structure)\n // If variant is 'danger', we might want to force standard red/rose colors or use the current theme's 'rose' equivalent if not explicitly separate.\n // For consistency with specific request logic, let's treat 'danger' as a red-override if needed, \n // OR we can make 'danger' use the 'rose' palette if the user selected another color, \n // BUT usually 'danger' implies semantic error. \n // Let's map 'danger' to a hardcoded red style or just rely on 'rose' if color='rose'.\n // To keep it flexible, let's just stick to the requested colors. \n // If the user wants a red button, they use color=\"rose\". \n // HOWEVER, typical button libs have a semantic 'danger'. \n // Let's implement 'danger' as a specific override style using standard red/rose tokens regardless of 'color' prop,\n // OR just alias it to the 'rose' primary style.\n if (variant === 'danger') {\n variantStyles = 'bg-red-600 hover:bg-red-700 text-white shadow-red-500/20 focus:ring-red-500';\n }\n\n // Base Styles\n // If outline, add border width. \n const isOutline = variant === 'outline';\n const borderClass = isOutline ? 'border' : '';\n\n return (\n <button\n ref={ref}\n type={type}\n disabled={disabled || isLoading}\n className={`\n relative inline-flex items-center justify-center gap-2\n rounded-lg transition-all duration-200\n focus:outline-none focus:ring-2 focus:ring-offset-1 dark:focus:ring-offset-slate-950\n disabled:opacity-60 disabled:cursor-not-allowed\n shadow-sm hover:shadow-md active:scale-[0.98]\n ${sizeConfig[size]}\n ${variantStyles}\n ${colors.ring}\n ${borderClass}\n ${fullWidth ? 'w-full' : ''}\n ${className}\n `}\n {...props}\n >\n {/* Loading Spinner */}\n {isLoading && (\n <svg className=\"animate-spin -ml-1 h-4 w-4 text-current\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\"></circle>\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n )}\n\n {/* Start Icon */}\n {!isLoading && startIcon && (\n <Icon icon={startIcon} size={size === 'sm' ? 'xs' : 'sm'} />\n )}\n\n {/* Children (Text) */}\n <span>{children}</span>\n\n {/* End Icon */}\n {!isLoading && endIcon && (\n <Icon icon={endIcon} size={size === 'sm' ? 'xs' : 'sm'} />\n )}\n </button>\n );\n});\n\nButton.displayName = 'Button';\n\nButton.propTypes = {\n children: PropTypes.node.isRequired,\n variant: PropTypes.oneOf(['primary', 'secondary', 'outline', 'ghost', 'danger']),\n size: PropTypes.oneOf(['sm', 'md', 'lg']),\n color: PropTypes.oneOf(['violet', 'blue', 'emerald', 'rose', 'amber', 'black']),\n isLoading: PropTypes.bool,\n startIcon: PropTypes.string,\n endIcon: PropTypes.string,\n fullWidth: PropTypes.bool,\n disabled: PropTypes.bool,\n className: PropTypes.string,\n type: PropTypes.oneOf(['button', 'submit', 'reset'])\n};\n\nexport default Button;\n","import React, { createContext, useContext, useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport Icon from '../Icon';\n\nconst CheckboxContext = createContext(null);\n\n/**\n * CheckboxGroup Component - Manages state for a group of Checkboxes\n */\nexport const CheckboxGroup = ({\n children,\n value,\n defaultValue = [],\n onChange,\n orientation = 'vertical',\n label,\n description,\n error,\n className = '',\n // Shared props for children\n size = 'md',\n color = 'violet',\n variant = 'simple', // simple, card\n disabled = false\n}) => {\n // Determine if controlled or uncontrolled\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState(defaultValue);\n\n // The actual array of selected values\n const currentValues = isControlled ? value : internalValue;\n\n const handleChildChange = (childValue, isChecked) => {\n let newValues;\n if (isChecked) {\n // Add to array if not already present\n newValues = [...currentValues, childValue];\n } else {\n // Remove from array\n newValues = currentValues.filter(v => v !== childValue);\n }\n\n if (!isControlled) {\n setInternalValue(newValues);\n }\n\n onChange?.(newValues);\n };\n\n return (\n <CheckboxContext.Provider value={{\n values: currentValues,\n onChange: handleChildChange,\n size,\n color,\n variant,\n disabledGrp: disabled\n }}>\n <div className={`flex flex-col gap-2 ${className}`}>\n {/* Group Label */}\n {label && (\n <label className=\"text-sm font-medium text-slate-700 dark:text-slate-300\">\n {label}\n </label>\n )}\n\n {/* Description */}\n {description && (\n <p className=\"text-xs text-slate-500 dark:text-slate-400 -mt-1 mb-1\">\n {description}\n </p>\n )}\n\n {/* Options Container */}\n <div className={`\n flex gap-3\n ${orientation === 'vertical' ? 'flex-col' : 'flex-row flex-wrap'}\n `}>\n {children}\n </div>\n\n {/* Error Message */}\n {error && (\n <p className=\"text-xs text-red-500 mt-1 flex items-center gap-1\">\n <Icon icon=\"circle-exclamation\" variant=\"fas\" />\n {error}\n </p>\n )}\n </div>\n </CheckboxContext.Provider>\n );\n};\n\n// Colors for the checkbox\nconst colorConfig = {\n violet: {\n checked: 'bg-violet-500 border-violet-500',\n ring: 'focus:ring-violet-500',\n text: 'text-violet-700 dark:text-violet-300',\n bg: 'bg-violet-50 dark:bg-violet-900/20',\n border: 'border-violet-500/50'\n },\n blue: {\n checked: 'bg-blue-500 border-blue-500',\n ring: 'focus:ring-blue-500',\n text: 'text-blue-700 dark:text-blue-300',\n bg: 'bg-blue-50 dark:bg-blue-900/20',\n border: 'border-blue-500/50'\n },\n emerald: {\n checked: 'bg-emerald-500 border-emerald-500',\n ring: 'focus:ring-emerald-500',\n text: 'text-emerald-700 dark:text-emerald-300',\n bg: 'bg-emerald-50 dark:bg-emerald-900/20',\n border: 'border-emerald-500/50'\n },\n rose: {\n checked: 'bg-rose-500 border-rose-500',\n ring: 'focus:ring-rose-500',\n text: 'text-rose-700 dark:text-rose-300',\n bg: 'bg-rose-50 dark:bg-rose-900/20',\n border: 'border-rose-500/50'\n },\n amber: {\n checked: 'bg-amber-500 border-amber-500',\n ring: 'focus:ring-amber-500',\n text: 'text-amber-700 dark:text-amber-300',\n bg: 'bg-amber-50 dark:bg-amber-900/20',\n border: 'border-amber-500/50'\n },\n black: {\n checked: 'bg-slate-900 border-slate-900 dark:bg-white dark:border-white',\n ring: 'focus:ring-slate-500',\n text: 'text-slate-900 dark:text-white',\n bg: 'bg-slate-100 dark:bg-slate-800',\n border: 'border-slate-900/50 dark:border-white/50'\n }\n};\n\n/**\n * Checkbox Component - Individual checkbox\n */\nconst Checkbox = ({\n value,\n label,\n description,\n icon,\n disabled = false,\n className = '',\n style,\n // Direct props (override context)\n checked,\n defaultChecked,\n onChange, // only for standalone\n size,\n color,\n variant,\n indeterminate = false\n}) => {\n const context = useContext(CheckboxContext);\n\n // Resolve props (context vs direct)\n const isGrouped = context !== null;\n const finalSize = size || (context?.size || 'md');\n const finalColor = color || (context?.color || 'violet');\n const finalVariant = variant || (context?.variant || 'simple');\n const finalDisabled = disabled || (context?.disabledGrp || false);\n\n // State for standalone usage\n const [internalChecked, setInternalChecked] = useState(defaultChecked || false);\n\n // If grouped, checked status depends on context.values\n // If standalone, controlled uses `checked`, uncontrolled uses `internalChecked`\n const isChecked = isGrouped\n ? context.values.includes(value)\n : (checked !== undefined ? checked : internalChecked);\n\n const handleChange = (e) => {\n if (finalDisabled) return;\n\n const newChecked = e.target.checked;\n\n if (isGrouped) {\n context.onChange(value, newChecked);\n } else {\n if (checked === undefined) {\n setInternalChecked(newChecked);\n }\n onChange?.(newChecked, e);\n }\n };\n\n const colors = colorConfig[finalColor] || colorConfig.violet;\n\n // Size logic\n const sizeClasses = {\n sm: { box: 'w-4 h-4 rounded', icon: 'text-[10px]', text: 'text-xs', p: 'p-3' },\n md: { box: 'w-5 h-5 rounded-md', icon: 'text-xs', text: 'text-sm', p: 'p-4' },\n lg: { box: 'w-6 h-6 rounded-md', icon: 'text-sm', text: 'text-base', p: 'p-5' }\n }[finalSize];\n\n // Card Variant Logic\n if (finalVariant === 'card') {\n return (\n <label\n className={`\n relative flex items-start gap-4 cursor-pointer rounded-xl border-2 transition-all duration-200\n ${sizeClasses.p}\n ${isChecked\n ? `${colors.border} ${colors.bg} shadow-sm ring-1 ${colors.ring.replace('focus:', '')}`\n : 'border-slate-200 dark:border-slate-700 hover:border-slate-300 dark:hover:border-slate-600 hover:bg-slate-50 dark:hover:bg-slate-800'\n }\n ${finalDisabled ? 'opacity-50 cursor-not-allowed grayscale' : ''}\n ${className}\n `}\n style={style}\n >\n <input\n type=\"checkbox\"\n checked={isChecked}\n onChange={handleChange}\n disabled={finalDisabled}\n className=\"sr-only\"\n />\n\n {/* Custom Checkbox */}\n <div className={`\n flex-shrink-0 border-2 flex items-center justify-center transition-all duration-200\n ${sizeClasses.box}\n ${isChecked ? colors.checked : 'border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-900'}\n `}>\n {isChecked && (\n <Icon icon=\"check\" variant=\"fas\" className=\"text-white dark:text-slate-900\" />\n )}\n </div>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2 mb-1\">\n {icon && (\n <Icon\n icon={icon}\n variant=\"fas\"\n className={isChecked ? colors.text : 'text-slate-400'}\n />\n )}\n <span className={`font-semibold ${sizeClasses.text} ${isChecked ? 'text-slate-900 dark:text-white' : 'text-slate-700 dark:text-slate-300'}`}>\n {label}\n </span>\n </div>\n {description && (\n <p className=\"text-xs text-slate-500 dark:text-slate-400 leading-relaxed\">\n {description}\n </p>\n )}\n </div>\n </label>\n );\n }\n\n // Simple Variant (Default)\n return (\n <label\n className={`\n inline-flex items-start gap-3 cursor-pointer group\n ${finalDisabled ? 'opacity-50 cursor-not-allowed' : ''}\n ${className}\n `}\n style={style}\n >\n <div className=\"relative flex items-center mt-0.5\">\n <input\n type=\"checkbox\"\n checked={isChecked}\n onChange={handleChange}\n disabled={finalDisabled}\n className=\"peer sr-only\"\n />\n <div className={`\n ${sizeClasses.box}\n border-2 transition-all duration-200 flex items-center justify-center\n peer-focus:ring-2 peer-focus:ring-offset-1 peer-focus:ring-offset-white dark:peer-focus:ring-offset-slate-950 ${colors.ring}\n ${isChecked || indeterminate\n ? colors.checked\n : 'border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-900 group-hover:border-slate-400 dark:group-hover:border-slate-500'\n }\n `}>\n {indeterminate ? (\n <Icon icon=\"minus\" variant=\"fas\" className={`text-white dark:text-slate-900 ${sizeClasses.icon}`} />\n ) : (\n <Icon\n icon=\"check\"\n variant=\"fas\"\n className={`\n text-white dark:text-slate-900 transition-opacity duration-200\n ${sizeClasses.icon}\n ${isChecked ? 'opacity-100' : 'opacity-0'}\n `}\n />\n )}\n </div>\n </div>\n\n {(label || description) && (\n <div className=\"flex flex-col\">\n {label && (\n <span className={`${sizeClasses.text} font-medium text-slate-700 dark:text-slate-200 group-hover:text-slate-900 dark:group-hover:text-white transition-colors`}>\n {label}\n </span>\n )}\n {description && (\n <span className=\"text-xs text-slate-500 dark:text-slate-400\">\n {description}\n </span>\n )}\n </div>\n )}\n </label>\n );\n};\n\nCheckboxGroup.propTypes = {\n children: PropTypes.node,\n value: PropTypes.array,\n defaultValue: PropTypes.array,\n onChange: PropTypes.func,\n orientation: PropTypes.oneOf(['horizontal', 'vertical']),\n label: PropTypes.string,\n description: PropTypes.string,\n error: PropTypes.string,\n className: PropTypes.string,\n size: PropTypes.oneOf(['sm', 'md', 'lg']),\n color: PropTypes.oneOf(['violet', 'blue', 'emerald', 'rose', 'amber', 'black']),\n variant: PropTypes.oneOf(['simple', 'card']),\n disabled: PropTypes.bool\n};\n\nCheckbox.propTypes = {\n value: PropTypes.any,\n label: PropTypes.string,\n description: PropTypes.string,\n icon: PropTypes.string,\n disabled: PropTypes.bool,\n className: PropTypes.string,\n style: PropTypes.object,\n checked: PropTypes.bool,\n defaultChecked: PropTypes.bool,\n onChange: PropTypes.func,\n size: PropTypes.oneOf(['sm', 'md', 'lg']),\n color: PropTypes.oneOf(['violet', 'blue', 'emerald', 'rose', 'amber', 'black']),\n variant: PropTypes.oneOf(['simple', 'card']),\n indeterminate: PropTypes.bool\n};\n\nCheckbox.Group = CheckboxGroup;\nexport default Checkbox;\n","import React, { useState, useEffect, useRef, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport Icon from '../Icon';\nimport { motion, AnimatePresence } from 'motion/react';\n\n// --- Date Helpers ---\nconst daysInMonth = (year, month) => new Date(year, month + 1, 0).getDate();\nconst getDayOfWeek = (year, month, day) => new Date(year, month, day).getDay(); // 0 = Sun\n\nconst formatDate = (date, type) => {\n if (!date) return '';\n const d = new Date(date);\n if (isNaN(d.getTime())) return '';\n\n const pad = (n) => n.toString().padStart(2, '0');\n\n // Simple custom formatters\n const monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\n const day = d.getDate();\n const month = d.getMonth();\n const year = d.getFullYear();\n const hours = d.getHours();\n const minutes = d.getMinutes();\n\n // Time formatting\n const ampm = hours >= 12 ? 'PM' : 'AM';\n const h12 = hours % 12 || 12;\n const timeStr = `${h12}:${pad(minutes)} ${ampm}`;\n\n if (type === 'time') return timeStr;\n if (type === 'date') return `${monthNames[month]} ${day}, ${year}`;\n return `${monthNames[month]} ${day}, ${year} ${timeStr}`;\n};\n\nconst isSameDay = (d1, d2) => {\n if (!d1 || !d2) return false;\n return d1.getDate() === d2.getDate() &&\n d1.getMonth() === d2.getMonth() &&\n d1.getFullYear() === d2.getFullYear();\n};\n\n/**\n * DateTimePicker Component\n */\nconst DateTimePicker = ({\n value,\n onChange,\n type = 'date', // date, time, datetime\n label,\n helperText,\n error,\n placeholder = 'Select date...',\n minDate,\n maxDate,\n disabled = false,\n color = 'violet',\n size = 'md',\n variant = 'outlined', // outlined, filled\n className = '',\n fullWidth = false,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const containerRef = useRef(null);\n const yearScrollRef = useRef(null);\n\n // Internal state for the calendar view (even if value is null)\n const initialViewDate = value ? new Date(value) : new Date();\n const [viewDate, setViewDate] = useState(initialViewDate); // For navigating months\n const [selectedDate, setSelectedDate] = useState(value ? new Date(value) : null);\n\n // 'days', 'months', 'years'\n const [viewMode, setViewMode] = useState('days');\n\n // Update internal state when props change\n useEffect(() => {\n if (value) {\n const d = new Date(value);\n setSelectedDate(d);\n setViewDate(d);\n } else {\n setSelectedDate(null);\n }\n }, [value]);\n\n // Close on click outside and reset view\n useEffect(() => {\n const handleClickOutside = (event) => {\n if (containerRef.current && !containerRef.current.contains(event.target)) {\n setIsOpen(false);\n setTimeout(() => setViewMode('days'), 200); // Reset after animation\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n // Scroll to year when opening year view\n useEffect(() => {\n if (viewMode === 'years' && yearScrollRef.current) {\n const el = yearScrollRef.current.querySelector('[data-selected-year=\"true\"]');\n if (el) {\n el.scrollIntoView({ block: 'center', behavior: 'auto' });\n }\n }\n }, [viewMode]);\n\n // Color configs\n const colors = {\n violet: {\n active: 'bg-violet-500 text-white',\n hover: 'hover:bg-violet-50 dark:hover:bg-violet-900/30 text-slate-700 dark:text-slate-300',\n text: 'text-violet-600 dark:text-violet-400',\n today: 'text-violet-600 font-bold',\n ring: 'focus:ring-violet-500/20',\n border: 'focus:border-violet-500',\n icon: 'text-violet-500'\n },\n blue: {\n active: 'bg-blue-500 text-white',\n hover: 'hover:bg-blue-50 dark:hover:bg-blue-900/30 text-slate-700 dark:text-slate-300',\n text: 'text-blue-600 dark:text-blue-400',\n today: 'text-blue-600 font-bold',\n ring: 'focus:ring-blue-500/20',\n border: 'focus:border-blue-500',\n icon: 'text-blue-500'\n },\n emerald: {\n active: 'bg-emerald-500 text-white',\n hover: 'hover:bg-emerald-50 dark:hover:bg-emerald-900/30 text-slate-700 dark:text-slate-300',\n text: 'text-emerald-600 dark:text-emerald-400',\n today: 'text-emerald-600 font-bold',\n ring: 'focus:ring-emerald-500/20',\n border: 'focus:border-emerald-500',\n icon: 'text-emerald-500'\n },\n rose: {\n active: 'bg-rose-500 text-white',\n hover: 'hover:bg-rose-50 dark:hover:bg-rose-900/30 text-slate-700 dark:text-slate-300',\n text: 'text-rose-600 dark:text-rose-400',\n today: 'text-rose-600 font-bold',\n ring: 'focus:ring-rose-500/20',\n border: 'focus:border-rose-500',\n icon: 'text-rose-500'\n },\n amber: {\n active: 'bg-amber-500 text-white',\n hover: 'hover:bg-amber-50 dark:hover:bg-amber-900/30 text-slate-700 dark:text-slate-300',\n text: 'text-amber-600 dark:text-amber-400',\n today: 'text-amber-600 font-bold',\n ring: 'focus:ring-amber-500/20',\n border: 'focus:border-amber-500',\n icon: 'text-amber-500'\n },\n black: {\n active: 'bg-slate-900 text-white dark:bg-white dark:text-slate-900',\n hover: 'hover:bg-slate-100 dark:hover:bg-slate-800 text-slate-700 dark:text-slate-300',\n text: 'text-slate-900 dark:text-white',\n today: 'text-slate-900 dark:text-white font-bold',\n ring: 'focus:ring-slate-500/20',\n border: 'focus:border-slate-900 dark:focus:border-slate-100',\n icon: 'text-slate-900 dark:text-white'\n },\n }[color] || colors.violet;\n\n // Handlers\n const handleDateClick = (day) => {\n const newDate = new Date(viewDate.getFullYear(), viewDate.getMonth(), day);\n\n if (selectedDate && type !== 'date') {\n newDate.setHours(selectedDate.getHours());\n newDate.setMinutes(selectedDate.getMinutes());\n } else if (!selectedDate) {\n const now = new Date();\n newDate.setHours(now.getHours());\n newDate.setMinutes(now.getMinutes());\n }\n\n setSelectedDate(newDate);\n onChange?.(newDate);\n\n if (type === 'date') setIsOpen(false);\n };\n\n const handleMonthSelect = (monthIdx) => {\n const newDate = new Date(viewDate.getFullYear(), monthIdx, 1);\n setViewDate(newDate);\n setViewMode('days');\n };\n\n const handleYearSelect = (year) => {\n const newDate = new Date(year, viewDate.getMonth(), 1);\n setViewDate(newDate);\n setViewMode('months'); // Go to month selection after year\n };\n\n const handleTimeChange = (type, val) => {\n const d = selectedDate ? new Date(selectedDate) : new Date();\n const safeVal = isNaN(val) ? 0 : val;\n if (type === 'hour') d.setHours(safeVal);\n if (type === 'minute') d.setMinutes(safeVal);\n setSelectedDate(d);\n onChange?.(d);\n };\n\n const navigateMonth = (dir) => {\n const newDate = new Date(viewDate.getFullYear(), viewDate.getMonth() + dir, 1);\n setViewDate(newDate);\n };\n\n // Calendar Grid Generation\n const generateCalendar = () => {\n const year = viewDate.getFullYear();\n const month = viewDate.getMonth();\n\n const firstDay = getDayOfWeek(year, month, 1);\n const days = daysInMonth(year, month);\n const prevMonthDays = daysInMonth(year, month - 1);\n\n const grid = [];\n\n // Previous month filler\n for (let i = 0; i < firstDay; i++) {\n grid.push({ day: prevMonthDays - firstDay + 1 + i, type: 'prev' });\n }\n\n // Current month\n for (let i = 1; i <= days; i++) {\n grid.push({ day: i, type: 'current' });\n }\n\n // Next month filler\n const remaining = 42 - grid.length; // 6 rows * 7 cols\n for (let i = 1; i <= remaining; i++) {\n grid.push({ day: i, type: 'next' });\n }\n\n return grid;\n };\n\n const calendarGrid = useMemo(() => generateCalendar(), [viewDate]);\n const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\n const weekDays = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\n\n // Generate years (1900 - 2100)\n const years = useMemo(() => {\n const currentYear = new Date().getFullYear();\n const yrs = [];\n for (let i = 1900; i <= currentYear + 100; i++) {\n yrs.push(i);\n }\n return yrs;\n }, []);\n\n // Styles based on variant/size\n const inputClasses = `\n w-full flex items-center justify-between transition-all duration-200 cursor-pointer\n ${size === 'sm' ? 'px-3 py-2 text-sm' : ''}\n ${size === 'md' ? 'px-4 py-2.5 text-sm' : ''}\n ${size === 'lg' ? 'px-5 py-3 text-base' : ''}\n ${variant === 'outlined'\n ? 'bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-700 hover:border-slate-300 dark:hover:border-slate-600'\n : 'bg-slate-50 dark:bg-slate-800/50 border border-transparent hover:bg-slate-100 dark:hover:bg-slate-800'\n }\n ${error ? 'border-red-300 focus:border-red-500 focus:ring-red-500/20' : `${isOpen ? colors.border : ''} focus:ring-4 ${colors.ring}`}\n ${disabled ? 'opacity-50 cursor-not-allowed bg-slate-50 dark:bg-slate-900' : 'hover:shadow-sm'}\n rounded-xl outline-none\n `;\n\n return (\n <div\n className={`relative ${fullWidth ? 'w-full' : 'w-72'} ${className}`}\n ref={containerRef}\n >\n {/* Label */}\n {label && (\n <label className=\"block text-sm font-medium text-slate-700 dark:text-slate-300 mb-1.5 ml-1\">\n {label}\n </label>\n )}\n\n {/* Trigger Input */}\n <div\n className={inputClasses}\n onClick={() => !disabled && setIsOpen(!isOpen)}\n role=\"button\"\n tabIndex={0}\n >\n <div className=\"flex items-center gap-3 overflow-hidden\">\n <Icon\n icon={type === 'time' ? 'clock' : 'calendar-days'}\n variant=\"far\"\n className={`${selectedDate ? colors.icon : 'text-slate-400'} flex-shrink-0`}\n />\n <span className={`block truncate ${selectedDate ? 'text-slate-900 dark:text-white' : 'text-slate-400'}`}>\n {selectedDate ? formatDate(selectedDate, type) : placeholder}\n </span>\n </div>\n {!disabled && (\n <Icon\n icon=\"chevron-down\"\n variant=\"fas\"\n className={`text-slate-400 text-xs transition-transform duration-200 ${isOpen ? 'rotate-180' : ''}`}\n />\n )}\n </div>\n\n {/* Error & Helper Text */}\n {(error || helperText) && (\n <div className=\"mt-1.5 ml-1 text-xs\">\n {error ? (\n <span className=\"text-red-500 flex items-center gap-1\">\n <Icon icon=\"circle-exclamation\" variant=\"fas\" />\n {error}\n </span>\n ) : (\n <span className=\"text-slate-500 dark:text-slate-400\">{helperText}</span>\n )}\n </div>\n )}\n\n {/* Popover */}\n <AnimatePresence>\n {isOpen && (\n <motion.div\n initial={{ opacity: 0, y: 8, scale: 0.95 }}\n animate={{ opacity: 1, y: 0, scale: 1 }}\n exit={{ opacity: 0, y: 8, scale: 0.95 }}\n transition={{ duration: 0.15 }}\n className=\"absolute top-full left-0 mt-2 z-50 bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-700 rounded-2xl shadow-xl overflow-hidden min-w-[320px] w-fit\"\n >\n\n\n <div className=\"flex flex-col sm:flex-row\">\n {/* Views Container */}\n {type !== 'time' && (\n <div className=\"text-sm flex-1 min-w-[320px]\">\n <div className=\"p-4 border-b border-slate-100 dark:border-slate-800 flex items-center justify-between bg-slate-50/50 dark:bg-slate-800/20\">\n {viewMode === 'days' && (\n <>\n <button\n onClick={() => navigateMonth(-1)}\n className=\"p-1.5 rounded-lg hover:bg-slate-200/50 dark:hover:bg-slate-700 text-slate-500 transition-colors\"\n >\n <Icon icon=\"chevron-left\" variant=\"fas\" className=\"text-xs\" />\n </button>\n <button\n onClick={() => setViewMode('years')}\n className={`font-semibold text-sm ${colors.text} hover:opacity-80 transition-opacity`}\n >\n {months[viewDate.getMonth()]} {viewDate.getFullYear()}\n </button>\n <button\n onClick={() => navigateMonth(1)}\n className=\"p-1.5 rounded-lg hover:bg-slate-200/50 dark:hover:bg-slate-700 text-slate-500 transition-colors\"\n >\n <Icon icon=\"chevron-right\" variant=\"fas\" className=\"text-xs\" />\n </button>\n </>\n )}\n {(viewMode === 'months' || viewMode === 'years') && (\n <div className=\"flex items-center justify-center w-full relative\">\n <button\n onClick={() => setViewMode(viewMode === 'years' ? 'days' : 'years')}\n className=\"absolute left-0 p-1.5 rounded-lg hover:bg-slate-200/50 dark:hover:bg-slate-700 text-slate-500\"\n >\n <Icon icon=\"arrow-left\" variant=\"fas\" className=\"text-xs\" />\n </button>\n <span className=\"font-semibold text-slate-900 dark:text-white\">\n {viewMode === 'years' ? 'Select Year' : 'Select Month'}\n </span>\n </div>\n )}\n </div>\n\n <div className=\"p-4\">\n {/* Days View */}\n {viewMode === 'days' && (\n <>\n <div className=\"grid grid-cols-7 mb-2\">\n {weekDays.map(d => (\n <div key={d} className=\"text-center text-[11px] font-bold text-slate-400 uppercase tracking-wide py-1\">\n {d}\n </div>\n ))}\n </div>\n <div className=\"grid grid-cols-7 gap-1\">\n {calendarGrid.map((cell, idx) => {\n if (cell.type !== 'current') {\n return <div key={idx} className=\"h-9\" />;\n }\n\n const cellDate = new Date(viewDate.getFullYear(), viewDate.getMonth(), cell.day);\n const isSelected = selectedDate && isSameDay(selectedDate, cellDate);\n const isToday = isSameDay(new Date(), cellDate);\n\n return (\n <button\n key={idx}\n onClick={() => handleDateClick(cell.day)}\n className={`\n h-9 w-9 rounded-lg flex items-center justify-center transition-all duration-200 font-medium\n ${isSelected ? colors.active : colors.hover}\n ${!isSelected && isToday ? colors.today : ''}\n ${!isSelected && !isToday ? 'text-slate-600 dark:text-slate-300' : ''}\n `}\n >\n {cell.day}\n </button>\n );\n })}\n </div>\n </>\n )}\n\n {/* Months View */}\n {viewMode === 'months' && (\n <div className=\"grid grid-cols-3 gap-2\">\n {months.map((m, idx) => (\n <button\n key={m}\n onClick={() => handleMonthSelect(idx)}\n className={`\n p-2 rounded-lg text-sm transition-all\n ${viewDate.getMonth() === idx ? colors.active : colors.hover}\n `}\n >\n {m.substring(0, 3)}\n </button>\n ))}\n </div>\n )}\n\n {/* Years View */}\n {viewMode === 'years' && (\n <div className=\"h-64 overflow-y-auto custom-scrollbar pr-2\" ref={yearScrollRef}>\n <div className=\"grid grid-cols-4 gap-2\">\n {years.map((y) => (\n <button\n key={y}\n data-selected-year={viewDate.getFullYear() === y}\n onClick={() => handleYearSelect(y)}\n className={`\n p-2 rounded-lg text-sm transition-all\n ${viewDate.getFullYear() === y ? colors.active : colors.hover}\n `}\n >\n {y}\n </button>\n ))}\n </div>\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* Time Picker Column */}\n {(type === 'time' || type === 'datetime') && (\n <div className={`\n flex flex-col items-center justify-center gap-4 p-6\n ${type === 'time'\n ? 'w-full min-w-[240px]'\n : 'border-l border-slate-100 dark:border-slate-800 bg-slate-50/30 dark:bg-slate-800/10 sm:w-auto'\n }\n `}>\n {/* Time Header */}\n <div className=\"text-xs font-bold text-slate-400 uppercase tracking-wider\">\n Time\n </div>\n\n {/* Hour:Minute Inputs */}\n <div className=\"flex items-center justify-center gap-3\">\n <div className=\"flex flex-col gap-1.5 items-center\">\n <label className=\"text-[10px] text-slate-400 font-medium uppercase tracking-wide\">Hour</label>\n <input\n type=\"number\"\n min=\"0\" max=\"23\"\n className={`\n w-16 h-14 rounded-xl bg-white dark:bg-slate-800 \n border-2 border-slate-200 dark:border-slate-700 \n text-center text-xl font-semibold \n text-slate-900 dark:text-white\n focus:ring-2 ${colors.ring} outline-none \n transition-all ${colors.border}\n hover:border-slate-300 dark:hover:border-slate-600\n `}\n value={selectedDate ? selectedDate.getHours() : 12}\n onChange={(e) => handleTimeChange('hour', parseInt(e.target.value))}\n />\n </div>\n\n <span className=\"text-slate-300 dark:text-slate-600 text-2xl font-bold mt-6\">:</span>\n\n <div className=\"flex flex-col gap-1.5 items-center\">\n <label className=\"text-[10px] text-slate-400 font-medium uppercase tracking-wide\">Minute</label>\n <input\n type=\"number\"\n min=\"0\" max=\"59\"\n className={`\n w-16 h-14 rounded-xl bg-white dark:bg-slate-800 \n border-2 border-slate-200 dark:border-slate-700 \n text-center text-xl font-semibold \n text-slate-900 dark:text-white\n focus:ring-2 ${colors.ring} outline-none \n transition-all ${colors.border}\n hover:border-slate-300 dark:hover:border-slate-600\n `}\n value={selectedDate ? selectedDate.getMinutes() : 0}\n onChange={(e) => handleTimeChange('minute', parseInt(e.target.value))}\n />\n </div>\n </div>\n\n {/* Formatted Time Display */}\n <div className={`text-base font-semibold ${colors.text}`}>\n {selectedDate ? formatDate(selectedDate, 'time') : '--:-- --'}\n </div>\n </div>\n )}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n};\n\nDateTimePicker.propTypes = {\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.instanceOf(Date)]),\n onChange: PropTypes.func,\n type: PropTypes.oneOf(['date', 'time', 'datetime']),\n label: PropTypes.string,\n helperText: PropTypes.string,\n error: PropTypes.string,\n placeholder: PropTypes.string,\n minDate: PropTypes.oneOfType([PropTypes.string, PropTypes.instanceOf(Date)]),\n maxDate: PropTypes.oneOfType([PropTypes.string, PropTypes.instanceOf(Date)]),\n disabled: PropTypes.bool,\n color: PropTypes.oneOf(['violet', 'blue', 'emerald', 'rose', 'amber', 'black']),\n size: PropTypes.oneOf(['sm', 'md', 'lg']),\n variant: PropTypes.oneOf(['outlined', 'filled']),\n className: PropTypes.string,\n fullWidth: PropTypes.bool,\n};\n\nexport default DateTimePicker;\n","import React, { useState, useRef, useCallback, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport Icon from '../Icon';\n\nconst formatBytes = (bytes, decimals = 2) => {\n if (!+bytes) return '0 Bytes';\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;\n};\n\nconst colorConfig = {\n violet: {\n active: 'border-violet-500 bg-violet-50 dark:bg-violet-900/10',\n text: 'text-violet-600 dark:text-violet-400',\n icon: 'text-violet-500',\n ring: 'focus:ring-violet-500/20',\n // Button style variants\n primary: 'bg-violet-600 hover:bg-violet-700 text-white shadow-violet-500/20',\n secondary: 'bg-violet-100 hover:bg-violet-200 text-violet-700 dark:bg-violet-500/20 dark:hover:bg-violet-500/30 dark:text-violet-300',\n outline: 'border border-violet-200 hover:border-violet-300 text-violet-700 hover:bg-violet-50 dark:border-violet-700 dark:text-violet-300 dark:hover:bg-violet-500/10 bg-transparent',\n ghost: 'text-violet-700 hover:bg-violet-50 dark:text-violet-300 dark:hover:bg-violet-500/10 bg-transparent'\n },\n blue: {\n active: 'border-blue-500 bg-blue-50 dark:bg-blue-900/10',\n text: 'text-blue-600 dark:text-blue-400',\n icon: 'text-blue-500',\n ring: 'focus:ring-blue-500/20',\n primary: 'bg-blue-600 hover:bg-blue-700 text-white shadow-blue-500/20',\n secondary: 'bg-blue-100 hover:bg-blue-200 text-blue-700 dark:bg-blue-500/20 dark:hover:bg-blue-500/30 dark:text-blue-300',\n outline: 'border border-blue-200 hover:border-blue-300 text-blue-700 hover:bg-blue-50 dark:border-blue-700 dark:text-blue-300 dark:hover:bg-blue-500/10 bg-transparent',\n ghost: 'text-blue-700 hover:bg-blue-50 dark:text-blue-300 dark:hover:bg-blue-500/10 bg-transparent'\n },\n emerald: {\n active: 'border-emerald-500 bg-emerald-50 dark:bg-emerald-900/10',\n text: 'text-emerald-600 dark:text-emerald-400',\n icon: 'text-emerald-500',\n ring: 'focus:ring-emerald-500/20',\n primary: 'bg-emerald-600 hover:bg-emerald-700 text-white shadow-emerald-500/20',\n secondary: 'bg-emerald-100 hover:bg-emerald-200 text-emerald-700 dark:bg-emerald-500/20 dark:hover:bg-emerald-500/30 dark:text-emerald-300',\n outline: 'border border-emerald-200 hover:border-emerald-300 text-emerald-700 hover:bg-emerald-50 dark:border-emerald-700 dark:text-emerald-300 dark:hover:bg-emerald-500/10 bg-transparent',\n ghost: 'text-emerald-700 hover:bg-emerald-50 dark:text-emerald-300 dark:hover:bg-emerald-500/10 bg-transparent'\n },\n rose: {\n active: 'border-rose-500 bg-rose-50 dark:bg-rose-900/10',\n text: 'text-rose-600 dark:text-rose-400',\n icon: 'text-rose-500',\n ring: 'focus:ring-rose-500/20',\n primary: 'bg-rose-600 hover:bg-rose-700 text-white shadow-rose-500/20',\n secondary: 'bg-rose-100 hover:bg-rose-200 text-rose-700 dark:bg-rose-500/20 dark:hover:bg-rose-500/30 dark:text-rose-300',\n outline: 'border border-rose-200 hover:border-rose-300 text-rose-700 hover:bg-rose-50 dark:border-rose-700 dark:text-rose-300 dark:hover:bg-rose-500/10 bg-transparent',\n ghost: 'text-rose-700 hover:bg-rose-50 dark:text-rose-300 dark:hover:bg-rose-500/10 bg-transparent'\n },\n amber: {\n active: 'border-amber-500 bg-amber-50 dark:bg-amber-900/10',\n text: 'text-amber-600 dark:text-amber-400',\n icon: 'text-amber-500',\n ring: 'focus:ring-amber-500/20',\n primary: 'bg-amber-500 hover:bg-amber-600 text-white shadow-amber-500/20',\n secondary: 'bg-amber-100 hover:bg-amber-200 text-amber-700 dark:bg-amber-500/20 dark:hover:bg-amber-500/30 dark:text-amber-300',\n outline: 'border border-amber-200 hover:border-amber-300 text-amber-700 hover:bg-amber-50 dark:border-amber-700 dark:text-amber-300 dark:hover:bg-amber-500/10 bg-transparent',\n ghost: 'text-amber-700 hover:bg-amber-50 dark:text-amber-300 dark:hover:bg-amber-500/10 bg-transparent'\n },\n black: {\n active: 'border-slate-800 dark:border-slate-200 bg-slate-50 dark:bg-slate-800',\n text: 'text-slate-800 dark:text-slate-200',\n icon: 'text-slate-800 dark:text-white',\n ring: 'focus:ring-slate-500/20',\n primary: 'bg-slate-900 hover:bg-slate-800 text-white shadow-slate-900/20 dark:bg-white dark:text-slate-900 dark:hover:bg-slate-200',\n secondary: 'bg-slate-100 hover:bg-slate-200 text-slate-800 dark:bg-slate-800 dark:hover:bg-slate-700 dark:text-slate-200',\n outline: 'border border-slate-200 hover:border-slate-300 text-slate-700 hover:bg-slate-50 dark:border-slate-700 dark:text-slate-300 dark:hover:bg-slate-800 bg-transparent',\n ghost: 'text-slate-700 hover:bg-slate-100 dark:text-slate-300 dark:hover:bg-slate-800 bg-transparent'\n }\n};\n\nconst FileUpload = ({\n variant = 'dropzone', // dropzone, compact\n buttonStyle = 'primary', // primary, secondary, outline, ghost\n multiple = false,\n accept,\n maxSize, // in bytes\n maxFiles,\n label = 'Click or drag file to upload',\n description = 'SVG, PNG, JPG or GIF (max. 5MB)',\n color = 'violet',\n fullWidth = true,\n className = '',\n onFilesChange,\n disabled = false\n}) => {\n const [files, setFiles] = useState([]);\n const [isDragging, setIsDragging] = useState(false);\n const [error, setError] = useState(null);\n const inputRef = useRef(null);\n\n const colors = colorConfig[color] || colorConfig.violet;\n\n const handleDrag = useCallback((e) => {\n e.preventDefault();\n e.stopPropagation();\n if (e.type === 'dragenter' || e.type === 'dragover') {\n if (!disabled) setIsDragging(true);\n } else if (e.type === 'dragleave') {\n setIsDragging(false);\n }\n }, [disabled]);\n\n const validateFile = (file) => {\n if (maxSize && file.size > maxSize) {\n return { valid: false, error: `File ${file.name} exceeds size limit of ${formatBytes(maxSize)}` };\n }\n // Basic accept validation (simple check)\n if (accept) {\n const acceptedTypes = accept.split(',').map(t => t.trim());\n const fileType = file.type;\n const fileName = file.name;\n const isValid = acceptedTypes.some(type => {\n if (type.endsWith('/*')) {\n return fileType.startsWith(type.replace('/*', ''));\n }\n if (type.startsWith('.')) {\n return fileName.toLowerCase().endsWith(type.toLowerCase());\n }\n return fileType === type;\n });\n if (!isValid) return { valid: false, error: `File type not accepted: ${file.name}` };\n }\n return { valid: true };\n };\n\n const handleDrop = useCallback((e) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n if (disabled) return;\n\n const droppedFiles = Array.from(e.dataTransfer.files);\n processFiles(droppedFiles);\n }, [disabled]);\n\n const handleInputChange = (e) => {\n const selectedFiles = Array.from(e.target.files);\n processFiles(selectedFiles);\n };\n\n const processFiles = (newFiles) => {\n setError(null);\n\n let validFiles = [];\n let errors = [];\n\n newFiles.forEach(file => {\n const validation = validateFile(file);\n if (validation.valid) {\n validFiles.push(file);\n } else {\n errors.push(validation.error);\n }\n });\n\n if (errors.length > 0) {\n setError(errors[0]); // Show first error for simplicity\n return; // Stop if there are invalid files? Or just add the valid ones? Let's stop.\n }\n\n if (maxFiles && (files.length + validFiles.length) > maxFiles) {\n setError(`Maximum number of files (${maxFiles}) exceeded`);\n return;\n }\n\n let updatedFiles;\n if (multiple) {\n updatedFiles = [...files, ...validFiles];\n } else {\n updatedFiles = [validFiles[0]].filter(Boolean); // Only take the first one\n }\n\n // De-duplicate based on name+size+lastModified\n const uniqueString = f => `${f.name}-${f.size}-${f.lastModified}`;\n const existingKeys = new Set(files.map(uniqueString));\n\n if (multiple) {\n // Filter out duplicates from the NEW batch if they exist in current\n const distinctNew = validFiles.filter(f => !existingKeys.has(uniqueString(f)));\n updatedFiles = [...files, ...distinctNew];\n } else {\n // If single mode, just replace\n updatedFiles = validFiles.length ? [validFiles[0]] : files;\n }\n\n setFiles(updatedFiles);\n onFilesChange?.(updatedFiles);\n };\n\n const removeFile = (e, index) => {\n e.stopPropagation(); // prevent triggering parent click\n const newFiles = files.filter((_, i) => i !== index);\n setFiles(newFiles);\n onFilesChange?.(newFiles);\n };\n\n const handleBoxClick = () => {\n if (!disabled) inputRef.current?.click();\n };\n\n // Render Logic Based on Variant\n\n // --- COMPACT VARIANT ---\n if (variant === 'compact') {\n return (\n <div className={`${fullWidth ? 'w-full' : 'w-auto'} ${className}`}>\n <input\n ref={inputRef}\n type=\"file\"\n className=\"hidden\"\n multiple={multiple}\n accept={accept}\n onChange={handleInputChange}\n disabled={disabled}\n />\n <div className=\"flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={handleBoxClick}\n disabled={disabled}\n className={`\n inline-flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium transition-all duration-200 shadow-sm\n focus:outline-none focus:ring-2 focus:ring-offset-1 dark:focus:ring-offset-slate-950\n ${disabled ? 'bg-slate-100 text-slate-400 cursor-not-allowed dark:bg-slate-800' : colors[buttonStyle]}\n ${colors.ring}\n `}\n >\n <Icon icon=\"cloud-arrow-up\" size=\"sm\" />\n Choose File\n </button>\n <span className=\"text-sm text-slate-500 dark:text-slate-400\">\n {files.length > 0\n ? `${files.length} file${files.length !== 1 ? 's' : ''} selected`\n : 'No file chosen'}\n </span>\n </div>\n\n {/* Compact List */}\n {files.length > 0 && (\n <div className=\"mt-3 flex flex-col gap-2\">\n {files.map((file, idx) => (\n <div key={idx} className=\"flex items-center justify-between p-2 bg-slate-50 dark:bg-slate-800 rounded-md border border-slate-100 dark:border-slate-700\">\n <span className=\"text-xs text-slate-700 dark:text-slate-300 truncate max-w-[200px]\">{file.name}</span>\n <button onClick={(e) => removeFile(e, idx)} className=\"text-slate-400 hover:text-red-500\">\n <Icon icon=\"xmark\" size=\"sm\" />\n </button>\n </div>\n ))}\n </div>\n )}\n {error && (\n <p className=\"mt-2 text-xs text-red-500 font-medium\">{error}</p>\n )}\n </div>\n );\n }\n\n // --- DROPZONE VARIANT (Default) ---\n return (\n <div className={`${fullWidth ? 'w-full' : 'w-auto'} ${className}`}>\n <input\n ref={inputRef}\n type=\"file\"\n className=\"hidden\"\n multiple={multiple}\n accept={accept}\n onChange={handleInputChange}\n disabled={disabled}\n />\n\n {/* Drop Zone Area */}\n <div\n onDragEnter={handleDrag}\n onDragLeave={handleDrag}\n onDragOver={handleDrag}\n onDrop={handleDrop}\n onClick={handleBoxClick}\n className={`\n relative group cursor-pointer\n flex flex-col items-center justify-center\n w-full rounded-2xl border-2 border-dashed transition-all duration-200\n p-8 text-center\n ${disabled\n ? 'bg-slate-50 border-slate-200 dark:bg-slate-900/50 dark:border-slate-800 cursor-not-allowed'\n : isDragging\n ? `${colors.active} scale-[1.01]`\n : 'bg-white border-slate-200 dark:bg-slate-900 dark:border-slate-700 hover:border-slate-300 dark:hover:border-slate-600 hover:bg-slate-50 dark:hover:bg-slate-800/50'\n }\n ${error ? 'border-red-300 bg-red-50 dark:bg-red-900/10' : ''}\n `}\n >\n {/* Icon Circle */}\n <div className={`\n w-12 h-12 rounded-full mb-4 flex items-center justify-center transition-colors duration-200\n ${disabled\n ? 'bg-slate-100 text-slate-300 dark:bg-slate-800 dark:text-slate-600'\n : isDragging\n ? 'bg-white shadow-sm'\n : 'bg-slate-100 dark:bg-slate-800'\n }\n `}>\n <Icon\n icon=\"cloud-arrow-up\"\n variant=\"fas\"\n className={`text-xl ${disabled ? '' : (isDragging ? colors.text : 'text-slate-400')}`}\n />\n </div>\n\n {/* Text */}\n <h4 className={`text-sm font-semibold mb-1 ${disabled ? 'text-slate-400' : 'text-slate-900 dark:text-white'}`}>\n {isDragging ? 'Drop files here' : label}\n </h4>\n <p className={`text-xs ${disabled ? 'text-slate-400' : 'text-slate-500 dark:text-slate-400'}`}>\n {description}\n </p>\n </div>\n\n {/* Error Message */}\n {error && (\n <div className=\"mt-2 text-xs text-red-500 flex items-center gap-1.5\">\n <Icon icon=\"circle-info\" variant=\"fas\" />\n {error}\n </div>\n )}\n\n {/* File List */}\n {files.length > 0 && (\n <div className=\"mt-4 flex flex-col gap-2\">\n {files.map((file, idx) => (\n <div\n key={idx}\n className=\"\n group relative flex items-center p-3 rounded-xl border border-slate-200 dark:border-slate-700\n bg-white dark:bg-slate-900 transition-all hover:shadow-sm\n \"\n >\n {/* File Icon */}\n <div className={`\n w-8 h-8 rounded-lg flex items-center justify-center mr-3\n ${colors.active.replace('border-', '')} \n `}>\n <Icon\n icon={file.type.includes('image') ? 'image' : 'file-lines'}\n variant=\"fas\"\n className={`${colors.text} text-sm`}\n />\n </div>\n\n {/* Info */}\n <div className=\"flex-1 min-w-0 text-left\">\n <p className=\"text-sm font-medium text-slate-700 dark:text-slate-200 truncate\">\n {file.name}\n </p>\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">\n {formatBytes(file.size)}\n </p>\n </div>\n\n {/* Success Icon */}\n <div className={`mr-2 ${colors.text}`}>\n <Icon icon=\"circle-check\" variant=\"fas\" className=\"text-sm\" />\n </div>\n\n {/* Remove Button */}\n <button\n onClick={(e) => removeFile(e, idx)}\n className=\"\n p-1.5 rounded-md text-slate-400 hover:text-red-500 hover:bg-red-50 dark:hover:bg-red-900/20\n transition-colors\n \"\n >\n <Icon icon=\"trash\" variant=\"fas\" className=\"text-xs\" />\n </button>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n};\n\nFileUpload.propTypes = {\n variant: PropTypes.oneOf(['dropzone', 'compact']),\n buttonStyle: PropTypes.oneOf(['primary', 'secondary', 'outline', 'ghost']),\n multiple: PropTypes.bool,\n accept: PropTypes.string,\n maxSize: PropTypes.number,\n maxFiles: PropTypes.number,\n label: PropTypes.string,\n description: PropTypes.string,\n color: PropTypes.oneOf(['violet', 'blue', 'emerald', 'rose', 'amber', 'black']),\n fullWidth: PropTypes.bool,\n className: PropTypes.string,\n onFilesChange: PropTypes.func,\n disabled: PropTypes.bool\n};\n\nexport default FileUpload;\n","import React, { useState, useRef, useEffect, forwardRef } from 'react';\nimport PropTypes from 'prop-types';\nimport Icon from '../Icon';\n\n/**\n * Input Component - A highly customizable input field with FontAwesome integration\n * \n * Features:\n * - Multiple themes (default, glass, minimal, outlined, filled, gradient)\n * - Multiple colors (violet, blue, emerald, rose, amber, black)\n * - Multiple sizes (xs, sm, md, lg, xl)\n * - Icon support (left, right, or both)\n * - Prefix/Suffix text support\n * - Floating labels\n * - Character counter\n * - Validation states\n * - Loading state\n * - Copy to clipboard\n * - Password visibility toggle\n * - Clearable input\n * - Animated focus effects\n */\n\nconst Input = forwardRef(({\n // Basic props\n type = 'text',\n value,\n defaultValue,\n placeholder = '',\n name,\n id,\n disabled = false,\n readOnly = false,\n required = false,\n autoFocus = false,\n autoComplete = 'off',\n\n // Appearance\n theme = 'default',\n color = 'violet', // violet, blue, emerald, rose, amber, black\n size = 'md',\n rounded = 'lg',\n fullWidth = false,\n\n // Label & Help\n label,\n floatingLabel = false,\n helperText,\n errorText,\n successText,\n\n // Icons - FontAwesome compatible\n leftIcon,\n leftIconVariant = 'fas',\n rightIcon,\n rightIconVariant = 'fas',\n iconColor,\n\n // Prefix/Suffix\n prefix,\n suffix,\n\n // Features\n clearable = false,\n showPasswordToggle = false,\n copyable = false,\n showCharCount = false,\n maxLength,\n\n // States\n isLoading = false,\n\n // Animation\n animate = true,\n focusEffect = 'glow',\n\n // Events\n onChange,\n onFocus,\n onBlur,\n onClear,\n onCopy,\n\n // Custom styling\n className = '',\n inputClassName = '',\n labelClassName = '',\n wrapperClassName = '',\n style,\n\n // Pass through props\n ...props\n}, ref) => {\n const [internalValue, setInternalValue] = useState(defaultValue || '');\n const [isFocused, setIsFocused] = useState(false);\n const [showPassword, setShowPassword] = useState(false);\n const [copied, setCopied] = useState(false);\n const inputRef = useRef(null);\n\n const actualValue = value !== undefined ? value : internalValue;\n const actualRef = ref || inputRef;\n\n // Determine input type based on password toggle\n const inputType = type === 'password' && showPassword ? 'text' : type;\n\n // Color Configuration\n const colorConfig = {\n violet: {\n focus: 'focus-within:border-violet-500 focus-within:ring-violet-500/20',\n label: 'text-violet-600 dark:text-violet-400',\n icon: 'text-violet-500',\n selection: 'bg-violet-500'\n },\n blue: {\n focus: 'focus-within:border-blue-500 focus-within:ring-blue-500/20',\n label: 'text-blue-600 dark:text-blue-400',\n icon: 'text-blue-500',\n selection: 'bg-blue-500'\n },\n emerald: {\n focus: 'focus-within:border-emerald-500 focus-within:ring-emerald-500/20',\n label: 'text-emerald-600 dark:text-emerald-400',\n icon: 'text-emerald-500',\n selection: 'bg-emerald-500'\n },\n rose: {\n focus: 'focus-within:border-rose-500 focus-within:ring-rose-500/20',\n label: 'text-rose-600 dark:text-rose-400',\n icon: 'text-rose-500',\n selection: 'bg-rose-500'\n },\n amber: {\n focus: 'focus-within:border-amber-500 focus-within:ring-amber-500/20',\n label: 'text-amber-600 dark:text-amber-400',\n icon: 'text-amber-500',\n selection: 'bg-amber-500'\n },\n black: {\n focus: 'focus-within:border-slate-800 dark:focus-within:border-slate-200 focus-within:ring-slate-500/20',\n label: 'text-slate-800 dark:text-slate-200',\n icon: 'text-slate-800 dark:text-slate-200',\n selection: 'bg-slate-800'\n }\n };\n\n const colors = colorConfig[color] || colorConfig.violet;\n\n // Size configurations\n const sizeConfig = {\n xs: {\n input: 'h-7 text-xs px-2',\n icon: 'text-xs',\n label: 'text-xs',\n iconPadding: { left: 'pl-7', right: 'pr-7' }\n },\n sm: {\n input: 'h-8 text-xs px-3',\n icon: 'text-xs',\n label: 'text-xs',\n iconPadding: { left: 'pl-8', right: 'pr-8' }\n },\n md: {\n input: 'h-10 text-sm px-4',\n icon: 'text-sm',\n label: 'text-sm',\n iconPadding: { left: 'pl-10', right: 'pr-10' }\n },\n lg: {\n input: 'h-12 text-base px-5',\n icon: 'text-base',\n label: 'text-base',\n iconPadding: { left: 'pl-12', right: 'pr-12' }\n },\n xl: {\n input: 'h-14 text-lg px-6',\n icon: 'text-lg',\n label: 'text-lg',\n iconPadding: { left: 'pl-14', right: 'pr-14' }\n }\n };\n\n // Rounded configurations\n const roundedConfig = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n '2xl': 'rounded-2xl',\n full: 'rounded-full'\n };\n\n // Theme configurations\n const themeConfig = {\n default: {\n wrapper: 'bg-slate-50/50 dark:bg-slate-900/50 border border-slate-200 dark:border-slate-700 shadow-sm',\n input: 'bg-transparent text-slate-900 dark:text-white placeholder:text-slate-400 dark:placeholder:text-slate-500 placeholder:text-sm',\n focus: 'focus-within:ring-1 focus-within:bg-white dark:focus-within:bg-slate-950',\n icon: 'text-slate-400 dark:text-slate-500',\n disabled: 'opacity-50 cursor-not-allowed bg-slate-100 dark:bg-slate-900'\n },\n glass: {\n wrapper: 'bg-white/60 dark:bg-slate-800/30 backdrop-blur-xl border border-slate-200/60 dark:border-slate-700/30 shadow-sm',\n input: 'bg-transparent text-slate-900 dark:text-white placeholder:text-slate-400 dark:placeholder:text-slate-400/50 placeholder:text-sm',\n focus: 'focus-within:ring-1 focus-within:bg-white/80 dark:focus-within:bg-slate-800/40',\n icon: 'text-slate-400 dark:text-slate-400/70',\n disabled: 'opacity-40 cursor-not-allowed'\n },\n minimal: {\n wrapper: 'bg-transparent border-b-2 border-slate-200 dark:border-slate-700 rounded-none',\n input: 'bg-transparent text-slate-900 dark:text-white placeholder:text-slate-400 dark:placeholder:text-slate-500 placeholder:text-sm',\n focus: '',\n icon: 'text-slate-400 dark:text-slate-500',\n disabled: 'opacity-50 cursor-not-allowed'\n },\n outlined: {\n wrapper: 'bg-transparent border-2 border-slate-300 dark:border-slate-600',\n input: 'bg-transparent text-slate-900 dark:text-white placeholder:text-slate-400 dark:placeholder:text-slate-500 placeholder:text-sm',\n focus: 'focus-within:ring-2',\n icon: 'text-slate-400 dark:text-slate-500',\n disabled: 'opacity-50 cursor-not-allowed'\n },\n filled: {\n wrapper: 'bg-slate-100 dark:bg-slate-800 border-2 border-transparent',\n input: 'bg-transparent text-slate-900 dark:text-white placeholder:text-slate-500 dark:placeholder:text-slate-400 placeholder:text-sm',\n focus: 'focus-within:bg-white dark:focus-within:bg-slate-700 focus-within:ring-1',\n icon: 'text-slate-500 dark:text-slate-400',\n disabled: 'opacity-50 cursor-not-allowed bg-slate-200 dark:bg-slate-900'\n },\n gradient: {\n wrapper: 'bg-gradient-to-r from-slate-100 via-slate-50 to-slate-100 dark:from-slate-800/50 dark:via-slate-700/50 dark:to-slate-800/50 border border-slate-200/50 dark:border-slate-600/30 backdrop-blur-sm',\n input: 'bg-transparent text-slate-900 dark:text-white placeholder:text-slate-400 dark:placeholder:text-slate-400 placeholder:text-sm',\n focus: 'focus-within:ring-1',\n icon: 'text-slate-500 dark:text-slate-400',\n disabled: 'opacity-50 cursor-not-allowed'\n }\n };\n\n // Focus effect configurations\n const focusEffectConfig = {\n none: '',\n glow: 'transition-shadow duration-300',\n scale: 'transition-transform duration-200 focus-within:scale-[1.02]',\n lift: 'transition-all duration-200 focus-within:-translate-y-0.5 focus-within:shadow-lg'\n };\n\n // Handle change\n const handleChange = (e) => {\n const newValue = e.target.value;\n if (value === undefined) {\n setInternalValue(newValue);\n }\n onChange?.(e);\n };\n\n // Handle focus\n const handleFocus = (e) => {\n setIsFocused(true);\n onFocus?.(e);\n };\n\n // Handle blur\n const handleBlur = (e) => {\n setIsFocused(false);\n onBlur?.(e);\n };\n\n // Handle clear\n const handleClear = () => {\n if (value === undefined) {\n setInternalValue('');\n }\n onClear?.();\n actualRef.current?.focus();\n };\n\n // Handle copy\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(actualValue);\n setCopied(true);\n onCopy?.(actualValue);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n console.error('Failed to copy:', err);\n }\n };\n\n // Determine if we need extra padding for icons/buttons\n const hasLeftContent = leftIcon || prefix || isLoading;\n const hasRightContent = rightIcon || suffix || clearable || showPasswordToggle || copyable;\n\n const currentSize = sizeConfig[size] || sizeConfig.md;\n const currentTheme = themeConfig[theme] || themeConfig.default;\n const currentRounded = roundedConfig[rounded] || roundedConfig.lg;\n const currentFocusEffect = focusEffectConfig[focusEffect] || '';\n\n // Calculate right padding based on number of right elements\n const rightButtonCount = [clearable && actualValue, showPasswordToggle && type === 'password', copyable].filter(Boolean).length;\n const rightPadding = rightButtonCount > 0 ? `pr-${8 + (rightButtonCount * 8)}` : rightIcon ? currentSize.iconPadding.right : '';\n\n return (\n <div className={`${fullWidth ? 'w-full' : 'inline-flex flex-col'} ${wrapperClassName}`}>\n {/* Label */}\n {label && !floatingLabel && (\n <label\n htmlFor={id || name}\n className={`block mb-1.5 font-medium text-slate-700 dark:text-slate-300 ${currentSize.label} ${labelClassName}`}\n >\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n\n {/* Input wrapper */}\n <div\n className={`\n relative flex items-center\n ${currentTheme.wrapper}\n ${currentRounded}\n ${currentTheme.focus}\n ${colors.focus}\n ${disabled ? currentTheme.disabled : ''}\n ${animate ? currentFocusEffect : ''}\n ${className}\n `}\n style={style}\n >\n {/* Floating label */}\n {label && floatingLabel && (\n <label\n htmlFor={id || name}\n className={`\n absolute left-4 transition-all duration-200 pointer-events-none\n ${isFocused || actualValue\n ? `-top-2.5 text-xs px-1 bg-white dark:bg-slate-800 ${colors.label}`\n : `top-1/2 -translate-y-1/2 text-slate-400 dark:text-slate-500 ${currentSize.label}`\n }\n ${labelClassName}\n `}\n >\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n\n {/* Prefix */}\n {prefix && (\n <span className={`flex-shrink-0 pl-3 text-slate-500 dark:text-slate-400 ${currentSize.icon}`}>\n {prefix}\n </span>\n )}\n\n {/* Left icon */}\n {leftIcon && (\n <span className={`absolute left-3 flex items-center justify-center ${iconColor || currentTheme.icon} ${currentSize.icon}`}>\n {typeof leftIcon === 'string' ? (\n <Icon icon={leftIcon} variant={leftIconVariant} />\n ) : (\n leftIcon\n )}\n </span>\n )}\n\n {/* Loading spinner */}\n {isLoading && !leftIcon && (\n <span className={`absolute left-3 flex items-center justify-center ${currentTheme.icon} ${currentSize.icon}`}>\n <Icon icon=\"spinner-third\" variant=\"fad\" className=\"animate-spin\" />\n </span>\n )}\n\n {/* Input field */}\n <input\n ref={actualRef}\n type={inputType}\n id={id || name}\n name={name}\n value={actualValue}\n placeholder={floatingLabel && !isFocused ? '' : placeholder}\n disabled={disabled || isLoading}\n readOnly={readOnly}\n required={required}\n autoFocus={autoFocus}\n autoComplete={autoComplete}\n maxLength={maxLength}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n className={`\n w-full outline-none\n ${currentTheme.input}\n ${currentSize.input}\n ${hasLeftContent ? currentSize.iconPadding.left : ''}\n ${hasRightContent ? rightPadding : ''}\n ${prefix ? 'pl-1' : ''}\n ${suffix ? 'pr-1' : ''}\n ${inputClassName}\n `}\n {...props}\n />\n\n {/* Right side buttons container */}\n <div className=\"absolute right-2 flex items-center gap-1\">\n {/* Clear button */}\n {clearable && actualValue && !disabled && !readOnly && (\n <button\n type=\"button\"\n onClick={handleClear}\n className={`p-1 rounded-full hover:bg-slate-100 dark:hover:bg-slate-700 transition-colors ${currentTheme.icon} ${currentSize.icon}`}\n tabIndex={-1}\n >\n <Icon icon=\"xmark\" variant=\"fas\" />\n </button>\n )}\n\n {/* Password toggle */}\n {showPasswordToggle && type === 'password' && (\n <button\n type=\"button\"\n onClick={() => setShowPassword(!showPassword)}\n className={`p-1 rounded-full hover:bg-slate-100 dark:hover:bg-slate-700 transition-colors ${currentTheme.icon} ${currentSize.icon}`}\n tabIndex={-1}\n >\n <Icon icon={showPassword ? 'eye-slash' : 'eye'} variant=\"fas\" />\n </button>\n )}\n\n {/* Copy button */}\n {copyable && (\n <button\n type=\"button\"\n onClick={handleCopy}\n className={`p-1 rounded-full hover:bg-slate-100 dark:hover:bg-slate-700 transition-colors ${copied ? 'text-emerald-500' : currentTheme.icon} ${currentSize.icon}`}\n tabIndex={-1}\n >\n <Icon icon={copied ? 'check' : 'copy'} variant=\"fas\" />\n </button>\n )}\n </div>\n\n {/* Right icon */}\n {rightIcon && !clearable && !showPasswordToggle && !copyable && (\n <span className={`absolute right-3 flex items-center justify-center ${iconColor || currentTheme.icon} ${currentSize.icon}`}>\n {typeof rightIcon === 'string' ? (\n <Icon icon={rightIcon} variant={rightIconVariant} />\n ) : (\n rightIcon\n )}\n </span>\n )}\n\n {/* Suffix */}\n {suffix && (\n <span className={`flex-shrink-0 pr-3 text-slate-500 dark:text-slate-400 ${currentSize.icon}`}>\n {suffix}\n </span>\n )}\n </div>\n\n {/* Bottom section: helper text and character count */}\n <div className=\"flex justify-between items-start mt-1.5\">\n <div className=\"flex-1\">\n {/* Helper text */}\n {helperText && (\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">\n {helperText}\n </p>\n )}\n </div>\n\n {/* Character count */}\n {showCharCount && maxLength && (\n <span className={`text-xs ${actualValue.length >= maxLength ? 'text-red-500' : 'text-slate-400 dark:text-slate-500'}`}>\n {actualValue.length}/{maxLength}\n </span>\n )}\n </div>\n </div>\n );\n});\n\nInput.displayName = 'Input';\n\nInput.propTypes = {\n // Basic\n type: PropTypes.oneOf(['text', 'password', 'email', 'number', 'tel', 'url', 'search', 'date', 'time', 'datetime-local']),\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n defaultValue: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n placeholder: PropTypes.string,\n name: PropTypes.string,\n id: PropTypes.string,\n disabled: PropTypes.bool,\n readOnly: PropTypes.bool,\n required: PropTypes.bool,\n autoFocus: PropTypes.bool,\n autoComplete: PropTypes.string,\n\n // Appearance\n theme: PropTypes.oneOf(['default', 'glass', 'minimal', 'outlined', 'filled', 'gradient']),\n color: PropTypes.oneOf(['violet', 'blue', 'emerald', 'rose', 'amber', 'black']),\n size: PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl']),\n rounded: PropTypes.oneOf(['none', 'sm', 'md', 'lg', 'xl', '2xl', 'full']),\n fullWidth: PropTypes.bool,\n\n // Label & Help\n label: PropTypes.string,\n floatingLabel: PropTypes.bool,\n helperText: PropTypes.string,\n\n // Icons\n leftIcon: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n leftIconVariant: PropTypes.oneOf(['fas', 'far', 'fal', 'fad']),\n rightIcon: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n rightIconVariant: PropTypes.oneOf(['fas', 'far', 'fal', 'fad']),\n iconColor: PropTypes.string,\n\n // Prefix/Suffix\n prefix: PropTypes.node,\n suffix: PropTypes.node,\n\n // Features\n clearable: PropTypes.bool,\n showPasswordToggle: PropTypes.bool,\n copyable: PropTypes.bool,\n showCharCount: PropTypes.bool,\n maxLength: PropTypes.number,\n\n // States\n isLoading: PropTypes.bool,\n\n // Animation\n animate: PropTypes.bool,\n focusEffect: PropTypes.oneOf(['none', 'glow', 'scale', 'lift']),\n\n // Events\n onChange: PropTypes.func,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n onClear: PropTypes.func,\n onCopy: PropTypes.func,\n\n // Styling\n className: PropTypes.string,\n inputClassName: PropTypes.string,\n labelClassName: PropTypes.string,\n wrapperClassName: PropTypes.string,\n style: PropTypes.object,\n};\n\nexport default Input;\n","import React, { useState, useRef, forwardRef } from 'react';\nimport PropTypes from 'prop-types';\nimport Icon from '../Icon';\n\n/**\n * Textarea Component - A highly customizable textarea field matching Input styling\n * \n * Features:\n * - Multiple themes (default, glass, minimal, outlined, filled, gradient)\n * - Multiple colors (violet, blue, emerald, rose, amber, black)\n * - Multiple sizes (xs, sm, md, lg, xl)\n * - Floating labels\n * - Character counter\n * - Validation states\n * - Animated focus effects\n */\n\nconst Textarea = forwardRef(({\n // Basic props\n value,\n defaultValue,\n placeholder = '',\n name,\n id,\n disabled = false,\n readOnly = false,\n required = false,\n autoFocus = false,\n rows = 4,\n maxLength,\n\n // Appearance\n theme = 'default',\n color = 'violet', // violet, blue, emerald, rose, amber, black\n size = 'md',\n rounded = 'xl',\n fullWidth = true,\n\n // Label & Help\n label,\n floatingLabel = false,\n helperText,\n\n // Animation\n animate = true,\n focusEffect = 'glow',\n\n // Events\n onChange,\n onFocus,\n onBlur,\n\n // Custom styling\n className = '',\n textareaClassName = '',\n labelClassName = '',\n wrapperClassName = '',\n style,\n\n // Pass through props\n ...props\n}, ref) => {\n const [internalValue, setInternalValue] = useState(defaultValue || '');\n const [isFocused, setIsFocused] = useState(false);\n const textareaRef = useRef(null);\n\n const actualValue = value !== undefined ? value : internalValue;\n const actualRef = ref || textareaRef;\n\n // Color Configuration (matching Input)\n const colorConfig = {\n violet: {\n focus: 'focus-within:border-violet-500 focus-within:ring-violet-500/20',\n label: 'text-violet-600 dark:text-violet-400',\n },\n blue: {\n focus: 'focus-within:border-blue-500 focus-within:ring-blue-500/20',\n label: 'text-blue-600 dark:text-blue-400',\n },\n emerald: {\n focus: 'focus-within:border-emerald-500 focus-within:ring-emerald-500/20',\n label: 'text-emerald-600 dark:text-emerald-400',\n },\n rose: {\n focus: 'focus-within:border-rose-500 focus-within:ring-rose-500/20',\n label: 'text-rose-600 dark:text-rose-400',\n },\n amber: {\n focus: 'focus-within:border-amber-500 focus-within:ring-amber-500/20',\n label: 'text-amber-600 dark:text-amber-400',\n },\n black: {\n focus: 'focus-within:border-slate-800 dark:focus-within:border-slate-200 focus-within:ring-slate-500/20',\n label: 'text-slate-800 dark:text-slate-200',\n }\n };\n\n const colors = colorConfig[color] || colorConfig.violet;\n\n // Size configurations (matching Input)\n const sizeConfig = {\n xs: {\n textarea: 'text-xs px-2 py-1.5',\n label: 'text-xs',\n },\n sm: {\n textarea: 'text-xs px-3 py-2',\n label: 'text-xs',\n },\n md: {\n textarea: 'text-sm px-4 py-3',\n label: 'text-sm',\n },\n lg: {\n textarea: 'text-base px-5 py-4',\n label: 'text-base',\n },\n xl: {\n textarea: 'text-lg px-6 py-5',\n label: 'text-lg',\n }\n };\n\n // Rounded configurations (matching Input)\n const roundedConfig = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n '2xl': 'rounded-2xl',\n full: 'rounded-3xl' // Using 3xl for textarea as full would look odd\n };\n\n // Theme configurations (matching Input)\n const themeConfig = {\n default: {\n wrapper: 'bg-slate-50/50 dark:bg-slate-900/50 border border-slate-200 dark:border-slate-700 shadow-sm',\n textarea: 'bg-transparent text-slate-900 dark:text-white placeholder:text-slate-400 dark:placeholder:text-slate-500',\n focus: 'focus-within:ring-1 focus-within:bg-white dark:focus-within:bg-slate-950',\n disabled: 'opacity-50 cursor-not-allowed bg-slate-100 dark:bg-slate-900'\n },\n glass: {\n wrapper: 'bg-white/60 dark:bg-slate-800/30 backdrop-blur-xl border border-slate-200/60 dark:border-slate-700/30 shadow-sm',\n textarea: 'bg-transparent text-slate-900 dark:text-white placeholder:text-slate-400 dark:placeholder:text-slate-400/50',\n focus: 'focus-within:ring-1 focus-within:bg-white/80 dark:focus-within:bg-slate-800/40',\n disabled: 'opacity-40 cursor-not-allowed'\n },\n minimal: {\n wrapper: 'bg-transparent border-b-2 border-slate-200 dark:border-slate-700 rounded-none',\n textarea: 'bg-transparent text-slate-900 dark:text-white placeholder:text-slate-400 dark:placeholder:text-slate-500',\n focus: '',\n disabled: 'opacity-50 cursor-not-allowed'\n },\n outlined: {\n wrapper: 'bg-transparent border-2 border-slate-300 dark:border-slate-600',\n textarea: 'bg-transparent text-slate-900 dark:text-white placeholder:text-slate-400 dark:placeholder:text-slate-500',\n focus: 'focus-within:ring-2',\n disabled: 'opacity-50 cursor-not-allowed'\n },\n filled: {\n wrapper: 'bg-slate-100 dark:bg-slate-800 border-2 border-transparent',\n textarea: 'bg-transparent text-slate-900 dark:text-white placeholder:text-slate-500 dark:placeholder:text-slate-400',\n focus: 'focus-within:bg-white dark:focus-within:bg-slate-700 focus-within:ring-1',\n disabled: 'opacity-50 cursor-not-allowed bg-slate-200 dark:bg-slate-900'\n },\n gradient: {\n wrapper: 'bg-gradient-to-r from-slate-100 via-slate-50 to-slate-100 dark:from-slate-800/50 dark:via-slate-700/50 dark:to-slate-800/50 border border-slate-200/50 dark:border-slate-600/30 backdrop-blur-sm',\n textarea: 'bg-transparent text-slate-900 dark:text-white placeholder:text-slate-400 dark:placeholder:text-slate-400',\n focus: 'focus-within:ring-1',\n disabled: 'opacity-50 cursor-not-allowed'\n }\n };\n\n // Focus effect configurations (matching Input)\n const focusEffectConfig = {\n none: '',\n glow: 'transition-shadow duration-300',\n scale: 'transition-transform duration-200 focus-within:scale-[1.01]',\n lift: 'transition-all duration-200 focus-within:-translate-y-0.5 focus-within:shadow-lg'\n };\n\n // Handle change\n const handleChange = (e) => {\n const newValue = e.target.value;\n if (value === undefined) {\n setInternalValue(newValue);\n }\n onChange?.(e);\n };\n\n // Handle focus\n const handleFocus = (e) => {\n setIsFocused(true);\n onFocus?.(e);\n };\n\n // Handle blur\n const handleBlur = (e) => {\n setIsFocused(false);\n onBlur?.(e);\n };\n\n const currentSize = sizeConfig[size] || sizeConfig.md;\n const currentTheme = themeConfig[theme] || themeConfig.default;\n const currentRounded = roundedConfig[rounded] || roundedConfig.xl;\n const currentFocusEffect = focusEffectConfig[focusEffect] || '';\n\n return (\n <div className={`${fullWidth ? 'w-full' : 'inline-flex flex-col'} ${wrapperClassName}`}>\n {/* Label */}\n {label && !floatingLabel && (\n <label\n htmlFor={id || name}\n className={`block mb-1.5 font-medium text-slate-700 dark:text-slate-300 ${currentSize.label} ${labelClassName}`}\n >\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n\n {/* Textarea wrapper */}\n <div\n className={`\n relative\n ${theme === 'minimal' ? '' : currentRounded}\n ${currentTheme.wrapper}\n ${currentTheme.focus}\n ${colors.focus}\n ${disabled ? currentTheme.disabled : ''}\n ${animate ? currentFocusEffect : ''}\n ${className}\n `}\n style={style}\n >\n {/* Floating label */}\n {label && floatingLabel && (\n <label\n htmlFor={id || name}\n className={`\n absolute left-4 transition-all duration-200 pointer-events-none z-10\n ${isFocused || actualValue\n ? `-top-2.5 text-xs px-1 bg-white dark:bg-slate-800 ${colors.label}`\n : `top-3 text-slate-400 dark:text-slate-500 ${currentSize.label}`\n }\n ${labelClassName}\n `}\n >\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n\n {/* Textarea field */}\n <textarea\n ref={actualRef}\n id={id || name}\n name={name}\n value={actualValue}\n placeholder={floatingLabel && !isFocused ? '' : placeholder}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n autoFocus={autoFocus}\n maxLength={maxLength}\n rows={rows}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n className={`\n w-full outline-none resize-y min-h-[80px]\n ${currentTheme.textarea}\n ${currentSize.textarea}\n ${theme === 'minimal' ? '' : currentRounded}\n ${textareaClassName}\n `}\n {...props}\n />\n\n {/* Character count */}\n {maxLength && !disabled && (\n <div className=\"absolute bottom-2 right-2\">\n <span className={`text-xs px-1.5 py-0.5 rounded bg-white/80 dark:bg-slate-900/80 ${actualValue.length >= maxLength ? 'text-red-500' : 'text-slate-400 dark:text-slate-500'\n }`}>\n {actualValue.length}/{maxLength}\n </span>\n </div>\n )}\n </div>\n\n {/* Bottom section: helper text */}\n {helperText && (\n <div className=\"flex items-start gap-1.5 mt-1.5 px-1\">\n <span className=\"text-xs text-slate-500 dark:text-slate-400\">\n {helperText}\n </span>\n </div>\n )}\n </div>\n );\n});\n\nTextarea.displayName = 'Textarea';\n\nTextarea.propTypes = {\n // Basic\n value: PropTypes.string,\n defaultValue: PropTypes.string,\n placeholder: PropTypes.string,\n name: PropTypes.string,\n id: PropTypes.string,\n disabled: PropTypes.bool,\n readOnly: PropTypes.bool,\n required: PropTypes.bool,\n autoFocus: PropTypes.bool,\n rows: PropTypes.number,\n maxLength: PropTypes.number,\n\n // Appearance\n theme: PropTypes.oneOf(['default', 'glass', 'minimal', 'outlined', 'filled', 'gradient']),\n color: PropTypes.oneOf(['violet', 'blue', 'emerald', 'rose', 'amber', 'black']),\n size: PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl']),\n rounded: PropTypes.oneOf(['none', 'sm', 'md', 'lg', 'xl', '2xl', 'full']),\n fullWidth: PropTypes.bool,\n\n // Label & Help\n label: PropTypes.string,\n floatingLabel: PropTypes.bool,\n helperText: PropTypes.string,\n\n // Animation\n animate: PropTypes.bool,\n focusEffect: PropTypes.oneOf(['none', 'glow', 'scale', 'lift']),\n\n // Events\n onChange: PropTypes.func,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n\n // Styling\n className: PropTypes.string,\n textareaClassName: PropTypes.string,\n labelClassName: PropTypes.string,\n wrapperClassName: PropTypes.string,\n style: PropTypes.object,\n};\n\nexport default Textarea;\n","import React, { createContext, useContext, useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport Icon from '../Icon';\n\nconst RadioContext = createContext(null);\n\n/**\n * RadioGroup Component - Manages state for a group of Radio buttons\n */\nexport const RadioGroup = ({\n children,\n value,\n defaultValue,\n onChange,\n name,\n orientation = 'vertical',\n label,\n description,\n error,\n className = '',\n // Shared props for children\n size = 'md',\n color = 'violet',\n variant = 'simple', // simple, card\n disabled = false\n}) => {\n const [internalValue, setInternalValue] = useState(defaultValue);\n const isControlled = value !== undefined;\n const actualValue = isControlled ? value : internalValue;\n\n const handleChange = (newValue) => {\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onChange?.(newValue);\n };\n\n return (\n <RadioContext.Provider value={{\n name,\n value: actualValue,\n onChange: handleChange,\n size,\n color,\n variant,\n disabledGrp: disabled\n }}>\n <div className={`flex flex-col gap-2 ${className}`}>\n {/* Group Label */}\n {label && (\n <label className=\"text-sm font-medium text-slate-700 dark:text-slate-300\">\n {label}\n </label>\n )}\n\n {/* Description */}\n {description && (\n <p className=\"text-xs text-slate-500 dark:text-slate-400 -mt-1 mb-1\">\n {description}\n </p>\n )}\n\n {/* Options Container */}\n <div className={`\n flex gap-3\n ${orientation === 'vertical' ? 'flex-col' : 'flex-row flex-wrap'}\n `}>\n {children}\n </div>\n\n {/* Error Message */}\n {error && (\n <p className=\"text-xs text-red-500 mt-1 flex items-center gap-1\">\n <Icon icon=\"circle-exclamation\" variant=\"fas\" />\n {error}\n </p>\n )}\n </div>\n </RadioContext.Provider>\n );\n};\n\n// Colors for the radio circle/border\nconst colorConfig = {\n violet: {\n checked: 'border-violet-500',\n dot: 'bg-violet-500',\n ring: 'focus:ring-violet-500',\n text: 'text-violet-700 dark:text-violet-300',\n bg: 'bg-violet-50 dark:bg-violet-900/20',\n border: 'border-violet-500/50'\n },\n blue: {\n checked: 'border-blue-500',\n dot: 'bg-blue-500',\n ring: 'focus:ring-blue-500',\n text: 'text-blue-700 dark:text-blue-300',\n bg: 'bg-blue-50 dark:bg-blue-900/20',\n border: 'border-blue-500/50'\n },\n emerald: {\n checked: 'border-emerald-500',\n dot: 'bg-emerald-500',\n ring: 'focus:ring-emerald-500',\n text: 'text-emerald-700 dark:text-emerald-300',\n bg: 'bg-emerald-50 dark:bg-emerald-900/20',\n border: 'border-emerald-500/50'\n },\n rose: {\n checked: 'border-rose-500',\n dot: 'bg-rose-500',\n ring: 'focus:ring-rose-500',\n text: 'text-rose-700 dark:text-rose-300',\n bg: 'bg-rose-50 dark:bg-rose-900/20',\n border: 'border-rose-500/50'\n },\n amber: {\n checked: 'border-amber-500',\n dot: 'bg-amber-500',\n ring: 'focus:ring-amber-500',\n text: 'text-amber-700 dark:text-amber-300',\n bg: 'bg-amber-50 dark:bg-amber-900/20',\n border: 'border-amber-500/50'\n },\n black: {\n checked: 'border-slate-900 dark:border-white',\n dot: 'bg-slate-900 dark:bg-white',\n ring: 'focus:ring-slate-500',\n text: 'text-slate-900 dark:text-white',\n bg: 'bg-slate-100 dark:bg-slate-800',\n border: 'border-slate-900/50 dark:border-white/50'\n }\n};\n\n/**\n * Radio Component - Individual radio button\n */\nconst Radio = ({\n value,\n label,\n description,\n icon,\n disabled = false,\n className = '',\n style,\n // Direct props (override context)\n checked,\n onChange, // only for standalone\n size,\n color,\n variant\n}) => {\n const context = useContext(RadioContext);\n\n // Resolve props (context vs direct)\n const isGrouped = context !== null;\n const finalName = isGrouped ? context.name : undefined;\n const finalSize = size || (context?.size || 'md');\n const finalColor = color || (context?.color || 'violet');\n const finalVariant = variant || (context?.variant || 'simple');\n const finalDisabled = disabled || (context?.disabledGrp || false);\n\n // Checked state calculation\n const isChecked = isGrouped\n ? context.value === value\n : checked;\n\n const handleChange = (e) => {\n if (finalDisabled) return;\n if (isGrouped) {\n context.onChange(value);\n } else {\n onChange?.(e);\n }\n };\n\n const colors = colorConfig[finalColor] || colorConfig.violet;\n\n // Size logic\n const sizeClasses = {\n sm: { circle: 'w-4 h-4', dot: 'w-2 h-2', text: 'text-xs', p: 'p-3' },\n md: { circle: 'w-5 h-5', dot: 'w-2.5 h-2.5', text: 'text-sm', p: 'p-4' },\n lg: { circle: 'w-6 h-6', dot: 'w-3 h-3', text: 'text-base', p: 'p-5' }\n }[finalSize];\n\n // Card Variant Logic\n if (finalVariant === 'card') {\n return (\n <label\n className={`\n relative flex items-start gap-4 cursor-pointer rounded-xl border-2 transition-all duration-200\n ${sizeClasses.p}\n ${isChecked\n ? `${colors.border} ${colors.bg} shadow-sm ring-1 ${colors.ring.replace('focus:', '')}`\n : 'border-slate-200 dark:border-slate-700 hover:border-slate-300 dark:hover:border-slate-600 hover:bg-slate-50 dark:hover:bg-slate-800'\n }\n ${finalDisabled ? 'opacity-50 cursor-not-allowed grayscale' : ''}\n ${className}\n `}\n style={style}\n >\n <input\n type=\"radio\"\n name={finalName}\n value={value}\n checked={isChecked}\n onChange={handleChange}\n disabled={finalDisabled}\n className=\"sr-only\"\n />\n\n {/* Custom Radio Circle */}\n <div className={`\n flex-shrink-0 rounded-full border-2 flex items-center justify-center transition-colors\n ${sizeClasses.circle}\n ${isChecked ? colors.checked : 'border-slate-300 dark:border-slate-600'}\n `}>\n <div className={`\n rounded-full transition-transform duration-200\n ${sizeClasses.dot}\n ${colors.dot}\n ${isChecked ? 'scale-100' : 'scale-0'}\n `} />\n </div>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2 mb-1\">\n {icon && (\n <Icon\n icon={icon}\n variant=\"fas\"\n className={isChecked ? colors.text : 'text-slate-400'}\n />\n )}\n <span className={`font-semibold ${sizeClasses.text} ${isChecked ? 'text-slate-900 dark:text-white' : 'text-slate-700 dark:text-slate-300'}`}>\n {label}\n </span>\n </div>\n {description && (\n <p className=\"text-xs text-slate-500 dark:text-slate-400 leading-relaxed\">\n {description}\n </p>\n )}\n </div>\n </label>\n );\n }\n\n // Simple Variant (Default)\n return (\n <label\n className={`\n inline-flex items-start gap-3 cursor-pointer group\n ${finalDisabled ? 'opacity-50 cursor-not-allowed' : ''}\n ${className}\n `}\n style={style}\n >\n <div className=\"relative flex items-center mt-0.5\">\n <input\n type=\"radio\"\n name={finalName}\n value={value}\n checked={isChecked}\n onChange={handleChange}\n disabled={finalDisabled}\n className=\"peer sr-only\"\n />\n <div className={`\n ${sizeClasses.circle}\n rounded-full border-2 bg-white dark:bg-slate-900 transition-all duration-200\n peer-focus:ring-2 peer-focus:ring-offset-1 peer-focus:ring-offset-white dark:peer-focus:ring-offset-slate-950 ${colors.ring}\n ${isChecked ? colors.checked : 'border-slate-300 dark:border-slate-600 group-hover:border-slate-400 dark:group-hover:border-slate-500'}\n flex items-center justify-center\n `}>\n <div className={`\n ${sizeClasses.dot}\n rounded-full transform transition-transform duration-200\n ${colors.dot}\n ${isChecked ? 'scale-100' : 'scale-0'}\n `} />\n </div>\n </div>\n\n {(label || description) && (\n <div className=\"flex flex-col\">\n {label && (\n <span className={`${sizeClasses.text} font-medium text-slate-700 dark:text-slate-200 group-hover:text-slate-900 dark:group-hover:text-white transition-colors`}>\n {label}\n </span>\n )}\n {description && (\n <span className=\"text-xs text-slate-500 dark:text-slate-400\">\n {description}\n </span>\n )}\n </div>\n )}\n </label>\n );\n};\n\nRadioGroup.propTypes = {\n children: PropTypes.node,\n value: PropTypes.any,\n defaultValue: PropTypes.any,\n onChange: PropTypes.func,\n name: PropTypes.string,\n orientation: PropTypes.oneOf(['horizontal', 'vertical']),\n label: PropTypes.string,\n description: PropTypes.string,\n error: PropTypes.string,\n className: PropTypes.string,\n size: PropTypes.oneOf(['sm', 'md', 'lg']),\n color: PropTypes.oneOf(['violet', 'blue', 'emerald', 'rose', 'amber', 'black']),\n variant: PropTypes.oneOf(['simple', 'card']),\n disabled: PropTypes.bool\n};\n\nRadio.propTypes = {\n value: PropTypes.any,\n label: PropTypes.string,\n description: PropTypes.string,\n icon: PropTypes.string,\n disabled: PropTypes.bool,\n className: PropTypes.string,\n style: PropTypes.object,\n checked: PropTypes.bool,\n onChange: PropTypes.func,\n size: PropTypes.oneOf(['sm', 'md', 'lg']),\n color: PropTypes.oneOf(['violet', 'blue', 'emerald', 'rose', 'amber', 'black']),\n variant: PropTypes.oneOf(['simple', 'card'])\n};\n\nRadio.Group = RadioGroup;\nexport default Radio;\n","import React, { useState, useRef, useEffect, useMemo, forwardRef } from 'react';\nimport PropTypes from 'prop-types';\nimport Icon from '../Icon';\n\n/**\n * Select Component - A highly customizable select/dropdown with search support\n * \n * Features:\n * - Multiple themes (default, glass, minimal, outlined, filled)\n * - Multiple colors (violet, blue, emerald, rose, amber, black)\n * - Search/filter functionality\n * - Custom option rendering (text, icons, descriptions)\n * - \"Select...\" placeholder option\n * - Clear selection button\n * - Form compatible (name, required, value)\n * - Matches Input component styling\n */\nconst Select = forwardRef(({\n // Data\n options = [],\n value,\n defaultValue = '',\n onChange,\n onSearch,\n\n // API\n api,\n apiMethod = 'GET',\n apiHeaders = {},\n apiDataPath = '',\n\n // Field mapping for object arrays\n valueKey = 'value',\n labelKey = 'label',\n\n // Configuration\n searchable = false,\n clearable = true,\n disabled = false,\n required = false,\n loading = false,\n name,\n id,\n\n // Placeholder/Default Option\n placeholder = 'Select...',\n showSelectOption = true,\n selectOptionText = 'Select an option',\n selectOptionValue = '',\n\n // Appearance\n theme = 'default',\n color = 'violet', // violet, blue, emerald, rose, amber, black\n size = 'md',\n rounded = 'lg',\n fullWidth = false,\n\n // Label & Help\n label,\n helperText,\n\n // Icons\n leftIcon,\n leftIconVariant = 'fas',\n dropdownIcon = 'chevron-down',\n clearIcon = 'xmark',\n\n // Animation\n animate = true,\n focusEffect = 'glow',\n\n // Customization\n className = '',\n labelClassName = '',\n optionsClassName = '',\n renderOption,\n renderSelectedValue,\n noOptionsText = 'No options found',\n optionHeight = 'auto',\n maxDropdownHeight = '240px',\n\n // Style\n style,\n\n ...props\n}, ref) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n const [internalValue, setInternalValue] = useState(defaultValue);\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n const [apiOptions, setApiOptions] = useState([]);\n const [apiLoading, setApiLoading] = useState(false);\n const [apiError, setApiError] = useState(null);\n const containerRef = useRef(null);\n const searchInputRef = useRef(null);\n const triggerRef = useRef(null);\n\n // Use forwarded ref or internal ref\n const selectRef = ref || triggerRef;\n\n // Derived state\n const actualValue = value !== undefined ? value : internalValue;\n\n // Determine if loading (prop or API)\n const isLoading = loading || apiLoading;\n\n // Determine options source (prop or API)\n const optionsSource = api ? apiOptions : options;\n\n // Normalize options to ensure they fit { label, value } format\n const normalizedOptions = useMemo(() => {\n return optionsSource.map(opt => {\n if (typeof opt === 'string' || typeof opt === 'number') {\n return { label: String(opt), value: opt, _original: opt };\n }\n // Map using valueKey and labelKey\n return {\n label: opt[labelKey] !== undefined ? String(opt[labelKey]) : String(opt.label || ''),\n value: opt[valueKey] !== undefined ? opt[valueKey] : opt.value,\n icon: opt.icon,\n iconVariant: opt.iconVariant,\n description: opt.description,\n _original: opt\n };\n });\n }, [optionsSource, valueKey, labelKey]);\n\n // Filter options based on search\n const filteredOptions = useMemo(() => {\n if (!searchable || !searchQuery) return normalizedOptions;\n return normalizedOptions.filter(opt =>\n String(opt.label).toLowerCase().includes(searchQuery.toLowerCase()) ||\n (opt.description && String(opt.description).toLowerCase().includes(searchQuery.toLowerCase()))\n );\n }, [normalizedOptions, searchQuery, searchable]);\n\n // Get selected option object\n const selectedOption = useMemo(() => {\n return normalizedOptions.find(opt => opt.value === actualValue) || null;\n }, [normalizedOptions, actualValue]);\n\n // Handle outside click to close\n useEffect(() => {\n const handleClickOutside = (event) => {\n if (containerRef.current && !containerRef.current.contains(event.target)) {\n setIsOpen(false);\n setSearchQuery('');\n setHighlightedIndex(-1);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n // Fetch data from API\n useEffect(() => {\n if (!api) return;\n\n const fetchData = async () => {\n setApiLoading(true);\n setApiError(null);\n try {\n const response = await fetch(api, {\n method: apiMethod,\n headers: {\n 'Content-Type': 'application/json',\n ...apiHeaders\n }\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n let data = await response.json();\n\n // Navigate to nested data path if specified (e.g., 'data.items')\n if (apiDataPath) {\n const paths = apiDataPath.split('.');\n for (const path of paths) {\n data = data?.[path];\n }\n }\n\n if (Array.isArray(data)) {\n setApiOptions(data);\n } else {\n console.warn('Select API response is not an array:', data);\n setApiOptions([]);\n }\n } catch (error) {\n console.error('Select API fetch error:', error);\n setApiError(error.message);\n setApiOptions([]);\n } finally {\n setApiLoading(false);\n }\n };\n\n fetchData();\n }, [api, apiMethod, apiDataPath]);\n\n // Focus search input when opening\n useEffect(() => {\n if (isOpen && searchable && searchInputRef.current) {\n setTimeout(() => searchInputRef.current?.focus(), 50);\n }\n }, [isOpen, searchable]);\n\n // Reset highlighted index when options change\n useEffect(() => {\n setHighlightedIndex(-1);\n }, [filteredOptions]);\n\n // Handlers\n const handleToggle = () => {\n if (!disabled && !isLoading) {\n setIsOpen(!isOpen);\n if (isOpen) {\n setSearchQuery('');\n setHighlightedIndex(-1);\n }\n }\n };\n\n const handleSelect = (optionValue, e) => {\n if (e) e.stopPropagation();\n\n if (value === undefined) {\n setInternalValue(optionValue);\n }\n onChange?.(optionValue, normalizedOptions.find(o => o.value === optionValue));\n setIsOpen(false);\n setSearchQuery('');\n setHighlightedIndex(-1);\n };\n\n const handleClear = (e) => {\n e.stopPropagation();\n const newValue = selectOptionValue;\n if (value === undefined) setInternalValue(newValue);\n onChange?.(newValue, null);\n setSearchQuery('');\n };\n\n const handleKeyDown = (e) => {\n if (disabled) return;\n\n switch (e.key) {\n case 'Enter':\n e.preventDefault();\n if (isOpen && highlightedIndex >= 0 && filteredOptions[highlightedIndex]) {\n handleSelect(filteredOptions[highlightedIndex].value);\n } else if (!isOpen) {\n setIsOpen(true);\n }\n break;\n case 'Escape':\n setIsOpen(false);\n setSearchQuery('');\n break;\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n setHighlightedIndex(prev =>\n prev < filteredOptions.length - 1 ? prev + 1 : prev\n );\n }\n break;\n case 'ArrowUp':\n e.preventDefault();\n setHighlightedIndex(prev => prev > 0 ? prev - 1 : 0);\n break;\n default:\n break;\n }\n };\n\n // Color Configuration\n const colorConfig = {\n violet: {\n focus: 'border-violet-500 ring-violet-500/20',\n optionSelected: 'bg-violet-100 dark:bg-violet-900/30 text-violet-700 dark:text-violet-300',\n icon: 'text-violet-500',\n iconSelected: 'text-violet-500'\n },\n blue: {\n focus: 'border-blue-500 ring-blue-500/20',\n optionSelected: 'bg-blue-100 dark:bg-blue-900/30 text-blue-700 dark:text-blue-300',\n icon: 'text-blue-500',\n iconSelected: 'text-blue-500'\n },\n emerald: {\n focus: 'border-emerald-500 ring-emerald-500/20',\n optionSelected: 'bg-emerald-100 dark:bg-emerald-900/30 text-emerald-700 dark:text-emerald-300',\n icon: 'text-emerald-500',\n iconSelected: 'text-emerald-500'\n },\n rose: {\n focus: 'border-rose-500 ring-rose-500/20',\n optionSelected: 'bg-rose-100 dark:bg-rose-900/30 text-rose-700 dark:text-rose-300',\n icon: 'text-rose-500',\n iconSelected: 'text-rose-500'\n },\n amber: {\n focus: 'border-amber-500 ring-amber-500/20',\n optionSelected: 'bg-amber-100 dark:bg-amber-900/30 text-amber-700 dark:text-amber-300',\n icon: 'text-amber-500',\n iconSelected: 'text-amber-500'\n },\n black: {\n focus: 'border-slate-800 dark:border-slate-200 ring-slate-500/20',\n optionSelected: 'bg-slate-100 dark:bg-slate-800 text-slate-800 dark:text-slate-200',\n icon: 'text-slate-800 dark:text-slate-200',\n iconSelected: 'text-slate-800 dark:text-slate-200'\n }\n };\n\n const colors = colorConfig[color] || colorConfig.violet;\n\n\n // Size configurations (matching Input component)\n const sizeConfig = {\n xs: { height: 'h-7', text: 'text-xs', px: 'px-2', icon: 'text-xs', label: 'text-xs' },\n sm: { height: 'h-8', text: 'text-xs', px: 'px-3', icon: 'text-xs', label: 'text-xs' },\n md: { height: 'h-10', text: 'text-sm', px: 'px-4', icon: 'text-sm', label: 'text-sm' },\n lg: { height: 'h-12', text: 'text-base', px: 'px-5', icon: 'text-base', label: 'text-base' },\n xl: { height: 'h-14', text: 'text-lg', px: 'px-6', icon: 'text-lg', label: 'text-lg' }\n };\n\n // Rounded configurations (matching Input component)\n const roundedConfig = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n '2xl': 'rounded-2xl',\n full: 'rounded-full'\n };\n\n // Theme configurations (matching Input component)\n const themeConfig = {\n default: {\n wrapper: 'bg-slate-50/50 dark:bg-slate-900/50 border border-slate-200 dark:border-slate-700 shadow-sm',\n text: 'text-slate-900 dark:text-white',\n placeholder: 'text-slate-400 dark:text-slate-500',\n focus: 'bg-white dark:bg-slate-950 ring-1',\n icon: 'text-slate-400 dark:text-slate-500',\n disabled: 'opacity-50 cursor-not-allowed bg-slate-100 dark:bg-slate-900',\n dropdown: 'bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-700 shadow-xl shadow-slate-200/50 dark:shadow-slate-950/50',\n option: 'text-slate-700 dark:text-slate-300 hover:bg-slate-100 dark:hover:bg-slate-800',\n optionHighlighted: 'bg-slate-50 dark:bg-slate-800/50',\n searchInput: 'bg-slate-50 dark:bg-slate-800/50 border-slate-200 dark:border-slate-700'\n },\n glass: {\n wrapper: 'bg-white/60 dark:bg-slate-800/30 backdrop-blur-xl border border-slate-200/60 dark:border-slate-700/30 shadow-sm',\n text: 'text-slate-900 dark:text-white',\n placeholder: 'text-slate-400 dark:text-slate-400/50',\n focus: 'bg-white/80 dark:bg-slate-800/40 ring-1',\n icon: 'text-slate-400 dark:text-slate-400/70',\n disabled: 'opacity-40 cursor-not-allowed',\n dropdown: 'bg-white/95 dark:bg-slate-900/95 backdrop-blur-xl border border-slate-200/60 dark:border-slate-700/30 shadow-xl',\n option: 'text-slate-700 dark:text-slate-300 hover:bg-slate-100/50 dark:hover:bg-slate-800/50',\n optionHighlighted: 'bg-slate-50/50 dark:bg-slate-800/30',\n searchInput: 'bg-white/50 dark:bg-slate-800/30 border-slate-200/50 dark:border-slate-700/30 backdrop-blur-sm'\n },\n minimal: {\n wrapper: 'bg-transparent border-b-2 border-slate-200 dark:border-slate-700 rounded-none shadow-none',\n text: 'text-slate-900 dark:text-white',\n placeholder: 'text-slate-400 dark:text-slate-500',\n focus: '',\n icon: 'text-slate-400 dark:text-slate-500',\n disabled: 'opacity-50 cursor-not-allowed',\n dropdown: 'bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-700 shadow-xl mt-2',\n option: 'text-slate-700 dark:text-slate-300 hover:bg-slate-50 dark:hover:bg-slate-800',\n optionHighlighted: 'bg-slate-50 dark:bg-slate-800/50',\n searchInput: 'bg-slate-50 dark:bg-slate-800/50 border-slate-200 dark:border-slate-700'\n },\n outlined: {\n wrapper: 'bg-transparent border-2 border-slate-300 dark:border-slate-600',\n text: 'text-slate-900 dark:text-white',\n placeholder: 'text-slate-400 dark:text-slate-500',\n focus: 'ring-2',\n icon: 'text-slate-400 dark:text-slate-500',\n disabled: 'opacity-50 cursor-not-allowed',\n dropdown: 'bg-white dark:bg-slate-900 border-2 border-slate-300 dark:border-slate-600 shadow-lg',\n option: 'text-slate-700 dark:text-slate-300 hover:bg-slate-100 dark:hover:bg-slate-800',\n optionHighlighted: 'bg-slate-50 dark:bg-slate-800/50',\n searchInput: 'bg-transparent border-2 border-slate-300 dark:border-slate-600'\n },\n filled: {\n wrapper: 'bg-slate-100 dark:bg-slate-800 border-2 border-transparent',\n text: 'text-slate-900 dark:text-white',\n placeholder: 'text-slate-500 dark:text-slate-400',\n focus: 'bg-white dark:bg-slate-700 ring-1',\n icon: 'text-slate-500 dark:text-slate-400',\n disabled: 'opacity-50 cursor-not-allowed bg-slate-200 dark:bg-slate-900',\n dropdown: 'bg-white dark:bg-slate-800 border border-slate-200 dark:border-slate-700 shadow-xl',\n option: 'text-slate-700 dark:text-slate-300 hover:bg-slate-100 dark:hover:bg-slate-700',\n optionHighlighted: 'bg-slate-100 dark:bg-slate-700/50',\n searchInput: 'bg-slate-50 dark:bg-slate-700/50 border-slate-200 dark:border-slate-600'\n }\n };\n\n // Focus effect configurations\n const focusEffectConfig = {\n none: '',\n glow: 'transition-shadow duration-300',\n ring: 'transition-all duration-200',\n border: 'transition-colors duration-200'\n };\n\n const currentSize = sizeConfig[size] || sizeConfig.md;\n const currentTheme = themeConfig[theme] || themeConfig.default;\n const currentRounded = roundedConfig[rounded] || roundedConfig.lg;\n const currentFocusEffect = focusEffectConfig[focusEffect] || '';\n\n // Check if there's a real selection (not the placeholder)\n const hasSelection = actualValue !== selectOptionValue && actualValue !== '' && selectedOption;\n\n // Render the display value\n const renderDisplayValue = () => {\n if (renderSelectedValue && selectedOption) {\n return renderSelectedValue(selectedOption);\n }\n\n if (!hasSelection) {\n return <span className={`${currentTheme.placeholder} text-sm`}>{placeholder}</span>;\n }\n\n return (\n <div className=\"flex items-center gap-2 truncate\">\n {selectedOption.icon && (\n <Icon\n icon={selectedOption.icon}\n variant={selectedOption.iconVariant || 'fas'}\n className={currentTheme.icon}\n />\n )}\n <span className={`truncate ${currentTheme.text} ${currentSize.text}`}>{selectedOption.label}</span>\n </div>\n );\n };\n\n // Render an option\n const renderOptionContent = (opt, isSelected, isHighlighted) => {\n if (renderOption) {\n return renderOption(opt, isSelected);\n }\n\n return (\n <div className=\"flex items-center justify-between w-full\">\n <div className=\"flex items-center gap-3\">\n {opt.icon && (\n <Icon\n icon={opt.icon}\n variant={opt.iconVariant || 'fas'}\n className={isSelected ? colors.iconSelected : 'text-slate-400 dark:text-slate-500'}\n />\n )}\n <div className=\"flex flex-col\">\n <span className={`${currentSize.text} ${isSelected ? 'font-medium' : ''}`}>\n {opt.label}\n </span>\n {opt.description && (\n <span className=\"text-xs text-slate-500 dark:text-slate-400\">\n {opt.description}\n </span>\n )}\n </div>\n </div>\n {isSelected && (\n <Icon icon=\"check\" variant=\"fas\" className={`${colors.iconSelected} text-sm flex-shrink-0`} />\n )}\n </div>\n );\n };\n\n return (\n <div\n className={`${fullWidth ? 'w-full' : 'inline-block'} relative ${isOpen ? 'z-[100]' : ''}`}\n ref={containerRef}\n >\n {/* Label */}\n {label && (\n <label\n htmlFor={id || name}\n className={`block mb-1.5 font-medium text-slate-700 dark:text-slate-300 ${currentSize.label} ${labelClassName}`}\n >\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n\n {/* Hidden input for form compatibility */}\n <input\n type=\"hidden\"\n name={name}\n value={actualValue}\n required={required}\n />\n\n {/* Select Trigger */}\n <div\n ref={selectRef}\n tabIndex={disabled ? -1 : 0}\n onClick={handleToggle}\n onKeyDown={handleKeyDown}\n className={`\n relative flex items-center justify-between cursor-pointer\n ${currentSize.height} ${currentSize.px}\n ${theme === 'minimal' ? '' : currentRounded}\n ${currentTheme.wrapper}\n ${isOpen ? `${currentTheme.focus} ${colors.focus}` : ''}\n ${disabled ? currentTheme.disabled : ''}\n ${animate ? currentFocusEffect : ''}\n ${className}\n outline-none\n `}\n style={style}\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-disabled={disabled}\n {...props}\n >\n {/* Left Icon */}\n {leftIcon && (\n <span className={`flex-shrink-0 mr-2 ${currentTheme.icon} ${currentSize.icon}`}>\n {typeof leftIcon === 'string' ? (\n <Icon icon={leftIcon} variant={leftIconVariant} />\n ) : leftIcon}\n </span>\n )}\n\n {/* Display Value */}\n <div className=\"flex-1 min-w-0 overflow-hidden\">\n {renderDisplayValue()}\n </div>\n\n {/* Right Side Icons */}\n <div className=\"flex items-center gap-1 ml-2 flex-shrink-0\">\n {/* Loading Spinner */}\n {isLoading && (\n <Icon icon=\"spinner-third\" variant=\"fad\" className=\"animate-spin text-slate-400 text-sm\" />\n )}\n\n {/* Clear Button */}\n {clearable && hasSelection && !disabled && !isLoading && (\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"w-6 h-6 flex items-center justify-center rounded-full hover:bg-slate-200 dark:hover:bg-slate-700 text-slate-400 hover:text-slate-600 dark:hover:text-slate-300 transition-colors\"\n tabIndex={-1}\n >\n <Icon icon={clearIcon} size=\"sm\" />\n </button>\n )}\n\n {/* Dropdown Arrow */}\n <span className={`${currentTheme.icon} transition-transform duration-200 ${isOpen ? 'rotate-180' : ''}`}>\n <Icon icon={dropdownIcon} variant=\"fas\" className=\"text-xs\" />\n </span>\n </div>\n </div>\n\n {/* Helper Text */}\n {helperText && (\n <p className=\"mt-1.5 text-xs text-slate-500 dark:text-slate-400\">\n {helperText}\n </p>\n )}\n\n {/* Dropdown */}\n {isOpen && !disabled && (\n <div\n className={`\n absolute z-50 w-full mt-1.5 overflow-hidden\n ${theme === 'minimal' ? 'rounded-lg' : currentRounded}\n ${currentTheme.dropdown}\n `}\n style={{ maxWidth: containerRef.current?.offsetWidth }}\n role=\"listbox\"\n >\n {/* Search Input */}\n {searchable && (\n <div className=\"p-2 border-b border-slate-100 dark:border-slate-800\">\n <div className=\"relative\">\n <input\n ref={searchInputRef}\n type=\"text\"\n value={searchQuery}\n onChange={(e) => {\n setSearchQuery(e.target.value);\n onSearch?.(e.target.value);\n }}\n placeholder=\"Search...\"\n className={`\n w-full text-sm rounded-md pl-8 pr-3 py-2 outline-none\n ${currentTheme.searchInput}\n ${currentTheme.text}\n border\n ${colors.focus}\n placeholder:text-slate-400 dark:placeholder:text-slate-500\n `}\n onClick={(e) => e.stopPropagation()}\n />\n <span className=\"absolute left-2.5 top-1/2 -translate-y-1/2 text-slate-400 text-xs\">\n <Icon icon=\"search\" variant=\"fas\" />\n </span>\n </div>\n </div>\n )}\n\n {/* Options List */}\n <div\n className=\"overflow-y-auto p-1\"\n style={{ maxHeight: maxDropdownHeight }}\n >\n {/* Default \"Select\" Option */}\n {showSelectOption && !searchQuery && (\n <div\n onClick={(e) => handleSelect(selectOptionValue, e)}\n className={`\n flex items-center px-3 py-2 rounded-md cursor-pointer text-sm transition-colors\n ${actualValue === selectOptionValue ? colors.optionSelected : ''}\n ${(highlightedIndex === -1 && actualValue !== selectOptionValue) ? currentTheme.optionHighlighted : ''}\n ${actualValue !== selectOptionValue ? currentTheme.option : ''}\n ${optionsClassName}\n `}\n role=\"option\"\n aria-selected={actualValue === selectOptionValue}\n >\n <span className=\"text-slate-400 dark:text-slate-500\">{selectOptionText}</span>\n </div>\n )}\n\n {/* Filtered Options */}\n {filteredOptions.length > 0 ? (\n filteredOptions.map((opt, index) => {\n const isSelected = actualValue === opt.value;\n const isHighlighted = highlightedIndex === index;\n\n return (\n <div\n key={opt.value}\n onClick={(e) => handleSelect(opt.value, e)}\n onMouseEnter={() => setHighlightedIndex(index)}\n className={`\n px-3 py-2 rounded-md cursor-pointer transition-colors\n ${isSelected ? colors.optionSelected : ''}\n ${isHighlighted && !isSelected ? currentTheme.optionHighlighted : ''}\n ${!isSelected && !isHighlighted ? currentTheme.option : ''}\n ${optionsClassName}\n `}\n style={optionHeight !== 'auto' ? { height: optionHeight } : {}}\n role=\"option\"\n aria-selected={isSelected}\n >\n {renderOptionContent(opt, isSelected, isHighlighted)}\n </div>\n );\n })\n ) : (\n <div className=\"px-3 py-6 text-center text-sm text-slate-500 dark:text-slate-400\">\n <Icon icon=\"inbox\" variant=\"fas\" className=\"text-2xl mb-2 opacity-50\" />\n <p>{noOptionsText}</p>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n});\n\nSelect.displayName = 'Select';\n\nSelect.propTypes = {\n // Data\n options: PropTypes.arrayOf(PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number,\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.any.isRequired,\n icon: PropTypes.string,\n iconVariant: PropTypes.oneOf(['fas', 'far', 'fal', 'fad']),\n description: PropTypes.string,\n })\n ])),\n value: PropTypes.any,\n defaultValue: PropTypes.any,\n onChange: PropTypes.func,\n onSearch: PropTypes.func,\n valueKey: PropTypes.string,\n labelKey: PropTypes.string,\n\n // API\n api: PropTypes.string,\n apiMethod: PropTypes.oneOf(['GET', 'POST', 'PUT', 'PATCH']),\n apiHeaders: PropTypes.object,\n apiDataPath: PropTypes.string,\n\n // Configuration\n searchable: PropTypes.bool,\n clearable: PropTypes.bool,\n disabled: PropTypes.bool,\n required: PropTypes.bool,\n loading: PropTypes.bool,\n name: PropTypes.string,\n id: PropTypes.string,\n\n // Placeholder\n placeholder: PropTypes.string,\n showSelectOption: PropTypes.bool,\n selectOptionText: PropTypes.string,\n selectOptionValue: PropTypes.any,\n\n // Appearance\n theme: PropTypes.oneOf(['default', 'glass', 'minimal', 'outlined', 'filled']),\n color: PropTypes.oneOf(['violet', 'blue', 'emerald', 'rose', 'amber', 'black']),\n size: PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl']),\n rounded: PropTypes.oneOf(['none', 'sm', 'md', 'lg', 'xl', '2xl', 'full']),\n fullWidth: PropTypes.bool,\n\n // Label & Help\n label: PropTypes.string,\n helperText: PropTypes.string,\n\n // Icons\n leftIcon: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n leftIconVariant: PropTypes.oneOf(['fas', 'far', 'fal', 'fad']),\n dropdownIcon: PropTypes.string,\n clearIcon: PropTypes.string,\n\n // Animation\n animate: PropTypes.bool,\n focusEffect: PropTypes.oneOf(['none', 'glow', 'ring', 'border']),\n\n // Customization\n className: PropTypes.string,\n labelClassName: PropTypes.string,\n optionsClassName: PropTypes.string,\n renderOption: PropTypes.func,\n renderSelectedValue: PropTypes.func,\n noOptionsText: PropTypes.string,\n optionHeight: PropTypes.string,\n maxDropdownHeight: PropTypes.string,\n style: PropTypes.object,\n};\n\nexport default Select;\n","import React, { useState, useRef, useEffect, useMemo, forwardRef } from 'react';\nimport PropTypes from 'prop-types';\nimport Icon from '../Icon';\n\n/**\n * MultiSelect Component - A highly customizable multi-select dropdown with search support\n * \n * Features:\n * - Multiple selection with chips/tags display\n * - Multiple themes (default, glass, minimal, outlined, filled)\n * - Multiple colors (violet, blue, emerald, rose, amber, black)\n * - Search/filter functionality\n * - Custom option rendering (text, icons, descriptions)\n * - Clear all selections button\n * - Individual chip removal\n * - Form compatible (name, required, value)\n * - Matches Select and Input component styling\n */\nconst MultiSelect = forwardRef(({\n // Data\n options = [],\n value,\n defaultValue = [],\n onChange,\n onSearch,\n\n // API\n api,\n apiMethod = 'GET',\n apiHeaders = {},\n apiDataPath = '',\n\n // Field mapping for object arrays\n valueKey = 'value',\n labelKey = 'label',\n\n // Configuration\n searchable = false,\n clearable = true,\n disabled = false,\n required = false,\n loading = false,\n name,\n id,\n maxSelections,\n\n // Placeholder\n placeholder = 'Select...',\n\n // Appearance\n theme = 'default',\n color = 'violet', // violet, blue, emerald, rose, amber, black\n size = 'md',\n rounded = 'lg',\n fullWidth = false,\n\n // Chip display mode\n chipDisplay = 'inline', // 'inline', 'count', 'compact'\n maxVisibleChips = 3,\n\n // Label & Help\n label,\n helperText,\n\n // Icons\n leftIcon,\n leftIconVariant = 'fas',\n dropdownIcon = 'chevron-down',\n clearIcon = 'xmark',\n\n // Animation\n animate = true,\n focusEffect = 'glow',\n\n // Customization\n className = '',\n labelClassName = '',\n optionsClassName = '',\n chipClassName = '',\n renderOption,\n renderChip,\n noOptionsText = 'No options found',\n optionHeight = 'auto',\n maxDropdownHeight = '240px',\n\n // Style\n style,\n\n ...props\n}, ref) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n const [internalValue, setInternalValue] = useState(defaultValue);\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n const [apiOptions, setApiOptions] = useState([]);\n const [apiLoading, setApiLoading] = useState(false);\n const [apiError, setApiError] = useState(null);\n const containerRef = useRef(null);\n const searchInputRef = useRef(null);\n const triggerRef = useRef(null);\n\n // Use forwarded ref or internal ref\n const selectRef = ref || triggerRef;\n\n // Derived state - always an array for multi-select\n const actualValue = Array.isArray(value !== undefined ? value : internalValue)\n ? (value !== undefined ? value : internalValue)\n : [];\n\n // Determine if loading (prop or API)\n const isLoading = loading || apiLoading;\n\n // Determine options source (prop or API)\n const optionsSource = api ? apiOptions : options;\n\n // Normalize options to ensure they fit { label, value } format\n const normalizedOptions = useMemo(() => {\n return optionsSource.map(opt => {\n if (typeof opt === 'string' || typeof opt === 'number') {\n return { label: String(opt), value: opt, _original: opt };\n }\n return {\n label: opt[labelKey] !== undefined ? String(opt[labelKey]) : String(opt.label || ''),\n value: opt[valueKey] !== undefined ? opt[valueKey] : opt.value,\n icon: opt.icon,\n iconVariant: opt.iconVariant,\n description: opt.description,\n _original: opt\n };\n });\n }, [optionsSource, valueKey, labelKey]);\n\n // Filter options based on search\n const filteredOptions = useMemo(() => {\n if (!searchable || !searchQuery) return normalizedOptions;\n return normalizedOptions.filter(opt =>\n String(opt.label).toLowerCase().includes(searchQuery.toLowerCase()) ||\n (opt.description && String(opt.description).toLowerCase().includes(searchQuery.toLowerCase()))\n );\n }, [normalizedOptions, searchQuery, searchable]);\n\n // Get selected option objects\n const selectedOptions = useMemo(() => {\n return actualValue\n .map(val => normalizedOptions.find(opt => opt.value === val))\n .filter(Boolean);\n }, [normalizedOptions, actualValue]);\n\n // Handle outside click to close\n useEffect(() => {\n const handleClickOutside = (event) => {\n if (containerRef.current && !containerRef.current.contains(event.target)) {\n setIsOpen(false);\n setSearchQuery('');\n setHighlightedIndex(-1);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n // Fetch data from API\n useEffect(() => {\n if (!api) return;\n\n const fetchData = async () => {\n setApiLoading(true);\n setApiError(null);\n try {\n const response = await fetch(api, {\n method: apiMethod,\n headers: {\n 'Content-Type': 'application/json',\n ...apiHeaders\n }\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n let data = await response.json();\n\n if (apiDataPath) {\n const paths = apiDataPath.split('.');\n for (const path of paths) {\n data = data?.[path];\n }\n }\n\n if (Array.isArray(data)) {\n setApiOptions(data);\n } else {\n console.warn('MultiSelect API response is not an array:', data);\n setApiOptions([]);\n }\n } catch (error) {\n console.error('MultiSelect API fetch error:', error);\n setApiError(error.message);\n setApiOptions([]);\n } finally {\n setApiLoading(false);\n }\n };\n\n fetchData();\n }, [api, apiMethod, apiDataPath]);\n\n // Focus search input when opening\n useEffect(() => {\n if (isOpen && searchable && searchInputRef.current) {\n setTimeout(() => searchInputRef.current?.focus(), 50);\n }\n }, [isOpen, searchable]);\n\n // Reset highlighted index when options change\n useEffect(() => {\n setHighlightedIndex(-1);\n }, [filteredOptions]);\n\n // Handlers\n const handleToggle = () => {\n if (!disabled && !isLoading) {\n setIsOpen(!isOpen);\n if (isOpen) {\n setSearchQuery('');\n setHighlightedIndex(-1);\n }\n }\n };\n\n const handleSelect = (optionValue, e) => {\n if (e) e.stopPropagation();\n\n let newValue;\n if (actualValue.includes(optionValue)) {\n // Remove if already selected\n newValue = actualValue.filter(v => v !== optionValue);\n } else {\n // Add if not at max selections\n if (maxSelections && actualValue.length >= maxSelections) {\n return; // Don't add more\n }\n newValue = [...actualValue, optionValue];\n }\n\n if (value === undefined) {\n setInternalValue(newValue);\n }\n onChange?.(newValue, newValue.map(v => normalizedOptions.find(o => o.value === v)));\n setSearchQuery('');\n };\n\n const handleRemoveChip = (optionValue, e) => {\n e.stopPropagation();\n const newValue = actualValue.filter(v => v !== optionValue);\n if (value === undefined) setInternalValue(newValue);\n onChange?.(newValue, newValue.map(v => normalizedOptions.find(o => o.value === v)));\n };\n\n const handleClear = (e) => {\n e.stopPropagation();\n const newValue = [];\n if (value === undefined) setInternalValue(newValue);\n onChange?.(newValue, []);\n setSearchQuery('');\n };\n\n const handleKeyDown = (e) => {\n if (disabled) return;\n\n switch (e.key) {\n case 'Enter':\n e.preventDefault();\n if (isOpen && highlightedIndex >= 0 && filteredOptions[highlightedIndex]) {\n handleSelect(filteredOptions[highlightedIndex].value);\n } else if (!isOpen) {\n setIsOpen(true);\n }\n break;\n case 'Escape':\n setIsOpen(false);\n setSearchQuery('');\n break;\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n setHighlightedIndex(prev =>\n prev < filteredOptions.length - 1 ? prev + 1 : prev\n );\n }\n break;\n case 'ArrowUp':\n e.preventDefault();\n setHighlightedIndex(prev => prev > 0 ? prev - 1 : 0);\n break;\n default:\n break;\n }\n };\n\n // Color Configuration\n const colorConfig = {\n violet: {\n focus: 'border-violet-500 ring-violet-500/20',\n optionSelected: 'bg-violet-100 dark:bg-violet-900/30 text-violet-700 dark:text-violet-300',\n iconSelected: 'text-violet-500',\n chip: 'bg-violet-100 dark:bg-violet-900/40 text-violet-700 dark:text-violet-300 border border-violet-200 dark:border-violet-800',\n checkbox: 'bg-violet-500 border-violet-500',\n clearButton: 'text-violet-600 dark:text-violet-400'\n },\n blue: {\n focus: 'border-blue-500 ring-blue-500/20',\n optionSelected: 'bg-blue-100 dark:bg-blue-900/30 text-blue-700 dark:text-blue-300',\n iconSelected: 'text-blue-500',\n chip: 'bg-blue-100 dark:bg-blue-900/40 text-blue-700 dark:text-blue-300 border border-blue-200 dark:border-blue-800',\n checkbox: 'bg-blue-500 border-blue-500',\n clearButton: 'text-blue-600 dark:text-blue-400'\n },\n emerald: {\n focus: 'border-emerald-500 ring-emerald-500/20',\n optionSelected: 'bg-emerald-100 dark:bg-emerald-900/30 text-emerald-700 dark:text-emerald-300',\n iconSelected: 'text-emerald-500',\n chip: 'bg-emerald-100 dark:bg-emerald-900/40 text-emerald-700 dark:text-emerald-300 border border-emerald-200 dark:border-emerald-800',\n checkbox: 'bg-emerald-500 border-emerald-500',\n clearButton: 'text-emerald-600 dark:text-emerald-400'\n },\n rose: {\n focus: 'border-rose-500 ring-rose-500/20',\n optionSelected: 'bg-rose-100 dark:bg-rose-900/30 text-rose-700 dark:text-rose-300',\n iconSelected: 'text-rose-500',\n chip: 'bg-rose-100 dark:bg-rose-900/40 text-rose-700 dark:text-rose-300 border border-rose-200 dark:border-rose-800',\n checkbox: 'bg-rose-500 border-rose-500',\n clearButton: 'text-rose-600 dark:text-rose-400'\n },\n amber: {\n focus: 'border-amber-500 ring-amber-500/20',\n optionSelected: 'bg-amber-100 dark:bg-amber-900/30 text-amber-700 dark:text-amber-300',\n iconSelected: 'text-amber-500',\n chip: 'bg-amber-100 dark:bg-amber-900/40 text-amber-700 dark:text-amber-300 border border-amber-200 dark:border-amber-800',\n checkbox: 'bg-amber-500 border-amber-500',\n clearButton: 'text-amber-600 dark:text-amber-400'\n },\n black: {\n focus: 'border-slate-800 dark:border-slate-200 ring-slate-500/20',\n optionSelected: 'bg-slate-100 dark:bg-slate-800 text-slate-800 dark:text-slate-200',\n iconSelected: 'text-slate-800 dark:text-slate-200',\n chip: 'bg-slate-100 dark:bg-slate-800 text-slate-800 dark:text-slate-200 border border-slate-200 dark:border-slate-700',\n checkbox: 'bg-slate-800 dark:bg-slate-200 border-slate-800 dark:border-slate-200',\n clearButton: 'text-slate-800 dark:text-slate-200'\n }\n };\n\n const colors = colorConfig[color] || colorConfig.violet;\n\n // Size configurations (matching Input component)\n const sizeConfig = {\n xs: { minHeight: 'min-h-7', text: 'text-xs', px: 'px-2', icon: 'text-xs', label: 'text-xs', chip: 'text-xs px-1.5 py-0.5' },\n sm: { minHeight: 'min-h-8', text: 'text-xs', px: 'px-3', icon: 'text-xs', label: 'text-xs', chip: 'text-xs px-2 py-0.5' },\n md: { minHeight: 'min-h-10', text: 'text-sm', px: 'px-4', icon: 'text-sm', label: 'text-sm', chip: 'text-xs px-2 py-1' },\n lg: { minHeight: 'min-h-12', text: 'text-base', px: 'px-5', icon: 'text-base', label: 'text-base', chip: 'text-sm px-2.5 py-1' },\n xl: { minHeight: 'min-h-14', text: 'text-lg', px: 'px-6', icon: 'text-lg', label: 'text-lg', chip: 'text-sm px-3 py-1.5' }\n };\n\n // Rounded configurations (matching Input component)\n const roundedConfig = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n '2xl': 'rounded-2xl',\n full: 'rounded-full'\n };\n\n // Theme configurations (matching Select component)\n const themeConfig = {\n default: {\n wrapper: 'bg-slate-50/50 dark:bg-slate-900/50 border border-slate-200 dark:border-slate-700 shadow-sm',\n text: 'text-slate-900 dark:text-white',\n placeholder: 'text-slate-400 dark:text-slate-500',\n focus: 'bg-white dark:bg-slate-950 ring-1',\n icon: 'text-slate-400 dark:text-slate-500',\n disabled: 'opacity-50 cursor-not-allowed bg-slate-100 dark:bg-slate-900',\n dropdown: 'bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-700 shadow-xl shadow-slate-200/50 dark:shadow-slate-950/50',\n option: 'text-slate-700 dark:text-slate-300 hover:bg-slate-100 dark:hover:bg-slate-800',\n optionHighlighted: 'bg-slate-50 dark:bg-slate-800/50',\n searchInput: 'bg-slate-50 dark:bg-slate-800/50 border-slate-200 dark:border-slate-700'\n },\n glass: {\n wrapper: 'bg-white/60 dark:bg-slate-800/30 backdrop-blur-xl border border-slate-200/60 dark:border-slate-700/30 shadow-sm',\n text: 'text-slate-900 dark:text-white',\n placeholder: 'text-slate-400 dark:text-slate-400/50',\n focus: 'bg-white/80 dark:bg-slate-800/40 ring-1',\n icon: 'text-slate-400 dark:text-slate-400/70',\n disabled: 'opacity-40 cursor-not-allowed',\n dropdown: 'bg-white/95 dark:bg-slate-900/95 backdrop-blur-xl border border-slate-200/60 dark:border-slate-700/30 shadow-xl',\n option: 'text-slate-700 dark:text-slate-300 hover:bg-slate-100/50 dark:hover:bg-slate-800/50',\n optionHighlighted: 'bg-slate-50/50 dark:bg-slate-800/30',\n searchInput: 'bg-white/50 dark:bg-slate-800/30 border-slate-200/50 dark:border-slate-700/30 backdrop-blur-sm'\n },\n minimal: {\n wrapper: 'bg-transparent border-b-2 border-slate-200 dark:border-slate-700 rounded-none shadow-none',\n text: 'text-slate-900 dark:text-white',\n placeholder: 'text-slate-400 dark:text-slate-500',\n focus: '',\n icon: 'text-slate-400 dark:text-slate-500',\n disabled: 'opacity-50 cursor-not-allowed',\n dropdown: 'bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-700 shadow-xl mt-2',\n option: 'text-slate-700 dark:text-slate-300 hover:bg-slate-50 dark:hover:bg-slate-800',\n optionHighlighted: 'bg-slate-50 dark:bg-slate-800/50',\n searchInput: 'bg-slate-50 dark:bg-slate-800/50 border-slate-200 dark:border-slate-700'\n },\n outlined: {\n wrapper: 'bg-transparent border-2 border-slate-300 dark:border-slate-600',\n text: 'text-slate-900 dark:text-white',\n placeholder: 'text-slate-400 dark:text-slate-500',\n focus: 'ring-2',\n icon: 'text-slate-400 dark:text-slate-500',\n disabled: 'opacity-50 cursor-not-allowed',\n dropdown: 'bg-white dark:bg-slate-900 border-2 border-slate-300 dark:border-slate-600 shadow-lg',\n option: 'text-slate-700 dark:text-slate-300 hover:bg-slate-100 dark:hover:bg-slate-800',\n optionHighlighted: 'bg-slate-50 dark:bg-slate-800/50',\n searchInput: 'bg-transparent border-2 border-slate-300 dark:border-slate-600'\n },\n filled: {\n wrapper: 'bg-slate-100 dark:bg-slate-800 border-2 border-transparent',\n text: 'text-slate-900 dark:text-white',\n placeholder: 'text-slate-500 dark:text-slate-400',\n focus: 'bg-white dark:bg-slate-700 ring-1',\n icon: 'text-slate-500 dark:text-slate-400',\n disabled: 'opacity-50 cursor-not-allowed bg-slate-200 dark:bg-slate-900',\n dropdown: 'bg-white dark:bg-slate-800 border border-slate-200 dark:border-slate-700 shadow-xl',\n option: 'text-slate-700 dark:text-slate-300 hover:bg-slate-100 dark:hover:bg-slate-700',\n optionHighlighted: 'bg-slate-100 dark:bg-slate-700/50',\n searchInput: 'bg-slate-50 dark:bg-slate-700/50 border-slate-200 dark:border-slate-600'\n }\n };\n\n // Focus effect configurations\n const focusEffectConfig = {\n none: '',\n glow: 'transition-shadow duration-300',\n ring: 'transition-all duration-200',\n border: 'transition-colors duration-200'\n };\n\n const currentSize = sizeConfig[size] || sizeConfig.md;\n const currentTheme = themeConfig[theme] || themeConfig.default;\n const currentRounded = roundedConfig[rounded] || roundedConfig.lg;\n const currentFocusEffect = focusEffectConfig[focusEffect] || '';\n\n // Check if there are selections\n const hasSelection = actualValue.length > 0;\n\n // Render chips for selected values\n const renderChips = () => {\n if (!hasSelection) {\n return <span className={`${currentTheme.placeholder} text-sm`}>{placeholder}</span>;\n }\n\n if (chipDisplay === 'count') {\n return (\n <span className={`${currentTheme.text} ${currentSize.text}`}>\n {actualValue.length} selected\n </span>\n );\n }\n\n const visibleChips = chipDisplay === 'compact'\n ? selectedOptions.slice(0, maxVisibleChips)\n : selectedOptions;\n const remainingCount = selectedOptions.length - visibleChips.length;\n\n return (\n <div className=\"flex flex-wrap gap-1.5 py-1\">\n {visibleChips.map(opt => {\n if (renderChip) {\n return renderChip(opt, () => handleRemoveChip(opt.value, { stopPropagation: () => { } }));\n }\n\n return (\n <span\n key={opt.value}\n className={`\n inline-flex items-center gap-1 rounded-full\n ${currentSize.chip}\n ${colors.chip}\n ${chipClassName}\n `}\n >\n {opt.icon && (\n <Icon\n icon={opt.icon}\n variant={opt.iconVariant || 'fas'}\n className=\"text-xs\"\n />\n )}\n <span className=\"truncate max-w-[100px]\">{opt.label}</span>\n <button\n type=\"button\"\n onClick={(e) => handleRemoveChip(opt.value, e)}\n className=\"ml-0.5 hover:bg-black/10 dark:hover:bg-white/10 rounded-full p-0.5 transition-colors\"\n tabIndex={-1}\n >\n <Icon icon=\"xmark\" size=\"sm\" />\n </button>\n </span>\n );\n })}\n {remainingCount > 0 && (\n <span className={`${currentSize.chip} ${colors.chip} rounded-full`}>\n +{remainingCount}\n </span>\n )}\n </div>\n );\n };\n\n // Render an option with checkbox\n const renderOptionContent = (opt, isSelected, isHighlighted) => {\n if (renderOption) {\n return renderOption(opt, isSelected);\n }\n\n return (\n <div className=\"flex items-center justify-between w-full\">\n <div className=\"flex items-center gap-3\">\n {/* Checkbox indicator */}\n <div className={`\n w-4 h-4 rounded border-2 flex items-center justify-center transition-colors\n ${isSelected\n ? colors.checkbox\n : 'border-slate-300 dark:border-slate-600'\n }\n `}>\n {isSelected && (\n <Icon icon=\"check\" variant=\"fas\" className={`${color === 'white' ? 'text-black' : 'text-white'} text-[10px]`} />\n )}\n </div>\n\n {opt.icon && (\n <Icon\n icon={opt.icon}\n variant={opt.iconVariant || 'fas'}\n className={isSelected ? colors.iconSelected : 'text-slate-400 dark:text-slate-500'}\n />\n )}\n <div className=\"flex flex-col\">\n <span className={`${currentSize.text} ${isSelected ? 'font-medium' : ''}`}>\n {opt.label}\n </span>\n {opt.description && (\n <span className=\"text-xs text-slate-500 dark:text-slate-400\">\n {opt.description}\n </span>\n )}\n </div>\n </div>\n </div>\n );\n };\n\n return (\n <div\n className={`${fullWidth ? 'w-full' : 'inline-block'} relative ${isOpen ? 'z-[100]' : ''}`}\n ref={containerRef}\n >\n {/* Label */}\n {label && (\n <label\n htmlFor={id || name}\n className={`block mb-1.5 font-medium text-slate-700 dark:text-slate-300 ${currentSize.label} ${labelClassName}`}\n >\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n\n {/* Hidden inputs for form compatibility */}\n {actualValue.map((val, idx) => (\n <input\n key={idx}\n type=\"hidden\"\n name={name ? `${name}[]` : undefined}\n value={val}\n />\n ))}\n\n {/* Select Trigger */}\n <div\n ref={selectRef}\n tabIndex={disabled ? -1 : 0}\n onClick={handleToggle}\n onKeyDown={handleKeyDown}\n className={`\n relative flex items-center justify-between cursor-pointer\n ${currentSize.minHeight} ${currentSize.px} py-1\n ${theme === 'minimal' ? '' : currentRounded}\n ${currentTheme.wrapper}\n ${isOpen ? `${currentTheme.focus} ${colors.focus}` : ''}\n ${disabled ? currentTheme.disabled : ''}\n ${animate ? currentFocusEffect : ''}\n ${className}\n outline-none\n `}\n style={style}\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-disabled={disabled}\n {...props}\n >\n {/* Left Icon */}\n {leftIcon && (\n <span className={`flex-shrink-0 mr-2 ${currentTheme.icon} ${currentSize.icon}`}>\n {typeof leftIcon === 'string' ? (\n <Icon icon={leftIcon} variant={leftIconVariant} />\n ) : leftIcon}\n </span>\n )}\n\n {/* Display Value (Chips) */}\n <div className=\"flex-1 min-w-0 overflow-hidden\">\n {renderChips()}\n </div>\n\n {/* Right Side Icons */}\n <div className=\"flex items-center gap-1 ml-2 flex-shrink-0\">\n {/* Loading Spinner */}\n {isLoading && (\n <Icon icon=\"spinner-third\" variant=\"fad\" className=\"animate-spin text-slate-400 text-sm\" />\n )}\n\n {/* Clear Button */}\n {clearable && hasSelection && !disabled && !isLoading && (\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"w-6 h-6 flex items-center justify-center rounded-full hover:bg-slate-200 dark:hover:bg-slate-700 text-slate-400 hover:text-slate-600 dark:hover:text-slate-300 transition-colors\"\n tabIndex={-1}\n >\n <Icon icon={clearIcon} size=\"sm\" />\n </button>\n )}\n\n {/* Dropdown Arrow */}\n <span className={`${currentTheme.icon} transition-transform duration-200 ${isOpen ? 'rotate-180' : ''}`}>\n <Icon icon={dropdownIcon} variant=\"fas\" className=\"text-xs\" />\n </span>\n </div>\n </div>\n\n {/* Helper Text */}\n {helperText && (\n <p className=\"mt-1.5 text-xs text-slate-500 dark:text-slate-400\">\n {helperText}\n </p>\n )}\n\n {/* Dropdown */}\n {isOpen && !disabled && (\n <div\n className={`\n absolute z-50 w-full mt-1.5 overflow-hidden\n ${theme === 'minimal' ? 'rounded-lg' : currentRounded}\n ${currentTheme.dropdown}\n `}\n style={{ maxWidth: containerRef.current?.offsetWidth }}\n role=\"listbox\"\n >\n {/* Search Input */}\n {searchable && (\n <div className=\"p-2 border-b border-slate-100 dark:border-slate-800\">\n <div className=\"relative\">\n <input\n ref={searchInputRef}\n type=\"text\"\n value={searchQuery}\n onChange={(e) => {\n setSearchQuery(e.target.value);\n onSearch?.(e.target.value);\n }}\n placeholder=\"Search...\"\n className={`\n w-full text-sm rounded-md pl-8 pr-3 py-2 outline-none\n ${currentTheme.searchInput}\n ${currentTheme.text}\n border\n ${colors.focus}\n placeholder:text-slate-400 dark:placeholder:text-slate-500\n `}\n onClick={(e) => e.stopPropagation()}\n />\n <span className=\"absolute left-2.5 top-1/2 -translate-y-1/2 text-slate-400 text-xs\">\n <Icon icon=\"search\" variant=\"fas\" />\n </span>\n </div>\n </div>\n )}\n\n {/* Selection Info */}\n {hasSelection && (\n <div className=\"px-3 py-2 border-b border-slate-100 dark:border-slate-800 flex items-center justify-between\">\n <span className=\"text-xs text-slate-500 dark:text-slate-400\">\n {actualValue.length} selected\n {maxSelections && ` (max ${maxSelections})`}\n </span>\n <button\n type=\"button\"\n onClick={handleClear}\n className={`text-xs hover:underline ${colors.clearButton}`}\n >\n Clear all\n </button>\n </div>\n )}\n\n {/* Options List */}\n <div\n className=\"overflow-y-auto p-1\"\n style={{ maxHeight: maxDropdownHeight }}\n >\n {/* Filtered Options */}\n {filteredOptions.length > 0 ? (\n filteredOptions.map((opt, index) => {\n const isSelected = actualValue.includes(opt.value);\n const isHighlighted = highlightedIndex === index;\n const isMaxReached = maxSelections && actualValue.length >= maxSelections && !isSelected;\n\n return (\n <div\n key={opt.value}\n onClick={(e) => !isMaxReached && handleSelect(opt.value, e)}\n onMouseEnter={() => setHighlightedIndex(index)}\n className={`\n px-3 py-2 rounded-md cursor-pointer transition-colors\n ${isSelected ? colors.optionSelected : ''}\n ${isHighlighted && !isSelected ? currentTheme.optionHighlighted : ''}\n ${!isSelected && !isHighlighted ? currentTheme.option : ''}\n ${isMaxReached ? 'opacity-50 cursor-not-allowed' : ''}\n ${optionsClassName}\n `}\n style={optionHeight !== 'auto' ? { height: optionHeight } : {}}\n role=\"option\"\n aria-selected={isSelected}\n >\n {renderOptionContent(opt, isSelected, isHighlighted)}\n </div>\n );\n })\n ) : (\n <div className=\"px-3 py-6 text-center text-sm text-slate-500 dark:text-slate-400\">\n <Icon icon=\"inbox\" variant=\"fas\" className=\"text-2xl mb-2 opacity-50\" />\n <p>{noOptionsText}</p>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n});\n\nMultiSelect.displayName = 'MultiSelect';\n\nMultiSelect.propTypes = {\n // Data\n options: PropTypes.arrayOf(PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number,\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.any.isRequired,\n icon: PropTypes.string,\n iconVariant: PropTypes.oneOf(['fas', 'far', 'fal', 'fad']),\n description: PropTypes.string,\n })\n ])),\n value: PropTypes.array,\n defaultValue: PropTypes.array,\n onChange: PropTypes.func,\n onSearch: PropTypes.func,\n valueKey: PropTypes.string,\n labelKey: PropTypes.string,\n\n // API\n api: PropTypes.string,\n apiMethod: PropTypes.oneOf(['GET', 'POST', 'PUT', 'PATCH']),\n apiHeaders: PropTypes.object,\n apiDataPath: PropTypes.string,\n\n // Configuration\n searchable: PropTypes.bool,\n clearable: PropTypes.bool,\n disabled: PropTypes.bool,\n required: PropTypes.bool,\n loading: PropTypes.bool,\n name: PropTypes.string,\n id: PropTypes.string,\n maxSelections: PropTypes.number,\n\n // Placeholder\n placeholder: PropTypes.string,\n\n // Appearance\n theme: PropTypes.oneOf(['default', 'glass', 'minimal', 'outlined', 'filled']),\n color: PropTypes.oneOf(['violet', 'blue', 'emerald', 'rose', 'amber', 'black']),\n size: PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl']),\n rounded: PropTypes.oneOf(['none', 'sm', 'md', 'lg', 'xl', '2xl', 'full']),\n fullWidth: PropTypes.bool,\n\n // Chip display\n chipDisplay: PropTypes.oneOf(['inline', 'count', 'compact']),\n maxVisibleChips: PropTypes.number,\n\n // Label & Help\n label: PropTypes.string,\n helperText: PropTypes.string,\n\n // Icons\n leftIcon: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n leftIconVariant: PropTypes.oneOf(['fas', 'far', 'fal', 'fad']),\n dropdownIcon: PropTypes.string,\n clearIcon: PropTypes.string,\n\n // Animation\n animate: PropTypes.bool,\n focusEffect: PropTypes.oneOf(['none', 'glow', 'ring', 'border']),\n\n // Customization\n className: PropTypes.string,\n labelClassName: PropTypes.string,\n optionsClassName: PropTypes.string,\n chipClassName: PropTypes.string,\n renderOption: PropTypes.func,\n renderChip: PropTypes.func,\n noOptionsText: PropTypes.string,\n optionHeight: PropTypes.string,\n maxDropdownHeight: PropTypes.string,\n style: PropTypes.object,\n};\n\nexport default MultiSelect;\n"],"names":["iconPaths","menu","x","xmark","plus","minus","check","search","filter","edit","trash","copy","download","upload","refresh","settings","cog","info","warning","error","success","question","eye","lock","unlock","envelope","mail","phone","chat","comment","bell","user","users","image","camera","video","music","play","pause","stop","file","folder","document","clipboard","calendar","clock","time","grid","list","table","columns","code","terminal","bug","database","server","cart","tag","tags","gift","circle","square","heart","star","bookmark","flag","sun","moon","cloud","lightning","bolt","desktop","home","globe","location","link","rocket","sparkles","swatchbook","palette","font","icons","compress","spinner","box","feather","github","npm","yarn","facebook","instagram","linkedin","youtube","twitch","android","telegram","figma","react","apple","filledIconPaths","twitter","whatsapp","google","microsoft","Icon","_ref","icon","_ref$className","className","_ref$size","size","_ref$variant","variant","props","_objectWithoutProperties","_excluded","sizeClasses","xs","sm","md","lg","xl","sizeClass","path","console","warn","concat","isSolid","React","createElement","_extends","xmlns","viewBox","fill","stroke","strokeWidth","strokeLinecap","strokeLinejoin","d","fillRule","propTypes","PropTypes","string","isRequired","oneOf","iconNames","Object","keys","Button","forwardRef","ref","children","_ref$color","color","_ref$isLoading","isLoading","startIcon","endIcon","_ref$fullWidth","fullWidth","_ref$disabled","disabled","_ref$type","type","colorConfig","violet","primary","secondary","outline","ghost","ring","blue","emerald","rose","amber","black","colors","variantStyles","borderClass","cx","cy","r","displayName","node","bool","CheckboxContext","createContext","CheckboxGroup","value","_ref$defaultValue","defaultValue","onChange","_ref$orientation","orientation","label","description","isControlled","undefined","_useState2","_slicedToArray","useState","internalValue","setInternalValue","currentValues","Provider","values","childValue","isChecked","newValues","_toConsumableArray","v","disabledGrp","checked","text","bg","border","Checkbox","_ref2","_ref2$disabled","_ref2$className","style","defaultChecked","_ref2$indeterminate","indeterminate","context","useContext","isGrouped","finalSize","finalColor","finalVariant","finalDisabled","_useState4","internalChecked","setInternalChecked","includes","handleChange","e","newChecked","target","p","replace","array","func","any","object","Group","daysInMonth","year","month","Date","getDate","formatDate","date","isNaN","getTime","n","monthNames","day","getMonth","getFullYear","hours","getHours","minutes","getMinutes","ampm","timeStr","toString","padStart","isSameDay","d1","d2","DateTimePicker","helperText","_ref$placeholder","placeholder","minDate","maxDate","isOpen","setIsOpen","containerRef","useRef","yearScrollRef","initialViewDate","viewDate","setViewDate","_useState6","selectedDate","setSelectedDate","_useState8","viewMode","setViewMode","useEffect","handleClickOutside","event","current","contains","setTimeout","addEventListener","removeEventListener","el","querySelector","scrollIntoView","block","behavior","active","hover","today","handleTimeChange","val","safeVal","setHours","setMinutes","navigateMonth","dir","newDate","generateCalendar","firstDay","getDay","getDayOfWeek","days","prevMonthDays","i","push","remaining","length","calendarGrid","useMemo","months","years","currentYear","yrs","inputClasses","onClick","role","tabIndex","AnimatePresence","motion","div","initial","opacity","y","scale","animate","exit","transition","duration","Fragment","map","key","cell","idx","cellDate","isSelected","isToday","now","handleDateClick","m","monthIdx","substring","min","max","parseInt","oneOfType","instanceOf","formatBytes","bytes","decimals","arguments","dm","Math","floor","log","parseFloat","pow","toFixed","FileUpload","_ref$buttonStyle","buttonStyle","_ref$multiple","multiple","accept","maxSize","maxFiles","_ref$label","_ref$description","onFilesChange","files","setFiles","isDragging","setIsDragging","setError","inputRef","handleDrag","useCallback","preventDefault","stopPropagation","handleDrop","droppedFiles","Array","from","dataTransfer","processFiles","handleInputChange","selectedFiles","newFiles","validFiles","errors","forEach","validation","valid","name","acceptedTypes","split","t","trim","fileType","fileName","some","endsWith","startsWith","toLowerCase","validateFile","updatedFiles","Boolean","uniqueString","f","lastModified","existingKeys","Set","distinctNew","has","removeFile","index","_","handleBoxClick","_inputRef$current","click","onDragEnter","onDragLeave","onDragOver","onDrop","number","Input","id","_ref$readOnly","readOnly","_ref$required","required","_ref$autoFocus","autoFocus","_ref$autoComplete","autoComplete","_ref$theme","theme","_ref$rounded","rounded","_ref$floatingLabel","floatingLabel","errorText","successText","leftIcon","_ref$leftIconVariant","leftIconVariant","rightIcon","_ref$rightIconVariant","rightIconVariant","iconColor","prefix","suffix","_ref$clearable","clearable","_ref$showPasswordTogg","showPasswordToggle","_ref$copyable","copyable","_ref$showCharCount","showCharCount","maxLength","_ref$animate","_ref$focusEffect","focusEffect","onFocus","onBlur","onClear","onCopy","_ref$inputClassName","inputClassName","_ref$labelClassName","labelClassName","_ref$wrapperClassName","wrapperClassName","isFocused","setIsFocused","showPassword","setShowPassword","copied","setCopied","actualValue","actualRef","inputType","focus","selection","sizeConfig","input","iconPadding","left","right","roundedConfig","none","full","themeConfig","default","wrapper","glass","minimal","outlined","filled","gradient","handleCopy","_asyncToGenerator","_regenerator","_callee","_t","w","_context","navigator","writeText","a","apply","this","hasLeftContent","hasRightContent","currentSize","currentTheme","currentRounded","currentFocusEffect","glow","lift","rightButtonCount","rightPadding","htmlFor","newValue","_actualRef$current","Textarea","_ref$rows","rows","_ref$textareaClassNam","textareaClassName","textareaRef","textarea","RadioContext","RadioGroup","dot","Radio","finalName","Select","_containerRef$current","_ref$options","options","onSearch","api","_ref$apiMethod","apiMethod","_ref$apiHeaders","apiHeaders","_ref$apiDataPath","apiDataPath","_ref$valueKey","valueKey","_ref$labelKey","labelKey","_ref$searchable","searchable","_ref$loading","loading","_ref$showSelectOption","showSelectOption","_ref$selectOptionText","selectOptionText","_ref$selectOptionValu","selectOptionValue","_ref$dropdownIcon","dropdownIcon","_ref$clearIcon","clearIcon","_ref$optionsClassName","optionsClassName","renderOption","renderSelectedValue","_ref$noOptionsText","noOptionsText","_ref$optionHeight","optionHeight","_ref$maxDropdownHeigh","maxDropdownHeight","searchQuery","setSearchQuery","highlightedIndex","setHighlightedIndex","_useState0","apiOptions","setApiOptions","_useState10","apiLoading","setApiLoading","_useState12","setApiError","searchInputRef","triggerRef","selectRef","optionsSource","normalizedOptions","opt","String","_original","iconVariant","filteredOptions","selectedOption","find","fetchData","response","data","paths","_iterator","_step","_data","fetch","method","headers","_objectSpread","ok","Error","status","json","_createForOfIteratorHelper","s","done","err","isArray","message","_searchInputRef$curre","handleSelect","optionValue","o","optionSelected","iconSelected","height","px","dropdown","option","optionHighlighted","searchInput","hasSelection","onKeyDown","prev","maxWidth","offsetWidth","maxHeight","isHighlighted","onMouseEnter","renderOptionContent","arrayOf","shape","MultiSelect","maxSelections","_ref$chipDisplay","chipDisplay","_ref$maxVisibleChips","maxVisibleChips","_ref$chipClassName","chipClassName","renderChip","selectedOptions","handleRemoveChip","handleClear","chip","checkbox","clearButton","minHeight","visibleChips","slice","remainingCount","renderChips","isMaxReached","Actions","Communication","People","Media","Development","Commerce","Misc","Brands"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../src/components/Icon.jsx","../src/components/button/Button.jsx","../src/components/checkbox/Checkbox.jsx","../src/components/datetime/DateTimePicker.jsx","../src/components/fileupload/FileUpload.jsx","../src/components/input/Input.jsx","../src/components/input/Textarea.jsx","../src/components/radio/Radio.jsx","../src/components/select/Select.jsx","../src/components/select/MultiSelect.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\n/**\n * Custom SVG Icon Library\n * \n * A collection of hand-crafted SVG icons inspired by modern design systems.\n * No external dependencies required.\n */\n\n// Icon paths - all designed on a 24x24 viewBox\nconst iconPaths = {\n // Navigation & UI\n 'chevron-down': 'M6 9l6 6 6-6',\n 'chevron-up': 'M18 15l-6-6-6 6',\n 'chevron-left': 'M15 18l-6-6 6-6',\n 'chevron-right': 'M9 6l6 6-6 6',\n 'arrow-left': 'M19 12H5m0 0l7 7m-7-7l7-7',\n 'arrow-right': 'M5 12h14m0 0l-7-7m7 7l-7 7',\n 'arrow-up': 'M12 19V5m0 0l-7 7m7-7l7 7',\n 'arrow-down': 'M12 5v14m0 0l7-7m-7 7l-7-7',\n 'menu': 'M4 6h16M4 12h16M4 18h16',\n 'x': 'M6 18L18 6M6 6l12 12',\n 'xmark': 'M6 18L18 6M6 6l12 12',\n 'plus': 'M12 5v14m-7-7h14',\n 'minus': 'M5 12h14',\n 'check': 'M5 13l4 4L19 7',\n 'external-link': 'M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14',\n\n // Actions\n 'search': 'M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z',\n 'filter': 'M3 4a1 1 0 011-1h16a1 1 0 011 1v2.586a1 1 0 01-.293.707l-6.414 6.414a1 1 0 00-.293.707V17l-4 4v-6.586a1 1 0 00-.293-.707L3.293 7.293A1 1 0 013 6.586V4z',\n 'edit': 'M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z',\n 'trash': 'M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16',\n 'copy': 'M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z',\n 'download': 'M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4',\n 'upload': 'M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-8l-4-4m0 0L8 8m4-4v12',\n 'refresh': 'M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15',\n 'settings': 'M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z M15 12a3 3 0 11-6 0 3 3 0 016 0z',\n 'cog': 'M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z M15 12a3 3 0 11-6 0 3 3 0 016 0z',\n\n // Status & Alerts\n 'info': 'M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z',\n 'circle-info': 'M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z',\n 'warning': 'M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z',\n 'triangle-exclamation': 'M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z',\n 'error': 'M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z',\n 'circle-exclamation': 'M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z',\n 'success': 'M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z',\n 'circle-check': 'M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z',\n 'question': 'M8.228 9c.549-1.165 2.03-2 3.772-2 2.21 0 4 1.343 4 3 0 1.4-1.278 2.575-3.006 2.907-.542.104-.994.54-.994 1.093m0 3h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z',\n 'circle-question': 'M8.228 9c.549-1.165 2.03-2 3.772-2 2.21 0 4 1.343 4 3 0 1.4-1.278 2.575-3.006 2.907-.542.104-.994.54-.994 1.093m0 3h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z',\n\n // Form Elements\n 'eye': 'M15 12a3 3 0 11-6 0 3 3 0 016 0z M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z',\n 'eye-slash': 'M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.88 9.88l-3.29-3.29m7.532 7.532l3.29 3.29M3 3l3.59 3.59m0 0A9.953 9.953 0 0112 5c4.478 0 8.268 2.943 9.543 7a10.025 10.025 0 01-4.132 5.411m0 0L21 21',\n 'lock': 'M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z',\n 'unlock': 'M8 11V7a4 4 0 118 0m-4 8v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2z',\n\n // Communication\n 'envelope': 'M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z',\n 'mail': 'M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z',\n 'phone': 'M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z',\n 'chat': 'M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z',\n 'comment': 'M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z',\n 'bell': 'M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9',\n\n // People\n 'user': 'M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a9 9 0 00-9 7h18a9 9 0 00-9-7z',\n 'users': 'M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197M13 7a4 4 0 11-8 0 4 4 0 018 0z',\n 'user-plus': 'M18 9v3m0 0v3m0-3h3m-3 0h-3m-2-5a4 4 0 11-8 0 4 4 0 018 0zM1 21a8 8 0 0116 0H1z',\n\n // Media\n 'image': 'M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z',\n 'camera': 'M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z M15 13a3 3 0 11-6 0 3 3 0 016 0z',\n 'video': 'M15 10l4.553-2.276A1 1 0 0121 8.618v6.764a1 1 0 01-1.447.894L15 14M5 18h8a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v8a2 2 0 002 2z',\n 'music': 'M9 19V6l12-3v13M9 19c0 1.105-1.343 2-3 2s-3-.895-3-2 1.343-2 3-2 3 .895 3 2zm12-3c0 1.105-1.343 2-3 2s-3-.895-3-2 1.343-2 3-2 3 .895 3 2zM9 10l12-3',\n 'play': 'M14.752 11.168l-3.197-2.132A1 1 0 0010 9.87v4.263a1 1 0 001.555.832l3.197-2.132a1 1 0 000-1.664z M21 12a9 9 0 11-18 0 9 9 0 0118 0z',\n 'pause': 'M10 9v6m4-6v6m7-3a9 9 0 11-18 0 9 9 0 0118 0z',\n 'stop': 'M21 12a9 9 0 11-18 0 9 9 0 0118 0z M9 10a1 1 0 011-1h4a1 1 0 011 1v4a1 1 0 01-1 1h-4a1 1 0 01-1-1v-4z',\n\n // Files & Documents\n 'file': 'M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z',\n 'file-lines': 'M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z',\n 'folder': 'M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z',\n 'folder-open': 'M5 19a2 2 0 01-2-2V7a2 2 0 012-2h4l2 2h4a2 2 0 012 2v1M5 19h14a2 2 0 002-2v-5a2 2 0 00-2-2H9a2 2 0 00-2 2v5a2 2 0 01-2 2z',\n 'document': 'M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z',\n 'clipboard': 'M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2',\n\n // Date & Time\n 'calendar': 'M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z',\n 'calendar-days': 'M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z M7 14h.01M11 14h.01M15 14h.01M7 18h.01M11 18h.01',\n 'clock': 'M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z',\n 'time': 'M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z',\n\n // Layout & Design\n 'grid': 'M4 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2V6zM14 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2V6zM4 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2v-2zM14 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2v-2z',\n 'list': 'M4 6h16M4 10h16M4 14h16M4 18h16',\n 'list-check': 'M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4',\n 'table': 'M3 10h18M3 14h18m-9-4v8m-7 0h14a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v8a2 2 0 002 2z',\n 'columns': 'M9 4v16m6-16v16M3 4h18v16H3V4z',\n\n // Development\n 'code': 'M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4',\n 'terminal': 'M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z',\n 'bug': 'M12 19l9 2-9-18-9 18 9-2zm0 0v-8',\n 'database': 'M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4m0 5c0 2.21-3.582 4-8 4s-8-1.79-8-4',\n 'server': 'M5 12h14M5 12a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v4a2 2 0 01-2 2M5 12a2 2 0 00-2 2v4a2 2 0 002 2h14a2 2 0 002-2v-4a2 2 0 00-2-2m-2-4h.01M17 16h.01',\n\n // Commerce\n 'cart': 'M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z',\n 'shopping-cart': 'M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z',\n 'credit-card': 'M3 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z',\n 'tag': 'M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z',\n 'tags': 'M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z',\n 'gift': 'M12 8v13m0-13V6a2 2 0 112 2h-2zm0 0V5.5A2.5 2.5 0 109.5 8H12zm-7 4h14M5 12a2 2 0 110-4h14a2 2 0 110 4M5 12v7a2 2 0 002 2h10a2 2 0 002-2v-7',\n\n // Shapes & Symbols\n 'circle': 'M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0',\n 'circle-dot': 'M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0 M12 12m-3 0a3 3 0 1 0 6 0a3 3 0 1 0 -6 0',\n 'square': 'M5 5h14v14H5z',\n 'square-check': 'M9 12l2 2 4-4m5 2V7a2 2 0 00-2-2H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-1',\n 'heart': 'M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z',\n 'star': 'M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z',\n 'bookmark': 'M5 5a2 2 0 012-2h10a2 2 0 012 2v16l-7-3.5L5 21V5z',\n 'flag': 'M3 21v-4m0 0V5a2 2 0 012-2h6.5l1 1H21l-3 6 3 6h-8.5l-1-1H5a2 2 0 00-2 2zm9-13.5V9',\n\n // Weather & Nature\n 'sun': 'M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z',\n 'moon': 'M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z',\n 'cloud': 'M3 15a4 4 0 004 4h9a5 5 0 10-.1-9.999 5.002 5.002 0 10-9.78 2.096A4.001 4.001 0 003 15z',\n 'cloud-arrow-up': 'M6.5 19a4.5 4.5 0 01-.42-8.98 6 6 0 0111.84 0A4.5 4.5 0 0117.5 19h-11zM12 10v5m-2.5-2.5L12 10l2.5 2.5',\n 'cloud-arrow-down': 'M6.5 19a4.5 4.5 0 01-.42-8.98 6 6 0 0111.84 0A4.5 4.5 0 0117.5 19h-11zM12 10v5m-2.5-2.5L12 15l2.5-2.5',\n 'lightning': 'M13 10V3L4 14h7v7l9-11h-7z',\n 'bolt': 'M13 10V3L4 14h7v7l9-11h-7z',\n\n // Misc\n 'desktop': 'M3 5a2 2 0 012-2h14a2 2 0 012 2v10a2 2 0 01-2 2H5a2 2 0 01-2-2V5zM9 21h6M12 17v4',\n 'home': 'M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6',\n 'globe': 'M3.055 11H5a2 2 0 012 2v1a2 2 0 002 2 2 2 0 012 2v2.945M8 3.935V5.5A2.5 2.5 0 0010.5 8h.5a2 2 0 012 2 2 2 0 104 0 2 2 0 012-2h1.064M15 20.488V18a2 2 0 012-2h3.064M21 12a9 9 0 11-18 0 9 9 0 0118 0z',\n 'location': 'M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z M15 11a3 3 0 11-6 0 3 3 0 016 0z',\n 'map-pin': 'M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z M15 11a3 3 0 11-6 0 3 3 0 016 0z',\n 'link': 'M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1',\n 'paper-plane': 'M12 19l9 2-9-18-9 18 9-2zm0 0v-8',\n 'rocket': 'M15.59 14.37a6 6 0 01-5.84 7.38v-4.8m5.84-2.58a14.98 14.98 0 006.16-12.12A14.98 14.98 0 009.631 8.41m5.96 5.96a14.926 14.926 0 01-5.841 2.58m-.119-8.54a6 6 0 00-7.381 5.84h4.8m2.581-5.84a14.927 14.927 0 00-2.58 5.84m2.699 2.7c-.103.021-.207.041-.311.06a15.09 15.09 0 01-2.448-2.448 14.9 14.9 0 01.06-.312m-2.24 2.39a4.493 4.493 0 00-1.757 4.306 4.493 4.493 0 004.306-1.758M16.5 9a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0z',\n 'sparkles': 'M5 3v4M3 5h4M6 17v4m-2-2h4m5-16l2.286 6.857L21 12l-5.714 2.143L13 21l-2.286-6.857L5 12l5.714-2.143L13 3z',\n 'wand-magic-sparkles': 'M5 3v4M3 5h4M6 17v4m-2-2h4m5-16l2.286 6.857L21 12l-5.714 2.143L13 21l-2.286-6.857L5 12l5.714-2.143L13 3z',\n 'swatchbook': 'M7 21a4 4 0 01-4-4V5a2 2 0 012-2h4a2 2 0 012 2v12a4 4 0 01-4 4zm0 0h12a2 2 0 002-2v-4a2 2 0 00-2-2h-2.343M11 7.343l1.657-1.657a2 2 0 012.828 0l2.829 2.829a2 2 0 010 2.828l-8.486 8.485M7 17h.01',\n 'palette': 'M7 21a4 4 0 01-4-4V5a2 2 0 012-2h4a2 2 0 012 2v12a4 4 0 01-4 4zm0 0h12a2 2 0 002-2v-4a2 2 0 00-2-2h-2.343M11 7.343l1.657-1.657a2 2 0 012.828 0l2.829 2.829a2 2 0 010 2.828l-8.486 8.485M7 17h.01',\n 'fill-drip': 'M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z',\n 'font': 'M4 6h16M4 12h16m-7 6h7',\n 'align-left': 'M4 6h16M4 12h10M4 18h14',\n 'text-width': 'M4 6h16M8 12h8M6 18h12',\n 'icons': 'M4 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2V6zM14 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2V6zM4 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2v-2zM14 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2v-2z',\n 'toggle-on': 'M5 12a7 7 0 0114 0 7 7 0 01-14 0zm7-3a3 3 0 100 6 3 3 0 000-6z',\n 'compress': 'M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4',\n 'left-right': 'M7 16V4m0 0L3 8m4-4l4 4m6 8V4m0 12l-4-4m4 4l4-4',\n 'shield-check': 'M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z',\n 'spinner': 'M21 12a9 9 0 1 1-6.219-8.56',\n 'spinner-third': 'M12 2v4m0 12v4M4.93 4.93l2.83 2.83m8.48 8.48l2.83 2.83M2 12h4m12 0h4M4.93 19.07l2.83-2.83m8.48-8.48l2.83-2.83',\n 'box': 'M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4',\n 'universal-access': 'M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z',\n 'feather': 'M20.24 12.24a6 6 0 00-8.49-8.49L5 10.5V19h8.5z M16 8L2 22 M17.5 15H9',\n\n // Brands (simplified representations)\n 'github': 'M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 00-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0020 4.77 5.07 5.07 0 0019.91 1S18.73.65 16 2.48a13.38 13.38 0 00-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 005 4.77a5.44 5.44 0 00-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 009 18.13V22',\n 'npm': 'M3 3h18v18H3V3zm3 3v12h3V9h3v9h6V6H6z',\n 'yarn': 'M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5',\n 'facebook': 'M18 2h-3a5 5 0 00-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 011-1h3z',\n // 'twitter': 'M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z',\n 'instagram': 'M16 11.37A4 4 0 1112.63 8 4 4 0 0116 11.37z M17.5 6.5h.01 M7 2h10a5 5 0 015 5v10a5 5 0 01-5 5H7a5 5 0 01-5-5V7a5 5 0 015-5z',\n 'linkedin': 'M4 6a2 2 0 100-4 2 2 0 000 4zM2 8h4v13H2V8zm8 0h3.5v1.8c.5-1 1.6-1.8 3.2-1.8 3.4 0 5 2.3 5.3 5.3V21h-3.8v-6.2c0-1.5 0-3.3-2-3.3s-2.3 1.5-2.3 3.2V21H10V8z',\n 'youtube': 'M22.54 6.42a2.78 2.78 0 00-1.94-2C18.88 4 12 4 12 4s-6.88 0-8.6.46a2.78 2.78 0 00-1.94 2A29 29 0 001 11.75a29 29 0 00.46 5.33A2.78 2.78 0 003.4 19c1.72.46 8.6.46 8.6.46s6.88 0 8.6-.46a2.78 2.78 0 001.94-2 29 29 0 00.46-5.25 29 29 0 00-.46-5.33zM9.75 15.02l5.75-3.27-5.75-3.27z',\n 'twitch': 'M21 2H3v16h5v4l4-4h5l4-4V2zm-10 9V7m5 4V7',\n 'android': 'M17.6 9.48l1.84-3.18c.16-.31.04-.69-.26-.85-.29-.15-.65-.06-.83.22l-1.88 3.24c-2.86-1.21-6.08-1.21-8.94 0L5.65 5.67c-.19-.28-.54-.38-.83-.22-.3.16-.42.54-.26.85l1.84 3.18C2.92 11.03 1 14.22 1 17.8h22c0-3.58-1.92-6.77-5.4-8.32zM7.5 15c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm9 0c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z',\n // 'whatsapp': 'M3 21l1.9-5.7a8.5 8.5 0 113.8 3.8z M16.5 15.5c-.5.8-1.5 1-2.5.5-2-1-4-3-5-5-.5-1-.3-2 .5-2.5',\n 'telegram': 'M22 2L11 13M22 2l-7 20-4-9-9-4 20-7z',\n 'figma': 'M5 5.5A3.5 3.5 0 018.5 2H12v7H8.5A3.5 3.5 0 015 5.5zM12 2h3.5a3.5 3.5 0 110 7H12V2zM12 12.5a3.5 3.5 0 11-7 0 3.5 3.5 0 017 0zm0 7a3.5 3.5 0 1 1-7 0 3.5 3.5 0 0 1 7 0z',\n 'react': 'M12 22c5.52 0 10-4.48 10-10S17.52 2 12 2 2 6.48 2 12s4.48 10 10 10zm0-18c4.41 0 8 3.59 8 8s-3.59 8-8 8-8-3.59-8-8 3.59-8 8-8zm0 2c3.31 0 6 2.69 6 6s-2.69 6-6 6-6-2.69-6-6 2.69-6 6-6z',\n // 'google': 'M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z',\n 'apple': 'M17.05 20.28c-.98.95-2.05.8-3.08.35-1.09-.46-2.09-.48-3.24 0-1.44.62-2.2.44-3.06-.35C2.79 15.25 3.51 7.59 9.05 7.31c1.35.07 2.29.74 3.08.8 1.18-.24 2.31-.93 3.57-.84 1.51.12 2.65.72 3.4 1.8-3.12 1.87-2.38 5.98.48 7.13-.57 1.5-1.31 2.99-2.53 4.09l-.01-.01zM12.03 7.25c-.15-2.23 1.66-4.07 3.74-4.25.29 2.58-2.34 4.5-3.74 4.25z',\n // 'microsoft': 'M11.4 24H0V12.6h11.4V24zM24 24H12.6V12.6H24V24zM11.4 11.4H0V0h11.4v11.4zm12.6 0H12.6V0H24v11.4z',\n};\n\n// Filled/Solid icon paths - closed shapes with cutouts\nconst filledIconPaths = {\n 'home': 'M12.71 2.29a1 1 0 00-1.42 0l-9 9a1 1 0 001.42 1.42L4 12.41V21a1 1 0 001 1h5a1 1 0 001-1v-5h2v5a1 1 0 001 1h5a1 1 0 001-1v-8.59l.29.3a1 1 0 001.42-1.42l-9-9z',\n 'chevron-down': 'M5.293 7.293a1 1 0 011.414 0L12 12.586l5.293-5.293a1 1 0 111.414 1.414l-6 6a1 1 0 01-1.414 0l-6-6a1 1 0 010-1.414z',\n 'chevron-up': 'M18.707 16.707a1 1 0 01-1.414 0L12 11.414l-5.293 5.293a1 1 0 01-1.414-1.414l6-6a1 1 0 011.414 0l6 6a1 1 0 010 1.414z',\n 'chevron-left': 'M15.707 18.707a1 1 0 010-1.414L10.414 12l5.293-5.293a1 1 0 00-1.414-1.414l-6 6a1 1 0 000 1.414l6 6a1 1 0 001.414 0z',\n 'chevron-right': 'M8.293 5.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L13.586 12 8.293 6.707a1 1 0 010-1.414z',\n 'menu': 'M3 5a1 1 0 011-1h16a1 1 0 110 2H4a1 1 0 01-1-1zm0 6a1 1 0 011-1h16a1 1 0 110 2H4a1 1 0 01-1-1zm1 5a1 1 0 100 2h16a1 1 0 100-2H4z',\n 'x': 'M4.293 4.293a1 1 0 011.414 0L12 10.586l6.293-6.293a1 1 0 111.414 1.414L13.414 12l6.293 6.293a1 1 0 01-1.414 1.414L12 13.414l-6.293 6.293a1 1 0 01-1.414-1.414L10.586 12 4.293 5.707a1 1 0 010-1.414z',\n 'xmark': 'M4.293 4.293a1 1 0 011.414 0L12 10.586l6.293-6.293a1 1 0 111.414 1.414L13.414 12l6.293 6.293a1 1 0 01-1.414 1.414L12 13.414l-6.293 6.293a1 1 0 01-1.414-1.414L10.586 12 4.293 5.707a1 1 0 010-1.414z',\n 'check': 'M20.707 5.293a1 1 0 010 1.414l-11 11a1 1 0 01-1.414 0l-5-5a1 1 0 111.414-1.414L9 15.586 19.293 5.293a1 1 0 011.414 0z',\n 'plus': 'M12 4a1 1 0 011 1v6h6a1 1 0 110 2h-6v6a1 1 0 11-2 0v-6H5a1 1 0 110-2h6V5a1 1 0 011-1z',\n 'minus': 'M4 12a1 1 0 011-1h14a1 1 0 110 2H5a1 1 0 01-1-1z',\n 'circle-check': 'M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm4.707 8.707l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 111.414-1.414L11 13.586l4.293-4.293a1 1 0 111.414 1.414z',\n 'success': 'M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm4.707 8.707l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 111.414-1.414L11 13.586l4.293-4.293a1 1 0 111.414 1.414z',\n 'circle-exclamation': 'M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm0 5a1 1 0 011 1v4a1 1 0 11-2 0V8a1 1 0 011-1zm0 10a1.5 1.5 0 100-3 1.5 1.5 0 000 3z',\n 'warning': 'M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm0 5a1 1 0 011 1v4a1 1 0 11-2 0V8a1 1 0 011-1zm0 10a1.5 1.5 0 100-3 1.5 1.5 0 000 3z',\n 'triangle-exclamation': 'M12.866 3l9.526 16.5a1 1 0 01-.866 1.5H2.474a1 1 0 01-.866-1.5L11.134 3a1 1 0 011.732 0zM12 8a1 1 0 00-1 1v4a1 1 0 002 0V9a1 1 0 00-1-1zm0 10a1.5 1.5 0 100-3 1.5 1.5 0 000 3z',\n 'circle-info': 'M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm0 5a1.5 1.5 0 110 3 1.5 1.5 0 010-3zm1 10a1 1 0 01-2 0v-4a1 1 0 012 0v4z',\n 'info': 'M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm0 5a1.5 1.5 0 110 3 1.5 1.5 0 010-3zm1 10a1 1 0 01-2 0v-4a1 1 0 012 0v4z',\n 'search': 'M10 2a8 8 0 105.293 14.293l3.707 3.707a1.5 1.5 0 002.121-2.121l-3.707-3.707A8 8 0 0010 2zm0 3a5 5 0 110 10 5 5 0 010-10z',\n 'filter': 'M3 4a1 1 0 011-1h16a1 1 0 011 1v2a1 1 0 01-.293.707L15 12.414V19a1 1 0 01-.553.894l-4 2A1 1 0 019 21v-8.586L3.293 6.707A1 1 0 013 6V4z',\n 'edit': 'M16.707 2.293a1 1 0 00-1.414 0l-9.5 9.5a1 1 0 00-.263.464l-1.5 5a1 1 0 001.213 1.213l5-1.5a1 1 0 00.464-.263l9.5-9.5a1 1 0 000-1.414l-3.5-3.5zM5 21a1 1 0 011-1h12a1 1 0 110 2H6a1 1 0 01-1-1z',\n 'trash': 'M9 3a1 1 0 00-1 1H5a1 1 0 000 2h14a1 1 0 100-2h-3a1 1 0 00-1-1H9zM6 7v12a2 2 0 002 2h8a2 2 0 002-2V7H6zm3.5 2a.5.5 0 01.5.5v8a.5.5 0 01-1 0v-8a.5.5 0 01.5-.5zm5 0a.5.5 0 01.5.5v8a.5.5 0 01-1 0v-8a.5.5 0 01.5-.5z',\n 'copy': 'M7 4a2 2 0 00-2 2v10a2 2 0 002 2h1v1a2 2 0 002 2h8a2 2 0 002-2V9a2 2 0 00-2-2h-1V6a2 2 0 00-2-2H7zm3 5h8v10h-8V9z',\n 'download': 'M12 2a1 1 0 011 1v8.586l2.293-2.293a1 1 0 011.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L11 11.586V3a1 1 0 011-1zM3 16a1 1 0 011 1v2a1 1 0 001 1h14a1 1 0 001-1v-2a1 1 0 112 0v2a3 3 0 01-3 3H5a3 3 0 01-3-3v-2a1 1 0 011-1z',\n 'upload': 'M12 2a1 1 0 01.707.293l4 4a1 1 0 01-1.414 1.414L13 5.414V14a1 1 0 11-2 0V5.414L8.707 7.707a1 1 0 01-1.414-1.414l4-4A1 1 0 0112 2zM3 16a1 1 0 011 1v2a1 1 0 001 1h14a1 1 0 001-1v-2a1 1 0 112 0v2a3 3 0 01-3 3H5a3 3 0 01-3-3v-2a1 1 0 011-1z',\n 'refresh': 'M4 12a8 8 0 0114.93-4H15a1 1 0 100 2h6a1 1 0 001-1V3a1 1 0 10-2 0v3.07A10 10 0 002 12a1 1 0 102 0zm16 0a8 8 0 01-14.93 4H9a1 1 0 100-2H3a1 1 0 00-1 1v6a1 1 0 102 0v-3.07A10 10 0 0022 12a1 1 0 10-2 0z',\n 'settings': 'M12 8a4 4 0 100 8 4 4 0 000-8zm-2 4a2 2 0 114 0 2 2 0 01-4 0zM11 1a1 1 0 012 0v2.062a8.004 8.004 0 013.906 1.617l1.458-1.457a1 1 0 111.414 1.414l-1.457 1.458A8.004 8.004 0 0119.938 10H22a1 1 0 110 2h-2.062a8.004 8.004 0 01-1.617 3.906l1.457 1.458a1 1 0 01-1.414 1.414l-1.458-1.457A8.004 8.004 0 0114 19.938V22a1 1 0 11-2 0v-2.062a8.004 8.004 0 01-3.906-1.617l-1.458 1.457a1 1 0 01-1.414-1.414l1.457-1.458A8.004 8.004 0 015.062 14H3a1 1 0 110-2h2.062a8.004 8.004 0 011.617-3.906L5.222 6.636a1 1 0 011.414-1.414l1.458 1.457A8.004 8.004 0 0112 5.062V3z',\n 'cog': 'M10.325 2.317a1.724 1.724 0 013.35 0 1.724 1.724 0 002.573 1.066 1.724 1.724 0 012.37 2.37 1.724 1.724 0 001.065 2.572 1.724 1.724 0 010 3.35 1.724 1.724 0 00-1.066 2.573 1.724 1.724 0 01-2.37 2.37 1.724 1.724 0 00-2.572 1.065 1.724 1.724 0 01-3.35 0 1.724 1.724 0 00-2.573-1.066 1.724 1.724 0 01-2.37-2.37 1.724 1.724 0 00-1.065-2.572 1.724 1.724 0 010-3.35 1.724 1.724 0 001.066-2.573 1.724 1.724 0 012.37-2.37c.996.608 2.296.07 2.572-1.065zM12 15a3 3 0 100-6 3 3 0 000 6z',\n 'user': 'M12 4a4 4 0 100 8 4 4 0 000-8zM4 21a8 8 0 1116 0H4z',\n 'envelope': 'M3 5a2 2 0 012-2h14a2 2 0 012 2v14a2 2 0 01-2 2H5a2 2 0 01-2-2V5zm2 0l7 5 7-5H5zm0 2.236V19h14V7.236l-6.445 4.604a1 1 0 01-1.11 0L5 7.236z',\n 'mail': 'M3 5a2 2 0 012-2h14a2 2 0 012 2v14a2 2 0 01-2 2H5a2 2 0 01-2-2V5zm2 0l7 5 7-5H5zm0 2.236V19h14V7.236l-6.445 4.604a1 1 0 01-1.11 0L5 7.236z',\n 'bell': 'M10 2a1 1 0 012 0v1.07A7.002 7.002 0 0119 10v4.382l1.447 2.894A1 1 0 0119.553 19H4.447a1 1 0 01-.894-1.724L5 14.382V10a7.002 7.002 0 017-6.93V2zm0 18h4a2 2 0 11-4 0z',\n 'image': 'M4 3a2 2 0 00-2 2v14a2 2 0 002 2h16a2 2 0 002-2V5a2 2 0 00-2-2H4zm16 14l-4-4-2 2-4-4-6 6V5h16v12zM8 9a2 2 0 100-4 2 2 0 000 4z',\n 'play': 'M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm-2 14V8l6 4-6 4z',\n 'file': 'M4 4a2 2 0 012-2h7.586a1 1 0 01.707.293l4.414 4.414a1 1 0 01.293.707V20a2 2 0 01-2 2H6a2 2 0 01-2-2V4z',\n 'folder': 'M2 6a2 2 0 012-2h5l2 2h9a2 2 0 012 2v10a2 2 0 01-2 2H4a2 2 0 01-2-2V6z',\n 'calendar': 'M6 2a1 1 0 011 1v1h6V3a1 1 0 112 0v1h2a2 2 0 012 2v14a2 2 0 01-2 2H5a2 2 0 01-2-2V6a2 2 0 012-2h2V3a1 1 0 011-1zm11 8H5v10h14V10z',\n 'clock': 'M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm1 5a1 1 0 10-2 0v5a1 1 0 00.293.707l3 3a1 1 0 001.414-1.414L13 11.586V7z',\n 'time': 'M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm1 5a1 1 0 10-2 0v5a1 1 0 00.293.707l3 3a1 1 0 001.414-1.414L13 11.586V7z',\n 'desktop': 'M2 5a2 2 0 012-2h16a2 2 0 012 2v10a2 2 0 01-2 2H4a2 2 0 01-2-2V5zm9 14a1 1 0 011-1 1 1 0 011 1v1h2a1 1 0 110 2H9a1 1 0 110-2h2v-1z',\n 'heart': 'M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z',\n 'star': 'M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z',\n 'bookmark': 'M5 3a2 2 0 012-2h10a2 2 0 012 2v18l-7-4-7 4V3z',\n 'circle': 'M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2z',\n 'square': 'M4 4a2 2 0 012-2h12a2 2 0 012 2v16a2 2 0 01-2 2H6a2 2 0 01-2-2V4z',\n 'sun': 'M12 2a1 1 0 011 1v2a1 1 0 11-2 0V3a1 1 0 011-1zm0 14a4 4 0 100-8 4 4 0 000 8zm9-4a1 1 0 01-1 1h-2a1 1 0 110-2h2a1 1 0 011 1zM5 12a1 1 0 01-1 1H2a1 1 0 110-2h2a1 1 0 011 1z',\n 'moon': 'M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z',\n 'eye': 'M12 4C7 4 2.73 7.11 1 11.5 2.73 15.89 7 19 12 19s9.27-3.11 11-7.5C21.27 7.11 17 4 12 4zm0 12.5a5 5 0 110-10 5 5 0 010 10zm0-8a3 3 0 100 6 3 3 0 000-6z',\n 'lock': 'M12 2a5 5 0 00-5 5v2H6a2 2 0 00-2 2v9a2 2 0 002 2h12a2 2 0 002-2v-9a2 2 0 00-2-2h-1V7a5 5 0 00-5-5zm3 7H9V7a3 3 0 116 0v2z',\n 'bolt': 'M13 2L4 14h7v8l9-12h-7V2z',\n 'lightning': 'M13 2L4 14h7v8l9-12h-7V2z',\n 'paper-plane': 'M2.01 21L23 12 2.01 3 2 10l15 2-15 2z',\n 'sparkles': 'M9.813 2.126a1 1 0 011.874 0l1.5 4.001 4.001 1.5a1 1 0 010 1.874l-4.001 1.5-1.5 4.001a1 1 0 01-1.874 0l-1.5-4.001-4.001-1.5a1 1 0 010-1.874l4.001-1.5 1.5-4.001z',\n 'grid': 'M4 3a1 1 0 00-1 1v6a1 1 0 001 1h6a1 1 0 001-1V4a1 1 0 00-1-1H4zm10 0a1 1 0 00-1 1v6a1 1 0 001 1h6a1 1 0 001-1V4a1 1 0 00-1-1h-6zM3 14a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H4a1 1 0 01-1-1v-6zm11-1a1 1 0 00-1 1v6a1 1 0 001 1h6a1 1 0 001-1v-6a1 1 0 00-1-1h-6z',\n 'icons': 'M4 3a1 1 0 00-1 1v6a1 1 0 001 1h6a1 1 0 001-1V4a1 1 0 00-1-1H4zm10 0a1 1 0 00-1 1v6a1 1 0 001 1h6a1 1 0 001-1V4a1 1 0 00-1-1h-6zM3 14a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H4a1 1 0 01-1-1v-6zm11-1a1 1 0 00-1 1v6a1 1 0 001 1h6a1 1 0 001-1v-6a1 1 0 00-1-1h-6z',\n 'tag': 'M2 4a2 2 0 012-2h6.586a2 2 0 011.414.586l8.414 8.414a2 2 0 010 2.828l-6.586 6.586a2 2 0 01-2.828 0L2.586 12A2 2 0 012 10.586V4zm5 3a1 1 0 100 2 1 1 0 000-2z',\n 'github': 'M12 2C6.477 2 2 6.477 2 12c0 4.42 2.865 8.164 6.839 9.489.5.092.682-.217.682-.482 0-.237-.009-.866-.014-1.7-2.782.603-3.369-1.342-3.369-1.342-.455-1.156-1.11-1.463-1.11-1.463-.908-.62.069-.607.069-.607 1.003.07 1.531 1.03 1.531 1.03.892 1.529 2.341 1.088 2.91.832.091-.647.35-1.088.636-1.339-2.22-.252-4.555-1.11-4.555-4.943 0-1.091.39-1.984 1.03-2.682-.104-.254-.447-1.27.097-2.646 0 0 .84-.269 2.75 1.025A9.548 9.548 0 0112 6.836c.85.004 1.705.114 2.504.336 1.909-1.294 2.748-1.025 2.748-1.025.546 1.376.203 2.392.1 2.646.64.698 1.028 1.591 1.028 2.682 0 3.841-2.337 4.687-4.565 4.935.359.309.678.919.678 1.852 0 1.336-.012 2.415-.012 2.743 0 .267.18.578.688.48C19.138 20.16 22 16.416 22 12c0-5.523-4.477-10-10-10z',\n 'npm': 'M3 3h18v18H3V3zm3 3v12h3V9h3v9h6V6H6z',\n 'yarn': 'M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5',\n 'facebook': 'M18 2h-3a5 5 0 00-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 011-1h3z',\n 'twitter': 'M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z',\n 'instagram': 'M16 11.37A4 4 0 1112.63 8 4 4 0 0116 11.37z M17.5 6.5h.01 M7 2h10a5 5 0 015 5v10a5 5 0 01-5 5H7a5 5 0 01-5-5V7a5 5 0 015-5z',\n 'linkedin': 'M4 2a2 2 0 100 4 2 2 0 000-4zM2 8h3.8v13H2.2V8zm7.5 0H13v1.8c.5-1 1.6-1.8 3.2-1.8 3.4 0 5 2.3 5 5.3V21h-3.8v-6.2c0-1.5 0-3.3-2-3.3s-2.3 1.5-2.3 3.2V21H9.5V8z',\n 'youtube': 'M22.54 6.42a2.78 2.78 0 00-1.94-2C18.88 4 12 4 12 4s-6.88 0-8.6.46a2.78 2.78 0 00-1.94 2A29 29 0 001 11.75a29 29 0 00.46 5.33A2.78 2.78 0 003.4 19c1.72.46 8.6.46 8.6.46s6.88 0 8.6-.46a2.78 2.78 0 001.94-2 29 29 0 00.46-5.25 29 29 0 00-.46-5.33zM9.75 15.02l5.75-3.27-5.75-3.27z',\n 'twitch': 'M21 2H3v16h5v4l4-4h5l4-4V2zm-10 9V7m5 4V7',\n 'android': 'M17.6 9.48l1.84-3.18c.16-.31.04-.69-.26-.85-.29-.15-.65-.06-.83.22l-1.88 3.24c-2.86-1.21-6.08-1.21-8.94 0L5.65 5.67c-.19-.28-.54-.38-.83-.22-.3.16-.42.54-.26.85l1.84 3.18C2.92 11.03 1 14.22 1 17.8h22c0-3.58-1.92-6.77-5.4-8.32zM7.5 15c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm9 0c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z',\n 'whatsapp': 'M12 2a10 10 0 018.5 15.5l-1.3 4.6-4.6-1.3A10 10 0 1112 2zm0 2a8 8 0 00-6.8 12.3l.5.8-.8 3.1 3.1-.8.8.5A8 8 0 1012 4zm4.5 11.5c-.2-.1-1.3-.7-1.5-.7-.2-.1-.4-.1-.5.1-.1.2-.6.7-.7.9-.1.1-.3.1-.5 0-.9-.4-1.6-1-2.2-1.8-.1-.2 0-.3.1-.4.1-.1.2-.2.3-.4 0-.1.1-.2.2-.3.1-.2.1-.3 0-.4-.1-.1-.5-1.2-.7-1.6-.2-.4-.4-.4-.5-.4h-.5c-.2 0-.5.1-.7.4-.2.3-.9.9-.9 2.1s.9 2.4 1 2.6c.1.1 1.8 2.8 4.4 3.9 1.6.7 2.2.7 3 .6.9-.1 1.9-.8 2.1-1.6.3-.8.3-1.5.2-1.6 0 0-.2-.1-.4-.2z',\n 'telegram': 'M22 2L11 13M22 2l-7 20-4-9-9-4 20-7z',\n 'figma': 'M5 5.5A3.5 3.5 0 018.5 2H12v7H8.5A3.5 3.5 0 015 5.5zM12 2¯h3.5a3.5 3.5 0 110 7H12V2zM12 12.5a3.5 3.5 0 11-7 0 3.5 3.5 0 017 0zm0 7a3.5 3.5 0 1 1-7 0 3.5 3.5 0 0 1 7 0z',\n 'react': 'M12 22c5.52 0 10-4.48 10-10S17.52 2 12 2 2 6.48 2 12s4.48 10 10 10zm0-18c4.41 0 8 3.59 8 8s-3.59 8-8 8-8-3.59-8-8 3.59-8 8-8zm0 2c3.31 0 6 2.69 6 6s-2.69 6-6 6-6-2.69-6-6 2.69-6 6-6z',\n 'google': 'M0 0h24v24H0z M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z',\n 'apple': 'M17.05 20.28c-.98.95-2.05.8-3.08.35-1.09-.46-2.09-.48-3.24 0-1.44.62-2.2.44-3.06-.35C2.79 15.25 3.51 7.59 9.05 7.31c1.35.07 2.29.74 3.08.8 1.18-.24 2.31-.93 3.57-.84 1.51.12 2.65.72 3.4 1.8-3.12 1.87-2.38 5.98.48 7.13-.57 1.5-1.31 2.99-2.53 4.09l-.01-.01zM12.03 7.25c-.15-2.23 1.66-4.07 3.74-4.25.29 2.58-2.34 4.5-3.74 4.25z',\n 'microsoft': 'M0 0h11.75v11.75H0zM12.25 0h11.75v11.75H12.25zM0 12.25h11.75v11.75H0zM12.25 12.25h11.75v11.75H12.25z',\n};\n\n/**\n * Icon Component\n * \n * Renders custom SVG icons without external dependencies.\n * \n * @param {string} icon - Icon name from the icon library\n * @param {string} className - Additional CSS classes\n * @param {string} size - Size preset: 'xs', 'sm', 'md', 'lg', 'xl' or custom size\n */\nconst Icon = ({\n icon,\n className = '',\n size = 'md',\n variant = 'outline', // 'outline' | 'solid' - currently always renders outline\n ...props\n}) => {\n // Size mapping\n const sizeClasses = {\n 'xs': 'w-3 h-3',\n 'sm': 'w-4 h-4',\n 'md': 'w-5 h-5',\n 'lg': 'w-6 h-6',\n 'xl': 'w-8 h-8',\n '2xl': 'w-10 h-10',\n };\n\n const sizeClass = sizeClasses[size] || sizeClasses['md'];\n\n // Always use outline path (solid variant support disabled for now)\n const path = iconPaths[icon];\n\n if (!path) {\n console.warn(`Icon \"${icon}\" not found in icon library`);\n return null;\n }\n\n // Always render as outline\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={`inline-block flex-shrink-0 ${sizeClass} ${className}`}\n aria-hidden=\"true\"\n {...props}\n >\n <path d={path} />\n </svg>\n );\n};\n\nIcon.propTypes = {\n icon: PropTypes.string.isRequired,\n className: PropTypes.string,\n size: PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl', '2xl']),\n variant: PropTypes.oneOf(['outline', 'solid']),\n};\n\n// Export the list of available icons for documentation\nexport const iconNames = Object.keys(iconPaths);\nexport const iconCategories = {\n 'Navigation & UI': ['chevron-down', 'chevron-up', 'chevron-left', 'chevron-right', 'arrow-left', 'arrow-right', 'arrow-up', 'arrow-down', 'menu', 'x', 'xmark', 'plus', 'minus', 'check', 'external-link'],\n 'Actions': ['search', 'filter', 'edit', 'trash', 'copy', 'download', 'upload', 'refresh', 'settings', 'cog'],\n 'Status & Alerts': ['info', 'circle-info', 'warning', 'triangle-exclamation', 'error', 'circle-exclamation', 'success', 'circle-check', 'question', 'circle-question'],\n 'Form Elements': ['eye', 'eye-slash', 'lock', 'unlock'],\n 'Communication': ['envelope', 'mail', 'phone', 'chat', 'comment', 'bell'],\n 'People': ['user', 'users', 'user-plus'],\n 'Media': ['image', 'camera', 'video', 'music', 'play', 'pause', 'stop'],\n 'Files & Documents': ['file', 'file-lines', 'folder', 'folder-open', 'document', 'clipboard'],\n 'Date & Time': ['calendar', 'calendar-days', 'clock', 'time'],\n 'Layout & Design': ['grid', 'list', 'list-check', 'table', 'columns'],\n 'Development': ['code', 'terminal', 'bug', 'database', 'server'],\n 'Commerce': ['cart', 'shopping-cart', 'credit-card', 'tag', 'tags', 'gift'],\n 'Shapes & Symbols': ['circle', 'circle-dot', 'square', 'square-check', 'heart', 'star', 'bookmark', 'flag'],\n 'Weather & Nature': ['sun', 'moon', 'cloud', 'cloud-arrow-up', 'cloud-arrow-down', 'lightning', 'bolt'],\n 'Misc': ['desktop', 'home', 'globe', 'location', 'map-pin', 'link', 'paper-plane', 'rocket', 'sparkles', 'wand-magic-sparkles', 'swatchbook', 'palette'],\n 'Brands': ['github', 'npm', 'yarn', 'facebook', 'instagram', 'linkedin', 'youtube', 'twitch', 'android', 'figma', 'react', 'telegram', 'apple'],\n\n\n};\n\nexport default Icon;\n","import React, { forwardRef } from 'react';\nimport PropTypes from 'prop-types';\nimport Icon from '../Icon';\n\nconst Button = forwardRef(({\n children,\n variant = 'primary', // primary, secondary, outline, ghost, danger\n size = 'md', // sm, md, lg\n color = 'violet', // violet, blue, emerald, rose, amber, black\n isLoading = false,\n startIcon,\n endIcon,\n fullWidth = false,\n disabled = false,\n className = '',\n type = 'button',\n ...props\n}, ref) => {\n\n // Color Configurations\n const colorConfig = {\n violet: {\n primary: 'bg-violet-600 hover:bg-violet-700 text-white shadow-violet-500/20',\n secondary: 'bg-violet-100 hover:bg-violet-200 text-violet-700 dark:bg-violet-500/20 dark:hover:bg-violet-500/30 dark:text-violet-300',\n outline: 'border-violet-200 hover:border-violet-300 text-violet-700 hover:bg-violet-50 dark:border-violet-700 dark:text-violet-300 dark:hover:bg-violet-500/10',\n ghost: 'text-violet-700 hover:bg-violet-50 dark:text-violet-300 dark:hover:bg-violet-500/10',\n ring: 'focus:ring-violet-500'\n },\n blue: {\n primary: 'bg-blue-600 hover:bg-blue-700 text-white shadow-blue-500/20',\n secondary: 'bg-blue-100 hover:bg-blue-200 text-blue-700 dark:bg-blue-500/20 dark:hover:bg-blue-500/30 dark:text-blue-300',\n outline: 'border-blue-200 hover:border-blue-300 text-blue-700 hover:bg-blue-50 dark:border-blue-700 dark:text-blue-300 dark:hover:bg-blue-500/10',\n ghost: 'text-blue-700 hover:bg-blue-50 dark:text-blue-300 dark:hover:bg-blue-500/10',\n ring: 'focus:ring-blue-500'\n },\n emerald: {\n primary: 'bg-emerald-600 hover:bg-emerald-700 text-white shadow-emerald-500/20',\n secondary: 'bg-emerald-100 hover:bg-emerald-200 text-emerald-700 dark:bg-emerald-500/20 dark:hover:bg-emerald-500/30 dark:text-emerald-300',\n outline: 'border-emerald-200 hover:border-emerald-300 text-emerald-700 hover:bg-emerald-50 dark:border-emerald-700 dark:text-emerald-300 dark:hover:bg-emerald-500/10',\n ghost: 'text-emerald-700 hover:bg-emerald-50 dark:text-emerald-300 dark:hover:bg-emerald-500/10',\n ring: 'focus:ring-emerald-500'\n },\n rose: {\n primary: 'bg-rose-600 hover:bg-rose-700 text-white shadow-rose-500/20',\n secondary: 'bg-rose-100 hover:bg-rose-200 text-rose-700 dark:bg-rose-500/20 dark:hover:bg-rose-500/30 dark:text-rose-300',\n outline: 'border-rose-200 hover:border-rose-300 text-rose-700 hover:bg-rose-50 dark:border-rose-700 dark:text-rose-300 dark:hover:bg-rose-500/10',\n ghost: 'text-rose-700 hover:bg-rose-50 dark:text-rose-300 dark:hover:bg-rose-500/10',\n ring: 'focus:ring-rose-500'\n },\n amber: {\n primary: 'bg-amber-500 hover:bg-amber-600 text-white shadow-amber-500/20',\n secondary: 'bg-amber-100 hover:bg-amber-200 text-amber-700 dark:bg-amber-500/20 dark:hover:bg-amber-500/30 dark:text-amber-300',\n outline: 'border-amber-200 hover:border-amber-300 text-amber-700 hover:bg-amber-50 dark:border-amber-700 dark:text-amber-300 dark:hover:bg-amber-500/10',\n ghost: 'text-amber-700 hover:bg-amber-50 dark:text-amber-300 dark:hover:bg-amber-500/10',\n ring: 'focus:ring-amber-500'\n },\n black: {\n primary: 'bg-slate-900 hover:bg-slate-800 text-white shadow-slate-900/20 dark:bg-white dark:text-slate-900 dark:hover:bg-slate-200',\n secondary: 'bg-slate-100 hover:bg-slate-200 text-slate-800 dark:bg-slate-800 dark:hover:bg-slate-700 dark:text-slate-200',\n outline: 'border-slate-200 hover:border-slate-300 text-slate-700 hover:bg-slate-50 dark:border-slate-700 dark:text-slate-300 dark:hover:bg-slate-800',\n ghost: 'text-slate-700 hover:bg-slate-100 dark:text-slate-300 dark:hover:bg-slate-800',\n ring: 'focus:ring-slate-500'\n }\n };\n\n // Size Configurations\n const sizeConfig = {\n sm: 'px-3 py-1.5 text-xs font-medium',\n md: 'px-4 py-2 text-sm font-medium',\n lg: 'px-5 py-2.5 text-base font-medium'\n };\n\n const colors = colorConfig[color] || colorConfig.violet;\n\n // Get variant styles\n let variantStyles = colors[variant] || colors.primary;\n\n // Special case for 'danger' variant (usually red regardless of theme, but fitting the component structure)\n // If variant is 'danger', we might want to force standard red/rose colors or use the current theme's 'rose' equivalent if not explicitly separate.\n // For consistency with specific request logic, let's treat 'danger' as a red-override if needed, \n // OR we can make 'danger' use the 'rose' palette if the user selected another color, \n // BUT usually 'danger' implies semantic error. \n // Let's map 'danger' to a hardcoded red style or just rely on 'rose' if color='rose'.\n // To keep it flexible, let's just stick to the requested colors. \n // If the user wants a red button, they use color=\"rose\". \n // HOWEVER, typical button libs have a semantic 'danger'. \n // Let's implement 'danger' as a specific override style using standard red/rose tokens regardless of 'color' prop,\n // OR just alias it to the 'rose' primary style.\n if (variant === 'danger') {\n variantStyles = 'bg-red-600 hover:bg-red-700 text-white shadow-red-500/20 focus:ring-red-500';\n }\n\n // Base Styles\n // If outline, add border width. \n const isOutline = variant === 'outline';\n const borderClass = isOutline ? 'border' : '';\n\n return (\n <button\n ref={ref}\n type={type}\n disabled={disabled || isLoading}\n className={`\n relative inline-flex items-center justify-center gap-2\n rounded-lg transition-all duration-200\n focus:outline-none focus:ring-2 focus:ring-offset-1 dark:focus:ring-offset-slate-950\n disabled:opacity-60 disabled:cursor-not-allowed\n shadow-sm hover:shadow-md active:scale-[0.98]\n ${sizeConfig[size]}\n ${variantStyles}\n ${colors.ring}\n ${borderClass}\n ${fullWidth ? 'w-full' : ''}\n ${className}\n `}\n {...props}\n >\n {/* Loading Spinner */}\n {isLoading && (\n <svg className=\"animate-spin -ml-1 h-4 w-4 text-current\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\"></circle>\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n )}\n\n {/* Start Icon */}\n {!isLoading && startIcon && (\n <Icon icon={startIcon} size={size === 'sm' ? 'xs' : 'sm'} />\n )}\n\n {/* Children (Text) */}\n <span>{children}</span>\n\n {/* End Icon */}\n {!isLoading && endIcon && (\n <Icon icon={endIcon} size={size === 'sm' ? 'xs' : 'sm'} />\n )}\n </button>\n );\n});\n\nButton.displayName = 'Button';\n\nButton.propTypes = {\n children: PropTypes.node.isRequired,\n variant: PropTypes.oneOf(['primary', 'secondary', 'outline', 'ghost', 'danger']),\n size: PropTypes.oneOf(['sm', 'md', 'lg']),\n color: PropTypes.oneOf(['violet', 'blue', 'emerald', 'rose', 'amber', 'black']),\n isLoading: PropTypes.bool,\n startIcon: PropTypes.string,\n endIcon: PropTypes.string,\n fullWidth: PropTypes.bool,\n disabled: PropTypes.bool,\n className: PropTypes.string,\n type: PropTypes.oneOf(['button', 'submit', 'reset'])\n};\n\nexport default Button;\n","import React, { createContext, useContext, useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport Icon from '../Icon';\n\nconst CheckboxContext = createContext(null);\n\n/**\n * CheckboxGroup Component - Manages state for a group of Checkboxes\n */\nexport const CheckboxGroup = ({\n children,\n value,\n defaultValue = [],\n onChange,\n orientation = 'vertical',\n label,\n description,\n error,\n className = '',\n // Shared props for children\n size = 'md',\n color = 'violet',\n variant = 'simple', // simple, card\n disabled = false\n}) => {\n // Determine if controlled or uncontrolled\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState(defaultValue);\n\n // The actual array of selected values\n const currentValues = isControlled ? value : internalValue;\n\n const handleChildChange = (childValue, isChecked) => {\n let newValues;\n if (isChecked) {\n // Add to array if not already present\n newValues = [...currentValues, childValue];\n } else {\n // Remove from array\n newValues = currentValues.filter(v => v !== childValue);\n }\n\n if (!isControlled) {\n setInternalValue(newValues);\n }\n\n onChange?.(newValues);\n };\n\n return (\n <CheckboxContext.Provider value={{\n values: currentValues,\n onChange: handleChildChange,\n size,\n color,\n variant,\n disabledGrp: disabled\n }}>\n <div className={`flex flex-col gap-2 ${className}`}>\n {/* Group Label */}\n {label && (\n <label className=\"text-sm font-medium text-slate-700 dark:text-slate-300\">\n {label}\n </label>\n )}\n\n {/* Description */}\n {description && (\n <p className=\"text-xs text-slate-500 dark:text-slate-400 -mt-1 mb-1\">\n {description}\n </p>\n )}\n\n {/* Options Container */}\n <div className={`\n flex gap-3\n ${orientation === 'vertical' ? 'flex-col' : 'flex-row flex-wrap'}\n `}>\n {children}\n </div>\n\n {/* Error Message */}\n {error && (\n <p className=\"text-xs text-red-500 mt-1 flex items-center gap-1\">\n <Icon icon=\"circle-exclamation\" />\n {error}\n </p>\n )}\n </div>\n </CheckboxContext.Provider>\n );\n};\n\n// Colors for the checkbox\nconst colorConfig = {\n violet: {\n checked: 'bg-violet-500 border-violet-500',\n ring: 'focus:ring-violet-500',\n text: 'text-violet-700 dark:text-violet-300',\n bg: 'bg-violet-50 dark:bg-violet-900/20',\n border: 'border-violet-500/50'\n },\n blue: {\n checked: 'bg-blue-500 border-blue-500',\n ring: 'focus:ring-blue-500',\n text: 'text-blue-700 dark:text-blue-300',\n bg: 'bg-blue-50 dark:bg-blue-900/20',\n border: 'border-blue-500/50'\n },\n emerald: {\n checked: 'bg-emerald-500 border-emerald-500',\n ring: 'focus:ring-emerald-500',\n text: 'text-emerald-700 dark:text-emerald-300',\n bg: 'bg-emerald-50 dark:bg-emerald-900/20',\n border: 'border-emerald-500/50'\n },\n rose: {\n checked: 'bg-rose-500 border-rose-500',\n ring: 'focus:ring-rose-500',\n text: 'text-rose-700 dark:text-rose-300',\n bg: 'bg-rose-50 dark:bg-rose-900/20',\n border: 'border-rose-500/50'\n },\n amber: {\n checked: 'bg-amber-500 border-amber-500',\n ring: 'focus:ring-amber-500',\n text: 'text-amber-700 dark:text-amber-300',\n bg: 'bg-amber-50 dark:bg-amber-900/20',\n border: 'border-amber-500/50'\n },\n black: {\n checked: 'bg-slate-900 border-slate-900 dark:bg-white dark:border-white',\n ring: 'focus:ring-slate-500',\n text: 'text-slate-900 dark:text-white',\n bg: 'bg-slate-100 dark:bg-slate-800',\n border: 'border-slate-900/50 dark:border-white/50'\n }\n};\n\n/**\n * Checkbox Component - Individual checkbox\n */\nconst Checkbox = ({\n value,\n label,\n description,\n icon,\n disabled = false,\n className = '',\n style,\n // Direct props (override context)\n checked,\n defaultChecked,\n onChange, // only for standalone\n size,\n color,\n variant,\n indeterminate = false\n}) => {\n const context = useContext(CheckboxContext);\n\n // Resolve props (context vs direct)\n const isGrouped = context !== null;\n const finalSize = size || (context?.size || 'md');\n const finalColor = color || (context?.color || 'violet');\n const finalVariant = variant || (context?.variant || 'simple');\n const finalDisabled = disabled || (context?.disabledGrp || false);\n\n // State for standalone usage\n const [internalChecked, setInternalChecked] = useState(defaultChecked || false);\n\n // If grouped, checked status depends on context.values\n // If standalone, controlled uses `checked`, uncontrolled uses `internalChecked`\n const isChecked = isGrouped\n ? context.values.includes(value)\n : (checked !== undefined ? checked : internalChecked);\n\n const handleChange = (e) => {\n if (finalDisabled) return;\n\n const newChecked = e.target.checked;\n\n if (isGrouped) {\n context.onChange(value, newChecked);\n } else {\n if (checked === undefined) {\n setInternalChecked(newChecked);\n }\n onChange?.(newChecked, e);\n }\n };\n\n const colors = colorConfig[finalColor] || colorConfig.violet;\n\n // Size logic\n const sizeClasses = {\n sm: { box: 'w-4 h-4 rounded', icon: 'text-[10px]', text: 'text-xs', p: 'p-3' },\n md: { box: 'w-5 h-5 rounded-md', icon: 'text-xs', text: 'text-sm', p: 'p-4' },\n lg: { box: 'w-6 h-6 rounded-md', icon: 'text-sm', text: 'text-base', p: 'p-5' }\n }[finalSize];\n\n // Card Variant Logic\n if (finalVariant === 'card') {\n return (\n <label\n className={`\n relative flex items-start gap-4 cursor-pointer rounded-xl border-2 transition-all duration-200\n ${sizeClasses.p}\n ${isChecked\n ? `${colors.border} ${colors.bg} shadow-sm ring-1 ${colors.ring.replace('focus:', '')}`\n : 'border-slate-200 dark:border-slate-700 hover:border-slate-300 dark:hover:border-slate-600 hover:bg-slate-50 dark:hover:bg-slate-800'\n }\n ${finalDisabled ? 'opacity-50 cursor-not-allowed grayscale' : ''}\n ${className}\n `}\n style={style}\n >\n <input\n type=\"checkbox\"\n checked={isChecked}\n onChange={handleChange}\n disabled={finalDisabled}\n className=\"sr-only\"\n />\n\n {/* Custom Checkbox */}\n <div className={`\n flex-shrink-0 border-2 flex items-center justify-center transition-all duration-200\n ${sizeClasses.box}\n ${isChecked ? colors.checked : 'border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-900'}\n `}>\n {isChecked && (\n <Icon icon=\"check\" className=\"text-white dark:text-slate-900\" />\n )}\n </div>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2 mb-1\">\n {icon && (\n <Icon\n icon={icon}\n \n className={isChecked ? colors.text : 'text-slate-400'}\n />\n )}\n <span className={`font-semibold ${sizeClasses.text} ${isChecked ? 'text-slate-900 dark:text-white' : 'text-slate-700 dark:text-slate-300'}`}>\n {label}\n </span>\n </div>\n {description && (\n <p className=\"text-xs text-slate-500 dark:text-slate-400 leading-relaxed\">\n {description}\n </p>\n )}\n </div>\n </label>\n );\n }\n\n // Simple Variant (Default)\n return (\n <label\n className={`\n inline-flex items-start gap-3 cursor-pointer group\n ${finalDisabled ? 'opacity-50 cursor-not-allowed' : ''}\n ${className}\n `}\n style={style}\n >\n <div className=\"relative flex items-center mt-0.5\">\n <input\n type=\"checkbox\"\n checked={isChecked}\n onChange={handleChange}\n disabled={finalDisabled}\n className=\"peer sr-only\"\n />\n <div className={`\n ${sizeClasses.box}\n border-2 transition-all duration-200 flex items-center justify-center\n peer-focus:ring-2 peer-focus:ring-offset-1 peer-focus:ring-offset-white dark:peer-focus:ring-offset-slate-950 ${colors.ring}\n ${isChecked || indeterminate\n ? colors.checked\n : 'border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-900 group-hover:border-slate-400 dark:group-hover:border-slate-500'\n }\n `}>\n {indeterminate ? (\n <Icon icon=\"minus\" className={`text-white dark:text-slate-900 ${sizeClasses.icon}`} />\n ) : (\n <Icon\n icon=\"check\"\n \n className={`\n text-white dark:text-slate-900 transition-opacity duration-200\n ${sizeClasses.icon}\n ${isChecked ? 'opacity-100' : 'opacity-0'}\n `}\n />\n )}\n </div>\n </div>\n\n {(label || description) && (\n <div className=\"flex flex-col\">\n {label && (\n <span className={`${sizeClasses.text} font-medium text-slate-700 dark:text-slate-200 group-hover:text-slate-900 dark:group-hover:text-white transition-colors`}>\n {label}\n </span>\n )}\n {description && (\n <span className=\"text-xs text-slate-500 dark:text-slate-400\">\n {description}\n </span>\n )}\n </div>\n )}\n </label>\n );\n};\n\nCheckboxGroup.propTypes = {\n children: PropTypes.node,\n value: PropTypes.array,\n defaultValue: PropTypes.array,\n onChange: PropTypes.func,\n orientation: PropTypes.oneOf(['horizontal', 'vertical']),\n label: PropTypes.string,\n description: PropTypes.string,\n error: PropTypes.string,\n className: PropTypes.string,\n size: PropTypes.oneOf(['sm', 'md', 'lg']),\n color: PropTypes.oneOf(['violet', 'blue', 'emerald', 'rose', 'amber', 'black']),\n variant: PropTypes.oneOf(['simple', 'card']),\n disabled: PropTypes.bool\n};\n\nCheckbox.propTypes = {\n value: PropTypes.any,\n label: PropTypes.string,\n description: PropTypes.string,\n icon: PropTypes.string,\n disabled: PropTypes.bool,\n className: PropTypes.string,\n style: PropTypes.object,\n checked: PropTypes.bool,\n defaultChecked: PropTypes.bool,\n onChange: PropTypes.func,\n size: PropTypes.oneOf(['sm', 'md', 'lg']),\n color: PropTypes.oneOf(['violet', 'blue', 'emerald', 'rose', 'amber', 'black']),\n variant: PropTypes.oneOf(['simple', 'card']),\n indeterminate: PropTypes.bool\n};\n\nCheckbox.Group = CheckboxGroup;\nexport default Checkbox;\n","import React, { useState, useEffect, useRef, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport Icon from '../Icon';\n\n// --- Date Helpers ---\nconst daysInMonth = (year, month) => new Date(year, month + 1, 0).getDate();\nconst getDayOfWeek = (year, month, day) => new Date(year, month, day).getDay(); // 0 = Sun\n\n// CSS for hiding scrollbars\nconst scrollbarHideStyles = `\n .time-wheel-scroll::-webkit-scrollbar {\n display: none;\n }\n`;\n\nconst formatDate = (date, type) => {\n if (!date) return '';\n const d = new Date(date);\n if (isNaN(d.getTime())) return '';\n\n const pad = (n) => n.toString().padStart(2, '0');\n\n // Simple custom formatters\n const monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\n const day = d.getDate();\n const month = d.getMonth();\n const year = d.getFullYear();\n const hours = d.getHours();\n const minutes = d.getMinutes();\n\n // Time formatting\n const ampm = hours >= 12 ? 'PM' : 'AM';\n const h12 = hours % 12 || 12;\n const timeStr = `${h12}:${pad(minutes)} ${ampm}`;\n\n if (type === 'time') return timeStr;\n if (type === 'date') return `${monthNames[month]} ${day}, ${year}`;\n return `${monthNames[month]} ${day}, ${year} ${timeStr}`;\n};\n\nconst isSameDay = (d1, d2) => {\n if (!d1 || !d2) return false;\n return d1.getDate() === d2.getDate() &&\n d1.getMonth() === d2.getMonth() &&\n d1.getFullYear() === d2.getFullYear();\n};\n\nconst scrollWheelToIndex = (ref, index, itemHeight = 40, behavior = 'smooth') => {\n if (ref?.current) {\n const scrollTop = index * itemHeight;\n ref.current.scrollTo({ top: scrollTop, behavior });\n }\n};\n\nconst getCenteredIndex = (scrollTop, itemHeight = 40, containerHeight = 160) => {\n const index = Math.round(scrollTop / itemHeight);\n return Math.max(0, index);\n};\n\nconst WheelColumn = ({\n items,\n selectedValue,\n onSelect,\n wheelRef,\n formatValue,\n width = 'w-16',\n isProgrammaticScrollRef,\n colors\n}) => {\n // Handle click on an item - scroll to it and select it\n const handleItemClick = (item, idx) => {\n // Mark as programmatic scroll to prevent scroll handler from overriding\n isProgrammaticScrollRef.current = true;\n // Scroll this wheel to center on the clicked item\n scrollWheelToIndex(wheelRef, idx, 40, 'smooth');\n // Update the value\n onSelect(item);\n // Reset programmatic flag after animation\n setTimeout(() => {\n isProgrammaticScrollRef.current = false;\n }, 300);\n };\n\n // Handle scroll event - detect when scrolling stops to select centered item\n const handleScroll = (e) => {\n // Skip if this is a programmatic scroll (initial load or click)\n if (isProgrammaticScrollRef.current) return;\n\n const scrollTop = e.target.scrollTop;\n\n // Calculate which item is centered\n const centeredIndex = getCenteredIndex(scrollTop, 40, 160);\n const clampedIndex = Math.min(Math.max(0, centeredIndex), items.length - 1);\n const centeredItem = items[clampedIndex];\n\n // Only update if different from current selection\n if (centeredItem !== selectedValue) {\n onSelect(centeredItem);\n }\n };\n\n return (\n <div className=\"relative\">\n {/* Top fade gradient */}\n <div className=\"absolute top-0 left-0 right-0 h-12 bg-gradient-to-b from-white dark:from-slate-900 to-transparent z-10 pointer-events-none rounded-t-xl\" />\n\n {/* Selection highlight band */}\n <div className={`absolute left-0 right-0 top-1/2 -translate-y-1/2 h-10 bg-gradient-to-r ${colors.active.includes('violet') ? 'from-violet-100/50 to-violet-50/50 dark:from-violet-900/30 dark:to-violet-800/30' :\n colors.active.includes('blue') ? 'from-blue-100/50 to-blue-50/50 dark:from-blue-900/30 dark:to-blue-800/30' :\n colors.active.includes('emerald') ? 'from-emerald-100/50 to-emerald-50/50 dark:from-emerald-900/30 dark:to-emerald-800/30' :\n colors.active.includes('rose') ? 'from-rose-100/50 to-rose-50/50 dark:from-rose-900/30 dark:to-rose-800/30' :\n colors.active.includes('amber') ? 'from-amber-100/50 to-amber-50/50 dark:from-amber-900/30 dark:to-amber-800/30' :\n 'from-slate-100/50 to-slate-50/50 dark:from-slate-800/30 dark:to-slate-700/30'\n } rounded-lg border border-slate-200/50 dark:border-slate-700/50 z-0 pointer-events-none`} />\n\n {/* Scrollable container */}\n <div\n ref={wheelRef}\n onScroll={handleScroll}\n className={`time-wheel-scroll ${width} h-[160px] overflow-y-auto relative`}\n style={{\n scrollSnapType: 'y mandatory',\n scrollbarWidth: 'none',\n msOverflowStyle: 'none',\n WebkitOverflowScrolling: 'touch'\n }}\n >\n {/* Spacer for centering first item */}\n <div className=\"h-[60px]\" />\n\n {items.map((item, idx) => {\n const isSelected = item === selectedValue;\n const displayValue = formatValue ? formatValue(item) : item;\n\n return (\n <button\n key={idx}\n onClick={() => handleItemClick(item, idx)}\n className={`\n w-full h-10 flex items-center justify-center text-center\n transition-all duration-200 scroll-snap-align-center\n ${isSelected\n ? `text-xl font-bold ${colors.text}`\n : 'text-base font-normal text-slate-400 dark:text-slate-500 hover:text-slate-600 dark:hover:text-slate-300'\n }\n `}\n style={{ scrollSnapAlign: 'center' }}\n >\n {displayValue}\n </button>\n );\n })}\n\n {/* Spacer for centering last item */}\n <div className=\"h-[60px]\" />\n </div>\n\n {/* Bottom fade gradient */}\n <div className=\"absolute bottom-0 left-0 right-0 h-12 bg-gradient-to-t from-white dark:from-slate-900 to-transparent z-10 pointer-events-none rounded-b-xl\" />\n </div>\n );\n};\n\n/**\n * DateTimePicker Component\n */\nconst DateTimePicker = ({\n value,\n onChange,\n type = 'date', // date, time, datetime\n label,\n helperText,\n error,\n placeholder = 'Select date...',\n minDate,\n maxDate,\n disabled = false,\n color = 'violet',\n size = 'md',\n variant = 'outlined', // outlined, filled\n className = '',\n fullWidth = false,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const containerRef = useRef(null);\n const yearScrollRef = useRef(null);\n const hourWheelRef = useRef(null);\n const minuteWheelRef = useRef(null);\n const ampmWheelRef = useRef(null);\n\n // Internal state for the calendar view (even if value is null)\n const initialViewDate = value ? new Date(value) : new Date();\n const [viewDate, setViewDate] = useState(initialViewDate); // For navigating months\n const [selectedDate, setSelectedDate] = useState(value ? new Date(value) : null);\n\n // 'days', 'months', 'years'\n const [viewMode, setViewMode] = useState('days');\n\n // Update internal state when props change\n useEffect(() => {\n if (value) {\n const d = new Date(value);\n setSelectedDate(d);\n setViewDate(d);\n } else {\n setSelectedDate(null);\n }\n }, [value]);\n\n // Close on click outside and reset view\n useEffect(() => {\n const handleClickOutside = (event) => {\n if (containerRef.current && !containerRef.current.contains(event.target)) {\n setIsOpen(false);\n setTimeout(() => setViewMode('days'), 200); // Reset after animation\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n // Scroll to year when opening year view\n useEffect(() => {\n if (viewMode === 'years' && yearScrollRef.current) {\n const el = yearScrollRef.current.querySelector('[data-selected-year=\"true\"]');\n if (el) {\n el.scrollIntoView({ block: 'center', behavior: 'auto' });\n }\n }\n }, [viewMode]);\n\n // Refs for scroll timeout debouncing (one per wheel)\n const hourScrollTimeoutRef = useRef(null);\n const minuteScrollTimeoutRef = useRef(null);\n const ampmScrollTimeoutRef = useRef(null);\n\n // Track if we're programmatically scrolling (to avoid triggering selection during programmatic scroll)\n // Use separate flags for each wheel\n const isProgrammaticScrollHourRef = useRef(false);\n const isProgrammaticScrollMinuteRef = useRef(false);\n const isProgrammaticScrollAmPmRef = useRef(false);\n\n // Helper function to scroll a wheel to a specific index\n // Since we have spacers of 60px (1.5 items) at top/bottom, and container is 160px (4 items),\n // calculating centering is simplified:\n // Item 0 center is at 60 + 20 = 80px. View center is at scrollTop + 80px.\n // So scrollTop = 0 means Item 0 is centered.\n // scrollTop = 40 means Item 1 is centered.\n const scrollWheelToIndex = (ref, index, itemHeight = 40, behavior = 'smooth') => {\n if (ref?.current) {\n const scrollTop = index * itemHeight;\n ref.current.scrollTo({ top: scrollTop, behavior });\n }\n };\n\n // Helper function to get the centered item index from scroll position\n const getCenteredIndex = (scrollTop, itemHeight = 40, containerHeight = 160) => {\n const index = Math.round(scrollTop / itemHeight);\n return Math.max(0, index);\n };\n\n // Scroll time wheels to selected values only when picker first opens\n useEffect(() => {\n if (isOpen && (type === 'time' || type === 'datetime')) {\n // Mark all wheels as programmatically scrolling\n isProgrammaticScrollHourRef.current = true;\n isProgrammaticScrollMinuteRef.current = true;\n isProgrammaticScrollAmPmRef.current = true;\n\n const currentHours = selectedDate ? selectedDate.getHours() : 12;\n const currentMinutes = selectedDate ? selectedDate.getMinutes() : 0;\n const current12Hour = currentHours % 12 || 12;\n const currentAmPm = currentHours >= 12 ? 'PM' : 'AM';\n\n const hours = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\n const ampmOptions = ['AM', 'PM'];\n\n // Use a short timeout to ensure DOM is ready, then scroll instantly (no animation)\n setTimeout(() => {\n scrollWheelToIndex(hourWheelRef, hours.indexOf(current12Hour), 40, 'instant');\n scrollWheelToIndex(minuteWheelRef, currentMinutes, 40, 'instant');\n scrollWheelToIndex(ampmWheelRef, ampmOptions.indexOf(currentAmPm), 40, 'instant');\n\n // Reset programmatic scroll flags after scrolling completes\n setTimeout(() => {\n isProgrammaticScrollHourRef.current = false;\n isProgrammaticScrollMinuteRef.current = false;\n isProgrammaticScrollAmPmRef.current = false;\n }, 100);\n }, 50);\n }\n\n // Cleanup scroll timeouts when closing\n if (!isOpen) {\n if (hourScrollTimeoutRef.current) clearTimeout(hourScrollTimeoutRef.current);\n if (minuteScrollTimeoutRef.current) clearTimeout(minuteScrollTimeoutRef.current);\n if (ampmScrollTimeoutRef.current) clearTimeout(ampmScrollTimeoutRef.current);\n }\n }, [isOpen, type]); // Only run on open/close and type change\n\n // Color configs\n const colors = {\n violet: {\n active: 'bg-violet-500 text-white',\n hover: 'hover:bg-violet-50 dark:hover:bg-violet-900/30 text-slate-700 dark:text-slate-300',\n text: 'text-violet-600 dark:text-violet-400',\n today: 'text-violet-600 font-bold',\n ring: 'focus:ring-violet-500/20',\n border: 'focus:border-violet-500',\n icon: 'text-violet-500'\n },\n blue: {\n active: 'bg-blue-500 text-white',\n hover: 'hover:bg-blue-50 dark:hover:bg-blue-900/30 text-slate-700 dark:text-slate-300',\n text: 'text-blue-600 dark:text-blue-400',\n today: 'text-blue-600 font-bold',\n ring: 'focus:ring-blue-500/20',\n border: 'focus:border-blue-500',\n icon: 'text-blue-500'\n },\n emerald: {\n active: 'bg-emerald-500 text-white',\n hover: 'hover:bg-emerald-50 dark:hover:bg-emerald-900/30 text-slate-700 dark:text-slate-300',\n text: 'text-emerald-600 dark:text-emerald-400',\n today: 'text-emerald-600 font-bold',\n ring: 'focus:ring-emerald-500/20',\n border: 'focus:border-emerald-500',\n icon: 'text-emerald-500'\n },\n rose: {\n active: 'bg-rose-500 text-white',\n hover: 'hover:bg-rose-50 dark:hover:bg-rose-900/30 text-slate-700 dark:text-slate-300',\n text: 'text-rose-600 dark:text-rose-400',\n today: 'text-rose-600 font-bold',\n ring: 'focus:ring-rose-500/20',\n border: 'focus:border-rose-500',\n icon: 'text-rose-500'\n },\n amber: {\n active: 'bg-amber-500 text-white',\n hover: 'hover:bg-amber-50 dark:hover:bg-amber-900/30 text-slate-700 dark:text-slate-300',\n text: 'text-amber-600 dark:text-amber-400',\n today: 'text-amber-600 font-bold',\n ring: 'focus:ring-amber-500/20',\n border: 'focus:border-amber-500',\n icon: 'text-amber-500'\n },\n black: {\n active: 'bg-slate-900 text-white dark:bg-white dark:text-slate-900',\n hover: 'hover:bg-slate-100 dark:hover:bg-slate-800 text-slate-700 dark:text-slate-300',\n text: 'text-slate-900 dark:text-white',\n today: 'text-slate-900 dark:text-white font-bold',\n ring: 'focus:ring-slate-500/20',\n border: 'focus:border-slate-900 dark:focus:border-slate-100',\n icon: 'text-slate-900 dark:text-white'\n },\n }[color] || colors.violet;\n\n // Handlers\n const handleDateClick = (day) => {\n const newDate = new Date(viewDate.getFullYear(), viewDate.getMonth(), day);\n\n if (selectedDate && type !== 'date') {\n newDate.setHours(selectedDate.getHours());\n newDate.setMinutes(selectedDate.getMinutes());\n } else if (!selectedDate) {\n const now = new Date();\n newDate.setHours(now.getHours());\n newDate.setMinutes(now.getMinutes());\n }\n\n setSelectedDate(newDate);\n onChange?.(newDate);\n\n if (type === 'date') setIsOpen(false);\n };\n\n const handleMonthSelect = (monthIdx) => {\n const newDate = new Date(viewDate.getFullYear(), monthIdx, 1);\n setViewDate(newDate);\n setViewMode('days');\n };\n\n const handleYearSelect = (year) => {\n const newDate = new Date(year, viewDate.getMonth(), 1);\n setViewDate(newDate);\n setViewMode('months'); // Go to month selection after year\n };\n\n const handleTimeChange = (changeType, val) => {\n const d = selectedDate ? new Date(selectedDate) : new Date();\n const safeVal = isNaN(val) ? 0 : val;\n\n if (changeType === 'hour12') {\n // Convert 12-hour to 24-hour\n const currentHours = d.getHours();\n const isPM = currentHours >= 12;\n let newHour = safeVal;\n if (isPM) {\n newHour = safeVal === 12 ? 12 : safeVal + 12;\n } else {\n newHour = safeVal === 12 ? 0 : safeVal;\n }\n d.setHours(newHour);\n } else if (changeType === 'ampm') {\n const currentHours = d.getHours();\n const current12Hour = currentHours % 12 || 12;\n if (val === 'AM' && currentHours >= 12) {\n d.setHours(current12Hour === 12 ? 0 : current12Hour);\n } else if (val === 'PM' && currentHours < 12) {\n d.setHours(current12Hour === 12 ? 12 : current12Hour + 12);\n }\n } else if (changeType === 'minute') {\n d.setMinutes(safeVal);\n } else if (changeType === 'hour') {\n d.setHours(safeVal);\n }\n\n setSelectedDate(d);\n onChange?.(d);\n };\n\n const navigateMonth = (dir) => {\n const newDate = new Date(viewDate.getFullYear(), viewDate.getMonth() + dir, 1);\n setViewDate(newDate);\n };\n\n // Calendar Grid Generation\n const generateCalendar = () => {\n const year = viewDate.getFullYear();\n const month = viewDate.getMonth();\n\n const firstDay = getDayOfWeek(year, month, 1);\n const days = daysInMonth(year, month);\n const prevMonthDays = daysInMonth(year, month - 1);\n\n const grid = [];\n\n // Previous month filler\n for (let i = 0; i < firstDay; i++) {\n grid.push({ day: prevMonthDays - firstDay + 1 + i, type: 'prev' });\n }\n\n // Current month\n for (let i = 1; i <= days; i++) {\n grid.push({ day: i, type: 'current' });\n }\n\n // Next month filler\n const remaining = 42 - grid.length; // 6 rows * 7 cols\n for (let i = 1; i <= remaining; i++) {\n grid.push({ day: i, type: 'next' });\n }\n\n return grid;\n };\n\n const calendarGrid = useMemo(() => generateCalendar(), [viewDate]);\n const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\n const weekDays = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\n\n // Generate years (1900 - 2100)\n const years = useMemo(() => {\n const currentYear = new Date().getFullYear();\n const yrs = [];\n for (let i = 1900; i <= currentYear + 100; i++) {\n yrs.push(i);\n }\n return yrs;\n }, []);\n\n // Styles based on variant/size\n const inputClasses = `\n w-full flex items-center justify-between transition-all duration-200 cursor-pointer\n ${size === 'sm' ? 'h-8 px-3 text-xs' : ''}\n ${size === 'md' ? 'h-11 px-4 text-sm' : ''}\n ${size === 'lg' ? 'h-12 px-5 text-base' : ''}\n ${variant === 'outlined'\n ? 'bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-700 hover:border-slate-300 dark:hover:border-slate-600'\n : 'bg-slate-50 dark:bg-slate-800/50 border border-transparent hover:bg-slate-100 dark:hover:bg-slate-800'\n }\n ${error ? 'border-red-300 focus:border-red-500 focus:ring-red-500/20' : `${isOpen ? colors.border : ''} focus:ring-4 ${colors.ring}`}\n ${disabled ? 'opacity-50 cursor-not-allowed bg-slate-50 dark:bg-slate-900' : 'hover:shadow-sm'}\n rounded-xl outline-none\n `;\n\n return (\n <>\n <style>{scrollbarHideStyles}</style>\n <div\n className={`relative ${fullWidth ? 'w-full' : 'w-72'} ${className}`}\n ref={containerRef}\n >\n {/* Label */}\n {label && (\n <label className=\"block text-sm font-medium text-slate-700 dark:text-slate-300 mb-1.5 ml-1\">\n {label}\n </label>\n )}\n\n {/* Trigger Input */}\n <div\n className={inputClasses}\n onClick={() => !disabled && setIsOpen(!isOpen)}\n role=\"button\"\n tabIndex={0}\n >\n <div className=\"flex items-center gap-3 overflow-hidden\">\n <Icon\n icon={type === 'time' ? 'clock' : 'calendar-days'}\n variant=\"far\"\n className={`${selectedDate ? colors.icon : 'text-slate-400'} flex-shrink-0`}\n />\n <span className={`block truncate ${selectedDate ? 'text-slate-900 dark:text-white' : 'text-slate-400'}`}>\n {selectedDate ? formatDate(selectedDate, type) : placeholder}\n </span>\n </div>\n {!disabled && (\n <Icon\n icon=\"chevron-down\"\n\n className={`text-slate-400 text-xs transition-transform duration-200 ${isOpen ? 'rotate-180' : ''}`}\n />\n )}\n </div>\n\n {/* Error & Helper Text */}\n {(error || helperText) && (\n <div className=\"mt-1.5 ml-1 text-xs\">\n {error ? (\n <span className=\"text-red-500 flex items-center gap-1\">\n <Icon icon=\"circle-exclamation\" />\n {error}\n </span>\n ) : (\n <span className=\"text-slate-500 dark:text-slate-400\">{helperText}</span>\n )}\n </div>\n )}\n\n {/* Popover */}\n {isOpen && (\n <div\n className=\"absolute top-full left-0 mt-2 z-50 bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-700 rounded-2xl shadow-xl overflow-hidden min-w-[320px] w-fit animate-in fade-in slide-in-from-top-2 duration-150\"\n >\n\n\n <div className=\"flex flex-col sm:flex-row\">\n {/* Views Container */}\n {type !== 'time' && (\n <div className=\"text-sm flex-1 min-w-[320px]\">\n <div className=\"p-4 border-b border-slate-100 dark:border-slate-800 flex items-center justify-between bg-slate-50/50 dark:bg-slate-800/20\">\n {viewMode === 'days' && (\n <>\n <button\n onClick={() => navigateMonth(-1)}\n className=\"p-1.5 rounded-lg hover:bg-slate-200/50 dark:hover:bg-slate-700 text-slate-500 transition-colors\"\n >\n <Icon icon=\"chevron-left\" className=\"text-xs\" />\n </button>\n <button\n onClick={() => setViewMode('years')}\n className={`font-semibold text-sm ${colors.text} hover:opacity-80 transition-opacity`}\n >\n {months[viewDate.getMonth()]} {viewDate.getFullYear()}\n </button>\n <button\n onClick={() => navigateMonth(1)}\n className=\"p-1.5 rounded-lg hover:bg-slate-200/50 dark:hover:bg-slate-700 text-slate-500 transition-colors\"\n >\n <Icon icon=\"chevron-right\" className=\"text-xs\" />\n </button>\n </>\n )}\n {(viewMode === 'months' || viewMode === 'years') && (\n <div className=\"flex items-center justify-center w-full relative\">\n <button\n onClick={() => setViewMode(viewMode === 'years' ? 'days' : 'years')}\n className=\"absolute left-0 p-1.5 rounded-lg hover:bg-slate-200/50 dark:hover:bg-slate-700 text-slate-500\"\n >\n <Icon icon=\"arrow-left\" className=\"text-xs\" />\n </button>\n <span className=\"font-semibold text-slate-900 dark:text-white\">\n {viewMode === 'years' ? 'Select Year' : 'Select Month'}\n </span>\n </div>\n )}\n </div>\n\n <div className=\"p-4\">\n {/* Days View */}\n {viewMode === 'days' && (\n <>\n <div className=\"grid grid-cols-7 mb-2\">\n {weekDays.map(d => (\n <div key={d} className=\"text-center text-[11px] font-bold text-slate-400 uppercase tracking-wide py-1\">\n {d}\n </div>\n ))}\n </div>\n <div className=\"grid grid-cols-7 gap-1\">\n {calendarGrid.map((cell, idx) => {\n if (cell.type !== 'current') {\n return <div key={idx} className=\"h-9\" />;\n }\n\n const cellDate = new Date(viewDate.getFullYear(), viewDate.getMonth(), cell.day);\n const isSelected = selectedDate && isSameDay(selectedDate, cellDate);\n const isToday = isSameDay(new Date(), cellDate);\n\n return (\n <button\n key={idx}\n onClick={() => handleDateClick(cell.day)}\n className={`\n h-9 w-9 rounded-lg flex items-center justify-center transition-all duration-200 font-medium\n ${isSelected ? colors.active : colors.hover}\n ${!isSelected && isToday ? colors.today : ''}\n ${!isSelected && !isToday ? 'text-slate-600 dark:text-slate-300' : ''}\n `}\n >\n {cell.day}\n </button>\n );\n })}\n </div>\n </>\n )}\n\n {/* Months View */}\n {viewMode === 'months' && (\n <div className=\"grid grid-cols-3 gap-2\">\n {months.map((m, idx) => (\n <button\n key={m}\n onClick={() => handleMonthSelect(idx)}\n className={`\n p-2 rounded-lg text-sm transition-all\n ${viewDate.getMonth() === idx ? colors.active : colors.hover}\n `}\n >\n {m.substring(0, 3)}\n </button>\n ))}\n </div>\n )}\n\n {/* Years View */}\n {viewMode === 'years' && (\n <div className=\"h-64 overflow-y-auto custom-scrollbar pr-2\" ref={yearScrollRef}>\n <div className=\"grid grid-cols-4 gap-2\">\n {years.map((y) => (\n <button\n key={y}\n data-selected-year={viewDate.getFullYear() === y}\n onClick={() => handleYearSelect(y)}\n className={`\n p-2 rounded-lg text-sm transition-all\n ${viewDate.getFullYear() === y ? colors.active : colors.hover}\n `}\n >\n {y}\n </button>\n ))}\n </div>\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* Time Picker Column - Scrollable Wheel Design */}\n {(type === 'time' || type === 'datetime') && (() => {\n const currentHours = selectedDate ? selectedDate.getHours() : 12;\n const currentMinutes = selectedDate ? selectedDate.getMinutes() : 0;\n const current12Hour = currentHours % 12 || 12;\n const currentAmPm = currentHours >= 12 ? 'PM' : 'AM';\n\n // Generate arrays for wheels\n const hours = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\n const minutes = Array.from({ length: 60 }, (_, i) => i);\n const ampmOptions = ['AM', 'PM'];\n\n return (\n <div className={`\n flex flex-col items-center justify-center gap-3 p-4\n ${type === 'time'\n ? 'w-full min-w-[240px]'\n : 'border-l border-slate-100 dark:border-slate-800 bg-slate-50/30 dark:bg-slate-800/10'\n }\n `}>\n {/* Time Header */}\n <div className=\"text-xs font-bold text-slate-400 uppercase tracking-wider mb-1\">\n Select Time\n </div>\n\n {/* Wheel Columns Container */}\n <div className=\"flex items-center justify-center gap-1\">\n {/* Hours Wheel */}\n <WheelColumn\n items={hours}\n selectedValue={current12Hour}\n onSelect={(h) => handleTimeChange('hour12', h)}\n wheelRef={hourWheelRef}\n formatValue={(h) => h.toString().padStart(2, '0')}\n isProgrammaticScrollRef={isProgrammaticScrollHourRef}\n colors={colors}\n />\n\n {/* Colon Separator */}\n <div className=\"flex flex-col items-center justify-center h-[160px]\">\n <span className={`text-2xl font-bold ${colors.text}`}>:</span>\n </div>\n\n {/* Minutes Wheel */}\n <WheelColumn\n items={minutes}\n selectedValue={currentMinutes}\n onSelect={(m) => handleTimeChange('minute', m)}\n wheelRef={minuteWheelRef}\n formatValue={(m) => m.toString().padStart(2, '0')}\n isProgrammaticScrollRef={isProgrammaticScrollMinuteRef}\n colors={colors}\n />\n\n {/* AM/PM Wheel */}\n <WheelColumn\n items={ampmOptions}\n selectedValue={currentAmPm}\n onSelect={(ap) => handleTimeChange('ampm', ap)}\n wheelRef={ampmWheelRef}\n width=\"w-14\"\n isProgrammaticScrollRef={isProgrammaticScrollAmPmRef}\n colors={colors}\n />\n </div>\n\n {/* Current Time Display */}\n <div className={`text-lg font-semibold ${colors.text} mt-1`}>\n {selectedDate ? formatDate(selectedDate, 'time') : '--:-- --'}\n </div>\n </div>\n );\n })()}\n </div>\n </div>\n )}\n </div>\n </>\n );\n};\n\nDateTimePicker.propTypes = {\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.instanceOf(Date)]),\n onChange: PropTypes.func,\n type: PropTypes.oneOf(['date', 'time', 'datetime']),\n label: PropTypes.string,\n helperText: PropTypes.string,\n error: PropTypes.string,\n placeholder: PropTypes.string,\n minDate: PropTypes.oneOfType([PropTypes.string, PropTypes.instanceOf(Date)]),\n maxDate: PropTypes.oneOfType([PropTypes.string, PropTypes.instanceOf(Date)]),\n disabled: PropTypes.bool,\n color: PropTypes.oneOf(['violet', 'blue', 'emerald', 'rose', 'amber', 'black']),\n size: PropTypes.oneOf(['sm', 'md', 'lg']),\n variant: PropTypes.oneOf(['outlined', 'filled']),\n className: PropTypes.string,\n fullWidth: PropTypes.bool,\n};\n\nexport default DateTimePicker;\n","import React, { useState, useRef, useCallback, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport Icon from '../Icon';\n\nconst formatBytes = (bytes, decimals = 2) => {\n if (!+bytes) return '0 Bytes';\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;\n};\n\nconst colorConfig = {\n violet: {\n active: 'border-violet-500 bg-violet-50 dark:bg-violet-900/10',\n text: 'text-violet-600 dark:text-violet-400',\n icon: 'text-violet-500',\n ring: 'focus:ring-violet-500/20',\n // Button style variants\n primary: 'bg-violet-600 hover:bg-violet-700 text-white shadow-violet-500/20',\n secondary: 'bg-violet-100 hover:bg-violet-200 text-violet-700 dark:bg-violet-500/20 dark:hover:bg-violet-500/30 dark:text-violet-300',\n outline: 'border border-violet-200 hover:border-violet-300 text-violet-700 hover:bg-violet-50 dark:border-violet-700 dark:text-violet-300 dark:hover:bg-violet-500/10 bg-transparent',\n ghost: 'text-violet-700 hover:bg-violet-50 dark:text-violet-300 dark:hover:bg-violet-500/10 bg-transparent'\n },\n blue: {\n active: 'border-blue-500 bg-blue-50 dark:bg-blue-900/10',\n text: 'text-blue-600 dark:text-blue-400',\n icon: 'text-blue-500',\n ring: 'focus:ring-blue-500/20',\n primary: 'bg-blue-600 hover:bg-blue-700 text-white shadow-blue-500/20',\n secondary: 'bg-blue-100 hover:bg-blue-200 text-blue-700 dark:bg-blue-500/20 dark:hover:bg-blue-500/30 dark:text-blue-300',\n outline: 'border border-blue-200 hover:border-blue-300 text-blue-700 hover:bg-blue-50 dark:border-blue-700 dark:text-blue-300 dark:hover:bg-blue-500/10 bg-transparent',\n ghost: 'text-blue-700 hover:bg-blue-50 dark:text-blue-300 dark:hover:bg-blue-500/10 bg-transparent'\n },\n emerald: {\n active: 'border-emerald-500 bg-emerald-50 dark:bg-emerald-900/10',\n text: 'text-emerald-600 dark:text-emerald-400',\n icon: 'text-emerald-500',\n ring: 'focus:ring-emerald-500/20',\n primary: 'bg-emerald-600 hover:bg-emerald-700 text-white shadow-emerald-500/20',\n secondary: 'bg-emerald-100 hover:bg-emerald-200 text-emerald-700 dark:bg-emerald-500/20 dark:hover:bg-emerald-500/30 dark:text-emerald-300',\n outline: 'border border-emerald-200 hover:border-emerald-300 text-emerald-700 hover:bg-emerald-50 dark:border-emerald-700 dark:text-emerald-300 dark:hover:bg-emerald-500/10 bg-transparent',\n ghost: 'text-emerald-700 hover:bg-emerald-50 dark:text-emerald-300 dark:hover:bg-emerald-500/10 bg-transparent'\n },\n rose: {\n active: 'border-rose-500 bg-rose-50 dark:bg-rose-900/10',\n text: 'text-rose-600 dark:text-rose-400',\n icon: 'text-rose-500',\n ring: 'focus:ring-rose-500/20',\n primary: 'bg-rose-600 hover:bg-rose-700 text-white shadow-rose-500/20',\n secondary: 'bg-rose-100 hover:bg-rose-200 text-rose-700 dark:bg-rose-500/20 dark:hover:bg-rose-500/30 dark:text-rose-300',\n outline: 'border border-rose-200 hover:border-rose-300 text-rose-700 hover:bg-rose-50 dark:border-rose-700 dark:text-rose-300 dark:hover:bg-rose-500/10 bg-transparent',\n ghost: 'text-rose-700 hover:bg-rose-50 dark:text-rose-300 dark:hover:bg-rose-500/10 bg-transparent'\n },\n amber: {\n active: 'border-amber-500 bg-amber-50 dark:bg-amber-900/10',\n text: 'text-amber-600 dark:text-amber-400',\n icon: 'text-amber-500',\n ring: 'focus:ring-amber-500/20',\n primary: 'bg-amber-500 hover:bg-amber-600 text-white shadow-amber-500/20',\n secondary: 'bg-amber-100 hover:bg-amber-200 text-amber-700 dark:bg-amber-500/20 dark:hover:bg-amber-500/30 dark:text-amber-300',\n outline: 'border border-amber-200 hover:border-amber-300 text-amber-700 hover:bg-amber-50 dark:border-amber-700 dark:text-amber-300 dark:hover:bg-amber-500/10 bg-transparent',\n ghost: 'text-amber-700 hover:bg-amber-50 dark:text-amber-300 dark:hover:bg-amber-500/10 bg-transparent'\n },\n black: {\n active: 'border-slate-800 dark:border-slate-200 bg-slate-50 dark:bg-slate-800',\n text: 'text-slate-800 dark:text-slate-200',\n icon: 'text-slate-800 dark:text-white',\n ring: 'focus:ring-slate-500/20',\n primary: 'bg-slate-900 hover:bg-slate-800 text-white shadow-slate-900/20 dark:bg-white dark:text-slate-900 dark:hover:bg-slate-200',\n secondary: 'bg-slate-100 hover:bg-slate-200 text-slate-800 dark:bg-slate-800 dark:hover:bg-slate-700 dark:text-slate-200',\n outline: 'border border-slate-200 hover:border-slate-300 text-slate-700 hover:bg-slate-50 dark:border-slate-700 dark:text-slate-300 dark:hover:bg-slate-800 bg-transparent',\n ghost: 'text-slate-700 hover:bg-slate-100 dark:text-slate-300 dark:hover:bg-slate-800 bg-transparent'\n }\n};\n\nconst FileUpload = ({\n variant = 'dropzone', // dropzone, compact\n buttonStyle = 'primary', // primary, secondary, outline, ghost\n multiple = false,\n accept,\n maxSize, // in bytes\n maxFiles,\n label = 'Click or drag file to upload',\n description = 'SVG, PNG, JPG or GIF (max. 5MB)',\n color = 'violet',\n fullWidth = true,\n className = '',\n onFilesChange,\n disabled = false\n}) => {\n const [files, setFiles] = useState([]);\n const [isDragging, setIsDragging] = useState(false);\n const [error, setError] = useState(null);\n const inputRef = useRef(null);\n\n const colors = colorConfig[color] || colorConfig.violet;\n\n const handleDrag = useCallback((e) => {\n e.preventDefault();\n e.stopPropagation();\n if (e.type === 'dragenter' || e.type === 'dragover') {\n if (!disabled) setIsDragging(true);\n } else if (e.type === 'dragleave') {\n setIsDragging(false);\n }\n }, [disabled]);\n\n const validateFile = (file) => {\n if (maxSize && file.size > maxSize) {\n return { valid: false, error: `File ${file.name} exceeds size limit of ${formatBytes(maxSize)}` };\n }\n // Basic accept validation (simple check)\n if (accept) {\n const acceptedTypes = accept.split(',').map(t => t.trim());\n const fileType = file.type;\n const fileName = file.name;\n const isValid = acceptedTypes.some(type => {\n if (type.endsWith('/*')) {\n return fileType.startsWith(type.replace('/*', ''));\n }\n if (type.startsWith('.')) {\n return fileName.toLowerCase().endsWith(type.toLowerCase());\n }\n return fileType === type;\n });\n if (!isValid) return { valid: false, error: `File type not accepted: ${file.name}` };\n }\n return { valid: true };\n };\n\n const handleDrop = useCallback((e) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n if (disabled) return;\n\n const droppedFiles = Array.from(e.dataTransfer.files);\n processFiles(droppedFiles);\n }, [disabled]);\n\n const handleInputChange = (e) => {\n const selectedFiles = Array.from(e.target.files);\n processFiles(selectedFiles);\n };\n\n const processFiles = (newFiles) => {\n setError(null);\n\n let validFiles = [];\n let errors = [];\n\n newFiles.forEach(file => {\n const validation = validateFile(file);\n if (validation.valid) {\n validFiles.push(file);\n } else {\n errors.push(validation.error);\n }\n });\n\n if (errors.length > 0) {\n setError(errors[0]); // Show first error for simplicity\n return; // Stop if there are invalid files? Or just add the valid ones? Let's stop.\n }\n\n if (maxFiles && (files.length + validFiles.length) > maxFiles) {\n setError(`Maximum number of files (${maxFiles}) exceeded`);\n return;\n }\n\n let updatedFiles;\n if (multiple) {\n updatedFiles = [...files, ...validFiles];\n } else {\n updatedFiles = [validFiles[0]].filter(Boolean); // Only take the first one\n }\n\n // De-duplicate based on name+size+lastModified\n const uniqueString = f => `${f.name}-${f.size}-${f.lastModified}`;\n const existingKeys = new Set(files.map(uniqueString));\n\n if (multiple) {\n // Filter out duplicates from the NEW batch if they exist in current\n const distinctNew = validFiles.filter(f => !existingKeys.has(uniqueString(f)));\n updatedFiles = [...files, ...distinctNew];\n } else {\n // If single mode, just replace\n updatedFiles = validFiles.length ? [validFiles[0]] : files;\n }\n\n setFiles(updatedFiles);\n onFilesChange?.(updatedFiles);\n };\n\n const removeFile = (e, index) => {\n e.stopPropagation(); // prevent triggering parent click\n const newFiles = files.filter((_, i) => i !== index);\n setFiles(newFiles);\n onFilesChange?.(newFiles);\n };\n\n const handleBoxClick = () => {\n if (!disabled) inputRef.current?.click();\n };\n\n // Render Logic Based on Variant\n\n // --- COMPACT VARIANT ---\n if (variant === 'compact') {\n return (\n <div className={`${fullWidth ? 'w-full' : 'w-auto'} ${className}`}>\n <input\n ref={inputRef}\n type=\"file\"\n className=\"hidden\"\n multiple={multiple}\n accept={accept}\n onChange={handleInputChange}\n disabled={disabled}\n />\n <div className=\"flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={handleBoxClick}\n disabled={disabled}\n className={`\n inline-flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium transition-all duration-200 shadow-sm\n focus:outline-none focus:ring-2 focus:ring-offset-1 dark:focus:ring-offset-slate-950\n ${disabled ? 'bg-slate-100 text-slate-400 cursor-not-allowed dark:bg-slate-800' : colors[buttonStyle]}\n ${colors.ring}\n `}\n >\n <Icon icon=\"cloud-arrow-up\" size=\"sm\" />\n Choose File\n </button>\n <span className=\"text-sm text-slate-500 dark:text-slate-400\">\n {files.length > 0\n ? `${files.length} file${files.length !== 1 ? 's' : ''} selected`\n : 'No file chosen'}\n </span>\n </div>\n\n {/* Compact List */}\n {files.length > 0 && (\n <div className=\"mt-3 flex flex-col gap-2\">\n {files.map((file, idx) => (\n <div key={idx} className=\"flex items-center justify-between p-2 bg-slate-50 dark:bg-slate-800 rounded-md border border-slate-100 dark:border-slate-700\">\n <span className=\"text-xs text-slate-700 dark:text-slate-300 truncate max-w-[200px]\">{file.name}</span>\n <button onClick={(e) => removeFile(e, idx)} className=\"text-slate-400 hover:text-red-500\">\n <Icon icon=\"xmark\" size=\"sm\" />\n </button>\n </div>\n ))}\n </div>\n )}\n {error && (\n <p className=\"mt-2 text-xs text-red-500 font-medium\">{error}</p>\n )}\n </div>\n );\n }\n\n // --- DROPZONE VARIANT (Default) ---\n return (\n <div className={`${fullWidth ? 'w-full' : 'w-auto'} ${className}`}>\n <input\n ref={inputRef}\n type=\"file\"\n className=\"hidden\"\n multiple={multiple}\n accept={accept}\n onChange={handleInputChange}\n disabled={disabled}\n />\n\n {/* Drop Zone Area */}\n <div\n onDragEnter={handleDrag}\n onDragLeave={handleDrag}\n onDragOver={handleDrag}\n onDrop={handleDrop}\n onClick={handleBoxClick}\n className={`\n relative group cursor-pointer\n flex flex-col items-center justify-center\n w-full rounded-2xl border-2 border-dashed transition-all duration-200\n p-8 text-center\n ${disabled\n ? 'bg-slate-50 border-slate-200 dark:bg-slate-900/50 dark:border-slate-800 cursor-not-allowed'\n : isDragging\n ? `${colors.active} scale-[1.01]`\n : 'bg-white border-slate-200 dark:bg-slate-900 dark:border-slate-700 hover:border-slate-300 dark:hover:border-slate-600 hover:bg-slate-50 dark:hover:bg-slate-800/50'\n }\n ${error ? 'border-red-300 bg-red-50 dark:bg-red-900/10' : ''}\n `}\n >\n {/* Icon Circle */}\n <div className={`\n w-12 h-12 rounded-full mb-4 flex items-center justify-center transition-colors duration-200\n ${disabled\n ? 'bg-slate-100 text-slate-300 dark:bg-slate-800 dark:text-slate-600'\n : isDragging\n ? 'bg-white shadow-sm'\n : 'bg-slate-100 dark:bg-slate-800'\n }\n `}>\n <Icon\n icon=\"cloud-arrow-up\"\n \n className={`text-xl ${disabled ? '' : (isDragging ? colors.text : 'text-slate-400')}`}\n />\n </div>\n\n {/* Text */}\n <h4 className={`text-sm font-semibold mb-1 ${disabled ? 'text-slate-400' : 'text-slate-900 dark:text-white'}`}>\n {isDragging ? 'Drop files here' : label}\n </h4>\n <p className={`text-xs ${disabled ? 'text-slate-400' : 'text-slate-500 dark:text-slate-400'}`}>\n {description}\n </p>\n </div>\n\n {/* Error Message */}\n {error && (\n <div className=\"mt-2 text-xs text-red-500 flex items-center gap-1.5\">\n <Icon icon=\"circle-info\" />\n {error}\n </div>\n )}\n\n {/* File List */}\n {files.length > 0 && (\n <div className=\"mt-4 flex flex-col gap-2\">\n {files.map((file, idx) => (\n <div\n key={idx}\n className=\"\n group relative flex items-center p-3 rounded-xl border border-slate-200 dark:border-slate-700\n bg-white dark:bg-slate-900 transition-all hover:shadow-sm\n \"\n >\n {/* File Icon */}\n <div className={`\n w-8 h-8 rounded-lg flex items-center justify-center mr-3\n ${colors.active.replace('border-', '')} \n `}>\n <Icon\n icon={file.type.includes('image') ? 'image' : 'file-lines'}\n \n className={`${colors.text} text-sm`}\n />\n </div>\n\n {/* Info */}\n <div className=\"flex-1 min-w-0 text-left\">\n <p className=\"text-sm font-medium text-slate-700 dark:text-slate-200 truncate\">\n {file.name}\n </p>\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">\n {formatBytes(file.size)}\n </p>\n </div>\n\n {/* Success Icon */}\n <div className={`mr-2 ${colors.text}`}>\n <Icon icon=\"circle-check\" className=\"text-sm\" />\n </div>\n\n {/* Remove Button */}\n <button\n onClick={(e) => removeFile(e, idx)}\n className=\"\n p-1.5 rounded-md text-slate-400 hover:text-red-500 hover:bg-red-50 dark:hover:bg-red-900/20\n transition-colors\n \"\n >\n <Icon icon=\"trash\" className=\"text-xs\" />\n </button>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n};\n\nFileUpload.propTypes = {\n variant: PropTypes.oneOf(['dropzone', 'compact']),\n buttonStyle: PropTypes.oneOf(['primary', 'secondary', 'outline', 'ghost']),\n multiple: PropTypes.bool,\n accept: PropTypes.string,\n maxSize: PropTypes.number,\n maxFiles: PropTypes.number,\n label: PropTypes.string,\n description: PropTypes.string,\n color: PropTypes.oneOf(['violet', 'blue', 'emerald', 'rose', 'amber', 'black']),\n fullWidth: PropTypes.bool,\n className: PropTypes.string,\n onFilesChange: PropTypes.func,\n disabled: PropTypes.bool\n};\n\nexport default FileUpload;\n","import React, { useState, useRef, useEffect, forwardRef } from 'react';\nimport PropTypes from 'prop-types';\nimport Icon from '../Icon';\n\n/**\n * Input Component - A highly customizable input field with FontAwesome integration\n * \n * Features:\n * - Multiple themes (default, glass, minimal, outlined, filled, gradient)\n * - Multiple colors (violet, blue, emerald, rose, amber, black)\n * - Multiple sizes (xs, sm, md, lg, xl)\n * - Icon support (left, right, or both)\n * - Prefix/Suffix text support\n * - Floating labels\n * - Character counter\n * - Validation states\n * - Loading state\n * - Copy to clipboard\n * - Password visibility toggle\n * - Clearable input\n * - Animated focus effects\n */\n\nconst Input = forwardRef(({\n // Basic props\n type = 'text',\n value,\n defaultValue,\n placeholder = '',\n name,\n id,\n disabled = false,\n readOnly = false,\n required = false,\n autoFocus = false,\n autoComplete = 'off',\n\n // Appearance\n theme = 'default',\n color = 'violet', // violet, blue, emerald, rose, amber, black\n size = 'md',\n rounded = 'xl',\n fullWidth = false,\n\n // Label & Help\n label,\n floatingLabel = false,\n helperText,\n errorText,\n successText,\n\n // Icons\n leftIcon,\n leftIconVariant = 'outline',\n rightIcon,\n rightIconVariant = 'outline',\n iconColor,\n\n // Prefix/Suffix\n prefix,\n suffix,\n\n // Features\n clearable = false,\n showPasswordToggle = false,\n copyable = false,\n showCharCount = false,\n maxLength,\n\n // States\n isLoading = false,\n\n // Animation\n animate = true,\n focusEffect = 'glow',\n\n // Events\n onChange,\n onFocus,\n onBlur,\n onClear,\n onCopy,\n\n // Custom styling\n className = '',\n inputClassName = '',\n labelClassName = '',\n wrapperClassName = '',\n style,\n\n // Pass through props\n ...props\n}, ref) => {\n const [internalValue, setInternalValue] = useState(defaultValue || '');\n const [isFocused, setIsFocused] = useState(false);\n const [showPassword, setShowPassword] = useState(false);\n const [copied, setCopied] = useState(false);\n const inputRef = useRef(null);\n\n const actualValue = value !== undefined ? value : internalValue;\n const actualRef = ref || inputRef;\n\n // Determine input type based on password toggle\n const inputType = type === 'password' && showPassword ? 'text' : type;\n\n // Color Configuration\n const colorConfig = {\n violet: {\n focus: 'focus-within:border-violet-500 focus-within:ring-violet-500/20',\n label: 'text-violet-600 dark:text-violet-400',\n icon: 'text-violet-500',\n selection: 'bg-violet-500'\n },\n blue: {\n focus: 'focus-within:border-blue-500 focus-within:ring-blue-500/20',\n label: 'text-blue-600 dark:text-blue-400',\n icon: 'text-blue-500',\n selection: 'bg-blue-500'\n },\n emerald: {\n focus: 'focus-within:border-emerald-500 focus-within:ring-emerald-500/20',\n label: 'text-emerald-600 dark:text-emerald-400',\n icon: 'text-emerald-500',\n selection: 'bg-emerald-500'\n },\n rose: {\n focus: 'focus-within:border-rose-500 focus-within:ring-rose-500/20',\n label: 'text-rose-600 dark:text-rose-400',\n icon: 'text-rose-500',\n selection: 'bg-rose-500'\n },\n amber: {\n focus: 'focus-within:border-amber-500 focus-within:ring-amber-500/20',\n label: 'text-amber-600 dark:text-amber-400',\n icon: 'text-amber-500',\n selection: 'bg-amber-500'\n },\n black: {\n focus: 'focus-within:border-slate-800 dark:focus-within:border-slate-200 focus-within:ring-slate-500/20',\n label: 'text-slate-800 dark:text-slate-200',\n icon: 'text-slate-800 dark:text-slate-200',\n selection: 'bg-slate-800'\n }\n };\n\n const colors = colorConfig[color] || colorConfig.violet;\n\n // Size configurations\n const sizeConfig = {\n xs: {\n input: 'h-7 text-xs px-2',\n icon: 'text-xs',\n label: 'text-xs',\n iconPadding: { left: 'pl-7', right: 'pr-7' }\n },\n sm: {\n input: 'h-8 text-xs px-3',\n icon: 'text-xs',\n label: 'text-xs',\n iconPadding: { left: 'pl-8', right: 'pr-8' }\n },\n md: {\n input: 'h-11 text-sm px-4',\n icon: 'text-sm',\n label: 'text-sm',\n iconPadding: { left: 'pl-10', right: 'pr-10' }\n },\n lg: {\n input: 'h-12 text-base px-5',\n icon: 'text-base',\n label: 'text-base',\n iconPadding: { left: 'pl-12', right: 'pr-12' }\n },\n xl: {\n input: 'h-14 text-lg px-6',\n icon: 'text-lg',\n label: 'text-lg',\n iconPadding: { left: 'pl-14', right: 'pr-14' }\n }\n };\n\n // Rounded configurations\n const roundedConfig = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n '2xl': 'rounded-2xl',\n full: 'rounded-full'\n };\n\n // Theme configurations\n const themeConfig = {\n default: {\n wrapper: 'bg-slate-50/50 dark:bg-slate-900/50 border border-slate-200 dark:border-slate-700 shadow-sm',\n input: 'bg-transparent text-slate-900 dark:text-white placeholder:text-slate-400 dark:placeholder:text-slate-500 placeholder:text-sm',\n focus: 'focus-within:ring-1 focus-within:bg-white dark:focus-within:bg-slate-950',\n icon: 'text-slate-400 dark:text-slate-500',\n disabled: 'opacity-50 cursor-not-allowed bg-slate-100 dark:bg-slate-900'\n },\n glass: {\n wrapper: 'bg-white/60 dark:bg-slate-800/30 backdrop-blur-xl border border-slate-200/60 dark:border-slate-700/30 shadow-sm',\n input: 'bg-transparent text-slate-900 dark:text-white placeholder:text-slate-400 dark:placeholder:text-slate-400/50 placeholder:text-sm',\n focus: 'focus-within:ring-1 focus-within:bg-white/80 dark:focus-within:bg-slate-800/40',\n icon: 'text-slate-400 dark:text-slate-400/70',\n disabled: 'opacity-40 cursor-not-allowed'\n },\n minimal: {\n wrapper: 'bg-transparent border-b-2 border-slate-200 dark:border-slate-700 rounded-none',\n input: 'bg-transparent text-slate-900 dark:text-white placeholder:text-slate-400 dark:placeholder:text-slate-500 placeholder:text-sm',\n focus: '',\n icon: 'text-slate-400 dark:text-slate-500',\n disabled: 'opacity-50 cursor-not-allowed'\n },\n outlined: {\n wrapper: 'bg-transparent border-2 border-slate-300 dark:border-slate-600',\n input: 'bg-transparent text-slate-900 dark:text-white placeholder:text-slate-400 dark:placeholder:text-slate-500 placeholder:text-sm',\n focus: 'focus-within:ring-2',\n icon: 'text-slate-400 dark:text-slate-500',\n disabled: 'opacity-50 cursor-not-allowed'\n },\n filled: {\n wrapper: 'bg-slate-100 dark:bg-slate-800 border-2 border-transparent',\n input: 'bg-transparent text-slate-900 dark:text-white placeholder:text-slate-500 dark:placeholder:text-slate-400 placeholder:text-sm',\n focus: 'focus-within:bg-white dark:focus-within:bg-slate-700 focus-within:ring-1',\n icon: 'text-slate-500 dark:text-slate-400',\n disabled: 'opacity-50 cursor-not-allowed bg-slate-200 dark:bg-slate-900'\n },\n gradient: {\n wrapper: 'bg-gradient-to-r from-slate-100 via-slate-50 to-slate-100 dark:from-slate-800/50 dark:via-slate-700/50 dark:to-slate-800/50 border border-slate-200/50 dark:border-slate-600/30 backdrop-blur-sm',\n input: 'bg-transparent text-slate-900 dark:text-white placeholder:text-slate-400 dark:placeholder:text-slate-400 placeholder:text-sm',\n focus: 'focus-within:ring-1',\n icon: 'text-slate-500 dark:text-slate-400',\n disabled: 'opacity-50 cursor-not-allowed'\n }\n };\n\n // Focus effect configurations\n const focusEffectConfig = {\n none: '',\n glow: 'transition-shadow duration-300',\n scale: 'transition-transform duration-200 focus-within:scale-[1.02]',\n lift: 'transition-all duration-200 focus-within:-translate-y-0.5 focus-within:shadow-lg'\n };\n\n // Handle change\n const handleChange = (e) => {\n const newValue = e.target.value;\n if (value === undefined) {\n setInternalValue(newValue);\n }\n onChange?.(e);\n };\n\n // Handle focus\n const handleFocus = (e) => {\n setIsFocused(true);\n onFocus?.(e);\n };\n\n // Handle blur\n const handleBlur = (e) => {\n setIsFocused(false);\n onBlur?.(e);\n };\n\n // Handle clear\n const handleClear = () => {\n if (value === undefined) {\n setInternalValue('');\n }\n onClear?.();\n actualRef.current?.focus();\n };\n\n // Handle copy\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(actualValue);\n setCopied(true);\n onCopy?.(actualValue);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n console.error('Failed to copy:', err);\n }\n };\n\n // Determine if we need extra padding for icons/buttons\n const hasLeftContent = leftIcon || prefix || isLoading;\n const hasRightContent = rightIcon || suffix || clearable || showPasswordToggle || copyable;\n\n const currentSize = sizeConfig[size] || sizeConfig.md;\n const currentTheme = themeConfig[theme] || themeConfig.default;\n const currentRounded = roundedConfig[rounded] || roundedConfig.lg;\n const currentFocusEffect = focusEffectConfig[focusEffect] || '';\n\n // Calculate right padding based on number of right elements\n const rightButtonCount = [clearable && actualValue, showPasswordToggle && type === 'password', copyable].filter(Boolean).length;\n const rightPadding = rightButtonCount > 0 ? `pr-${8 + (rightButtonCount * 8)}` : rightIcon ? currentSize.iconPadding.right : '';\n\n return (\n <div className={`${fullWidth ? 'w-full' : 'inline-flex flex-col'} ${wrapperClassName}`}>\n {/* Label */}\n {label && !floatingLabel && (\n <label\n htmlFor={id || name}\n className={`block mb-1.5 font-medium text-slate-700 dark:text-slate-300 ${currentSize.label} ${labelClassName}`}\n >\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n\n {/* Input wrapper */}\n <div\n className={`\n relative flex items-center\n ${currentTheme.wrapper}\n ${theme === 'minimal' ? '' : currentRounded}\n ${currentTheme.focus}\n ${colors.focus}\n ${disabled ? currentTheme.disabled : ''}\n ${animate ? currentFocusEffect : ''}\n ${className}\n `}\n style={style}\n >\n {/* Floating label */}\n {label && floatingLabel && (\n <label\n htmlFor={id || name}\n className={`\n absolute left-4 transition-all duration-200 pointer-events-none\n ${isFocused || actualValue\n ? `-top-2.5 text-xs px-1 bg-white dark:bg-slate-800 ${colors.label}`\n : `top-1/2 -translate-y-1/2 text-slate-400 dark:text-slate-500 ${currentSize.label}`\n }\n ${labelClassName}\n `}\n >\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n\n {/* Prefix */}\n {prefix && (\n <span className={`flex-shrink-0 pl-3 text-slate-500 dark:text-slate-400 ${currentSize.icon}`}>\n {prefix}\n </span>\n )}\n\n {/* Left icon */}\n {leftIcon && (\n <span className={`absolute left-3 flex items-center justify-center ${iconColor || currentTheme.icon} ${currentSize.icon}`}>\n {typeof leftIcon === 'string' ? (\n <Icon icon={leftIcon} variant={leftIconVariant} />\n ) : (\n leftIcon\n )}\n </span>\n )}\n\n {/* Loading spinner */}\n {isLoading && !leftIcon && (\n <span className={`absolute left-3 flex items-center justify-center ${currentTheme.icon} ${currentSize.icon}`}>\n <Icon icon=\"spinner-third\" variant=\"fad\" className=\"animate-spin\" />\n </span>\n )}\n\n {/* Input field */}\n <input\n ref={actualRef}\n type={inputType}\n id={id || name}\n name={name}\n value={actualValue}\n placeholder={floatingLabel && !isFocused ? '' : placeholder}\n disabled={disabled || isLoading}\n readOnly={readOnly}\n required={required}\n autoFocus={autoFocus}\n autoComplete={autoComplete}\n maxLength={maxLength}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n className={`\n w-full outline-none\n ${currentTheme.input}\n ${currentSize.input}\n ${hasLeftContent ? currentSize.iconPadding.left : ''}\n ${hasRightContent ? rightPadding : ''}\n ${prefix ? 'pl-1' : ''}\n ${suffix ? 'pr-1' : ''}\n ${inputClassName}\n `}\n {...props}\n />\n\n {/* Right side buttons container */}\n <div className=\"absolute right-2 flex items-center gap-1\">\n {/* Clear button */}\n {clearable && actualValue && !disabled && !readOnly && (\n <button\n type=\"button\"\n onClick={handleClear}\n className={`p-1 rounded-full hover:bg-slate-100 dark:hover:bg-slate-700 transition-colors ${currentTheme.icon} ${currentSize.icon}`}\n tabIndex={-1}\n >\n <Icon icon=\"xmark\" />\n </button>\n )}\n\n {/* Password toggle */}\n {showPasswordToggle && type === 'password' && (\n <button\n type=\"button\"\n onClick={() => setShowPassword(!showPassword)}\n className={`p-1 rounded-full hover:bg-slate-100 dark:hover:bg-slate-700 transition-colors ${currentTheme.icon} ${currentSize.icon}`}\n tabIndex={-1}\n >\n <Icon icon={showPassword ? 'eye-slash' : 'eye'} />\n </button>\n )}\n\n {/* Copy button */}\n {copyable && (\n <button\n type=\"button\"\n onClick={handleCopy}\n className={`p-1 rounded-full hover:bg-slate-100 dark:hover:bg-slate-700 transition-colors ${copied ? 'text-emerald-500' : currentTheme.icon} ${currentSize.icon}`}\n tabIndex={-1}\n >\n <Icon icon={copied ? 'check' : 'copy'} />\n </button>\n )}\n </div>\n\n {/* Right icon */}\n {rightIcon && !clearable && !showPasswordToggle && !copyable && (\n <span className={`absolute right-3 flex items-center justify-center ${iconColor || currentTheme.icon} ${currentSize.icon}`}>\n {typeof rightIcon === 'string' ? (\n <Icon icon={rightIcon} variant={rightIconVariant} />\n ) : (\n rightIcon\n )}\n </span>\n )}\n\n {/* Suffix */}\n {suffix && (\n <span className={`flex-shrink-0 pr-3 text-slate-500 dark:text-slate-400 ${currentSize.icon}`}>\n {suffix}\n </span>\n )}\n </div>\n\n {/* Bottom section: helper text and character count */}\n <div className=\"flex justify-between items-start mt-1.5\">\n <div className=\"flex-1\">\n {/* Helper text */}\n {helperText && (\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">\n {helperText}\n </p>\n )}\n </div>\n\n {/* Character count */}\n {showCharCount && maxLength && (\n <span className={`text-xs ${actualValue.length >= maxLength ? 'text-red-500' : 'text-slate-400 dark:text-slate-500'}`}>\n {actualValue.length}/{maxLength}\n </span>\n )}\n </div>\n </div>\n );\n});\n\nInput.displayName = 'Input';\n\nInput.propTypes = {\n // Basic\n type: PropTypes.oneOf(['text', 'password', 'email', 'number', 'tel', 'url', 'search', 'date', 'time', 'datetime-local']),\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n defaultValue: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n placeholder: PropTypes.string,\n name: PropTypes.string,\n id: PropTypes.string,\n disabled: PropTypes.bool,\n readOnly: PropTypes.bool,\n required: PropTypes.bool,\n autoFocus: PropTypes.bool,\n autoComplete: PropTypes.string,\n\n // Appearance\n theme: PropTypes.oneOf(['default', 'glass', 'minimal', 'outlined', 'filled', 'gradient']),\n color: PropTypes.oneOf(['violet', 'blue', 'emerald', 'rose', 'amber', 'black']),\n size: PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl']),\n rounded: PropTypes.oneOf(['none', 'sm', 'md', 'lg', 'xl', '2xl', 'full']),\n fullWidth: PropTypes.bool,\n\n // Label & Help\n label: PropTypes.string,\n floatingLabel: PropTypes.bool,\n helperText: PropTypes.string,\n\n // Icons\n leftIcon: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n leftIconVariant: PropTypes.oneOf(['outline', 'solid']),\n rightIcon: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n rightIconVariant: PropTypes.oneOf(['outline', 'solid']),\n iconColor: PropTypes.string,\n\n // Prefix/Suffix\n prefix: PropTypes.node,\n suffix: PropTypes.node,\n\n // Features\n clearable: PropTypes.bool,\n showPasswordToggle: PropTypes.bool,\n copyable: PropTypes.bool,\n showCharCount: PropTypes.bool,\n maxLength: PropTypes.number,\n\n // States\n isLoading: PropTypes.bool,\n\n // Animation\n animate: PropTypes.bool,\n focusEffect: PropTypes.oneOf(['none', 'glow', 'scale', 'lift']),\n\n // Events\n onChange: PropTypes.func,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n onClear: PropTypes.func,\n onCopy: PropTypes.func,\n\n // Styling\n className: PropTypes.string,\n inputClassName: PropTypes.string,\n labelClassName: PropTypes.string,\n wrapperClassName: PropTypes.string,\n style: PropTypes.object,\n};\n\nexport default Input;\n","import React, { useState, useRef, forwardRef } from 'react';\nimport PropTypes from 'prop-types';\nimport Icon from '../Icon';\n\n/**\n * Textarea Component - A highly customizable textarea field matching Input styling\n * \n * Features:\n * - Multiple themes (default, glass, minimal, outlined, filled, gradient)\n * - Multiple colors (violet, blue, emerald, rose, amber, black)\n * - Multiple sizes (xs, sm, md, lg, xl)\n * - Floating labels\n * - Character counter\n * - Validation states\n * - Animated focus effects\n */\n\nconst Textarea = forwardRef(({\n // Basic props\n value,\n defaultValue,\n placeholder = '',\n name,\n id,\n disabled = false,\n readOnly = false,\n required = false,\n autoFocus = false,\n rows = 4,\n maxLength,\n\n // Appearance\n theme = 'default',\n color = 'violet', // violet, blue, emerald, rose, amber, black\n size = 'md',\n rounded = 'xl',\n fullWidth = true,\n\n // Label & Help\n label,\n floatingLabel = false,\n helperText,\n\n // Animation\n animate = true,\n focusEffect = 'glow',\n\n // Events\n onChange,\n onFocus,\n onBlur,\n\n // Custom styling\n className = '',\n textareaClassName = '',\n labelClassName = '',\n wrapperClassName = '',\n style,\n\n // Pass through props\n ...props\n}, ref) => {\n const [internalValue, setInternalValue] = useState(defaultValue || '');\n const [isFocused, setIsFocused] = useState(false);\n const textareaRef = useRef(null);\n\n const actualValue = value !== undefined ? value : internalValue;\n const actualRef = ref || textareaRef;\n\n // Color Configuration (matching Input)\n const colorConfig = {\n violet: {\n focus: 'focus-within:border-violet-500 focus-within:ring-violet-500/20',\n label: 'text-violet-600 dark:text-violet-400',\n },\n blue: {\n focus: 'focus-within:border-blue-500 focus-within:ring-blue-500/20',\n label: 'text-blue-600 dark:text-blue-400',\n },\n emerald: {\n focus: 'focus-within:border-emerald-500 focus-within:ring-emerald-500/20',\n label: 'text-emerald-600 dark:text-emerald-400',\n },\n rose: {\n focus: 'focus-within:border-rose-500 focus-within:ring-rose-500/20',\n label: 'text-rose-600 dark:text-rose-400',\n },\n amber: {\n focus: 'focus-within:border-amber-500 focus-within:ring-amber-500/20',\n label: 'text-amber-600 dark:text-amber-400',\n },\n black: {\n focus: 'focus-within:border-slate-800 dark:focus-within:border-slate-200 focus-within:ring-slate-500/20',\n label: 'text-slate-800 dark:text-slate-200',\n }\n };\n\n const colors = colorConfig[color] || colorConfig.violet;\n\n // Size configurations (matching Input)\n const sizeConfig = {\n xs: {\n textarea: 'text-xs px-2 py-1.5',\n label: 'text-xs',\n },\n sm: {\n textarea: 'text-xs px-3 py-2',\n label: 'text-xs',\n },\n md: {\n textarea: 'text-sm px-4 py-3',\n label: 'text-sm',\n },\n lg: {\n textarea: 'text-base px-5 py-4',\n label: 'text-base',\n },\n xl: {\n textarea: 'text-lg px-6 py-5',\n label: 'text-lg',\n }\n };\n\n // Rounded configurations (matching Input)\n const roundedConfig = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n '2xl': 'rounded-2xl',\n full: 'rounded-3xl' // Using 3xl for textarea as full would look odd\n };\n\n // Theme configurations (matching Input)\n const themeConfig = {\n default: {\n wrapper: 'bg-slate-50/50 dark:bg-slate-900/50 border border-slate-200 dark:border-slate-700 shadow-sm',\n textarea: 'bg-transparent text-slate-900 dark:text-white placeholder:text-slate-400 dark:placeholder:text-slate-500',\n focus: 'focus-within:ring-1 focus-within:bg-white dark:focus-within:bg-slate-950',\n disabled: 'opacity-50 cursor-not-allowed bg-slate-100 dark:bg-slate-900'\n },\n glass: {\n wrapper: 'bg-white/60 dark:bg-slate-800/30 backdrop-blur-xl border border-slate-200/60 dark:border-slate-700/30 shadow-sm',\n textarea: 'bg-transparent text-slate-900 dark:text-white placeholder:text-slate-400 dark:placeholder:text-slate-400/50',\n focus: 'focus-within:ring-1 focus-within:bg-white/80 dark:focus-within:bg-slate-800/40',\n disabled: 'opacity-40 cursor-not-allowed'\n },\n minimal: {\n wrapper: 'bg-transparent border-b-2 border-slate-200 dark:border-slate-700 rounded-none',\n textarea: 'bg-transparent text-slate-900 dark:text-white placeholder:text-slate-400 dark:placeholder:text-slate-500',\n focus: '',\n disabled: 'opacity-50 cursor-not-allowed'\n },\n outlined: {\n wrapper: 'bg-transparent border-2 border-slate-300 dark:border-slate-600',\n textarea: 'bg-transparent text-slate-900 dark:text-white placeholder:text-slate-400 dark:placeholder:text-slate-500',\n focus: 'focus-within:ring-2',\n disabled: 'opacity-50 cursor-not-allowed'\n },\n filled: {\n wrapper: 'bg-slate-100 dark:bg-slate-800 border-2 border-transparent',\n textarea: 'bg-transparent text-slate-900 dark:text-white placeholder:text-slate-500 dark:placeholder:text-slate-400',\n focus: 'focus-within:bg-white dark:focus-within:bg-slate-700 focus-within:ring-1',\n disabled: 'opacity-50 cursor-not-allowed bg-slate-200 dark:bg-slate-900'\n },\n gradient: {\n wrapper: 'bg-gradient-to-r from-slate-100 via-slate-50 to-slate-100 dark:from-slate-800/50 dark:via-slate-700/50 dark:to-slate-800/50 border border-slate-200/50 dark:border-slate-600/30 backdrop-blur-sm',\n textarea: 'bg-transparent text-slate-900 dark:text-white placeholder:text-slate-400 dark:placeholder:text-slate-400',\n focus: 'focus-within:ring-1',\n disabled: 'opacity-50 cursor-not-allowed'\n }\n };\n\n // Focus effect configurations (matching Input)\n const focusEffectConfig = {\n none: '',\n glow: 'transition-shadow duration-300',\n scale: 'transition-transform duration-200 focus-within:scale-[1.01]',\n lift: 'transition-all duration-200 focus-within:-translate-y-0.5 focus-within:shadow-lg'\n };\n\n // Handle change\n const handleChange = (e) => {\n const newValue = e.target.value;\n if (value === undefined) {\n setInternalValue(newValue);\n }\n onChange?.(e);\n };\n\n // Handle focus\n const handleFocus = (e) => {\n setIsFocused(true);\n onFocus?.(e);\n };\n\n // Handle blur\n const handleBlur = (e) => {\n setIsFocused(false);\n onBlur?.(e);\n };\n\n const currentSize = sizeConfig[size] || sizeConfig.md;\n const currentTheme = themeConfig[theme] || themeConfig.default;\n const currentRounded = roundedConfig[rounded] || roundedConfig.xl;\n const currentFocusEffect = focusEffectConfig[focusEffect] || '';\n\n return (\n <div className={`${fullWidth ? 'w-full' : 'inline-flex flex-col'} ${wrapperClassName}`}>\n {/* Label */}\n {label && !floatingLabel && (\n <label\n htmlFor={id || name}\n className={`block mb-1.5 font-medium text-slate-700 dark:text-slate-300 ${currentSize.label} ${labelClassName}`}\n >\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n\n {/* Textarea wrapper */}\n <div\n className={`\n relative\n ${theme === 'minimal' ? '' : currentRounded}\n ${currentTheme.wrapper}\n ${currentTheme.focus}\n ${colors.focus}\n ${disabled ? currentTheme.disabled : ''}\n ${animate ? currentFocusEffect : ''}\n ${className}\n `}\n style={style}\n >\n {/* Floating label */}\n {label && floatingLabel && (\n <label\n htmlFor={id || name}\n className={`\n absolute left-4 transition-all duration-200 pointer-events-none z-10\n ${isFocused || actualValue\n ? `-top-2.5 text-xs px-1 bg-white dark:bg-slate-800 ${colors.label}`\n : `top-3 text-slate-400 dark:text-slate-500 ${currentSize.label}`\n }\n ${labelClassName}\n `}\n >\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n\n {/* Textarea field */}\n <textarea\n ref={actualRef}\n id={id || name}\n name={name}\n value={actualValue}\n placeholder={floatingLabel && !isFocused ? '' : placeholder}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n autoFocus={autoFocus}\n maxLength={maxLength}\n rows={rows}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n className={`\n w-full outline-none resize-y min-h-[80px]\n ${currentTheme.textarea}\n ${currentSize.textarea}\n ${theme === 'minimal' ? '' : currentRounded}\n ${textareaClassName}\n `}\n {...props}\n />\n\n {/* Character count */}\n {maxLength && !disabled && (\n <div className=\"absolute bottom-2 right-2\">\n <span className={`text-xs px-1.5 py-0.5 rounded bg-white/80 dark:bg-slate-900/80 ${actualValue.length >= maxLength ? 'text-red-500' : 'text-slate-400 dark:text-slate-500'\n }`}>\n {actualValue.length}/{maxLength}\n </span>\n </div>\n )}\n </div>\n\n {/* Bottom section: helper text */}\n {helperText && (\n <div className=\"flex items-start gap-1.5 mt-1.5 px-1\">\n <span className=\"text-xs text-slate-500 dark:text-slate-400\">\n {helperText}\n </span>\n </div>\n )}\n </div>\n );\n});\n\nTextarea.displayName = 'Textarea';\n\nTextarea.propTypes = {\n // Basic\n value: PropTypes.string,\n defaultValue: PropTypes.string,\n placeholder: PropTypes.string,\n name: PropTypes.string,\n id: PropTypes.string,\n disabled: PropTypes.bool,\n readOnly: PropTypes.bool,\n required: PropTypes.bool,\n autoFocus: PropTypes.bool,\n rows: PropTypes.number,\n maxLength: PropTypes.number,\n\n // Appearance\n theme: PropTypes.oneOf(['default', 'glass', 'minimal', 'outlined', 'filled', 'gradient']),\n color: PropTypes.oneOf(['violet', 'blue', 'emerald', 'rose', 'amber', 'black']),\n size: PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl']),\n rounded: PropTypes.oneOf(['none', 'sm', 'md', 'lg', 'xl', '2xl', 'full']),\n fullWidth: PropTypes.bool,\n\n // Label & Help\n label: PropTypes.string,\n floatingLabel: PropTypes.bool,\n helperText: PropTypes.string,\n\n // Animation\n animate: PropTypes.bool,\n focusEffect: PropTypes.oneOf(['none', 'glow', 'scale', 'lift']),\n\n // Events\n onChange: PropTypes.func,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n\n // Styling\n className: PropTypes.string,\n textareaClassName: PropTypes.string,\n labelClassName: PropTypes.string,\n wrapperClassName: PropTypes.string,\n style: PropTypes.object,\n};\n\nexport default Textarea;\n","import React, { createContext, useContext, useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport Icon from '../Icon';\n\nconst RadioContext = createContext(null);\n\n/**\n * RadioGroup Component - Manages state for a group of Radio buttons\n */\nexport const RadioGroup = ({\n children,\n value,\n defaultValue,\n onChange,\n name,\n orientation = 'vertical',\n label,\n description,\n error,\n className = '',\n // Shared props for children\n size = 'md',\n color = 'violet',\n variant = 'simple', // simple, card\n disabled = false\n}) => {\n const [internalValue, setInternalValue] = useState(defaultValue);\n const isControlled = value !== undefined;\n const actualValue = isControlled ? value : internalValue;\n\n const handleChange = (newValue) => {\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onChange?.(newValue);\n };\n\n return (\n <RadioContext.Provider value={{\n name,\n value: actualValue,\n onChange: handleChange,\n size,\n color,\n variant,\n disabledGrp: disabled\n }}>\n <div className={`flex flex-col gap-2 ${className}`}>\n {/* Group Label */}\n {label && (\n <label className=\"text-sm font-medium text-slate-700 dark:text-slate-300\">\n {label}\n </label>\n )}\n\n {/* Description */}\n {description && (\n <p className=\"text-xs text-slate-500 dark:text-slate-400 -mt-1 mb-1\">\n {description}\n </p>\n )}\n\n {/* Options Container */}\n <div className={`\n flex gap-3\n ${orientation === 'vertical' ? 'flex-col' : 'flex-row flex-wrap'}\n `}>\n {children}\n </div>\n\n {/* Error Message */}\n {error && (\n <p className=\"text-xs text-red-500 mt-1 flex items-center gap-1\">\n <Icon icon=\"circle-exclamation\" />\n {error}\n </p>\n )}\n </div>\n </RadioContext.Provider>\n );\n};\n\n// Colors for the radio circle/border\nconst colorConfig = {\n violet: {\n checked: 'border-violet-500',\n dot: 'bg-violet-500',\n ring: 'focus:ring-violet-500',\n text: 'text-violet-700 dark:text-violet-300',\n bg: 'bg-violet-50 dark:bg-violet-900/20',\n border: 'border-violet-500/50'\n },\n blue: {\n checked: 'border-blue-500',\n dot: 'bg-blue-500',\n ring: 'focus:ring-blue-500',\n text: 'text-blue-700 dark:text-blue-300',\n bg: 'bg-blue-50 dark:bg-blue-900/20',\n border: 'border-blue-500/50'\n },\n emerald: {\n checked: 'border-emerald-500',\n dot: 'bg-emerald-500',\n ring: 'focus:ring-emerald-500',\n text: 'text-emerald-700 dark:text-emerald-300',\n bg: 'bg-emerald-50 dark:bg-emerald-900/20',\n border: 'border-emerald-500/50'\n },\n rose: {\n checked: 'border-rose-500',\n dot: 'bg-rose-500',\n ring: 'focus:ring-rose-500',\n text: 'text-rose-700 dark:text-rose-300',\n bg: 'bg-rose-50 dark:bg-rose-900/20',\n border: 'border-rose-500/50'\n },\n amber: {\n checked: 'border-amber-500',\n dot: 'bg-amber-500',\n ring: 'focus:ring-amber-500',\n text: 'text-amber-700 dark:text-amber-300',\n bg: 'bg-amber-50 dark:bg-amber-900/20',\n border: 'border-amber-500/50'\n },\n black: {\n checked: 'border-slate-900 dark:border-white',\n dot: 'bg-slate-900 dark:bg-white',\n ring: 'focus:ring-slate-500',\n text: 'text-slate-900 dark:text-white',\n bg: 'bg-slate-100 dark:bg-slate-800',\n border: 'border-slate-900/50 dark:border-white/50'\n }\n};\n\n/**\n * Radio Component - Individual radio button\n */\nconst Radio = ({\n value,\n label,\n description,\n icon,\n disabled = false,\n className = '',\n style,\n // Direct props (override context)\n checked,\n onChange, // only for standalone\n size,\n color,\n variant\n}) => {\n const context = useContext(RadioContext);\n\n // Resolve props (context vs direct)\n const isGrouped = context !== null;\n const finalName = isGrouped ? context.name : undefined;\n const finalSize = size || (context?.size || 'md');\n const finalColor = color || (context?.color || 'violet');\n const finalVariant = variant || (context?.variant || 'simple');\n const finalDisabled = disabled || (context?.disabledGrp || false);\n\n // Checked state calculation\n const isChecked = isGrouped\n ? context.value === value\n : checked;\n\n const handleChange = (e) => {\n if (finalDisabled) return;\n if (isGrouped) {\n context.onChange(value);\n } else {\n onChange?.(e);\n }\n };\n\n const colors = colorConfig[finalColor] || colorConfig.violet;\n\n // Size logic\n const sizeClasses = {\n sm: { circle: 'w-4 h-4', dot: 'w-2 h-2', text: 'text-xs', p: 'p-3' },\n md: { circle: 'w-5 h-5', dot: 'w-2.5 h-2.5', text: 'text-sm', p: 'p-4' },\n lg: { circle: 'w-6 h-6', dot: 'w-3 h-3', text: 'text-base', p: 'p-5' }\n }[finalSize];\n\n // Card Variant Logic\n if (finalVariant === 'card') {\n return (\n <label\n className={`\n relative flex items-start gap-4 cursor-pointer rounded-xl border-2 transition-all duration-200\n ${sizeClasses.p}\n ${isChecked\n ? `${colors.border} ${colors.bg} shadow-sm ring-1 ${colors.ring.replace('focus:', '')}`\n : 'border-slate-200 dark:border-slate-700 hover:border-slate-300 dark:hover:border-slate-600 hover:bg-slate-50 dark:hover:bg-slate-800'\n }\n ${finalDisabled ? 'opacity-50 cursor-not-allowed grayscale' : ''}\n ${className}\n `}\n style={style}\n >\n <input\n type=\"radio\"\n name={finalName}\n value={value}\n checked={isChecked}\n onChange={handleChange}\n disabled={finalDisabled}\n className=\"sr-only\"\n />\n\n {/* Custom Radio Circle */}\n <div className={`\n flex-shrink-0 rounded-full border-2 flex items-center justify-center transition-colors\n ${sizeClasses.circle}\n ${isChecked ? colors.checked : 'border-slate-300 dark:border-slate-600'}\n `}>\n <div className={`\n rounded-full transition-transform duration-200\n ${sizeClasses.dot}\n ${colors.dot}\n ${isChecked ? 'scale-100' : 'scale-0'}\n `} />\n </div>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2 mb-1\">\n {icon && (\n <Icon\n icon={icon}\n \n className={isChecked ? colors.text : 'text-slate-400'}\n />\n )}\n <span className={`font-semibold ${sizeClasses.text} ${isChecked ? 'text-slate-900 dark:text-white' : 'text-slate-700 dark:text-slate-300'}`}>\n {label}\n </span>\n </div>\n {description && (\n <p className=\"text-xs text-slate-500 dark:text-slate-400 leading-relaxed\">\n {description}\n </p>\n )}\n </div>\n </label>\n );\n }\n\n // Simple Variant (Default)\n return (\n <label\n className={`\n inline-flex items-start gap-3 cursor-pointer group\n ${finalDisabled ? 'opacity-50 cursor-not-allowed' : ''}\n ${className}\n `}\n style={style}\n >\n <div className=\"relative flex items-center mt-0.5\">\n <input\n type=\"radio\"\n name={finalName}\n value={value}\n checked={isChecked}\n onChange={handleChange}\n disabled={finalDisabled}\n className=\"peer sr-only\"\n />\n <div className={`\n ${sizeClasses.circle}\n rounded-full border-2 bg-white dark:bg-slate-900 transition-all duration-200\n peer-focus:ring-2 peer-focus:ring-offset-1 peer-focus:ring-offset-white dark:peer-focus:ring-offset-slate-950 ${colors.ring}\n ${isChecked ? colors.checked : 'border-slate-300 dark:border-slate-600 group-hover:border-slate-400 dark:group-hover:border-slate-500'}\n flex items-center justify-center\n `}>\n <div className={`\n ${sizeClasses.dot}\n rounded-full transform transition-transform duration-200\n ${colors.dot}\n ${isChecked ? 'scale-100' : 'scale-0'}\n `} />\n </div>\n </div>\n\n {(label || description) && (\n <div className=\"flex flex-col\">\n {label && (\n <span className={`${sizeClasses.text} font-medium text-slate-700 dark:text-slate-200 group-hover:text-slate-900 dark:group-hover:text-white transition-colors`}>\n {label}\n </span>\n )}\n {description && (\n <span className=\"text-xs text-slate-500 dark:text-slate-400\">\n {description}\n </span>\n )}\n </div>\n )}\n </label>\n );\n};\n\nRadioGroup.propTypes = {\n children: PropTypes.node,\n value: PropTypes.any,\n defaultValue: PropTypes.any,\n onChange: PropTypes.func,\n name: PropTypes.string,\n orientation: PropTypes.oneOf(['horizontal', 'vertical']),\n label: PropTypes.string,\n description: PropTypes.string,\n error: PropTypes.string,\n className: PropTypes.string,\n size: PropTypes.oneOf(['sm', 'md', 'lg']),\n color: PropTypes.oneOf(['violet', 'blue', 'emerald', 'rose', 'amber', 'black']),\n variant: PropTypes.oneOf(['simple', 'card']),\n disabled: PropTypes.bool\n};\n\nRadio.propTypes = {\n value: PropTypes.any,\n label: PropTypes.string,\n description: PropTypes.string,\n icon: PropTypes.string,\n disabled: PropTypes.bool,\n className: PropTypes.string,\n style: PropTypes.object,\n checked: PropTypes.bool,\n onChange: PropTypes.func,\n size: PropTypes.oneOf(['sm', 'md', 'lg']),\n color: PropTypes.oneOf(['violet', 'blue', 'emerald', 'rose', 'amber', 'black']),\n variant: PropTypes.oneOf(['simple', 'card'])\n};\n\nRadio.Group = RadioGroup;\nexport default Radio;\n","import React, { useState, useRef, useEffect, useMemo, forwardRef } from 'react';\nimport PropTypes from 'prop-types';\nimport Icon from '../Icon';\n\n/**\n * Select Component - A highly customizable select/dropdown with search support\n * \n * Features:\n * - Multiple themes (default, glass, minimal, outlined, filled)\n * - Multiple colors (violet, blue, emerald, rose, amber, black)\n * - Search/filter functionality\n * - Custom option rendering (text, icons, descriptions)\n * - \"Select...\" placeholder option\n * - Clear selection button\n * - Form compatible (name, required, value)\n * - Matches Input component styling\n */\nconst Select = forwardRef(({\n // Data\n options = [],\n value,\n defaultValue = '',\n onChange,\n onSearch,\n\n // API\n api,\n apiMethod = 'GET',\n apiHeaders = {},\n apiDataPath = '',\n\n // Field mapping for object arrays\n valueKey = 'value',\n labelKey = 'label',\n\n // Configuration\n searchable = false,\n clearable = true,\n disabled = false,\n required = false,\n loading = false,\n name,\n id,\n\n // Placeholder/Default Option\n placeholder = 'Select...',\n showSelectOption = true,\n selectOptionText = 'Select an option',\n selectOptionValue = '',\n\n // Appearance\n theme = 'default',\n color = 'violet', // violet, blue, emerald, rose, amber, black\n size = 'md',\n rounded = 'xl',\n fullWidth = false,\n\n // Label & Help\n label,\n helperText,\n\n // Icons\n leftIcon,\n leftIconVariant = 'fas',\n dropdownIcon = 'chevron-down',\n clearIcon = 'xmark',\n\n // Animation\n animate = true,\n focusEffect = 'glow',\n\n // Customization\n className = '',\n labelClassName = '',\n optionsClassName = '',\n renderOption,\n renderSelectedValue,\n noOptionsText = 'No options found',\n optionHeight = 'auto',\n maxDropdownHeight = '240px',\n\n // Style\n style,\n\n ...props\n}, ref) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n const [internalValue, setInternalValue] = useState(defaultValue);\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n const [apiOptions, setApiOptions] = useState([]);\n const [apiLoading, setApiLoading] = useState(false);\n const [apiError, setApiError] = useState(null);\n const containerRef = useRef(null);\n const searchInputRef = useRef(null);\n const triggerRef = useRef(null);\n\n // Use forwarded ref or internal ref\n const selectRef = ref || triggerRef;\n\n // Derived state\n const actualValue = value !== undefined ? value : internalValue;\n\n // Determine if loading (prop or API)\n const isLoading = loading || apiLoading;\n\n // Determine options source (prop or API)\n const optionsSource = api ? apiOptions : options;\n\n // Normalize options to ensure they fit { label, value } format\n const normalizedOptions = useMemo(() => {\n return optionsSource.map(opt => {\n if (typeof opt === 'string' || typeof opt === 'number') {\n return { label: String(opt), value: opt, _original: opt };\n }\n // Map using valueKey and labelKey\n return {\n label: opt[labelKey] !== undefined ? String(opt[labelKey]) : String(opt.label || ''),\n value: opt[valueKey] !== undefined ? opt[valueKey] : opt.value,\n icon: opt.icon,\n iconVariant: opt.iconVariant,\n description: opt.description,\n _original: opt\n };\n });\n }, [optionsSource, valueKey, labelKey]);\n\n // Filter options based on search\n const filteredOptions = useMemo(() => {\n if (!searchable || !searchQuery) return normalizedOptions;\n return normalizedOptions.filter(opt =>\n String(opt.label).toLowerCase().includes(searchQuery.toLowerCase()) ||\n (opt.description && String(opt.description).toLowerCase().includes(searchQuery.toLowerCase()))\n );\n }, [normalizedOptions, searchQuery, searchable]);\n\n // Get selected option object\n const selectedOption = useMemo(() => {\n return normalizedOptions.find(opt => opt.value === actualValue) || null;\n }, [normalizedOptions, actualValue]);\n\n // Handle outside click to close\n useEffect(() => {\n const handleClickOutside = (event) => {\n if (containerRef.current && !containerRef.current.contains(event.target)) {\n setIsOpen(false);\n setSearchQuery('');\n setHighlightedIndex(-1);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n // Fetch data from API\n useEffect(() => {\n if (!api) return;\n\n const fetchData = async () => {\n setApiLoading(true);\n setApiError(null);\n try {\n const response = await fetch(api, {\n method: apiMethod,\n headers: {\n 'Content-Type': 'application/json',\n ...apiHeaders\n }\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n let data = await response.json();\n\n // Navigate to nested data path if specified (e.g., 'data.items')\n if (apiDataPath) {\n const paths = apiDataPath.split('.');\n for (const path of paths) {\n data = data?.[path];\n }\n }\n\n if (Array.isArray(data)) {\n setApiOptions(data);\n } else {\n console.warn('Select API response is not an array:', data);\n setApiOptions([]);\n }\n } catch (error) {\n console.error('Select API fetch error:', error);\n setApiError(error.message);\n setApiOptions([]);\n } finally {\n setApiLoading(false);\n }\n };\n\n fetchData();\n }, [api, apiMethod, apiDataPath]);\n\n // Focus search input when opening\n useEffect(() => {\n if (isOpen && searchable && searchInputRef.current) {\n setTimeout(() => searchInputRef.current?.focus(), 50);\n }\n }, [isOpen, searchable]);\n\n // Reset highlighted index when options change\n useEffect(() => {\n setHighlightedIndex(-1);\n }, [filteredOptions]);\n\n // Handlers\n const handleToggle = () => {\n if (!disabled && !isLoading) {\n setIsOpen(!isOpen);\n if (isOpen) {\n setSearchQuery('');\n setHighlightedIndex(-1);\n }\n }\n };\n\n const handleSelect = (optionValue, e) => {\n if (e) e.stopPropagation();\n\n if (value === undefined) {\n setInternalValue(optionValue);\n }\n onChange?.(optionValue, normalizedOptions.find(o => o.value === optionValue));\n setIsOpen(false);\n setSearchQuery('');\n setHighlightedIndex(-1);\n };\n\n const handleClear = (e) => {\n e.stopPropagation();\n const newValue = selectOptionValue;\n if (value === undefined) setInternalValue(newValue);\n onChange?.(newValue, null);\n setSearchQuery('');\n };\n\n const handleKeyDown = (e) => {\n if (disabled) return;\n\n switch (e.key) {\n case 'Enter':\n e.preventDefault();\n if (isOpen && highlightedIndex >= 0 && filteredOptions[highlightedIndex]) {\n handleSelect(filteredOptions[highlightedIndex].value);\n } else if (!isOpen) {\n setIsOpen(true);\n }\n break;\n case 'Escape':\n setIsOpen(false);\n setSearchQuery('');\n break;\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n setHighlightedIndex(prev =>\n prev < filteredOptions.length - 1 ? prev + 1 : prev\n );\n }\n break;\n case 'ArrowUp':\n e.preventDefault();\n setHighlightedIndex(prev => prev > 0 ? prev - 1 : 0);\n break;\n default:\n break;\n }\n };\n\n // Color Configuration\n const colorConfig = {\n violet: {\n focus: 'border-violet-500 ring-violet-500/20 dark:ring-violet-500/90',\n optionSelected: 'bg-violet-100 dark:bg-violet-900/30 text-violet-700 dark:text-violet-300',\n icon: 'text-violet-500',\n iconSelected: 'text-violet-500'\n },\n blue: {\n focus: 'border-blue-500 ring-blue-500/90',\n optionSelected: 'bg-blue-100 dark:bg-blue-900/30 text-blue-700 dark:text-blue-300',\n icon: 'text-blue-500',\n iconSelected: 'text-blue-500'\n },\n emerald: {\n focus: 'border-emerald-500 ring-emerald-500/90',\n optionSelected: 'bg-emerald-100 dark:bg-emerald-900/30 text-emerald-700 dark:text-emerald-300',\n icon: 'text-emerald-500',\n iconSelected: 'text-emerald-500'\n },\n rose: {\n focus: 'border-rose-500 ring-rose-500/70',\n optionSelected: 'bg-rose-100 dark:bg-rose-900/30 text-rose-700 dark:text-rose-300',\n icon: 'text-rose-500',\n iconSelected: 'text-rose-500'\n },\n amber: {\n focus: 'border-amber-500 ring-amber-500/90',\n optionSelected: 'bg-amber-100 dark:bg-amber-900/30 text-amber-700 dark:text-amber-300',\n icon: 'text-amber-500',\n iconSelected: 'text-amber-500'\n },\n black: {\n focus: 'border-slate-800 dark:border-slate-200 ring-slate-500/20 dark:ring-slate-500/90',\n optionSelected: 'bg-slate-100 dark:bg-slate-800 text-slate-800 dark:text-slate-200',\n icon: 'text-slate-800 dark:text-slate-200',\n iconSelected: 'text-slate-800 dark:text-slate-200'\n }\n };\n\n const colors = colorConfig[color] || colorConfig.violet;\n\n\n // Size configurations (matching Input component)\n const sizeConfig = {\n xs: { height: 'min-h-7', text: 'text-xs', px: 'px-2', py: 'py-1.5', icon: 'text-xs', label: 'text-xs' },\n sm: { height: 'min-h-8', text: 'text-xs', px: 'px-3', py: 'py-2', icon: 'text-xs', label: 'text-xs' },\n md: { height: 'min-h-11', text: 'text-sm', px: 'px-4', py: 'py-2.5', icon: 'text-sm', label: 'text-sm' },\n lg: { height: 'min-h-12', text: 'text-base', px: 'px-5', py: 'py-3.5', icon: 'text-base', label: 'text-base' },\n xl: { height: 'min-h-14', text: 'text-lg', px: 'px-6', py: 'py-4', icon: 'text-lg', label: 'text-lg' }\n };\n\n // Rounded configurations (matching Input component)\n const roundedConfig = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n '2xl': 'rounded-2xl',\n full: 'rounded-full'\n };\n\n // Theme configurations (matching Input component)\n const themeConfig = {\n default: {\n wrapper: 'bg-slate-50/50 dark:bg-slate-900/50 border border-slate-200 dark:border-slate-700 shadow-sm',\n text: 'text-slate-900 dark:text-white',\n placeholder: 'text-slate-400 dark:text-slate-500',\n focus: 'bg-white dark:bg-slate-950 ring-1',\n icon: 'text-slate-400 dark:text-slate-500',\n disabled: 'opacity-50 cursor-not-allowed bg-slate-100 dark:bg-slate-900',\n dropdown: 'bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-700 shadow-xl shadow-slate-200/50 dark:shadow-slate-950/50',\n option: 'text-slate-700 dark:text-slate-300 hover:bg-slate-100 dark:hover:bg-slate-800',\n optionHighlighted: 'bg-slate-100 dark:bg-slate-800 dark:text-slate-100',\n searchInput: 'bg-slate-50 dark:bg-slate-800/50 border-slate-200 dark:border-slate-700'\n },\n glass: {\n wrapper: 'bg-white/60 dark:bg-slate-800/30 backdrop-blur-xl border border-slate-200/60 dark:border-slate-700/30 shadow-sm',\n text: 'text-slate-900 dark:text-white',\n placeholder: 'text-slate-400 dark:text-slate-400/50',\n focus: 'bg-white/80 dark:bg-slate-800/40 ring-1',\n icon: 'text-slate-400 dark:text-slate-400/70',\n disabled: 'opacity-40 cursor-not-allowed',\n dropdown: 'bg-white/95 dark:bg-slate-900/95 backdrop-blur-xl border border-slate-200/60 dark:border-slate-700/30 shadow-xl',\n option: 'text-slate-700 dark:text-slate-300 hover:bg-slate-100/60 dark:hover:bg-slate-700/50',\n optionHighlighted: 'bg-slate-100/60 dark:bg-slate-700/50',\n searchInput: 'bg-white/50 dark:bg-slate-800/30 border-slate-200/50 dark:border-slate-700/30 backdrop-blur-sm'\n },\n minimal: {\n wrapper: 'bg-transparent border-b-2 border-slate-200 dark:border-slate-700 rounded-none shadow-none',\n text: 'text-slate-900 dark:text-white',\n placeholder: 'text-slate-400 dark:text-slate-500',\n focus: '',\n icon: 'text-slate-400 dark:text-slate-500',\n disabled: 'opacity-50 cursor-not-allowed',\n dropdown: 'bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-700 shadow-xl mt-2',\n option: 'text-slate-700 dark:text-slate-300 hover:bg-slate-100 dark:hover:bg-slate-700/60',\n optionHighlighted: 'bg-slate-100 dark:bg-slate-700/60',\n searchInput: 'bg-slate-50 dark:bg-slate-800/50 border-slate-200 dark:border-slate-700'\n },\n outlined: {\n wrapper: 'bg-transparent border-2 border-slate-300 dark:border-slate-600',\n text: 'text-slate-900 dark:text-white',\n placeholder: 'text-slate-400 dark:text-slate-500',\n focus: 'ring-2',\n icon: 'text-slate-400 dark:text-slate-500',\n disabled: 'opacity-50 cursor-not-allowed',\n dropdown: 'bg-white dark:bg-slate-900 border-2 border-slate-300 dark:border-slate-600 shadow-lg',\n option: 'text-slate-700 dark:text-slate-300 hover:bg-slate-100 dark:hover:bg-slate-700/60',\n optionHighlighted: 'bg-slate-100 dark:bg-slate-700/60',\n searchInput: 'bg-transparent border-2 border-slate-300 dark:border-slate-600'\n },\n filled: {\n wrapper: 'bg-slate-100 dark:bg-slate-800 border-2 border-transparent',\n text: 'text-slate-900 dark:text-white',\n placeholder: 'text-slate-500 dark:text-slate-400',\n focus: 'bg-white dark:bg-slate-700 ring-1',\n icon: 'text-slate-500 dark:text-slate-400',\n disabled: 'opacity-50 cursor-not-allowed bg-slate-200 dark:bg-slate-900',\n dropdown: 'bg-white dark:bg-slate-800 border border-slate-200 dark:border-slate-700 shadow-xl',\n option: 'text-slate-700 dark:text-slate-300 hover:bg-slate-100 dark:hover:bg-slate-600/60',\n optionHighlighted: 'bg-slate-100 dark:bg-slate-600/60',\n searchInput: 'bg-slate-50 dark:bg-slate-700/50 border-slate-200 dark:border-slate-600'\n }\n };\n\n // Focus effect configurations\n const focusEffectConfig = {\n none: '',\n glow: 'transition-shadow duration-300',\n ring: 'transition-all duration-200',\n border: 'transition-colors duration-200'\n };\n\n const currentSize = sizeConfig[size] || sizeConfig.md;\n const currentTheme = themeConfig[theme] || themeConfig.default;\n const currentRounded = roundedConfig[rounded] || roundedConfig.lg;\n const currentFocusEffect = focusEffectConfig[focusEffect] || '';\n\n // Check if there's a real selection (not the placeholder)\n const hasSelection = actualValue !== selectOptionValue && actualValue !== '' && selectedOption;\n\n // Render the display value\n const renderDisplayValue = () => {\n if (renderSelectedValue && selectedOption) {\n return renderSelectedValue(selectedOption);\n }\n\n if (!hasSelection) {\n return <span className={`${currentTheme.placeholder} text-sm`}>{placeholder}</span>;\n }\n\n return (\n <div className=\"flex items-center gap-2 truncate\">\n {selectedOption.icon && (\n <Icon\n icon={selectedOption.icon}\n variant={selectedOption.iconVariant || 'fas'}\n className={currentTheme.icon}\n />\n )}\n <span className={`truncate ${currentTheme.text} ${currentSize.text}`}>{selectedOption.label}</span>\n </div>\n );\n };\n\n // Render an option\n const renderOptionContent = (opt, isSelected, isHighlighted) => {\n if (renderOption) {\n return renderOption(opt, isSelected);\n }\n\n return (\n <div className=\"flex items-center justify-between w-full\">\n <div className=\"flex items-center gap-3\">\n {opt.icon && (\n <Icon\n icon={opt.icon}\n variant={opt.iconVariant || 'fas'}\n className={isSelected ? colors.iconSelected : 'text-slate-400 dark:text-slate-500'}\n />\n )}\n <div className=\"flex flex-col\">\n <span className={`${currentSize.text} ${isSelected ? 'font-medium' : ''}`}>\n {opt.label}\n </span>\n {opt.description && (\n <span className=\"text-xs text-slate-500 dark:text-slate-400\">\n {opt.description}\n </span>\n )}\n </div>\n </div>\n {isSelected && (\n <Icon icon=\"check\" className={`${colors.iconSelected} text-sm flex-shrink-0`} />\n )}\n </div>\n );\n };\n\n return (\n <div\n className={`${fullWidth ? 'w-full' : 'inline-block'} relative ${isOpen ? 'z-[100]' : ''}`}\n ref={containerRef}\n >\n {/* Label */}\n {label && (\n <label\n htmlFor={id || name}\n className={`block mb-1.5 font-medium text-slate-700 dark:text-slate-300 ${currentSize.label} ${labelClassName}`}\n >\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n\n {/* Hidden input for form compatibility */}\n <input\n type=\"hidden\"\n name={name}\n value={actualValue}\n required={required}\n />\n\n {/* Select Trigger */}\n <div\n ref={selectRef}\n tabIndex={disabled ? -1 : 0}\n onClick={handleToggle}\n onKeyDown={handleKeyDown}\n className={`\n relative flex items-center justify-between cursor-pointer\n ${currentSize.height} ${currentSize.px} ${currentSize.py}\n ${theme === 'minimal' ? '' : currentRounded}\n ${currentTheme.wrapper}\n ${isOpen ? `${currentTheme.focus} ${colors.focus}` : ''}\n ${disabled ? currentTheme.disabled : ''}\n ${animate ? currentFocusEffect : ''}\n ${className}\n outline-none\n `}\n style={style}\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-disabled={disabled}\n {...props}\n >\n {/* Left Icon */}\n {leftIcon && (\n <span className={`flex-shrink-0 mr-2 ${currentTheme.icon} ${currentSize.icon}`}>\n {typeof leftIcon === 'string' ? (\n <Icon icon={leftIcon} variant={leftIconVariant} />\n ) : leftIcon}\n </span>\n )}\n\n {/* Display Value */}\n <div className=\"flex-1 min-w-0 overflow-hidden\">\n {renderDisplayValue()}\n </div>\n\n {/* Right Side Icons */}\n <div className=\"flex items-center gap-1 ml-2 flex-shrink-0\">\n {/* Loading Spinner */}\n {isLoading && (\n <Icon icon=\"spinner-third\" variant=\"fad\" className=\"animate-spin text-slate-400 text-sm\" />\n )}\n\n {/* Clear Button */}\n {clearable && hasSelection && !disabled && !isLoading && (\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"w-6 h-6 flex items-center justify-center rounded-full hover:bg-slate-200 dark:hover:bg-slate-700 text-slate-400 hover:text-slate-600 dark:hover:text-slate-300 transition-colors\"\n tabIndex={-1}\n >\n <Icon icon={clearIcon} size=\"sm\" />\n </button>\n )}\n\n {/* Dropdown Arrow */}\n <span className={`${currentTheme.icon} inline-flex items-center justify-center transition-transform duration-200 origin-center ${isOpen ? 'rotate-180' : ''}`}>\n <Icon icon={dropdownIcon} className=\"text-xs\" />\n </span>\n </div>\n </div>\n\n {/* Helper Text */}\n {helperText && (\n <p className=\"mt-1.5 text-xs text-slate-500 dark:text-slate-400\">\n {helperText}\n </p>\n )}\n\n {/* Dropdown */}\n {isOpen && !disabled && (\n <div\n className={`\n absolute z-50 w-full mt-1.5 overflow-hidden\n ${theme === 'minimal' ? 'rounded-lg' : currentRounded}\n ${currentTheme.dropdown}\n `}\n style={{ maxWidth: containerRef.current?.offsetWidth }}\n role=\"listbox\"\n >\n {/* Search Input */}\n {searchable && (\n <div className=\"p-2 border-b border-slate-100 dark:border-slate-800\">\n <div className=\"relative\">\n <input\n ref={searchInputRef}\n type=\"text\"\n value={searchQuery}\n onChange={(e) => {\n setSearchQuery(e.target.value);\n onSearch?.(e.target.value);\n }}\n placeholder=\"Search...\"\n className={`\n w-full text-sm rounded-md pl-8 pr-3 py-2 outline-none\n ${currentTheme.searchInput}\n ${currentTheme.text}\n border\n ${colors.focus}\n placeholder:text-slate-400 dark:placeholder:text-slate-500\n `}\n onClick={(e) => e.stopPropagation()}\n />\n <span className=\"absolute left-2.5 top-1/2 -translate-y-1/2 text-slate-400 text-xs\">\n <Icon icon=\"search\" />\n </span>\n </div>\n </div>\n )}\n\n {/* Options List */}\n <div\n className=\"overflow-y-auto p-1\"\n style={{ maxHeight: maxDropdownHeight }}\n >\n {/* Default \"Select\" Option */}\n {showSelectOption && !searchQuery && (\n <div\n onClick={(e) => handleSelect(selectOptionValue, e)}\n className={`\n flex items-center px-3 py-2 rounded-md cursor-pointer text-sm transition-colors\n ${actualValue === selectOptionValue ? colors.optionSelected : ''}\n ${(highlightedIndex === -1 && actualValue !== selectOptionValue) ? currentTheme.optionHighlighted : ''}\n ${actualValue !== selectOptionValue ? currentTheme.option : ''}\n ${optionsClassName}\n `}\n role=\"option\"\n aria-selected={actualValue === selectOptionValue}\n >\n <span className=\"text-slate-400 dark:text-slate-500\">{selectOptionText}</span>\n </div>\n )}\n\n {/* Filtered Options */}\n {filteredOptions.length > 0 ? (\n filteredOptions.map((opt, index) => {\n const isSelected = actualValue === opt.value;\n const isHighlighted = highlightedIndex === index;\n\n return (\n <div\n key={opt.value}\n onClick={(e) => handleSelect(opt.value, e)}\n onMouseEnter={() => setHighlightedIndex(index)}\n className={`\n px-3 py-2 rounded-md cursor-pointer transition-colors\n ${isSelected ? colors.optionSelected : ''}\n ${isHighlighted && !isSelected ? currentTheme.optionHighlighted : ''}\n ${!isSelected && !isHighlighted ? currentTheme.option : ''}\n ${optionsClassName}\n `}\n style={optionHeight !== 'auto' ? { height: optionHeight } : {}}\n role=\"option\"\n aria-selected={isSelected}\n >\n {renderOptionContent(opt, isSelected, isHighlighted)}\n </div>\n );\n })\n ) : (\n <div className=\"px-3 py-6 text-center text-sm text-slate-500 dark:text-slate-400\">\n <Icon icon=\"inbox\" className=\"text-2xl mb-2 opacity-50\" />\n <p>{noOptionsText}</p>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n});\n\nSelect.displayName = 'Select';\n\nSelect.propTypes = {\n // Data\n options: PropTypes.arrayOf(PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number,\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.any.isRequired,\n icon: PropTypes.string,\n iconVariant: PropTypes.oneOf(['fas', 'far', 'fal', 'fad']),\n description: PropTypes.string,\n })\n ])),\n value: PropTypes.any,\n defaultValue: PropTypes.any,\n onChange: PropTypes.func,\n onSearch: PropTypes.func,\n valueKey: PropTypes.string,\n labelKey: PropTypes.string,\n\n // API\n api: PropTypes.string,\n apiMethod: PropTypes.oneOf(['GET', 'POST', 'PUT', 'PATCH']),\n apiHeaders: PropTypes.object,\n apiDataPath: PropTypes.string,\n\n // Configuration\n searchable: PropTypes.bool,\n clearable: PropTypes.bool,\n disabled: PropTypes.bool,\n required: PropTypes.bool,\n loading: PropTypes.bool,\n name: PropTypes.string,\n id: PropTypes.string,\n\n // Placeholder\n placeholder: PropTypes.string,\n showSelectOption: PropTypes.bool,\n selectOptionText: PropTypes.string,\n selectOptionValue: PropTypes.any,\n\n // Appearance\n theme: PropTypes.oneOf(['default', 'glass', 'minimal', 'outlined', 'filled']),\n color: PropTypes.oneOf(['violet', 'blue', 'emerald', 'rose', 'amber', 'black']),\n size: PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl']),\n rounded: PropTypes.oneOf(['none', 'sm', 'md', 'lg', 'xl', '2xl', 'full']),\n fullWidth: PropTypes.bool,\n\n // Label & Help\n label: PropTypes.string,\n helperText: PropTypes.string,\n\n // Icons\n leftIcon: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n leftIconVariant: PropTypes.oneOf(['fas', 'far', 'fal', 'fad']),\n dropdownIcon: PropTypes.string,\n clearIcon: PropTypes.string,\n\n // Animation\n animate: PropTypes.bool,\n focusEffect: PropTypes.oneOf(['none', 'glow', 'ring', 'border']),\n\n // Customization\n className: PropTypes.string,\n labelClassName: PropTypes.string,\n optionsClassName: PropTypes.string,\n renderOption: PropTypes.func,\n renderSelectedValue: PropTypes.func,\n noOptionsText: PropTypes.string,\n optionHeight: PropTypes.string,\n maxDropdownHeight: PropTypes.string,\n style: PropTypes.object,\n};\n\nexport default Select;\n","import React, { useState, useRef, useEffect, useMemo, forwardRef } from 'react';\nimport PropTypes from 'prop-types';\nimport Icon from '../Icon';\n\n/**\n * MultiSelect Component - A highly customizable multi-select dropdown with search support\n * \n * Features:\n * - Multiple selection with chips/tags display\n * - Multiple themes (default, glass, minimal, outlined, filled)\n * - Multiple colors (violet, blue, emerald, rose, amber, black)\n * - Search/filter functionality\n * - Custom option rendering (text, icons, descriptions)\n * - Clear all selections button\n * - Individual chip removal\n * - Form compatible (name, required, value)\n * - Matches Select and Input component styling\n */\nconst MultiSelect = forwardRef(({\n // Data\n options = [],\n value,\n defaultValue = [],\n onChange,\n onSearch,\n\n // API\n api,\n apiMethod = 'GET',\n apiHeaders = {},\n apiDataPath = '',\n\n // Field mapping for object arrays\n valueKey = 'value',\n labelKey = 'label',\n\n // Configuration\n searchable = false,\n clearable = true,\n disabled = false,\n required = false,\n loading = false,\n name,\n id,\n maxSelections,\n\n // Placeholder\n placeholder = 'Select...',\n\n // Appearance\n theme = 'default',\n color = 'violet', // violet, blue, emerald, rose, amber, black\n size = 'md',\n rounded = 'xl',\n fullWidth = false,\n\n // Chip display mode\n chipDisplay = 'inline', // 'inline', 'count', 'compact'\n maxVisibleChips = 3,\n\n // Label & Help\n label,\n helperText,\n\n // Icons\n leftIcon,\n leftIconVariant = 'fas',\n dropdownIcon = 'chevron-down',\n clearIcon = 'xmark',\n\n // Animation\n animate = true,\n focusEffect = 'glow',\n\n // Customization\n className = '',\n labelClassName = '',\n optionsClassName = '',\n chipClassName = '',\n renderOption,\n renderChip,\n noOptionsText = 'No options found',\n optionHeight = 'auto',\n maxDropdownHeight = '240px',\n\n // Style\n style,\n\n ...props\n}, ref) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n const [internalValue, setInternalValue] = useState(defaultValue);\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n const [apiOptions, setApiOptions] = useState([]);\n const [apiLoading, setApiLoading] = useState(false);\n const [apiError, setApiError] = useState(null);\n const containerRef = useRef(null);\n const searchInputRef = useRef(null);\n const triggerRef = useRef(null);\n\n // Use forwarded ref or internal ref\n const selectRef = ref || triggerRef;\n\n // Derived state - always an array for multi-select\n const actualValue = Array.isArray(value !== undefined ? value : internalValue)\n ? (value !== undefined ? value : internalValue)\n : [];\n\n // Determine if loading (prop or API)\n const isLoading = loading || apiLoading;\n\n // Determine options source (prop or API)\n const optionsSource = api ? apiOptions : options;\n\n // Normalize options to ensure they fit { label, value } format\n const normalizedOptions = useMemo(() => {\n return optionsSource.map(opt => {\n if (typeof opt === 'string' || typeof opt === 'number') {\n return { label: String(opt), value: opt, _original: opt };\n }\n return {\n label: opt[labelKey] !== undefined ? String(opt[labelKey]) : String(opt.label || ''),\n value: opt[valueKey] !== undefined ? opt[valueKey] : opt.value,\n icon: opt.icon,\n iconVariant: opt.iconVariant,\n description: opt.description,\n _original: opt\n };\n });\n }, [optionsSource, valueKey, labelKey]);\n\n // Filter options based on search\n const filteredOptions = useMemo(() => {\n if (!searchable || !searchQuery) return normalizedOptions;\n return normalizedOptions.filter(opt =>\n String(opt.label).toLowerCase().includes(searchQuery.toLowerCase()) ||\n (opt.description && String(opt.description).toLowerCase().includes(searchQuery.toLowerCase()))\n );\n }, [normalizedOptions, searchQuery, searchable]);\n\n // Get selected option objects\n const selectedOptions = useMemo(() => {\n return actualValue\n .map(val => normalizedOptions.find(opt => opt.value === val))\n .filter(Boolean);\n }, [normalizedOptions, actualValue]);\n\n // Handle outside click to close\n useEffect(() => {\n const handleClickOutside = (event) => {\n if (containerRef.current && !containerRef.current.contains(event.target)) {\n setIsOpen(false);\n setSearchQuery('');\n setHighlightedIndex(-1);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n // Fetch data from API\n useEffect(() => {\n if (!api) return;\n\n const fetchData = async () => {\n setApiLoading(true);\n setApiError(null);\n try {\n const response = await fetch(api, {\n method: apiMethod,\n headers: {\n 'Content-Type': 'application/json',\n ...apiHeaders\n }\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n let data = await response.json();\n\n if (apiDataPath) {\n const paths = apiDataPath.split('.');\n for (const path of paths) {\n data = data?.[path];\n }\n }\n\n if (Array.isArray(data)) {\n setApiOptions(data);\n } else {\n console.warn('MultiSelect API response is not an array:', data);\n setApiOptions([]);\n }\n } catch (error) {\n console.error('MultiSelect API fetch error:', error);\n setApiError(error.message);\n setApiOptions([]);\n } finally {\n setApiLoading(false);\n }\n };\n\n fetchData();\n }, [api, apiMethod, apiDataPath]);\n\n // Focus search input when opening\n useEffect(() => {\n if (isOpen && searchable && searchInputRef.current) {\n setTimeout(() => searchInputRef.current?.focus(), 50);\n }\n }, [isOpen, searchable]);\n\n // Reset highlighted index when options change\n useEffect(() => {\n setHighlightedIndex(-1);\n }, [filteredOptions]);\n\n // Handlers\n const handleToggle = () => {\n if (!disabled && !isLoading) {\n setIsOpen(!isOpen);\n if (isOpen) {\n setSearchQuery('');\n setHighlightedIndex(-1);\n }\n }\n };\n\n const handleSelect = (optionValue, e) => {\n if (e) e.stopPropagation();\n\n let newValue;\n if (actualValue.includes(optionValue)) {\n // Remove if already selected\n newValue = actualValue.filter(v => v !== optionValue);\n } else {\n // Add if not at max selections\n if (maxSelections && actualValue.length >= maxSelections) {\n return; // Don't add more\n }\n newValue = [...actualValue, optionValue];\n }\n\n if (value === undefined) {\n setInternalValue(newValue);\n }\n onChange?.(newValue, newValue.map(v => normalizedOptions.find(o => o.value === v)));\n setSearchQuery('');\n };\n\n const handleRemoveChip = (optionValue, e) => {\n e.stopPropagation();\n const newValue = actualValue.filter(v => v !== optionValue);\n if (value === undefined) setInternalValue(newValue);\n onChange?.(newValue, newValue.map(v => normalizedOptions.find(o => o.value === v)));\n };\n\n const handleClear = (e) => {\n e.stopPropagation();\n const newValue = [];\n if (value === undefined) setInternalValue(newValue);\n onChange?.(newValue, []);\n setSearchQuery('');\n };\n\n const handleKeyDown = (e) => {\n if (disabled) return;\n\n switch (e.key) {\n case 'Enter':\n e.preventDefault();\n if (isOpen && highlightedIndex >= 0 && filteredOptions[highlightedIndex]) {\n handleSelect(filteredOptions[highlightedIndex].value);\n } else if (!isOpen) {\n setIsOpen(true);\n }\n break;\n case 'Escape':\n setIsOpen(false);\n setSearchQuery('');\n break;\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n setHighlightedIndex(prev =>\n prev < filteredOptions.length - 1 ? prev + 1 : prev\n );\n }\n break;\n case 'ArrowUp':\n e.preventDefault();\n setHighlightedIndex(prev => prev > 0 ? prev - 1 : 0);\n break;\n default:\n break;\n }\n };\n\n // Color Configuration\n const colorConfig = {\n violet: {\n focus: 'border-violet-500 ring-violet-500/20',\n optionSelected: 'bg-violet-100 dark:bg-violet-900/30 text-violet-700 dark:text-violet-300',\n iconSelected: 'text-violet-500',\n chip: 'bg-violet-100 dark:bg-violet-900/40 text-violet-700 dark:text-violet-300 border border-violet-200 dark:border-violet-800',\n checkbox: 'bg-violet-500 border-violet-500',\n clearButton: 'text-violet-600 dark:text-violet-400'\n },\n blue: {\n focus: 'border-blue-500 ring-blue-500/20',\n optionSelected: 'bg-blue-100 dark:bg-blue-900/30 text-blue-700 dark:text-blue-300',\n iconSelected: 'text-blue-500',\n chip: 'bg-blue-100 dark:bg-blue-900/40 text-blue-700 dark:text-blue-300 border border-blue-200 dark:border-blue-800',\n checkbox: 'bg-blue-500 border-blue-500',\n clearButton: 'text-blue-600 dark:text-blue-400'\n },\n emerald: {\n focus: 'border-emerald-500 ring-emerald-500/20',\n optionSelected: 'bg-emerald-100 dark:bg-emerald-900/30 text-emerald-700 dark:text-emerald-300',\n iconSelected: 'text-emerald-500',\n chip: 'bg-emerald-100 dark:bg-emerald-900/40 text-emerald-700 dark:text-emerald-300 border border-emerald-200 dark:border-emerald-800',\n checkbox: 'bg-emerald-500 border-emerald-500',\n clearButton: 'text-emerald-600 dark:text-emerald-400'\n },\n rose: {\n focus: 'border-rose-500 ring-rose-500/20',\n optionSelected: 'bg-rose-100 dark:bg-rose-900/30 text-rose-700 dark:text-rose-300',\n iconSelected: 'text-rose-500',\n chip: 'bg-rose-100 dark:bg-rose-900/40 text-rose-700 dark:text-rose-300 border border-rose-200 dark:border-rose-800',\n checkbox: 'bg-rose-500 border-rose-500',\n clearButton: 'text-rose-600 dark:text-rose-400'\n },\n amber: {\n focus: 'border-amber-500 ring-amber-500/20',\n optionSelected: 'bg-amber-100 dark:bg-amber-900/30 text-amber-700 dark:text-amber-300',\n iconSelected: 'text-amber-500',\n chip: 'bg-amber-100 dark:bg-amber-900/40 text-amber-700 dark:text-amber-300 border border-amber-200 dark:border-amber-800',\n checkbox: 'bg-amber-500 border-amber-500',\n clearButton: 'text-amber-600 dark:text-amber-400'\n },\n black: {\n focus: 'border-slate-800 dark:border-slate-200 ring-slate-500/20',\n optionSelected: 'bg-slate-100 dark:bg-slate-800 text-slate-800 dark:text-slate-200',\n iconSelected: 'text-slate-800 dark:text-slate-200',\n chip: 'bg-slate-100 dark:bg-slate-800 text-slate-800 dark:text-slate-200 border border-slate-200 dark:border-slate-700',\n checkbox: 'bg-slate-800 dark:bg-slate-200 border-slate-800 dark:border-slate-200',\n clearButton: 'text-slate-800 dark:text-slate-200'\n }\n };\n\n const colors = colorConfig[color] || colorConfig.violet;\n\n // Size configurations (matching Input component)\n const sizeConfig = {\n xs: { minHeight: 'min-h-7', text: 'text-xs', px: 'px-2', py: 'py-1.5', icon: 'text-xs', label: 'text-xs', chip: 'text-xs px-1.5 py-px' },\n sm: { minHeight: 'min-h-8', text: 'text-xs', px: 'px-3', py: 'py-2', icon: 'text-xs', label: 'text-xs', chip: 'text-xs px-2 py-px' },\n md: { minHeight: 'min-h-11', text: 'text-sm', px: 'px-4', py: 'py-2.5', icon: 'text-sm', label: 'text-sm', chip: 'text-xs px-2 py-px' },\n lg: { minHeight: 'min-h-12', text: 'text-base', px: 'px-5', py: 'py-3.5', icon: 'text-base', label: 'text-base', chip: 'text-sm px-2.5 py-px' },\n xl: { minHeight: 'min-h-14', text: 'text-lg', px: 'px-6', py: 'py-4', icon: 'text-lg', label: 'text-lg', chip: 'text-sm px-3 py-0.5' }\n };\n\n // Rounded configurations (matching Input component)\n const roundedConfig = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n '2xl': 'rounded-2xl',\n full: 'rounded-full'\n };\n\n // Theme configurations (matching Select component)\n const themeConfig = {\n default: {\n wrapper: 'bg-slate-50/50 dark:bg-slate-900/50 border border-slate-200 dark:border-slate-700 shadow-sm',\n text: 'text-slate-900 dark:text-white',\n placeholder: 'text-slate-400 dark:text-slate-500',\n focus: 'bg-white dark:bg-slate-950 ring-1',\n icon: 'text-slate-400 dark:text-slate-500',\n disabled: 'opacity-50 cursor-not-allowed bg-slate-100 dark:bg-slate-900',\n dropdown: 'bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-700 shadow-xl shadow-slate-200/50 dark:shadow-slate-950/50',\n option: 'text-slate-700 dark:text-slate-300 hover:bg-slate-100 dark:hover:bg-slate-800',\n optionHighlighted: 'bg-slate-100 dark:bg-slate-800 dark:text-slate-100',\n searchInput: 'bg-slate-50 dark:bg-slate-800/50 border-slate-200 dark:border-slate-700'\n },\n glass: {\n wrapper: 'bg-white/60 dark:bg-slate-800/30 backdrop-blur-xl border border-slate-200/60 dark:border-slate-700/30 shadow-sm',\n text: 'text-slate-900 dark:text-white',\n placeholder: 'text-slate-400 dark:text-slate-400/50',\n focus: 'bg-white/80 dark:bg-slate-800/40 ring-1',\n icon: 'text-slate-400 dark:text-slate-400/70',\n disabled: 'opacity-40 cursor-not-allowed',\n dropdown: 'bg-white/95 dark:bg-slate-900/95 backdrop-blur-xl border border-slate-200/60 dark:border-slate-700/30 shadow-xl',\n option: 'text-slate-700 dark:text-slate-300 hover:bg-slate-100/60 dark:hover:bg-slate-700/50',\n optionHighlighted: 'bg-slate-100/60 dark:bg-slate-700/50',\n searchInput: 'bg-white/50 dark:bg-slate-800/30 border-slate-200/50 dark:border-slate-700/30 backdrop-blur-sm'\n },\n minimal: {\n wrapper: 'bg-transparent border-b-2 border-slate-200 dark:border-slate-700 rounded-none shadow-none',\n text: 'text-slate-900 dark:text-white',\n placeholder: 'text-slate-400 dark:text-slate-500',\n focus: '',\n icon: 'text-slate-400 dark:text-slate-500',\n disabled: 'opacity-50 cursor-not-allowed',\n dropdown: 'bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-700 shadow-xl mt-2',\n option: 'text-slate-700 dark:text-slate-300 hover:bg-slate-100 dark:hover:bg-slate-700/60',\n optionHighlighted: 'bg-slate-100 dark:bg-slate-700/60',\n searchInput: 'bg-slate-50 dark:bg-slate-800/50 border-slate-200 dark:border-slate-700'\n },\n outlined: {\n wrapper: 'bg-transparent border-2 border-slate-300 dark:border-slate-600',\n text: 'text-slate-900 dark:text-white',\n placeholder: 'text-slate-400 dark:text-slate-500',\n focus: 'ring-2',\n icon: 'text-slate-400 dark:text-slate-500',\n disabled: 'opacity-50 cursor-not-allowed',\n dropdown: 'bg-white dark:bg-slate-900 border-2 border-slate-300 dark:border-slate-600 shadow-lg',\n option: 'text-slate-700 dark:text-slate-300 hover:bg-slate-100 dark:hover:bg-slate-700/60',\n optionHighlighted: 'bg-slate-100 dark:bg-slate-700/60',\n searchInput: 'bg-transparent border-2 border-slate-300 dark:border-slate-600'\n },\n filled: {\n wrapper: 'bg-slate-100 dark:bg-slate-800 border-2 border-transparent',\n text: 'text-slate-900 dark:text-white',\n placeholder: 'text-slate-500 dark:text-slate-400',\n focus: 'bg-white dark:bg-slate-700 ring-1',\n icon: 'text-slate-500 dark:text-slate-400',\n disabled: 'opacity-50 cursor-not-allowed bg-slate-200 dark:bg-slate-900',\n dropdown: 'bg-white dark:bg-slate-800 border border-slate-200 dark:border-slate-700 shadow-xl',\n option: 'text-slate-700 dark:text-slate-300 hover:bg-slate-100 dark:hover:bg-slate-600/60',\n optionHighlighted: 'bg-slate-100 dark:bg-slate-600/60',\n searchInput: 'bg-slate-50 dark:bg-slate-700/50 border-slate-200 dark:border-slate-600'\n }\n };\n\n // Focus effect configurations\n const focusEffectConfig = {\n none: '',\n glow: 'transition-shadow duration-300',\n ring: 'transition-all duration-200',\n border: 'transition-colors duration-200'\n };\n\n const currentSize = sizeConfig[size] || sizeConfig.md;\n const currentTheme = themeConfig[theme] || themeConfig.default;\n const currentRounded = roundedConfig[rounded] || roundedConfig.lg;\n const currentFocusEffect = focusEffectConfig[focusEffect] || '';\n\n // Check if there are selections\n const hasSelection = actualValue.length > 0;\n\n // Render chips for selected values\n const renderChips = () => {\n if (!hasSelection) {\n return <span className={`${currentTheme.placeholder} text-sm`}>{placeholder}</span>;\n }\n\n if (chipDisplay === 'count') {\n return (\n <span className={`${currentTheme.text} ${currentSize.text}`}>\n {actualValue.length} selected\n </span>\n );\n }\n\n const visibleChips = chipDisplay === 'compact'\n ? selectedOptions.slice(0, maxVisibleChips)\n : selectedOptions;\n const remainingCount = selectedOptions.length - visibleChips.length;\n\n return (\n <div className=\"flex flex-wrap gap-1.5\">\n {visibleChips.map(opt => {\n if (renderChip) {\n return renderChip(opt, () => handleRemoveChip(opt.value, { stopPropagation: () => { } }));\n }\n\n return (\n <span\n key={opt.value}\n className={`\n inline-flex items-center gap-1 rounded-full\n ${currentSize.chip}\n ${colors.chip}\n ${chipClassName}\n `}\n >\n {opt.icon && (\n <Icon\n icon={opt.icon}\n variant={opt.iconVariant || 'fas'}\n className=\"text-xs\"\n />\n )}\n <span className=\"truncate max-w-[100px]\">{opt.label}</span>\n <button\n type=\"button\"\n onClick={(e) => handleRemoveChip(opt.value, e)}\n className=\"ml-0.5 hover:bg-black/10 dark:hover:bg-white/10 rounded-full p-0.5 transition-colors\"\n tabIndex={-1}\n >\n <Icon icon=\"xmark\" size=\"sm\" />\n </button>\n </span>\n );\n })}\n {remainingCount > 0 && (\n <span className={`${currentSize.chip} ${colors.chip} rounded-full`}>\n +{remainingCount}\n </span>\n )}\n </div>\n );\n };\n\n // Render an option with checkbox\n const renderOptionContent = (opt, isSelected, isHighlighted) => {\n if (renderOption) {\n return renderOption(opt, isSelected);\n }\n\n return (\n <div className=\"flex items-center justify-between w-full\">\n <div className=\"flex items-center gap-3\">\n {/* Checkbox indicator */}\n <div className={`\n w-4 h-4 rounded border-2 flex items-center justify-center transition-colors\n ${isSelected\n ? colors.checkbox\n : 'border-slate-300 dark:border-slate-400 bg-transparent dark:bg-slate-800'\n }\n `}>\n {isSelected && (\n <Icon icon=\"check\" className={`${color === 'white' ? 'text-black' : (color === 'black' ? 'dark:text-black text-white' : 'text-white')} text-[10px]`} />\n )}\n </div>\n\n {opt.icon && (\n <Icon\n icon={opt.icon}\n variant={opt.iconVariant || 'fas'}\n className={isSelected ? colors.iconSelected : 'text-slate-400 dark:text-slate-500'}\n />\n )}\n <div className=\"flex flex-col\">\n <span className={`${currentSize.text} ${isSelected ? 'font-medium' : ''}`}>\n {opt.label}\n </span>\n {opt.description && (\n <span className=\"text-xs text-slate-500 dark:text-slate-400\">\n {opt.description}\n </span>\n )}\n </div>\n </div>\n </div>\n );\n };\n\n return (\n <div\n className={`${fullWidth ? 'w-full' : 'inline-block'} relative ${isOpen ? 'z-[100]' : ''}`}\n ref={containerRef}\n >\n {/* Label */}\n {label && (\n <label\n htmlFor={id || name}\n className={`block mb-1.5 font-medium text-slate-700 dark:text-slate-300 ${currentSize.label} ${labelClassName}`}\n >\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n\n {/* Hidden inputs for form compatibility */}\n {actualValue.map((val, idx) => (\n <input\n key={idx}\n type=\"hidden\"\n name={name ? `${name}[]` : undefined}\n value={val}\n />\n ))}\n\n {/* Select Trigger */}\n <div\n ref={selectRef}\n tabIndex={disabled ? -1 : 0}\n onClick={handleToggle}\n onKeyDown={handleKeyDown}\n className={`\n relative flex items-center justify-between cursor-pointer\n ${currentSize.minHeight} ${currentSize.px} ${currentSize.py}\n ${theme === 'minimal' ? '' : currentRounded}\n ${currentTheme.wrapper}\n ${isOpen ? `${currentTheme.focus} ${colors.focus}` : ''}\n ${disabled ? currentTheme.disabled : ''}\n ${animate ? currentFocusEffect : ''}\n ${className}\n outline-none\n `}\n style={style}\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-disabled={disabled}\n {...props}\n >\n {/* Left Icon */}\n {leftIcon && (\n <span className={`flex-shrink-0 mr-2 ${currentTheme.icon} ${currentSize.icon}`}>\n {typeof leftIcon === 'string' ? (\n <Icon icon={leftIcon} variant={leftIconVariant} />\n ) : leftIcon}\n </span>\n )}\n\n {/* Display Value (Chips) */}\n <div className=\"flex-1 min-w-0 overflow-hidden\">\n {renderChips()}\n </div>\n\n {/* Right Side Icons */}\n <div className=\"flex items-center gap-1 ml-2 flex-shrink-0\">\n {/* Loading Spinner */}\n {isLoading && (\n <Icon icon=\"spinner-third\" variant=\"fad\" className=\"animate-spin text-slate-400 text-sm\" />\n )}\n\n {/* Clear Button */}\n {clearable && hasSelection && !disabled && !isLoading && (\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"w-6 h-6 flex items-center justify-center rounded-full hover:bg-slate-200 dark:hover:bg-slate-700 text-slate-400 hover:text-slate-600 dark:hover:text-slate-300 transition-colors\"\n tabIndex={-1}\n >\n <Icon icon={clearIcon} size=\"sm\" />\n </button>\n )}\n\n {/* Dropdown Arrow */}\n <span className={`${currentTheme.icon} inline-flex items-center justify-center transition-transform duration-200 origin-center ${isOpen ? 'rotate-180' : ''}`}>\n <Icon icon={dropdownIcon} className=\"text-xs\" />\n </span>\n </div>\n </div>\n\n {/* Helper Text */}\n {helperText && (\n <p className=\"mt-1.5 text-xs text-slate-500 dark:text-slate-400\">\n {helperText}\n </p>\n )}\n\n {/* Dropdown */}\n {isOpen && !disabled && (\n <div\n className={`\n absolute z-50 w-full mt-1.5 overflow-hidden\n ${theme === 'minimal' ? 'rounded-lg' : currentRounded}\n ${currentTheme.dropdown}\n `}\n style={{ maxWidth: containerRef.current?.offsetWidth }}\n role=\"listbox\"\n >\n {/* Search Input */}\n {searchable && (\n <div className=\"p-2 border-b border-slate-100 dark:border-slate-800\">\n <div className=\"relative\">\n <input\n ref={searchInputRef}\n type=\"text\"\n value={searchQuery}\n onChange={(e) => {\n setSearchQuery(e.target.value);\n onSearch?.(e.target.value);\n }}\n placeholder=\"Search...\"\n className={`\n w-full text-sm rounded-md pl-8 pr-3 py-2 outline-none\n ${currentTheme.searchInput}\n ${currentTheme.text}\n border\n ${colors.focus}\n placeholder:text-slate-400 dark:placeholder:text-slate-500\n `}\n onClick={(e) => e.stopPropagation()}\n />\n <span className=\"absolute left-2.5 top-1/2 -translate-y-1/2 text-slate-400 text-xs\">\n <Icon icon=\"search\" />\n </span>\n </div>\n </div>\n )}\n\n {/* Selection Info */}\n {hasSelection && (\n <div className=\"px-3 py-2 border-b border-slate-100 dark:border-slate-800 flex items-center justify-between\">\n <span className=\"text-xs text-slate-500 dark:text-slate-400\">\n {actualValue.length} selected\n {maxSelections && ` (max ${maxSelections})`}\n </span>\n <button\n type=\"button\"\n onClick={handleClear}\n className={`text-xs hover:underline ${colors.clearButton}`}\n >\n Clear all\n </button>\n </div>\n )}\n\n {/* Options List */}\n <div\n className=\"overflow-y-auto p-1\"\n style={{ maxHeight: maxDropdownHeight }}\n >\n {/* Filtered Options */}\n {filteredOptions.length > 0 ? (\n filteredOptions.map((opt, index) => {\n const isSelected = actualValue.includes(opt.value);\n const isHighlighted = highlightedIndex === index;\n const isMaxReached = maxSelections && actualValue.length >= maxSelections && !isSelected;\n\n return (\n <div\n key={opt.value}\n onClick={(e) => !isMaxReached && handleSelect(opt.value, e)}\n onMouseEnter={() => setHighlightedIndex(index)}\n className={`\n px-3 py-2 rounded-md cursor-pointer transition-colors\n ${isSelected ? colors.optionSelected : ''}\n ${isHighlighted && !isSelected ? currentTheme.optionHighlighted : ''}\n ${!isSelected && !isHighlighted ? currentTheme.option : ''}\n ${isMaxReached ? 'opacity-50 cursor-not-allowed' : ''}\n ${optionsClassName}\n `}\n style={optionHeight !== 'auto' ? { height: optionHeight } : {}}\n role=\"option\"\n aria-selected={isSelected}\n >\n {renderOptionContent(opt, isSelected, isHighlighted)}\n </div>\n );\n })\n ) : (\n <div className=\"px-3 py-6 text-center text-sm text-slate-500 dark:text-slate-400\">\n <Icon icon=\"inbox\" className=\"text-2xl mb-2 opacity-50\" />\n <p>{noOptionsText}</p>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n});\n\nMultiSelect.displayName = 'MultiSelect';\n\nMultiSelect.propTypes = {\n // Data\n options: PropTypes.arrayOf(PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number,\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.any.isRequired,\n icon: PropTypes.string,\n iconVariant: PropTypes.oneOf(['fas', 'far', 'fal', 'fad']),\n description: PropTypes.string,\n })\n ])),\n value: PropTypes.array,\n defaultValue: PropTypes.array,\n onChange: PropTypes.func,\n onSearch: PropTypes.func,\n valueKey: PropTypes.string,\n labelKey: PropTypes.string,\n\n // API\n api: PropTypes.string,\n apiMethod: PropTypes.oneOf(['GET', 'POST', 'PUT', 'PATCH']),\n apiHeaders: PropTypes.object,\n apiDataPath: PropTypes.string,\n\n // Configuration\n searchable: PropTypes.bool,\n clearable: PropTypes.bool,\n disabled: PropTypes.bool,\n required: PropTypes.bool,\n loading: PropTypes.bool,\n name: PropTypes.string,\n id: PropTypes.string,\n maxSelections: PropTypes.number,\n\n // Placeholder\n placeholder: PropTypes.string,\n\n // Appearance\n theme: PropTypes.oneOf(['default', 'glass', 'minimal', 'outlined', 'filled']),\n color: PropTypes.oneOf(['violet', 'blue', 'emerald', 'rose', 'amber', 'black']),\n size: PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl']),\n rounded: PropTypes.oneOf(['none', 'sm', 'md', 'lg', 'xl', '2xl', 'full']),\n fullWidth: PropTypes.bool,\n\n // Chip display\n chipDisplay: PropTypes.oneOf(['inline', 'count', 'compact']),\n maxVisibleChips: PropTypes.number,\n\n // Label & Help\n label: PropTypes.string,\n helperText: PropTypes.string,\n\n // Icons\n leftIcon: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n leftIconVariant: PropTypes.oneOf(['fas', 'far', 'fal', 'fad']),\n dropdownIcon: PropTypes.string,\n clearIcon: PropTypes.string,\n\n // Animation\n animate: PropTypes.bool,\n focusEffect: PropTypes.oneOf(['none', 'glow', 'ring', 'border']),\n\n // Customization\n className: PropTypes.string,\n labelClassName: PropTypes.string,\n optionsClassName: PropTypes.string,\n chipClassName: PropTypes.string,\n renderOption: PropTypes.func,\n renderChip: PropTypes.func,\n noOptionsText: PropTypes.string,\n optionHeight: PropTypes.string,\n maxDropdownHeight: PropTypes.string,\n style: PropTypes.object,\n};\n\nexport default MultiSelect;\n"],"names":["iconPaths","menu","x","xmark","plus","minus","check","search","filter","edit","trash","copy","download","upload","refresh","settings","cog","info","warning","error","success","question","eye","lock","unlock","envelope","mail","phone","chat","comment","bell","user","users","image","camera","video","music","play","pause","stop","file","folder","document","clipboard","calendar","clock","time","grid","list","table","columns","code","terminal","bug","database","server","cart","tag","tags","gift","circle","square","heart","star","bookmark","flag","sun","moon","cloud","lightning","bolt","desktop","home","globe","location","link","rocket","sparkles","swatchbook","palette","font","icons","compress","spinner","box","feather","github","npm","yarn","facebook","instagram","linkedin","youtube","twitch","android","telegram","figma","react","apple","Icon","_ref","icon","_ref$className","className","_ref$size","size","variant","props","_objectWithoutProperties","_excluded","sizeClasses","xs","sm","md","lg","xl","sizeClass","path","React","createElement","_extends","xmlns","viewBox","fill","stroke","strokeWidth","strokeLinecap","strokeLinejoin","concat","d","console","warn","propTypes","PropTypes","string","isRequired","oneOf","iconNames","Object","keys","Button","forwardRef","ref","children","_ref$variant","_ref$color","color","_ref$isLoading","isLoading","startIcon","endIcon","_ref$fullWidth","fullWidth","_ref$disabled","disabled","_ref$type","type","colorConfig","violet","primary","secondary","outline","ghost","ring","blue","emerald","rose","amber","black","colors","variantStyles","borderClass","cx","cy","r","displayName","node","bool","CheckboxContext","createContext","CheckboxGroup","value","_ref$defaultValue","defaultValue","onChange","_ref$orientation","orientation","label","description","isControlled","undefined","_useState2","_slicedToArray","useState","internalValue","setInternalValue","currentValues","Provider","values","childValue","isChecked","newValues","_toConsumableArray","v","disabledGrp","checked","text","bg","border","Checkbox","_ref2","_ref2$disabled","_ref2$className","style","defaultChecked","_ref2$indeterminate","indeterminate","context","useContext","isGrouped","finalSize","finalColor","finalVariant","finalDisabled","_useState4","internalChecked","setInternalChecked","includes","handleChange","e","newChecked","target","p","replace","array","func","any","object","Group","daysInMonth","year","month","Date","getDate","formatDate","date","isNaN","getTime","n","monthNames","day","getMonth","getFullYear","hours","getHours","minutes","getMinutes","ampm","timeStr","toString","padStart","isSameDay","d1","d2","WheelColumn","items","selectedValue","onSelect","wheelRef","formatValue","_ref$width","width","isProgrammaticScrollRef","active","onScroll","current","centeredIndex","scrollTop","itemHeight","arguments","length","index","Math","round","max","getCenteredIndex","clampedIndex","min","centeredItem","scrollSnapType","scrollbarWidth","msOverflowStyle","WebkitOverflowScrolling","map","item","idx","isSelected","displayValue","key","onClick","behavior","scrollTo","top","scrollWheelToIndex","setTimeout","handleItemClick","scrollSnapAlign","DateTimePicker","_ref2$type","helperText","_ref2$placeholder","placeholder","minDate","maxDate","_ref2$color","_ref2$size","_ref2$variant","_ref2$fullWidth","isOpen","setIsOpen","containerRef","useRef","yearScrollRef","hourWheelRef","minuteWheelRef","ampmWheelRef","initialViewDate","viewDate","setViewDate","_useState6","selectedDate","setSelectedDate","_useState8","viewMode","setViewMode","useEffect","handleClickOutside","event","contains","addEventListener","removeEventListener","el","querySelector","scrollIntoView","block","hourScrollTimeoutRef","minuteScrollTimeoutRef","ampmScrollTimeoutRef","isProgrammaticScrollHourRef","isProgrammaticScrollMinuteRef","isProgrammaticScrollAmPmRef","currentHours","currentMinutes","current12Hour","currentAmPm","ampmOptions","indexOf","clearTimeout","hover","today","handleTimeChange","changeType","val","safeVal","newHour","setHours","setMinutes","navigateMonth","dir","newDate","generateCalendar","firstDay","getDay","getDayOfWeek","days","prevMonthDays","i","push","remaining","calendarGrid","useMemo","months","years","currentYear","yrs","inputClasses","Fragment","role","tabIndex","cell","cellDate","isToday","now","handleDateClick","m","monthIdx","substring","y","Array","from","_","h","ap","oneOfType","instanceOf","formatBytes","bytes","decimals","dm","floor","log","parseFloat","pow","toFixed","FileUpload","_ref$buttonStyle","buttonStyle","_ref$multiple","multiple","accept","maxSize","maxFiles","_ref$label","_ref$description","onFilesChange","files","setFiles","isDragging","setIsDragging","setError","inputRef","handleDrag","useCallback","preventDefault","stopPropagation","handleDrop","droppedFiles","dataTransfer","processFiles","handleInputChange","selectedFiles","newFiles","validFiles","errors","forEach","validation","valid","name","acceptedTypes","split","t","trim","fileType","fileName","some","endsWith","startsWith","toLowerCase","validateFile","updatedFiles","Boolean","uniqueString","f","lastModified","existingKeys","Set","distinctNew","has","removeFile","handleBoxClick","_inputRef$current","click","onDragEnter","onDragLeave","onDragOver","onDrop","number","Input","_ref$placeholder","id","_ref$readOnly","readOnly","_ref$required","required","_ref$autoFocus","autoFocus","_ref$autoComplete","autoComplete","_ref$theme","theme","_ref$rounded","rounded","_ref$floatingLabel","floatingLabel","errorText","successText","leftIcon","_ref$leftIconVariant","leftIconVariant","rightIcon","_ref$rightIconVariant","rightIconVariant","iconColor","prefix","suffix","_ref$clearable","clearable","_ref$showPasswordTogg","showPasswordToggle","_ref$copyable","copyable","_ref$showCharCount","showCharCount","maxLength","_ref$animate","animate","_ref$focusEffect","focusEffect","onFocus","onBlur","onClear","onCopy","_ref$inputClassName","inputClassName","_ref$labelClassName","labelClassName","_ref$wrapperClassName","wrapperClassName","isFocused","setIsFocused","showPassword","setShowPassword","copied","setCopied","actualValue","actualRef","inputType","focus","selection","sizeConfig","input","iconPadding","left","right","roundedConfig","none","full","themeConfig","default","wrapper","glass","minimal","outlined","filled","gradient","handleCopy","_asyncToGenerator","_regenerator","_callee","_t","w","_context","navigator","writeText","a","apply","this","hasLeftContent","hasRightContent","currentSize","currentTheme","currentRounded","currentFocusEffect","glow","scale","lift","rightButtonCount","rightPadding","htmlFor","newValue","_actualRef$current","Textarea","_ref$rows","rows","_ref$textareaClassNam","textareaClassName","textareaRef","textarea","RadioContext","RadioGroup","dot","Radio","finalName","Select","_containerRef$current","_ref$options","options","onSearch","api","_ref$apiMethod","apiMethod","_ref$apiHeaders","apiHeaders","_ref$apiDataPath","apiDataPath","_ref$valueKey","valueKey","_ref$labelKey","labelKey","_ref$searchable","searchable","_ref$loading","loading","_ref$showSelectOption","showSelectOption","_ref$selectOptionText","selectOptionText","_ref$selectOptionValu","selectOptionValue","_ref$dropdownIcon","dropdownIcon","_ref$clearIcon","clearIcon","_ref$optionsClassName","optionsClassName","renderOption","renderSelectedValue","_ref$noOptionsText","noOptionsText","_ref$optionHeight","optionHeight","_ref$maxDropdownHeigh","maxDropdownHeight","searchQuery","setSearchQuery","highlightedIndex","setHighlightedIndex","_useState0","apiOptions","setApiOptions","_useState10","apiLoading","setApiLoading","_useState12","setApiError","searchInputRef","triggerRef","selectRef","optionsSource","normalizedOptions","opt","String","_original","iconVariant","filteredOptions","selectedOption","find","fetchData","response","data","paths","_iterator","_step","_data","fetch","method","headers","_objectSpread","ok","Error","status","json","_createForOfIteratorHelper","s","done","err","isArray","message","_searchInputRef$curre","handleSelect","optionValue","o","optionSelected","iconSelected","height","px","py","dropdown","option","optionHighlighted","searchInput","hasSelection","onKeyDown","prev","maxWidth","offsetWidth","maxHeight","isHighlighted","onMouseEnter","renderOptionContent","arrayOf","shape","MultiSelect","maxSelections","_ref$chipDisplay","chipDisplay","_ref$maxVisibleChips","maxVisibleChips","_ref$chipClassName","chipClassName","renderChip","selectedOptions","handleRemoveChip","handleClear","chip","checkbox","clearButton","minHeight","visibleChips","slice","remainingCount","renderChips","isMaxReached","Actions","Communication","People","Media","Development","Commerce","Misc","Brands"],"mappings":"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"}
|