@iclips/ui 1.4.12 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (686) hide show
  1. package/LICENSE +21 -0
  2. package/MIGRATION-v2.md +214 -0
  3. package/README.md +106 -0
  4. package/dist/alert-theme.css +94 -0
  5. package/dist/assets/illustrations/announcements.png.cjs +2 -0
  6. package/dist/assets/illustrations/announcements.png.cjs.map +1 -0
  7. package/dist/assets/illustrations/announcements.png.js +5 -0
  8. package/dist/assets/illustrations/announcements.png.js.map +1 -0
  9. package/dist/assets/illustrations/checklist-approved.png.cjs +2 -0
  10. package/dist/assets/illustrations/checklist-approved.png.cjs.map +1 -0
  11. package/dist/assets/illustrations/checklist-approved.png.js +5 -0
  12. package/dist/assets/illustrations/checklist-approved.png.js.map +1 -0
  13. package/dist/assets/illustrations/client-profile.png.cjs +2 -0
  14. package/dist/assets/illustrations/client-profile.png.cjs.map +1 -0
  15. package/dist/assets/illustrations/client-profile.png.js +5 -0
  16. package/dist/assets/illustrations/client-profile.png.js.map +1 -0
  17. package/dist/assets/illustrations/contract-agreement.png.cjs +2 -0
  18. package/dist/assets/illustrations/contract-agreement.png.cjs.map +1 -0
  19. package/dist/assets/illustrations/contract-agreement.png.js +5 -0
  20. package/dist/assets/illustrations/contract-agreement.png.js.map +1 -0
  21. package/dist/assets/illustrations/create-record.png.cjs +2 -0
  22. package/dist/assets/illustrations/create-record.png.cjs.map +1 -0
  23. package/dist/assets/illustrations/create-record.png.js +5 -0
  24. package/dist/assets/illustrations/create-record.png.js.map +1 -0
  25. package/dist/assets/illustrations/cta-action.png.cjs +2 -0
  26. package/dist/assets/illustrations/cta-action.png.cjs.map +1 -0
  27. package/dist/assets/illustrations/cta-action.png.js +5 -0
  28. package/dist/assets/illustrations/cta-action.png.js.map +1 -0
  29. package/dist/assets/illustrations/draft-document.png.cjs +2 -0
  30. package/dist/assets/illustrations/draft-document.png.cjs.map +1 -0
  31. package/dist/assets/illustrations/draft-document.png.js +5 -0
  32. package/dist/assets/illustrations/draft-document.png.js.map +1 -0
  33. package/dist/assets/illustrations/edit-company.png.cjs +2 -0
  34. package/dist/assets/illustrations/edit-company.png.cjs.map +1 -0
  35. package/dist/assets/illustrations/edit-company.png.js +5 -0
  36. package/dist/assets/illustrations/edit-company.png.js.map +1 -0
  37. package/dist/assets/illustrations/edit-document.png.cjs +2 -0
  38. package/dist/assets/illustrations/edit-document.png.cjs.map +1 -0
  39. package/dist/assets/illustrations/edit-document.png.js +5 -0
  40. package/dist/assets/illustrations/edit-document.png.js.map +1 -0
  41. package/dist/assets/illustrations/empty-no-results.png.cjs +2 -0
  42. package/dist/assets/illustrations/empty-no-results.png.cjs.map +1 -0
  43. package/dist/assets/illustrations/empty-no-results.png.js +5 -0
  44. package/dist/assets/illustrations/empty-no-results.png.js.map +1 -0
  45. package/dist/assets/illustrations/empty-not-found.png.cjs +2 -0
  46. package/dist/assets/illustrations/empty-not-found.png.cjs.map +1 -0
  47. package/dist/assets/illustrations/empty-not-found.png.js +5 -0
  48. package/dist/assets/illustrations/empty-not-found.png.js.map +1 -0
  49. package/dist/assets/illustrations/empty-task-approved.png.cjs +2 -0
  50. package/dist/assets/illustrations/empty-task-approved.png.cjs.map +1 -0
  51. package/dist/assets/illustrations/empty-task-approved.png.js +5 -0
  52. package/dist/assets/illustrations/empty-task-approved.png.js.map +1 -0
  53. package/dist/assets/illustrations/empty-workflow-status.png.cjs +2 -0
  54. package/dist/assets/illustrations/empty-workflow-status.png.cjs.map +1 -0
  55. package/dist/assets/illustrations/empty-workflow-status.png.js +5 -0
  56. package/dist/assets/illustrations/empty-workflow-status.png.js.map +1 -0
  57. package/dist/assets/illustrations/integrations.png.cjs +2 -0
  58. package/dist/assets/illustrations/integrations.png.cjs.map +1 -0
  59. package/dist/assets/illustrations/integrations.png.js +5 -0
  60. package/dist/assets/illustrations/integrations.png.js.map +1 -0
  61. package/dist/assets/illustrations/onboarding-tips.png.cjs +2 -0
  62. package/dist/assets/illustrations/onboarding-tips.png.cjs.map +1 -0
  63. package/dist/assets/illustrations/onboarding-tips.png.js +5 -0
  64. package/dist/assets/illustrations/onboarding-tips.png.js.map +1 -0
  65. package/dist/assets/illustrations/scheduled-tasks.png.cjs +2 -0
  66. package/dist/assets/illustrations/scheduled-tasks.png.cjs.map +1 -0
  67. package/dist/assets/illustrations/scheduled-tasks.png.js +5 -0
  68. package/dist/assets/illustrations/scheduled-tasks.png.js.map +1 -0
  69. package/dist/assets/illustrations/search-documents.png.cjs +2 -0
  70. package/dist/assets/illustrations/search-documents.png.cjs.map +1 -0
  71. package/dist/assets/illustrations/search-documents.png.js +5 -0
  72. package/dist/assets/illustrations/search-documents.png.js.map +1 -0
  73. package/dist/assets/illustrations/success-checkmark.png.cjs +2 -0
  74. package/dist/assets/illustrations/success-checkmark.png.cjs.map +1 -0
  75. package/dist/assets/illustrations/success-checkmark.png.js +5 -0
  76. package/dist/assets/illustrations/success-checkmark.png.js.map +1 -0
  77. package/dist/components/ui/brand-colors.cjs +2 -0
  78. package/dist/components/ui/brand-colors.cjs.map +1 -0
  79. package/dist/components/ui/brand-colors.js +8 -0
  80. package/dist/components/ui/brand-colors.js.map +1 -0
  81. package/dist/components/ui/charts/chart.cjs +8 -0
  82. package/dist/components/ui/charts/chart.cjs.map +1 -0
  83. package/dist/components/ui/charts/chart.js +214 -0
  84. package/dist/components/ui/charts/chart.js.map +1 -0
  85. package/dist/components/ui/charts/donut-chart.cjs +2 -0
  86. package/dist/components/ui/charts/donut-chart.cjs.map +1 -0
  87. package/dist/components/ui/charts/donut-chart.js +285 -0
  88. package/dist/components/ui/charts/donut-chart.js.map +1 -0
  89. package/dist/components/ui/charts/kpi-card.cjs +2 -0
  90. package/dist/components/ui/charts/kpi-card.cjs.map +1 -0
  91. package/dist/components/ui/charts/kpi-card.js +71 -0
  92. package/dist/components/ui/charts/kpi-card.js.map +1 -0
  93. package/dist/components/ui/data/advanced-data-table.cjs +2 -0
  94. package/dist/components/ui/data/advanced-data-table.cjs.map +1 -0
  95. package/dist/components/ui/data/advanced-data-table.js +69 -0
  96. package/dist/components/ui/data/advanced-data-table.js.map +1 -0
  97. package/dist/components/ui/data/comment-system.cjs +2 -0
  98. package/dist/components/ui/data/comment-system.cjs.map +1 -0
  99. package/dist/components/ui/data/comment-system.js +492 -0
  100. package/dist/components/ui/data/comment-system.js.map +1 -0
  101. package/dist/components/ui/data/data-table-empty-state.cjs +2 -0
  102. package/dist/components/ui/data/data-table-empty-state.cjs.map +1 -0
  103. package/dist/components/ui/data/data-table-empty-state.js +40 -0
  104. package/dist/components/ui/data/data-table-empty-state.js.map +1 -0
  105. package/dist/components/ui/data/data-table-toolbar.cjs +2 -0
  106. package/dist/components/ui/data/data-table-toolbar.cjs.map +1 -0
  107. package/dist/components/ui/data/data-table-toolbar.js +85 -0
  108. package/dist/components/ui/data/data-table-toolbar.js.map +1 -0
  109. package/dist/components/ui/data/data-table.cjs +2 -0
  110. package/dist/components/ui/data/data-table.cjs.map +1 -0
  111. package/dist/components/ui/data/data-table.js +181 -0
  112. package/dist/components/ui/data/data-table.js.map +1 -0
  113. package/dist/components/ui/data/document-editor.cjs +2 -0
  114. package/dist/components/ui/data/document-editor.cjs.map +1 -0
  115. package/dist/components/ui/data/document-editor.js +158 -0
  116. package/dist/components/ui/data/document-editor.js.map +1 -0
  117. package/dist/components/ui/data/editorial-calendar.cjs +2 -0
  118. package/dist/components/ui/data/editorial-calendar.cjs.map +1 -0
  119. package/dist/components/ui/data/editorial-calendar.js +840 -0
  120. package/dist/components/ui/data/editorial-calendar.js.map +1 -0
  121. package/dist/components/ui/data/filter-bar.cjs +2 -0
  122. package/dist/components/ui/data/filter-bar.cjs.map +1 -0
  123. package/dist/components/ui/data/filter-bar.js +60 -0
  124. package/dist/components/ui/data/filter-bar.js.map +1 -0
  125. package/dist/components/ui/data/filter-builder.cjs +2 -0
  126. package/dist/components/ui/data/filter-builder.cjs.map +1 -0
  127. package/dist/components/ui/data/filter-builder.js +378 -0
  128. package/dist/components/ui/data/filter-builder.js.map +1 -0
  129. package/dist/components/ui/data/filter-chip.cjs +2 -0
  130. package/dist/components/ui/data/filter-chip.cjs.map +1 -0
  131. package/dist/components/ui/data/filter-chip.js +39 -0
  132. package/dist/components/ui/data/filter-chip.js.map +1 -0
  133. package/dist/components/ui/data/mention-list.cjs +2 -0
  134. package/dist/components/ui/data/mention-list.cjs.map +1 -0
  135. package/dist/components/ui/data/mention-list.js +46 -0
  136. package/dist/components/ui/data/mention-list.js.map +1 -0
  137. package/dist/components/ui/data/table-pagination.cjs +2 -0
  138. package/dist/components/ui/data/table-pagination.cjs.map +1 -0
  139. package/dist/components/ui/data/table-pagination.js +176 -0
  140. package/dist/components/ui/data/table-pagination.js.map +1 -0
  141. package/dist/components/ui/data/table-types.cjs +2 -0
  142. package/dist/components/ui/data/table-types.cjs.map +1 -0
  143. package/dist/components/ui/data/table-types.js +14 -0
  144. package/dist/components/ui/data/table-types.js.map +1 -0
  145. package/dist/components/ui/data/table.cjs +2 -0
  146. package/dist/components/ui/data/table.cjs.map +1 -0
  147. package/dist/components/ui/data/table.js +130 -0
  148. package/dist/components/ui/data/table.js.map +1 -0
  149. package/dist/components/ui/feedback/alert.cjs +2 -0
  150. package/dist/components/ui/feedback/alert.cjs.map +1 -0
  151. package/dist/components/ui/feedback/alert.js +67 -0
  152. package/dist/components/ui/feedback/alert.js.map +1 -0
  153. package/dist/components/ui/feedback/empty-state.cjs +2 -0
  154. package/dist/components/ui/feedback/empty-state.cjs.map +1 -0
  155. package/dist/components/ui/feedback/empty-state.js +78 -0
  156. package/dist/components/ui/feedback/empty-state.js.map +1 -0
  157. package/dist/components/ui/feedback/illustrations.cjs +2 -0
  158. package/dist/components/ui/feedback/illustrations.cjs.map +1 -0
  159. package/dist/components/ui/feedback/illustrations.js +157 -0
  160. package/dist/components/ui/feedback/illustrations.js.map +1 -0
  161. package/dist/components/ui/feedback/toast.cjs +2 -0
  162. package/dist/components/ui/feedback/toast.cjs.map +1 -0
  163. package/dist/components/ui/feedback/toast.js +38 -0
  164. package/dist/components/ui/feedback/toast.js.map +1 -0
  165. package/dist/components/ui/forms/calendar.cjs +2 -0
  166. package/dist/components/ui/forms/calendar.cjs.map +1 -0
  167. package/dist/components/ui/forms/calendar.js +65 -0
  168. package/dist/components/ui/forms/calendar.js.map +1 -0
  169. package/dist/components/ui/forms/checkbox.cjs +2 -0
  170. package/dist/components/ui/forms/checkbox.cjs.map +1 -0
  171. package/dist/components/ui/forms/checkbox.js +31 -0
  172. package/dist/components/ui/forms/checkbox.js.map +1 -0
  173. package/dist/components/ui/forms/color-picker.cjs +2 -0
  174. package/dist/components/ui/forms/color-picker.cjs.map +1 -0
  175. package/dist/components/ui/forms/color-picker.js +151 -0
  176. package/dist/components/ui/forms/color-picker.js.map +1 -0
  177. package/dist/components/ui/forms/combobox.cjs +2 -0
  178. package/dist/components/ui/forms/combobox.cjs.map +1 -0
  179. package/dist/components/ui/forms/combobox.js +208 -0
  180. package/dist/components/ui/forms/combobox.js.map +1 -0
  181. package/dist/components/ui/forms/currency-input.cjs +2 -0
  182. package/dist/components/ui/forms/currency-input.cjs.map +1 -0
  183. package/dist/components/ui/forms/currency-input.js +81 -0
  184. package/dist/components/ui/forms/currency-input.js.map +1 -0
  185. package/dist/components/ui/forms/date-picker.cjs +2 -0
  186. package/dist/components/ui/forms/date-picker.cjs.map +1 -0
  187. package/dist/components/ui/forms/date-picker.js +197 -0
  188. package/dist/components/ui/forms/date-picker.js.map +1 -0
  189. package/dist/components/ui/forms/date-range-picker.cjs +2 -0
  190. package/dist/components/ui/forms/date-range-picker.cjs.map +1 -0
  191. package/dist/components/ui/forms/date-range-picker.js +303 -0
  192. package/dist/components/ui/forms/date-range-picker.js.map +1 -0
  193. package/dist/components/ui/forms/editable-badge.cjs +2 -0
  194. package/dist/components/ui/forms/editable-badge.cjs.map +1 -0
  195. package/dist/components/ui/forms/editable-badge.js +137 -0
  196. package/dist/components/ui/forms/editable-badge.js.map +1 -0
  197. package/dist/components/ui/forms/file-attachment-list.cjs +2 -0
  198. package/dist/components/ui/forms/file-attachment-list.cjs.map +1 -0
  199. package/dist/components/ui/forms/file-attachment-list.js +235 -0
  200. package/dist/components/ui/forms/file-attachment-list.js.map +1 -0
  201. package/dist/components/ui/forms/file-upload-zone.cjs +3 -0
  202. package/dist/components/ui/forms/file-upload-zone.cjs.map +1 -0
  203. package/dist/components/ui/forms/file-upload-zone.js +142 -0
  204. package/dist/components/ui/forms/file-upload-zone.js.map +1 -0
  205. package/dist/components/ui/forms/form.cjs +2 -0
  206. package/dist/components/ui/forms/form.cjs.map +1 -0
  207. package/dist/components/ui/forms/form.js +109 -0
  208. package/dist/components/ui/forms/form.js.map +1 -0
  209. package/dist/components/ui/forms/input-group.cjs +2 -0
  210. package/dist/components/ui/forms/input-group.cjs.map +1 -0
  211. package/dist/components/ui/forms/input-group.js +131 -0
  212. package/dist/components/ui/forms/input-group.js.map +1 -0
  213. package/dist/components/ui/forms/input-otp.cjs +2 -0
  214. package/dist/components/ui/forms/input-otp.cjs.map +1 -0
  215. package/dist/components/ui/forms/input-otp.js +63 -0
  216. package/dist/components/ui/forms/input-otp.js.map +1 -0
  217. package/dist/components/ui/forms/input-validation.cjs +2 -0
  218. package/dist/components/ui/forms/input-validation.cjs.map +1 -0
  219. package/dist/components/ui/forms/input-validation.js +55 -0
  220. package/dist/components/ui/forms/input-validation.js.map +1 -0
  221. package/dist/components/ui/forms/input.cjs +2 -0
  222. package/dist/components/ui/forms/input.cjs.map +1 -0
  223. package/dist/components/ui/forms/input.js +26 -0
  224. package/dist/components/ui/forms/input.js.map +1 -0
  225. package/dist/components/ui/forms/month-range-picker.cjs +2 -0
  226. package/dist/components/ui/forms/month-range-picker.cjs.map +1 -0
  227. package/dist/components/ui/forms/month-range-picker.js +261 -0
  228. package/dist/components/ui/forms/month-range-picker.js.map +1 -0
  229. package/dist/components/ui/forms/multi-select.cjs +2 -0
  230. package/dist/components/ui/forms/multi-select.cjs.map +1 -0
  231. package/dist/components/ui/forms/multi-select.js +251 -0
  232. package/dist/components/ui/forms/multi-select.js.map +1 -0
  233. package/dist/components/ui/forms/number-input.cjs +2 -0
  234. package/dist/components/ui/forms/number-input.cjs.map +1 -0
  235. package/dist/components/ui/forms/number-input.js +220 -0
  236. package/dist/components/ui/forms/number-input.js.map +1 -0
  237. package/dist/components/ui/forms/password-input.cjs +2 -0
  238. package/dist/components/ui/forms/password-input.cjs.map +1 -0
  239. package/dist/components/ui/forms/password-input.js +43 -0
  240. package/dist/components/ui/forms/password-input.js.map +1 -0
  241. package/dist/components/ui/forms/radio-group.cjs +2 -0
  242. package/dist/components/ui/forms/radio-group.cjs.map +1 -0
  243. package/dist/components/ui/forms/radio-group.js +41 -0
  244. package/dist/components/ui/forms/radio-group.js.map +1 -0
  245. package/dist/components/ui/forms/select.cjs +2 -0
  246. package/dist/components/ui/forms/select.cjs.map +1 -0
  247. package/dist/components/ui/forms/select.js +140 -0
  248. package/dist/components/ui/forms/select.js.map +1 -0
  249. package/dist/components/ui/forms/slider.cjs +2 -0
  250. package/dist/components/ui/forms/slider.cjs.map +1 -0
  251. package/dist/components/ui/forms/slider.js +62 -0
  252. package/dist/components/ui/forms/slider.js.map +1 -0
  253. package/dist/components/ui/forms/social-button.cjs +2 -0
  254. package/dist/components/ui/forms/social-button.cjs.map +1 -0
  255. package/dist/components/ui/forms/social-button.js +86 -0
  256. package/dist/components/ui/forms/social-button.js.map +1 -0
  257. package/dist/components/ui/forms/switch.cjs +2 -0
  258. package/dist/components/ui/forms/switch.cjs.map +1 -0
  259. package/dist/components/ui/forms/switch.js +31 -0
  260. package/dist/components/ui/forms/switch.js.map +1 -0
  261. package/dist/components/ui/forms/textarea.cjs +2 -0
  262. package/dist/components/ui/forms/textarea.cjs.map +1 -0
  263. package/dist/components/ui/forms/textarea.js +22 -0
  264. package/dist/components/ui/forms/textarea.js.map +1 -0
  265. package/dist/components/ui/forms/time-picker.cjs +2 -0
  266. package/dist/components/ui/forms/time-picker.cjs.map +1 -0
  267. package/dist/components/ui/forms/time-picker.js +195 -0
  268. package/dist/components/ui/forms/time-picker.js.map +1 -0
  269. package/dist/components/ui/forms/toggle-group.cjs +2 -0
  270. package/dist/components/ui/forms/toggle-group.cjs.map +1 -0
  271. package/dist/components/ui/forms/toggle-group.js +53 -0
  272. package/dist/components/ui/forms/toggle-group.js.map +1 -0
  273. package/dist/components/ui/forms/toggle.cjs +2 -0
  274. package/dist/components/ui/forms/toggle.cjs.map +1 -0
  275. package/dist/components/ui/forms/toggle.js +40 -0
  276. package/dist/components/ui/forms/toggle.js.map +1 -0
  277. package/dist/components/ui/layout/accordion.cjs +2 -0
  278. package/dist/components/ui/layout/accordion.cjs.map +1 -0
  279. package/dist/components/ui/layout/accordion.js +53 -0
  280. package/dist/components/ui/layout/accordion.js.map +1 -0
  281. package/dist/components/ui/layout/auth-layout.cjs +2 -0
  282. package/dist/components/ui/layout/auth-layout.cjs.map +1 -0
  283. package/dist/components/ui/layout/auth-layout.js +74 -0
  284. package/dist/components/ui/layout/auth-layout.js.map +1 -0
  285. package/dist/components/ui/layout/card.cjs +2 -0
  286. package/dist/components/ui/layout/card.cjs.map +1 -0
  287. package/dist/components/ui/layout/card.js +104 -0
  288. package/dist/components/ui/layout/card.js.map +1 -0
  289. package/dist/components/ui/layout/carousel.cjs +2 -0
  290. package/dist/components/ui/layout/carousel.cjs.map +1 -0
  291. package/dist/components/ui/layout/carousel.js +189 -0
  292. package/dist/components/ui/layout/carousel.js.map +1 -0
  293. package/dist/components/ui/layout/collapsible.cjs +2 -0
  294. package/dist/components/ui/layout/collapsible.cjs.map +1 -0
  295. package/dist/components/ui/layout/collapsible.js +30 -0
  296. package/dist/components/ui/layout/collapsible.js.map +1 -0
  297. package/dist/components/ui/layout/page-header.cjs +2 -0
  298. package/dist/components/ui/layout/page-header.cjs.map +1 -0
  299. package/dist/components/ui/layout/page-header.js +81 -0
  300. package/dist/components/ui/layout/page-header.js.map +1 -0
  301. package/dist/components/ui/layout/resizable.cjs +2 -0
  302. package/dist/components/ui/layout/resizable.cjs.map +1 -0
  303. package/dist/components/ui/layout/resizable.js +45 -0
  304. package/dist/components/ui/layout/resizable.js.map +1 -0
  305. package/dist/components/ui/layout/scroll-area.cjs +2 -0
  306. package/dist/components/ui/layout/scroll-area.cjs.map +1 -0
  307. package/dist/components/ui/layout/scroll-area.js +56 -0
  308. package/dist/components/ui/layout/scroll-area.js.map +1 -0
  309. package/dist/components/ui/navigation/breadcrumb.cjs +2 -0
  310. package/dist/components/ui/navigation/breadcrumb.cjs.map +1 -0
  311. package/dist/components/ui/navigation/breadcrumb.js +94 -0
  312. package/dist/components/ui/navigation/breadcrumb.js.map +1 -0
  313. package/dist/components/ui/navigation/navigation-menu.cjs +2 -0
  314. package/dist/components/ui/navigation/navigation-menu.cjs.map +1 -0
  315. package/dist/components/ui/navigation/navigation-menu.js +144 -0
  316. package/dist/components/ui/navigation/navigation-menu.js.map +1 -0
  317. package/dist/components/ui/navigation/pagination.cjs +2 -0
  318. package/dist/components/ui/navigation/pagination.cjs.map +1 -0
  319. package/dist/components/ui/navigation/pagination.js +106 -0
  320. package/dist/components/ui/navigation/pagination.js.map +1 -0
  321. package/dist/components/ui/navigation/sidebar.cjs +2 -0
  322. package/dist/components/ui/navigation/sidebar.cjs.map +1 -0
  323. package/dist/components/ui/navigation/sidebar.js +579 -0
  324. package/dist/components/ui/navigation/sidebar.js.map +1 -0
  325. package/dist/components/ui/navigation/tabs.cjs +2 -0
  326. package/dist/components/ui/navigation/tabs.cjs.map +1 -0
  327. package/dist/components/ui/navigation/tabs.js +58 -0
  328. package/dist/components/ui/navigation/tabs.js.map +1 -0
  329. package/dist/components/ui/navigation/underline-tabs.cjs +2 -0
  330. package/dist/components/ui/navigation/underline-tabs.cjs.map +1 -0
  331. package/dist/components/ui/navigation/underline-tabs.js +109 -0
  332. package/dist/components/ui/navigation/underline-tabs.js.map +1 -0
  333. package/dist/components/ui/overlays/alert-dialog.cjs +2 -0
  334. package/dist/components/ui/overlays/alert-dialog.cjs.map +1 -0
  335. package/dist/components/ui/overlays/alert-dialog.js +135 -0
  336. package/dist/components/ui/overlays/alert-dialog.js.map +1 -0
  337. package/dist/components/ui/overlays/command.cjs +2 -0
  338. package/dist/components/ui/overlays/command.cjs.map +1 -0
  339. package/dist/components/ui/overlays/command.js +143 -0
  340. package/dist/components/ui/overlays/command.js.map +1 -0
  341. package/dist/components/ui/overlays/context-menu.cjs +2 -0
  342. package/dist/components/ui/overlays/context-menu.cjs.map +1 -0
  343. package/dist/components/ui/overlays/context-menu.js +197 -0
  344. package/dist/components/ui/overlays/context-menu.js.map +1 -0
  345. package/dist/components/ui/overlays/dialog.cjs +2 -0
  346. package/dist/components/ui/overlays/dialog.cjs.map +1 -0
  347. package/dist/components/ui/overlays/dialog.js +112 -0
  348. package/dist/components/ui/overlays/dialog.js.map +1 -0
  349. package/dist/components/ui/overlays/drawer.cjs +2 -0
  350. package/dist/components/ui/overlays/drawer.cjs.map +1 -0
  351. package/dist/components/ui/overlays/drawer.js +109 -0
  352. package/dist/components/ui/overlays/drawer.js.map +1 -0
  353. package/dist/components/ui/overlays/dropdown-menu.cjs +2 -0
  354. package/dist/components/ui/overlays/dropdown-menu.cjs.map +1 -0
  355. package/dist/components/ui/overlays/dropdown-menu.js +198 -0
  356. package/dist/components/ui/overlays/dropdown-menu.js.map +1 -0
  357. package/dist/components/ui/overlays/hover-card.cjs +2 -0
  358. package/dist/components/ui/overlays/hover-card.cjs.map +1 -0
  359. package/dist/components/ui/overlays/hover-card.js +40 -0
  360. package/dist/components/ui/overlays/hover-card.js.map +1 -0
  361. package/dist/components/ui/overlays/menubar.cjs +2 -0
  362. package/dist/components/ui/overlays/menubar.cjs.map +1 -0
  363. package/dist/components/ui/overlays/menubar.js +213 -0
  364. package/dist/components/ui/overlays/menubar.js.map +1 -0
  365. package/dist/components/ui/overlays/popover.cjs +2 -0
  366. package/dist/components/ui/overlays/popover.cjs.map +1 -0
  367. package/dist/components/ui/overlays/popover.js +36 -0
  368. package/dist/components/ui/overlays/popover.js.map +1 -0
  369. package/dist/components/ui/overlays/sheet.cjs +2 -0
  370. package/dist/components/ui/overlays/sheet.cjs.map +1 -0
  371. package/dist/components/ui/overlays/sheet.js +109 -0
  372. package/dist/components/ui/overlays/sheet.js.map +1 -0
  373. package/dist/components/ui/overlays/side-panel.cjs +16 -0
  374. package/dist/components/ui/overlays/side-panel.cjs.map +1 -0
  375. package/dist/components/ui/overlays/side-panel.js +117 -0
  376. package/dist/components/ui/overlays/side-panel.js.map +1 -0
  377. package/dist/components/ui/overlays/tooltip.cjs +2 -0
  378. package/dist/components/ui/overlays/tooltip.cjs.map +1 -0
  379. package/dist/components/ui/overlays/tooltip.js +50 -0
  380. package/dist/components/ui/overlays/tooltip.js.map +1 -0
  381. package/dist/components/ui/primitives/aspect-ratio.cjs +2 -0
  382. package/dist/components/ui/primitives/aspect-ratio.cjs.map +1 -0
  383. package/dist/components/ui/primitives/aspect-ratio.js +10 -0
  384. package/dist/components/ui/primitives/aspect-ratio.js.map +1 -0
  385. package/dist/components/ui/primitives/avatar.cjs +2 -0
  386. package/dist/components/ui/primitives/avatar.cjs.map +1 -0
  387. package/dist/components/ui/primitives/avatar.js +63 -0
  388. package/dist/components/ui/primitives/avatar.js.map +1 -0
  389. package/dist/components/ui/primitives/badge.cjs +2 -0
  390. package/dist/components/ui/primitives/badge.cjs.map +1 -0
  391. package/dist/components/ui/primitives/badge.js +50 -0
  392. package/dist/components/ui/primitives/badge.js.map +1 -0
  393. package/dist/components/ui/primitives/brand-logo.cjs +2 -0
  394. package/dist/components/ui/primitives/brand-logo.cjs.map +1 -0
  395. package/dist/components/ui/primitives/brand-logo.js +74 -0
  396. package/dist/components/ui/primitives/brand-logo.js.map +1 -0
  397. package/dist/components/ui/primitives/brand-logo.negative-paths.cjs +2 -0
  398. package/dist/components/ui/primitives/brand-logo.negative-paths.cjs.map +1 -0
  399. package/dist/components/ui/primitives/brand-logo.negative-paths.js +15 -0
  400. package/dist/components/ui/primitives/brand-logo.negative-paths.js.map +1 -0
  401. package/dist/components/ui/primitives/brand-logo.positive-paths.cjs +2 -0
  402. package/dist/components/ui/primitives/brand-logo.positive-paths.cjs.map +1 -0
  403. package/dist/components/ui/primitives/brand-logo.positive-paths.js +15 -0
  404. package/dist/components/ui/primitives/brand-logo.positive-paths.js.map +1 -0
  405. package/dist/components/ui/primitives/brand-logo.symbol-paths.cjs +2 -0
  406. package/dist/components/ui/primitives/brand-logo.symbol-paths.cjs.map +1 -0
  407. package/dist/components/ui/primitives/brand-logo.symbol-paths.js +8 -0
  408. package/dist/components/ui/primitives/brand-logo.symbol-paths.js.map +1 -0
  409. package/dist/components/ui/primitives/button.cjs +2 -0
  410. package/dist/components/ui/primitives/button.cjs.map +1 -0
  411. package/dist/components/ui/primitives/button.js +52 -0
  412. package/dist/components/ui/primitives/button.js.map +1 -0
  413. package/dist/components/ui/primitives/label.cjs +2 -0
  414. package/dist/components/ui/primitives/label.cjs.map +1 -0
  415. package/dist/components/ui/primitives/label.js +22 -0
  416. package/dist/components/ui/primitives/label.js.map +1 -0
  417. package/dist/components/ui/primitives/progress.cjs +2 -0
  418. package/dist/components/ui/primitives/progress.cjs.map +1 -0
  419. package/dist/components/ui/primitives/progress.js +30 -0
  420. package/dist/components/ui/primitives/progress.js.map +1 -0
  421. package/dist/components/ui/primitives/separator.cjs +2 -0
  422. package/dist/components/ui/primitives/separator.cjs.map +1 -0
  423. package/dist/components/ui/primitives/separator.js +26 -0
  424. package/dist/components/ui/primitives/separator.js.map +1 -0
  425. package/dist/components/ui/primitives/skeleton.cjs +2 -0
  426. package/dist/components/ui/primitives/skeleton.cjs.map +1 -0
  427. package/dist/components/ui/primitives/skeleton.js +31 -0
  428. package/dist/components/ui/primitives/skeleton.js.map +1 -0
  429. package/dist/components/ui/utils.cjs +2 -0
  430. package/dist/components/ui/utils.cjs.map +1 -0
  431. package/dist/components/ui/utils.js +20 -0
  432. package/dist/components/ui/utils.js.map +1 -0
  433. package/dist/editor.cjs +2 -0
  434. package/dist/editor.cjs.map +1 -0
  435. package/dist/editor.d.cts +114 -0
  436. package/dist/editor.d.ts +114 -0
  437. package/dist/editor.js +12 -0
  438. package/dist/editor.js.map +1 -0
  439. package/dist/hooks/use-data-table-filters.cjs +2 -0
  440. package/dist/hooks/use-data-table-filters.cjs.map +1 -0
  441. package/dist/hooks/use-data-table-filters.js +118 -0
  442. package/dist/hooks/use-data-table-filters.js.map +1 -0
  443. package/dist/hooks/use-data-table.cjs +2 -0
  444. package/dist/hooks/use-data-table.cjs.map +1 -0
  445. package/dist/hooks/use-data-table.js +84 -0
  446. package/dist/hooks/use-data-table.js.map +1 -0
  447. package/dist/hooks/use-mobile.cjs +2 -0
  448. package/dist/hooks/use-mobile.cjs.map +1 -0
  449. package/dist/hooks/use-mobile.js +17 -0
  450. package/dist/hooks/use-mobile.js.map +1 -0
  451. package/dist/hooks/use-table-pagination.cjs +2 -0
  452. package/dist/hooks/use-table-pagination.cjs.map +1 -0
  453. package/dist/hooks/use-table-pagination.js +44 -0
  454. package/dist/hooks/use-table-pagination.js.map +1 -0
  455. package/dist/index.cjs +1 -242
  456. package/dist/index.cjs.map +1 -1
  457. package/dist/index.css +1 -1
  458. package/dist/index.d.cts +2918 -0
  459. package/dist/index.d.ts +2918 -149
  460. package/dist/index.js +375 -63146
  461. package/dist/index.js.map +1 -1
  462. package/dist/preset.css +352 -0
  463. package/dist/toast-theme.css +100 -0
  464. package/dist/tokens.css +471 -0
  465. package/package.json +144 -45
  466. package/scripts/codemod-v2-renames.mjs +101 -0
  467. package/scripts/codemod-v2-toast.mjs +84 -0
  468. package/dist/components/figma/ImageWithFallback.d.ts +0 -3
  469. package/dist/components/figma/ImageWithFallback.d.ts.map +0 -1
  470. package/dist/components/print-templates/ContractTemplate.d.ts +0 -89
  471. package/dist/components/print-templates/ContractTemplate.d.ts.map +0 -1
  472. package/dist/components/print-templates/ProposalTemplate.d.ts +0 -41
  473. package/dist/components/print-templates/ProposalTemplate.d.ts.map +0 -1
  474. package/dist/components/print-templates/index.d.ts +0 -22
  475. package/dist/components/print-templates/index.d.ts.map +0 -1
  476. package/dist/components/print-templates/shared/PrintFooter.d.ts +0 -21
  477. package/dist/components/print-templates/shared/PrintFooter.d.ts.map +0 -1
  478. package/dist/components/print-templates/shared/PrintHeader.d.ts +0 -38
  479. package/dist/components/print-templates/shared/PrintHeader.d.ts.map +0 -1
  480. package/dist/components/print-templates/shared/PrintInfoGrid.d.ts +0 -22
  481. package/dist/components/print-templates/shared/PrintInfoGrid.d.ts.map +0 -1
  482. package/dist/components/print-templates/shared/PrintSection.d.ts +0 -29
  483. package/dist/components/print-templates/shared/PrintSection.d.ts.map +0 -1
  484. package/dist/components/print-templates/shared/PrintSignature.d.ts +0 -27
  485. package/dist/components/print-templates/shared/PrintSignature.d.ts.map +0 -1
  486. package/dist/components/print-templates/shared/PrintTable.d.ts +0 -44
  487. package/dist/components/print-templates/shared/PrintTable.d.ts.map +0 -1
  488. package/dist/components/timeline-demo.d.ts +0 -3
  489. package/dist/components/timeline-demo.d.ts.map +0 -1
  490. package/dist/components/ui/accordion.d.ts +0 -8
  491. package/dist/components/ui/accordion.d.ts.map +0 -1
  492. package/dist/components/ui/advanced-data-table.d.ts +0 -100
  493. package/dist/components/ui/advanced-data-table.d.ts.map +0 -1
  494. package/dist/components/ui/alert-dialog.d.ts +0 -15
  495. package/dist/components/ui/alert-dialog.d.ts.map +0 -1
  496. package/dist/components/ui/alert-toast.d.ts +0 -11
  497. package/dist/components/ui/alert-toast.d.ts.map +0 -1
  498. package/dist/components/ui/alert.d.ts +0 -10
  499. package/dist/components/ui/alert.d.ts.map +0 -1
  500. package/dist/components/ui/app-layout-primary-nav.d.ts +0 -30
  501. package/dist/components/ui/app-layout-primary-nav.d.ts.map +0 -1
  502. package/dist/components/ui/app-layout-secondary-nav.d.ts +0 -34
  503. package/dist/components/ui/app-layout-secondary-nav.d.ts.map +0 -1
  504. package/dist/components/ui/app-layout-user-menu.d.ts +0 -28
  505. package/dist/components/ui/app-layout-user-menu.d.ts.map +0 -1
  506. package/dist/components/ui/aspect-ratio.d.ts +0 -4
  507. package/dist/components/ui/aspect-ratio.d.ts.map +0 -1
  508. package/dist/components/ui/auth-layout.d.ts +0 -28
  509. package/dist/components/ui/auth-layout.d.ts.map +0 -1
  510. package/dist/components/ui/avatar.d.ts +0 -21
  511. package/dist/components/ui/avatar.d.ts.map +0 -1
  512. package/dist/components/ui/badge.d.ts +0 -18
  513. package/dist/components/ui/badge.d.ts.map +0 -1
  514. package/dist/components/ui/brand-logo.d.ts +0 -7
  515. package/dist/components/ui/brand-logo.d.ts.map +0 -1
  516. package/dist/components/ui/breadcrumb.d.ts +0 -12
  517. package/dist/components/ui/breadcrumb.d.ts.map +0 -1
  518. package/dist/components/ui/button.d.ts +0 -15
  519. package/dist/components/ui/button.d.ts.map +0 -1
  520. package/dist/components/ui/calendar.d.ts +0 -31
  521. package/dist/components/ui/calendar.d.ts.map +0 -1
  522. package/dist/components/ui/card.d.ts +0 -10
  523. package/dist/components/ui/card.d.ts.map +0 -1
  524. package/dist/components/ui/carousel.d.ts +0 -20
  525. package/dist/components/ui/carousel.d.ts.map +0 -1
  526. package/dist/components/ui/chart.d.ts +0 -45
  527. package/dist/components/ui/chart.d.ts.map +0 -1
  528. package/dist/components/ui/checkbox.d.ts +0 -5
  529. package/dist/components/ui/checkbox.d.ts.map +0 -1
  530. package/dist/components/ui/collapsible.d.ts +0 -6
  531. package/dist/components/ui/collapsible.d.ts.map +0 -1
  532. package/dist/components/ui/color-picker.d.ts +0 -13
  533. package/dist/components/ui/color-picker.d.ts.map +0 -1
  534. package/dist/components/ui/combobox.d.ts +0 -118
  535. package/dist/components/ui/combobox.d.ts.map +0 -1
  536. package/dist/components/ui/command.d.ts +0 -17
  537. package/dist/components/ui/command.d.ts.map +0 -1
  538. package/dist/components/ui/comment-system.d.ts +0 -43
  539. package/dist/components/ui/comment-system.d.ts.map +0 -1
  540. package/dist/components/ui/context-menu.d.ts +0 -26
  541. package/dist/components/ui/context-menu.d.ts.map +0 -1
  542. package/dist/components/ui/contract-print.d.ts +0 -82
  543. package/dist/components/ui/contract-print.d.ts.map +0 -1
  544. package/dist/components/ui/currency-input.d.ts +0 -11
  545. package/dist/components/ui/currency-input.d.ts.map +0 -1
  546. package/dist/components/ui/data-table.d.ts +0 -30
  547. package/dist/components/ui/data-table.d.ts.map +0 -1
  548. package/dist/components/ui/date-picker.d.ts +0 -111
  549. package/dist/components/ui/date-picker.d.ts.map +0 -1
  550. package/dist/components/ui/date-range-picker.d.ts +0 -128
  551. package/dist/components/ui/date-range-picker.d.ts.map +0 -1
  552. package/dist/components/ui/dialog.d.ts +0 -14
  553. package/dist/components/ui/dialog.d.ts.map +0 -1
  554. package/dist/components/ui/document-editor.d.ts +0 -14
  555. package/dist/components/ui/document-editor.d.ts.map +0 -1
  556. package/dist/components/ui/donut-chart.d.ts +0 -32
  557. package/dist/components/ui/donut-chart.d.ts.map +0 -1
  558. package/dist/components/ui/drawer.d.ts +0 -14
  559. package/dist/components/ui/drawer.d.ts.map +0 -1
  560. package/dist/components/ui/dropdown-menu.d.ts +0 -26
  561. package/dist/components/ui/dropdown-menu.d.ts.map +0 -1
  562. package/dist/components/ui/editable-badge.d.ts +0 -98
  563. package/dist/components/ui/editable-badge.d.ts.map +0 -1
  564. package/dist/components/ui/editorial-calendar.d.ts +0 -22
  565. package/dist/components/ui/editorial-calendar.d.ts.map +0 -1
  566. package/dist/components/ui/empty-state.d.ts +0 -59
  567. package/dist/components/ui/empty-state.d.ts.map +0 -1
  568. package/dist/components/ui/filter-bar.d.ts +0 -16
  569. package/dist/components/ui/filter-bar.d.ts.map +0 -1
  570. package/dist/components/ui/filter-builder.d.ts +0 -39
  571. package/dist/components/ui/filter-builder.d.ts.map +0 -1
  572. package/dist/components/ui/filter-chip.d.ts +0 -8
  573. package/dist/components/ui/filter-chip.d.ts.map +0 -1
  574. package/dist/components/ui/form.d.ts +0 -25
  575. package/dist/components/ui/form.d.ts.map +0 -1
  576. package/dist/components/ui/gantt-chart.d.ts +0 -28
  577. package/dist/components/ui/gantt-chart.d.ts.map +0 -1
  578. package/dist/components/ui/hover-card.d.ts +0 -7
  579. package/dist/components/ui/hover-card.d.ts.map +0 -1
  580. package/dist/components/ui/illustrations.d.ts +0 -76
  581. package/dist/components/ui/illustrations.d.ts.map +0 -1
  582. package/dist/components/ui/index.d.ts +0 -91
  583. package/dist/components/ui/index.d.ts.map +0 -1
  584. package/dist/components/ui/input-group.d.ts +0 -19
  585. package/dist/components/ui/input-group.d.ts.map +0 -1
  586. package/dist/components/ui/input-otp.d.ts +0 -12
  587. package/dist/components/ui/input-otp.d.ts.map +0 -1
  588. package/dist/components/ui/input-validation.d.ts +0 -35
  589. package/dist/components/ui/input-validation.d.ts.map +0 -1
  590. package/dist/components/ui/input.d.ts +0 -4
  591. package/dist/components/ui/input.d.ts.map +0 -1
  592. package/dist/components/ui/kanban-card.d.ts +0 -59
  593. package/dist/components/ui/kanban-card.d.ts.map +0 -1
  594. package/dist/components/ui/kanban-generic-card.d.ts +0 -43
  595. package/dist/components/ui/kanban-generic-card.d.ts.map +0 -1
  596. package/dist/components/ui/kpi-card.d.ts +0 -45
  597. package/dist/components/ui/kpi-card.d.ts.map +0 -1
  598. package/dist/components/ui/label.d.ts +0 -5
  599. package/dist/components/ui/label.d.ts.map +0 -1
  600. package/dist/components/ui/lista-anexos-arquivo.d.ts +0 -47
  601. package/dist/components/ui/lista-anexos-arquivo.d.ts.map +0 -1
  602. package/dist/components/ui/mention-list.d.ts +0 -7
  603. package/dist/components/ui/mention-list.d.ts.map +0 -1
  604. package/dist/components/ui/menubar.d.ts +0 -27
  605. package/dist/components/ui/menubar.d.ts.map +0 -1
  606. package/dist/components/ui/month-range-picker.d.ts +0 -71
  607. package/dist/components/ui/month-range-picker.d.ts.map +0 -1
  608. package/dist/components/ui/multi-select.d.ts +0 -98
  609. package/dist/components/ui/multi-select.d.ts.map +0 -1
  610. package/dist/components/ui/navigation-menu.d.ts +0 -15
  611. package/dist/components/ui/navigation-menu.d.ts.map +0 -1
  612. package/dist/components/ui/number-input.d.ts +0 -83
  613. package/dist/components/ui/number-input.d.ts.map +0 -1
  614. package/dist/components/ui/page-header.d.ts +0 -32
  615. package/dist/components/ui/page-header.d.ts.map +0 -1
  616. package/dist/components/ui/pagination.d.ts +0 -14
  617. package/dist/components/ui/pagination.d.ts.map +0 -1
  618. package/dist/components/ui/password-input.d.ts +0 -7
  619. package/dist/components/ui/password-input.d.ts.map +0 -1
  620. package/dist/components/ui/popover.d.ts +0 -8
  621. package/dist/components/ui/popover.d.ts.map +0 -1
  622. package/dist/components/ui/progress-timeline.d.ts +0 -42
  623. package/dist/components/ui/progress-timeline.d.ts.map +0 -1
  624. package/dist/components/ui/progress.d.ts +0 -7
  625. package/dist/components/ui/progress.d.ts.map +0 -1
  626. package/dist/components/ui/radio-group.d.ts +0 -6
  627. package/dist/components/ui/radio-group.d.ts.map +0 -1
  628. package/dist/components/ui/resizable.d.ts +0 -9
  629. package/dist/components/ui/resizable.d.ts.map +0 -1
  630. package/dist/components/ui/saved-filters.d.ts +0 -16
  631. package/dist/components/ui/saved-filters.d.ts.map +0 -1
  632. package/dist/components/ui/scroll-area.d.ts +0 -8
  633. package/dist/components/ui/scroll-area.d.ts.map +0 -1
  634. package/dist/components/ui/select.d.ts +0 -16
  635. package/dist/components/ui/select.d.ts.map +0 -1
  636. package/dist/components/ui/separator.d.ts +0 -5
  637. package/dist/components/ui/separator.d.ts.map +0 -1
  638. package/dist/components/ui/sheet.d.ts +0 -14
  639. package/dist/components/ui/sheet.d.ts.map +0 -1
  640. package/dist/components/ui/side-panel.d.ts +0 -40
  641. package/dist/components/ui/side-panel.d.ts.map +0 -1
  642. package/dist/components/ui/sidebar.d.ts +0 -70
  643. package/dist/components/ui/sidebar.d.ts.map +0 -1
  644. package/dist/components/ui/skeleton.d.ts +0 -8
  645. package/dist/components/ui/skeleton.d.ts.map +0 -1
  646. package/dist/components/ui/slider.d.ts +0 -5
  647. package/dist/components/ui/slider.d.ts.map +0 -1
  648. package/dist/components/ui/social-button.d.ts +0 -13
  649. package/dist/components/ui/social-button.d.ts.map +0 -1
  650. package/dist/components/ui/switch.d.ts +0 -5
  651. package/dist/components/ui/switch.d.ts.map +0 -1
  652. package/dist/components/ui/table-pagination.d.ts +0 -131
  653. package/dist/components/ui/table-pagination.d.ts.map +0 -1
  654. package/dist/components/ui/table-types.d.ts +0 -320
  655. package/dist/components/ui/table-types.d.ts.map +0 -1
  656. package/dist/components/ui/table.d.ts +0 -34
  657. package/dist/components/ui/table.d.ts.map +0 -1
  658. package/dist/components/ui/tabs.d.ts +0 -8
  659. package/dist/components/ui/tabs.d.ts.map +0 -1
  660. package/dist/components/ui/task-edit-dialog.d.ts +0 -15
  661. package/dist/components/ui/task-edit-dialog.d.ts.map +0 -1
  662. package/dist/components/ui/textarea.d.ts +0 -4
  663. package/dist/components/ui/textarea.d.ts.map +0 -1
  664. package/dist/components/ui/time-picker.d.ts +0 -85
  665. package/dist/components/ui/time-picker.d.ts.map +0 -1
  666. package/dist/components/ui/timeline.d.ts +0 -63
  667. package/dist/components/ui/timeline.d.ts.map +0 -1
  668. package/dist/components/ui/toast.d.ts +0 -5
  669. package/dist/components/ui/toast.d.ts.map +0 -1
  670. package/dist/components/ui/toggle-group.d.ts +0 -8
  671. package/dist/components/ui/toggle-group.d.ts.map +0 -1
  672. package/dist/components/ui/toggle.d.ts +0 -10
  673. package/dist/components/ui/toggle.d.ts.map +0 -1
  674. package/dist/components/ui/tooltip.d.ts +0 -8
  675. package/dist/components/ui/tooltip.d.ts.map +0 -1
  676. package/dist/components/ui/underline-tabs.d.ts +0 -29
  677. package/dist/components/ui/underline-tabs.d.ts.map +0 -1
  678. package/dist/components/ui/use-mobile.d.ts +0 -2
  679. package/dist/components/ui/use-mobile.d.ts.map +0 -1
  680. package/dist/components/ui/use-print-contract.d.ts +0 -37
  681. package/dist/components/ui/use-print-contract.d.ts.map +0 -1
  682. package/dist/components/ui/utils.d.ts +0 -3
  683. package/dist/components/ui/utils.d.ts.map +0 -1
  684. package/dist/components/ui/zona-upload-arquivo.d.ts +0 -34
  685. package/dist/components/ui/zona-upload-arquivo.d.ts.map +0 -1
  686. package/dist/index.d.ts.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comment-system.js","sources":["../../../../src/components/ui/data/comment-system.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { format } from \"date-fns\";\nimport { ptBR } from \"date-fns/locale\";\nimport { cn } from \"../utils\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"../primitives/avatar\";\nimport { Button } from \"../primitives/button\";\nimport { Badge } from \"../primitives/badge\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../overlays/tooltip\";\nimport { Separator } from \"../primitives/separator\";\nimport { \n Bold, \n Italic, \n Underline as UnderlineIcon, \n List, \n ListOrdered, \n Link as LinkIcon,\n Send,\n Paperclip,\n AlertCircle,\n MoreHorizontal,\n Trash2,\n Type,\n X,\n Smile,\n Plus\n} from \"lucide-react\";\n\n// Tiptap Imports\nimport { useEditor, EditorContent, Editor, ReactRenderer } from '@tiptap/react';\nimport type { Instance as TippyInstance } from 'tippy.js';\nimport StarterKit from '@tiptap/starter-kit';\nimport Underline from '@tiptap/extension-underline';\nimport Link from '@tiptap/extension-link';\nimport TiptapImage from '@tiptap/extension-image';\nimport Mention from '@tiptap/extension-mention';\nimport tippy from 'tippy.js';\nimport { MentionList } from './mention-list';\nimport Picker from 'emoji-picker-react';\nimport { Popover, PopoverContent, PopoverTrigger } from \"../overlays/popover\";\n\n// ==========================================\n// TIPOS\n// ==========================================\n\nexport type UserRole = 'internal' | 'client' | 'freelancer';\n\nexport interface CommentUser {\n id: string;\n name: string;\n avatar?: string;\n role: UserRole;\n}\n\nexport interface CommentReaction {\n emoji: string;\n users: string[]; // Array de IDs de usuários que reagiram\n}\n\nexport interface CommentAttachment {\n id: string;\n url: string;\n name: string;\n type: 'image' | 'file';\n}\n\nexport interface Comment {\n id: string;\n content: string; // Conteúdo HTML\n user: CommentUser;\n createdAt: Date;\n isRevisionRequest?: boolean;\n attachments?: CommentAttachment[];\n reactions?: CommentReaction[];\n}\n\nexport interface CommentSystemProps {\n comments: Comment[];\n currentUser: CommentUser;\n users?: CommentUser[]; // Lista de usuários mencionáveis\n onAddComment: (comment: Omit<Comment, \"id\" | \"createdAt\">) => void;\n onDeleteComment?: (id: string) => void;\n onReact?: (commentId: string, emoji: string) => void;\n className?: string;\n}\n\n// ==========================================\n// COMPONENTES AUXILIARES\n// ==========================================\n\nconst RoleBadge = ({ role }: { role: UserRole }) => {\n const config = {\n internal: { label: \"Equipe iClips\", className: \"bg-primary/10 text-primary hover:bg-primary/20 border-primary/20\" },\n client: { label: \"Cliente\", className: \"bg-info/10 text-info-emphasis hover:bg-info/20 border-info/20\" },\n freelancer: { label: \"Freelancer\", className: \"bg-warning/10 text-warning-emphasis hover:bg-warning/20 border-warning/20\" },\n };\n\n const { label, className } = config[role];\n\n return (\n <Badge variant=\"outline\" className={cn(\"text-[10px] h-5 px-1.5 font-medium border-0\", className)}>\n {label}\n </Badge>\n );\n};\n\n// ==========================================\n// EDITOR TOOLBAR\n// ==========================================\n\nconst EditorToolbar = ({ editor, visible }: { editor: Editor | null, visible: boolean }) => {\n if (!editor) return null;\n\n if (!visible) return null;\n\n return (\n <div className=\"flex items-center gap-1 border-b p-1 bg-muted/20 animate-in slide-in-from-bottom-2 duration-200\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\"h-7 w-7\", editor.isActive('bold') && \"bg-muted text-primary\")}\n onClick={() => editor.chain().focus().toggleBold().run()}\n title=\"Negrito (Ctrl+B)\"\n aria-label=\"Negrito\"\n >\n <Bold className=\"h-3.5 w-3.5\" />\n </Button>\n \n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\"h-7 w-7\", editor.isActive('italic') && \"bg-muted text-primary\")}\n onClick={() => editor.chain().focus().toggleItalic().run()}\n title=\"Itálico (Ctrl+I)\"\n aria-label=\"Itálico\"\n >\n <Italic className=\"h-3.5 w-3.5\" />\n </Button>\n\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\"h-7 w-7\", editor.isActive('underline') && \"bg-muted text-primary\")}\n onClick={() => editor.chain().focus().toggleUnderline().run()}\n title=\"Sublinhado (Ctrl+U)\"\n aria-label=\"Sublinhado\"\n >\n <UnderlineIcon className=\"h-3.5 w-3.5\" />\n </Button>\n\n <Separator orientation=\"vertical\" className=\"h-4 mx-1\" />\n\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\"h-7 w-7\", editor.isActive('bulletList') && \"bg-muted text-primary\")}\n onClick={() => editor.chain().focus().toggleBulletList().run()}\n aria-label=\"Lista com marcadores\"\n >\n <List className=\"h-3.5 w-3.5\" />\n </Button>\n\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\"h-7 w-7\", editor.isActive('orderedList') && \"bg-muted text-primary\")}\n onClick={() => editor.chain().focus().toggleOrderedList().run()}\n aria-label=\"Lista numerada\"\n >\n <ListOrdered className=\"h-3.5 w-3.5\" />\n </Button>\n\n <Separator orientation=\"vertical\" className=\"h-4 mx-1\" />\n\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\"h-7 w-7\", editor.isActive('link') && \"bg-muted text-primary\")}\n aria-label=\"Inserir link\"\n onClick={() => {\n const previousUrl = editor.getAttributes('link').href;\n const url = window.prompt('URL', previousUrl);\n if (url === null) return;\n if (url === '') {\n editor.chain().focus().extendMarkRange('link').unsetLink().run();\n return;\n }\n editor.chain().focus().extendMarkRange('link').setLink({ href: url }).run();\n }}\n >\n <LinkIcon className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n );\n};\n\n// ==========================================\n// COMMENT EDITOR AREA\n// ==========================================\n\nconst CommentEditor = ({ \n currentUser, \n onSubmit,\n users = []\n}: { \n currentUser: CommentUser;\n onSubmit: (data: { content: string; isRevisionRequest: boolean; attachments: CommentAttachment[] }) => void;\n users?: CommentUser[];\n}) => {\n const [isRevision, setIsRevision] = React.useState(false);\n const [showToolbar, setShowToolbar] = React.useState(false);\n const [attachments, setAttachments] = React.useState<CommentAttachment[]>([]);\n const [isEditorEmpty, setIsEditorEmpty] = React.useState(true);\n const fileInputRef = React.useRef<HTMLInputElement>(null);\n\n const extensions = React.useMemo(() => [\n StarterKit.configure({\n // @ts-ignore\n link: false,\n // @ts-ignore\n underline: false,\n }),\n Underline,\n Link.configure({\n openOnClick: false,\n }),\n TiptapImage,\n Mention.configure({\n HTMLAttributes: {\n class: 'bg-accent text-accent-foreground rounded-sm px-1 py-0.5 font-medium decoration-clone',\n },\n suggestion: {\n items: ({ query }: { query: string }) => {\n return users\n .filter(item => item.name.toLowerCase().startsWith(query.toLowerCase()))\n .slice(0, 5);\n },\n render: () => {\n // Formato mínimo dos props do ciclo de vida do suggestion do tiptap\n // (o tipo completo `SuggestionProps` vive em `@tiptap/suggestion`, dep\n // transitiva sem entrada direta no package.json).\n type MentionRenderProps = {\n editor: Editor;\n clientRect?: (() => DOMRect | null) | null;\n event?: KeyboardEvent;\n };\n let component: ReactRenderer | null = null;\n let popup: TippyInstance[] | null = null;\n\n return {\n onStart: (props: MentionRenderProps) => {\n component = new ReactRenderer(MentionList, {\n props,\n editor: props.editor,\n });\n\n if (!props.clientRect) {\n return;\n }\n\n popup = tippy('body', {\n // tiptap tipa como `() => DOMRect | null`; tippy exige não-nulo.\n getReferenceClientRect: props.clientRect as () => DOMRect,\n appendTo: () => document.body,\n content: component.element,\n showOnCreate: true,\n interactive: true,\n trigger: 'manual',\n placement: 'bottom-start',\n });\n },\n onUpdate(props: MentionRenderProps) {\n component?.updateProps(props);\n\n if (!props.clientRect) {\n return;\n }\n\n popup?.[0].setProps({\n getReferenceClientRect: props.clientRect as () => DOMRect,\n });\n },\n onKeyDown(props: { event: KeyboardEvent }) {\n if (props.event.key === 'Escape') {\n popup?.[0].hide();\n\n return true;\n }\n\n return Boolean(\n (component?.ref as { onKeyDown?: (p: { event: KeyboardEvent }) => boolean } | undefined)?.onKeyDown?.(props),\n );\n },\n onExit() {\n popup?.[0].destroy();\n component?.destroy();\n },\n };\n },\n },\n }),\n ], [users]);\n\n const editor = useEditor({\n extensions,\n content: '',\n onUpdate: ({ editor }) => {\n setIsEditorEmpty(editor.isEmpty);\n },\n editorProps: {\n attributes: {\n class: 'prose prose-sm dark:prose-invert max-w-none focus:outline-none min-h-[80px] px-3 py-2 text-sm',\n },\n },\n });\n\n const handleAttach = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.files && e.target.files[0]) {\n const file = e.target.files[0];\n const url = URL.createObjectURL(file);\n \n const newAttachment: CommentAttachment = {\n id: Math.random().toString(36).substr(2, 9),\n name: file.name,\n url,\n type: file.type.startsWith('image/') ? 'image' : 'file'\n };\n \n setAttachments([...attachments, newAttachment]);\n // Reset input\n e.target.value = '';\n }\n };\n\n const removeAttachment = (id: string) => {\n setAttachments(attachments.filter(a => a.id !== id));\n };\n\n const handleSubmit = () => {\n if (!editor || (editor.isEmpty && attachments.length === 0)) return;\n \n onSubmit({\n content: editor.getHTML(),\n isRevisionRequest: isRevision,\n attachments\n });\n\n editor.commands.clearContent();\n setAttachments([]);\n setIsRevision(false);\n // Manually reset empty state since clearContent triggers update but we want to be sure\n setIsEditorEmpty(true);\n };\n\n return (\n <div className=\"flex gap-3 items-start\">\n <Avatar className=\"h-8 w-8 mt-1 border\">\n <AvatarImage src={currentUser.avatar} />\n <AvatarFallback>{currentUser.name.substring(0, 2).toUpperCase()}</AvatarFallback>\n </Avatar>\n\n <div className={cn(\n \"flex-1 rounded-xl border bg-background shadow-sm overflow-hidden transition-colors\",\n isRevision && \"border-destructive/40 ring-1 ring-destructive/20\"\n )}>\n <EditorToolbar editor={editor} visible={showToolbar} />\n \n <EditorContent editor={editor} />\n\n {/* Attachments Preview Area */}\n {attachments.length > 0 && (\n <div className=\"px-3 pb-2 flex flex-wrap gap-2\">\n {attachments.map(att => (\n <div key={att.id} className=\"relative group\">\n {att.type === 'image' ? (\n <div className=\"h-16 w-16 rounded-md border overflow-hidden relative\">\n <img src={att.url} alt={att.name} className=\"h-full w-full object-cover\" />\n </div>\n ) : (\n <div className=\"h-16 w-16 rounded-md border bg-muted flex items-center justify-center\">\n <Paperclip className=\"h-6 w-6 text-muted-foreground\" />\n </div>\n )}\n <button \n onClick={() => removeAttachment(att.id)}\n className=\"absolute -top-1.5 -right-1.5 bg-destructive text-destructive-foreground rounded-full p-0.5 opacity-0 group-hover:opacity-100 transition-opacity shadow-sm\"\n >\n <X className=\"h-3 w-3\" />\n </button>\n </div>\n ))}\n </div>\n )}\n\n <div className=\"flex items-center justify-between p-2 bg-muted/10 border-t\">\n <div className=\"flex items-center gap-2\">\n <Tooltip>\n <TooltipTrigger asChild>\n <Button \n variant=\"ghost\" \n size=\"icon\" \n className={cn(\n \"h-8 w-8 transition-colors\",\n showToolbar ? \"bg-muted text-foreground\" : \"text-muted-foreground hover:text-foreground\"\n )}\n onClick={() => setShowToolbar(!showToolbar)}\n aria-label=\"Opções de formatação\"\n >\n <Type className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Opções de formatação</TooltipContent>\n </Tooltip>\n\n <div className=\"w-px h-4 bg-border mx-1\" />\n\n <Popover>\n <PopoverTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8 text-muted-foreground hover:text-foreground\"\n aria-label=\"Inserir emoji\"\n >\n <Smile className=\"h-4 w-4\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0 border-none\" align=\"start\" side=\"top\">\n <Picker \n onEmojiClick={(emojiData) => editor?.chain().focus().insertContent(emojiData.emoji).run()}\n width={300}\n height={350}\n />\n </PopoverContent>\n </Popover>\n\n <input \n type=\"file\" \n className=\"hidden\" \n ref={fileInputRef}\n onChange={handleAttach}\n accept=\"image/*,.pdf,.doc,.docx\"\n />\n <Tooltip>\n <TooltipTrigger asChild>\n <Button \n variant=\"ghost\" \n size=\"icon\" \n className=\"h-8 w-8 text-muted-foreground hover:text-foreground\"\n onClick={() => fileInputRef.current?.click()}\n aria-label=\"Anexar arquivo\"\n >\n <Paperclip className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Anexar arquivo</TooltipContent>\n </Tooltip>\n\n <Tooltip>\n <TooltipTrigger asChild>\n <Button \n variant=\"ghost\" \n size=\"sm\" \n className={cn(\n \"h-8 gap-2 px-2 transition-colors\",\n isRevision\n ? \"bg-destructive/10 text-destructive-emphasis hover:bg-destructive/20\"\n : \"text-muted-foreground hover:text-foreground\"\n )}\n onClick={() => setIsRevision(!isRevision)}\n >\n <AlertCircle className=\"h-4 w-4\" />\n <span className=\"text-xs font-medium\">Solicitar Refação</span>\n </Button>\n </TooltipTrigger>\n <TooltipContent>Marca este comentário como um pedido de alteração</TooltipContent>\n </Tooltip>\n </div>\n\n <Button\n size=\"sm\"\n onClick={handleSubmit}\n disabled={isEditorEmpty && attachments.length === 0}\n >\n Enviar <Send className=\"h-3.5 w-3.5 ml-2\" />\n </Button>\n </div>\n </div>\n </div>\n );\n};\n\n// ==========================================\n// SINGLE COMMENT ITEM\n// ==========================================\n\nconst CommentItem = ({ \n comment, \n currentUserId,\n onDelete, \n onReact \n}: { \n comment: Comment; \n currentUserId: string;\n onDelete?: (id: string) => void;\n onReact?: (commentId: string, emoji: string) => void;\n}) => {\n const isRevision = comment.isRevisionRequest;\n\n return (\n <div className={cn(\n \"group flex gap-3 p-4 rounded-lg transition-colors\",\n isRevision ? \"bg-destructive/5 border border-destructive/20\" : \"hover:bg-muted/20\"\n )}>\n <Avatar className=\"h-8 w-8 mt-0.5 border\">\n <AvatarImage src={comment.user.avatar} />\n <AvatarFallback>{comment.user.name.substring(0, 2).toUpperCase()}</AvatarFallback>\n </Avatar>\n\n <div className=\"flex-1 min-w-0\">\n {/* Header */}\n <div className=\"flex items-center justify-between mb-1.5\">\n <div className=\"flex items-center gap-2 flex-wrap\">\n <span className=\"font-semibold text-sm text-foreground\">{comment.user.name}</span>\n <RoleBadge role={comment.user.role} />\n <span className=\"text-xs text-foreground/65\">\n {format(comment.createdAt, \"dd MMM 'às' HH:mm\", { locale: ptBR })}\n </span>\n </div>\n \n <div className=\"flex items-center gap-2 opacity-0 group-hover:opacity-100 transition-opacity\">\n <Popover>\n <PopoverTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-6 w-6 text-muted-foreground hover:text-foreground\"\n aria-label=\"Reagir com emoji\"\n >\n <Smile className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0 border-none\" align=\"end\">\n <Picker \n onEmojiClick={(emojiData) => onReact?.(comment.id, emojiData.emoji)}\n width={300}\n height={350}\n />\n </PopoverContent>\n </Popover>\n\n {onDelete && (\n <Button \n variant=\"ghost\" \n size=\"icon\" \n className=\"h-6 w-6 text-muted-foreground hover:text-destructive\"\n onClick={() => onDelete(comment.id)}\n aria-label=\"Excluir comentário\"\n >\n <Trash2 className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n </Button>\n )}\n </div>\n </div>\n\n {/* Revision Badge */}\n {isRevision && (\n <div className=\"inline-flex items-center gap-1.5 px-2 py-1 rounded-md bg-destructive/10 text-destructive-emphasis text-xs font-medium mb-2\">\n <AlertCircle className=\"h-3.5 w-3.5\" />\n Solicitação de Refação\n </div>\n )}\n\n {/* Content */}\n <div \n className=\"prose prose-sm dark:prose-invert max-w-none text-sm text-foreground/90 leading-relaxed break-words [&_p]:mb-2 [&_p:last-child]:mb-0\"\n dangerouslySetInnerHTML={{ __html: comment.content }}\n />\n\n {/* Attachments Display */}\n {comment.attachments && comment.attachments.length > 0 && (\n <div className=\"mt-3 flex flex-wrap gap-2\">\n {comment.attachments.map(att => (\n <div \n key={att.id} \n className=\"group/att relative rounded-lg border overflow-hidden bg-background hover:shadow-sm transition-all cursor-pointer\"\n onClick={() => window.open(att.url, '_blank')}\n >\n {att.type === 'image' ? (\n <div className=\"h-32 aspect-[4/3]\">\n <img src={att.url} alt={att.name} className=\"h-full w-full object-cover\" />\n <div className=\"absolute inset-0 bg-foreground/0 group-hover/att:bg-foreground/10 transition-colors\" />\n </div>\n ) : (\n <div className=\"h-12 px-3 flex items-center gap-2 bg-muted/30\">\n <Paperclip className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-xs font-medium truncate max-w-[150px]\">{att.name}</span>\n </div>\n )}\n </div>\n ))}\n </div>\n )}\n\n {/* Reactions */}\n <div className=\"mt-3 flex flex-wrap gap-2 items-center\">\n {comment.reactions?.map((reaction) => (\n <button\n key={reaction.emoji}\n onClick={() => onReact?.(comment.id, reaction.emoji)}\n className={cn(\n \"inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full text-xs font-medium border transition-colors\",\n reaction.users.includes(currentUserId)\n ? \"bg-accent border-accent text-accent-foreground\"\n : \"bg-muted/30 border-transparent hover:bg-muted/50 text-muted-foreground\"\n )}\n >\n <span>{reaction.emoji}</span>\n <span>{reaction.users.length}</span>\n </button>\n ))}\n \n {onReact && (\n <Popover>\n <PopoverTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-6 w-6 rounded-full text-muted-foreground hover:text-foreground hover:bg-muted/50\"\n aria-label=\"Adicionar reação\"\n >\n <Plus className=\"h-3.5 w-3.5\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0 border-none\" align=\"start\">\n <Picker \n onEmojiClick={(emojiData) => onReact(comment.id, emojiData.emoji)}\n width={300}\n height={350}\n />\n </PopoverContent>\n </Popover>\n )}\n </div>\n </div>\n </div>\n );\n};\n\n// ==========================================\n// MAIN COMPONENT\n// ==========================================\n\nexport const CommentSystem = ({ \n comments, \n currentUser, \n users = [],\n onAddComment, \n onDeleteComment,\n onReact,\n className \n}: CommentSystemProps) => {\n \n const handleSubmit = (data: { content: string; isRevisionRequest: boolean; attachments: CommentAttachment[] }) => {\n onAddComment({\n content: data.content,\n user: currentUser,\n isRevisionRequest: data.isRevisionRequest,\n attachments: data.attachments\n });\n };\n\n return (\n <div className={cn(\"flex flex-col h-full\", className)}>\n {/* Header */}\n <div className=\"px-4 py-3 border-b flex items-center justify-between bg-card\">\n <h3 className=\"font-semibold text-base\">Comentários da Atividade</h3>\n <Badge variant=\"secondary\" className=\"bg-muted text-muted-foreground hover:bg-muted\">\n {comments.length}\n </Badge>\n </div>\n\n {/* Scrollable List */}\n <div className=\"flex-1 overflow-y-auto p-4 space-y-2 bg-muted/5\">\n {comments.length === 0 ? (\n <div className=\"h-full flex flex-col items-center justify-center text-muted-foreground min-h-[200px]\">\n <div className=\"bg-muted rounded-full p-3 mb-3\">\n <MoreHorizontal className=\"h-6 w-6\" aria-hidden=\"true\" />\n </div>\n <p className=\"text-sm font-medium text-foreground/70\">Nenhum comentário ainda</p>\n <p className=\"text-xs\">Inicie a conversa sobre esta tarefa</p>\n </div>\n ) : (\n comments.map((comment) => (\n <CommentItem \n key={comment.id} \n comment={comment} \n currentUserId={currentUser.id}\n onDelete={onDeleteComment} \n onReact={onReact}\n />\n ))\n )}\n </div>\n\n {/* Input Area */}\n <div className=\"p-4 border-t bg-card\">\n <CommentEditor \n currentUser={currentUser} \n onSubmit={handleSubmit}\n users={users}\n />\n </div>\n </div>\n );\n};\n\nexport default CommentSystem;"],"names":["RoleBadge","role","config","label","className","jsx","Badge","cn","EditorToolbar","editor","visible","jsxs","Button","Bold","Italic","UnderlineIcon","Separator","List","ListOrdered","previousUrl","url","LinkIcon","CommentEditor","currentUser","onSubmit","users","isRevision","setIsRevision","React","showToolbar","setShowToolbar","attachments","setAttachments","isEditorEmpty","setIsEditorEmpty","fileInputRef","extensions","StarterKit","Underline","Link","TiptapImage","Mention","query","item","component","popup","props","ReactRenderer","MentionList","tippy","_b","_a","useEditor","handleAttach","e","file","newAttachment","removeAttachment","id","a","handleSubmit","Avatar","AvatarImage","AvatarFallback","EditorContent","att","Paperclip","Tooltip","TooltipTrigger","Type","TooltipContent","Popover","PopoverTrigger","Smile","PopoverContent","Picker","emojiData","AlertCircle","Send","CommentItem","comment","currentUserId","onDelete","onReact","format","ptBR","Trash2","reaction","Plus","CommentSystem","comments","onAddComment","onDeleteComment","data","MoreHorizontal"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAyFA,MAAMA,KAAY,CAAC,EAAE,MAAAC,QAA+B;AAClD,QAAMC,IAAS;AAAA,IACb,UAAU,EAAE,OAAO,iBAAiB,WAAW,mEAAA;AAAA,IAC/C,QAAQ,EAAE,OAAO,WAAW,WAAW,gEAAA;AAAA,IACvC,YAAY,EAAE,OAAO,cAAc,WAAW,4EAAA;AAAA,EAA4E,GAGtH,EAAE,OAAAC,GAAO,WAAAC,MAAcF,EAAOD,CAAI;AAExC,SACE,gBAAAI,EAACC,KAAM,SAAQ,WAAU,WAAWC,EAAG,+CAA+CH,CAAS,GAC5F,UAAAD,EAAA,CACH;AAEJ,GAMMK,KAAgB,CAAC,EAAE,QAAAC,GAAQ,SAAAC,QAC3B,CAACD,KAED,CAACC,IAAgB,OAGnB,gBAAAC,EAAC,OAAA,EAAI,WAAU,mGACb,UAAA;AAAA,EAAA,gBAAAN;AAAA,IAACO;AAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,WAAWL,EAAG,WAAWE,EAAO,SAAS,MAAM,KAAK,uBAAuB;AAAA,MAC3E,SAAS,MAAMA,EAAO,MAAA,EAAQ,QAAQ,WAAA,EAAa,IAAA;AAAA,MACnD,OAAM;AAAA,MACN,cAAW;AAAA,MAEX,UAAA,gBAAAJ,EAACQ,GAAA,EAAK,WAAU,cAAA,CAAc;AAAA,IAAA;AAAA,EAAA;AAAA,EAGhC,gBAAAR;AAAA,IAACO;AAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,WAAWL,EAAG,WAAWE,EAAO,SAAS,QAAQ,KAAK,uBAAuB;AAAA,MAC7E,SAAS,MAAMA,EAAO,MAAA,EAAQ,QAAQ,aAAA,EAAe,IAAA;AAAA,MACrD,OAAM;AAAA,MACN,cAAW;AAAA,MAEX,UAAA,gBAAAJ,EAACS,GAAA,EAAO,WAAU,cAAA,CAAc;AAAA,IAAA;AAAA,EAAA;AAAA,EAGlC,gBAAAT;AAAA,IAACO;AAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,WAAWL,EAAG,WAAWE,EAAO,SAAS,WAAW,KAAK,uBAAuB;AAAA,MAChF,SAAS,MAAMA,EAAO,MAAA,EAAQ,QAAQ,gBAAA,EAAkB,IAAA;AAAA,MACxD,OAAM;AAAA,MACN,cAAW;AAAA,MAEX,UAAA,gBAAAJ,EAACU,GAAA,EAAc,WAAU,cAAA,CAAc;AAAA,IAAA;AAAA,EAAA;AAAA,EAGzC,gBAAAV,EAACW,GAAA,EAAU,aAAY,YAAW,WAAU,YAAW;AAAA,EAEvD,gBAAAX;AAAA,IAACO;AAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,WAAWL,EAAG,WAAWE,EAAO,SAAS,YAAY,KAAK,uBAAuB;AAAA,MACjF,SAAS,MAAMA,EAAO,MAAA,EAAQ,QAAQ,iBAAA,EAAmB,IAAA;AAAA,MACzD,cAAW;AAAA,MAEX,UAAA,gBAAAJ,EAACY,GAAA,EAAK,WAAU,cAAA,CAAc;AAAA,IAAA;AAAA,EAAA;AAAA,EAGhC,gBAAAZ;AAAA,IAACO;AAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,WAAWL,EAAG,WAAWE,EAAO,SAAS,aAAa,KAAK,uBAAuB;AAAA,MAClF,SAAS,MAAMA,EAAO,MAAA,EAAQ,QAAQ,kBAAA,EAAoB,IAAA;AAAA,MAC1D,cAAW;AAAA,MAEX,UAAA,gBAAAJ,EAACa,IAAA,EAAY,WAAU,cAAA,CAAc;AAAA,IAAA;AAAA,EAAA;AAAA,EAGvC,gBAAAb,EAACW,GAAA,EAAU,aAAY,YAAW,WAAU,YAAW;AAAA,EAEvD,gBAAAX;AAAA,IAACO;AAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,WAAWL,EAAG,WAAWE,EAAO,SAAS,MAAM,KAAK,uBAAuB;AAAA,MAC3E,cAAW;AAAA,MACX,SAAS,MAAM;AACb,cAAMU,IAAcV,EAAO,cAAc,MAAM,EAAE,MAC3CW,IAAM,OAAO,OAAO,OAAOD,CAAW;AAC5C,YAAIC,MAAQ,MACZ;AAAA,cAAIA,MAAQ,IAAI;AACd,YAAAX,EAAO,MAAA,EAAQ,MAAA,EAAQ,gBAAgB,MAAM,EAAE,UAAA,EAAY,IAAA;AAC3D;AAAA,UACF;AACA,UAAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,gBAAgB,MAAM,EAAE,QAAQ,EAAE,MAAMW,EAAA,CAAK,EAAE,IAAA;AAAA;AAAA,MACxE;AAAA,MAEA,UAAA,gBAAAf,EAACgB,IAAA,EAAS,WAAU,cAAA,CAAc;AAAA,IAAA;AAAA,EAAA;AACpC,GACF,GAQEC,KAAgB,CAAC;AAAA,EACrB,aAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC,IAAQ,CAAA;AACV,MAIM;AACJ,QAAM,CAACC,GAAYC,CAAa,IAAIC,EAAM,SAAS,EAAK,GAClD,CAACC,GAAaC,CAAc,IAAIF,EAAM,SAAS,EAAK,GACpD,CAACG,GAAaC,CAAc,IAAIJ,EAAM,SAA8B,CAAA,CAAE,GACtE,CAACK,GAAeC,CAAgB,IAAIN,EAAM,SAAS,EAAI,GACvDO,IAAeP,EAAM,OAAyB,IAAI,GAElDQ,IAAaR,EAAM,QAAQ,MAAM;AAAA,IACrCS,GAAW,UAAU;AAAA;AAAA,MAEnB,MAAM;AAAA;AAAA,MAEN,WAAW;AAAA,IAAA,CACZ;AAAA,IACDC;AAAA,IACAC,GAAK,UAAU;AAAA,MACb,aAAa;AAAA,IAAA,CACd;AAAA,IACDC;AAAA,IACAC,GAAQ,UAAU;AAAA,MAChB,gBAAgB;AAAA,QACd,OAAO;AAAA,MAAA;AAAA,MAET,YAAY;AAAA,QACV,OAAO,CAAC,EAAE,OAAAC,QACDjB,EACJ,OAAO,CAAAkB,MAAQA,EAAK,KAAK,YAAA,EAAc,WAAWD,EAAM,aAAa,CAAC,EACtE,MAAM,GAAG,CAAC;AAAA,QAEf,QAAQ,MAAM;AASZ,cAAIE,IAAkC,MAClCC,IAAgC;AAEpC,iBAAO;AAAA,YACL,SAAS,CAACC,MAA8B;AAMtC,cALAF,IAAY,IAAIG,GAAcC,IAAa;AAAA,gBACzC,OAAAF;AAAA,gBACA,QAAQA,EAAM;AAAA,cAAA,CACf,GAEIA,EAAM,eAIXD,IAAQI,GAAM,QAAQ;AAAA;AAAA,gBAEpB,wBAAwBH,EAAM;AAAA,gBAC9B,UAAU,MAAM,SAAS;AAAA,gBACzB,SAASF,EAAU;AAAA,gBACnB,cAAc;AAAA,gBACd,aAAa;AAAA,gBACb,SAAS;AAAA,gBACT,WAAW;AAAA,cAAA,CACZ;AAAA,YACH;AAAA,YACA,SAASE,GAA2B;AAGlC,cAFAF,KAAA,QAAAA,EAAW,YAAYE,IAElBA,EAAM,eAIXD,KAAA,QAAAA,EAAQ,GAAG,SAAS;AAAA,gBAClB,wBAAwBC,EAAM;AAAA,cAAA;AAAA,YAElC;AAAA,YACA,UAAUA,GAAiC;;AACzC,qBAAIA,EAAM,MAAM,QAAQ,YACtBD,KAAA,QAAAA,EAAQ,GAAG,QAEJ,MAGF,IACJK,KAAAC,IAAAP,KAAA,gBAAAA,EAAW,QAAX,gBAAAO,EAAyF,cAAzF,QAAAD,EAAA,KAAAC,GAAqGL;AAAA,YAE1G;AAAA,YACA,SAAS;AACP,cAAAD,KAAA,QAAAA,EAAQ,GAAG,WACXD,KAAA,QAAAA,EAAW;AAAA,YACb;AAAA,UAAA;AAAA,QAEJ;AAAA,MAAA;AAAA,IACF,CACD;AAAA,EAAA,GACA,CAACnB,CAAK,CAAC,GAEJhB,IAAS2C,GAAU;AAAA,IACvB,YAAAhB;AAAA,IACA,SAAS;AAAA,IACT,UAAU,CAAC,EAAE,QAAA3B,QAAa;AACxB,MAAAyB,EAAiBzB,EAAO,OAAO;AAAA,IACjC;AAAA,IACA,aAAa;AAAA,MACX,YAAY;AAAA,QACV,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,EACF,CACD,GAEK4C,IAAe,CAACC,MAA2C;AAC/D,QAAIA,EAAE,OAAO,SAASA,EAAE,OAAO,MAAM,CAAC,GAAG;AACvC,YAAMC,IAAOD,EAAE,OAAO,MAAM,CAAC,GACvBlC,IAAM,IAAI,gBAAgBmC,CAAI,GAE9BC,IAAmC;AAAA,QACvC,IAAI,KAAK,SAAS,SAAS,EAAE,EAAE,OAAO,GAAG,CAAC;AAAA,QAC1C,MAAMD,EAAK;AAAA,QACX,KAAAnC;AAAA,QACA,MAAMmC,EAAK,KAAK,WAAW,QAAQ,IAAI,UAAU;AAAA,MAAA;AAGnD,MAAAvB,EAAe,CAAC,GAAGD,GAAayB,CAAa,CAAC,GAE9CF,EAAE,OAAO,QAAQ;AAAA,IACnB;AAAA,EACF,GAEMG,IAAmB,CAACC,MAAe;AACvC,IAAA1B,EAAeD,EAAY,OAAO,CAAA4B,MAAKA,EAAE,OAAOD,CAAE,CAAC;AAAA,EACrD,GAEME,IAAe,MAAM;AACzB,IAAI,CAACnD,KAAWA,EAAO,WAAWsB,EAAY,WAAW,MAEzDP,EAAS;AAAA,MACP,SAASf,EAAO,QAAA;AAAA,MAChB,mBAAmBiB;AAAA,MACnB,aAAAK;AAAA,IAAA,CACD,GAEDtB,EAAO,SAAS,aAAA,GAChBuB,EAAe,CAAA,CAAE,GACjBL,EAAc,EAAK,GAEnBO,EAAiB,EAAI;AAAA,EACvB;AAEA,SACE,gBAAAvB,EAAC,OAAA,EAAI,WAAU,0BACb,UAAA;AAAA,IAAA,gBAAAA,EAACkD,GAAA,EAAO,WAAU,uBAChB,UAAA;AAAA,MAAA,gBAAAxD,EAACyD,GAAA,EAAY,KAAKvC,EAAY,OAAA,CAAQ;AAAA,MACtC,gBAAAlB,EAAC0D,KAAgB,UAAAxC,EAAY,KAAK,UAAU,GAAG,CAAC,EAAE,cAAY,CAAE;AAAA,IAAA,GAClE;AAAA,IAEA,gBAAAZ,EAAC,SAAI,WAAWJ;AAAA,MACd;AAAA,MACAmB,KAAc;AAAA,IAAA,GAEd,UAAA;AAAA,MAAA,gBAAArB,EAACG,IAAA,EAAc,QAAAC,GAAgB,SAASoB,EAAA,CAAa;AAAA,MAErD,gBAAAxB,EAAC2D,MAAc,QAAAvD,GAAgB;AAAA,MAG9BsB,EAAY,SAAS,KACpB,gBAAA1B,EAAC,OAAA,EAAI,WAAU,kCACZ,UAAA0B,EAAY,IAAI,CAAAkC,MACf,gBAAAtD,EAAC,OAAA,EAAiB,WAAU,kBACzB,UAAA;AAAA,QAAAsD,EAAI,SAAS,UACZ,gBAAA5D,EAAC,OAAA,EAAI,WAAU,wDACb,UAAA,gBAAAA,EAAC,OAAA,EAAI,KAAK4D,EAAI,KAAK,KAAKA,EAAI,MAAM,WAAU,6BAAA,CAA6B,EAAA,CAC3E,IAEA,gBAAA5D,EAAC,OAAA,EAAI,WAAU,yEACb,UAAA,gBAAAA,EAAC6D,GAAA,EAAU,WAAU,gCAAA,CAAgC,GACvD;AAAA,QAEF,gBAAA7D;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SAAS,MAAMoD,EAAiBQ,EAAI,EAAE;AAAA,YACtC,WAAU;AAAA,YAEV,UAAA,gBAAA5D,EAAC,GAAA,EAAE,WAAU,UAAA,CAAU;AAAA,UAAA;AAAA,QAAA;AAAA,MACzB,EAAA,GAfQ4D,EAAI,EAgBd,CACD,GACH;AAAA,MAGF,gBAAAtD,EAAC,OAAA,EAAI,WAAU,8DACb,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,UAAA,gBAAAA,EAACwD,GAAA,EACC,UAAA;AAAA,YAAA,gBAAA9D,EAAC+D,GAAA,EAAe,SAAO,IACrB,UAAA,gBAAA/D;AAAA,cAACO;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,WAAWL;AAAA,kBACT;AAAA,kBACAsB,IAAc,6BAA6B;AAAA,gBAAA;AAAA,gBAE7C,SAAS,MAAMC,EAAe,CAACD,CAAW;AAAA,gBAC1C,cAAW;AAAA,gBAEX,UAAA,gBAAAxB,EAACgE,GAAA,EAAK,WAAU,UAAA,CAAU;AAAA,cAAA;AAAA,YAAA,GAE9B;AAAA,YACA,gBAAAhE,EAACiE,KAAe,UAAA,uBAAA,CAAoB;AAAA,UAAA,GACtC;AAAA,UAEA,gBAAAjE,EAAC,OAAA,EAAI,WAAU,0BAAA,CAA0B;AAAA,4BAExCkE,GAAA,EACC,UAAA;AAAA,YAAA,gBAAAlE,EAACmE,GAAA,EAAe,SAAO,IACrB,UAAA,gBAAAnE;AAAA,cAACO;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,WAAU;AAAA,gBACV,cAAW;AAAA,gBAEX,UAAA,gBAAAP,EAACoE,GAAA,EAAM,WAAU,UAAA,CAAU;AAAA,cAAA;AAAA,YAAA,GAE/B;AAAA,8BACCC,GAAA,EAAe,WAAU,0BAAyB,OAAM,SAAQ,MAAK,OACnE,UAAA,gBAAArE;AAAA,cAACsE;AAAA,cAAA;AAAA,gBACC,cAAc,CAACC,MAAcnE,KAAA,gBAAAA,EAAQ,QAAQ,QAAQ,cAAcmE,EAAU,OAAO;AAAA,gBACpF,OAAO;AAAA,gBACP,QAAQ;AAAA,cAAA;AAAA,YAAA,EACV,CACH;AAAA,UAAA,GACF;AAAA,UAEA,gBAAAvE;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAU;AAAA,cACV,KAAK8B;AAAA,cACL,UAAUkB;AAAA,cACV,QAAO;AAAA,YAAA;AAAA,UAAA;AAAA,4BAERc,GAAA,EACC,UAAA;AAAA,YAAA,gBAAA9D,EAAC+D,GAAA,EAAe,SAAO,IACrB,UAAA,gBAAA/D;AAAA,cAACO;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,WAAU;AAAA,gBACV,SAAS,MAAA;;AAAM,0BAAAuC,IAAAhB,EAAa,YAAb,gBAAAgB,EAAsB;AAAA;AAAA,gBACrC,cAAW;AAAA,gBAEX,UAAA,gBAAA9C,EAAC6D,GAAA,EAAU,WAAU,UAAA,CAAU;AAAA,cAAA;AAAA,YAAA,GAEnC;AAAA,YACA,gBAAA7D,EAACiE,KAAe,UAAA,iBAAA,CAAc;AAAA,UAAA,GAChC;AAAA,4BAECH,GAAA,EACC,UAAA;AAAA,YAAA,gBAAA9D,EAAC+D,GAAA,EAAe,SAAO,IACrB,UAAA,gBAAAzD;AAAA,cAACC;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,WAAWL;AAAA,kBACT;AAAA,kBACAmB,IACI,wEACA;AAAA,gBAAA;AAAA,gBAEN,SAAS,MAAMC,EAAc,CAACD,CAAU;AAAA,gBAExC,UAAA;AAAA,kBAAA,gBAAArB,EAACwE,GAAA,EAAY,WAAU,UAAA,CAAU;AAAA,kBACjC,gBAAAxE,EAAC,QAAA,EAAK,WAAU,uBAAsB,UAAA,oBAAA,CAAiB;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA,GAE3D;AAAA,YACA,gBAAAA,EAACiE,KAAe,UAAA,oDAAA,CAAiD;AAAA,UAAA,EAAA,CACnE;AAAA,QAAA,GACF;AAAA,QAEA,gBAAA3D;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,SAASgD;AAAA,YACT,UAAU3B,KAAiBF,EAAY,WAAW;AAAA,YACnD,UAAA;AAAA,cAAA;AAAA,cACQ,gBAAA1B,EAACyE,GAAA,EAAK,WAAU,mBAAA,CAAmB;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAC5C,EAAA,CACF;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GACF;AAEJ,GAMMC,KAAc,CAAC;AAAA,EACnB,SAAAC;AAAA,EACA,eAAAC;AAAA,EACA,UAAAC;AAAA,EACA,SAAAC;AACF,MAKM;;AACJ,QAAMzD,IAAasD,EAAQ;AAE3B,SACE,gBAAArE,EAAC,SAAI,WAAWJ;AAAA,IACd;AAAA,IACAmB,IAAa,kDAAkD;AAAA,EAAA,GAE/D,UAAA;AAAA,IAAA,gBAAAf,EAACkD,GAAA,EAAO,WAAU,yBAChB,UAAA;AAAA,MAAA,gBAAAxD,EAACyD,GAAA,EAAY,KAAKkB,EAAQ,KAAK,QAAQ;AAAA,MACvC,gBAAA3E,EAAC0D,GAAA,EAAgB,UAAAiB,EAAQ,KAAK,KAAK,UAAU,GAAG,CAAC,EAAE,YAAA,EAAY,CAAE;AAAA,IAAA,GACnE;AAAA,IAEA,gBAAArE,EAAC,OAAA,EAAI,WAAU,kBAEb,UAAA;AAAA,MAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,4CACb,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,qCACb,UAAA;AAAA,UAAA,gBAAAN,EAAC,QAAA,EAAK,WAAU,yCAAyC,UAAA2E,EAAQ,KAAK,MAAK;AAAA,UAC3E,gBAAA3E,EAACL,IAAA,EAAU,MAAMgF,EAAQ,KAAK,MAAM;AAAA,UACpC,gBAAA3E,EAAC,QAAA,EAAK,WAAU,8BACb,UAAA+E,EAAOJ,EAAQ,WAAW,qBAAqB,EAAE,QAAQK,EAAA,CAAM,EAAA,CAClE;AAAA,QAAA,GACF;AAAA,QAEA,gBAAA1E,EAAC,OAAA,EAAI,WAAU,gFACb,UAAA;AAAA,UAAA,gBAAAA,EAAC4D,GAAA,EACC,UAAA;AAAA,YAAA,gBAAAlE,EAACmE,GAAA,EAAe,SAAO,IACrB,UAAA,gBAAAnE;AAAA,cAACO;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,WAAU;AAAA,gBACV,cAAW;AAAA,gBAEX,UAAA,gBAAAP,EAACoE,GAAA,EAAM,WAAU,eAAc,eAAY,OAAA,CAAO;AAAA,cAAA;AAAA,YAAA,GAEtD;AAAA,YACA,gBAAApE,EAACqE,GAAA,EAAe,WAAU,0BAAyB,OAAM,OACtD,UAAA,gBAAArE;AAAA,cAACsE;AAAA,cAAA;AAAA,gBACC,cAAc,CAACC,MAAcO,KAAA,gBAAAA,EAAUH,EAAQ,IAAIJ,EAAU;AAAA,gBAC7D,OAAO;AAAA,gBACP,QAAQ;AAAA,cAAA;AAAA,YAAA,EACV,CACH;AAAA,UAAA,GACF;AAAA,UAECM,KACC,gBAAA7E;AAAA,YAACO;AAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,WAAU;AAAA,cACV,SAAS,MAAMsE,EAASF,EAAQ,EAAE;AAAA,cAClC,cAAW;AAAA,cAEX,UAAA,gBAAA3E,EAACiF,GAAA,EAAO,WAAU,eAAc,eAAY,OAAA,CAAO;AAAA,YAAA;AAAA,UAAA;AAAA,QACrD,EAAA,CAEJ;AAAA,MAAA,GACF;AAAA,MAGC5D,KACC,gBAAAf,EAAC,OAAA,EAAI,WAAU,8HACb,UAAA;AAAA,QAAA,gBAAAN,EAACwE,GAAA,EAAY,WAAU,cAAA,CAAc;AAAA,QAAE;AAAA,MAAA,GAEzC;AAAA,MAIF,gBAAAxE;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,yBAAyB,EAAE,QAAQ2E,EAAQ,QAAA;AAAA,QAAQ;AAAA,MAAA;AAAA,MAIpDA,EAAQ,eAAeA,EAAQ,YAAY,SAAS,KACnD,gBAAA3E,EAAC,OAAA,EAAI,WAAU,6BACZ,UAAA2E,EAAQ,YAAY,IAAI,CAAAf,MACvB,gBAAA5D;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,WAAU;AAAA,UACV,SAAS,MAAM,OAAO,KAAK4D,EAAI,KAAK,QAAQ;AAAA,UAE3C,YAAI,SAAS,UACZ,gBAAAtD,EAAC,OAAA,EAAI,WAAU,qBACb,UAAA;AAAA,YAAA,gBAAAN,EAAC,OAAA,EAAI,KAAK4D,EAAI,KAAK,KAAKA,EAAI,MAAM,WAAU,6BAAA,CAA6B;AAAA,YACzE,gBAAA5D,EAAC,OAAA,EAAI,WAAU,sFAAA,CAAsF;AAAA,UAAA,EAAA,CACvG,IAEA,gBAAAM,EAAC,OAAA,EAAI,WAAU,iDACb,UAAA;AAAA,YAAA,gBAAAN,EAAC6D,GAAA,EAAU,WAAU,gCAAA,CAAgC;AAAA,YACrD,gBAAA7D,EAAC,QAAA,EAAK,WAAU,8CAA8C,YAAI,KAAA,CAAK;AAAA,UAAA,EAAA,CACzE;AAAA,QAAA;AAAA,QAbG4D,EAAI;AAAA,MAAA,CAgBZ,GACH;AAAA,MAIF,gBAAAtD,EAAC,OAAA,EAAI,WAAU,0CACZ,UAAA;AAAA,SAAAwC,IAAA6B,EAAQ,cAAR,gBAAA7B,EAAmB,IAAI,CAACoC,MACvB,gBAAA5E;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,SAAS,MAAMwE,KAAA,gBAAAA,EAAUH,EAAQ,IAAIO,EAAS;AAAA,YAC9C,WAAWhF;AAAA,cACT;AAAA,cACAgF,EAAS,MAAM,SAASN,CAAa,IACjC,mDACA;AAAA,YAAA;AAAA,YAGN,UAAA;AAAA,cAAA,gBAAA5E,EAAC,QAAA,EAAM,YAAS,MAAA,CAAM;AAAA,cACtB,gBAAAA,EAAC,QAAA,EAAM,UAAAkF,EAAS,MAAM,OAAA,CAAO;AAAA,YAAA;AAAA,UAAA;AAAA,UAVxBA,EAAS;AAAA,QAAA;AAAA,QAcjBJ,uBACEZ,GAAA,EACC,UAAA;AAAA,UAAA,gBAAAlE,EAACmE,GAAA,EAAe,SAAO,IACrB,UAAA,gBAAAnE;AAAA,YAACO;AAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,WAAU;AAAA,cACV,cAAW;AAAA,cAEX,UAAA,gBAAAP,EAACmF,GAAA,EAAK,WAAU,cAAA,CAAc;AAAA,YAAA;AAAA,UAAA,GAElC;AAAA,UACA,gBAAAnF,EAACqE,GAAA,EAAe,WAAU,0BAAyB,OAAM,SACtD,UAAA,gBAAArE;AAAA,YAACsE;AAAA,YAAA;AAAA,cACC,cAAc,CAACC,MAAcO,EAAQH,EAAQ,IAAIJ,EAAU,KAAK;AAAA,cAChE,OAAO;AAAA,cACP,QAAQ;AAAA,YAAA;AAAA,UAAA,EACV,CACH;AAAA,QAAA,EAAA,CACF;AAAA,MAAA,EAAA,CAEJ;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GACF;AAEJ,GAMaa,KAAgB,CAAC;AAAA,EAC5B,UAAAC;AAAA,EACA,aAAAnE;AAAA,EACA,OAAAE,IAAQ,CAAA;AAAA,EACR,cAAAkE;AAAA,EACA,iBAAAC;AAAA,EACA,SAAAT;AAAA,EACA,WAAA/E;AACF,MAA0B;AAExB,QAAMwD,IAAe,CAACiC,MAA4F;AAChH,IAAAF,EAAa;AAAA,MACX,SAASE,EAAK;AAAA,MACd,MAAMtE;AAAA,MACN,mBAAmBsE,EAAK;AAAA,MACxB,aAAaA,EAAK;AAAA,IAAA,CACnB;AAAA,EACH;AAEA,2BACG,OAAA,EAAI,WAAWtF,EAAG,wBAAwBH,CAAS,GAElD,UAAA;AAAA,IAAA,gBAAAO,EAAC,OAAA,EAAI,WAAU,gEACb,UAAA;AAAA,MAAA,gBAAAN,EAAC,MAAA,EAAG,WAAU,2BAA0B,UAAA,4BAAwB;AAAA,wBAC/DC,GAAA,EAAM,SAAQ,aAAY,WAAU,iDAClC,YAAS,OAAA,CACZ;AAAA,IAAA,GACF;AAAA,IAGA,gBAAAD,EAAC,OAAA,EAAI,WAAU,mDACZ,UAAAqF,EAAS,WAAW,IACnB,gBAAA/E,EAAC,OAAA,EAAI,WAAU,wFACb,UAAA;AAAA,MAAA,gBAAAN,EAAC,OAAA,EAAI,WAAU,kCACb,UAAA,gBAAAA,EAACyF,KAAe,WAAU,WAAU,eAAY,OAAA,CAAO,EAAA,CACzD;AAAA,MACA,gBAAAzF,EAAC,KAAA,EAAE,WAAU,0CAAyC,UAAA,2BAAuB;AAAA,MAC7E,gBAAAA,EAAC,KAAA,EAAE,WAAU,WAAU,UAAA,sCAAA,CAAmC;AAAA,IAAA,EAAA,CAC5D,IAEAqF,EAAS,IAAI,CAACV,MACZ,gBAAA3E;AAAA,MAAC0E;AAAA,MAAA;AAAA,QAEC,SAAAC;AAAA,QACA,eAAezD,EAAY;AAAA,QAC3B,UAAUqE;AAAA,QACV,SAAAT;AAAA,MAAA;AAAA,MAJKH,EAAQ;AAAA,IAAA,CAMhB,GAEL;AAAA,IAGA,gBAAA3E,EAAC,OAAA,EAAI,WAAU,wBACb,UAAA,gBAAAA;AAAA,MAACiB;AAAA,MAAA;AAAA,QACC,aAAAC;AAAA,QACA,UAAUqC;AAAA,QACV,OAAAnC;AAAA,MAAA;AAAA,IAAA,EACF,CACF;AAAA,EAAA,GACF;AAEJ;"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),u=require("lucide-react"),e=require("../feedback/empty-state.cjs");function c({emptyState:o,emptyMessage:t,hasActiveFilters:n,hasSearch:i,onClearFilters:a}){if(typeof o=="string"||t){const s=n||i?"Nenhum resultado encontrado para os filtros aplicados.":typeof o=="string"?o:t||"Nenhum dado disponível.";return r.jsx("div",{className:"text-sm text-muted-foreground",children:s})}return o&&typeof o=="object"?n||i?r.jsx(e.EmptyState,{icon:u.Search,title:"Nenhum resultado encontrado",description:"Tente ajustar os filtros ou termos de busca para encontrar o que procura.",variant:"no-results",primaryAction:{label:"Limpar Filtros",onClick:a,variant:"outline"}}):r.jsx(e.EmptyState,{icon:o.icon,illustration:o.illustration,title:o.title,description:o.description,variant:o.variant||"first-use",primaryAction:o.primaryAction,secondaryAction:o.secondaryAction}):r.jsx("div",{className:"text-sm text-muted-foreground",children:n||i?"Nenhum resultado encontrado para os filtros aplicados.":"Nenhum dado disponível."})}exports.DataTableEmptyState=c;
2
+ //# sourceMappingURL=data-table-empty-state.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-empty-state.cjs","sources":["../../../../src/components/ui/data/data-table-empty-state.tsx"],"sourcesContent":["import { Search } from \"lucide-react\";\nimport { EmptyState } from \"../feedback/empty-state\";\nimport { EmptyStateConfig } from \"./table-types\";\n\nexport interface DataTableEmptyStateProps {\n emptyState?: EmptyStateConfig | string;\n emptyMessage?: string;\n hasActiveFilters: boolean;\n hasSearch: boolean;\n onClearFilters: () => void;\n}\n\n/**\n * DataTable's contextual empty state. Pure leaf render component, extracted verbatim\n * from `data-table.tsx`'s `renderEmptyState` closure — `hasActiveFilters`/`hasSearch`\n * replace direct reads of `advancedFilters`/`searchQuery`, and `onClearFilters`\n * replaces the inline `setSearchQuery(\"\"); handleClearAllFilters();` pair.\n */\nexport function DataTableEmptyState({\n emptyState,\n emptyMessage,\n hasActiveFilters,\n hasSearch,\n onClearFilters,\n}: DataTableEmptyStateProps) {\n // Se emptyState for uma string (retrocompatibilidade) ou emptyMessage (deprecated)\n if (typeof emptyState === 'string' || emptyMessage) {\n const message = hasActiveFilters || hasSearch\n ? \"Nenhum resultado encontrado para os filtros aplicados.\"\n : (typeof emptyState === 'string' ? emptyState : emptyMessage || \"Nenhum dado disponível.\");\n return <div className=\"text-sm text-muted-foreground\">{message}</div>;\n }\n\n // Se emptyState for um objeto EmptyStateConfig\n if (emptyState && typeof emptyState === 'object') {\n // Para buscas/filtros ativos, usar variant \"no-results\" e mensagem específica\n if (hasActiveFilters || hasSearch) {\n return (\n <EmptyState\n icon={Search}\n title=\"Nenhum resultado encontrado\"\n description=\"Tente ajustar os filtros ou termos de busca para encontrar o que procura.\"\n variant=\"no-results\"\n primaryAction={{\n label: \"Limpar Filtros\",\n onClick: onClearFilters,\n variant: \"outline\"\n }}\n />\n );\n }\n\n // Estado vazio inicial - usar configuração fornecida\n return (\n <EmptyState\n icon={emptyState.icon}\n illustration={emptyState.illustration}\n title={emptyState.title}\n description={emptyState.description}\n variant={emptyState.variant || \"first-use\"}\n primaryAction={emptyState.primaryAction}\n secondaryAction={emptyState.secondaryAction}\n />\n );\n }\n\n // Fallback padrão\n return (\n <div className=\"text-sm text-muted-foreground\">\n {hasActiveFilters || hasSearch\n ? \"Nenhum resultado encontrado para os filtros aplicados.\"\n : \"Nenhum dado disponível.\"}\n </div>\n );\n}\n"],"names":["DataTableEmptyState","emptyState","emptyMessage","hasActiveFilters","hasSearch","onClearFilters","message","jsx","EmptyState","Search"],"mappings":"wLAkBO,SAASA,EAAoB,CAAA,WAChCC,EACA,aAAAC,EACA,iBAAAC,EACA,UAAAC,EACA,eAAAC,CACJ,EAA6B,CAEzB,GAAI,OAAOJ,GAAe,UAAYC,EAAc,CAChD,MAAMI,EAAUH,GAAoBC,EAC9B,yDACC,OAAOH,GAAe,SAAWA,EAAaC,GAAgB,0BACrE,OAAOK,EAAAA,IAAC,MAAA,CAAI,UAAU,gCAAiC,SAAAD,EAAQ,CACnE,CAGA,OAAIL,GAAc,OAAOA,GAAe,SAEhCE,GAAoBC,EAEhBG,EAAAA,IAACC,EAAAA,WAAA,CACG,KAAMC,EAAAA,OACN,MAAM,8BACN,YAAY,4EACZ,QAAQ,aACR,cAAe,CACX,MAAO,iBACP,QAASJ,EACT,QAAS,SAAA,CACb,CAAA,EAORE,EAAAA,IAACC,EAAAA,WAAA,CACG,KAAMP,EAAW,KACjB,aAAcA,EAAW,aACzB,MAAOA,EAAW,MAClB,YAAaA,EAAW,YACxB,QAASA,EAAW,SAAW,YAC/B,cAAeA,EAAW,cAC1B,gBAAiBA,EAAW,eAAA,CAAA,QAOnC,MAAA,CAAI,UAAU,gCACV,SAAAE,GAAoBC,EACf,yDACA,0BACV,CAER"}
@@ -0,0 +1,40 @@
1
+ import { jsx as r } from "react/jsx-runtime";
2
+ import { Search as e } from "lucide-react";
3
+ import { EmptyState as s } from "../feedback/empty-state.js";
4
+ function f({
5
+ emptyState: o,
6
+ emptyMessage: a,
7
+ hasActiveFilters: n,
8
+ hasSearch: i,
9
+ onClearFilters: t
10
+ }) {
11
+ return typeof o == "string" || a ? /* @__PURE__ */ r("div", { className: "text-sm text-muted-foreground", children: n || i ? "Nenhum resultado encontrado para os filtros aplicados." : typeof o == "string" ? o : a || "Nenhum dado disponível." }) : o && typeof o == "object" ? n || i ? /* @__PURE__ */ r(
12
+ s,
13
+ {
14
+ icon: e,
15
+ title: "Nenhum resultado encontrado",
16
+ description: "Tente ajustar os filtros ou termos de busca para encontrar o que procura.",
17
+ variant: "no-results",
18
+ primaryAction: {
19
+ label: "Limpar Filtros",
20
+ onClick: t,
21
+ variant: "outline"
22
+ }
23
+ }
24
+ ) : /* @__PURE__ */ r(
25
+ s,
26
+ {
27
+ icon: o.icon,
28
+ illustration: o.illustration,
29
+ title: o.title,
30
+ description: o.description,
31
+ variant: o.variant || "first-use",
32
+ primaryAction: o.primaryAction,
33
+ secondaryAction: o.secondaryAction
34
+ }
35
+ ) : /* @__PURE__ */ r("div", { className: "text-sm text-muted-foreground", children: n || i ? "Nenhum resultado encontrado para os filtros aplicados." : "Nenhum dado disponível." });
36
+ }
37
+ export {
38
+ f as DataTableEmptyState
39
+ };
40
+ //# sourceMappingURL=data-table-empty-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-empty-state.js","sources":["../../../../src/components/ui/data/data-table-empty-state.tsx"],"sourcesContent":["import { Search } from \"lucide-react\";\nimport { EmptyState } from \"../feedback/empty-state\";\nimport { EmptyStateConfig } from \"./table-types\";\n\nexport interface DataTableEmptyStateProps {\n emptyState?: EmptyStateConfig | string;\n emptyMessage?: string;\n hasActiveFilters: boolean;\n hasSearch: boolean;\n onClearFilters: () => void;\n}\n\n/**\n * DataTable's contextual empty state. Pure leaf render component, extracted verbatim\n * from `data-table.tsx`'s `renderEmptyState` closure — `hasActiveFilters`/`hasSearch`\n * replace direct reads of `advancedFilters`/`searchQuery`, and `onClearFilters`\n * replaces the inline `setSearchQuery(\"\"); handleClearAllFilters();` pair.\n */\nexport function DataTableEmptyState({\n emptyState,\n emptyMessage,\n hasActiveFilters,\n hasSearch,\n onClearFilters,\n}: DataTableEmptyStateProps) {\n // Se emptyState for uma string (retrocompatibilidade) ou emptyMessage (deprecated)\n if (typeof emptyState === 'string' || emptyMessage) {\n const message = hasActiveFilters || hasSearch\n ? \"Nenhum resultado encontrado para os filtros aplicados.\"\n : (typeof emptyState === 'string' ? emptyState : emptyMessage || \"Nenhum dado disponível.\");\n return <div className=\"text-sm text-muted-foreground\">{message}</div>;\n }\n\n // Se emptyState for um objeto EmptyStateConfig\n if (emptyState && typeof emptyState === 'object') {\n // Para buscas/filtros ativos, usar variant \"no-results\" e mensagem específica\n if (hasActiveFilters || hasSearch) {\n return (\n <EmptyState\n icon={Search}\n title=\"Nenhum resultado encontrado\"\n description=\"Tente ajustar os filtros ou termos de busca para encontrar o que procura.\"\n variant=\"no-results\"\n primaryAction={{\n label: \"Limpar Filtros\",\n onClick: onClearFilters,\n variant: \"outline\"\n }}\n />\n );\n }\n\n // Estado vazio inicial - usar configuração fornecida\n return (\n <EmptyState\n icon={emptyState.icon}\n illustration={emptyState.illustration}\n title={emptyState.title}\n description={emptyState.description}\n variant={emptyState.variant || \"first-use\"}\n primaryAction={emptyState.primaryAction}\n secondaryAction={emptyState.secondaryAction}\n />\n );\n }\n\n // Fallback padrão\n return (\n <div className=\"text-sm text-muted-foreground\">\n {hasActiveFilters || hasSearch\n ? \"Nenhum resultado encontrado para os filtros aplicados.\"\n : \"Nenhum dado disponível.\"}\n </div>\n );\n}\n"],"names":["DataTableEmptyState","emptyState","emptyMessage","hasActiveFilters","hasSearch","onClearFilters","jsx","EmptyState","Search"],"mappings":";;;AAkBO,SAASA,EAAoB;AAAA,EAChC,YAAAC;AAAA,EACA,cAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,WAAAC;AAAA,EACA,gBAAAC;AACJ,GAA6B;AAEzB,SAAI,OAAOJ,KAAe,YAAYC,IAI3B,gBAAAI,EAAC,OAAA,EAAI,WAAU,iCAAiC,UAHvCH,KAAoBC,IAC9B,2DACC,OAAOH,KAAe,WAAWA,IAAaC,KAAgB,2BACN,IAI/DD,KAAc,OAAOA,KAAe,WAEhCE,KAAoBC,IAEhB,gBAAAE;AAAA,IAACC;AAAA,IAAA;AAAA,MACG,MAAMC;AAAA,MACN,OAAM;AAAA,MACN,aAAY;AAAA,MACZ,SAAQ;AAAA,MACR,eAAe;AAAA,QACX,OAAO;AAAA,QACP,SAASH;AAAA,QACT,SAAS;AAAA,MAAA;AAAA,IACb;AAAA,EAAA,IAOR,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACG,MAAMN,EAAW;AAAA,MACjB,cAAcA,EAAW;AAAA,MACzB,OAAOA,EAAW;AAAA,MAClB,aAAaA,EAAW;AAAA,MACxB,SAASA,EAAW,WAAW;AAAA,MAC/B,eAAeA,EAAW;AAAA,MAC1B,iBAAiBA,EAAW;AAAA,IAAA;AAAA,EAAA,sBAOnC,OAAA,EAAI,WAAU,iCACV,UAAAE,KAAoBC,IACf,2DACA,2BACV;AAER;"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),j=require("../forms/input.cjs"),l=require("../primitives/button.cjs"),d=require("lucide-react"),a=require("../overlays/popover.cjs"),g=require("./filter-builder.cjs");function v({enableSearch:i,searchPlaceholder:u,searchQuery:m,onSearchChange:x,enableFilters:o,filterFields:t,advancedFilters:r,onAdvancedFiltersChange:h,filterDialogOpen:p,onFilterDialogOpenChange:c,onApplyFilters:f,toolbarActions:n}){return i||o&&t.length>0||!!n?e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsxs("div",{className:"flex items-center gap-2 flex-1",children:[i&&e.jsxs("div",{className:"relative max-w-sm flex-1",children:[e.jsx(d.Search,{className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground pointer-events-none"}),e.jsx(j.Input,{placeholder:u,value:m,onChange:s=>x(s.target.value),onKeyDown:s=>{s.key==="Enter"&&s.preventDefault()},className:"pl-9"})]}),o&&t.length>0&&e.jsxs(a.Popover,{open:p,onOpenChange:c,children:[e.jsx(a.PopoverTrigger,{asChild:!0,children:e.jsxs(l.Button,{variant:"outline",size:"sm",className:"gap-2",children:[e.jsx(d.Filter,{className:"h-4 w-4"}),"Filtros",r.length>0&&e.jsx("span",{className:"ml-1 rounded-full bg-primary text-primary-foreground w-5 h-5 text-xs flex items-center justify-center",children:r.length})]})}),e.jsxs(a.PopoverContent,{className:"w-[700px] p-0",align:"start",sideOffset:8,children:[e.jsxs("div",{className:"p-6 border-b",children:[e.jsx("h3",{className:"font-semibold",children:"Filtros Avançados"}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:"Adicione condições de filtro para refinar os resultados."})]}),e.jsx("div",{className:"p-6",children:e.jsx(g.FilterBuilder,{conditions:r,onConditionsChange:h,fields:t})}),e.jsxs("div",{className:"flex items-center justify-end gap-2 p-4 border-t bg-muted/50",children:[e.jsx(l.Button,{variant:"outline",size:"sm",onClick:()=>c(!1),children:"Cancelar"}),e.jsx(l.Button,{size:"sm",onClick:f,children:"Aplicar Filtros"})]})]})]})]}),n&&e.jsx("div",{className:"flex items-center gap-2",children:n})]}):null}exports.DataTableToolbar=v;
2
+ //# sourceMappingURL=data-table-toolbar.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-toolbar.cjs","sources":["../../../../src/components/ui/data/data-table-toolbar.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Input } from \"../forms/input\";\nimport { Button } from \"../primitives/button\";\nimport { Search, Filter as FilterIcon } from \"lucide-react\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../overlays/popover\";\nimport { FilterBuilder, FilterCondition, FilterField } from \"./filter-builder\";\n\nexport interface DataTableToolbarProps {\n enableSearch: boolean;\n searchPlaceholder: string;\n searchQuery: string;\n onSearchChange: (value: string) => void;\n enableFilters: boolean;\n filterFields: FilterField[];\n advancedFilters: FilterCondition[];\n onAdvancedFiltersChange: (filters: FilterCondition[]) => void;\n filterDialogOpen: boolean;\n onFilterDialogOpenChange: (open: boolean) => void;\n onApplyFilters: () => void;\n toolbarActions?: React.ReactNode;\n}\n\n/**\n * DataTable's toolbar: the search input and the advanced-filter Popover/FilterBuilder\n * block. Pure leaf render component — all state lives in `useDataTableFilters`\n * (consumed by `data-table.tsx`) and is passed down as props.\n *\n * Renders nothing when there is no search, no filter fields, and no custom\n * `toolbarActions` — mirrors the `hasToolbar` guard that previously lived inline in\n * `data-table.tsx`.\n */\nexport function DataTableToolbar({\n enableSearch,\n searchPlaceholder,\n searchQuery,\n onSearchChange,\n enableFilters,\n filterFields,\n advancedFilters,\n onAdvancedFiltersChange,\n filterDialogOpen,\n onFilterDialogOpenChange,\n onApplyFilters,\n toolbarActions,\n}: DataTableToolbarProps) {\n const hasToolbar = enableSearch || (enableFilters && filterFields.length > 0) || !!toolbarActions;\n if (!hasToolbar) return null;\n\n return (\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex items-center gap-2 flex-1\">\n {/* Search */}\n {enableSearch && (\n <div className=\"relative max-w-sm flex-1\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground pointer-events-none\" />\n <Input\n placeholder={searchPlaceholder}\n value={searchQuery}\n onChange={(event) => onSearchChange(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n }\n }}\n className=\"pl-9\"\n />\n </div>\n )}\n\n {/* Advanced Filters */}\n {enableFilters && filterFields.length > 0 && (\n <Popover open={filterDialogOpen} onOpenChange={onFilterDialogOpenChange}>\n <PopoverTrigger asChild>\n <Button variant=\"outline\" size=\"sm\" className=\"gap-2\">\n <FilterIcon className=\"h-4 w-4\" />\n Filtros\n {advancedFilters.length > 0 && (\n <span className=\"ml-1 rounded-full bg-primary text-primary-foreground w-5 h-5 text-xs flex items-center justify-center\">\n {advancedFilters.length}\n </span>\n )}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-[700px] p-0\" align=\"start\" sideOffset={8}>\n <div className=\"p-6 border-b\">\n <h3 className=\"font-semibold\">Filtros Avançados</h3>\n <p className=\"text-sm text-muted-foreground mt-1\">\n Adicione condições de filtro para refinar os resultados.\n </p>\n </div>\n\n <div className=\"p-6\">\n <FilterBuilder\n conditions={advancedFilters}\n onConditionsChange={onAdvancedFiltersChange}\n fields={filterFields}\n />\n </div>\n\n <div className=\"flex items-center justify-end gap-2 p-4 border-t bg-muted/50\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => onFilterDialogOpenChange(false)}\n >\n Cancelar\n </Button>\n <Button\n size=\"sm\"\n onClick={onApplyFilters}\n >\n Aplicar Filtros\n </Button>\n </div>\n </PopoverContent>\n </Popover>\n )}\n </div>\n\n {/* Custom Actions */}\n {toolbarActions && (\n <div className=\"flex items-center gap-2\">\n {toolbarActions}\n </div>\n )}\n </div>\n );\n}\n"],"names":["DataTableToolbar","enableSearch","searchPlaceholder","searchQuery","onSearchChange","enableFilters","filterFields","advancedFilters","onAdvancedFiltersChange","filterDialogOpen","onFilterDialogOpenChange","onApplyFilters","toolbarActions","jsxs","jsx","Search","Input","event","Popover","PopoverTrigger","Button","FilterIcon","PopoverContent","FilterBuilder"],"mappings":"4RA+BO,SAASA,EAAiB,CAC7B,aAAAC,EACA,kBAAAC,EACA,YAAAC,EACA,eAAAC,EACA,cAAAC,EACA,aAAAC,EACA,gBAAAC,EACA,wBAAAC,EACA,iBAAAC,EACA,yBAAAC,EACA,eAAAC,EACA,eAAAC,CACJ,EAA0B,CAEtB,OADmBX,GAAiBI,GAAiBC,EAAa,OAAS,GAAM,CAAC,CAACM,EAI/EC,EAAAA,KAAC,MAAA,CAAI,UAAU,0CACX,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,iCAEV,SAAA,CAAAZ,GACGY,EAAAA,KAAC,MAAA,CAAI,UAAU,2BACX,SAAA,CAAAC,EAAAA,IAACC,EAAAA,OAAA,CAAO,UAAU,4FAAA,CAA6F,EAC/GD,EAAAA,IAACE,EAAAA,MAAA,CACG,YAAad,EACb,MAAOC,EACP,SAAWc,GAAUb,EAAea,EAAM,OAAO,KAAK,EACtD,UAAYA,GAAU,CACdA,EAAM,MAAQ,SACdA,EAAM,eAAA,CAEd,EACA,UAAU,MAAA,CAAA,CACd,EACJ,EAIHZ,GAAiBC,EAAa,OAAS,UACnCY,EAAAA,QAAA,CAAQ,KAAMT,EAAkB,aAAcC,EAC3C,SAAA,CAAAI,EAAAA,IAACK,EAAAA,eAAA,CAAe,QAAO,GACnB,SAAAN,EAAAA,KAACO,EAAAA,OAAA,CAAO,QAAQ,UAAU,KAAK,KAAK,UAAU,QAC1C,SAAA,CAAAN,EAAAA,IAACO,EAAAA,OAAA,CAAW,UAAU,SAAA,CAAU,EAAE,UAEjCd,EAAgB,OAAS,GACtBO,EAAAA,IAAC,QAAK,UAAU,wGACX,WAAgB,MAAA,CACrB,CAAA,CAAA,CAER,CAAA,CACJ,SACCQ,EAAAA,eAAA,CAAe,UAAU,gBAAgB,MAAM,QAAQ,WAAY,EAChE,SAAA,CAAAT,EAAAA,KAAC,MAAA,CAAI,UAAU,eACX,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAG,UAAU,gBAAgB,SAAA,oBAAiB,EAC/CA,EAAAA,IAAC,IAAA,CAAE,UAAU,qCAAqC,SAAA,0DAAA,CAElD,CAAA,EACJ,EAEAA,EAAAA,IAAC,MAAA,CAAI,UAAU,MACX,SAAAA,EAAAA,IAACS,EAAAA,cAAA,CACG,WAAYhB,EACZ,mBAAoBC,EACpB,OAAQF,CAAA,CAAA,EAEhB,EAEAO,EAAAA,KAAC,MAAA,CAAI,UAAU,+DACX,SAAA,CAAAC,EAAAA,IAACM,EAAAA,OAAA,CACG,QAAQ,UACR,KAAK,KACL,QAAS,IAAMV,EAAyB,EAAK,EAChD,SAAA,UAAA,CAAA,EAGDI,EAAAA,IAACM,EAAAA,OAAA,CACG,KAAK,KACL,QAAST,EACZ,SAAA,iBAAA,CAAA,CAED,CAAA,CACJ,CAAA,CAAA,CACJ,CAAA,CAAA,CACJ,CAAA,EAER,EAGCC,GACGE,EAAAA,IAAC,MAAA,CAAI,UAAU,0BACV,SAAAF,CAAA,CACL,CAAA,EAER,EA/EoB,IAiF5B"}
@@ -0,0 +1,85 @@
1
+ import { jsxs as r, jsx as e } from "react/jsx-runtime";
2
+ import { Input as g } from "../forms/input.js";
3
+ import { Button as a } from "../primitives/button.js";
4
+ import { Search as x, Filter as v } from "lucide-react";
5
+ import { Popover as N, PopoverTrigger as b, PopoverContent as y } from "../overlays/popover.js";
6
+ import { FilterBuilder as C } from "./filter-builder.js";
7
+ function D({
8
+ enableSearch: i,
9
+ searchPlaceholder: c,
10
+ searchQuery: d,
11
+ onSearchChange: p,
12
+ enableFilters: o,
13
+ filterFields: l,
14
+ advancedFilters: n,
15
+ onAdvancedFiltersChange: f,
16
+ filterDialogOpen: h,
17
+ onFilterDialogOpenChange: m,
18
+ onApplyFilters: u,
19
+ toolbarActions: s
20
+ }) {
21
+ return i || o && l.length > 0 || !!s ? /* @__PURE__ */ r("div", { className: "flex items-center justify-between gap-2", children: [
22
+ /* @__PURE__ */ r("div", { className: "flex items-center gap-2 flex-1", children: [
23
+ i && /* @__PURE__ */ r("div", { className: "relative max-w-sm flex-1", children: [
24
+ /* @__PURE__ */ e(x, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground pointer-events-none" }),
25
+ /* @__PURE__ */ e(
26
+ g,
27
+ {
28
+ placeholder: c,
29
+ value: d,
30
+ onChange: (t) => p(t.target.value),
31
+ onKeyDown: (t) => {
32
+ t.key === "Enter" && t.preventDefault();
33
+ },
34
+ className: "pl-9"
35
+ }
36
+ )
37
+ ] }),
38
+ o && l.length > 0 && /* @__PURE__ */ r(N, { open: h, onOpenChange: m, children: [
39
+ /* @__PURE__ */ e(b, { asChild: !0, children: /* @__PURE__ */ r(a, { variant: "outline", size: "sm", className: "gap-2", children: [
40
+ /* @__PURE__ */ e(v, { className: "h-4 w-4" }),
41
+ "Filtros",
42
+ n.length > 0 && /* @__PURE__ */ e("span", { className: "ml-1 rounded-full bg-primary text-primary-foreground w-5 h-5 text-xs flex items-center justify-center", children: n.length })
43
+ ] }) }),
44
+ /* @__PURE__ */ r(y, { className: "w-[700px] p-0", align: "start", sideOffset: 8, children: [
45
+ /* @__PURE__ */ r("div", { className: "p-6 border-b", children: [
46
+ /* @__PURE__ */ e("h3", { className: "font-semibold", children: "Filtros Avançados" }),
47
+ /* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground mt-1", children: "Adicione condições de filtro para refinar os resultados." })
48
+ ] }),
49
+ /* @__PURE__ */ e("div", { className: "p-6", children: /* @__PURE__ */ e(
50
+ C,
51
+ {
52
+ conditions: n,
53
+ onConditionsChange: f,
54
+ fields: l
55
+ }
56
+ ) }),
57
+ /* @__PURE__ */ r("div", { className: "flex items-center justify-end gap-2 p-4 border-t bg-muted/50", children: [
58
+ /* @__PURE__ */ e(
59
+ a,
60
+ {
61
+ variant: "outline",
62
+ size: "sm",
63
+ onClick: () => m(!1),
64
+ children: "Cancelar"
65
+ }
66
+ ),
67
+ /* @__PURE__ */ e(
68
+ a,
69
+ {
70
+ size: "sm",
71
+ onClick: u,
72
+ children: "Aplicar Filtros"
73
+ }
74
+ )
75
+ ] })
76
+ ] })
77
+ ] })
78
+ ] }),
79
+ s && /* @__PURE__ */ e("div", { className: "flex items-center gap-2", children: s })
80
+ ] }) : null;
81
+ }
82
+ export {
83
+ D as DataTableToolbar
84
+ };
85
+ //# sourceMappingURL=data-table-toolbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-toolbar.js","sources":["../../../../src/components/ui/data/data-table-toolbar.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Input } from \"../forms/input\";\nimport { Button } from \"../primitives/button\";\nimport { Search, Filter as FilterIcon } from \"lucide-react\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../overlays/popover\";\nimport { FilterBuilder, FilterCondition, FilterField } from \"./filter-builder\";\n\nexport interface DataTableToolbarProps {\n enableSearch: boolean;\n searchPlaceholder: string;\n searchQuery: string;\n onSearchChange: (value: string) => void;\n enableFilters: boolean;\n filterFields: FilterField[];\n advancedFilters: FilterCondition[];\n onAdvancedFiltersChange: (filters: FilterCondition[]) => void;\n filterDialogOpen: boolean;\n onFilterDialogOpenChange: (open: boolean) => void;\n onApplyFilters: () => void;\n toolbarActions?: React.ReactNode;\n}\n\n/**\n * DataTable's toolbar: the search input and the advanced-filter Popover/FilterBuilder\n * block. Pure leaf render component — all state lives in `useDataTableFilters`\n * (consumed by `data-table.tsx`) and is passed down as props.\n *\n * Renders nothing when there is no search, no filter fields, and no custom\n * `toolbarActions` — mirrors the `hasToolbar` guard that previously lived inline in\n * `data-table.tsx`.\n */\nexport function DataTableToolbar({\n enableSearch,\n searchPlaceholder,\n searchQuery,\n onSearchChange,\n enableFilters,\n filterFields,\n advancedFilters,\n onAdvancedFiltersChange,\n filterDialogOpen,\n onFilterDialogOpenChange,\n onApplyFilters,\n toolbarActions,\n}: DataTableToolbarProps) {\n const hasToolbar = enableSearch || (enableFilters && filterFields.length > 0) || !!toolbarActions;\n if (!hasToolbar) return null;\n\n return (\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex items-center gap-2 flex-1\">\n {/* Search */}\n {enableSearch && (\n <div className=\"relative max-w-sm flex-1\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground pointer-events-none\" />\n <Input\n placeholder={searchPlaceholder}\n value={searchQuery}\n onChange={(event) => onSearchChange(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n }\n }}\n className=\"pl-9\"\n />\n </div>\n )}\n\n {/* Advanced Filters */}\n {enableFilters && filterFields.length > 0 && (\n <Popover open={filterDialogOpen} onOpenChange={onFilterDialogOpenChange}>\n <PopoverTrigger asChild>\n <Button variant=\"outline\" size=\"sm\" className=\"gap-2\">\n <FilterIcon className=\"h-4 w-4\" />\n Filtros\n {advancedFilters.length > 0 && (\n <span className=\"ml-1 rounded-full bg-primary text-primary-foreground w-5 h-5 text-xs flex items-center justify-center\">\n {advancedFilters.length}\n </span>\n )}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-[700px] p-0\" align=\"start\" sideOffset={8}>\n <div className=\"p-6 border-b\">\n <h3 className=\"font-semibold\">Filtros Avançados</h3>\n <p className=\"text-sm text-muted-foreground mt-1\">\n Adicione condições de filtro para refinar os resultados.\n </p>\n </div>\n\n <div className=\"p-6\">\n <FilterBuilder\n conditions={advancedFilters}\n onConditionsChange={onAdvancedFiltersChange}\n fields={filterFields}\n />\n </div>\n\n <div className=\"flex items-center justify-end gap-2 p-4 border-t bg-muted/50\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => onFilterDialogOpenChange(false)}\n >\n Cancelar\n </Button>\n <Button\n size=\"sm\"\n onClick={onApplyFilters}\n >\n Aplicar Filtros\n </Button>\n </div>\n </PopoverContent>\n </Popover>\n )}\n </div>\n\n {/* Custom Actions */}\n {toolbarActions && (\n <div className=\"flex items-center gap-2\">\n {toolbarActions}\n </div>\n )}\n </div>\n );\n}\n"],"names":["DataTableToolbar","enableSearch","searchPlaceholder","searchQuery","onSearchChange","enableFilters","filterFields","advancedFilters","onAdvancedFiltersChange","filterDialogOpen","onFilterDialogOpenChange","onApplyFilters","toolbarActions","jsxs","jsx","Search","Input","event","Popover","PopoverTrigger","Button","FilterIcon","PopoverContent","FilterBuilder"],"mappings":";;;;;;AA+BO,SAASA,EAAiB;AAAA,EAC7B,cAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,aAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,eAAAC;AAAA,EACA,cAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,yBAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,0BAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,gBAAAC;AACJ,GAA0B;AAEtB,SADmBX,KAAiBI,KAAiBC,EAAa,SAAS,KAAM,CAAC,CAACM,IAI/E,gBAAAC,EAAC,OAAA,EAAI,WAAU,2CACX,UAAA;AAAA,IAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,kCAEV,UAAA;AAAA,MAAAZ,KACG,gBAAAY,EAAC,OAAA,EAAI,WAAU,4BACX,UAAA;AAAA,QAAA,gBAAAC,EAACC,GAAA,EAAO,WAAU,6FAAA,CAA6F;AAAA,QAC/G,gBAAAD;AAAA,UAACE;AAAA,UAAA;AAAA,YACG,aAAad;AAAA,YACb,OAAOC;AAAA,YACP,UAAU,CAACc,MAAUb,EAAea,EAAM,OAAO,KAAK;AAAA,YACtD,WAAW,CAACA,MAAU;AAClB,cAAIA,EAAM,QAAQ,WACdA,EAAM,eAAA;AAAA,YAEd;AAAA,YACA,WAAU;AAAA,UAAA;AAAA,QAAA;AAAA,MACd,GACJ;AAAA,MAIHZ,KAAiBC,EAAa,SAAS,uBACnCY,GAAA,EAAQ,MAAMT,GAAkB,cAAcC,GAC3C,UAAA;AAAA,QAAA,gBAAAI,EAACK,GAAA,EAAe,SAAO,IACnB,UAAA,gBAAAN,EAACO,GAAA,EAAO,SAAQ,WAAU,MAAK,MAAK,WAAU,SAC1C,UAAA;AAAA,UAAA,gBAAAN,EAACO,GAAA,EAAW,WAAU,UAAA,CAAU;AAAA,UAAE;AAAA,UAEjCd,EAAgB,SAAS,KACtB,gBAAAO,EAAC,UAAK,WAAU,yGACX,YAAgB,OAAA,CACrB;AAAA,QAAA,EAAA,CAER,EAAA,CACJ;AAAA,0BACCQ,GAAA,EAAe,WAAU,iBAAgB,OAAM,SAAQ,YAAY,GAChE,UAAA;AAAA,UAAA,gBAAAT,EAAC,OAAA,EAAI,WAAU,gBACX,UAAA;AAAA,YAAA,gBAAAC,EAAC,MAAA,EAAG,WAAU,iBAAgB,UAAA,qBAAiB;AAAA,YAC/C,gBAAAA,EAAC,KAAA,EAAE,WAAU,sCAAqC,UAAA,2DAAA,CAElD;AAAA,UAAA,GACJ;AAAA,UAEA,gBAAAA,EAAC,OAAA,EAAI,WAAU,OACX,UAAA,gBAAAA;AAAA,YAACS;AAAA,YAAA;AAAA,cACG,YAAYhB;AAAA,cACZ,oBAAoBC;AAAA,cACpB,QAAQF;AAAA,YAAA;AAAA,UAAA,GAEhB;AAAA,UAEA,gBAAAO,EAAC,OAAA,EAAI,WAAU,gEACX,UAAA;AAAA,YAAA,gBAAAC;AAAA,cAACM;AAAA,cAAA;AAAA,gBACG,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,SAAS,MAAMV,EAAyB,EAAK;AAAA,gBAChD,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAGD,gBAAAI;AAAA,cAACM;AAAA,cAAA;AAAA,gBACG,MAAK;AAAA,gBACL,SAAST;AAAA,gBACZ,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAED,EAAA,CACJ;AAAA,QAAA,EAAA,CACJ;AAAA,MAAA,EAAA,CACJ;AAAA,IAAA,GAER;AAAA,IAGCC,KACG,gBAAAE,EAAC,OAAA,EAAI,WAAU,2BACV,UAAAF,EAAA,CACL;AAAA,EAAA,GAER,IA/EoB;AAiF5B;"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),g=require("react"),i=require("./table.cjs"),K=require("./table-pagination.cjs"),L=require("../primitives/skeleton.cjs"),V=require("lucide-react"),W=require("../../../hooks/use-data-table.cjs"),X=require("../../../hooks/use-data-table-filters.cjs"),b=require("../utils.cjs"),Y=require("./filter-bar.cjs"),Z=require("./data-table-toolbar.cjs"),f=require("./data-table-empty-state.cjs");function v({data:j,columns:c,searchPlaceholder:u="Buscar...",searchableColumns:S,enableSearch:D=!0,filterFields:y=[],enableFilters:F=!1,initialFilters:q=[],pageSizeOptions:N=[5,10,20,50],initialPageSize:z=10,toolbarActions:A,serverConfig:e,isLoading:w=!1,emptyState:R,emptyMessage:m,className:M}){var x,P;const r=!!e,{data:k,state:n,handlers:o,getSortDirection:d}=W.useDataTable({data:j,initialPageSize:z,initialSort:{column:null,direction:null},serverMode:r,totalItems:e==null?void 0:e.totalItems,serverCurrentPage:e==null?void 0:e.currentPage,serverCurrentPageSize:e==null?void 0:e.currentPageSize}),B=S?S[0]:((x=c.find(a=>a.key==="nome"||a.key==="name"||a.key==="title"||a.key==="titulo"))==null?void 0:x.key)||((P=c[0])==null?void 0:P.key),{searchQuery:T,handleSearchChange:O,advancedFilters:h,setAdvancedFilters:C,filterDialogOpen:I,setFilterDialogOpen:E,activeFilterChips:H,handleApplyFilters:$,handleClearAllFilters:Q,clearSearchAndFilters:U}=X.useDataTableFilters({initialFilters:q,filterFields:y,isServerMode:r,serverConfig:e,handlers:o,defaultSearchColumn:B}),_=g.useCallback(async a=>{if(r&&(e!=null&&e.onSortChange)){const s=n.sort;let l="asc";s.column===a&&(l=s.direction==="asc"?"desc":s.direction==="desc"?null:"asc");const p={column:l?a:null,direction:l};o.onSort(a),await e.onSortChange(p)}else o.onSort(a)},[r,e,n.sort,o]),G=g.useCallback(async a=>{r&&(e!=null&&e.onPageChange)?await e.onPageChange(a,n.pagination.pageSize):n.pagination.onPageChange&&n.pagination.onPageChange(a)},[r,e,n.pagination]),J=g.useCallback(async a=>{r&&(e!=null&&e.onPageChange)?await e.onPageChange(1,a):n.pagination.onPageSizeChange&&n.pagination.onPageSizeChange(a)},[r,e,n.pagination]);return t.jsxs("div",{className:b.cn("space-y-4",M),children:[t.jsx(Z.DataTableToolbar,{enableSearch:D,searchPlaceholder:u,searchQuery:T,onSearchChange:O,enableFilters:F,filterFields:y,advancedFilters:h,onAdvancedFiltersChange:C,filterDialogOpen:I,onFilterDialogOpenChange:E,onApplyFilters:$,toolbarActions:A}),h.length>0&&t.jsx(Y.FilterBar,{activeFilters:H,onClearAll:Q}),t.jsx("div",{className:"rounded-md border overflow-x-auto",children:t.jsxs(i.Table,{children:[t.jsx(i.TableHeader,{children:t.jsx(i.TableRow,{children:c.map(a=>t.jsxs(i.TableHead,{className:b.cn(a.headerClassName,a.sortable&&"cursor-pointer select-none hover:bg-muted/50 transition-colors",a.sortable&&d(a.key)&&"text-primary"),style:{width:a.width},onClick:()=>a.sortable&&_(a.key),"aria-sort":a.sortable?d(a.key)==="asc"?"ascending":d(a.key)==="desc"?"descending":"none":void 0,children:[a.header,a.sortable&&d(a.key)&&t.jsx(V.ArrowUpDown,{className:"ml-2 h-4 w-4 inline"})]},String(a.key)))})}),t.jsx(i.TableBody,{children:w?Array.from({length:Math.min(n.pagination.pageSize,15)}).map((a,s)=>t.jsx(i.TableRow,{children:c.map((l,p)=>t.jsx(i.TableCell,{className:l.className,children:t.jsx(L.Skeleton,{className:"h-4 w-full"})},p))},`skeleton-${s}`)):k.length>0?k.map((a,s)=>t.jsx(i.TableRow,{children:c.map(l=>t.jsx(i.TableCell,{className:b.cn(l.className,l.align?`text-${l.align}`:"text-left",l.onCellClick&&"cursor-pointer hover:text-primary"),onClick:l.onCellClick?()=>l.onCellClick(a[l.key],a,s):void 0,children:l.render?l.render(a[l.key],a,s):a[l.key]},String(l.key)))},s)):t.jsx(i.TableRow,{children:t.jsx(i.TableCell,{colSpan:c.length,className:"h-64",children:t.jsx(f.DataTableEmptyState,{emptyState:R,emptyMessage:m,hasActiveFilters:h.length>0,hasSearch:T.trim().length>0,onClearFilters:U})})})})]})}),t.jsx(K.TablePagination,{currentPage:n.pagination.currentPage,totalPages:Math.ceil(n.pagination.totalItems/n.pagination.pageSize),pageSize:n.pagination.pageSize,totalItems:n.pagination.totalItems,onPageChange:G,onPageSizeChange:J,pageSizeOptions:N})]})}exports.DataTable=v;
2
+ //# sourceMappingURL=data-table.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table.cjs","sources":["../../../../src/components/ui/data/data-table.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"./table\";\nimport { TablePagination } from \"./table-pagination\";\nimport { Skeleton } from \"../primitives/skeleton\";\nimport { ArrowUpDown } from \"lucide-react\";\nimport { useDataTable } from \"../../../hooks/use-data-table\";\nimport { useDataTableFilters } from \"../../../hooks/use-data-table-filters\";\nimport { ColumnDef, SortConfig, ServerSideConfig, EmptyStateConfig } from \"./table-types\";\nimport { cn } from \"../utils\";\nimport { FilterBar } from \"./filter-bar\";\nimport { FilterCondition, FilterField } from \"./filter-builder\";\nimport { DataTableToolbar } from \"./data-table-toolbar\";\nimport { DataTableEmptyState } from \"./data-table-empty-state\";\n\ninterface DataTableProps<T extends object> {\n data: T[];\n columns: ColumnDef<T>[];\n\n // Configuração de busca\n searchPlaceholder?: string;\n searchableColumns?: (keyof T)[]; // Colunas que podem ser pesquisadas\n enableSearch?: boolean;\n\n // Configuração de filtros\n filterFields?: FilterField[]; // Campos de filtro avançado\n enableFilters?: boolean;\n initialFilters?: FilterCondition[]; // Filtros iniciais/externos\n\n // Paginação\n pageSizeOptions?: number[];\n initialPageSize?: number;\n\n // Conteúdo adicional da barra de ferramentas\n toolbarActions?: React.ReactNode;\n\n // Configuração server-side\n serverConfig?: ServerSideConfig<T>;\n\n // Estado de carregamento e vazio\n isLoading?: boolean;\n /**\n * Configuração do empty state.\n * Suporta tanto config completo (EmptyStateConfig) quanto string simples (retrocompatibilidade).\n */\n emptyState?: EmptyStateConfig | string;\n /** @deprecated Use emptyState ao invés de emptyMessage */\n emptyMessage?: string;\n\n className?: string;\n}\n\nexport function DataTable<T extends object>({\n data,\n columns,\n searchPlaceholder = \"Buscar...\",\n searchableColumns,\n enableSearch = true,\n filterFields = [],\n enableFilters = false,\n initialFilters = [],\n pageSizeOptions = [5, 10, 20, 50],\n initialPageSize = 10,\n toolbarActions,\n serverConfig,\n isLoading = false,\n emptyState,\n emptyMessage, // deprecated\n className,\n}: DataTableProps<T>) {\n // Detectar se está em modo server-side\n const isServerMode = !!serverConfig;\n const {\n data: processedData,\n state,\n handlers,\n getSortDirection,\n } = useDataTable({\n data,\n initialPageSize,\n initialSort: { column: null, direction: null },\n serverMode: isServerMode,\n totalItems: serverConfig?.totalItems,\n serverCurrentPage: serverConfig?.currentPage,\n serverCurrentPageSize: serverConfig?.currentPageSize,\n });\n\n // Auto-detect searchable column\n const defaultSearchColumn = searchableColumns\n ? searchableColumns[0]\n : (columns.find(c => c.key === \"nome\" || c.key === \"name\" || c.key === \"title\" || c.key === \"titulo\")?.key || columns[0]?.key);\n\n const {\n searchQuery,\n handleSearchChange,\n advancedFilters,\n setAdvancedFilters,\n filterDialogOpen,\n setFilterDialogOpen,\n activeFilterChips,\n handleApplyFilters,\n handleClearAllFilters,\n clearSearchAndFilters,\n } = useDataTableFilters<T>({\n initialFilters,\n filterFields,\n isServerMode,\n serverConfig,\n handlers,\n defaultSearchColumn,\n });\n\n // Handle sort - server-side aware\n const handleSort = useCallback(async (column: keyof T) => {\n if (isServerMode && serverConfig?.onSortChange) {\n // Calcular novo sortConfig\n const currentSort = state.sort;\n let newDirection: 'asc' | 'desc' | null = 'asc';\n\n if (currentSort.column === column) {\n newDirection = currentSort.direction === 'asc' ? 'desc' :\n currentSort.direction === 'desc' ? null : 'asc';\n }\n\n const newSortConfig: SortConfig<T> = {\n column: newDirection ? column : null,\n direction: newDirection\n };\n\n // Atualizar estado interno primeiro para mostrar indicador visual\n handlers.onSort(column);\n\n // Depois chamar callback do servidor\n await serverConfig.onSortChange(newSortConfig);\n } else {\n // Client-side: usar handler padrão\n handlers.onSort(column);\n }\n }, [isServerMode, serverConfig, state.sort, handlers]);\n\n // Handle page change - server-side aware\n const handlePageChange = useCallback(async (page: number) => {\n if (isServerMode && serverConfig?.onPageChange) {\n await serverConfig.onPageChange(page, state.pagination.pageSize);\n } else {\n // Client-side: usar handler padrão\n if (state.pagination.onPageChange) {\n state.pagination.onPageChange(page);\n }\n }\n }, [isServerMode, serverConfig, state.pagination]);\n\n // Handle page size change - server-side aware\n const handlePageSizeChange = useCallback(async (newSize: number) => {\n if (isServerMode && serverConfig?.onPageChange) {\n await serverConfig.onPageChange(1, newSize); // Reset para página 1\n } else {\n // Client-side: usar handler padrão\n if (state.pagination.onPageSizeChange) {\n state.pagination.onPageSizeChange(newSize);\n }\n }\n }, [isServerMode, serverConfig, state.pagination]);\n\n return (\n <div className={cn(\"space-y-4\", className)}>\n {/* Toolbar — only rendered when there is at least one visible element */}\n <DataTableToolbar\n enableSearch={enableSearch}\n searchPlaceholder={searchPlaceholder}\n searchQuery={searchQuery}\n onSearchChange={handleSearchChange}\n enableFilters={enableFilters}\n filterFields={filterFields}\n advancedFilters={advancedFilters}\n onAdvancedFiltersChange={setAdvancedFilters}\n filterDialogOpen={filterDialogOpen}\n onFilterDialogOpenChange={setFilterDialogOpen}\n onApplyFilters={handleApplyFilters}\n toolbarActions={toolbarActions}\n />\n\n {/* Active Filter Chips */}\n {advancedFilters.length > 0 && (\n <FilterBar\n activeFilters={activeFilterChips}\n onClearAll={handleClearAllFilters}\n />\n )}\n\n {/* Table */}\n <div className=\"rounded-md border overflow-x-auto\">\n <Table>\n <TableHeader>\n <TableRow>\n {columns.map((column) => (\n <TableHead\n key={String(column.key)}\n className={cn(\n column.headerClassName,\n column.sortable && \"cursor-pointer select-none hover:bg-muted/50 transition-colors\",\n column.sortable && getSortDirection(column.key) && \"text-primary\"\n )}\n style={{ width: column.width }}\n onClick={() => column.sortable && handleSort(column.key)}\n aria-sort={column.sortable ? (getSortDirection(column.key) === \"asc\" ? \"ascending\" : getSortDirection(column.key) === \"desc\" ? \"descending\" : \"none\") : undefined}\n >\n {column.header}\n {column.sortable && getSortDirection(column.key) && (\n <ArrowUpDown className=\"ml-2 h-4 w-4 inline\" />\n )}\n </TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {isLoading ? (\n // SKELETON ROWS - limitar a max 15 para performance\n Array.from({ length: Math.min(state.pagination.pageSize, 15) }).map((_, i) => (\n <TableRow key={`skeleton-${i}`}>\n {columns.map((col, j) => (\n <TableCell key={j} className={col.className}>\n <Skeleton className=\"h-4 w-full\" />\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : processedData.length > 0 ? (\n // DADOS NORMAIS\n processedData.map((row, rowIndex) => (\n <TableRow key={rowIndex}>\n {columns.map((column) => (\n <TableCell\n key={String(column.key)}\n className={cn(\n column.className,\n column.align ? `text-${column.align}` : \"text-left\",\n column.onCellClick && \"cursor-pointer hover:text-primary\"\n )}\n onClick={column.onCellClick\n ? () => column.onCellClick!(row[column.key], row, rowIndex)\n : undefined}\n >\n {column.render\n ? column.render(row[column.key], row, rowIndex)\n : (row[column.key] as React.ReactNode)}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n // EMPTY STATE\n <TableRow>\n <TableCell\n colSpan={columns.length}\n className=\"h-64\"\n >\n <DataTableEmptyState\n emptyState={emptyState}\n emptyMessage={emptyMessage}\n hasActiveFilters={advancedFilters.length > 0}\n hasSearch={searchQuery.trim().length > 0}\n onClearFilters={clearSearchAndFilters}\n />\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n\n {/* Pagination */}\n <TablePagination\n currentPage={state.pagination.currentPage}\n totalPages={Math.ceil(state.pagination.totalItems / state.pagination.pageSize)}\n pageSize={state.pagination.pageSize}\n totalItems={state.pagination.totalItems}\n onPageChange={handlePageChange}\n onPageSizeChange={handlePageSizeChange}\n pageSizeOptions={pageSizeOptions}\n />\n </div>\n );\n}\n"],"names":["DataTable","data","columns","searchPlaceholder","searchableColumns","enableSearch","filterFields","enableFilters","initialFilters","pageSizeOptions","initialPageSize","toolbarActions","serverConfig","isLoading","emptyState","emptyMessage","className","isServerMode","processedData","state","handlers","getSortDirection","useDataTable","defaultSearchColumn","_a","c","_b","searchQuery","handleSearchChange","advancedFilters","setAdvancedFilters","filterDialogOpen","setFilterDialogOpen","activeFilterChips","handleApplyFilters","handleClearAllFilters","clearSearchAndFilters","useDataTableFilters","handleSort","useCallback","column","currentSort","newDirection","newSortConfig","handlePageChange","page","handlePageSizeChange","newSize","cn","jsx","DataTableToolbar","FilterBar","Table","TableHeader","TableRow","jsxs","TableHead","ArrowUpDown","TableBody","_","i","col","j","TableCell","Skeleton","row","rowIndex","DataTableEmptyState","TablePagination"],"mappings":"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"}
@@ -0,0 +1,181 @@
1
+ import { jsxs as g, jsx as i } from "react/jsx-runtime";
2
+ import { useCallback as S } from "react";
3
+ import { Table as X, TableHeader as Y, TableRow as s, TableHead as Z, TableBody as C, TableCell as y } from "./table.js";
4
+ import { TablePagination as u } from "./table-pagination.js";
5
+ import { Skeleton as f } from "../primitives/skeleton.js";
6
+ import { ArrowUpDown as v } from "lucide-react";
7
+ import { useDataTable as aa } from "../../../hooks/use-data-table.js";
8
+ import { useDataTableFilters as ea } from "../../../hooks/use-data-table-filters.js";
9
+ import { cn as m } from "../utils.js";
10
+ import { FilterBar as ta } from "./filter-bar.js";
11
+ import { DataTableToolbar as ia } from "./data-table-toolbar.js";
12
+ import { DataTableEmptyState as la } from "./data-table-empty-state.js";
13
+ function ka({
14
+ data: N,
15
+ columns: o,
16
+ searchPlaceholder: z = "Buscar...",
17
+ searchableColumns: k,
18
+ enableSearch: A = !0,
19
+ filterFields: b = [],
20
+ enableFilters: w = !1,
21
+ initialFilters: x = [],
22
+ pageSizeOptions: M = [5, 10, 20, 50],
23
+ initialPageSize: B = 10,
24
+ toolbarActions: I,
25
+ serverConfig: e,
26
+ isLoading: O = !1,
27
+ emptyState: j,
28
+ emptyMessage: H,
29
+ // deprecated
30
+ className: $
31
+ }) {
32
+ var T, D;
33
+ const r = !!e, {
34
+ data: P,
35
+ state: l,
36
+ handlers: h,
37
+ getSortDirection: d
38
+ } = aa({
39
+ data: N,
40
+ initialPageSize: B,
41
+ initialSort: { column: null, direction: null },
42
+ serverMode: r,
43
+ totalItems: e == null ? void 0 : e.totalItems,
44
+ serverCurrentPage: e == null ? void 0 : e.currentPage,
45
+ serverCurrentPageSize: e == null ? void 0 : e.currentPageSize
46
+ }), E = k ? k[0] : ((T = o.find((a) => a.key === "nome" || a.key === "name" || a.key === "title" || a.key === "titulo")) == null ? void 0 : T.key) || ((D = o[0]) == null ? void 0 : D.key), {
47
+ searchQuery: F,
48
+ handleSearchChange: Q,
49
+ advancedFilters: c,
50
+ setAdvancedFilters: R,
51
+ filterDialogOpen: U,
52
+ setFilterDialogOpen: _,
53
+ activeFilterChips: q,
54
+ handleApplyFilters: G,
55
+ handleClearAllFilters: J,
56
+ clearSearchAndFilters: K
57
+ } = ea({
58
+ initialFilters: x,
59
+ filterFields: b,
60
+ isServerMode: r,
61
+ serverConfig: e,
62
+ handlers: h,
63
+ defaultSearchColumn: E
64
+ }), L = S(async (a) => {
65
+ if (r && (e != null && e.onSortChange)) {
66
+ const n = l.sort;
67
+ let t = "asc";
68
+ n.column === a && (t = n.direction === "asc" ? "desc" : n.direction === "desc" ? null : "asc");
69
+ const p = {
70
+ column: t ? a : null,
71
+ direction: t
72
+ };
73
+ h.onSort(a), await e.onSortChange(p);
74
+ } else
75
+ h.onSort(a);
76
+ }, [r, e, l.sort, h]), V = S(async (a) => {
77
+ r && (e != null && e.onPageChange) ? await e.onPageChange(a, l.pagination.pageSize) : l.pagination.onPageChange && l.pagination.onPageChange(a);
78
+ }, [r, e, l.pagination]), W = S(async (a) => {
79
+ r && (e != null && e.onPageChange) ? await e.onPageChange(1, a) : l.pagination.onPageSizeChange && l.pagination.onPageSizeChange(a);
80
+ }, [r, e, l.pagination]);
81
+ return /* @__PURE__ */ g("div", { className: m("space-y-4", $), children: [
82
+ /* @__PURE__ */ i(
83
+ ia,
84
+ {
85
+ enableSearch: A,
86
+ searchPlaceholder: z,
87
+ searchQuery: F,
88
+ onSearchChange: Q,
89
+ enableFilters: w,
90
+ filterFields: b,
91
+ advancedFilters: c,
92
+ onAdvancedFiltersChange: R,
93
+ filterDialogOpen: U,
94
+ onFilterDialogOpenChange: _,
95
+ onApplyFilters: G,
96
+ toolbarActions: I
97
+ }
98
+ ),
99
+ c.length > 0 && /* @__PURE__ */ i(
100
+ ta,
101
+ {
102
+ activeFilters: q,
103
+ onClearAll: J
104
+ }
105
+ ),
106
+ /* @__PURE__ */ i("div", { className: "rounded-md border overflow-x-auto", children: /* @__PURE__ */ g(X, { children: [
107
+ /* @__PURE__ */ i(Y, { children: /* @__PURE__ */ i(s, { children: o.map((a) => /* @__PURE__ */ g(
108
+ Z,
109
+ {
110
+ className: m(
111
+ a.headerClassName,
112
+ a.sortable && "cursor-pointer select-none hover:bg-muted/50 transition-colors",
113
+ a.sortable && d(a.key) && "text-primary"
114
+ ),
115
+ style: { width: a.width },
116
+ onClick: () => a.sortable && L(a.key),
117
+ "aria-sort": a.sortable ? d(a.key) === "asc" ? "ascending" : d(a.key) === "desc" ? "descending" : "none" : void 0,
118
+ children: [
119
+ a.header,
120
+ a.sortable && d(a.key) && /* @__PURE__ */ i(v, { className: "ml-2 h-4 w-4 inline" })
121
+ ]
122
+ },
123
+ String(a.key)
124
+ )) }) }),
125
+ /* @__PURE__ */ i(C, { children: O ? (
126
+ // SKELETON ROWS - limitar a max 15 para performance
127
+ Array.from({ length: Math.min(l.pagination.pageSize, 15) }).map((a, n) => /* @__PURE__ */ i(s, { children: o.map((t, p) => /* @__PURE__ */ i(y, { className: t.className, children: /* @__PURE__ */ i(f, { className: "h-4 w-full" }) }, p)) }, `skeleton-${n}`))
128
+ ) : P.length > 0 ? (
129
+ // DADOS NORMAIS
130
+ P.map((a, n) => /* @__PURE__ */ i(s, { children: o.map((t) => /* @__PURE__ */ i(
131
+ y,
132
+ {
133
+ className: m(
134
+ t.className,
135
+ t.align ? `text-${t.align}` : "text-left",
136
+ t.onCellClick && "cursor-pointer hover:text-primary"
137
+ ),
138
+ onClick: t.onCellClick ? () => t.onCellClick(a[t.key], a, n) : void 0,
139
+ children: t.render ? t.render(a[t.key], a, n) : a[t.key]
140
+ },
141
+ String(t.key)
142
+ )) }, n))
143
+ ) : (
144
+ // EMPTY STATE
145
+ /* @__PURE__ */ i(s, { children: /* @__PURE__ */ i(
146
+ y,
147
+ {
148
+ colSpan: o.length,
149
+ className: "h-64",
150
+ children: /* @__PURE__ */ i(
151
+ la,
152
+ {
153
+ emptyState: j,
154
+ emptyMessage: H,
155
+ hasActiveFilters: c.length > 0,
156
+ hasSearch: F.trim().length > 0,
157
+ onClearFilters: K
158
+ }
159
+ )
160
+ }
161
+ ) })
162
+ ) })
163
+ ] }) }),
164
+ /* @__PURE__ */ i(
165
+ u,
166
+ {
167
+ currentPage: l.pagination.currentPage,
168
+ totalPages: Math.ceil(l.pagination.totalItems / l.pagination.pageSize),
169
+ pageSize: l.pagination.pageSize,
170
+ totalItems: l.pagination.totalItems,
171
+ onPageChange: V,
172
+ onPageSizeChange: W,
173
+ pageSizeOptions: M
174
+ }
175
+ )
176
+ ] });
177
+ }
178
+ export {
179
+ ka as DataTable
180
+ };
181
+ //# sourceMappingURL=data-table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table.js","sources":["../../../../src/components/ui/data/data-table.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"./table\";\nimport { TablePagination } from \"./table-pagination\";\nimport { Skeleton } from \"../primitives/skeleton\";\nimport { ArrowUpDown } from \"lucide-react\";\nimport { useDataTable } from \"../../../hooks/use-data-table\";\nimport { useDataTableFilters } from \"../../../hooks/use-data-table-filters\";\nimport { ColumnDef, SortConfig, ServerSideConfig, EmptyStateConfig } from \"./table-types\";\nimport { cn } from \"../utils\";\nimport { FilterBar } from \"./filter-bar\";\nimport { FilterCondition, FilterField } from \"./filter-builder\";\nimport { DataTableToolbar } from \"./data-table-toolbar\";\nimport { DataTableEmptyState } from \"./data-table-empty-state\";\n\ninterface DataTableProps<T extends object> {\n data: T[];\n columns: ColumnDef<T>[];\n\n // Configuração de busca\n searchPlaceholder?: string;\n searchableColumns?: (keyof T)[]; // Colunas que podem ser pesquisadas\n enableSearch?: boolean;\n\n // Configuração de filtros\n filterFields?: FilterField[]; // Campos de filtro avançado\n enableFilters?: boolean;\n initialFilters?: FilterCondition[]; // Filtros iniciais/externos\n\n // Paginação\n pageSizeOptions?: number[];\n initialPageSize?: number;\n\n // Conteúdo adicional da barra de ferramentas\n toolbarActions?: React.ReactNode;\n\n // Configuração server-side\n serverConfig?: ServerSideConfig<T>;\n\n // Estado de carregamento e vazio\n isLoading?: boolean;\n /**\n * Configuração do empty state.\n * Suporta tanto config completo (EmptyStateConfig) quanto string simples (retrocompatibilidade).\n */\n emptyState?: EmptyStateConfig | string;\n /** @deprecated Use emptyState ao invés de emptyMessage */\n emptyMessage?: string;\n\n className?: string;\n}\n\nexport function DataTable<T extends object>({\n data,\n columns,\n searchPlaceholder = \"Buscar...\",\n searchableColumns,\n enableSearch = true,\n filterFields = [],\n enableFilters = false,\n initialFilters = [],\n pageSizeOptions = [5, 10, 20, 50],\n initialPageSize = 10,\n toolbarActions,\n serverConfig,\n isLoading = false,\n emptyState,\n emptyMessage, // deprecated\n className,\n}: DataTableProps<T>) {\n // Detectar se está em modo server-side\n const isServerMode = !!serverConfig;\n const {\n data: processedData,\n state,\n handlers,\n getSortDirection,\n } = useDataTable({\n data,\n initialPageSize,\n initialSort: { column: null, direction: null },\n serverMode: isServerMode,\n totalItems: serverConfig?.totalItems,\n serverCurrentPage: serverConfig?.currentPage,\n serverCurrentPageSize: serverConfig?.currentPageSize,\n });\n\n // Auto-detect searchable column\n const defaultSearchColumn = searchableColumns\n ? searchableColumns[0]\n : (columns.find(c => c.key === \"nome\" || c.key === \"name\" || c.key === \"title\" || c.key === \"titulo\")?.key || columns[0]?.key);\n\n const {\n searchQuery,\n handleSearchChange,\n advancedFilters,\n setAdvancedFilters,\n filterDialogOpen,\n setFilterDialogOpen,\n activeFilterChips,\n handleApplyFilters,\n handleClearAllFilters,\n clearSearchAndFilters,\n } = useDataTableFilters<T>({\n initialFilters,\n filterFields,\n isServerMode,\n serverConfig,\n handlers,\n defaultSearchColumn,\n });\n\n // Handle sort - server-side aware\n const handleSort = useCallback(async (column: keyof T) => {\n if (isServerMode && serverConfig?.onSortChange) {\n // Calcular novo sortConfig\n const currentSort = state.sort;\n let newDirection: 'asc' | 'desc' | null = 'asc';\n\n if (currentSort.column === column) {\n newDirection = currentSort.direction === 'asc' ? 'desc' :\n currentSort.direction === 'desc' ? null : 'asc';\n }\n\n const newSortConfig: SortConfig<T> = {\n column: newDirection ? column : null,\n direction: newDirection\n };\n\n // Atualizar estado interno primeiro para mostrar indicador visual\n handlers.onSort(column);\n\n // Depois chamar callback do servidor\n await serverConfig.onSortChange(newSortConfig);\n } else {\n // Client-side: usar handler padrão\n handlers.onSort(column);\n }\n }, [isServerMode, serverConfig, state.sort, handlers]);\n\n // Handle page change - server-side aware\n const handlePageChange = useCallback(async (page: number) => {\n if (isServerMode && serverConfig?.onPageChange) {\n await serverConfig.onPageChange(page, state.pagination.pageSize);\n } else {\n // Client-side: usar handler padrão\n if (state.pagination.onPageChange) {\n state.pagination.onPageChange(page);\n }\n }\n }, [isServerMode, serverConfig, state.pagination]);\n\n // Handle page size change - server-side aware\n const handlePageSizeChange = useCallback(async (newSize: number) => {\n if (isServerMode && serverConfig?.onPageChange) {\n await serverConfig.onPageChange(1, newSize); // Reset para página 1\n } else {\n // Client-side: usar handler padrão\n if (state.pagination.onPageSizeChange) {\n state.pagination.onPageSizeChange(newSize);\n }\n }\n }, [isServerMode, serverConfig, state.pagination]);\n\n return (\n <div className={cn(\"space-y-4\", className)}>\n {/* Toolbar — only rendered when there is at least one visible element */}\n <DataTableToolbar\n enableSearch={enableSearch}\n searchPlaceholder={searchPlaceholder}\n searchQuery={searchQuery}\n onSearchChange={handleSearchChange}\n enableFilters={enableFilters}\n filterFields={filterFields}\n advancedFilters={advancedFilters}\n onAdvancedFiltersChange={setAdvancedFilters}\n filterDialogOpen={filterDialogOpen}\n onFilterDialogOpenChange={setFilterDialogOpen}\n onApplyFilters={handleApplyFilters}\n toolbarActions={toolbarActions}\n />\n\n {/* Active Filter Chips */}\n {advancedFilters.length > 0 && (\n <FilterBar\n activeFilters={activeFilterChips}\n onClearAll={handleClearAllFilters}\n />\n )}\n\n {/* Table */}\n <div className=\"rounded-md border overflow-x-auto\">\n <Table>\n <TableHeader>\n <TableRow>\n {columns.map((column) => (\n <TableHead\n key={String(column.key)}\n className={cn(\n column.headerClassName,\n column.sortable && \"cursor-pointer select-none hover:bg-muted/50 transition-colors\",\n column.sortable && getSortDirection(column.key) && \"text-primary\"\n )}\n style={{ width: column.width }}\n onClick={() => column.sortable && handleSort(column.key)}\n aria-sort={column.sortable ? (getSortDirection(column.key) === \"asc\" ? \"ascending\" : getSortDirection(column.key) === \"desc\" ? \"descending\" : \"none\") : undefined}\n >\n {column.header}\n {column.sortable && getSortDirection(column.key) && (\n <ArrowUpDown className=\"ml-2 h-4 w-4 inline\" />\n )}\n </TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {isLoading ? (\n // SKELETON ROWS - limitar a max 15 para performance\n Array.from({ length: Math.min(state.pagination.pageSize, 15) }).map((_, i) => (\n <TableRow key={`skeleton-${i}`}>\n {columns.map((col, j) => (\n <TableCell key={j} className={col.className}>\n <Skeleton className=\"h-4 w-full\" />\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : processedData.length > 0 ? (\n // DADOS NORMAIS\n processedData.map((row, rowIndex) => (\n <TableRow key={rowIndex}>\n {columns.map((column) => (\n <TableCell\n key={String(column.key)}\n className={cn(\n column.className,\n column.align ? `text-${column.align}` : \"text-left\",\n column.onCellClick && \"cursor-pointer hover:text-primary\"\n )}\n onClick={column.onCellClick\n ? () => column.onCellClick!(row[column.key], row, rowIndex)\n : undefined}\n >\n {column.render\n ? column.render(row[column.key], row, rowIndex)\n : (row[column.key] as React.ReactNode)}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n // EMPTY STATE\n <TableRow>\n <TableCell\n colSpan={columns.length}\n className=\"h-64\"\n >\n <DataTableEmptyState\n emptyState={emptyState}\n emptyMessage={emptyMessage}\n hasActiveFilters={advancedFilters.length > 0}\n hasSearch={searchQuery.trim().length > 0}\n onClearFilters={clearSearchAndFilters}\n />\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n\n {/* Pagination */}\n <TablePagination\n currentPage={state.pagination.currentPage}\n totalPages={Math.ceil(state.pagination.totalItems / state.pagination.pageSize)}\n pageSize={state.pagination.pageSize}\n totalItems={state.pagination.totalItems}\n onPageChange={handlePageChange}\n onPageSizeChange={handlePageSizeChange}\n pageSizeOptions={pageSizeOptions}\n />\n </div>\n );\n}\n"],"names":["DataTable","data","columns","searchPlaceholder","searchableColumns","enableSearch","filterFields","enableFilters","initialFilters","pageSizeOptions","initialPageSize","toolbarActions","serverConfig","isLoading","emptyState","emptyMessage","className","isServerMode","processedData","state","handlers","getSortDirection","useDataTable","defaultSearchColumn","_a","c","_b","searchQuery","handleSearchChange","advancedFilters","setAdvancedFilters","filterDialogOpen","setFilterDialogOpen","activeFilterChips","handleApplyFilters","handleClearAllFilters","clearSearchAndFilters","useDataTableFilters","handleSort","useCallback","column","currentSort","newDirection","newSortConfig","handlePageChange","page","handlePageSizeChange","newSize","cn","jsx","DataTableToolbar","FilterBar","Table","TableHeader","TableRow","jsxs","TableHead","ArrowUpDown","TableBody","_","i","col","j","TableCell","Skeleton","row","rowIndex","DataTableEmptyState","TablePagination"],"mappings":"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"}