@skalar-saas/design-system 0.1.67

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.
Files changed (295) hide show
  1. package/README.md +68 -0
  2. package/dist/design-system.css +1 -0
  3. package/dist/hooks/index.d.ts +1 -0
  4. package/dist/hooks/useDebounce.d.ts +7 -0
  5. package/dist/index-CVAu6nrM.cjs +15 -0
  6. package/dist/index-CVAu6nrM.cjs.map +1 -0
  7. package/dist/index-D9hMGhK3.js +6790 -0
  8. package/dist/index-D9hMGhK3.js.map +1 -0
  9. package/dist/index.d.ts +130 -0
  10. package/dist/index.js +26 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/index.mjs +11508 -0
  13. package/dist/index.mjs.map +1 -0
  14. package/dist/layout/Container/Container.d.ts +62 -0
  15. package/dist/layout/Container/index.d.ts +2 -0
  16. package/dist/layout/PanelLayout/Panel.d.ts +20 -0
  17. package/dist/layout/PanelLayout/PanelContext.d.ts +10 -0
  18. package/dist/layout/PanelLayout/PanelLayout.d.ts +28 -0
  19. package/dist/layout/PanelLayout/PanelLayout.types.d.ts +146 -0
  20. package/dist/layout/PanelLayout/PanelMain.d.ts +19 -0
  21. package/dist/layout/PanelLayout/index.d.ts +6 -0
  22. package/dist/layout/PanelLayout/panelUtils.d.ts +74 -0
  23. package/dist/layout/PanelLayout/usePanelState.d.ts +25 -0
  24. package/dist/layout/Section/Section.d.ts +20 -0
  25. package/dist/layout/Section/index.d.ts +2 -0
  26. package/dist/layout/SplitPanelLayout/SplitPanelLayout.d.ts +57 -0
  27. package/dist/layout/SplitPanelLayout/index.d.ts +2 -0
  28. package/dist/layout/constants.d.ts +348 -0
  29. package/dist/layout/index.d.ts +31 -0
  30. package/dist/shared/icons/AICommentaryIcon.d.ts +11 -0
  31. package/dist/shared/icons/AIMessage.d.ts +2 -0
  32. package/dist/shared/icons/Add2Icon.d.ts +12 -0
  33. package/dist/shared/icons/AddIcon.d.ts +7 -0
  34. package/dist/shared/icons/ArrowNarrowDownIcon.d.ts +6 -0
  35. package/dist/shared/icons/BookOutlined.d.ts +10 -0
  36. package/dist/shared/icons/Box2Icon.d.ts +6 -0
  37. package/dist/shared/icons/BoxIcon.d.ts +11 -0
  38. package/dist/shared/icons/CalendarIcon.d.ts +11 -0
  39. package/dist/shared/icons/CalendarIcon2.d.ts +12 -0
  40. package/dist/shared/icons/ChatIcon.d.ts +11 -0
  41. package/dist/shared/icons/ChevronDownIcon.d.ts +6 -0
  42. package/dist/shared/icons/ChevronUpIcon.d.ts +6 -0
  43. package/dist/shared/icons/CircleIcon.d.ts +6 -0
  44. package/dist/shared/icons/CopyIcon.d.ts +12 -0
  45. package/dist/shared/icons/DataArrowsOutlined.d.ts +10 -0
  46. package/dist/shared/icons/Edit2Icon.d.ts +12 -0
  47. package/dist/shared/icons/EyeIcon.d.ts +12 -0
  48. package/dist/shared/icons/EyeOffIcon.d.ts +12 -0
  49. package/dist/shared/icons/FilterFunnel02Icon.d.ts +6 -0
  50. package/dist/shared/icons/FlashIcon.d.ts +12 -0
  51. package/dist/shared/icons/GridIcon.d.ts +12 -0
  52. package/dist/shared/icons/InfoIcon.d.ts +12 -0
  53. package/dist/shared/icons/LayerIcon.d.ts +12 -0
  54. package/dist/shared/icons/LeftArrowIcon.d.ts +5 -0
  55. package/dist/shared/icons/MaximizeIcon.d.ts +12 -0
  56. package/dist/shared/icons/MessageProgrammingOutlined.d.ts +10 -0
  57. package/dist/shared/icons/MoreIcon.d.ts +12 -0
  58. package/dist/shared/icons/PlusCircleIcon.d.ts +6 -0
  59. package/dist/shared/icons/ProgrammingArrowsOutlined.d.ts +10 -0
  60. package/dist/shared/icons/QuestionCircle.d.ts +11 -0
  61. package/dist/shared/icons/RightArrowIcon.d.ts +5 -0
  62. package/dist/shared/icons/ShareIcon.d.ts +6 -0
  63. package/dist/shared/icons/SkalarLogo.d.ts +13 -0
  64. package/dist/shared/icons/SkalarLogoNoText.d.ts +13 -0
  65. package/dist/shared/icons/SlashIcon.d.ts +5 -0
  66. package/dist/shared/icons/SliderPointerDown.d.ts +10 -0
  67. package/dist/shared/icons/SliderPointerUp.d.ts +10 -0
  68. package/dist/shared/icons/SliderThumbIcon.d.ts +10 -0
  69. package/dist/shared/icons/StraightInfoIcon.d.ts +11 -0
  70. package/dist/shared/icons/TrashIcon.d.ts +12 -0
  71. package/dist/shared/icons/UnionIcon.d.ts +12 -0
  72. package/dist/shared/icons/UploadImageIcon.d.ts +10 -0
  73. package/dist/shared/icons/VideoPlayOutlined.d.ts +10 -0
  74. package/dist/shared/icons/XMark.d.ts +11 -0
  75. package/dist/shared/icons/XMarkAlert.d.ts +11 -0
  76. package/dist/shared/icons/index.d.ts +83 -0
  77. package/dist/shared/ui/Alert/Alert.d.ts +95 -0
  78. package/dist/shared/ui/Alert/index.d.ts +1 -0
  79. package/dist/shared/ui/AttachmentMessage/AttachmentMessage.d.ts +29 -0
  80. package/dist/shared/ui/AttachmentMessage/index.d.ts +1 -0
  81. package/dist/shared/ui/AuthActionWidget/AuthActionWidget.d.ts +18 -0
  82. package/dist/shared/ui/AuthActionWidget/index.d.ts +2 -0
  83. package/dist/shared/ui/AuthFormWidget/AuthFormWidget.d.ts +27 -0
  84. package/dist/shared/ui/AuthFormWidget/index.d.ts +2 -0
  85. package/dist/shared/ui/AuthSocialOptionsWidget/AuthSocialOptionsWidget.d.ts +25 -0
  86. package/dist/shared/ui/AuthSocialOptionsWidget/index.d.ts +2 -0
  87. package/dist/shared/ui/Avatar/Avatar.d.ts +38 -0
  88. package/dist/shared/ui/Avatar/index.d.ts +1 -0
  89. package/dist/shared/ui/AvatarGroup/AvatarGroup.d.ts +39 -0
  90. package/dist/shared/ui/AvatarGroup/index.d.ts +1 -0
  91. package/dist/shared/ui/Badge/Badge.d.ts +40 -0
  92. package/dist/shared/ui/Badge/index.d.ts +1 -0
  93. package/dist/shared/ui/BreadCrumb/BreadCrumb.d.ts +12 -0
  94. package/dist/shared/ui/BreadCrumb/index.d.ts +1 -0
  95. package/dist/shared/ui/Button/Button.d.ts +47 -0
  96. package/dist/shared/ui/Button/index.d.ts +1 -0
  97. package/dist/shared/ui/ButtonDropdown/ButtonDropdown.d.ts +53 -0
  98. package/dist/shared/ui/ButtonDropdown/index.d.ts +1 -0
  99. package/dist/shared/ui/ButtonGroup/ButtonGroup.d.ts +39 -0
  100. package/dist/shared/ui/ButtonGroup/index.d.ts +1 -0
  101. package/dist/shared/ui/Card/Card.d.ts +46 -0
  102. package/dist/shared/ui/Card/index.d.ts +2 -0
  103. package/dist/shared/ui/CardAction/CardAction.d.ts +28 -0
  104. package/dist/shared/ui/CardAction/index.d.ts +2 -0
  105. package/dist/shared/ui/ChatCollapsibleCheck/ChatCollapsibleCheck.d.ts +54 -0
  106. package/dist/shared/ui/ChatCollapsibleCheck/index.d.ts +2 -0
  107. package/dist/shared/ui/ChatCollapsibleContainer/ChatCollapsibleContainer.d.ts +32 -0
  108. package/dist/shared/ui/ChatCollapsibleContainer/index.d.ts +2 -0
  109. package/dist/shared/ui/ChatCollapsibleDialog/ChatCollapsibleDialog.d.ts +43 -0
  110. package/dist/shared/ui/ChatCollapsibleDialog/index.d.ts +2 -0
  111. package/dist/shared/ui/ChatCommandList/ChatCommandList.d.ts +78 -0
  112. package/dist/shared/ui/ChatCommandList/index.d.ts +2 -0
  113. package/dist/shared/ui/ChatCommandListItem/ChatCommandListItem.d.ts +88 -0
  114. package/dist/shared/ui/ChatCommandListItem/index.d.ts +2 -0
  115. package/dist/shared/ui/ChatHeader/ChatHeader.d.ts +38 -0
  116. package/dist/shared/ui/ChatHeader/index.d.ts +1 -0
  117. package/dist/shared/ui/ChatHistorial/ChatHistorial.d.ts +49 -0
  118. package/dist/shared/ui/ChatHistorial/index.d.ts +2 -0
  119. package/dist/shared/ui/ChatHistorialItem/ChatHistorialItem.d.ts +33 -0
  120. package/dist/shared/ui/ChatHistorialItem/index.d.ts +2 -0
  121. package/dist/shared/ui/ChatInputText/ChatInputText.d.ts +36 -0
  122. package/dist/shared/ui/ChatInputText/index.d.ts +1 -0
  123. package/dist/shared/ui/ChatMessage/ChatMessage.d.ts +27 -0
  124. package/dist/shared/ui/ChatMessage/index.d.ts +2 -0
  125. package/dist/shared/ui/ChatMessageOptions/ChatMessageOptions.d.ts +30 -0
  126. package/dist/shared/ui/ChatMessageOptions/index.d.ts +2 -0
  127. package/dist/shared/ui/ChatPanel/ChatPanel.d.ts +57 -0
  128. package/dist/shared/ui/ChatPanel/ChatPanel.types.d.ts +171 -0
  129. package/dist/shared/ui/ChatPanel/index.d.ts +2 -0
  130. package/dist/shared/ui/ChatTypingIndicator/ChatTypingIndicator.d.ts +17 -0
  131. package/dist/shared/ui/ChatTypingIndicator/index.d.ts +1 -0
  132. package/dist/shared/ui/Checkbox/Checkbox.d.ts +26 -0
  133. package/dist/shared/ui/Checkbox/index.d.ts +1 -0
  134. package/dist/shared/ui/Chip/Chip.d.ts +35 -0
  135. package/dist/shared/ui/Chip/index.d.ts +1 -0
  136. package/dist/shared/ui/ColorPalette/ColorPalette.d.ts +9 -0
  137. package/dist/shared/ui/ColumnHandler/ColumnHandler.d.ts +17 -0
  138. package/dist/shared/ui/ColumnHandler/PanelHandle.d.ts +32 -0
  139. package/dist/shared/ui/ColumnHandler/index.d.ts +4 -0
  140. package/dist/shared/ui/ComboBox/ComboBox.d.ts +69 -0
  141. package/dist/shared/ui/ComboBox/index.d.ts +1 -0
  142. package/dist/shared/ui/ContextualMenu/ContextualMenu.d.ts +47 -0
  143. package/dist/shared/ui/ContextualMenu/index.d.ts +2 -0
  144. package/dist/shared/ui/DateRangePicker/DateRangePicker.d.ts +47 -0
  145. package/dist/shared/ui/DateRangePicker/index.d.ts +1 -0
  146. package/dist/shared/ui/Divider/Divider.d.ts +8 -0
  147. package/dist/shared/ui/Divider/index.d.ts +1 -0
  148. package/dist/shared/ui/DragAndDropListItem/DragAndDropListItem.d.ts +54 -0
  149. package/dist/shared/ui/DragAndDropListItem/index.d.ts +2 -0
  150. package/dist/shared/ui/DropMenu/DropMenu.d.ts +58 -0
  151. package/dist/shared/ui/DropMenu/index.d.ts +1 -0
  152. package/dist/shared/ui/DropZone/DropZone.d.ts +47 -0
  153. package/dist/shared/ui/DropZone/index.d.ts +2 -0
  154. package/dist/shared/ui/Dropdown/Dropdown.d.ts +66 -0
  155. package/dist/shared/ui/Dropdown/index.d.ts +1 -0
  156. package/dist/shared/ui/DropdownMenu/DropdownMenu.d.ts +37 -0
  157. package/dist/shared/ui/ErrorBoundary/ErrorBoundary.d.ts +46 -0
  158. package/dist/shared/ui/ErrorBoundary/index.d.ts +2 -0
  159. package/dist/shared/ui/ErrorState/ErrorState.d.ts +51 -0
  160. package/dist/shared/ui/ErrorState/index.d.ts +2 -0
  161. package/dist/shared/ui/FloatingBar/FloatingBar.d.ts +92 -0
  162. package/dist/shared/ui/FloatingBar/index.d.ts +1 -0
  163. package/dist/shared/ui/FormFieldGroup/FormFieldGroup.d.ts +9 -0
  164. package/dist/shared/ui/FormFieldGroup/index.d.ts +2 -0
  165. package/dist/shared/ui/GridDraggableItem/GridDraggableItem.d.ts +45 -0
  166. package/dist/shared/ui/GridDraggableItem/index.d.ts +2 -0
  167. package/dist/shared/ui/Header/Header.d.ts +36 -0
  168. package/dist/shared/ui/Header/index.d.ts +2 -0
  169. package/dist/shared/ui/Header/useCalculateHeaderWidths.d.ts +31 -0
  170. package/dist/shared/ui/HeaderTabs/HeaderTabs.d.ts +36 -0
  171. package/dist/shared/ui/HeaderTabs/index.d.ts +2 -0
  172. package/dist/shared/ui/Icon/Icon.d.ts +37 -0
  173. package/dist/shared/ui/Icon/index.d.ts +1 -0
  174. package/dist/shared/ui/ImageUploader/ImageUploader.d.ts +38 -0
  175. package/dist/shared/ui/ImageUploader/index.d.ts +1 -0
  176. package/dist/shared/ui/InfoLabel/InfoLabel.d.ts +28 -0
  177. package/dist/shared/ui/InfoLabel/index.d.ts +2 -0
  178. package/dist/shared/ui/InputField/InputField.d.ts +55 -0
  179. package/dist/shared/ui/InputField/index.d.ts +1 -0
  180. package/dist/shared/ui/InputSearch/InputSearch.d.ts +44 -0
  181. package/dist/shared/ui/InputSearch/index.d.ts +1 -0
  182. package/dist/shared/ui/Kbd/Kbd.d.ts +8 -0
  183. package/dist/shared/ui/Kbd/index.d.ts +2 -0
  184. package/dist/shared/ui/LabelIcon/LabelIcon.d.ts +26 -0
  185. package/dist/shared/ui/LabelIcon/index.d.ts +2 -0
  186. package/dist/shared/ui/LabelWithIcon/LabelWithIcon.d.ts +27 -0
  187. package/dist/shared/ui/LabelWithIcon/index.d.ts +1 -0
  188. package/dist/shared/ui/LabelWithTooltip/LabelWithTooltip.d.ts +41 -0
  189. package/dist/shared/ui/LabelWithTooltip/index.d.ts +1 -0
  190. package/dist/shared/ui/Link/Link.d.ts +39 -0
  191. package/dist/shared/ui/Link/index.d.ts +1 -0
  192. package/dist/shared/ui/ListItem/ListItem.d.ts +72 -0
  193. package/dist/shared/ui/ListItem/index.d.ts +2 -0
  194. package/dist/shared/ui/Modal/Modal.d.ts +203 -0
  195. package/dist/shared/ui/Modal/index.d.ts +1 -0
  196. package/dist/shared/ui/ModuleCard/ModuleCard.d.ts +51 -0
  197. package/dist/shared/ui/ModuleCard/index.d.ts +1 -0
  198. package/dist/shared/ui/ModuleFieldItem/ModuleFieldItem.d.ts +53 -0
  199. package/dist/shared/ui/ModuleFieldItem/index.d.ts +1 -0
  200. package/dist/shared/ui/PanelHeader/PanelHeader.d.ts +37 -0
  201. package/dist/shared/ui/PanelHeader/index.d.ts +1 -0
  202. package/dist/shared/ui/PasswordResetWidget/PasswordResetWidget.d.ts +19 -0
  203. package/dist/shared/ui/PasswordResetWidget/index.d.ts +2 -0
  204. package/dist/shared/ui/ProductIcon/ProductIcon.d.ts +25 -0
  205. package/dist/shared/ui/ProductIcon/index.d.ts +1 -0
  206. package/dist/shared/ui/Progress/Progress.d.ts +29 -0
  207. package/dist/shared/ui/Progress/index.d.ts +1 -0
  208. package/dist/shared/ui/ProgressBar/ProgressBar.d.ts +21 -0
  209. package/dist/shared/ui/ProgressBar/index.d.ts +1 -0
  210. package/dist/shared/ui/ProgressCircle/ProgressCircle.d.ts +44 -0
  211. package/dist/shared/ui/ProgressCircle/index.d.ts +1 -0
  212. package/dist/shared/ui/ProgressCustomTooltip/ProgressCustomTooltip.d.ts +47 -0
  213. package/dist/shared/ui/ProgressCustomTooltip/index.d.ts +1 -0
  214. package/dist/shared/ui/ProgressTracker/ProgressTracker.d.ts +36 -0
  215. package/dist/shared/ui/ProgressTracker/index.d.ts +1 -0
  216. package/dist/shared/ui/ProjectActionCard/ProjectActionCard.d.ts +23 -0
  217. package/dist/shared/ui/ProjectActionCard/index.d.ts +2 -0
  218. package/dist/shared/ui/ProjectCard/ProjectCard.d.ts +46 -0
  219. package/dist/shared/ui/ProjectCard/index.d.ts +2 -0
  220. package/dist/shared/ui/ProjectCardPlan/ProjectCardPlan.d.ts +27 -0
  221. package/dist/shared/ui/ProjectCardPlan/index.d.ts +2 -0
  222. package/dist/shared/ui/Radio/Radio.d.ts +24 -0
  223. package/dist/shared/ui/Radio/index.d.ts +1 -0
  224. package/dist/shared/ui/RecoveryWidget/RecoveryWidget.d.ts +26 -0
  225. package/dist/shared/ui/RecoveryWidget/index.d.ts +2 -0
  226. package/dist/shared/ui/RelatedDataCard/RelatedDataCard.d.ts +47 -0
  227. package/dist/shared/ui/RelatedDataCard/index.d.ts +1 -0
  228. package/dist/shared/ui/SettingsCard/SettingsCard.d.ts +24 -0
  229. package/dist/shared/ui/SettingsCard/index.d.ts +2 -0
  230. package/dist/shared/ui/SidePanel/SidePanel.d.ts +26 -0
  231. package/dist/shared/ui/SidePanel/SidePanel.types.d.ts +27 -0
  232. package/dist/shared/ui/SidePanel/index.d.ts +2 -0
  233. package/dist/shared/ui/SupportCard/SupportCard.d.ts +19 -0
  234. package/dist/shared/ui/SupportCard/index.d.ts +2 -0
  235. package/dist/shared/ui/Switcher/Switcher.d.ts +41 -0
  236. package/dist/shared/ui/Switcher/index.d.ts +1 -0
  237. package/dist/shared/ui/Table/Table.d.ts +136 -0
  238. package/dist/shared/ui/Table/TableBody.d.ts +13 -0
  239. package/dist/shared/ui/Table/TableCell.d.ts +6 -0
  240. package/dist/shared/ui/Table/TableColumnFilter.d.ts +11 -0
  241. package/dist/shared/ui/Table/TableColumnHeader.d.ts +6 -0
  242. package/dist/shared/ui/Table/TableColumnVisibility.d.ts +7 -0
  243. package/dist/shared/ui/Table/TableContext.d.ts +31 -0
  244. package/dist/shared/ui/Table/TableEmptyState.d.ts +16 -0
  245. package/dist/shared/ui/Table/TableHeader.d.ts +5 -0
  246. package/dist/shared/ui/Table/TablePagination.d.ts +9 -0
  247. package/dist/shared/ui/Table/TableRoot.d.ts +6 -0
  248. package/dist/shared/ui/Table/TableRow.d.ts +8 -0
  249. package/dist/shared/ui/Table/configParser.d.ts +18 -0
  250. package/dist/shared/ui/Table/index.d.ts +15 -0
  251. package/dist/shared/ui/Table/mockData.d.ts +33 -0
  252. package/dist/shared/ui/Table/types.d.ts +66 -0
  253. package/dist/shared/ui/Tabs/Tabs.d.ts +59 -0
  254. package/dist/shared/ui/Tabs/index.d.ts +1 -0
  255. package/dist/shared/ui/Tag/Tag.d.ts +29 -0
  256. package/dist/shared/ui/Tag/index.d.ts +1 -0
  257. package/dist/shared/ui/TextArea/TextArea.d.ts +28 -0
  258. package/dist/shared/ui/TextArea/index.d.ts +1 -0
  259. package/dist/shared/ui/ThemeToggle/ThemeToggle.d.ts +29 -0
  260. package/dist/shared/ui/ThemeToggle/index.d.ts +1 -0
  261. package/dist/shared/ui/Toast/Toast.d.ts +54 -0
  262. package/dist/shared/ui/Toast/index.d.ts +2 -0
  263. package/dist/shared/ui/Toggle/Toggle.d.ts +24 -0
  264. package/dist/shared/ui/Toggle/index.d.ts +1 -0
  265. package/dist/shared/ui/Tooltip/Tooltip.d.ts +103 -0
  266. package/dist/shared/ui/Tooltip/index.d.ts +1 -0
  267. package/dist/shared/ui/TypesPanel/TypesPanel.d.ts +28 -0
  268. package/dist/shared/ui/TypesPanel/index.d.ts +2 -0
  269. package/dist/shared/ui/TypesPanelBodyGrid/TypesPanelBodyGrid.d.ts +45 -0
  270. package/dist/shared/ui/TypesPanelBodyGrid/index.d.ts +2 -0
  271. package/dist/shared/ui/TypesPanelBodyList/TypesPanelBodyList.d.ts +45 -0
  272. package/dist/shared/ui/TypesPanelBodyList/index.d.ts +2 -0
  273. package/dist/shared/ui/TypesPanelHeader/TypesPanelHeader.d.ts +27 -0
  274. package/dist/shared/ui/TypesPanelHeader/index.d.ts +2 -0
  275. package/dist/shared/ui/TypesPanelHeaderSearch/TypesPanelHeaderSearch.d.ts +44 -0
  276. package/dist/shared/ui/TypesPanelHeaderSearch/index.d.ts +1 -0
  277. package/dist/shared/ui/UserMenu/UserMenu.d.ts +78 -0
  278. package/dist/shared/ui/UserMenu/index.d.ts +1 -0
  279. package/dist/shared/ui/VisualComposer/VisualComposer.d.ts +36 -0
  280. package/dist/shared/ui/VisualComposer/index.d.ts +2 -0
  281. package/dist/shared/ui/WidgetBuilderItemHoverAction/WidgetBuilderItemHoverAction.d.ts +15 -0
  282. package/dist/shared/ui/WidgetBuilderItemHoverAction/index.d.ts +2 -0
  283. package/dist/shared/ui/WidgetContainer/WidgetContainer.d.ts +23 -0
  284. package/dist/shared/ui/WidgetContainer/index.d.ts +2 -0
  285. package/dist/shared/ui/WidgetSidebar/WidgetSidebar.d.ts +70 -0
  286. package/dist/shared/ui/WidgetSidebar/index.d.ts +2 -0
  287. package/dist/shared/ui/WorkspaceSettings/WorkspaceSettings.d.ts +22 -0
  288. package/dist/shared/ui/WorkspaceSettings/index.d.ts +2 -0
  289. package/dist/shared/ui/index.d.ts +1 -0
  290. package/dist/shared/ui/slider/Slider.d.ts +96 -0
  291. package/dist/shared/ui/slider/index.d.ts +2 -0
  292. package/dist/shared/utils/index.d.ts +1 -0
  293. package/dist/shared/utils/tailwind.d.ts +9 -0
  294. package/package.json +112 -0
  295. package/tailwind.preset.js +278 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../src/layout/Container/Container.tsx","../src/layout/Section/Section.tsx","../src/layout/constants.ts","../src/layout/PanelLayout/PanelContext.tsx","../src/layout/PanelLayout/panelUtils.ts","../src/layout/PanelLayout/PanelLayout.tsx","../src/shared/ui/ColumnHandler/PanelHandle.tsx","../src/layout/PanelLayout/Panel.tsx","../src/layout/PanelLayout/PanelMain.tsx","../src/layout/PanelLayout/usePanelState.ts","../src/layout/SplitPanelLayout/SplitPanelLayout.tsx","../src/shared/utils/tailwind.ts","../src/shared/icons/ChatIcon.tsx","../src/shared/icons/AICommentaryIcon.tsx","../src/shared/icons/ArrowNarrowDownIcon.tsx","../src/shared/icons/FilterFunnel02Icon.tsx","../src/shared/icons/Box2Icon.tsx","../src/shared/icons/BoxIcon.tsx","../src/shared/icons/CircleIcon.tsx","../src/shared/icons/AddIcon.tsx","../src/shared/icons/XMark.tsx","../src/shared/icons/UploadImageIcon.tsx","../src/shared/icons/InfoIcon.tsx","../src/shared/icons/LeftArrowIcon.tsx","../src/shared/icons/XMarkAlert.tsx","../src/shared/icons/StraightInfoIcon.tsx","../src/shared/icons/QuestionCircle.tsx","../src/shared/icons/BookOutlined.tsx","../src/shared/icons/MessageProgrammingOutlined.tsx","../src/shared/icons/VideoPlayOutlined.tsx","../src/shared/icons/ProgrammingArrowsOutlined.tsx","../src/shared/icons/DataArrowsOutlined.tsx","../src/shared/icons/AIMessage.tsx","../src/shared/icons/ShareIcon.tsx","../src/shared/icons/SliderThumbIcon.tsx","../src/shared/icons/SliderPointerUp.tsx","../src/shared/icons/SliderPointerDown.tsx","../src/shared/icons/SkalarLogo.tsx","../src/shared/icons/SkalarLogoNoText.tsx","../src/shared/icons/RightArrowIcon.tsx","../src/shared/icons/CalendarIcon.tsx","../src/shared/icons/EyeIcon.tsx","../src/shared/icons/EyeOffIcon.tsx","../src/shared/icons/PlusCircleIcon.tsx","../src/shared/icons/ChevronDownIcon.tsx","../src/shared/icons/ChevronUpIcon.tsx","../src/shared/icons/UnionIcon.tsx","../src/shared/icons/MoreIcon.tsx","../src/shared/icons/LayerIcon.tsx","../src/shared/icons/FlashIcon.tsx","../src/shared/icons/CalendarIcon2.tsx","../src/shared/icons/MaximizeIcon.tsx","../src/shared/icons/Edit2Icon.tsx","../src/shared/icons/CopyIcon.tsx","../src/shared/icons/TrashIcon.tsx","../src/shared/icons/SlashIcon.tsx","../src/shared/ui/Button/Button.tsx","../src/shared/ui/Alert/Alert.tsx","../src/shared/ui/Badge/Badge.tsx","../src/shared/ui/Avatar/Avatar.tsx","../src/shared/ui/AvatarGroup/AvatarGroup.tsx","../src/shared/ui/BreadCrumb/BreadCrumb.tsx","../src/shared/ui/ButtonDropdown/ButtonDropdown.tsx","../src/shared/ui/ButtonGroup/ButtonGroup.tsx","../src/shared/ui/Checkbox/Checkbox.tsx","../src/shared/ui/Link/Link.tsx","../src/shared/ui/Card/Card.tsx","../src/shared/ui/ChatCollapsibleContainer/ChatCollapsibleContainer.tsx","../src/shared/ui/Progress/Progress.tsx","../src/shared/ui/ChatCollapsibleCheck/ChatCollapsibleCheck.tsx","../src/shared/ui/ChatCollapsibleDialog/ChatCollapsibleDialog.tsx","../src/shared/ui/Tag/Tag.tsx","../src/shared/ui/ChatCommandListItem/ChatCommandListItem.tsx","../src/shared/ui/Kbd/Kbd.tsx","../src/shared/ui/ChatCommandList/ChatCommandList.tsx","../src/shared/ui/ChatHeader/ChatHeader.tsx","../src/shared/ui/Icon/Icon.tsx","../src/shared/ui/InputField/InputField.tsx","../src/shared/ui/ListItem/ListItem.tsx","../src/shared/ui/DropMenu/DropMenu.tsx","../src/shared/ui/ChatHistorialItem/ChatHistorialItem.tsx","../src/shared/ui/ChatHistorial/ChatHistorial.tsx","../src/shared/ui/ChatInputText/ChatInputText.tsx","../src/shared/ui/ChatMessage/ChatMessage.tsx","../src/shared/ui/ChatMessageOptions/ChatMessageOptions.tsx","../src/shared/ui/AttachmentMessage/AttachmentMessage.tsx","../src/shared/ui/ChatTypingIndicator/ChatTypingIndicator.tsx","../src/shared/ui/ChatPanel/ChatPanel.tsx","../src/shared/ui/Chip/Chip.tsx","../src/shared/ui/ColorPalette/ColorPalette.tsx","../src/shared/ui/ColumnHandler/ColumnHandler.tsx","../src/shared/ui/ComboBox/ComboBox.tsx","../src/shared/ui/ContextualMenu/ContextualMenu.tsx","../src/shared/ui/DragAndDropListItem/DragAndDropListItem.tsx","../src/shared/ui/Dropdown/Dropdown.tsx","../src/shared/ui/DropdownMenu/DropdownMenu.tsx","../src/shared/ui/DropZone/DropZone.tsx","../src/shared/ui/ErrorBoundary/ErrorBoundary.tsx","../src/shared/ui/ErrorState/ErrorState.tsx","../src/shared/ui/FloatingBar/FloatingBar.tsx","../src/shared/ui/GridDraggableItem/GridDraggableItem.tsx","../src/shared/ui/Header/Header.tsx","../src/shared/ui/Header/useCalculateHeaderWidths.ts","../src/shared/ui/ImageUploader/ImageUploader.tsx","../src/shared/ui/InfoLabel/InfoLabel.tsx","../src/hooks/useDebounce.ts","../src/shared/ui/InputSearch/InputSearch.tsx","../src/shared/ui/LabelWithIcon/LabelWithIcon.tsx","../src/shared/ui/Tooltip/Tooltip.tsx","../src/shared/ui/LabelWithTooltip/LabelWithTooltip.tsx","../src/shared/ui/Modal/Modal.tsx","../src/shared/ui/ProductIcon/ProductIcon.tsx","../src/shared/ui/Divider/Divider.tsx","../src/shared/ui/LabelIcon/LabelIcon.tsx","../src/shared/ui/ProjectCard/ProjectCard.tsx","../src/shared/ui/ProgressBar/ProgressBar.tsx","../src/shared/ui/ProgressCircle/ProgressCircle.tsx","../src/shared/ui/ProgressTracker/ProgressTracker.tsx","../src/shared/ui/Radio/Radio.tsx","../src/shared/ui/Switcher/Switcher.tsx","../src/shared/ui/Table/TableContext.ts","../src/shared/ui/Table/Table.tsx","../src/shared/ui/Table/TableRoot.tsx","../src/shared/ui/Table/TableRow.tsx","../src/shared/ui/Table/TableColumnHeader.tsx","../src/shared/ui/Table/TableHeader.tsx","../src/shared/ui/Table/TableCell.tsx","../src/shared/ui/Table/TableEmptyState.tsx","../src/shared/ui/Table/TableBody.tsx","../src/shared/ui/Table/TablePagination.tsx","../src/shared/ui/Table/TableColumnFilter.tsx","../src/shared/ui/Table/TableColumnVisibility.tsx","../src/shared/ui/Table/configParser.tsx","../src/shared/ui/Table/mockData.ts","../src/shared/ui/Tabs/Tabs.tsx","../src/shared/ui/HeaderTabs/HeaderTabs.tsx","../src/shared/ui/TextArea/TextArea.tsx","../src/shared/ui/ThemeToggle/ThemeToggle.tsx","../src/shared/ui/Toast/Toast.tsx","../src/shared/ui/Toggle/Toggle.tsx","../src/shared/ui/TypesPanel/TypesPanel.tsx","../src/shared/ui/TypesPanelBodyGrid/TypesPanelBodyGrid.tsx","../src/shared/ui/TypesPanelBodyList/TypesPanelBodyList.tsx","../src/shared/ui/TypesPanelHeader/TypesPanelHeader.tsx","../src/shared/ui/TypesPanelHeaderSearch/TypesPanelHeaderSearch.tsx","../src/shared/ui/PanelHeader/PanelHeader.tsx","../src/shared/ui/UserMenu/UserMenu.tsx","../src/shared/ui/DateRangePicker/DateRangePicker.tsx","../src/shared/ui/CardAction/CardAction.tsx","../src/shared/ui/ProjectCardPlan/ProjectCardPlan.tsx","../src/shared/ui/WorkspaceSettings/WorkspaceSettings.tsx","../src/shared/ui/SupportCard/SupportCard.tsx","../src/shared/ui/WidgetBuilderItemHoverAction/WidgetBuilderItemHoverAction.tsx","../src/shared/ui/ProjectActionCard/ProjectActionCard.tsx","../src/shared/ui/SettingsCard/SettingsCard.tsx","../src/shared/icons/Add2Icon.tsx","../src/shared/icons/GridIcon.tsx","../src/shared/ui/FormFieldGroup/FormFieldGroup.tsx","../src/shared/ui/VisualComposer/VisualComposer.tsx","../src/shared/ui/WidgetContainer/WidgetContainer.tsx","../src/shared/ui/AuthFormWidget/AuthFormWidget.tsx","../src/shared/ui/RecoveryWidget/RecoveryWidget.tsx","../src/shared/ui/PasswordResetWidget/PasswordResetWidget.tsx","../src/shared/ui/AuthActionWidget/AuthActionWidget.tsx","../src/shared/ui/AuthSocialOptionsWidget/AuthSocialOptionsWidget.tsx","../src/shared/ui/ModuleCard/ModuleCard.tsx","../src/shared/ui/ModuleFieldItem/ModuleFieldItem.tsx","../src/shared/ui/RelatedDataCard/RelatedDataCard.tsx","../src/shared/ui/WidgetSidebar/WidgetSidebar.tsx"],"sourcesContent":["\"use client\";\n\nimport React from \"react\";\nimport { clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nimport type { ContainerSize } from \"../constants\";\n\n// =============================================\n// TYPES\n// =============================================\n\n/**\n * Valid HTML elements that Container can render as.\n */\nexport type ContainerElement = \"div\" | \"main\" | \"section\" | \"article\" | \"aside\" | \"header\" | \"footer\";\n\n/**\n * Container padding variants for different use cases.\n */\nexport type ContainerPadding = \"none\" | \"responsive\" | \"fixed\";\n\n/**\n * Props for the Container component.\n */\nexport interface ContainerProps extends React.HTMLAttributes<HTMLElement> {\n /**\n * Maximum width variant of the container.\n * @default \"default\"\n */\n size?: ContainerSize;\n\n /**\n * Whether to center the container horizontally.\n * @default true\n */\n centered?: boolean;\n\n /**\n * Horizontal padding behavior.\n * @default \"responsive\"\n */\n padding?: ContainerPadding;\n\n /**\n * The HTML element to render.\n * @default \"div\"\n */\n as?: ContainerElement;\n\n /**\n * Content to render inside the container.\n */\n children: React.ReactNode;\n}\n\n// =============================================\n// STYLE MAPPINGS\n// =============================================\n\nconst SIZE_CLASSES: Record<ContainerSize, string> = {\n default: \"max-w-container\",\n narrow: \"max-w-container-narrow\",\n medium: \"max-w-container-medium\",\n wide: \"max-w-container-wide\",\n full: \"max-w-none\",\n};\n\nconst PADDING_CLASSES: Record<ContainerPadding, string> = {\n none: \"\",\n responsive: \"px-container-mobile md:px-container-tablet lg:px-container-desktop\",\n fixed: \"px-container-desktop\",\n};\n\n// =============================================\n// COMPONENT\n// =============================================\n\n/**\n * A responsive container component for constraining content width.\n */\nconst ContainerBase = React.forwardRef<HTMLElement, ContainerProps>(\n (\n {\n size = \"default\",\n centered = true,\n padding = \"responsive\",\n as: Element = \"div\",\n className,\n children,\n ...props\n },\n ref\n ) => {\n const containerClasses = twMerge(\n clsx(\n \"w-full\",\n SIZE_CLASSES[size],\n centered && \"mx-auto\",\n PADDING_CLASSES[padding],\n className\n )\n );\n\n return (\n <Element\n ref={ref as React.Ref<HTMLDivElement>}\n className={containerClasses}\n {...props}\n >\n {children}\n </Element>\n );\n }\n);\n\nContainerBase.displayName = \"Container\";\n\n// =============================================\n// COMPOUND COMPONENTS\n// =============================================\n\nexport interface ContainerHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n}\n\nconst ContainerHeader = React.forwardRef<HTMLDivElement, ContainerHeaderProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={twMerge(\n clsx(\"flex items-center justify-between\", \"py-6 md:py-8\", className)\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nContainerHeader.displayName = \"Container.Header\";\n\nexport interface ContainerContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n}\n\nconst ContainerContent = React.forwardRef<HTMLDivElement, ContainerContentProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={twMerge(clsx(\"flex-1\", className))}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nContainerContent.displayName = \"Container.Content\";\n\nexport interface ContainerFooterProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n}\n\nconst ContainerFooter = React.forwardRef<HTMLDivElement, ContainerFooterProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={twMerge(\n clsx(\n \"flex items-center justify-between\",\n \"py-6 md:py-8\",\n \"border-t border-surface-3\",\n className\n )\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nContainerFooter.displayName = \"Container.Footer\";\n\n// =============================================\n// COMPOUND COMPONENT ATTACHMENT\n// =============================================\n\ntype ContainerComponent = typeof ContainerBase & {\n Header: typeof ContainerHeader;\n Content: typeof ContainerContent;\n Footer: typeof ContainerFooter;\n};\n\nconst ContainerWithCompounds = ContainerBase as ContainerComponent;\nContainerWithCompounds.Header = ContainerHeader;\nContainerWithCompounds.Content = ContainerContent;\nContainerWithCompounds.Footer = ContainerFooter;\n\nexport { ContainerWithCompounds as Container };\n","\"use client\";\n\nimport React from \"react\";\nimport { clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nimport type { LayoutSpacingKey } from \"../constants\";\n\n// =============================================\n// TYPES\n// =============================================\n\nexport type SectionElement = \"div\" | \"section\" | \"article\" | \"aside\";\nexport type SectionBackground = \"transparent\" | \"surface-bg\" | \"surface-1\" | \"surface-2\" | \"white\";\n\nexport interface SectionProps extends React.HTMLAttributes<HTMLElement> {\n spacing?: LayoutSpacingKey;\n background?: SectionBackground;\n bordered?: boolean;\n as?: SectionElement;\n children: React.ReactNode;\n}\n\n// =============================================\n// STYLE MAPPINGS\n// =============================================\n\nconst SPACING_CLASSES: Record<LayoutSpacingKey, string> = {\n none: \"py-0\",\n xs: \"py-2 md:py-4\",\n sm: \"py-4 md:py-6\",\n md: \"py-6 md:py-8\",\n lg: \"py-8 md:py-10\",\n xl: \"py-10 md:py-12 lg:py-14\",\n \"2xl\": \"py-12 md:py-14 lg:py-15\",\n};\n\nconst BACKGROUND_CLASSES: Record<SectionBackground, string> = {\n transparent: \"bg-transparent\",\n \"surface-bg\": \"bg-surface-bg\",\n \"surface-1\": \"bg-surface-1\",\n \"surface-2\": \"bg-surface-2\",\n white: \"bg-white\",\n};\n\n// =============================================\n// COMPONENT\n// =============================================\n\nexport const Section = React.forwardRef<HTMLDivElement, SectionProps>(\n (\n {\n spacing = \"lg\",\n background = \"transparent\",\n bordered = false,\n as: Element = \"section\",\n className,\n children,\n ...props\n },\n ref\n ) => {\n const sectionClasses = twMerge(\n clsx(\n \"w-full\",\n SPACING_CLASSES[spacing],\n BACKGROUND_CLASSES[background],\n bordered && \"border-b border-surface-3\",\n className\n )\n );\n\n return (\n <Element\n ref={ref as React.Ref<HTMLDivElement>}\n className={sectionClasses}\n {...props}\n >\n {children}\n </Element>\n );\n }\n);\n\nSection.displayName = \"Section\";\n\n// =============================================\n// SECTION VARIANTS\n// =============================================\n\nexport interface SectionHeroProps extends Omit<SectionProps, \"spacing\" | \"background\"> {\n spacing?: LayoutSpacingKey;\n}\n\nexport const SectionHero = React.forwardRef<HTMLDivElement, SectionHeroProps>(\n ({ spacing = \"2xl\", ...props }, ref) => {\n return <Section ref={ref} spacing={spacing} {...props} />;\n }\n);\n\nSectionHero.displayName = \"SectionHero\";\n\nexport interface SectionFeaturesProps extends Omit<SectionProps, \"background\"> {\n background?: SectionBackground;\n}\n\nexport const SectionFeatures = React.forwardRef<HTMLDivElement, SectionFeaturesProps>(\n ({ background = \"surface-1\", ...props }, ref) => {\n return <Section ref={ref} background={background} {...props} />;\n }\n);\n\nSectionFeatures.displayName = \"SectionFeatures\";\n","/**\n * =============================================\n * SKALAR DESIGN SYSTEM - LAYOUT CONSTANTS\n * =============================================\n *\n * Centralized layout values for consistent spacing, sizing, and breakpoints\n * across all Skalar applications. Based on industry standards (Stripe, Vercel, Linear).\n *\n * @example\n * // Import in TypeScript/JavaScript\n * import { BREAKPOINTS, CONTAINER, LAYOUT } from '@skalar-app/design-system';\n *\n * // Use in logic\n * if (windowWidth >= BREAKPOINTS.lg) { ... }\n *\n * @example\n * // Use CSS variables in Tailwind\n * <div className=\"max-w-container mx-auto px-container-mobile md:px-container-tablet lg:px-container-desktop\">\n *\n * @version 1.0.0\n * @since 2025-11-28\n */\n\n// =============================================\n// BREAKPOINTS\n// =============================================\n\n/**\n * Responsive breakpoints in pixels.\n * These values align with common device widths and Tailwind CSS conventions.\n *\n * Usage in CSS/Tailwind:\n * - sm: Mobile landscape and up\n * - md: Tablet and up\n * - lg: Desktop and up\n * - xl: Large desktop and up\n * - 2xl: Extra large desktop (container max-width)\n * - 3xl: Ultrawide monitors\n */\nexport const BREAKPOINTS = {\n /** Mobile landscape - 640px */\n sm: 640,\n /** Tablet - 768px */\n md: 768,\n /** Desktop small - 1024px */\n lg: 1024,\n /** Desktop - 1280px */\n xl: 1280,\n /** Desktop large / Default container max-width - 1400px */\n '2xl': 1400,\n /** Ultrawide monitors - 1600px */\n '3xl': 1600,\n} as const;\n\n/**\n * Breakpoint keys type for type-safe breakpoint references.\n */\nexport type BreakpointKey = keyof typeof BREAKPOINTS;\n\n/**\n * Breakpoint values in pixels.\n */\nexport type BreakpointValue = (typeof BREAKPOINTS)[BreakpointKey];\n\n// =============================================\n// CONTAINER SIZES\n// =============================================\n\n/**\n * Container max-width values in pixels.\n * Use these to constrain content width for optimal readability and layout.\n *\n * Guidelines:\n * - default (1400px): Main dashboard content, cards grid, general pages\n * - narrow (896px): Forms, settings pages, single-column content\n * - medium (1152px): Mixed content, documentation\n * - wide (1600px): Data tables, complex grids, admin panels\n * - full: No max-width constraint\n */\nexport const CONTAINER = {\n /** Default container max-width for dashboard content - 1400px */\n default: 1400,\n /** Narrow container for forms and settings - 896px (56rem) */\n narrow: 896,\n /** Medium container for mixed content - 1152px (72rem) */\n medium: 1152,\n /** Wide container for tables and grids - 1600px (100rem) */\n wide: 1600,\n} as const;\n\n/**\n * Container size variants.\n */\nexport type ContainerSize = keyof typeof CONTAINER | 'full';\n\n/**\n * Container values in pixels.\n */\nexport type ContainerValue = (typeof CONTAINER)[keyof typeof CONTAINER];\n\n// =============================================\n// CONTAINER PADDING\n// =============================================\n\n/**\n * Responsive container padding values in pixels.\n * Applied horizontally (left/right) to maintain content breathing room.\n *\n * These values scale up with screen size to maintain proportional whitespace.\n */\nexport const CONTAINER_PADDING = {\n /** Mobile devices: 16px (1rem) */\n mobile: 16,\n /** Tablet devices: 24px (1.5rem) */\n tablet: 24,\n /** Desktop devices: 32px (2rem) */\n desktop: 32,\n /** Large desktop devices: 48px (3rem) */\n desktopLarge: 48,\n} as const;\n\n/**\n * Container padding keys type.\n */\nexport type ContainerPaddingKey = keyof typeof CONTAINER_PADDING;\n\n// =============================================\n// SIDEBAR\n// =============================================\n\n/**\n * Sidebar dimension values in pixels.\n * Use for navigation sidebars and panels.\n */\nexport const SIDEBAR = {\n /** Expanded sidebar width - 280px */\n width: 280,\n /** Collapsed/icon-only sidebar width - 64px */\n collapsedWidth: 64,\n /** Settings/navigation sidebar width - 240px */\n navigationWidth: 240,\n} as const;\n\n/**\n * Sidebar dimension keys type.\n */\nexport type SidebarKey = keyof typeof SIDEBAR;\n\n// =============================================\n// NAVBAR\n// =============================================\n\n/**\n * Navbar dimension values in pixels.\n * Used for sticky headers and calculating content offsets.\n */\nexport const NAVBAR = {\n /** Header section height - 60px */\n headerHeight: 60,\n /** Tabs/navigation section height - 48px */\n tabsHeight: 48,\n /** Total navbar height (header + tabs) - 108px */\n totalHeight: 108,\n} as const;\n\n/**\n * Navbar dimension keys type.\n */\nexport type NavbarKey = keyof typeof NAVBAR;\n\n// =============================================\n// SPACING SCALE\n// =============================================\n\n/**\n * Common spacing values for gaps and margins in layout contexts.\n * These complement the design system's spacing tokens for layout-specific use.\n */\nexport const LAYOUT_SPACING = {\n /** No spacing - 0px */\n none: 0,\n /** Extra small - 8px */\n xs: 8,\n /** Small - 16px */\n sm: 16,\n /** Medium - 24px */\n md: 24,\n /** Large - 32px */\n lg: 32,\n /** Extra large - 48px */\n xl: 48,\n /** 2x Extra large - 64px */\n '2xl': 64,\n} as const;\n\n/**\n * Layout spacing keys type.\n */\nexport type LayoutSpacingKey = keyof typeof LAYOUT_SPACING;\n\n// =============================================\n// CSS VARIABLE NAMES\n// =============================================\n\n/**\n * CSS custom property names used in the layout system.\n * Reference these when creating custom styles or debugging.\n *\n * @example\n * // In custom CSS\n * .my-element {\n * max-width: var(--layout-container-max-width);\n * }\n */\nexport const CSS_VARIABLES = {\n // Container\n containerMaxWidth: '--layout-container-max-width',\n containerNarrow: '--layout-container-narrow',\n containerMedium: '--layout-container-medium',\n containerWide: '--layout-container-wide',\n\n // Container Padding\n containerPaddingMobile: '--layout-container-padding-mobile',\n containerPaddingTablet: '--layout-container-padding-tablet',\n containerPaddingDesktop: '--layout-container-padding-desktop',\n containerPaddingDesktopLg: '--layout-container-padding-desktop-lg',\n\n // Sidebar\n sidebarWidth: '--layout-sidebar-width',\n sidebarCollapsed: '--layout-sidebar-collapsed',\n sidebarNavigation: '--layout-sidebar-navigation',\n\n // Navbar\n navbarHeaderHeight: '--layout-navbar-header-height',\n navbarTabsHeight: '--layout-navbar-tabs-height',\n navbarTotalHeight: '--layout-navbar-total-height',\n} as const;\n\n/**\n * CSS variable names type.\n */\nexport type CSSVariableName = (typeof CSS_VARIABLES)[keyof typeof CSS_VARIABLES];\n\n// =============================================\n// AGGREGATE LAYOUT OBJECT\n// =============================================\n\n/**\n * Complete layout configuration object.\n * Provides a single import for all layout-related constants.\n *\n * @example\n * import { LAYOUT } from '@skalar-app/design-system';\n *\n * const containerWidth = LAYOUT.container.default;\n * const isMobile = windowWidth < LAYOUT.breakpoints.md;\n */\nexport const LAYOUT = {\n breakpoints: BREAKPOINTS,\n container: CONTAINER,\n containerPadding: CONTAINER_PADDING,\n sidebar: SIDEBAR,\n navbar: NAVBAR,\n spacing: LAYOUT_SPACING,\n cssVariables: CSS_VARIABLES,\n} as const;\n\n/**\n * Complete layout configuration type.\n */\nexport type Layout = typeof LAYOUT;\n\n// =============================================\n// UTILITY FUNCTIONS\n// =============================================\n\n/**\n * Converts a pixel value to rem units.\n * Uses 16px as the base font size.\n *\n * @param px - The pixel value to convert\n * @returns The rem value as a string (e.g., \"1.5rem\")\n *\n * @example\n * pxToRem(24) // \"1.5rem\"\n * pxToRem(CONTAINER.default) // \"87.5rem\"\n */\nexport function pxToRem(px: number): string {\n return `${px / 16}rem`;\n}\n\n/**\n * Converts a pixel value to a CSS pixel string.\n *\n * @param px - The pixel value\n * @returns The pixel value as a CSS string (e.g., \"24px\")\n *\n * @example\n * pxToCss(24) // \"24px\"\n */\nexport function pxToCss(px: number): string {\n return `${px}px`;\n}\n\n/**\n * Creates a media query string for a given breakpoint.\n *\n * @param breakpoint - The breakpoint key or pixel value\n * @param type - The type of media query ('min' or 'max')\n * @returns The media query string\n *\n * @example\n * createMediaQuery('md') // \"(min-width: 768px)\"\n * createMediaQuery('lg', 'max') // \"(max-width: 1023px)\"\n * createMediaQuery(1200) // \"(min-width: 1200px)\"\n */\nexport function createMediaQuery(\n breakpoint: BreakpointKey | number,\n type: 'min' | 'max' = 'min'\n): string {\n const value = typeof breakpoint === 'number' ? breakpoint : BREAKPOINTS[breakpoint];\n const adjustedValue = type === 'max' ? value - 1 : value;\n return `(${type}-width: ${adjustedValue}px)`;\n}\n\n/**\n * Checks if a window width matches a breakpoint range.\n *\n * @param width - The window width in pixels\n * @param breakpoint - The breakpoint to check against\n * @param comparison - How to compare ('gte' for >=, 'lte' for <=, 'eq' for exact range)\n * @returns Whether the width matches the breakpoint criteria\n *\n * @example\n * matchesBreakpoint(800, 'md', 'gte') // true (800 >= 768)\n * matchesBreakpoint(600, 'md', 'lte') // true (600 < 768)\n */\nexport function matchesBreakpoint(\n width: number,\n breakpoint: BreakpointKey,\n comparison: 'gte' | 'lte' = 'gte'\n): boolean {\n const breakpointValue = BREAKPOINTS[breakpoint];\n return comparison === 'gte' ? width >= breakpointValue : width < breakpointValue;\n}\n\n/**\n * Gets the current breakpoint key based on window width.\n *\n * @param width - The window width in pixels\n * @returns The current breakpoint key\n *\n * @example\n * getCurrentBreakpoint(800) // 'md'\n * getCurrentBreakpoint(1500) // '2xl'\n */\nexport function getCurrentBreakpoint(width: number): BreakpointKey {\n const breakpointEntries = Object.entries(BREAKPOINTS) as [BreakpointKey, number][];\n const sortedBreakpoints = breakpointEntries.sort((a, b) => b[1] - a[1]);\n\n for (const [key, value] of sortedBreakpoints) {\n if (width >= value) {\n return key;\n }\n }\n\n return 'sm';\n}\n","'use client';\n\nimport { createContext, useContext } from 'react';\nimport type { PanelContextValue } from './PanelLayout.types';\n\n/**\n * Context for sharing panel state and callbacks between PanelLayout and Panel components\n */\nexport const PanelContext = createContext<PanelContextValue | null>(null);\n\n/**\n * Hook to access the panel context\n * @throws Error if used outside of PanelLayout\n */\nexport function usePanelContext(): PanelContextValue {\n const context = useContext(PanelContext);\n\n if (!context) {\n throw new Error('usePanelContext must be used within a PanelLayout');\n }\n\n return context;\n}\n","import type { PanelSide, PanelsState, PanelState, PanelConfig } from './PanelLayout.types';\n\n/**\n * Default values for panel calculations\n */\nexport const PANEL_DEFAULTS = {\n minWidth: 200,\n maxWidthPercent: 50,\n minCentralWidth: 150,\n /** Minimum percentage for central content (used for space calculations) */\n minCentralPercent: 10,\n /** Minimum percentage for close zone (panel will show close indicator) */\n closeZoneMin: 10,\n /** Maximum percentage for close zone */\n closeZoneMax: 15,\n /** Minimum width to snap to if released outside close zone but below this */\n snapMinWidth: 15,\n /** Animation duration for panel exit in ms */\n exitAnimationDuration: 100,\n} as const;\n\n/**\n * Check if a width percentage is in the close zone\n */\nexport function isInCloseZone(widthPercent: number): boolean {\n return widthPercent >= PANEL_DEFAULTS.closeZoneMin && widthPercent <= PANEL_DEFAULTS.closeZoneMax;\n}\n\n/**\n * Get the snapped width (minimum width if below threshold, otherwise original)\n */\nexport function getSnappedWidth(widthPercent: number): number {\n if (widthPercent < PANEL_DEFAULTS.snapMinWidth) {\n return PANEL_DEFAULTS.snapMinWidth;\n }\n return widthPercent;\n}\n\n/**\n * Calculates the percentage width for a panel based on its desired pixel width\n * and the current viewport width.\n *\n * @param desiredWidthPx - The desired width of the panel in pixels\n * @param viewportWidth - The current viewport width in pixels\n * @param otherPanelsWidthPx - Total width of other panels on the same side in pixels\n * @param minCentralWidthPx - Minimum width the central content must maintain\n * @returns The calculated percentage width for the panel\n */\nexport function calculatePanelPercentage(\n desiredWidthPx: number,\n viewportWidth: number,\n otherPanelsWidthPx: number = 0,\n minCentralWidthPx: number = PANEL_DEFAULTS.minCentralWidth\n): number {\n // Calculate maximum width this panel can have while respecting central content minimum\n const maxPanelWidth = viewportWidth - minCentralWidthPx - otherPanelsWidthPx;\n\n // Use the smaller of desired width or maximum allowed width\n const actualWidthPx = Math.min(desiredWidthPx, maxPanelWidth);\n\n // Convert to percentage of viewport\n const percentage = (actualWidthPx / viewportWidth) * 100;\n\n // Ensure percentage is reasonable (between 10% and max calculated)\n return Math.max(10, Math.min(percentage, PANEL_DEFAULTS.maxWidthPercent));\n}\n\n/**\n * Calculates the panel width during a drag/resize operation.\n *\n * @param side - Which panel is being resized ('left' or 'right')\n * @param mouseX - Current mouse X position relative to container\n * @param containerWidth - Current container width\n * @param oppositeSideWidthPercent - Total width percentage of panels on opposite side\n * @param minCentralWidthPx - Minimum width the central content must maintain (in px, for backwards compat)\n * @param externalPanelsWidthPercent - Width percentage of panels \"more external\" on same side\n * @param internalPanelsWidthPercent - Width percentage of panels \"more internal\" on same side (not used for max calc, resizePanel handles redistribution)\n * @returns The calculated percentage width based on mouse position\n */\nexport function calculateDraggedPanelPercentage(\n side: PanelSide,\n mouseX: number,\n containerWidth: number,\n oppositeSideWidthPercent: number = 0,\n minCentralWidthPx: number = PANEL_DEFAULTS.minCentralWidth,\n externalPanelsWidthPercent: number = 0,\n _internalPanelsWidthPercent: number = 0 // Kept for backwards compat, not used\n): number {\n // Convert panel widths to pixels\n const externalPanelsWidthPx = (externalPanelsWidthPercent / 100) * containerWidth;\n\n // Calculate the raw width based on mouse position\n // For left panels: width = mouseX - externalPanelsWidth (from end of external panels to mouse)\n // For right panels: width = containerWidth - mouseX - externalPanelsWidth (from mouse to start of external panels)\n let rawWidthPx: number;\n if (side === 'left') {\n rawWidthPx = mouseX - externalPanelsWidthPx;\n } else {\n rawWidthPx = containerWidth - mouseX - externalPanelsWidthPx;\n }\n\n // Convert to percentage\n const rawPercentage = (rawWidthPx / containerWidth) * 100;\n\n // Convert minCentralWidth from pixels to percentage\n const minCentralPercent = (minCentralWidthPx / containerWidth) * 100;\n\n // Calculate maximum percentage - only limited by opposite side and central minimum\n // Internal panels on same side are NOT included because resizePanel will handle redistribution\n const maxPercentage = 100 - minCentralPercent - oppositeSideWidthPercent - externalPanelsWidthPercent;\n\n // Return percentage capped by constraints (min closeZoneMin, max calculated)\n return Math.max(PANEL_DEFAULTS.closeZoneMin, Math.min(rawPercentage, maxPercentage));\n}\n\n/**\n * Get total width of panels on a specific side\n */\nexport function getTotalSideWidth(panels: PanelState[]): number {\n return panels\n .filter(p => p.open)\n .reduce((total, p) => total + p.width, 0);\n}\n\n/**\n * Get total width of all open panels\n */\nexport function getTotalPanelsWidth(state: PanelsState): number {\n return getTotalSideWidth(state.left) + getTotalSideWidth(state.right);\n}\n\n/**\n * Find a panel by id in the panels state\n */\nexport function findPanelById(state: PanelsState, id: string): { panel: PanelState; side: PanelSide } | undefined {\n const leftPanel = state.left.find(p => p.id === id);\n if (leftPanel) return { panel: leftPanel, side: 'left' };\n\n const rightPanel = state.right.find(p => p.id === id);\n if (rightPanel) return { panel: rightPanel, side: 'right' };\n\n return undefined;\n}\n\n/**\n * Calculate the width of the central content area\n */\nexport function getCentralWidth(state: PanelsState): number {\n return 100 - getTotalPanelsWidth(state);\n}\n\n/**\n * Initialize panels state from config\n */\nexport function initializePanelsState(\n config: PanelConfig[],\n viewportWidth: number = typeof window !== 'undefined' ? window.innerWidth : 1920\n): PanelsState {\n const state: PanelsState = { left: [], right: [] };\n\n config.forEach(cfg => {\n const otherSameSide = config.filter(c => c.side === cfg.side && c.id !== cfg.id);\n const otherWidthPx = otherSameSide.reduce((sum, c) => sum + c.defaultWidth, 0);\n\n const width = calculatePanelPercentage(\n cfg.defaultWidth,\n viewportWidth,\n otherWidthPx\n );\n\n const panelState: PanelState = {\n id: cfg.id,\n open: true,\n width,\n };\n\n state[cfg.side].push(panelState);\n });\n\n return state;\n}\n","'use client';\n\nimport React, { useCallback, useMemo, useState, useRef } from 'react';\nimport { clsx } from 'clsx';\nimport { PanelContext } from './PanelContext';\nimport { findPanelById, PANEL_DEFAULTS } from './panelUtils';\nimport type { PanelLayoutProps, PanelContextValue, PanelState } from './PanelLayout.types';\n\n/**\n * PanelLayout - Container for a flexible panel-based layout\n *\n * Organizes Panel and PanelMain children into a responsive layout where:\n * - Left panels stack on the left side\n * - Right panels stack on the right side\n * - PanelMain fills the remaining central space\n *\n * @example\n * ```tsx\n * <PanelLayout panels={panelsState} onPanelResize={handleResize}>\n * <Panel id=\"sidebar\" side=\"left\">\n * <Sidebar />\n * </Panel>\n *\n * <PanelMain>\n * <MainContent />\n * </PanelMain>\n *\n * <Panel id=\"chat\" side=\"right\">\n * <ChatPanel />\n * </Panel>\n * </PanelLayout>\n * ```\n */\nexport const PanelLayout = React.memo<PanelLayoutProps>(({\n children,\n panels,\n onPanelResize,\n onCloseZoneChange,\n onPanelClose,\n minCentralWidth = PANEL_DEFAULTS.minCentralWidth,\n className,\n}) => {\n const [resizingPanelId, setResizingPanelId] = useState<string | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Callbacks for resize operations\n const handleResizeStart = useCallback((id: string) => {\n setResizingPanelId(id);\n }, []);\n\n const handleResize = useCallback((id: string, width: number) => {\n onPanelResize(id, width);\n }, [onPanelResize]);\n\n const handleResizeEnd = useCallback((id: string, shouldClose: boolean) => {\n setResizingPanelId(null);\n if (shouldClose && onPanelClose) {\n onPanelClose(id);\n }\n }, [onPanelClose]);\n\n const handleCloseZoneChange = useCallback((id: string, inCloseZone: boolean) => {\n if (onCloseZoneChange) {\n onCloseZoneChange(id, inCloseZone);\n }\n }, [onCloseZoneChange]);\n\n // Get panel state by id\n const getPanelState = useCallback((id: string): PanelState | undefined => {\n const result = findPanelById(panels, id);\n if (!result) return undefined;\n\n // Add isResizing state\n return {\n ...result.panel,\n isResizing: resizingPanelId === id,\n };\n }, [panels, resizingPanelId]);\n\n // Context value\n const contextValue = useMemo<PanelContextValue>(() => ({\n panels,\n onResizeStart: handleResizeStart,\n onResize: handleResize,\n onResizeEnd: handleResizeEnd,\n onCloseZoneChange: handleCloseZoneChange,\n getPanelState,\n minCentralWidth,\n containerRef,\n }), [panels, handleResizeStart, handleResize, handleResizeEnd, handleCloseZoneChange, getPanelState, minCentralWidth]);\n\n // Separate children by type\n const { leftPanels, rightPanels, mainContent } = useMemo(() => {\n const left: React.ReactNode[] = [];\n const right: React.ReactNode[] = [];\n let main: React.ReactNode = null;\n\n React.Children.forEach(children, (child) => {\n if (!React.isValidElement(child)) return;\n\n // Check if it's PanelMain\n if (child.type && (child.type as React.ComponentType).displayName === 'PanelMain') {\n main = child;\n return;\n }\n\n // Check if it's Panel\n if (child.type && (child.type as React.ComponentType).displayName === 'Panel') {\n const panelProps = child.props as { side?: 'left' | 'right' };\n if (panelProps.side === 'left') {\n left.push(child);\n } else if (panelProps.side === 'right') {\n right.push(child);\n }\n }\n });\n\n return { leftPanels: left, rightPanels: right, mainContent: main };\n }, [children]);\n\n const isResizing = resizingPanelId !== null;\n\n return (\n <PanelContext.Provider value={contextValue}>\n <div\n ref={containerRef}\n className={clsx(\n 'flex h-full w-full overflow-hidden',\n 'transition-all duration-100 ease-out',\n isResizing && 'select-none',\n className\n )}\n data-panel-layout\n data-resizing={isResizing}\n >\n {/* Left panels */}\n {leftPanels}\n\n {/* Main content */}\n {mainContent}\n\n {/* Right panels */}\n {rightPanels}\n </div>\n </PanelContext.Provider>\n );\n});\n\nPanelLayout.displayName = 'PanelLayout';\n","\"use client\";\n\nimport React from 'react';\nimport { clsx } from 'clsx';\n\nexport interface PanelHandleProps {\n /**\n * Total height of the border with handle\n * @default 200\n */\n height?: number;\n /**\n * Whether the handle is on the left or right side of the panel\n * For left panels, handle protrudes to the right\n * For right panels, handle protrudes to the left\n * @default 'right'\n */\n side?: 'left' | 'right';\n /**\n * Fill color for the handle (should match panel background)\n * Accepts CSS color value or CSS variable\n * @default 'var(--surface-1)'\n */\n fillColor?: string;\n /**\n * Additional CSS classes\n */\n className?: string;\n}\n\n/**\n * PanelHandle - A panel border with integrated resize handle\n *\n * Creates a vertical border line with a small pill-shaped protrusion\n * in the center where the drag indicator (3 dots) sits.\n * The border and handle are ONE seamless piece.\n */\nexport const PanelHandle = ({\n height = 200,\n side = 'right',\n fillColor = 'var(--surface-1)',\n className,\n}: PanelHandleProps) => {\n // Dimensions\n const pillWidth = 8; // How much the pill protrudes\n const pillHeight = 48; // Height of the pill\n const pillRadius = 4; // Border radius of pill ends\n const svgWidth = pillWidth + 1; // +1 for the border line\n\n // Calculate vertical center\n const pillStartY = (height - pillHeight) / 2;\n const pillEndY = pillStartY + pillHeight;\n\n // For 'right' side (left panel): pill goes to the right, border on left\n // For 'left' side (right panel): pill goes to the left, border on right\n const isRightSide = side === 'right';\n const borderX = isRightSide ? 0.5 : svgWidth - 0.5;\n const pillX = isRightSide ? svgWidth - 0.5 : 0.5;\n\n // Build path: vertical line with a pill bump in the middle\n const path = isRightSide\n ? `\n M ${borderX} 0\n L ${borderX} ${pillStartY}\n Q ${borderX} ${pillStartY + pillRadius}, ${borderX + pillRadius} ${pillStartY + pillRadius}\n L ${pillX - pillRadius} ${pillStartY + pillRadius}\n Q ${pillX} ${pillStartY + pillRadius}, ${pillX} ${pillStartY + pillRadius * 2}\n L ${pillX} ${pillEndY - pillRadius * 2}\n Q ${pillX} ${pillEndY - pillRadius}, ${pillX - pillRadius} ${pillEndY - pillRadius}\n L ${borderX + pillRadius} ${pillEndY - pillRadius}\n Q ${borderX} ${pillEndY - pillRadius}, ${borderX} ${pillEndY}\n L ${borderX} ${height}\n `\n : `\n M ${borderX} 0\n L ${borderX} ${pillStartY}\n Q ${borderX} ${pillStartY + pillRadius}, ${borderX - pillRadius} ${pillStartY + pillRadius}\n L ${pillX + pillRadius} ${pillStartY + pillRadius}\n Q ${pillX} ${pillStartY + pillRadius}, ${pillX} ${pillStartY + pillRadius * 2}\n L ${pillX} ${pillEndY - pillRadius * 2}\n Q ${pillX} ${pillEndY - pillRadius}, ${pillX + pillRadius} ${pillEndY - pillRadius}\n L ${borderX - pillRadius} ${pillEndY - pillRadius}\n Q ${borderX} ${pillEndY - pillRadius}, ${borderX} ${pillEndY}\n L ${borderX} ${height}\n `;\n\n // Dots position (center of pill)\n const dotsX = isRightSide ? (borderX + pillX) / 2 : (pillX + borderX) / 2;\n const dotsY = height / 2;\n\n return (\n <div\n className={clsx(\n 'relative cursor-col-resize',\n className\n )}\n style={{ width: svgWidth, height }}\n >\n <svg\n width={svgWidth}\n height={height}\n viewBox={`0 0 ${svgWidth} ${height}`}\n fill=\"none\"\n className=\"absolute inset-0\"\n >\n <path\n d={path}\n fill={fillColor}\n stroke=\"var(--surface-3)\"\n strokeWidth=\"1\"\n />\n </svg>\n\n {/* Three dots indicator */}\n <div\n className=\"absolute flex flex-col gap-[2px] items-center\"\n style={{\n left: dotsX,\n top: dotsY,\n transform: 'translate(-50%, -50%)'\n }}\n >\n <div className=\"w-[2px] h-[2px] rounded-full bg-surface-4\" />\n <div className=\"w-[2px] h-[2px] rounded-full bg-surface-4\" />\n <div className=\"w-[2px] h-[2px] rounded-full bg-surface-4\" />\n </div>\n </div>\n );\n};\n","'use client';\n\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { clsx } from 'clsx';\nimport { PanelHandle } from '../../shared/ui/ColumnHandler/PanelHandle';\nimport { usePanelContext } from './PanelContext';\nimport { calculateDraggedPanelPercentage, getTotalSideWidth, isInCloseZone, getSnappedWidth } from './panelUtils';\nimport type { PanelProps } from './PanelLayout.types';\n\n/**\n * Panel - Individual panel component with optional resize handle\n *\n * Panels can be positioned on the left or right side of the layout.\n * Multiple panels on the same side will stack horizontally.\n *\n * @example\n * ```tsx\n * <Panel id=\"sidebar\" side=\"left\">\n * <SidebarContent />\n * </Panel>\n *\n * <Panel id=\"chat\" side=\"right\" resizable={false}>\n * <ChatPanel />\n * </Panel>\n * ```\n */\nexport const Panel = React.memo<PanelProps>(({\n id,\n side,\n children,\n resizable = true,\n panelBg = 'var(--surface-1)',\n className,\n}) => {\n const { panels, onResizeStart, onResize, onResizeEnd, onCloseZoneChange, getPanelState, minCentralWidth, containerRef } = usePanelContext();\n\n const panelState = getPanelState(id);\n const isDragging = useRef(false);\n const hasMovedRef = useRef(false);\n const rafId = useRef<number | null>(null);\n const lastInCloseZoneRef = useRef(false);\n const initialDragWidthRef = useRef<number>(0);\n const hasAnimatedRef = useRef(false);\n\n // Ref and state to measure panel height for PanelHandle\n const panelRef = useRef<HTMLDivElement>(null);\n const [panelHeight, setPanelHeight] = useState(500);\n\n // Store latest values in refs to avoid stale closures in event listeners\n const latestValuesRef = useRef({\n side,\n oppositeSideWidth: 0,\n minCentralWidth,\n externalPanelsWidth: 0,\n internalPanelsWidth: 0,\n panelState: panelState,\n });\n\n // Get other panels width on the opposite side\n const oppositeSide = side === 'left' ? 'right' : 'left';\n const oppositeSideWidth = getTotalSideWidth(panels[oppositeSide]);\n\n // Get width of panels that are \"more external\" than this one on the same side\n // For right panels: panels after this one in the array are more external (closer to right edge)\n // For left panels: panels before this one in the array are more external (closer to left edge)\n const sameSidePanels = panels[side];\n const panelIndex = sameSidePanels.findIndex(p => p.id === id);\n\n const externalPanelsWidth = sameSidePanels\n .filter((p, i) => {\n if (!p.open) return false;\n // For right side: external panels are after this one (higher index)\n // For left side: external panels are before this one (lower index)\n return side === 'right' ? i > panelIndex : i < panelIndex;\n })\n .reduce((sum, p) => sum + p.width, 0);\n\n // Get width of panels that are \"more internal\" than this one on the same side\n // These are needed to limit how much the external panel can grow\n const internalPanelsWidth = sameSidePanels\n .filter((p, i) => {\n if (!p.open || p.id === id) return false;\n // For right side: internal panels are before this one (lower index)\n // For left side: internal panels are after this one (higher index)\n return side === 'right' ? i < panelIndex : i > panelIndex;\n })\n .reduce((sum, p) => sum + p.width, 0);\n\n // Update refs with latest values\n latestValuesRef.current = {\n side,\n oppositeSideWidth,\n minCentralWidth,\n externalPanelsWidth,\n internalPanelsWidth,\n panelState,\n };\n\n // Store callbacks in refs for stable references\n const onResizeRef = useRef(onResize);\n const onResizeEndRef = useRef(onResizeEnd);\n const onCloseZoneChangeRef = useRef(onCloseZoneChange);\n onResizeRef.current = onResize;\n onResizeEndRef.current = onResizeEnd;\n onCloseZoneChangeRef.current = onCloseZoneChange;\n\n // Handle mouse move during resize - stable reference\n const handleMouseMove = useCallback((e: MouseEvent) => {\n if (!isDragging.current) return;\n\n // Mark that mouse has moved (not just a click)\n hasMovedRef.current = true;\n\n // Throttle with requestAnimationFrame\n if (rafId.current) return;\n\n rafId.current = requestAnimationFrame(() => {\n rafId.current = null;\n\n // Get container dimensions for relative calculations\n const container = containerRef.current;\n if (!container) return;\n\n const rect = container.getBoundingClientRect();\n const containerWidth = rect.width;\n const relativeX = e.clientX - rect.left;\n\n // Use latest values from ref\n const { side: currentSide, oppositeSideWidth: currentOppositeSideWidth, minCentralWidth: currentMinCentralWidth, externalPanelsWidth: currentExternalPanelsWidth, internalPanelsWidth: currentInternalPanelsWidth } = latestValuesRef.current;\n\n const newWidth = calculateDraggedPanelPercentage(\n currentSide,\n relativeX,\n containerWidth,\n currentOppositeSideWidth,\n currentMinCentralWidth,\n currentExternalPanelsWidth,\n currentInternalPanelsWidth\n );\n\n // Only consider close zone if user is SHRINKING the panel (not expanding)\n // This prevents closing when trying to expand a small panel\n const isShrinking = newWidth < initialDragWidthRef.current;\n const inCloseZone = isShrinking && isInCloseZone(newWidth);\n\n if (inCloseZone !== lastInCloseZoneRef.current) {\n lastInCloseZoneRef.current = inCloseZone;\n onCloseZoneChangeRef.current(id, inCloseZone);\n }\n\n onResizeRef.current(id, newWidth);\n });\n }, [id, containerRef]);\n\n // Handle mouse up to end resize - stable reference\n const handleMouseUp = useCallback(() => {\n if (!isDragging.current) return;\n\n isDragging.current = false;\n document.body.style.userSelect = '';\n document.body.style.cursor = '';\n\n // Check if should close (was in close zone and mouse actually moved)\n const shouldClose = hasMovedRef.current && lastInCloseZoneRef.current;\n\n // If not closing but width is below snap threshold, snap to minimum\n const { panelState: currentPanelState } = latestValuesRef.current;\n if (!shouldClose && currentPanelState && currentPanelState.width < getSnappedWidth(currentPanelState.width)) {\n onResizeRef.current(id, getSnappedWidth(currentPanelState.width));\n }\n\n // Reset refs\n hasMovedRef.current = false;\n lastInCloseZoneRef.current = false;\n\n onResizeEndRef.current(id, shouldClose);\n\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n }, [id, handleMouseMove]);\n\n // Handle mouse down to start resize\n const handleMouseDown = useCallback(() => {\n isDragging.current = true;\n document.body.style.userSelect = 'none';\n document.body.style.cursor = 'col-resize';\n\n // Store initial width to determine if shrinking or expanding\n const { panelState: currentPanelState } = latestValuesRef.current;\n initialDragWidthRef.current = currentPanelState?.width ?? 0;\n\n onResizeStart(id);\n\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n }, [id, handleMouseMove, handleMouseUp, onResizeStart]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (rafId.current) {\n cancelAnimationFrame(rafId.current);\n }\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n }, [handleMouseMove, handleMouseUp]);\n\n // Track if this panel has already animated (to prevent re-animation on resize)\n useEffect(() => {\n if (panelState?.open && !panelState?.exiting) {\n // Mark as animated after mount\n const timer = setTimeout(() => {\n hasAnimatedRef.current = true;\n }, 150); // Animation duration\n return () => clearTimeout(timer);\n } else if (!panelState?.open) {\n // Reset when closed\n hasAnimatedRef.current = false;\n }\n }, [panelState?.open, panelState?.exiting]);\n\n // Measure panel height for PanelHandle SVG\n useEffect(() => {\n const panel = panelRef.current;\n if (!panel) return;\n\n const updateHeight = () => {\n const height = panel.offsetHeight;\n if (height > 0) {\n setPanelHeight(height);\n }\n };\n\n // Initial measurement\n updateHeight();\n\n // Observe resize\n const resizeObserver = new ResizeObserver(updateHeight);\n resizeObserver.observe(panel);\n\n return () => resizeObserver.disconnect();\n }, []);\n\n // Don't render if panel is not in state or not open (unless exiting for animation)\n if (!panelState || (!panelState.open && !panelState.exiting)) {\n return null;\n }\n\n // Handler position: left panels have handler on right edge, right panels on left edge\n const handlerPosition = side === 'left' ? 'right' : 'left';\n\n // Determine animation class - only animate on first open, not on resize\n const getAnimationClass = () => {\n if (panelState.exiting) {\n return side === 'left' ? 'animate-panel-exit' : 'animate-panel-exit-right';\n }\n // Don't animate if already animated (prevents jump on resize)\n if (hasAnimatedRef.current) {\n return '';\n }\n return side === 'left' ? 'animate-panel-enter' : 'animate-panel-enter-right';\n };\n\n return (\n <div\n ref={panelRef}\n className={clsx(\n 'h-full relative flex-shrink-0',\n 'transition-[width] duration-100 ease-out',\n panelState.isResizing && 'transition-none',\n className\n )}\n style={{ width: `${panelState.width}%` }}\n data-panel={id}\n data-panel-side={side}\n data-in-close-zone={panelState.inCloseZone}\n data-exiting={panelState.exiting}\n >\n {/* Panel content - no border, PanelHandle provides the border */}\n <div\n className={clsx(\n 'absolute inset-0 overflow-hidden',\n 'transition-opacity duration-100',\n getAnimationClass(),\n // Visual feedback: reduce opacity when in close zone\n panelState.inCloseZone ? 'opacity-50' : 'opacity-100'\n )}\n style={{ backgroundColor: panelBg }}\n >\n {children}\n </div>\n\n {/* PanelHandle - provides border AND resize handle as one piece */}\n {resizable && !panelState.exiting && (\n <div\n className={clsx(\n 'absolute top-0 z-50',\n handlerPosition === 'right' ? 'right-0 translate-x-full' : 'left-0 -translate-x-full'\n )}\n onMouseDown={handleMouseDown}\n >\n <PanelHandle side={handlerPosition} height={panelHeight} fillColor={panelBg} />\n </div>\n )}\n\n {/* Simple border when not resizable */}\n {!resizable && (\n <div\n className={clsx(\n 'absolute top-0 bottom-0 w-px bg-surface-3',\n handlerPosition === 'right' ? 'right-0' : 'left-0'\n )}\n />\n )}\n </div>\n );\n});\n\nPanel.displayName = 'Panel';\n","'use client';\n\nimport React from 'react';\nimport { clsx } from 'clsx';\nimport type { PanelMainProps } from './PanelLayout.types';\n\n/**\n * PanelMain - Central content area that fills the remaining space\n *\n * This component should be used inside PanelLayout to define the main content area.\n * It automatically fills the space not occupied by Panel components.\n *\n * @example\n * ```tsx\n * <PanelLayout panels={state} onPanelResize={handleResize}>\n * <Panel id=\"sidebar\" side=\"left\">...</Panel>\n * <PanelMain>\n * <YourMainContent />\n * </PanelMain>\n * </PanelLayout>\n * ```\n */\nexport const PanelMain = React.memo<PanelMainProps>(({ children, className }) => {\n return (\n <div\n className={clsx(\n 'flex-1 min-w-0 h-full overflow-hidden relative',\n 'transition-all duration-100 ease-out',\n className\n )}\n data-panel-main\n >\n {children}\n </div>\n );\n});\n\nPanelMain.displayName = 'PanelMain';\n","'use client';\n\nimport { useState, useCallback, useEffect, useMemo } from 'react';\nimport { initializePanelsState, findPanelById, calculatePanelPercentage, PANEL_DEFAULTS } from './panelUtils';\nimport type { UsePanelStateOptions, UsePanelStateReturn, PanelsState, PanelConfig } from './PanelLayout.types';\n\n/** Validates that a panel object has the required structure */\nfunction isValidPanel(panel: unknown): boolean {\n if (!panel || typeof panel !== 'object') return false;\n const p = panel as Record<string, unknown>;\n\n return (\n typeof p.id === 'string' &&\n typeof p.open === 'boolean' &&\n typeof p.width === 'number'\n );\n}\n\n/** Validates that localStorage data matches PanelsState structure */\nfunction isValidPanelsState(data: unknown): data is PanelsState {\n if (!data || typeof data !== 'object') return false;\n const obj = data as Record<string, unknown>;\n\n return (\n Array.isArray(obj.left) &&\n Array.isArray(obj.right) &&\n obj.left.every(isValidPanel) &&\n obj.right.every(isValidPanel)\n );\n}\n\n/**\n * Hook for managing panel state\n *\n * Provides a convenient way to manage panel open/close state and widths.\n * Can optionally persist state to localStorage.\n *\n * @example\n * ```tsx\n * const { panels, togglePanel, resizePanel } = usePanelState({\n * config: [\n * { id: 'sidebar', side: 'left', defaultWidth: 275 },\n * { id: 'chat', side: 'right', defaultWidth: 375 },\n * ],\n * persist: true,\n * });\n *\n * return (\n * <PanelLayout panels={panels} onPanelResize={resizePanel}>\n * ...\n * </PanelLayout>\n * );\n * ```\n */\nexport function usePanelState(options: UsePanelStateOptions): UsePanelStateReturn {\n const { config, persist = false, persistKey = 'panel-state' } = options;\n\n // Create config map for quick lookups\n const configMap = useMemo(() => {\n const map = new Map<string, PanelConfig>();\n config.forEach(cfg => map.set(cfg.id, cfg));\n return map;\n }, [config]);\n\n // Initialize state use defaults for consistent SSR/client hydration\n const [panels, setPanels] = useState<PanelsState>(() => {\n // Initialize from config with fixed viewport (1920px) for consistent SSR/client hydration\n return initializePanelsState(config, 1920);\n });\n\n // Track if localStorage has been loaded (avoids unnecessary writes on mount)\n const [isHydrated, setIsHydrated] = useState(false);\n\n // Load from localStorage AFTER mount (avoids hydration mismatch)\n useEffect(() => {\n if (persist && typeof window !== 'undefined') {\n try {\n const saved = localStorage.getItem(persistKey);\n if (saved) {\n const parsed = JSON.parse(saved);\n if (isValidPanelsState(parsed)) {\n setPanels(parsed);\n }\n }\n } catch {\n // Ignore parse/storage errors\n }\n }\n setIsHydrated(true);\n }, [persist, persistKey]);\n\n // Persist state to localStorage when it changes (only after hydration)\n useEffect(() => {\n if (!isHydrated) return;\n\n if (persist && typeof window !== 'undefined') {\n try {\n localStorage.setItem(persistKey, JSON.stringify(panels));\n } catch {\n // Ignore storage errors\n }\n }\n }, [panels, persist, persistKey, isHydrated]);\n\n // Toggle panel open/closed\n const togglePanel = useCallback((id: string) => {\n setPanels(current => {\n const result = findPanelById(current, id);\n if (!result) return current;\n\n const { side, panel } = result;\n\n // If closing, just close\n if (panel.open) {\n return {\n ...current,\n [side]: current[side].map(p =>\n p.id === id ? { ...p, open: false } : p\n ),\n };\n }\n\n // Opening panel - prioritize opening at full desired width\n const oppositeSide = side === 'left' ? 'right' : 'left';\n const cfg = configMap.get(id);\n\n // Calculate desired width from config\n const viewportWidth = typeof window !== 'undefined' ? window.innerWidth : 1920;\n const desiredWidth = cfg\n ? calculatePanelPercentage(cfg.defaultWidth, viewportWidth)\n : 20;\n\n // Calculate current usage\n const oppositeSideWidth = current[oppositeSide]\n .filter(p => p.open)\n .reduce((sum, p) => sum + p.width, 0);\n\n const sameSideOpenPanels = current[side].filter(p => p.open && p.id !== id);\n const sameSideCurrentWidth = sameSideOpenPanels.reduce((sum, p) => sum + p.width, 0);\n\n // Max space available for this side\n const maxSameSideWidth = 100 - oppositeSideWidth - PANEL_DEFAULTS.minCentralPercent;\n\n // If we have enough space, just open at desired width\n if (sameSideCurrentWidth + desiredWidth <= maxSameSideWidth) {\n return {\n ...current,\n [side]: current[side].map(p =>\n p.id === id ? { ...p, open: true, width: desiredWidth } : p\n ),\n };\n }\n\n // Not enough space - shrink existing panels to make room for desired width\n // Calculate minimum space needed for existing panels\n const minSpaceForExisting = sameSideOpenPanels.length * PANEL_DEFAULTS.snapMinWidth;\n\n // Calculate how much space we can actually give to new panel\n const maxSpaceForNew = maxSameSideWidth - minSpaceForExisting;\n const actualNewWidth = Math.min(desiredWidth, Math.max(PANEL_DEFAULTS.snapMinWidth, maxSpaceForNew));\n\n // Calculate space left for existing panels\n const spaceForExisting = maxSameSideWidth - actualNewWidth;\n\n if (sameSideCurrentWidth > 0 && spaceForExisting < sameSideCurrentWidth) {\n // Need to shrink existing panels\n const shrinkRatio = spaceForExisting / sameSideCurrentWidth;\n\n return {\n ...current,\n [side]: current[side].map(p => {\n if (p.id === id) {\n return { ...p, open: true, width: actualNewWidth };\n }\n if (p.open) {\n const newWidth = Math.max(PANEL_DEFAULTS.snapMinWidth, p.width * shrinkRatio);\n return { ...p, width: newWidth };\n }\n return p;\n }),\n };\n }\n\n return {\n ...current,\n [side]: current[side].map(p =>\n p.id === id ? { ...p, open: true, width: actualNewWidth } : p\n ),\n };\n });\n }, [configMap]);\n\n // Resize panel with smart redistribution\n const resizePanel = useCallback((id: string, width: number) => {\n setPanels(current => {\n const result = findPanelById(current, id);\n if (!result) return current;\n\n const { side, panel: currentPanel } = result;\n const oppositeSide = side === 'left' ? 'right' : 'left';\n\n // Calculate current usage\n const oppositeSideWidth = current[oppositeSide]\n .filter(p => p.open)\n .reduce((sum, p) => sum + p.width, 0);\n\n const sameSideOtherPanels = current[side].filter(p => p.open && p.id !== id);\n const sameSideOtherWidth = sameSideOtherPanels.reduce((sum, p) => sum + p.width, 0);\n\n // Max available for this side\n const maxSameSideWidth = 100 - oppositeSideWidth - PANEL_DEFAULTS.minCentralPercent;\n\n // Check if we're trying to grow beyond available space\n const totalNeeded = width + sameSideOtherWidth;\n\n // If fits, just update\n if (totalNeeded <= maxSameSideWidth) {\n return {\n ...current,\n [side]: current[side].map(p =>\n p.id === id ? { ...p, width } : p\n ),\n };\n }\n\n // Need to redistribute - shrink other panels on same side\n const isGrowing = width > currentPanel.width;\n\n if (isGrowing && sameSideOtherWidth > 0) {\n // Calculate how much space we need from other panels\n const spaceNeeded = totalNeeded - maxSameSideWidth;\n const newOtherWidth = Math.max(\n sameSideOtherPanels.length * PANEL_DEFAULTS.snapMinWidth, // Minimum for all other panels\n sameSideOtherWidth - spaceNeeded\n );\n\n // Calculate actual width we can have\n const actualWidth = maxSameSideWidth - newOtherWidth;\n const shrinkRatio = newOtherWidth / sameSideOtherWidth;\n\n return {\n ...current,\n [side]: current[side].map(p => {\n if (p.id === id) {\n return { ...p, width: actualWidth };\n }\n if (p.open) {\n // Shrink proportionally but not below minimum\n const newWidth = Math.max(PANEL_DEFAULTS.snapMinWidth, p.width * shrinkRatio);\n return { ...p, width: newWidth };\n }\n return p;\n }),\n };\n }\n\n // Can't grow more, just set to max available\n return {\n ...current,\n [side]: current[side].map(p =>\n p.id === id ? { ...p, width: Math.min(width, maxSameSideWidth - sameSideOtherWidth) } : p\n ),\n };\n });\n }, []);\n\n // Open panel - prioritizes opening at full desired width\n const openPanel = useCallback((id: string) => {\n setPanels(current => {\n const result = findPanelById(current, id);\n if (!result || result.panel.open) return current;\n\n const { side } = result;\n const oppositeSide = side === 'left' ? 'right' : 'left';\n const cfg = configMap.get(id);\n const viewportWidth = typeof window !== 'undefined' ? window.innerWidth : 1920;\n\n // Calculate desired width from config\n const desiredWidth = cfg\n ? calculatePanelPercentage(cfg.defaultWidth, viewportWidth)\n : 20;\n\n // Calculate current usage\n const oppositeSideWidth = current[oppositeSide]\n .filter(p => p.open)\n .reduce((sum, p) => sum + p.width, 0);\n\n const sameSideOpenPanels = current[side].filter(p => p.open && p.id !== id);\n const sameSideCurrentWidth = sameSideOpenPanels.reduce((sum, p) => sum + p.width, 0);\n\n // Max space available for this side\n const maxSameSideWidth = 100 - oppositeSideWidth - PANEL_DEFAULTS.minCentralPercent;\n\n // If we have enough space, just open at desired width\n if (sameSideCurrentWidth + desiredWidth <= maxSameSideWidth) {\n return {\n ...current,\n [side]: current[side].map(p =>\n p.id === id ? { ...p, open: true, width: desiredWidth } : p\n ),\n };\n }\n\n // Not enough space - shrink existing panels to make room for desired width\n // Calculate minimum space needed for existing panels\n const minSpaceForExisting = sameSideOpenPanels.length * PANEL_DEFAULTS.snapMinWidth;\n\n // Calculate how much space we can actually give to new panel\n const maxSpaceForNew = maxSameSideWidth - minSpaceForExisting;\n const actualNewWidth = Math.min(desiredWidth, Math.max(PANEL_DEFAULTS.snapMinWidth, maxSpaceForNew));\n\n // Calculate space left for existing panels\n const spaceForExisting = maxSameSideWidth - actualNewWidth;\n\n if (sameSideCurrentWidth > 0 && spaceForExisting < sameSideCurrentWidth) {\n // Need to shrink existing panels\n const shrinkRatio = spaceForExisting / sameSideCurrentWidth;\n\n return {\n ...current,\n [side]: current[side].map(p => {\n if (p.id === id) {\n return { ...p, open: true, width: actualNewWidth };\n }\n if (p.open) {\n const newWidth = Math.max(PANEL_DEFAULTS.snapMinWidth, p.width * shrinkRatio);\n return { ...p, width: newWidth };\n }\n return p;\n }),\n };\n }\n\n return {\n ...current,\n [side]: current[side].map(p =>\n p.id === id ? { ...p, open: true, width: actualNewWidth } : p\n ),\n };\n });\n }, [configMap]);\n\n // Close panel (immediate, no animation)\n const closePanel = useCallback((id: string) => {\n setPanels(current => {\n const result = findPanelById(current, id);\n if (!result || !result.panel.open) return current;\n\n const { side } = result;\n\n return {\n ...current,\n [side]: current[side].map(p =>\n p.id === id ? { ...p, open: false, exiting: false, inCloseZone: false } : p\n ),\n };\n });\n }, []);\n\n // Handle close zone change during drag\n const handleCloseZoneChange = useCallback((id: string, inCloseZone: boolean) => {\n setPanels(current => {\n const result = findPanelById(current, id);\n if (!result) return current;\n\n const { side } = result;\n\n return {\n ...current,\n [side]: current[side].map(p =>\n p.id === id ? { ...p, inCloseZone } : p\n ),\n };\n });\n }, []);\n\n // Handle panel close request (from drag release in close zone)\n const handlePanelClose = useCallback((id: string) => {\n // First mark as exiting to trigger animation\n setPanels(current => {\n const result = findPanelById(current, id);\n if (!result) return current;\n\n const { side } = result;\n\n return {\n ...current,\n [side]: current[side].map(p =>\n p.id === id ? { ...p, exiting: true, inCloseZone: false } : p\n ),\n };\n });\n\n // After animation, actually close the panel\n setTimeout(() => {\n setPanels(current => {\n const result = findPanelById(current, id);\n if (!result) return current;\n\n const { side } = result;\n\n return {\n ...current,\n [side]: current[side].map(p =>\n p.id === id ? { ...p, open: false, exiting: false, width: PANEL_DEFAULTS.snapMinWidth } : p\n ),\n };\n });\n }, PANEL_DEFAULTS.exitAnimationDuration);\n }, []);\n\n // Reset to default state\n const resetPanels = useCallback(() => {\n const viewportWidth = typeof window !== 'undefined' ? window.innerWidth : 1920;\n setPanels(initializePanelsState(config, viewportWidth));\n }, [config]);\n\n // Cleanup exiting panels on unmount or when panels change\n useEffect(() => {\n const exitingPanels = [\n ...panels.left.filter(p => p.exiting),\n ...panels.right.filter(p => p.exiting),\n ];\n\n if (exitingPanels.length === 0) return;\n\n const timers = exitingPanels.map(panel => {\n return setTimeout(() => {\n setPanels(current => {\n const result = findPanelById(current, panel.id);\n if (!result) return current;\n\n const { side } = result;\n\n return {\n ...current,\n [side]: current[side].map(p =>\n p.id === panel.id && p.exiting ? { ...p, open: false, exiting: false } : p\n ),\n };\n });\n }, PANEL_DEFAULTS.exitAnimationDuration);\n });\n\n return () => {\n timers.forEach(timer => clearTimeout(timer));\n };\n }, [panels]);\n\n return {\n panels,\n togglePanel,\n resizePanel,\n openPanel,\n closePanel,\n resetPanels,\n handleCloseZoneChange,\n handlePanelClose,\n };\n}\n","'use client';\n\nimport React, { useEffect, useState } from 'react';\nimport { clsx } from 'clsx';\n\n// =============================================\n// TYPES\n// =============================================\n\n/**\n * Position where the side panel appears\n */\nexport type SplitPanelPosition = 'left' | 'right';\n\n/**\n * Props for the SplitPanelLayout component\n */\nexport interface SplitPanelLayoutProps {\n /**\n * Main content that shrinks when panel opens\n */\n mainContent: React.ReactNode;\n\n /**\n * Content to display in the sliding side panel\n */\n sidePanel: React.ReactNode;\n\n /**\n * Whether the side panel is currently open\n */\n isPanelOpen: boolean;\n\n /**\n * Callback when panel should exit (for parent to update state after animation)\n * This is called after the exit animation completes\n */\n onPanelExited?: () => void;\n\n /**\n * Width of the side panel in pixels\n * @default 400\n */\n panelWidth?: number;\n\n /**\n * Position of the side panel\n * @default 'right'\n */\n panelPosition?: SplitPanelPosition;\n\n /**\n * Animation duration in milliseconds\n * @default 75\n */\n animationDuration?: number;\n\n /**\n * Additional CSS classes for the container\n */\n className?: string;\n\n /**\n * Background color for the main content area\n * @default 'bg-white'\n */\n mainContentBg?: string;\n\n /**\n * Background color for the side panel\n * Does not apply background by default - control via sidePanel content\n */\n sidePanelBg?: string;\n}\n\nexport const SplitPanelLayout = React.memo<SplitPanelLayoutProps>(({\n mainContent,\n sidePanel,\n isPanelOpen,\n onPanelExited,\n panelWidth = 400,\n panelPosition = 'right',\n animationDuration = 75,\n className,\n mainContentBg = 'bg-white',\n sidePanelBg,\n}) => {\n const [isExiting, setIsExiting] = useState(false);\n const [shouldRender, setShouldRender] = useState(isPanelOpen);\n\n useEffect(() => {\n if (isPanelOpen) {\n setShouldRender(true);\n setIsExiting(false);\n } else if (shouldRender) {\n // Start exit animation\n setIsExiting(true);\n const timer = setTimeout(() => {\n setShouldRender(false);\n setIsExiting(false);\n onPanelExited?.();\n }, animationDuration);\n return () => clearTimeout(timer);\n }\n }, [isPanelOpen, animationDuration, shouldRender, onPanelExited]);\n\n const mainContentWidth = isPanelOpen\n ? `calc(100% - ${panelWidth}px)`\n : '100%';\n\n const slideInClass = panelPosition === 'right'\n ? 'animate-slideInRight'\n : 'animate-slideInLeft';\n const slideOutClass = panelPosition === 'right'\n ? 'animate-slideOutRight'\n : 'animate-slideOutLeft';\n\n return (\n <div\n className={clsx(\n 'w-full flex flex-col',\n className\n )}\n style={{\n height: '100%',\n maxHeight: '100%',\n overflow: 'hidden'\n }}\n >\n {/* Layout container: Main content + Side panel */}\n <div className=\"flex flex-1 overflow-hidden\">\n {/* Left panel (if position is left) */}\n {panelPosition === 'left' && (\n <div\n className=\"h-full overflow-hidden transition-all ease-out\"\n style={{\n width: isPanelOpen ? `${panelWidth}px` : '0px',\n opacity: isPanelOpen ? 1 : 0,\n transitionDuration: `${animationDuration}ms`,\n }}\n >\n {shouldRender && (\n <div\n className={clsx(\n 'h-full',\n sidePanelBg,\n isExiting ? slideOutClass : slideInClass\n )}\n >\n {sidePanel}\n </div>\n )}\n </div>\n )}\n\n {/* Main content area */}\n <div\n className={clsx(\n 'relative flex flex-col transition-all ease-out overflow-hidden',\n mainContentBg\n )}\n style={{\n width: mainContentWidth,\n transitionDuration: `${animationDuration}ms`,\n }}\n >\n <div className=\"relative flex-1 overflow-hidden\">\n {mainContent}\n </div>\n </div>\n\n {/* Right panel (if position is right) */}\n {panelPosition === 'right' && (\n <div\n className=\"h-full overflow-hidden transition-all ease-out\"\n style={{\n width: isPanelOpen ? `${panelWidth}px` : '0px',\n opacity: isPanelOpen ? 1 : 0,\n transitionDuration: `${animationDuration}ms`,\n }}\n >\n {shouldRender && (\n <div\n className={clsx(\n 'h-full',\n sidePanelBg,\n isExiting ? slideOutClass : slideInClass\n )}\n >\n {sidePanel}\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n});\n\nSplitPanelLayout.displayName = 'SplitPanelLayout';\n","/**\n * Tailwind CSS utility functions for consistent class generation\n */\n\n/**\n * Maps gap values to Tailwind gap classes\n * @param gap - Gap value from 0-8\n * @returns Tailwind gap class string\n */\nexport const getGapClass = (gap?: number): string => {\n const gapMap: Record<number, string> = {\n 0: \"gap-0\",\n 1: \"gap-1\",\n 2: \"gap-2\",\n 3: \"gap-3\",\n 4: \"gap-4\",\n 5: \"gap-5\",\n 6: \"gap-6\",\n 7: \"gap-7\",\n 8: \"gap-8\",\n };\n return gap !== undefined ? gapMap[gap] || \"gap-4\" : \"gap-4\";\n};\n","import React from 'react';\n\nexport interface ChatIconProps {\n /** Size of the icon in pixels */\n size?: number;\n /** Optional CSS classes */\n className?: string;\n}\n\n/**\n * Chat icon component\n * @description Icon representing a chat or conversation\n */\nexport const ChatIcon = ({ size = 20, className }: ChatIconProps) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <mask id=\"mask0_1135_15829\" style={{ maskType: 'luminance' }} maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"20\" height=\"20\">\n <path d=\"M20 0H0V20H20V0Z\" fill=\"white\" />\n </mask>\n <g mask=\"url(#mask0_1135_15829)\">\n <path d=\"M9.99297 18.9587C5.0513 18.9587 1.04297 14.942 1.04297 10.0003C1.04297 5.05866 5.05964 1.04199 10.0013 1.04199C14.943 1.04199 18.9596 5.05866 18.9596 10.0003C18.9596 10.5003 18.918 11.0087 18.8346 11.5003C18.7763 11.842 18.4596 12.0753 18.1096 12.0087C17.768 11.9503 17.543 11.6253 17.6013 11.2837C17.6763 10.8587 17.7096 10.4253 17.7096 10.0003C17.7096 5.75033 14.2513 2.29199 10.0013 2.29199C5.7513 2.29199 2.29297 5.75033 2.29297 10.0003C2.29297 14.2503 5.7513 17.7087 10.0013 17.7087C10.6013 17.7087 11.193 17.642 11.768 17.5003C12.093 17.4253 12.443 17.6253 12.518 17.967C12.6013 18.3003 12.393 18.642 12.0513 18.717C11.3846 18.8753 10.693 18.9587 9.99297 18.9587Z\" fill=\"currentColor\" />\n <path d=\"M13.3346 10.625H6.66797C6.3263 10.625 6.04297 10.3417 6.04297 10C6.04297 9.65833 6.3263 9.375 6.66797 9.375H13.3346C13.6763 9.375 13.9596 9.65833 13.9596 10C13.9596 10.3417 13.6763 10.625 13.3346 10.625Z\" fill=\"currentColor\" />\n <path d=\"M10 13.9587C9.65833 13.9587 9.375 13.6753 9.375 13.3337V6.66699C9.375 6.32533 9.65833 6.04199 10 6.04199C10.3417 6.04199 10.625 6.32533 10.625 6.66699V13.3337C10.625 13.6753 10.3417 13.9587 10 13.9587Z\" fill=\"currentColor\" />\n <path d=\"M15.7085 18.7834C15.3585 18.7834 15.0669 18.5417 15.0002 18.2084L14.7752 17.2251C14.6669 16.7417 14.2835 16.3667 13.8085 16.2584L12.8085 16.0251C12.4752 15.9501 12.2419 15.6584 12.2502 15.3167C12.2585 14.9751 12.4919 14.6751 12.8252 14.6084L13.8085 14.3834C14.2835 14.2751 14.6669 13.8917 14.7752 13.4167L15.0085 12.4167C15.0835 12.0917 15.3752 11.8584 15.7169 11.8584C16.0669 11.8584 16.3585 12.1001 16.4252 12.4334L16.6502 13.4167C16.7585 13.8917 17.1419 14.2751 17.6169 14.3834L18.6169 14.6167C18.9419 14.6917 19.1835 14.9834 19.1752 15.3251C19.1752 15.6667 18.9419 15.9584 18.6085 16.0334L17.6169 16.2584C17.1335 16.3667 16.7585 16.7501 16.6502 17.2251L16.4169 18.2251C16.3419 18.5501 16.0502 18.7834 15.7085 18.7834ZM14.7835 15.3167C15.1669 15.5417 15.4835 15.8584 15.7085 16.2417C15.9335 15.8584 16.2502 15.5417 16.6335 15.3167C16.2502 15.0917 15.9335 14.7751 15.7085 14.3917C15.4835 14.7751 15.1669 15.0917 14.7835 15.3167Z\" fill=\"currentColor\" />\n </g>\n </svg>\n);\n","import React from 'react';\n\nexport interface AICommentaryIconProps {\n /** Size of the icon in pixels */\n size?: number;\n /** Optional CSS classes */\n className?: string;\n}\n\n/**\n * AI Commentary icon component\n * @description Icon representing AI-powered commentary or conversation history\n */\nexport const AICommentaryIcon = ({ size = 20, className }: AICommentaryIconProps) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <g clipPath=\"url(#clip0_1314_55824)\">\n <mask id=\"mask0_1314_55824\" style={{ maskType: 'luminance' }} maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"20\" height=\"20\">\n <path d=\"M19.5 0.5V19.5H0.5V0.5H19.5Z\" fill=\"white\" stroke=\"white\"/>\n </mask>\n <g mask=\"url(#mask0_1314_55824)\">\n <path d=\"M13.2839 19.4583C12.9339 19.4583 12.6422 19.225 12.5672 18.8833L12.3339 17.8667C12.2172 17.3667 11.8255 16.975 11.3339 16.8583L10.3089 16.625C9.98385 16.5583 9.74219 16.2583 9.74219 15.9167C9.74219 15.575 9.97552 15.275 10.3172 15.2L11.3255 14.9667C11.8255 14.85 12.2172 14.4583 12.3339 13.9667L12.5672 12.9417C12.6422 12.6083 12.9339 12.375 13.2755 12.375C13.6255 12.375 13.9172 12.6167 13.9839 12.95L14.2172 13.9583C14.3339 14.4583 14.7255 14.85 15.2172 14.9667L16.2422 15.2C16.5672 15.2667 16.8089 15.5667 16.8089 15.9083C16.8089 16.25 16.5755 16.55 16.2422 16.625L15.2255 16.8583C14.7255 16.975 14.3339 17.3667 14.2172 17.8583L13.9755 18.8833C13.9089 19.2083 13.6089 19.45 13.2672 19.45L13.2839 19.4583ZM12.3005 15.9333C12.7089 16.1667 13.0505 16.5083 13.2755 16.9167C13.5089 16.5083 13.8505 16.1667 14.2589 15.9417C13.8505 15.7083 13.5089 15.3667 13.2839 14.9583C13.0505 15.3667 12.7089 15.7083 12.3005 15.9333Z\" fill=\"currentColor\"/>\n <path d=\"M8.88331 18.4586C8.88331 18.4586 8.82498 18.4586 8.79165 18.4586C7.94165 18.3419 7.11665 18.0919 6.33331 17.7169C6.20831 17.6586 5.95832 17.6253 5.84165 17.6503L5.65832 17.6919C5.09998 17.8253 4.28331 18.0253 3.59165 18.1919C3.02498 18.3336 2.49165 18.2086 2.14165 17.8586C1.79165 17.5086 1.66665 16.9753 1.80832 16.4003L2.34998 14.1503C2.37498 14.0419 2.34998 13.8003 2.28331 13.6669C1.53331 12.0919 1.28331 10.3253 1.56665 8.5586C2.14998 5.02525 5.02498 2.15025 8.55832 1.56692C11.35 1.11692 14.075 1.99192 16.0416 3.96692C18.0083 5.94192 18.875 8.66693 18.425 11.4419C18.2833 12.2919 18.025 13.1086 17.65 13.8669C17.5 14.1753 17.125 14.3003 16.8166 14.1503C16.5083 14.0003 16.3833 13.6253 16.5333 13.3169C16.85 12.6669 17.075 11.9669 17.1916 11.2419C17.5833 8.86693 16.8416 6.53359 15.1583 4.85025C13.475 3.16692 11.1416 2.41692 8.75832 2.80025C5.74998 3.30025 3.29998 5.75025 2.80831 8.76693C2.56665 10.2753 2.77498 11.7919 3.41665 13.1336C3.56665 13.4503 3.68332 14.0003 3.56665 14.4586L3.02498 16.7003C2.98331 16.8836 3.01665 16.9669 3.02498 16.9753C3.03332 16.9836 3.11665 17.0253 3.29998 16.9753C3.99998 16.8086 4.80832 16.6169 5.36665 16.4836L5.55832 16.4336C5.95832 16.3419 6.49998 16.4086 6.86665 16.5836C7.53332 16.9003 8.24165 17.1086 8.96665 17.2086C9.30832 17.2586 9.54165 17.5753 9.49998 17.9169C9.45831 18.2253 9.19165 18.4586 8.88331 18.4586Z\" fill=\"currentColor\"/>\n <path d=\"M14.5246 8.92515C14.2746 8.92515 14.0329 8.76681 13.9413 8.51681C13.5246 7.3918 12.6413 6.50013 11.5163 6.0668C11.1913 5.9418 11.0329 5.58346 11.1579 5.25846C11.2829 4.93346 11.6496 4.77513 11.9663 4.90013C13.4163 5.4668 14.5663 6.62513 15.1079 8.08346C15.2329 8.40848 15.0663 8.76681 14.7413 8.89181C14.6663 8.91681 14.5996 8.92515 14.5246 8.92515Z\" fill=\"currentColor\"/>\n </g>\n </g>\n <defs>\n <clipPath id=\"clip0_1314_55824\">\n <rect width=\"20\" height=\"20\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n);\n","import * as React from \"react\";\nimport { SVGProps, Ref, forwardRef } from \"react\";\n\nexport interface ArrowNarrowDownIconProps extends SVGProps<SVGSVGElement> {\n size?: number;\n}\n\n/**\n * Self-contained SVG component for the arrow pointing down icon.\n * @param {Object} props - Props to be passed into the component.\n * @param {Ref<SVGSVGElement>} ref - A reference to the SVG element.\n * @returns {JSX.Element}\n * \n * Usage:\n * ```tsx\n * import ArrowNarrowDownIcon from 'path-to-icons/ArrowNarrowDownIcon';\n * \n * const MyComponent = () => (\n * <div>\n * <ArrowNarrowDownIcon className=\"icon-class\" />\n * </div>\n * );\n * ```\n */\nconst ArrowNarrowDownIconComponent = (\n { size, ...props }: ArrowNarrowDownIconProps,\n ref: Ref<SVGSVGElement>\n) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 12 12\"\n width={size}\n height={size}\n fill=\"none\"\n ref={ref}\n {...props}\n >\n <path\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n d=\"M6 1.5a.5.5 0 0 1 .5.5v6.793l2.146-2.147a.5.5 0 1 1 .708.708l-3 3a.5.5 0 0 1-.708 0l-3-3a.5.5 0 1 1 .708-.708L5.5 8.793V2a.5.5 0 0 1 .5-.5Z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nexport const ArrowNarrowDownIcon = forwardRef(ArrowNarrowDownIconComponent);\n","import * as React from \"react\";\nimport { SVGProps, Ref, forwardRef } from \"react\";\n\nexport interface FilterFunnel02IconProps extends SVGProps<SVGSVGElement> {\n size?: number;\n}\n\n/**\n * Self-contained SVG component for the arrow pointing down icon.\n * @param {Object} props - Props to be passed into the component.\n * @param {Ref<SVGSVGElement>} ref - A reference to the SVG element.\n * @returns {JSX.Element}\n * \n * Usage:\n * ```tsx\n * import FilterFunnel02Icon from 'path-to-icons/FilterFunnel02Icon';\n * \n * const MyComponent = () => (\n * <div>\n * <FilterFunnel02Icon className=\"icon-class\" />\n * </div>\n * );\n * ```\n */\nconst FilterFunnel02Component = (\n { size, ...props }: FilterFunnel02IconProps,\n ref: Ref<SVGSVGElement>\n) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 12 12\"\n width={size}\n height={size}\n fill=\"none\"\n ref={ref}\n {...props}\n >\n <path\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n d=\"M2.267 1h7.466c.264 0 .496 0 .678.016.174.016.413.053.607.213a1 1 0 0 1 .363.81c-.01.252-.142.455-.247.595a8.283 8.283 0 0 1-.44.516L7.826 6.356l-.074.084-.001.001v.002l-.001.113v2.693c0 .068.002.21-.047.344a.75.75 0 0 1-.199.293c-.105.095-.238.147-.302.172l-.018.007-1.714.685c-.08.032-.167.067-.245.09a.764.764 0 0 1-.378.025.75.75 0 0 1-.472-.32.764.764 0 0 1-.118-.36 3.036 3.036 0 0 1-.007-.26v-3.37l-.001-.112v-.002h-.001a3.066 3.066 0 0 0-.075-.085L1.32 3.166l-.015-.016c-.176-.197-.33-.37-.44-.516C.762 2.494.63 2.291.62 2.04a1 1 0 0 1 .362-.811c.194-.16.434-.197.608-.213C1.771 1 2.002 1 2.267 1Zm-.615 1.015.016.022c.078.106.202.244.398.463l2.853 3.189.015.017c.06.066.133.148.188.246a1 1 0 0 1 .104.272c.024.11.024.22.024.308v3.229l1.5-.6V6.532c0-.088 0-.199.024-.308a1 1 0 0 1 .104-.272c.055-.098.129-.18.187-.246l.016-.017L9.934 2.5a7.943 7.943 0 0 0 .414-.485l-.027-.003A7.924 7.924 0 0 0 9.711 2H2.289a7.925 7.925 0 0 0-.637.015Z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nexport const FilterFunnel02Icon = forwardRef(FilterFunnel02Component);\n","import * as React from \"react\";\nimport { SVGProps, Ref, forwardRef } from \"react\";\n\nexport interface Box2IconProps extends SVGProps<SVGSVGElement> {\n size?: number;\n}\n\n/**\n * Self-contained SVG component for the arrow pointing down icon.\n * @param {Object} props - Props to be passed into the component.\n * @param {Ref<SVGSVGElement>} ref - A reference to the SVG element.\n * @returns {JSX.Element}\n * \n * Usage:\n * ```tsx\n * import Box2Icon from 'path-to-icons/Box2Icon';\n * \n * const MyComponent = () => (\n * <div>\n * <Box2Icon className=\"icon-class\" />\n * </div>\n * );\n * ```\n */\nconst Box2Component = (\n { size, ...props }: Box2IconProps,\n ref: Ref<SVGSVGElement>\n) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n fill=\"none\"\n ref={ref}\n {...props}\n >\n <path\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={props.strokeWidth || 1}\n d=\"m18.67 18.67 2.22-1.11v-2.78m-6.67-5L12 10.89l2.22-1.11ZM12 10.89 9.78 9.78 12 10.89Zm0 0v2.78-2.78Zm8.89-4.45-2.22 1.11 2.22-1.11Zm0 0-2.22-1.11 2.22 1.11Zm0 0v2.78-2.78Zm-6.67-3.33L12 2 9.78 3.11h4.44ZM3.11 6.44l2.22-1.11-2.22 1.11Zm0 0 2.22 1.11-2.22-1.11Zm0 0v2.78-2.78ZM12 22l-2.22-1.11L12 22Zm0 0 2.22-1.11L12 22Zm0 0v-2.78V22Zm-6.67-3.33-2.22-1.11v-2.78l2.22 3.89Z\"\n />\n </svg>\n);\n\nexport const Box2Icon = forwardRef(Box2Component);\n","import React from 'react';\n\nexport interface BoxIconProps {\n /** Size of the icon in pixels */\n size?: number;\n /** Optional CSS classes */\n className?: string;\n}\n\n/**\n * Box icon component\n * @description Icon representing a 3D box or package\n */\nexport const BoxIcon = ({ size = 20, className }: BoxIconProps) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 27 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M23.34 25.005L26.67 23.34V19.17M16.665 11.67L13.335 13.335M13.335 13.335L10.005 11.67M13.335 13.335V17.505M26.67 6.66L23.34 8.325M26.67 6.66L23.34 4.995M26.67 6.66V10.83M16.665 1.665L13.335 0L10.005 1.665H16.665ZM0 6.66L3.33 4.995M0 6.66L3.33 8.325M0 6.66V10.83M13.335 30L10.005 28.335M13.335 30L16.665 28.335M13.335 30V25.83M3.33 25.005L0 23.34V19.17\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n","import * as React from \"react\";\nimport { SVGProps, Ref, forwardRef } from \"react\";\n\nexport interface CircleIconProps extends SVGProps<SVGSVGElement> {\n size?: number;\n}\n\n/**\n * Self-contained SVG component for the arrow pointing down icon.\n * @param {Object} props - Props to be passed into the component.\n * @param {Ref<SVGSVGElement>} ref - A reference to the SVG element.\n * @returns {JSX.Element}\n * \n * Usage:\n * ```tsx\n * import CircleIcon from 'path-to-icons/CircleIcon';\n * \n * const MyComponent = () => (\n * <div>\n * <CircleIcon className=\"icon-class\" />\n * </div>\n * );\n * ```\n */\nconst CircleComponent = (\n { size, ...props }: CircleIconProps,\n ref: Ref<SVGSVGElement>\n) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 16 16\"\n width={size}\n height={size}\n fill=\"none\"\n ref={ref}\n {...props}\n >\n <g clipPath=\"url(#a)\">\n <path\n fill=\"currontColor\"\n fillRule=\"evenodd\"\n d=\"M8 2a6 6 0 1 0 0 12A6 6 0 0 0 8 2ZM.665 8a7.333 7.333 0 1 1 14.667 0A7.333 7.333 0 0 1 .666 8Z\"\n clipRule=\"evenodd\"\n />\n </g>\n <defs>\n <clipPath id=\"a\">\n <path fill=\"#fff\" d=\"M0 0h16v16H0z\" />\n </clipPath>\n </defs>\n </svg>\n);\n\nexport const CircleIcon = forwardRef(CircleComponent);\n","import React, { forwardRef, Ref, SVGProps } from \"react\";\n\nexport interface AddIconProps extends SVGProps<SVGSVGElement> {\n title?: string;\n titleId?: string;\n size?: number;\n}\n\nconst AddIconComponent = (\n { title, titleId, size, ...props }: AddIconProps,\n ref: Ref<SVGSVGElement>\n) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n fill=\"none\"\n ref={ref}\n aria-labelledby={titleId}\n {...props}\n >\n {title ? <title id={titleId}>{title}</title> : null}\n <g clipPath=\"url(#a)\">\n <mask\n id=\"b\"\n width={24}\n height={24}\n x={0}\n y={0}\n maskUnits=\"userSpaceOnUse\"\n style={{\n maskType: \"luminance\",\n }}\n >\n <path fill=\"#fff\" d=\"M24 0H0v24h24V0Z\" />\n </mask>\n <g fill=\"#fff\" mask=\"url(#b)\">\n <path d=\"M11.99 22.75C6.06 22.75 1.25 17.93 1.25 12S6.07 1.25 12 1.25 22.75 6.07 22.75 12c0 .6-.05 1.21-.15 1.8-.07.41-.45.69-.87.61a.75.75 0 0 1-.61-.87c.09-.51.13-1.03.13-1.54 0-5.1-4.15-9.25-9.25-9.25S2.75 6.9 2.75 12 6.9 21.25 12 21.25c.72 0 1.43-.08 2.12-.25.39-.09.81.15.9.56.1.4-.15.81-.56.9-.8.19-1.63.29-2.47.29Z\" />\n <path d=\"M16 12.75H8c-.41 0-.75-.34-.75-.75s.34-.75.75-.75h8c.41 0 .75.34.75.75s-.34.75-.75.75Z\" />\n <path d=\"M12 16.75c-.41 0-.75-.34-.75-.75V8c0-.41.34-.75.75-.75s.75.34.75.75v8c0 .41-.34.75-.75.75ZM18.85 22.54a.86.86 0 0 1-.85-.69l-.27-1.18c-.13-.58-.59-1.03-1.16-1.16l-1.2-.28a.848.848 0 0 1-.67-.85c.01-.41.29-.77.69-.85l1.18-.27c.57-.13 1.03-.59 1.16-1.16l.28-1.2c.09-.39.44-.67.85-.67.42 0 .77.29.85.69l.27 1.18c.13.57.59 1.03 1.16 1.16l1.2.28c.39.09.68.44.67.85 0 .41-.28.76-.68.85l-1.19.27c-.58.13-1.03.59-1.16 1.16l-.28 1.2c-.09.39-.44.67-.85.67Zm-1.11-4.16c.46.27.84.65 1.11 1.11.27-.46.65-.84 1.11-1.11-.46-.27-.84-.65-1.11-1.11-.27.46-.65.84-1.11 1.11Z\" />\n </g>\n </g>\n <defs>\n <clipPath id=\"a\">\n <path fill=\"#fff\" d=\"M0 0h24v24H0z\" />\n </clipPath>\n </defs>\n </svg>\n);\nexport const AddIcon = forwardRef(AddIconComponent);\n","import React from 'react';\n\nexport interface XMarkProps {\n /** Size of the icon in pixels */\n size?: number;\n /** Optional CSS classes */\n className?: string;\n}\n\n/**\n * XMark icon component\n * @description Icon representing a close or dismiss action.\n */\nexport const XMark = ({ size = 20, className }: XMarkProps) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2.74408 2.74408C3.06951 2.41864 3.59715 2.41864 3.92259 2.74408L10 8.82149L16.0774 2.74408C16.4028 2.41864 16.9305 2.41864 17.2559 2.74408C17.5814 3.06952 17.5814 3.59715 17.2559 3.92259L11.1785 10L17.2559 16.0774C17.5814 16.4028 17.5814 16.9305 17.2559 17.2559C16.9305 17.5814 16.4028 17.5814 16.0774 17.2559L10 11.1785L3.92259 17.2559C3.59715 17.5814 3.06951 17.5814 2.74408 17.2559C2.41864 16.9305 2.41864 16.4028 2.74408 16.0774L8.82149 10L2.74408 3.92259C2.41864 3.59715 2.41864 3.06951 2.74408 2.74408Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport interface UploadImageIconProps {\n /** Size of the icon in pixels */\n size?: number;\n /** Optional CSS classes */\n className?: string;\n}\n\n/**\n * Icon for uploading images\n */\nexport const UploadImageIcon = ({ size = 20, className }: UploadImageIconProps) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 43 43\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <g clipPath=\"url(#clip0_50_31011)\">\n <path d=\"M33.9412 3.62061H14.6738V11.6106H38.0563V7.73402C38.0563 5.46567 36.2102 3.62061 33.9412 3.62061Z\" fill=\"#CED9F9\"/>\n <path d=\"M23.0352 12.8403H0.5V5.42636C0.5 2.70972 2.71068 0.5 5.42828 0.5H12.6336C13.3497 0.5 14.0396 0.650925 14.6664 0.934509C15.5418 1.32896 16.2939 1.97913 16.8213 2.8286L23.0352 12.8403Z\" fill=\"#1640C1\"/>\n <path d=\"M42.5 14.4999V38.3812C42.5 40.6525 40.6511 42.4998 38.3789 42.4998H4.62111C2.34891 42.4998 0.5 40.6525 0.5 38.3812V10.3804H38.3789C40.6511 10.3804 42.5 12.2283 42.5 14.4999Z\" fill=\"#2354E6\"/>\n <path d=\"M42.5 14.4999V38.3812C42.5 40.6525 40.6511 42.4998 38.3789 42.4998H21.5V10.3804H38.3789C40.6511 10.3804 42.5 12.2283 42.5 14.4999Z\" fill=\"#1849D6\"/>\n <path d=\"M32.5471 26.44C32.5471 32.5325 27.5909 37.4889 21.4991 37.4889C15.4073 37.4889 10.4512 32.5325 10.4512 26.44C10.4512 20.3486 15.4073 15.3921 21.4991 15.3921C27.5909 15.3921 32.5471 20.3486 32.5471 26.44Z\" fill=\"#E7ECFC\"/>\n <path d=\"M32.5479 26.44C32.5479 32.5325 27.5918 37.4889 21.5 37.4889V15.3921C27.5918 15.3921 32.5479 20.3486 32.5479 26.44Z\" fill=\"#CED9F9\"/>\n <path d=\"M25.0612 26.5753C24.8308 26.7704 24.5485 26.8656 24.2688 26.8656C23.9185 26.8656 23.5705 26.7173 23.327 26.4282L22.7307 25.7213V30.3494C22.7307 31.0287 22.1795 31.5799 21.5002 31.5799C20.8209 31.5799 20.2698 31.0287 20.2698 30.3494V25.7213L19.6734 26.4282C19.2344 26.9476 18.4587 27.014 17.9392 26.5753C17.4201 26.1373 17.3535 25.3612 17.7915 24.8418L20.2271 21.9543C20.5447 21.5788 21.008 21.3628 21.5002 21.3628C21.9924 21.3628 22.4558 21.5788 22.7733 21.9543L25.2089 24.8418C25.647 25.3612 25.5803 26.1373 25.0612 26.5753Z\" fill=\"#6C8DEF\"/>\n <path d=\"M25.061 26.5753C24.8306 26.7704 24.5483 26.8656 24.2686 26.8656C23.9183 26.8656 23.5703 26.7173 23.3268 26.4282L22.7305 25.7213V30.3494C22.7305 31.0287 22.1793 31.5799 21.5 31.5799V21.3628C21.9922 21.3628 22.4555 21.5788 22.7731 21.9543L25.2087 24.8418C25.6467 25.3612 25.5801 26.1373 25.061 26.5753Z\" fill=\"#3B67E9\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_50_31011\">\n <rect width=\"42\" height=\"42\" fill=\"white\" transform=\"translate(0.5 0.5)\"/>\n </clipPath>\n </defs>\n </svg>\n);","import React from 'react';\n\nexport interface InfoIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels */\n size?: number;\n /** Optional CSS classes */\n className?: string;\n}\n\n/**\n * Info icon component\n * @description Icon representing information\n */\nexport const InfoIcon = ({ size = 16, className, ...props }: InfoIconProps) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M8 0C12.4183 0 16 3.58172 16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8C0 3.58172 3.58172 0 8 0ZM7 7C6.58579 7 6.25 7.33579 6.25 7.75C6.25 8.16421 6.58579 8.5 7 8.5H7.25293C7.41287 8.5 7.53176 8.64856 7.49707 8.80469L7.03809 10.8701C6.79522 11.963 7.62751 13 8.74707 13H9C9.41421 13 9.75 12.6642 9.75 12.25C9.75 11.8358 9.41421 11.5 9 11.5H8.74707C8.58713 11.5 8.46824 11.3514 8.50293 11.1953L8.96191 9.12988C9.20478 8.03698 8.37249 7 7.25293 7H7ZM8 3C7.44771 3 7 3.44772 7 4C7 4.55228 7.44771 5 8 5C8.55228 5 9 4.55228 9 4C9 3.44772 8.55228 3 8 3Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from \"react\";\n\nexport interface LeftArrowIconProps extends React.SVGProps<SVGSVGElement> {\n\tsize?: number;\n}\n\nexport const LeftArrowIcon: React.FC<LeftArrowIconProps> = ({\n\tsize = 12,\n\t...props\n}) => (\n\t<svg\n\t\twidth={size}\n\t\theight={size}\n\t\tviewBox=\"0 0 12 12\"\n\t\tfill=\"none\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t{...props}\n\t>\n\t\t<path\n\t\t\tfillRule=\"evenodd\"\n\t\t\tclipRule=\"evenodd\"\n\t\t\td=\"M10.5 6C10.5 6.31066 10.2482 6.5625 9.9375 6.5625L3.42049 6.5625L5.83525 8.97725C6.05492 9.19692 6.05492 9.55308 5.83525 9.77275C5.61558 9.99242 5.25942 9.99242 5.03975 9.77275L1.66475 6.39775C1.44508 6.17808 1.44508 5.82192 1.66475 5.60225L5.03975 2.22725C5.25942 2.00758 5.61558 2.00758 5.83525 2.22725C6.05492 2.44692 6.05492 2.80308 5.83525 3.02275L3.4205 5.4375L9.9375 5.4375C10.2482 5.4375 10.5 5.68934 10.5 6Z\"\n\t\t\tfill=\"#22262E\"\n\t\t/>\n\t</svg>\n);\n","import React from 'react';\n\nexport interface XMarkAlertProps {\n /** Size of the icon in pixels */\n size?: number;\n /** Optional CSS classes */\n className?: string;\n}\n\n/**\n * XMark icon component\n * @description Icon representing a close or dismiss action.\n */\nexport const XMarkAlert = ({ size = 20, className }: XMarkAlertProps) => (\n <svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n <path d=\"M11.4736 10.0004L15.451 13.9779L13.9779 15.451L10.0004 11.4736L6.02295 15.451L4.54981 13.9779L8.52728 10.0004L4.5498 6.02294L6.02294 4.5498L10.0004 8.52728L13.9779 4.5498L15.451 6.02294L11.4736 10.0004Z\" className='fill-med-em'/>\n </svg>\n);","import React from 'react';\n\nexport interface StraightInfoIconProps {\n /** Size of the icon in pixels */\n size?: number;\n /** Optional CSS classes */\n className?: string;\n}\n\n/**\n * StraightInfo icon component\n * @description Icon representing an information message.\n */\nexport const StraightInfoIcon = ({ size = 20, className }: StraightInfoIconProps) => (\n <svg width={size} height={size} className={className} viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12ZM11 9V7H13V9H11ZM11 17V11H13V17H11Z\" fill=\"currentColor\"/>\n </svg>\n);","\nimport React from 'react';\n\nexport interface QuestionCircleIconProps {\n /** Size of the icon in pixels */\n size?: number;\n /** Optional CSS classes */\n className?: string;\n}\n\n/**\n * QuestionCircle icon component\n * @description Icon representing a question mark in a circle.\n */\nexport const QuestionCircle = ({ size = 24, className }: QuestionCircleIconProps) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path d=\"M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M12.0002 13.4806V13.2249C12.0002 12.3967 12.5118 11.9583 13.0233 11.6051C13.5227 11.2641 14.0219 10.8256 14.0219 10.0218C14.0219 8.9013 13.1207 8 12.0002 8C10.8797 8 9.97852 8.9013 9.97852 10.0218\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M11.9941 16.3909H12.0051\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n);\n","\nimport React from 'react';\n\nexport interface BookOutlinedProps {\n /** Size of the icon in pixels */\n size?: number;\n /** Optional CSS classes */\n className?: string;\n}\n\n/**\n * BookOutlined icon component\n */\nexport const BookOutlined = ({ size = 20, className }: BookOutlinedProps) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path d=\"M18.3337 13.9498V3.8915C18.3337 2.8915 17.517 2.14983 16.5253 2.23317H16.4753C14.7253 2.38317 12.067 3.27483 10.5837 4.20817L10.442 4.29983C10.2003 4.44983 9.80033 4.44983 9.55866 4.29983L9.35033 4.17483C7.86699 3.24983 5.21699 2.3665 3.46699 2.22483C2.47533 2.1415 1.66699 2.8915 1.66699 3.88317V13.9498C1.66699 14.7498 2.31699 15.4998 3.11699 15.5998L3.35866 15.6332C5.16699 15.8748 7.95866 16.7915 9.55866 17.6665L9.59199 17.6832C9.81699 17.8082 10.1753 17.8082 10.392 17.6832C11.992 16.7998 14.792 15.8748 16.6087 15.6332L16.8837 15.5998C17.6837 15.4998 18.3337 14.7498 18.3337 13.9498Z\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M10 4.57495V17.075\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M6.45801 7.07495H4.58301\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M7.08301 9.57495H4.58301\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n);\n","\nimport React from 'react';\n\nexport interface MessageProgrammingOutlinedProps {\n /** Size of the icon in pixels */\n size?: number;\n /** Optional CSS classes */\n className?: string;\n}\n\n/**\n * MessageProgrammingOutlined icon component\n */\nexport const MessageProgrammingOutlined = ({ size = 20, className }: MessageProgrammingOutlinedProps) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path d=\"M7.08366 15.808H6.66699C3.33366 15.808 1.66699 14.9747 1.66699 10.808V6.64136C1.66699 3.30802 3.33366 1.64136 6.66699 1.64136H13.3337C16.667 1.64136 18.3337 3.30802 18.3337 6.64136V10.808C18.3337 14.1414 16.667 15.808 13.3337 15.808H12.917C12.6587 15.808 12.4087 15.933 12.2503 16.1414L11.0003 17.808C10.4503 18.5414 9.55032 18.5414 9.00032 17.808L7.75032 16.1414C7.61698 15.958 7.31699 15.808 7.08366 15.808Z\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M6.66667 7.25L5 8.91667L6.66667 10.5833\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M13.333 7.25L14.9997 8.91667L13.333 10.5833\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M10.8337 6.9751L9.16699 10.8585\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n);\n","\nimport React from 'react';\n\nexport interface VideoPlayOutlinedProps {\n /** Size of the icon in pixels */\n size?: number;\n /** Optional CSS classes */\n className?: string;\n}\n\n/**\n * VideoPlayOutlined icon component\n */\nexport const VideoPlayOutlined = ({ size = 20, className }: VideoPlayOutlinedProps) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path d=\"M18.3337 12.5001V7.50008C18.3337 3.33341 16.667 1.66675 12.5003 1.66675H7.50033C3.33366 1.66675 1.66699 3.33341 1.66699 7.50008V12.5001C1.66699 16.6667 3.33366 18.3334 7.50033 18.3334H12.5003C16.667 18.3334 18.3337 16.6667 18.3337 12.5001Z\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M2.09961 5.92529H17.8996\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M7.09961 1.75854V5.80854\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M12.9004 1.75854V5.43354\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M8.125 12.0416V11.0416C8.125 9.75827 9.03333 9.23327 10.1417 9.87493L11.0083 10.3749L11.875 10.8749C12.9833 11.5166 12.9833 12.5666 11.875 13.2083L11.0083 13.7083L10.1417 14.2083C9.03333 14.8499 8.125 14.3249 8.125 13.0416V12.0416V12.0416Z\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n);\n","\nimport React from 'react';\n\nexport interface ProgrammingArrowsOutlinedProps {\n /** Size of the icon in pixels */\n size?: number;\n /** Optional CSS classes */\n className?: string;\n}\n\n/**\n * ProgrammingArrowsOutlined icon component\n */\nexport const ProgrammingArrowsOutlined = ({ size = 20, className }: ProgrammingArrowsOutlinedProps) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path d=\"M15.833 13.3333V5.41667C15.833 4.5 15.083 3.75 14.1663 3.75H9.58301\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M11.667 1.66675L9.16699 3.75008L11.667 5.83341\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M15.833 18.3333C17.2137 18.3333 18.333 17.214 18.333 15.8333C18.333 14.4525 17.2137 13.3333 15.833 13.3333C14.4523 13.3333 13.333 14.4525 13.333 15.8333C13.333 17.214 14.4523 18.3333 15.833 18.3333Z\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M4.16699 6.66675V14.5834C4.16699 15.5001 4.91699 16.2501 5.83366 16.2501H10.417\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M8.33301 18.3334L10.833 16.2501L8.33301 14.1667\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M4.16699 6.66675C5.5477 6.66675 6.66699 5.54746 6.66699 4.16675C6.66699 2.78604 5.5477 1.66675 4.16699 1.66675C2.78628 1.66675 1.66699 2.78604 1.66699 4.16675C1.66699 5.54746 2.78628 6.66675 4.16699 6.66675Z\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n);\n","\nimport React from 'react';\n\nexport interface DataArrowsOutlinedProps {\n /** Size of the icon in pixels */\n size?: number;\n /** Optional CSS classes */\n className?: string;\n}\n\n/**\n * DataArrowsOutlined icon component\n */\nexport const DataArrowsOutlined = ({ size = 20, className }: DataArrowsOutlinedProps) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path d=\"M16.6667 11.6666C17.5871 11.6666 18.3333 10.9204 18.3333 9.99992C18.3333 9.07944 17.5871 8.33325 16.6667 8.33325C15.7462 8.33325 15 9.07944 15 9.99992C15 10.9204 15.7462 11.6666 16.6667 11.6666Z\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M16.6667 5.00008C17.5871 5.00008 18.3333 4.25389 18.3333 3.33341C18.3333 2.41294 17.5871 1.66675 16.6667 1.66675C15.7462 1.66675 15 2.41294 15 3.33341C15 4.25389 15.7462 5.00008 16.6667 5.00008Z\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M16.6667 18.3333C17.5871 18.3333 18.3333 17.5871 18.3333 16.6667C18.3333 15.7462 17.5871 15 16.6667 15C15.7462 15 15 15.7462 15 16.6667C15 17.5871 15.7462 18.3333 16.6667 18.3333Z\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M3.33366 11.6666C4.25413 11.6666 5.00033 10.9204 5.00033 9.99992C5.00033 9.07944 4.25413 8.33325 3.33366 8.33325C2.41318 8.33325 1.66699 9.07944 1.66699 9.99992C1.66699 10.9204 2.41318 11.6666 3.33366 11.6666Z\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M5 10H15\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M15.0003 3.33325H11.667C10.0003 3.33325 9.16699 4.16659 9.16699 5.83325V14.1666C9.16699 15.8333 10.0003 16.6666 11.667 16.6666H15.0003\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n);\n","import React from 'react';\n\nexport const AIMessage = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"21\" height=\"20\" viewBox=\"0 0 21 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <g clipPath=\"url(#clip0_1562_62901)\">\n <mask id=\"mask0_1562_62901\" style={{ maskType: 'luminance' }} maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"21\" height=\"20\">\n <path d=\"M20.418 0H0.417969V20H20.418V0Z\" fill=\"white\" />\n </mask>\n <g mask=\"url(#mask0_1562_62901)\">\n <path d=\"M14.3001 16.2424C13.9501 16.2424 13.6668 16.0091 13.5918 15.6758L13.3751 14.7341C13.2751 14.2841 12.9168 13.9341 12.4751 13.8258L11.5251 13.6008C11.2001 13.5341 10.9668 13.2424 10.9668 12.8924C10.9668 12.5424 11.2001 12.2591 11.5418 12.1841L12.4835 11.9674C12.9335 11.8674 13.2835 11.5091 13.3918 11.0674L13.6168 10.1091C13.6835 9.78411 13.9751 9.55078 14.3168 9.55078C14.6251 9.55078 14.9501 9.78411 15.0251 10.1174L15.2418 11.0674C15.3418 11.5174 15.7001 11.8674 16.1418 11.9758L17.1001 12.2008C17.4251 12.2674 17.6585 12.5591 17.6585 12.9091C17.6585 13.2591 17.4251 13.5424 17.1001 13.6174L16.1501 13.8341C15.7001 13.9341 15.3501 14.2924 15.2418 14.7341L15.0168 15.6841C14.9501 16.0091 14.6501 16.2424 14.3001 16.2424ZM13.4751 12.9091C13.8168 13.1174 14.1001 13.4008 14.3085 13.7424C14.5168 13.4008 14.8001 13.1174 15.1418 12.9174C14.8001 12.7091 14.5168 12.4258 14.3085 12.0841C14.1001 12.4258 13.8168 12.7091 13.4751 12.9174V12.9091Z\" fill=\"currentColor\" />\n <path d=\"M4.91727 18.1171C3.98394 18.1171 3.40061 17.8088 3.02561 17.4338C2.29227 16.7005 1.77561 15.1421 3.42561 11.8338L4.15061 10.3921C4.24227 10.2005 4.24227 9.80047 4.15061 9.6088L3.42561 8.15881C1.76727 4.85881 2.29227 3.29214 3.02561 2.55881C3.75894 1.82548 5.31727 1.30048 8.62561 2.95881L15.7589 6.52548C17.9589 7.62548 18.9423 9.3338 18.3173 10.9838C18.1923 11.3088 17.8339 11.4671 17.5089 11.3505C17.1839 11.2255 17.0256 10.8671 17.1423 10.5421C17.5256 9.52547 16.7923 8.44214 15.1923 7.64214L8.05894 4.07548C6.05894 3.07548 4.50894 2.84214 3.90061 3.44214C3.29227 4.04214 3.53394 5.60048 4.53394 7.59214L5.25894 9.04214C5.52561 9.5838 5.52561 10.4005 5.25894 10.9421L4.53394 12.3838C3.53394 14.3838 3.29227 15.9338 3.90061 16.5338C4.50061 17.1338 6.05894 16.9005 8.05894 15.9005L10.3923 14.7338C10.7006 14.5838 11.0756 14.7005 11.2339 15.0171C11.3923 15.3255 11.2589 15.7005 10.9506 15.8588L8.61727 17.0255C7.00894 17.8338 5.80894 18.1171 4.91727 18.1171Z\" fill=\"currentColor\" />\n <path d=\"M9.45117 10.625H4.95117C4.60951 10.625 4.32617 10.3417 4.32617 10C4.32617 9.65833 4.60951 9.375 4.95117 9.375H9.45117C9.79284 9.375 10.0762 9.65833 10.0762 10C10.0762 10.3417 9.79284 10.625 9.45117 10.625Z\" fill=\"currentColor\" />\n </g>\n </g>\n <defs>\n <clipPath id=\"clip0_1562_62901\">\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(0.417969)\" />\n </clipPath>\n </defs>\n </svg>\n);\n","import * as React from \"react\";\nimport { SVGProps, Ref, forwardRef } from \"react\";\n\nexport interface ShareIconProps extends SVGProps<SVGSVGElement> {\n size?: number;\n}\n\n/**\n * Self-contained SVG component for the arrow pointing down icon.\n * @param {Object} props - Props to be passed into the component.\n * @param {Ref<SVGSVGElement>} ref - A reference to the SVG element.\n * @returns {JSX.Element}\n *\n * Usage:\n * ```tsx\n * import ShareIcon from 'path-to-icons/ShareIcon';\n *\n * const MyComponent = () => (\n * <div>\n * <ShareIcon className=\"icon-class\" />\n * </div>\n * );\n * ```\n */\nconst ShareComponent = (\n { size, ...props }: ShareIconProps,\n ref: Ref<SVGSVGElement>\n) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n fill=\"currentColor\"\n ref={ref}\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n d=\"M15.75 4.5a3 3 0 1 1 .825 2.066l-8.421 4.679a3.002 3.002 0 0 1 0 1.51l8.421 4.679a3 3 0 1 1-.729 1.31l-8.421-4.678a3 3 0 1 1 0-4.132l8.421-4.679a3 3 0 0 1-.096-.755Z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nexport const ShareIcon = forwardRef(ShareComponent);\n","import React from \"react\";\n\ninterface SliderThumbIconProps {\n size?: number;\n className?: string;\n}\n\n/**\n * Icono del control deslizante (thumb) del Slider\n */\nexport const SliderThumbIcon: React.FC<SliderThumbIconProps> = ({ \n size = 36,\n className \n}) => {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 36 36\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <defs>\n <filter\n id=\"filter0_dd_50_34857\"\n x=\"0\"\n y=\"0\"\n width=\"36\"\n height=\"36\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feMorphology\n radius=\"2\"\n operator=\"erode\"\n in=\"SourceAlpha\"\n result=\"effect1_dropShadow_50_34857\"\n />\n <feOffset dy=\"2\" />\n <feGaussianBlur stdDeviation=\"2\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 0.0392157 0 0 0 0 0.0496732 0 0 0 0 0.0705882 0 0 0 0.06 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"BackgroundImageFix\"\n result=\"effect1_dropShadow_50_34857\"\n />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feMorphology\n radius=\"2\"\n operator=\"erode\"\n in=\"SourceAlpha\"\n result=\"effect2_dropShadow_50_34857\"\n />\n <feOffset dy=\"4\" />\n <feGaussianBlur stdDeviation=\"4\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 0.0392157 0 0 0 0 0.0496732 0 0 0 0 0.0705882 0 0 0 0.1 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"effect1_dropShadow_50_34857\"\n result=\"effect2_dropShadow_50_34857\"\n />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"effect2_dropShadow_50_34857\"\n result=\"shape\"\n />\n </filter>\n </defs>\n <g filter=\"url(#filter0_dd_50_34857)\">\n <circle cx=\"18\" cy=\"18\" r=\"12\" fill=\"var(--slider-thumb-bg, #FFFFFF)\" />\n <circle\n cx=\"18\"\n cy=\"18\"\n r=\"11.5\"\n stroke=\"var(--slider-thumb-stroke, #000000)\"\n />\n </g>\n </svg>\n );\n};\n\n","import React from \"react\";\n\ninterface SliderPointerUpProps {\n size?: number;\n className?: string;\n}\n\n/**\n * Icono de pointer hacia arriba para etiquetas del Slider\n */\nexport const SliderPointerUp: React.FC<SliderPointerUpProps> = ({ \n size = 20,\n className \n}) => {\n return (\n <svg\n width={size}\n height={Math.round(size * 0.35)}\n viewBox=\"0 0 20 7\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M5.7021 2.31723C7.41751 0.944899 8.27522 0.258733 9.24878 0.0725807C9.7451 -0.0223194 10.2549 -0.0223194 10.7512 0.0725807C11.7248 0.258733 12.5825 0.944898 14.2979 2.31723L20 6.87891H0L5.7021 2.31723Z\"\n fill=\"var(--slider-surface-bg, #F9F9FA)\"\n />\n </svg>\n );\n};\n\n","import React from \"react\";\n\ninterface SliderPointerDownProps {\n size?: number;\n className?: string;\n}\n\n/**\n * Icono de pointer hacia abajo para etiquetas del Slider\n */\nexport const SliderPointerDown: React.FC<SliderPointerDownProps> = ({ \n size = 20,\n className \n}) => {\n return (\n <svg\n width={size}\n height={Math.round(size * 0.35)}\n viewBox=\"0 0 20 7\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M5.7021 4.56168C7.41751 5.93401 8.27522 6.62017 9.24878 6.80633C9.7451 6.90123 10.2549 6.90123 10.7512 6.80633C11.7248 6.62017 12.5825 5.93401 14.2979 4.56168L20 0H0L5.7021 4.56168Z\"\n fill=\"var(--slider-surface-bg, #F9F9FA)\"\n />\n </svg>\n );\n};\n\n","import React from 'react';\n\nexport interface SkalarLogoProps {\n /** Width of the logo in pixels */\n width?: number;\n /** Height of the logo in pixels */\n height?: number;\n /** Optional CSS classes */\n className?: string;\n}\n\n/**\n * Skalar logo component\n * @description The main Skalar brand logo\n */\nexport const SkalarLogo = ({ width = 165, height = 24, className }: SkalarLogoProps) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 165 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path d=\"M33.2926 22.0173C31.4874 20.7152 30.4812 18.7916 30.3333 16.2762H38.1162C38.2346 17.6079 38.8265 18.2885 39.8918 18.2885C40.2765 18.2885 40.6316 18.1998 40.898 18.0222C41.1643 17.8446 41.3123 17.5487 41.3123 17.1344C41.3123 16.5721 41.0164 16.1282 40.4245 15.8027C39.8326 15.4476 38.9152 15.0629 37.6427 14.619C36.1335 14.0863 34.9202 13.5832 33.9436 13.0801C32.967 12.5771 32.1384 11.8372 31.4282 10.8607C30.718 9.88409 30.3924 8.64118 30.3924 7.13193C30.3924 5.62269 30.7771 4.32059 31.5762 3.25524C32.3456 2.18989 33.4109 1.39088 34.7722 0.828607C36.1335 0.266338 37.6427 0 39.3295 0C42.2001 0 44.4492 0.651048 46.136 1.98274C47.8228 3.31443 48.7106 5.1492 48.7993 7.54624H40.9276C40.898 6.89519 40.75 6.4217 40.4245 6.12577C40.1286 5.82984 39.7439 5.71147 39.3 5.71147C39.004 5.71147 38.7377 5.82984 38.5305 6.03699C38.3234 6.24414 38.2346 6.54007 38.2346 6.92478C38.2346 7.45746 38.5305 7.90136 39.1224 8.22688C39.7143 8.582 40.6316 8.96671 41.9041 9.46979C43.3838 10.0321 44.5971 10.5351 45.5441 11.0382C46.4911 11.5413 47.3197 12.2515 48.0299 13.1393C48.7402 14.0271 49.0953 15.1813 49.0953 16.5425C49.0953 17.963 48.7402 19.2651 48.0299 20.3896C47.3197 21.5142 46.3135 22.402 44.9522 23.053C43.6205 23.7041 42.0225 24 40.1582 24C37.406 23.9704 35.1273 23.3194 33.2926 22.0173Z\" fill=\"currentColor\" />\n <path d=\"M65.7858 23.7633L58.9794 13.6424V23.7633H51.6995V0.41433H59.009V10.2392L65.697 0.41433H73.9831L65.9337 11.6005L74.5157 23.7633H65.7858Z\" fill=\"currentColor\" />\n <path d=\"M91.5613 20.2121H83.7783L82.6241 23.7633H74.9299L83.4823 0.41433H91.9164L100.41 23.7633H92.6858L91.5613 20.2121ZM89.7857 14.7078L87.6846 8.19731L85.5834 14.7078H89.7857Z\" fill=\"currentColor\" />\n <path d=\"M109.376 18.1998H116.419V23.7633H102.037V0.41433H109.347V18.1998H109.376Z\" fill=\"currentColor\" />\n <path d=\"M133.731 20.2121H125.948L124.794 23.7633H117.1L125.652 0.41433H134.087L142.58 23.7633H134.856L133.731 20.2121ZM131.956 14.7078L129.855 8.19731L127.754 14.7078H131.956Z\" fill=\"currentColor\" />\n <path d=\"M155.985 23.7633L151.605 15.3884H151.576V23.7633H144.266V0.41433H155.157C157.051 0.41433 158.649 0.739853 160.01 1.42049C161.342 2.10114 162.348 2.98893 163.028 4.14306C163.709 5.29719 164.035 6.59929 164.035 8.04935C164.035 9.61778 163.591 11.0087 162.732 12.1924C161.874 13.4057 160.602 14.2639 159.004 14.7966L164.035 23.7633H155.985ZM151.576 10.5056H154.476C155.186 10.5056 155.719 10.3576 156.044 10.0321C156.4 9.70656 156.577 9.20348 156.577 8.52284C156.577 7.90138 156.4 7.42789 156.044 7.07277C155.689 6.71766 155.157 6.5401 154.476 6.5401H151.576V10.5056Z\" fill=\"currentColor\" />\n <path d=\"M0.0593784 0.562271L0.0297852 9.32183L7.19131 9.35142L7.16172 16.5129L14.2345 16.5425L14.2049 23.7041L23.0828 23.7633L23.1716 0.65105L0.0593784 0.562271Z\" fill=\"currentColor\" />\n <path d=\"M7.13214 23.6745C3.16667 23.6745 -0.0293892 20.4488 0.00020386 16.4834L7.16173 16.513L7.13214 23.6745Z\" fill=\"currentColor\" />\n </svg>\n);\n","import React from 'react';\n\nexport interface SkalarLogoNoTextProps {\n /** Width of the logo in pixels */\n width?: number;\n /** Height of the logo in pixels */\n height?: number;\n /** Optional CSS classes */\n className?: string;\n}\n\n/**\n * Skalar logo component without text\n * @description The Skalar brand logo icon only, without text\n */\nexport const SkalarLogoNoText = ({ width = 26, height = 25, className }: SkalarLogoNoTextProps) => (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 26 25\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <g clipPath=\"url(#clip0_2642_443540)\">\n <path d=\"M2.89524 2.84375L2.86914 10.5762L9.18445 10.6024L9.15835 16.9242L15.3954 16.9503L15.3693 23.2722L23.1982 23.3244L23.2765 2.92212L2.89524 2.84375Z\" fill=\"currentColor\"/>\n <path d=\"M9.13314 23.2454C5.63624 23.2454 2.81783 20.398 2.84393 16.8975L9.15924 16.9236L9.13314 23.2454Z\" fill=\"currentColor\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_2642_443540\">\n <rect width=\"25.7812\" height=\"25.0002\" fill=\"currentColor\"/>\n </clipPath>\n </defs>\n </svg>\n);\n","import React from \"react\";\n\nexport interface RightArrowIconProps extends React.SVGProps<SVGSVGElement> {\n size?: number;\n}\n\nexport const RightArrowIcon: React.FC<RightArrowIconProps> = ({\n size = 12,\n ...props\n}) => (\n <svg width={size} height={size} fill=\"none\" {...props} viewBox=\"0 0 14 14\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4.8125 2.625L9.1875 7L4.8125 11.375\" stroke=\"#5A606B\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n);\n","import React from 'react';\n\nexport interface CalendarIconProps {\n /** Size of the icon in pixels */\n size?: number;\n /** Optional CSS classes */\n className?: string;\n}\n\n/**\n * Calendar icon component\n * @description Icon representing a 3D Calendar or package\n */\nexport const CalendarIcon = ({ size = 20, className }: CalendarIconProps) => (\n<svg xmlns=\"http://www.w3.org/2000/svg\" width={size} height={size} className={className} viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M6.29844 14.3999C6.29844 13.9028 6.70138 13.4999 7.19844 13.4999H7.21044C7.70749 13.4999 8.11044 13.9028 8.11044 14.3999V14.4119C8.11044 14.909 7.70749 15.3119 7.21044 15.3119H7.19844C6.70138 15.3119 6.29844 14.909 6.29844 14.4119V14.3999Z\" fill=\"#22262E\"/>\n <path d=\"M7.19844 15.8999C6.70138 15.8999 6.29844 16.3028 6.29844 16.7999V16.8119C6.29844 17.309 6.70138 17.7119 7.19844 17.7119H7.21044C7.70749 17.7119 8.11044 17.309 8.11044 16.8119V16.7999C8.11044 16.3028 7.70749 15.8999 7.21044 15.8999H7.19844Z\" fill=\"#22262E\"/>\n <path d=\"M8.69844 14.3999C8.69844 13.9028 9.10138 13.4999 9.59844 13.4999H9.61044C10.1075 13.4999 10.5104 13.9028 10.5104 14.3999V14.4119C10.5104 14.909 10.1075 15.3119 9.61044 15.3119H9.59844C9.10138 15.3119 8.69844 14.909 8.69844 14.4119V14.3999Z\" fill=\"#22262E\"/>\n <path d=\"M9.59844 15.8999C9.10138 15.8999 8.69844 16.3028 8.69844 16.7999V16.8119C8.69844 17.309 9.10138 17.7119 9.59844 17.7119H9.61044C10.1075 17.7119 10.5104 17.309 10.5104 16.8119V16.7999C10.5104 16.3028 10.1075 15.8999 9.61044 15.8999H9.59844Z\" fill=\"#22262E\"/>\n <path d=\"M11.0984 11.9999C11.0984 11.5028 11.5014 11.0999 11.9984 11.0999H12.0104C12.5075 11.0999 12.9104 11.5028 12.9104 11.9999V12.0119C12.9104 12.509 12.5075 12.9119 12.0104 12.9119H11.9984C11.5014 12.9119 11.0984 12.509 11.0984 12.0119V11.9999Z\" fill=\"#22262E\"/>\n <path d=\"M11.9984 13.4999C11.5014 13.4999 11.0984 13.9028 11.0984 14.3999V14.4119C11.0984 14.909 11.5014 15.3119 11.9984 15.3119H12.0104C12.5075 15.3119 12.9104 14.909 12.9104 14.4119V14.3999C12.9104 13.9028 12.5075 13.4999 12.0104 13.4999H11.9984Z\" fill=\"#22262E\"/>\n <path d=\"M11.0984 16.7999C11.0984 16.3028 11.5014 15.8999 11.9984 15.8999H12.0104C12.5075 15.8999 12.9104 16.3028 12.9104 16.7999V16.8119C12.9104 17.309 12.5075 17.7119 12.0104 17.7119H11.9984C11.5014 17.7119 11.0984 17.309 11.0984 16.8119V16.7999Z\" fill=\"#22262E\"/>\n <path d=\"M14.3984 11.0999C13.9014 11.0999 13.4984 11.5028 13.4984 11.9999V12.0119C13.4984 12.509 13.9014 12.9119 14.3984 12.9119H14.4104C14.9075 12.9119 15.3104 12.509 15.3104 12.0119V11.9999C15.3104 11.5028 14.9075 11.0999 14.4104 11.0999H14.3984Z\" fill=\"#22262E\"/>\n <path d=\"M13.4984 14.3999C13.4984 13.9028 13.9014 13.4999 14.3984 13.4999H14.4104C14.9075 13.4999 15.3104 13.9028 15.3104 14.3999V14.4119C15.3104 14.909 14.9075 15.3119 14.4104 15.3119H14.3984C13.9014 15.3119 13.4984 14.909 13.4984 14.4119V14.3999Z\" fill=\"#22262E\"/>\n <path d=\"M14.3984 15.8999C13.9014 15.8999 13.4984 16.3028 13.4984 16.7999V16.8119C13.4984 17.309 13.9014 17.7119 14.3984 17.7119H14.4104C14.9075 17.7119 15.3104 17.309 15.3104 16.8119V16.7999C15.3104 16.3028 14.9075 15.8999 14.4104 15.8999H14.3984Z\" fill=\"#22262E\"/>\n <path d=\"M15.8984 11.9999C15.8984 11.5028 16.3014 11.0999 16.7984 11.0999H16.8104C17.3075 11.0999 17.7104 11.5028 17.7104 11.9999V12.0119C17.7104 12.509 17.3075 12.9119 16.8104 12.9119H16.7984C16.3014 12.9119 15.8984 12.509 15.8984 12.0119V11.9999Z\" fill=\"#22262E\"/>\n <path d=\"M16.7984 13.4999C16.3014 13.4999 15.8984 13.9028 15.8984 14.3999V14.4119C15.8984 14.909 16.3014 15.3119 16.7984 15.3119H16.8104C17.3075 15.3119 17.7104 14.909 17.7104 14.4119V14.3999C17.7104 13.9028 17.3075 13.4999 16.8104 13.4999H16.7984Z\" fill=\"#22262E\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M6.89844 2.3999C7.39549 2.3999 7.79844 2.80285 7.79844 3.2999V4.7999H16.1984V3.2999C16.1984 2.80285 16.6014 2.3999 17.0984 2.3999C17.5955 2.3999 17.9984 2.80285 17.9984 3.2999V4.7999H18.2984C20.121 4.7999 21.5984 6.27736 21.5984 8.0999V18.2999C21.5984 20.1224 20.121 21.5999 18.2984 21.5999H5.69844C3.8759 21.5999 2.39844 20.1224 2.39844 18.2999V8.0999C2.39844 6.27736 3.8759 4.7999 5.69844 4.7999H5.99844V3.2999C5.99844 2.80285 6.40138 2.3999 6.89844 2.3999ZM5.69844 8.9999C4.87001 8.9999 4.19844 9.67148 4.19844 10.4999V18.2999C4.19844 19.1283 4.87001 19.7999 5.69844 19.7999H18.2984C19.1269 19.7999 19.7984 19.1283 19.7984 18.2999V10.4999C19.7984 9.67148 19.1269 8.9999 18.2984 8.9999H5.69844Z\" fill=\"#22262E\"/>\n</svg>\n);\n","import React from 'react';\n\nexport interface EyeIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels */\n size?: number;\n /** Optional CSS classes */\n className?: string;\n}\n\n/**\n * Eye icon component\n * @description Icon representing visible/show password\n */\nexport const EyeIcon = ({ size = 20, className, ...props }: EyeIconProps) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n);\n","import React from 'react';\n\nexport interface EyeOffIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels */\n size?: number;\n /** Optional CSS classes */\n className?: string;\n}\n\n/**\n * Eye off icon component\n * @description Icon representing hidden/hide password\n */\nexport const EyeOffIcon = ({ size = 20, className, ...props }: EyeOffIconProps) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M9.88 9.88a3 3 0 1 0 4.24 4.24\" />\n <path d=\"M10.73 5.08A10.43 10.43 0 0 1 12 5c7 0 10 7 10 7a13.16 13.16 0 0 1-1.67 2.68\" />\n <path d=\"M6.61 6.61A13.526 13.526 0 0 0 2 12s3 7 10 7a9.74 9.74 0 0 0 5.39-1.61\" />\n <line x1=\"2\" x2=\"22\" y1=\"2\" y2=\"22\" />\n </svg>\n);\n","import * as React from \"react\";\nimport { SVGProps, Ref, forwardRef } from \"react\";\n\nexport interface PlusCircleIconProps extends SVGProps<SVGSVGElement> {\n size?: number;\n}\n\n/**\n * Self-contained SVG component for the plus circle icon.\n * @param {Object} props - Props to be passed into the component.\n * @param {Ref<SVGSVGElement>} ref - A reference to the SVG element.\n * @returns {JSX.Element}\n *\n * Usage:\n * ```tsx\n * import { PlusCircleIcon } from '@/shared/icons';\n *\n * const MyComponent = () => (\n * <div>\n * <PlusCircleIcon size={13} />\n * </div>\n * );\n * ```\n */\nconst PlusCircleIconComponent = (\n { size = 13, ...props }: PlusCircleIconProps,\n ref: Ref<SVGSVGElement>\n) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 13 13\"\n width={size}\n height={size}\n fill=\"none\"\n ref={ref}\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.4 12.8C9.93462 12.8 12.8 9.93462 12.8 6.4C12.8 2.86538 9.93462 0 6.4 0C2.86538 0 0 2.86538 0 6.4C0 9.93462 2.86538 12.8 6.4 12.8ZM7 3.8C7 3.46863 6.73137 3.2 6.4 3.2C6.06863 3.2 5.8 3.46863 5.8 3.8V5.8H3.8C3.46863 5.8 3.2 6.06863 3.2 6.4C3.2 6.73137 3.46863 7 3.8 7H5.8V9C5.8 9.33137 6.06863 9.6 6.4 9.6C6.73137 9.6 7 9.33137 7 9V7H9C9.33137 7 9.6 6.73137 9.6 6.4C9.6 6.06863 9.33137 5.8 9 5.8H7V3.8Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n\nexport const PlusCircleIcon = forwardRef(PlusCircleIconComponent);\n","import * as React from \"react\";\nimport { SVGProps, Ref, forwardRef } from \"react\";\n\nexport interface ChevronDownIconProps extends SVGProps<SVGSVGElement> {\n size?: number;\n}\n\n/**\n * Self-contained SVG component for the chevron down icon.\n * @param {Object} props - Props to be passed into the component.\n * @param {Ref<SVGSVGElement>} ref - A reference to the SVG element.\n * @returns {JSX.Element}\n *\n * Usage:\n * ```tsx\n * import { ChevronDownIcon } from '@/shared/icons';\n *\n * const MyComponent = () => (\n * <div>\n * <ChevronDownIcon size={20} />\n * </div>\n * );\n * ```\n */\nconst ChevronDownIconComponent = (\n { size = 20, ...props }: ChevronDownIconProps,\n ref: Ref<SVGSVGElement>\n) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n width={size}\n height={size}\n fill=\"none\"\n ref={ref}\n {...props}\n >\n <path\n d=\"M16.6004 7.4585L11.1671 12.8918C10.5254 13.5335 9.47539 13.5335 8.83372 12.8918L3.40039 7.4585\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeMiterlimit=\"10\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\nexport const ChevronDownIcon = forwardRef(ChevronDownIconComponent);\n","import * as React from \"react\";\nimport { SVGProps, Ref, forwardRef } from \"react\";\n\nexport interface ChevronUpIconProps extends SVGProps<SVGSVGElement> {\n size?: number;\n}\n\n/**\n * Self-contained SVG component for the chevron up icon.\n * @param {Object} props - Props to be passed into the component.\n * @param {Ref<SVGSVGElement>} ref - A reference to the SVG element.\n * @returns {JSX.Element}\n *\n * Usage:\n * ```tsx\n * import { ChevronUpIcon } from '@/shared/icons';\n *\n * const MyComponent = () => (\n * <div>\n * <ChevronUpIcon size={20} />\n * </div>\n * );\n * ```\n */\nconst ChevronUpIconComponent = (\n { size = 20, ...props }: ChevronUpIconProps,\n ref: Ref<SVGSVGElement>\n) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n ref={ref}\n fill=\"none\"\n {...props}\n >\n <path\n d=\"M19.9201 15.0496L13.4001 8.52965C12.6301 7.75965 11.3701 7.75965 10.6001 8.52965L4.08008 15.0496\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-miterlimit=\"10\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n);\n\nexport const ChevronUpIcon = forwardRef(ChevronUpIconComponent);\n","import React from \"react\";\n\nexport interface UnionIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels */\n size?: number;\n /** Optional CSS classes */\n className?: string;\n}\n\n/**\n * Eye off icon component\n * @description Icon representing hidden/hide password\n */\nexport const UnionIcon = ({\n size = 20,\n className,\n ...props\n}: UnionIconProps) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 11 11\"\n fill=\"currentColor\"\n width={size}\n height={size}\n className={className}\n {...props}\n >\n <path\n d=\"M7.39952 1.875L0 9.27452L1.32583 10.6003L8.72543 3.20073V9.1875H10.6004V0H1.41293V1.875H7.39952Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from \"react\";\n\nexport interface MoreIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels */\n size?: number;\n /** Optional CSS classes */\n className?: string;\n}\n\n/**\n * More icon component\n * @description Icon representing more options/menu\n */\nexport const MoreIcon = ({\n size = 16,\n className,\n ...props\n}: MoreIconProps) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n width={size}\n height={size}\n className={className}\n {...props}\n >\n <path\n d=\"M3.33333 6.6665C2.6 6.6665 2 7.2665 2 7.99984C2 8.73317 2.6 9.33317 3.33333 9.33317C4.06667 9.33317 4.66667 8.73317 4.66667 7.99984C4.66667 7.2665 4.06667 6.6665 3.33333 6.6665Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.2\"\n />\n <path\n d=\"M12.6668 6.6665C11.9335 6.6665 11.3335 7.2665 11.3335 7.99984C11.3335 8.73317 11.9335 9.33317 12.6668 9.33317C13.4002 9.33317 14.0002 8.73317 14.0002 7.99984C14.0002 7.2665 13.4002 6.6665 12.6668 6.6665Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.2\"\n />\n <path\n d=\"M7.99984 6.6665C7.2665 6.6665 6.6665 7.2665 6.6665 7.99984C6.6665 8.73317 7.2665 9.33317 7.99984 9.33317C8.73317 9.33317 9.33317 8.73317 9.33317 7.99984C9.33317 7.2665 8.73317 6.6665 7.99984 6.6665Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.2\"\n />\n </svg>\n);\n","import React from \"react\";\n\nexport interface LayerIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels */\n size?: number;\n /** Optional CSS classes */\n className?: string;\n}\n\n/**\n * Layer icon component\n * @description Icon representing layers or stack\n */\nexport const LayerIcon = ({\n size = 16,\n className,\n ...props\n}: LayerIconProps) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n width={size}\n height={size}\n className={className}\n {...props}\n >\n <path\n d=\"M8.67318 1.94687L12.6065 3.69354C13.7399 4.19354 13.7399 5.02021 12.6065 5.52021L8.67318 7.26687C8.22652 7.46687 7.49318 7.46687 7.04652 7.26687L3.11318 5.52021C1.97985 5.02021 1.97985 4.19354 3.11318 3.69354L7.04652 1.94687C7.49318 1.74688 8.22652 1.74688 8.67318 1.94687Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M2 7.3335C2 7.8935 2.42 8.54016 2.93333 8.76683L7.46 10.7802C7.80667 10.9335 8.2 10.9335 8.54 10.7802L13.0667 8.76683C13.58 8.54016 14 7.8935 14 7.3335\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M2 10.6665C2 11.2865 2.36667 11.8465 2.93333 12.0998L7.46 14.1132C7.80667 14.2665 8.2 14.2665 8.54 14.1132L13.0667 12.0998C13.6333 11.8465 14 11.2865 14 10.6665\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n","import React from \"react\";\n\nexport interface FlashIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels */\n size?: number;\n /** Optional CSS classes */\n className?: string;\n}\n\n/**\n * Flash icon component\n * @description Icon representing flash, lightning, or power\n */\nexport const FlashIcon = ({\n size = 16,\n className,\n ...props\n}: FlashIconProps) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n width={size}\n height={size}\n className={className}\n {...props}\n >\n <path\n d=\"M8.66667 1.3335L3.33333 9.3335H8L7.33333 14.6668L12.6667 6.66683H8L8.66667 1.3335Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n","import React from \"react\";\n\nexport interface CalendarIcon2Props extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels */\n size?: number;\n /** Optional CSS classes */\n className?: string;\n}\n\n/**\n * Calendar icon 2 component\n * @description Calendar icon with date dots\n */\nexport const CalendarIcon2 = ({\n size = 16,\n className,\n ...props\n}: CalendarIcon2Props) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n width={size}\n height={size}\n className={className}\n {...props}\n >\n <path\n d=\"M5.3335 1.3335V3.3335\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeMiterlimit=\"10\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M10.6665 1.3335V3.3335\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeMiterlimit=\"10\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M2.3335 6.06006H13.6668\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeMiterlimit=\"10\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14 5.66683V11.3335C14 13.3335 13 14.6668 10.6667 14.6668H5.33333C3 14.6668 2 13.3335 2 11.3335V5.66683C2 3.66683 3 2.3335 5.33333 2.3335H10.6667C13 2.3335 14 3.66683 14 5.66683Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeMiterlimit=\"10\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M7.99715 9.13314H8.00314\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M5.52938 9.13314H5.53537\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M5.52938 11.1331H5.53537\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport interface MaximizeIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels */\n size?: number;\n /** Optional CSS classes */\n className?: string;\n}\n\n/**\n * Maximize icon component\n * @description Icon representing maximize/fullscreen action\n */\nexport const MaximizeIcon = ({ size = 20, className, ...props }: MaximizeIconProps) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M1 4.5V3.25C1 2.005 2.005 1 3.25 1H4.5\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M7.5 1H8.75C9.995 1 11 2.005 11 3.25V4.5\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M11 8V8.75C11 9.995 9.995 11 8.75 11H8\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M4.5 11H3.25C2.005 11 1 9.995 1 8.75V7.5\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M9 6V5M3 6H6H9H3ZM3 6V5V6ZM3 6V7V6ZM9 6V7V6Z\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M6 3H7M6 9V3V9ZM6 9H7H6ZM6 9H5H6ZM6 3H5H6Z\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n);\n","import React from 'react';\n\nexport interface Edit2IconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels */\n size?: number;\n /** Optional CSS classes */\n className?: string;\n}\n\n/**\n * Edit 2 icon component\n * @description Icon representing edit/pencil action\n */\nexport const Edit2Icon = ({ size = 20, className, ...props }: Edit2IconProps) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M6.62968 1.80011L2.52468 6.14511C2.36968 6.31011 2.21968 6.63511 2.18968 6.86011L2.00468 8.48011C1.93968 9.06511 2.35968 9.46511 2.93968 9.36511L4.54968 9.09011C4.77468 9.05011 5.08968 8.88511 5.24468 8.71511L9.34968 4.37011C10.0597 3.62011 10.3797 2.76511 9.27468 1.72011C8.17468 0.685108 7.33968 1.05011 6.62968 1.80011Z\" stroke=\"currentColor\" strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M5.94531 2.5249C6.16031 3.9049 7.28031 4.9599 8.67031 5.0999\" stroke=\"currentColor\" strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M1.5 11H10.5\" stroke=\"currentColor\" strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n);\n","import React from 'react';\n\nexport interface CopyIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels */\n size?: number;\n /** Optional CSS classes */\n className?: string;\n}\n\n/**\n * Copy icon component\n * @description Icon representing copy/duplicate action\n */\nexport const CopyIcon = ({ size = 20, className, ...props }: CopyIconProps) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M8 6.45V8.55C8 10.3 7.3 11 5.55 11H3.45C1.7 11 1 10.3 1 8.55V6.45C1 4.7 1.7 4 3.45 4H5.55C7.3 4 8 4.7 8 6.45Z\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M11 3.45V5.55C11 7.3 10.3 8 8.55 8H8V6.45C8 4.7 7.3 4 5.55 4H4V3.45C4 1.7 4.7 1 6.45 1H8.55C10.3 1 11 1.7 11 3.45Z\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n);\n","import React from 'react';\n\nexport interface TrashIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels */\n size?: number;\n /** Optional CSS classes */\n className?: string;\n}\n\n/**\n * Trash icon component\n * @description Icon representing delete/trash action\n */\nexport const TrashIcon = ({ size = 20, className, ...props }: TrashIconProps) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M10.5 2.99023C8.835 2.82523 7.16 2.74023 5.49 2.74023C4.5 2.74023 3.51 2.79023 2.52 2.89023L1.5 2.99023\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M4.25 2.485L4.36 1.83C4.44 1.355 4.5 1 5.345 1H6.655C7.5 1 7.565 1.375 7.64 1.835L7.75 2.485\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M9.42422 4.56982L9.09922 9.60482C9.04422 10.3898 8.99922 10.9998 7.60422 10.9998H4.39422C2.99922 10.9998 2.95422 10.3898 2.89922 9.60482L2.57422 4.56982\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M5.16406 8.25H6.82906\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M4.75 6.25H7.25\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n);\n","import React from \"react\";\n\nexport interface SlashIconProps extends React.SVGProps<SVGSVGElement> {\n size?: number;\n}\n\nexport const SlashIcon: React.FC<SlashIconProps> = ({\n size = 19,\n ...props\n}) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 10 19\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9.53953 0.0881595C9.95118 0.293984 10.118 0.794545 9.91221 1.20619L1.57887 17.8729C1.37305 18.2845 0.872487 18.4514 0.460839 18.2455C0.0491898 18.0397 -0.117664 17.5392 0.0881606 17.1275L8.42149 0.460838C8.62732 0.0491888 9.12788 -0.117665 9.53953 0.0881595Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","\"use client\";\n\nimport React from 'react';\nimport { clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n// Defines the accepted string literal types for Button props to enforce design system consistency.\nexport type ButtonVariant = 'brand' | 'neutral' | 'danger' | 'success' | 'secondary';\nexport type ButtonHierarchy = 'primary' | 'secondary' | 'tertiary' | 'quaternary';\nexport type ButtonSize = 'xs' | 'sm' | 'md' | 'lg';\nexport type ButtonIcons = 'both' | 'leading' | 'trailing' | 'none' | 'only';\n\n/**\n * Map of available hierarchies for each variant\n */\nexport const VARIANT_HIERARCHIES: Record<ButtonVariant, ButtonHierarchy[]> = {\n brand: ['primary', 'secondary'],\n neutral: ['primary', 'secondary', 'tertiary', 'quaternary'],\n danger: ['primary', 'secondary', 'tertiary', 'quaternary'],\n success: ['primary', 'secondary', 'tertiary', 'quaternary'],\n secondary: ['primary'],\n};\n\n/**\n * Defines the public API for the Button component, extending standard button attributes.\n */\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n hierarchy?: ButtonHierarchy;\n size?: ButtonSize;\n icons?: ButtonIcons;\n leadingIcon?: React.ReactNode;\n trailingIcon?: React.ReactNode;\n children?: React.ReactNode;\n /** Toggle state for buttons that need to show different icons based on state */\n isToggled?: boolean;\n /** Icon to show when the button is in toggled state */\n toggledLeadingIcon?: React.ReactNode;\n /** Icon to show when trailing icon is in toggled state */\n toggledTrailingIcon?: React.ReactNode;\n borderRadius?: string;\n color?: string;\n}\n\n/**\n * Defines the expected props for icon components passed to the Button.\n * The index signature `[key: string]: unknown` allows for passthrough of other props.\n */\ninterface IconProps {\n size?: number | string;\n color?: string;\n [key: string]: unknown;\n}\n\n/**\n * A versatile and themeable button component for the application's design system.\n *\n * This component generates its appearance by combining a `variant` (color scheme),\n * a `hierarchy` (visual style like filled or outline), and a `size`. It includes\n * robust support for leading, trailing, or icon-only configurations. All styles are\n * derived from a predefined map using Tailwind CSS classes.\n *\n * @param {ButtonVariant} [variant='brand'] - The color theme of the button.\n * @param {ButtonHierarchy} [hierarchy='primary'] - The visual style of the button.\n * @param {ButtonSize} [size='xs'] - The size of the button, affecting padding, font size, and height.\n * @param {ButtonIcons} [icons='none'] - Controls the visibility and position of icons.\n * @param {React.ReactNode} [leadingIcon] - The icon component to display before the text.\n * @param {React.ReactNode} [trailingIcon] - The icon component to display after the text.\n * @param {React.ReactNode} [children] - The text or content to display inside the button.\n * @returns {JSX.Element} The rendered button element.\n */\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(({\n variant = 'brand',\n hierarchy = 'primary',\n size = 'xs',\n icons = 'none',\n leadingIcon,\n trailingIcon,\n children,\n disabled = false,\n className,\n isToggled = false,\n toggledLeadingIcon,\n toggledTrailingIcon,\n borderRadius,\n color,\n ...props\n}, ref) => {\n const baseStyles =\n 'group inline-flex items-center justify-center font-semibold rounded-6 transition-all duration-200 focus:outline-none disabled:cursor-not-allowed';\n\n const disabledStyles = 'disabled:bg-surface-3 disabled:!text-disabled';\n\n const styles: Record<ButtonVariant, Partial<Record<ButtonHierarchy, string>>> = {\n brand: {\n primary: 'bg-brand-primary-main text-white-uniform hover:bg-brand-primary-accent-3 active:bg-brand-primary-accent-3 focus:ring focus:ring-low-em',\n secondary: 'bg-brand-primary-main-special text-white-uniform hover:bg-brand-primary-accent-special active:bg-brand-primary-accent-special focus:ring focus:ring-low-em'\n },\n neutral: {\n primary: 'bg-surface-2 text-high-em hover:bg-surface-3 active:bg-surface-3 focus:ring focus:ring-surface-4',\n secondary: 'text-high-em bg-transparent hover:bg-surface-2 active:bg-surface-2 focus:ring focus:ring-surface-4',\n tertiary: 'text-high-em bg-white border border-surface-3 hover:bg-surface-2 hover:border-surface-4 active:bg-surface-2 active:border-low-em ',\n quaternary: 'text-high-em bg-transparent border border-disabled hover:border-low-em',\n },\n danger: {\n primary: 'bg-danger-main text-white-uniform hover:bg-danger-accent-3 active:bg-danger-accent-3 focus:ring-2 focus:ring-danger-accent-2',\n secondary: 'text-danger-main bg-danger-accent-1 hover:bg-danger-accent-2 active:bg-danger-accent-2 focus:ring focus:ring-danger-accent-3',\n tertiary: 'bg-transparent text-danger-main border-1 border-danger-accent-2 hover:bg-danger-accent-1 active:bg-danger-accent-1 focus:border-danger-accent-3 disabled:border-none',\n quaternary: 'text-danger-main hover:bg-danger-accent-1 active:bg-danger-accent-2 focus:ring focus:ring-danger-accent-2 disabled:bg-surface-bg',\n },\n success: {\n primary: 'bg-success-main text-white-uniform hover:bg-success-accent-3 focus:ring focus:ring-success-accent-2',\n secondary: 'text-success-em bg-success-accent-1 hover:bg-success-accent-2 focus:ring focus:ring-success-accent-3',\n tertiary: 'bg-transparent text-success-em border-1 border-success-accent-2 hover:bg-success-accent-1 focus:border-success-accent-3',\n quaternary: 'text-success-em hover:bg-success-accent-1 focus:ring focus:ring-success-accent-2',\n },\n secondary: {\n primary: 'bg-brand-secondary-main text-white-uniform hover:bg-brand-secondary-accent-3 active:bg-brand-secondary-accent-3 focus:ring focus:ring-surface-4',\n },\n };\n\n const hasChildren = children != null;\n const sizeStyles: Record<ButtonSize, string> = {\n xs: `text-[10px] h-11 ${hasChildren && icons !== 'only' ? 'px-6 py-3' : 'aspect-square'}`,\n sm: `text-xs h-[34px] ${hasChildren && icons !== 'only' ? 'px-6 py-4' : 'aspect-square'}`,\n md: `text-sm h-[42px] ${hasChildren && icons !== 'only' ? 'px-8 py-5' : 'aspect-square'}`,\n lg: `text-base h-14 ${hasChildren && icons !== 'only' ? 'px-9 py-6' : 'aspect-square'}`,\n };\n\n const iconSizeMap: Record<ButtonSize, number> = { xs: 12, sm: 16, md: 20, lg: 24 };\n const iconSize = iconSizeMap[size];\n\n // Spacing between icon and text based on button size (using Tailwind classes)\n const iconSpacingClasses: Record<ButtonSize, { leading: string; trailing: string }> = {\n xs: { leading: 'mr-2', trailing: 'ml-2' }, // 4px\n sm: { leading: 'mr-3', trailing: 'ml-3' }, // 6px\n md: { leading: 'mr-4', trailing: 'ml-4' }, // 8px\n lg: { leading: 'mr-5', trailing: 'ml-5' }, // 10px\n };\n\n // Determine which icon to use based on toggle state\n const activeLeadingIcon = isToggled && toggledLeadingIcon ? toggledLeadingIcon : leadingIcon;\n const activeTrailingIcon = isToggled && toggledTrailingIcon ? toggledTrailingIcon : trailingIcon;\n\n const sizedLeadingIcon = activeLeadingIcon && React.isValidElement(activeLeadingIcon)\n ? React.cloneElement(activeLeadingIcon as React.ReactElement<IconProps>, {\n size: iconSize,\n color: 'currentColor',\n })\n : null;\n\n const sizedTrailingIcon = activeTrailingIcon && React.isValidElement(activeTrailingIcon)\n ? React.cloneElement(activeTrailingIcon as React.ReactElement<IconProps>, {\n size: iconSize,\n color: 'currentColor',\n })\n : null;\n\n // Get the style for the current variant/hierarchy combination, fallback to primary if not available\n const variantStyles = styles[variant]?.[hierarchy] ?? styles[variant]?.primary ?? '';\n\n const buttonClasses = twMerge(clsx(\n baseStyles,\n variantStyles,\n sizeStyles[size],\n borderRadius && `rounded-[${borderRadius}]`,\n color,\n disabledStyles,\n className\n ));\n\n return (\n <button ref={ref} className={buttonClasses} disabled={disabled} {...props}>\n {(icons === 'leading' || icons === 'both') && sizedLeadingIcon && (\n <span className={`group-disabled:!text-disabled ${iconSpacingClasses[size].leading}`}>\n {sizedLeadingIcon}\n </span>\n )}\n\n {icons !== 'only' && children}\n\n {icons === 'only' && sizedLeadingIcon && <span className=\"group-disabled:!text-disabled\">{sizedLeadingIcon}</span>}\n\n {(icons === 'trailing' || icons === 'both') && sizedTrailingIcon && (\n <span className={`group-disabled:!text-disabled ${iconSpacingClasses[size].trailing}`}>\n {sizedTrailingIcon}\n </span>\n )}\n </button>\n );\n});\n\nButton.displayName = 'Button';\n","\"use client\";\n\nimport React, {\n createContext,\n useContext,\n useState,\n Fragment,\n forwardRef,\n ComponentPropsWithoutRef,\n} from \"react\";\nimport { Dialog as HeadlessDialog, Transition } from \"@headlessui/react\";\nimport { motion } from \"framer-motion\";\nimport { clsx } from \"clsx\";\nimport { StraightInfoIcon, XMarkAlert } from \"@/shared/icons\";\nimport { Button } from \"@/shared/ui/Button\";\nimport { ArrowRight } from \"iconsax-react\";\n\n/**\n * Alert type options.\n * @typedef {'success' | 'warning' | 'error' | 'info' | 'default'} AlertType\n */\nexport type AlertType = \"success\" | \"warning\" | \"error\" | \"info\" | \"default\";\n\n/**\n * Alert action type.\n * @typedef {Object} AlertAction\n * @property {string} label - Action button label\n * @property {() => void} onClick - Action handler\n * @property {'primary' | 'secondary'} [variant] - Button variant\n */\nexport interface AlertAction {\n label: string;\n onClick: () => void;\n variant?: \"primary\" | \"secondary\";\n}\n\n/**\n * Alert context type.\n */\ninterface AlertContextType {\n open: boolean;\n setOpen: (open: boolean) => void;\n type: AlertType;\n}\n\n/**\n * React context for alert state.\n */\nconst AlertContext = createContext<AlertContextType | undefined>(undefined);\n\n/**\n * Custom hook to access alert context.\n */\nconst useAlertContext = () => {\n const context = useContext(AlertContext);\n if (!context) {\n throw new Error(\"useAlertContext must be used within an Alert provider\");\n }\n return context;\n};\n\n// Tipos para los iconos\ntype IconProps = {\n size?: number;\n className?: string;\n};\n\n/**\n * Configuration for alert types using Tailwind v4 theme variables.\n */\nconst typeConfig: Record<\n AlertType,\n {\n icon: React.ComponentType<IconProps>;\n iconColor: string;\n borderClass: string;\n }\n> = {\n success: {\n icon: StraightInfoIcon,\n iconColor: \"text-success-main\",\n borderClass: \"border border-success-accent-3\",\n },\n warning: {\n icon: StraightInfoIcon,\n iconColor: \"text-warning-main\",\n borderClass: \"border border-warning-accent-3\",\n },\n error: {\n icon: StraightInfoIcon,\n iconColor: \"text-danger-main\",\n borderClass: \"border border-danger-accent-3\",\n },\n info: {\n icon: StraightInfoIcon,\n iconColor: \"text-info-main\",\n borderClass: \"border border-info-accent-3\",\n },\n default: {\n icon: StraightInfoIcon,\n iconColor: \"text-high-em\",\n borderClass: \"border border-surface-3\",\n },\n};\n\nconst alertToButtonVariant: Record<AlertType, \"neutral\" | \"danger\"> = {\n success: \"neutral\",\n warning: \"neutral\",\n error: \"danger\",\n info: \"neutral\",\n default: \"neutral\",\n};\n\n// Props interfaces mejoradas\ninterface AlertDialogProps {\n children: React.ReactNode;\n type?: AlertType;\n}\n\ninterface AlertDialogTriggerProps {\n children: React.ReactElement<{ onClick?: React.MouseEventHandler }>;\n}\n\ninterface AlertDialogContentProps extends ComponentPropsWithoutRef<\"div\"> {\n className?: string;\n}\n\ninterface AlertDialogHeaderProps {\n children: React.ReactNode;\n className?: string;\n}\n\ninterface AlertDialogActionProps\n extends Omit<\n ComponentPropsWithoutRef<typeof Button>,\n \"variant\" | \"hierarchy\" | \"size\"\n > {\n actionVariant?: \"primary\" | \"secondary\";\n}\n\n/**\n * Alert root component.\n */\nconst AlertDialog = ({ children, type = \"default\" }: AlertDialogProps) => {\n const [open, setOpen] = useState(false);\n\n return (\n <AlertContext.Provider value={{ open, setOpen, type }}>\n {children}\n </AlertContext.Provider>\n );\n};\nAlertDialog.displayName = \"AlertDialog\";\n\n/**\n * Component to wrap element that triggers opening alert.\n */\nconst AlertDialogTrigger = ({ children }: AlertDialogTriggerProps) => {\n const { setOpen } = useAlertContext();\n\n return React.cloneElement(children, {\n onClick: (e: React.MouseEvent) => {\n children.props.onClick?.(e);\n setOpen(true);\n },\n });\n};\nAlertDialogTrigger.displayName = \"AlertDialogTrigger\";\n\n/**\n * Alert content container with improved animations.\n */\nconst AlertDialogContent = forwardRef<HTMLDivElement, AlertDialogContentProps>(\n ({ className, children, ...props }, ref) => {\n const { open, setOpen, type } = useAlertContext();\n const config = typeConfig[type];\n\n return (\n <Transition appear show={open} as={Fragment}>\n <HeadlessDialog\n as=\"div\"\n className=\"relative z-50\"\n onClose={() => setOpen(false)}\n >\n <Transition.Child\n as={Fragment}\n enter=\"ease-out duration-300\"\n enterFrom=\"opacity-0\"\n enterTo=\"opacity-100\"\n leave=\"ease-in duration-200\"\n leaveFrom=\"opacity-100\"\n leaveTo=\"opacity-0\"\n >\n <div className=\"fixed inset-0 bg-black-uniform/20\" aria-hidden=\"true\" />\n </Transition.Child>\n\n <div className=\"fixed inset-0 overflow-y-auto\">\n <div className=\"flex min-h-full items-center justify-center p-4\">\n <Transition.Child\n as={Fragment}\n enter=\"ease-out duration-300\"\n enterFrom=\"opacity-0 scale-95 translate-y-4\"\n enterTo=\"opacity-100 scale-100 translate-y-0\"\n leave=\"ease-in duration-200\"\n leaveFrom=\"opacity-100 scale-100 translate-y-0\"\n leaveTo=\"opacity-0 scale-95 translate-y-4\"\n >\n <HeadlessDialog.Panel\n ref={ref}\n className={clsx(\n \"relative bg-surface-bg rounded-[20px] max-w-[460px] w-full\",\n config.borderClass,\n \"shadow-xl\",\n className\n )}\n {...props}\n >\n <motion.div\n initial={{ opacity: 0, scale: 0.95, y: 10 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{\n opacity: 0,\n scale: 0.95,\n y: -10,\n transition: {\n duration: 0.2,\n ease: \"easeIn\",\n },\n }}\n transition={{\n duration: 0.3,\n ease: \"easeOut\",\n }}\n className=\"w-full px-10 pt-10 pb-11 gap-8\"\n >\n <div className=\"flex items-start gap-6\">\n <div className=\"p-2\">\n <StraightInfoIcon\n size={24}\n className={clsx(config.iconColor)}\n aria-hidden=\"true\"\n />\n </div>\n <div className=\"flex-1 min-w-0\">{children}</div>\n <div className=\"shrink-0\">\n <motion.button\n type=\"button\"\n aria-label=\"Close\"\n onClick={() => setOpen(false)}\n className=\"p-1 rounded hover:bg-surface-1 transition\"\n whileHover={{ scale: 1.1 }}\n whileTap={{ scale: 0.9 }}\n >\n <XMarkAlert size={20} />\n </motion.button>\n </div>\n </div>\n </motion.div>\n </HeadlessDialog.Panel>\n </Transition.Child>\n </div>\n </div>\n </HeadlessDialog>\n </Transition>\n );\n }\n);\nAlertDialogContent.displayName = \"AlertDialogContent\";\n\n/**\n * Alert header (optional, for more complex layouts)\n */\nconst AlertDialogHeader = ({ children, className }: AlertDialogHeaderProps) => {\n return <div className={clsx(\"flex items-start\", className)}>{children}</div>;\n};\nAlertDialogHeader.displayName = \"AlertDialogHeader\";\n\n/**\n * Alert title component\n */\nconst AlertDialogTitle = forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <HeadlessDialog.Title\n ref={ref}\n as=\"h3\"\n className={clsx(\"font-bold text-base text-high-em\", className)}\n {...props}\n />\n));\nAlertDialogTitle.displayName = \"AlertDialogTitle\";\n\n/**\n * Alert description component\n */\nconst AlertDialogDescription = forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <HeadlessDialog.Description\n ref={ref}\n className={clsx(\n \"text-sm font-semibold leading-[22px] tracking-normal whitespace-pre-line text-med-em mt-2 mb-8\",\n className\n )}\n {...props}\n />\n));\nAlertDialogDescription.displayName = \"AlertDialogDescription\";\n\n/**\n * Alert footer for actions\n */\nconst AlertDialogFooter = ({ children, className }: AlertDialogHeaderProps) => {\n return (\n <div className={clsx(\"mt-4 flex gap-4 mb-4\", className)}>{children}</div>\n );\n};\nAlertDialogFooter.displayName = \"AlertDialogFooter\";\n\n/**\n * Alert action button\n */\nconst AlertDialogAction = ({\n className,\n actionVariant,\n onClick,\n ...props\n}: AlertDialogActionProps) => {\n const { type, setOpen } = useAlertContext();\n\n const isSecondary = actionVariant === \"secondary\";\n const btnVariant = isSecondary ? \"neutral\" : alertToButtonVariant[type];\n const hierarchy: \"primary\" | \"secondary\" | \"tertiary\" = alertToButtonVariant[type] === \"danger\" ? \n \"secondary\" : \n \"tertiary\"\n\n\n return (\n <Button\n variant={btnVariant}\n hierarchy={hierarchy}\n size=\"md\"\n icons={isSecondary ? undefined : \"trailing\"}\n trailingIcon={<ArrowRight />}\n onClick={(e) => {\n onClick?.(e);\n setOpen(false);\n }}\n className={clsx(className)}\n {...props}\n />\n );\n};\nAlertDialogAction.displayName = \"AlertDialogAction\";\n\n/**\n * Alert cancel button\n */\nconst AlertDialogCancel = forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement>\n>(({ className, onClick, ...props }, ref) => {\n const { setOpen } = useAlertContext();\n\n return (\n <Button\n ref={ref}\n variant=\"neutral\"\n hierarchy=\"secondary\"\n size=\"md\"\n className={clsx(className)}\n onClick={(e) => {\n onClick?.(e);\n setOpen(false);\n }}\n {...props}\n />\n );\n});\nAlertDialogCancel.displayName = \"AlertDialogCancel\";\n\n/**\n * Alert component exports\n */\nexport {\n AlertDialog,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogAction,\n AlertDialogCancel,\n};\n","\"use client\";\n\nimport React from 'react';\nimport { clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n// Defines accepted string literal types for Badge props to enforce design system consistency.\nexport type BadgeTheme = \n | 'surface' \n | 'warning' \n | 'info' \n | 'success' \n | 'danger' \n | 'disabled';\n\nexport type BadgeSize = 'xs' | 'sm' | 'md' | 'lg';\nexport type BadgeVariant = 'outlined' | 'simple' | 'status';\n\n// Types for status variant\nexport type StatusSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\nexport type StatusState = 'success' | 'disabled' | 'danger' | 'warning';\n\n/**\n * Defines public API for Badge component.\n */\nexport interface BadgeProps {\n /** The theme color of badge. */\n theme?: BadgeTheme;\n /** The size of badge. */\n size?: BadgeSize;\n /** The variant style of badge. */\n variant?: BadgeVariant;\n /** The content to display inside badge. */\n children?: React.ReactNode;\n /** Optional custom CSS classes to apply to the container. */\n className?: string;\n /** The state for status variant (success, disabled, danger, warning). */\n statusState?: StatusState;\n /** The size for status variant (xs, sm, md, lg, xl). */\n statusSize?: StatusSize;\n}\n\n/**\n * @file A Badge component for displaying status, categories, or labels.\n * @description This component renders a badge with various themes, sizes, and variants.\n * It supports outlined, simple, and status-dot styles with customizable colors and sizes.\n *\n * @param {'primary' | 'surface' | 'secondary' | 'warning' | 'info' | 'success' | 'danger' | 'pink' | 'purple' | 'sky' | 'cyan' | 'emerald' | 'lime' | 'yellow' | 'disabled'} [theme='primary'] - The color theme of badge.\n * @param {'xs' | 'sm' | 'md' | 'lg' } [size='sm'] - The size of badge.\n * @param {'outlined' | 'simple' | 'status-dot' | 'status'} [variant='simple'] - The style variant of badge.\n * @param {React.ReactNode} [children] - The content to display inside badge (not used for status variant).\n * @param {string} [className] - Optional CSS classes for additional styling.\n * @param {'success' | 'disabled' | 'danger' | 'warning'} [statusState='success'] - The state for status variant.\n * @param {'xs' | 'sm' | 'md' | 'lg' | 'xl'} [statusSize='md'] - The size for status variant.\n * @returns {JSX.Element} The rendered Badge element.\n */\nexport const Badge = ({\n theme = 'surface',\n size = 'sm',\n variant = 'simple',\n children,\n className,\n statusState = 'success',\n statusSize = 'md',\n}: BadgeProps) => {\n const baseStyles = 'inline-flex items-center justify-center font-medium rounded-full font-medium font-family-inter';\n\n const themeStyles: Record<BadgeTheme, Record<BadgeVariant, string>> = {\n surface: {\n simple: 'bg-surface-2 text-med-em',\n outlined: 'bg-surface-2 text-med-em border border-surface-4',\n status: '',\n },\n warning: {\n simple: 'bg-warning-accent-0 text-warning-em',\n outlined: 'bg-warning-accent-0 text-warning-em border border-warning-accent-1',\n status: '',\n },\n info: {\n simple: 'bg-info-accent-1 text-info-em',\n outlined: 'bg-info-accent-1 text-info-em border border-info-accent-2',\n status: '',\n },\n success: {\n simple: 'bg-success-accent-1 text-success-em',\n outlined: 'bg-success-accent-1 text-success-em border border-success-accent-2',\n status: '',\n },\n danger: {\n simple: 'bg-danger-accent-1 text-danger-em',\n outlined: 'bg-danger-accent-1 text-danger-em border border-danger-accent-2',\n status: '',\n },\n disabled: {\n simple: 'bg-surface-3 text-disabled',\n outlined: 'bg-surface-3 text-disabled border border-text-disabled',\n status: '',\n },\n };\n\n const sizeStyles: Record<BadgeSize, string> = {\n xs: 'px-2 py-1 text-[10px] leading-[14px] gap-1.5 h-[22px]',\n sm: 'px-4 py-2 text-[10px] leading-[16px] gap-1.5 h-[24px]',\n md: 'px-5 py-2.5 text-[12px] leading-[18px] gap-2 h-[28px]',\n lg: 'px-6 py-3 text-[12px] leading-[18px] gap-2 h-[30px]',\n };\n\n // Status variant mappings\n const statusColorMap: Record<StatusState, { bg: string; text: string; border?: string }> = {\n success: {\n bg: 'bg-success-main',\n text: 'text-white',\n border: 'border-success-main'\n },\n disabled: {\n bg: 'bg-surface-3',\n text: 'text-disabled',\n border: 'border-surface-3'\n },\n danger: {\n bg: 'bg-danger-main',\n text: 'text-white',\n border: 'border-danger-main'\n },\n warning: {\n bg: 'bg-warning-main',\n text: 'text-white',\n border: 'border-warning-main'\n }\n };\n\n const statusSizeMap: Record<StatusSize, string> = {\n xs: 'size-3',\n sm: 'size-4',\n md: 'size-5',\n lg: 'size-6',\n xl: 'size-7',\n };\n\n // Handle status variant - render as circular badge without text\n if (variant === 'status') {\n const statusClasses = twMerge(clsx(\n 'rounded-full flex-shrink-0',\n statusSizeMap[statusSize],\n statusColorMap[statusState].bg,\n statusColorMap[statusState].border && `border ${statusColorMap[statusState].border}`,\n className\n ));\n\n return <div className={statusClasses} />;\n }\n\n const badgeClasses = twMerge(clsx(\n baseStyles,\n themeStyles[theme][variant],\n sizeStyles[size],\n className\n ));\n\n return (\n <div className={badgeClasses}>\n {children && <span>{children}</span>}\n </div>\n );\n};","\"use client\";\n\nimport React from 'react';\nimport { clsx } from 'clsx';\nimport { Badge } from '../Badge/Badge';\nimport type { StatusState, StatusSize } from '../Badge/Badge';\n\n/**\n * Defines the public API for the Avatar component.\n */\nexport interface AvatarProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onClick'> {\n /** The alt text for the avatar. */\n alt?: string;\n /** The size of the avatar. */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n /** The URL of the image to display. This takes priority over initials. */\n imageUrl?: string;\n /** Fallback initials to display if no imageUrl is provided. */\n initials?: string;\n /** Optional custom CSS classes to apply to the container. */\n className?: string;\n /** Optional status badge to display in bottom-right corner. */\n statusBadge?: {\n state?: StatusState;\n size?: StatusSize;\n };\n /** Optional click handler. When provided, the avatar becomes a clickable button. */\n onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n}\n\n/**\n * @file An Avatar component for displaying user profile images or initials.\n * @description This component renders a circular avatar. It will display an image if `imageUrl`\n * is provided; otherwise, it will fall back to displaying `initials` with a default background.\n * The component supports an optional status badge positioned in the bottom-right corner.\n *\n * @param {'xs' | 'sm' | 'md' | 'lg' | 'xl'} [size='md'] - The size of the avatar.\n * @param {string} [imageUrl] - The URL for the user's profile image.\n * @param {string} [initials] - The user's initials, used as a fallback and for the alt text.\n * @param {string} [className] - Optional CSS classes for additional styling.\n * @param {{state?: StatusState, size?: StatusSize}} [statusBadge] - Optional status badge configuration.\n * @returns {JSX.Element} The rendered Avatar element.\n */\nexport const Avatar = ({\n size = 'md',\n imageUrl,\n initials,\n className,\n statusBadge,\n onClick,\n}: AvatarProps) => {\n // Mapeo de tamaños entre Avatar y Badge de estado para mantener consistencia visual\n const avatarToStatusSizeMap: Record<string, StatusSize> = {\n xs: 'xs', // Avatar 40px -> Badge 12px\n sm: 'xs', // Avatar 48px -> Badge 12px\n md: 'sm', // Avatar 52px -> Badge 16px\n lg: 'sm', // Avatar 56px -> Badge 16px\n xl: 'md', // Avatar 60px -> Badge 20px\n };\n\n const sizeStyles: Record<string, string> = {\n xs: 'size-10 text-[10px]',\n sm: 'size-12 text-xs',\n md: 'size-13 text-sm',\n lg: 'size-14 text-base',\n xl: 'size-15 text-lg',\n };\n\n const containerClasses = clsx(\n 'relative', // Contenedor principal con posición relativa\n className\n );\n\n const avatarClasses = clsx(\n 'rounded-full flex items-center justify-center font-bold overflow-hidden',\n sizeStyles[size],\n !imageUrl && 'bg-brand-primary-main text-white-uniform', // Default background if no image\n onClick && 'border-0 p-0 m-0 appearance-none cursor-pointer', // Button reset styles when clickeable\n );\n\n const badgePositionStyles: Record<string, string> = {\n xs: 'bottom-0.5 right-0.5',\n sm: 'bottom-0.5 right-0.5',\n md: 'bottom-1 right-1',\n lg: 'bottom-1 right-1',\n xl: 'bottom-2 right-2',\n };\n\n // Avatar content (shared between button and div)\n const avatarContent = (\n <>\n {imageUrl ? (\n <img\n src={imageUrl}\n alt={initials || 'Avatar'}\n className=\"w-full h-full object-cover\"\n />\n ) : (\n <span>{initials}</span>\n )}\n </>\n );\n\n return (\n <div className={containerClasses}>\n {onClick ? (\n <button onClick={onClick} type=\"button\" className={avatarClasses}>\n {avatarContent}\n </button>\n ) : (\n <div className={avatarClasses}>\n {avatarContent}\n </div>\n )}\n\n {statusBadge && (\n <div\n className={clsx(\n 'absolute', // Posicionamiento absoluto para el badge\n badgePositionStyles[size]\n )}\n >\n <Badge\n variant=\"status\"\n statusState={statusBadge.state || 'success'}\n statusSize={statusBadge.size || avatarToStatusSizeMap[size]}\n />\n </div>\n )}\n </div>\n );\n};\n","\"use client\";\n\nimport React from 'react';\nimport { clsx } from 'clsx';\nimport { Avatar, type AvatarProps } from '../Avatar';\n\n/**\n * Interface for individual avatar data in AvatarGroup\n * Extends AvatarProps but omits size and className as they are controlled by AvatarGroup\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface AvatarItem extends Omit<AvatarProps, 'size' | 'className'> {}\n\n/**\n * Defines public API for AvatarGroup component.\n */\nexport interface AvatarGroupProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'size'> {\n /** Array of avatar items to display. */\n avatars: AvatarItem[];\n /** The size of avatars in the group. */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n /** Maximum number of avatars to display before showing counter. */\n max?: number;\n /** Optional custom CSS classes to apply to the container. */\n className?: string;\n /** Optional custom CSS classes for the counter button. */\n counterClassName?: string;\n}\n\n/**\n * @file An AvatarGroup component for displaying multiple avatars with overlap.\n * @description This component renders a group of avatars with overlapping styling.\n * It supports displaying a maximum number of avatars and shows a counter for remaining items.\n *\n * @param {AvatarItem[]} avatars - Array of avatar items to display.\n * @param {'xs' | 'sm' | 'md' | 'lg' | 'xl'} [size='md'] - The size of avatars in the group.\n * @param {number} [max=4] - Maximum number of avatars to display before showing counter.\n * @param {string} [className] - Optional CSS classes for additional styling.\n * @param {string} [counterClassName] - Optional CSS classes for the counter button.\n * @returns {JSX.Element} The rendered AvatarGroup element.\n */\nexport const AvatarGroup = ({\n avatars,\n size = 'md',\n max = 4,\n className,\n counterClassName,\n ...props\n}: AvatarGroupProps) => {\n // Determine which avatars to show and how many are remaining\n const visibleAvatars = avatars.slice(0, max);\n const remainingCount = avatars.length - max;\n const shouldShowCounter = remainingCount > 0;\n\n // Size-specific styles for spacing and overlap\n const containerStyles: Record<string, string> = {\n xs: '-space-x-2',\n sm: '-space-x-3',\n md: '-space-x-4',\n lg: '-space-x-5',\n xl: '-space-x-6',\n };\n\n // Size-specific styles for counter\n const counterStyles: Record<string, string> = {\n xs: 'size-10 text-[10px] p-6',\n sm: 'size-12 text-xs p-8',\n md: 'size-13 text-sm p-9',\n lg: 'size-14 text-base p-10',\n xl: 'size-15 text-lg p-12',\n };\n\n const containerClasses = clsx(\n 'flex items-center',\n containerStyles[size],\n className\n );\n\n const counterClasses = clsx(\n 'relative rounded-full flex items-center justify-center font-bold border-2 border-white bg-brand-primary-main text-white-uniform hover:z-10 transition-colors',\n counterStyles[size],\n counterClassName\n );\n\n return (\n <div className={containerClasses} {...props}>\n {visibleAvatars.map((avatar, index) => (\n <div\n key={index}\n className=\"relative rounded-full border-2 border-white\"\n >\n <Avatar\n {...avatar}\n size={size}\n className=\"border-0\"\n />\n </div>\n ))}\n \n {shouldShowCounter && (\n <div className={counterClasses}>\n +{remainingCount}\n </div>\n )}\n </div>\n );\n};\n\nAvatarGroup.displayName = 'AvatarGroup';\n","import { RightArrowIcon } from \"@/shared/icons/RightArrowIcon\"\nimport clsx from \"clsx\"\nimport * as React from \"react\"\n\nfunction Breadcrumb({ ...props }: React.ComponentProps<\"nav\">) {\n return <nav aria-label=\"breadcrumb\" data-slot=\"breadcrumb\" {...props} />\n}\n\nfunction BreadcrumbList({ className, ...props }: React.ComponentProps<\"ol\">) {\n return (\n <ol\n data-slot=\"breadcrumb-list\"\n className={clsx(\n \" flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"breadcrumb-item\"\n className={clsx(\"inline-flex items-center gap-1.5\", className)}\n {...props}\n />\n )\n}\n\ninterface BreadcrumbLinkProps extends React.ComponentProps<\"a\"> {\n asChild?: boolean\n}\n\nfunction BreadcrumbLink({\n asChild,\n className,\n ...props\n}: BreadcrumbLinkProps) {\n if (asChild) {\n const { children, ...rest } = props\n \n if (!React.isValidElement(children)) return null\n \n const child = children as React.ReactElement<React.HTMLAttributes<HTMLElement>>\n const mergedProps: React.HTMLAttributes<HTMLElement> = {\n className: clsx(\n \"transition-colors text-low-em font-semibold\", \n className, \n child.props.className\n ),\n ...rest\n }\n \n return React.cloneElement(child, mergedProps)\n }\n\n return (\n <a\n data-slot=\"breadcrumb-link\"\n className={clsx(\"transition-colors text-low-em font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbPage({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"breadcrumb-page\"\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={clsx(\"text-med-em font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"breadcrumb-separator\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={clsx(\"[&>svg]:size-2.5 text-low-em\", className)}\n {...props}\n >\n {children ?? <RightArrowIcon color=\"currentColor\" size={12} />}\n </li>\n )\n}\n\nfunction BreadcrumbEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"breadcrumb-ellipsis\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={clsx(\"flex size-9 items-center justify-center text-low-em\", className)}\n {...props}\n >\n ...\n <span className=\"sr-only\">More</span>\n </span>\n )\n}\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n}","\"use client\";\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { Button } from '@/shared/ui';\nimport { clsx } from 'clsx';\n\n/**\n * Defines the shape of a single dropdown item.\n */\nexport type DropdownItem = {\n id: string;\n label: string;\n description?: string;\n icon?: React.ReactNode;\n onClick: () => void;\n disabled?: boolean;\n};\n\n/**\n * Defines the public API for the ButtonDropdown component.\n */\ninterface ButtonDropdownProps {\n /** The button label */\n label: string;\n /** Leading icon for the button */\n leadingIcon?: React.ReactNode;\n /** Trailing icon for the button (defaults to chevron) */\n trailingIcon?: React.ReactNode;\n /** Array of dropdown items */\n items: DropdownItem[];\n /** Whether the button is active */\n isActive?: boolean;\n /** Custom CSS classes for the button */\n className?: string;\n /** Custom CSS classes for the dropdown */\n dropdownClassName?: string;\n /** Dropdown placement */\n placement?: 'bottom-left' | 'bottom-right' | 'top-left' | 'top-right';\n /** Whether to show backdrop */\n showBackdrop?: boolean;\n}\n\n/**\n * @file A reusable button with dropdown component.\n * @description ButtonDropdown provides a button that opens a dropdown menu with items.\n * It handles all the state management for open/close and click outside behavior.\n *\n * @param {string} label - The button text\n * @param {React.ReactNode} [leadingIcon] - Optional leading icon\n * @param {React.ReactNode} [trailingIcon] - Optional trailing icon (defaults to chevron)\n * @param {DropdownItem[]} items - Array of dropdown items\n * @param {boolean} [isActive] - Whether the button is in active state\n * @param {string} [className] - Custom CSS classes for button\n * @param {string} [dropdownClassName] - Custom CSS classes for dropdown\n * @param {string} [placement] - Dropdown placement position\n * @param {boolean} [showBackdrop] - Whether to show backdrop overlay\n * @returns {JSX.Element} The rendered ButtonDropdown element.\n */\nexport const ButtonDropdown = ({\n label,\n leadingIcon,\n trailingIcon,\n items,\n isActive = false,\n className,\n dropdownClassName,\n placement = 'bottom-left',\n showBackdrop = true\n}: ButtonDropdownProps) => {\n const [isOpen, setIsOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Default chevron icon if no trailing icon provided\n const defaultChevron = (\n <svg\n className={clsx(\n 'w-4 h-4 transition-transform duration-200',\n isOpen && 'rotate-180'\n )}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n );\n\n const handleToggle = () => {\n setIsOpen(prev => !prev);\n };\n\n const handleItemClick = (item: DropdownItem) => {\n if (!item.disabled) {\n item.onClick();\n setIsOpen(false);\n }\n };\n\n const handleBackdropClick = () => {\n setIsOpen(false);\n };\n\n // Close dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }\n }, [isOpen]);\n\n // Get dropdown position classes\n const getDropdownPositionClasses = () => {\n switch (placement) {\n case 'bottom-right':\n return 'top-full right-0 mt-[6px]';\n case 'top-left':\n return 'bottom-full left-0 mb-[6px]';\n case 'top-right':\n return 'bottom-full right-0 mb-[6px]';\n case 'bottom-left':\n default:\n return 'top-full left-0 mt-[6px]';\n }\n };\n\n return (\n <div ref={containerRef} className=\"relative\">\n {/* Button */}\n <Button\n variant=\"brand\"\n hierarchy=\"primary\"\n size=\"sm\"\n icons={trailingIcon || leadingIcon ? 'both' : 'trailing'}\n leadingIcon={leadingIcon}\n trailingIcon={trailingIcon || defaultChevron}\n onClick={handleToggle}\n style={{ outline: 'none', boxShadow: 'none' }}\n className={clsx(\n 'transition-all duration-200',\n '[&:focus]:outline-none [&:focus]:ring-0 [&:focus]:shadow-none',\n 'hover:text-gray-200',\n (isActive || isOpen) && [\n '!bg-secondary-600',\n '!text-white',\n 'hover:!bg-secondary-700',\n 'hover:!text-gray-100',\n 'active:!bg-secondary-600'\n ],\n className\n )}\n >\n {label}\n </Button>\n\n {/* Backdrop */}\n {isOpen && showBackdrop && (\n <div\n className=\"fixed inset-0 z-10\"\n onClick={handleBackdropClick}\n />\n )}\n\n {/* Dropdown */}\n {isOpen && (\n <div className={clsx(\n 'absolute z-20 w-[150px] bg-white border border-gray-100 rounded-[16px] shadow-lg overflow-hidden',\n getDropdownPositionClasses(),\n dropdownClassName\n )}>\n <div>\n {items.map((item, index) => (\n <React.Fragment key={item.id}>\n {index > 0 && (\n <div className=\"border-t border-gray-100\" />\n )}\n <button\n onClick={() => handleItemClick(item)}\n disabled={item.disabled}\n className={clsx(\n 'w-full text-left pl-5 py-3 transition-colors duration-150 group',\n item.disabled\n ? 'opacity-50 cursor-not-allowed'\n : 'hover:bg-gray-50 cursor-pointer'\n )}\n >\n <div className=\"flex items-center gap-3\">\n {/* Icon */}\n {item.icon && (\n <div className=\"flex-shrink-0 text-primary-900\">\n {item.icon}\n </div>\n )}\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium text-primary-900\" style={{ fontSize: '14px' }}>\n {item.label}\n </div>\n </div>\n </div>\n </button>\n </React.Fragment>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n};","\"use client\";\n\nimport React from 'react';\nimport { clsx } from 'clsx';\n\n/**\n * Defines the shape for a single option within the ButtonGroup.\n * Each object represents one button.\n */\nexport interface ButtonGroupOption {\n value: string | number;\n label?: React.ReactNode;\n icon?: React.ReactNode;\n}\n\n/**\n * Defines the public API for the ButtonGroup component.\n */\nexport interface ButtonGroupProps {\n /** The array of button configurations to render. */\n options: ButtonGroupOption[];\n /** The value of the currently selected button. */\n value: string | number;\n /** Callback function that is fired when a button is clicked. Receives the new value. */\n onChange: (value: string | number) => void;\n /** The size of the buttons in the group. */\n size?: 'xs' | 'sm' | 'md' | 'lg';\n /** The style variant for the button group. */\n variant?: 'neutral' | 'brand' | 'secondary';\n /** Optional custom classes for the container. */\n className?: string;\n}\n\ninterface IconProps {\n size?: number | string;\n color?: string;\n [key: string]: unknown;\n}\n\n/**\n * @file A controlled ButtonGroup component that functions as a segmented control.\n * @description This component renders a group of buttons from an `options` array and manages\n * its state through the `value` and `onChange` props, following the controlled component pattern.\n *\n * @param {ButtonGroupOption[]} options - The data used to generate the buttons.\n * @param {string | number} value - The value of the currently active button.\n * @param {(value: string | number) => void} onChange - The callback fired when a button is clicked.\n * @param {'xs' | 'sm' | 'md' | 'lg'} [size='md'] - The size variant for the buttons.\n * @returns {JSX.Element} The rendered ButtonGroup element.\n */\nexport const ButtonGroup = ({\n options,\n value,\n onChange,\n size = 'md',\n variant = 'neutral',\n className,\n}: ButtonGroupProps) => {\n const sizeStyles = {\n xs: 'h-[28px] px-[9.2px] text-[10px]',\n sm: 'h-[34px] px-[10.6px] text-[12px]',\n md: 'h-[42px] px-[13px] text-[14px]',\n lg: 'h-[48px] px-[14.4px] text-[16px]',\n };\n\n const iconSizeMap = { xs: 12, sm: 16, md: 20, lg: 24 };\n\n const radiusStyles = {\n xs: { left: 'rounded-l-[6px]', right: 'rounded-r-[6px]' },\n sm: { left: 'rounded-l-[8px]', right: 'rounded-r-[8px]' },\n md: { left: 'rounded-l-[10px]', right: 'rounded-r-[10px]' },\n lg: { left: 'rounded-l-[12px]', right: 'rounded-r-[12px]' },\n };\n\n const variantStyles = {\n neutral: {\n base: 'border border-surface-3 text-high-em bg-transparent',\n hover: 'hover:bg-surface-2',\n active: 'bg-surface-2 border-surface-4 z-10',\n disabled: 'opacity-50 cursor-not-allowed',\n },\n brand: {\n base: 'bg-brand-primary-main-special border-0 text-white-uniform',\n hover: 'hover:bg-brand-primary-accent-special',\n active: 'bg-brand-primary-accent-special',\n disabled: 'bg-surface-3 text-disabled',\n },\n secondary: {\n base: 'border border-surface-3 border-none rounded-none text-high-em bg-transparent',\n hover: 'hover:bg-surface-2',\n active: 'bg-surface-2 border-surface-4 z-10',\n disabled: 'opacity-50 cursor-not-allowed',\n }\n };\n\n return (\n <div className={clsx('inline-flex items-center', className)}>\n {options.map((option, index) => {\n const isActive = option.value === value;\n\n const sizedIcon = option.icon && React.isValidElement(option.icon)\n ? React.cloneElement(option.icon as React.ReactElement<IconProps>, {\n size: iconSizeMap[size],\n color: 'currentColor',\n })\n : null;\n\n return (\n <button\n key={option.value}\n type=\"button\"\n onClick={() => onChange(option.value)}\n className={clsx(\n 'inline-flex items-center justify-center font-semibold whitespace-nowrap transition-colors duration-200',\n variant === 'neutral' && index > 0 && '-ml-px',\n sizeStyles[size],\n index === 0 && radiusStyles[size].left,\n index === options.length - 1 && radiusStyles[size].right,\n variantStyles[variant].base,\n !isActive && variantStyles[variant].hover,\n isActive && variantStyles[variant].active\n )}\n >\n {sizedIcon && <span className={option.label ? 'mr-2' : ''}>{sizedIcon}</span>}\n {option.label}\n </button>\n );\n })}\n </div>\n );\n};\n","\"use client\";\n\nimport React, { useEffect, useRef } from 'react';\nimport { clsx } from 'clsx';\n\n// Type definitions for component props, enforcing design system consistency.\ntype CheckboxSize = 'small' | 'medium' | 'large';\n\n/**\n * Defines the public API for the Checkbox component, omitting the native 'size'\n * attribute to avoid conflicts with the custom size prop.\n */\nexport interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> {\n /** The size of the checkbox. */\n size?: CheckboxSize;\n /** If true, the checkbox will be in an indeterminate state. This overrides the `checked` state visually. */\n indeterminate?: boolean;\n}\n\n// Centralized style configuration for each size.\nconst sizeConfig = {\n small: {\n wrapper: 'w-[16px] h-[16px] rounded-[4px]',\n icon: 'w-[16px] h-[16px]',\n },\n medium: {\n wrapper: 'w-[20px] h-[20px] rounded-[6px]',\n icon: 'w-[20px] h-[20px]',\n },\n large: {\n wrapper: 'w-[24px] h-[24px] rounded-[8px]',\n icon: 'w-[24px] h-[24px]',\n },\n};\n\n// Centralized style configuration for different visual states.\nconst stateStyles = {\n unchecked: 'bg-transparent border-low-em hover:bg-surface-1',\n checked: 'bg-black border-low-em text-white',\n indeterminate: 'bg-transparent border-low-em text-low-em',\n disabled: {\n unchecked: 'bg-surface-3 border-surface-4',\n checked: 'bg-surface-3 border-surface-4 text-surface-4',\n }\n};\n\n// Self-contained SVG component for the checkmark icon.\nconst CheckIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={3} stroke=\"currentColor\" {...props}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n);\n\n// Self-contained SVG component for the indeterminate (minus) icon.\nconst MinusIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={3} stroke=\"currentColor\" {...props}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 12h14\" />\n </svg>\n);\n\n/**\n * @file An accessible, themeable checkbox component.\n * @description This component renders a custom-styled checkbox that wraps a native,\n * visually hidden `<input type=\"checkbox\">` for accessibility. It supports `checked`,\n * `unchecked`, and `indeterminate` states.\n *\n * @param {CheckboxSize} [size='medium'] - The size of the checkbox.\n * @param {boolean} [checked=false] - The controlled checked state of the component.\n * @param {boolean} [indeterminate=false] - If true, displays the checkbox in an indeterminate state.\n * @param {boolean} [disabled=false] - If true, the component will be non-interactive.\n * @returns {JSX.Element} The rendered Checkbox element.\n */\nexport const Checkbox = ({\n size = 'medium',\n checked = false,\n indeterminate = false,\n disabled = false,\n className,\n ...props\n}: CheckboxProps) => {\n const config = sizeConfig[size];\n const inputRef = useRef<HTMLInputElement>(null);\n\n // This effect synchronizes the `indeterminate` prop with the underlying\n // DOM element property, which is the standard way to set this state.\n useEffect(() => {\n if (inputRef.current) {\n inputRef.current.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n return (\n <div\n className={clsx(\n 'inline-flex items-center',\n disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n className\n )}\n >\n <input\n ref={inputRef}\n type=\"checkbox\"\n checked={checked}\n disabled={disabled}\n className=\"sr-only peer\"\n {...props}\n />\n\n <div\n className={clsx(\n config.wrapper,\n 'inline-flex shrink-0 items-center justify-center border transition-colors duration-200',\n disabled\n ? (checked || indeterminate ? stateStyles.disabled.checked : stateStyles.disabled.unchecked)\n : (indeterminate ? stateStyles.indeterminate : (checked ? stateStyles.checked : stateStyles.unchecked)),\n !disabled && 'peer-hover:border-low-em',\n !disabled && 'peer-focus-visible:ring-1 peer-focus-visible:ring-low-em peer-focus-visible:ring-offset-0'\n )}\n >\n {checked && !indeterminate && <CheckIcon className={config.icon} />}\n {indeterminate && <MinusIcon className={config.icon} />}\n </div>\n </div>\n );\n};\n","\"use client\";\n\nimport React from 'react';\nimport { clsx } from 'clsx';\n\n// Type definitions for the component's props\ntype LinkVariant = 'neutral' | 'info';\ntype LinkSize = 'xs' | 'sm' | 'md' | 'lg';\ntype TrailingIconPosition = 'inline' | 'end';\n\ninterface IconProps {\n size?: number | string;\n color?: string;\n [key: string]: unknown;\n}\n\n// Defines the public API for the Link component\nexport interface LinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n variant?: LinkVariant;\n size?: LinkSize;\n disabled?: boolean;\n leadingIcon?: React.ReactNode;\n trailingIcon?: React.ReactNode;\n /** If true, shows the leading icon */\n showLeadingIcon?: boolean;\n /** If true, shows the trailing icon */\n showTrailingIcon?: boolean;\n /** Position of the trailing icon: 'inline' (next to text) or 'end' (aligned to container end) */\n trailingIconPosition?: TrailingIconPosition;\n /** If true, disables the underline that appears on hover */\n disableUnderline?: boolean;\n children: React.ReactNode;\n}\n\n/**\n * @file A styled link component for navigation and actions.\n * @description This component renders a semantic `<a>` tag with support for different themes,\n * sizes, and states. It features optional leading and trailing icons.\n *\n * @param {LinkVariant} [variant='neutral'] - The color theme of the link.\n * @param {LinkSize} [size='md'] - The font size and spacing of the link.\n * @param {boolean} [disabled=false] - If true, the link will be visually disabled and non-interactive.\n * @param {React.ReactNode} [leadingIcon] - Custom leading icon component.\n * @param {React.ReactNode} [trailingIcon] - Custom trailing icon component.\n * @param {boolean} [showLeadingIcon=true] - If true, shows the leading icon.\n * @param {boolean} [showTrailingIcon=true] - If true, shows the trailing icon.\n * @param {TrailingIconPosition} [trailingIconPosition='inline'] - Position of trailing icon: 'inline' (next to text) or 'end' (aligned to container end).\n * @param {boolean} [disableUnderline=false] - If true, disables the underline that appears on hover.\n * @param {React.ReactNode} children - The text content of the link.\n * @returns {JSX.Element} The rendered Link element.\n */\nexport const Link = ({\n variant = 'neutral',\n size = 'md',\n disabled = false,\n leadingIcon,\n trailingIcon,\n showLeadingIcon = true,\n showTrailingIcon = true,\n trailingIconPosition = 'inline',\n disableUnderline = false,\n children,\n className,\n ...props\n}: LinkProps) => {\n const variantStyles: Record<LinkVariant, string> = {\n neutral: 'text-med-wm hover:text-high-em hover:border-low-em',\n info: 'text-info-main hover:text-info-wm hover:border-info-accent-3',\n };\n\n const disabledStyles = 'text-disabled pointer-events-none';\n\n const sizeStyles: Record<LinkSize, { text: string; leadingGap: string; trailingGap: string }> = {\n xs: { text: 'text-[10px]', leadingGap: 'mr-[2px]', trailingGap: 'ml-[2px]' },\n sm: { text: 'text-[12px]', leadingGap: 'mr-[2px]', trailingGap: 'ml-[2px]' },\n md: { text: 'text-[14px]', leadingGap: 'mr-[4px]', trailingGap: 'ml-[4px]' },\n lg: { text: 'text-[16px]', leadingGap: 'mr-[4px]', trailingGap: 'ml-[4px]' },\n };\n\n const iconSizeMap: Record<LinkSize, number> = {\n xs: 12,\n sm: 12,\n md: 16,\n lg: 20,\n };\n\n const sizedLeadingIcon = showLeadingIcon && leadingIcon && React.isValidElement(leadingIcon)\n ? React.cloneElement(leadingIcon as React.ReactElement<IconProps>, {\n size: iconSizeMap[size],\n color: 'currentColor',\n })\n : null;\n\n const sizedTrailingIcon = showTrailingIcon && trailingIcon && React.isValidElement(trailingIcon)\n ? React.cloneElement(trailingIcon as React.ReactElement<IconProps>, {\n size: iconSizeMap[size],\n color: 'currentColor',\n })\n : null;\n\n return (\n <a\n className={clsx(\n 'inline-flex items-center font-semibold transition-colors duration-200',\n !disableUnderline && 'border-b-2 border-transparent',\n !disabled && !disableUnderline && variantStyles[variant],\n !disabled && disableUnderline && (variant === 'neutral' ? 'text-high-em' : 'text-info-accent-1'),\n sizeStyles[size].text,\n {\n 'w-full justify-between': trailingIconPosition === 'end',\n },\n disabled && disabledStyles,\n className\n )}\n aria-disabled={disabled}\n tabIndex={disabled ? -1 : undefined}\n {...(disabled && { href: undefined })}\n {...props}\n >\n <span className=\"inline-flex items-center\">\n {sizedLeadingIcon && (\n <span className={sizeStyles[size].leadingGap}>{sizedLeadingIcon}</span>\n )}\n <span>{children}</span>\n {trailingIconPosition === 'inline' && (\n <span className={sizeStyles[size].trailingGap}>{sizedTrailingIcon}</span>\n )}\n </span>\n {trailingIconPosition === 'end' && (\n <span className=\"shrink-0\">{sizedTrailingIcon}</span>\n )}\n </a>\n );\n};\n","\"use client\";\n\nimport React from 'react';\nimport { clsx } from 'clsx';\nimport { Checkbox } from '@/shared/ui/Checkbox';\nimport { Link } from '@/shared/ui/Link';\n\n/**\n * Defines the public API for the Card component.\n */\nexport interface CardProps {\n /** The icon to display at the top left. Should be an Iconsax icon component. */\n icon?: React.ReactNode;\n /** The title text displayed next to the icon. */\n title: string;\n /** The description text displayed below the title and icon. */\n description: string;\n /** The text for the link at the bottom of the card. */\n linkText?: string;\n /** The href for the link. */\n linkHref?: string;\n /** Controlled checked state for the checkbox. */\n checked?: boolean;\n /** Callback fired when the checkbox state changes. */\n onCheckboxChange?: (checked: boolean) => void;\n /** Callback fired when the link is clicked. */\n onLinkClick?: (e: React.MouseEvent<HTMLAnchorElement>) => void;\n /** Optional custom CSS classes for the card container. */\n className?: string;\n /** If true, the card will be non-interactive. */\n disabled?: boolean;\n}\n\n/**\n * @deprecated This component has been deprecated.\n * \n * @file A card component for displaying content with an icon, title, description, checkbox, and link.\n * @description This component renders a flexible card with a header section containing an icon, title, and checkbox,\n * a description section, and a footer with a link. The card has a border and rounded corners following the design system.\n *\n * @param {React.ReactNode} [icon] - The icon to display (32x32px Iconsax icon).\n * @param {string} title - The title text.\n * @param {string} description - The description text.\n * @param {string} [linkText='Link'] - The link text.\n * @param {string} [linkHref='#'] - The link href.\n * @param {boolean} [checked=false] - Checkbox checked state.\n * @param {(checked: boolean) => void} [onCheckboxChange] - Checkbox change callback.\n * @param {(e: React.MouseEvent<HTMLAnchorElement>) => void} [onLinkClick] - Link click callback.\n * @param {string} [className] - Custom container classes.\n * @param {boolean} [disabled=false] - Disabled state.\n * @returns {JSX.Element} The rendered Card element.\n */\nexport const Card = ({\n icon,\n title,\n description,\n linkText = 'Link',\n linkHref = '#',\n checked = false,\n onCheckboxChange,\n onLinkClick,\n className,\n disabled = false,\n}: CardProps) => {\n const handleCheckboxChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (onCheckboxChange) {\n onCheckboxChange(e.target.checked);\n }\n };\n\n // Clone icon to ensure consistent sizing\n const sizedIcon = icon\n ? React.cloneElement(icon as React.ReactElement<{ size?: number; color?: string }>, {\n size: 32,\n color: 'var(--dark-100)',\n })\n : null;\n\n return (\n <div\n className={clsx(\n 'w-full min-h-40 bg-white border border-gray-400 rounded-xl py-8 flex flex-col',\n disabled && 'opacity-60 pointer-events-none',\n className\n )}\n >\n {/* Header Section: Icon, Title, Checkbox */}\n <div className=\"flex items-center justify-between mx-8 mb-3 shrink-0\">\n <div className=\"flex items-center gap-3 flex-1 min-w-0\">\n {/* Icon */}\n {sizedIcon && (\n <div className=\"shrink-0\">\n {sizedIcon}\n </div>\n )}\n\n {/* Title */}\n <h3\n className=\"font-space-grotesk font-medium text-[20px] leading-tight text-[var(--dark-100)] truncate ml-2\"\n style={{ fontFamily: 'var(--font-space-grotesk)' }}\n >\n {title}\n </h3>\n </div>\n\n {/* Checkbox */}\n <div className=\"flex-shrink-0 mt-2\">\n <Checkbox\n size=\"large\"\n checked={checked}\n onChange={handleCheckboxChange}\n disabled={disabled}\n />\n </div>\n </div>\n\n {/* Description Section - Fixed height with line clamping */}\n <div className=\"mx-8 mt-4 mb-3 flex-shrink-0\" style={{ minHeight: '50px' }}>\n <p\n className=\"font-inter text-[12px] leading-[1.4] text-[var(--dark-700)] line-clamp-3\"\n style={{ fontFamily: 'var(--font-inter)' }}\n >\n {description}\n </p>\n </div>\n\n {/* Spacer to push footer to bottom */}\n <div className=\"flex-1\" />\n\n {/* Divider */}\n <div className=\"border-t border-gray-400 mb-3 flex-shrink-0\" />\n\n {/* Link Section */}\n <div className='mx-8 mt-4 flex-shrink-0'>\n <Link\n variant=\"neutral\"\n size=\"md\"\n href={linkHref}\n onClick={onLinkClick}\n disabled={disabled}\n trailingIconPosition=\"end\"\n disableUnderline={true}\n >\n {linkText}\n </Link>\n </div>\n </div>\n );\n};\n","\"use client\";\n\nimport React, { useState } from 'react';\nimport { clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\nimport { Button } from '@/shared/ui/Button/Button';\nimport { ChevronUpIcon, ChevronDownIcon } from '@/shared/icons';\nimport { XMark } from '@/shared/icons/XMark';\n\nexport interface ChatCollapsibleContainerProps {\n /**\n * Title displayed in the header center (can be text or a custom component)\n */\n title: React.ReactNode;\n\n /**\n * Custom content to render when expanded\n */\n children: React.ReactNode;\n\n /**\n * Controlled collapsed state\n */\n isCollapsed?: boolean;\n\n /**\n * Callback when collapse state changes\n */\n onToggle?: (collapsed: boolean) => void;\n\n /**\n * Callback when close button is clicked\n */\n onClose?: () => void;\n\n /**\n * Default collapsed state (uncontrolled)\n */\n defaultCollapsed?: boolean;\n\n /**\n * Additional CSS classes for the container\n */\n className?: string;\n}\n\nexport const ChatCollapsibleContainer = React.forwardRef<HTMLDivElement, ChatCollapsibleContainerProps>(\n (\n {\n title,\n children,\n isCollapsed: controlledIsCollapsed,\n onToggle,\n onClose,\n defaultCollapsed = false,\n className,\n },\n ref\n ) => {\n const [internalCollapsed, setInternalCollapsed] = useState(defaultCollapsed);\n\n // Use controlled state if provided, otherwise use internal state\n const isCollapsed = controlledIsCollapsed ?? internalCollapsed;\n const isControlled = controlledIsCollapsed !== undefined;\n\n const handleToggle = () => {\n const newValue = !isCollapsed;\n\n if (!isControlled) {\n setInternalCollapsed(newValue);\n }\n\n onToggle?.(newValue);\n };\n\n const containerClasses = twMerge(\n clsx(\n 'bg-surface-2 rounded-t-3 overflow-hidden',\n 'w-[311px]',\n className\n )\n );\n\n return (\n <div ref={ref} className={containerClasses}>\n {/* Header */}\n <div className=\"flex items-center justify-between px-5 h-[38px]\">\n <Button\n variant=\"neutral\"\n hierarchy=\"primary\"\n size=\"sm\"\n icons=\"only\"\n leadingIcon={isCollapsed ? <ChevronDownIcon /> : <ChevronUpIcon />}\n onClick={handleToggle}\n aria-label={isCollapsed ? \"Expand\" : \"Collapse\"}\n className=\"shrink-0\"\n />\n <div className=\"text-sm font-semibold text-med-em flex-1 text-center\">\n {title}\n </div>\n <Button\n variant=\"neutral\"\n hierarchy=\"primary\"\n size=\"sm\"\n icons=\"only\"\n leadingIcon={<XMark />}\n onClick={onClose}\n aria-label=\"Close\"\n className=\"shrink-0\"\n />\n </div>\n\n {/* Divider */}\n <div className=\"h-px bg-surface-3\" />\n\n {/* Collapsible Content */}\n {!isCollapsed && children}\n </div>\n );\n }\n);\n\nChatCollapsibleContainer.displayName = 'ChatCollapsibleContainer';\n","\"use client\";\n\nimport React from \"react\";\nimport { clsx } from \"clsx\";\n\n/**\n * Defines the display variant for the progress percentage.\n * - \"none\": No percentage display\n * - \"inline\": Percentage displayed inline on the right of the bar\n * - \"below\": Percentage displayed below the bar with text-right alignment\n * - \"tooltip\": Percentage displayed in a custom CSS tooltip at the end of the progress bar on hover\n */\ntype ProgressVariant = \"none\" | \"inline\" | \"below\" | \"tooltip\";\n\n/**\n * Defines the props for the Progress component.\n */\ninterface ProgressProps {\n progress: number;\n className?: string;\n variant?: ProgressVariant;\n}\n\n/**\n * A versatile progress bar component for displaying completion status.\n *\n * This component displays a horizontal progress bar with optional percentage display\n * support for multiple display variants and is fully accessible with ARIA attributes.\n *\n * @param {number} progress - The current progress value as a percentage (0-100).\n * @param {string} [className] - Additional CSS classes to apply to the progress bar container.\n * @param {ProgressVariant} [variant=\"none\"] - Display variant for the progress percentage.\n * @returns {JSX.Element} The rendered progress bar element.\n */\nexport const Progress = ({\n progress,\n className,\n variant = \"none\",\n ...props\n}: ProgressProps) => {\n // Ensure progress is within valid range\n const clampedProgress = Math.min(100, Math.max(0, progress));\n\n // Base styles for the progress bar container\n const baseStyles =\n \"w-full bg-surface-3 rounded-full relative overflow-visible flex-1 h-4\";\n\n const containerClasses = clsx(baseStyles, className);\n\n const fillClasses = \"h-full rounded-full transition-all duration-300 ease-out bg-black\";\n\n // Render percentage based on variant\n const renderPercentage = () => {\n if (variant === \"none\") {\n return null;\n }\n\n const percentageText = `${clampedProgress}%`;\n\n if (variant === \"inline\") {\n return (\n <span className=\"font-medium text-sm text-high-em shrink-0\">\n {percentageText}\n </span>\n );\n }\n\n if (variant === \"below\") {\n return (\n <p className=\"mt-2 font-medium text-sm text-high-em text-right\">\n {percentageText}\n </p>\n );\n }\n\n return null;\n };\n\n return (\n <div className=\"flex flex-col gap-y-2 w-full\">\n <div className=\"flex items-center w-full gap-x-5\">\n <div\n className={clsx(\n containerClasses,\n variant === \"tooltip\" && \"group cursor-pointer\"\n )}\n role=\"progressbar\"\n aria-valuenow={clampedProgress}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={`Progress: ${clampedProgress}%`}\n {...props}\n >\n <div className={fillClasses} style={{ width: `${clampedProgress}%` }} />\n\n {/* Custom tooltip positioned at the end of progress */}\n {variant === \"tooltip\" && (\n <div\n className=\"absolute bottom-full mb-4 opacity-100 visible transition-opacity duration-200 pointer-events-none\"\n style={{\n left: `${clampedProgress}%`,\n transform: \"translateX(-50%)\",\n }}\n >\n {/* Tooltip content */}\n <div className=\"bg-surface-bg text-high-em p-6 border border-b-0 border-surface-3 text-xs font-medium rounded-xl shadow-lg whitespace-nowrap\">\n {clampedProgress}%\n </div>\n {/* Arrow */}\n <div\n className=\"absolute left-1/2 top-full -translate-x-1/2 -mt-px\"\n style={{\n width: 22,\n height: 0,\n borderLeft: \"10px solid transparent\",\n borderRight: \"10px solid transparent\",\n borderTop: \"8px solid var(--surface-bg)\",\n }}\n />\n </div>\n )}\n </div>\n {variant === \"inline\" && renderPercentage()}\n </div>\n {variant === \"below\" && renderPercentage()}\n </div>\n );\n};\n","\"use client\";\n\nimport React from 'react';\nimport { clsx } from 'clsx';\nimport { ChatCollapsibleContainer } from '@/shared/ui/ChatCollapsibleContainer/ChatCollapsibleContainer';\nimport { Checkbox } from '@/shared/ui/Checkbox/Checkbox';\nimport { Progress } from '@/shared/ui/Progress/Progress';\n\nexport interface ChecklistItem {\n /**\n * Unique identifier for the item\n */\n id: string | number;\n\n /**\n * Label text to display next to the checkbox\n */\n label: string;\n\n /**\n * Checked state of the item\n */\n checked: boolean;\n\n /**\n * Optional: disable specific items\n */\n disabled?: boolean;\n}\n\nexport interface ChatCollapsibleCheckProps {\n /**\n * Title displayed in the header (default: \"Todo:\")\n */\n title?: React.ReactNode;\n\n /**\n * Array of checklist items\n */\n items: ChecklistItem[];\n\n /**\n * Callback when an item's checked state changes\n */\n onItemChange?: (itemId: string | number, checked: boolean) => void;\n\n /**\n * Controlled collapsed state\n */\n isCollapsed?: boolean;\n\n /**\n * Callback when collapse state changes\n */\n onToggle?: (collapsed: boolean) => void;\n\n /**\n * Callback when close button is clicked\n */\n onClose?: () => void;\n\n /**\n * Default collapsed state (uncontrolled)\n */\n defaultCollapsed?: boolean;\n\n /**\n * Additional CSS classes\n */\n className?: string;\n}\n\nexport const ChatCollapsibleCheck = React.forwardRef<HTMLDivElement, ChatCollapsibleCheckProps>(\n (\n {\n title = 'Todo:',\n items,\n onItemChange,\n isCollapsed,\n onToggle,\n onClose,\n defaultCollapsed = false,\n className,\n },\n ref\n ) => {\n const maxVisibleItems = 3;\n const itemHeight = 50;\n const shouldScroll = items.length > maxVisibleItems;\n const maxHeight = shouldScroll ? maxVisibleItems * itemHeight : undefined;\n\n // Calculate progress\n const completedCount = items.filter(item => item.checked).length;\n const totalCount = items.length;\n const progressPercentage = totalCount > 0 ? Math.round((completedCount / totalCount) * 100) : 0;\n\n const handleCheckboxChange = (itemId: string | number, checked: boolean) => {\n onItemChange?.(itemId, checked);\n };\n\n // Custom title with counter and progress bar\n const customTitle = (\n <div className=\"flex items-center gap-3 flex-1\">\n <span className=\"text-sm font-semibold text-med-em whitespace-nowrap\">\n {typeof title === 'string' ? title : 'Todo:'} {completedCount}/{totalCount}\n </span>\n <Progress progress={progressPercentage} variant=\"none\" className=\"h-2\" />\n </div>\n );\n\n return (\n <ChatCollapsibleContainer\n ref={ref}\n title={customTitle}\n isCollapsed={isCollapsed}\n onToggle={onToggle}\n onClose={onClose}\n defaultCollapsed={defaultCollapsed}\n className={className}\n >\n <div\n className=\"overflow-y-auto\"\n style={maxHeight ? { maxHeight: `${maxHeight}px` } : undefined}\n >\n {items.map((item, index) => (\n <React.Fragment key={item.id}>\n <label className=\"flex items-center px-8 h-[50px] gap-6 cursor-pointer\">\n <Checkbox\n size=\"medium\"\n checked={item.checked}\n disabled={item.disabled}\n onChange={(e) => handleCheckboxChange(item.id, e.target.checked)}\n />\n <span\n className={clsx('text-xs font-semibold text-med-em flex-1', item.checked && 'line-through')}\n >\n {item.label}\n </span>\n </label>\n {index < items.length - 1 && <div className=\"h-px bg-surface-3\" />}\n </React.Fragment>\n ))}\n </div>\n </ChatCollapsibleContainer>\n );\n }\n);\n\nChatCollapsibleCheck.displayName = 'ChatCollapsibleCheck';\n","\"use client\";\n\nimport React from 'react';\nimport { Button, type ButtonProps } from '@/shared/ui/Button/Button';\nimport { ChatCollapsibleContainer } from '@/shared/ui/ChatCollapsibleContainer/ChatCollapsibleContainer';\n\nexport interface ChatCollapsibleDialogAction {\n label: string;\n onClick?: () => void;\n variant?: ButtonProps['variant'];\n hierarchy?: ButtonProps['hierarchy'];\n}\n\nexport interface ChatCollapsibleDialogProps {\n /**\n * Dialog title displayed in the header (can be text or a custom component)\n */\n title: React.ReactNode;\n\n /**\n * Content to display in the dialog body\n */\n children: React.ReactNode;\n\n /**\n * Actions to display in the footer (max 2 buttons recommended)\n */\n actions?: ChatCollapsibleDialogAction[];\n\n /**\n * Controlled collapsed state\n */\n isCollapsed?: boolean;\n\n /**\n * Callback when collapse state changes\n */\n onToggle?: (collapsed: boolean) => void;\n\n /**\n * Callback when close button is clicked\n */\n onClose?: () => void;\n\n /**\n * Default collapsed state (uncontrolled)\n */\n defaultCollapsed?: boolean;\n\n /**\n * Additional CSS classes\n */\n className?: string;\n}\n\nexport const ChatCollapsibleDialog = React.forwardRef<HTMLDivElement, ChatCollapsibleDialogProps>(\n (\n {\n title,\n children,\n actions = [],\n isCollapsed,\n onToggle,\n onClose,\n defaultCollapsed = false,\n className,\n },\n ref\n ) => {\n return (\n <ChatCollapsibleContainer\n ref={ref}\n title={title}\n isCollapsed={isCollapsed}\n onToggle={onToggle}\n onClose={onClose}\n defaultCollapsed={defaultCollapsed}\n className={className}\n >\n {/* Body */}\n <div className=\"p-8\">\n <div className=\"text-xs font-semibold text-med-em\">\n {children}\n </div>\n </div>\n\n {/* Divider */}\n <div className=\"h-px bg-surface-3\" />\n\n {/* Footer with Actions */}\n {actions.length > 0 && (\n <div className=\"flex gap-2 p-5\">\n {actions.map((action, index) => (\n <Button\n key={index}\n variant={action.variant || 'neutral'}\n hierarchy={action.hierarchy || 'tertiary'}\n size=\"xs\"\n onClick={action.onClick}\n className=\"flex-1\"\n >\n {action.label}\n </Button>\n ))}\n </div>\n )}\n </ChatCollapsibleContainer>\n );\n }\n);\n\nChatCollapsibleDialog.displayName = 'ChatCollapsibleDialog';\n","\"use client\";\n\nimport React from \"react\";\nimport { clsx } from \"clsx\";\nimport { Add, ArrowDown2 } from \"iconsax-react\";\n\n// Type definitions for the component's props.\ntype TagVariant =\n | \"primary\"\n | \"secondary\"\n | \"tertiary\"\n | \"quaternary\"\n | \"success\"\n | \"danger\"\n | \"warning\"\n | \"info\";\ntype TagSize = \"xs\" | \"sm\";\n\n/**\n * Defines the public API for the Tag component, extending standard button element attributes.\n */\nexport interface TagProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: TagVariant;\n size?: TagSize;\n leadingIcon?: React.ReactNode | boolean;\n trailingIcon?: React.ReactNode | boolean;\n onTrailingIconClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n children: React.ReactNode;\n}\n\ninterface IconProps {\n size?: number | string;\n color?: string;\n [key: string]: unknown;\n}\n\n// Centralized style configuration for each variant.\nconst variantConfig: Record<TagVariant, string> = {\n primary: \"bg-brand-primary-main text-white-uniform hover:bg-primary-accent-3\",\n secondary: \"bg-surface-2 text-high-em hover:bg-surface-2\",\n tertiary:\n \"bg-transparent text-high-em border border-surface-3 hover:bg-surface-1 shadow-[0_1px_3px_-1px_rgba(0,0,0,0.16)]\",\n quaternary: \"bg-surface-2 text-med-em hover:bg-surface-3\",\n success: \"bg-success-accent-1 text-success-em hover:bg-success-accent-2\",\n danger: \"bg-danger-accent-1 text-danger-em hover:bg-danger-accent-2\",\n warning: \"bg-warning-accent-0 text-warning-em hover:bg-warning-accent-1\",\n info: \"bg-info-accent-1 text-info-em hover:bg-info-accent-2\",\n};\n\n// Centralized style configuration for each size.\nconst sizeConfig: Record<TagSize, { container: string; icon: number }> = {\n xs: {\n container: \"text-[10px] font-medium p-[4px] gap-[4px] h-[24px] rounded-[6px]\",\n icon: 12,\n },\n sm: {\n container: \"text-[12px] font-medium p-[8px] gap-[8px] h-[34px] rounded-[8px]\",\n icon: 16,\n },\n};\n\n// Centralized style configuration for the disabled state.\nconst disabledStyles = \"bg-surface-3 text-disabled cursor-not-allowed\";\n\n/**\n * @file A styled Tag component that functions as an interactive button.\n * @description This component is typically used for filters, categories, or actions that might\n * open a dropdown. It features a configurable leading icon and a fixed trailing icon.\n * Its appearance is determined by a combination of `variant` and `size` props.\n *\n * @param {TagVariant} [variant='primary'] - The color theme of the tag.\n * @param {TagSize} [size='sm'] - The size of the tag.\n * @param {React.ReactNode | boolean} [leadingIcon=true] - If `true`, shows a default icon. Can also accept a custom icon component.\n * @param {React.ReactNode} children - The text content of the tag.\n * @param {boolean} [disabled] - If true, the tag will be non-interactive.\n * @returns {JSX.Element} The rendered Tag element.\n */\nexport const Tag = ({\n variant = \"primary\",\n size = \"sm\",\n leadingIcon = true,\n trailingIcon = true,\n onTrailingIconClick,\n children,\n className,\n disabled,\n ...props\n}: TagProps) => {\n const config = sizeConfig[size];\n\n let leadingIconContent = null;\n if (leadingIcon === true) {\n leadingIconContent = <Add />;\n } else if (React.isValidElement(leadingIcon)) {\n leadingIconContent = leadingIcon;\n }\n\n const sizedLeadingIcon = leadingIconContent\n ? React.cloneElement(leadingIconContent as React.ReactElement<IconProps>, {\n size: config.icon,\n color: \"currentColor\",\n })\n : null;\n\n let trailingIconContent = null;\n if (trailingIcon === true) {\n trailingIconContent = <ArrowDown2 />;\n } else if (React.isValidElement(trailingIcon)) {\n trailingIconContent = trailingIcon;\n }\n\n const sizedTrailingIcon = trailingIconContent\n ? React.cloneElement(trailingIconContent as React.ReactElement<IconProps>, {\n size: config.icon,\n color: \"currentColor\",\n })\n : null;\n\n const handleTrailingIconClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation();\n if (onTrailingIconClick) {\n onTrailingIconClick(e);\n }\n };\n\n // Determine padding based on which icons are present\n const paddingClasses = () => {\n const paddingMap = {\n xs: { left: \"pl-4\", right: \"pr-4\", both: \"px-4\" },\n sm: { left: \"pl-6\", right: \"pr-6\", both: \"px-6\" },\n };\n\n const hasLeading = !!sizedLeadingIcon;\n const hasTrailing = !!sizedTrailingIcon;\n\n if (!hasLeading && !hasTrailing) {\n // No icons: add padding on both sides\n return paddingMap[size].both;\n } else if (!hasLeading && hasTrailing) {\n // Only trailing icon: add padding on the left\n return paddingMap[size].left;\n } else if (hasLeading && !hasTrailing) {\n // Only leading icon: add padding on the right\n return paddingMap[size].right;\n }\n // Both icons present: no extra padding needed\n return \"\";\n };\n\n return (\n <button\n disabled={disabled}\n className={clsx(\n \"inline-flex items-center justify-center shrink-0 font-medium transition-colors duration-200\",\n \"focus:outline-none\",\n disabled ? disabledStyles : variantConfig[variant],\n config.container,\n paddingClasses(),\n className\n )}\n {...props}\n >\n {sizedLeadingIcon && (\n <span className=\"mr-1\">\n {sizedLeadingIcon}\n </span>\n )}\n <span>{children}</span>\n {sizedTrailingIcon && (\n <span\n className=\"ml-1 p-0.5 rounded-full\"\n role=\"button\"\n onClick={handleTrailingIconClick}\n >\n {sizedTrailingIcon}\n </span>\n )}\n </button>\n );\n};\n","\"use client\";\n\nimport React from 'react';\nimport { clsx } from 'clsx';\nimport { Tag, TagProps } from '../Tag/Tag';\nimport { Button, ButtonProps } from '../Button/Button';\n\n// Type definitions\nexport type ChatCommandListItemSize = 'xs' | 'sm' | 'md' | 'lg';\nexport type ChatCommandListItemVariant = 'type-1' | 'type-2';\n\n/**\n * Props for leading tag (used in type-1)\n */\nexport interface LeadingTagProps {\n content: string;\n variant?: TagProps['variant'];\n size?: TagProps['size'];\n}\n\n/**\n * Props for trailing button (used in type-1)\n */\nexport interface TrailingButtonProps {\n icon: React.ReactNode;\n onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n variant?: ButtonProps['variant'];\n hierarchy?: ButtonProps['hierarchy'];\n}\n\n/**\n * Props for inline tag (used in type-2)\n */\nexport interface InlineTagProps {\n content: string;\n variant?: TagProps['variant'];\n size?: TagProps['size'];\n}\n\n/**\n * Base props shared by both variants\n */\ninterface BaseProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'title'> {\n /** The size of the item (affects height and child component sizes) */\n size?: ChatCommandListItemSize;\n\n /** Main text content */\n title: string;\n\n /** If true, the item will be non-interactive */\n disabled?: boolean;\n\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Props for type-1: Tag + Text + Button\n */\ninterface Type1Props extends BaseProps {\n variant: 'type-1';\n\n /** Leading tag configuration */\n leadingTag?: LeadingTagProps;\n\n /** Trailing button configuration */\n trailingButton?: TrailingButtonProps;\n}\n\n/**\n * Props for type-2: Text + Tag (inline) + Description\n */\ninterface Type2Props extends BaseProps {\n variant: 'type-2';\n\n /** Inline tag next to title */\n tag?: InlineTagProps;\n\n /** Description text below title */\n description?: string;\n}\n\n/**\n * Union type for all ChatCommandListItem props\n */\nexport type ChatCommandListItemProps = Type1Props | Type2Props;\n\n// Size configuration\nconst sizeConfig = {\n xs: {\n container: 'h-13 min-w-21',\n sidePadding: 'px-7',\n titleGap: 'gap-2',\n title: 'text-[11px] font-semibold',\n description: 'text-[9px] font-medium',\n tagSize: 'xs' as TagProps['size'],\n buttonSize: 'xs' as ButtonProps['size'],\n },\n sm: {\n container: 'h-[50px] min-w-22',\n sidePadding: 'px-8',\n titleGap: 'gap-2',\n title: 'text-xs font-semibold',\n description: 'text-[10px] font-medium',\n tagSize: 'xs' as TagProps['size'],\n buttonSize: 'sm' as ButtonProps['size'],\n },\n md: {\n container: 'h-[56px] min-w-24',\n sidePadding: 'px-9',\n titleGap: 'gap-3',\n title: 'text-sm font-semibold',\n description: 'text-xs font-medium',\n tagSize: 'sm' as TagProps['size'],\n buttonSize: 'sm' as ButtonProps['size'],\n },\n lg: {\n container: 'h-[70px] min-w-25',\n sidePadding: 'px-9',\n titleGap: 'gap-3',\n title: 'text-base font-semibold',\n description: 'text-sm font-medium',\n tagSize: 'sm' as TagProps['size'],\n buttonSize: 'md' as ButtonProps['size'],\n },\n};\n\n/**\n * @file A specialized component for chat slash command menu items\n * @description This component supports two distinct layouts:\n *\n * **Type 1**: Tag + Text + Button with Icon\n * - Leading tag on the left\n * - Title text in the center\n * - Icon-only button on the right\n *\n * **Type 2**: Text + Tag + Description\n * - First row: Title with inline tag (small gap)\n * - Second row: Description text\n *\n * @param {ChatCommandListItemVariant} variant - The layout variant to use\n * @param {ChatCommandListItemSize} [size='md'] - The size of the item\n * @param {string} title - The main title text (required)\n * @param {boolean} [disabled=false] - If true, the item will be non-interactive\n * @returns {JSX.Element} The rendered ChatCommandListItem element\n */\nexport const ChatCommandListItem = (props: ChatCommandListItemProps) => {\n const {\n variant,\n size = 'md',\n title,\n disabled = false,\n className,\n onClick,\n ...rest\n } = props;\n\n const config = sizeConfig[size];\n\n const baseClasses = clsx(\n 'flex w-full transition-colors duration-200',\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-brand-secondary-main',\n config.container,\n config.sidePadding,\n disabled\n ? 'bg-surface-3 cursor-not-allowed'\n : 'bg-transparent hover:bg-surface-1 active:bg-surface-2 cursor-pointer',\n className\n );\n\n // Type 1: Tag + Text + Button\n if (variant === 'type-1') {\n const { leadingTag, trailingButton } = props;\n\n const handleButtonClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation();\n trailingButton?.onClick?.(e);\n };\n\n return (\n <button\n type=\"button\"\n disabled={disabled}\n onClick={onClick}\n className={clsx(baseClasses, 'items-center')}\n {...rest}\n >\n {/* Leading Tag */}\n {leadingTag && (\n <Tag\n size={leadingTag.size || config.tagSize}\n variant={leadingTag.variant || 'tertiary'}\n disabled={disabled}\n leadingIcon={false}\n trailingIcon={false}\n >\n {leadingTag.content}\n </Tag>\n )}\n\n {/* Title (aligned left) */}\n <span\n className={clsx(\n config.title,\n disabled ? 'text-disabled' : 'text-med-em',\n 'truncate',\n leadingTag && 'ml-5' // 20px gap from tag\n )}\n >\n {title}\n </span>\n\n {/* Trailing Button */}\n {trailingButton && (\n <div className=\"ml-auto\">\n <Button\n size={config.buttonSize}\n variant={trailingButton.variant || 'neutral'}\n hierarchy={trailingButton.hierarchy || 'tertiary'}\n icons=\"only\"\n leadingIcon={trailingButton.icon}\n onClick={handleButtonClick}\n disabled={disabled}\n />\n </div>\n )}\n </button>\n );\n }\n\n // Type 2: Text + Tag + Description\n if (variant === 'type-2') {\n const { tag, description } = props;\n\n return (\n <button\n type=\"button\"\n disabled={disabled}\n onClick={onClick}\n className={clsx(baseClasses, 'flex-col justify-center items-start')}\n {...rest}\n >\n {/* First row: Title + Tag (inline) */}\n <div className=\"flex items-center gap-5\">\n <span\n className={clsx(\n config.title,\n disabled ? 'text-disabled' : 'text-med-em',\n 'truncate'\n )}\n >\n {title}\n </span>\n\n {tag && (\n <Tag\n size={tag.size || config.tagSize}\n variant={tag.variant || 'tertiary'}\n disabled={disabled}\n leadingIcon={false}\n trailingIcon={false}\n >\n {tag.content}\n </Tag>\n )}\n </div>\n\n {/* Second row: Description */}\n {description && (\n <span\n className={clsx(\n config.description,\n disabled ? 'text-disabled' : 'text-low-em',\n 'truncate w-full text-left'\n )}\n >\n {description}\n </span>\n )}\n </button>\n );\n }\n\n return null;\n};\n","import React from 'react';\nimport { clsx } from 'clsx';\n\nexport type KbdSize = 'sm' | 'md';\n\nexport interface KbdProps {\n children: React.ReactNode;\n size?: KbdSize;\n className?: string;\n}\n\nexport const Kbd = ({ children, size = 'sm', className }: KbdProps) => {\n const sizeClass = size === 'md' ? 'px-2 py-1 text-sm' : 'px-2 py-1 text-xs';\n\n return (\n <kbd\n className={clsx(\n 'bg-surface-1 rounded font-medium text-med-em',\n sizeClass,\n className\n )}\n >\n {children}\n </kbd>\n );\n};\n","\"use client\";\n\nimport React, { useState } from 'react';\nimport { clsx } from 'clsx';\nimport { ArrowLeft2, ArrowRight2 } from 'iconsax-react';\nimport { ChatCommandListItem, ChatCommandListItemSize, LeadingTagProps } from '../ChatCommandListItem/ChatCommandListItem';\nimport { Tag, TagProps } from '../Tag/Tag';\nimport { Button } from '../Button/Button';\nimport { Kbd } from '../Kbd/Kbd';\n\n// Type definitions for the component's props\nexport type ChatCommandListSize = ChatCommandListItemSize;\n\n/**\n * Represents a single item within a category\n */\nexport interface CategoryItem {\n /** Unique identifier for the item */\n id: string;\n /** Title of the item */\n title: string;\n /** Optional tag configuration */\n tag?: {\n content: string;\n variant?: TagProps['variant'];\n size?: TagProps['size'];\n };\n /** Optional description text */\n description?: string;\n}\n\n/**\n * Represents a category with its items\n */\nexport interface Category {\n /** Unique identifier for the category */\n id: string;\n /** Leading tag configuration for the category */\n leadingTag: {\n content: string;\n variant?: TagProps['variant'];\n };\n /** Title of the category */\n title: string;\n /** Items within this category */\n items: CategoryItem[];\n}\n\n/**\n * Defines the public API for the ChatCommandList component\n */\nexport interface ChatCommandListProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect'> {\n /** Array of categories with their items */\n categories: Category[];\n\n /** Size to apply to all child ChatCommandListItems */\n size?: ChatCommandListSize;\n\n /** Callback when a category is selected */\n onCategorySelect?: (categoryId: string) => void;\n\n /** Callback when an item is selected */\n onItemSelect?: (categoryId: string, itemId: string) => void;\n\n /** Callback when the close button is clicked */\n onClose?: () => void;\n\n /** If true, uses absolute positioning for dropdown behavior */\n floating?: boolean;\n\n /** Additional CSS classes for the container */\n className?: string;\n}\n\n// Size configuration for border radius, header, and footer\nconst sizeConfig = {\n xs: {\n borderRadius: 'rounded-[8px]',\n headerHeight: 'h-[38px]',\n headerPadding: 'px-5',\n headerText: 'text-[11px] font-semibold',\n footerHeight: 'h-[32px]',\n footerText: 'text-[9px] font-medium',\n iconSize: 14,\n buttonSize: 'xs' as const,\n kbdSize: 'sm' as const,\n },\n sm: {\n borderRadius: 'rounded-[12px]',\n headerHeight: 'h-[38px]',\n headerPadding: 'px-5',\n headerText: 'text-[12px] font-semibold',\n footerHeight: 'h-[40px]',\n footerText: 'text-[10px] font-medium',\n iconSize: 16,\n buttonSize: 'sm' as const,\n kbdSize: 'sm' as const,\n },\n md: {\n borderRadius: 'rounded-[16px]',\n headerHeight: 'h-[38px]',\n headerPadding: 'px-5',\n headerText: 'text-[14px] font-semibold',\n footerHeight: 'h-[48px]',\n footerText: 'text-[12px] font-medium',\n iconSize: 18,\n buttonSize: 'sm' as const,\n kbdSize: 'sm' as const,\n },\n lg: {\n borderRadius: 'rounded-[20px]',\n headerHeight: 'h-[38px]',\n headerPadding: 'px-5',\n headerText: 'text-[16px] font-semibold',\n footerHeight: 'h-[56px]',\n footerText: 'text-[14px] font-medium',\n iconSize: 20,\n buttonSize: 'md' as const,\n kbdSize: 'sm' as const,\n },\n};\n\n// Internal Components\n\n/**\n * Header for categories view\n */\ninterface CategoriesHeaderProps {\n config: typeof sizeConfig[keyof typeof sizeConfig];\n}\n\nconst CategoriesHeader: React.FC<CategoriesHeaderProps> = ({ config }) => (\n <>\n <div\n className={clsx(\n 'flex items-center',\n config.headerHeight,\n config.headerPadding,\n 'bg-surface-bg'\n )}\n >\n <span className={clsx(config.headerText, 'text-med-em')}>\n Opciones\n </span>\n </div>\n <div className=\"border-t border-surface-3\" />\n </>\n);\n\n/**\n * Header for items view\n */\ninterface ItemsHeaderProps {\n config: typeof sizeConfig[keyof typeof sizeConfig];\n category: Category;\n onBack: () => void;\n}\n\nconst ItemsHeader: React.FC<ItemsHeaderProps> = ({ config, category, onBack }) => (\n <>\n <div\n className={clsx(\n 'flex items-center gap-3',\n config.headerHeight,\n config.headerPadding,\n 'bg-surface-bg'\n )}\n >\n <Button\n size={config.buttonSize}\n variant=\"neutral\"\n hierarchy=\"secondary\"\n icons=\"only\"\n leadingIcon={<ArrowLeft2 />}\n onClick={onBack}\n />\n\n <Tag\n size=\"xs\"\n variant={category.leadingTag.variant || 'tertiary'}\n leadingIcon={false}\n trailingIcon={false}\n >\n {category.leadingTag.content}\n </Tag>\n\n <span className={clsx(config.headerText, 'text-med-em')}>\n {category.title}\n </span>\n </div>\n <div className=\"border-t border-surface-3\" />\n </>\n);\n\n/**\n * Footer with keyboard shortcuts\n */\ninterface KeyboardFooterProps {\n config: typeof sizeConfig[keyof typeof sizeConfig];\n}\n\nconst KeyboardFooter: React.FC<KeyboardFooterProps> = ({ config }) => (\n <>\n <div className=\"border-t border-surface-3\" />\n <div\n className={clsx(\n 'flex items-center justify-between',\n config.footerHeight,\n config.headerPadding,\n 'bg-surface-bg'\n )}\n >\n {/* Navigate */}\n <div className=\"flex items-center gap-2\">\n <div className=\"flex items-center gap-1\">\n <Kbd size={config.kbdSize}>↑</Kbd>\n <Kbd size={config.kbdSize}>↓</Kbd>\n </div>\n <span className={clsx(config.footerText, 'text-low-em')}>navegar</span>\n </div>\n\n {/* Select */}\n <div className=\"flex items-center gap-2\">\n <Kbd size={config.kbdSize}>↩</Kbd>\n <span className={clsx(config.footerText, 'text-low-em')}>seleccionar</span>\n </div>\n\n {/* Close */}\n <div className=\"flex items-center gap-2\">\n <Kbd size={config.kbdSize}>esc</Kbd>\n <span className={clsx(config.footerText, 'text-low-em')}>cerrar</span>\n </div>\n </div>\n </>\n);\n\n/**\n * @file A dropdown menu component for chat slash commands with category navigation\n * @description This component renders a navigable menu with two views:\n * - Categories view: Shows all available categories using type-1 ChatCommandListItem\n * - Items view: Shows items within a selected category using type-2 ChatCommandListItem\n *\n * Features:\n * - Internal state management for navigation\n * - Dynamic headers based on current view\n * - Keyboard shortcuts footer\n * - Category and item selection callbacks\n *\n * @param {Category[]} categories - Array of categories with their items (required)\n * @param {ChatCommandListSize} [size='md'] - Size to apply to all elements\n * @param {Function} [onCategorySelect] - Callback when a category is selected\n * @param {Function} [onItemSelect] - Callback when an item is selected\n * @param {Function} [onClose] - Callback when close button is clicked\n * @param {boolean} [floating=false] - If true, uses absolute positioning\n * @param {string} [className] - Additional CSS classes\n * @returns {JSX.Element} The rendered ChatCommandList element\n */\nexport const ChatCommandList = ({\n categories = [],\n size = 'md',\n onCategorySelect,\n onItemSelect,\n onClose,\n floating = false,\n className,\n ...props\n}: ChatCommandListProps) => {\n const [currentView, setCurrentView] = useState<'categories' | 'items'>('categories');\n const [selectedCategory, setSelectedCategory] = useState<Category | null>(null);\n\n const config = sizeConfig[size];\n\n // Navigation handlers\n const handleCategoryClick = (category: Category) => {\n setSelectedCategory(category);\n setCurrentView('items');\n onCategorySelect?.(category.id);\n };\n\n const handleBack = () => {\n setCurrentView('categories');\n setSelectedCategory(null);\n };\n\n const handleItemClick = (item: CategoryItem) => {\n if (selectedCategory) {\n onItemSelect?.(selectedCategory.id, item.id);\n }\n };\n\n return (\n <div\n className={clsx(\n 'bg-surface-bg border border-surface-3 overflow-hidden',\n 'flex flex-col w-fit',\n config.borderRadius,\n floating && 'absolute z-50',\n className\n )}\n style={{\n boxShadow: '0px 8px 24px -4px rgba(0, 0, 0, 0.12)',\n }}\n {...props}\n >\n {/* Header */}\n {currentView === 'categories' ? (\n <CategoriesHeader config={config} />\n ) : selectedCategory ? (\n <ItemsHeader\n config={config}\n category={selectedCategory}\n onBack={handleBack}\n />\n ) : null}\n\n {/* Content */}\n {currentView === 'categories' ? (\n // Categories view\n categories.map((category) => (\n <ChatCommandListItem\n key={category.id}\n variant=\"type-1\"\n size={size}\n title={category.title}\n leadingTag={category.leadingTag}\n trailingButton={{\n icon: <ArrowRight2 />,\n onClick: () => handleCategoryClick(category),\n variant: 'neutral',\n hierarchy: 'secondary',\n }}\n onClick={() => handleCategoryClick(category)}\n />\n ))\n ) : selectedCategory ? (\n // Items view\n selectedCategory.items.map((item) => (\n <ChatCommandListItem\n key={item.id}\n variant=\"type-2\"\n size={size}\n title={item.title}\n tag={item.tag}\n description={item.description}\n onClick={() => handleItemClick(item)}\n />\n ))\n ) : null}\n\n {/* Footer */}\n <KeyboardFooter config={config} />\n </div>\n );\n};\n","\"use client\";\n\nimport { clsx } from 'clsx';\nimport { Button } from '@/shared/ui';\nimport { Add } from 'iconsax-react';\nimport { Tabs, TabItem } from '@/shared/ui';\nimport { ChatIcon, AICommentaryIcon, XMark } from '@/shared/icons';\n\n/**\n * View mode for the chat interface.\n */\nexport type ChatView = 'chat' | 'historial';\n\n/**\n * Defines the public API for the ChatHeader component.\n */\nexport interface ChatHeaderProps {\n /** Optional custom CSS classes for the container. */\n className?: string;\n /** Current active view */\n activeView?: ChatView;\n /** Callback function fired when the chat button is clicked. */\n onChatClick?: () => void;\n /** Callback function fired when the historial button is clicked. */\n onHistorialClick?: () => void;\n /** Callback function fired when the settings button is clicked. */\n onSettingsClick?: () => void;\n /** Callback function fired when the close button is clicked. */\n onCloseClick?: () => void;\n /** The width of the container */\n containerWidth?: number;\n}\n\n/**\n * @file A header component for the main chat interface.\n * @description This component renders the primary navigation (e.g., \"Chat\", \"Historial\")\n * and action controls (e.g., \"Settings\", \"Close\") for the chat panel. It is composed\n * of pre-styled `Button` components. Only one view can be active at a time.\n *\n * @param {string} [className] - Optional CSS classes to apply to the header container.\n * @param {ChatView} [activeView='chat'] - Current active view (chat or historial).\n * @param {function} [onChatClick] - Callback for the chat button click event.\n * @param {function} [onHistorialClick] - Callback for the historial button click event.\n * @param {function} [onSettingsClick] - Callback for the settings button click event.\n * @param {function} [onCloseClick] - Callback for the close button click event.\n * @returns {JSX.Element} The rendered ChatHeader element.\n */\nexport const ChatHeader = ({\n className,\n activeView = 'chat',\n onChatClick,\n onHistorialClick,\n onSettingsClick,\n onCloseClick,\n containerWidth = 0,\n}: ChatHeaderProps) => {\n const chatTabs: TabItem[] = [\n { id: 'chat', label: 'Chat', icon: <ChatIcon />, content: <div /> },\n { id: 'historial', label: 'Historial', icon: <AICommentaryIcon />, content: <div /> },\n ];\n\n const selectedIndex = chatTabs.findIndex(tab => tab.id === activeView);\n\n const handleTabChange = (index: number) => {\n const selectedTab = chatTabs[index];\n if (selectedTab.id === 'chat') {\n onChatClick?.();\n } else if (selectedTab.id === 'historial') {\n onHistorialClick?.();\n }\n };\n\n const tabsVariant = containerWidth <= 350 ? 'only-icon' : 'line-icons';\n\n return (\n <div\n className={clsx(\n 'flex w-full items-baseline justify-between rounded-t-lg',\n className\n )}\n >\n <div className=\"flex items-center\">\n <Tabs\n variant={tabsVariant}\n tabs={chatTabs}\n selectedIndex={selectedIndex}\n onChange={handleTabChange}\n contentSpacing='none'\n showBorder={false}\n />\n </div>\n\n <div className=\"flex items-center gap-2 pr-8 self-center\">\n <Button\n variant=\"neutral\"\n hierarchy=\"secondary\"\n size=\"sm\"\n icons=\"only\"\n leadingIcon={<Add />}\n onClick={onSettingsClick}\n aria-label=\"Add\"\n />\n <Button\n variant=\"neutral\"\n hierarchy=\"secondary\"\n size=\"sm\"\n icons=\"only\"\n leadingIcon={<XMark />}\n onClick={onCloseClick}\n aria-label=\"Close\"\n />\n </div>\n </div>\n );\n};\n","\"use client\";\n\nimport React, { useState } from 'react';\nimport { clsx } from 'clsx';\nimport { InfoCircle } from 'iconsax-react';\n\n// Type definitions for the component's props.\nexport type IconSize = 'xs' | 'sm' | 'sm-md' | 'md' | 'md-lg' | 'lg' | 'xl' | '2xl';\n\n// Defines props for icon components passed into this component\ninterface IconComponentProps {\n size?: number | string;\n color?: string;\n [key: string]: unknown;\n}\n\n/**\n * Defines the public API for the Icon component.\n */\nexport interface IconProps {\n /** The size of the icon or image. Can be a predefined size or a custom number in pixels. */\n size?: IconSize | number;\n /** Icon component to render (from iconsax-react or similar). */\n children?: React.ReactNode;\n /** Color to apply to the icon (only for icon components, not images). */\n color?: string;\n /** Image URL to display instead of an icon component. */\n imageUrl?: string;\n /** Alt text for the image (only applies when imageUrl is provided). */\n alt?: string;\n /** Optional custom CSS classes. */\n className?: string;\n}\n\n// Size mapping from semantic names to pixel values\nconst iconSizeMap: Record<IconSize, number> = {\n 'xs': 12,\n 'sm': 16,\n 'sm-md': 20,\n 'md': 24,\n 'md-lg': 28,\n 'lg': 32,\n 'xl': 36,\n '2xl': 40,\n};\n\n/**\n * @file A versatile icon component that supports both icon components and images.\n * @description This component can render either:\n * 1. Icon components (from iconsax-react) with configurable size and color\n * 2. Images with configurable size and fixed 12px border-radius\n *\n * If an image fails to load, it falls back to the InfoCircle icon.\n * If neither children nor imageUrl is provided, it renders InfoCircle as default.\n *\n * @param {IconSize} [size='md'] - The size of the icon or image.\n * @param {React.ReactNode} [children] - The icon component to render.\n * @param {string} [color='currentColor'] - The color to apply to icon components.\n * @param {string} [imageUrl] - URL of the image to display.\n * @param {string} [alt='Icon'] - Alt text for images.\n * @param {string} [className] - Additional CSS classes.\n * @returns {JSX.Element | null} The rendered Icon element.\n */\nexport const Icon = ({\n size = 'md',\n children,\n color = 'currentColor',\n imageUrl,\n alt = 'Icon',\n className,\n}: IconProps) => {\n const [imageError, setImageError] = useState(false);\n\n // If size is a number, use it directly; otherwise, look it up in the map\n const sizeInPx = typeof size === 'number' ? size : iconSizeMap[size];\n\n // Mode 1: Image URL provided and no error occurred\n if (imageUrl && !imageError) {\n return (\n <img\n src={imageUrl}\n alt={alt}\n className={clsx(\n 'rounded-[12px]',\n 'object-cover',\n className\n )}\n style={{\n width: sizeInPx,\n height: sizeInPx,\n }}\n onError={() => setImageError(true)}\n />\n );\n }\n\n // Mode 2: Icon component as children\n if (React.isValidElement(children)) {\n const childClassName = (children.props as IconComponentProps).className;\n return React.cloneElement(children as React.ReactElement<IconComponentProps>, {\n size: sizeInPx,\n color: color,\n className: clsx(className, typeof childClassName === 'string' ? childClassName : undefined),\n });\n }\n\n // Fallback: render InfoCircle icon\n return (\n <InfoCircle\n size={sizeInPx}\n color={color}\n className={className}\n />\n );\n};\n","\n\"use client\";\n\nimport React, { useState, forwardRef } from 'react';\nimport { clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\nimport { InfoCircle } from 'iconsax-react';\nimport { Icon } from '@/shared/ui/Icon/Icon';\nimport { EyeIcon, EyeOffIcon } from '@/shared/icons';\n\ntype InputFieldVariant = 'default' | 'outlined' | 'danger' | 'success';\ntype HintIconVariant = 'Bold' | 'Outline' | 'TwoTone' | 'Bulk' | 'Broken';\nexport type InputFieldSize = 'sm' | 'md' | 'lg';\n\n/**\n * Defines the public API for the InputField component, extending standard input element attributes.\n */\nexport interface InputFieldProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> {\n variant?: InputFieldVariant;\n size?: InputFieldSize;\n hintIconVariant?: HintIconVariant;\n label?: string;\n hint?: string;\n leadingIcon?: React.ReactNode;\n trailingIcon?: React.ReactNode;\n leadingIconColor?: string;\n trailingIconColor?: string;\n customBackground?: string;\n placeholderColor?: string;\n multiline?: boolean;\n customFontWeight?: number;\n /** Optional font size override. Accepts Tailwind size classes (e.g., 'xs', 'sm', 'md', 'lg') or pixel values (e.g., '12px', '16px'). */\n fontSize?: string;\n /** Optional custom font size override. Accepts Tailwind size classes (e.g., 'xs', 'sm', 'md', 'lg') or pixel values (e.g., '12px', '16px'). Alias for fontSize. */\n customFontSize?: string;\n /** Optional callback executed when clicking anywhere on the field. Prevents default input focus behavior. */\n onInputClick?: () => void;\n}\n\n// Centralized style configuration for each variant.\nconst variantConfig = {\n default: {\n\n wrapper: 'bg-surface-2 border-transparent hover:bg-surface-3',\n hint: 'text-med-em',\n placeholder: 'placeholder-placeholder text-med-em',\n icon: 'text-high-em',\n },\n outlined: {\n wrapper: 'bg-white border-surface-4',\n hint: 'text-med-em',\n placeholder: 'placeholder-placeholder text-med-em',\n icon: 'text-high-em',\n },\n danger: {\n wrapper: 'bg-danger-accent-1 border-danger-accent-2 hover:border-accent-2 text-danger-em',\n hint: 'text-danger-em',\n placeholder: 'placeholder-danger-main text-danger-em',\n icon: 'text-danger-em',\n },\n success: {\n wrapper: 'bg-success-accent-1 border-success-accent-2 hover:border-success-accent-2',\n hint: 'text-success-em',\n placeholder: 'placeholder-success-main text-success-em',\n icon: 'text-success-em',\n }\n};\n\n// Centralized size configuration\nconst sizeConfig = {\n sm: {\n inputPadding: 'px-3',\n textareaPadding: 'px-3 py-3',\n borderRadius: 'rounded-[8px]',\n fontSize: 'text-[10px] font-regular',\n iconSize: 12,\n height: 'h-[32px]',\n leadingIconPosition: 'left-4',\n trailingIconPosition: 'right-4',\n inputPaddingLeftWithIcon: 'pl-[32px]',\n inputPaddingRightWithIcon: 'pr-10',\n labelFontSize: 'text-[11px]',\n hintFontSize: 'text-[11px]',\n },\n md: {\n inputPadding: 'px-3.5',\n textareaPadding: 'px-3.5 py-4',\n borderRadius: 'rounded-[12px]',\n fontSize: 'text-[14px] font-regular',\n iconSize: 16,\n height: 'h-[38px]',\n leadingIconPosition: 'left-6',\n trailingIconPosition: 'right-6',\n inputPaddingLeftWithIcon: 'pl-[36px]',\n inputPaddingRightWithIcon: 'pr-12',\n labelFontSize: 'text-[12px]',\n hintFontSize: 'text-[12px]',\n },\n lg: {\n inputPadding: 'px-4',\n textareaPadding: 'px-4 py-5',\n borderRadius: 'rounded-[12px]',\n fontSize: 'text-[16px] font-regular',\n iconSize: 20,\n height: 'h-[48px]',\n leadingIconPosition: 'left-8',\n trailingIconPosition: 'right-8',\n inputPaddingLeftWithIcon: 'pl-[44px]',\n inputPaddingRightWithIcon: 'pr-14',\n labelFontSize: 'text-[14px]',\n hintFontSize: 'text-[14px]',\n }\n};\n\n// Centralized style configuration for the disabled state.\nconst disabledStyles = {\n wrapper: 'bg-surface-3 pointer-events-none border-transparent',\n input: 'disabled:text-disabled disabled:placeholder-disabled',\n hint: 'text-disabled',\n};\n\n/**\n * @file A versatile and themeable input field component for forms.\n * @description This component renders a complete input field unit, including a label,\n * the input itself, optional leading/trailing icons, and hint text. Its appearance is\n * controlled by the `variant` prop, which pulls styles from a centralized configuration object.\n * For password fields (type=\"password\"), a toggle visibility button is automatically added.\n *\n * @param {InputFieldVariant} [variant='default'] - The visual variant of the input field (default, outlined, danger, success).\n * @param {InputFieldSize} [size='md'] - The size variant of the input field (sm, md, lg).\n * @param {string} [label] - The text label displayed above the input.\n * @param {string} [hint] - Helper text or an error message displayed below the input.\n * @param {React.ReactNode} [leadingIcon] - An optional icon to display at the start of the input.\n * @param {React.ReactNode} [trailingIcon] - An optional icon to display at the end of the input.\n * @param {string} [leadingIconColor] - Custom color class for the leading icon (e.g., 'text-high-em', 'text-primary-900').\n * @param {string} [trailingIconColor] - Custom color class for the trailing icon (e.g., 'text-high-em', 'text-primary-900').\n * @param {string} [customBackground] - Custom background color (supports CSS color values or CSS variable names like 'gray-50', 'med-em').\n * @param {string} [placeholderColor] - Custom placeholder color class.\n * @param {boolean} [multiline] - If true, renders as a textarea with auto-resize.\n * @param {number} [customFontWeight] - Custom font weight (numeric value like 400, 500, 600, 700, etc.). Overrides default weight.\n * @param {string} [fontSize] - Optional font size override. Accepts Tailwind size classes (e.g., 'xs', 'sm', 'md', 'lg') or pixel values (e.g., '12px', '16px').\n * @param {string} [customFontSize] - Optional custom font size override. Accepts Tailwind size classes (e.g., 'xs', 'sm', 'md', 'lg') or pixel values (e.g., '12px', '16px'). Alias for fontSize.\n * @param {() => void} [onInputClick] - Optional callback executed when clicking anywhere on the field container. Prevents default input focus behavior. Changes cursor to pointer when defined.\n * @param {boolean} [disabled] - If true, the input will be visually disabled and non-interactive.\n * @returns {JSX.Element} The rendered InputField element.\n */\nexport const InputField = forwardRef<HTMLInputElement | HTMLTextAreaElement, InputFieldProps>(({\n variant = 'default',\n size = 'md',\n label,\n hint,\n leadingIcon,\n trailingIcon,\n leadingIconColor,\n trailingIconColor,\n disabled,\n className,\n type,\n customBackground,\n placeholderColor,\n multiline,\n customFontWeight,\n fontSize,\n customFontSize,\n hintIconVariant,\n onInputClick,\n ...props\n}, ref) => {\n const styles = variantConfig[variant];\n const sizeStyles = sizeConfig[size];\n\n const isPasswordField = type === 'password';\n const [showPassword, setShowPassword] = useState(false);\n const inputType = isPasswordField && showPassword ? 'text' : type;\n\n // Determine font size to use (customFontSize takes precedence over fontSize)\n const finalFontSize = customFontSize || fontSize;\n\n // Font size mapping for Tailwind classes\n const fontSizeMap: Record<string, string> = {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl',\n };\n\n // Determine font size class or inline style\n const fontSizeClass = finalFontSize\n ? (fontSizeMap[finalFontSize] || undefined)\n : undefined;\n\n const customFontSizeStyle = finalFontSize && !fontSizeMap[finalFontSize]\n ? { fontSize: finalFontSize }\n : undefined;\n\n const handleInput = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const textarea = e.currentTarget;\n textarea.style.height = 'auto';\n textarea.style.height = `${textarea.scrollHeight}px`;\n if (props.onChange) {\n props.onChange(e as unknown as React.ChangeEvent<HTMLInputElement>); // Pass event to parent onChange\n }\n };\n\n\n const backgroundValue = customBackground;\n\n const backgroundColor = backgroundValue\n ? /^[a-z]+-[a-z0-9-]+$/i.test(backgroundValue)\n ? `var(--${backgroundValue})`\n : backgroundValue\n : undefined;\n\n const fontWeight = customFontWeight ? customFontWeight : undefined;\n\n // Handler for optional field click functionality\n const handleFieldClick = (e: React.MouseEvent<HTMLDivElement>) => {\n if (onInputClick) {\n e.preventDefault();\n onInputClick();\n }\n };\n\n const commonInputClasses = twMerge(clsx(\n 'w-full bg-transparent text-placeholder focus:outline-none',\n !multiline && 'h-full',\n multiline ? sizeStyles.textareaPadding : sizeStyles.inputPadding,\n !customFontWeight && 'font-medium',\n !finalFontSize && sizeStyles.fontSize, // Apply size-specific font size if no custom font size\n styles.placeholder,\n disabled && disabledStyles.input,\n placeholderColor,\n fontSizeClass,\n leadingIcon && sizeStyles.inputPaddingLeftWithIcon,\n (trailingIcon || (isPasswordField && !multiline)) && sizeStyles.inputPaddingRightWithIcon,\n onInputClick && 'cursor-pointer pointer-events-none'\n ));\n\n return (\n <div\n className={twMerge(clsx('flex flex-col gap-1.5', onInputClick && 'cursor-pointer', className))}\n onClick={handleFieldClick}\n >\n {label && (\n <label htmlFor={props.id} className={twMerge(clsx('font-semibold text-med-em pl-[2px]', sizeStyles.labelFontSize))}>\n {label}\n </label>\n )}\n\n <div\n className={twMerge(clsx(\n 'relative flex items-center border transition-colors duration-200',\n sizeStyles.borderRadius,\n !multiline && sizeStyles.height,\n styles.wrapper,\n disabled && disabledStyles.wrapper\n ))}\n style={{ backgroundColor }}\n >\n {leadingIcon && (\n <Icon\n size={sizeStyles.iconSize}\n className={twMerge(clsx(\n 'absolute top-1/2 -translate-y-1/2',\n sizeStyles.leadingIconPosition,\n leadingIconColor || styles.icon\n ))}\n >\n {leadingIcon}\n </Icon>\n )}\n {multiline ? (\n <textarea\n ref={ref as React.Ref<HTMLTextAreaElement>}\n disabled={disabled}\n className={twMerge(commonInputClasses, 'resize-none overflow-hidden')}\n style={{ fontWeight, ...customFontSizeStyle }}\n onInput={handleInput}\n rows={1}\n {...props as React.TextareaHTMLAttributes<HTMLTextAreaElement>}\n />\n ) : (\n <input\n ref={ref as React.Ref<HTMLInputElement>}\n disabled={disabled}\n type={inputType}\n className={commonInputClasses}\n style={{ fontWeight, ...customFontSizeStyle }}\n {...props as React.InputHTMLAttributes<HTMLInputElement>}\n />\n )}\n {!multiline && isPasswordField ? (\n <button\n type=\"button\"\n onClick={() => setShowPassword(!showPassword)}\n className={twMerge(clsx('absolute top-1/2 -translate-y-1/2 text-placeholder hover:text-med focus:outline-none transition-colors', sizeStyles.trailingIconPosition))}\n aria-label={showPassword ? 'Ocultar contraseña' : 'Mostrar contraseña'}\n tabIndex={-1}\n >\n {showPassword ? <EyeOffIcon size={sizeStyles.iconSize} /> : <EyeIcon size={sizeStyles.iconSize} />}\n </button>\n ) : trailingIcon ? (\n <Icon\n size={sizeStyles.iconSize}\n className={twMerge(clsx(\n 'absolute top-1/2 -translate-y-1/2',\n sizeStyles.trailingIconPosition,\n trailingIconColor || styles.icon\n ))}\n >\n {trailingIcon}\n </Icon>\n ) : null}\n </div>\n\n {hint && (\n <div className={twMerge(clsx('flex items-center gap-1 font-semibold', sizeStyles.hintFontSize, styles.hint, disabled && disabledStyles.hint))}>\n <InfoCircle size={sizeStyles.iconSize} color=\"currentColor\" variant={hintIconVariant || 'Bold'} />\n <span>{hint}</span>\n </div>\n )}\n </div>\n );\n});\n\nInputField.displayName = \"InputField\";\n","\"use client\";\n\nimport React from 'react';\nimport { clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\nimport { Checkbox, CheckboxProps } from '../Checkbox/Checkbox';\nimport { Icon } from '../Icon/Icon';\nimport { Tag, TagProps } from '../Tag/Tag';\nimport { Element3, ArrowRight2 } from 'iconsax-react';\n\n// Type definitions for the component's props\nexport type ListItemSize = 'xs' | 'sm' | 'md' | 'lg';\n\n/**\n * Defines the public API for the ListItem component\n */\nexport interface ListItemProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'title'> {\n /** The size of the list item */\n size?: ListItemSize;\n\n /** If true, the list item will be non-interactive */\n disabled?: boolean;\n\n /** Show/hide optional elements (all default to true) */\n showCheckbox?: boolean;\n showLeadingImage?: boolean;\n showLeadingIcon?: boolean;\n showDescription?: boolean;\n showTrailingIcon?: boolean;\n showTag?: boolean;\n showTrailingText?: boolean;\n\n /** Content props */\n title: string;\n description?: string;\n\n /** Custom color class for title (e.g., 'text-low-em', 'text-success-main') */\n customTitleColor?: string;\n\n /** Custom background color class (e.g., 'bg-surface-1', 'bg-success-accent-1') */\n customBackgroundColor?: string;\n\n /** Custom hover background color class (e.g., 'hover:bg-surface-2', 'hover:bg-success-accent-2') */\n customHoverColor?: string;\n\n /** Custom color for leading icon (e.g., 'var(--danger-em)', '#DE2424') */\n customLeadingIconColor?: string;\n\n /** Checkbox props */\n checked?: boolean;\n indeterminate?: boolean;\n onCheckboxChange?: (checked: boolean) => void;\n\n /** Icon/Image props */\n leadingImageUrl?: string;\n leadingImageAlt?: string;\n leadingIcon?: React.ReactNode;\n trailingIcon?: React.ReactNode;\n\n /** Tag props */\n tagContent?: string;\n tagVariant?: TagProps['variant'];\n\n /** Trailing text */\n trailingText?: string;\n\n /** Custom className for middle container */\n middleContainerClassName?: string;\n}\n\n// Size configuration for each variant\nconst sizeConfig = {\n xs: {\n container: 'h-[40px] min-w-[250px]',\n sidePadding: 'pl-6 pr-7',\n checkboxMargin: 'mr-5',\n middleGap: 'gap-5',\n rightGap: 'gap-5',\n checkbox: 'small' as CheckboxProps['size'],\n leadingImage: 'sm' as const,\n leadingIcon: 'xs' as const,\n trailingIcon: 'xs' as const,\n title: 'text-[11px] font-semibold',\n description: 'text-[9px] font-medium',\n tag: 'xs' as TagProps['size'],\n trailingText: 'text-[9px] font-medium',\n },\n sm: {\n container: 'h-[50px] min-w-[290px]',\n sidePadding: 'pl-7 pr-8',\n checkboxMargin: 'mr-6', // Margin after checkbox\n middleGap: 'gap-6', // Gap between icons and text in middle group\n rightGap: 'gap-6', // Gap between right elements\n checkbox: 'small' as CheckboxProps['size'],\n leadingImage: 'md' as const,\n leadingIcon: 'sm' as const,\n trailingIcon: 'sm' as const,\n title: 'text-[12px] font-semibold',\n description: 'text-[10px] font-medium',\n tag: 'xs' as TagProps['size'],\n trailingText: 'text-[10px] font-medium',\n },\n md: {\n container: 'h-[56px] min-w-[340px]',\n sidePadding: 'pl-9 pr-9',\n checkboxMargin: 'mr-6',\n middleGap: 'gap-6',\n rightGap: 'gap-6',\n checkbox: 'medium' as CheckboxProps['size'],\n leadingImage: 'lg' as const,\n leadingIcon: 'sm-md' as const,\n trailingIcon: 'sm-md' as const,\n title: 'text-[14px] font-semibold',\n description: 'text-[12px] font-medium',\n tag: 'xs' as TagProps['size'],\n trailingText: 'text-[12px] font-medium',\n },\n lg: {\n container: 'h-[70px] min-w-[420px]',\n sidePadding: 'pl-9 pr-9',\n checkboxMargin: 'mr-6',\n middleGap: 'gap-6',\n rightGap: 'gap-6',\n checkbox: 'large' as CheckboxProps['size'],\n leadingImage: '2xl' as const,\n leadingIcon: 'md' as const,\n trailingIcon: 'md' as const,\n title: 'text-[16px] font-semibold',\n description: 'text-[14px] font-medium',\n tag: 'sm' as TagProps['size'],\n trailingText: 'text-[14px] font-medium',\n },\n};\n\n/**\n * @file A versatile list item component that composes multiple UI elements\n * @description This component renders a horizontal list item that can contain:\n * - Optional checkbox\n * - Optional leading image or icon\n * - Title and description (title required)\n * - Optional trailing icon\n * - Optional tag\n * - Optional trailing text\n *\n * The component is always rendered as a button and handles hover/active/disabled states automatically.\n *\n * @param {ListItemSize} [size='md'] - The size of the list item (affects height and all child components)\n * @param {boolean} [disabled=false] - If true, the list item will be non-interactive\n * @param {string} title - The main title text (required)\n * @param {string} [description] - Optional description text below the title\n * @param {boolean} [showCheckbox=true] - Show/hide checkbox\n * @param {boolean} [showLeadingImage=true] - Show/hide leading image\n * @param {boolean} [showLeadingIcon=true] - Show/hide leading icon\n * @param {boolean} [showTrailingIcon=true] - Show/hide trailing icon\n * @param {boolean} [showTag=true] - Show/hide tag\n * @param {boolean} [showTrailingText=true] - Show/hide trailing text\n * @returns {JSX.Element} The rendered ListItem element\n */\nexport const ListItem = ({\n size = 'md',\n disabled = false,\n showCheckbox = true,\n showLeadingImage = true,\n showLeadingIcon = true,\n showDescription = true,\n showTrailingIcon = true,\n showTag = true,\n showTrailingText = true,\n title,\n description,\n customTitleColor,\n customBackgroundColor,\n customHoverColor,\n customLeadingIconColor,\n checked = false,\n indeterminate = false,\n onCheckboxChange,\n leadingImageUrl,\n leadingImageAlt = 'List item image',\n leadingIcon,\n trailingIcon,\n tagContent,\n tagVariant = 'tertiary',\n trailingText,\n className,\n middleContainerClassName,\n onClick,\n ...props\n}: ListItemProps) => {\n const config = sizeConfig[size];\n\n const handleCheckboxClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n };\n\n const handleCheckboxChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onCheckboxChange?.(e.target.checked);\n };\n\n return (\n <button\n type=\"button\"\n disabled={disabled}\n onClick={onClick}\n className={clsx(\n 'flex items-center w-full transition-colors duration-200',\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-brand-secondary-main',\n config.container,\n config.sidePadding,\n customBackgroundColor || (disabled\n ? 'bg-surface-3 cursor-not-allowed'\n : 'bg-transparent hover:bg-surface-1 active:bg-surface-2 cursor-pointer'),\n customBackgroundColor && (disabled ? 'cursor-not-allowed' : 'cursor-pointer'),\n customHoverColor && !disabled && customHoverColor,\n className\n )}\n {...props}\n >\n {/* Container 1: Checkbox with its own spacing */}\n {showCheckbox && (\n <div onClick={handleCheckboxClick} className={clsx('flex items-center', config.checkboxMargin)}>\n <Checkbox\n size={config.checkbox}\n checked={checked}\n indeterminate={indeterminate}\n onChange={handleCheckboxChange}\n disabled={disabled}\n />\n </div>\n )}\n\n {/* Container 2: Middle group (Image + Icon + Text) with consistent gap */}\n <div className={twMerge(clsx('flex items-center', config.middleGap), middleContainerClassName)}>\n {/* Leading Image */}\n {showLeadingImage && leadingImageUrl && (\n <div className={clsx('shrink-0', disabled && 'opacity-50')}>\n <Icon\n size={config.leadingImage}\n imageUrl={leadingImageUrl}\n alt={leadingImageAlt}\n />\n </div>\n )}\n\n {/* Leading Icon */}\n {showLeadingIcon && (\n <div className=\"shrink-0\">\n <Icon size={config.leadingIcon} color={disabled ? 'var(--text-disabled)' : (customLeadingIconColor || 'var(--med-em)')}>\n {leadingIcon || <Element3 />}\n </Icon>\n </div>\n )}\n\n {/* Title and Description Container */}\n <div className=\"flex flex-col gap-0 justify-start items-start min-w-0 shrink mr-8\">\n <span\n className={clsx(\n config.title,\n customTitleColor || (disabled ? 'text-disabled' : 'text-med-em'),\n 'truncate max-w-full'\n )}\n >\n {title}\n </span>\n {showDescription && description && (\n <span\n className={clsx(\n config.description,\n disabled ? 'text-disabled' : 'text-low-em',\n 'truncate max-w-full'\n )}\n >\n {description}\n </span>\n )}\n </div>\n </div>\n\n {/* Container 3: Right-aligned elements group with consistent gap */}\n <div className={clsx('flex items-center ml-auto', config.rightGap)}>\n {/* Trailing Icon */}\n {showTrailingIcon && (\n <Icon size={config.trailingIcon} color={disabled ? 'var(--text-disabled)' : 'var(--high-em)'}>\n {trailingIcon || <ArrowRight2 />}\n </Icon>\n )}\n\n {/* Tag */}\n {showTag && tagContent && (\n <Tag\n size={config.tag}\n variant={tagVariant}\n disabled={disabled}\n leadingIcon={false}\n trailingIcon={false}\n >\n {tagContent}\n </Tag>\n )}\n\n {/* Trailing Text */}\n {showTrailingText && trailingText && (\n <span\n className={clsx(\n config.trailingText,\n disabled ? 'text-disabled' : 'text-low-em'\n )}\n >\n {trailingText}\n </span>\n )}\n </div>\n </button>\n );\n};\n","\"use client\";\n\nimport React from 'react';\nimport { clsx } from 'clsx';\nimport { ListItem, ListItemProps, ListItemSize } from '../ListItem/ListItem';\n\n// Type definitions for the component's props\nexport type DropMenuSize = ListItemSize;\n\n/**\n * Represents a single item in the DropMenu\n */\nexport interface DropMenuItemProps extends ListItemProps {\n /** Unique identifier for the item */\n id?: string;\n /** Show a divider after this item */\n showDividerAfter?: boolean;\n}\n\n/**\n * Defines the public API for the DropMenu component\n */\nexport interface DropMenuProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect'> {\n /** Array of items to display in the menu */\n items: DropMenuItemProps[];\n\n /** Optional header configuration (displays a minimal ListItem with only title) */\n header?: {\n title: string;\n };\n\n /** Size for the header (defaults to 'xs' for compact display) */\n headerSize?: DropMenuSize;\n\n /** Size to apply to all child ListItems */\n size?: DropMenuSize;\n\n /** Array of selected item IDs (for controlled selection) */\n selectedIds?: string[];\n\n /** Callback when an item is selected */\n onSelect?: (id: string) => void;\n\n /** If true, uses absolute positioning for dropdown behavior */\n floating?: boolean;\n\n /** Additional CSS classes for the container */\n className?: string;\n}\n\n// Size configuration for border radius\nconst sizeConfig = {\n xs: 'rounded-[8px]',\n sm: 'rounded-[12px]',\n md: 'rounded-[16px]',\n lg: 'rounded-[20px]',\n};\n\n/**\n * @file A dropdown menu component that displays a list of ListItem components\n * @description This component renders a vertical menu container that can include:\n * - Optional header (minimal ListItem with only title)\n * - Multiple ListItem components with customizable props\n * - Optional dividers between specific items\n * - Selection management with controlled state\n * - Absolute/floating positioning support\n *\n * The component acts as a static container (always visible) that composes ListItem\n * components with consistent styling and behavior.\n *\n * @param {DropMenuItemProps[]} items - Array of items to display (required)\n * @param {object} [header] - Optional header with title\n * @param {DropMenuSize} [headerSize='xs'] - Size for the header (defaults to 'xs' for compact display)\n * @param {DropMenuSize} [size='md'] - Size to apply to all ListItems\n * @param {string[]} [selectedIds] - Array of selected item IDs\n * @param {Function} [onSelect] - Callback when item is selected\n * @param {boolean} [floating=false] - If true, uses absolute positioning\n * @param {string} [className] - Additional CSS classes\n * @returns {JSX.Element} The rendered DropMenu element\n */\nexport const DropMenu = ({\n items = [],\n header,\n headerSize = 'xs',\n size = 'md',\n selectedIds = [],\n onSelect,\n floating = false,\n className,\n ...props\n}: DropMenuProps) => {\n const config = sizeConfig[size];\n\n const handleItemClick = (id?: string) => {\n if (id && onSelect) {\n onSelect(id);\n }\n };\n\n return (\n <div\n className={clsx(\n 'bg-surface-bg border border-surface-3 overflow-hidden',\n 'flex flex-col w-fit',\n config,\n floating && 'absolute z-50',\n className\n )}\n style={{\n boxShadow: '0px 8px 24px -4px rgba(0, 0, 0, 0.12)',\n }}\n {...props}\n >\n {/* Optional Header */}\n {header && (\n <>\n <ListItem\n size={headerSize}\n title={header.title}\n showCheckbox={false}\n showLeadingImage={false}\n showLeadingIcon={false}\n showDescription={false}\n showTrailingIcon={false}\n showTag={false}\n showTrailingText={false}\n className=\"cursor-default hover:bg-transparent active:bg-transparent\"\n customTitleColor='text-low-em'\n />\n <div className=\"border-t border-surface-3\" />\n </>\n )}\n\n {/* Menu Items */}\n {items.map((item, index) => {\n const { id, showDividerAfter, onClick, customBackgroundColor, customHoverColor, ...itemProps } = item;\n const isSelected = id ? selectedIds.includes(id) : false;\n const isLastItem = index === items.length - 1;\n\n return (\n <React.Fragment key={id || index}>\n <ListItem\n size={size}\n onClick={(e) => {\n handleItemClick(id);\n onClick?.(e);\n }}\n customBackgroundColor={customBackgroundColor || 'bg-surface-bg'}\n customHoverColor={customHoverColor || 'hover:bg-surface-2'}\n className={clsx(\n isSelected && 'bg-surface-1',\n itemProps.className\n )}\n checked={isSelected}\n {...itemProps}\n />\n {/* Conditional Divider */}\n {showDividerAfter && !isLastItem && (\n <div className=\"border-t border-surface-3\" />\n )}\n </React.Fragment>\n );\n })}\n </div>\n );\n};\n","\"use client\";\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { clsx } from 'clsx';\nimport { DropMenu, DropMenuItemProps } from '@/shared/ui/DropMenu/DropMenu';\nimport { Button } from '@/shared/ui';\nimport { More } from 'iconsax-react';\n\n/**\n * Defines the public API for the ChatHistorialItem component.\n */\nexport interface ChatHistorialItemProps {\n /** Unique identifier for the chat item */\n id: string;\n /** Title of the chat */\n title: string;\n /** Preview or summary of the chat content */\n preview: string;\n /** Callback fired when the item is clicked */\n onClick?: () => void;\n /** Menu items for the drop menu */\n menuItems?: DropMenuItemProps[];\n /** Optional custom CSS classes for the container */\n className?: string;\n}\n\n/**\n * @file A chat history item component showing a chat title and preview.\n * @description This component displays a single chat from the history with its\n * title and preview text. It includes a drop menu for actions like edit,\n * duplicate, and delete. The component is designed to be used in a list of chats.\n *\n * @param {string} id - Unique identifier for the chat\n * @param {string} title - Title of the chat\n * @param {string} preview - Preview or summary text\n * @param {() => void} [onClick] - Handler for item click\n * @param {DropMenuItemProps[]} [menuItems] - Menu items for the drop menu\n * @param {string} [className] - Optional CSS classes\n * @returns {JSX.Element} The rendered ChatHistorialItem component\n */\nexport const ChatHistorialItem = ({\n id,\n title,\n preview,\n onClick,\n menuItems,\n className,\n}: ChatHistorialItemProps) => {\n const [isMenuOpen, setIsMenuOpen] = useState(false);\n const menuRef = useRef<HTMLDivElement>(null);\n const buttonRef = useRef<HTMLButtonElement>(null);\n\n // Close menu when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n menuRef.current &&\n !menuRef.current.contains(event.target as Node) &&\n buttonRef.current &&\n !buttonRef.current.contains(event.target as Node)\n ) {\n setIsMenuOpen(false);\n }\n };\n\n if (isMenuOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isMenuOpen]);\n\n // Configure menu items with proper props\n const configuredMenuItems: DropMenuItemProps[] = menuItems?.map((item, index) => {\n const isLastItem = index === menuItems.length - 1;\n\n return {\n ...item,\n showCheckbox: false,\n showLeadingImage: false,\n showLeadingIcon: true,\n showDescription: false,\n showTrailingIcon: false,\n showTag: false,\n showTrailingText: false,\n // Add divider after second item (before the last one)\n showDividerAfter: index === menuItems.length - 2,\n // Override height for each item\n className: clsx('!h-[34px]', item.className),\n // Apply danger color to last item (icon and text)\n ...(isLastItem && {\n customTitleColor: 'text-danger-em',\n customLeadingIconColor: 'var(--danger-em)',\n }),\n };\n }) || [];\n\n return (\n <div\n className={clsx(\n 'group flex items-start justify-between gap-3 px-8 py-4 hover:bg-surface-1 transition-colors cursor-pointer',\n className\n )}\n onClick={onClick}\n >\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <h3 className=\"text-xs font-semibold text-med-em mb-1\">\n {title}\n </h3>\n <p className=\"text-[10px] font-medium text-low-em\">\n {preview}\n </p>\n </div>\n\n {/* Menu Button */}\n {menuItems && menuItems.length > 0 && (\n <div\n className=\"flex-shrink-0 relative\"\n onClick={(e) => e.stopPropagation()}\n >\n <Button\n ref={buttonRef}\n variant=\"neutral\"\n hierarchy=\"secondary\"\n size=\"sm\"\n icons=\"only\"\n leadingIcon={<More variant=\"Linear\" />}\n aria-label=\"Más opciones\"\n onClick={() => setIsMenuOpen(!isMenuOpen)}\n />\n\n {/* Drop Menu */}\n {isMenuOpen && (\n <div ref={menuRef} className=\"absolute right-0 top-full mt-1 z-50\">\n <DropMenu\n items={configuredMenuItems}\n size=\"xs\"\n className=\"!w-[182px]\"\n onSelect={(itemId) => {\n // Find and execute the onClick handler of the selected item\n const selectedItem = menuItems.find(item => item.id === itemId);\n if (selectedItem?.onClick) {\n selectedItem.onClick({} as React.MouseEvent<HTMLButtonElement>);\n }\n setIsMenuOpen(false);\n }}\n />\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n","\"use client\";\n\nimport React, { useState, useMemo } from 'react';\nimport { clsx } from 'clsx';\nimport { InputField } from '@/shared/ui/InputField/InputField';\nimport { ChatHistorialItem as ChatHistorialItemComponent, ChatHistorialItemProps } from '@/shared/ui/ChatHistorialItem/ChatHistorialItem';\nimport { SearchNormal } from 'iconsax-react';\n\n/**\n * Represents a single item in the chat history with timestamp\n */\nexport interface ChatHistorialItem extends Omit<ChatHistorialItemProps, 'onClick'> {\n /**\n * Timestamp of the chat (Date object or ISO string)\n */\n timestamp: Date | string;\n}\n\n/**\n * Defines the public API for the ChatHistorial component\n */\nexport interface ChatHistorialProps {\n /**\n * Array of chat history items with timestamps\n */\n items: ChatHistorialItem[];\n\n /**\n * Callback when an item is clicked\n */\n onItemClick?: (item: ChatHistorialItem) => void;\n\n /**\n * Placeholder text for the search bar\n */\n searchPlaceholder?: string;\n\n /**\n * Additional CSS classes for the container\n */\n className?: string;\n\n /**\n * Optional callback for search value changes\n */\n onSearchChange?: (value: string) => void;\n}\n\n/**\n * Grouped items by date ranges\n */\ninterface GroupedItems {\n today: ChatHistorialItem[];\n last7Days: ChatHistorialItem[];\n last30Days: ChatHistorialItem[];\n last90Days: ChatHistorialItem[];\n}\n\n/**\n * Groups items by date ranges relative to today\n */\nconst groupItemsByDate = (items: ChatHistorialItem[]): GroupedItems => {\n const now = new Date();\n const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n const last7Days = new Date(today.getTime() - 7 * 24 * 60 * 60 * 1000);\n const last30Days = new Date(today.getTime() - 30 * 24 * 60 * 60 * 1000);\n const last90Days = new Date(today.getTime() - 90 * 24 * 60 * 60 * 1000);\n\n return items.reduce(\n (acc, item) => {\n const itemDate = new Date(item.timestamp);\n\n if (itemDate >= today) {\n acc.today.push(item);\n } else if (itemDate >= last7Days) {\n acc.last7Days.push(item);\n } else if (itemDate >= last30Days) {\n acc.last30Days.push(item);\n } else if (itemDate >= last90Days) {\n acc.last90Days.push(item);\n }\n\n return acc;\n },\n {\n today: [],\n last7Days: [],\n last30Days: [],\n last90Days: [],\n } as GroupedItems\n );\n};\n\n/**\n * Filters items based on search query (case-insensitive)\n */\nconst filterItems = (items: ChatHistorialItem[], query: string): ChatHistorialItem[] => {\n if (!query.trim()) return items;\n\n const lowerQuery = query.toLowerCase();\n return items.filter((item) => item.title.toLowerCase().includes(lowerQuery));\n};\n\n/**\n * @file A chat history component with search and date-based grouping\n * @description This component displays a searchable list of chat history items\n * grouped by date ranges (today, last 7 days, last 30 days, last 90 days).\n * Includes a search bar at the top for filtering items by title.\n *\n * @param {ChatHistorialItem[]} items - Array of chat history items\n * @param {Function} [onItemClick] - Callback when item is clicked\n * @param {string} [searchPlaceholder] - Search bar placeholder\n * @param {string} [className] - Custom CSS classes\n * @param {Function} [onSearchChange] - Callback for search changes\n * @returns {JSX.Element} The rendered ChatHistorial component\n */\nexport const ChatHistorial = ({\n items,\n onItemClick,\n searchPlaceholder = 'Buscar en el historial...',\n className,\n onSearchChange,\n}: ChatHistorialProps) => {\n const [searchQuery, setSearchQuery] = useState('');\n\n // Filter and group items based on search query\n const groupedItems = useMemo(() => {\n const filtered = filterItems(items, searchQuery);\n return groupItemsByDate(filtered);\n }, [items, searchQuery]);\n\n // Handle search input changes\n const handleSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n setSearchQuery(value);\n onSearchChange?.(value);\n };\n\n // Render a section with items\n const renderSection = (\n title: string,\n sectionItems: ChatHistorialItem[]\n ) => {\n if (sectionItems.length === 0) return null;\n\n return (\n <div key={title}>\n {/* Section Header */}\n <div className=\"px-8 py-8\">\n <h3 className=\"text-xs font-semibold text-low-em\">{title}</h3>\n </div>\n\n {/* Section Items */}\n {sectionItems.map((item, index) => (\n <React.Fragment key={item.id}>\n <ChatHistorialItemComponent\n id={item.id}\n title={item.title}\n preview={item.preview}\n menuItems={item.menuItems}\n onClick={() => onItemClick?.(item)}\n />\n {/* Separator (not after last item) */}\n {index < sectionItems.length - 1 && (\n <div className=\"border-b border-surface-2\" />\n )}\n </React.Fragment>\n ))}\n </div>\n );\n };\n\n // Check if there are no results\n const hasNoResults =\n groupedItems.today.length === 0 &&\n groupedItems.last7Days.length === 0 &&\n groupedItems.last30Days.length === 0 &&\n groupedItems.last90Days.length === 0;\n\n return (\n <div className={clsx('flex flex-col', className)}>\n {/* Search Bar */}\n <div className=\"px-8 pt-9\">\n <InputField\n size=\"md\"\n variant=\"default\"\n placeholder={searchPlaceholder}\n leadingIcon={<SearchNormal size={20} variant=\"Linear\" />}\n value={searchQuery}\n onChange={handleSearchChange}\n />\n </div>\n\n {/* Grouped Items */}\n {!hasNoResults ? (\n <div className=\"flex flex-col\">\n {renderSection('Hoy', groupedItems.today)}\n {renderSection('Últimos 7 días', groupedItems.last7Days)}\n {renderSection('Últimos 30 días', groupedItems.last30Days)}\n {renderSection('Últimos 90 días', groupedItems.last90Days)}\n </div>\n ) : (\n /* Empty State */\n <div className=\"flex flex-col items-center justify-center py-12 px-8\">\n <p className=\"text-sm text-low-em text-center\">\n No se encontraron resultados para \"{searchQuery}\"\n </p>\n </div>\n )}\n </div>\n );\n};\n","\"use client\";\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { clsx } from 'clsx';\nimport { TextArea } from '@/shared/ui';\nimport { Button } from '@/shared/ui';\nimport { Switcher, type SwitcherItem } from '@/shared/ui';\nimport { AddCircle, Hashtag } from 'iconsax-react';\nimport { AIMessage } from '@/shared/icons';\n\n/**\n * Defines the public API for the ChatInputText component.\n */\nexport interface ChatInputTextProps {\n /** The current value of the text input, making it a controlled component. */\n inputValue?: string;\n /** Callback function fired when the text input's value changes. */\n onInputChange?: (value: string) => void;\n /** Callback function fired when the send button is clicked. */\n onSendClick?: () => void;\n /** The placeholder text for the input field. */\n placeholder?: string;\n /** Visual variant of the component. 'default' shows all controls, 'minimal' hides the Switcher. */\n variant?: 'default' | 'minimal';\n /** Optional custom classes for the main container. */\n className?: string;\n containerWidth?: number;\n /** Minimum number of lines to display when no content is present. @default 2 */\n minLines?: number;\n /** Maximum number of lines before scrolling. @default 10 */\n maxLines?: number;\n}\n\nconst switcherItems: SwitcherItem[] = [\n { id: 'conversation', label: 'Conversación' },\n { id: 'constructor', label: 'Constructor' },\n];\n\n/**\n * @file A composite component for the main chat input area.\n * @description This component assembles several other UI elements (`InputField`, `Button`, `Switcher`)\n * to create a rich input experience. It includes a primary text field at the top and a row\n * of contextual action buttons and controls below. The state for the text input is controlled\n * from the parent, while the `Switcher` state is managed internally.\n *\n * @param {string} [inputValue] - The controlled value for the text input.\n * @param {(value: string) => void} [onInputChange] - Callback for when the input value changes.\n * @param {() => void} [onSendClick] - Callback for when the send button is clicked.\n * @param {string} [placeholder='Input Text'] - Placeholder text for the input field.\n * @returns {JSX.Element} The rendered ChatInputText element.\n */\nexport const ChatInputText = ({\n inputValue,\n onInputChange,\n onSendClick,\n placeholder = \"Input Text\",\n variant = 'default',\n className,\n minLines = 2,\n maxLines = 10,\n}: ChatInputTextProps) => {\n const [switcherValue, setSwitcherValue] = useState<string | number>('conversation');\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Calculate heights based on lines\n // Each line = 20px (includes font size, line-height, and padding)\n const LINE_HEIGHT = 20;\n const minHeight = minLines * LINE_HEIGHT;\n const maxHeight = maxLines * LINE_HEIGHT;\n\n // Auto-grow functionality\n useEffect(() => {\n const textarea = containerRef.current?.querySelector('textarea') as HTMLTextAreaElement;\n if (!textarea) return;\n\n // Reset height to get accurate scrollHeight\n // Using 0px forces recalculation of true content height\n textarea.style.height = '0px';\n textarea.style.overflow = 'hidden';\n\n // Get the actual content height\n const scrollHeight = textarea.scrollHeight;\n\n // Calculate final height with min/max constraints\n const newHeight = Math.max(minHeight, Math.min(scrollHeight, maxHeight));\n\n // Set the calculated height\n textarea.style.height = `${newHeight}px`;\n\n // Show scrollbar if content exceeds max height\n textarea.style.overflow = scrollHeight > maxHeight ? 'auto' : 'hidden';\n }, [inputValue, minHeight, maxHeight]);\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n onSendClick?.();\n }\n };\n\n return (\n <div\n ref={containerRef}\n className={clsx(\n 'flex flex-col gap-3 p-4 rounded-xl bg-surface-2 border border-surface-3',\n className\n )}\n >\n <div className='mb-1'>\n <Button\n variant=\"neutral\"\n hierarchy=\"quaternary\"\n size=\"xs\"\n icons=\"only\"\n leadingIcon={<Hashtag />}\n aria-label=\"Add\"\n />\n </div>\n <TextArea\n variant=\"default\"\n placeholder={placeholder}\n value={inputValue}\n onChange={(e) => onInputChange?.(e.target.value)}\n onKeyDown={handleKeyDown}\n resize=\"none\"\n className=\"[&_textarea]:!min-h-0\"\n />\n\n <div className=\"flex items-center justify-between gap-4\">\n <div className=\"flex items-center justify-start gap-4\">\n <div className=\"flex items-center gap-4\">\n <Button\n variant=\"neutral\"\n hierarchy=\"quaternary\"\n size=\"md\"\n borderRadius='12px'\n icons=\"only\"\n leadingIcon={<AddCircle />}\n aria-label=\"Add\"\n />\n </div>\n\n {variant === 'default' && (\n <Switcher\n withBorder={true}\n items={switcherItems}\n value={switcherValue}\n onChange={setSwitcherValue}\n size=\"ai-chat\"\n />\n )}\n\n </div>\n <Button\n variant=\"neutral\"\n hierarchy=\"primary\"\n size=\"md\"\n icons=\"only\"\n borderRadius='12px'\n leadingIcon={<AIMessage />}\n onClick={onSendClick}\n aria-label=\"Send\"\n />\n </div>\n </div>\n );\n};\n","\n\n\"use client\";\n\nimport React from 'react';\nimport { clsx } from 'clsx';\nimport './ChatMessage.css';\n\n// Type definitions for the component's props.\ntype ChatMessageVariant = 'sent' | 'received';\n\n/**\n * Defines the public API for the ChatMessage component.\n */\nexport interface ChatMessageProps {\n /** The visual variant of the message bubble, determining its style and alignment. */\n variant: ChatMessageVariant;\n /** The content of the message. Can be a simple string or complex JSX for formatted text. */\n children: React.ReactNode;\n /** Optional custom CSS classes for the container. */\n className?: string;\n}\n\n/**\n * @file A component for displaying a single message bubble in a chat interface.\n * @description This component renders a message bubble with distinct styles for 'sent' (user's message)\n * and 'received' (bot or other user's message) variants. It is designed to be placed\n * within a flex container (`flex-col`) to handle alignment.\n *\n * @param {ChatMessageVariant} variant - The variant of the message, either 'sent' or 'received'.\n * @param {React.ReactNode} children - The message content, which can include formatted text like `<strong>`.\n * @param {string} [className] - Optional custom CSS classes for the container.\n * @returns {JSX.Element} The rendered ChatMessage element.\n */\nexport const ChatMessage = ({\n variant,\n children,\n className,\n}: ChatMessageProps) => {\n return (\n <div\n className={clsx(\n 'chat-message-container',\n variant === 'sent' ? 'chat-message-sent' : 'chat-message-received',\n className\n )}\n >\n <div\n className={clsx(\n 'chat-message-content',\n variant === 'sent' ? 'chat-message-sent-content' : 'chat-message-received-content'\n )}\n >\n {children}\n </div>\n </div>\n );\n};\n\n","\n\"use client\";\n\nimport { useState } from 'react';\nimport { clsx } from 'clsx';\nimport { Icon } from '@/shared/ui';\nimport { Copy, Like1, Dislike, Refresh } from 'iconsax-react';\n\n/**\n * Defines the public API for the ChatMessageOptions component,\n * including callbacks for each action button.\n */\nexport interface ChatMessageOptionsProps {\n /** Callback function fired when the copy button is clicked. */\n onCopyClick?: () => void;\n /** Callback function fired when the like button is clicked. */\n onLikeClick?: () => void;\n /** Callback function fired when the dislike button is clicked. */\n onDislikeClick?: () => void;\n /** Callback function fired when the refresh button is clicked. */\n onRefreshClick?: () => void;\n /** Optional custom CSS classes for the container. */\n className?: string;\n}\n\n/**\n * @file A component for displaying a set of interactive options for a chat message.\n * @description This component renders a standardized row of icon buttons (copy, like, dislike, refresh)\n * that are typically associated with a message from an AI or bot. It is a composition of the main `Button`\n * component to ensure visual consistency. Functionality for each button is delegated to a parent\n * component via `onClick` callback props.\n *\n * @param {function} [onCopyClick] - Callback for the copy button.\n * @param {function} [onLikeClick] - Callback for the like button.\n * @param {function} [onDislikeClick] - Callback for the dislike button.\n * @param {function} [onRefreshClick] - Callback for the refresh button.\n * @returns {JSX.Element} The rendered ChatMessageOptions element.\n */\nexport const ChatMessageOptions = ({\n className,\n onCopyClick,\n onLikeClick,\n onDislikeClick,\n onRefreshClick,\n}: ChatMessageOptionsProps) => {\n const [isLiked, setIsLiked] = useState(false);\n const [isDisliked, setIsDisliked] = useState(false);\n\n const handleLikeClick = () => {\n setIsLiked(!isLiked);\n onLikeClick?.();\n };\n\n const handleDislikeClick = () => {\n setIsDisliked(!isDisliked);\n onDislikeClick?.();\n };\n\n return (\n <div className={clsx('inline-flex items-center gap-4', className)}>\n <button\n onClick={onCopyClick}\n className=\"p-1 rounded hover:bg-surface-2 transition-colors cursor-pointer text-high-em\"\n aria-label=\"Copy message\"\n >\n <Icon size=\"sm\">\n <Copy />\n </Icon>\n </button>\n\n <button\n onClick={handleLikeClick}\n className=\"p-1 rounded hover:bg-surface-2 transition-colors cursor-pointer text-high-em\"\n aria-label=\"Like message\"\n >\n <Icon size=\"sm\">\n {isLiked ? <Like1 variant=\"Bold\" /> : <Like1 variant=\"Outline\" />}\n </Icon>\n </button>\n\n <button\n onClick={handleDislikeClick}\n className=\"p-1 rounded hover:bg-surface-2 transition-colors cursor-pointer text-high-em\"\n aria-label=\"Dislike message\"\n >\n <Icon size=\"sm\">\n {isDisliked ? <Dislike variant=\"Bold\" /> : <Dislike variant=\"Outline\" />}\n </Icon>\n </button>\n\n <button\n onClick={onRefreshClick}\n className=\"p-1 rounded hover:bg-surface-2 transition-colors cursor-pointer text-high-em\"\n aria-label=\"Refresh response\"\n >\n <Icon size=\"sm\">\n <Refresh />\n </Icon>\n </button>\n </div>\n );\n};\n\n","\"use client\";\n\nimport React from 'react';\nimport { clsx } from 'clsx';\n\n// Type definitions for the component's props\ntype Alignment = 'left' | 'right';\n\n/**\n * Defines the public API for the AttachmentMessage component, extending standard anchor element attributes.\n */\nexport interface AttachmentMessageProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n /** The name of the file to be displayed. */\n fileName: string;\n /** The size of the file (e.g., '1.2 MB'). */\n fileSize: string;\n /** Determines the alignment and which corner is sharp. 'left' for sent, 'right' for received. */\n alignment?: Alignment;\n /** Optional custom classes for the container. */\n className?: string;\n}\n\n/**\n * @file A component for displaying a clickable file attachment within a chat interface.\n * @description This component renders a styled link that displays a file's name and size.\n * Its visual alignment can be controlled via the `alignment` prop to distinguish between\n * sent and received messages, which is achieved by altering the `border-radius`.\n *\n * @param {string} fileName - The name of the file to display.\n * @param {string} fileSize - The size of the file to display (e.g., \"1.2 MB\").\n * @param {Alignment} [alignment='left'] - Sets the alignment and which corner is sharp. 'left' is for sent, 'right' is for received.\n * @param {string} [href] - The URL to the file that will be downloaded.\n * @returns {JSX.Element} The rendered AttachmentMessage element.\n */\nexport const AttachmentMessage = ({\n fileName,\n fileSize,\n alignment = 'left',\n className,\n ...props\n}: AttachmentMessageProps) => {\n return (\n <a\n href={props.href || '#'} // Default href to prevent issues\n download\n className={clsx(\n 'block w-full border border-surface-2 p-4 transition-colors hover:bg-surface-2',\n 'py-6 px-8 h-[68px]',\n {\n 'rounded-tr-lg rounded-br-lg rounded-bl-lg': alignment === 'left',\n 'rounded-tl-lg rounded-bl-lg rounded-br-lg': alignment === 'right',\n },\n className\n )}\n {...props}\n >\n <div className=\"flex flex-col text-low-em\">\n <span className=\"font-medium text-sm\">{fileName}</span>\n <span className=\"font-normal text-sm\">{fileSize}</span>\n </div>\n </a>\n );\n};\n\n","\"use client\";\n\nimport { clsx } from 'clsx';\n\n/**\n * Defines the public API for the ChatTypingIndicator component.\n */\nexport interface ChatTypingIndicatorProps {\n /** Optional custom CSS classes for the container. */\n className?: string;\n}\n\n/**\n * @file A typing indicator component for chat interfaces.\n * @description This component displays an animated ellipsis (three dots) to indicate\n * that the assistant is currently typing or processing a response. The dots animate\n * sequentially to create a \"breathing\" effect.\n *\n * @param {string} [className] - Optional CSS classes for the container.\n * @returns {JSX.Element} The rendered ChatTypingIndicator element.\n */\nexport const ChatTypingIndicator = ({ className }: ChatTypingIndicatorProps) => {\n return (\n <div\n className={clsx(\n 'w-full max-w-max self-start',\n className\n )}\n >\n <div className=\"flex items-center gap-1 px-4 py-3\">\n <div className=\"flex items-center gap-3\">\n <span\n className=\"w-3 h-3 bg-low-em rounded-full animate-typing-dot\"\n style={{ animationDelay: '0ms' }}\n />\n <span\n className=\"w-3 h-3 bg-surface-4 rounded-full animate-typing-dot\"\n style={{ animationDelay: '200ms' }}\n />\n <span\n className=\"w-3 h-3 bg-low-em rounded-full animate-typing-dot\"\n style={{ animationDelay: '400ms' }}\n />\n </div>\n </div>\n </div>\n );\n};\n","'use client';\n\nimport React, { Suspense } from 'react';\nimport type { ChatPanelProps } from './ChatPanel.types';\nimport { ChatHeader } from '@/shared/ui/ChatHeader';\nimport { ChatHistorial } from '@/shared/ui/ChatHistorial';\nimport { ChatInputText } from '@/shared/ui/ChatInputText';\nimport { ChatMessage } from '@/shared/ui/ChatMessage';\nimport { AttachmentMessage } from '@/shared/ui/AttachmentMessage';\nimport { ChatTypingIndicator } from '@/shared/ui/ChatTypingIndicator';\nimport { ChatMessageOptions } from '@/shared/ui/ChatMessageOptions';\nimport { Divider } from '..';\n\nconst ReactMarkdown = React.lazy(() => import('react-markdown'));\n\nconst MarkdownRenderer = ({ children }: { children: string }) => (\n <Suspense fallback={<span>{children}</span>}>\n <ReactMarkdown>{children}</ReactMarkdown>\n </Suspense>\n);\n\n/**\n * ChatPanel - A complete chat panel component with integrated header, content area, and input.\n * Automatically shows ChatHistorial when activeView is 'historial' and ChatInputText in chat view.\n *\n * Features:\n * - Data-driven approach with messages array from backend\n * - Markdown rendering support with react-markdown\n * - Integrated ChatHeader with tabs (Chat/Historial) and action buttons\n * - Support for message attachments\n * - Typing indicator\n * - Responsive design with containerWidth-based layout adjustments\n *\n * @example\n * ```tsx\n * // Chat view with messages (data-driven approach)\n * <ChatPanel\n * showHeader\n * showChatInput\n * showTypingIndicator\n * activeView=\"chat\"\n * containerWidth={478}\n * messages={messagesArray}\n * chatInputValue={message}\n * onChatInputChange={setMessage}\n * onChatSendClick={handleSend}\n * onChatClick={() => setActiveView('chat')}\n * onHistorialClick={() => setActiveView('historial')}\n * />\n *\n * // Historial view\n * <ChatPanel\n * showHeader\n * activeView=\"historial\"\n * containerWidth={478}\n * historialItems={items}\n * onHistorialItemClick={(item) => console.log(item)}\n * onChatClick={() => setActiveView('chat')}\n * onHistorialClick={() => setActiveView('historial')}\n * />\n *\n * // Minimal variant (350px width with icon-only tabs and minimal input)\n * <ChatPanel\n * showHeader\n * showChatInput\n * activeView=\"chat\"\n * containerWidth={350}\n * messages={messagesArray}\n * chatInputValue={message}\n * chatInputVariant=\"minimal\"\n * onChatInputChange={setMessage}\n * />\n * ```\n */\nexport const ChatPanel = React.memo<ChatPanelProps>(({\n messages,\n showTypingIndicator = false,\n children,\n className,\n borderSide = 'none',\n borderStyle = 'surface-3',\n showHeader = false,\n headerHeight = 56,\n activeView = 'chat',\n onChatClick,\n onHistorialClick,\n onSettingsClick,\n onCloseClick,\n containerWidth = 0,\n historialItems = [],\n onHistorialItemClick,\n historialSearchPlaceholder,\n onHistorialSearchChange,\n showChatInput = true,\n chatInputValue,\n onChatInputChange,\n onChatSendClick,\n chatInputPlaceholder = 'Input Text',\n chatInputVariant = 'default',\n chatInputMinLines = 2,\n chatInputMaxLines = 10,\n onMessageCopyClick,\n onMessageLikeClick,\n onMessageDislikeClick,\n onMessageRefreshClick,\n}) => {\n // Build border classes based on props\n const borderClasses = React.useMemo(() => {\n if (borderSide === 'none') return '';\n\n const side = borderSide === 'left' ? 'border-l' : 'border-r';\n const style = borderStyle === 'surface-3' ? 'border-surface-3' : 'border-surface-4';\n\n return `${side} ${style}`;\n }, [borderSide, borderStyle]);\n\n // Base classes - no background, inherits from parent Panel\n const baseClasses = 'h-full w-full flex flex-col bg-white';\n\n return (\n <div\n className={`${baseClasses} ${borderClasses} ${className || ''}`}\n > \n {/* Header */}\n {showHeader && (\n <>\n <div style={{ height: `${headerHeight}px` }}>\n <ChatHeader\n activeView={activeView}\n onChatClick={onChatClick}\n onHistorialClick={onHistorialClick}\n onSettingsClick={onSettingsClick}\n onCloseClick={onCloseClick}\n containerWidth={containerWidth}\n className=\"pl-8 items-end h-full\"\n />\n </div>\n <Divider/>\n </>\n )}\n\n {/* Content Area */}\n {activeView === 'historial' ? (\n <ChatHistorial\n items={historialItems}\n onItemClick={onHistorialItemClick}\n searchPlaceholder={historialSearchPlaceholder}\n onSearchChange={onHistorialSearchChange}\n className=\"flex-1 overflow-y-auto\"\n />\n ) : (\n <>\n {/* Chat content area - grows to fill available space */}\n <div className=\"flex-1 overflow-y-auto\">\n {messages ? (\n <div className=\"flex flex-col gap-10 px-9 py-6\">\n {messages.map((message) => (\n <React.Fragment key={message.id}>\n {message.attachment ? (\n <div className={`flex flex-col gap-4 ${message.variant === 'sent' ? 'items-end' : 'items-start'}`}>\n <div className={`flex flex-col gap-10 ${message.variant === 'sent' ? 'items-end' : 'items-start'}`}>\n <ChatMessage variant={message.variant}>\n {typeof message.content === 'string' ? (\n <MarkdownRenderer>{message.content}</MarkdownRenderer>\n ) : (\n message.content\n )}\n </ChatMessage>\n <div className=\"w-auto max-w-[300px]\">\n <AttachmentMessage\n fileName={message.attachment.fileName}\n fileSize={message.attachment.fileSize}\n alignment={message.variant === 'sent' ? 'right' : 'left'}\n href={message.attachment.href}\n />\n </div>\n </div>\n {message.variant === 'received' && (\n <ChatMessageOptions\n onCopyClick={() => onMessageCopyClick?.(message.id)}\n onLikeClick={() => onMessageLikeClick?.(message.id)}\n onDislikeClick={() => onMessageDislikeClick?.(message.id)}\n onRefreshClick={() => onMessageRefreshClick?.(message.id)}\n />\n )}\n </div>\n ) : (\n <div className={`flex flex-col ${message.variant === 'sent' ? 'items-end' : 'items-start'}`}>\n <ChatMessage variant={message.variant}>\n {typeof message.content === 'string' ? (\n <MarkdownRenderer>{message.content}</MarkdownRenderer>\n ) : (\n message.content\n )}\n </ChatMessage>\n {message.variant === 'received' && (\n <ChatMessageOptions\n onCopyClick={() => onMessageCopyClick?.(message.id)}\n onLikeClick={() => onMessageLikeClick?.(message.id)}\n onDislikeClick={() => onMessageDislikeClick?.(message.id)}\n onRefreshClick={() => onMessageRefreshClick?.(message.id)}\n />\n )}\n </div>\n )}\n </React.Fragment>\n ))}\n {showTypingIndicator && <ChatTypingIndicator />}\n </div>\n ) : (\n children\n )}\n </div>\n\n {/* Chat Input - stays at bottom */}\n {showChatInput && (\n <div className=\"p-4\">\n <ChatInputText\n minLines={chatInputMinLines}\n maxLines={chatInputMaxLines}\n inputValue={chatInputValue}\n onInputChange={onChatInputChange}\n onSendClick={onChatSendClick}\n placeholder={chatInputPlaceholder}\n variant={chatInputVariant}\n containerWidth={containerWidth}\n />\n </div>\n )}\n </>\n )}\n </div>\n );\n});\n\nChatPanel.displayName = 'ChatPanel';\n\nexport default ChatPanel;\n","import React from 'react';\nimport { twMerge } from 'tailwind-merge';\n\n// Tipos para las variantes del componente\nexport type ChipSize = 'sm' | 'md';\nexport type ChipType = 'unselected' | 'selected';\nexport type ChipState = 'focus' | 'drag' | 'disabled' | 'hover' | 'default';\n\n/**\n * Defines public API for Chip component.\n */\nexport interface ChipProps {\n /** The size of chip. */\n size?: ChipSize;\n /** The selection state of chip. */\n type?: ChipType;\n /** The interactive state of chip. */\n state?: ChipState;\n /** The content to display inside chip (the main label). */\n children?: React.ReactNode;\n /** Optional content/icon/avatar to display on left side of chip. */\n leftContent?: React.ReactNode;\n /** Optional content/icon/action to display on right side of chip (e.g., a close button). */\n rightContent?: React.ReactNode;\n /** Handler for click event on chip (making it interactive). */\n onClick?: () => void;\n /** Optional custom CSS classes to apply to the container. */\n className?: string;\n /** Whether to show left content. */\n showLeftContent?: boolean;\n /** Whether to show right content. */\n showRightContent?: boolean;\n /** Whether to show text content. */\n showText?: boolean;\n}\n\n\n// Size classes for different sizes\nconst sizeClasses: Record<ChipSize, { container: string; iconSize: number; gapValue: string }> = {\n sm: {\n container: 'px-4 py-3 text-xs font-medium leading-[18px]',\n iconSize: 16,\n gapValue: '6px',\n },\n md: {\n container: 'px-5 py-4 text-sm font-semibold leading-[22px]',\n iconSize: 16,\n gapValue: '6px',\n },\n};\n\n// States classes to be applied to the chip\nconst stateClasses: Partial<Record<ChipState, string>> = {\n drag: 'cursor-grabbing shadow-[0_8px_14px_-4px_rgba(0,0,0,0.2)]',\n hover: 'opacity-90 hover:scale-[1.02] transition-transform',\n default: 'border border-surface-4',\n};\n\n// Get the state styles based on the provided theme, type, and state\nconst getStateStyles = (type: ChipType, state: ChipState): string => {\n if (state === 'disabled') {\n return 'bg-surface-3 border-none text-disabled';\n }\n \n if (state === 'hover') {\n if (type === 'selected') {\n return 'bg-surface-2 border-surface-3 text-high-em';\n } else {\n return 'bg-surface-2 border-surface-4 text-high-em';\n }\n }\n \n if (state === 'focus') {\n if (type === 'selected') {\n return 'bg-surface-2 border-2 border-surface-3 text-high-em';\n } else {\n return 'bg-surface-2 border-2 border-surface-4 text-high-em';\n }\n }\n \n if (state === 'drag') {\n if (type === 'selected') {\n return 'bg-surface-2 border-surface-3 text-high-em';\n } else {\n return 'bg-surface-2 border-surface-4 text-high-em';\n }\n }\n \n return '';\n};\n\n/**\n * @file A Chip component for interactive selection, filtering, or representing an input.\n */\nexport const Chip = ({\n size = 'md',\n type = 'unselected',\n state = 'default',\n children,\n leftContent,\n rightContent,\n onClick,\n className,\n showLeftContent = true,\n showRightContent = true,\n showText = true,\n}: ChipProps) => {\n const cloneIconElement = (icon: React.ReactNode): React.ReactNode => {\n if (!React.isValidElement(icon)) return icon;\n \n const el = icon as React.ReactElement<React.SVGProps<SVGSVGElement> & { size?: number | string }>;\n const existingStyle = el.props.style || {};\n \n const newProps: React.SVGProps<SVGSVGElement> & { size?: undefined } = {\n ...el.props,\n style: { \n ...existingStyle, \n width: '100%', \n height: '100%', \n display: 'block' \n },\n size: undefined,\n };\n \n return React.cloneElement(el, newProps);\n };\n\n const isClickable = !!onClick && state !== 'disabled';\n const hasLeftContent = !!leftContent && showLeftContent;\n const hasRightContent = !!rightContent && showRightContent;\n\n const currentSize = sizeClasses[size];\n const currentState = stateClasses[state];\n const stateSpecificStyles = getStateStyles(type, state);\n \n const chipClasses = twMerge(\n // Base styles\n 'inline-flex items-center border border-solid transition-all duration-150 rounded-full font-family-inter',\n // State styles\n currentState,\n // Size styles\n currentSize.container,\n // State specific styles (Sobreescribe los estilos de theme y size)\n stateSpecificStyles,\n // Interactive styles\n isClickable && 'cursor-pointer hover:opacity-90 active:opacity-100',\n state === 'disabled' && 'cursor-not-allowed',\n state === 'drag' && 'cursor-grabbing',\n // Custom classes\n className\n );\n \n const IconWrapperClasses = 'flex-shrink-0 inline-flex items-center justify-center';\n\n const iconSize = currentSize.iconSize;\n const gapValue = currentSize.gapValue;\n\n const LeftContentWrapper = (\n <div\n className={IconWrapperClasses}\n style={{\n marginRight: gapValue,\n width: `${iconSize}px`,\n height: `${iconSize}px`,\n }}\n >\n {hasLeftContent ? cloneIconElement(leftContent) : null}\n </div>\n );\n \n const RightContentWrapper = (\n <div\n className={IconWrapperClasses}\n style={{\n marginLeft: gapValue,\n width: `${iconSize}px`,\n height: `${iconSize}px`,\n }}\n >\n {hasRightContent ? cloneIconElement(rightContent) : null}\n </div>\n );\n\n return (\n <div\n className={chipClasses}\n role={isClickable ? 'button' : 'status'}\n onClick={isClickable ? onClick : undefined}\n tabIndex={isClickable ? 0 : undefined}\n >\n {LeftContentWrapper}\n\n {showText && (\n <span className='shrink-0'>{children}</span>\n )}\n\n {RightContentWrapper}\n </div>\n );\n};","\"use client\";\n\nimport React, { useEffect, useState } from 'react';\n\ninterface ColorItem {\n name: string;\n value: string;\n}\n\ninterface ColorPaletteProps {\n colors?: ColorItem[];\n}\n\n// Lista de todas las variables de color del design system\nconst COLOR_VARIABLE_NAMES = [\n // Primitivos\n '--black',\n '--white',\n '--black-uniform',\n '--white-uniform',\n\n // Surface tokens\n '--surface-bg',\n '--surface-1',\n '--surface-2',\n '--surface-3',\n '--surface-4',\n\n // Text emphasis\n '--disabled',\n '--placeholder',\n '--low-em',\n '--med-em',\n '--high-em',\n\n // Brand tokens\n '--brand-primary-main',\n '--brand-primary-main-special',\n '--brand-primary-accent-special',\n '--brand-primary-accent-3',\n '--brand-secondary-main',\n '--brand-secondary-accent-3',\n\n // Warning tokens\n '--warning-em',\n '--warning-main',\n '--warning-accent-3',\n '--warning-accent-1',\n '--warning-accent-0',\n\n // Success tokens\n '--success-em',\n '--success-main',\n '--success-accent-3',\n '--success-accent-2',\n '--success-accent-1',\n\n // Info tokens\n '--info-em',\n '--info-main',\n '--info-accent-3',\n '--info-accent-2',\n '--info-accent-1',\n\n // Danger tokens\n '--danger-em',\n '--danger-main',\n '--danger-accent-3',\n '--danger-accent-2',\n '--danger-accent-1',\n];\n\n// Función helper para extraer colores del DOM\nconst extractColors = (): ColorItem[] => {\n if (typeof document === 'undefined') return [];\n\n const extractedColors: ColorItem[] = [];\n const styles = getComputedStyle(document.documentElement);\n\n COLOR_VARIABLE_NAMES.forEach((varName) => {\n const value = styles.getPropertyValue(varName).trim();\n if (value) {\n extractedColors.push({\n name: varName,\n value: value.toUpperCase(),\n });\n }\n });\n\n return extractedColors;\n};\n\nexport const ColorPalette = ({ colors: colorsProp }: ColorPaletteProps) => {\n const [colors, setColors] = useState<ColorItem[]>(colorsProp || []);\n const [forceUpdate, setForceUpdate] = useState(0);\n\n // Efecto para extraer colores cuando cambian las props o el tema\n useEffect(() => {\n // Si se pasaron colores como prop, usarlos\n if (colorsProp) {\n setColors(colorsProp);\n return;\n }\n\n // Si no, leer dinámicamente del CSS\n setColors(extractColors());\n }, [colorsProp, forceUpdate]);\n\n // Efecto para observar cambios en el tema (clase .dark)\n useEffect(() => {\n // Si hay colores custom, no observar\n if (colorsProp) return;\n\n // Observer para detectar cambios en la clase del documentElement\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.type === 'attributes' && mutation.attributeName === 'class') {\n // Forzar re-extracción de colores\n setForceUpdate((prev) => prev + 1);\n }\n });\n });\n\n // Observar cambios en el atributo class del documentElement\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class'],\n });\n\n return () => observer.disconnect();\n }, [colorsProp]);\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n {colors.map(({ name, value }) => (\n <div key={name} style={{ display: 'flex', alignItems: 'center', gap: '1rem', fontFamily: 'monospace' }}>\n <div style={{ width: '50px', height: '50px', backgroundColor: value, border: '1px solid #ccc', borderRadius: '4px' }} />\n <div>\n <div style={{ fontWeight: 'bold' }}>{name}</div>\n <div>{value}</div>\n </div>\n </div>\n ))}\n </div>\n );\n};\n","\"use client\";\n\nimport React from 'react';\nimport { clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport interface ColumnHandlerProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Whether the column handler is disabled\n */\n disabled?: boolean;\n /**\n * Additional CSS classes\n */\n className?: string;\n}\n\n/**\n * ColumnHandler component for dragging and reordering columns\n *\n * A vertical drag handle with three dots indicating draggable functionality\n */\nexport const ColumnHandler = ({\n disabled = false,\n className,\n ...props\n}: ColumnHandlerProps) => {\n return (\n <div\n className={twMerge(clsx(\n 'inline-flex flex-col items-center justify-center gap-[2px]',\n 'w-[17px] h-[80px] rounded-full border border-surface-3 bg-white',\n 'cursor-grab active:cursor-grabbing transition-opacity',\n disabled && 'opacity-50 cursor-not-allowed',\n className\n ))}\n {...props}\n >\n {/* Three vertical dots */}\n <div className=\"w-[2.6px] h-[3px] rounded-full bg-surface-3\" />\n <div className=\"w-[2.6px] h-[3px] rounded-full bg-surface-3\" />\n <div className=\"w-[2.6px] h-[3px] rounded-full bg-surface-3\" />\n </div>\n );\n};\n","\"use client\";\n\nimport React, { useState } from 'react';\nimport { clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\nimport { Combobox as HeadlessCombobox } from '@headlessui/react';\nimport { ArrowDown2, InfoCircle } from 'iconsax-react';\n\n// Type definitions for the component's props.\ntype ComboBoxLayout = 'text_icon' | 'text_image' | 'only_icon' | 'text_icon_text';\ntype ComboBoxHierarchy = 'fill' | 'outlined';\ntype ComboBoxVariant = 'default' | 'danger' | 'success';\n\n/**\n * Defines the shape for a single selectable option in the ComboBox.\n */\nexport interface ComboBoxOption {\n id: string | number;\n label: string;\n avatarUrl?: string;\n [key: string]: unknown;\n}\n\n/**\n * Defines the expected props for icon components passed into the ComboBox.\n */\ninterface IconProps {\n size?: number | string;\n color?: string;\n [key: string]: unknown;\n}\n\n/**\n * Defines the public API for the ComboBox component.\n */\nexport interface ComboBoxProps {\n layout?: ComboBoxLayout;\n hierarchy?: ComboBoxHierarchy;\n variant?: ComboBoxVariant;\n size?: 'sm' | 'md' | 'lg';\n label?: string;\n hint?: string;\n disabled?: boolean;\n leadingIcon?: React.ReactNode;\n leadingAvatar?: string;\n trailingAddon?: React.ReactNode;\n options: ComboBoxOption[];\n value: ComboBoxOption | null;\n onChange: (value: ComboBoxOption | null) => void;\n placeholder?: string;\n className?: string;\n name?: string;\n id?: string;\n /** Custom color for placeholder text (e.g., 'placeholder-gray-400'). Overrides variant defaults. */\n placeholderColor?: string;\n /** Custom color for input text (e.g., 'text-dark-300'). Overrides variant defaults. */\n inputTextColor?: string;\n /** Custom background color for the input wrapper (e.g., 'bg-gray-100'). Overrides variant defaults. */\n backgroundColor?: string;\n /** Custom color for the chevron/dropdown icon (e.g., '#64748B' or 'currentColor'). */\n chevronColor?: string;\n /** Custom background color for active/hovered option (e.g., 'bg-primary-500'). Defaults to 'bg-primary-500'. */\n optionActiveColor?: string;\n /** Custom text color for active/hovered option (e.g., 'text-white'). Defaults to 'text-white'. */\n optionActiveTextColor?: string;\n /** Custom text color for inactive options (e.g., 'text-gray-900'). Defaults to 'text-gray-900'. */\n optionTextColor?: string;\n /** Custom border radius for the input wrapper (e.g., 'rounded-md', 'rounded-xl', 'rounded-full'). Defaults to 'rounded-lg'. */\n borderRadius?: string;\n}\n\n// Centralized configuration for what elements to show in each layout.\nconst layoutConfig: Record<ComboBoxLayout, {\n showLeadingIcon: boolean;\n showLeadingAvatar: boolean;\n showInput: boolean;\n showTrailingChevron: boolean;\n showTrailingAddon: boolean;\n}> = {\n text_icon: { showLeadingIcon: true, showLeadingAvatar: false, showInput: true, showTrailingChevron: true, showTrailingAddon: false },\n text_image: { showLeadingIcon: false, showLeadingAvatar: true, showInput: true, showTrailingChevron: true, showTrailingAddon: false },\n only_icon: { showLeadingIcon: false, showLeadingAvatar: false, showInput: false, showTrailingChevron: true, showTrailingAddon: false },\n text_icon_text: { showLeadingIcon: true, showLeadingAvatar: false, showInput: true, showTrailingChevron: false, showTrailingAddon: true },\n};\n\n// Centralized style configuration for each variant and hierarchy.\nconst variantConfig: Record<ComboBoxVariant, Record<ComboBoxHierarchy, { wrapper: string; hint: string; input: string }>> = {\n default: {\n fill: { wrapper: 'border-none bg-gray-100 focus-within:ring-gray-500 text-dark-300', hint: 'text-primary-300', input: 'text-primary-300 placeholder-gray-500' },\n outlined: { wrapper: 'border-gray-500 bg-white focus-within:ring-gray-600 text-dark-300', hint: 'text-gray-600', input: 'text-dark-300 placeholder-gray-500' },\n },\n danger: {\n fill: { wrapper: 'border-danger-200 bg-danger-50 focus-within:ring-danger-200 text-danger-600', hint: 'text-danger-600', input: 'text-danger-600 placeholder-danger-400' },\n outlined: { wrapper: 'border-danger-300 bg-white text-danger-600 focus-within:ring-danger-200', hint: 'text-danger-600', input: 'text-danger-600 placeholder-danger-400' },\n },\n success: {\n fill: { wrapper: 'border-success-300 bg-success-50 focus-within:ring-success-200 text-success-600', hint: 'text-success-600', input: 'text-success-900 placeholder-success-400' },\n outlined: { wrapper: 'border-success-300 bg-white text-success-600 focus-within:ring-success-200', hint: 'text-success-600', input: 'text-success-900 placeholder-success-400' },\n },\n};\n\nconst disabledStyles = 'opacity-50 bg-gray-100 cursor-not-allowed';\nconst sizeConfig = {\n sm: { wrapper: 'h-[32px] text-[10px] px-4', icon: 14, avatar: 'w-[12px] h-[12px]' },\n md: { wrapper: 'h-[38px] text-[14px] px-6', icon: 16, avatar: 'w-[16px] h-[16px]' },\n lg: { wrapper: 'h-[48px] text-[16px] px-8', icon: 20, avatar: 'w-[20px] h-[20px]' },\n};\n\n/**\n * @file An accessible and highly configurable ComboBox component.\n * @description This component provides a text input with an associated dropdown menu,\n * allowing users to either type a value or select one from a filtered list. It is built\n * on top of Headless UI for robust accessibility and state management. The visual\n * presentation is determined by a combination of `layout`, `hierarchy`, `variant`, and `size` props.\n *\n * @param {ComboBoxLayout} [layout='text_icon'] - Defines the visual structure (e.g., with icon, avatar, or text addon).\n * @param {ComboBoxHierarchy} [hierarchy='fill'] - The main visual style (filled background or outlined).\n * @param {ComboBoxVariant} [variant='default'] - The color theme for different states (default, danger, success).\n * @param {ComboBoxSize} [size='md'] - The dimensions of the component.\n * @param {ComboBoxOption[]} options - The array of selectable options.\n * @param {ComboBoxOption | null} value - The currently selected option object.\n * @param {(value: ComboBoxOption | null) => void} onChange - Callback fired when an option is selected.\n * @returns {JSX.Element} The rendered ComboBox element.\n */\nexport const ComboBox = ({\n layout = 'text_icon',\n hierarchy = 'fill',\n variant = 'default',\n size = 'md',\n label, hint, disabled, leadingIcon, leadingAvatar, trailingAddon,\n options, value, onChange, placeholder, className,\n placeholderColor,\n inputTextColor,\n backgroundColor,\n chevronColor = 'currentColor',\n optionActiveColor = 'bg-primary-500',\n optionActiveTextColor = 'text-white',\n optionTextColor = 'text-gray-900',\n borderRadius = 'rounded-lg',\n}: ComboBoxProps) => {\n const [query, setQuery] = useState('');\n const styles = variantConfig[variant][hierarchy];\n const currentSizeConfig = sizeConfig[size];\n const config = layoutConfig[layout];\n\n const filteredOptions = query === '' ? options : options.filter((option) =>\n option.label.toLowerCase().includes(query.toLowerCase())\n );\n\n // Determine final input classes (allow custom colors to override variant defaults)\n const inputClasses = twMerge(\n clsx(\n 'w-full flex-1 bg-transparent focus:outline-none',\n styles.input,\n placeholderColor,\n inputTextColor\n )\n );\n\n // Determine final wrapper classes (allow custom background and border radius to override variant defaults)\n const wrapperClasses = twMerge(\n clsx(\n 'relative flex items-center gap-2 border transition-colors duration-200 focus-within:ring-2',\n borderRadius,\n currentSizeConfig.wrapper,\n styles.wrapper,\n disabled && disabledStyles,\n backgroundColor\n )\n );\n\n return (\n <div className={clsx('flex flex-col gap-1.5', className)}>\n {label && <label className=\"font-medium text-sm text-gray-800\">{label}</label>}\n <HeadlessCombobox value={value} onChange={onChange} disabled={disabled}>\n <div className=\"relative\">\n <div className={wrapperClasses}>\n {config.showLeadingIcon && leadingIcon && <div>{React.cloneElement(leadingIcon as React.ReactElement<IconProps>, { size: currentSizeConfig.icon, color: 'currentColor' })}</div>}\n {config.showLeadingAvatar && leadingAvatar && <img src={leadingAvatar} alt=\"avatar\" className={clsx('rounded-full', currentSizeConfig.avatar)} />}\n\n {config.showInput && (\n <HeadlessCombobox.Input\n className={inputClasses}\n placeholder={placeholder}\n onChange={(event) => setQuery(event.target.value)}\n displayValue={(option: ComboBoxOption) => option?.label}\n />\n )}\n\n {config.showTrailingChevron && !trailingAddon && (\n <HeadlessCombobox.Button className={clsx('flex items-center', { 'w-full h-full justify-center': layout === 'only_icon' })}>\n <ArrowDown2 size={currentSizeConfig.icon} color={chevronColor} />\n </HeadlessCombobox.Button>\n )}\n\n {config.showTrailingAddon && trailingAddon && <div className=\"flex-shrink-0\">{trailingAddon}</div>}\n </div>\n\n <HeadlessCombobox.Options className=\"absolute z-10 mt-1 w-full overflow-auto rounded-md bg-white py-1 text-base shadow-lg ring-1 ring-black/5 focus:outline-none sm:text-sm\">\n {filteredOptions.length === 0 && query !== '' ? (\n <div className=\"relative cursor-default select-none px-4 py-2 text-gray-700\">\n Nothing found.\n </div>\n ) : (\n filteredOptions.map((option) => (\n <HeadlessCombobox.Option\n key={option.id}\n value={option}\n className={({ active }) =>\n twMerge(\n clsx(\n 'relative cursor-default select-none py-2 pl-4 pr-4',\n active ? `${optionActiveColor} ${optionActiveTextColor}` : optionTextColor\n )\n )\n }\n >\n {option.label}\n </HeadlessCombobox.Option>\n ))\n )}\n </HeadlessCombobox.Options>\n </div>\n </HeadlessCombobox>\n {hint && <div className={clsx('flex items-center gap-1.5 text-sm', styles.hint)}><InfoCircle size={16} color=\"currentColor\" /><span>{hint}</span></div>}\n </div>\n );\n};\n","\"use client\";\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { clsx } from 'clsx';\n\n/**\n * Represents a single menu item in the contextual menu.\n */\nexport interface MenuItem {\n /** Unique identifier for the menu item */\n id: string;\n /** Display label for the menu item */\n label: string;\n /** Optional icon component to display before the label */\n icon?: React.ReactNode;\n /** Callback fired when the menu item is clicked */\n onClick: () => void;\n /** Whether this is a destructive action (renders in red) */\n destructive?: boolean;\n /** Whether the item is disabled */\n disabled?: boolean;\n}\n\n/**\n * Defines the public API for the ContextualMenu component.\n */\nexport interface ContextualMenuProps {\n /** Array of menu items to display */\n items: MenuItem[];\n /** The trigger button element */\n trigger: React.ReactNode;\n /** Optional custom CSS classes for the container */\n className?: string;\n /** Alignment of the menu relative to the trigger */\n align?: 'left' | 'right';\n /** Offset from the trigger in pixels */\n offset?: number;\n}\n\n/**\n * @file A contextual menu component that displays a list of actions.\n * @description This component renders a dropdown menu that appears when clicking\n * a trigger element. It supports icons, destructive actions (shown in red), and\n * automatic positioning. The menu closes when clicking outside or selecting an item.\n *\n * @param {MenuItem[]} items - Array of menu items to display\n * @param {React.ReactNode} trigger - The element that triggers the menu\n * @param {string} [className] - Optional CSS classes for the container\n * @param {'left' | 'right'} [align='right'] - Menu alignment relative to trigger\n * @param {number} [offset=8] - Distance from trigger in pixels\n * @returns {JSX.Element} The rendered ContextualMenu component\n */\nexport const ContextualMenu = ({\n items,\n trigger,\n className,\n align = 'right',\n offset = 8,\n}: ContextualMenuProps) => {\n const [isOpen, setIsOpen] = useState(false);\n const menuRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n\n // Close menu when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n menuRef.current &&\n !menuRef.current.contains(event.target as Node) &&\n triggerRef.current &&\n !triggerRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }\n }, [isOpen]);\n\n const handleItemClick = (item: MenuItem) => {\n if (!item.disabled) {\n item.onClick();\n setIsOpen(false);\n }\n };\n\n return (\n <div className={clsx('relative inline-block', className)}>\n {/* Trigger */}\n <div\n ref={triggerRef}\n onClick={() => setIsOpen(!isOpen)}\n className=\"cursor-pointer\"\n >\n {trigger}\n </div>\n\n {/* Menu Dropdown */}\n {isOpen && (\n <div\n ref={menuRef}\n className={clsx(\n 'absolute z-50 mt-2 min-w-[200px] rounded-lg bg-white shadow-lg border border-gray-200',\n align === 'right' ? 'right-0' : 'left-0'\n )}\n style={{ top: `calc(100% + ${offset}px)` }}\n >\n <div className=\"py-2\">\n {items.map((item, index) => (\n <button\n key={item.id}\n onClick={() => handleItemClick(item)}\n disabled={item.disabled}\n className={clsx(\n 'w-full px-4 py-2.5 text-left text-sm flex items-center gap-3 transition-colors relative',\n 'hover:bg-gray-50',\n item.destructive\n ? 'text-[var(--danger-main)]'\n : 'text-[var(--high-em)]',\n item.disabled && 'opacity-50 cursor-not-allowed',\n index < items.length - 1 && 'border-b border-gray-100',\n // Extend background to cover container padding using pseudo-elements\n index === 0 && 'before:absolute before:inset-x-0 before:-top-2 before:h-2 before:bg-transparent hover:before:bg-gray-50',\n index === items.length - 1 && 'after:absolute after:inset-x-0 after:-bottom-2 after:h-2 after:bg-transparent hover:after:bg-gray-50'\n )}\n >\n {item.icon && (\n <span className=\"flex-shrink-0 flex items-center justify-center relative z-10\">\n {item.icon}\n </span>\n )}\n <span className=\"flex-1 font-normal relative z-10\">{item.label}</span>\n </button>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n};\n","\"use client\";\n\nimport React from 'react';\nimport { clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\nimport { Icon } from '@/shared/ui/Icon/Icon';\n\nexport type DragAndDropListItemState = 'default' | 'hover' | 'active' | 'drag' | 'disabled';\n\n/**\n * Defines the public API for the DragAndDropListItem component.\n */\nexport interface DragAndDropListItemProps {\n /** The main text label displayed in the center. */\n children: React.ReactNode;\n /** The content to display inside the tooltip. If not provided, the right icon will be displayed without a tooltip. */\n tooltipContent?: React.ReactNode;\n /** The icon to trigger the tooltip on the right. Defaults to a question mark icon. */\n icon?: React.ReactNode;\n /** Optional custom Tailwind CSS class for the right icon's color (e.g., 'text-danger-500'). */\n iconColor?: string;\n /** The icon displayed on the left (drag handle). Defaults to PlusCircleIcon. */\n leadingIcon?: React.ReactNode;\n /** Optional custom Tailwind CSS class for the left icon's color (e.g., 'text-disabled'). */\n leadingIconColor?: string;\n /** Size for both icons in pixels. Defaults to 20. */\n iconSize?: number;\n /** Optional custom classes for the main container. */\n className?: string;\n /** Optional custom classes for the label text. Will override default text styles. */\n labelClassName?: string;\n /** Font size for the label. Accepts Tailwind sizes ('xs', 'sm', etc.) or custom values ('14px', '1.5rem', etc.). Defaults to 'sm'. */\n fontSize?: 'xs' | 'sm' | 'base' | 'lg' | 'xl' | string;\n /** Font weight for the label. Defaults to 'semibold'. */\n fontWeight?: 'normal' | 'medium' | 'semibold' | 'bold';\n /** Text color for the label. Defaults to 'text-med-em'. */\n textColor?: string;\n /** Optional click handler for the entire item. */\n onClick?: () => void;\n /** The interactive state of the item. */\n state?: DragAndDropListItemState;\n}\n\n\n/**\n * @file A drag and drop list item component with leading icon, label, and tooltip.\n * @description This component displays a bordered container with an icon on the left,\n * text label in the center, and a tooltip icon on the right. Designed for use in sortable/draggable lists.\n * Built on top of Radix UI's Tooltip for robust accessibility and positioning.\n *\n * @param {React.ReactNode} children - The main text label.\n * @param {React.ReactNode} tooltipContent - The content to be shown inside the tooltip.\n * @param {React.ReactNode} [icon] - An optional custom icon component to trigger the tooltip.\n * @param {string} [iconColor='text-disabled'] - An optional Tailwind CSS class to customize the icon's color.\n * @param {string} [className] - Optional custom classes for the main container.\n * @param {string} [labelClassName] - Optional custom classes for the label text (overrides defaults).\n * @param {'xs' | 'sm' | 'base' | 'lg' | 'xl'} [fontSize='sm'] - Font size for the label.\n * @param {'normal' | 'medium' | 'semibold' | 'bold'} [fontWeight='semibold'] - Font weight for the label.\n * @param {string} [textColor=''] - Text color for the label.\n * @param {DragAndDropListItemState} [state='default'] - The interactive state of the item.\n * @returns {JSX.Element} The rendered DragAndDropListItem element.\n */\nexport const DragAndDropListItem = React.memo(({\n children,\n tooltipContent,\n icon,\n iconColor = 'text-disabled',\n leadingIcon,\n leadingIconColor = 'text-disabled',\n iconSize,\n className,\n labelClassName,\n fontSize = 'sm',\n fontWeight = 'semibold',\n textColor = '',\n onClick,\n state = 'default',\n}: DragAndDropListItemProps) => {\n\n // Font size mapping for predefined sizes\n const fontSizeMap: Record<string, string> = {\n xs: 'text-xs',\n sm: 'text-sm',\n base: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl',\n };\n\n // Icon size mapping based on font size\n const iconSizeMap: Record<string, number> = {\n xs: 12,\n sm: 16,\n base: 18,\n lg: 20,\n xl: 24,\n };\n\n // Font weight mapping\n const fontWeightMap = {\n normal: 'font-normal',\n medium: 'font-medium',\n semibold: 'font-semibold',\n bold: 'font-bold',\n };\n\n // Determine font size class or inline style\n const fontSizeClass = fontSizeMap[fontSize] || undefined;\n const customFontSize = !fontSizeMap[fontSize] ? fontSize : undefined;\n\n // Determine icon size (use iconSize prop if provided, otherwise match fontSize)\n const calculatedIconSize = iconSize ?? iconSizeMap[fontSize] ?? 20;\n\n const isClickable = !!onClick && state !== 'disabled';\n\n const containerClasses = twMerge(\n clsx(\n 'flex border border-surface-3 w-full items-center px-6 h-14 text-left text-sm font-medium transition-colors rounded-xl',\n // State-specific styles\n state === 'disabled' && 'bg-surface-3 pointer-events-none',\n state === 'hover' && 'bg-surface-1',\n state === 'active' && 'bg-surface-2',\n state === 'drag' && 'cursor-grabbing shadow-[0_8px_14px_-4px_rgba(0,0,0,0.2)] bg-surface-2',\n // Interactive styles\n isClickable && state === 'default' && 'cursor-pointer hover:bg-surface-1 active:bg-surface-2',\n state === 'disabled' && 'cursor-not-allowed',\n className\n )\n );\n\n const labelClasses = twMerge(\n clsx(\n 'flex-1 ml-6',\n fontSizeClass,\n fontWeightMap[fontWeight],\n state === 'disabled' ? 'text-disabled' : (textColor || 'text-med-em'),\n labelClassName\n )\n );\n\n return (\n <div\n className={containerClasses}\n onClick={isClickable ? onClick : undefined}\n suppressHydrationWarning\n >\n {leadingIcon && (\n <div className=\"flex items-center shrink-0\">\n <Icon size={calculatedIconSize} className={leadingIconColor}>\n {leadingIcon}\n </Icon>\n </div>\n )}\n\n <span\n className={labelClasses}\n style={customFontSize ? { fontSize: customFontSize } : undefined}\n >\n {children}\n </span>\n\n {icon && tooltipContent ? (\n <TooltipPrimitive.Root>\n <TooltipPrimitive.Trigger asChild>\n <button\n className={clsx(\n 'flex items-center focus:outline-none focus-visible:ring-2 rounded-full shrink-0',\n iconColor\n )}\n onClick={(e) => e.stopPropagation()}\n >\n <Icon size={calculatedIconSize} className={iconColor}>\n {icon}\n </Icon>\n </button>\n </TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n sideOffset={5}\n className={clsx(\n 'z-50 max-w-xs overflow-hidden rounded-xl bg-surface-bg p-3 text-xs font-medium text-med-em shadow-lg',\n 'data-[state=delayed-open]:data-[side=top]:animate-slideDownAndFade',\n 'data-[state=delayed-open]:data-[side=bottom]:animate-slideUpAndFade',\n )}\n >\n {tooltipContent}\n <TooltipPrimitive.Arrow className=\"fill-white\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n ) : icon ? (\n <div className={clsx('flex items-center shrink-0', iconColor)}>\n <Icon size={calculatedIconSize} className={iconColor}>\n {icon}\n </Icon>\n </div>\n ) : null}\n </div>\n );\n});\n\nDragAndDropListItem.displayName = 'DragAndDropListItem';\n","\"use client\";\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { clsx } from 'clsx';\nimport { ArrowDown2, ArrowUp2, InfoCircle, Category } from 'iconsax-react';\nimport { createPortal } from 'react-dom';\nimport { DropMenu, DropMenuItemProps } from '../DropMenu/DropMenu';\n\n// Type definitions for the component's props.\ntype DropdownVariant = 'default' | 'danger' | 'outlined';\ntype DropdownSize = 'sm' | 'md';\n\n/**\n * Defines the shape for a single item in the dropdown list (extends DropMenuItemProps).\n */\nexport interface DropdownItemProps extends DropMenuItemProps {\n /** Unique identifier for the item (required) */\n id: string;\n}\n\n/**\n * Defines the public API for the Dropdown component.\n */\nexport interface DropdownProps {\n /** The visual variant of the dropdown, used for different states. */\n variant?: DropdownVariant;\n /** The size of the dropdown. */\n size?: DropdownSize;\n /** The size of the dropdown menu (defaults to the dropdown size if not provided). */\n menuSize?: DropdownSize;\n /** The text label displayed above the dropdown. */\n label?: string;\n /** Helper text or an error message displayed below the dropdown. */\n hint?: string;\n /** An array of items to populate the dropdown. */\n items: DropdownItemProps[];\n /** A string for the initial, unselected option. */\n placeholder?: string;\n /** If true, the dropdown will be non-interactive. */\n disabled?: boolean;\n /** Optional custom CSS classes for additional styling. */\n className?: string;\n /** The currently selected item ID. */\n value?: string;\n /** Callback fired when an item is selected. */\n onChange: (id: string) => void;\n /** The id attribute for the dropdown button, used for associating the label. */\n id?: string;\n /** Optional custom height override. Accepts any CSS value (e.g., '12px', '48px', '3rem'). */\n customHeight?: string;\n /** Optional custom border radius override. Accepts any CSS value (e.g., '4px', '8px', '1rem'). */\n customRadius?: string;\n /** Optional custom placeholder color. Accepts Tailwind color classes (e.g., 'text-placeholder'). */\n customPlaceholderColor?: string;\n /** Optional custom background color. Accepts Tailwind color classes (e.g., 'bg-white') or CSS color values. */\n customBackgroundColor?: string;\n /** Optional leading icon to display at the start of the dropdown button. Defaults to Category icon if not provided. */\n leadingIcon?: React.ReactNode;\n /** If true, hides the leading icon completely. */\n showLeadingIcon?: boolean;\n}\n\n// Centralized style configuration for each variant.\nconst variantConfig = {\n default: {\n wrapper: 'bg-surface-2 border-transparent hover:bg-surface-3 hover:cursor-pointer',\n optionsPanel: 'border-surface-4',\n label: 'text-med-em',\n selectedValue: 'text-med-em',\n placeholder: 'text-placeholder',\n hint: 'text-med-em',\n },\n danger: {\n wrapper: 'bg-danger-accent-1 border-danger-accent-2',\n optionsPanel: 'border-danger-accent-2',\n label: 'text-high-em',\n selectedValue: 'text-danger-em',\n placeholder: 'text-danger-em',\n hint: 'text-danger-em',\n },\n outlined: {\n wrapper: 'bg-white border-surface-4',\n optionsPanel: 'border-surface-4',\n label: 'text-med-em',\n selectedValue: 'text-med-em',\n placeholder: 'text-placeholder',\n hint: 'text-med-em',\n },\n};\n\n// Centralized style configuration for the disabled state.\nconst disabledStyles = {\n wrapper: 'bg-surface-3 text-disabled pointer-events-none border-transparent',\n label: 'text-disabled',\n selectedValue: 'text-disabled',\n placeholder: 'text-disabled',\n hint: 'text-disabled',\n};\n\n// Centralized style configuration for each size.\nconst sizeConfig: Record<DropdownSize, { wrapper: string; selectText: string; icon: number }> = {\n sm: {\n wrapper: 'h-10 rounded-md',\n selectText: 'text-sm',\n icon: 14,\n },\n md: {\n wrapper: 'h-[38px] rounded-6',\n selectText: 'text-sm font-medium',\n icon: 16,\n },\n};\n\n/**\n * @file A dropdown component that renders ListItems for rich option display.\n * @description This component provides a button trigger that opens a floating menu\n * with ListItem components, allowing for complex option layouts with icons, descriptions, tags, etc.\n *\n * @param {DropdownVariant} [variant='default'] - The color theme of the dropdown.\n * @param {DropdownSize} [size='md'] - The size of the dropdown.\n * @param {DropdownItemProps[]} items - The array of items (extends ListItemProps).\n * @param {string | undefined} value - The currently selected item ID.\n * @param {(id: string) => void} onChange - Callback fired when an item is selected.\n * @returns {JSX.Element} The rendered Dropdown element.\n */\nexport const Dropdown = ({\n variant = 'default',\n size = 'md',\n menuSize,\n label,\n hint,\n items,\n disabled,\n placeholder,\n className,\n value,\n onChange,\n id,\n customHeight,\n customRadius,\n customPlaceholderColor,\n customBackgroundColor,\n leadingIcon,\n showLeadingIcon = true,\n}: DropdownProps) => {\n const styles = variantConfig[variant];\n const currentSizeConfig = sizeConfig[size];\n const effectiveMenuSize = menuSize || size;\n\n const buttonRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const [isOpen, setIsOpen] = useState(false);\n const [dropdownPosition, setDropdownPosition] = useState<{ top: number; left: number; width: number; openUpwards: boolean } | null>(null);\n const [isClient, setIsClient] = useState(false);\n\n // Find selected item\n const selectedItem = items.find(item => item.id === value);\n\n useEffect(() => {\n setIsClient(true);\n }, []);\n\n const updatePosition = React.useCallback(() => {\n if (buttonRef.current && isOpen) {\n const rect = buttonRef.current.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n\n // Calculate available space above and below the button\n const spaceBelow = viewportHeight - rect.bottom;\n const spaceAbove = rect.top;\n\n // Decide if we should open upwards\n // Open upwards if: space below is less than 200px AND space above is greater\n const shouldOpenUpwards = spaceBelow < 200 && spaceAbove > spaceBelow;\n\n setDropdownPosition({\n top: shouldOpenUpwards ? rect.top - 8 : rect.bottom + 8,\n left: rect.left,\n width: rect.width,\n openUpwards: shouldOpenUpwards,\n });\n }\n }, [isOpen]);\n\n useEffect(() => {\n if (isOpen) {\n updatePosition();\n\n window.addEventListener('scroll', updatePosition, true);\n window.addEventListener('resize', updatePosition);\n\n return () => {\n window.removeEventListener('scroll', updatePosition, true);\n window.removeEventListener('resize', updatePosition);\n };\n }\n }, [isOpen, updatePosition]);\n\n // Click outside to close\n useEffect(() => {\n if (!isOpen) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n if (\n buttonRef.current &&\n !buttonRef.current.contains(event.target as Node) &&\n menuRef.current &&\n !menuRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen]);\n\n const handleToggle = () => {\n if (!disabled) {\n setIsOpen(!isOpen);\n }\n };\n\n const handleSelect = (itemId: string) => {\n onChange(itemId);\n setIsOpen(false);\n };\n\n // Height style\n const customHeightStyle = customHeight ? { height: customHeight } : undefined;\n\n // Border radius styles - always fully rounded for floating appearance\n const getButtonRadiusStyle = () => {\n if (!customRadius) return undefined;\n return { borderRadius: customRadius };\n };\n\n const getOptionsRadiusStyle = () => {\n if (!customRadius) return undefined;\n return { borderRadius: customRadius };\n };\n\n // Placeholder color\n const placeholderColorStyle = customPlaceholderColor?.startsWith('var(')\n ? { color: customPlaceholderColor }\n : undefined;\n const placeholderColorClass = customPlaceholderColor && !customPlaceholderColor.startsWith('var(')\n ? customPlaceholderColor\n : undefined;\n\n // Background color\n const backgroundColorClass = customBackgroundColor && !customBackgroundColor.startsWith('#') && !customBackgroundColor.startsWith('rgb')\n ? customBackgroundColor\n : undefined;\n const backgroundColorStyle = customBackgroundColor && (customBackgroundColor.startsWith('#') || customBackgroundColor.startsWith('rgb'))\n ? { backgroundColor: customBackgroundColor }\n : undefined;\n\n return (\n <div className={clsx('w-full flex flex-col gap-1.5', className)}>\n {label && (\n <label\n htmlFor={id}\n className={clsx(\n 'font-medium text-sm',\n styles.label,\n disabled && disabledStyles.label\n )}\n >\n {label}\n </label>\n )}\n\n <div className=\"relative\">\n <button\n ref={buttonRef}\n id={id}\n onClick={handleToggle}\n disabled={disabled}\n className={clsx(\n 'relative w-full cursor-default border text-left transition-colors duration-200 focus:outline-none focus-visible:ring-2',\n 'flex items-center',\n !customHeight && currentSizeConfig.wrapper,\n !customBackgroundColor && styles.wrapper,\n backgroundColorClass,\n disabled && disabledStyles.wrapper,\n !customRadius && 'rounded-xl'\n )}\n style={{\n ...customHeightStyle,\n ...getButtonRadiusStyle(),\n ...backgroundColorStyle\n }}\n >\n {showLeadingIcon && (\n <span className={clsx(\n 'pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3.5',\n disabled ? 'text-disabled' : (selectedItem ? styles.selectedValue : styles.placeholder)\n )}>\n {leadingIcon ? (\n React.isValidElement(leadingIcon)\n ? React.cloneElement(leadingIcon as React.ReactElement<any>, { color: 'currentColor' })\n : leadingIcon\n ) : (\n <Category size={currentSizeConfig.icon} color=\"currentColor\" />\n )}\n </span>\n )}\n <span className={clsx('block truncate pr-8', showLeadingIcon ? 'pl-[36px]' : 'pl-3.5')}>\n {selectedItem ? (\n <span className={clsx(\n currentSizeConfig.selectText,\n disabled ? disabledStyles.selectedValue : styles.selectedValue\n )}>\n {selectedItem.title}\n </span>\n ) : (\n <span\n className={clsx(\n currentSizeConfig.selectText,\n disabled ? disabledStyles.placeholder : styles.placeholder,\n placeholderColorClass\n )}\n style={placeholderColorStyle}\n >\n {placeholder}\n </span>\n )}\n </span>\n <span className=\"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-5\">\n {isOpen ? (\n <ArrowUp2 size={currentSizeConfig.icon} color=\"currentColor\" />\n ) : (\n <ArrowDown2 size={currentSizeConfig.icon} color=\"currentColor\" />\n )}\n </span>\n </button>\n\n {isClient && isOpen && dropdownPosition && createPortal(\n <div\n ref={menuRef}\n className=\"fixed z-50\"\n style={\n dropdownPosition.openUpwards\n ? {\n bottom: `${window.innerHeight - dropdownPosition.top}px`,\n left: `${dropdownPosition.left}px`,\n width: `${dropdownPosition.width}px`,\n }\n : {\n top: `${dropdownPosition.top}px`,\n left: `${dropdownPosition.left}px`,\n width: `${dropdownPosition.width}px`,\n }\n }\n >\n <DropMenu\n items={items.map(({ id, ...itemProps }) => ({\n id,\n ...itemProps,\n }))}\n size={effectiveMenuSize}\n floating={false}\n onSelect={handleSelect}\n selectedIds={value ? [value] : []}\n className={clsx(\n 'w-full overflow-auto shadow-md border',\n !customRadius && 'rounded-xl',\n styles.optionsPanel,\n 'bg-surface-bg'\n )}\n style={{\n ...getOptionsRadiusStyle(),\n maxHeight: dropdownPosition.openUpwards\n ? `min(300px, ${dropdownPosition.top - 20}px)`\n : `min(300px, calc(100vh - ${dropdownPosition.top}px - 20px))`,\n }}\n />\n </div>,\n document.body\n )}\n </div>\n\n {hint && (\n <div\n className={clsx(\n 'flex items-center gap-1.5 text-sm',\n styles.hint,\n disabled && disabledStyles.hint\n )}\n >\n <InfoCircle size={16} color=\"currentColor\" />\n <span>{hint}</span>\n </div>\n )}\n </div>\n );\n};\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Menu, Transition } from \"@headlessui/react\"\nimport { Fragment } from \"react\"\nimport clsx from \"clsx\"\nimport { ArrowRight2, Check, TickCircle } from \"iconsax-react\"\n\n// Root component\nfunction DropdownMenu({ \n children, \n ...props \n}: React.ComponentProps<typeof Menu>) {\n return (\n <Menu as=\"div\" className=\"relative inline-block text-left\" {...props}>\n {children}\n </Menu>\n )\n}\n\n// Trigger component\nfunction DropdownMenuTrigger({\n as: AsComponent = \"button\",\n className,\n ...props\n}: React.ComponentProps<\"button\"> & { as?: React.ElementType }) {\n return (\n <Menu.Button\n as={AsComponent}\n className={clsx(\n \"inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:opacity-50 disabled:pointer-events-none ring-offset-background\",\n className\n )}\n {...props}\n />\n )\n}\n\n// Content component\nfunction DropdownMenuContent({\n className,\n sideOffset: _sideOffset = 4,\n children,\n ...props\n}: Omit<React.ComponentProps<\"div\">, \"ref\"> & { sideOffset?: number }) {\n return (\n <Transition\n as={Fragment}\n enter=\"transition ease-out duration-100\"\n enterFrom=\"transform opacity-0 scale-95\"\n enterTo=\"transform opacity-100 scale-100\"\n leave=\"transition ease-in duration-75\"\n leaveFrom=\"transform opacity-100 scale-100\"\n leaveTo=\"transform opacity-0 scale-95\"\n >\n <Menu.Items\n className={clsx(\n \"absolute z-20 w-[150px] bg-white border border-gray-100 rounded-[16px] shadow-lg overflow-hidden\",\n \"origin-top-right\",\n className\n )}\n {...props}\n >\n {children}\n </Menu.Items>\n </Transition>\n )\n}\n\n// Group component\nfunction DropdownMenuGroup({\n children,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <Menu.Section as=\"div\" className={clsx(\"p-1\")} {...props}>\n {children}\n </Menu.Section>\n )\n}\n\n// Item component - CORREGIDO\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n children,\n disabled,\n ...props\n}: React.ComponentProps<\"button\"> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <Menu.Item disabled={disabled}>\n {({ active }) => (\n <button\n className={clsx(\n 'w-full text-left pl-5 py-3 transition-colors duration-150',\n disabled\n ? 'opacity-50 cursor-not-allowed'\n : 'hover:bg-gray-50 cursor-pointer',\n inset && \"pl-8\",\n variant === \"destructive\" && \"text-destructive\",\n active && \"bg-gray-50\",\n className\n )}\n disabled={disabled}\n {...props}\n >\n <div className=\"flex items-center gap-3\">\n {children}\n </div>\n </button>\n )}\n </Menu.Item>\n )\n}\n\n// Checkbox Item component - CORREGIDO\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n disabled,\n ...props\n}: React.ComponentProps<\"button\"> & {\n checked?: boolean\n}) {\n return (\n <Menu.Item disabled={disabled}>\n {({ active }) => (\n <button\n className={clsx(\n 'w-full text-left pl-5 py-3 transition-colors duration-150',\n disabled\n ? 'opacity-50 cursor-not-allowed'\n : 'hover:bg-gray-50 cursor-pointer',\n active && \"bg-gray-50\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className\n )}\n disabled={disabled}\n {...props}\n >\n <div className=\"flex items-center gap-3\">\n <span className=\"flex-shrink-0 text-primary-900\">\n {checked && <Check className=\"size-4\" />}\n </span>\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium text-primary-900\" style={{ fontSize: '14px' }}>\n {children}\n </div>\n </div>\n </div>\n </button>\n )}\n </Menu.Item>\n )\n}\n\n// Radio Group component\nfunction DropdownMenuRadioGroup({\n children,\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div className={clsx(\"p-1\", className)} {...props}>\n {children}\n </div>\n )\n}\n\n// Radio Item component - CORREGIDO\nfunction DropdownMenuRadioItem({\n className,\n children,\n value: _value,\n checked,\n disabled,\n ...props\n}: React.ComponentProps<\"button\"> & {\n checked?: boolean\n value?: string\n}) {\n return (\n <Menu.Item disabled={disabled}>\n {({ active }) => (\n <button\n role=\"menuitemradio\"\n aria-checked={!!checked}\n className={clsx(\n 'w-full text-left pl-5 py-3 transition-colors duration-150',\n disabled\n ? 'opacity-50 cursor-not-allowed'\n : 'hover:bg-gray-50 cursor-pointer',\n active && \"bg-gray-50\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className\n )}\n disabled={disabled}\n {...props}\n >\n <div className=\"flex items-center gap-3\">\n <span className=\"flex-shrink-0 text-primary-900\">\n {checked && <TickCircle className=\"size-4 fill-current\" />}\n </span>\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium text-primary-900\" style={{ fontSize: '14px' }}>\n {children}\n </div>\n </div>\n </div>\n </button>\n )}\n </Menu.Item>\n )\n}\n\n// Label component\nfunction DropdownMenuLabel({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n inset?: boolean\n}) {\n return (\n <div\n className={clsx(\n \"px-2 py-1.5 text-sm font-semibold text-primary-900\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n}\n\n// Separator component\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <Menu.Separator\n as=\"div\"\n className={clsx(\"border-t border-gray-100 my-1\", className)}\n {...props}\n />\n )\n}\n\n// Shortcut component\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n className={clsx(\n \"text-muted-foreground ml-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n )\n}\n\n// Sub Menu components (simplified implementation)\nfunction DropdownMenuSub({\n children,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <Menu as=\"div\" className=\"relative\" {...props}>\n {children}\n </Menu>\n )\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<\"button\"> & {\n inset?: boolean\n}) {\n return (\n <Menu.Button\n className={clsx(\n 'w-full text-left pl-5 py-3 transition-colors duration-150 hover:bg-gray-50 cursor-pointer',\n inset && \"pl-8\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className\n )}\n {...props}\n >\n <div className=\"flex items-center gap-3 justify-between w-full\">\n <div className=\"flex items-center gap-3 flex-1\">\n {children}\n </div>\n <ArrowRight2 className=\"size-4 text-primary-900\" />\n </div>\n </Menu.Button>\n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <Transition\n as={Fragment}\n enter=\"transition ease-out duration-100\"\n enterFrom=\"transform opacity-0 scale-95\"\n enterTo=\"transform opacity-100 scale-100\"\n leave=\"transition ease-in duration-75\"\n leaveFrom=\"transform opacity-100 scale-100\"\n leaveTo=\"transform opacity-0 scale-95\"\n >\n <Menu.Items\n className={clsx(\n \"absolute z-20 w-[150px] bg-white border border-gray-100 rounded-[16px] shadow-lg overflow-hidden\",\n \"origin-top-left left-full top-0 ml-1\",\n className\n )}\n {...props}\n >\n {children}\n </Menu.Items>\n </Transition>\n )\n}\n\n// Helper component for items with icons\nfunction DropdownMenuItemContent({ \n icon, \n label \n}: { \n icon?: React.ReactNode\n label: string \n}) {\n return (\n <>\n {/* Icon */}\n {icon && (\n <div className=\"flex-shrink-0 text-primary-900\">\n {icon}\n </div>\n )}\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium text-primary-900\" style={{ fontSize: '14px' }}>\n {label}\n </div>\n </div>\n </>\n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n DropdownMenuItemContent,\n}","'use client';\n\nimport React, { CSSProperties } from 'react';\n\nexport interface DropZoneProps {\n /**\n * Whether the drop zone is currently being hovered over during drag\n * @default false\n */\n isOver?: boolean;\n\n /**\n * Height when the drop zone is active (being hovered)\n * @default '56px'\n */\n activeHeight?: string | number;\n\n /**\n * Height when the drop zone is inactive\n * @default '0px'\n */\n inactiveHeight?: string | number;\n\n /**\n * Duration of the expand/collapse animation in milliseconds\n * @default 150\n */\n transitionDuration?: number;\n\n /**\n * Timing function for the animation\n * @default 'ease-out'\n */\n transitionTimingFunction?: string;\n\n /**\n * Additional CSS classes\n */\n className?: string;\n\n /**\n * Additional inline styles\n */\n style?: CSSProperties;\n\n /**\n * Ref callback for drag-and-drop library integration\n * Pass this to your drag library's drop ref (e.g., dnd-kit's setNodeRef)\n */\n dropRef?: (node: HTMLDivElement | null) => void;\n\n /**\n * Optional ID for the drop zone (useful for drag library data)\n */\n id?: string;\n}\n\nexport const DropZone = React.memo<DropZoneProps>(({\n isOver = false,\n activeHeight = '56px',\n inactiveHeight = '0px',\n transitionDuration = 150,\n transitionTimingFunction = 'ease-out',\n className,\n style,\n dropRef,\n id,\n}) => {\n return (\n <div\n ref={dropRef}\n id={id}\n className={className}\n style={{\n height: isOver ? activeHeight : inactiveHeight,\n transition: `height ${transitionDuration}ms ${transitionTimingFunction}`,\n overflow: 'hidden',\n ...style,\n }}\n />\n );\n});\n\nDropZone.displayName = 'DropZone';\n\nexport default DropZone;\n","'use client';\n\nimport React, { Component, ReactNode } from 'react';\nimport { Button } from '../Button';\nexport interface ErrorBoundaryProps {\n /**\n * Name of the component being wrapped (for logging/debugging)\n */\n componentName?: string;\n\n /**\n * Fallback UI to render when an error is caught\n */\n fallback?: ReactNode;\n\n /**\n * Callback function called when an error is caught\n */\n onError?: (error: Error, errorInfo: React.ErrorInfo) => void;\n\n /**\n * Title for the default fallback UI\n * @default 'Something went wrong'\n */\n defaultTitle?: string;\n\n /**\n * Message for the default fallback UI\n * @default 'An error occurred while rendering this component.'\n */\n defaultMessage?: string;\n\n /**\n * Label for the retry button in default fallback UI\n * @default 'Try again'\n */\n retryLabel?: string;\n\n /**\n * Children to render\n */\n children: ReactNode;\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n error: Error | null;\n}\n\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = {\n hasError: false,\n error: null,\n };\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n // Update state so the next render will show the fallback UI\n return {\n hasError: true,\n error,\n };\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void {\n // Log error details\n const { componentName, onError } = this.props;\n\n console.error(\n `Error in ${componentName || 'component'}:`,\n error,\n errorInfo\n );\n\n // Call custom error handler if provided\n if (onError) {\n onError(error, errorInfo);\n }\n }\n\n resetError = (): void => {\n this.setState({\n hasError: false,\n error: null,\n });\n };\n\n render(): ReactNode {\n const { hasError, error } = this.state;\n const {\n children,\n fallback,\n defaultTitle = 'Something went wrong',\n defaultMessage = 'An error occurred while rendering this component.',\n retryLabel = 'Try again',\n } = this.props;\n\n if (hasError) {\n // Render fallback UI\n if (fallback) {\n // If fallback is a function component that accepts reset, clone it with props\n if (React.isValidElement(fallback)) {\n return React.cloneElement(fallback as React.ReactElement<any>, {\n error,\n onRetry: this.resetError,\n });\n }\n return fallback;\n }\n\n // Default fallback if none provided\n return (\n <div className=\"flex items-center justify-center h-full p-8\">\n <div className=\"text-center flex flex-col gap-6 items-center\">\n <h3 className=\"text-lg font-semibold text-danger-main\">\n {defaultTitle}\n </h3>\n <p className=\"text-sm text-med-em\">\n {defaultMessage}\n </p>\n <Button\n onClick={this.resetError}\n size='sm'\n variant='secondary'\n hierarchy='primary'\n >\n {retryLabel}\n </Button>\n </div>\n </div>\n );\n }\n\n return children;\n }\n}\n\nexport default ErrorBoundary;\n","'use client';\n\nimport React, { ReactNode } from 'react';\nimport { clsx } from 'clsx';\nimport { Button } from '../Button';\nimport { Icon } from '../Icon';\nimport { Danger } from 'iconsax-react';\nimport { TypesPanel } from '..';\nexport interface ErrorStateProps {\n /**\n * Error icon or emoji to display\n * @default '⚠️'\n */\n icon?: ReactNode;\n\n /**\n * Error title/heading\n * @default 'Something went wrong'\n */\n title?: string;\n\n /**\n * Error message/description\n */\n message?: string;\n\n /**\n * Error object for technical details (shown in dev mode only)\n */\n error?: Error;\n\n /**\n * Callback for retry action\n */\n onRetry?: () => void;\n\n /**\n * Label for the retry button\n * @default 'Retry'\n */\n retryLabel?: string;\n\n /**\n * Whether to show error details in production\n * @default false (only shows in development)\n */\n showDetailsInProduction?: boolean;\n\n /**\n * Additional CSS classes for the container\n */\n className?: string;\n\n /**\n * Whether to center the error state vertically\n * @default true\n */\n centered?: boolean;\n\n /**\n * Maximum width of the error content\n * @default 'max-w-sm'\n */\n maxWidth?: string;\n}\n\n\nexport const ErrorState = React.memo<ErrorStateProps>(({\n icon = <Icon className='text-danger-main' size={'2xl'}><Danger /></Icon>,\n title = 'Something went wrong',\n message,\n error,\n onRetry,\n retryLabel = 'Retry',\n showDetailsInProduction = false,\n className,\n centered = true,\n maxWidth = 'max-w-sm',\n}) => {\n const showDetails = showDetailsInProduction || process.env.NODE_ENV === 'development';\n\n return (\n <TypesPanel>\n <div\n className={clsx(\n 'flex flex-col p-8',\n centered && 'items-center justify-center h-full',\n className\n )}\n >\n <div className={clsx('text-center flex justify-center items-center flex-col gap-6', maxWidth)}>\n {typeof icon === 'string' ? (\n <div className=\"text-5xl\">{icon}</div>\n ) : (\n <div className=\"flex justify-center\">{icon}</div>\n )}\n\n <h3 className=\"text-lg font-semibold text-danger-main\">\n {title}\n </h3>\n\n {message && (\n <p className=\"text-sm text-med-em mb-4\">\n {message}\n </p>\n )}\n\n {/* Error details (dev only) */}\n {error && showDetails && (\n <details className=\"text-left\">\n <summary className=\"text-xs text-med-em cursor-pointer\">\n Technical details\n </summary>\n <pre className=\"text-xs text-danger-main p-2 rounded overflow-auto max-h-32\">\n {error.message}\n {error.stack && `\\n\\n${error.stack}`}\n </pre>\n </details>\n )}\n\n {onRetry && (\n <Button\n onClick={onRetry}\n variant=\"secondary\"\n hierarchy='secondary'\n size='sm'\n >\n {retryLabel}\n </Button>\n )}\n </div>\n </div>\n </TypesPanel>\n );\n});\n\nErrorState.displayName = 'ErrorState';\n\nexport default ErrorState;\n","\"use client\";\n\nimport React, { useState, useEffect, useRef } from \"react\";\nimport { Button, ButtonHierarchy, ButtonSize, ButtonVariant } from \"../Button/Button\";\nimport { clsx } from \"clsx\";\nimport { DropMenu, DropMenuSize } from \"../DropMenu/DropMenu\";\nimport { ChevronDownIcon, ChevronUpIcon } from \"@/shared/icons\";\n\n/**\n * Dropdown item for FloatingBar\n */\nexport type FloatingBarDropdownItem = {\n id: string;\n label: string;\n icon?: React.ReactNode;\n onClick: () => void;\n disabled?: boolean;\n destructive?: boolean;\n showDividerAfter?: boolean;\n};\n\n/**\n * Base action properties\n */\n\n\ntype BaseAction = {\n id: string;\n label?: string;\n leadingIcon?: React.ReactNode;\n trailingIcon?: React.ReactNode;\n isActive?: boolean;\n disabled?: boolean;\n /** Button variant - defaults to 'brand' */\n variant?: ButtonVariant;\n /** Button hierarchy - defaults to 'primary' */\n hierarchy?: ButtonHierarchy;\n /** Button size - defaults to 'sm' */\n size?: ButtonSize;\n /** Custom className for the button */\n className?: string;\n};\n\n/**\n * Button action (default type)\n */\ntype ButtonAction = BaseAction & {\n type?: \"button\";\n onClick: () => void;\n};\n\n/**\n * Dropdown action with items\n */\ntype DropdownAction = BaseAction & {\n type: \"dropdown\";\n items: FloatingBarDropdownItem[];\n /** DropMenu size - defaults to 'sm' */\n dropMenuSize?: DropMenuSize;\n /** Custom className for the DropMenu */\n dropMenuClassName?: string;\n /** Custom color for destructive items - defaults to 'text-danger-em' */\n destructiveColor?: string;\n /** Show description in dropdown items - defaults to false */\n showDescription?: boolean;\n /** Show trailing icon in dropdown items - defaults to false */\n showTrailingIcon?: boolean;\n /** Show trailing text in dropdown items - defaults to false */\n showTrailingText?: boolean;\n /** Show tag in dropdown items - defaults to false */\n showTag?: boolean;\n /** Show checkbox in dropdown items - defaults to false */\n showCheckbox?: boolean;\n};\n\nexport type Action = ButtonAction | DropdownAction;\n\n/**\n * FloatingBar component props\n */\ninterface FloatingBarProps {\n /** Array of action groups. Each group is an array of actions that will be visually connected */\n groups: Action[][];\n /** Optional custom CSS classes for the container */\n className?: string;\n /** Optional width for the bar */\n width?: string | number;\n /** Optional height for the bar */\n height?: string | number;\n}\n\n/**\n * @file A floating container component for displaying groups of primary actions.\n * @description The FloatingBar is a data-driven component that takes an array of action groups\n * and renders them as visually separated button groups. Each group can contain buttons and/or dropdowns.\n * Groups are rendered with spacing between them, while buttons within a group are visually connected.\n *\n * @param {Action[][]} groups - Array of action groups. Each group is an array of actions.\n * @param {string} [className] - Optional CSS classes to apply to the bar's container.\n * @param {string | number} [width] - An optional width for the bar.\n * @param {string | number} [height] - An optional height for the bar.\n * @returns {JSX.Element} The rendered FloatingBar element.\n */\nexport const FloatingBar = ({\n groups,\n className,\n width,\n height,\n}: FloatingBarProps) => {\n const barClasses = clsx(\n \"flex\",\n \"items-center\",\n \"justify-center\",\n \"p-1 bg-brand-primary-main-special rounded-lg border border-brand-primary-accent-special gap-2\",\n );\n\n // Track which dropdown is open\n const [openDropdownId, setOpenDropdownId] = useState<string | null>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n // Close dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setOpenDropdownId(null);\n }\n };\n\n if (openDropdownId) {\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }\n }, [openDropdownId]);\n\n const style = {\n width,\n height,\n };\n\n return (\n <div style={style} className={clsx(\"flex items-center gap-4 w-fit\", className)}>\n {groups.map((group, groupIndex) => (\n <div key={groupIndex} className={barClasses}>\n {group.map((action) => {\n return (\n <div key={action.id} className=\"relative\">\n {action.type === \"dropdown\" ? (\n /* Dropdown Action with DropMenu */\n <div ref={dropdownRef} className=\"relative gap-4\">\n <Button\n variant={action.variant || \"brand\"}\n hierarchy={action.hierarchy || \"secondary\"}\n size={action.size || \"sm\"}\n icons={\n action.leadingIcon && action.trailingIcon\n ? \"both\"\n : action.leadingIcon\n ? \"leading\"\n : action.trailingIcon\n ? \"trailing\"\n : undefined\n }\n leadingIcon={action.leadingIcon}\n trailingIcon={\n openDropdownId === action.id\n ? ( <ChevronUpIcon />)\n : ( <ChevronDownIcon /> )\n }\n onClick={() => setOpenDropdownId(openDropdownId === action.id ? null : action.id)}\n disabled={action.disabled}\n style={{ outline: \"none\", boxShadow: \"none\" }}\n className={clsx(\n action.className,\n openDropdownId === action.id && 'bg-brand-primary-accent-special'\n )}\n >\n {action.label}\n </Button>\n\n {openDropdownId === action.id && (\n <DropMenu\n floating\n size={action.dropMenuSize || \"sm\"}\n items={action.items.map(item => ({\n id: item.id,\n title: item.label,\n leadingIcon: item.icon,\n showLeadingIcon: !!item.icon,\n showDescription: action.showDescription ?? false,\n showTrailingIcon: action.showTrailingIcon ?? false,\n showTrailingText: action.showTrailingText ?? false,\n showTag: action.showTag ?? false,\n showCheckbox: action.showCheckbox ?? false,\n disabled: item.disabled,\n showDividerAfter: item.showDividerAfter,\n onClick: () => {\n item.onClick();\n setOpenDropdownId(null);\n },\n ...(item.destructive && {\n customTitleColor: action.destructiveColor || \"text-danger-em\"\n })\n }))}\n className={clsx(\"bottom-full mb-4\", action.dropMenuClassName)}\n />\n )}\n </div>\n ) : (\n /* Button Action */\n <Button\n variant={action.variant || \"brand\"}\n hierarchy={action.hierarchy || \"secondary\"}\n size={action.size || \"sm\"}\n icons={\n !action.label\n ? \"only\"\n : action.leadingIcon && action.trailingIcon\n ? \"both\"\n : action.leadingIcon\n ? \"leading\"\n : action.trailingIcon\n ? \"trailing\"\n : undefined\n }\n leadingIcon={action.leadingIcon}\n trailingIcon={action.trailingIcon}\n onClick={action.onClick}\n disabled={action.disabled}\n style={{ outline: \"none\", boxShadow: \"none\" }}\n className={clsx(\n action.className\n )}\n >\n {action.label}\n </Button>\n )}\n </div>\n );\n })}\n </div>\n ))}\n </div>\n );\n};\n","\"use client\";\n\nimport React from 'react';\nimport { clsx } from 'clsx';\nimport { Icon } from '@/shared/ui';\n\n/**\n * Props interface for the GridDraggableItem component.\n */\nexport interface GridDraggableItemProps {\n /**\n * Icon to display at the center (can be any icon from iconsax-react or custom component)\n */\n icon?: React.ReactNode;\n\n /**\n * Optional text label displayed below the icon\n */\n text?: string;\n\n /**\n * Optional callback fired when the item is clicked\n */\n onClick?: () => void;\n\n /**\n * Optional custom CSS classes\n */\n className?: string;\n}\n\n/**\n * GridDraggableItem - A compact draggable item component for grid layouts.\n *\n * Features:\n * - Fixed dimensions: 70px width × 60px height\n * - Centered icon (20px) and optional text\n * - Visual feedback with cursor-grab\n * - Designed to be used within drag-and-drop grid systems\n *\n * @example\n * ```tsx\n * // With icon and text\n * <GridDraggableItem\n * icon={<Home2 />}\n * text=\"Home\"\n * onClick={() => console.log('clicked')}\n * />\n *\n * // Icon only\n * <GridDraggableItem icon={<Setting2 />} />\n * ```\n */\nexport const GridDraggableItem: React.FC<GridDraggableItemProps> = ({\n icon,\n text,\n onClick,\n className = '',\n}) => {\n const handleClick = () => {\n if (onClick) {\n onClick();\n }\n };\n\n return (\n <div\n className={clsx(\n 'w-full h-[60px]',\n 'bg-surface-bg',\n 'border border-surface-3',\n 'rounded-lg',\n 'flex flex-col items-center justify-center',\n 'cursor-grab',\n onClick && 'hover:bg-surface-1 transition-colors',\n className\n )}\n onClick={handleClick}\n >\n {icon && (\n <div className=\"flex items-center justify-center\">\n <Icon size={20} color=\"var(--low-em)\">\n {icon}\n </Icon>\n </div>\n )}\n\n {text && (\n <span className=\"font-inter font-semibold text-[10px] text-low-em mt-1\">\n {text}\n </span>\n )}\n </div>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport { SkalarLogo, SkalarLogoNoText } from \"@/shared/icons\";\nimport clsx from \"clsx\";\nimport { getGapClass } from \"@/shared/utils\";\n\n// Types for layout control\ntype JustifyContent = \"start\" | \"center\" | \"end\" | \"between\" | \"around\" | \"evenly\";\ntype AlignItems = \"start\" | \"center\" | \"end\" | \"baseline\" | \"stretch\";\ntype HeaderSize = \"sm\" | \"md\" | \"lg\";\ntype LogoVariant = \"with-text\" | \"no-text\";\nexport type LogoVisibility = \"always\" | \"desktop\" | \"none\";\n\n// Section Props Interfaces\ninterface SectionProps extends React.HTMLAttributes<HTMLDivElement> {\n gap?: number;\n justify?: JustifyContent;\n align?: AlignItems;\n children?: React.ReactNode;\n}\n\nexport interface HeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n bordered?: boolean;\n size?: HeaderSize;\n logoVariant?: LogoVariant;\n /** Control logo visibility: \"always\" (default), \"desktop\" (hidden on mobile/tablet), \"none\" */\n showLogo?: LogoVisibility;\n children?: React.ReactNode;\n logoSectionGap?: number;\n /** Fixed width for left section in percentage. If not provided, uses flex layout */\n leftWidth?: number;\n /** Fixed width for center section in percentage. If not provided, uses flex layout */\n centerWidth?: number;\n /** Fixed width for right section in percentage. If not provided, uses flex layout */\n rightWidth?: number;\n /** Whether center section should have full height. Default: true */\n centerFullHeight?: boolean;\n}\n\n// Helper function to map justify values to Tailwind classes\nconst getJustifyClass = (justify?: JustifyContent): string => {\n const justifyMap: Record<JustifyContent, string> = {\n start: \"justify-start\",\n center: \"justify-center\",\n end: \"justify-end\",\n between: \"justify-between\",\n around: \"justify-around\",\n evenly: \"justify-evenly\",\n };\n return justify ? justifyMap[justify] : \"\";\n};\n\n// Helper function to map align values to Tailwind classes\nconst getAlignClass = (align?: AlignItems): string => {\n const alignMap: Record<AlignItems, string> = {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n baseline: \"items-baseline\",\n stretch: \"items-stretch\",\n };\n return align ? alignMap[align] : \"\";\n};\n\n\n// Size configuration for header heights\nconst sizeConfig: Record<HeaderSize, string> = {\n sm: \"h-13\", // 40px\n md: \"h-14\", // 48px\n lg: \"h-[60px]\", // 60px\n};\n\n// LeftContent Component\nconst HeaderLeftContent: React.FC<SectionProps> = ({\n gap = 4,\n justify,\n align = \"center\",\n className,\n children,\n ...rest\n}) => {\n return (\n <div\n className={clsx(\n \"flex\",\n getGapClass(gap),\n getJustifyClass(justify),\n getAlignClass(align),\n className\n )}\n {...rest}\n >\n {children}\n </div>\n );\n};\n\n// Center Component\nconst HeaderCenter: React.FC<SectionProps> = ({\n gap = 4,\n justify = \"center\",\n align = \"center\",\n className,\n children,\n ...rest\n}) => {\n return (\n <div\n className={clsx(\n \"flex h-full\",\n getGapClass(gap),\n getJustifyClass(justify),\n getAlignClass(align),\n className\n )}\n {...rest}\n >\n {children}\n </div>\n );\n};\n\n// Right Component\nconst HeaderRight: React.FC<SectionProps> = ({\n gap = 5,\n justify = \"end\",\n align = \"center\",\n className,\n children,\n ...rest\n}) => {\n return (\n <div\n className={clsx(\n \"flex\",\n getGapClass(gap),\n getJustifyClass(justify),\n getAlignClass(align),\n className\n )}\n {...rest}\n >\n {children}\n </div>\n );\n};\n\n// Logo visibility classes\nconst logoVisibilityClasses: Record<LogoVisibility, string> = {\n always: \"flex\",\n desktop: \"hidden lg:flex\",\n none: \"hidden\",\n};\n\n// Main Header Component\nexport const Header = (props: HeaderProps) => {\n const {\n className,\n bordered = true,\n size = \"lg\",\n logoVariant = \"with-text\",\n showLogo = \"always\",\n children,\n logoSectionGap = 6,\n leftWidth,\n centerWidth,\n rightWidth,\n centerFullHeight = true,\n ...rest\n } = props;\n\n // Extract sections from children\n const leftContent = React.Children.toArray(children).find(\n (child) => React.isValidElement(child) && child.type === HeaderLeftContent\n );\n\n const centerContent = React.Children.toArray(children).find(\n (child) => React.isValidElement(child) && child.type === HeaderCenter\n );\n\n const rightContent = React.Children.toArray(children).find(\n (child) => React.isValidElement(child) && child.type === HeaderRight\n );\n\n return (\n <header\n className={clsx(\n \"relative w-full bg-white\",\n bordered && \"border-b border-surface-4\",\n className\n )}\n {...rest}\n >\n <div className={clsx(\n \"flex items-center\",\n leftWidth !== undefined || centerWidth !== undefined || rightWidth !== undefined ? \"lg:px-0\" : \"justify-between lg:px-container-desktop\",\n \"px-container-mobile md:px-container-tablet\",\n sizeConfig[size]\n )}>\n {/* Left Section with Logo */}\n <div\n className={clsx(\n \"flex items-center\",\n leftWidth !== undefined ? \"pl-8\" : \"shrink-0\",\n getGapClass(logoSectionGap)\n )}\n style={leftWidth !== undefined ? { width: `${leftWidth}%` } : undefined}\n >\n {showLogo !== \"none\" && (\n <div className={clsx(\"items-center\", logoVisibilityClasses[showLogo])}>\n {logoVariant === \"with-text\" ? (\n <SkalarLogo height={25} className=\"text-black\" />\n ) : (\n <SkalarLogoNoText height={25} className=\"text-black\" />\n )}\n </div>\n )}\n {leftContent}\n </div>\n\n {/* Center Section */}\n {centerContent && (\n <div\n className={clsx(\n \"hidden lg:flex justify-center\",\n centerFullHeight && \"h-full\",\n centerWidth !== undefined ? \"\" : \"flex-1\"\n )}\n style={centerWidth !== undefined ? { width: `${centerWidth}%` } : undefined}\n >\n {centerContent}\n </div>\n )}\n\n {/* Right Section */}\n <div\n className={clsx(\n \"flex items-center\",\n rightWidth !== undefined ? \"justify-end pr-8\" : \"shrink-0 ml-auto\"\n )}\n style={rightWidth !== undefined ? { width: `${rightWidth}%` } : undefined}\n >\n {rightContent}\n </div>\n </div>\n </header>\n );\n};\n\n// Attach subcomponents to Header\nHeader.LeftContent = HeaderLeftContent;\nHeader.Center = HeaderCenter;\nHeader.Right = HeaderRight;\n","/**\n * Calculate header section widths from panel state with fallback for closed sides\n *\n * @param panels - Panel state object with left and right arrays containing open panels with width percentages\n * @param widthSideFallback - Fallback width percentage when a side has no open panels (default: 20)\n * @returns Object with leftWidth, centerWidth, and rightWidth percentages (or all undefined if no panels are open)\n *\n * @example\n * // Both panels closed\n * calculateHeaderWidths(panels) // { leftWidth: undefined, centerWidth: undefined, rightWidth: undefined }\n *\n * // Left closed, right open at 33%\n * calculateHeaderWidths(panels, 20) // { leftWidth: 20, centerWidth: 47, rightWidth: 33 }\n *\n * // Both open at 25% and 33%\n * calculateHeaderWidths(panels) // { leftWidth: 25, centerWidth: 42, rightWidth: 33 }\n */\nexport function calculateHeaderWidths(\n panels: {\n left: Array<{ open: boolean; width: number }>;\n right: Array<{ open: boolean; width: number }>;\n },\n widthSideFallback: number = 20\n): { leftWidth?: number; centerWidth?: number; rightWidth?: number } {\n const centerWidthFallback = 100 - (2 * widthSideFallback);\n // Calculate actual panel widths (sum of open panels)\n const leftPanelWidth = panels.left\n .filter(p => p.open)\n .reduce((sum, p) => sum + p.width, 0);\n\n const rightPanelWidth = panels.right\n .filter(p => p.open)\n .reduce((sum, p) => sum + p.width, 0);\n\n // If no panels are open at all, use flex layout (no fixed widths)\n if (leftPanelWidth === 0 && rightPanelWidth === 0) {\n return {\n leftWidth: widthSideFallback,\n centerWidth: centerWidthFallback,\n rightWidth: widthSideFallback,\n };\n }\n\n // Apply fallbacks for closed sides\n const leftWidth = leftPanelWidth > 0 ? leftPanelWidth : widthSideFallback;\n const rightWidth = rightPanelWidth > 0 ? rightPanelWidth : widthSideFallback;\n const centerWidth = 100 - leftWidth - rightWidth;\n\n return {\n leftWidth,\n centerWidth,\n rightWidth,\n };\n}\n","\"use client\";\n\nimport React, { useRef, useState } from 'react';\nimport { clsx } from 'clsx';\nimport { UploadImageIcon } from '@/shared/icons';\nimport { Button } from '../Button';\n\nexport type ImageUploaderVariant = 'default';\nexport type ImageUploaderSize = 'sm' | 'md' | 'lg';\n\n/**\n * Defines the public API for the ImageUploader component.\n */\nexport interface ImageUploaderProps {\n /** Callback fired when an image is selected. */\n onImageSelected: (file: File) => void;\n /** The visual variant of the image uploader. */\n variant?: ImageUploaderVariant;\n /** The size of the image uploader. */\n size?: ImageUploaderSize;\n /** Optional custom CSS classes for additional styling. */\n className?: string;\n /** The accepted file types for the input. */\n acceptedFileTypes?: string;\n /** Maximum file size in bytes. */\n maxFileSize?: number;\n /** Helper text or an error message displayed below the uploader. */\n hint?: string;\n /** If true, the uploader will be non-interactive. */\n disabled?: boolean;\n /** Preview image URL to display initially. */\n initialPreviewUrl?: string;\n}\n\n// Centralized style configuration for each variant.\nconst variantConfig = {\n default: {\n container: 'flex flex-col items-center justify-center',\n dropZone: 'flex flex-col items-center justify-center space-y-2 transition-colors border-surface-3 border-[1px]',\n preview: 'bg-surface-3 border-surface-4',\n },\n};\n\n// Centralized style configuration for each size \nconst sizeConfig: Record<ImageUploaderSize, {\n container: string;\n dropZone: string;\n preview: string;\n iconSize: number;\n}> = {\n sm: {\n container: 'w-48 h-18 p-2 gap-2 rounded-lg',\n dropZone: 'w-full h-18 rounded-md p-2',\n preview: 'w-full h-18 rounded-md',\n iconSize: 24,\n },\n md: {\n container: 'w-72 h-44 p-4 gap-3 rounded-xl',\n dropZone: 'w-64 h-40 rounded-xl p-4',\n preview: 'w-64 h-40 rounded-xl',\n iconSize: 42,\n },\n lg: {\n container: 'w-96 h-52 p-4 gap-5 rounded-xl',\n dropZone: 'w-full h-48 rounded-xl p-4',\n preview: 'w-full h-48 rounded-xl',\n iconSize: 48,\n },\n};\n\n// Centralized style configuration for the disabled state.\nconst disabledStyles = {\n container: 'opacity-50 cursor-not-allowed pointer-events-none',\n dropZone: 'cursor-not-allowed',\n};\n\n/**\n * @file A reusable image uploader component with drag-and-drop functionality and preview.\n * @description This component provides an intuitive interface for uploading images with\n * both drag-and-drop and file browser capabilities. It includes image preview and follows\n * the same design patterns as other components in the codebase.\n *\n * @param {ImageUploaderVariant} [variant='default'] - The layout variant of the uploader.\n * @param {ImageUploaderSize} [size='md'] - The size of the uploader.\n * @param {(file: File) => void} onImageSelected - Callback fired when an image is selected.\n * @returns {JSX.Element} The rendered ImageUploader element.\n */\nexport const ImageUploader: React.FC<ImageUploaderProps> = ({\n onImageSelected,\n variant = 'default',\n size = 'md',\n className,\n acceptedFileTypes = 'image/*',\n maxFileSize,\n disabled = false,\n initialPreviewUrl,\n}) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const dragCounter = useRef(0);\n const [isDragActive, setIsDragActive] = useState(false);\n const [previewUrl, setPreviewUrl] = useState<string | null>(initialPreviewUrl || null);\n const [isHovered, setIsHovered] = useState(false);\n const [_error, setError] = useState<string | null>(null);\n\n const styles = variantConfig[variant];\n const currentSizeConfig = sizeConfig[size];\n \n const handleFileSelection = (file: File) => {\n // Validate file size if specified\n if (maxFileSize && file.size > maxFileSize) {\n const fileSizeInMB = (maxFileSize / (1024 * 1024)).toFixed(1);\n setError(`File size must be less than ${fileSizeInMB}MB`);\n return;\n }\n\n // Validate file type\n if (!file.type.startsWith('image/')) {\n setError('Please select a valid image file');\n return;\n }\n\n setError(null);\n onImageSelected(file);\n setPreviewUrl(URL.createObjectURL(file));\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.files && e.target.files[0]) {\n handleFileSelection(e.target.files[0]);\n }\n };\n\n const handleDrop = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n setIsDragActive(false);\n\n if (e.dataTransfer.files && e.dataTransfer.files[0]) {\n handleFileSelection(e.dataTransfer.files[0]);\n }\n };\n\n const handleDragOver = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n if (!disabled) {\n setIsDragActive(true);\n }\n };\n\n const handleDragEnter = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n if (disabled) return;\n dragCounter.current += 1;\n setIsDragActive(true);\n };\n\n const handleDragLeave = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n dragCounter.current -= 1;\n if (dragCounter.current <= 0) {\n setIsDragActive(false);\n dragCounter.current = 0;\n }\n };\n\n const handleBrowseClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n inputRef.current?.click();\n };\n\n const handleMouseEnter = () => {\n if (!disabled) {\n setIsHovered(true);\n }\n };\n\n const handleMouseLeave = () => {\n setIsHovered(false);\n };\n\n return (\n <div className={clsx('flex flex-col', className)}>\n <div\n className={clsx(\n styles.container,\n currentSizeConfig.container,\n disabled && disabledStyles.container,\n )}\n >\n <div\n className={clsx(\n styles.dropZone,\n currentSizeConfig.dropZone,\n 'cursor-pointer relative',\n disabled && disabledStyles.dropZone,\n isDragActive && !previewUrl && 'bg-black/20'\n )}\n onDrop={disabled ? undefined : handleDrop}\n onDragOver={disabled ? undefined : handleDragOver}\n onDragEnter={disabled ? undefined : handleDragEnter}\n onDragLeave={disabled ? undefined : handleDragLeave}\n onClick={disabled ? undefined : handleBrowseClick}\n >\n {previewUrl ? (\n <div\n className={clsx(\n 'absolute inset-0 overflow-hidden transition-all duration-200',\n currentSizeConfig.preview\n )}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {/* Preview Image */}\n <img\n src={previewUrl}\n alt=\"Preview\"\n className={clsx(\n 'w-full h-full object-cover transition-all duration-200',\n isHovered && 'brightness-90'\n )}\n />\n \n {isHovered && (\n <div className=\"absolute inset-0 flex items-center justify-center transition-all duration-200\">\n <Button\n onClick={handleBrowseClick}\n variant=\"neutral\"\n size=\"xs\"\n disabled={disabled}\n >\n Change Image\n </Button>\n </div>\n )}\n </div>\n ) : (\n <>\n <div\n className={clsx(\n 'flex items-center justify-center rounded-lg overflow-hidden',\n previewUrl && 'border border-surface-4 bg-surface-2',\n `w-[${currentSizeConfig.iconSize * 2}px] h-[${currentSizeConfig.iconSize * 2}px]`\n )}\n >\n <UploadImageIcon\n size={currentSizeConfig.iconSize}\n className={clsx(\n disabled && 'text-disabled'\n )}\n />\n </div>\n \n <div\n className={clsx(\n 'text-center text-[11px] font-body font-medium leading-tight tracking-normal whitespace-normal break-words',\n disabled && 'text-disabled'\n )}\n >\n Drag your image to start uploading\n </div>\n \n <div className=\"my-2 w-full flex items-center justify-center\">\n <span className=\"border-t w-1/2 mx-2 border-low-em\"></span>\n <span className={clsx(\n \"text-xs ml-2 mr-2\",\n isDragActive ? 'text-med-em' : 'text-high-em',\n disabled && 'text-disabled'\n )}>\n OR\n </span>\n <span className=\"border-t w-1/2 mx-2 border-low-em\"></span>\n </div>\n </>\n )}\n\n {/* Browse Button */}\n {!previewUrl && (\n <Button\n onClick={handleBrowseClick}\n variant=\"neutral\"\n size=\"xs\"\n className=\"mt-1\"\n disabled={disabled}\n >\n Browse\n </Button>\n )}\n\n <input\n type=\"file\"\n accept={acceptedFileTypes}\n ref={inputRef}\n className=\"hidden\"\n onChange={handleChange}\n disabled={disabled}\n />\n </div>\n </div>\n </div>\n );\n};","\"use client\";\n\nimport React from 'react';\nimport { clsx } from 'clsx';\nimport { Warning2 } from 'iconsax-react';\n\ntype InfoLabelVariant = 'default' | 'danger' | 'success';\n\nexport interface InfoLabelProps {\n /** The variant of the info label */\n variant?: InfoLabelVariant;\n /** The title text */\n title: string;\n /** The description text */\n description: string;\n /** Custom icon component (defaults to InfoCircle) */\n icon?: React.ReactNode;\n /** Additional CSS classes */\n className?: string;\n}\n\n// Centralized style configuration for each variant\nconst variantConfig = {\n default: {\n background: 'bg-gray-200',\n iconColor: 'text-[var(--dark-700)]',\n titleColor: 'text-[var(--dark-700)]',\n descriptionColor: 'text-[var(--dark-700)]',\n },\n danger: {\n background: 'bg-[var(--danger-50)]',\n iconColor: 'text-[var(--danger-600)]',\n titleColor: 'text-[var(--danger-600)]',\n descriptionColor: 'text-[var(--danger-600)]',\n },\n success: {\n background: 'bg-[var(--success-50)]',\n iconColor: 'text-[var(--success-600)]',\n titleColor: 'text-[var(--success-600)]',\n descriptionColor: 'text-[var(--success-600)]',\n },\n};\n\n/**\n * @file An informational label component with customizable variants.\n * @description This component displays an icon, title, and description in a styled container.\n * It supports different visual states through the variant prop.\n *\n * @param {InfoLabelVariant} [variant='default'] - The visual variant of the info label.\n * @param {string} title - The title text to display.\n * @param {string} description - The description text to display.\n * @param {React.ReactNode} [icon] - Custom icon component (defaults to InfoCircle from iconsax).\n * @param {string} [className] - Additional CSS classes for custom styling.\n * @returns {JSX.Element} The rendered InfoLabel element.\n */\nexport const InfoLabel = ({\n variant = 'default',\n title,\n description,\n icon,\n className,\n}: InfoLabelProps) => {\n const styles = variantConfig[variant];\n\n // Get the color value from CSS variable\n const getColorValue = (colorClass: string) => {\n const match = colorClass.match(/text-\\[var\\(--([^)]+)\\)\\]/);\n if (match) {\n const varName = match[1];\n return `var(--${varName})`;\n }\n return undefined;\n };\n\n const iconColor = getColorValue(styles.iconColor);\n\n // Clone the icon element to add the color prop if it's provided\n const renderIcon = () => {\n if (icon && React.isValidElement(icon)) {\n return React.cloneElement(icon as React.ReactElement<{ color?: string }>, {\n color: iconColor,\n });\n }\n return <Warning2 size={12} variant=\"Outline\" color={iconColor} />;\n };\n\n return (\n <div\n className={clsx(\n 'flex flex-col gap-0.5 px-8 py-4 rounded-xl',\n styles.background,\n className\n )}\n >\n {/* Title with Icon */}\n <div className=\"flex items-center gap-2\">\n <div className=\"flex-shrink-0\">\n {renderIcon()}\n </div>\n <span\n className={clsx(\n 'text-[12px] font-semibold leading-tight',\n styles.titleColor\n )}\n >\n {title}\n </span>\n </div>\n\n {/* Description - aligned with icon start */}\n <span\n className={clsx(\n 'text-[10px] font-medium leading-tight mt-2',\n styles.descriptionColor\n )}\n >\n {description}\n </span>\n </div>\n );\n};\n","import { useState, useEffect } from 'react';\n\n/**\n * Hook para debounce de valores\n * @param value Valor a hacer debounce\n * @param delay Tiempo de espera en milisegundos\n * @returns Valor con debounce aplicado\n */\nexport function useDebounce<T>(value: T, delay: number): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}","\"use client\";\n\nimport React, { useState, useRef, useEffect, forwardRef } from \"react\";\nimport { SearchNormal1, CloseCircle, ArrowRotateRight } from \"iconsax-react\";\nimport { clsx } from \"clsx\";\nimport { InputField } from \"@/shared/ui\";\nimport { useDebounce } from \"@/hooks\";\n\n/**\n * Props for the InputSearch component\n */\nexport interface InputSearchProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"onChange\"> {\n /** Callback triggered when a search is initiated (Enter key or search icon click) */\n onSearch?: (value: string) => void;\n /** Milliseconds for search debouncing (default: 300ms) */\n debounceMs?: number;\n /** Indicates if the input is in a loading state */\n isLoading?: boolean;\n /** If true, shows a button to clear the input */\n showClearButton?: boolean;\n /** Error message to show conditionally */\n errorMessage?: string;\n /** Array of search suggestions for autocomplete */\n suggestions?: string[];\n /** Callback triggered when a suggestion is clicked */\n onSuggestionClick?: (suggestion: string) => void;\n /** Placeholder for the search input (default: \"Search...\") */\n placeholder?: string;\n /** Value of the input */\n value?: string;\n /** Handler for changes */\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n /** Default value: false */\n disabled?: boolean;\n /** Standard input attributes */\n id?: string;\n name?: string;\n autoComplete?: string;\n maxLength?: number;\n required?: boolean;\n /** Validation events */\n onBlur?: (e: React.FocusEvent<HTMLInputElement>) => void;\n onFocus?: (e: React.FocusEvent<HTMLInputElement>) => void;\n onInvalid?: (e: React.FormEvent<HTMLInputElement>) => void;\n /** Default value: \"Search\" */\n \"aria-label\"?: string;\n}\n\n/**\n * InputSearch component with search, debounce, and autocomplete functionality\n */\nexport const InputSearch = forwardRef<HTMLInputElement, InputSearchProps>(\n (\n {\n onSearch,\n debounceMs = 300,\n isLoading = false,\n showClearButton = true,\n errorMessage,\n suggestions = [],\n onSuggestionClick,\n placeholder = \"Search...\",\n value: controlledValue,\n onChange,\n disabled = false,\n id,\n name,\n autoComplete,\n maxLength,\n required,\n onBlur,\n onFocus,\n onInvalid,\n \"aria-label\": ariaLabel = \"Search\",\n className,\n size: _unusedSize,\n ...restProps\n },\n ref\n ) => {\n // State for the input value\n const [internalValue, setInternalValue] = useState<string>(\"\");\n // State to control if suggestions are visible\n const [showSuggestions, setShowSuggestions] = useState<boolean>(false);\n // State for the index of the keyboard-selected suggestion\n const [selectedSuggestionIndex, setSelectedSuggestionIndex] =\n useState<number>(-1);\n // Reference to the suggestions container for handling clicks outside\n const suggestionsRef = useRef<HTMLDivElement>(null);\n\n // Determine if the component is controlled or uncontrolled\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : internalValue;\n\n // Apply debounce to the search value\n const debouncedValue = useDebounce(value, debounceMs);\n\n // Effect to handle debounced search\n useEffect(() => {\n if (debouncedValue && onSearch) {\n onSearch(debouncedValue);\n }\n }, [debouncedValue, onSearch]);\n\n // Effect to handle clicks outside the component\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n suggestionsRef.current &&\n !suggestionsRef.current.contains(event.target as Node)\n ) {\n setShowSuggestions(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, []);\n\n // Handler for input changes\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n\n if (!isControlled) {\n setInternalValue(newValue);\n }\n\n if (onChange) {\n onChange(e);\n }\n\n // Show suggestions if there's a value and suggestions are available\n if (newValue && suggestions.length > 0) {\n setShowSuggestions(true);\n setSelectedSuggestionIndex(-1);\n } else {\n setShowSuggestions(false);\n }\n };\n\n // Handler for the Enter key\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n if (\n showSuggestions &&\n selectedSuggestionIndex >= 0 &&\n selectedSuggestionIndex < suggestions.length\n ) {\n // Select the highlighted suggestion\n const selectedSuggestion = suggestions[selectedSuggestionIndex];\n handleSuggestionClick(selectedSuggestion);\n } else if (onSearch && value) {\n // Execute search with the current value\n onSearch(value);\n }\n setShowSuggestions(false);\n } else if (e.key === \"ArrowDown\") {\n // Navigate down in the suggestions\n e.preventDefault();\n if (showSuggestions && suggestions.length > 0) {\n setSelectedSuggestionIndex((prev) =>\n prev < suggestions.length - 1 ? prev + 1 : 0\n );\n }\n } else if (e.key === \"ArrowUp\") {\n // Navigate up in the suggestions\n e.preventDefault();\n if (showSuggestions && suggestions.length > 0) {\n setSelectedSuggestionIndex((prev) =>\n prev > 0 ? prev - 1 : suggestions.length - 1\n );\n }\n } else if (e.key === \"Escape\") {\n // Close the suggestions\n setShowSuggestions(false);\n setSelectedSuggestionIndex(-1);\n }\n };\n\n // Handler for input focus\n const handleInputFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n if (value && suggestions.length > 0) {\n setShowSuggestions(true);\n }\n\n if (onFocus) {\n onFocus(e);\n }\n };\n\n // Handler to clear the input\n const handleClear = () => {\n const event = {\n target: { value: \"\" },\n } as React.ChangeEvent<HTMLInputElement>;\n\n if (!isControlled) {\n setInternalValue(\"\");\n }\n\n if (onChange) {\n onChange(event);\n }\n\n setShowSuggestions(false);\n setSelectedSuggestionIndex(-1);\n };\n\n // Handler for clicking on a suggestion\n const handleSuggestionClick = (suggestion: string) => {\n const event = {\n target: { value: suggestion },\n } as React.ChangeEvent<HTMLInputElement>;\n\n if (!isControlled) {\n setInternalValue(suggestion);\n }\n\n if (onChange) {\n onChange(event);\n }\n\n if (onSuggestionClick) {\n onSuggestionClick(suggestion);\n }\n\n setShowSuggestions(false);\n setSelectedSuggestionIndex(-1);\n };\n\n // Determine the InputField variant based on the error state\n const variant = errorMessage ? \"danger\" : \"default\";\n\n // Icon for the right side of the input (search, clear, or loading)\n const trailingIcon = isLoading ? (\n <ArrowRotateRight\n color=\"currentColor\"\n size={16}\n className=\"animate-spin text-primary-500\"\n />\n ) : (\n value &&\n showClearButton && (\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"text-gray-500 hover:text-gray-700 focus:outline-none transition-colors\"\n aria-label=\"Clear search\"\n >\n <CloseCircle color=\"currentColor\" size={16} />\n </button>\n )\n );\n\n // Filter suggestions based on the current value\n const filteredSuggestions = suggestions.filter((suggestion) =>\n suggestion.toLowerCase().includes(value.toLowerCase())\n );\n\n return (\n <div className=\"relative w-full\" ref={suggestionsRef}>\n <InputField\n ref={ref}\n className={clsx(\"w-full text-placeholder\", className)}\n value={value}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onFocus={handleInputFocus}\n onBlur={onBlur}\n onInvalid={onInvalid}\n variant={variant}\n hint={errorMessage}\n leadingIcon={<SearchNormal1 color=\"currentColor\" size={16} />}\n trailingIcon={trailingIcon}\n placeholder={placeholder}\n disabled={disabled}\n id={id}\n name={name}\n autoComplete={autoComplete}\n maxLength={maxLength}\n required={required}\n aria-label={ariaLabel}\n {...restProps}\n />\n\n {/* Suggestions list */}\n {showSuggestions && filteredSuggestions.length > 0 && (\n <div\n className=\"absolute z-10 w-full mt-1 bg-white border border-gray-200 rounded-md shadow-lg max-h-60 overflow-auto\"\n role=\"listbox\"\n >\n {filteredSuggestions.map((suggestion, index) => (\n <div\n key={index}\n className={clsx(\n \"px-3 py-2 cursor-pointer text-sm\",\n index === selectedSuggestionIndex\n ? \"bg-primary-100 text-primary-900\"\n : \"text-gray-700 hover:bg-gray-100\"\n )}\n onClick={() => handleSuggestionClick(suggestion)}\n role=\"option\"\n aria-selected={index === selectedSuggestionIndex}\n >\n {suggestion}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n }\n);\n\nInputSearch.displayName = \"InputSearch\";\n","\"use client\";\n\nimport React from 'react';\nimport { clsx } from 'clsx';\n\n// Defines the props for icon components passed into this component\ninterface IconProps {\n size?: number | string;\n color?: string;\n [key: string]: unknown;\n}\n\n// Defines the public API for the LabelWithIcon component\nexport interface LabelWithIconProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** The icon component to display on the left. */\n icon: React.ReactNode;\n /** The text label to display on the right. */\n children: React.ReactNode;\n /** If true, applies styles for an active/selected state. */\n isActive?: boolean;\n /** Optional custom font size override. Accepts Tailwind size classes (e.g., 'xs', 'sm', 'md', 'lg') or pixel values (e.g., '12px', '16px'). */\n customFontSize?: string;\n /** Optional custom icon size override. Accepts numeric values (e.g., 16, 20, 24). */\n customIconSize?: number;\n}\n\n/**\n * @file An interactive component that pairs an icon with a text label.\n * @description This component renders a clickable button, typically used as a list item\n * in navigation menus or sidebars. It supports an active state to indicate the\n * current selection and allows for customizable spacing between the icon and text.\n *\n * @param {React.ReactNode} icon - The icon component to display.\n * @param {React.ReactNode} children - The text label for the item.\n * @param {boolean} [isActive=false] - If true, applies the active/selected styles.\n * @param {string} [customFontSize] - Optional custom font size override. Accepts Tailwind size classes (e.g., 'xs', 'sm', 'md', 'lg') or pixel values (e.g., '12px', '16px').\n * @param {number} [customIconSize] - Optional custom icon size override. Accepts numeric values (e.g., 16, 20, 24).\n * @returns {JSX.Element} The rendered LabelWithIcon element.\n */\nexport const LabelWithIcon = ({\n icon,\n children,\n isActive = false,\n className,\n customFontSize,\n customIconSize,\n ...props\n}: LabelWithIconProps) => {\n // Font size mapping for Tailwind classes\n const fontSizeMap: Record<string, string> = {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl',\n };\n\n // Determine font size class or inline style\n const fontSizeClass = customFontSize\n ? (fontSizeMap[customFontSize] || undefined)\n : undefined;\n\n const customFontSizeStyle = customFontSize && !fontSizeMap[customFontSize]\n ? { fontSize: customFontSize }\n : undefined;\n\n // Determine icon size (default 20, or custom)\n const iconSize = customIconSize || 20;\n\n return (\n <button\n className={clsx(\n 'border border-surface-3 flex w-full items-center px-6 h-14 text-left text-sm font-semibold transition-colors rounded-xl',\n 'focus:outline-none',\n {\n // Styles for the active/selected state\n 'gap-6 bg-surface-1 text-med-em': isActive,\n // Styles for the inactive state\n 'gap-6 hover:bg-surface-3': !isActive,\n },\n className\n )}\n {...props}\n >\n {/* Clones the icon to ensure it has the correct size and color */}\n <span style={{ color: 'var(--med-em)' }}>\n {React.isValidElement(icon) && React.cloneElement(icon as React.ReactElement<IconProps>, {\n size: iconSize,\n color: 'currentColor',\n })}\n </span>\n <span\n className={clsx('text-med-em', fontSizeClass)}\n style={customFontSizeStyle}\n >\n {children}\n </span>\n </button>\n );\n};\n\n","\"use client\";\n\nimport React from 'react';\nimport { clsx } from 'clsx';\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\nimport { Button } from '../Button/Button';\nimport type { ButtonVariant, ButtonHierarchy, ButtonSize } from '../Button/Button';\n\n/**\n * Tooltip positioning\n */\nexport type TooltipSide = 'top' | 'bottom' | 'left' | 'right';\n\n/**\n * Configuration for a button in the tooltip\n */\nexport interface TooltipButtonConfig {\n /** The text to display on the button */\n text: string;\n /** Click handler for the button */\n onClick: () => void;\n /** Button variant. Defaults to 'neutral'. */\n variant?: ButtonVariant;\n /** Button hierarchy. Defaults to 'secondary'. */\n hierarchy?: ButtonHierarchy;\n /** Button size. Defaults to 'xs'. */\n size?: ButtonSize;\n /** Whether the button is disabled. Defaults to false. */\n disabled?: boolean;\n}\n\n/**\n * Defines the public API for the Tooltip component.\n */\nexport interface TooltipProps {\n /** The element that triggers the tooltip on hover. */\n children: React.ReactElement;\n /** The content to display inside the tooltip. */\n content: React.ReactNode;\n /** The preferred side of the trigger to render against. Defaults to 'top'. */\n side?: TooltipSide;\n /** The distance in pixels from the trigger. Defaults to 5. */\n sideOffset?: number;\n /** Whether to show the tooltip arrow. Defaults to true. */\n showArrow?: boolean;\n /** Optional custom classes for the tooltip content. */\n className?: string;\n /** Optional custom max width. Defaults to 'max-w-xs'. */\n maxWidth?: string;\n /** Optional delay duration in milliseconds before showing tooltip. */\n delayDuration?: number;\n /** Whether the tooltip is disabled. Defaults to false. */\n disabled?: boolean;\n /** Optional primary button configuration */\n primaryButton?: TooltipButtonConfig;\n /** Optional secondary button configuration */\n secondaryButton?: TooltipButtonConfig;\n /** Optional custom background color. Overrides default white background. */\n customBackground?: string;\n /** Optional custom text color. Overrides default text-high-em. */\n customTextColor?: string;\n /** Optional custom font size. Overrides default text-xs. */\n customFontSize?: string;\n}\n\n/**\n * @file A reusable tooltip component for providing contextual information.\n * @description This component wraps any trigger element and displays a tooltip with additional\n * information on hover. Built on top of Radix UI's Tooltip primitive for robust accessibility\n * and positioning.\n *\n * Designed to be used with any element that needs contextual help or additional information.\n *\n * **Important:** This component requires a `TooltipProvider` to be present in the component tree.\n * Add `<TooltipProvider>` at your app root or page level:\n *\n * ```tsx\n * import { TooltipProvider } from '@radix-ui/react-tooltip';\n *\n * function App() {\n * return (\n * <TooltipProvider delayDuration={200}>\n * <YourComponents />\n * </TooltipProvider>\n * );\n * }\n * ```\n *\n * @param {React.ReactElement} children - The element that triggers the tooltip.\n * @param {React.ReactNode} content - The content to be shown inside the tooltip.\n * @param {TooltipVariant} [variant='neutral'] - The visual variant (neutral, success, danger, warning, info).\n * @param {TooltipSide} [side='top'] - The preferred side to render the tooltip.\n * @param {number} [sideOffset=5] - The distance in pixels from the trigger.\n * @param {boolean} [showArrow=true] - Whether to display the tooltip arrow.\n * @param {string} [className] - Optional custom classes for the tooltip content.\n * @param {string} [maxWidth='max-w-xs'] - Optional custom max width class.\n * @param {number} [delayDuration] - Optional delay before showing tooltip (inherited from provider if not set).\n * @param {boolean} [disabled=false] - Whether the tooltip is disabled.\n * @returns {JSX.Element} The rendered Tooltip element.\n *\n * @example\n * ```tsx\n * <Tooltip content=\"This is helpful information\">\n * <Button>Hover me</Button>\n * </Tooltip>\n *\n * <Tooltip content=\"Additional info\" side=\"right\">\n * <Icon name=\"info\" />\n * </Tooltip>\n * ```\n */\nexport const Tooltip = ({\n children,\n content,\n side = 'top',\n sideOffset = 5,\n showArrow = true,\n className,\n maxWidth = 'max-w-xs',\n delayDuration,\n disabled = false,\n primaryButton,\n secondaryButton,\n customBackground,\n customTextColor,\n customFontSize,\n}: TooltipProps) => {\n if (disabled) {\n return children;\n }\n\n const hasButtons = primaryButton || secondaryButton;\n\n // Build custom inline styles\n const customStyles: React.CSSProperties = {};\n if (customBackground) customStyles.backgroundColor = customBackground;\n if (customTextColor) customStyles.color = customTextColor;\n if (customFontSize) customStyles.fontSize = customFontSize;\n\n return (\n <TooltipPrimitive.Root delayDuration={delayDuration}>\n <TooltipPrimitive.Trigger asChild>\n {children}\n </TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n side={side}\n sideOffset={sideOffset}\n className={clsx(\n 'z-50 overflow-hidden rounded-6 p-6 shadow-e2',\n // Only apply default styles if no custom styles are provided\n !customBackground && 'bg-surface-bg',\n !customTextColor && 'text-high-em',\n !customFontSize && 'text-xs',\n 'font-medium',\n maxWidth,\n 'data-[state=delayed-open]:data-[side=top]:animate-slideDownAndFade',\n 'data-[state=delayed-open]:data-[side=bottom]:animate-slideUpAndFade',\n 'data-[state=delayed-open]:data-[side=left]:animate-slideRightAndFade',\n 'data-[state=delayed-open]:data-[side=right]:animate-slideLeftAndFade',\n className\n )}\n style={Object.keys(customStyles).length > 0 ? customStyles : undefined}\n >\n <div className={clsx(hasButtons && 'flex flex-col gap-8')}>\n <div>{content}</div>\n\n {hasButtons && (\n <div className=\"flex gap-4 items-center w-full\">\n {primaryButton && (\n <Button\n variant={primaryButton.variant || 'neutral'}\n hierarchy={primaryButton.hierarchy || 'secondary'}\n size={primaryButton.size || 'xs'}\n onClick={primaryButton.onClick}\n disabled={primaryButton.disabled}\n className=\"flex-1\"\n >\n {primaryButton.text}\n </Button>\n )}\n {secondaryButton && (\n <Button\n variant={secondaryButton.variant || 'neutral'}\n hierarchy={secondaryButton.hierarchy || 'secondary'}\n size={secondaryButton.size || 'xs'}\n onClick={secondaryButton.onClick}\n disabled={secondaryButton.disabled}\n className=\"flex-1\"\n >\n {secondaryButton.text}\n </Button>\n )}\n </div>\n )}\n </div>\n\n {showArrow && (\n <TooltipPrimitive.Arrow\n className={!customBackground ? 'fill-surface-bg' : undefined}\n style={customBackground ? { fill: customBackground } : undefined}\n />\n )}\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n );\n};\n","\"use client\";\n\nimport React from 'react';\nimport { clsx } from 'clsx';\nimport { Tooltip } from '../Tooltip/Tooltip';\nimport { QuestionCircle } from '@/shared/icons';\n\n/**\n * Defines the public API for the LabelWithTooltip component.\n */\nexport interface LabelWithTooltipProps {\n /** The label text content. */\n children: React.ReactNode;\n /** The content to display inside the tooltip. */\n tooltipContent: React.ReactNode;\n /** The icon to trigger the tooltip. Defaults to a question mark icon. */\n icon?: React.ReactNode;\n /** Optional custom Tailwind CSS class for the icon's color (e.g., 'text-danger-500'). */\n iconColor?: string;\n /** Optional custom classes for the label text. */\n labelClassName?: string;\n /** Optional custom classes for the container. */\n className?: string;\n /** Optional custom font size override. Accepts Tailwind size classes (e.g., 'xs', 'sm', 'md', 'lg') or pixel values (e.g., '12px', '16px'). */\n customFontSize?: string;\n /** Optional custom icon size override. Accepts numeric values (e.g., 16, 20, 24). */\n customIconSize?: number;\n}\n\n// Default icon memoized outside component to prevent recreation\nconst DefaultIcon = <QuestionCircle />;\n\n/**\n * @file A simple label with an adjacent tooltip icon.\n * @description This component displays a text label with a small tooltip icon next to it.\n * When the user hovers over the icon, a tooltip with additional information appears.\n * Built on top of Radix UI's Tooltip for robust accessibility and positioning.\n *\n * Designed to be used inline with form fields, headings, or any text that needs contextual help.\n *\n * @param {React.ReactNode} children - The label text.\n * @param {React.ReactNode} tooltipContent - The content to be shown inside the tooltip.\n * @param {React.ReactNode} [icon] - An optional custom icon component to trigger the tooltip.\n * @param {string} [iconColor='text-low-em'] - An optional Tailwind CSS class to customize the icon's color.\n * @param {string} [labelClassName] - Optional custom classes for the label text.\n * @param {string} [className] - Optional custom classes for the container.\n * @param {string} [customFontSize] - Optional custom font size override. Accepts Tailwind size classes (e.g., 'xs', 'sm', 'md', 'lg') or pixel values (e.g., '12px', '16px').\n * @param {number} [customIconSize] - Optional custom icon size override. Accepts numeric values (e.g., 16, 20, 24).\n * @returns {JSX.Element} The rendered LabelWithTooltip element.\n */\nexport const LabelWithTooltip = ({\n children,\n tooltipContent,\n icon,\n iconColor = 'text-disabled',\n labelClassName,\n className,\n customFontSize,\n customIconSize,\n}: LabelWithTooltipProps) => {\n // Font size mapping for Tailwind classes\n const fontSizeMap: Record<string, string> = {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl',\n };\n\n // Determine font size class or inline style\n const fontSizeClass = customFontSize\n ? (fontSizeMap[customFontSize] || undefined)\n : undefined;\n\n const customFontSizeStyle = customFontSize && !fontSizeMap[customFontSize]\n ? { fontSize: customFontSize }\n : undefined;\n\n // Determine icon size (default 16, or custom)\n const iconSize = customIconSize || 16;\n\n // Use default icon if none provided\n const displayIcon = icon ?? DefaultIcon;\n\n return (\n <div className={clsx('flex items-center gap-2', className)}>\n <span\n className={clsx(labelClassName, fontSizeClass)}\n style={customFontSizeStyle}\n >\n {children}\n </span>\n\n <Tooltip content={tooltipContent}>\n <button\n type=\"button\"\n className={clsx(\n 'bg-surface-bg flex items-center focus:outline-none focus-visible:ring-2 focus-visible:ring-brand-primary-main rounded-full',\n iconColor\n )}\n >\n {React.cloneElement(displayIcon as React.ReactElement<{ size?: number; color?: string }>, {\n size: iconSize,\n color: 'currentColor'\n })}\n </button>\n </Tooltip>\n </div>\n );\n};\n","\"use client\";\n\nimport React, {\n createContext,\n useContext,\n useState,\n Fragment,\n forwardRef,\n} from 'react';\nimport { Dialog as HeadlessDialog, Transition } from '@headlessui/react';\nimport { clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\nimport { LeftArrowIcon, XMark } from '@/shared/icons';\nimport { Button } from '@/shared/ui/Button/Button'\n\n/**\n * Modal size options.\n * @typedef {'sm' | 'md' | 'lg'} ModalSize\n */\nexport type ModalSize = 'sm' | 'md' | 'lg';\n\n/**\n * Configuration for modal sizes.\n * @private\n */\nconst sizeConfig: Record<\n ModalSize,\n { container: string; header: string; body: string; footer: string }\n> = {\n sm: {\n container: 'max-w-[300px] w-full',\n header: 'p-6',\n body: 'p-6',\n footer: 'p-6',\n },\n md: {\n container: 'w-[32rem]',\n header: 'p-6',\n body: 'p-6',\n footer: 'px-6 py-4',\n },\n lg: {\n container: 'w-[40rem]',\n header: 'p-6',\n body: 'p-6',\n footer: 'p-6',\n },\n};\n\n/**\n * Modal context type.\n * @typedef {Object} ModalContextType\n * @property {boolean} open - Whether the modal is open.\n * @property {(open: boolean) => void} setOpen - Function to set modal open state.\n * @property {ModalSize} size - Modal size.\n */\ninterface ModalContextType {\n open: boolean;\n setOpen: (open: boolean) => void;\n size: ModalSize;\n}\n\n/**\n * React context for modal state.\n * @private\n */\nconst ModalContext = createContext<ModalContextType | undefined>(undefined);\n\n/**\n * Custom hook to access modal context.\n * @throws {Error} If used outside of Modal provider.\n * @returns {ModalContextType}\n */\nconst useModalContext = () => {\n const context = useContext(ModalContext);\n if (!context) {\n throw new Error('useModalContext must be used within a Modal provider');\n }\n return context;\n};\n\n/**\n * Modal root component. Provides modal context and manages open state.\n * @param {Object} props\n * @param {React.ReactNode} props.children - Modal children.\n * @param {ModalSize} [props.size='md'] - Modal size.\n * @returns {JSX.Element}\n */\nconst Modal = ({\n children,\n size = 'md',\n}: {\n children: React.ReactNode;\n size?: ModalSize;\n}) => {\n const [open, setOpen] = useState(false);\n return (\n <ModalContext.Provider value={{ open, setOpen, size }}>\n {children}\n </ModalContext.Provider>\n );\n};\nModal.displayName = 'Modal';\n\n/**\n * Component to wrap the element that triggers opening the modal.\n * @param {Object} props\n * @param {React.ReactElement} props.children - Trigger element.\n * @returns {JSX.Element}\n */\nconst ModalTrigger = ({ children }: { children: React.ReactElement<React.HTMLAttributes<HTMLElement>> }) => {\n const { setOpen } = useModalContext();\n return React.cloneElement(children, {\n onClick: (e: React.MouseEvent<HTMLElement>) => {\n if (children.props.onClick) {\n children.props.onClick(e);\n }\n setOpen(true);\n },\n });\n};\nModalTrigger.displayName = 'ModalTrigger';\n\n/**\n * Main modal content container. Handles animations and layout.\n * @param {Object} props\n * @param {React.ReactNode} props.children - Modal content.\n * @param {string} [props.className] - Additional class names.\n * @returns {JSX.Element}\n */\nconst ModalContent = forwardRef<\n HTMLDivElement,\n { children: React.ReactNode; className?: string }\n>(({ children, className, ...props }, ref) => {\n const { open, setOpen, size } = useModalContext();\n const styles = sizeConfig[size];\n\n return (\n <Transition appear show={open} as={Fragment}>\n <HeadlessDialog\n as=\"div\"\n className=\"relative z-50\"\n onClose={() => setOpen(false)}\n >\n <Transition.Child\n as={Fragment}\n enter=\"ease-out duration-300\"\n enterFrom=\"opacity-0\"\n enterTo=\"opacity-100\"\n leave=\"ease-in duration-200\"\n leaveFrom=\"opacity-100\"\n leaveTo=\"opacity-0\"\n >\n <div className=\"fixed inset-0 bg-black-uniform/30\" aria-hidden=\"true\" />\n </Transition.Child>\n\n <div className=\"fixed inset-0 overflow-y-auto\">\n <div className=\"flex min-h-full items-center justify-center p-4\">\n <Transition.Child\n as={Fragment}\n enter=\"ease-out duration-300\"\n enterFrom=\"opacity-0 scale-95\"\n enterTo=\"opacity-100 scale-100\"\n leave=\"ease-in duration-200\"\n leaveFrom=\"opacity-100 scale-100\"\n leaveTo=\"opacity-0 scale-95\"\n >\n <HeadlessDialog.Panel\n ref={ref}\n className={clsx(\n 'bg-white rounded-2xl shadow-xl flex flex-col border border-surface-3 text-left transform transition-all',\n styles.container,\n className\n )}\n {...props}\n >\n {children}\n </HeadlessDialog.Panel>\n </Transition.Child>\n </div>\n </div>\n </HeadlessDialog>\n </Transition>\n );\n});\nModalContent.displayName = 'ModalContent';\n\n/**\n * Modal header section.\n * @param {Object} props\n * @param {React.ReactNode} props.children - Header content.\n * @param {() => void} [props.onBack] - Optional back button handler.\n * @param {boolean} [props.disabled] - Disable header actions.\n * @param {string} [props.className] - Additional class names.\n * @returns {JSX.Element}\n */\nconst ModalHeader = ({\n children,\n onBack,\n disabled = false,\n className,\n}: {\n children: React.ReactNode;\n onBack?: () => void;\n disabled?: boolean;\n className?: string;\n}) => {\n const { setOpen, size } = useModalContext();\n const styles = sizeConfig[size];\n\n return (\n <header\n className={clsx(\n 'flex items-center border-b border-surface-3 shrink-0',\n styles.header,\n className\n )}\n >\n <Button\n variant=\"neutral\"\n hierarchy=\"secondary\"\n className={clsx(\n 'cursor-pointer',\n !onBack && 'invisible'\n )}\n onClick={onBack}\n size=\"sm\"\n icons=\"only\"\n disabled={disabled || !onBack}\n leadingIcon={<LeftArrowIcon className=\"text-high-em\" />}\n />\n\n <div className=\"flex-1 flex justify-center items-center\">{children}</div>\n\n <Button\n className=\"cursor-pointer\"\n variant=\"neutral\"\n hierarchy=\"secondary\"\n size=\"sm\"\n icons=\"only\"\n leadingIcon={<XMark className=\"text-high-em\"/>}\n onClick={() => setOpen(false)}\n disabled={disabled}\n />\n </header>\n );\n};\nModalHeader.displayName = 'ModalHeader';\n\n/**\n * Modal title component for accessibility. Use inside ModalHeader.\n * @param {Object} props\n * @param {string} [props.className] - Additional class names.\n * @returns {JSX.Element}\n */\nconst ModalTitle = forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <HeadlessDialog.Title\n ref={ref}\n as=\"h3\"\n className={clsx(\n 'font-semibold text-base leading-tight text-center text-high-em',\n className\n )}\n {...props}\n />\n));\nModalTitle.displayName = 'ModalTitle';\n\n/**\n * Modal description component for accessibility.\n * @param {Object} props\n * @param {string} [props.className] - Additional class names.\n * @returns {JSX.Element}\n */\nconst ModalDescription = forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <HeadlessDialog.Description\n ref={ref}\n className={clsx('text-sm text-high-em', className)}\n {...props}\n />\n));\nModalDescription.displayName = 'ModalDescription';\n\n/**\n * Modal body/content section.\n * @param {Object} props\n * @param {React.ReactNode} props.children - Body content.\n * @param {string} [props.className] - Additional class names.\n * @returns {JSX.Element}\n */\nconst ModalBody = ({\n children,\n className,\n}: {\n children: React.ReactNode;\n className?: string;\n}) => {\n const { size } = useModalContext();\n const styles = sizeConfig[size];\n return (\n <main className={clsx(styles.body, 'flex-1 overflow-y-auto', className)}>\n {children}\n </main>\n );\n};\nModalBody.displayName = 'ModalBody';\n\n/**\n * Modal footer section. Flexible container that accepts any children.\n *\n * @example\n * // Flexible usage with custom layout\n * <ModalFooter>\n * <div className=\"flex justify-between w-full\">\n * <ModalClose><Button>Cancel</Button></ModalClose>\n * <Button onClick={handleSave}>Save</Button>\n * </div>\n * </ModalFooter>\n *\n * @example\n * // For simple cases, use ModalFooterActions instead\n * <ModalFooterActions\n * cancelButton={{ label: \"Cancel\" }}\n * acceptButton={{ label: \"Confirm\" }}\n * />\n *\n * @param {Object} props\n * @param {string} [props.className] - Additional class names.\n * @param {React.ReactNode} props.children - Footer content. Use any custom layout or components.\n * @returns {JSX.Element}\n */\nconst ModalFooter = ({\n className,\n children,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => {\n const { size } = useModalContext();\n const styles = sizeConfig[size];\n\n return (\n <footer\n className={clsx(\n 'flex items-center border-t border-surface-3 shrink-0',\n styles.footer,\n className\n )}\n {...props}\n >\n {children}\n </footer>\n );\n};\nModalFooter.displayName = 'ModalFooter';\n\n/**\n * Button configuration for ModalFooterActions.\n */\ninterface ModalFooterButtonConfig extends Omit<React.ComponentPropsWithoutRef<typeof Button>, 'onClick'> {\n /** Button label text */\n label: string;\n /** Optional click handler (called before closing modal if closeOnClick is true) */\n onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n /** Whether clicking the button should close the modal. Defaults to true. */\n closeOnClick?: boolean;\n}\n\n/**\n * Convenience component for common modal footer patterns with preset button layouts.\n * Provides responsive behavior: full-width buttons on sm modals, fixed-width on md/lg.\n *\n * Use this when you need a simple, standard footer with cancel/accept actions.\n * For custom layouts or complex footers, use ModalFooter with custom children.\n *\n * @example\n * // Simple confirmation dialog\n * <ModalFooterActions\n * cancelButton={{ label: \"Cancel\" }}\n * acceptButton={{ label: \"Confirm\" }}\n * />\n *\n * @example\n * // Custom styling and click handlers\n * <ModalFooterActions\n * cancelButton={{\n * label: \"No\",\n * variant: \"neutral\",\n * onClick: () => console.log('Cancelled')\n * }}\n * acceptButton={{\n * label: \"Yes, Delete\",\n * variant: \"danger\",\n * onClick: handleDelete,\n * closeOnClick: false // Handle close manually after async operation\n * }}\n * />\n *\n * @example\n * // With back button (only visible on md/lg modals)\n * <ModalFooterActions\n * backButton={{ label: \"Back\", onClick: () => setStep(step - 1), closeOnClick: false }}\n * cancelButton={{ label: \"Cancel\" }}\n * acceptButton={{ label: \"Next\" }}\n * />\n *\n * @param {Object} props\n * @param {ModalFooterButtonConfig} [props.backButton] - Optional back button configuration.\n * @param {ModalFooterButtonConfig} [props.cancelButton] - Optional cancel button configuration.\n * @param {ModalFooterButtonConfig} [props.acceptButton] - Optional accept/primary button configuration.\n * @param {string} [props.className] - Additional class names for the footer container.\n * @returns {JSX.Element}\n */\nconst ModalFooterActions = ({\n backButton,\n cancelButton,\n acceptButton,\n className,\n}: {\n backButton?: ModalFooterButtonConfig;\n cancelButton?: ModalFooterButtonConfig;\n acceptButton?: ModalFooterButtonConfig;\n className?: string;\n}) => {\n const { setOpen, size: modalSize } = useModalContext();\n const isSmall = modalSize === 'sm';\n\n const handleButtonClick = (\n config: ModalFooterButtonConfig,\n e: React.MouseEvent<HTMLButtonElement>\n ) => {\n // Call user's onClick handler if provided\n if (config.onClick) {\n config.onClick(e);\n }\n // Close modal if closeOnClick is true (default)\n if (config.closeOnClick !== false) {\n setOpen(false);\n }\n };\n\n return (\n <ModalFooter className={clsx(\n isSmall ? 'flex-row gap-8' : 'justify-between',\n className\n )}>\n\n {backButton && !isSmall && (\n <Button\n variant={backButton.variant || \"neutral\"}\n hierarchy={backButton.hierarchy || \"secondary\"}\n size={backButton.size || \"md\"}\n {...backButton}\n onClick={(e) => handleButtonClick(backButton, e)}\n >\n {backButton.label}\n </Button>\n )}\n\n\n {!backButton && !isSmall && <div />}\n\n\n <div className={clsx(\n 'flex',\n isSmall ? 'flex-row gap-8 w-full' : 'gap-8'\n )}>\n {cancelButton && (\n <Button\n variant={cancelButton.variant || \"neutral\"}\n hierarchy={cancelButton.hierarchy || \"primary\"}\n size={cancelButton.size || \"md\"}\n {...cancelButton}\n className={twMerge(\n isSmall ? \"w-full\" : \"w-32\",\n cancelButton.className\n )}\n onClick={(e) => handleButtonClick(cancelButton, e)}\n >\n {cancelButton.label}\n </Button>\n )}\n {acceptButton && (\n <Button\n variant={acceptButton.variant || \"secondary\"}\n hierarchy={acceptButton.hierarchy || \"primary\"}\n size={acceptButton.size || \"md\"}\n {...acceptButton}\n className={twMerge(\n isSmall ? \"w-full\" : \"w-32\",\n acceptButton.className\n )}\n onClick={(e) => handleButtonClick(acceptButton, e)}\n >\n {acceptButton.label}\n </Button>\n )}\n </div>\n </ModalFooter>\n );\n};\nModalFooterActions.displayName = 'ModalFooterActions';\n\n/**\n * Component to wrap an element that closes the modal on click.\n * @param {Object} props\n * @param {React.ReactElement} props.children - Close trigger element.\n * @returns {JSX.Element}\n */\nconst ModalClose = ({ children }: { children: React.ReactElement<React.HTMLAttributes<HTMLElement>> }) => {\n const { setOpen } = useModalContext();\n return React.cloneElement(children, {\n onClick: (e: React.MouseEvent<HTMLElement>) => {\n if (children.props.onClick) {\n children.props.onClick(e);\n }\n setOpen(false);\n },\n });\n};\nModalClose.displayName = 'ModalClose';\n\n/**\n * Modal component exports.\n */\nexport {\n Modal,\n ModalTrigger,\n ModalContent,\n ModalHeader,\n ModalTitle,\n ModalDescription,\n ModalBody,\n ModalFooter,\n ModalFooterActions,\n ModalClose,\n};\n\n/**\n * Type exports for ModalFooterActions configuration.\n */\nexport type { ModalFooterButtonConfig };\n","\"use client\";\n\nimport React from 'react';\nimport { clsx } from 'clsx';\n\n// Type definitions for component props\nexport type ProductIconType = 'default' | 'brand' | 'danger' | 'success';\nexport type ProductIconSize = 'lg' | 'md' | 'sm';\nexport type ProductIconVariant = 'primary' | 'secondary' | 'tertiary' | 'quaternary';\n\n// Defines props for icon components passed into this component\ninterface IconProps {\n size?: number | string;\n color?: string;\n [key: string]: unknown;\n}\n\n// Defines the public API for the ProductIcon component\nexport interface ProductIconProps {\n type?: ProductIconType;\n size?: ProductIconSize;\n variant?: ProductIconVariant;\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * @file A styled container for displaying product or feature icons.\n * @description The ProductIcon component is a wrapper that provides a consistent, themeable\n * background and container for an icon passed as its child. Its appearance is determined\n * by a combination of `type` (color scheme), `variant` (visual style), and `size`.\n *\n * @param {ProductIconType} [type='default'] - The color theme of the icon container.\n * @param {ProductIconSize} [size='lg'] - The physical size of the icon container (sm: 34px, md: 56px, lg: 80px).\n * @param {ProductIconVariant} [variant='primary'] - The visual style (e.g., filled, bordered).\n * @param {React.ReactNode} children - The icon component to be rendered inside.\n * @param {string} [className] - Optional custom CSS classes for additional styling.\n * @returns {JSX.Element} The rendered ProductIcon element.\n */\nexport const ProductIcon = ({\n type = 'default',\n size = 'lg',\n variant = 'primary',\n children,\n className,\n}: ProductIconProps) => {\n // Base styles applied to all variants\n const baseStyles = 'inline-flex items-center justify-center transition-colors duration-200';\n\n // Size-specific styles for the container\n const sizeStyles: Record<ProductIconSize, string> = {\n lg: 'w-[80px] h-[80px] rounded-[16px]',\n md: 'w-[56px] h-[56px] rounded-[16px]',\n sm: 'w-[40px] h-[40px] rounded-[8px]',\n };\n\n // Size map for the icon itself\n const iconSizeMap: Record<ProductIconSize, number> = {\n lg: 32,\n md: 24,\n sm: 20\n };\n\n // A map of all style combinations for different types and variants\n const variantStyles: Record<ProductIconType, Record<ProductIconVariant, string>> = {\n default: {\n primary: `bg-surface-4 text-white-uniform`,\n secondary: 'bg-surface-1 text-high-em',\n tertiary: 'bg-transparent border-[2px] border-surface-3 text-high-em',\n quaternary: 'bg-transparent text-high-em',\n },\n brand: {\n primary: 'bg-brand-primary-main text-white-uniform',\n secondary: 'bg-surface-3 text-primary-accent-3',\n tertiary: 'bg-transparent border-[2px] border-surface-4 text-primary-accent-3',\n quaternary: 'bg-transparent text-primary-accent-3',\n },\n danger: {\n primary: 'bg-danger-main text-white-uniform',\n secondary: 'bg-danger-accent-1 text-danger-main',\n tertiary: 'bg-transparent border-[2px] border-danger-accent-2 text-danger-main',\n quaternary: 'bg-transparent text-danger-main',\n },\n success: {\n primary: 'bg-success-main text-white-uniform',\n secondary: 'bg-success-accent-1 text-success-main',\n tertiary: 'bg-transparent border-[2px] border-success-accent-2 text-success-main',\n quaternary: 'bg-transparent text-success-main',\n },\n };\n\n // Clone the child icon to inject the correct size and color\n const sizedIcon = React.isValidElement(children)\n ? React.cloneElement(children as React.ReactElement<IconProps>, {\n size: iconSizeMap[size],\n color: 'currentColor',\n })\n : null;\n\n return (\n <div\n className={clsx(\n baseStyles,\n sizeStyles[size],\n variantStyles[type][variant],\n className\n )}\n >\n {sizedIcon}\n </div>\n );\n};\n","import * as React from 'react';\nimport { clsx } from 'clsx';\n\nexport interface DividerProps {\n direction?: 'horizontal' | 'vertical';\n width?: string;\n height?: string;\n className?: string;\n}\n\nexport const Divider: React.FC<DividerProps> = ({\n direction = 'horizontal',\n width,\n height,\n className,\n}) => {\n\n const defaultWidth = direction === 'horizontal' ? '100%' : '0.5px';\n const defaultHeight = direction === 'horizontal' ? '0.5px' : '100%';\n\n const baseStyles = clsx(\n className, \n \"bg-surface-3 items-center\", \n )\n \n const styles: React.CSSProperties = {\n width: width ?? defaultWidth,\n height: height ?? defaultHeight,\n };\n\n return <div className={baseStyles} style={styles} />;\n};","import React from 'react';\nimport { clsx } from 'clsx';\nimport { Icon, IconSize } from '@/shared/ui/Icon/Icon';\n\nexport type LabelSize = 'xs' | 'sm' | 'base' | 'lg' | 'xl' | '2xl' | '3xl';\n\nexport interface LabelIconProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The icon component or element to display */\n icon?: React.ReactNode;\n /** The label text to display */\n label?: React.ReactNode;\n /** Gap between icon and label (Tailwind spacing: 1-12) */\n gap?: number;\n /** Alignment of items */\n align?: 'start' | 'center' | 'end';\n /** Icon size using Icon component sizes */\n iconSize?: IconSize;\n /** Label size - Tailwind text size class */\n labelSize?: LabelSize;\n /** Icon color class (e.g., 'text-low-em', 'text-high-em') */\n iconColorClass?: string;\n /** Label color class (e.g., 'text-low-em', 'text-high-em') */\n labelColorClass?: string;\n}\n\n/**\n * A modular component for displaying an icon with a label.\n * Completely customizable via className and composition.\n */\nexport const LabelIcon = ({\n icon,\n label,\n gap = 4,\n align = 'center',\n iconSize = 'md',\n labelSize,\n iconColorClass = 'text-low-em',\n labelColorClass = 'text-low-em',\n className,\n children,\n ...props\n}: LabelIconProps) => {\n const gapClass = `gap-${gap}`;\n\n const alignmentClass = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n }[align];\n\n const labelSizeClass = labelSize ? `text-${labelSize}` : '';\n\n return (\n <div\n className={clsx(\n 'flex',\n alignmentClass,\n gapClass,\n className\n )}\n {...props}\n >\n {icon && (\n <span className={iconColorClass}>\n <Icon size={iconSize}>\n {icon}\n </Icon>\n </span>\n )}\n {label && (\n <span\n className={clsx(labelSizeClass, labelColorClass)}\n >\n {label}\n </span>\n )}\n {children}\n </div>\n );\n};\n","\"use client\";\n\nimport React from 'react';\nimport { clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\nimport { Icon } from '@/shared/ui/Icon/Icon'\nimport { Button } from '@/shared/ui/Button/Button'\nimport { Divider } from '@/shared/ui/Divider/Divider';\nimport { Link } from '@/shared/ui/Link/Link'\nimport { Badge } from '@/shared/ui/Badge/Badge';\nimport { LabelIcon } from '@/shared/ui/LabelIcon/LabelIcon';\nimport { StatusState } from '@/shared/ui/Badge/Badge';\nimport { UnionIcon } from '@/shared/icons';\nimport { LayerIcon } from '@/shared/icons/LayerIcon';\nimport { FlashIcon } from '@/shared/icons/FlashIcon';\nimport { MoreIcon } from '@/shared/icons/MoreIcon';\nimport { CalendarIcon2 } from '@/shared/icons';\n/**\n * Defines the public API for the ProjectCard component, extending standard div attributes.\n */\nexport interface ProjectCardProps extends React.HTMLAttributes<HTMLDivElement> {\n\n title: string;\n companyImage: string;\n badgeStatus: string;\n badgeStatusState: StatusState;\n\n // Button action\n onButtonAction?: () => void;\n\n // Label icons\n stackLabel: React.ReactNode;\n powerLabel: React.ReactNode;\n calendarLabel: React.ReactNode;\n\n // Links with status\n link1Label: string;\n link1Href: string;\n link2Label: string;\n link2Href: string;\n link2Status: StatusState;\n\n // Callbacks\n onCardClick?: () => void;\n\n className?: string;\n}\n\n/**\n * A project card component for displaying project information in dashboard views.\n *\n * This component displays project details including company icon, title, status badge,\n * metadata labels, and related links with independent status indicators.\n *\n * @param {string} title - The project title/name (required).\n * @param {string} companyImage - Image URL representing the company/project.\n * @param {string} badgeStatus - Text to display in the main status badge.\n * @param {StatusState} badgeStatusState - Status state for the main status badge indicator.\n * @param {() => void} [onButtonAction] - Callback for the action button click.\n * @param {React.ReactNode} stackLabel - Label for the first metric (stack icon).\n * @param {React.ReactNode} powerLabel - Label for the second metric (power icon).\n * @param {React.ReactNode} calendarLabel - Label for the third metric (calendar icon).\n * @param {string} link1Label - Text label for the first link (subdomain).\n * @param {string} link1Href - URL for the first link.\n * @param {string} link2Label - Text label for the second link (database).\n * @param {string} link2Href - URL for the second link.\n * @param {StatusState} link2Status - Status state for the second link badge.\n * @param {() => void} [onCardClick] - Callback when card is clicked.\n * @param {string} [className] - Additional CSS classes.\n * @returns {JSX.Element} The rendered project card element.\n */\nexport const ProjectCard = React.forwardRef<HTMLDivElement, ProjectCardProps>(({\n title,\n companyImage,\n badgeStatus,\n badgeStatusState,\n onButtonAction,\n stackLabel,\n powerLabel,\n calendarLabel,\n link1Label,\n link1Href,\n link2Label,\n link2Href,\n link2Status,\n onCardClick,\n className,\n ...props\n}, ref) => {\n const baseStyles = clsx(\n 'flex flex-col overflow-hidden transition-all duration-200 w-full min-w-0 p-4 gap-3 border rounded-2xl border-surface-3',\n 'bg-white',\n 'p-6 md:p-8 gap-6 md:gap-8',\n );\n\n const cardClasses = twMerge(clsx(\n baseStyles,\n className\n ));\n\n // Map StatusState to BadgeTheme\n const statusToBadgeTheme: Record<StatusState, 'success' | 'warning' | 'danger' | 'disabled'> = {\n success: 'success',\n warning: 'warning',\n danger: 'danger',\n disabled: 'disabled',\n };\n\n return (\n <div\n ref={ref}\n className={cardClasses}\n {...props}\n >\n <div className='flex-row flex justify-between'>\n <div className='flex'>\n <Icon className='!rounded-4' size='2xl' imageUrl={companyImage}></Icon>\n </div>\n <div className='flex w-fit'>\n <Button size='sm' leadingIcon={<Icon><MoreIcon/></Icon>} icons='only' hierarchy='secondary' variant='neutral' onClick={onButtonAction}></Button>\n </div>\n </div>\n <div className='flex-col flex justify-between gap-4'>\n <div className='flex gap-5 items-center'>\n <span className='text-high-em font-semibold'>{title}</span>\n <div className='flex items-center gap-2'>\n <Badge variant='simple' theme={statusToBadgeTheme[badgeStatusState]}>{badgeStatus}</Badge>\n </div>\n </div>\n <div className='flex flex-row gap-4'>\n <LabelIcon label={stackLabel} labelSize='sm' iconSize='sm' gap={4} icon={<LayerIcon/>} ></LabelIcon>\n <LabelIcon label={powerLabel} labelSize='sm' iconSize='sm' gap={4} icon={<FlashIcon/>} ></LabelIcon>\n <LabelIcon label={calendarLabel} labelSize='sm' iconSize='sm' gap={4} icon={<CalendarIcon2/>} ></LabelIcon>\n </div>\n </div>\n <Divider direction='horizontal' />\n <div className='flex-row flex justify-between gap-8'>\n <div className='flex w-1/2 flex-col gap-2'>\n <span className='text-sm text-low-em'>Subdomain</span>\n <div className='flex-row flex center items-center gap-4'>\n <Link href={link1Href} className='w-fit' variant='neutral'>{link1Label}</Link>\n </div>\n </div>\n <div className='flex w-1/2 flex-col gap-2'>\n <span className='text-sm text-low-em'>Database</span>\n <div className='flex-row flex center items-center gap-4'>\n <Badge variant='status' statusState={link2Status} statusSize={'xs'} ></Badge>\n <Link href={link2Href} trailingIcon={<UnionIcon/>} className='w-fit' variant='neutral'>{link2Label}</Link>\n </div>\n </div>\n </div>\n </div>\n );\n});\n\nProjectCard.displayName = 'ProjectCard';\n","\"use client\";\n\nimport React from \"react\";\nimport { clsx } from \"clsx\";\n\n/**\n * Defines the props for the ProgressBar component.\n */\ninterface ProgressBarProps {\n progress: number;\n className?: string;\n description?: string;\n}\n\n/**\n * A versatile progress bar component for displaying completion status.\n *\n * This component displays a horizontal progress bar with a circular indicator\n * support for optional description text and is fully accessible with ARIA attributes.\n *\n * @param {number} progress - The current progress value as a percentage (0-100).\n * @param {string} [description] - Optional description text to display below the progress bar.\n * @param {string} [className] - Additional CSS classes to apply to the progress bar container.\n * @returns {JSX.Element} The rendered progress bar element.\n */\nexport const ProgressBar = ({\n progress,\n description,\n className,\n ...props\n}: ProgressBarProps) => {\n // Ensure progress is within valid range\n const clampedProgress = Math.min(100, Math.max(0, progress));\n\n // Base styles for the progress bar container\n const baseStyles =\n \"w-full bg-surface-3 rounded-full h-1 relative overflow-hidden flex-1\";\n\n // Styles for the circular indicator\n const indicatorStyles = clsx(\n \"size-[18px] rounded-full transition-all duration-300 grow-0 shrink-0 border-black\",\n progress > 1\n ? \"border-5\"\n : progress === 0\n ? \"border-2 border-surface-3\"\n : \"border-5\"\n );\n\n const containerClasses = clsx(baseStyles, className);\n\n const fillClasses = \"h-full rounded-full transition-all duration-300 ease-out bg-black\";\n\n return (\n <div className=\"flex flex-col gap-y-2 w-full\">\n <div className=\"flex items-center w-full gap-x-5\">\n <div\n className={indicatorStyles}\n />\n <div\n className={containerClasses}\n role=\"progressbar\"\n aria-valuenow={clampedProgress}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={`Progress: ${clampedProgress}%`}\n {...props}\n >\n <div\n className={fillClasses}\n style={{ width: `${clampedProgress}%` }}\n />\n </div>\n </div>\n {description && (\n <p className=\"mt-2 font-medium text-sm text-left text-low-em\">\n {description}\n </p>\n )}\n </div>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport { clsx } from \"clsx\";\n\n/**\n * Size variants for ProgressCircle component\n */\ntype ProgressSize = \"xs\" | \"sm\" | \"md\" | \"lg\";\n\n/**\n * Color variants for ProgressCircle component\n */\ntype ProgressVariant = \"primary\";\n\n/**\n * Shape variants for ProgressCircle component\n */\ntype ProgressShape = \"circle\" | \"half-circle\";\n\n/**\n * Defines props for ProgressCircle component.\n */\ninterface ProgressCircleProps {\n progress: number;\n size?: ProgressSize;\n variant?: ProgressVariant;\n shape?: ProgressShape;\n showLabel?: boolean;\n label?: string;\n className?: string;\n ariaLabel?: string;\n id?: string;\n}\n\n/**\n * Size configuration for different progress circle variants\n */\nconst SIZE_CONFIG = {\n xs: {\n size: 144,\n container: \"size-[144px]\",\n strokeWidth: 12,\n labelFontSize: \"text-xs\",\n fontSize: \"text-[24px]\",\n lineHeight: \"leading-[36px]\",\n halfCircle: \"w-[144px] h-[80px]\",\n labelSpace: \"\",\n halfCircleLabelPosition: \"top-2/5\",\n },\n sm: {\n size: 180,\n container: \"size-[180px]\",\n strokeWidth: 14,\n labelFontSize: \"text-xs\",\n fontSize: \"text-[28px]\",\n lineHeight: \"leading-[42px]\",\n halfCircle: \"w-[180px] h-[95px]\",\n labelSpace: \"\",\n halfCircleLabelPosition: \"top-2/5\",\n },\n md: {\n size: 240,\n container: \"size-[240px]\",\n strokeWidth: 16,\n labelFontSize: \"text-sm\",\n fontSize: \"text-[38px]\",\n lineHeight: \"leading-[62px]\",\n halfCircle: \"w-[240px] h-[131px]\",\n labelSpace: \"\",\n halfCircleLabelPosition: \"top-2/5\",\n },\n lg: {\n size: 280,\n container: \"size-[280px]\",\n strokeWidth: 18,\n labelFontSize: \"text-md\",\n fontSize: \"text-[48px]\",\n lineHeight: \"leading-[72px]\",\n halfCircle: \"w-[280px] h-[154px]\",\n labelSpace: \"\",\n halfCircleLabelPosition: \"top-2/5\",\n },\n} as const;\n\n/**\n * Color configuration for different progress variants\n */\nconst COLORS = {\n primary: {\n track: \"text-surface-3\",\n fill: \"text-black\",\n label: \"text-low-em text-center\",\n progressLabel: \"text-high-em font-space-grotesk font-semibold\",\n opacity: 1,\n },\n} as const;\n\n/**\n * A versatile progress circle component for displaying completion status.\n *\n * This component displays a circular progress indicator with support for\n * different sizes, colors, shapes, and optional label display. It is fully accessible\n * with ARIA attributes and follows the project's design system.\n *\n * @param {number} progress - The current progress value as a percentage (0-100).\n * @param {ProgressSize} [size='md'] - Size variant of progress circle.\n * @param {ProgressVariant} [variant='primary'] - Color variant of progress circle.\n * @param {ProgressShape} [shape='circle'] - Shape variant of progress circle.\n * @param {boolean} [showLabel=true] - Whether to show progress label inside/under circle.\n * @param {string} [label] - Custom label text to display instead of percentage.\n * @param {string} [className] - Additional CSS classes to apply to the progress circle container.\n * @returns {JSX.Element} The rendered progress circle element.\n */\nexport const ProgressCircle = ({\n progress,\n size = \"md\",\n variant = \"primary\",\n shape = \"circle\",\n showLabel = true,\n label,\n className,\n ariaLabel,\n id,\n ...props\n}: ProgressCircleProps) => {\n // Ensure progress is within valid range (0-100)\n const clampedProgress = Math.min(100, Math.max(0, progress));\n\n // Generate unique ID for accessibility\n const generatedId = React.useId();\n const progressId = id || `progress-circle-${generatedId}`;\n const labelId = label ? `${progressId}-label` : undefined;\n\n // Get configuration for current size and variant\n const sizeConfig = SIZE_CONFIG[size];\n const colorConfig = COLORS[variant];\n\n // Generate descriptive aria-label\n const getAriaLabel = () => {\n if (ariaLabel) return ariaLabel;\n if (label) return `Progreso: ${label}, ${clampedProgress}% completado`;\n return `Progreso: ${clampedProgress}% completado`;\n };\n\n const svgSize = sizeConfig.size;\n const radius = (svgSize - sizeConfig.strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n\n // Calculate stroke dash offset for progress\n const strokeDashoffset =\n circumference - (clampedProgress / 100) * circumference;\n\n // Get container dimensions based on shape\n const getContainerClasses = () => {\n if (shape === \"circle\") {\n return SIZE_CONFIG[size].container;\n }\n\n // For half-circle, use half height but same width\n return SIZE_CONFIG[size].halfCircle;\n };\n\n // Render circle variant\n const renderCircle = () => (\n <svg\n width={svgSize}\n height={svgSize}\n className=\"transform -rotate-90\"\n role=\"progressbar\"\n aria-valuenow={clampedProgress}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={getAriaLabel()}\n aria-labelledby={labelId}\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n {/* Background circle (track) */}\n <circle\n cx={svgSize / 2}\n cy={svgSize / 2}\n r={radius}\n stroke=\"currentColor\"\n strokeWidth={sizeConfig.strokeWidth}\n fill=\"none\"\n className={colorConfig.track}\n opacity={colorConfig.opacity}\n />\n {/* Progress circle */}\n <circle\n cx={svgSize / 2}\n cy={svgSize / 2}\n r={radius}\n stroke=\"currentColor\"\n strokeWidth={sizeConfig.strokeWidth}\n fill=\"none\"\n className={colorConfig.fill}\n strokeDasharray={circumference}\n strokeDashoffset={strokeDashoffset}\n strokeLinecap=\"round\"\n style={{\n transition: \"stroke-dashoffset 0.3s ease-in-out\",\n }}\n />\n </svg>\n );\n\n // Render half-circle variant\n const renderHalfCircle = () => {\n // Calculate dimensions for half-circle based on size\n const padding = sizeConfig.strokeWidth;\n const viewBoxWidth = svgSize;\n const viewBoxHeight = svgSize / 2 + padding;\n const arcRadius = (svgSize - sizeConfig.strokeWidth) / 2;\n const startX = padding / 2;\n const startY = viewBoxHeight - padding / 2;\n const endX = svgSize - padding / 2;\n const endY = viewBoxHeight - padding / 2;\n\n // Calculate half circumference for strokeDasharray\n const halfCircumference = Math.PI * arcRadius * 2;\n const halfStrokeDashoffset =\n halfCircumference - (clampedProgress / 100) * halfCircumference;\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={\"100%\"}\n preserveAspectRatio=\"xMidYMid meet\"\n viewBox={`0 0 ${viewBoxWidth} ${viewBoxHeight}`}\n className=\"size-full\"\n fill=\"none\"\n role=\"progressbar\"\n aria-valuenow={clampedProgress}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={getAriaLabel()}\n aria-labelledby={labelId}\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n {/* Background half-circle (track) */}\n <path\n d={`M${startX},${startY} A${arcRadius},${arcRadius} 0 1,1 ${endX},${endY}`}\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={sizeConfig.strokeWidth}\n stroke=\"currentColor\"\n className={colorConfig.track}\n opacity={colorConfig.opacity}\n />\n {/* Progress half-circle */}\n <path\n d={`M${startX},${startY} A${arcRadius},${arcRadius} 0 1,1 ${endX},${endY}`}\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={sizeConfig.strokeWidth}\n stroke=\"currentColor\"\n className={colorConfig.fill}\n strokeDasharray={halfCircumference}\n strokeDashoffset={halfStrokeDashoffset}\n style={{\n transition: \"stroke-dashoffset 0.3s ease-in-out\",\n }}\n />\n </svg>\n );\n };\n\n return (\n <div\n className={clsx(\n \"relative inline-flex items-center justify-center\",\n getContainerClasses(),\n className\n )}\n id={progressId}\n {...props}\n >\n {shape === \"circle\" ? renderCircle() : renderHalfCircle()}\n\n {/* Circle label */}\n {showLabel && shape === \"circle\" && (\n <div\n className={clsx(\n \"absolute inset-0 flex flex-col items-center justify-center\",\n \"leading-none\"\n )}\n >\n {label && (\n <span\n id={labelId}\n className={clsx(\n sizeConfig.labelFontSize,\n colorConfig.label\n )}\n >\n {label}\n </span>\n )}\n <span\n className={clsx(\n sizeConfig.fontSize,\n sizeConfig.lineHeight,\n colorConfig.progressLabel\n )}\n style={{ fontFamily: 'var(--font-space-grotesk)' }}\n >\n {`${clampedProgress}%`}\n </span>\n </div>\n )}\n {/* Half-circle label */}\n {showLabel && shape === \"half-circle\" && (\n <div\n className={clsx(\n \"absolute left-0 right-0 flex flex-col items-center justify-center\",\n label ? sizeConfig.halfCircleLabelPosition : \"top-1/2\",\n label && sizeConfig.labelSpace\n )}\n >\n {label && (\n <span\n id={labelId}\n className={clsx(\n sizeConfig.labelFontSize,\n colorConfig.label\n )}\n >\n {label}\n </span>\n )}\n <span\n className={clsx(\n sizeConfig.fontSize,\n sizeConfig.lineHeight,\n colorConfig.progressLabel\n )}\n style={{ fontFamily: 'var(--font-space-grotesk)' }}\n >\n {`${clampedProgress}%`}\n </span>\n </div>\n )}\n </div>\n );\n};\n","import React from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { clsx } from \"clsx\";\nimport { ProgressBar } from '../ProgressBar/ProgressBar';\nimport { ProgressCircle } from '../ProgressCircle/ProgressCircle';\nimport { ArrowDown2 } from \"iconsax-react\";\nimport { XMark } from \"@/shared/icons\";\n\n/**\n * Props for the ProgressTracker component\n */\ninterface ProgressTrackerProps {\n /** Current step number (1-based index) */\n currentStep: number;\n /** Total number of steps */\n totalSteps: number;\n /** Optional progress percentage for the current step (0-100). If not provided, current step shows as 50% */\n currentStepProgress?: number;\n /** Optional descriptions for each step */\n stepDescriptions?: string[];\n title?: string;\n subtitle?: string;\n collapsed?: boolean;\n onToggleCollapse?: (collapsed: boolean) => void;\n onClose?: () => void;\n /** If true, only displays the progress circle without other elements */\n onlyProgressCircle?: boolean;\n className?: string;\n}\n\n/**\n * A versatile progress tracker component that displays multiple progress indicators\n * with both collapsed and expanded states, following shadcn/ui design principles.\n *\n * @param {number} currentStep - Current step number (1-based)\n * @param {number} totalSteps - Total number of steps\n * @param {number} [currentStepProgress] - Optional progress for current step (0-100)\n * @param {string[]} [stepDescriptions] - Optional descriptions for each step\n * @param {string} [title] - Optional title displayed in expanded state\n * @param {string} [subtitle] - Optional subtitle displayed in expanded state\n * @param {string} [className] - Additional CSS classes\n * @returns {JSX.Element} The rendered progress tracker component\n */\nexport const ProgressTracker = ({\n currentStep,\n totalSteps,\n currentStepProgress = 0,\n stepDescriptions = [],\n title,\n subtitle,\n className,\n collapsed: collapsedProp,\n onToggleCollapse,\n onClose,\n onlyProgressCircle = false,\n}: ProgressTrackerProps) => {\n const [collapsed, setCollapsed] = React.useState<boolean>(collapsedProp ?? true);\n\n React.useEffect(() => {\n if (typeof collapsedProp === \"boolean\") {\n setCollapsed(collapsedProp);\n }\n }, [collapsedProp]);\n\n const handleToggleCollapse = () => {\n const newCollapsed = !collapsed;\n setCollapsed(newCollapsed);\n if (onToggleCollapse) onToggleCollapse(newCollapsed);\n };\n\n // Generate steps array based on currentStep and totalSteps\n // Bars only show binary state: 100% (complete) or 0% (pending)\n // Progress detail is shown in the ProgressCircle\n const steps = React.useMemo(() => {\n return Array.from({ length: totalSteps }, (_, index) => {\n const stepNumber = index + 1;\n let progress: number;\n\n if (stepNumber < currentStep) {\n // Completed steps - show full bar\n progress = 100;\n } else {\n // Current and future steps - show empty bar\n progress = 0;\n }\n\n return {\n progress,\n description: stepDescriptions[index] || `Step ${stepNumber}`,\n };\n });\n }, [currentStep, totalSteps, stepDescriptions]);\n\n // Calculate overall progress based on current step\n const overallProgress = totalSteps > 0\n ? Math.round(((currentStep - 1) / totalSteps) * 100 + (currentStepProgress / totalSteps))\n : 0;\n\n // Only Progress Circle variant\n if (onlyProgressCircle) {\n return (\n <ProgressCircle\n progress={overallProgress}\n size=\"xs\"\n showLabel={true}\n ariaLabel={`Overall progress: ${overallProgress}%`}\n className={className}\n />\n );\n }\n\n return (\n <motion.div\n className={clsx(\n \"bg-white overflow-hidden\",\n className\n )}\n role=\"region\"\n aria-label={`Progress tracker${collapsed ? '' : ' - expanded'}`}\n layout\n animate={{ height: collapsed ? 61 : 130 }}\n transition={{\n duration: 0.3,\n ease: \"easeInOut\"\n }}\n >\n <div className=\"flex items-center justify-between px-6 py-2 gap-3\">\n <motion.div\n className=\"flex items-center gap-3 flex-1 min-w-0 cursor-pointer\"\n onClick={handleToggleCollapse}\n layout\n >\n <AnimatePresence mode=\"wait\">\n {collapsed ? (\n <motion.div\n key=\"collapsed-content\"\n className=\"flex items-center gap-3 flex-1 min-w-0\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.2 }}\n >\n {steps.map((step, index) => {\n const stepNumber = index + 1;\n const isCurrentStep = stepNumber === currentStep;\n\n return (\n <div key={index} className=\"flex-1 min-w-0\">\n <ProgressBar\n progress={step.progress}\n />\n </div>\n );\n })}\n </motion.div>\n ) : (\n <motion.div\n key=\"expanded-title\"\n className=\"flex flex-col flex-1\"\n initial={{ opacity: 0, y: -5 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -5 }}\n transition={{ duration: 0.2 }}\n >\n {title && (\n <h3 className=\"text-[16px] text-dark-100 font-semibold\">\n {title}\n </h3>\n )}\n {subtitle && (\n <p className=\"text-sm text-dark-700\">{subtitle}</p>\n )}\n </motion.div>\n )}\n </AnimatePresence>\n </motion.div>\n\n <div className=\"flex items-center gap-9 py-4 px-6\">\n <ProgressCircle\n progress={overallProgress}\n size=\"xs\"\n showLabel={true}\n ariaLabel={`Overall progress: ${overallProgress}%`}\n />\n <motion.button\n className=\"rounded-full cursor-pointer flex items-center justify-center\"\n onClick={handleToggleCollapse}\n whileHover={{ scale: 1.1 }}\n whileTap={{ scale: 0.9 }}\n transition={{ duration: 0.1 }}\n aria-label={collapsed ? \"Expand\" : \"Collapse\"}\n >\n <motion.div\n style={{ display: \"inline-flex\", alignItems: \"center\", justifyContent: \"center\" }}\n animate={{ rotate: collapsed ? 0 : 180 }}\n transition={{ duration: 0.2 }}\n >\n <ArrowDown2 size={16} color=\"black\" />\n </motion.div>\n </motion.button>\n <motion.button\n className=\"rounded-full cursor-pointer flex items-center justify-center w-6 h-6\"\n onClick={onClose}\n whileHover={{ scale: 1.1 }}\n whileTap={{ scale: 0.9 }}\n transition={{ duration: 0.1 }}\n aria-label=\"Close\"\n >\n <XMark size={16} />\n </motion.button>\n </div>\n </div>\n\n <AnimatePresence>\n {!collapsed && (\n <motion.div\n initial={{\n height: 0,\n opacity: 0\n }}\n animate={{\n height: \"auto\",\n opacity: 1\n }}\n exit={{\n height: 0,\n opacity: 0\n }}\n transition={{\n duration: 0.3,\n ease: \"easeInOut\"\n }}\n className=\"overflow-hidden\"\n >\n <div className=\"pt-2 pb-4 px-8\">\n <motion.div\n className=\"flex gap-3 w-full\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n transition={{ delay: 0.1, duration: 0.2 }}\n >\n {steps.map((step, index) => {\n const stepNumber = index + 1;\n const isCurrentStep = stepNumber === currentStep;\n\n return (\n <motion.div\n key={index}\n className=\"w-full\"\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{\n delay: 0.15 + index * 0.05,\n duration: 0.2,\n ease: \"easeOut\"\n }}\n >\n <div>\n <ProgressBar\n progress={step.progress}\n />\n {(step.progress !== 0 || isCurrentStep) && step.description && (\n <div className=\"text-sm text-[#2F343C] mt-3 font-semibold\">\n {step.description}\n </div>\n )}\n {step.progress === 0 && !isCurrentStep && step.description && (\n <div className=\"text-sm text-[#5A606B] mt-3 font-semibold\">\n {step.description}\n </div>\n )}\n </div>\n </motion.div>\n );\n })}\n </motion.div>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </motion.div>\n );\n};\n","\"use client\";\n\nimport React from 'react';\nimport { clsx } from 'clsx';\n\n// Type definitions for the component's props.\ntype RadioSize = 'small' | 'medium' | 'large';\n\n/**\n * Defines the public API for the Radio component, omitting the native 'size'\n * attribute to avoid conflicts with the custom size prop.\n */\nexport interface RadioProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> {\n /** The size of the radio button. */\n size?: RadioSize;\n}\n\n// Centralized style configuration for each size.\nconst sizeConfig = {\n small: {\n wrapper: 'w-[16px] h-[16px]',\n dot: 'w-[6px] h-[6px]',\n },\n medium: {\n wrapper: 'w-[20px] h-[20px]',\n dot: 'w-[8px] h-[8px]',\n },\n large: {\n wrapper: 'w-[24px] h-[24px]',\n dot: 'w-[10px] h-[10px]',\n },\n};\n\n// Centralized style configuration for different visual states.\nconst stateStyles = {\n unchecked: 'bg-transparent border-low-em hover:bg-surface-1',\n checked: 'bg-transparent border-1 border-low-em hover:bg-surface-1',\n focus: 'peer-focus-visible:ring-1 peer-focus-visible:ring-low-em',\n disabled: {\n unchecked: 'bg-surface-3 border-surface-4',\n checked: 'bg-surface-3 border-surface-4',\n dot: 'bg-surface-4',\n }\n};\n\n/**\n * @file An accessible, themeable radio button component.\n * @description This component renders a custom-styled radio button that wraps a native,\n * visually hidden `<input type=\"radio\">` for accessibility. Radio buttons are intended\n * to be used in groups (by providing the same `name` attribute) to allow for a single\n * selection from a set of options.\n *\n * @param {RadioSize} [size='medium'] - The size of the radio button.\n * @param {boolean} [checked=false] - The controlled checked state of the component.\n * @param {boolean} [disabled=false] - If true, the component will be non-interactive.\n * @returns {JSX.Element} The rendered Radio element.\n */\nexport const Radio = ({\n size = 'medium',\n checked = false,\n disabled = false,\n className,\n ...props\n}: RadioProps) => {\n const config = sizeConfig[size];\n\n return (\n <label\n className={clsx(\n 'inline-flex items-center',\n disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n className\n )}\n >\n <input\n type=\"radio\"\n checked={checked}\n disabled={disabled}\n className=\"sr-only peer\"\n {...props}\n />\n\n <div\n className={clsx(\n config.wrapper,\n 'rounded-full border transition-colors duration-200',\n checked && 'inline-flex items-center justify-center',\n stateStyles.focus,\n disabled\n ? (checked ? stateStyles.disabled.checked : stateStyles.disabled.unchecked)\n : (checked ? stateStyles.checked : stateStyles.unchecked),\n !disabled && 'peer-hover:border-low-em',\n )}\n >\n {checked && (\n <div\n className={clsx(\n config.dot,\n 'rounded-full',\n disabled ? stateStyles.disabled.dot : 'bg-black'\n )}\n />\n )}\n </div>\n </label>\n );\n};\n","\n\"use client\";\n\nimport { clsx } from 'clsx';\n\n// Type definitions for the component's props.\ntype SwitcherSize = 'xs' | 'sm' | 'md' | 'lg' | 'ai-chat';\n\n/**\n * Defines the shape for a single item in the Switcher.\n */\nexport interface SwitcherItem {\n id: string | number;\n label: string;\n}\n\n/**\n * Defines the public API for the Switcher component.\n */\nexport interface SwitcherProps {\n /** An array of item objects to be rendered as switcher options. */\n items: SwitcherItem[];\n /** The id of the currently selected item. */\n value: string | number;\n /** Callback function that is fired when an item is clicked. */\n onChange: (id: string | number) => void;\n /** The size of the switcher. */\n size?: SwitcherSize;\n /** If true, the switcher will have a border around its container. */\n withBorder?: boolean;\n /** Optional custom classes for the container. */\n className?: string;\n}\n\n// Centralized style configuration for each size.\nconst sizeConfig: Record<SwitcherSize, {\n wrapper: string;\n button: string;\n activeButton: string;\n gap: string;\n}> = {\n xs: {\n wrapper: 'h-10 rounded-4',\n button: 'px-4 text-[10px] rounded-3 h-9',\n activeButton: 'rounded-3 px-4',\n gap: 'gap-x-[5px]',\n },\n sm: {\n wrapper: 'h-13 rounded-6 px-2',\n button: 'px-4 text-xs rounded-4 h-12',\n activeButton: 'rounded-4',\n gap: 'gap-x-[5px]',\n },\n md: {\n wrapper: 'h-14 rounded-6 px-2',\n button: 'px-6 text-sm rounded-6 h-13',\n activeButton: 'rounded-3',\n gap: 'gap-x-[5px]',\n },\n lg: {\n wrapper: 'h-[56px] rounded-8 px-2',\n button: 'px-8 text-base rounded-6 h-14',\n activeButton: 'rounded-4',\n gap: 'gap-x-3',\n },\n 'ai-chat': {\n wrapper: 'h-[42px] rounded-6 px-[3px]',\n button: 'px-4 text-sm rounded-5 h-[34px]',\n activeButton: 'rounded-5 px-4',\n gap: 'gap-x-[5px]',\n },\n};\n\n/**\n * @file A segmented control component for single-choice selection.\n * @description The Switcher displays a set of options in a pill-shaped container,\n * with the active option highlighted. It is a fully controlled component, managed\n * via the `value` and `onChange` props. All size-related styles are centralized\n * in a configuration object for easy theming.\n *\n * @param {SwitcherItem[]} items - The array of options to display.\n * @param {string | number} value - The controlled value of the selected item.\n * @param {(id: string | number) => void} onChange - The callback fired when an item is selected.\n * @param {SwitcherSize} [size='md'] - The size variant of the switcher.\n * @param {boolean} [withBorder=false] - If true, adds a border to the component's container.\n * @returns {JSX.Element} The rendered Switcher element.\n */\nexport const Switcher = ({\n items,\n value,\n onChange,\n size = 'md',\n withBorder = false,\n className,\n}: SwitcherProps) => {\n const config = sizeConfig[size];\n\n return (\n <div\n className={clsx(\n 'inline-flex items-center p-1 bg-surface-2',\n config.wrapper,\n config.gap,\n withBorder && 'border border-surface-4',\n className\n )}\n >\n {items.map((item) => {\n const isActive = item.id === value;\n return (\n <button\n key={item.id}\n onClick={() => onChange(item.id)}\n className={clsx(\n 'font-semibold transition-colors duration-200',\n config.button,\n isActive\n ? clsx('bg-surface-bg shadow-sm text-high-em', config.activeButton)\n : 'text-high-em'\n )}\n >\n {item.label}\n </button>\n );\n })}\n </div>\n );\n};\n\n","\"use client\";\n\nimport React from \"react\";\nimport type { Table as ReactTable } from \"@tanstack/react-table\";\n\nexport interface TableLayoutOptions {\n dense?: boolean;\n cellBorder?: boolean;\n rowBorder?: boolean;\n headerBackground?: boolean;\n headerBorder?: boolean;\n virtualized?: boolean;\n width?: 'auto' | 'fixed';\n columnsVisibility?: boolean;\n columnsResizable?: boolean;\n rowHeight?: number;\n cellAlign?: 'left' | 'center' | 'right' | 'start' | 'end';\n}\n\nexport type TableContextValue<T = unknown> = {\n table: ReactTable<T>;\n tableLayout: TableLayoutOptions;\n parentRef?: React.RefObject<HTMLDivElement | null>;\n emptyStateTitle?: string;\n emptyStateDescription?: string;\n showClearFiltersButton?: boolean;\n resetAllFilters?: () => void;\n};\n\nexport const TableContext = React.createContext<TableContextValue | null>(null);\n\nexport const useTableContext = <T = unknown>(): TableContextValue<T> => {\n const context = React.useContext(TableContext);\n if (!context) {\n throw new Error(\"useTableContext must be used within a TableProvider\");\n }\n return context as TableContextValue<T>;\n};\n\nexport interface TableProviderProps<T = unknown> {\n children: React.ReactNode;\n value: TableContextValue<T>;\n}\n\nexport const TableProvider = <T = unknown>({\n children,\n value,\n}: TableProviderProps<T>) => {\n return React.createElement(\n TableContext.Provider,\n { value: value as TableContextValue },\n children\n );\n};","\"use client\";\n\nimport React from \"react\";\nimport {\n useReactTable,\n getCoreRowModel,\n getSortedRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n ColumnDef,\n SortingState,\n RowSelectionState,\n PaginationState,\n ColumnSizingState,\n} from \"@tanstack/react-table\";\nimport { TableProvider, TableLayoutOptions } from \"./TableContext\";\n\n// Type definitions\nexport type SortDirection = \"asc\" | \"desc\" | null;\n\nexport interface TableColumn<T = unknown> {\n /** Unique identifier for the column */\n id: string;\n /** Header label */\n header: string;\n /** Accessor function to get cell value from row data */\n accessor?: (row: T) => React.ReactNode;\n /** Custom cell renderer */\n cell?: (row: T) => React.ReactNode;\n /** Component to render in the cell - enables dynamic component injection */\n component?: React.ComponentType<{ value: unknown; row: T; rowIndex: number }>;\n /** Data type for automatic component mapping (avatar, tag, text, number, date, etc.) */\n dataType?:\n | \"avatar\"\n | \"tag\"\n | \"text\"\n | \"number\"\n | \"date\"\n | \"boolean\"\n | \"custom\";\n /** Props to pass to the component */\n componentProps?: Record<string, unknown>;\n /** Column width (flex-1 by default) */\n width?: string;\n /** Column size in pixels */\n size?: number;\n /** Minimum column size in pixels */\n minSize?: number;\n /** Maximum column size in pixels */\n maxSize?: number;\n /** Enable sorting for this column */\n sortable?: boolean;\n /** Enable filtering for this column */\n filterable?: boolean;\n /** Filter type for dynamic filter rendering */\n filterType?: \"text\" | \"select\" | \"date\" | \"number\" | \"boolean\";\n /** Filter options for select-type filters */\n filterOptions?: Array<{ label: string; value: unknown }>;\n /** Column type for header styling */\n type?: \"select\" | \"text\" | \"sortable\" | \"filterable\";\n}\n\n// The TableAction interface is kept for compatibility with existing code\nexport interface TableAction {\n id: string;\n label: string;\n icon?: React.ReactNode;\n onClick: () => void;\n /** Component to render instead of default Button - enables dynamic component injection */\n component?: React.ComponentType<{ value?: unknown }>;\n /** Accessor function to get value for the component */\n accessor?: () => unknown;\n /** Props to pass to the component */\n componentProps?: Record<string, unknown>;\n}\n\nexport interface TableProps<T = unknown> {\n /** Column definitions */\n columns: TableColumn<T>[];\n /** Data rows */\n data: T[];\n /** Table layout options */\n tableLayout?: TableLayoutOptions;\n /** Table title */\n title?: React.ReactNode;\n /** Enable search input in header */\n showSearch?: boolean;\n /** Search placeholder text */\n searchPlaceholder?: string;\n /** Search value */\n searchValue?: string;\n /** Callback when search changes */\n onSearchChange?: (value: string) => void;\n /** Header actions (Filters, Refresh, Settings) - accepts TableAction[] or React.ReactNode[] */\n headerActions?: (TableAction | React.ReactNode)[];\n /** Enable row selection with checkboxes */\n selectable?: boolean;\n /** Selected row IDs */\n selectedRows?: Set<string | number>;\n /** Callback when selection changes */\n onSelectionChange?: (selected: Set<string | number>) => void;\n /** Row ID accessor */\n getRowId?: (row: T, index: number) => string | number;\n /** Sorting state */\n sortBy?: string;\n sortDirection?: SortDirection;\n /** Callback when sort changes */\n onSortChange?: (columnId: string, direction: SortDirection) => void;\n /** Enable virtualization */\n virtualized?: boolean;\n /** Container height for virtualization */\n height?: string | number;\n /** Show pagination footer */\n showPagination?: boolean;\n /** Current page */\n currentPage?: number;\n /** Total pages */\n totalPages?: number;\n /** Items per page */\n itemsPerPage?: number;\n /** Total items */\n totalItems?: number;\n /** Pagination callbacks */\n onPageChange?: (page: number) => void;\n onNextPage?: () => void;\n onPreviousPage?: () => void;\n /** Custom className */\n className?: string;\n /** Empty state title */\n emptyStateTitle?: string;\n /** Empty state description */\n emptyStateDescription?: string;\n /** Show clear filters button in empty state */\n showClearFiltersButton?: boolean;\n}\n\n/**\n * Highly flexible, virtualized table component for large datasets.\n *\n * This component initializes the table logic and provides context to child components.\n * It does not render any UI elements directly.\n *\n * @example\n * ```tsx\n * <Table columns={columns} data={data} tableLayout={{ dense: true }}>\n * <TableRoot>\n * <TableHeader />\n * <TableBody />\n * </TableRoot>\n * </Table>\n * ```\n */\nexport const Table = <T extends Record<string, unknown>>({\n columns,\n data,\n tableLayout = {},\n children,\n ...props\n}: TableProps<T> & { children: React.ReactNode }) => {\n // Reference for the scroll container (used by virtualization)\n const parentRef = React.useRef<HTMLDivElement>(null);\n // Internal states\n const [sorting, setSorting] = React.useState<SortingState>(() => {\n if (!props.sortBy || !props.sortDirection) return [];\n return [{ id: props.sortBy, desc: props.sortDirection === \"desc\" }];\n });\n\n const [rowSelection, setRowSelection] = React.useState<RowSelectionState>(() => {\n const selection: RowSelectionState = {};\n props.selectedRows?.forEach((id) => {\n selection[String(id)] = true;\n });\n return selection;\n });\n\n const [globalFilter, setGlobalFilter] = React.useState<string>(props.searchValue || \"\");\n\n const [pagination, setPagination] = React.useState<PaginationState>(() => ({\n pageIndex: (props.currentPage || 1) - 1,\n pageSize: props.itemsPerPage || 10,\n }));\n\n const [columnSizing, setColumnSizing] = React.useState<ColumnSizingState>({});\n\n // Sync external props with internal states\n React.useEffect(() => {\n if (props.sortBy && props.sortDirection) {\n const newSorting = [{ id: props.sortBy, desc: props.sortDirection === \"desc\" }];\n if (JSON.stringify(newSorting) !== JSON.stringify(sorting)) {\n setSorting(newSorting);\n }\n }\n }, [props.sortBy, props.sortDirection, sorting]);\n\n React.useEffect(() => {\n if (props.selectedRows) {\n const selection: RowSelectionState = {};\n props.selectedRows.forEach((id) => {\n selection[String(id)] = true;\n });\n if (JSON.stringify(selection) !== JSON.stringify(rowSelection)) {\n setRowSelection(selection);\n }\n }\n }, [props.selectedRows, rowSelection]);\n\n React.useEffect(() => {\n if (props.searchValue !== globalFilter) {\n setGlobalFilter(props.searchValue || \"\");\n }\n }, [props.searchValue, globalFilter]);\n\n React.useEffect(() => {\n if (props.currentPage) {\n const pageIndex = props.currentPage - 1;\n if (pageIndex !== pagination.pageIndex) {\n setPagination((prev) => ({ ...prev, pageIndex }));\n }\n }\n }, [props.currentPage, pagination.pageIndex]);\n\n // Convert TableColumn to ColumnDef\n const tableColumns = React.useMemo(() => {\n const cols: ColumnDef<T>[] = columns.map((column) => {\n const colDef: ColumnDef<T> = {\n id: column.id,\n header: column.header,\n accessorKey: column.id,\n enableSorting: column.sortable ?? false,\n enableColumnFilter: column.filterable ?? false,\n size: column.size,\n minSize: column.minSize,\n maxSize: column.maxSize,\n enableResizing: true,\n };\n\n // Custom cell renderer\n if (column.component) {\n colDef.cell = ({ row, getValue }) => {\n const CellComponent = column.component!;\n const value = column.accessor\n ? column.accessor(row.original)\n : getValue();\n return React.createElement(CellComponent, {\n value,\n row: row.original,\n rowIndex: row.index,\n ...column.componentProps\n });\n };\n } else if (column.cell) {\n colDef.cell = ({ row }) => {\n return column.cell!(row.original);\n };\n } else if (column.accessor) {\n colDef.cell = ({ row }) => {\n return column.accessor!(row.original);\n };\n } else {\n colDef.cell = ({ getValue }) => {\n return getValue();\n };\n }\n\n return colDef;\n });\n\n // Add selection column if selectable\n if (props.selectable) {\n cols.unshift({\n id: \"__select\",\n header: \"\",\n cell: ({ row }) => row.original,\n enableSorting: false,\n enableColumnFilter: false,\n size: 48,\n minSize: 48,\n maxSize: 48,\n });\n }\n\n return cols;\n }, [columns, props.selectable]);\n\n // Initialize react-table\n const table = useReactTable({\n data,\n columns: tableColumns,\n state: {\n columnSizing,\n sorting,\n rowSelection,\n globalFilter,\n pagination: props.showPagination ? pagination : undefined,\n },\n enableColumnResizing: true,\n columnResizeMode: \"onChange\",\n onColumnSizingChange: setColumnSizing,\n defaultColumn: {\n minSize: 20,\n maxSize: Number.MAX_SAFE_INTEGER,\n size: 150,\n },\n onSortingChange: (updater) => {\n const newSorting =\n typeof updater === \"function\" ? updater(sorting) : updater;\n setSorting(newSorting);\n const newSort = newSorting[0];\n if (newSort) {\n props.onSortChange?.(newSort.id, newSort.desc ? \"desc\" : \"asc\");\n } else {\n props.onSortChange?.(\"\", null);\n }\n },\n onRowSelectionChange: (updater) => {\n const newSelection =\n typeof updater === \"function\" ? updater(rowSelection) : updater;\n setRowSelection(newSelection);\n const newSelectedSet = new Set<string | number>();\n Object.keys(newSelection).forEach((key) => {\n if (newSelection[key]) {\n const numKey = Number(key);\n newSelectedSet.add(isNaN(numKey) ? key : numKey);\n }\n });\n props.onSelectionChange?.(newSelectedSet);\n },\n onGlobalFilterChange: (updater) => {\n const newFilter =\n typeof updater === \"function\" ? updater(globalFilter) : updater;\n setGlobalFilter(newFilter);\n props.onSearchChange?.(newFilter);\n },\n onPaginationChange: (updater) => {\n if (!props.showPagination) return;\n const newPagination =\n typeof updater === \"function\" ? updater(pagination) : updater;\n setPagination(newPagination);\n props.onPageChange?.(newPagination.pageIndex + 1);\n },\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel: props.showPagination ? getPaginationRowModel() : undefined,\n manualPagination: false,\n manualSorting: false,\n getRowId: (row, index) => String(props.getRowId?.(row, index) ?? index),\n });\n\n // Merge table layout options with defaults\n const mergedTableLayout: TableLayoutOptions = React.useMemo(() => ({\n dense: false,\n cellBorder: false,\n rowBorder: true,\n rowHeight: 64,\n cellAlign: 'left',\n headerBackground: true,\n headerBorder: true,\n virtualized: props.virtualized || false,\n width: 'auto',\n columnsVisibility: false,\n columnsResizable: true,\n ...tableLayout,\n }), [tableLayout, props.virtualized]);\n\n // Function to reset all filters using @tanstack/react-table\n const resetAllFilters = () => {\n // Reset global filter (search)\n table.resetGlobalFilter();\n \n // Reset all column filters\n table.resetColumnFilters();\n \n // Also reset pagination to first page\n if (props.showPagination) {\n table.setPageIndex(0);\n }\n };\n\n return (\n <TableProvider value={{\n table,\n tableLayout: mergedTableLayout,\n parentRef,\n emptyStateTitle: props.emptyStateTitle,\n emptyStateDescription: props.emptyStateDescription,\n showClearFiltersButton: props.showClearFiltersButton ?? true, // Show by default\n resetAllFilters\n }}>\n {children}\n </TableProvider>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport { clsx } from \"clsx\";\nimport { useTableContext } from \"./TableContext\";\n\nexport interface TableRootProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const TableRoot: React.FC<TableRootProps> = ({\n children,\n className,\n}) => {\n const { tableLayout, parentRef } = useTableContext();\n const { virtualized, width } = tableLayout;\n\n // If virtualization is enabled, we need to apply overflow and height to the container\n if (virtualized) {\n return (\n <div\n ref={parentRef}\n className={clsx(\n \"bg-surface-0 rounded-lg border border-gray-200 shadow-sm overflow-auto w-full min-w-full table\",\n className\n )}\n style={{ height: '400px' }} // Default height for virtualized tables\n >\n <table\n className={clsx(\n \"w-full\",\n width === 'fixed' && \"table-fixed\",\n width === 'auto' && \"table-auto\"\n )}\n >\n {children}\n </table>\n </div>\n );\n }\n\n return (\n <div\n className={clsx(\n \"bg-surface-0 border border-gray-200 shadow-sm overflow-hidden w-full min-w-full table\",\n className\n )}\n >\n <table\n className={clsx(\n \"w-full\",\n width === 'fixed' && \"table-fixed\",\n width === 'auto' && \"table-auto\"\n )}\n data-slot=\"data-table\"\n >\n {children}\n </table>\n </div>\n );\n};","\"use client\";\n\nimport React from \"react\";\nimport { clsx } from \"clsx\";\nimport { useTableContext } from \"./TableContext\";\n\nexport interface TableRowProps {\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n isTBody?: boolean;\n}\n\nexport const TableRow: React.FC<TableRowProps> = ({\n children,\n className,\n style,\n isTBody = true,\n}) => {\n const { tableLayout } = useTableContext();\n const { rowBorder, rowHeight } = tableLayout;\n\n // Apply rowHeight if defined, otherwise use the provided style\n const rowStyle = rowHeight && isTBody\n ? { ...style, height: `${rowHeight}px` }\n : style;\n\n return (\n <tr\n className={clsx(\n \"hover:bg-gray-50 transition-colors\",\n rowBorder && \"border-b border-gray-200\",\n className\n )}\n style={rowStyle}\n >\n {children}\n </tr>\n );\n};","\"use client\";\n\nimport React from \"react\";\nimport { clsx } from \"clsx\";\nimport { flexRender, type Header } from \"@tanstack/react-table\";\nimport { Checkbox } from \"../Checkbox\";\nimport { useTableContext } from \"./TableContext\";\nimport { ArrowNarrowDownIcon, FilterFunnel02Icon } from \"@/shared/icons\";\n\nexport interface TableColumnHeaderProps<TData = unknown> {\n header: Header<TData, unknown>; // From @tanstack/react-table\n className?: string;\n}\n\nexport const TableColumnHeader = <TData = unknown>({\n header,\n className,\n}: TableColumnHeaderProps<TData>) => {\n const { table, tableLayout } = useTableContext();\n const { headerBackground, dense, cellBorder, columnsResizable, cellAlign } =\n tableLayout;\n\n const column = header.column;\n const isSorted = header.column.getIsSorted();\n const isActive = isSorted !== false;\n const canResize = column.getCanResize() && columnsResizable;\n\n if (column.id === \"__select\") {\n return (\n <th\n className={clsx(\n dense ? \"px-2 sm:px-3 py-2\" : \"px-3 sm:px-4 py-3\",\n headerBackground && \"bg-gray-50\",\n \"align-middle min-w-[48px] relative\",\n cellBorder && \"border-r border-gray-200 last:border-r-0\",\n className\n )}\n style={{\n width: `${header.getSize()}px`,\n ...(cellAlign && { textAlign: cellAlign as React.CSSProperties['textAlign'] }),\n }}\n >\n <div className=\"flex items-center justify-center\">\n <Checkbox\n className=\"outline-1 outline-offset-0 outline-dark-700 rounded-md\"\n checked={table.getIsAllPageRowsSelected()}\n onChange={table.getToggleAllPageRowsSelectedHandler()}\n indeterminate={table.getIsSomePageRowsSelected()}\n size=\"small\"\n />\n </div>\n </th>\n );\n }\n\n const headerCell = (\n <th\n className={clsx(\n dense ? \"px-2 sm:px-4 py-2\" : \"px-3 sm:px-6 py-3\",\n headerBackground && \"bg-gray-50\",\n \"flex items-center justify-center flex-row gap-2 min-w-0 relative\",\n column.getCanSort() &&\n \"cursor-pointer hover:bg-gray-100 transition-colors\",\n isActive && \"bg-gray-100\",\n cellBorder && \"border-r border-gray-200 last:border-r-0\",\n className\n )}\n style={{\n width: `${header.getSize()}px`,\n minWidth: `${column.columnDef.minSize || 20}px`,\n maxWidth: `${column.columnDef.maxSize || Number.MAX_SAFE_INTEGER}px`,\n ...(cellAlign && { textAlign: cellAlign as React.CSSProperties['textAlign'] }),\n }}\n onClick={\n column.getCanSort() ? column.getToggleSortingHandler() : undefined\n }\n >\n <div className=\"align-middle gap-2 min-w-0\">\n <span\n className={clsx(\n \"text-xs font-medium font-['Inter'] leading-[18px] truncate uppercase\",\n isActive\n ? \"text-primary-600 font-semibold\"\n : \"text-dark-300 font-medium\"\n )}\n >\n {flexRender(header.column.columnDef.header, header.getContext())}\n </span>\n </div>\n {isSorted && (\n <div className=\"align-middle flex-shrink-0\">\n <SortIcon direction={isSorted === \"desc\" ? \"desc\" : \"asc\"} />\n </div>\n )}\n {column.getCanFilter() && (\n <div className=\"align-middle flex-shrink-0\">\n <FilterIcon />\n </div>\n )}\n </th>\n );\n\n // Add resize handle if column can be resized\n if (canResize) {\n return (\n <th\n className={clsx(\n dense ? \"px-2 sm:px-4 py-2\" : \"px-3 sm:px-6 py-3\",\n headerBackground && \"bg-gray-50\",\n \"align-middle min-w-0 relative group\",\n column.getCanSort() &&\n \"cursor-pointer hover:bg-gray-100 transition-colors\",\n isActive && \"bg-gray-100\",\n cellBorder && \"border-r border-gray-200 last:border-r-0\",\n className\n )}\n style={{\n width: `${header.getSize()}px`,\n minWidth: `${column.columnDef.minSize || 20}px`,\n maxWidth: `${column.columnDef.maxSize || Number.MAX_SAFE_INTEGER}px`,\n ...(cellAlign && { textAlign: cellAlign as React.CSSProperties['textAlign'] }),\n }}\n onClick={\n column.getCanSort() ? column.getToggleSortingHandler() : undefined\n }\n >\n <div className=\"flex items-center flex-row gap-2\">\n <div className=\"align-middle gap-2 min-w-0\">\n <span\n className={clsx(\n \"text-xs font-medium font-['Inter'] leading-[18px] truncate uppercase\",\n isActive\n ? \"text-primary-600 font-semibold\"\n : \"text-dark-300 font-medium\"\n )}\n >\n {flexRender(header.column.columnDef.header, header.getContext())}\n </span>\n </div>\n {isSorted && (\n <div className=\"align-middle flex-shrink-0\">\n <SortIcon direction={isSorted === \"desc\" ? \"desc\" : \"asc\"} />\n </div>\n )}\n {column.getCanFilter() && (\n <div className=\"align-middle flex-shrink-0\">\n <FilterIcon />\n </div>\n )}\n </div>\n <div\n {...{\n onMouseDown: header.getResizeHandler(),\n onTouchStart: header.getResizeHandler(),\n className: clsx(\n `absolute top-0 right-0 w-1 h-full cursor-col-resize z-10`,\n \"bg-transparent hover:bg-gray-400 opacity-0 group-hover:opacity-50\"\n ),\n }}\n />\n </th>\n );\n }\n\n return headerCell;\n};\n\n// Helper components\nconst SortIcon = ({ direction }: { direction: \"asc\" | \"desc\" | null }) => {\n if (!direction) return null;\n return (\n <ArrowNarrowDownIcon\n className={clsx(\"text-dark-100\", direction === \"asc\" && \"rotate-180\")}\n size={12}\n />\n );\n};\n\nconst FilterIcon = () => (\n <FilterFunnel02Icon className=\"text-dark-100\" size={12} />\n);\n","\"use client\";\n\nimport React from \"react\";\nimport { clsx } from \"clsx\";\nimport { useTableContext } from \"./TableContext\";\nimport { TableRow } from \"./TableRow\";\nimport { TableColumnHeader } from \"./TableColumnHeader\";\n\nexport interface TableHeaderProps {\n className?: string;\n}\n\nexport const TableHeader: React.FC<TableHeaderProps> = ({\n className,\n}) => {\n const { table, tableLayout } = useTableContext();\n const { headerBackground, headerBorder } = tableLayout;\n\n return (\n <thead\n className={clsx(\n headerBackground && \"bg-gray-50\",\n headerBorder && \"border-b border-gray-200\",\n className\n )}\n >\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id} isTBody={false}>\n {headerGroup.headers.map((header) => (\n <TableColumnHeader key={header.id} header={header} />\n ))}\n </TableRow>\n ))}\n </thead>\n );\n};","\"use client\";\n\nimport React from \"react\";\nimport { clsx } from \"clsx\";\nimport { flexRender, type Cell } from \"@tanstack/react-table\";\nimport { Checkbox } from \"../Checkbox\";\nimport { useTableContext } from \"./TableContext\";\n\nexport interface TableCellProps<TData = unknown, TValue = unknown> {\n cell: Cell<TData, TValue>; // From @tanstack/react-table\n className?: string;\n}\n\nexport const TableCell = <TData = unknown, TValue = unknown>({ cell, className }: TableCellProps<TData, TValue>) => {\n const { tableLayout } = useTableContext();\n const { cellAlign } = tableLayout;\n\n const row = cell.row;\n const isSelected = row.getIsSelected();\n\n if (cell.column.id === \"__select\") {\n return (\n <td\n className={clsx(\n tableLayout.dense ? \"px-2 sm:px-3 py-2\" : \"px-3 sm:px-4 py-3\",\n \"min-w-[48px] relative\",\n isSelected ? \"bg-gray-50\" : \"\",\n tableLayout.cellBorder && \"border-r border-gray-200 last:border-r-0\",\n className\n )}\n style={{\n width: `${cell.column.getSize()}px`,\n // ...(cellAlign && { textAlign: cellAlign as React.CSSProperties['textAlign'] })\n }}\n >\n <div className=\"flex items-center justify-center\">\n <Checkbox\n className=\"outline-1 outline-offset-0 outline-dark-700 rounded-md\"\n checked={isSelected}\n onChange={row.getToggleSelectedHandler()}\n size=\"small\"\n />\n </div>\n </td>\n );\n }\n\n return (\n <td\n className={clsx(\n tableLayout.dense ? \"px-2 sm:px-4 py-2\" : \"px-3 sm:px-6 py-3 sm:py-4\",\n \"text-dark-700 text-xs sm:text-sm font-medium font-['Inter'] leading-5 transition-colors min-w-0 truncate\",\n isSelected ? \"bg-gray-50\" : \"\",\n tableLayout.cellBorder && \"border-r border-gray-200 last:border-r-0\",\n className\n )}\n style={{\n ...(cellAlign && { textAlign: cellAlign as React.CSSProperties['textAlign'] }),\n }}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </td>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport { Button } from \"../Button\";\nimport { clsx } from \"clsx\";\nimport { Box2Icon } from \"@/shared/icons\";\n\nexport interface TableEmptyStateProps {\n /** Empty state title */\n title?: string;\n /** Empty state description */\n description?: string;\n /** Show clear filters button */\n showClearFiltersButton?: boolean;\n /** Callback when clear filters is clicked */\n onClearFilters?: () => void;\n /** Custom className */\n className?: string;\n /** Number of columns for colspan */\n colSpan?: number;\n}\n\nexport const TableEmptyState: React.FC<TableEmptyStateProps> = ({\n title = \"No data available.\",\n description = \"We didn't find any results with the selected filters. Try other filters or reset them.\",\n showClearFiltersButton = false,\n onClearFilters,\n className,\n colSpan = 1,\n}) => {\n return (\n <tr className={clsx(\"w-full\", className)}>\n <td colSpan={colSpan} className=\"py-20 px-6\">\n <div className=\"flex flex-col items-center justify-center gap-y-8 text-center\">\n {/* Icon */}\n <Box2Icon\n size={60}\n color=\"currentColor\"\n strokeWidth={0.5}\n className=\"text-dark-700\"\n />\n\n <div className=\"flex flex-col items-center justify-center gap-y-4\">\n {/* Title */}\n <h3 className=\"text-lg font-semibold text-low-em\">{title}</h3>\n\n {/* Description */}\n <p className=\"max-w-md text-sm text-low-em\">{description}</p>\n </div>\n\n {/* Clear filters button */}\n {showClearFiltersButton && onClearFilters && (\n <Button\n variant=\"secondary\"\n hierarchy=\"primary\"\n size=\"sm\"\n onClick={onClearFilters}\n >\n Clear all filters\n </Button>\n )}\n </div>\n </td>\n </tr>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport { clsx } from \"clsx\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { useTableContext } from \"./TableContext\";\nimport { TableRow } from \"./TableRow\";\nimport { TableCell } from \"./TableCell\";\nimport { TableEmptyState } from \"./TableEmptyState\";\n\nexport interface TableBodyProps {\n className?: string;\n /** Empty state title */\n emptyStateTitle?: string;\n /** Empty state description */\n emptyStateDescription?: string;\n /** Show clear filters button in empty state */\n showClearFiltersButton?: boolean;\n /** Callback when clear filters is clicked */\n onClearFilters?: () => void;\n}\n\nexport const TableBody: React.FC<TableBodyProps> = ({\n className,\n emptyStateTitle,\n emptyStateDescription,\n showClearFiltersButton,\n}) => {\n const { table, tableLayout, parentRef, emptyStateTitle: contextEmptyStateTitle, emptyStateDescription: contextEmptyStateDescription, showClearFiltersButton: contextShowClearFiltersButton, resetAllFilters: contextResetAllFilters } = useTableContext();\n const { virtualized } = tableLayout;\n\n // Check if there are no filtered rows\n const hasNoFilteredRows = table.getFilteredRowModel().rows.length === 0;\n\n // Use props if provided, otherwise use context values\n const finalEmptyStateTitle = emptyStateTitle ?? contextEmptyStateTitle;\n const finalEmptyStateDescription = emptyStateDescription ?? contextEmptyStateDescription;\n const finalShowClearFiltersButton = showClearFiltersButton ?? contextShowClearFiltersButton;\n const finalOnClearFilters = contextResetAllFilters;\n\n // If there are no filtered rows, show empty state\n if (hasNoFilteredRows) {\n return (\n <tbody\n className={clsx(\n tableLayout.rowBorder && \"divide-y divide-gray-200\",\n tableLayout.dense && \"text-sm\",\n className\n )}\n >\n <TableEmptyState\n title={finalEmptyStateTitle}\n description={finalEmptyStateDescription}\n showClearFiltersButton={finalShowClearFiltersButton}\n onClearFilters={finalOnClearFilters}\n colSpan={table.getAllColumns().length}\n />\n </tbody>\n );\n }\n\n // If virtualization is disabled, render rows normally\n if (!virtualized) {\n return (\n <tbody\n className={clsx(\n tableLayout.rowBorder && \"divide-y divide-gray-200\",\n tableLayout.dense && \"text-sm\",\n className\n )}\n >\n {table.getRowModel().rows.map((row) => (\n <TableRow key={row.id}>\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id} cell={cell} />\n ))}\n </TableRow>\n ))}\n </tbody>\n );\n }\n\n // Virtualized rendering\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const rowVirtualizer = useVirtualizer({\n count: table.getRowModel().rows.length,\n getScrollElement: () => parentRef?.current || null,\n estimateSize: () => {\n // Use custom rowHeight if provided, otherwise use defaults based on dense mode\n if (tableLayout.rowHeight) {\n return tableLayout.rowHeight;\n }\n return tableLayout.dense ? 32 : 40; // Smaller height for dense mode\n },\n overscan: 5,\n });\n\n const items = rowVirtualizer.getVirtualItems();\n const totalSize = rowVirtualizer.getTotalSize();\n\n return (\n <tbody\n className={clsx(\n \"relative\",\n tableLayout.dense && \"text-sm\",\n className\n )}\n style={{\n height: `${totalSize}px`,\n }}\n >\n {items.map((virtualRow) => {\n const row = table.getRowModel().rows[virtualRow.index];\n \n return (\n <TableRow\n key={virtualRow.key}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: `${virtualRow.size}px`,\n transform: `translateY(${virtualRow.start}px)`,\n }}\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id} cell={cell} />\n ))}\n </TableRow>\n );\n })}\n </tbody>\n );\n};","\"use client\";\n\nimport React, { useState, useEffect } from \"react\";\nimport { clsx } from \"clsx\";\nimport { Button, Dropdown, InputField, type DropdownItemProps } from \"@/shared/ui\";\nimport { useTableContext } from \"./TableContext\";\n\n/**\n * Sanitizes and clamps a page number to a valid range.\n * @param value - Input value (string or number)\n * @param pageCount - Total number of pages\n * @returns Valid page number between 1 and pageCount (inclusive)\n */\nconst sanitizePageNumber = (value: string | number, pageCount: number): number => {\n const pageNumber = Number(value);\n \n if (isNaN(pageNumber) || !isFinite(pageNumber)) {\n return 1;\n }\n \n const roundedPage = Math.floor(pageNumber);\n const clampedPage = Math.max(1, Math.min(roundedPage, pageCount));\n \n return pageCount > 0 ? clampedPage : 1;\n};\n\n/**\n * Creates dropdown options for page size selector.\n * @param sizes - Array of available page sizes\n * @returns Array of dropdown option objects\n */\nconst createPageSizeOptions = (sizes: number[]): DropdownItemProps[] =>\n sizes.map((size) => ({\n id: String(size),\n title: String(size),\n }));\n\n/**\n * Formats the pagination info text by replacing template variables.\n * @param template - Template string with placeholders\n * @param start - Start item number\n * @param end - End item number\n * @param total - Total number of items\n * @returns Formatted info text\n */\n// const formatInfoText = (\n// template: string,\n// start: number,\n// end: number,\n// total: number\n// ): string =>\n// template\n// .replace(\"{start}\", String(start))\n// .replace(\"{end}\", String(end))\n// .replace(\"{total}\", String(total));\n\n/**\n * Calculates pagination item counts.\n * @param pageIndex - Current page index (0-based)\n * @param pageSize - Number of items per page\n * @param totalItems - Total number of items (optional)\n * @param filteredRowCount - Number of filtered rows\n * @returns Object with start, end, and total item counts\n */\nconst calculateItemCounts = (\n pageIndex: number,\n pageSize: number,\n totalItems: number | undefined,\n filteredRowCount: number\n) => {\n const start = pageIndex * pageSize + 1;\n const end = Math.min(\n (pageIndex + 1) * pageSize,\n totalItems || filteredRowCount\n );\n const total = totalItems || filteredRowCount;\n \n return { start, end, total };\n};\n\nexport interface TablePaginationProps {\n showPagination?: boolean;\n totalItems?: number;\n className?: string;\n sizes?: number[];\n infoTemplate?: string;\n}\n\nexport const TablePagination: React.FC<TablePaginationProps> = ({\n showPagination = true,\n totalItems,\n className,\n sizes = [10, 20, 50, 100],\n // infoTemplate = \"Showing {start}-{end} of {total} items\",\n}) => {\n const { table } = useTableContext();\n\n const paginationState = table.getState().pagination;\n const pageCount = table.getPageCount();\n const canNavigatePrevious = table.getCanPreviousPage();\n const canNavigateNext = table.getCanNextPage();\n\n const [pageInputValue, setPageInputValue] = useState<string>(\n String(paginationState.pageIndex + 1)\n );\n\n useEffect(() => {\n setPageInputValue(String(paginationState.pageIndex + 1));\n }, [paginationState.pageIndex]);\n\n const handlePageInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const inputValue = event.target.value;\n setPageInputValue(inputValue);\n \n const sanitizedPage = sanitizePageNumber(inputValue, pageCount);\n const pageIndex = sanitizedPage - 1;\n \n if (pageIndex !== paginationState.pageIndex) {\n table.setPageIndex(pageIndex);\n }\n \n if (String(sanitizedPage) !== inputValue) {\n setPageInputValue(String(sanitizedPage));\n }\n };\n\n const handlePageSizeChange = (id: string) => {\n table.setPageSize(Number(id));\n };\n\n const navigateToPreviousPage = () => table.previousPage();\n const navigateToNextPage = () => table.nextPage();\n\n const filteredRowCount = table.getFilteredRowModel().rows.length;\n const { total } = calculateItemCounts(\n paginationState.pageIndex,\n paginationState.pageSize,\n totalItems,\n filteredRowCount\n );\n\n const pageSizeOptions = createPageSizeOptions(sizes);\n const currentPageSize = paginationState.pageSize;\n\n if (!showPagination) return null;\n\n return (\n <div\n className={clsx(\n \"w-full px-6 py-8 sm:px-8 bg-gray-50 border-t border-gray-500 flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4\",\n className\n )}\n >\n <div className=\"flex items-center flex-row flex-1 shrink-0 gap-2 sm:gap-4\">\n <span className=\"text-dark-700 text-sm font-semibold\">Showing</span>\n\n <Dropdown\n className=\"max-w-[68px] text-sm\"\n size=\"md\"\n variant=\"outlined\"\n value={String(currentPageSize)}\n items={pageSizeOptions}\n onChange={handlePageSizeChange}\n />\n\n <span className=\"text-dark-700 text-sm font-semibold\">\n {`/ ${String(total)}`}\n </span>\n </div>\n\n <div className=\"flex flex-col sm:flex-row items-center justify-end flex-1 sm:items-center gap-4 w-full sm:w-auto\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-dark-700 text-sm\">Go To Page </span>\n <InputField\n className=\"max-w-[60px] !text-[10px]\"\n type=\"text\"\n value={pageInputValue}\n min={1}\n max={pageCount || 1}\n customBackground=\"var(--background)\"\n customFontSize=\"xs\"\n onChange={handlePageInputChange}\n />\n <span className=\"text-dark-700 text-sm\">of {pageCount || 1}</span>\n <div className=\"px-4 flex items-center\">\n <span className=\"w-0 border-l border-gray-300 h-[33px]\" />\n </div>\n <div className=\"flex items-center gap-4\">\n <Button\n onClick={navigateToPreviousPage}\n disabled={!canNavigatePrevious}\n variant=\"neutral\"\n hierarchy=\"tertiary\"\n size=\"sm\"\n className=\"\"\n >\n Previous\n </Button>\n <Button\n onClick={navigateToNextPage}\n disabled={!canNavigateNext}\n variant=\"neutral\"\n hierarchy=\"tertiary\"\n size=\"sm\"\n className=\"\"\n >\n Next\n </Button>\n </div>\n </div>\n </div>\n </div>\n );\n};\n","\"use client\";\n\nimport React, { useState } from \"react\";\nimport { clsx } from \"clsx\";\nimport { useTableContext } from \"./TableContext\";\n\nexport interface TableColumnFilterProps {\n columnId: string;\n className?: string;\n options?: Array<{ label: string; value: unknown }>;\n title?: string;\n}\n\nexport const TableColumnFilter: React.FC<TableColumnFilterProps> = ({\n columnId,\n className,\n options,\n title,\n}) => {\n const { table } = useTableContext();\n \n const column = table.getColumn(columnId);\n \n // Mover el hook useState antes de cualquier condicional para cumplir con las reglas de React\n const [filterValue, setFilterValue] = useState<string>(\n column?.getFilterValue() as string || \"\"\n );\n \n if (!column || !column.getCanFilter()) return null;\n \n // Definir un tipo específico para columnDef en lugar de usar 'any'\n const columnDef = column.columnDef as {\n filterType?: string;\n header?: string;\n };\n const filterType = columnDef.filterType || \"text\";\n const filterTitle = title || columnDef.header as string || column.id;\n \n // Handle filter value change\n const handleFilterChange = (value: string) => {\n setFilterValue(value);\n column.setFilterValue(value || undefined);\n };\n \n // Render different filter types\n const renderFilter = () => {\n switch (filterType) {\n case \"select\":\n return (\n <select\n value={filterValue}\n onChange={(e) => handleFilterChange(e.target.value)}\n className=\"w-full border border-gray-300 rounded px-2 py-1 text-sm\"\n >\n <option value=\"\">All</option>\n {options?.map((option, index) => (\n <option key={index} value={String(option.value)}>\n {option.label}\n </option>\n ))}\n </select>\n );\n \n case \"number\":\n return (\n <input\n type=\"number\"\n value={filterValue}\n onChange={(e) => handleFilterChange(e.target.value)}\n placeholder={`Filter ${filterTitle}...`}\n className=\"w-full border border-gray-300 rounded px-2 py-1 text-sm\"\n />\n );\n \n case \"date\":\n return (\n <input\n type=\"date\"\n value={filterValue}\n onChange={(e) => handleFilterChange(e.target.value)}\n className=\"w-full border border-gray-300 rounded px-2 py-1 text-sm\"\n />\n );\n \n case \"boolean\":\n return (\n <select\n value={filterValue}\n onChange={(e) => handleFilterChange(e.target.value)}\n className=\"w-full border border-gray-300 rounded px-2 py-1 text-sm\"\n >\n <option value=\"\">All</option>\n <option value=\"true\">Yes</option>\n <option value=\"false\">No</option>\n </select>\n );\n \n case \"text\":\n default:\n return (\n <input\n type=\"text\"\n value={filterValue}\n onChange={(e) => handleFilterChange(e.target.value)}\n placeholder={`Filter ${filterTitle}...`}\n className=\"w-full border border-gray-300 rounded px-2 py-1 text-sm\"\n />\n );\n }\n };\n \n return (\n <div className={clsx(\"p-2 border-t border-gray-200\", className)}>\n <div className=\"text-xs font-medium text-gray-700 mb-1\">\n {filterTitle}\n </div>\n {renderFilter()}\n </div>\n );\n};","\"use client\";\n\nimport React, { useState } from \"react\";\nimport { clsx } from \"clsx\";\nimport { Button } from \"../Button\";\nimport { Checkbox } from \"../Checkbox\";\nimport { useTableContext } from \"./TableContext\";\nimport { ArrowDown2, Eye, EyeSlash } from \"iconsax-react\";\n\nexport interface TableColumnVisibilityProps {\n className?: string;\n trigger?: React.ReactNode;\n position?: \"left\" | \"right\";\n}\n\nexport const TableColumnVisibility: React.FC<TableColumnVisibilityProps> = ({\n className,\n trigger,\n position = \"right\",\n}) => {\n const { table } = useTableContext();\n const [isOpen, setIsOpen] = useState(false);\n\n // Get all columns that can be hidden\n const columns = table.getAllColumns().filter(column =>\n column.id !== \"__select\" && column.getCanHide()\n );\n\n if (columns.length === 0) return null;\n\n // Toggle all columns visibility\n const toggleAllColumns = (visible: boolean) => {\n columns.forEach((column) => {\n if (column.getCanHide()) {\n column.toggleVisibility(visible);\n }\n });\n };\n\n // Check if all columns are visible\n const allVisible = columns.every((column) => column.getIsVisible());\n \n // Check if some columns are visible\n const someVisible = columns.some((column) => column.getIsVisible());\n\n // Default trigger button\n const defaultTrigger = (\n <Button\n variant=\"neutral\"\n hierarchy=\"tertiary\"\n size=\"sm\"\n className=\"flex items-center gap-2\"\n >\n <Eye size=\"16\" />\n Columns\n <ArrowDown2 size=\"16\" />\n </Button>\n );\n\n const dropdownPosition = position === \"right\"\n ? \"right-0 origin-top-right\"\n : \"left-0 origin-top-left\";\n\n return (\n <div className={clsx(\"relative inline-block text-left\", className)}>\n <div onClick={() => setIsOpen(!isOpen)}>\n {trigger || defaultTrigger}\n </div>\n\n {isOpen && (\n <>\n {/* Backdrop */}\n <div\n className=\"fixed inset-0 z-10\"\n onClick={() => setIsOpen(false)}\n />\n \n {/* Dropdown */}\n <div\n className={clsx(\n \"absolute z-20 mt-2 w-56 rounded-md bg-white shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none\",\n dropdownPosition\n )}\n >\n <div className=\"py-1\">\n {/* Header */}\n <div className=\"px-4 py-2 border-b border-gray-200\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-sm font-medium text-gray-900\">\n Column Visibility\n </h3>\n <div className=\"flex items-center gap-1\">\n <button\n onClick={() => toggleAllColumns(true)}\n className=\"text-xs text-blue-600 hover:text-blue-800\"\n disabled={allVisible}\n >\n All\n </button>\n <span className=\"text-gray-300\">|</span>\n <button\n onClick={() => toggleAllColumns(false)}\n className=\"text-xs text-blue-600 hover:text-blue-800\"\n disabled={!someVisible}\n >\n None\n </button>\n </div>\n </div>\n </div>\n\n {/* Column list */}\n <div className=\"max-h-60 overflow-y-auto\">\n {columns.map((column) => {\n const isVisible = column.getIsVisible();\n const headerText = typeof column.columnDef.header === 'string'\n ? column.columnDef.header\n : column.id;\n\n return (\n <div\n key={column.id}\n className=\"px-4 py-2 hover:bg-gray-50 flex items-center justify-between\"\n >\n <div className=\"flex items-center\">\n <Checkbox\n checked={isVisible}\n onChange={column.getToggleVisibilityHandler()}\n size=\"small\"\n />\n <label\n htmlFor={`column-${column.id}`}\n className=\"ml-2 text-sm text-gray-700 cursor-pointer\"\n onClick={(e) => {\n e.stopPropagation();\n column.toggleVisibility();\n }}\n >\n {headerText}\n </label>\n </div>\n <button\n onClick={(e) => {\n e.stopPropagation();\n column.toggleVisibility();\n }}\n className=\"p-1 rounded hover:bg-gray-200\"\n >\n {isVisible ? (\n <Eye size=\"16\" className=\"text-gray-600\" />\n ) : (\n <EyeSlash size=\"16\" className=\"text-gray-400\" />\n )}\n </button>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n </>\n )}\n </div>\n );\n};","/**\n * Configuration parser for JSON-based table setup\n * Converts API configuration into React Table columns\n */\n\nimport React from 'react';\nimport { Avatar } from '../Avatar';\nimport { Tag } from '../Tag';\nimport type { TableColumn } from './Table';\nimport type { TableColumnConfig, ColumnDataType } from './types';\n\n// ============================================================================\n// Component Renderers for each data type\n// ============================================================================\n\ninterface CellComponentProps<T = unknown> {\n value: unknown;\n row: T;\n rowIndex: number;\n config?: Record<string, unknown>;\n}\n\n/**\n * Avatar renderer\n */\nconst AvatarRenderer = <T,>({ value, config }: CellComponentProps<T>) => {\n const size = (config?.size as 'xs' | 'sm' | 'md' | 'lg' | 'xl') || 'sm';\n return <Avatar size={size} initials={String(value || '')} />;\n};\n\n/**\n * Tag renderer with dynamic variant mapping\n */\nconst TagRenderer = <T,>({ value, config }: CellComponentProps<T>) => {\n const size = (config?.size as 'xs' | 'sm') || 'xs';\n const variantMap = (config?.variantMap as Record<string, string>) || {};\n const defaultVariant = (config?.variant as string) || 'secondary';\n\n const stringValue = String(value || '').toLowerCase();\n const variant = variantMap[stringValue] || defaultVariant;\n\n return (\n <Tag variant={variant as unknown as 'primary' | 'secondary' | 'tertiary' | 'quaternary' | 'success' | 'danger' | 'info'} size={size}>\n {String(value || '')}\n </Tag>\n );\n};\n\n/**\n * Email renderer with mailto link\n */\nconst EmailRenderer = <T,>({ value }: CellComponentProps<T>) => {\n const email = String(value || '');\n return (\n <a\n href={`mailto:${email}`}\n className=\"text-primary-900 hover:underline\"\n >\n {email}\n </a>\n );\n};\n\n/**\n * Text renderer\n */\nconst TextRenderer = <T,>({ value }: CellComponentProps<T>) => {\n return <span>{String(value || '')}</span>;\n};\n\n/**\n * Number renderer with formatting\n */\nconst NumberRenderer = <T,>({ value }: CellComponentProps<T>) => {\n const num = typeof value === 'number' ? value : parseFloat(String(value || '0'));\n return <span>{num.toLocaleString()}</span>;\n};\n\n/**\n * Date renderer\n */\nconst DateRenderer = <T,>({ value }: CellComponentProps<T>) => {\n if (!value) return <span>-</span>;\n const date = value instanceof Date ? value : new Date(String(value));\n return <span>{date.toLocaleDateString()}</span>;\n};\n\n/**\n * Boolean renderer\n */\nconst BooleanRenderer = <T,>({ value }: CellComponentProps<T>) => {\n const isTrue = Boolean(value);\n return (\n <span className={isTrue ? 'text-success-600' : 'text-gray-400'}>\n {isTrue ? '✓' : '✗'}\n </span>\n );\n};\n\n// ============================================================================\n// Component Registry\n// ============================================================================\n\ntype ComponentRenderer = <T>(props: CellComponentProps<T>) => React.JSX.Element;\n\nconst dataTypeRenderers: Record<ColumnDataType, ComponentRenderer> = {\n avatar: AvatarRenderer,\n tag: TagRenderer,\n email: EmailRenderer,\n text: TextRenderer,\n number: NumberRenderer,\n date: DateRenderer,\n boolean: BooleanRenderer,\n custom: TextRenderer, // Fallback for custom types\n};\n\n// ============================================================================\n// Configuration Parser\n// ============================================================================\n\n/**\n * Converts a JSON column configuration into a React Table column\n */\nexport function parseColumnConfig<T extends Record<string, unknown>>(\n columnConfig: TableColumnConfig\n): TableColumn<T> {\n const renderer = dataTypeRenderers[columnConfig.dataType];\n\n return {\n id: columnConfig.id,\n header: columnConfig.header,\n sortable: columnConfig.sortable,\n filterable: columnConfig.filterable,\n width: columnConfig.width,\n filterType: columnConfig.filterConfig?.type as 'text' | 'select' | 'date' | 'number' | 'boolean' | undefined,\n filterOptions: columnConfig.filterConfig?.options,\n // Create component renderer with config props\n component: ({ value, row, rowIndex }) => {\n return renderer({\n value,\n row,\n rowIndex,\n config: columnConfig.componentProps,\n });\n },\n // Also set accessor to extract value from row\n accessor: (row) => {\n const value = row[columnConfig.id as keyof T];\n return value as React.ReactNode;\n },\n };\n}\n\n/**\n * Converts an array of column configurations into React Table columns\n */\nexport function parseTableConfig<T extends Record<string, unknown>>(\n columns: TableColumnConfig[]\n): TableColumn<T>[] {\n return columns.map((col) => parseColumnConfig<T>(col));\n}\n\n/**\n * Utility to add selection column to parsed columns\n */\nexport function addSelectionColumn<T extends Record<string, unknown>>(\n columns: TableColumn<T>[]\n): TableColumn<T>[] {\n return [\n {\n id: '__select',\n header: '',\n type: 'select',\n width: 'w-16',\n },\n ...columns,\n ];\n}\n","/**\n * Mock data simulating API responses for the Table component\n * This demonstrates how the table would receive configuration and data from the backend\n */\n\nimport type { TableApiResponse, TableConfig } from './types';\n\n// ============================================================================\n// Example 1: Users Table\n// ============================================================================\n\nexport interface ApiUser extends Record<string, unknown> {\n id: number;\n avatar: string;\n name: string;\n email: string;\n status: 'active' | 'inactive' | 'pending';\n role: string;\n department: string;\n createdAt: string;\n loginCount: number;\n isVerified: boolean;\n}\n\nexport const usersTableConfig: TableConfig = {\n title: 'User Management',\n columns: [\n {\n id: 'avatar',\n header: 'Avatar',\n dataType: 'avatar',\n componentProps: {\n size: 'sm',\n },\n },\n {\n id: 'name',\n header: 'Name',\n dataType: 'text',\n sortable: true,\n filterable: true,\n filterConfig: {\n type: 'text',\n },\n },\n {\n id: 'email',\n header: 'Email',\n dataType: 'email',\n filterable: true,\n filterConfig: {\n type: 'text',\n },\n },\n {\n id: 'status',\n header: 'Status',\n dataType: 'tag',\n filterable: true,\n filterConfig: {\n type: 'select',\n options: [\n { label: 'Active', value: 'active' },\n { label: 'Inactive', value: 'inactive' },\n { label: 'Pending', value: 'pending' },\n ],\n },\n componentProps: {\n size: 'xs',\n variantMap: {\n active: 'success',\n inactive: 'quaternary',\n pending: 'info',\n },\n },\n },\n {\n id: 'role',\n header: 'Role',\n dataType: 'text',\n filterable: true,\n filterConfig: {\n type: 'select',\n options: [\n { label: 'Admin', value: 'Admin' },\n { label: 'User', value: 'User' },\n { label: 'Manager', value: 'Manager' },\n ],\n },\n },\n {\n id: 'department',\n header: 'Department',\n dataType: 'text',\n },\n {\n id: 'loginCount',\n header: 'Logins',\n dataType: 'number',\n sortable: true,\n },\n {\n id: 'isVerified',\n header: 'Verified',\n dataType: 'boolean',\n },\n {\n id: 'createdAt',\n header: 'Created',\n dataType: 'date',\n sortable: true,\n },\n ],\n features: {\n selectable: true,\n virtualized: false,\n pagination: true,\n sorting: true,\n filtering: true,\n },\n pagination: {\n itemsPerPage: 10,\n currentPage: 1,\n totalPages: 5,\n totalItems: 50,\n },\n};\n\nexport const usersTableData: ApiUser[] = [\n {\n id: 1,\n avatar: 'JD',\n name: 'John Doe',\n email: 'john.doe@example.com',\n status: 'active',\n role: 'Admin',\n department: 'Engineering',\n createdAt: '2024-01-15',\n loginCount: 142,\n isVerified: true,\n },\n {\n id: 2,\n avatar: 'JS',\n name: 'Jane Smith',\n email: 'jane.smith@example.com',\n status: 'active',\n role: 'Manager',\n department: 'Marketing',\n createdAt: '2024-02-20',\n loginCount: 98,\n isVerified: true,\n },\n {\n id: 3,\n avatar: 'RJ',\n name: 'Robert Johnson',\n email: 'robert.j@example.com',\n status: 'pending',\n role: 'User',\n department: 'Sales',\n createdAt: '2024-03-10',\n loginCount: 5,\n isVerified: false,\n },\n {\n id: 4,\n avatar: 'MW',\n name: 'Maria Williams',\n email: 'maria.w@example.com',\n status: 'active',\n role: 'User',\n department: 'HR',\n createdAt: '2024-01-25',\n loginCount: 67,\n isVerified: true,\n },\n {\n id: 5,\n avatar: 'DB',\n name: 'David Brown',\n email: 'david.b@example.com',\n status: 'inactive',\n role: 'User',\n department: 'Engineering',\n createdAt: '2023-12-05',\n loginCount: 234,\n isVerified: true,\n },\n];\n\nexport const usersApiResponse: TableApiResponse<ApiUser> = {\n config: usersTableConfig,\n data: usersTableData,\n};\n\n// ============================================================================\n// Example 2: Products Table\n// ============================================================================\n\nexport interface Product extends Record<string, unknown> {\n id: number;\n name: string;\n category: string;\n price: number;\n stock: number;\n isActive: boolean;\n lastUpdated: string;\n sku: string;\n}\n\nexport const productsTableConfig: TableConfig = {\n title: 'Product Inventory',\n columns: [\n {\n id: 'sku',\n header: 'SKU',\n dataType: 'text',\n sortable: true,\n },\n {\n id: 'name',\n header: 'Product Name',\n dataType: 'text',\n sortable: true,\n filterable: true,\n filterConfig: {\n type: 'text',\n },\n },\n {\n id: 'category',\n header: 'Category',\n dataType: 'tag',\n filterable: true,\n filterConfig: {\n type: 'select',\n options: [\n { label: 'Electronics', value: 'Electronics' },\n { label: 'Clothing', value: 'Clothing' },\n { label: 'Food', value: 'Food' },\n ],\n },\n componentProps: {\n size: 'xs',\n variant: 'secondary',\n },\n },\n {\n id: 'price',\n header: 'Price',\n dataType: 'number',\n sortable: true,\n filterConfig: {\n type: 'number',\n },\n },\n {\n id: 'stock',\n header: 'Stock',\n dataType: 'number',\n sortable: true,\n },\n {\n id: 'isActive',\n header: 'Active',\n dataType: 'boolean',\n filterable: true,\n filterConfig: {\n type: 'boolean',\n },\n },\n {\n id: 'lastUpdated',\n header: 'Last Updated',\n dataType: 'date',\n sortable: true,\n },\n ],\n features: {\n selectable: true,\n virtualized: false,\n pagination: true,\n sorting: true,\n filtering: true,\n },\n pagination: {\n itemsPerPage: 15,\n currentPage: 1,\n totalPages: 3,\n totalItems: 45,\n },\n};\n\nexport const productsTableData: Product[] = [\n {\n id: 1,\n sku: 'ELEC-001',\n name: 'Wireless Mouse',\n category: 'Electronics',\n price: 29.99,\n stock: 150,\n isActive: true,\n lastUpdated: '2024-03-15',\n },\n {\n id: 2,\n sku: 'CLTH-045',\n name: 'Cotton T-Shirt',\n category: 'Clothing',\n price: 19.99,\n stock: 300,\n isActive: true,\n lastUpdated: '2024-03-14',\n },\n {\n id: 3,\n sku: 'FOOD-112',\n name: 'Organic Coffee',\n category: 'Food',\n price: 12.50,\n stock: 0,\n isActive: false,\n lastUpdated: '2024-02-28',\n },\n {\n id: 4,\n sku: 'ELEC-089',\n name: 'USB-C Cable',\n category: 'Electronics',\n price: 15.99,\n stock: 500,\n isActive: true,\n lastUpdated: '2024-03-16',\n },\n {\n id: 5,\n sku: 'CLTH-098',\n name: 'Denim Jeans',\n category: 'Clothing',\n price: 59.99,\n stock: 75,\n isActive: true,\n lastUpdated: '2024-03-10',\n },\n];\n\nexport const productsApiResponse: TableApiResponse<Product> = {\n config: productsTableConfig,\n data: productsTableData,\n};\n","\"use client\";\n\nimport React from \"react\";\nimport { Tab } from \"@headlessui/react\";\nimport { clsx } from \"clsx\";\nimport { getGapClass } from \"@/shared/utils\";\n\n// Type definitions for component props\ntype TabVariant =\n | \"line\"\n | \"line-icons\"\n | \"line-full-width\"\n | \"pill\"\n | \"only-icon\";\n\n/**\n * Defines the shape for a single tab's data, including its label,\n * icon (optional), and the content to be displayed.\n */\nexport interface TabItem {\n id: number | string;\n label: string;\n icon?: React.ReactNode;\n selectedIcon?: React.ReactNode;\n content: React.ReactNode;\n}\n\n/**\n * Defines the public API for the Tabs component.\n */\nexport interface TabsProps {\n /** The visual style of the tabs. */\n variant?: TabVariant;\n /** An array of tab objects to be rendered. */\n tabs: TabItem[];\n /** Optional custom classes for the container. */\n className?: string;\n /** The index of the selected tab. */\n selectedIndex?: number;\n /** Callback fired when a tab is selected. */\n onChange?: (index: number) => void;\n /** Optional custom padding bottom for tab buttons. Accepts any CSS value (e.g., '8px', '12px', '1rem'). */\n customPaddingBottom?: string;\n /** Controls the spacing between tabs and content. Accepts size names or pixel values. Default is 'sm' (16px). */\n contentSpacing?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"none\" | number;\n /** Enable full height mode with flex layout. Useful for tabs that need to fill parent container. Default is false. */\n fullHeight?: boolean;\n /** Controls the gap between icon and label in tabs. Default is 4 (16px). Accepts values 0-8. */\n iconLabelGap?: number;\n /** Controls the size of icons in tabs. Default is 20px. */\n iconSize?: number;\n /** Show border on line variants. Default is true. */\n showBorder?: boolean;\n /** Fixed height for the tab list header in pixels. When set, tabs are vertically centered (e.g., 56 for 56px). */\n headerHeight?: number;\n /** Horizontal padding for individual tab buttons in pixels (e.g., 16 for 16px). */\n tabPaddingX?: number;\n /** Optional custom classes for the tab list. */\n tabListClassName?: string;\n}\n\n// Centralized style configuration for each variant.\nconst variantStyles = {\n line: {\n list: \"flex gap-x-9 border-b border-surface-3\",\n tab: \"relative pb-8 px-2 font-medium text-[14px] transition-colors focus:outline-none\",\n selected:\n \"text-high-em after:absolute after:bottom-[-1px] after:left-0 after:right-0 after:h-1 after:bg-black\",\n unselected: \"text-low-em\",\n },\n \"line-full-width\": {\n list: \"flex border-b border-surface-3\",\n tab: \"flex flex-1 justify-center relative pb-8 px-2 font-medium text-sm transition-colors focus:outline-none\",\n selected:\n \"text-high-em after:absolute after:bottom-[-1px] after:left-0 after:right-0 after:h-1 after:bg-black\",\n unselected: \"text-low-em\",\n },\n pill: {\n list: \"flex gap-x-12\",\n tab: \"font-medium text-sm transition-colors focus:outline-none px-6 rounded-md\",\n selected: \"bg-surface-2 text-high-em py-4\",\n unselected: \"text-low-em px-3 py-2 hover:bg-surface-2/50\",\n },\n};\n\n// Content spacing configuration mapping size names to Tailwind classes\n// Controls margin-top of Tab.Panels (space between tabs and content)\nconst contentSpacingMap: Record<string, string> = {\n none: \"\",\n xs: \"mt-2\", // 8px\n sm: \"mt-4\", // 16px (default)\n md: \"mt-6\", // 24px\n lg: \"mt-8\", // 32px\n xl: \"mt-12\", // 48px\n};\n\n/**\n * @file An accessible and themeable tabs component for content navigation.\n * @description This component renders a set of tabs and their corresponding content panels.\n * It is built on top of Headless UI for robust accessibility, keyboard navigation, and state management.\n * The visual appearance is controlled by the `variant` prop, which selects a style from a centralized configuration.\n *\n * @param {TabVariant} [variant='line'] - The visual style of the tabs.\n * @param {TabItem[]} tabs - An array of objects, where each object defines a tab's label, icon, and content.\n * @param {string} [className] - Optional CSS classes for additional styling on the main container.\n * @returns {JSX.Element} The rendered Tabs element.\n */\nexport const Tabs = ({\n variant = \"line\",\n tabs,\n className,\n selectedIndex,\n onChange,\n customPaddingBottom,\n contentSpacing = \"sm\",\n fullHeight = false,\n iconLabelGap = 4,\n iconSize = 16,\n showBorder = true,\n headerHeight,\n tabPaddingX,\n tabListClassName,\n}: TabsProps) => {\n const styles =\n variant === \"line-icons\" || variant === \"only-icon\"\n ? variantStyles.line\n : variantStyles[variant];\n\n // Conditionally apply border based on showBorder prop\n const listClassName = showBorder\n ? styles.list\n : styles.list.replace(/border-b\\s+border-surface-3/g, \"\").trim();\n\n // Tab list style with optional fixed height\n // When headerHeight is set, align tabs to bottom so the underline indicator stays at the bottom\n const tabListStyle: React.CSSProperties = {};\n\n if (headerHeight) {\n tabListStyle.height = `${headerHeight}px`;\n tabListStyle.alignItems = 'flex-end';\n }\n\n // Calculate content spacing class or inline style\n const getContentSpacingClass = () => {\n if (typeof contentSpacing === \"number\") return \"\";\n // Use 'in' operator to check if key exists, to avoid falsy string '' being replaced with default\n return contentSpacing in contentSpacingMap\n ? contentSpacingMap[contentSpacing]\n : contentSpacingMap.sm;\n };\n\n const contentSpacingStyle =\n typeof contentSpacing === \"number\"\n ? { marginTop: `${contentSpacing}px` }\n : {};\n\n // Full height container styles (only when fullHeight is enabled)\n const containerStyle = fullHeight\n ? {\n height: \"100%\",\n maxHeight: \"100%\",\n overflow: \"hidden\",\n display: \"flex\",\n flexDirection: \"column\" as const,\n }\n : {};\n\n const groupStyle = fullHeight\n ? { height: \"100%\", maxHeight: \"100%\", flex: 1 }\n : {};\n\n return (\n <div className={clsx(\"w-full\", className)} style={containerStyle}>\n <Tab.Group\n selectedIndex={selectedIndex}\n onChange={onChange}\n as=\"div\"\n className={fullHeight ? \"flex flex-col overflow-hidden\" : undefined}\n style={groupStyle}\n >\n <Tab.List\n className={clsx(listClassName, tabListClassName)}\n style={tabListStyle}\n >\n {tabs.map((tab) => (\n <Tab\n key={tab.id}\n className={({ selected }) =>\n clsx(styles.tab, selected ? styles.selected : styles.unselected)\n }\n style={{\n ...(customPaddingBottom ? { paddingBottom: customPaddingBottom } : {}),\n ...(tabPaddingX !== undefined ? { paddingLeft: `${tabPaddingX}px`, paddingRight: `${tabPaddingX}px` } : {}),\n }}\n >\n {({ selected }) => {\n const iconToRender =\n selected && tab.selectedIcon ? tab.selectedIcon : tab.icon;\n return (\n <div\n className={clsx(\n \"flex items-center\",\n getGapClass(iconLabelGap)\n )}\n >\n {(variant === \"line-icons\" || variant === \"only-icon\") &&\n iconToRender &&\n React.isValidElement(iconToRender) &&\n React.cloneElement(\n iconToRender as React.ReactElement<{\n size?: number;\n color?: string;\n }>,\n {\n size: iconSize,\n color: \"currentColor\",\n }\n )}\n {variant !== \"only-icon\" && tab.label}\n </div>\n );\n }}\n </Tab>\n ))}\n </Tab.List>\n <Tab.Panels\n className={getContentSpacingClass()}\n style={\n fullHeight\n ? {\n display: \"flex\",\n flexDirection: \"column\",\n flex: 1,\n minHeight: 0,\n overflow: \"hidden\",\n ...contentSpacingStyle,\n }\n : contentSpacingStyle\n }\n >\n {tabs.map((tab) => (\n <Tab.Panel\n key={tab.id}\n style={\n fullHeight\n ? {\n minHeight: 0,\n flex: 1,\n overflowY: \"auto\",\n maxHeight: \"100%\",\n }\n : undefined\n }\n >\n {tab.content}\n </Tab.Panel>\n ))}\n </Tab.Panels>\n </Tab.Group>\n </div>\n );\n};\n","\"use client\";\n\nimport React, { useRef, useState, useEffect } from \"react\";\nimport { Tab } from \"@headlessui/react\";\nimport { clsx } from \"clsx\";\nimport { Add, ArrowRight2, ArrowLeft2 } from \"iconsax-react\";\nimport { XMark } from \"@/shared/icons\";\nimport { Button, } from \"../Button\";\nimport { Icon } from \"../Icon\";\n// =============================================\n// TYPES\n// =============================================\n\n/**\n * Defines the shape for a single header tab's data\n */\nexport interface HeaderTabItem {\n id: number | string;\n label: string;\n /** Whether this tab can be closed/removed */\n closeable?: boolean;\n}\n\n/**\n * Props for the HeaderTabs component\n */\nexport interface HeaderTabsProps {\n /** Array of tab objects to be rendered */\n tabs: HeaderTabItem[];\n /** Optional custom classes for the container */\n className?: string;\n /** The index of the selected tab */\n selectedIndex?: number;\n /** Callback fired when a tab is selected */\n onChange?: (index: number) => void;\n /** Callback fired when the add button is clicked */\n onAddTab?: () => void;\n /** Callback fired when the arrow right button is clicked */\n onArrowRightClick?: () => void;\n /** Callback fired when a tab close is requested */\n onCloseTab?: (index: number) => void;\n /** Fixed width for each tab in pixels. If not provided, tabs will be flex */\n tabWidth?: number;\n /** Distance in pixels to scroll when clicking pagination arrows. Default: 300 */\n scrollDistance?: number;\n}\n\nexport const HeaderTabs = ({\n tabs,\n className,\n selectedIndex,\n onChange,\n onAddTab,\n onArrowRightClick,\n onCloseTab,\n tabWidth,\n scrollDistance = 300,\n}: HeaderTabsProps) => {\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const [showLeftArrow, setShowLeftArrow] = useState(false);\n const [showRightArrow, setShowRightArrow] = useState(false);\n\n // Check scroll position and update arrow visibility\n const checkScroll = () => {\n if (!scrollContainerRef.current) return;\n\n const { scrollLeft, scrollWidth, clientWidth } = scrollContainerRef.current;\n\n setShowLeftArrow(scrollLeft > 0);\n setShowRightArrow(scrollLeft < scrollWidth - clientWidth - 1);\n };\n\n // Initial check and setup scroll listener\n useEffect(() => {\n checkScroll();\n\n const container = scrollContainerRef.current;\n if (container) {\n container.addEventListener('scroll', checkScroll);\n // Check on resize as well\n const resizeObserver = new ResizeObserver(checkScroll);\n resizeObserver.observe(container);\n\n return () => {\n container.removeEventListener('scroll', checkScroll);\n resizeObserver.disconnect();\n };\n }\n }, [tabs]);\n\n // Scroll left function\n const scrollLeft = () => {\n if (scrollContainerRef.current) {\n scrollContainerRef.current.scrollBy({ left: -scrollDistance, behavior: 'smooth' });\n }\n };\n\n // Scroll right function\n const scrollRight = () => {\n if (scrollContainerRef.current) {\n scrollContainerRef.current.scrollBy({ left: scrollDistance, behavior: 'smooth' });\n }\n };\n\n return (\n <div className={clsx(\"w-full h-full\", className)}>\n <Tab.Group className='h-full w-full' selectedIndex={selectedIndex} onChange={onChange}>\n {/* Tab List with Action Buttons */}\n <div className=\"relative flex items-center border-x border-surface-3 h-full w-full\">\n {/* Arrow Left Button */}\n {showLeftArrow && (\n <button\n onClick={scrollLeft}\n className=\"h-full hover:bg-surface-bg cursor-pointer px-6 border-r border-surface-3 shrink-0\"\n aria-label=\"Scroll left\"\n >\n <Icon className=\"text-med-em\" size='xs'><ArrowLeft2 /></Icon>\n </button>\n )}\n\n {/* Scrollable Tabs Container */}\n <div\n ref={scrollContainerRef}\n className=\"flex-1 h-full w-full overflow-x-auto [&::-webkit-scrollbar]:!hidden [-ms-overflow-style:none!important] [scrollbar-width:none!important]\"\n >\n <Tab.List className=\"flex min-w-full h-full \">\n {tabs.map((tab, index) => (\n <Tab\n as=\"div\"\n key={tab.id}\n className={({ selected }) =>\n clsx(\n \"relative py-3 font-medium border-r border-surface-3\",\n \"whitespace-nowrap h-full flex items-center cursor-pointer\",\n \"outline-none focus:outline-none focus-visible:outline-none focus:ring-0 active:outline-none\",\n tabWidth ? \"\" : \"flex-1\",\n selected\n ? \"text-high-em bg-white after:absolute border-b-2 border-b-black\"\n : \"text-low-em bg-surface-bg hover:bg-surface-2\"\n )\n }\n style={tabWidth ? { width: `${tabWidth}px`, minWidth: `${tabWidth}px` } : undefined}\n >\n {({ selected }) => (\n <div className=\"flex items-center justify-between gap-8 p-8 w-full\">\n <span className={`!truncate text-sm text-high-em font-medium ${selected ? \"text-high-em\" : \"text-low-em\"}`}>{tab.label}</span>\n {tab.closeable && selected && onCloseTab && (\n <Button\n onClick={(e) => {\n e.stopPropagation();\n onCloseTab(index);\n }}\n className=\"cursor-pointer\"\n leadingIcon={<Icon size='xs' className=\"text-med-em\"><XMark /></Icon>}\n aria-label=\"Close tab\"\n icons=\"only\"\n variant=\"neutral\"\n hierarchy=\"secondary\"\n />\n \n )}\n </div>\n )}\n </Tab>\n ))}\n </Tab.List>\n </div>\n\n {/* Fixed Action Buttons */}\n <div className=\"flex items-center h-full\">\n {/* Arrow Right Button - Scroll Pagination */}\n {showRightArrow && (\n <button\n onClick={onArrowRightClick || scrollRight}\n className=\"h-full hover:bg-surface-bg cursor-pointer px-6 border-x border-surface-3\"\n aria-label=\"Scroll right\"\n >\n <Icon className=\"text-low-em\" size='xs' ><ArrowRight2/></Icon>\n </button>\n )}\n\n {/* Add Button */}\n {onAddTab && (\n <button\n onClick={onAddTab}\n className={`h-full hover:bg-surface-bg cursor-pointer px-6 ${showRightArrow ? \"\" : \"border-l border-surface-3\" }`}\n aria-label=\"Add new tab\"\n >\n <Icon className=\"text-low-em\" size={12} ><Add /></Icon>\n </button>\n )}\n </div>\n </div>\n </Tab.Group>\n </div>\n );\n};\n\nHeaderTabs.displayName = \"HeaderTabs\";\n","\"use client\";\n\nimport React from 'react';\nimport { clsx } from 'clsx';\nimport { InfoCircle } from 'iconsax-react';\n\ntype TextAreaVariant = 'default' | 'danger';\ntype TextAreaResize = 'none' | 'vertical' | 'horizontal' | 'both';\n\nexport interface TextAreaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n variant?: TextAreaVariant;\n label?: string;\n hint?: string;\n resize?: TextAreaResize;\n customFontWeight?: number;\n customBackground?: string;\n}\n\nconst variantConfig = {\n default: {\n background: 'bg-surface-2 hover:bg-surface-3',\n border: 'border-transparent',\n hint: 'text-med-em',\n placeholder: 'placeholder-placeholder text-[14px]',\n text: 'text-med-em',\n },\n danger: {\n background: 'bg-danger-accent-1',\n border: 'border-danger-accent-2',\n hint: 'text-danger-em',\n placeholder: 'placeholder-danger-em text-[14px]',\n text: 'text-danger-em',\n },\n};\n\nconst disabledStyles = {\n wrapper: 'bg-surface-3 pointer-events-none border-transparent',\n label: '!text-disabled',\n hint: '!text-disabled',\n text: 'disabled:text-disabled',\n placeholder: 'disabled:placeholder-disabled',\n};\n\n/**\n * @file A styled multi-line text input component for forms.\n * @description This component provides a complete textarea unit, including a label, hint text,\n * and different visual states. Its appearance is controlled by the `variant` prop, which\n * pulls styles from a centralized configuration object for easy theming and maintenance.\n *\n * @param {TextAreaVariant} [variant='default'] - The visual variant of the textarea.\n * @param {string} [label] - The text label displayed above the textarea.\n * @param {string} [hint] - Helper text or an error message displayed below.\n * @param {TextAreaResize} [resize='vertical'] - Controls if and how the textarea can be resized.\n * @param {number} [customFontWeight] - Custom font weight (numeric value like 400, 500, 600, 700, etc.). Overrides default weight.\n * @param {string} [customBackground] - Custom background color (supports CSS color values or CSS variable names like 'med-em').\n * @param {boolean} [disabled] - If true, the textarea will be non-interactive.\n * @returns {JSX.Element} The rendered TextArea element.\n */\nexport const TextArea = ({\n variant = 'default',\n label,\n hint,\n disabled,\n resize = 'vertical',\n className,\n customFontWeight,\n customBackground,\n ...props\n}: TextAreaProps) => {\n const styles = variantConfig[variant];\n\n const fontWeight = customFontWeight ? customFontWeight : undefined;\n\n const backgroundColor = customBackground\n ? /^[a-z]+-[a-z0-9-]+$/i.test(customBackground)\n ? `var(--${customBackground})`\n : customBackground\n : undefined;\n\n const resizeStyles: Record<TextAreaResize, string> = {\n none: 'resize-none',\n vertical: 'resize-y',\n horizontal: 'resize-x',\n both: 'resize',\n };\n\n return (\n <div className={clsx('flex flex-col gap-1.5', className)}>\n {label && (\n <label htmlFor={props.id} className={clsx('font-semibold text-[14px] text-med-em', disabled && disabledStyles.label)}>\n {label}\n </label>\n )}\n\n <div\n className={clsx(\n 'relative flex items-center border rounded-xl transition-colors duration-200 flex-1',\n !customBackground && styles.background,\n styles.border,\n disabled && disabledStyles.wrapper\n )}\n style={{ backgroundColor }}\n >\n <textarea\n disabled={disabled}\n className={clsx(\n 'w-full h-full bg-transparent px-3.5 py-2.5 text-[12px] focus:outline-none min-h-[80px]',\n !customFontWeight && 'font-medium',\n styles.text,\n styles.placeholder,\n resizeStyles[resize],\n disabled && disabledStyles.text,\n disabled && disabledStyles.placeholder\n )}\n style={{ fontWeight }}\n {...props}\n />\n </div>\n\n {hint && (\n <div className={clsx('flex items-center gap-1.5 font-semibold text-[12px]', styles.hint, disabled && disabledStyles.hint)}>\n <InfoCircle size={16} color=\"currentColor\" />\n <span>{hint}</span>\n </div>\n )}\n </div>\n );\n};\n","'use client';\n\nexport interface ThemeToggleProps {\n /** Current theme: 'dark' or 'light' */\n theme?: 'dark' | 'light';\n /** Callback to toggle theme */\n onToggle: () => void;\n /** Optional custom class name */\n className?: string;\n}\n\n/**\n * A simple theme toggle button component.\n * This component is framework-agnostic and doesn't manage theme state internally.\n *\n * @example\n * ```tsx\n * // With next-themes\n * import { useTheme } from 'next-themes';\n *\n * function MyComponent() {\n * const { theme, setTheme } = useTheme();\n * return (\n * <ThemeToggle\n * theme={theme as 'dark' | 'light'}\n * onToggle={() => setTheme(theme === 'dark' ? 'light' : 'dark')}\n * />\n * );\n * }\n * ```\n */\nexport function ThemeToggle({ theme = 'light', onToggle, className }: ThemeToggleProps) {\n return (\n <button\n onClick={onToggle}\n className={className || \"rounded-lg border border-gray-300 bg-white px-4 py-2 text-sm font-medium text-dark-700 hover:bg-gray-50 dark:border-surface-3 dark:bg-surface-2 dark:text-low-em dark:hover:bg-surface-3\"}\n aria-label=\"Toggle theme\"\n >\n {theme === 'dark' ? (\n <span>Light Mode</span>\n ) : (\n <span>Dark Mode</span>\n )}\n </button>\n );\n}\n","\"use client\";\n\nimport * as Toast from \"@radix-ui/react-toast\";\nimport { twMerge } from \"tailwind-merge\";\nimport {\n forwardRef,\n ReactNode,\n useContext,\n createContext,\n useState,\n useCallback,\n} from \"react\";\nimport { XMark, InfoIcon } from \"@/shared/icons\";\nimport { Button } from \"@/shared/ui/Button\";\n\nexport interface ToastProps {\n title?: string;\n description?: string;\n variant?: \"default\" | \"danger\" | \"success\" | \"warning\" | \"custom\";\n action?: {\n label: string;\n onClick: () => void;\n };\n onOpenChange?: (open: boolean) => void;\n duration?: number;\n children?: ReactNode;\n icon?: ReactNode;\n className?: string;\n iconSize?: number;\n}\n\n// Shared toast styling constants\nconst toastBaseClasses =\n \"bg-white rounded-[20px] shadow-xl py-6 px-10 flex items-center gap-6 max-w-md leading-10\";\n\nconst toastVariantClasses: Record<string, string> = {\n default: \"border border-surface-3\",\n custom: \"border border-surface-3\",\n danger: \"border border-danger-accent-3\",\n success: \"border border-success-accent-3\",\n warning: \"border border-warning-accent-3\",\n};\n\nconst toastIconSize = 18;\nconst toastTitleClasses = \"text-base font-bold text-high-em leading-10\";\nconst toastDescriptionClasses = \"text-sm text-high-em leading-9\";\n\nconst getToastVariantClasses = (variant: ToastProps[\"variant\"], className?: string) => {\n return twMerge(toastBaseClasses, toastVariantClasses[variant || \"default\"], className);\n};\n\nexport const ToastComponent = forwardRef<\n React.ElementRef<typeof Toast.Root>,\n ToastProps\n>((props, ref) => {\n const {\n title,\n description,\n variant = \"default\",\n action,\n onOpenChange,\n duration = 5000,\n children,\n icon,\n className,\n iconSize = toastIconSize,\n ...toastProps\n } = props;\n\n const shouldShowIcon = variant !== \"custom\" || icon;\n\n return (\n <Toast.Root\n ref={ref}\n duration={duration}\n onOpenChange={onOpenChange}\n className={getToastVariantClasses(variant, className)}\n {...toastProps}\n >\n {shouldShowIcon && (\n <div>\n {variant === \"custom\" && icon ? icon : <InfoIcon size={iconSize} />}\n </div>\n )}\n\n <div className=\"flex-1\">\n {title && (\n <Toast.Title className={toastTitleClasses}>\n {title}\n </Toast.Title>\n )}\n {description && (\n <Toast.Description className={toastDescriptionClasses}>\n {description}\n </Toast.Description>\n )}\n </div>\n\n {action && (\n <>\n <div className=\"w-px h-8 bg-surface-3\" />\n <Toast.Action asChild altText={action.label} onClick={action.onClick}>\n <Button\n className=\"cursor-pointer\"\n variant=\"neutral\"\n hierarchy=\"quaternary\"\n size=\"md\"\n icons=\"none\"\n >\n {action.label}\n </Button>\n </Toast.Action>\n </>\n )}\n\n <Toast.Close\n asChild\n className=\"shrink-0 flex items-center justify-center\"\n >\n <Button\n className=\"cursor-pointer\"\n variant=\"neutral\"\n hierarchy=\"secondary\"\n size=\"xs\"\n icons=\"only\"\n leadingIcon={<XMark className=\"text-high-em\" size={8} />}\n />\n </Toast.Close>\n\n {children}\n </Toast.Root>\n );\n});\n\nToastComponent.displayName = \"Toast\";\n\n// Context for toast functionality\ninterface ToastItem extends Omit<ToastProps, \"children\" | \"onOpenChange\"> {\n id: string;\n}\n\nconst ToastContext = createContext<{\n toast: (options: Omit<ToastProps, \"children\" | \"onOpenChange\">) => void;\n} | null>(null);\n\n/**\n * Hook to access toast functionality.\n * @throws {Error} If used outside of ToastProvider\n * @returns {ToastContextValue} Toast context value\n *\n * @example\n * const { toast } = useToast();\n * // Example usage:\n * toast({\n * title: \"Notification\",\n * description: \"This is a toast notification\",\n * variant: \"success\",\n * action: {\n * label: \"Undo\",\n * onClick: () => console.log(\"Undo clicked\"),\n * },\n * });\n *\n */\nexport const useToast = () => {\n const context = useContext(ToastContext);\n\n if (!context) {\n throw new Error(\"useToast must be used within a ToastProvider\");\n }\n\n return context;\n};\n\n/**\n * Provides a context for toast functionality.\n *\n * @example\n * <ToastProvider>\n * <MyComponent />\n * </ToastProvider>\n *\n * @param {ReactNode} children - The children elements to render inside the provider.\n *\n * @returns {ReactElement} - The rendered provider element.\n */\nexport const ToastProvider = ({ children }: { children: ReactNode }) => {\n const [toasts, setToasts] = useState<ToastItem[]>([]);\n\n const toast = useCallback(\n (options: Omit<ToastProps, \"children\" | \"onOpenChange\">) => {\n const {\n title,\n description,\n variant = \"default\",\n action,\n duration = 5000,\n } = options;\n\n const newToast: ToastItem = {\n id: Math.random().toString(36).substr(2, 9),\n title,\n description,\n variant,\n action,\n duration,\n };\n\n setToasts((prev) => [...prev, newToast]);\n },\n []\n );\n\n const handleOpenChange = useCallback((open: boolean, toastId: string) => {\n if (!open) {\n setToasts((prev) => prev.filter((t) => t.id !== toastId));\n }\n }, []);\n\n return (\n <ToastContext.Provider value={{ toast }}>\n <Toast.Provider swipeDirection=\"right\">\n {children}\n <Toast.Viewport className=\"fixed top-5 right-5 z-[999] flex flex-col gap-4 w-full max-w-[400px]\" />\n {toasts.map((toastItem) => (\n <Toast.Root\n key={toastItem.id}\n duration={toastItem.duration}\n onOpenChange={(open) => handleOpenChange(open, toastItem.id)}\n className={getToastVariantClasses(toastItem.variant)}\n >\n {toastItem.variant !== \"custom\" && (\n <div className=\"shrink-0 w-10 h-12 flex items-center justify-center\">\n <InfoIcon size={toastIconSize} />\n </div>\n )}\n\n <div className=\"flex-1\">\n {toastItem.title && (\n <Toast.Title className={toastTitleClasses}>\n {toastItem.title}\n </Toast.Title>\n )}\n {toastItem.description && (\n <Toast.Description className={toastDescriptionClasses}>\n {toastItem.description}\n </Toast.Description>\n )}\n </div>\n\n {toastItem.action && (\n <>\n <div className=\"w-px h-12 bg-surface-3\" />\n <Toast.Action\n asChild\n altText={toastItem.action.label}\n onClick={toastItem.action.onClick}\n >\n <Button\n className=\"cursor-pointer\"\n variant=\"neutral\"\n hierarchy=\"quaternary\"\n size=\"md\"\n icons=\"none\"\n >\n {toastItem.action.label}\n </Button>\n </Toast.Action>\n </>\n )}\n\n <Toast.Close\n asChild\n className=\"shrink-0 flex items-center justify-center\"\n >\n <Button\n className=\"cursor-pointer\"\n variant=\"neutral\"\n hierarchy=\"secondary\"\n size=\"xs\"\n icons=\"only\"\n leadingIcon={<XMark className=\"text-high-em\" size={8} />}\n />\n </Toast.Close>\n </Toast.Root>\n ))}\n </Toast.Provider>\n </ToastContext.Provider>\n );\n};\n","\"use client\";\n\nimport React from 'react';\nimport { clsx } from 'clsx';\n\n// Type definitions for the component's props.\ntype ToggleSize = 'small' | 'medium' | 'large';\n\n/**\n * Defines the public API for the Toggle component, omitting the native 'size'\n * attribute to avoid conflicts with the custom size prop.\n */\nexport interface ToggleProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> {\n /** The size of the toggle switch. */\n size?: ToggleSize;\n}\n\n// Centralized style configuration for each size.\nconst toggleConfig = {\n small: {\n wrapper: 'w-[36px] h-[20px]',\n knob: 'w-[16px] h-[16px]',\n knobOn: 'translate-x-[16px]',\n },\n medium: {\n wrapper: 'w-[44px] h-[24px]',\n knob: 'w-[20px] h-[20px]',\n knobOn: 'translate-x-[20px]',\n },\n large: {\n wrapper: 'w-[52px] h-[28px]',\n knob: 'w-[24px] h-[24px]',\n knobOn: 'translate-x-[24px]',\n },\n};\n\n// Centralized style configuration for different visual states.\nconst stateStyles = {\n bgOff: 'bg-surface-1 hover:bg-surface-2',\n bgOn: 'bg-black hover:bg-low-em',\n bgDisabled: 'bg-surface-3',\n knob: 'bg-white shadow-[0_1px_2px_0_rgba(10,13,18,0.06)]',\n knobDisabled: 'bg-surface-4',\n focus: 'peer-focus:ring-2 peer-focus:ring-low-em peer-active:ring-2 peer-active:ring-low-em',\n disabled: 'cursor-not-allowed',\n};\n\n/**\n * @file A customizable toggle switch component for binary state selection.\n * @description This component renders a visually styled toggle that wraps a native,\n * accessible checkbox input. It uses the `peer` utility from Tailwind CSS to react\n * to the state of the hidden checkbox.\n *\n * @param {'small' | 'medium' | 'large'} [size='medium'] - The size of the toggle switch.\n * @param {boolean} [checked] - The controlled state of the toggle (on/off).\n * @param {boolean} [disabled] - If true, the toggle will be non-interactive.\n * @param {function} [onChange] - The callback function fired when the toggle state changes.\n * @returns {JSX.Element} The rendered Toggle element.\n */\nexport const Toggle = ({ size = 'medium', checked, disabled, className, ...props }: ToggleProps) => {\n const config = toggleConfig[size];\n\n return (\n <label\n className={clsx(\n 'relative inline-flex items-center',\n disabled ? stateStyles.disabled : 'cursor-pointer',\n className\n )}\n >\n <input\n type=\"checkbox\"\n className=\"sr-only peer\"\n checked={checked}\n disabled={disabled}\n {...props}\n />\n <div\n className={clsx(\n config.wrapper,\n 'relative rounded-full transition-colors duration-200 ease-in-out',\n 'flex items-center',\n disabled\n ? stateStyles.bgDisabled\n : checked ? stateStyles.bgOn : stateStyles.bgOff,\n !disabled && stateStyles.focus,\n )}\n >\n <div\n className={clsx(\n config.knob,\n disabled ? stateStyles.knobDisabled : stateStyles.knob,\n 'absolute top-[2px] left-[2px] rounded-full transition-transform duration-200 ease-in-out',\n checked && config.knobOn,\n )}\n />\n </div>\n </label>\n );\n};\n","\n'use client';\n\nimport React, { ReactNode } from 'react';\n\n/**\n * Props for the TypesPanel component\n */\nexport interface TypesPanelProps {\n /**\n * Content to be rendered inside the panel\n */\n children?: ReactNode;\n\n /**\n * Additional CSS classes to apply to the panel container\n */\n className?: string;\n\n /**\n * Which side should have a border\n * - 'left': Left border\n * - 'right': Right border\n * - 'none': No border\n */\n borderSide?: 'left' | 'right' | 'none';\n\n /**\n * Border color style from design system\n * - 'surface-3': Lighter border (default)\n * - 'surface-4': Darker border\n */\n borderStyle?: 'surface-3' | 'surface-4';\n}\n\nexport const TypesPanel = React.memo<TypesPanelProps>(({\n children,\n className,\n borderSide = 'none',\n borderStyle = 'surface-3',\n}) => {\n // Build border classes based on props\n const borderClasses = React.useMemo(() => {\n if (borderSide === 'none') return '';\n\n const side = borderSide === 'left' ? 'border-l' : 'border-r';\n const style = borderStyle === 'surface-3' ? 'border-surface-3' : 'border-surface-4';\n\n return `${side} ${style}`;\n }, [borderSide, borderStyle]);\n\n // Base classes - no background, inherits from parent Panel\n const baseClasses = 'h-full w-full flex flex-col';\n\n return (\n <div\n className={`${baseClasses} ${borderClasses} ${className || ''}`}\n >\n {children}\n </div>\n );\n});\n\nTypesPanel.displayName = 'TypesPanel';\n","\"use client\";\n\nimport React from 'react';\nimport { GridDraggableItem } from '@/shared/ui/GridDraggableItem';\nimport { Divider } from '@/shared/ui/Divider';\nimport {\n Category,\n} from 'iconsax-react';\n\n/**\n * Field type item structure\n */\nexport interface FieldType {\n id: string;\n label: string;\n icon: React.ReactNode;\n category: string;\n}\n\n/**\n * Category structure\n */\nexport interface Category {\n id: string;\n title: string;\n items: FieldType[];\n}\n\n/**\n * Props interface for the TypesPanelBodyGrid component.\n */\nexport interface TypesPanelBodyGridProps {\n /**\n * Array of categories with items to display\n * Component will render these categories in grid layout\n */\n categories?: Category[];\n\n /**\n * Optional callback when an item is clicked\n */\n onItemClick?: (itemId: string) => void;\n\n /**\n * Optional custom render function for each item\n * Allows consumers to wrap items with custom behavior (e.g., drag & drop)\n * If not provided, uses default GridDraggableItem rendering\n */\n renderItem?: (item: FieldType, options: { onClick: () => void }) => React.ReactNode;\n\n /**\n * Optional custom CSS classes\n */\n className?: string;\n}\n\nexport const TypesPanelBodyGrid: React.FC<TypesPanelBodyGridProps> = ({\n categories = [],\n onItemClick,\n renderItem,\n className = '',\n}) => {\n\n const handleItemClick = (itemId: string) => {\n if (onItemClick) {\n onItemClick(itemId);\n }\n };\n\n return (\n <div className={`px-6 py-8 flex-1 overflow-y-auto ${className}`}>\n {categories.map((category, index) => (\n <div key={category.id} className=\"mb-8 last:mb-0\">\n {/* Category Header */}\n <h3 className=\"font-inter font-semibold text-sm text-med-em mb-8\">\n {category.title}\n </h3>\n\n {/* Grid of Field Types */}\n <div className=\"grid grid-cols-[repeat(auto-fill,minmax(70px,1fr))] gap-6\">\n {category.items.map((item) => (\n <React.Fragment key={item.id}>\n {renderItem ? (\n renderItem(item, { onClick: () => handleItemClick(item.id) })\n ) : (\n <GridDraggableItem\n icon={item.icon}\n text={item.label}\n onClick={() => handleItemClick(item.id)}\n />\n )}\n </React.Fragment>\n ))}\n </div>\n\n {/* Divider at the end of each category except the last one */}\n {index < categories.length - 1 && (\n <div className=\"mt-8\">\n <Divider />\n </div>\n )}\n </div>\n ))}\n\n {categories.length === 0 && (\n <div className=\"text-center py-12\">\n <p className=\"text-sm text-med-em\">No hay elementos en esta categoría</p>\n </div>\n )}\n </div>\n );\n};\n","\"use client\";\n\nimport React from 'react';\nimport { DragAndDropListItem } from '@/shared/ui/DragAndDropListItem';\nimport { Divider } from '@/shared/ui/Divider';\nimport { QuestionCircle } from '@/shared/icons';\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\nimport {\n Category,\n HambergerMenu,\n} from 'iconsax-react';\n\n/**\n * Field type item structure\n */\nexport interface FieldType {\n id: string;\n label: string;\n icon: React.ReactNode;\n category: string;\n}\n\n/**\n * Category structure\n */\nexport interface Category {\n id: string;\n title: string;\n items: FieldType[];\n}\n\n/**\n * Props interface for the TypesPanelBodyList component.\n */\nexport interface TypesPanelBodyListProps {\n /**\n * Array of categories with items to display\n * Component will render these categories in list layout\n */\n categories?: Category[];\n\n /**\n * Optional callback when an item is clicked\n */\n onItemClick?: (itemId: string) => void;\n\n /**\n * Optional custom render function for each item\n * Allows consumers to wrap items with custom behavior (e.g., drag & drop)\n * If not provided, uses default DragAndDropListItem rendering\n */\n renderItem?: (item: FieldType, options: { onClick: () => void }) => React.ReactNode;\n\n /**\n * Optional custom CSS classes\n */\n className?: string;\n}\n\nexport const TypesPanelBodyList: React.FC<TypesPanelBodyListProps> = ({\n categories = [],\n onItemClick,\n renderItem,\n className = '',\n}) => {\n\n const handleItemClick = (itemId: string) => {\n if (onItemClick) {\n onItemClick(itemId);\n }\n };\n\n return (\n <TooltipPrimitive.Provider delayDuration={300}>\n <div className={`px-6 py-8 flex-1 overflow-y-auto ${className}`}>\n {categories.map((category, index) => (\n <div key={category.id} className=\"mb-8 last:mb-0\">\n {/* Category Header */}\n <h3 className=\"font-inter font-semibold text-sm text-med-em mb-8\">\n {category.title}\n </h3>\n\n {/* List of Field Types */}\n <div className=\"flex flex-col gap-6\">\n {category.items.map((item) => (\n <React.Fragment key={item.id}>\n {renderItem ? (\n renderItem(item, { onClick: () => handleItemClick(item.id) })\n ) : (\n <DragAndDropListItem\n leadingIcon={<HambergerMenu size={20} />}\n leadingIconColor=\"text-disabled\"\n icon={<QuestionCircle />}\n iconColor=\"text-disabled\"\n tooltipContent={`Add ${item.label} field type`}\n onClick={() => handleItemClick(item.id)}\n >\n {item.label}\n </DragAndDropListItem>\n )}\n </React.Fragment>\n ))}\n </div>\n\n {/* Divider at the end of each category except the last one */}\n {index < categories.length - 1 && (\n <div className=\"mt-8\">\n <Divider />\n </div>\n )}\n </div>\n ))}\n\n {categories.length === 0 && (\n <div className=\"text-center py-12\">\n <p className=\"text-sm text-med-em\">No hay elementos en esta categoría</p>\n </div>\n )}\n </div>\n </TooltipPrimitive.Provider>\n );\n};\n","\"use client\";\n\nimport React, { useState } from 'react';\nimport { LabelWithTooltip } from '@/shared/ui/LabelWithTooltip';\nimport { Divider } from '@/shared/ui/Divider';\nimport { Dropdown } from '@/shared/ui/Dropdown';\nimport { ButtonGroup } from '@/shared/ui/ButtonGroup';\nimport { Category, User, Task } from 'iconsax-react';\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\n\n/**\n * Props interface for the TypesPanelHeader component.\n */\nexport interface TypesPanelHeaderProps {\n /**\n * Optional custom CSS classes\n */\n className?: string;\n\n /**\n * Selected category type (controlled)\n */\n selectedType?: string;\n\n /**\n * Callback when category type changes\n */\n onTypeChange?: (type: string) => void;\n\n /**\n * Selected view mode (list/grid)\n */\n selectedView?: string | number;\n\n /**\n * Callback when view mode changes\n */\n onViewChange?: (view: string | number) => void;\n}\n\n// Hardcoded dropdown items\nconst dropdownItems = [\n {\n id: 'todos',\n title: 'Todos',\n showCheckbox: false,\n leadingIcon: <User size={16} />,\n showLeadingIcon: true,\n showTrailingIcon: false,\n },\n {\n id: 'basicos',\n title: 'Básicos',\n showCheckbox: false,\n leadingIcon: <User size={16} />,\n showLeadingIcon: true,\n showTrailingIcon: false,\n },\n {\n id: 'avanzados',\n title: 'Avanzados',\n showCheckbox: false,\n leadingIcon: <User size={16} />,\n showLeadingIcon: true,\n showTrailingIcon: false,\n },\n {\n id: 'multimedia',\n title: 'Multimedia',\n showCheckbox: false,\n leadingIcon: <User size={16} />,\n showLeadingIcon: true,\n showTrailingIcon: false,\n },\n {\n id: 'relaciones',\n title: 'Relaciones',\n showCheckbox: false,\n leadingIcon: <User size={16} />,\n showLeadingIcon: true,\n showTrailingIcon: false,\n },\n];\n\n// Hardcoded button group options\nconst viewOptions = [\n {\n value: 'list',\n icon: <Task />,\n },\n {\n value: 'grid',\n icon: <Category />,\n },\n];\n\nexport const TypesPanelHeader: React.FC<TypesPanelHeaderProps> = ({\n className = '',\n selectedType: controlledSelectedType,\n onTypeChange,\n selectedView: controlledSelectedView,\n onViewChange,\n}) => {\n const [internalSelectedType, setInternalSelectedType] = useState<string>('basicos');\n const [internalSelectedView, setInternalSelectedView] = useState<string | number>('list');\n\n // Use controlled props if provided, otherwise use internal state\n const selectedType = controlledSelectedType !== undefined ? controlledSelectedType : internalSelectedType;\n const selectedView = controlledSelectedView !== undefined ? controlledSelectedView : internalSelectedView;\n\n const handleTypeChange = (type: string) => {\n if (onTypeChange) {\n onTypeChange(type);\n } else {\n setInternalSelectedType(type);\n }\n };\n\n const handleViewChange = (view: string | number) => {\n if (onViewChange) {\n onViewChange(view);\n } else {\n setInternalSelectedView(view);\n }\n };\n\n return (\n <TooltipPrimitive.Provider delayDuration={300}>\n <div className={`flex flex-col ${className}`}>\n {/* Label with Tooltip */}\n <div className=\"px-6 pt-9 pb-8\">\n <LabelWithTooltip\n tooltipContent=\"Select and configure the type of data field you want to create\"\n labelClassName=\"font-inter font-semibold text-sm text-high-em\"\n className=\"flex items-center justify-between w-full\"\n >\n Types\n </LabelWithTooltip>\n </div>\n\n {/* First Divider */}\n <Divider />\n\n {/* Controls Row: Dropdown + ButtonGroup */}\n <div className=\"flex items-center justify-between gap-4 py-8 px-6\">\n <div className=\"flex-1\">\n <Dropdown\n items={dropdownItems.map(item => ({\n ...item,\n showLeadingIcon: false,\n className: '!h-[34px]',\n }))}\n value={selectedType}\n onChange={handleTypeChange}\n placeholder=\"Input Text\"\n size=\"md\"\n menuSize=\"sm\"\n showLeadingIcon={true}\n />\n </div>\n <ButtonGroup\n options={viewOptions}\n value={selectedView}\n onChange={handleViewChange}\n size=\"sm\"\n />\n </div>\n\n {/* Second Divider */}\n <Divider />\n </div>\n </TooltipPrimitive.Provider>\n );\n};\n","\"use client\";\n\nimport React, { useState, useCallback } from \"react\";\nimport { Divider } from \"@/shared/ui/Divider\";\nimport { InputField } from \"@/shared/ui/InputField\";\nimport { ButtonGroup } from \"@/shared/ui/ButtonGroup\";\nimport { SearchNormal1 } from \"iconsax-react\";\n\n/**\n * Props interface for the TypesPanelHeaderSearch component.\n */\nexport interface TypesPanelHeaderSearchProps {\n /**\n * Optional custom CSS classes\n */\n className?: string;\n\n /**\n * Search query value (controlled)\n */\n searchQuery?: string;\n\n /**\n * Callback when search query changes\n */\n onSearchChange?: (query: string) => void;\n\n /**\n * Search bar placeholder text\n * @default 'Search...'\n */\n searchPlaceholder?: string;\n\n /**\n * Selected view mode (list/grid)\n */\n selectedView?: string | number;\n\n /**\n * Callback when view mode changes\n */\n onViewChange?: (view: string | number) => void;\n\n /**\n * Button group options for view toggle\n */\n viewOptions?: Array<{\n value: string | number;\n icon: React.ReactNode;\n }>;\n\n /**\n * ButtonGroup size\n * @default 'sm'\n */\n buttonGroupSize?: \"sm\" | \"md\" | \"lg\";\n}\n\nexport const TypesPanelHeaderSearch: React.FC<TypesPanelHeaderSearchProps> = ({\n className = \"\",\n searchQuery: controlledSearchQuery,\n onSearchChange,\n searchPlaceholder = \"Search...\",\n selectedView: controlledSelectedView,\n onViewChange,\n viewOptions = [],\n buttonGroupSize = \"sm\",\n}) => {\n const [internalSearchQuery, setInternalSearchQuery] = useState<string>(\"\");\n const [internalSelectedView, setInternalSelectedView] = useState<\n string | number\n >(\"list\");\n\n // Use controlled props if provided, otherwise use internal state\n const searchQuery =\n controlledSearchQuery !== undefined\n ? controlledSearchQuery\n : internalSearchQuery;\n const selectedView =\n controlledSelectedView !== undefined\n ? controlledSelectedView\n : internalSelectedView;\n\n const handleSearchChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n if (onSearchChange) {\n onSearchChange(value);\n } else {\n setInternalSearchQuery(value);\n }\n },\n [onSearchChange]\n );\n\n const handleViewChange = (view: string | number) => {\n if (onViewChange) {\n onViewChange(view);\n } else {\n setInternalSelectedView(view);\n }\n };\n\n return (\n <div className={`flex flex-col ${className}`}>\n {/* First Divider */}\n <Divider />\n\n {/* Controls Row: Search + ButtonGroup */}\n <div className=\"flex items-center justify-between gap-4 py-8 px-6\">\n <div className=\"flex-1\">\n <InputField\n type=\"search\"\n placeholder={searchPlaceholder}\n value={searchQuery}\n onChange={handleSearchChange}\n trailingIcon={<SearchNormal1 size={16} color=\"currentColor\" />}\n />\n </div>\n <ButtonGroup\n options={viewOptions}\n value={selectedView}\n onChange={handleViewChange}\n size={buttonGroupSize}\n />\n </div>\n\n {/* Second Divider */}\n <Divider />\n </div>\n );\n};\n","'use client';\n\nimport React from 'react';\nimport { clsx } from 'clsx';\nimport { ArrowLeft2 } from 'iconsax-react';\n\nexport interface PanelHeaderProps {\n /** Title text displayed in the header */\n title: string;\n /** Optional back button configuration */\n backButton?: {\n onClick: () => void;\n 'aria-label'?: string;\n };\n /** Optional actions to display on the right side (icons, menus, etc.) */\n actions?: React.ReactNode;\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * PanelHeader - Standardized header for panels\n *\n * Provides consistent styling across all panel headers:\n * - Height: 56px (fixed via h-14)\n * - Typography: Inter Semi Bold, 14px\n * - Border: bottom border with surface-3 color\n * - Supports optional back button and right-side actions\n *\n * @example\n * // Simple header with title only\n * <PanelHeader title=\"Types\" />\n *\n * @example\n * // Header with back button and actions\n * <PanelHeader\n * title=\"Data\"\n * backButton={{ onClick: handleBack }}\n * actions={<ContextualMenu ... />}\n * />\n */\nexport const PanelHeader: React.FC<PanelHeaderProps> = ({\n title,\n backButton,\n actions,\n className,\n}) => {\n return (\n <div\n className={clsx(\n // Layout\n 'flex items-center gap-2',\n // Sizing - fixed height 56px\n 'h-14 px-4',\n // Border\n 'border-b border-surface-3',\n // Allow customization\n className\n )}\n >\n {/* Back button (optional) */}\n {backButton && (\n <button\n type=\"button\"\n onClick={backButton.onClick}\n aria-label={backButton['aria-label'] || 'Go back'}\n className={clsx(\n // Size: 42x42px\n 'size-[42px]',\n // Layout\n 'flex items-center justify-center shrink-0',\n // Styling\n 'rounded-lg',\n // Interaction\n 'hover:bg-surface-1 transition-colors',\n // Focus\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-brand-secondary-main'\n )}\n >\n <ArrowLeft2 size={20} color=\"currentColor\" className=\"text-high-em\" />\n </button>\n )}\n\n {/* Title and actions container */}\n <div className=\"flex-1 flex items-center justify-between min-w-0\">\n {/* Title */}\n <h2\n className={clsx(\n // Typography: Inter Semi Bold, 14px, line-height 22px\n 'text-sm font-semibold leading-[22px]',\n // Color\n 'text-high-em',\n // Truncate if too long\n 'truncate'\n )}\n >\n {title}\n </h2>\n\n {/* Actions (optional) */}\n {actions && (\n <div className=\"flex items-center gap-2 shrink-0\">\n {actions}\n </div>\n )}\n </div>\n </div>\n );\n};\n\nPanelHeader.displayName = 'PanelHeader';\n\nexport default PanelHeader;\n","\"use client\";\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { clsx } from 'clsx';\nimport { Avatar, type AvatarProps } from '../Avatar/Avatar';\nimport { Badge, type BadgeTheme } from '../Badge/Badge';\nimport { Toggle } from '../Toggle/Toggle';\n\n/**\n * Represents a single menu item in the user menu.\n */\nexport interface UserMenuItem {\n /** Unique identifier for the menu item */\n id: string;\n /** Display label for the menu item */\n label: string;\n /** Optional icon component to display before the label */\n icon?: React.ReactNode;\n /** Callback fired when the menu item is clicked */\n onClick?: () => void;\n\n /** Optional badge to display on the right side */\n badge?: {\n label: string;\n theme?: BadgeTheme;\n };\n\n /** Optional toggle switch to display on the right side */\n switch?: {\n checked: boolean;\n onChange: (checked: boolean) => void;\n };\n\n /** Optional custom trailing content (overrides badge and switch) */\n trailing?: React.ReactNode;\n\n /** Whether this is a destructive action (renders in red) */\n destructive?: boolean;\n /** Whether the item is disabled */\n disabled?: boolean;\n}\n\n/**\n * User data for the avatar trigger\n */\nexport interface UserMenuUser {\n /** User's full name */\n name: string;\n /** User's email (optional subtitle) */\n email?: string;\n /** User's avatar image URL */\n avatar?: string;\n /** User's initials (fallback if no avatar) */\n initials?: string;\n /** Optional status badge on avatar */\n statusBadge?: AvatarProps['statusBadge'];\n}\n\n/**\n * Defines the public API for the UserMenu component.\n */\nexport interface UserMenuProps {\n /** User data for the avatar trigger */\n user: UserMenuUser;\n /** Array of menu item sections (each section is an array of items) */\n sections: UserMenuItem[][];\n /** Alignment of the menu relative to the trigger */\n align?: 'left' | 'right';\n /** Offset from the trigger in pixels */\n offset?: number;\n /** Optional custom CSS classes for the container */\n className?: string;\n /** Avatar size */\n avatarSize?: AvatarProps['size'];\n}\n\n/**\n * @file A user menu component that combines an avatar trigger with a contextual menu.\n * @description This component renders a user avatar that opens a dropdown menu when clicked.\n * It supports sectioned items, badges, toggle switches, icons, and destructive actions.\n *\n * @param {UserMenuUser} user - User data for the avatar trigger\n * @param {UserMenuItem[][]} sections - Array of menu item sections\n * @param {'left' | 'right'} [align='right'] - Menu alignment relative to trigger\n * @param {number} [offset=8] - Distance from trigger in pixels\n * @param {string} [className] - Optional CSS classes for the container\n * @param {AvatarProps['size']} [avatarSize='md'] - Size of the avatar\n * @returns {JSX.Element} The rendered UserMenu component\n */\nexport const UserMenu = ({\n user,\n sections,\n align = 'right',\n offset = 8,\n className,\n avatarSize = 'md',\n}: UserMenuProps) => {\n const [isOpen, setIsOpen] = useState(false);\n const menuRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n\n // Close menu when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n menuRef.current &&\n !menuRef.current.contains(event.target as Node) &&\n triggerRef.current &&\n !triggerRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }\n }, [isOpen]);\n\n const handleItemClick = (item: UserMenuItem) => {\n if (!item.disabled && item.onClick) {\n item.onClick();\n setIsOpen(false);\n }\n };\n\n const handleToggleChange = (item: UserMenuItem, checked: boolean) => {\n if (item.switch?.onChange) {\n item.switch.onChange(checked);\n }\n };\n\n return (\n <div className={clsx('relative inline-block', className)}>\n {/* Avatar Trigger */}\n <div\n ref={triggerRef}\n onClick={() => setIsOpen(!isOpen)}\n className=\"cursor-pointer\"\n >\n <Avatar\n size={avatarSize}\n imageUrl={user.avatar}\n initials={user.initials || user.name.charAt(0)}\n statusBadge={user.statusBadge}\n />\n </div>\n\n {/* Menu Dropdown */}\n {isOpen && (\n <div\n ref={menuRef}\n className={clsx(\n 'absolute z-50 mt-2 min-w-[280px] rounded-lg bg-white shadow-lg border border-surface-3',\n align === 'right' ? 'right-0' : 'left-0'\n )}\n style={{ top: `calc(100% + ${offset}px)` }}\n >\n {/* User Info Header */}\n <div className=\"px-10 py-8 border-b border-surface-3\">\n <p className=\"text-sm font-semibold text-high-em\">{user.name}</p>\n {user.email && (\n <p className=\"text-xs text-low-em mt-1\">{user.email}</p>\n )}\n </div>\n\n {/* Menu Sections */}\n <div className=\"py-3\">\n {sections.map((section, sectionIndex) => (\n <React.Fragment key={sectionIndex}>\n {section.map((item) => (\n <button\n key={item.id}\n onClick={() => handleItemClick(item)}\n disabled={item.disabled || !!item.switch}\n className={clsx(\n 'w-full px-10 py-4 text-left text-sm flex items-center gap-3 transition-colors',\n !item.switch && 'hover:bg-surface-1',\n item.destructive\n ? 'text-danger-main'\n : 'text-high-em',\n item.disabled && 'opacity-50 cursor-not-allowed'\n )}\n >\n {/* Icon */}\n {item.icon && (\n <span className=\"flex-shrink-0 flex items-center justify-center text-current\">\n {item.icon}\n </span>\n )}\n\n {/* Label */}\n <span className=\"flex-1 font-normal\">{item.label}</span>\n\n {/* Trailing Content */}\n {item.trailing && (\n <span className=\"flex-shrink-0\">{item.trailing}</span>\n )}\n\n {/* Badge */}\n {!item.trailing && item.badge && (\n <Badge\n theme={item.badge.theme || 'success'}\n size=\"xs\"\n variant=\"simple\"\n >\n {item.badge.label}\n </Badge>\n )}\n\n {/* Toggle Switch */}\n {!item.trailing && item.switch && (\n <Toggle\n size=\"small\"\n checked={item.switch.checked}\n onChange={(e) => handleToggleChange(item, e.target.checked)}\n onClick={(e) => e.stopPropagation()}\n />\n )}\n </button>\n ))}\n\n {/* Section Separator */}\n {sectionIndex < sections.length - 1 && (\n <div className=\"my-3 border-t border-surface-3\" />\n )}\n </React.Fragment>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n};\n","\"use client\";\n\nimport { useState, useEffect } from \"react\";\nimport { DayPicker, DateRange } from \"react-day-picker\";\nimport { ArrowLeft2, ArrowRight2 } from \"iconsax-react\";\nimport { clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nimport { Button } from \"./../Button/Button\";\n\nimport \"react-day-picker/style.css\";\nimport \"./DateRangePicker.css\";\n\nexport type { DateRange } from \"react-day-picker\";\nexport type PickType = 'range' | 'single';\n\n/**\n * Props for the DateRangePicker component\n */\nexport interface DateRangePickerProps {\n /** Currently selected date range */\n selected?: DateRange;\n /** Callback fired when the date selection changes */\n onSelect?: (range: DateRange | undefined) => void;\n /** If true, disables the date picker */\n disabled?: boolean;\n /** Callback fired when the cancel button is clicked */\n onCancel?: () => void;\n /** Callback fired when the accept button is clicked */\n onAccept?: (range: DateRange | undefined) => void;\n /** If true, displays two months side by side */\n extraMonth?: boolean;\n /** Selection mode: 'range' for date ranges, 'single' for single dates */\n pickType?: PickType;\n /** Additional CSS classes */\n className?: string;\n /** Label for the cancel button */\n cancelLabel?: string;\n /** Label for the accept button */\n acceptLabel?: string;\n}\n\n/**\n * DateRangePicker - A simple calendar UI component for date selection\n *\n * Features:\n * - Range or single date selection\n * - Built-in Cancel and Accept buttons\n * - Optional dual-month display\n *\n * @example\n * <DateRangePicker\n * selected={dateRange}\n * onSelect={setDateRange}\n * onAccept={(range) => console.log(range)}\n * pickType=\"range\"\n * />\n */\nexport const DateRangePicker = ({\n selected: selectedProp,\n onSelect,\n disabled = false,\n onCancel,\n onAccept,\n extraMonth = false,\n pickType = 'range',\n className = \"\",\n cancelLabel = \"Cancel\",\n acceptLabel = \"Accept\",\n}: DateRangePickerProps) => {\n const [internalSelected, setInternalSelected] = useState<DateRange | undefined>(selectedProp);\n\n useEffect(() => {\n setInternalSelected(selectedProp);\n }, [selectedProp]);\n\n const selected = internalSelected;\n\n const handleSelect = (range: DateRange | undefined) => {\n setInternalSelected(range);\n if (onSelect) {\n onSelect(range);\n }\n };\n\n const handleCancel = () => {\n setInternalSelected(undefined);\n if (onCancel) {\n onCancel();\n }\n };\n\n const handleAccept = () => {\n if (onAccept) {\n onAccept(selected);\n }\n };\n\n // Prepare dynamic props based on pickType\n const dayPickerProps = pickType === 'range'\n ? {\n mode: 'range' as const,\n selected: selected,\n onSelect: handleSelect,\n }\n : {\n mode: 'single' as const,\n selected: selected?.from,\n onSelect: (date: Date | undefined) => handleSelect(date ? { from: date } : undefined),\n };\n\n return (\n <div\n className={twMerge(\n clsx(\n 'font-family-inter bg-white border border-surface-3 rounded-[20px] w-fit',\n disabled && 'opacity-50 pointer-events-none',\n className\n )\n )}\n >\n <DayPicker\n {...dayPickerProps}\n disabled={disabled}\n numberOfMonths={extraMonth ? 2 : 1}\n showOutsideDays\n className=\"datepicker-calendar p-2.5\"\n components={{\n Chevron: ({ orientation }) =>\n orientation === \"left\" ? (\n <ArrowLeft2 size={16} color=\"var(--high-em)\" />\n ) : (\n <ArrowRight2 size={16} color=\"var(--high-em)\" />\n ),\n }}\n />\n <div className=\"border-t border-surface-3 px-2.5 py-2.5 pl-5 self-end justify-end\">\n <div className=\"flex gap-2 self-end justify-end\">\n <Button\n className=\"mr-8\"\n variant=\"neutral\"\n size=\"sm\"\n hierarchy=\"secondary\"\n onClick={handleCancel}\n disabled={disabled}\n >\n {cancelLabel}\n </Button>\n <Button\n variant=\"brand\"\n size=\"sm\"\n hierarchy=\"primary\"\n onClick={handleAccept}\n disabled={disabled}\n >\n {acceptLabel}\n </Button>\n </div>\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { clsx } from \"clsx\";\nimport { ProductIcon, ProductIconType, ProductIconSize, ProductIconVariant } from \"../ProductIcon/ProductIcon\";\nimport { Link, LinkProps } from \"../Link/Link\";\nimport { getGapClass } from \"@/shared/utils\";\n\nexport interface CardActionProps extends React.HTMLAttributes<HTMLDivElement> {\n icon?: React.ReactNode;\n label: string;\n description?: string;\n actions?: React.ReactNode;\n iconType?: ProductIconType;\n iconVariant?: ProductIconVariant;\n iconSize?: ProductIconSize;\n linkProps?: Omit<LinkProps, 'children'>;\n /** Optional badge to display inline with the label */\n badge?: React.ReactNode;\n /** Optional content to display below the label/description (e.g., progress bar) */\n bottomContent?: React.ReactNode;\n /** Optional content to display inline next to the label (e.g., tag, chip) */\n labelInlineContent?: React.ReactNode;\n /** Gap between content sections. Default is 2 (8px). Accepts values 0-8. */\n contentGap?: number;\n /** Optional className for the actions section */\n classNameActions?: string;\n}\n\n/**\n * A flexible action card/row component with optional icon, label, description, and actions.\n * Can be used standalone or within larger containers. All sections except label are optional.\n */\nexport const CardAction = ({\n className,\n icon,\n label,\n description,\n actions,\n iconType = \"default\",\n iconVariant = \"secondary\",\n iconSize = \"sm\",\n linkProps,\n badge,\n bottomContent,\n labelInlineContent,\n contentGap = 2,\n classNameActions,\n ...props\n}: CardActionProps) => {\n return (\n <div\n className={clsx(\"flex flex-row gap-8 items-center\", className)}\n {...props}\n >\n {/* Icon Section */}\n {icon && (\n <ProductIcon type={iconType} variant={iconVariant} size={iconSize}>\n {icon}\n </ProductIcon>\n )}\n\n {/* Content Section */}\n <div className={clsx(\"flex flex-1 flex-col\", getGapClass(contentGap))}>\n <div className={clsx(\"flex flex-row\", badge ? \"justify-between gap-2\" : \"\")}>\n <div className=\"flex flex-row gap-6 items-center\">\n {linkProps ? (\n <Link className=\"w-fit\" {...linkProps}>\n {label}\n </Link>\n ) : (\n <span className=\"text-high-em text-md font-medium\">{label}</span>\n )}\n {labelInlineContent && <div>{labelInlineContent}</div>}\n </div>\n {badge && <div>{badge}</div>}\n </div>\n {description && (\n <span className=\"text-med-em text-sm font-normal\">{description}</span>\n )}\n {bottomContent && <div>{bottomContent}</div>}\n </div>\n\n {/* Actions Section */}\n {actions && <div className={clsx(\"flex gap-8\", classNameActions)}>{actions}</div>}\n </div>\n );\n};\n","import React from \"react\";\nimport { clsx } from \"clsx\";\nimport { Button } from \"@/shared/ui/Button/Button\";\nimport { Badge, BadgeProps } from \"@/shared/ui/Badge/Badge\";\nimport { Progress } from \"@/shared/ui/Progress/Progress\";\nimport { CardAction } from \"@/shared/ui/CardAction/CardAction\";\n\nexport type ProjectCardTimeLabel = \"month\" | \"week\" | \"year\" | \"day\";\n\nexport interface ProjectCardPlanItem {\n icon: React.ReactNode;\n itemLabel: string;\n badge: string;\n badgeTheme: BadgeProps[\"theme\"];\n progress: number;\n}\n\nexport interface ProjectCardPlanProps\n extends React.HTMLAttributes<HTMLDivElement> {\n planLabel: string;\n priceLabel: string;\n timeLabel: ProjectCardTimeLabel;\n nextPaymentLabel: string;\n dateLabel: string;\n items: ProjectCardPlanItem[];\n buttonLabel1: string;\n onClickButton1?: () => void;\n buttonLabel2: string;\n onClickButton2?: () => void;\n}\n\n/**\n * A component for displaying project plan information including pricing, plan details,\n * and usage metrics with progress indicators. Includes action buttons for plan management.\n */\nexport const ProjectCardPlan = ({\n className,\n planLabel,\n priceLabel,\n timeLabel,\n nextPaymentLabel,\n dateLabel,\n items,\n buttonLabel1,\n onClickButton1,\n buttonLabel2,\n onClickButton2,\n ...props\n}: ProjectCardPlanProps) => {\n return (\n <div\n className={clsx(\n \"flex flex-col border border-surface-3 rounded-8 w-full\",\n className\n )}\n {...props}\n >\n <div className=\"flex flex-row px-10 py-8 border-b border-b-surface-3 gap-8\">\n <div className=\"flex flex-col flex-1 gap-4\">\n <span className=\"flex text-med-em font-medium text-sm\">{planLabel}</span>\n <div className=\"flex flex-row items-center gap-6\">\n <span className=\"text-high-em font-semibold text-3xl font-family-space-grotesk\">{priceLabel}</span>\n <span className=\"text-med-em text-sm font-normal\">/ {timeLabel}</span>\n </div>\n </div>\n <div className=\"flex flex-col self-center \">\n <span className=\"font-normal text-xs text-right text-med-em\">{nextPaymentLabel}</span>\n <span className=\"text-md text-right font-medium text-high-em\">{dateLabel}</span>\n </div>\n </div>\n <ul className=\"flex flex-col p-10 gap-12\">\n <div className=\"flex flex-col gap-10\">\n {items.map((item, index) => (\n <React.Fragment key={index}>\n <li>\n <CardAction\n icon={item.icon}\n iconType=\"default\"\n iconVariant=\"secondary\"\n iconSize=\"sm\"\n label={item.itemLabel}\n badge={\n <Badge variant=\"simple\" theme={item.badgeTheme}>\n {item.badge}\n </Badge>\n }\n bottomContent={<Progress progress={item.progress} />}\n />\n </li>\n </React.Fragment>\n ))}\n </div>\n <div className=\"flex flex-row gap-6\">\n <Button\n className=\"w-1/2\"\n size=\"md\"\n variant=\"brand\"\n hierarchy=\"primary\"\n onClick={onClickButton1}\n >\n {buttonLabel1}\n </Button>\n <Button\n className=\"w-1/2\"\n size=\"md\"\n variant=\"neutral\"\n hierarchy=\"tertiary\"\n onClick={onClickButton2}\n >\n {buttonLabel2}\n </Button>\n </div>\n </ul>\n </div>\n );\n};\n","import React from \"react\";\nimport { clsx } from \"clsx\";\nimport { Divider } from \"@/shared/ui/Divider/Divider\";\nimport { Button } from \"@/shared/ui/Button/Button\";\nimport { CardAction } from \"@/shared/ui/CardAction/CardAction\";\nimport { RightArrowIcon } from \"@/shared/icons\";\n\nexport interface WorkspaceSettingsItem {\n icon: React.ReactNode;\n label: string;\n description?: string;\n buttonLabel?: string;\n buttonIcon?: React.ReactNode;\n buttonOnClick?: () => void;\n}\n\nexport interface WorkspaceSettingsProps\n extends React.HTMLAttributes<HTMLDivElement> {\n title: string;\n subtitle: string;\n actionButtonLabel?: string;\n actionButtonLabelOnClick?: () => void;\n extraComponent?: React.ReactNode;\n items: WorkspaceSettingsItem[];\n}\n\n/**\n * A component for displaying workspace settings with a title, subtitle, and a list of items.\n * Each item includes an icon, label, description, and an action button.\n */\nexport const WorkspaceSettings = ({\n className,\n title,\n subtitle,\n actionButtonLabel,\n actionButtonLabelOnClick,\n extraComponent,\n items,\n ...props\n}: WorkspaceSettingsProps) => {\n return (\n <div\n className={clsx(\n \"flex flex-col border border-surface-3 rounded-8 w-full\",\n className\n )}\n {...props}\n >\n <div className=\"flex flex-row px-10 py-8 border-b border-b-surface-3\">\n <div className=\"flex flex-1 flex-col content-center\">\n <h3 className=\"text-high-em font-semibold\">{title}</h3>\n <span className=\"text-med-em text-sm font-normal\">{subtitle}</span>\n </div>\n {actionButtonLabel && (\n <div className=\"flex self-center\">\n <Button\n size=\"sm\"\n variant=\"neutral\"\n hierarchy=\"tertiary\"\n onClick={actionButtonLabelOnClick}\n >\n {actionButtonLabel}\n </Button>\n </div>\n )}\n </div>\n <div className=\"flex flex-col p-10 gap-10\">\n <div className=\"flex flex-col gap-6\">\n {items.map((item, index) => (\n <React.Fragment key={index}>\n {index > 0 && <Divider />}\n <CardAction\n icon={item.icon}\n label={item.label}\n description={item.description}\n actions={\n (item.buttonLabel || item.buttonIcon) && (\n <Button\n size=\"sm\"\n onClick={item.buttonOnClick}\n {...(item.buttonLabel\n ? {\n variant: \"neutral\",\n hierarchy: \"tertiary\",\n }\n : {\n icons: \"only\",\n variant: \"neutral\",\n hierarchy: \"secondary\",\n leadingIcon: item.buttonIcon || <RightArrowIcon />,\n })}\n >\n {item.buttonLabel}\n </Button>\n )\n }\n />\n </React.Fragment>\n ))}\n </div>\n {extraComponent && <div className=\"flex flex-1\">{extraComponent}</div>}\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { clsx } from \"clsx\";\nimport { Button, ButtonVariant, ButtonHierarchy } from \"@/shared/ui/Button/Button\";\n\nexport interface SupportCardButtonItem {\n icon?: React.ReactNode;\n label: string;\n variant?: ButtonVariant;\n hierarchy?: ButtonHierarchy;\n buttonOnClick?: () => void;\n}\n\nexport interface SupportCardProps extends React.HTMLAttributes<HTMLDivElement> {\n title: string;\n subtitle: string;\n buttonItems: SupportCardButtonItem[];\n}\n\n/**\n * A component for displaying a support card with a title, subtitle, and action buttons.\n * Each button can have an icon, label, and custom variant/hierarchy styling.\n */\nexport const SupportCard = ({\n className,\n title,\n subtitle,\n buttonItems,\n ...props\n}: SupportCardProps) => {\n return (\n <div\n className={clsx(\n \"flex flex-col gap-8 p-8 bg-surface-1 rounded-8 w-full\",\n className\n )}\n {...props}\n >\n <div className=\"flex flex-col gap-3\">\n <h3 className=\"text-high-em font-semibold text-xl\">{title}</h3>\n <span className=\"text-med-em text-sm font-normal\">{subtitle}</span>\n </div>\n <div className=\"flex flex-col gap-4\">\n {buttonItems.map((buttonItem, index) => (\n <Button\n children={buttonItem.label}\n leadingIcon={buttonItem.icon}\n size=\"sm\"\n key={index}\n icons=\"leading\"\n onClick={buttonItem.buttonOnClick}\n {...((buttonItem.variant || buttonItem.hierarchy)\n ? {\n variant: buttonItem.variant,\n hierarchy: buttonItem.hierarchy,\n }\n : {\n variant: \"brand\",\n hierarchy: \"primary\",\n })}\n />\n ))}\n </div>\n </div>\n );\n};\n","import React, { useState } from \"react\";\nimport { clsx } from \"clsx\";\nimport { ProductIcon } from \"@/shared/ui/ProductIcon/ProductIcon\";\nimport { ButtonGroup, ButtonGroupOption } from \"@/shared/ui/ButtonGroup/ButtonGroup\";\nimport { MaximizeIcon, Edit2Icon, CopyIcon, TrashIcon } from \"@/shared/icons\";\n\nexport interface WidgetBuilderItemHoverActionProps\n extends React.HTMLAttributes<HTMLDivElement> {\n title: string;\n description: string;\n icon: React.ReactNode;\n onMaximize?: () => void;\n onEdit?: () => void;\n onCopy?: () => void;\n onTrash?: () => void;\n}\n\n/**\n * A component for displaying widget builder item hover action with an icon, title, and description.\n * Includes a button group with predefined actions.\n */\nexport const WidgetBuilderItemHoverAction = ({\n className,\n title,\n description,\n icon,\n onMaximize,\n onEdit,\n onCopy,\n onTrash,\n ...props\n}: WidgetBuilderItemHoverActionProps) => {\n const [selectedValue, setSelectedValue] = useState<string | number>(\"icon1\");\n\n const handleActionChange = (value: string | number) => {\n setSelectedValue(value);\n\n switch (value) {\n case \"maximize\":\n onMaximize?.();\n break;\n case \"edit\":\n onEdit?.();\n break;\n case \"copy\":\n onCopy?.();\n break;\n case \"trash\":\n onTrash?.();\n break;\n }\n };\n\n const buttonGroupOptions: ButtonGroupOption[] = [\n { value: \"maximize\", icon: <MaximizeIcon size={12} /> },\n { value: \"text block\", label: \"Text Block\" },\n { value: \"edit\", icon: <Edit2Icon size={12} /> },\n { value: \"copy\", icon: <CopyIcon size={12} /> },\n { value: \"trash\", icon: <TrashIcon size={12} /> },\n ];\n\n return (\n <div\n className={clsx(\n \"group relative flex flex-col border border-surface-3 rounded-8 w-full\",\n className\n )}\n {...props}\n >\n <div className=\"flex flex-row p-4 gap-4\">\n <div>\n <ProductIcon variant=\"secondary\" size=\"sm\">{icon}</ProductIcon>\n </div>\n <div className=\"flex flex-col\">\n <span className=\"text-high-em font-semibold text-sm font-family-space-grotesk\">\n {title}\n </span>\n <span className=\"text-med-em text-xs font-normal\">{description}</span>\n </div>\n </div>\n <div className=\"absolute inset-0 m-auto hidden w-fit h-fit p-4 group-hover:block\">\n <ButtonGroup\n options={buttonGroupOptions}\n value={selectedValue}\n onChange={handleActionChange}\n size=\"xs\"\n variant=\"brand\"\n />\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { clsx } from \"clsx\";\nimport { Button, ButtonVariant, ButtonHierarchy } from \"@/shared/ui/Button/Button\";\nimport { LabelIcon } from \"@/shared/ui/LabelIcon/LabelIcon\";\nimport { Icon } from \"@/shared/ui/Icon/Icon\"\nimport { ImageUploader } from \"@/shared/ui/ImageUploader/ImageUploader\";\nimport { Play } from 'iconsax-react';\n\nexport interface LabelIconItem {\n icon: React.ReactNode;\n label: string;\n}\n\nexport interface ActionButton {\n icon: React.ReactNode;\n onClick: () => void;\n ariaLabel?: string;\n}\n\nexport interface ProjectActionCardProps extends React.HTMLAttributes<HTMLDivElement> {\n title: string;\n subtitle: string;\n image: string;\n imageAlt?: string;\n actionButtons?: ActionButton[];\n labelIcons?: LabelIconItem[];\n}\n\n/**\n * A component for displaying a support card with a title, subtitle, and action buttons.\n * Each button can have an icon, label, and custom variant/hierarchy styling.\n */\nexport const ProjectActionCard = ({\n className,\n title,\n subtitle,\n image,\n imageAlt = \"Project image\",\n actionButtons = [],\n labelIcons = [],\n ...props\n}: ProjectActionCardProps) => {\n const [isHovered, setIsHovered] = React.useState(false);\n return (\n <div\n className={clsx(\n \"flex flex-col rounded-2xl w-full border border-surface-3 h-full\",\n className\n )}\n {...props}\n >\n <div\n className=\"relative w-full h-48 overflow-hidden rounded-t-2xl\"\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n <img\n src={image}\n alt={imageAlt}\n className=\"w-full h-full object-cover\"\n />\n {actionButtons.length > 0 && isHovered && (\n <div\n className=\"absolute inset-0 transition-opacity duration-300\"\n style={{\n background: 'linear-gradient(0deg, rgba(0, 0, 0, 0.50) 0%, rgba(0, 0, 0, 0.50) 100%)'\n }}\n />\n )}\n {actionButtons.length > 0 && (\n <div className={clsx(\n \"absolute inset-0 flex items-center justify-center cursor-pointer gap-6 transition-opacity duration-300\",\n isHovered ? \"opacity-100\" : \"opacity-0\"\n )}>\n {actionButtons.map((button, index) => (\n <Button\n key={index}\n variant=\"neutral\"\n hierarchy=\"tertiary\"\n icons=\"only\"\n leadingIcon={button.icon}\n size=\"md\"\n onClick={button.onClick}\n aria-label={button.ariaLabel}\n className=\"z-10 cursor-pointer\"\n > \n </Button>\n ))}\n </div>\n )}\n </div>\n <div className=\"flex flex-col py-6 px-8 gap-3 bg-white rounded-b-2xl flex-1\">\n <span className=\"font-semibold text-high-em text-md line-clamp-1\">{title}</span>\n <span className=\"text-low-em text-sm font-normal line-clamp-3\">{subtitle}</span>\n {labelIcons.length > 0 && (\n <div className=\"flex flex-row gap-8\">\n {labelIcons.map((item, index) => (\n <LabelIcon\n key={index}\n gap={4}\n iconSize=\"sm\"\n labelSize=\"sm\"\n icon={item.icon}\n label={item.label}\n />\n ))}\n </div>\n )}\n </div>\n\n </div>\n );\n};\n","import React from \"react\";\nimport { clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nimport { ProductIcon, ProductIconType, ProductIconSize, ProductIconVariant } from \"../ProductIcon/ProductIcon\";\n\nexport interface SettingsCardProps\n extends React.HTMLAttributes<HTMLDivElement> {\n title?: string;\n subtitle?: string;\n /** @ignore */\n icon?: React.ReactNode;\n iconType?: ProductIconType;\n iconVariant?: ProductIconVariant;\n iconSize?: ProductIconSize;\n headerActions?: React.ReactNode;\n children?: React.ReactNode;\n footerText?: React.ReactNode;\n footerActions?: React.ReactNode;\n footerVariant?: \"default\" | \"danger\" | \"warning\" | \"success\";\n classNameHeader?: string;\n classNameBody?: string;\n classNameFooter?: string;\n}\n\n/**\n * A flexible settings card component with optional header, body, and footer sections.\n * All sections are optional - only render what you need.\n */\nexport const SettingsCard = ({\n className,\n title,\n subtitle,\n icon,\n iconType = \"default\",\n iconVariant = \"secondary\",\n iconSize = \"sm\",\n headerActions,\n children,\n footerText,\n footerActions,\n footerVariant = \"default\",\n classNameHeader,\n classNameBody,\n classNameFooter,\n ...props\n}: SettingsCardProps) => {\n const showHeader = title || subtitle || headerActions || icon;\n const showFooter = footerText || footerActions;\n\n const footerVariantClasses = {\n default: \"border-surface-3 \",\n danger: \"bg-danger-accent-1 border-danger-accent-3\",\n warning: \"bg-warning-accent-1 border-warning-accent-3\",\n success: \"bg-success-accent-1 border-success-accent-3\",\n };\n\n return (\n <div\n className={clsx(\n \"flex flex-col bg-white border rounded-8 w-full\",\n className,\n footerVariantClasses[footerVariant]\n )}\n {...props}\n >\n {/* Header Section */}\n {showHeader && (\n <div\n className={twMerge(\n clsx(\n \"flex flex-row gap-8 p-8 justify-between items-center\",\n (children) && \"pb-0\"\n ),\n classNameHeader\n )}\n >\n <div className=\"flex flex-row gap-8 items-center flex-1\">\n {/* Icon Section */}\n {icon && (\n <ProductIcon type={iconType} variant={iconVariant} size={iconSize}>\n {icon}\n </ProductIcon>\n )}\n\n {/* Title and Subtitle */}\n {(title || subtitle) && (\n <div className=\"flex flex-col gap-2\">\n {title && (\n <h3 className=\"text-high-em font-semibold text-md\">{title}</h3>\n )}\n {subtitle && (\n <span className=\"text-med-em text-sm font-normal\">\n {subtitle}\n </span>\n )}\n </div>\n )}\n </div>\n\n {headerActions && (\n <div className=\"flex items-center\">{headerActions}</div>\n )}\n </div>\n )}\n\n {/* Body Section */}\n {children && <div className={twMerge(clsx(\"p-8\", showHeader), classNameBody)}>{children}</div>}\n\n {/* Footer Section */}\n {showFooter && (\n <div\n className={twMerge(\n clsx(\n \"flex flex-row p-8 items-center rounded-b-8\",\n footerText && footerActions ? \"justify-between\" : footerActions ? \"justify-end\" : \"justify-start\",\n (showHeader || children) && \"border-t\",\n footerVariantClasses[footerVariant]\n ),\n classNameFooter\n )}\n >\n {footerText && (\n <div className=\"text-sm text-low-em\">{footerText}</div>\n )}\n {footerActions && <div>{footerActions}</div>}\n </div>\n )}\n </div>\n );\n};\n","import React from \"react\";\n\nexport interface Add2IconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels */\n size?: number;\n /** Optional CSS classes */\n className?: string;\n}\n\n/**\n * Eye off icon component\n * @description Icon representing hidden/hide password\n */\nexport const Add2Icon = ({\n size = 20,\n className,\n ...props\n}: Add2IconProps) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n width={size}\n height={size}\n className={className}\n {...props}\n >\n <path\n fill=\"currentColor\"\n d=\"M4 8H12\"\n stroke=\"currentColor\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n fill=\"currentColor\"\n d=\"M8 12V4\"\n stroke=\"currentColor\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n);\n","import React from \"react\";\n\nexport interface GridIconProps extends React.SVGProps<SVGSVGElement> {\n /** Size of the icon in pixels */\n size?: number;\n /** Optional CSS classes */\n className?: string;\n}\n\n/**\n * Eye off icon component\n * @description Icon representing hidden/hide password\n */\nexport const GridIcon = ({ size = 20, className, ...props }: GridIconProps) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n width={size}\n height={size}\n className={className}\n {...props}\n >\n <path\n d=\"M4.5 11H7.5C10 11 11 10 11 7.5V4.5C11 2 10 1 7.5 1H4.5C2 1 1 2 1 4.5V7.5C1 10 2 11 4.5 11Z\"\n stroke=\"currentColor\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M6 1V11\"\n stroke=\"currentColor\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n);\n","import React, { useState } from \"react\";\nimport { clsx } from \"clsx\";\nimport {\n ButtonGroup,\n ButtonGroupOption,\n} from \"@/shared/ui/ButtonGroup/ButtonGroup\";\nimport { MaximizeIcon, Edit2Icon, CopyIcon, TrashIcon } from \"@/shared/icons\";\nimport { Button } from \"@/shared/ui/Button/Button\";\nimport { Add2Icon } from \"@/shared/icons/Add2Icon\";\nimport { GridIcon } from \"@/shared/icons/GridIcon\";\n\nexport interface FormFieldGroupProps\n extends React.HTMLAttributes<HTMLDivElement> {\n onAction?: (action: \"maximize\" | \"grid\" | \"add\" | \"copy\" | \"trash\" | \"addWidget\") => void;\n}\n\n/**\n * A component for displaying widget builder item hover action with an icon, title, and description.\n * Includes a button group with predefined actions.\n */\nexport const FormFieldGroup = ({\n className,\n onAction,\n children,\n ...props\n}: FormFieldGroupProps) => {\n const [selectedValue, setSelectedValue] = useState<string | number>(\n \"maximize\"\n );\n\n const handleActionChange = (value: string | number) => {\n setSelectedValue(value);\n onAction?.(value as \"maximize\" | \"grid\" | \"add\" | \"copy\" | \"trash\" | \"addWidget\");\n };\n\n const buttonGroupOptions: ButtonGroupOption[] = [\n { value: \"maximize\", icon: <MaximizeIcon size={12} /> },\n { value: \"grid\", icon: <GridIcon size={12} /> },\n { value: \"add\", icon: <Add2Icon size={12} /> },\n ];\n\n const buttonGroupOptions2: ButtonGroupOption[] = [\n { value: \"copy\", icon: <CopyIcon size={12} /> },\n { value: \"trash\", icon: <TrashIcon size={12} /> },\n ];\n\n return (\n <div\n className={clsx(\n \"relative flex flex-col border border-surface-3 w-full\",\n className\n )}\n {...props}\n >\n <div className=\"bg-surface-2 flex justify-between\">\n <ButtonGroup\n options={buttonGroupOptions}\n value={selectedValue}\n onChange={handleActionChange}\n size=\"xs\"\n variant=\"secondary\"\n />\n\n <ButtonGroup\n options={buttonGroupOptions2}\n value={selectedValue}\n onChange={handleActionChange}\n size=\"xs\"\n variant=\"secondary\"\n />\n </div>\n <div className=\"flex flex-col p-4 gap-4\">\n <div className=\"flex flex-col gap-4\">{children}</div>\n <div className=\"flex justify-center\">\n <Button\n size=\"sm\"\n variant=\"neutral\"\n hierarchy=\"secondary\"\n icons=\"only\"\n leadingIcon={<Add2Icon />}\n onClick={() => onAction?.(\"addWidget\")}\n ></Button>\n </div>\n </div>\n </div>\n );\n};\n","\"use client\";\n\nimport React, { useState, useEffect } from \"react\";\nimport { clsx } from \"clsx\";\nimport {\n ButtonGroup,\n ButtonGroupOption,\n} from \"@/shared/ui/ButtonGroup/ButtonGroup\";\nimport { CopyIcon, TrashIcon } from \"@/shared/icons\";\nimport { Add } from \"iconsax-react\";\nimport { GridIcon } from \"@/shared/icons/GridIcon\";\nimport { FormFieldGroup } from \"@/shared/ui/FormFieldGroup/FormFieldGroup\";\nimport { WidgetBuilderItemHoverAction } from \"@/shared/ui/WidgetBuilderItemHoverAction/WidgetBuilderItemHoverAction\";\nimport { Icon } from \"@/shared/ui/Icon/Icon\";\nimport { DropMenu } from \"@/shared/ui/DropMenu/DropMenu\";\n\ntype GridLayout = \"1\" | \"2\" | \"3\" | \"2-1\" | \"1-2\" | \"1-1\";\n\nexport interface WidgetData {\n id: string;\n title: string;\n description: string;\n icon?: React.ReactNode;\n position: number;\n onMaximize?: () => void;\n onEdit?: () => void;\n onCopy?: () => void;\n onTrash?: () => void;\n}\n\nexport interface ColumnData {\n id: string;\n widgets: WidgetData[];\n}\n\nexport interface SectionData {\n id: string;\n layout: GridLayout;\n position: number;\n columns: ColumnData[];\n onAction?: (action: \"maximize\" | \"grid\" | \"add\" | \"copy\" | \"trash\" | \"addWidget\") => void;\n}\n\nexport interface VisualComposerData {\n sections: SectionData[];\n}\n\nexport interface VisualComposerProps\n extends React.HTMLAttributes<HTMLDivElement> {\n data?: VisualComposerData;\n onAction?: (action: \"add\" | \"grid\" | \"copy\" | \"trash\") => void;\n onWidgetReorder?: (widgetId: string, newPosition: number, newColumnId: string, newSectionId: string) => void;\n onSectionReorder?: (sectionId: string, newPosition: number) => void;\n onDataChange?: (data: VisualComposerData) => void;\n}\n\nexport const VisualComposer = ({\n className,\n data,\n onAction,\n onWidgetReorder,\n onSectionReorder,\n onDataChange,\n ...props\n}: VisualComposerProps) => {\n const [selectedValue, setSelectedValue] = useState<string | number>(\n \"add\"\n );\n const [internalData, setInternalData] = useState<VisualComposerData>(\n data || { sections: [] }\n );\n const [showLayoutPicker, setShowLayoutPicker] = useState(false);\n\n useEffect(() => {\n if (data) {\n setInternalData(data);\n }\n }, [data]);\n\n const handleActionChange = (value: string | number) => {\n setSelectedValue(value);\n if (value === \"add\") {\n setShowLayoutPicker(!showLayoutPicker);\n }\n onAction?.(value as \"add\" | \"grid\" | \"copy\" | \"trash\");\n };\n\n const buttonGroupOptions: ButtonGroupOption[] = [\n {\n value: \"grid\",\n icon: (\n <Icon size={12}>\n <GridIcon />\n </Icon>\n ),\n },\n {\n value: \"add\",\n icon: (\n <Icon size={12}>\n <Add />\n </Icon>\n ),\n },\n ];\n\n const buttonGroupOptions2: ButtonGroupOption[] = [\n {\n value: \"copy\",\n icon: (\n <Icon size={12}>\n <CopyIcon />\n </Icon>\n ),\n },\n {\n value: \"trash\",\n icon: (\n <Icon size={12}>\n <TrashIcon />\n </Icon>\n ),\n },\n ];\n\n const addSection = (layout: GridLayout) => {\n const columnCount = getColumnCount(layout);\n const newColumns: ColumnData[] = Array.from({ length: columnCount }).map((_, index) => ({\n id: `${Date.now()}-col-${index}`,\n widgets: [],\n }));\n\n const newSection: SectionData = {\n id: Date.now().toString(),\n layout,\n position: internalData.sections.length,\n columns: newColumns,\n };\n\n const updatedData = {\n sections: [...internalData.sections, newSection],\n };\n\n setInternalData(updatedData);\n onDataChange?.(updatedData);\n setShowLayoutPicker(false);\n };\n\n const getGridClass = (layout: GridLayout) => {\n switch (layout) {\n case \"1\":\n return \"grid-cols-1\";\n case \"2\":\n return \"grid-cols-2\";\n case \"3\":\n return \"grid-cols-3\";\n case \"2-1\":\n return \"grid-cols-3\";\n case \"1-2\":\n return \"grid-cols-3\";\n case \"1-1\":\n return \"grid-cols-2\";\n default:\n return \"grid-cols-1\";\n }\n };\n\n const getColumnSpan = (layout: GridLayout, index: number) => {\n if (layout === \"2-1\") {\n return index === 0 ? \"col-span-2\" : \"col-span-1\";\n }\n if (layout === \"1-2\") {\n return index === 0 ? \"col-span-1\" : \"col-span-2\";\n }\n return \"col-span-1\";\n };\n\n const getColumnCount = (layout: GridLayout) => {\n if (layout === \"1\") return 1;\n if (layout === \"2\" || layout === \"2-1\" || layout === \"1-2\" || layout === \"1-1\") return 2;\n if (layout === \"3\") return 3;\n return 1;\n };\n\n return (\n <div\n className={clsx(\n \"flex flex-col border border-surface-3 w-full\",\n className\n )}\n {...props}\n >\n <div className=\"bg-surface-bg flex justify-between\">\n <ButtonGroup\n options={buttonGroupOptions}\n value={selectedValue}\n onChange={handleActionChange}\n size=\"xs\"\n variant=\"secondary\"\n />\n\n <ButtonGroup\n options={buttonGroupOptions2}\n value={selectedValue}\n onChange={handleActionChange}\n size=\"xs\"\n variant=\"secondary\"\n />\n </div>\n\n <div className=\"flex flex-col p-8\">\n {internalData.sections\n .sort((a, b) => a.position - b.position)\n .map((section) => (\n <div\n key={section.id}\n className={clsx(\"grid\", getGridClass(section.layout))}\n >\n {section.columns.map((column, columnIndex) => (\n <div\n key={column.id}\n className={clsx(getColumnSpan(section.layout, columnIndex))}\n >\n <FormFieldGroup className=\"h-full\" onAction={section.onAction}>\n {column.widgets\n .sort((a, b) => a.position - b.position)\n .map((widget) => (\n <WidgetBuilderItemHoverAction\n key={widget.id}\n title={widget.title}\n description={widget.description}\n icon={widget.icon || <Icon />}\n onMaximize={widget.onMaximize}\n onEdit={widget.onEdit}\n onCopy={widget.onCopy}\n onTrash={widget.onTrash}\n />\n ))}\n </FormFieldGroup>\n </div>\n ))}\n </div>\n ))}\n\n {showLayoutPicker && (\n <DropMenu\n size=\"sm\"\n className=\"max-w-18\"\n floating\n items={[\n {\n id: \"1\",\n title: \"1 Column\",\n showLeadingIcon: false,\n showTrailingIcon: false,\n showCheckbox:false\n },\n {\n id: \"2\",\n title: \"2 Columns\",\n showLeadingIcon: false,\n showTrailingIcon: false,\n showCheckbox:false\n },\n {\n id: \"3\",\n title: \"3 Columns\",\n showLeadingIcon: false,\n showTrailingIcon: false,\n showCheckbox:false\n },\n {\n id: \"1-1\",\n title: \"1-1 Layout\",\n showLeadingIcon: false,\n showTrailingIcon: false,\n showCheckbox:false\n },\n {\n id: \"2-1\",\n title: \"2-1 Layout\",\n showLeadingIcon: false,\n showTrailingIcon: false,\n showCheckbox:false\n },\n {\n id: \"1-2\",\n title: \"1-2 Layout\",\n showLeadingIcon: false,\n showTrailingIcon: false,\n showCheckbox:false\n },\n ]}\n onSelect={(id) => addSection(id as GridLayout)}\n />\n )}\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport type WidgetSize = \"1\" | \"2h\" | \"2w\" | \"4\";\n\nexport interface WidgetContainerProps {\n /** Size of the widget */\n size?: WidgetSize;\n /** Title displayed in the header */\n title?: string;\n /** Actions displayed in the header */\n actions?: React.ReactNode;\n /** Content of the widget body */\n children?: React.ReactNode;\n /** Optional className for the container */\n className?: string;\n /** Optional className for the header */\n classNameHeader?: string;\n /** Optional className for the body */\n classNameBody?: string;\n}\n\nconst sizeClasses: Record<WidgetSize, string> = {\n \"1\": \"w-[400px] h-[400px]\",\n \"2h\": \"w-[825px] h-[400px]\",\n \"2w\": \"w-[400px] h-[825px]\",\n \"4\": \"w-[825px] h-[825px]\",\n};\n\n/**\n * A flexible widget container component with header and body sections.\n * Supports 4 predefined sizes based on a 400px base with 25px grid spacing.\n */\nexport const WidgetContainer = ({\n size = \"1\",\n title,\n actions,\n children,\n className,\n classNameHeader,\n classNameBody,\n}: WidgetContainerProps) => {\n const showHeader = title || actions;\n\n return (\n <div\n className={twMerge(\n clsx(\n \"flex flex-col bg-white border border-surface-3 rounded-6\",\n sizeClasses[size]\n ),\n className\n )}\n >\n {/* Header Section */}\n {showHeader && (\n <div\n className={twMerge(\n clsx(\"flex items-center justify-between p-8 border-b border-surface-3\"),\n classNameHeader\n )}\n >\n {title && (\n <h3 className=\"text-med-em font-semibold text-xl\">{title}</h3>\n )}\n {actions && <div className=\"flex items-center gap-4\">{actions}</div>}\n </div>\n )}\n\n {/* Body Section */}\n <div className={twMerge(clsx(\"flex-1 p-8 overflow-auto\"), classNameBody)}>\n {children}\n </div>\n </div>\n );\n};\n","import React, { useState } from \"react\";\nimport { WidgetContainer } from \"../WidgetContainer/WidgetContainer\";\nimport { InputField } from \"../InputField/InputField\";\nimport { Button } from \"../Button/Button\";\nimport { Setting, Eye, EyeSlash } from \"iconsax-react\";\nimport { Icon } from \"..\";\n\nexport type AuthFormMode = \"signin\" | \"signup\";\n\nexport interface AuthFormWidgetProps {\n /** Mode of the form: signin or signup */\n mode: AuthFormMode;\n /** Title displayed in the widget header. Defaults to \"Regístrarse\" (signup) or \"Iniciar sesión\" (signin) */\n title?: string;\n /** Actions displayed in the widget header. Pass `null` to hide. Defaults to settings button */\n actions?: React.ReactNode | null;\n /** Callback when form is submitted */\n onSubmit?: (data: AuthFormData) => void;\n /** Callback when settings button is clicked */\n onSettings?: () => void;\n /** Optional className for the widget container */\n className?: string;\n}\n\nexport interface AuthFormData {\n email: string;\n password: string;\n name?: string;\n confirmPassword?: string;\n}\n\n/**\n * Auth Form Widget - A unified authentication form for both sign in and sign up\n * Supports both signin (email + password) and signup (name + email + password + confirm) modes\n */\nexport const AuthFormWidget = ({\n mode,\n title,\n actions,\n onSubmit,\n onSettings,\n className,\n}: AuthFormWidgetProps) => {\n const [name, setName] = useState(\"\");\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [confirmPassword, setConfirmPassword] = useState(\"\");\n const [showPassword, setShowPassword] = useState(false);\n const [showConfirmPassword, setShowConfirmPassword] = useState(false);\n\n const isSignUp = mode === \"signup\";\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n const data: AuthFormData = {\n email,\n password,\n ...(isSignUp && { name, confirmPassword }),\n };\n onSubmit?.(data);\n };\n\n return (\n <WidgetContainer\n size=\"1\"\n className={className}\n title={title ?? (isSignUp ? \"Regístrarse\" : \"Iniciar sesión\")}\n actions={\n actions === null\n ? undefined\n : actions ?? (\n <Button\n variant=\"neutral\"\n hierarchy=\"primary\"\n size=\"sm\"\n icons=\"only\"\n leadingIcon={\n <Icon>\n <Setting />\n </Icon>\n }\n onClick={onSettings}\n />\n )\n }\n >\n <form\n onSubmit={handleSubmit}\n className=\"flex flex-col gap-8 p-8 h-full mx-auto justify-center max-w-74\"\n >\n {/* Sign In: Show heading */}\n {!isSignUp && (\n <div className=\"flex flex-col gap-2\">\n <h2 className=\"text-high-em font-semibold text-2xl self-center\">\n ¡Automatiza!\n </h2>\n <span className=\"text-high-em text-md self-center\">\n Vende y gestiona con inteligencia\n </span>\n </div>\n )}\n\n {/* Sign Up: Name field */}\n {isSignUp && (\n <InputField\n type=\"text\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"Nombre\"\n required\n />\n )}\n\n {/* Email field (both modes) */}\n <InputField\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder=\"Correo\"\n required\n />\n\n {/* Password field (both modes) */}\n <InputField\n type={showPassword ? \"text\" : \"password\"}\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n placeholder={isSignUp ? \"Nueva contraseña\" : \"Contraseña\"}\n trailingIcon={\n <Icon>\n {showPassword ? (\n <Eye\n onClick={() => setShowPassword(false)}\n className=\"cursor-pointer\"\n />\n ) : (\n <EyeSlash\n onClick={() => setShowPassword(true)}\n className=\"cursor-pointer\"\n />\n )}\n </Icon>\n }\n required\n />\n\n {/* Sign Up: Confirm password field */}\n {isSignUp && (\n <InputField\n type={showConfirmPassword ? \"text\" : \"password\"}\n value={confirmPassword}\n onChange={(e) => setConfirmPassword(e.target.value)}\n placeholder=\"Confirmar contraseña\"\n trailingIcon={\n <Icon>\n {showConfirmPassword ? (\n <Eye\n onClick={() => setShowConfirmPassword(false)}\n className=\"cursor-pointer\"\n />\n ) : (\n <EyeSlash\n onClick={() => setShowConfirmPassword(true)}\n className=\"cursor-pointer\"\n />\n )}\n </Icon>\n }\n required\n />\n )}\n\n <Button\n type=\"submit\"\n variant=\"secondary\"\n hierarchy=\"primary\"\n size=\"lg\"\n className=\"w-full\"\n >\n Continuar\n </Button>\n </form>\n </WidgetContainer>\n );\n};\n","import React, { useState } from \"react\";\nimport { WidgetContainer } from \"../WidgetContainer/WidgetContainer\";\nimport { InputField } from \"../InputField/InputField\";\nimport { Button } from \"../Button/Button\";\nimport { Link } from \"../Link/Link\";\nimport { Setting } from \"iconsax-react\";\nimport { Icon } from \"..\";\n\nexport type RecoveryStep = \"email\" | \"code\";\nexport type RecoveryType = \"account\" | \"password\";\n\nexport interface RecoveryWidgetProps {\n /** Title displayed in the widget header. Defaults to \"Recuperación\" */\n title?: string;\n /** Actions displayed in the widget header. Pass `null` to hide. Defaults to settings button */\n actions?: React.ReactNode | null;\n /** Step of the recovery process */\n step: RecoveryStep;\n /** Type of recovery: account or password */\n type?: RecoveryType;\n /** Callback when recovery form is submitted */\n onSubmit?: (value: string) => void;\n /** Callback when back to login is clicked */\n onBackToLogin?: () => void;\n /** Callback when settings button is clicked */\n onSettings?: () => void;\n /** Optional className for the widget container */\n className?: string;\n}\n\n/**\n * Recovery Widget - A unified recovery form for account and password recovery\n * Supports both email input and code verification steps\n */\nexport const RecoveryWidget = ({\n title = \"Recuperación\",\n actions,\n step,\n type = \"password\",\n onSubmit,\n onBackToLogin,\n onSettings,\n className,\n}: RecoveryWidgetProps) => {\n const [value, setValue] = useState(\"\");\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n onSubmit?.(value);\n };\n\n const isEmailStep = step === \"email\";\n const isAccountRecovery = type === \"account\";\n\n // Dynamic content based on step and type\n const heading = isEmailStep\n ? isAccountRecovery\n ? \"Recuperar cuenta\"\n : \"Recuperar contraseña\"\n : \"Recuperar contraseña\";\n\n const placeholder = isEmailStep ? \"Correo\" : \"Código de verificación\";\n const hint = isEmailStep\n ? \"Un código será enviado a tu correo\"\n : \"Ingresa el código enviado a tu correo\";\n\n return (\n <WidgetContainer\n size=\"1\"\n className={className}\n title={title}\n actions={\n actions === null\n ? undefined\n : actions ?? (\n <Button\n variant=\"neutral\"\n hierarchy=\"primary\"\n size=\"sm\"\n icons=\"only\"\n leadingIcon={\n <Icon>\n <Setting />\n </Icon>\n }\n onClick={onSettings}\n />\n )\n }\n >\n <form\n onSubmit={handleSubmit}\n className=\"flex flex-col gap-8 p-8 h-full mx-auto justify-center max-w-74\"\n >\n <h2 className=\"text-high-em font-semibold text-2xl self-center\">\n {heading}\n </h2>\n\n <InputField\n type={isEmailStep ? \"email\" : \"text\"}\n value={value}\n onChange={(e) => setValue(e.target.value)}\n placeholder={placeholder}\n hint={hint}\n required\n />\n\n <Button\n type=\"submit\"\n variant=\"secondary\"\n hierarchy=\"primary\"\n size=\"lg\"\n className=\"w-full\"\n >\n Continuar\n </Button>\n\n <div className=\"text-center text-sm gap-4\">\n <span className=\"text-med-em text-sm font-semibold\">¿Todo bien? </span>\n <Link\n onClick={onBackToLogin}\n size=\"sm\"\n variant=\"info\"\n className=\"cursor-pointer font-semibold\"\n >\n Iniciar sesión\n </Link>\n </div>\n </form>\n </WidgetContainer>\n );\n};\n","import React, { useState } from \"react\";\nimport { WidgetContainer } from \"../WidgetContainer/WidgetContainer\";\nimport { InputField } from \"../InputField/InputField\";\nimport { Button } from \"../Button/Button\";\nimport { Link } from \"../Link/Link\";\nimport { Setting, Eye, EyeSlash } from \"iconsax-react\";\nimport { Icon } from \"..\";\n\nexport interface PasswordResetWidgetProps {\n /** Title displayed in the widget header. Defaults to \"Recuperación\" */\n title?: string;\n /** Actions displayed in the widget header. Pass `null` to hide. Defaults to settings button */\n actions?: React.ReactNode | null;\n /** Callback when password reset is submitted */\n onSubmit?: (password: string, confirmPassword: string) => void;\n /** Callback when back to login is clicked */\n onBackToLogin?: () => void;\n /** Callback when settings button is clicked */\n onSettings?: () => void;\n /** Optional className for the widget container */\n className?: string;\n}\n\n/**\n * Password Reset Widget - A complete password reset form in a widget container\n */\nexport const PasswordResetWidget = ({\n title = \"Recuperación\",\n actions,\n onSubmit,\n onBackToLogin,\n onSettings,\n className,\n}: PasswordResetWidgetProps) => {\n const [password, setPassword] = useState(\"\");\n const [confirmPassword, setConfirmPassword] = useState(\"\");\n const [showPassword, setShowPassword] = useState(false);\n const [showConfirmPassword, setShowConfirmPassword] = useState(false);\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n onSubmit?.(password, confirmPassword);\n };\n\n return (\n <WidgetContainer\n size=\"1\"\n className={className}\n title={title}\n actions={\n actions === null\n ? undefined\n : actions ?? (\n <Button\n variant=\"neutral\"\n hierarchy=\"primary\"\n size=\"sm\"\n icons=\"only\"\n leadingIcon={<Icon><Setting /></Icon>}\n onClick={onSettings}\n />\n )\n }\n >\n <form onSubmit={handleSubmit} className=\"flex flex-col gap-8 p-8 h-full mx-auto justify-center max-w-74\">\n <h2 className=\"text-high-em font-semibold text-2xl self-center\">\n Cambiar contraseña\n </h2>\n\n <InputField\n type={showPassword ? \"text\" : \"password\"}\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n placeholder=\"Nueva contraseña\"\n trailingIcon={\n <Icon>\n {showPassword ? (\n <Eye onClick={() => setShowPassword(false)} className=\"cursor-pointer\" />\n ) : (\n <EyeSlash onClick={() => setShowPassword(true)} className=\"cursor-pointer\" />\n )}\n </Icon>\n }\n required\n />\n\n <InputField\n type={showConfirmPassword ? \"text\" : \"password\"}\n value={confirmPassword}\n onChange={(e) => setConfirmPassword(e.target.value)}\n placeholder=\"Confirmar contraseña\"\n trailingIcon={\n <Icon>\n {showConfirmPassword ? (\n <Eye onClick={() => setShowConfirmPassword(false)} className=\"cursor-pointer\" />\n ) : (\n <EyeSlash onClick={() => setShowConfirmPassword(true)} className=\"cursor-pointer\" />\n )}\n </Icon>\n }\n required\n />\n\n <Button\n type=\"submit\"\n variant=\"secondary\"\n hierarchy=\"primary\"\n size=\"lg\"\n className=\"w-full\"\n >\n Continuar\n </Button>\n\n <div className=\"text-center text-sm gap-4\">\n <span className=\"text-med-em text-sm font-semibold\">¿Todo bien? </span>\n <Link\n onClick={onBackToLogin}\n size=\"md\"\n variant=\"info\"\n className=\"cursor-pointer font-semibold\"\n >\n Iniciar sesión\n </Link>\n </div>\n </form>\n </WidgetContainer>\n );\n};\n","import { WidgetContainer } from \"../WidgetContainer/WidgetContainer\";\nimport { Button } from \"../Button/Button\";\nimport { Setting } from \"iconsax-react\";\nimport { Icon } from \"..\";\n\nexport interface AuthActionWidgetProps {\n /** Title displayed in the widget header. Defaults to \"Autenticación\" */\n title?: string;\n /** Actions displayed in the widget header. Pass `null` to hide. Defaults to settings button */\n actions?: React.ReactNode | null;\n /** Callback when recover password is clicked */\n onRecover?: () => void;\n /** Callback when sign up is clicked */\n onSignUp?: () => void;\n /** Callback when settings button is clicked */\n onSettings?: () => void;\n /** Optional className for the widget container */\n className?: string;\n}\n\n/**\n * Auth Action Widget - Authentication actions in a widget container\n */\nexport const AuthActionWidget = ({\n title = \"Autenticación\",\n actions,\n onRecover,\n onSettings,\n className,\n}: AuthActionWidgetProps) => {\n return (\n <WidgetContainer\n size=\"1\"\n className={className}\n title={title}\n actions={\n actions === null\n ? undefined\n : actions ?? (\n <Button\n variant=\"neutral\"\n hierarchy=\"primary\"\n size=\"sm\"\n icons=\"only\"\n leadingIcon={<Icon><Setting /></Icon>}\n onClick={onSettings}\n />\n )\n }\n >\n <div className=\"flex flex-col gap-8 p-8 h-full mx-auto justify-center max-w-74\">\n\n <span className=\"text-med-em text-md self-center font-semibold\">\n ¿Olvidaste tu contraseña?\n </span>\n\n <Button\n variant=\"neutral\"\n hierarchy=\"primary\"\n size=\"lg\"\n onClick={onRecover}\n className=\"w-full\"\n >\n Recuperar\n </Button>\n </div>\n </WidgetContainer>\n );\n};\n","import React from \"react\";\nimport { WidgetContainer } from \"../WidgetContainer/WidgetContainer\";\nimport { Button } from \"../Button/Button\";\nimport { Setting, Google, Apple } from \"iconsax-react\";\nimport { Icon, Divider } from \"..\";\nexport interface AuthSocialOptionsWidgetProps {\n /** Title displayed in the widget header. Defaults to \"Autenticación\" */\n title?: string;\n /** Actions displayed in the widget header. Pass `null` to hide. Defaults to settings button */\n actions?: React.ReactNode | null;\n /** Callback when Google sign in is clicked */\n onGoogleSignIn?: () => void;\n /** Callback when Apple sign in is clicked */\n onAppleSignIn?: () => void;\n /** Callback when the bottom action button is clicked */\n onAction?: () => void;\n /** Callback when settings button is clicked */\n onSettings?: () => void;\n /** Text to display above the action button */\n actionPrompt?: string;\n /** Label for the action button */\n actionLabel?: string;\n /** Optional className for the widget container */\n className?: string;\n}\n\n/**\n * Auth Social Options Widget - Social authentication options in a widget container\n */\nexport const AuthSocialOptionsWidget = ({\n title = \"Autenticación\",\n actions,\n onGoogleSignIn,\n onAppleSignIn,\n onAction,\n onSettings,\n actionPrompt = \"¿Ya tienes una cuenta?\",\n actionLabel = \"Iniciar sesión\",\n className,\n}: AuthSocialOptionsWidgetProps) => {\n return (\n <WidgetContainer\n size=\"1\"\n className={className}\n title={title}\n actions={\n actions === null\n ? undefined\n : actions ?? (\n <Button\n variant=\"neutral\"\n hierarchy=\"primary\"\n size=\"sm\"\n icons=\"only\"\n leadingIcon={<Icon><Setting /></Icon>}\n onClick={onSettings}\n />\n )\n }\n >\n <div className=\"flex flex-col gap-8 p-8 h-full mx-auto justify-center max-w-74\">\n <Button\n variant=\"neutral\"\n hierarchy=\"primary\"\n size=\"lg\"\n icons=\"leading\"\n leadingIcon={<Icon><Google /></Icon>}\n onClick={onGoogleSignIn}\n className=\"w-full\"\n >\n Continuar con Google\n </Button>\n\n <Button\n variant=\"neutral\"\n hierarchy=\"primary\"\n size=\"lg\"\n icons=\"leading\"\n leadingIcon={<Icon><Apple /></Icon>}\n onClick={onAppleSignIn}\n >\n Continuar con Apple\n </Button>\n\n <Divider/>\n\n <div className=\"flex flex-col gap-4\">\n <span className=\"text-med-em text-md font-semibold text-center\">\n {actionPrompt}\n </span>\n\n <Button\n variant=\"secondary\"\n hierarchy=\"primary\"\n size=\"lg\"\n onClick={onAction}\n className=\"w-full\"\n >\n {actionLabel}\n </Button>\n </div>\n </div>\n </WidgetContainer>\n );\n};\n","'use client';\n\nimport React from 'react';\nimport { clsx } from 'clsx';\nimport { Grid5, Setting } from 'iconsax-react';\n\nexport interface ModuleCardHeaderProps {\n /** Module name/title displayed in the header */\n title?: string;\n /** Callback when settings icon is clicked */\n onSettingsClick?: () => void;\n /** Additional CSS classes for the header */\n className?: string;\n /** Whether to show the settings button */\n showSettings?: boolean;\n}\n\n/**\n * ModuleCardHeader - Header section of a module card\n *\n * Displays the module icon, title, and optional settings button.\n * Used as the drag handle when inside a draggable context.\n */\nexport const ModuleCardHeader: React.FC<ModuleCardHeaderProps> = ({\n title = 'Module',\n onSettingsClick,\n className,\n showSettings = true,\n}) => {\n return (\n <div\n className={clsx(\n 'drag-handle px-6 py-4 border-b border-surface-3 bg-surface-1 cursor-move rounded-t-xl',\n className\n )}\n >\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"flex gap-5 items-center\">\n <Grid5 size={24} color=\"var(--high-em)\" />\n <h2 className=\"text-[16px] font-semibold text-med-em flex-1 text-center\">\n {title}\n </h2>\n </div>\n\n {showSettings && (\n <div className=\"flex items-center gap-3\">\n <button\n onClick={onSettingsClick}\n className=\"p-1 hover:bg-surface-2 rounded transition-colors\"\n aria-label=\"Configure module\"\n type=\"button\"\n >\n <Setting size={24} color=\"var(--high-em)\" />\n </button>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport interface ModuleCardProps {\n /** Module name/title for the header */\n title?: string;\n /** Callback when settings icon is clicked */\n onSettingsClick?: () => void;\n /** Whether to show the settings button in header */\n showSettings?: boolean;\n /** Content to render inside the card body */\n children?: React.ReactNode;\n /** Additional CSS classes for the container */\n className?: string;\n /** Minimum width of the card */\n minWidth?: number;\n /** Maximum width of the card */\n maxWidth?: number;\n /** Empty state content when no children */\n emptyState?: React.ReactNode;\n}\n\n/**\n * ModuleCard - Container card for displaying module fields\n *\n * A structured card component with header and body sections.\n * The header includes a drag handle class for integration with drag libraries.\n *\n * @example\n * ```tsx\n * <ModuleCard title=\"Users\" onSettingsClick={handleSettings}>\n * <ModuleFieldItem type=\"text\" label=\"Name\" />\n * <ModuleFieldItem type=\"email\" label=\"Email\" />\n * </ModuleCard>\n * ```\n */\nexport const ModuleCard: React.FC<ModuleCardProps> = ({\n title = 'Module',\n onSettingsClick,\n showSettings = true,\n children,\n className,\n minWidth = 300,\n maxWidth = 300,\n emptyState,\n}) => {\n const hasChildren = React.Children.count(children) > 0;\n\n return (\n <div\n className={clsx(\n 'bg-white rounded-xl border border-surface-3 overflow-hidden',\n className\n )}\n style={{\n minWidth: `${minWidth}px`,\n maxWidth: `${maxWidth}px`,\n }}\n >\n <ModuleCardHeader\n title={title}\n onSettingsClick={onSettingsClick}\n showSettings={showSettings}\n />\n\n <div className=\"overflow-hidden\" style={{ minHeight: '200px' }}>\n {hasChildren ? children : emptyState}\n </div>\n </div>\n );\n};\n\nModuleCardHeader.displayName = 'ModuleCardHeader';\nModuleCard.displayName = 'ModuleCard';\n","'use client';\n\nimport React from 'react';\nimport { clsx } from 'clsx';\nimport { HambergerMenu, Trash } from 'iconsax-react';\n\nexport interface ModuleFieldItemProps {\n /** Field type label (e.g., \"Texto\", \"Email\", \"Number\") */\n type: string;\n /** Field name/label */\n label?: string;\n /** Description text below the type */\n description?: string;\n /** Whether the item is selected */\n isSelected?: boolean;\n /** Whether this is the last item (hides bottom border) */\n isLast?: boolean;\n /** Callback when the item is clicked */\n onClick?: () => void;\n /** Callback when delete button is clicked */\n onDelete?: () => void;\n /** Whether to show action buttons (drag handle, delete) */\n showActions?: boolean;\n /** Additional CSS classes */\n className?: string;\n /** Props to spread on the drag handle (for dnd-kit integration) */\n dragHandleProps?: React.HTMLAttributes<HTMLDivElement>;\n /** Ref for sortable integration */\n innerRef?: React.Ref<HTMLDivElement>;\n /** Style object (for transform during drag) */\n style?: React.CSSProperties;\n}\n\n/**\n * ModuleFieldItem - A single field row in a module card\n *\n * Pure UI component that displays a field with type, label, and optional actions.\n * On hover, action icons slide in from the left with a smooth animation.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <ModuleFieldItem\n * type=\"Texto\"\n * label=\"Username\"\n * onClick={() => handleFieldClick('username')}\n * />\n *\n * // With sortable (in consuming app)\n * const { attributes, listeners, setNodeRef } = useSortable({ id: field.id });\n * <ModuleFieldItem\n * type={field.type}\n * label={field.label}\n * innerRef={setNodeRef}\n * dragHandleProps={{ ...attributes, ...listeners }}\n * />\n * ```\n */\nexport const ModuleFieldItem = React.forwardRef<HTMLDivElement, ModuleFieldItemProps>(\n (\n {\n type,\n label = 'New Field',\n description = 'Description',\n isSelected = false,\n isLast = false,\n onClick,\n onDelete,\n showActions = true,\n className,\n dragHandleProps,\n innerRef,\n style,\n },\n ref\n ) => {\n const [isHovered, setIsHovered] = React.useState(false);\n const showButtons = isHovered && showActions;\n\n // Use innerRef if provided (for sortable), otherwise use forwarded ref\n const combinedRef = innerRef || ref;\n\n return (\n <div\n ref={combinedRef}\n style={style}\n className={clsx('relative', className)}\n >\n <div\n onClick={onClick}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n className={clsx(\n 'w-full text-left m-0 cursor-pointer overflow-hidden',\n isSelected ? 'bg-surface-3' : 'hover:bg-surface-1'\n )}\n >\n <div className=\"px-6 py-2\">\n <div className=\"flex justify-between items-center overflow-hidden\">\n <div className=\"flex justify-start items-center\">\n {/* Action buttons - animate width from 0 to 28px */}\n <div\n className=\"flex items-center overflow-hidden transition-all duration-200 ease-out\"\n style={{\n width: showButtons ? '28px' : '0px',\n opacity: showButtons ? 1 : 0,\n }}\n >\n <div\n onClick={(e) => e.stopPropagation()}\n className=\"flex flex-col shrink-0\"\n >\n {/* Drag handle */}\n <div\n {...dragHandleProps}\n className=\"cursor-grab active:cursor-grabbing touch-none p-1 rounded-md hover:bg-surface-2 transition-colors\"\n aria-label=\"Drag to reorder\"\n >\n <HambergerMenu size={12} color=\"var(--high-em)\" />\n </div>\n\n {/* Delete button */}\n {onDelete && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onDelete();\n }}\n className=\"p-1 rounded-md hover:bg-surface-2 transition-colors\"\n aria-label=\"Delete field\"\n >\n <Trash size={12} color=\"var(--high-em)\" variant=\"Linear\" />\n </button>\n )}\n </div>\n </div>\n\n {/* Field info - smoothly shifts right when buttons appear */}\n <div className=\"transition-all duration-200 ease-out\">\n <div className=\"text-[16px] font-semibold text-med-em\">\n {type}\n </div>\n <div className=\"text-[10px] font-medium tracking-wide mb-1 text-low-em\">\n {description}\n </div>\n </div>\n </div>\n\n {/* Field label */}\n <div className=\"text-sm font-medium text-low-em truncate\">\n {label}\n </div>\n </div>\n </div>\n </div>\n\n {/* Separator */}\n {!isLast && <div className=\"border-b border-surface-3\" />}\n </div>\n );\n }\n);\n\nModuleFieldItem.displayName = 'ModuleFieldItem';\n","'use client';\n\nimport React from 'react';\nimport { clsx } from 'clsx';\nimport { Grid5, ExportSquare, HambergerMenu, Component } from 'iconsax-react';\n\nexport interface RelatedDataItem {\n /** Unique identifier */\n id: string;\n /** Item label */\n label: string;\n /** Item type (e.g., \"Database\", \"API\", \"Service\") */\n type: string;\n}\n\nexport interface RelatedDataCardProps {\n /** Card title */\n title?: string;\n /** Array of related data items */\n items?: RelatedDataItem[];\n /** Additional CSS classes */\n className?: string;\n /** Callback when export icon is clicked */\n onExportClick?: () => void;\n /** Minimum width of the card */\n minWidth?: number;\n /** Maximum width of the card */\n maxWidth?: number;\n /** Opacity of the card (disabled state) */\n opacity?: number;\n}\n\n/**\n * RelatedDataCard - A disabled/readonly card displaying related data items\n *\n * Used in visualizer diagrams to show linked data sources or modules.\n * The card is intentionally styled with reduced opacity to indicate\n * it's not directly editable.\n *\n * @example\n * ```tsx\n * const relatedItems = [\n * { id: '1', label: 'Users', type: 'Database' },\n * { id: '2', label: 'Orders', type: 'API' },\n * ];\n *\n * <RelatedDataCard\n * title=\"Related Modules\"\n * items={relatedItems}\n * onExportClick={() => console.log('Export')}\n * />\n * ```\n */\nexport const RelatedDataCard: React.FC<RelatedDataCardProps> = ({\n title = 'Módulos',\n items = [],\n className,\n onExportClick,\n minWidth = 250,\n maxWidth = 300,\n opacity = 0.7,\n}) => {\n return (\n <div\n className={clsx(\n 'bg-white rounded-xl border border-surface-3 overflow-hidden',\n className\n )}\n style={{\n minWidth: `${minWidth}px`,\n maxWidth: `${maxWidth}px`,\n opacity,\n }}\n >\n {/* Header */}\n <div className=\"px-6 py-4 border-b border-surface-3 bg-surface-2 rounded-t-xl\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"flex gap-5 items-center\">\n <Grid5 size={24} color=\"var(--low-em)\" />\n <h2 className=\"text-xl font-semibold text-low-em flex-1 text-center\">\n {title}\n </h2>\n </div>\n {onExportClick && (\n <button\n type=\"button\"\n onClick={onExportClick}\n className=\"hover:bg-surface-3 rounded p-1 transition-colors\"\n aria-label=\"Export data\"\n >\n <ExportSquare size={24} color=\"var(--low-em)\" />\n </button>\n )}\n </div>\n </div>\n\n {/* Items list */}\n <div className=\"max-h-[600px] overflow-y-auto overflow-x-hidden\">\n {items.map((item, idx) => {\n const isLastItem = idx === items.length - 1;\n\n return (\n <div key={item.id} className=\"relative\">\n <div className=\"w-full text-left transition-all duration-200 m-0 cursor-not-allowed\">\n <div className=\"my-6 mx-8\">\n <div className=\"flex justify-between items-center\">\n <div className=\"flex justify-start gap-5 items-center\">\n <HambergerMenu size={20} color=\"var(--low-em)\" />\n <Component size={20} color=\"var(--low-em)\" />\n <div className=\"text-xs font-semibold tracking-wide mb-1 text-low-em\">\n {item.type}\n </div>\n </div>\n <div className=\"text-sm font-medium truncate text-low-em\">\n {item.label}\n </div>\n </div>\n </div>\n </div>\n {!isLastItem && <div className=\"border-b border-surface-3\" />}\n </div>\n );\n })}\n\n {/* Empty state */}\n {items.length === 0 && (\n <div className=\"py-12 px-8 flex items-center justify-center\">\n <p className=\"text-sm text-low-em text-center\">\n No related data\n </p>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nRelatedDataCard.displayName = 'RelatedDataCard';\n","\"use client\";\n\nimport React, { useState } from \"react\";\nimport { clsx } from \"clsx\";\nimport { SearchNormal1, Box2 } from \"iconsax-react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { InputField } from \"../InputField/InputField\";\nimport { ListItem } from \"../ListItem/ListItem\";\nimport { Divider } from \"../Divider/Divider\";\nimport { Icon } from \"../Icon/Icon\";\nimport { Tooltip } from \"../Tooltip/Tooltip\";\n/**\n * Represents a widget item in the sidebar\n */\nexport interface WidgetSidebarItem {\n /** Unique identifier for the item */\n id: string;\n /** Display title for the item */\n title: string;\n /** Optional description for the item */\n description?: string;\n /** Optional icon for the item */\n icon?: React.ReactNode;\n /** Position number on canvas (displayed as trailing text) */\n position?: number;\n /** Whether the item is selected */\n isSelected?: boolean;\n /** Whether the item is visible */\n isVisible?: boolean;\n /** Whether the item is disabled */\n isDisabled?: boolean;\n /** Optional custom data for the item */\n data?: Record<string, unknown>;\n}\n\n/**\n * Props for the WidgetSidebar component\n */\nexport interface WidgetSidebarProps {\n /** Array of widget items to display */\n items: WidgetSidebarItem[];\n /** Placeholder text for the search input */\n searchPlaceholder?: string;\n /** Show/hide search bar */\n showSearch?: boolean;\n /** Icon to display in header (right side) */\n headerIcon?: React.ReactNode;\n /** Tooltip content for the header icon */\n headerTooltip?: React.ReactNode;\n /** Callback when an item is clicked */\n onItemClick?: (item: WidgetSidebarItem) => void;\n /** Custom className for the container */\n className?: string;\n /** Custom background color */\n backgroundColor?: string;\n /** Custom border style */\n borderStyle?: string;\n}\n\n/**\n * Header component for the WidgetSidebar\n */\nconst SidebarHeader = ({\n widgetCount,\n visibleCount,\n icon,\n tooltipContent,\n}: {\n widgetCount: number;\n visibleCount: number;\n icon?: React.ReactNode;\n tooltipContent?: React.ReactNode;\n}) => (\n <div className=\"border-b border-gray-200\">\n <div className=\"p-8 flex items-center justify-between\">\n {/* Left side: Widgets count */}\n <span\n className=\" font-semibold text-sm text-dark-100\"\n style={{ fontFamily: \"var(--font-space-grotesk)\" }}\n >\n Widgets ({widgetCount})\n </span>\n\n {/* Right side: Visible count and icon */}\n <div className=\"flex items-center gap-2\">\n <span className={clsx(\n \"text-sm font-semibold\",\n visibleCount === 0 ? \"text-low-em\" : \"text-success-main\"\n )}>\n {visibleCount} visible\n </span>\n {icon && tooltipContent && (\n <Tooltip content={tooltipContent} side=\"bottom\">\n <div>{icon}</div>\n </Tooltip>\n )}\n {icon && !tooltipContent && icon}\n </div>\n </div>\n </div>\n);\n\n/**\n * Search bar component for the WidgetSidebar\n */\nconst SidebarSearchBar = ({\n value,\n onChange,\n placeholder,\n}: {\n value: string;\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n placeholder?: string;\n}) => (\n <div className=\"p-8 flex flex-col gap-4 \">\n <InputField\n type=\"search\"\n placeholder={placeholder || \"Search\"}\n value={value}\n onChange={onChange}\n trailingIcon={<SearchNormal1 size={16} color=\"currentColor\" />}\n />\n </div>\n);\n\n/**\n * @file A sidebar component for displaying widgets\n * @description This component displays a list of widgets that can be clicked.\n * Each widget shows its title, optional description, icon, and position number on canvas.\n *\n * Features:\n * - Search functionality to filter widgets\n * - Customizable list item sizes\n * - Uses ListItem component for consistent styling\n * - Shows widget position on canvas as trailing text\n * - Fully controlled via props (data-driven)\n *\n * @param {WidgetSidebarItem[]} items - Array of widget items\n * @param {string} [searchPlaceholder='Search'] - Placeholder for search input\n * @param {boolean} [showSearch=true] - Show/hide the search bar\n * @param {React.ReactNode} [headerIcon] - Icon to display in header\n * @param {Function} [onItemClick] - Callback when an item is clicked\n * @param {string} [className] - Custom CSS classes for the container\n * @param {string} [backgroundColor='bg-white'] - Custom background color\n * @param {string} [borderStyle='border border-surface-3'] - Custom border style\n * @returns {JSX.Element} The rendered WidgetSidebar component\n */\nexport const WidgetSidebar = ({\n items,\n searchPlaceholder = \"Search\",\n showSearch = true,\n headerIcon,\n headerTooltip,\n onItemClick,\n className,\n backgroundColor = \"bg-white\",\n borderStyle = \"border border-surface-3\",\n}: WidgetSidebarProps) => {\n const [searchQuery, setSearchQuery] = useState(\"\");\n\n // Filter items based on search query\n const filteredItems = items.filter(\n (item) =>\n item.title.toLowerCase().includes(searchQuery.toLowerCase()) ||\n item.description?.toLowerCase().includes(searchQuery.toLowerCase())\n );\n\n // Calculate counts\n const totalWidgets = items.length;\n const visibleWidgets = items.filter(item => item.isVisible).length;\n\n const handleItemClick = (item: WidgetSidebarItem) => {\n onItemClick?.(item);\n };\n\n return (\n <TooltipPrimitive.Provider delayDuration={200}>\n <div\n className={clsx(\n \"h-full w-full flex flex-col\",\n backgroundColor,\n borderStyle,\n className\n )}\n >\n {/* Header */}\n <SidebarHeader\n widgetCount={totalWidgets}\n visibleCount={visibleWidgets}\n icon={headerIcon}\n tooltipContent={headerTooltip}\n />\n\n {/* Search Bar */}\n {showSearch && (\n <SidebarSearchBar\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n placeholder={searchPlaceholder}\n />\n )}\n\n <Divider />\n\n {/* Widget List */}\n <div className=\"flex-1 overflow-y-auto p-8 flex flex-col gap-8\">\n {filteredItems.length > 0 ? (\n filteredItems.map((item) => (\n <ListItem\n key={item.id}\n title={item.title}\n description={item.description}\n leadingIcon={<Icon className={`${item.isDisabled ? 'text-disabled' : ''}`}>{item.icon}</Icon>}\n showCheckbox={false}\n showLeadingImage={false}\n showDescription={!!item.description}\n showTag={false}\n size=\"sm\"\n showTrailingIcon={false}\n showTrailingText={item.position !== undefined}\n trailingText={item.position !== undefined ? String(item.position) : undefined}\n disabled={item.isDisabled}\n customBackgroundColor={clsx(item.isSelected && \"bg-surface-2\")}\n className={clsx(\n \"py-6 rounded-xl\",\n item.isSelected && \"border border-surface-3\",\n item.isVisible && \"border border-surface-3\"\n )}\n onClick={() => handleItemClick(item)}\n />\n ))\n ) : (\n <div className=\"flex flex-col items-center justify-center p-10 text-center gap-10\">\n <Icon size={'lg'}><Box2></Box2></Icon>\n <p className=\"text-sm font-medium text-low-em\">\n {items.length === 0\n ? \"You don't have any Widgets created yet\"\n : \"No widgets found\"}\n </p>\n </div>\n )}\n </div>\n </div>\n </TooltipPrimitive.Provider>\n );\n};\n"],"names":["SIZE_CLASSES","PADDING_CLASSES","ContainerBase","React","size","centered","padding","Element","className","children","props","ref","containerClasses","twMerge","clsx","jsx","ContainerHeader","ContainerContent","ContainerFooter","ContainerWithCompounds","SPACING_CLASSES","BACKGROUND_CLASSES","Section","spacing","background","bordered","sectionClasses","SectionHero","SectionFeatures","BREAKPOINTS","CONTAINER","CONTAINER_PADDING","SIDEBAR","NAVBAR","LAYOUT_SPACING","CSS_VARIABLES","LAYOUT","pxToRem","px","pxToCss","createMediaQuery","breakpoint","type","value","adjustedValue","matchesBreakpoint","width","comparison","breakpointValue","getCurrentBreakpoint","sortedBreakpoints","a","b","key","PanelContext","createContext","usePanelContext","context","useContext","PANEL_DEFAULTS","isInCloseZone","widthPercent","getSnappedWidth","calculatePanelPercentage","desiredWidthPx","viewportWidth","otherPanelsWidthPx","minCentralWidthPx","maxPanelWidth","percentage","calculateDraggedPanelPercentage","side","mouseX","containerWidth","oppositeSideWidthPercent","externalPanelsWidthPercent","_internalPanelsWidthPercent","externalPanelsWidthPx","rawWidthPx","rawPercentage","maxPercentage","getTotalSideWidth","panels","p","total","getTotalPanelsWidth","state","findPanelById","id","leftPanel","rightPanel","getCentralWidth","initializePanelsState","config","cfg","otherWidthPx","sum","c","panelState","PanelLayout","onPanelResize","onCloseZoneChange","onPanelClose","minCentralWidth","resizingPanelId","setResizingPanelId","useState","containerRef","useRef","handleResizeStart","useCallback","handleResize","handleResizeEnd","shouldClose","handleCloseZoneChange","inCloseZone","getPanelState","result","contextValue","useMemo","leftPanels","rightPanels","mainContent","left","right","main","child","panelProps","isResizing","jsxs","PanelHandle","height","fillColor","pillStartY","pillEndY","isRightSide","borderX","pillX","path","dotsX","dotsY","Panel","resizable","panelBg","onResizeStart","onResize","onResizeEnd","isDragging","hasMovedRef","rafId","lastInCloseZoneRef","initialDragWidthRef","hasAnimatedRef","panelRef","panelHeight","setPanelHeight","latestValuesRef","oppositeSideWidth","sameSidePanels","panelIndex","externalPanelsWidth","i","internalPanelsWidth","onResizeRef","onResizeEndRef","onCloseZoneChangeRef","handleMouseMove","e","container","rect","relativeX","currentSide","currentOppositeSideWidth","currentMinCentralWidth","currentExternalPanelsWidth","currentInternalPanelsWidth","newWidth","handleMouseUp","currentPanelState","handleMouseDown","useEffect","timer","panel","updateHeight","resizeObserver","handlerPosition","getAnimationClass","PanelMain","isValidPanel","isValidPanelsState","data","obj","usePanelState","options","persist","persistKey","configMap","map","setPanels","isHydrated","setIsHydrated","saved","parsed","togglePanel","current","oppositeSide","desiredWidth","sameSideOpenPanels","sameSideCurrentWidth","maxSameSideWidth","minSpaceForExisting","maxSpaceForNew","actualNewWidth","spaceForExisting","shrinkRatio","resizePanel","currentPanel","sameSideOtherPanels","sameSideOtherWidth","totalNeeded","spaceNeeded","newOtherWidth","actualWidth","openPanel","closePanel","handlePanelClose","resetPanels","exitingPanels","timers","SplitPanelLayout","sidePanel","isPanelOpen","onPanelExited","panelWidth","panelPosition","animationDuration","mainContentBg","sidePanelBg","isExiting","setIsExiting","shouldRender","setShouldRender","mainContentWidth","slideInClass","slideOutClass","getGapClass","gap","ChatIcon","AICommentaryIcon","ArrowNarrowDownIconComponent","ArrowNarrowDownIcon","forwardRef","FilterFunnel02Component","FilterFunnel02Icon","Box2Component","Box2Icon","BoxIcon","CircleComponent","CircleIcon","AddIconComponent","title","titleId","AddIcon","XMark","UploadImageIcon","InfoIcon","LeftArrowIcon","XMarkAlert","StraightInfoIcon","QuestionCircle","BookOutlined","MessageProgrammingOutlined","VideoPlayOutlined","ProgrammingArrowsOutlined","DataArrowsOutlined","AIMessage","ShareComponent","ShareIcon","SliderThumbIcon","SliderPointerUp","SliderPointerDown","SkalarLogo","SkalarLogoNoText","RightArrowIcon","CalendarIcon","EyeIcon","EyeOffIcon","PlusCircleIconComponent","PlusCircleIcon","ChevronDownIconComponent","ChevronDownIcon","ChevronUpIconComponent","ChevronUpIcon","UnionIcon","MoreIcon","LayerIcon","FlashIcon","CalendarIcon2","MaximizeIcon","Edit2Icon","CopyIcon","TrashIcon","SlashIcon","Button","variant","hierarchy","icons","leadingIcon","trailingIcon","disabled","isToggled","toggledLeadingIcon","toggledTrailingIcon","borderRadius","color","baseStyles","disabledStyles","styles","hasChildren","sizeStyles","iconSize","iconSpacingClasses","activeLeadingIcon","activeTrailingIcon","sizedLeadingIcon","sizedTrailingIcon","variantStyles","buttonClasses","AlertContext","useAlertContext","typeConfig","alertToButtonVariant","AlertDialog","open","setOpen","AlertDialogTrigger","AlertDialogContent","Transition","Fragment","HeadlessDialog","motion","AlertDialogHeader","AlertDialogTitle","AlertDialogDescription","AlertDialogFooter","AlertDialogAction","actionVariant","onClick","isSecondary","btnVariant","ArrowRight","AlertDialogCancel","Badge","theme","statusState","statusSize","themeStyles","statusColorMap","statusSizeMap","statusClasses","badgeClasses","Avatar","imageUrl","initials","statusBadge","avatarToStatusSizeMap","avatarClasses","badgePositionStyles","avatarContent","AvatarGroup","avatars","max","counterClassName","visibleAvatars","remainingCount","shouldShowCounter","containerStyles","counterStyles","counterClasses","avatar","index","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","asChild","rest","mergedProps","BreadcrumbPage","BreadcrumbSeparator","BreadcrumbEllipsis","ButtonDropdown","label","items","isActive","dropdownClassName","placement","showBackdrop","isOpen","setIsOpen","defaultChevron","handleToggle","prev","handleItemClick","item","handleBackdropClick","handleClickOutside","event","getDropdownPositionClasses","ButtonGroup","onChange","iconSizeMap","radiusStyles","option","sizedIcon","sizeConfig","stateStyles","CheckIcon","MinusIcon","Checkbox","checked","indeterminate","inputRef","Link","showLeadingIcon","showTrailingIcon","trailingIconPosition","disableUnderline","Card","icon","description","linkText","linkHref","onCheckboxChange","onLinkClick","handleCheckboxChange","ChatCollapsibleContainer","controlledIsCollapsed","onToggle","onClose","defaultCollapsed","internalCollapsed","setInternalCollapsed","isCollapsed","isControlled","newValue","Progress","progress","clampedProgress","fillClasses","renderPercentage","percentageText","ChatCollapsibleCheck","onItemChange","maxHeight","completedCount","totalCount","progressPercentage","itemId","ChatCollapsibleDialog","actions","action","variantConfig","Tag","onTrailingIconClick","leadingIconContent","Add","trailingIconContent","ArrowDown2","handleTrailingIconClick","paddingClasses","paddingMap","hasLeading","hasTrailing","ChatCommandListItem","baseClasses","leadingTag","trailingButton","handleButtonClick","tag","Kbd","CategoriesHeader","ItemsHeader","category","onBack","ArrowLeft2","KeyboardFooter","ChatCommandList","categories","onCategorySelect","onItemSelect","floating","currentView","setCurrentView","selectedCategory","setSelectedCategory","handleCategoryClick","handleBack","ArrowRight2","ChatHeader","activeView","onChatClick","onHistorialClick","onSettingsClick","onCloseClick","chatTabs","selectedIndex","tab","handleTabChange","selectedTab","tabsVariant","Tabs","Icon","alt","imageError","setImageError","sizeInPx","childClassName","InfoCircle","InputField","hint","leadingIconColor","trailingIconColor","customBackground","placeholderColor","multiline","customFontWeight","fontSize","customFontSize","hintIconVariant","onInputClick","isPasswordField","showPassword","setShowPassword","inputType","finalFontSize","fontSizeMap","fontSizeClass","customFontSizeStyle","handleInput","textarea","backgroundValue","backgroundColor","fontWeight","handleFieldClick","commonInputClasses","ListItem","showCheckbox","showLeadingImage","showDescription","showTag","showTrailingText","customTitleColor","customBackgroundColor","customHoverColor","customLeadingIconColor","leadingImageUrl","leadingImageAlt","tagContent","tagVariant","trailingText","middleContainerClassName","handleCheckboxClick","Element3","DropMenu","header","headerSize","selectedIds","onSelect","showDividerAfter","itemProps","isSelected","isLastItem","ChatHistorialItem","preview","menuItems","isMenuOpen","setIsMenuOpen","menuRef","buttonRef","configuredMenuItems","More","selectedItem","groupItemsByDate","now","today","last7Days","last30Days","last90Days","acc","itemDate","filterItems","query","lowerQuery","ChatHistorial","onItemClick","searchPlaceholder","onSearchChange","searchQuery","setSearchQuery","groupedItems","filtered","handleSearchChange","renderSection","sectionItems","ChatHistorialItemComponent","hasNoResults","SearchNormal","switcherItems","ChatInputText","inputValue","onInputChange","onSendClick","placeholder","minLines","maxLines","switcherValue","setSwitcherValue","LINE_HEIGHT","minHeight","scrollHeight","newHeight","handleKeyDown","Hashtag","TextArea","AddCircle","Switcher","ChatMessage","ChatMessageOptions","onCopyClick","onLikeClick","onDislikeClick","onRefreshClick","isLiked","setIsLiked","isDisliked","setIsDisliked","handleLikeClick","handleDislikeClick","Copy","Like1","Dislike","Refresh","AttachmentMessage","fileName","fileSize","alignment","ChatTypingIndicator","ReactMarkdown","MarkdownRenderer","Suspense","ChatPanel","messages","showTypingIndicator","borderSide","borderStyle","showHeader","headerHeight","historialItems","onHistorialItemClick","historialSearchPlaceholder","onHistorialSearchChange","showChatInput","chatInputValue","onChatInputChange","onChatSendClick","chatInputPlaceholder","chatInputVariant","chatInputMinLines","chatInputMaxLines","onMessageCopyClick","onMessageLikeClick","onMessageDislikeClick","onMessageRefreshClick","borderClasses","Divider","message","sizeClasses","stateClasses","getStateStyles","Chip","leftContent","rightContent","showLeftContent","showRightContent","showText","cloneIconElement","el","existingStyle","newProps","isClickable","hasLeftContent","hasRightContent","currentSize","currentState","stateSpecificStyles","chipClasses","IconWrapperClasses","gapValue","LeftContentWrapper","RightContentWrapper","COLOR_VARIABLE_NAMES","extractColors","extractedColors","varName","ColorPalette","colorsProp","colors","setColors","forceUpdate","setForceUpdate","observer","mutations","mutation","name","ColumnHandler","layoutConfig","ComboBox","layout","leadingAvatar","trailingAddon","inputTextColor","chevronColor","optionActiveColor","optionActiveTextColor","optionTextColor","setQuery","currentSizeConfig","filteredOptions","inputClasses","wrapperClasses","HeadlessCombobox","active","ContextualMenu","trigger","align","offset","triggerRef","DragAndDropListItem","tooltipContent","iconColor","labelClassName","textColor","fontWeightMap","calculatedIconSize","labelClasses","TooltipPrimitive","Dropdown","menuSize","customHeight","customRadius","customPlaceholderColor","effectiveMenuSize","dropdownPosition","setDropdownPosition","isClient","setIsClient","updatePosition","spaceBelow","spaceAbove","shouldOpenUpwards","handleSelect","customHeightStyle","getButtonRadiusStyle","getOptionsRadiusStyle","placeholderColorStyle","placeholderColorClass","backgroundColorClass","backgroundColorStyle","Category","ArrowUp2","createPortal","DropdownMenu","Menu","DropZone","isOver","activeHeight","inactiveHeight","transitionDuration","transitionTimingFunction","style","dropRef","ErrorBoundary","Component","error","errorInfo","componentName","onError","hasError","fallback","defaultTitle","defaultMessage","retryLabel","ErrorState","Danger","onRetry","showDetailsInProduction","maxWidth","showDetails","TypesPanel","FloatingBar","groups","barClasses","openDropdownId","setOpenDropdownId","dropdownRef","group","groupIndex","GridDraggableItem","text","handleClick","getJustifyClass","justify","getAlignClass","HeaderLeftContent","HeaderCenter","HeaderRight","logoVisibilityClasses","Header","logoVariant","showLogo","logoSectionGap","leftWidth","centerWidth","rightWidth","centerFullHeight","centerContent","calculateHeaderWidths","widthSideFallback","centerWidthFallback","leftPanelWidth","rightPanelWidth","ImageUploader","onImageSelected","acceptedFileTypes","maxFileSize","initialPreviewUrl","dragCounter","isDragActive","setIsDragActive","previewUrl","setPreviewUrl","isHovered","setIsHovered","_error","setError","handleFileSelection","file","fileSizeInMB","handleChange","handleDrop","handleDragOver","handleDragEnter","handleDragLeave","handleBrowseClick","handleMouseEnter","handleMouseLeave","InfoLabel","colorClass","match","renderIcon","Warning2","useDebounce","delay","debouncedValue","setDebouncedValue","handler","InputSearch","onSearch","debounceMs","isLoading","showClearButton","errorMessage","suggestions","onSuggestionClick","controlledValue","autoComplete","maxLength","required","onBlur","onFocus","onInvalid","ariaLabel","_unusedSize","restProps","internalValue","setInternalValue","showSuggestions","setShowSuggestions","selectedSuggestionIndex","setSelectedSuggestionIndex","suggestionsRef","handleInputChange","selectedSuggestion","handleSuggestionClick","handleInputFocus","handleClear","suggestion","ArrowRotateRight","CloseCircle","filteredSuggestions","SearchNormal1","LabelWithIcon","customIconSize","Tooltip","content","sideOffset","showArrow","delayDuration","primaryButton","secondaryButton","customTextColor","hasButtons","customStyles","DefaultIcon","LabelWithTooltip","displayIcon","ModalContext","useModalContext","Modal","ModalTrigger","ModalContent","ModalHeader","ModalTitle","ModalDescription","ModalBody","ModalFooter","ModalFooterActions","backButton","cancelButton","acceptButton","modalSize","isSmall","ModalClose","ProductIcon","direction","defaultWidth","defaultHeight","LabelIcon","labelSize","iconColorClass","labelColorClass","gapClass","alignmentClass","labelSizeClass","ProjectCard","companyImage","badgeStatus","badgeStatusState","onButtonAction","stackLabel","powerLabel","calendarLabel","link1Label","link1Href","link2Label","link2Href","link2Status","onCardClick","cardClasses","ProgressBar","indicatorStyles","SIZE_CONFIG","COLORS","ProgressCircle","shape","showLabel","generatedId","progressId","labelId","colorConfig","getAriaLabel","svgSize","radius","circumference","strokeDashoffset","getContainerClasses","renderCircle","renderHalfCircle","viewBoxWidth","viewBoxHeight","arcRadius","startX","startY","endX","endY","halfCircumference","halfStrokeDashoffset","ProgressTracker","currentStep","totalSteps","currentStepProgress","stepDescriptions","subtitle","collapsedProp","onToggleCollapse","onlyProgressCircle","collapsed","setCollapsed","handleToggleCollapse","newCollapsed","steps","_","stepNumber","overallProgress","AnimatePresence","step","isCurrentStep","Radio","withBorder","TableContext","useTableContext","TableProvider","Table","columns","tableLayout","parentRef","sorting","setSorting","rowSelection","setRowSelection","selection","globalFilter","setGlobalFilter","pagination","setPagination","columnSizing","setColumnSizing","newSorting","pageIndex","tableColumns","cols","column","colDef","row","getValue","CellComponent","table","useReactTable","updater","newSort","newSelection","newSelectedSet","numKey","newFilter","newPagination","getCoreRowModel","getSortedRowModel","getFilteredRowModel","getPaginationRowModel","mergedTableLayout","resetAllFilters","TableRoot","virtualized","TableRow","isTBody","rowBorder","rowHeight","rowStyle","TableColumnHeader","headerBackground","dense","cellBorder","columnsResizable","cellAlign","isSorted","canResize","headerCell","SortIcon","FilterIcon","TableHeader","headerBorder","headerGroup","TableCell","cell","TableEmptyState","showClearFiltersButton","onClearFilters","colSpan","TableBody","emptyStateTitle","emptyStateDescription","contextEmptyStateTitle","contextEmptyStateDescription","contextShowClearFiltersButton","contextResetAllFilters","hasNoFilteredRows","finalEmptyStateTitle","finalEmptyStateDescription","finalShowClearFiltersButton","finalOnClearFilters","rowVirtualizer","useVirtualizer","totalSize","virtualRow","sanitizePageNumber","pageCount","pageNumber","roundedPage","clampedPage","createPageSizeOptions","sizes","calculateItemCounts","pageSize","totalItems","filteredRowCount","start","end","TablePagination","showPagination","paginationState","canNavigatePrevious","canNavigateNext","pageInputValue","setPageInputValue","handlePageInputChange","sanitizedPage","handlePageSizeChange","navigateToPreviousPage","navigateToNextPage","pageSizeOptions","currentPageSize","TableColumnFilter","columnId","filterValue","setFilterValue","columnDef","filterType","filterTitle","handleFilterChange","renderFilter","TableColumnVisibility","position","toggleAllColumns","visible","allVisible","someVisible","defaultTrigger","Eye","isVisible","headerText","EyeSlash","AvatarRenderer","TagRenderer","variantMap","defaultVariant","stringValue","EmailRenderer","email","TextRenderer","NumberRenderer","num","DateRenderer","date","BooleanRenderer","isTrue","dataTypeRenderers","parseColumnConfig","columnConfig","renderer","rowIndex","parseTableConfig","col","addSelectionColumn","usersTableConfig","usersTableData","usersApiResponse","productsTableConfig","productsTableData","productsApiResponse","contentSpacingMap","tabs","customPaddingBottom","contentSpacing","fullHeight","iconLabelGap","showBorder","tabPaddingX","tabListClassName","listClassName","tabListStyle","getContentSpacingClass","contentSpacingStyle","containerStyle","groupStyle","Tab","selected","iconToRender","HeaderTabs","onAddTab","onArrowRightClick","onCloseTab","tabWidth","scrollDistance","scrollContainerRef","showLeftArrow","setShowLeftArrow","showRightArrow","setShowRightArrow","checkScroll","scrollLeft","scrollWidth","clientWidth","scrollRight","resize","resizeStyles","ThemeToggle","toastBaseClasses","toastVariantClasses","toastIconSize","toastTitleClasses","toastDescriptionClasses","getToastVariantClasses","ToastComponent","onOpenChange","duration","toastProps","shouldShowIcon","Toast","ToastContext","useToast","ToastProvider","toasts","setToasts","toast","newToast","handleOpenChange","toastId","t","toastItem","toggleConfig","Toggle","TypesPanelBodyGrid","renderItem","TypesPanelBodyList","HambergerMenu","dropdownItems","User","viewOptions","Task","TypesPanelHeader","controlledSelectedType","onTypeChange","controlledSelectedView","onViewChange","internalSelectedType","setInternalSelectedType","internalSelectedView","setInternalSelectedView","selectedType","selectedView","handleTypeChange","handleViewChange","view","TypesPanelHeaderSearch","controlledSearchQuery","buttonGroupSize","internalSearchQuery","setInternalSearchQuery","PanelHeader","UserMenu","user","sections","avatarSize","handleToggleChange","section","sectionIndex","DateRangePicker","selectedProp","onCancel","onAccept","extraMonth","pickType","cancelLabel","acceptLabel","internalSelected","setInternalSelected","range","handleCancel","handleAccept","dayPickerProps","DayPicker","orientation","CardAction","iconType","iconVariant","linkProps","badge","bottomContent","labelInlineContent","contentGap","classNameActions","ProjectCardPlan","planLabel","priceLabel","timeLabel","nextPaymentLabel","dateLabel","buttonLabel1","onClickButton1","buttonLabel2","onClickButton2","WorkspaceSettings","actionButtonLabel","actionButtonLabelOnClick","extraComponent","SupportCard","buttonItems","buttonItem","WidgetBuilderItemHoverAction","onMaximize","onEdit","onCopy","onTrash","selectedValue","setSelectedValue","handleActionChange","buttonGroupOptions","ProjectActionCard","image","imageAlt","actionButtons","labelIcons","button","SettingsCard","headerActions","footerText","footerActions","footerVariant","classNameHeader","classNameBody","classNameFooter","showFooter","footerVariantClasses","Add2Icon","GridIcon","FormFieldGroup","onAction","buttonGroupOptions2","VisualComposer","onWidgetReorder","onSectionReorder","onDataChange","internalData","setInternalData","showLayoutPicker","setShowLayoutPicker","addSection","columnCount","getColumnCount","newColumns","newSection","updatedData","getGridClass","getColumnSpan","columnIndex","widget","WidgetContainer","AuthFormWidget","mode","onSubmit","onSettings","setName","setEmail","password","setPassword","confirmPassword","setConfirmPassword","showConfirmPassword","setShowConfirmPassword","isSignUp","Setting","RecoveryWidget","onBackToLogin","setValue","handleSubmit","isEmailStep","PasswordResetWidget","AuthActionWidget","onRecover","AuthSocialOptionsWidget","onGoogleSignIn","onAppleSignIn","actionPrompt","actionLabel","Google","Apple","ModuleCardHeader","showSettings","Grid5","ModuleCard","minWidth","emptyState","ModuleFieldItem","isLast","onDelete","showActions","dragHandleProps","innerRef","showButtons","Trash","RelatedDataCard","onExportClick","opacity","ExportSquare","idx","SidebarHeader","widgetCount","visibleCount","SidebarSearchBar","WidgetSidebar","showSearch","headerIcon","headerTooltip","filteredItems","totalWidgets","visibleWidgets","Box2"],"mappings":"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"}