@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,285 @@
1
+ "use client";
2
+ import { jsxs as l, jsx as e } from "react/jsx-runtime";
3
+ import * as N from "react";
4
+ import { ResponsiveContainer as z, PieChart as A, Pie as k, Label as D, Sector as L, Tooltip as M } from "recharts";
5
+ import { cn as b } from "../utils.js";
6
+ const y = [
7
+ "#3b82f6",
8
+ // blue-500
9
+ "#10b981",
10
+ // emerald-500
11
+ "#f59e0b",
12
+ // amber-500
13
+ "#ef4444",
14
+ // red-500
15
+ "#8b5cf6",
16
+ // violet-500
17
+ "#06b6d4",
18
+ // cyan-500
19
+ "#f97316",
20
+ // orange-500
21
+ "#14b8a6",
22
+ // teal-500
23
+ "#ec4899",
24
+ // pink-500
25
+ "#6366f1"
26
+ // indigo-500
27
+ ];
28
+ function C(n) {
29
+ return new Intl.NumberFormat("pt-BR", { style: "currency", currency: "BRL" }).format(n);
30
+ }
31
+ function R({ layout: n, chartSize: t }) {
32
+ const s = [1, 2, 3].map((i) => /* @__PURE__ */ l("div", { className: "flex items-center gap-2", children: [
33
+ /* @__PURE__ */ e("div", { className: "w-2.5 h-2.5 rounded-full bg-muted shrink-0" }),
34
+ /* @__PURE__ */ e("div", { className: "h-3 bg-muted rounded flex-1" })
35
+ ] }, i));
36
+ return n === "horizontal" ? /* @__PURE__ */ l("div", { className: "flex items-center gap-6 w-full animate-pulse", children: [
37
+ /* @__PURE__ */ e("div", { className: "rounded-full bg-muted shrink-0", style: { width: t, height: t } }),
38
+ /* @__PURE__ */ e("div", { className: "flex flex-col gap-2 flex-1", children: s })
39
+ ] }) : /* @__PURE__ */ l("div", { className: "flex flex-col items-center justify-center w-full animate-pulse gap-4", children: [
40
+ /* @__PURE__ */ e("div", { className: "rounded-full bg-muted", style: { width: 140, height: 140 } }),
41
+ /* @__PURE__ */ e("div", { className: "flex flex-col gap-2 w-full max-w-50", children: s })
42
+ ] });
43
+ }
44
+ function j() {
45
+ return /* @__PURE__ */ l("div", { className: "flex flex-col items-center justify-center w-full h-full text-muted-foreground gap-2", children: [
46
+ /* @__PURE__ */ e(
47
+ "div",
48
+ {
49
+ className: "rounded-full border-4 border-dashed border-muted",
50
+ style: { width: 100, height: 100 }
51
+ }
52
+ ),
53
+ /* @__PURE__ */ e("span", { className: "text-sm", children: "Sem dados para exibir" })
54
+ ] });
55
+ }
56
+ function F({
57
+ active: n,
58
+ payload: t,
59
+ formatValue: s,
60
+ total: i
61
+ }) {
62
+ if (!n || !(t != null && t.length)) return null;
63
+ const o = t[0], r = i > 0 ? (o.value / i * 100).toFixed(1) : "0.0";
64
+ return /* @__PURE__ */ l("div", { className: "bg-popover border border-border rounded shadow-lg p-2 text-xs min-w-35", children: [
65
+ /* @__PURE__ */ e("div", { className: "font-medium mb-1", children: o.name }),
66
+ /* @__PURE__ */ l("div", { className: "flex justify-between gap-4", children: [
67
+ /* @__PURE__ */ e("span", { className: "text-muted-foreground", children: "Valor" }),
68
+ /* @__PURE__ */ e("span", { className: "font-mono", children: s(o.value) })
69
+ ] }),
70
+ /* @__PURE__ */ l("div", { className: "flex justify-between gap-4", children: [
71
+ /* @__PURE__ */ e("span", { className: "text-muted-foreground", children: "%" }),
72
+ /* @__PURE__ */ l("span", { className: "font-mono", children: [
73
+ r,
74
+ "%"
75
+ ] })
76
+ ] })
77
+ ] });
78
+ }
79
+ function T({ viewBox: n, activeIndex: t, chartData: s, formatValue: i, total: o }) {
80
+ const r = (n == null ? void 0 : n.cx) ?? 0, c = (n == null ? void 0 : n.cy) ?? 0, d = t !== null && t >= 0 ? s[t] : null;
81
+ if (d) {
82
+ const a = o > 0 ? (d.value / o * 100).toFixed(1) : "0.0", f = 13, g = d.name.length > f ? d.name.substring(0, f - 1) + "…" : d.name;
83
+ return /* @__PURE__ */ l("g", { children: [
84
+ /* @__PURE__ */ e(
85
+ "text",
86
+ {
87
+ x: r,
88
+ y: c - 14,
89
+ textAnchor: "middle",
90
+ dominantBaseline: "middle",
91
+ style: { fontSize: 10, fill: "var(--muted-foreground)" },
92
+ children: g
93
+ }
94
+ ),
95
+ /* @__PURE__ */ e(
96
+ "text",
97
+ {
98
+ x: r,
99
+ y: c + 2,
100
+ textAnchor: "middle",
101
+ dominantBaseline: "middle",
102
+ style: { fontSize: 11, fontWeight: 700, fill: d.color },
103
+ children: i(d.value)
104
+ }
105
+ ),
106
+ /* @__PURE__ */ l(
107
+ "text",
108
+ {
109
+ x: r,
110
+ y: c + 18,
111
+ textAnchor: "middle",
112
+ dominantBaseline: "middle",
113
+ style: { fontSize: 11, fill: "var(--muted-foreground)" },
114
+ children: [
115
+ a,
116
+ "%"
117
+ ]
118
+ }
119
+ )
120
+ ] });
121
+ }
122
+ return /* @__PURE__ */ l("g", { children: [
123
+ /* @__PURE__ */ e(
124
+ "text",
125
+ {
126
+ x: r,
127
+ y: c - 8,
128
+ textAnchor: "middle",
129
+ dominantBaseline: "middle",
130
+ style: { fontSize: 10, fill: "var(--muted-foreground)" },
131
+ children: "Total"
132
+ }
133
+ ),
134
+ /* @__PURE__ */ e(
135
+ "text",
136
+ {
137
+ x: r,
138
+ y: c + 8,
139
+ textAnchor: "middle",
140
+ dominantBaseline: "middle",
141
+ style: { fontSize: 13, fontWeight: 700, fill: "currentColor" },
142
+ children: i(o)
143
+ }
144
+ )
145
+ ] });
146
+ }
147
+ function E({
148
+ chartData: n,
149
+ total: t,
150
+ formatValue: s,
151
+ activeIndex: i,
152
+ onHover: o
153
+ }) {
154
+ return /* @__PURE__ */ l("div", { className: "flex flex-col gap-1.5", children: [
155
+ n.map((r, c) => {
156
+ const d = t > 0 ? (r.value / t * 100).toFixed(1) : "0.0", a = i === c;
157
+ return /* @__PURE__ */ l(
158
+ "div",
159
+ {
160
+ className: "flex items-center gap-2 text-xs cursor-default rounded px-1 py-0.5 transition-opacity",
161
+ style: { opacity: i !== null && !a ? 0.4 : 1 },
162
+ onMouseEnter: () => o(c),
163
+ onMouseLeave: () => o(null),
164
+ children: [
165
+ /* @__PURE__ */ e(
166
+ "span",
167
+ {
168
+ className: "inline-block w-2.5 h-2.5 rounded-full shrink-0 transition-transform",
169
+ style: {
170
+ background: r.color,
171
+ transform: a ? "scale(1.3)" : "scale(1)"
172
+ }
173
+ }
174
+ ),
175
+ /* @__PURE__ */ e("span", { className: "flex-1 truncate text-muted-foreground", children: r.name }),
176
+ /* @__PURE__ */ e("span", { className: "font-mono text-foreground", children: s(r.value) }),
177
+ /* @__PURE__ */ l("span", { className: "text-muted-foreground w-10.5 text-right", children: [
178
+ d,
179
+ "%"
180
+ ] })
181
+ ]
182
+ },
183
+ c
184
+ );
185
+ }),
186
+ /* @__PURE__ */ l("div", { className: "flex items-center gap-2 text-xs border-t border-border pt-1.5 mt-0.5", children: [
187
+ /* @__PURE__ */ e("span", { className: "flex-1 font-medium", children: "Total" }),
188
+ /* @__PURE__ */ e("span", { className: "font-mono font-semibold", children: s(t) })
189
+ ] })
190
+ ] });
191
+ }
192
+ function W({
193
+ data: n,
194
+ title: t,
195
+ formatValue: s = C,
196
+ className: i,
197
+ isLoading: o = !1,
198
+ layout: r = "vertical",
199
+ activeLabel: c = !1,
200
+ chartSize: d
201
+ }) {
202
+ const [a, f] = N.useState(null), g = N.useMemo(() => n.reduce((m, u) => m + u.value, 0), [n]), p = N.useMemo(
203
+ () => n.map((m, u) => ({
204
+ name: m.label,
205
+ value: m.value,
206
+ color: m.color ?? y[u % y.length]
207
+ })),
208
+ [n]
209
+ ), h = r === "horizontal", x = d ?? (h ? 140 : 220), w = h ? Math.round(x * 0.34) : 55, S = h ? Math.round(x * 0.51) : 85;
210
+ return /* @__PURE__ */ l("div", { className: b("flex flex-col gap-4 w-full", i), children: [
211
+ t && /* @__PURE__ */ e("div", { className: "text-sm font-semibold text-foreground", children: t }),
212
+ o ? /* @__PURE__ */ e(R, { layout: r, chartSize: x }) : n.length === 0 ? /* @__PURE__ */ e(j, {}) : /* @__PURE__ */ l("div", { className: b(h ? "flex items-center gap-4" : "flex flex-col gap-4"), children: [
213
+ /* @__PURE__ */ e(
214
+ "div",
215
+ {
216
+ className: "shrink-0",
217
+ style: h ? { width: x, height: x } : { width: "100%", height: x },
218
+ children: /* @__PURE__ */ e(z, { width: "100%", height: "100%", children: /* @__PURE__ */ l(A, { children: [
219
+ /* @__PURE__ */ e(
220
+ k,
221
+ {
222
+ data: p,
223
+ cx: "50%",
224
+ cy: "50%",
225
+ innerRadius: w,
226
+ outerRadius: S,
227
+ paddingAngle: 2,
228
+ dataKey: "value",
229
+ nameKey: "name",
230
+ onMouseEnter: (m, u) => f(u),
231
+ onMouseLeave: () => f(null),
232
+ shape: (m, u) => {
233
+ var v;
234
+ return /* @__PURE__ */ e(
235
+ L,
236
+ {
237
+ ...m,
238
+ fill: (v = p[u]) == null ? void 0 : v.color,
239
+ stroke: "transparent",
240
+ opacity: a !== null && a !== u ? 0.4 : 1
241
+ }
242
+ );
243
+ },
244
+ children: c && /* @__PURE__ */ e(
245
+ D,
246
+ {
247
+ content: /* @__PURE__ */ e(
248
+ T,
249
+ {
250
+ activeIndex: a,
251
+ chartData: p,
252
+ formatValue: s,
253
+ total: g
254
+ }
255
+ )
256
+ }
257
+ )
258
+ }
259
+ ),
260
+ !c && /* @__PURE__ */ e(
261
+ M,
262
+ {
263
+ content: /* @__PURE__ */ e(F, { formatValue: s, total: g })
264
+ }
265
+ )
266
+ ] }) })
267
+ }
268
+ ),
269
+ /* @__PURE__ */ e("div", { className: b(h ? "flex-1 min-w-0" : ""), children: /* @__PURE__ */ e(
270
+ E,
271
+ {
272
+ chartData: p,
273
+ total: g,
274
+ formatValue: s,
275
+ activeIndex: a,
276
+ onHover: f
277
+ }
278
+ ) })
279
+ ] })
280
+ ] });
281
+ }
282
+ export {
283
+ W as DonutChart
284
+ };
285
+ //# sourceMappingURL=donut-chart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"donut-chart.js","sources":["../../../../src/components/ui/charts/donut-chart.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Label, Pie, PieChart, ResponsiveContainer, Sector, Tooltip } from \"recharts\";\nimport { cn } from \"../utils\";\n\n// ── Paleta padrão ─────────────────────────────────────────────────────────────\nconst DEFAULT_COLORS = [\n \"#3b82f6\", // blue-500\n \"#10b981\", // emerald-500\n \"#f59e0b\", // amber-500\n \"#ef4444\", // red-500\n \"#8b5cf6\", // violet-500\n \"#06b6d4\", // cyan-500\n \"#f97316\", // orange-500\n \"#14b8a6\", // teal-500\n \"#ec4899\", // pink-500\n \"#6366f1\", // indigo-500\n];\n\n// ── Tipos ─────────────────────────────────────────────────────────────────────\n\nexport interface DonutChartItem {\n label: string;\n value: number;\n color?: string;\n}\n\nexport interface DonutChartProps {\n data: DonutChartItem[];\n title?: string;\n formatValue?: (v: number) => string;\n className?: string;\n isLoading?: boolean;\n /**\n * Orientação da legenda em relação ao gráfico.\n * - \"vertical\": legenda abaixo do donut (padrão)\n * - \"horizontal\": legenda ao lado direito do donut\n */\n layout?: \"vertical\" | \"horizontal\";\n /**\n * Quando true, exibe o nome, valor e % da categoria no centro do\n * donut ao passar o mouse — desabilita o tooltip flutuante padrão.\n */\n activeLabel?: boolean;\n /**\n * Tamanho (px) do container do gráfico no eixo fixo.\n * - horizontal: largura e altura do donut (padrão: 140)\n * - vertical: altura do donut (padrão: 220)\n */\n chartSize?: number;\n}\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\nfunction defaultFormat(v: number): string {\n return new Intl.NumberFormat(\"pt-BR\", { style: \"currency\", currency: \"BRL\" }).format(v);\n}\n\n// ── Skeleton ──────────────────────────────────────────────────────────────────\n\nfunction DonutSkeleton({ layout, chartSize }: { layout: \"vertical\" | \"horizontal\"; chartSize: number }) {\n const legendItems = [1, 2, 3].map((i) => (\n <div key={i} className=\"flex items-center gap-2\">\n <div className=\"w-2.5 h-2.5 rounded-full bg-muted shrink-0\" />\n <div className=\"h-3 bg-muted rounded flex-1\" />\n </div>\n ));\n\n if (layout === \"horizontal\") {\n return (\n <div className=\"flex items-center gap-6 w-full animate-pulse\">\n <div className=\"rounded-full bg-muted shrink-0\" style={{ width: chartSize, height: chartSize }} />\n <div className=\"flex flex-col gap-2 flex-1\">{legendItems}</div>\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col items-center justify-center w-full animate-pulse gap-4\">\n <div className=\"rounded-full bg-muted\" style={{ width: 140, height: 140 }} />\n <div className=\"flex flex-col gap-2 w-full max-w-50\">{legendItems}</div>\n </div>\n );\n}\n\n// ── Empty state ───────────────────────────────────────────────────────────────\n\nfunction DonutEmpty() {\n return (\n <div className=\"flex flex-col items-center justify-center w-full h-full text-muted-foreground gap-2\">\n <div\n className=\"rounded-full border-4 border-dashed border-muted\"\n style={{ width: 100, height: 100 }}\n />\n <span className=\"text-sm\">Sem dados para exibir</span>\n </div>\n );\n}\n\n// ── Tooltip flutuante (usado quando activeLabel=false) ────────────────────────\n\nfunction CustomTooltip({\n active,\n payload,\n formatValue,\n total,\n}: {\n active?: boolean;\n payload?: any[];\n formatValue: (v: number) => string;\n total: number;\n}) {\n if (!active || !payload?.length) return null;\n const item = payload[0];\n const pct = total > 0 ? ((item.value / total) * 100).toFixed(1) : \"0.0\";\n return (\n <div className=\"bg-popover border border-border rounded shadow-lg p-2 text-xs min-w-35\">\n <div className=\"font-medium mb-1\">{item.name}</div>\n <div className=\"flex justify-between gap-4\">\n <span className=\"text-muted-foreground\">Valor</span>\n <span className=\"font-mono\">{formatValue(item.value)}</span>\n </div>\n <div className=\"flex justify-between gap-4\">\n <span className=\"text-muted-foreground\">%</span>\n <span className=\"font-mono\">{pct}%</span>\n </div>\n </div>\n );\n}\n\n// ── Label central (usado quando activeLabel=true) ─────────────────────────────\n\ninterface CenterLabelProps {\n viewBox?: { cx: number; cy: number; innerRadius?: number; outerRadius?: number };\n activeIndex: number | null;\n chartData: Array<{ name: string; value: number; color: string }>;\n formatValue: (v: number) => string;\n total: number;\n}\n\nfunction CenterLabel({ viewBox, activeIndex, chartData, formatValue, total }: CenterLabelProps) {\n const cx = viewBox?.cx ?? 0;\n const cy = viewBox?.cy ?? 0;\n\n const item = activeIndex !== null && activeIndex >= 0 ? chartData[activeIndex] : null;\n\n if (item) {\n const pct = total > 0 ? ((item.value / total) * 100).toFixed(1) : \"0.0\";\n const maxLen = 13;\n const name = item.name.length > maxLen ? item.name.substring(0, maxLen - 1) + \"…\" : item.name;\n return (\n <g>\n <text\n x={cx}\n y={cy - 14}\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n style={{ fontSize: 10, fill: \"var(--muted-foreground)\" }}\n >\n {name}\n </text>\n <text\n x={cx}\n y={cy + 2}\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n style={{ fontSize: 11, fontWeight: 700, fill: item.color }}\n >\n {formatValue(item.value)}\n </text>\n <text\n x={cx}\n y={cy + 18}\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n style={{ fontSize: 11, fill: \"var(--muted-foreground)\" }}\n >\n {pct}%\n </text>\n </g>\n );\n }\n\n return (\n <g>\n <text\n x={cx}\n y={cy - 8}\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n style={{ fontSize: 10, fill: \"var(--muted-foreground)\" }}\n >\n Total\n </text>\n <text\n x={cx}\n y={cy + 8}\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n style={{ fontSize: 13, fontWeight: 700, fill: \"currentColor\" }}\n >\n {formatValue(total)}\n </text>\n </g>\n );\n}\n\n// ── Legenda ───────────────────────────────────────────────────────────────────\n\nfunction DonutLegend({\n chartData,\n total,\n formatValue,\n activeIndex,\n onHover,\n}: {\n chartData: Array<{ name: string; value: number; color: string }>;\n total: number;\n formatValue: (v: number) => string;\n activeIndex: number | null;\n onHover: (index: number | null) => void;\n}) {\n return (\n <div className=\"flex flex-col gap-1.5\">\n {chartData.map((item, i) => {\n const pct = total > 0 ? ((item.value / total) * 100).toFixed(1) : \"0.0\";\n const isActive = activeIndex === i;\n const isDimmed = activeIndex !== null && !isActive;\n return (\n <div\n key={i}\n className=\"flex items-center gap-2 text-xs cursor-default rounded px-1 py-0.5 transition-opacity\"\n style={{ opacity: isDimmed ? 0.4 : 1 }}\n onMouseEnter={() => onHover(i)}\n onMouseLeave={() => onHover(null)}\n >\n <span\n className=\"inline-block w-2.5 h-2.5 rounded-full shrink-0 transition-transform\"\n style={{\n background: item.color,\n transform: isActive ? \"scale(1.3)\" : \"scale(1)\",\n }}\n />\n <span className=\"flex-1 truncate text-muted-foreground\">{item.name}</span>\n <span className=\"font-mono text-foreground\">{formatValue(item.value)}</span>\n <span className=\"text-muted-foreground w-10.5 text-right\">{pct}%</span>\n </div>\n );\n })}\n <div className=\"flex items-center gap-2 text-xs border-t border-border pt-1.5 mt-0.5\">\n <span className=\"flex-1 font-medium\">Total</span>\n <span className=\"font-mono font-semibold\">{formatValue(total)}</span>\n </div>\n </div>\n );\n}\n\n// ── Componente principal ──────────────────────────────────────────────────────\n\nexport function DonutChart({\n data,\n title,\n formatValue = defaultFormat,\n className,\n isLoading = false,\n layout = \"vertical\",\n activeLabel = false,\n chartSize: chartSizeProp,\n}: DonutChartProps) {\n const [activeIndex, setActiveIndex] = React.useState<number | null>(null);\n\n const total = React.useMemo(() => data.reduce((acc, d) => acc + d.value, 0), [data]);\n\n const chartData = React.useMemo(\n () =>\n data.map((item, i) => ({\n name: item.label,\n value: item.value,\n color: item.color ?? DEFAULT_COLORS[i % DEFAULT_COLORS.length],\n })),\n [data],\n );\n\n const isHorizontal = layout === \"horizontal\";\n const chartSize = chartSizeProp ?? (isHorizontal ? 140 : 220);\n const innerRadius = isHorizontal ? Math.round(chartSize * 0.34) : 55;\n const outerRadius = isHorizontal ? Math.round(chartSize * 0.51) : 85;\n\n return (\n <div className={cn(\"flex flex-col gap-4 w-full\", className)}>\n {title && <div className=\"text-sm font-semibold text-foreground\">{title}</div>}\n\n {isLoading ? (\n <DonutSkeleton layout={layout} chartSize={chartSize} />\n ) : data.length === 0 ? (\n <DonutEmpty />\n ) : (\n <div className={cn(isHorizontal ? \"flex items-center gap-4\" : \"flex flex-col gap-4\")}>\n {/* Gráfico */}\n <div\n className=\"shrink-0\"\n style={\n isHorizontal\n ? { width: chartSize, height: chartSize }\n : { width: \"100%\", height: chartSize }\n }\n >\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <PieChart>\n <Pie\n data={chartData}\n cx=\"50%\"\n cy=\"50%\"\n innerRadius={innerRadius}\n outerRadius={outerRadius}\n paddingAngle={2}\n dataKey=\"value\"\n nameKey=\"name\"\n onMouseEnter={(_, index) => setActiveIndex(index)}\n onMouseLeave={() => setActiveIndex(null)}\n shape={(props, index) => (\n <Sector\n {...props}\n fill={chartData[index]?.color}\n stroke=\"transparent\"\n opacity={activeIndex !== null && activeIndex !== index ? 0.4 : 1}\n />\n )}\n >\n {activeLabel && (\n <Label\n content={\n <CenterLabel\n activeIndex={activeIndex}\n chartData={chartData}\n formatValue={formatValue}\n total={total}\n />\n }\n />\n )}\n </Pie>\n {!activeLabel && (\n <Tooltip\n content={<CustomTooltip formatValue={formatValue} total={total} />}\n />\n )}\n </PieChart>\n </ResponsiveContainer>\n </div>\n\n {/* Legenda */}\n <div className={cn(isHorizontal ? \"flex-1 min-w-0\" : \"\")}>\n <DonutLegend\n chartData={chartData}\n total={total}\n formatValue={formatValue}\n activeIndex={activeIndex}\n onHover={setActiveIndex}\n />\n </div>\n </div>\n )}\n </div>\n );\n}\n"],"names":["DEFAULT_COLORS","defaultFormat","v","DonutSkeleton","layout","chartSize","legendItems","jsxs","jsx","DonutEmpty","CustomTooltip","active","payload","formatValue","total","item","pct","CenterLabel","viewBox","activeIndex","chartData","cx","cy","maxLen","name","DonutLegend","onHover","i","isActive","DonutChart","data","title","className","isLoading","activeLabel","chartSizeProp","setActiveIndex","React","acc","d","isHorizontal","innerRadius","outerRadius","cn","ResponsiveContainer","PieChart","Pie","_","index","props","Sector","_a","Label","Tooltip"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),f=require("react"),s=require("../layout/card.cjs"),h=require("../primitives/badge.cjs"),c=require("../primitives/skeleton.cjs"),l=require("lucide-react"),x=require("../utils.cjs");function g(t){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const r in t)if(r!=="default"){const a=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(n,r,a.get?a:{enumerable:!0,get:()=>t[r]})}}return n.default=t,Object.freeze(n)}const N=g(f),m=N.forwardRef(({title:t,primaryContent:n,secondaryContent:r,trendValue:a,trendLabel:u,icon:j=l.Activity,isLoading:p=!1,onClick:i,className:d},o)=>p?e.jsxs(s.Card,{ref:o,className:d,children:[e.jsx(s.CardHeader,{className:"pb-1",children:e.jsxs(s.CardTitle,{className:"text-sm flex items-center gap-2",children:[e.jsx(c.Skeleton,{className:"h-4 w-4 rounded"}),e.jsx(c.Skeleton,{className:"h-4 w-24"})]})}),e.jsxs(s.CardContent,{className:"space-y-1 pt-0",children:[e.jsx(c.Skeleton,{className:"h-8 w-32"}),e.jsx(c.Skeleton,{className:"h-3 w-full"})]})]}):e.jsxs(s.Card,{ref:o,onClick:i,className:x.cn(i&&"cursor-pointer hover:bg-accent/50 transition-colors",d),children:[e.jsx(s.CardHeader,{className:"pb-1",children:e.jsxs(s.CardTitle,{className:"text-sm flex items-center gap-2 text-muted-foreground",children:[e.jsx(j,{className:"h-4 w-4 text-muted-foreground"}),t]})}),e.jsxs(s.CardContent,{className:"space-y-1 pt-0",children:[e.jsxs("div",{className:"flex items-baseline flex-wrap gap-2",children:[e.jsx("span",{className:"text-2xl font-bold",children:n}),a!==void 0&&e.jsxs(h.Badge,{variant:"secondary",className:x.cn("px-1.5 py-0 h-auto text-xs",a>0?"text-green-600":"text-red-600"),children:[a>0?e.jsx(l.TrendingUp,{className:"h-3 w-3 mr-0.5 inline"}):e.jsx(l.TrendingDown,{className:"h-3 w-3 mr-0.5 inline"}),u]})]}),r&&e.jsx("p",{className:"text-xs text-muted-foreground",children:r})]})]}));m.displayName="KPICard";exports.KPICard=m;
2
+ //# sourceMappingURL=kpi-card.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kpi-card.cjs","sources":["../../../../src/components/ui/charts/kpi-card.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Card, CardContent, CardHeader, CardTitle } from \"../layout/card\";\nimport { Badge } from \"../primitives/badge\";\nimport { Skeleton } from \"../primitives/skeleton\";\nimport { TrendingUp, TrendingDown, Activity } from \"lucide-react\";\nimport { cn } from \"../utils\";\n\nexport interface KPICardProps {\n /**\n * Título do KPI (ex: \"Receita Mensal\")\n */\n title: string;\n\n /**\n * Valor principal em destaque (ex: \"R$ 127.361,23\")\n */\n primaryContent: string;\n\n /**\n * Texto secundário descritivo (ex: \"vs. mês anterior\")\n */\n secondaryContent?: string;\n\n /**\n * Valor de tendência para exibir badge com seta\n * Positivo = verde + seta para cima\n * Negativo = vermelho + seta para baixo\n */\n trendValue?: number;\n\n /**\n * Label customizado para tendência (default: \"+X%\" ou \"-X%\")\n */\n trendLabel?: string;\n\n /**\n * Ícone a ser exibido no header (componente Lucide React)\n */\n icon?: React.ComponentType<{ className?: string }>;\n\n /**\n * Estado de loading - exibe skeleton\n */\n isLoading?: boolean;\n\n /**\n * Handler de click - torna o card clicável com hover\n */\n onClick?: () => void;\n\n /**\n * Classes CSS adicionais\n */\n className?: string;\n}\n\nexport const KPICard = React.forwardRef<HTMLDivElement, KPICardProps>(\n (\n {\n title,\n primaryContent,\n secondaryContent,\n trendValue,\n trendLabel,\n icon: Icon = Activity,\n isLoading = false,\n onClick,\n className,\n },\n ref\n ) => {\n // Estado de loading\n if (isLoading) {\n return (\n <Card ref={ref} className={className}>\n <CardHeader className=\"pb-1\">\n <CardTitle className=\"text-sm flex items-center gap-2\">\n <Skeleton className=\"h-4 w-4 rounded\" />\n <Skeleton className=\"h-4 w-24\" />\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-1 pt-0\">\n <Skeleton className=\"h-8 w-32\" />\n <Skeleton className=\"h-3 w-full\" />\n </CardContent>\n </Card>\n );\n }\n\n // Renderização normal\n return (\n <Card\n ref={ref}\n onClick={onClick}\n className={cn(\n onClick && \"cursor-pointer hover:bg-accent/50 transition-colors\",\n className\n )}\n >\n <CardHeader className=\"pb-1\">\n <CardTitle className=\"text-sm flex items-center gap-2 text-muted-foreground\">\n <Icon className=\"h-4 w-4 text-muted-foreground\" />\n {title}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-1 pt-0\">\n <div className=\"flex items-baseline flex-wrap gap-2\">\n <span className=\"text-2xl font-bold\">{primaryContent}</span>\n {trendValue !== undefined && (\n <Badge\n variant=\"secondary\"\n className={cn(\n \"px-1.5 py-0 h-auto text-xs\",\n trendValue > 0 ? \"text-green-600\" : \"text-red-600\"\n )}\n >\n {trendValue > 0 ? (\n <TrendingUp className=\"h-3 w-3 mr-0.5 inline\" />\n ) : (\n <TrendingDown className=\"h-3 w-3 mr-0.5 inline\" />\n )}\n {trendLabel}\n </Badge>\n )}\n </div>\n {secondaryContent && (\n <p className=\"text-xs text-muted-foreground\">{secondaryContent}</p>\n )}\n </CardContent>\n </Card>\n );\n }\n);\n\nKPICard.displayName = \"KPICard\";\n"],"names":["KPICard","React","title","primaryContent","secondaryContent","trendValue","trendLabel","Icon","Activity","isLoading","onClick","className","ref","jsxs","Card","jsx","CardHeader","CardTitle","Skeleton","CardContent","cn","Badge","TrendingUp","TrendingDown"],"mappings":"glBA0DaA,EAAUC,EAAM,WAC3B,CACE,CACE,MAAAC,EACA,eAAAC,EACA,iBAAAC,EACA,WAAAC,EACA,WAAAC,EACA,KAAMC,EAAOC,EAAAA,SACb,UAAAC,EAAY,GACZ,QAAAC,EACA,UAAAC,CAAA,EAEFC,IAGIH,EAEAI,EAAAA,KAACC,EAAAA,KAAA,CAAK,IAAAF,EAAU,UAAAD,EACd,SAAA,CAAAI,EAAAA,IAACC,EAAAA,YAAW,UAAU,OACpB,SAAAH,EAAAA,KAACI,YAAA,CAAU,UAAU,kCACnB,SAAA,CAAAF,EAAAA,IAACG,EAAAA,SAAA,CAAS,UAAU,iBAAA,CAAkB,EACtCH,EAAAA,IAACG,EAAAA,SAAA,CAAS,UAAU,UAAA,CAAW,CAAA,CAAA,CACjC,CAAA,CACF,EACAL,EAAAA,KAACM,EAAAA,YAAA,CAAY,UAAU,iBACrB,SAAA,CAAAJ,EAAAA,IAACG,EAAAA,SAAA,CAAS,UAAU,UAAA,CAAW,EAC/BH,EAAAA,IAACG,EAAAA,SAAA,CAAS,UAAU,YAAA,CAAa,CAAA,CAAA,CACnC,CAAA,EACF,EAMFL,EAAAA,KAACC,EAAAA,KAAA,CACC,IAAAF,EACA,QAAAF,EACA,UAAWU,EAAAA,GACTV,GAAW,sDACXC,CAAA,EAGF,SAAA,CAAAI,EAAAA,IAACC,EAAAA,YAAW,UAAU,OACpB,SAAAH,EAAAA,KAACI,YAAA,CAAU,UAAU,wDACnB,SAAA,CAAAF,EAAAA,IAACR,EAAA,CAAK,UAAU,+BAAA,CAAgC,EAC/CL,CAAA,CAAA,CACH,CAAA,CACF,EACAW,EAAAA,KAACM,EAAAA,YAAA,CAAY,UAAU,iBACrB,SAAA,CAAAN,EAAAA,KAAC,MAAA,CAAI,UAAU,sCACb,SAAA,CAAAE,EAAAA,IAAC,OAAA,CAAK,UAAU,qBAAsB,SAAAZ,EAAe,EACpDE,IAAe,QACdQ,EAAAA,KAACQ,EAAAA,MAAA,CACC,QAAQ,YACR,UAAWD,EAAAA,GACT,6BACAf,EAAa,EAAI,iBAAmB,cAAA,EAGrC,SAAA,CAAAA,EAAa,QACXiB,EAAAA,WAAA,CAAW,UAAU,wBAAwB,EAE9CP,EAAAA,IAACQ,EAAAA,aAAA,CAAa,UAAU,uBAAA,CAAwB,EAEjDjB,CAAA,CAAA,CAAA,CACH,EAEJ,EACCF,GACCW,EAAAA,IAAC,IAAA,CAAE,UAAU,gCAAiC,SAAAX,CAAA,CAAiB,CAAA,CAAA,CAEnE,CAAA,CAAA,CAAA,CAIR,EAEAJ,EAAQ,YAAc"}
@@ -0,0 +1,71 @@
1
+ "use client";
2
+ import { jsxs as r, jsx as e } from "react/jsx-runtime";
3
+ import * as u from "react";
4
+ import { Card as i, CardHeader as n, CardTitle as o, CardContent as d } from "../layout/card.js";
5
+ import { Badge as w } from "../primitives/badge.js";
6
+ import { Skeleton as a } from "../primitives/skeleton.js";
7
+ import { Activity as b, TrendingUp as v, TrendingDown as y } from "lucide-react";
8
+ import { cn as p } from "../utils.js";
9
+ const C = u.forwardRef(
10
+ ({
11
+ title: h,
12
+ primaryContent: x,
13
+ secondaryContent: t,
14
+ trendValue: s,
15
+ trendLabel: f,
16
+ icon: N = b,
17
+ isLoading: g = !1,
18
+ onClick: l,
19
+ className: c
20
+ }, m) => g ? /* @__PURE__ */ r(i, { ref: m, className: c, children: [
21
+ /* @__PURE__ */ e(n, { className: "pb-1", children: /* @__PURE__ */ r(o, { className: "text-sm flex items-center gap-2", children: [
22
+ /* @__PURE__ */ e(a, { className: "h-4 w-4 rounded" }),
23
+ /* @__PURE__ */ e(a, { className: "h-4 w-24" })
24
+ ] }) }),
25
+ /* @__PURE__ */ r(d, { className: "space-y-1 pt-0", children: [
26
+ /* @__PURE__ */ e(a, { className: "h-8 w-32" }),
27
+ /* @__PURE__ */ e(a, { className: "h-3 w-full" })
28
+ ] })
29
+ ] }) : /* @__PURE__ */ r(
30
+ i,
31
+ {
32
+ ref: m,
33
+ onClick: l,
34
+ className: p(
35
+ l && "cursor-pointer hover:bg-accent/50 transition-colors",
36
+ c
37
+ ),
38
+ children: [
39
+ /* @__PURE__ */ e(n, { className: "pb-1", children: /* @__PURE__ */ r(o, { className: "text-sm flex items-center gap-2 text-muted-foreground", children: [
40
+ /* @__PURE__ */ e(N, { className: "h-4 w-4 text-muted-foreground" }),
41
+ h
42
+ ] }) }),
43
+ /* @__PURE__ */ r(d, { className: "space-y-1 pt-0", children: [
44
+ /* @__PURE__ */ r("div", { className: "flex items-baseline flex-wrap gap-2", children: [
45
+ /* @__PURE__ */ e("span", { className: "text-2xl font-bold", children: x }),
46
+ s !== void 0 && /* @__PURE__ */ r(
47
+ w,
48
+ {
49
+ variant: "secondary",
50
+ className: p(
51
+ "px-1.5 py-0 h-auto text-xs",
52
+ s > 0 ? "text-green-600" : "text-red-600"
53
+ ),
54
+ children: [
55
+ s > 0 ? /* @__PURE__ */ e(v, { className: "h-3 w-3 mr-0.5 inline" }) : /* @__PURE__ */ e(y, { className: "h-3 w-3 mr-0.5 inline" }),
56
+ f
57
+ ]
58
+ }
59
+ )
60
+ ] }),
61
+ t && /* @__PURE__ */ e("p", { className: "text-xs text-muted-foreground", children: t })
62
+ ] })
63
+ ]
64
+ }
65
+ )
66
+ );
67
+ C.displayName = "KPICard";
68
+ export {
69
+ C as KPICard
70
+ };
71
+ //# sourceMappingURL=kpi-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kpi-card.js","sources":["../../../../src/components/ui/charts/kpi-card.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Card, CardContent, CardHeader, CardTitle } from \"../layout/card\";\nimport { Badge } from \"../primitives/badge\";\nimport { Skeleton } from \"../primitives/skeleton\";\nimport { TrendingUp, TrendingDown, Activity } from \"lucide-react\";\nimport { cn } from \"../utils\";\n\nexport interface KPICardProps {\n /**\n * Título do KPI (ex: \"Receita Mensal\")\n */\n title: string;\n\n /**\n * Valor principal em destaque (ex: \"R$ 127.361,23\")\n */\n primaryContent: string;\n\n /**\n * Texto secundário descritivo (ex: \"vs. mês anterior\")\n */\n secondaryContent?: string;\n\n /**\n * Valor de tendência para exibir badge com seta\n * Positivo = verde + seta para cima\n * Negativo = vermelho + seta para baixo\n */\n trendValue?: number;\n\n /**\n * Label customizado para tendência (default: \"+X%\" ou \"-X%\")\n */\n trendLabel?: string;\n\n /**\n * Ícone a ser exibido no header (componente Lucide React)\n */\n icon?: React.ComponentType<{ className?: string }>;\n\n /**\n * Estado de loading - exibe skeleton\n */\n isLoading?: boolean;\n\n /**\n * Handler de click - torna o card clicável com hover\n */\n onClick?: () => void;\n\n /**\n * Classes CSS adicionais\n */\n className?: string;\n}\n\nexport const KPICard = React.forwardRef<HTMLDivElement, KPICardProps>(\n (\n {\n title,\n primaryContent,\n secondaryContent,\n trendValue,\n trendLabel,\n icon: Icon = Activity,\n isLoading = false,\n onClick,\n className,\n },\n ref\n ) => {\n // Estado de loading\n if (isLoading) {\n return (\n <Card ref={ref} className={className}>\n <CardHeader className=\"pb-1\">\n <CardTitle className=\"text-sm flex items-center gap-2\">\n <Skeleton className=\"h-4 w-4 rounded\" />\n <Skeleton className=\"h-4 w-24\" />\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-1 pt-0\">\n <Skeleton className=\"h-8 w-32\" />\n <Skeleton className=\"h-3 w-full\" />\n </CardContent>\n </Card>\n );\n }\n\n // Renderização normal\n return (\n <Card\n ref={ref}\n onClick={onClick}\n className={cn(\n onClick && \"cursor-pointer hover:bg-accent/50 transition-colors\",\n className\n )}\n >\n <CardHeader className=\"pb-1\">\n <CardTitle className=\"text-sm flex items-center gap-2 text-muted-foreground\">\n <Icon className=\"h-4 w-4 text-muted-foreground\" />\n {title}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-1 pt-0\">\n <div className=\"flex items-baseline flex-wrap gap-2\">\n <span className=\"text-2xl font-bold\">{primaryContent}</span>\n {trendValue !== undefined && (\n <Badge\n variant=\"secondary\"\n className={cn(\n \"px-1.5 py-0 h-auto text-xs\",\n trendValue > 0 ? \"text-green-600\" : \"text-red-600\"\n )}\n >\n {trendValue > 0 ? (\n <TrendingUp className=\"h-3 w-3 mr-0.5 inline\" />\n ) : (\n <TrendingDown className=\"h-3 w-3 mr-0.5 inline\" />\n )}\n {trendLabel}\n </Badge>\n )}\n </div>\n {secondaryContent && (\n <p className=\"text-xs text-muted-foreground\">{secondaryContent}</p>\n )}\n </CardContent>\n </Card>\n );\n }\n);\n\nKPICard.displayName = \"KPICard\";\n"],"names":["KPICard","React","title","primaryContent","secondaryContent","trendValue","trendLabel","Icon","Activity","isLoading","onClick","className","ref","jsxs","Card","jsx","CardHeader","CardTitle","Skeleton","CardContent","cn","Badge","TrendingUp","TrendingDown"],"mappings":";;;;;;;;AA0DO,MAAMA,IAAUC,EAAM;AAAA,EAC3B,CACE;AAAA,IACE,OAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,YAAAC;AAAA,IACA,YAAAC;AAAA,IACA,MAAMC,IAAOC;AAAA,IACb,WAAAC,IAAY;AAAA,IACZ,SAAAC;AAAA,IACA,WAAAC;AAAA,EAAA,GAEFC,MAGIH,IAEA,gBAAAI,EAACC,GAAA,EAAK,KAAAF,GAAU,WAAAD,GACd,UAAA;AAAA,IAAA,gBAAAI,EAACC,KAAW,WAAU,QACpB,UAAA,gBAAAH,EAACI,GAAA,EAAU,WAAU,mCACnB,UAAA;AAAA,MAAA,gBAAAF,EAACG,GAAA,EAAS,WAAU,kBAAA,CAAkB;AAAA,MACtC,gBAAAH,EAACG,GAAA,EAAS,WAAU,WAAA,CAAW;AAAA,IAAA,EAAA,CACjC,EAAA,CACF;AAAA,IACA,gBAAAL,EAACM,GAAA,EAAY,WAAU,kBACrB,UAAA;AAAA,MAAA,gBAAAJ,EAACG,GAAA,EAAS,WAAU,WAAA,CAAW;AAAA,MAC/B,gBAAAH,EAACG,GAAA,EAAS,WAAU,aAAA,CAAa;AAAA,IAAA,EAAA,CACnC;AAAA,EAAA,GACF,IAMF,gBAAAL;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,KAAAF;AAAA,MACA,SAAAF;AAAA,MACA,WAAWU;AAAA,QACTV,KAAW;AAAA,QACXC;AAAA,MAAA;AAAA,MAGF,UAAA;AAAA,QAAA,gBAAAI,EAACC,KAAW,WAAU,QACpB,UAAA,gBAAAH,EAACI,GAAA,EAAU,WAAU,yDACnB,UAAA;AAAA,UAAA,gBAAAF,EAACR,GAAA,EAAK,WAAU,gCAAA,CAAgC;AAAA,UAC/CL;AAAA,QAAA,EAAA,CACH,EAAA,CACF;AAAA,QACA,gBAAAW,EAACM,GAAA,EAAY,WAAU,kBACrB,UAAA;AAAA,UAAA,gBAAAN,EAAC,OAAA,EAAI,WAAU,uCACb,UAAA;AAAA,YAAA,gBAAAE,EAAC,QAAA,EAAK,WAAU,sBAAsB,UAAAZ,GAAe;AAAA,YACpDE,MAAe,UACd,gBAAAQ;AAAA,cAACQ;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,WAAWD;AAAA,kBACT;AAAA,kBACAf,IAAa,IAAI,mBAAmB;AAAA,gBAAA;AAAA,gBAGrC,UAAA;AAAA,kBAAAA,IAAa,sBACXiB,GAAA,EAAW,WAAU,yBAAwB,IAE9C,gBAAAP,EAACQ,GAAA,EAAa,WAAU,wBAAA,CAAwB;AAAA,kBAEjDjB;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UACH,GAEJ;AAAA,UACCF,KACC,gBAAAW,EAAC,KAAA,EAAE,WAAU,iCAAiC,UAAAX,EAAA,CAAiB;AAAA,QAAA,EAAA,CAEnE;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;AAEAJ,EAAQ,cAAc;"}
@@ -0,0 +1,2 @@
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),y=require("react"),O=require("../layout/card.cjs"),q=require("./data-table.cjs"),A=require("../utils.cjs");function R(n){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(n){for(const e in n)if(e!=="default"){const t=Object.getOwnPropertyDescriptor(n,e);Object.defineProperty(r,e,t.get?t:{enumerable:!0,get:()=>n[e]})}}return r.default=n,Object.freeze(r)}const S=R(y);function P({data:n,columns:r,title:e,description:t,searchPlaceholder:o="Buscar...",searchableColumns:m,filterFields:s=[],initialFilters:b,enableSearch:i=!0,enableFilters:f=s.length>0,pageSizeOptions:x=[5,10,20,50],initialPageSize:j=10,showCard:g=!0,cardPadding:h="p-6",toolbarActions:v,isLoading:N=!1,emptyState:T,emptyMessage:D,className:c,serverConfig:p},l){const d=a.jsx(q.DataTable,{data:n,columns:r,searchPlaceholder:o,searchableColumns:m,enableSearch:i,enableFilters:f,filterFields:s,initialFilters:b,initialPageSize:j,pageSizeOptions:x,toolbarActions:v,serverConfig:p,isLoading:N,emptyState:T,emptyMessage:D});return g?a.jsxs(O.Card,{ref:l,className:A.cn(h,c),children:[(e||t)&&a.jsxs("div",{className:"mb-6",children:[e&&a.jsx("h2",{className:"text-lg font-semibold",children:e}),t&&a.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:t})]}),d]}):a.jsxs("div",{ref:l,className:c,children:[(e||t)&&a.jsxs("div",{className:"mb-6",children:[e&&a.jsx("h2",{className:"text-lg font-semibold",children:e}),t&&a.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:t})]}),d]})}const u=S.forwardRef(P);u.displayName="AdvancedDataTable";exports.AdvancedDataTable=u;
2
+ //# sourceMappingURL=advanced-data-table.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advanced-data-table.cjs","sources":["../../../../src/components/ui/data/advanced-data-table.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Card } from \"../layout/card\";\nimport { DataTable } from \"./data-table\";\nimport { ColumnDef, ServerSideConfig, EmptyStateConfig } from \"./table-types\";\nimport { FilterField, FilterCondition } from \"./filter-builder\";\nimport { cn } from \"../utils\";\n\nexport interface AdvancedDataTableProps<T extends object> {\n /**\n * Dados a serem exibidos na tabela\n */\n data: T[];\n\n /**\n * Definições de colunas (header, render, sortable, etc.)\n */\n columns: ColumnDef<T>[];\n\n /**\n * Título opcional para exibir acima da tabela\n */\n title?: string;\n\n /**\n * Descrição opcional abaixo do título\n */\n description?: string;\n\n /**\n * Placeholder para o campo de busca\n * @default \"Buscar...\"\n */\n searchPlaceholder?: string;\n\n /**\n * Colunas que serão pesquisadas pela busca global\n * @default Auto-detecta primeira coluna com key 'nome', 'name', 'title' ou primeira coluna\n */\n searchableColumns?: (keyof T)[];\n\n /**\n * Campos disponíveis para filtros avançados\n */\n filterFields?: FilterField[];\n\n /**\n * Filtros iniciais/externos a serem aplicados\n */\n initialFilters?: FilterCondition[];\n\n /**\n * Habilitar busca global\n * @default true\n */\n enableSearch?: boolean;\n\n /**\n * Habilitar filtros avançados\n * @default true (se filterFields fornecido)\n */\n enableFilters?: boolean;\n\n /**\n * Opções de tamanho de página\n * @default [5, 10, 20, 50]\n */\n pageSizeOptions?: number[];\n\n /**\n * Tamanho inicial da página\n * @default 10\n */\n initialPageSize?: number;\n\n /**\n * Exibir em Card wrapper\n * @default true\n */\n showCard?: boolean;\n\n /**\n * Padding do Card\n * @default \"p-6\"\n */\n cardPadding?: string;\n\n /**\n * Ações customizadas na toolbar (botões, dropdowns, etc.)\n * Passe qualquer React.ReactNode (botões, dropdowns, menus, etc.)\n */\n toolbarActions?: React.ReactNode;\n\n /**\n * Estado de loading (exibe skeleton/spinner)\n */\n isLoading?: boolean;\n\n /**\n * Configuração do empty state\n * Suporta tanto EmptyStateConfig completo quanto string simples (retrocompatibilidade)\n */\n emptyState?: EmptyStateConfig | string;\n\n /**\n * @deprecated Use emptyState ao invés de emptyMessage\n */\n emptyMessage?: string;\n\n /**\n * Classes CSS adicionais\n */\n className?: string;\n\n /**\n * Configuração para modo server-side\n * Se fornecido, o componente delega filtros/paginação/ordenação para callbacks\n */\n serverConfig?: ServerSideConfig<T>;\n}\n\nfunction AdvancedDataTableInner<T extends object>(\n {\n data,\n columns,\n title,\n description,\n searchPlaceholder = \"Buscar...\",\n searchableColumns,\n filterFields = [],\n initialFilters,\n enableSearch = true,\n enableFilters = filterFields.length > 0,\n pageSizeOptions = [5, 10, 20, 50],\n initialPageSize = 10,\n showCard = true,\n cardPadding = \"p-6\",\n toolbarActions,\n isLoading = false,\n emptyState,\n emptyMessage, // deprecated\n className,\n serverConfig,\n }: AdvancedDataTableProps<T>,\n ref: React.Ref<HTMLDivElement>\n) {\n // Sempre renderizar DataTable - skeleton e empty state são gerenciados internamente\n const tableContent = (\n <DataTable\n data={data}\n columns={columns}\n searchPlaceholder={searchPlaceholder}\n searchableColumns={searchableColumns}\n enableSearch={enableSearch}\n enableFilters={enableFilters}\n filterFields={filterFields}\n initialFilters={initialFilters}\n initialPageSize={initialPageSize}\n pageSizeOptions={pageSizeOptions}\n toolbarActions={toolbarActions}\n serverConfig={serverConfig}\n isLoading={isLoading}\n emptyState={emptyState}\n emptyMessage={emptyMessage}\n />\n );\n\n // Wrapper condicional (Card ou div)\n if (showCard) {\n return (\n <Card ref={ref} className={cn(cardPadding, className)}>\n {(title || description) && (\n <div className=\"mb-6\">\n {title && <h2 className=\"text-lg font-semibold\">{title}</h2>}\n {description && (\n <p className=\"text-sm text-muted-foreground mt-1\">\n {description}\n </p>\n )}\n </div>\n )}\n {tableContent}\n </Card>\n );\n }\n\n return (\n <div ref={ref} className={className}>\n {(title || description) && (\n <div className=\"mb-6\">\n {title && <h2 className=\"text-lg font-semibold\">{title}</h2>}\n {description && (\n <p className=\"text-sm text-muted-foreground mt-1\">{description}</p>\n )}\n </div>\n )}\n {tableContent}\n </div>\n );\n}\n\nexport const AdvancedDataTable = React.forwardRef(AdvancedDataTableInner) as (<T extends object>(\n props: AdvancedDataTableProps<T> & { ref?: React.Ref<HTMLDivElement> }\n) => React.ReactElement) & { displayName?: string };\n\nAdvancedDataTable.displayName = \"AdvancedDataTable\";\n"],"names":["AdvancedDataTableInner","data","columns","title","description","searchPlaceholder","searchableColumns","filterFields","initialFilters","enableSearch","enableFilters","pageSizeOptions","initialPageSize","showCard","cardPadding","toolbarActions","isLoading","emptyState","emptyMessage","className","serverConfig","ref","tableContent","jsx","DataTable","Card","cn","jsxs","AdvancedDataTable","React"],"mappings":"ugBA0HA,SAASA,EACP,CACE,KAAAC,EACA,QAAAC,EACA,MAAAC,EACA,YAAAC,EACA,kBAAAC,EAAoB,YACpB,kBAAAC,EACA,aAAAC,EAAe,CAAA,EACf,eAAAC,EACA,aAAAC,EAAe,GACf,cAAAC,EAAgBH,EAAa,OAAS,EACtC,gBAAAI,EAAkB,CAAC,EAAG,GAAI,GAAI,EAAE,EAChC,gBAAAC,EAAkB,GAClB,SAAAC,EAAW,GACX,YAAAC,EAAc,MACd,eAAAC,EACA,UAAAC,EAAY,GACZ,WAAAC,EACA,aAAAC,EACA,UAAAC,EACA,aAAAC,CACF,EACAC,EACA,CAEE,MAAMC,EACJC,EAAAA,IAACC,EAAAA,UAAA,CACC,KAAAvB,EACA,QAAAC,EACA,kBAAAG,EACA,kBAAAC,EACA,aAAAG,EACA,cAAAC,EACA,aAAAH,EACA,eAAAC,EACA,gBAAAI,EACA,gBAAAD,EACA,eAAAI,EACA,aAAAK,EACA,UAAAJ,EACA,WAAAC,EACA,aAAAC,CAAA,CAAA,EAKJ,OAAIL,SAECY,OAAA,CAAK,IAAAJ,EAAU,UAAWK,EAAAA,GAAGZ,EAAaK,CAAS,EAChD,SAAA,EAAAhB,GAASC,IACTuB,EAAAA,KAAC,MAAA,CAAI,UAAU,OACZ,SAAA,CAAAxB,GAASoB,EAAAA,IAAC,KAAA,CAAG,UAAU,wBAAyB,SAAApB,EAAM,EACtDC,GACCmB,EAAAA,IAAC,IAAA,CAAE,UAAU,qCACV,SAAAnB,CAAA,CACH,CAAA,EAEJ,EAEDkB,CAAA,EACH,EAKFK,EAAAA,KAAC,MAAA,CAAI,IAAAN,EAAU,UAAAF,EACX,SAAA,EAAAhB,GAASC,IACTuB,EAAAA,KAAC,MAAA,CAAI,UAAU,OACZ,SAAA,CAAAxB,GAASoB,EAAAA,IAAC,KAAA,CAAG,UAAU,wBAAyB,SAAApB,EAAM,EACtDC,GACCmB,EAAAA,IAAC,IAAA,CAAE,UAAU,qCAAsC,SAAAnB,CAAA,CAAY,CAAA,EAEnE,EAEDkB,CAAA,EACH,CAEN,CAEO,MAAMM,EAAoBC,EAAM,WAAW7B,CAAsB,EAIxE4B,EAAkB,YAAc"}
@@ -0,0 +1,69 @@
1
+ "use client";
2
+ import { jsxs as r, jsx as m } from "react/jsx-runtime";
3
+ import * as j from "react";
4
+ import { Card as C } from "../layout/card.js";
5
+ import { DataTable as R } from "./data-table.js";
6
+ import { cn as w } from "../utils.js";
7
+ function y({
8
+ data: s,
9
+ columns: c,
10
+ title: a,
11
+ description: e,
12
+ searchPlaceholder: o = "Buscar...",
13
+ searchableColumns: f,
14
+ filterFields: t = [],
15
+ initialFilters: h,
16
+ enableSearch: u = !0,
17
+ enableFilters: b = t.length > 0,
18
+ pageSizeOptions: x = [5, 10, 20, 50],
19
+ initialPageSize: N = 10,
20
+ showCard: v = !0,
21
+ cardPadding: g = "p-6",
22
+ toolbarActions: i,
23
+ isLoading: p = !1,
24
+ emptyState: D,
25
+ emptyMessage: T,
26
+ // deprecated
27
+ className: n,
28
+ serverConfig: A
29
+ }, d) {
30
+ const l = /* @__PURE__ */ m(
31
+ R,
32
+ {
33
+ data: s,
34
+ columns: c,
35
+ searchPlaceholder: o,
36
+ searchableColumns: f,
37
+ enableSearch: u,
38
+ enableFilters: b,
39
+ filterFields: t,
40
+ initialFilters: h,
41
+ initialPageSize: N,
42
+ pageSizeOptions: x,
43
+ toolbarActions: i,
44
+ serverConfig: A,
45
+ isLoading: p,
46
+ emptyState: D,
47
+ emptyMessage: T
48
+ }
49
+ );
50
+ return v ? /* @__PURE__ */ r(C, { ref: d, className: w(g, n), children: [
51
+ (a || e) && /* @__PURE__ */ r("div", { className: "mb-6", children: [
52
+ a && /* @__PURE__ */ m("h2", { className: "text-lg font-semibold", children: a }),
53
+ e && /* @__PURE__ */ m("p", { className: "text-sm text-muted-foreground mt-1", children: e })
54
+ ] }),
55
+ l
56
+ ] }) : /* @__PURE__ */ r("div", { ref: d, className: n, children: [
57
+ (a || e) && /* @__PURE__ */ r("div", { className: "mb-6", children: [
58
+ a && /* @__PURE__ */ m("h2", { className: "text-lg font-semibold", children: a }),
59
+ e && /* @__PURE__ */ m("p", { className: "text-sm text-muted-foreground mt-1", children: e })
60
+ ] }),
61
+ l
62
+ ] });
63
+ }
64
+ const B = j.forwardRef(y);
65
+ B.displayName = "AdvancedDataTable";
66
+ export {
67
+ B as AdvancedDataTable
68
+ };
69
+ //# sourceMappingURL=advanced-data-table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advanced-data-table.js","sources":["../../../../src/components/ui/data/advanced-data-table.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Card } from \"../layout/card\";\nimport { DataTable } from \"./data-table\";\nimport { ColumnDef, ServerSideConfig, EmptyStateConfig } from \"./table-types\";\nimport { FilterField, FilterCondition } from \"./filter-builder\";\nimport { cn } from \"../utils\";\n\nexport interface AdvancedDataTableProps<T extends object> {\n /**\n * Dados a serem exibidos na tabela\n */\n data: T[];\n\n /**\n * Definições de colunas (header, render, sortable, etc.)\n */\n columns: ColumnDef<T>[];\n\n /**\n * Título opcional para exibir acima da tabela\n */\n title?: string;\n\n /**\n * Descrição opcional abaixo do título\n */\n description?: string;\n\n /**\n * Placeholder para o campo de busca\n * @default \"Buscar...\"\n */\n searchPlaceholder?: string;\n\n /**\n * Colunas que serão pesquisadas pela busca global\n * @default Auto-detecta primeira coluna com key 'nome', 'name', 'title' ou primeira coluna\n */\n searchableColumns?: (keyof T)[];\n\n /**\n * Campos disponíveis para filtros avançados\n */\n filterFields?: FilterField[];\n\n /**\n * Filtros iniciais/externos a serem aplicados\n */\n initialFilters?: FilterCondition[];\n\n /**\n * Habilitar busca global\n * @default true\n */\n enableSearch?: boolean;\n\n /**\n * Habilitar filtros avançados\n * @default true (se filterFields fornecido)\n */\n enableFilters?: boolean;\n\n /**\n * Opções de tamanho de página\n * @default [5, 10, 20, 50]\n */\n pageSizeOptions?: number[];\n\n /**\n * Tamanho inicial da página\n * @default 10\n */\n initialPageSize?: number;\n\n /**\n * Exibir em Card wrapper\n * @default true\n */\n showCard?: boolean;\n\n /**\n * Padding do Card\n * @default \"p-6\"\n */\n cardPadding?: string;\n\n /**\n * Ações customizadas na toolbar (botões, dropdowns, etc.)\n * Passe qualquer React.ReactNode (botões, dropdowns, menus, etc.)\n */\n toolbarActions?: React.ReactNode;\n\n /**\n * Estado de loading (exibe skeleton/spinner)\n */\n isLoading?: boolean;\n\n /**\n * Configuração do empty state\n * Suporta tanto EmptyStateConfig completo quanto string simples (retrocompatibilidade)\n */\n emptyState?: EmptyStateConfig | string;\n\n /**\n * @deprecated Use emptyState ao invés de emptyMessage\n */\n emptyMessage?: string;\n\n /**\n * Classes CSS adicionais\n */\n className?: string;\n\n /**\n * Configuração para modo server-side\n * Se fornecido, o componente delega filtros/paginação/ordenação para callbacks\n */\n serverConfig?: ServerSideConfig<T>;\n}\n\nfunction AdvancedDataTableInner<T extends object>(\n {\n data,\n columns,\n title,\n description,\n searchPlaceholder = \"Buscar...\",\n searchableColumns,\n filterFields = [],\n initialFilters,\n enableSearch = true,\n enableFilters = filterFields.length > 0,\n pageSizeOptions = [5, 10, 20, 50],\n initialPageSize = 10,\n showCard = true,\n cardPadding = \"p-6\",\n toolbarActions,\n isLoading = false,\n emptyState,\n emptyMessage, // deprecated\n className,\n serverConfig,\n }: AdvancedDataTableProps<T>,\n ref: React.Ref<HTMLDivElement>\n) {\n // Sempre renderizar DataTable - skeleton e empty state são gerenciados internamente\n const tableContent = (\n <DataTable\n data={data}\n columns={columns}\n searchPlaceholder={searchPlaceholder}\n searchableColumns={searchableColumns}\n enableSearch={enableSearch}\n enableFilters={enableFilters}\n filterFields={filterFields}\n initialFilters={initialFilters}\n initialPageSize={initialPageSize}\n pageSizeOptions={pageSizeOptions}\n toolbarActions={toolbarActions}\n serverConfig={serverConfig}\n isLoading={isLoading}\n emptyState={emptyState}\n emptyMessage={emptyMessage}\n />\n );\n\n // Wrapper condicional (Card ou div)\n if (showCard) {\n return (\n <Card ref={ref} className={cn(cardPadding, className)}>\n {(title || description) && (\n <div className=\"mb-6\">\n {title && <h2 className=\"text-lg font-semibold\">{title}</h2>}\n {description && (\n <p className=\"text-sm text-muted-foreground mt-1\">\n {description}\n </p>\n )}\n </div>\n )}\n {tableContent}\n </Card>\n );\n }\n\n return (\n <div ref={ref} className={className}>\n {(title || description) && (\n <div className=\"mb-6\">\n {title && <h2 className=\"text-lg font-semibold\">{title}</h2>}\n {description && (\n <p className=\"text-sm text-muted-foreground mt-1\">{description}</p>\n )}\n </div>\n )}\n {tableContent}\n </div>\n );\n}\n\nexport const AdvancedDataTable = React.forwardRef(AdvancedDataTableInner) as (<T extends object>(\n props: AdvancedDataTableProps<T> & { ref?: React.Ref<HTMLDivElement> }\n) => React.ReactElement) & { displayName?: string };\n\nAdvancedDataTable.displayName = \"AdvancedDataTable\";\n"],"names":["AdvancedDataTableInner","data","columns","title","description","searchPlaceholder","searchableColumns","filterFields","initialFilters","enableSearch","enableFilters","pageSizeOptions","initialPageSize","showCard","cardPadding","toolbarActions","isLoading","emptyState","emptyMessage","className","serverConfig","ref","tableContent","jsx","DataTable","Card","cn","jsxs","AdvancedDataTable","React"],"mappings":";;;;;;AA0HA,SAASA,EACP;AAAA,EACE,MAAAC;AAAA,EACA,SAAAC;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,mBAAAC,IAAoB;AAAA,EACpB,mBAAAC;AAAA,EACA,cAAAC,IAAe,CAAA;AAAA,EACf,gBAAAC;AAAA,EACA,cAAAC,IAAe;AAAA,EACf,eAAAC,IAAgBH,EAAa,SAAS;AAAA,EACtC,iBAAAI,IAAkB,CAAC,GAAG,IAAI,IAAI,EAAE;AAAA,EAChC,iBAAAC,IAAkB;AAAA,EAClB,UAAAC,IAAW;AAAA,EACX,aAAAC,IAAc;AAAA,EACd,gBAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,YAAAC;AAAA,EACA,cAAAC;AAAA;AAAA,EACA,WAAAC;AAAA,EACA,cAAAC;AACF,GACAC,GACA;AAEE,QAAMC,IACJ,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAAvB;AAAA,MACA,SAAAC;AAAA,MACA,mBAAAG;AAAA,MACA,mBAAAC;AAAA,MACA,cAAAG;AAAA,MACA,eAAAC;AAAA,MACA,cAAAH;AAAA,MACA,gBAAAC;AAAA,MACA,iBAAAI;AAAA,MACA,iBAAAD;AAAA,MACA,gBAAAI;AAAA,MACA,cAAAK;AAAA,MACA,WAAAJ;AAAA,MACA,YAAAC;AAAA,MACA,cAAAC;AAAA,IAAA;AAAA,EAAA;AAKJ,SAAIL,sBAECY,GAAA,EAAK,KAAAJ,GAAU,WAAWK,EAAGZ,GAAaK,CAAS,GAChD,UAAA;AAAA,KAAAhB,KAASC,MACT,gBAAAuB,EAAC,OAAA,EAAI,WAAU,QACZ,UAAA;AAAA,MAAAxB,KAAS,gBAAAoB,EAAC,MAAA,EAAG,WAAU,yBAAyB,UAAApB,GAAM;AAAA,MACtDC,KACC,gBAAAmB,EAAC,KAAA,EAAE,WAAU,sCACV,UAAAnB,EAAA,CACH;AAAA,IAAA,GAEJ;AAAA,IAEDkB;AAAA,EAAA,GACH,IAKF,gBAAAK,EAAC,OAAA,EAAI,KAAAN,GAAU,WAAAF,GACX,UAAA;AAAA,KAAAhB,KAASC,MACT,gBAAAuB,EAAC,OAAA,EAAI,WAAU,QACZ,UAAA;AAAA,MAAAxB,KAAS,gBAAAoB,EAAC,MAAA,EAAG,WAAU,yBAAyB,UAAApB,GAAM;AAAA,MACtDC,KACC,gBAAAmB,EAAC,KAAA,EAAE,WAAU,sCAAsC,UAAAnB,EAAA,CAAY;AAAA,IAAA,GAEnE;AAAA,IAEDkB;AAAA,EAAA,GACH;AAEN;AAEO,MAAMM,IAAoBC,EAAM,WAAW7B,CAAsB;AAIxE4B,EAAkB,cAAc;"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),E=require("react"),I=require("date-fns"),z=require("date-fns/locale"),u=require("../utils.cjs"),N=require("../primitives/avatar.cjs"),c=require("../primitives/button.cjs"),T=require("../primitives/badge.cjs"),g=require("../overlays/tooltip.cjs"),S=require("../primitives/separator.cjs"),n=require("lucide-react"),w=require("@tiptap/react"),M=require("@tiptap/starter-kit"),O=require("@tiptap/extension-underline"),U=require("@tiptap/extension-link"),_=require("@tiptap/extension-image"),H=require("@tiptap/extension-mention"),D=require("tippy.js"),F=require("./mention-list.cjs"),y=require("emoji-picker-react"),f=require("../overlays/popover.cjs");function K(t){const l=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const o in t)if(o!=="default"){const r=Object.getOwnPropertyDescriptor(t,o);Object.defineProperty(l,o,r.get?r:{enumerable:!0,get:()=>t[o]})}}return l.default=t,Object.freeze(l)}const v=K(E),W=({role:t})=>{const l={internal:{label:"Equipe iClips",className:"bg-primary/10 text-primary hover:bg-primary/20 border-primary/20"},client:{label:"Cliente",className:"bg-info/10 text-info-emphasis hover:bg-info/20 border-info/20"},freelancer:{label:"Freelancer",className:"bg-warning/10 text-warning-emphasis hover:bg-warning/20 border-warning/20"}},{label:o,className:r}=l[t];return e.jsx(T.Badge,{variant:"outline",className:u.cn("text-[10px] h-5 px-1.5 font-medium border-0",r),children:o})},X=({editor:t,visible:l})=>!t||!l?null:e.jsxs("div",{className:"flex items-center gap-1 border-b p-1 bg-muted/20 animate-in slide-in-from-bottom-2 duration-200",children:[e.jsx(c.Button,{variant:"ghost",size:"icon",className:u.cn("h-7 w-7",t.isActive("bold")&&"bg-muted text-primary"),onClick:()=>t.chain().focus().toggleBold().run(),title:"Negrito (Ctrl+B)","aria-label":"Negrito",children:e.jsx(n.Bold,{className:"h-3.5 w-3.5"})}),e.jsx(c.Button,{variant:"ghost",size:"icon",className:u.cn("h-7 w-7",t.isActive("italic")&&"bg-muted text-primary"),onClick:()=>t.chain().focus().toggleItalic().run(),title:"Itálico (Ctrl+I)","aria-label":"Itálico",children:e.jsx(n.Italic,{className:"h-3.5 w-3.5"})}),e.jsx(c.Button,{variant:"ghost",size:"icon",className:u.cn("h-7 w-7",t.isActive("underline")&&"bg-muted text-primary"),onClick:()=>t.chain().focus().toggleUnderline().run(),title:"Sublinhado (Ctrl+U)","aria-label":"Sublinhado",children:e.jsx(n.Underline,{className:"h-3.5 w-3.5"})}),e.jsx(S.Separator,{orientation:"vertical",className:"h-4 mx-1"}),e.jsx(c.Button,{variant:"ghost",size:"icon",className:u.cn("h-7 w-7",t.isActive("bulletList")&&"bg-muted text-primary"),onClick:()=>t.chain().focus().toggleBulletList().run(),"aria-label":"Lista com marcadores",children:e.jsx(n.List,{className:"h-3.5 w-3.5"})}),e.jsx(c.Button,{variant:"ghost",size:"icon",className:u.cn("h-7 w-7",t.isActive("orderedList")&&"bg-muted text-primary"),onClick:()=>t.chain().focus().toggleOrderedList().run(),"aria-label":"Lista numerada",children:e.jsx(n.ListOrdered,{className:"h-3.5 w-3.5"})}),e.jsx(S.Separator,{orientation:"vertical",className:"h-4 mx-1"}),e.jsx(c.Button,{variant:"ghost",size:"icon",className:u.cn("h-7 w-7",t.isActive("link")&&"bg-muted text-primary"),"aria-label":"Inserir link",onClick:()=>{const o=t.getAttributes("link").href,r=window.prompt("URL",o);if(r!==null){if(r===""){t.chain().focus().extendMarkRange("link").unsetLink().run();return}t.chain().focus().extendMarkRange("link").setLink({href:r}).run()}},children:e.jsx(n.Link,{className:"h-3.5 w-3.5"})})]}),G=({currentUser:t,onSubmit:l,users:o=[]})=>{const[r,b]=v.useState(!1),[p,i]=v.useState(!1),[h,m]=v.useState([]),[R,C]=v.useState(!0),k=v.useRef(null),A=v.useMemo(()=>[M.configure({link:!1,underline:!1}),O,U.configure({openOnClick:!1}),_,H.configure({HTMLAttributes:{class:"bg-accent text-accent-foreground rounded-sm px-1 py-0.5 font-medium decoration-clone"},suggestion:{items:({query:s})=>o.filter(a=>a.name.toLowerCase().startsWith(s.toLowerCase())).slice(0,5),render:()=>{let s=null,a=null;return{onStart:d=>{s=new w.ReactRenderer(F.MentionList,{props:d,editor:d.editor}),d.clientRect&&(a=D("body",{getReferenceClientRect:d.clientRect,appendTo:()=>document.body,content:s.element,showOnCreate:!0,interactive:!0,trigger:"manual",placement:"bottom-start"}))},onUpdate(d){s==null||s.updateProps(d),d.clientRect&&(a==null||a[0].setProps({getReferenceClientRect:d.clientRect}))},onKeyDown(d){var j,q;return d.event.key==="Escape"?(a==null||a[0].hide(),!0):!!((q=(j=s==null?void 0:s.ref)==null?void 0:j.onKeyDown)!=null&&q.call(j,d))},onExit(){a==null||a[0].destroy(),s==null||s.destroy()}}}}})],[o]),x=w.useEditor({extensions:A,content:"",onUpdate:({editor:s})=>{C(s.isEmpty)},editorProps:{attributes:{class:"prose prose-sm dark:prose-invert max-w-none focus:outline-none min-h-[80px] px-3 py-2 text-sm"}}}),B=s=>{if(s.target.files&&s.target.files[0]){const a=s.target.files[0],d=URL.createObjectURL(a),j={id:Math.random().toString(36).substr(2,9),name:a.name,url:d,type:a.type.startsWith("image/")?"image":"file"};m([...h,j]),s.target.value=""}},L=s=>{m(h.filter(a=>a.id!==s))},P=()=>{!x||x.isEmpty&&h.length===0||(l({content:x.getHTML(),isRevisionRequest:r,attachments:h}),x.commands.clearContent(),m([]),b(!1),C(!0))};return e.jsxs("div",{className:"flex gap-3 items-start",children:[e.jsxs(N.Avatar,{className:"h-8 w-8 mt-1 border",children:[e.jsx(N.AvatarImage,{src:t.avatar}),e.jsx(N.AvatarFallback,{children:t.name.substring(0,2).toUpperCase()})]}),e.jsxs("div",{className:u.cn("flex-1 rounded-xl border bg-background shadow-sm overflow-hidden transition-colors",r&&"border-destructive/40 ring-1 ring-destructive/20"),children:[e.jsx(X,{editor:x,visible:p}),e.jsx(w.EditorContent,{editor:x}),h.length>0&&e.jsx("div",{className:"px-3 pb-2 flex flex-wrap gap-2",children:h.map(s=>e.jsxs("div",{className:"relative group",children:[s.type==="image"?e.jsx("div",{className:"h-16 w-16 rounded-md border overflow-hidden relative",children:e.jsx("img",{src:s.url,alt:s.name,className:"h-full w-full object-cover"})}):e.jsx("div",{className:"h-16 w-16 rounded-md border bg-muted flex items-center justify-center",children:e.jsx(n.Paperclip,{className:"h-6 w-6 text-muted-foreground"})}),e.jsx("button",{onClick:()=>L(s.id),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",children:e.jsx(n.X,{className:"h-3 w-3"})})]},s.id))}),e.jsxs("div",{className:"flex items-center justify-between p-2 bg-muted/10 border-t",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(g.Tooltip,{children:[e.jsx(g.TooltipTrigger,{asChild:!0,children:e.jsx(c.Button,{variant:"ghost",size:"icon",className:u.cn("h-8 w-8 transition-colors",p?"bg-muted text-foreground":"text-muted-foreground hover:text-foreground"),onClick:()=>i(!p),"aria-label":"Opções de formatação",children:e.jsx(n.Type,{className:"h-4 w-4"})})}),e.jsx(g.TooltipContent,{children:"Opções de formatação"})]}),e.jsx("div",{className:"w-px h-4 bg-border mx-1"}),e.jsxs(f.Popover,{children:[e.jsx(f.PopoverTrigger,{asChild:!0,children:e.jsx(c.Button,{variant:"ghost",size:"icon",className:"h-8 w-8 text-muted-foreground hover:text-foreground","aria-label":"Inserir emoji",children:e.jsx(n.Smile,{className:"h-4 w-4"})})}),e.jsx(f.PopoverContent,{className:"w-auto p-0 border-none",align:"start",side:"top",children:e.jsx(y,{onEmojiClick:s=>x==null?void 0:x.chain().focus().insertContent(s.emoji).run(),width:300,height:350})})]}),e.jsx("input",{type:"file",className:"hidden",ref:k,onChange:B,accept:"image/*,.pdf,.doc,.docx"}),e.jsxs(g.Tooltip,{children:[e.jsx(g.TooltipTrigger,{asChild:!0,children:e.jsx(c.Button,{variant:"ghost",size:"icon",className:"h-8 w-8 text-muted-foreground hover:text-foreground",onClick:()=>{var s;return(s=k.current)==null?void 0:s.click()},"aria-label":"Anexar arquivo",children:e.jsx(n.Paperclip,{className:"h-4 w-4"})})}),e.jsx(g.TooltipContent,{children:"Anexar arquivo"})]}),e.jsxs(g.Tooltip,{children:[e.jsx(g.TooltipTrigger,{asChild:!0,children:e.jsxs(c.Button,{variant:"ghost",size:"sm",className:u.cn("h-8 gap-2 px-2 transition-colors",r?"bg-destructive/10 text-destructive-emphasis hover:bg-destructive/20":"text-muted-foreground hover:text-foreground"),onClick:()=>b(!r),children:[e.jsx(n.AlertCircle,{className:"h-4 w-4"}),e.jsx("span",{className:"text-xs font-medium",children:"Solicitar Refação"})]})}),e.jsx(g.TooltipContent,{children:"Marca este comentário como um pedido de alteração"})]})]}),e.jsxs(c.Button,{size:"sm",onClick:P,disabled:R&&h.length===0,children:["Enviar ",e.jsx(n.Send,{className:"h-3.5 w-3.5 ml-2"})]})]})]})]})},J=({comment:t,currentUserId:l,onDelete:o,onReact:r})=>{var p;const b=t.isRevisionRequest;return e.jsxs("div",{className:u.cn("group flex gap-3 p-4 rounded-lg transition-colors",b?"bg-destructive/5 border border-destructive/20":"hover:bg-muted/20"),children:[e.jsxs(N.Avatar,{className:"h-8 w-8 mt-0.5 border",children:[e.jsx(N.AvatarImage,{src:t.user.avatar}),e.jsx(N.AvatarFallback,{children:t.user.name.substring(0,2).toUpperCase()})]}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center justify-between mb-1.5",children:[e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx("span",{className:"font-semibold text-sm text-foreground",children:t.user.name}),e.jsx(W,{role:t.user.role}),e.jsx("span",{className:"text-xs text-foreground/65",children:I.format(t.createdAt,"dd MMM 'às' HH:mm",{locale:z.ptBR})})]}),e.jsxs("div",{className:"flex items-center gap-2 opacity-0 group-hover:opacity-100 transition-opacity",children:[e.jsxs(f.Popover,{children:[e.jsx(f.PopoverTrigger,{asChild:!0,children:e.jsx(c.Button,{variant:"ghost",size:"icon",className:"h-6 w-6 text-muted-foreground hover:text-foreground","aria-label":"Reagir com emoji",children:e.jsx(n.Smile,{className:"h-3.5 w-3.5","aria-hidden":"true"})})}),e.jsx(f.PopoverContent,{className:"w-auto p-0 border-none",align:"end",children:e.jsx(y,{onEmojiClick:i=>r==null?void 0:r(t.id,i.emoji),width:300,height:350})})]}),o&&e.jsx(c.Button,{variant:"ghost",size:"icon",className:"h-6 w-6 text-muted-foreground hover:text-destructive",onClick:()=>o(t.id),"aria-label":"Excluir comentário",children:e.jsx(n.Trash2,{className:"h-3.5 w-3.5","aria-hidden":"true"})})]})]}),b&&e.jsxs("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",children:[e.jsx(n.AlertCircle,{className:"h-3.5 w-3.5"}),"Solicitação de Refação"]}),e.jsx("div",{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",dangerouslySetInnerHTML:{__html:t.content}}),t.attachments&&t.attachments.length>0&&e.jsx("div",{className:"mt-3 flex flex-wrap gap-2",children:t.attachments.map(i=>e.jsx("div",{className:"group/att relative rounded-lg border overflow-hidden bg-background hover:shadow-sm transition-all cursor-pointer",onClick:()=>window.open(i.url,"_blank"),children:i.type==="image"?e.jsxs("div",{className:"h-32 aspect-[4/3]",children:[e.jsx("img",{src:i.url,alt:i.name,className:"h-full w-full object-cover"}),e.jsx("div",{className:"absolute inset-0 bg-foreground/0 group-hover/att:bg-foreground/10 transition-colors"})]}):e.jsxs("div",{className:"h-12 px-3 flex items-center gap-2 bg-muted/30",children:[e.jsx(n.Paperclip,{className:"h-4 w-4 text-muted-foreground"}),e.jsx("span",{className:"text-xs font-medium truncate max-w-[150px]",children:i.name})]})},i.id))}),e.jsxs("div",{className:"mt-3 flex flex-wrap gap-2 items-center",children:[(p=t.reactions)==null?void 0:p.map(i=>e.jsxs("button",{onClick:()=>r==null?void 0:r(t.id,i.emoji),className:u.cn("inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full text-xs font-medium border transition-colors",i.users.includes(l)?"bg-accent border-accent text-accent-foreground":"bg-muted/30 border-transparent hover:bg-muted/50 text-muted-foreground"),children:[e.jsx("span",{children:i.emoji}),e.jsx("span",{children:i.users.length})]},i.emoji)),r&&e.jsxs(f.Popover,{children:[e.jsx(f.PopoverTrigger,{asChild:!0,children:e.jsx(c.Button,{variant:"ghost",size:"icon",className:"h-6 w-6 rounded-full text-muted-foreground hover:text-foreground hover:bg-muted/50","aria-label":"Adicionar reação",children:e.jsx(n.Plus,{className:"h-3.5 w-3.5"})})}),e.jsx(f.PopoverContent,{className:"w-auto p-0 border-none",align:"start",children:e.jsx(y,{onEmojiClick:i=>r(t.id,i.emoji),width:300,height:350})})]})]})]})]})},Q=({comments:t,currentUser:l,users:o=[],onAddComment:r,onDeleteComment:b,onReact:p,className:i})=>{const h=m=>{r({content:m.content,user:l,isRevisionRequest:m.isRevisionRequest,attachments:m.attachments})};return e.jsxs("div",{className:u.cn("flex flex-col h-full",i),children:[e.jsxs("div",{className:"px-4 py-3 border-b flex items-center justify-between bg-card",children:[e.jsx("h3",{className:"font-semibold text-base",children:"Comentários da Atividade"}),e.jsx(T.Badge,{variant:"secondary",className:"bg-muted text-muted-foreground hover:bg-muted",children:t.length})]}),e.jsx("div",{className:"flex-1 overflow-y-auto p-4 space-y-2 bg-muted/5",children:t.length===0?e.jsxs("div",{className:"h-full flex flex-col items-center justify-center text-muted-foreground min-h-[200px]",children:[e.jsx("div",{className:"bg-muted rounded-full p-3 mb-3",children:e.jsx(n.MoreHorizontal,{className:"h-6 w-6","aria-hidden":"true"})}),e.jsx("p",{className:"text-sm font-medium text-foreground/70",children:"Nenhum comentário ainda"}),e.jsx("p",{className:"text-xs",children:"Inicie a conversa sobre esta tarefa"})]}):t.map(m=>e.jsx(J,{comment:m,currentUserId:l.id,onDelete:b,onReact:p},m.id))}),e.jsx("div",{className:"p-4 border-t bg-card",children:e.jsx(G,{currentUser:l,onSubmit:h,users:o})})]})};exports.CommentSystem=Q;
2
+ //# sourceMappingURL=comment-system.cjs.map