@proef/common-ui 0.0.0-stage → 2.2.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 (443) hide show
  1. package/dist/esm/assets/imagem-6ee08a37d9.png +0 -0
  2. package/dist/esm/assets/imagem-6fcae1b87b.png +0 -0
  3. package/dist/esm/index.js +301 -0
  4. package/dist/esm/index.js.map +1 -0
  5. package/dist/esm/legacy/assets/svgs/proef-footer-logo.svg.js +5 -0
  6. package/dist/esm/legacy/assets/svgs/proef-footer-logo.svg.js.map +1 -0
  7. package/dist/esm/legacy/components/atoms/Acronym/Acronym.css +43 -0
  8. package/dist/esm/legacy/components/atoms/Acronym/Acronym.js +31 -0
  9. package/dist/esm/legacy/components/atoms/Acronym/Acronym.js.map +1 -0
  10. package/dist/esm/legacy/components/atoms/BreadCrumb/BreadCrumb.css +36 -0
  11. package/dist/esm/legacy/components/atoms/BreadCrumb/BreadCrumb.js +57 -0
  12. package/dist/esm/legacy/components/atoms/BreadCrumb/BreadCrumb.js.map +1 -0
  13. package/dist/esm/legacy/components/atoms/Button/variants/ActionButton.css +218 -0
  14. package/dist/esm/legacy/components/atoms/Button/variants/ActionButton.js +50 -0
  15. package/dist/esm/legacy/components/atoms/Button/variants/ActionButton.js.map +1 -0
  16. package/dist/esm/legacy/components/atoms/Button/variants/FilterButton.css +56 -0
  17. package/dist/esm/legacy/components/atoms/Button/variants/FilterButton.js +34 -0
  18. package/dist/esm/legacy/components/atoms/Button/variants/FilterButton.js.map +1 -0
  19. package/dist/esm/legacy/components/atoms/Button/variants/IconButton.css +74 -0
  20. package/dist/esm/legacy/components/atoms/Button/variants/IconButton.js +29 -0
  21. package/dist/esm/legacy/components/atoms/Button/variants/IconButton.js.map +1 -0
  22. package/dist/esm/legacy/components/atoms/Button/variants/MainButton.css +99 -0
  23. package/dist/esm/legacy/components/atoms/Button/variants/MainButton.js +36 -0
  24. package/dist/esm/legacy/components/atoms/Button/variants/MainButton.js.map +1 -0
  25. package/dist/esm/legacy/components/atoms/Button/variants/TabButton.css +63 -0
  26. package/dist/esm/legacy/components/atoms/Button/variants/TabButton.js +21 -0
  27. package/dist/esm/legacy/components/atoms/Button/variants/TabButton.js.map +1 -0
  28. package/dist/esm/legacy/components/atoms/Field/Field.css +171 -0
  29. package/dist/esm/legacy/components/atoms/Field/Field.js +70 -0
  30. package/dist/esm/legacy/components/atoms/Field/Field.js.map +1 -0
  31. package/dist/esm/legacy/components/atoms/IconText/IconText.css +10 -0
  32. package/dist/esm/legacy/components/atoms/IconText/IconText.js +25 -0
  33. package/dist/esm/legacy/components/atoms/IconText/IconText.js.map +1 -0
  34. package/dist/esm/legacy/components/atoms/Icone/Icone.js +24 -0
  35. package/dist/esm/legacy/components/atoms/Icone/Icone.js.map +1 -0
  36. package/dist/esm/legacy/components/atoms/Input/Input.css +12 -0
  37. package/dist/esm/legacy/components/atoms/Input/Input.js +28 -0
  38. package/dist/esm/legacy/components/atoms/Input/Input.js.map +1 -0
  39. package/dist/esm/legacy/components/atoms/InputData/InputData.js +25 -0
  40. package/dist/esm/legacy/components/atoms/InputData/InputData.js.map +1 -0
  41. package/dist/esm/legacy/components/atoms/Label/Label.css +192 -0
  42. package/dist/esm/legacy/components/atoms/Label/Label.js +13 -0
  43. package/dist/esm/legacy/components/atoms/Label/Label.js.map +1 -0
  44. package/dist/esm/legacy/components/atoms/MultiTagPickerTag/MultiTagPickerTag.css +40 -0
  45. package/dist/esm/legacy/components/atoms/MultiTagPickerTag/MultiTagPickerTag.js +21 -0
  46. package/dist/esm/legacy/components/atoms/MultiTagPickerTag/MultiTagPickerTag.js.map +1 -0
  47. package/dist/esm/legacy/components/atoms/Select/Select.css +16 -0
  48. package/dist/esm/legacy/components/atoms/Select/Select.js +27 -0
  49. package/dist/esm/legacy/components/atoms/Select/Select.js.map +1 -0
  50. package/dist/esm/legacy/components/atoms/Stack/Stack.js +20 -0
  51. package/dist/esm/legacy/components/atoms/Stack/Stack.js.map +1 -0
  52. package/dist/esm/legacy/components/atoms/Switch/CustomSwitch.css +36 -0
  53. package/dist/esm/legacy/components/atoms/Switch/CustomSwitch.js +29 -0
  54. package/dist/esm/legacy/components/atoms/Switch/CustomSwitch.js.map +1 -0
  55. package/dist/esm/legacy/components/charts/Charts.js +349 -0
  56. package/dist/esm/legacy/components/charts/Charts.js.map +1 -0
  57. package/dist/esm/legacy/components/layout/AppLauncher/AppLauncher.js +100 -0
  58. package/dist/esm/legacy/components/layout/AppLauncher/AppLauncher.js.map +1 -0
  59. package/dist/esm/legacy/components/layout/Error/Error.css +20 -0
  60. package/dist/esm/legacy/components/layout/Error/Error.js +12 -0
  61. package/dist/esm/legacy/components/layout/Error/Error.js.map +1 -0
  62. package/dist/esm/legacy/components/layout/Footer/Footer.css +42 -0
  63. package/dist/esm/legacy/components/layout/Footer/Footer.js +23 -0
  64. package/dist/esm/legacy/components/layout/Footer/Footer.js.map +1 -0
  65. package/dist/esm/legacy/components/layout/Header/Header.css +66 -0
  66. package/dist/esm/legacy/components/layout/Header/Header.js +37 -0
  67. package/dist/esm/legacy/components/layout/Header/Header.js.map +1 -0
  68. package/dist/esm/legacy/components/layout/Layout/Layout.js +31 -0
  69. package/dist/esm/legacy/components/layout/Layout/Layout.js.map +1 -0
  70. package/dist/esm/legacy/components/layout/Sidebar/Sidebar.js +38 -0
  71. package/dist/esm/legacy/components/layout/Sidebar/Sidebar.js.map +1 -0
  72. package/dist/esm/legacy/components/layout/Spinner/Spinner.css +10 -0
  73. package/dist/esm/legacy/components/layout/Spinner/Spinner.js +19 -0
  74. package/dist/esm/legacy/components/layout/Spinner/Spinner.js.map +1 -0
  75. package/dist/esm/legacy/components/layout/TopBar/TopBar.js +34 -0
  76. package/dist/esm/legacy/components/layout/TopBar/TopBar.js.map +1 -0
  77. package/dist/esm/legacy/components/layout/TopNavLayout/TopNavLayout.js +82 -0
  78. package/dist/esm/legacy/components/layout/TopNavLayout/TopNavLayout.js.map +1 -0
  79. package/dist/esm/legacy/components/molecules/BarraValor/BarraValor.js +25 -0
  80. package/dist/esm/legacy/components/molecules/BarraValor/BarraValor.js.map +1 -0
  81. package/dist/esm/legacy/components/molecules/ColumnPicker/ColumnPicker.js +246 -0
  82. package/dist/esm/legacy/components/molecules/ColumnPicker/ColumnPicker.js.map +1 -0
  83. package/dist/esm/legacy/components/molecules/ConfirmModal/ConfirmModal.css +3 -0
  84. package/dist/esm/legacy/components/molecules/ConfirmModal/ConfirmModal.js +33 -0
  85. package/dist/esm/legacy/components/molecules/ConfirmModal/ConfirmModal.js.map +1 -0
  86. package/dist/esm/legacy/components/molecules/DataTable/DataTable.js +1259 -0
  87. package/dist/esm/legacy/components/molecules/DataTable/DataTable.js.map +1 -0
  88. package/dist/esm/legacy/components/molecules/FileDropzone/FileDropzone.js +68 -0
  89. package/dist/esm/legacy/components/molecules/FileDropzone/FileDropzone.js.map +1 -0
  90. package/dist/esm/legacy/components/molecules/LanguageSwitcher/LanguageSwitcher.js +96 -0
  91. package/dist/esm/legacy/components/molecules/LanguageSwitcher/LanguageSwitcher.js.map +1 -0
  92. package/dist/esm/legacy/components/molecules/Modal/Modal.css +54 -0
  93. package/dist/esm/legacy/components/molecules/Modal/Modal.js +64 -0
  94. package/dist/esm/legacy/components/molecules/Modal/Modal.js.map +1 -0
  95. package/dist/esm/legacy/components/molecules/MultiTagPicker/MultiTagPicker.css +97 -0
  96. package/dist/esm/legacy/components/molecules/MultiTagPicker/MultiTagPicker.js +113 -0
  97. package/dist/esm/legacy/components/molecules/MultiTagPicker/MultiTagPicker.js.map +1 -0
  98. package/dist/esm/legacy/components/molecules/PhotoAvatar/PhotoAvatar.js +114 -0
  99. package/dist/esm/legacy/components/molecules/PhotoAvatar/PhotoAvatar.js.map +1 -0
  100. package/dist/esm/legacy/components/molecules/SeletorPesquisa/SeletorPesquisa.js +116 -0
  101. package/dist/esm/legacy/components/molecules/SeletorPesquisa/SeletorPesquisa.js.map +1 -0
  102. package/dist/esm/legacy/components/molecules/Sidebar/Sidebar.css +69 -0
  103. package/dist/esm/legacy/components/molecules/Sidebar/Sidebar.js +62 -0
  104. package/dist/esm/legacy/components/molecules/Sidebar/Sidebar.js.map +1 -0
  105. package/dist/esm/legacy/components/molecules/UserAvatar/UserAvatar.js +23 -0
  106. package/dist/esm/legacy/components/molecules/UserAvatar/UserAvatar.js.map +1 -0
  107. package/dist/esm/legacy/components/organisms/GanttChart/GanttChart.js +162 -0
  108. package/dist/esm/legacy/components/organisms/GanttChart/GanttChart.js.map +1 -0
  109. package/dist/esm/legacy/components/organisms/Kanban/Kanban.js +88 -0
  110. package/dist/esm/legacy/components/organisms/Kanban/Kanban.js.map +1 -0
  111. package/dist/esm/legacy/components/organisms/LazyLoader/LazyLoader.js +87 -0
  112. package/dist/esm/legacy/components/organisms/LazyLoader/LazyLoader.js.map +1 -0
  113. package/dist/esm/legacy/components/organisms/MapaPontos/MapaPontos.js +427 -0
  114. package/dist/esm/legacy/components/organisms/MapaPontos/MapaPontos.js.map +1 -0
  115. package/dist/esm/legacy/components/organisms/PainelFiltros/PainelFiltros.js +218 -0
  116. package/dist/esm/legacy/components/organisms/PainelFiltros/PainelFiltros.js.map +1 -0
  117. package/dist/esm/legacy/components/organisms/PesquisaRapida/PesquisaRapida.js +147 -0
  118. package/dist/esm/legacy/components/organisms/PesquisaRapida/PesquisaRapida.js.map +1 -0
  119. package/dist/esm/legacy/components/organisms/Profile/Profile.css +26 -0
  120. package/dist/esm/legacy/components/organisms/Profile/Profile.js +26 -0
  121. package/dist/esm/legacy/components/organisms/Profile/Profile.js.map +1 -0
  122. package/dist/esm/legacy/components/organisms/RoleGuard/RoleGuard.js +79 -0
  123. package/dist/esm/legacy/components/organisms/RoleGuard/RoleGuard.js.map +1 -0
  124. package/dist/esm/legacy/components/organisms/Selector/Selector.css +87 -0
  125. package/dist/esm/legacy/components/organisms/Selector/Selector.js +181 -0
  126. package/dist/esm/legacy/components/organisms/Selector/Selector.js.map +1 -0
  127. package/dist/esm/legacy/components/organisms/StatusMatrix/StatusMatrix.js +115 -0
  128. package/dist/esm/legacy/components/organisms/StatusMatrix/StatusMatrix.js.map +1 -0
  129. package/dist/esm/legacy/components/ui/Avisos.js +33 -0
  130. package/dist/esm/legacy/components/ui/Avisos.js.map +1 -0
  131. package/dist/esm/legacy/components/ui/BarraAcoes.js +19 -0
  132. package/dist/esm/legacy/components/ui/BarraAcoes.js.map +1 -0
  133. package/dist/esm/legacy/components/ui/CabecalhoPagina.js +19 -0
  134. package/dist/esm/legacy/components/ui/CabecalhoPagina.js.map +1 -0
  135. package/dist/esm/legacy/components/ui/CaixaPesquisa.js +9 -0
  136. package/dist/esm/legacy/components/ui/CaixaPesquisa.js.map +1 -0
  137. package/dist/esm/legacy/components/ui/Confirmacao.js +34 -0
  138. package/dist/esm/legacy/components/ui/Confirmacao.js.map +1 -0
  139. package/dist/esm/legacy/components/ui/Escolha.js +41 -0
  140. package/dist/esm/legacy/components/ui/Escolha.js.map +1 -0
  141. package/dist/esm/legacy/components/ui/FaixaAviso.js +19 -0
  142. package/dist/esm/legacy/components/ui/FaixaAviso.js.map +1 -0
  143. package/dist/esm/legacy/components/ui/MenuAcoes.js +116 -0
  144. package/dist/esm/legacy/components/ui/MenuAcoes.js.map +1 -0
  145. package/dist/esm/legacy/components/ui/Passos.js +32 -0
  146. package/dist/esm/legacy/components/ui/Passos.js.map +1 -0
  147. package/dist/esm/legacy/components/ui/Separadores.js +17 -0
  148. package/dist/esm/legacy/components/ui/Separadores.js.map +1 -0
  149. package/dist/esm/legacy/components/ui/TextoAuto.js +33 -0
  150. package/dist/esm/legacy/components/ui/TextoAuto.js.map +1 -0
  151. package/dist/esm/legacy/components/ui/Ui.js +263 -0
  152. package/dist/esm/legacy/components/ui/Ui.js.map +1 -0
  153. package/dist/esm/legacy/components/ui/painelFlutuante.js +13 -0
  154. package/dist/esm/legacy/components/ui/painelFlutuante.js.map +1 -0
  155. package/dist/esm/legacy/constants/Colors.js +33 -0
  156. package/dist/esm/legacy/constants/Colors.js.map +1 -0
  157. package/dist/esm/legacy/constants/FontWeight.js +35 -0
  158. package/dist/esm/legacy/constants/FontWeight.js.map +1 -0
  159. package/dist/esm/legacy/contexts/apiContext.js +25 -0
  160. package/dist/esm/legacy/contexts/apiContext.js.map +1 -0
  161. package/dist/esm/legacy/contexts/authContext.js +85 -0
  162. package/dist/esm/legacy/contexts/authContext.js.map +1 -0
  163. package/dist/esm/legacy/contexts/socketContext.js +34 -0
  164. package/dist/esm/legacy/contexts/socketContext.js.map +1 -0
  165. package/dist/esm/legacy/hooks/useApi.js +62 -0
  166. package/dist/esm/legacy/hooks/useApi.js.map +1 -0
  167. package/dist/esm/legacy/pages/Error/ErrorPage.css +18 -0
  168. package/dist/esm/legacy/pages/Error/ErrorPage.js +50 -0
  169. package/dist/esm/legacy/pages/Error/ErrorPage.js.map +1 -0
  170. package/dist/esm/legacy/pages/Loading/Loading.css +46 -0
  171. package/dist/esm/legacy/pages/Loading/Loading.js +9 -0
  172. package/dist/esm/legacy/pages/Loading/Loading.js.map +1 -0
  173. package/dist/esm/legacy/pages/Login/LoginScreen.js +46 -0
  174. package/dist/esm/legacy/pages/Login/LoginScreen.js.map +1 -0
  175. package/dist/esm/legacy/pages/NotFound/NotFound.css +21 -0
  176. package/dist/esm/legacy/pages/NotFound/NotFound.js +24 -0
  177. package/dist/esm/legacy/pages/NotFound/NotFound.js.map +1 -0
  178. package/dist/esm/legacy/styles/themes/ButtonThemes.js +28 -0
  179. package/dist/esm/legacy/styles/themes/ButtonThemes.js.map +1 -0
  180. package/dist/esm/legacy/styles/utils/utils.js +7 -0
  181. package/dist/esm/legacy/styles/utils/utils.js.map +1 -0
  182. package/dist/esm/legacy/utils/stringUtils.js +35 -0
  183. package/dist/esm/legacy/utils/stringUtils.js.map +1 -0
  184. package/dist/esm/v1/capabilities/documents/QRScanning/scanQRCodes.js +157 -0
  185. package/dist/esm/v1/capabilities/documents/QRScanning/scanQRCodes.js.map +1 -0
  186. package/dist/esm/v1/capabilities/overlay/useFloatingPanel.js +52 -0
  187. package/dist/esm/v1/capabilities/overlay/useFloatingPanel.js.map +1 -0
  188. package/dist/esm/v1/capabilities/theme/useIsDark.js +15 -0
  189. package/dist/esm/v1/capabilities/theme/useIsDark.js.map +1 -0
  190. package/dist/esm/v1/capabilities/theme/useTheme.js +66 -0
  191. package/dist/esm/v1/capabilities/theme/useTheme.js.map +1 -0
  192. package/dist/esm/v1/components/data/Pagination/Pagination.js +66 -0
  193. package/dist/esm/v1/components/data/Pagination/Pagination.js.map +1 -0
  194. package/dist/esm/v1/components/documents/DocumentDropzone/DocumentDropzone.js +307 -0
  195. package/dist/esm/v1/components/documents/DocumentDropzone/DocumentDropzone.js.map +1 -0
  196. package/dist/esm/v1/components/feedback/Toast/Toast.js +105 -0
  197. package/dist/esm/v1/components/feedback/Toast/Toast.js.map +1 -0
  198. package/dist/esm/v1/components/forms/FormField/FormField.js +59 -0
  199. package/dist/esm/v1/components/forms/FormField/FormField.js.map +1 -0
  200. package/dist/esm/v1/components/forms/FormGrid/FormGrid.js +20 -0
  201. package/dist/esm/v1/components/forms/FormGrid/FormGrid.js.map +1 -0
  202. package/dist/esm/v1/components/layout/AppShell/AppShell.js +89 -0
  203. package/dist/esm/v1/components/layout/AppShell/AppShell.js.map +1 -0
  204. package/dist/esm/v1/components/layout/Page/Page.js +16 -0
  205. package/dist/esm/v1/components/layout/Page/Page.js.map +1 -0
  206. package/dist/esm/v1/components/layout/PageHeader/PageHeader.js +26 -0
  207. package/dist/esm/v1/components/layout/PageHeader/PageHeader.js.map +1 -0
  208. package/dist/esm/v1/components/layout/SideNav/SideNav.js +287 -0
  209. package/dist/esm/v1/components/layout/SideNav/SideNav.js.map +1 -0
  210. package/dist/esm/v1/components/layout/navTrail.js +19 -0
  211. package/dist/esm/v1/components/layout/navTrail.js.map +1 -0
  212. package/dist/esm/v1/components/lists/ListFinder/ListFinder.js +214 -0
  213. package/dist/esm/v1/components/lists/ListFinder/ListFinder.js.map +1 -0
  214. package/dist/esm/v1/components/lists/ListFinder/labels.js +18 -0
  215. package/dist/esm/v1/components/lists/ListFinder/labels.js.map +1 -0
  216. package/dist/esm/v1/components/overlays/ConfirmDialog/ConfirmDialog.js +95 -0
  217. package/dist/esm/v1/components/overlays/ConfirmDialog/ConfirmDialog.js.map +1 -0
  218. package/dist/esm/v1/components/overlays/Dialog/Dialog.js +141 -0
  219. package/dist/esm/v1/components/overlays/Dialog/Dialog.js.map +1 -0
  220. package/dist/esm/v1/components/overlays/Tooltip/Tooltip.js +98 -0
  221. package/dist/esm/v1/components/overlays/Tooltip/Tooltip.js.map +1 -0
  222. package/dist/esm/v1/components/overlays/Tooltip/TooltipLayer.js +84 -0
  223. package/dist/esm/v1/components/overlays/Tooltip/TooltipLayer.js.map +1 -0
  224. package/dist/esm/v1/components/overlays/Tooltip/TooltipPanel.js +33 -0
  225. package/dist/esm/v1/components/overlays/Tooltip/TooltipPanel.js.map +1 -0
  226. package/dist/esm/v1/components/overlays/topLayer.js +28 -0
  227. package/dist/esm/v1/components/overlays/topLayer.js.map +1 -0
  228. package/dist/esm/v1/components/tables/PaginatedTable/PaginatedTable.js +50 -0
  229. package/dist/esm/v1/components/tables/PaginatedTable/PaginatedTable.js.map +1 -0
  230. package/dist/esm/v1/components/tables/Table/ColumnFilter.js +292 -0
  231. package/dist/esm/v1/components/tables/Table/ColumnFilter.js.map +1 -0
  232. package/dist/esm/v1/components/tables/Table/OverlayScrollbar.js +129 -0
  233. package/dist/esm/v1/components/tables/Table/OverlayScrollbar.js.map +1 -0
  234. package/dist/esm/v1/components/tables/Table/Table.js +1410 -0
  235. package/dist/esm/v1/components/tables/Table/Table.js.map +1 -0
  236. package/dist/esm/v1/components/tables/Table/labels.js +44 -0
  237. package/dist/esm/v1/components/tables/Table/labels.js.map +1 -0
  238. package/dist/esm/v1/foundations/icons/icons.js +178 -0
  239. package/dist/esm/v1/foundations/icons/icons.js.map +1 -0
  240. package/dist/esm/v1/primitives/buttons/Button/Button.js +41 -0
  241. package/dist/esm/v1/primitives/buttons/Button/Button.js.map +1 -0
  242. package/dist/esm/v1/primitives/buttons/SegmentedControl/SegmentedControl.js +65 -0
  243. package/dist/esm/v1/primitives/buttons/SegmentedControl/SegmentedControl.js.map +1 -0
  244. package/dist/esm/v1/primitives/buttons/SegmentedControl/segmentedStyles.js +10 -0
  245. package/dist/esm/v1/primitives/buttons/SegmentedControl/segmentedStyles.js.map +1 -0
  246. package/dist/esm/v1/primitives/display/Avatar/Avatar.js +120 -0
  247. package/dist/esm/v1/primitives/display/Avatar/Avatar.js.map +1 -0
  248. package/dist/esm/v1/primitives/display/Badge/Badge.js +23 -0
  249. package/dist/esm/v1/primitives/display/Badge/Badge.js.map +1 -0
  250. package/dist/esm/v1/primitives/display/Card/Card.js +22 -0
  251. package/dist/esm/v1/primitives/display/Card/Card.js.map +1 -0
  252. package/dist/esm/v1/primitives/display/FilterChips/FilterChips.js +45 -0
  253. package/dist/esm/v1/primitives/display/FilterChips/FilterChips.js.map +1 -0
  254. package/dist/esm/v1/primitives/display/Kpi/Kpi.js +103 -0
  255. package/dist/esm/v1/primitives/display/Kpi/Kpi.js.map +1 -0
  256. package/dist/esm/v1/primitives/display/Notice/Notice.js +71 -0
  257. package/dist/esm/v1/primitives/display/Notice/Notice.js.map +1 -0
  258. package/dist/esm/v1/primitives/display/Person/Person.js +14 -0
  259. package/dist/esm/v1/primitives/display/Person/Person.js.map +1 -0
  260. package/dist/esm/v1/primitives/documents/PdfPreview/PdfPreview.js +137 -0
  261. package/dist/esm/v1/primitives/documents/PdfPreview/PdfPreview.js.map +1 -0
  262. package/dist/esm/v1/primitives/documents/PdfPreview/pdfjs.js +26 -0
  263. package/dist/esm/v1/primitives/documents/PdfPreview/pdfjs.js.map +1 -0
  264. package/dist/esm/v1/primitives/forms/Checkbox/Checkbox.js +37 -0
  265. package/dist/esm/v1/primitives/forms/Checkbox/Checkbox.js.map +1 -0
  266. package/dist/esm/v1/primitives/forms/DateInput/DateInput.js +150 -0
  267. package/dist/esm/v1/primitives/forms/DateInput/DateInput.js.map +1 -0
  268. package/dist/esm/v1/primitives/forms/LookupInput/LookupInput.js +37 -0
  269. package/dist/esm/v1/primitives/forms/LookupInput/LookupInput.js.map +1 -0
  270. package/dist/esm/v1/primitives/forms/SearchInput/SearchInput.js +43 -0
  271. package/dist/esm/v1/primitives/forms/SearchInput/SearchInput.js.map +1 -0
  272. package/dist/esm/v1/primitives/forms/SelectInput/SelectInput.js +207 -0
  273. package/dist/esm/v1/primitives/forms/SelectInput/SelectInput.js.map +1 -0
  274. package/dist/esm/v1/primitives/forms/TextArea/TextArea.js +75 -0
  275. package/dist/esm/v1/primitives/forms/TextArea/TextArea.js.map +1 -0
  276. package/dist/esm/v1/primitives/forms/TextInput/TextInput.js +21 -0
  277. package/dist/esm/v1/primitives/forms/TextInput/TextInput.js.map +1 -0
  278. package/dist/esm/v1/primitives/forms/field.js +14 -0
  279. package/dist/esm/v1/primitives/forms/field.js.map +1 -0
  280. package/dist/esm/v1/primitives/lists/ListItem/ListItem.js +39 -0
  281. package/dist/esm/v1/primitives/lists/ListItem/ListItem.js.map +1 -0
  282. package/dist/esm/v1/primitives/navigation/Tabs/Tabs.js +96 -0
  283. package/dist/esm/v1/primitives/navigation/Tabs/Tabs.js.map +1 -0
  284. package/dist/style.components.css +3 -0
  285. package/dist/style.css +2 -0
  286. package/dist/style.layered.css +2 -0
  287. package/dist/tailwind.css +24 -0
  288. package/dist/theme-boot.js +1 -0
  289. package/dist/theme.css +265 -0
  290. package/dist/tokens.css +121 -0
  291. package/dist/types/index.d.ts +14 -0
  292. package/dist/types/legacy/components/atoms/Acronym/Acronym.d.ts +11 -0
  293. package/dist/types/legacy/components/atoms/BreadCrumb/BreadCrumb.d.ts +9 -0
  294. package/dist/types/legacy/components/atoms/Button/variants/ActionButton.d.ts +14 -0
  295. package/dist/types/legacy/components/atoms/Button/variants/FilterButton.d.ts +12 -0
  296. package/dist/types/legacy/components/atoms/Button/variants/IconButton.d.ts +22 -0
  297. package/dist/types/legacy/components/atoms/Button/variants/MainButton.d.ts +17 -0
  298. package/dist/types/legacy/components/atoms/Button/variants/TabButton.d.ts +14 -0
  299. package/dist/types/legacy/components/atoms/Field/Field.d.ts +15 -0
  300. package/dist/types/legacy/components/atoms/IconText/IconText.d.ts +12 -0
  301. package/dist/types/legacy/components/atoms/Icone/Icone.d.ts +31 -0
  302. package/dist/types/legacy/components/atoms/Input/Input.d.ts +13 -0
  303. package/dist/types/legacy/components/atoms/InputData/InputData.d.ts +38 -0
  304. package/dist/types/legacy/components/atoms/Label/Label.d.ts +11 -0
  305. package/dist/types/legacy/components/atoms/MultiTagPickerTag/MultiTagPickerTag.d.ts +10 -0
  306. package/dist/types/legacy/components/atoms/SearchSelect/SearchSelect.d.ts +15 -0
  307. package/dist/types/legacy/components/atoms/Select/Select.d.ts +16 -0
  308. package/dist/types/legacy/components/atoms/Stack/Stack.d.ts +9 -0
  309. package/dist/types/legacy/components/atoms/Switch/CustomSwitch.d.ts +12 -0
  310. package/dist/types/legacy/components/charts/Charts.d.ts +149 -0
  311. package/dist/types/legacy/components/layout/AppLauncher/AppLauncher.d.ts +35 -0
  312. package/dist/types/legacy/components/layout/Error/Error.d.ts +8 -0
  313. package/dist/types/legacy/components/layout/Footer/Footer.d.ts +11 -0
  314. package/dist/types/legacy/components/layout/Header/Header.d.ts +16 -0
  315. package/dist/types/legacy/components/layout/Layout/Layout.d.ts +35 -0
  316. package/dist/types/legacy/components/layout/Sidebar/Sidebar.d.ts +56 -0
  317. package/dist/types/legacy/components/layout/Spinner/Spinner.d.ts +5 -0
  318. package/dist/types/legacy/components/layout/TopBar/TopBar.d.ts +10 -0
  319. package/dist/types/legacy/components/layout/TopNavLayout/TopNavLayout.d.ts +43 -0
  320. package/dist/types/legacy/components/molecules/BarraValor/BarraValor.d.ts +28 -0
  321. package/dist/types/legacy/components/molecules/ColumnPicker/ColumnPicker.d.ts +116 -0
  322. package/dist/types/legacy/components/molecules/ConfirmModal/ConfirmModal.d.ts +13 -0
  323. package/dist/types/legacy/components/molecules/DataTable/DataTable.d.ts +344 -0
  324. package/dist/types/legacy/components/molecules/FileDropzone/FileDropzone.d.ts +25 -0
  325. package/dist/types/legacy/components/molecules/LanguageSwitcher/LanguageSwitcher.d.ts +33 -0
  326. package/dist/types/legacy/components/molecules/Modal/Modal.d.ts +22 -0
  327. package/dist/types/legacy/components/molecules/MultiTagPicker/MultiTagPicker.d.ts +25 -0
  328. package/dist/types/legacy/components/molecules/PhotoAvatar/PhotoAvatar.d.ts +34 -0
  329. package/dist/types/legacy/components/molecules/SeletorPesquisa/SeletorPesquisa.d.ts +48 -0
  330. package/dist/types/legacy/components/molecules/Sidebar/Sidebar.d.ts +12 -0
  331. package/dist/types/legacy/components/molecules/UserAvatar/UserAvatar.d.ts +19 -0
  332. package/dist/types/legacy/components/organisms/GanttChart/GanttChart.d.ts +62 -0
  333. package/dist/types/legacy/components/organisms/Kanban/Kanban.d.ts +44 -0
  334. package/dist/types/legacy/components/organisms/LazyLoader/LazyLoader.d.ts +16 -0
  335. package/dist/types/legacy/components/organisms/MapaPontos/MapaPontos.d.ts +206 -0
  336. package/dist/types/legacy/components/organisms/PainelFiltros/PainelFiltros.d.ts +69 -0
  337. package/dist/types/legacy/components/organisms/PesquisaRapida/PesquisaRapida.d.ts +53 -0
  338. package/dist/types/legacy/components/organisms/Profile/Profile.d.ts +12 -0
  339. package/dist/types/legacy/components/organisms/RoleGuard/RoleGuard.d.ts +37 -0
  340. package/dist/types/legacy/components/organisms/Selector/Selector.d.ts +20 -0
  341. package/dist/types/legacy/components/organisms/StatusMatrix/StatusMatrix.d.ts +54 -0
  342. package/dist/types/legacy/components/ui/Avisos.d.ts +33 -0
  343. package/dist/types/legacy/components/ui/BarraAcoes.d.ts +19 -0
  344. package/dist/types/legacy/components/ui/CabecalhoPagina.d.ts +23 -0
  345. package/dist/types/legacy/components/ui/CaixaPesquisa.d.ts +14 -0
  346. package/dist/types/legacy/components/ui/Confirmacao.d.ts +24 -0
  347. package/dist/types/legacy/components/ui/Escolha.d.ts +35 -0
  348. package/dist/types/legacy/components/ui/FaixaAviso.d.ts +19 -0
  349. package/dist/types/legacy/components/ui/MenuAcoes.d.ts +31 -0
  350. package/dist/types/legacy/components/ui/Passos.d.ts +31 -0
  351. package/dist/types/legacy/components/ui/Separadores.d.ts +19 -0
  352. package/dist/types/legacy/components/ui/TextoAuto.d.ts +23 -0
  353. package/dist/types/legacy/components/ui/Ui.d.ts +181 -0
  354. package/dist/types/legacy/components/ui/painelFlutuante.d.ts +16 -0
  355. package/dist/types/legacy/constants/Colors.d.ts +28 -0
  356. package/dist/types/legacy/constants/FontWeight.d.ts +9 -0
  357. package/dist/types/legacy/contexts/apiContext.d.ts +10 -0
  358. package/dist/types/legacy/contexts/authContext.d.ts +31 -0
  359. package/dist/types/legacy/contexts/socketContext.d.ts +16 -0
  360. package/dist/types/legacy/exports/assets.d.ts +0 -0
  361. package/dist/types/legacy/exports/atoms.d.ts +19 -0
  362. package/dist/types/legacy/exports/charts.d.ts +2 -0
  363. package/dist/types/legacy/exports/constants.d.ts +0 -0
  364. package/dist/types/legacy/exports/contexts.d.ts +3 -0
  365. package/dist/types/legacy/exports/hooks.d.ts +4 -0
  366. package/dist/types/legacy/exports/layout.d.ts +14 -0
  367. package/dist/types/legacy/exports/molecules.d.ts +21 -0
  368. package/dist/types/legacy/exports/organisms.d.ts +17 -0
  369. package/dist/types/legacy/exports/pages.d.ts +5 -0
  370. package/dist/types/legacy/exports/styles.d.ts +2 -0
  371. package/dist/types/legacy/exports/types.d.ts +7 -0
  372. package/dist/types/legacy/exports/ui.d.ts +24 -0
  373. package/dist/types/legacy/exports/utils.d.ts +1 -0
  374. package/dist/types/legacy/hooks/useApi.d.ts +19 -0
  375. package/dist/types/legacy/pages/Error/ErrorPage.d.ts +16 -0
  376. package/dist/types/legacy/pages/Loading/Loading.d.ts +8 -0
  377. package/dist/types/legacy/pages/Login/LoginScreen.d.ts +42 -0
  378. package/dist/types/legacy/pages/NotFound/NotFound.d.ts +8 -0
  379. package/dist/types/legacy/styles/themes/ButtonThemes.d.ts +6 -0
  380. package/dist/types/legacy/styles/utils/utils.d.ts +2 -0
  381. package/dist/types/legacy/types/Fetcher.d.ts +5 -0
  382. package/dist/types/legacy/types/LoggedUser.d.ts +10 -0
  383. package/dist/types/legacy/types/SelectableElement.d.ts +6 -0
  384. package/dist/types/legacy/types/SidebarMenu.d.ts +12 -0
  385. package/dist/types/legacy/types/themes/AcronymThemes.d.ts +4 -0
  386. package/dist/types/legacy/types/themes/ButtonThemes.d.ts +21 -0
  387. package/dist/types/legacy/types/themes/CustomSwitchThemes.d.ts +4 -0
  388. package/dist/types/legacy/types/themes/IconTextThemes.d.ts +6 -0
  389. package/dist/types/legacy/utils/keycloak.d.ts +0 -0
  390. package/dist/types/legacy/utils/stringUtils.d.ts +6 -0
  391. package/dist/types/v1/capabilities/documents/QRScanning/scanQRCodes.d.ts +25 -0
  392. package/dist/types/v1/capabilities/overlay/useFloatingPanel.d.ts +20 -0
  393. package/dist/types/v1/capabilities/theme/useIsDark.d.ts +10 -0
  394. package/dist/types/v1/capabilities/theme/useTheme.d.ts +29 -0
  395. package/dist/types/v1/components/data/Pagination/Pagination.d.ts +33 -0
  396. package/dist/types/v1/components/documents/DocumentDropzone/DocumentDropzone.d.ts +60 -0
  397. package/dist/types/v1/components/feedback/Toast/Toast.d.ts +51 -0
  398. package/dist/types/v1/components/forms/FormField/FormField.d.ts +44 -0
  399. package/dist/types/v1/components/forms/FormGrid/FormGrid.d.ts +23 -0
  400. package/dist/types/v1/components/layout/AppShell/AppShell.d.ts +35 -0
  401. package/dist/types/v1/components/layout/Page/Page.d.ts +23 -0
  402. package/dist/types/v1/components/layout/PageHeader/PageHeader.d.ts +35 -0
  403. package/dist/types/v1/components/layout/SideNav/SideNav.d.ts +92 -0
  404. package/dist/types/v1/components/layout/navTrail.d.ts +15 -0
  405. package/dist/types/v1/components/lists/ListFinder/ListFinder.d.ts +60 -0
  406. package/dist/types/v1/components/lists/ListFinder/labels.d.ts +24 -0
  407. package/dist/types/v1/components/overlays/ConfirmDialog/ConfirmDialog.d.ts +59 -0
  408. package/dist/types/v1/components/overlays/Dialog/Dialog.d.ts +66 -0
  409. package/dist/types/v1/components/overlays/Tooltip/Tooltip.d.ts +34 -0
  410. package/dist/types/v1/components/overlays/Tooltip/TooltipLayer.d.ts +18 -0
  411. package/dist/types/v1/components/overlays/Tooltip/TooltipPanel.d.ts +23 -0
  412. package/dist/types/v1/components/overlays/topLayer.d.ts +23 -0
  413. package/dist/types/v1/components/tables/PaginatedTable/PaginatedTable.d.ts +41 -0
  414. package/dist/types/v1/components/tables/Table/ColumnFilter.d.ts +48 -0
  415. package/dist/types/v1/components/tables/Table/OverlayScrollbar.d.ts +34 -0
  416. package/dist/types/v1/components/tables/Table/Table.d.ts +250 -0
  417. package/dist/types/v1/components/tables/Table/labels.d.ts +54 -0
  418. package/dist/types/v1/foundations/icons/icons.d.ts +61 -0
  419. package/dist/types/v1/index.d.ts +81 -0
  420. package/dist/types/v1/primitives/buttons/Button/Button.d.ts +35 -0
  421. package/dist/types/v1/primitives/buttons/SegmentedControl/SegmentedControl.d.ts +28 -0
  422. package/dist/types/v1/primitives/buttons/SegmentedControl/segmentedStyles.d.ts +16 -0
  423. package/dist/types/v1/primitives/display/Avatar/Avatar.d.ts +30 -0
  424. package/dist/types/v1/primitives/display/Badge/Badge.d.ts +25 -0
  425. package/dist/types/v1/primitives/display/Card/Card.d.ts +22 -0
  426. package/dist/types/v1/primitives/display/FilterChips/FilterChips.d.ts +33 -0
  427. package/dist/types/v1/primitives/display/Kpi/Kpi.d.ts +68 -0
  428. package/dist/types/v1/primitives/display/Notice/Notice.d.ts +29 -0
  429. package/dist/types/v1/primitives/display/Person/Person.d.ts +15 -0
  430. package/dist/types/v1/primitives/documents/PdfPreview/PdfPreview.d.ts +17 -0
  431. package/dist/types/v1/primitives/documents/PdfPreview/pdfjs.d.ts +11 -0
  432. package/dist/types/v1/primitives/forms/Checkbox/Checkbox.d.ts +25 -0
  433. package/dist/types/v1/primitives/forms/DateInput/DateInput.d.ts +43 -0
  434. package/dist/types/v1/primitives/forms/LookupInput/LookupInput.d.ts +28 -0
  435. package/dist/types/v1/primitives/forms/SearchInput/SearchInput.d.ts +23 -0
  436. package/dist/types/v1/primitives/forms/SelectInput/SelectInput.d.ts +70 -0
  437. package/dist/types/v1/primitives/forms/TextArea/TextArea.d.ts +40 -0
  438. package/dist/types/v1/primitives/forms/TextInput/TextInput.d.ts +16 -0
  439. package/dist/types/v1/primitives/forms/field.d.ts +22 -0
  440. package/dist/types/v1/primitives/lists/ListItem/ListItem.d.ts +36 -0
  441. package/dist/types/v1/primitives/navigation/Tabs/Tabs.d.ts +58 -0
  442. package/package.json +120 -6
  443. package/README.md +0 -3
@@ -0,0 +1,87 @@
1
+ .cui-selector {
2
+ max-width: 45vw;
3
+ }
4
+ .cui-selector__search {
5
+ border-radius: 25px;
6
+ padding: 10px;
7
+ }
8
+ .cui-selector__selected {
9
+ margin: 4vh 0;
10
+ border: 2px solid var(--dark-blue);
11
+ border-radius: 25px;
12
+ }
13
+ .cui-selector__selected-list {
14
+ padding: 10px;
15
+ display: flex;
16
+ justify-content: left;
17
+ align-items: center;
18
+ flex-wrap: wrap;
19
+ gap: 10px;
20
+ max-height: 17vh;
21
+ overflow-y: auto;
22
+ }
23
+ .cui-selector__selected-list-item {
24
+ font-size: 13px;
25
+ display: flex;
26
+ padding: 10px;
27
+ background: var(--dark-blue);
28
+ color: white;
29
+ border-radius: 25px;
30
+ }
31
+ .cui-selector__selected-list-info {
32
+ display: flex;
33
+ align-items: center;
34
+ }
35
+ .cui-selector__selected-list-option {
36
+ margin: 0 0 0 7px;
37
+ }
38
+ .cui-selector__elements {
39
+ margin: 5vh 0;
40
+ height: 30vh;
41
+ overflow: auto;
42
+ }
43
+ .cui-selector__elements-list {
44
+ display: flex;
45
+ flex-direction: column;
46
+ gap: 10px;
47
+ padding-right: 10px;
48
+ cursor: pointer;
49
+ }
50
+ .cui-selector__elements-list-item {
51
+ display: flex;
52
+ justify-content: space-between;
53
+ padding: 10px;
54
+ border-radius: 25px;
55
+ }
56
+ .cui-selector__elements-list-item-selected {
57
+ color: white;
58
+ background: var(--dark-blue);
59
+ }
60
+ .cui-selector__elements-list-item-not-selected {
61
+ background: var(--light-gray-01);
62
+ color: var(--dark-blue);
63
+ }
64
+ .cui-selector__elements-list-item-description {
65
+ display: flex;
66
+ justify-content: left;
67
+ align-items: center;
68
+ }
69
+ .cui-selector__elements-list-item-option {
70
+ display: flex;
71
+ justify-content: right;
72
+ align-items: center;
73
+ }
74
+ .cui-selector__elements-list-item-option label {
75
+ margin: 0 10px;
76
+ }
77
+ .cui-selector__elements-empty {
78
+ padding: 1rem;
79
+ }
80
+ .cui-selector__selected-empty {
81
+ padding: 1rem;
82
+ }
83
+ .cui-selector__confirmation {
84
+ display: flex;
85
+ justify-content: center;
86
+ margin: 1vh 0;
87
+ }
@@ -0,0 +1,181 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { useId, useState, useEffect } from "react";
3
+ import { faSave, faMinus, faPlus, faQuestion } from "@fortawesome/free-solid-svg-icons";
4
+ import { ActionButtonThemeStyled, IconTextDarkThemeStyled, IconButtonThemeStyled, IconTextLightThemeStyled } from "../../../styles/themes/ButtonThemes.js";
5
+ import Modal from "../../molecules/Modal/Modal.js";
6
+ import SearchInput from "../../../../v1/primitives/forms/SearchInput/SearchInput.js";
7
+ import { LazyLoader } from "../LazyLoader/LazyLoader.js";
8
+ import './Selector.css';/* empty css */
9
+ import Spinner from "../../layout/Spinner/Spinner.js";
10
+ import Tooltip from "../../../../v1/components/overlays/Tooltip/Tooltip.js";
11
+ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
12
+ import ActionButton from "../../atoms/Button/variants/ActionButton.js";
13
+ import IconText from "../../atoms/IconText/IconText.js";
14
+ import IconButton from "../../atoms/Button/variants/IconButton.js";
15
+ const Selector = ({
16
+ title,
17
+ icon,
18
+ onClose,
19
+ onConfirm,
20
+ initiallySelected,
21
+ blocked = [],
22
+ fetcher,
23
+ single = false,
24
+ working = false,
25
+ onDisabled
26
+ }) => {
27
+ const scrollContainerId = useId();
28
+ const [selectedElements, setSelectedElements] = useState(initiallySelected);
29
+ const [filter, setFilter] = useState({
30
+ term: {
31
+ type: "text",
32
+ active: false,
33
+ text: ""
34
+ }
35
+ });
36
+ useEffect(() => {
37
+ setSelectedElements(initiallySelected);
38
+ }, [initiallySelected]);
39
+ const handleSearch = (text) => {
40
+ setFilter({
41
+ term: {
42
+ type: "text",
43
+ active: text != "" ? true : false,
44
+ text
45
+ }
46
+ });
47
+ };
48
+ const toggleElementSelection = (element) => {
49
+ const isSelected = selectedElements.some((se) => se.id === element.id);
50
+ if (isSelected) {
51
+ setSelectedElements(selectedElements.filter((se) => se.id !== element.id));
52
+ } else {
53
+ if (single) {
54
+ setSelectedElements([element]);
55
+ } else {
56
+ setSelectedElements([...selectedElements, element]);
57
+ }
58
+ }
59
+ };
60
+ const renderElement = (element) => {
61
+ const isSelected = selectedElements.some((se) => se.id === element.id);
62
+ const isBlocked = blocked.includes(element.id);
63
+ const isDisabled = element.disabled || false;
64
+ return /* @__PURE__ */ jsxs(
65
+ "li",
66
+ {
67
+ className: `cui-selector__elements-list-item ${isSelected ? "cui-selector__elements-list-item-selected" : "cui-selector__elements-list-item-not-selected"} ${isBlocked ? "cui-selector__elements-list-item-blocked" : ""}`,
68
+ onClick: !isBlocked && !isDisabled ? () => toggleElementSelection(element) : void 0,
69
+ children: [
70
+ /* @__PURE__ */ jsx("span", { className: "cui-selector__elements-list-item-description", children: /* @__PURE__ */ jsx(
71
+ IconText,
72
+ {
73
+ icon,
74
+ text: element.name,
75
+ theme: isSelected ? IconTextDarkThemeStyled : IconTextLightThemeStyled
76
+ }
77
+ ) }),
78
+ /* @__PURE__ */ jsxs("span", { className: "cui-selector__elements-list-item-option", children: [
79
+ element.code && /* @__PURE__ */ jsx("label", { children: element.code }),
80
+ !isBlocked && !isDisabled ? /* @__PURE__ */ jsx(
81
+ IconButton,
82
+ {
83
+ onClick: () => {
84
+ toggleElementSelection(element);
85
+ },
86
+ icon: isSelected ? faMinus : faPlus,
87
+ theme: IconButtonThemeStyled
88
+ }
89
+ ) : /* @__PURE__ */ jsx(
90
+ Tooltip,
91
+ {
92
+ interactive: true,
93
+ tip: onDisabled ? onDisabled(element) : isBlocked ? /* @__PURE__ */ jsx("div", { children: "Bloqueado..." }) : /* @__PURE__ */ jsx("div", { children: "Sem dados...." }),
94
+ children: /* @__PURE__ */ jsx(
95
+ IconButton,
96
+ {
97
+ onClick: () => {
98
+ },
99
+ icon: faQuestion,
100
+ theme: IconButtonThemeStyled,
101
+ disabled: true
102
+ }
103
+ )
104
+ }
105
+ )
106
+ ] })
107
+ ]
108
+ },
109
+ element.id
110
+ );
111
+ };
112
+ const renderSelectedElements = () => {
113
+ if (selectedElements.length === 0) {
114
+ return /* @__PURE__ */ jsx("p", { className: "cui-selector__selected-empty", children: "Sem elementos selecionados..." });
115
+ }
116
+ return /* @__PURE__ */ jsx("ul", { className: "cui-selector__selected-list", children: selectedElements.map((element) => {
117
+ const isBlocked = blocked.includes(element.id);
118
+ if (isBlocked) return null;
119
+ return /* @__PURE__ */ jsxs("li", { className: "cui-selector__selected-list-item", children: [
120
+ /* @__PURE__ */ jsx("span", { className: "cui-selector__selected-list-info", children: /* @__PURE__ */ jsx(
121
+ IconText,
122
+ {
123
+ icon,
124
+ theme: IconTextDarkThemeStyled,
125
+ text: element.name
126
+ }
127
+ ) }),
128
+ /* @__PURE__ */ jsx("span", { className: "cui-selector__selected-list-option", children: /* @__PURE__ */ jsx(
129
+ IconButton,
130
+ {
131
+ icon: faMinus,
132
+ onClick: () => setSelectedElements(
133
+ selectedElements.filter((e) => e.id !== element.id)
134
+ ),
135
+ theme: IconButtonThemeStyled
136
+ }
137
+ ) })
138
+ ] }, element.id);
139
+ }) });
140
+ };
141
+ const handleConfirm = () => {
142
+ onConfirm(selectedElements);
143
+ };
144
+ return /* @__PURE__ */ jsx(Modal, { title, onClose, children: /* @__PURE__ */ jsxs("div", { className: "cui-selector", children: [
145
+ /* @__PURE__ */ jsx("div", { className: "cui-selector__search", children: /* @__PURE__ */ jsx(SearchInput, { value: filter.term.text, onChange: handleSearch, className: "w-full" }) }),
146
+ /* @__PURE__ */ jsx("div", { className: "cui-selector__selected", children: renderSelectedElements() }),
147
+ /* @__PURE__ */ jsx("div", { id: scrollContainerId, className: "cui-selector__elements", children: /* @__PURE__ */ jsx(
148
+ LazyLoader,
149
+ {
150
+ endpoint: fetcher.endpoint,
151
+ params: {
152
+ filters: {
153
+ ...fetcher.params,
154
+ ...filter.term.active && {
155
+ term: {
156
+ type: filter.term.type,
157
+ text: filter.term.text
158
+ }
159
+ }
160
+ }
161
+ },
162
+ limit: 15,
163
+ scrollableTarget: scrollContainerId,
164
+ children: (items, loading, error) => /* @__PURE__ */ jsx("ul", { className: "cui-selector__elements-list", children: items.length > 0 ? items.map((element) => renderElement(element)) : /* @__PURE__ */ jsx("li", { className: "cui-selector__elements-empty", children: "No elements found" }) })
165
+ }
166
+ ) }),
167
+ /* @__PURE__ */ jsx("div", { className: "cui-selector__confirmation", children: !working ? /* @__PURE__ */ jsx(
168
+ ActionButton,
169
+ {
170
+ title: "Confirmar",
171
+ icon: /* @__PURE__ */ jsx(FontAwesomeIcon, { icon: faSave }),
172
+ onClick: handleConfirm,
173
+ theme: ActionButtonThemeStyled
174
+ }
175
+ ) : /* @__PURE__ */ jsx(Spinner, {}) })
176
+ ] }) });
177
+ };
178
+ export {
179
+ Selector
180
+ };
181
+ //# sourceMappingURL=Selector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Selector.js","sources":["../../../../../../src/legacy/components/organisms/Selector/Selector.tsx"],"sourcesContent":["import React, { ReactNode, useEffect, useId, useState } from 'react'\r\nimport {\r\n faMinus,\r\n faPlus,\r\n faQuestion,\r\n faSave,\r\n} from '@fortawesome/free-solid-svg-icons'\r\nimport { IconProp } from '@fortawesome/fontawesome-svg-core'\r\nimport { ActionButton, IconText, IconButton } from '../../../exports/atoms'\r\nimport {\r\n ActionButtonThemeStyled,\r\n IconButtonThemeStyled,\r\n IconTextDarkThemeStyled,\r\n IconTextLightThemeStyled,\r\n} from '../../../styles/themes/ButtonThemes'\r\n\r\nimport Modal from '../../molecules/Modal/Modal'\r\nimport SearchInput from '../../../../v1/primitives/forms/SearchInput/SearchInput'\r\nimport { Fetcher } from '../../../types/Fetcher'\r\nimport { LazyLoader } from '../LazyLoader/LazyLoader'\r\nimport './Selector.scss'\r\nimport { SelectableElement } from '../../../types/SelectableElement'\r\nimport Spinner from '../../layout/Spinner/Spinner'\r\nimport TooltipWrapper from '../../../../v1/components/overlays/Tooltip/Tooltip'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\ntype SelectorProps<T extends SelectableElement> = {\r\n title: string\r\n onClose: () => void\r\n onConfirm: (selected: T[]) => void\r\n onDisabled?: (disabled: T) => ReactNode\r\n initiallySelected: T[]\r\n blocked?: string[]\r\n single?: boolean\r\n icon: IconProp\r\n fetcher: Fetcher\r\n working?: boolean\r\n}\r\n\r\n/** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */\r\nexport const Selector = <T extends SelectableElement>({\r\n title,\r\n icon,\r\n onClose,\r\n onConfirm,\r\n initiallySelected,\r\n blocked = [],\r\n fetcher,\r\n single = false,\r\n working = false,\r\n onDisabled,\r\n}: SelectorProps<T>) => {\r\n const scrollContainerId = useId()\r\n const [selectedElements, setSelectedElements] =\r\n useState<T[]>(initiallySelected)\r\n\r\n const [filter, setFilter] = useState({\r\n term: {\r\n type: 'text',\r\n active: false,\r\n text: '',\r\n },\r\n })\r\n\r\n useEffect(() => {\r\n setSelectedElements(initiallySelected)\r\n }, [initiallySelected])\r\n\r\n const handleSearch = (text: string) => {\r\n setFilter({\r\n term: {\r\n type: 'text',\r\n active: text != '' ? true : false,\r\n text: text,\r\n },\r\n })\r\n }\r\n\r\n const toggleElementSelection = (element: T) => {\r\n const isSelected = selectedElements.some((se) => se.id === element.id)\r\n\r\n if (isSelected) {\r\n setSelectedElements(selectedElements.filter((se) => se.id !== element.id))\r\n } else {\r\n if (single) {\r\n setSelectedElements([element])\r\n } else {\r\n setSelectedElements([...selectedElements, element])\r\n }\r\n }\r\n }\r\n\r\n const renderElement = (element: T) => {\r\n const isSelected = selectedElements.some((se) => se.id === element.id)\r\n const isBlocked = blocked.includes(element.id)\r\n const isDisabled = element.disabled || false\r\n\r\n return (\r\n <li\r\n key={element.id}\r\n className={`cui-selector__elements-list-item ${\r\n isSelected\r\n ? 'cui-selector__elements-list-item-selected'\r\n : 'cui-selector__elements-list-item-not-selected'\r\n } ${isBlocked ? 'cui-selector__elements-list-item-blocked' : ''}`}\r\n onClick={\r\n !isBlocked && !isDisabled\r\n ? () => toggleElementSelection(element)\r\n : undefined\r\n }\r\n >\r\n <span className={'cui-selector__elements-list-item-description'}>\r\n <IconText\r\n icon={icon}\r\n text={element.name}\r\n theme={\r\n isSelected ? IconTextDarkThemeStyled : IconTextLightThemeStyled\r\n }\r\n />\r\n </span>\r\n <span className={'cui-selector__elements-list-item-option'}>\r\n {element.code && <label>{element.code}</label>}\r\n {!isBlocked && !isDisabled ? (\r\n <IconButton\r\n onClick={() => {\r\n toggleElementSelection(element)\r\n }}\r\n icon={isSelected ? faMinus : faPlus}\r\n theme={IconButtonThemeStyled}\r\n />\r\n ) : (\r\n <TooltipWrapper\r\n interactive={true}\r\n tip={\r\n onDisabled ? (\r\n onDisabled(element)\r\n ) : isBlocked ? (\r\n <div>Bloqueado...</div>\r\n ) : (\r\n <div>Sem dados....</div>\r\n )\r\n }\r\n >\r\n <IconButton\r\n onClick={() => {}}\r\n icon={faQuestion}\r\n theme={IconButtonThemeStyled}\r\n disabled={true}\r\n />\r\n </TooltipWrapper>\r\n )}\r\n </span>\r\n </li>\r\n )\r\n }\r\n\r\n const renderSelectedElements = () => {\r\n if (selectedElements.length === 0) {\r\n return (\r\n <p className=\"cui-selector__selected-empty\">\r\n Sem elementos selecionados...\r\n </p>\r\n )\r\n }\r\n\r\n return (\r\n <ul className=\"cui-selector__selected-list\">\r\n {selectedElements.map((element) => {\r\n const isBlocked = blocked.includes(element.id)\r\n\r\n if (isBlocked) return null\r\n\r\n return (\r\n <li key={element.id} className=\"cui-selector__selected-list-item\">\r\n <span className={'cui-selector__selected-list-info'}>\r\n <IconText\r\n icon={icon}\r\n theme={IconTextDarkThemeStyled}\r\n text={element.name}\r\n />\r\n </span>\r\n <span className={'cui-selector__selected-list-option'}>\r\n <IconButton\r\n icon={faMinus}\r\n onClick={() =>\r\n setSelectedElements(\r\n selectedElements.filter((e) => e.id !== element.id)\r\n )\r\n }\r\n theme={IconButtonThemeStyled}\r\n />\r\n </span>\r\n </li>\r\n )\r\n })}\r\n </ul>\r\n )\r\n }\r\n\r\n const handleConfirm = () => {\r\n onConfirm(selectedElements)\r\n }\r\n\r\n return (\r\n <Modal title={title} onClose={onClose}>\r\n <div className=\"cui-selector\">\r\n <div className=\"cui-selector__search\">\r\n <SearchInput value={filter.term.text} onChange={handleSearch} className=\"w-full\" />\r\n </div>\r\n\r\n <div className=\"cui-selector__selected\">{renderSelectedElements()}</div>\r\n\r\n <div id={scrollContainerId} className=\"cui-selector__elements\">\r\n <LazyLoader<T>\r\n endpoint={fetcher.endpoint}\r\n params={{\r\n filters: {\r\n ...fetcher.params,\r\n ...(filter.term.active && {\r\n term: {\r\n type: filter.term.type,\r\n text: filter.term.text,\r\n },\r\n }),\r\n },\r\n }}\r\n limit={15}\r\n scrollableTarget={scrollContainerId}\r\n >\r\n {(items, loading, error) => (\r\n <ul className=\"cui-selector__elements-list\">\r\n {items.length > 0 ? (\r\n items.map((element) => renderElement(element))\r\n ) : (\r\n <li className=\"cui-selector__elements-empty\">\r\n No elements found\r\n </li>\r\n )}\r\n </ul>\r\n )}\r\n </LazyLoader>\r\n </div>\r\n\r\n <div className=\"cui-selector__confirmation\">\r\n {!working ? (\r\n <ActionButton\r\n title=\"Confirmar\"\r\n icon={<FontAwesomeIcon icon={faSave} />}\r\n onClick={handleConfirm}\r\n theme={ActionButtonThemeStyled}\r\n />\r\n ) : (\r\n <Spinner />\r\n )}\r\n </div>\r\n </div>\r\n </Modal>\r\n )\r\n}\r\n"],"names":["TooltipWrapper"],"mappings":";;;;;;;;;;;;;;AAwCO,MAAM,WAAW,CAA8B;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU,CAAA;AAAA,EACV;AAAA,EACA,SAAS;AAAA,EACT,UAAU;AAAA,EACV;AACF,MAAwB;AACtB,QAAM,oBAAoB,MAAA;AAC1B,QAAM,CAAC,kBAAkB,mBAAmB,IAC1C,SAAc,iBAAiB;AAEjC,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS;AAAA,IACnC,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,MAAM;AAAA,IAAA;AAAA,EACR,CACD;AAED,YAAU,MAAM;AACd,wBAAoB,iBAAiB;AAAA,EACvC,GAAG,CAAC,iBAAiB,CAAC;AAEtB,QAAM,eAAe,CAAC,SAAiB;AACrC,cAAU;AAAA,MACR,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,QAAQ,QAAQ,KAAK,OAAO;AAAA,QAC5B;AAAA,MAAA;AAAA,IACF,CACD;AAAA,EACH;AAEA,QAAM,yBAAyB,CAAC,YAAe;AAC7C,UAAM,aAAa,iBAAiB,KAAK,CAAC,OAAO,GAAG,OAAO,QAAQ,EAAE;AAErE,QAAI,YAAY;AACd,0BAAoB,iBAAiB,OAAO,CAAC,OAAO,GAAG,OAAO,QAAQ,EAAE,CAAC;AAAA,IAC3E,OAAO;AACL,UAAI,QAAQ;AACV,4BAAoB,CAAC,OAAO,CAAC;AAAA,MAC/B,OAAO;AACL,4BAAoB,CAAC,GAAG,kBAAkB,OAAO,CAAC;AAAA,MACpD;AAAA,IACF;AAAA,EACF;AAEA,QAAM,gBAAgB,CAAC,YAAe;AACpC,UAAM,aAAa,iBAAiB,KAAK,CAAC,OAAO,GAAG,OAAO,QAAQ,EAAE;AACrE,UAAM,YAAY,QAAQ,SAAS,QAAQ,EAAE;AAC7C,UAAM,aAAa,QAAQ,YAAY;AAEvC,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAW,oCACT,aACI,8CACA,+CACN,IAAI,YAAY,6CAA6C,EAAE;AAAA,QAC/D,SACE,CAAC,aAAa,CAAC,aACX,MAAM,uBAAuB,OAAO,IACpC;AAAA,QAGN,UAAA;AAAA,UAAA,oBAAC,QAAA,EAAK,WAAW,gDACf,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC;AAAA,cACA,MAAM,QAAQ;AAAA,cACd,OACE,aAAa,0BAA0B;AAAA,YAAA;AAAA,UAAA,GAG7C;AAAA,UACA,qBAAC,QAAA,EAAK,WAAW,2CACd,UAAA;AAAA,YAAA,QAAQ,QAAQ,oBAAC,SAAA,EAAO,UAAA,QAAQ,MAAK;AAAA,YACrC,CAAC,aAAa,CAAC,aACd;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,SAAS,MAAM;AACb,yCAAuB,OAAO;AAAA,gBAChC;AAAA,gBACA,MAAM,aAAa,UAAU;AAAA,gBAC7B,OAAO;AAAA,cAAA;AAAA,YAAA,IAGT;AAAA,cAACA;AAAAA,cAAA;AAAA,gBACC,aAAa;AAAA,gBACb,KACE,aACE,WAAW,OAAO,IAChB,YACF,oBAAC,OAAA,EAAI,UAAA,eAAA,CAAY,IAEjB,oBAAC,OAAA,EAAI,UAAA,iBAAa;AAAA,gBAItB,UAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,SAAS,MAAM;AAAA,oBAAC;AAAA,oBAChB,MAAM;AAAA,oBACN,OAAO;AAAA,oBACP,UAAU;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACZ;AAAA,YAAA;AAAA,UACF,EAAA,CAEJ;AAAA,QAAA;AAAA,MAAA;AAAA,MApDK,QAAQ;AAAA,IAAA;AAAA,EAuDnB;AAEA,QAAM,yBAAyB,MAAM;AACnC,QAAI,iBAAiB,WAAW,GAAG;AACjC,aACE,oBAAC,KAAA,EAAE,WAAU,gCAA+B,UAAA,iCAE5C;AAAA,IAEJ;AAEA,+BACG,MAAA,EAAG,WAAU,+BACX,UAAA,iBAAiB,IAAI,CAAC,YAAY;AACjC,YAAM,YAAY,QAAQ,SAAS,QAAQ,EAAE;AAE7C,UAAI,UAAW,QAAO;AAEtB,aACE,qBAAC,MAAA,EAAoB,WAAU,oCAC7B,UAAA;AAAA,QAAA,oBAAC,QAAA,EAAK,WAAW,oCACf,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC;AAAA,YACA,OAAO;AAAA,YACP,MAAM,QAAQ;AAAA,UAAA;AAAA,QAAA,GAElB;AAAA,QACA,oBAAC,QAAA,EAAK,WAAW,sCACf,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAM;AAAA,YACN,SAAS,MACP;AAAA,cACE,iBAAiB,OAAO,CAAC,MAAM,EAAE,OAAO,QAAQ,EAAE;AAAA,YAAA;AAAA,YAGtD,OAAO;AAAA,UAAA;AAAA,QAAA,EACT,CACF;AAAA,MAAA,EAAA,GAlBO,QAAQ,EAmBjB;AAAA,IAEJ,CAAC,EAAA,CACH;AAAA,EAEJ;AAEA,QAAM,gBAAgB,MAAM;AAC1B,cAAU,gBAAgB;AAAA,EAC5B;AAEA,6BACG,OAAA,EAAM,OAAc,SACnB,UAAA,qBAAC,OAAA,EAAI,WAAU,gBACb,UAAA;AAAA,IAAA,oBAAC,OAAA,EAAI,WAAU,wBACb,UAAA,oBAAC,aAAA,EAAY,OAAO,OAAO,KAAK,MAAM,UAAU,cAAc,WAAU,UAAS,GACnF;AAAA,IAEA,oBAAC,OAAA,EAAI,WAAU,0BAA0B,oCAAyB;AAAA,IAElE,oBAAC,OAAA,EAAI,IAAI,mBAAmB,WAAU,0BACpC,UAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,UAAU,QAAQ;AAAA,QAClB,QAAQ;AAAA,UACN,SAAS;AAAA,YACP,GAAG,QAAQ;AAAA,YACX,GAAI,OAAO,KAAK,UAAU;AAAA,cACxB,MAAM;AAAA,gBACJ,MAAM,OAAO,KAAK;AAAA,gBAClB,MAAM,OAAO,KAAK;AAAA,cAAA;AAAA,YACpB;AAAA,UACF;AAAA,QACF;AAAA,QAEF,OAAO;AAAA,QACP,kBAAkB;AAAA,QAEjB,UAAA,CAAC,OAAO,SAAS,UAChB,oBAAC,QAAG,WAAU,+BACX,UAAA,MAAM,SAAS,IACd,MAAM,IAAI,CAAC,YAAY,cAAc,OAAO,CAAC,wBAE5C,MAAA,EAAG,WAAU,gCAA+B,UAAA,oBAAA,CAE7C,EAAA,CAEJ;AAAA,MAAA;AAAA,IAAA,GAGN;AAAA,IAEA,oBAAC,OAAA,EAAI,WAAU,8BACZ,WAAC,UACA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACN,MAAM,oBAAC,iBAAA,EAAgB,MAAM,OAAA,CAAQ;AAAA,QACrC,SAAS;AAAA,QACT,OAAO;AAAA,MAAA;AAAA,IAAA,IAGT,oBAAC,SAAA,CAAA,CAAQ,EAAA,CAEb;AAAA,EAAA,EAAA,CACF,EAAA,CACF;AAEJ;"}
@@ -0,0 +1,115 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { useState, useMemo } from "react";
3
+ const alturaAutomatica = (labels) => Math.min(260, Math.max(64, Math.ceil(Math.max(0, ...labels.map((l) => l.length)) * 6.2) + 12));
4
+ function StatusMatrix({
5
+ rows,
6
+ columns,
7
+ statuses,
8
+ cell,
9
+ cellSize = 22,
10
+ labelWidth = 280,
11
+ corner = "",
12
+ showLegend = true,
13
+ onCellClick,
14
+ emptyText = "—",
15
+ className = "",
16
+ columnHeaderHeight
17
+ }) {
18
+ const [tip, setTip] = useState(null);
19
+ const largura = columns.length * cellSize;
20
+ const ALTURA_CAB_COLUNA = useMemo(() => columnHeaderHeight ?? alturaAutomatica(columns.map((c) => c.label)), [columnHeaderHeight, columns]);
21
+ const faixas = useMemo(() => {
22
+ const out = [];
23
+ columns.forEach((c, i) => {
24
+ const g = c.group ?? "";
25
+ const ult = out[out.length - 1];
26
+ if (ult && ult.group === g) ult.n++;
27
+ else out.push({ group: g, start: i, n: 1 });
28
+ });
29
+ return out;
30
+ }, [columns]);
31
+ const temGrupos = faixas.some((f) => f.group);
32
+ const mostrarTip = (e, content) => {
33
+ if (!content) return;
34
+ setTip({ x: e.clientX + 12, y: e.clientY + 12, content });
35
+ };
36
+ const linhas = [];
37
+ let grupoAtual;
38
+ for (const row of rows) {
39
+ if (row.group && row.group !== grupoAtual) {
40
+ grupoAtual = row.group;
41
+ linhas.push(
42
+ /* @__PURE__ */ jsxs("div", { className: "flex border-b border-slate-200 bg-slate-50", children: [
43
+ /* @__PURE__ */ jsx("div", { className: "sticky left-0 z-[2] shrink-0 border-r border-slate-200 bg-slate-50 px-2 py-1 text-[11px] font-bold uppercase tracking-wide text-slate-500", style: { width: labelWidth }, children: row.group }),
44
+ /* @__PURE__ */ jsx("div", { className: "shrink-0", style: { width: largura } })
45
+ ] }, `g-${row.group}-${row.id}`)
46
+ );
47
+ }
48
+ linhas.push(
49
+ /* @__PURE__ */ jsxs("div", { className: "group flex border-b border-slate-200 hover:bg-blue-50/60", style: { height: cellSize }, children: [
50
+ /* @__PURE__ */ jsxs("div", { className: "sticky left-0 z-[2] shrink-0 truncate border-r border-slate-200 bg-white px-2 leading-[22px] group-hover:bg-blue-50", style: { width: labelWidth, lineHeight: `${cellSize}px` }, title: row.label, children: [
51
+ row.label,
52
+ row.sublabel && /* @__PURE__ */ jsx("span", { className: "ml-1 text-[11px] text-slate-400", children: row.sublabel })
53
+ ] }),
54
+ /* @__PURE__ */ jsx("div", { className: "relative flex shrink-0", style: { width: largura }, children: columns.map((col) => {
55
+ const c = cell(row, col);
56
+ const st = c?.status ? statuses[c.status] : void 0;
57
+ return /* @__PURE__ */ jsxs(
58
+ "div",
59
+ {
60
+ className: `relative shrink-0 border-r border-slate-100 ${onCellClick ? "cursor-pointer" : ""}`,
61
+ style: { width: cellSize, height: cellSize - 1 },
62
+ onMouseMove: (e) => mostrarTip(e, c?.tooltip ?? `${row.label} · ${col.label}${st ? ` · ${st.label}` : ""}`),
63
+ onMouseLeave: () => setTip(null),
64
+ onClick: onCellClick ? () => onCellClick(row, col) : void 0,
65
+ children: [
66
+ st && /* @__PURE__ */ jsx("div", { className: "absolute inset-[2px] flex items-center justify-center rounded-sm text-[10px] font-semibold text-white", style: { background: st.color }, children: c?.text }),
67
+ c?.warning && /* @__PURE__ */ jsx("span", { className: "absolute right-[1px] top-[1px] h-[6px] w-[6px] rounded-full border border-white bg-orange-500" })
68
+ ]
69
+ },
70
+ col.id
71
+ );
72
+ }) })
73
+ ] }, row.id)
74
+ );
75
+ }
76
+ return /* @__PURE__ */ jsxs("div", { className, children: [
77
+ showLegend && /* @__PURE__ */ jsx("div", { className: "mb-2 flex flex-wrap gap-3 text-xs text-slate-500", children: Object.entries(statuses).map(([k, s]) => /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1", children: [
78
+ /* @__PURE__ */ jsx("i", { className: "inline-block h-2.5 w-2.5 rounded-sm", style: { background: s.color } }),
79
+ s.label
80
+ ] }, k)) }),
81
+ /* @__PURE__ */ jsx("div", { className: "max-h-[calc(100vh-220px)] overflow-auto rounded-lg border border-slate-200 bg-white text-[13px]", children: /* @__PURE__ */ jsxs("div", { className: "w-max min-w-full", children: [
82
+ /* @__PURE__ */ jsxs("div", { className: "sticky top-0 z-[3] flex border-b border-slate-200 bg-white", children: [
83
+ /* @__PURE__ */ jsx("div", { className: "sticky left-0 z-[4] flex shrink-0 items-end border-r border-slate-200 bg-white px-2 py-2 font-semibold", style: { width: labelWidth }, children: corner }),
84
+ /* @__PURE__ */ jsxs("div", { className: "relative shrink-0 bg-white", style: { width: largura, height: ALTURA_CAB_COLUNA + (temGrupos ? 20 : 0) }, children: [
85
+ temGrupos && faixas.map((f) => /* @__PURE__ */ jsx(
86
+ "div",
87
+ {
88
+ className: "absolute top-0 h-5 truncate border-l border-slate-200 px-1 text-[11px] font-bold uppercase tracking-wide text-slate-500",
89
+ style: { left: f.start * cellSize, width: f.n * cellSize },
90
+ title: f.group,
91
+ children: f.group
92
+ },
93
+ `${f.group}-${f.start}`
94
+ )),
95
+ columns.map((c, i) => /* @__PURE__ */ jsx(
96
+ "div",
97
+ {
98
+ className: "absolute bottom-1 flex justify-center text-[10px] text-slate-500",
99
+ style: { left: i * cellSize, width: cellSize, height: ALTURA_CAB_COLUNA - 4 },
100
+ title: c.label,
101
+ children: /* @__PURE__ */ jsx("span", { className: "whitespace-nowrap", style: { writingMode: "vertical-rl", transform: "rotate(180deg)" }, children: c.label })
102
+ },
103
+ c.id
104
+ ))
105
+ ] })
106
+ ] }),
107
+ rows.length && columns.length ? linhas : /* @__PURE__ */ jsx("div", { className: "p-6 text-center text-sm text-slate-400", children: emptyText })
108
+ ] }) }),
109
+ tip && /* @__PURE__ */ jsx("div", { className: "pointer-events-none fixed z-50 max-w-[340px] rounded-md bg-slate-900 px-2 py-1.5 text-xs text-white shadow-lg", style: { left: tip.x, top: tip.y }, children: tip.content })
110
+ ] });
111
+ }
112
+ export {
113
+ StatusMatrix as default
114
+ };
115
+ //# sourceMappingURL=StatusMatrix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusMatrix.js","sources":["../../../../../../src/legacy/components/organisms/StatusMatrix/StatusMatrix.tsx"],"sourcesContent":["import React, { useMemo, useState } from 'react'\r\n\r\n// Matriz de estados: linhas × colunas, cada célula pintada com a cor do seu estado\r\n// (ex.: tarefas × apoios — vazio / em curso / concluído). Cabeçalho e 1.ª coluna fixos,\r\n// grupos de linhas (cabeçalho de secção) e de colunas (faixa por cima), tooltip por célula.\r\n\r\n/** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */\r\nexport interface StatusMatrixRow {\r\n id: string\r\n label: string\r\n /** Cabeçalho de secção mostrado antes da linha quando muda (ex: \"Fundações\"). */\r\n group?: string\r\n /** Texto pequeno à direita do rótulo (ex: \"12/40\"). */\r\n sublabel?: string\r\n}\r\n\r\n/** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */\r\nexport interface StatusMatrixColumn {\r\n id: string\r\n label: string\r\n /** Faixa por cima das colunas consecutivas com o mesmo grupo (ex: \"Ramal 1\"). */\r\n group?: string\r\n}\r\n\r\n/** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */\r\nexport interface StatusMatrixStatus {\r\n label: string\r\n /** Cor da célula (CSS). */\r\n color: string\r\n}\r\n\r\n/** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */\r\nexport interface StatusMatrixCell {\r\n /** Chave em `statuses`. Sem estado = célula vazia. */\r\n status?: string\r\n /** Texto curto dentro da célula (ex: nº de dias). */\r\n text?: string\r\n tooltip?: React.ReactNode\r\n /** Mostra um ponto de aviso no canto da célula. */\r\n warning?: boolean\r\n}\r\n\r\n/** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */\r\nexport interface StatusMatrixProps {\r\n rows: StatusMatrixRow[]\r\n columns: StatusMatrixColumn[]\r\n statuses: Record<string, StatusMatrixStatus>\r\n /** Conteúdo de cada célula; null/undefined = vazia. */\r\n cell: (row: StatusMatrixRow, column: StatusMatrixColumn) => StatusMatrixCell | null | undefined\r\n cellSize?: number\r\n labelWidth?: number\r\n /** Texto do canto superior esquerdo (ex: \"Tarefa \\ Apoio\"). */\r\n corner?: string\r\n /** Mostra a legenda dos estados por cima da matriz. */\r\n showLegend?: boolean\r\n onCellClick?: (row: StatusMatrixRow, column: StatusMatrixColumn) => void\r\n emptyText?: string\r\n className?: string\r\n /** Altura (px) do cabeçalho das colunas (rótulos verticais). Omisso = automática pelo rótulo mais comprido (64–260). */\r\n columnHeaderHeight?: number\r\n}\r\n\r\n// ~6 px por carácter a 10 px de letra, na vertical\r\nconst alturaAutomatica = (labels: string[]) => Math.min(260, Math.max(64, Math.ceil(Math.max(0, ...labels.map((l) => l.length)) * 6.2) + 12))\r\n\r\n/** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */\r\nexport default function StatusMatrix({\r\n rows,\r\n columns,\r\n statuses,\r\n cell,\r\n cellSize = 22,\r\n labelWidth = 280,\r\n corner = '',\r\n showLegend = true,\r\n onCellClick,\r\n emptyText = '—',\r\n className = '',\r\n columnHeaderHeight,\r\n}: StatusMatrixProps) {\r\n const [tip, setTip] = useState<{ x: number; y: number; content: React.ReactNode } | null>(null)\r\n const largura = columns.length * cellSize\r\n const ALTURA_CAB_COLUNA = useMemo(() => columnHeaderHeight ?? alturaAutomatica(columns.map((c) => c.label)), [columnHeaderHeight, columns])\r\n\r\n // Faixas de grupo das colunas (colunas consecutivas com o mesmo grupo)\r\n const faixas = useMemo(() => {\r\n const out: { group: string; start: number; n: number }[] = []\r\n columns.forEach((c, i) => {\r\n const g = c.group ?? ''\r\n const ult = out[out.length - 1]\r\n if (ult && ult.group === g) ult.n++\r\n else out.push({ group: g, start: i, n: 1 })\r\n })\r\n return out\r\n }, [columns])\r\n const temGrupos = faixas.some((f) => f.group)\r\n\r\n const mostrarTip = (e: React.MouseEvent, content: React.ReactNode) => {\r\n if (!content) return\r\n setTip({ x: e.clientX + 12, y: e.clientY + 12, content })\r\n }\r\n\r\n const linhas: React.ReactNode[] = []\r\n let grupoAtual: string | undefined\r\n for (const row of rows) {\r\n if (row.group && row.group !== grupoAtual) {\r\n grupoAtual = row.group\r\n linhas.push(\r\n <div key={`g-${row.group}-${row.id}`} className=\"flex border-b border-slate-200 bg-slate-50\">\r\n <div className=\"sticky left-0 z-[2] shrink-0 border-r border-slate-200 bg-slate-50 px-2 py-1 text-[11px] font-bold uppercase tracking-wide text-slate-500\" style={{ width: labelWidth }}>\r\n {row.group}\r\n </div>\r\n <div className=\"shrink-0\" style={{ width: largura }} />\r\n </div>\r\n )\r\n }\r\n linhas.push(\r\n <div key={row.id} className=\"group flex border-b border-slate-200 hover:bg-blue-50/60\" style={{ height: cellSize }}>\r\n <div className=\"sticky left-0 z-[2] shrink-0 truncate border-r border-slate-200 bg-white px-2 leading-[22px] group-hover:bg-blue-50\" style={{ width: labelWidth, lineHeight: `${cellSize}px` }} title={row.label}>\r\n {row.label}\r\n {row.sublabel && <span className=\"ml-1 text-[11px] text-slate-400\">{row.sublabel}</span>}\r\n </div>\r\n <div className=\"relative flex shrink-0\" style={{ width: largura }}>\r\n {columns.map((col) => {\r\n const c = cell(row, col)\r\n const st = c?.status ? statuses[c.status] : undefined\r\n return (\r\n <div\r\n key={col.id}\r\n className={`relative shrink-0 border-r border-slate-100 ${onCellClick ? 'cursor-pointer' : ''}`}\r\n style={{ width: cellSize, height: cellSize - 1 }}\r\n onMouseMove={(e) => mostrarTip(e, c?.tooltip ?? `${row.label} · ${col.label}${st ? ` · ${st.label}` : ''}`)}\r\n onMouseLeave={() => setTip(null)}\r\n onClick={onCellClick ? () => onCellClick(row, col) : undefined}\r\n >\r\n {st && (\r\n <div className=\"absolute inset-[2px] flex items-center justify-center rounded-sm text-[10px] font-semibold text-white\" style={{ background: st.color }}>\r\n {c?.text}\r\n </div>\r\n )}\r\n {c?.warning && <span className=\"absolute right-[1px] top-[1px] h-[6px] w-[6px] rounded-full border border-white bg-orange-500\" />}\r\n </div>\r\n )\r\n })}\r\n </div>\r\n </div>\r\n )\r\n }\r\n\r\n return (\r\n <div className={className}>\r\n {showLegend && (\r\n <div className=\"mb-2 flex flex-wrap gap-3 text-xs text-slate-500\">\r\n {Object.entries(statuses).map(([k, s]) => (\r\n <span key={k} className=\"inline-flex items-center gap-1\">\r\n <i className=\"inline-block h-2.5 w-2.5 rounded-sm\" style={{ background: s.color }} />\r\n {s.label}\r\n </span>\r\n ))}\r\n </div>\r\n )}\r\n <div className=\"max-h-[calc(100vh-220px)] overflow-auto rounded-lg border border-slate-200 bg-white text-[13px]\">\r\n {/* w-max: cabeçalho e linhas com a largura total do conteúdo — sem isto o fundo do cabeçalho\r\n fixo só cobria a parte visível e, ao rolar na horizontal, as células passavam por cima */}\r\n <div className=\"w-max min-w-full\">\r\n {/* Cabeçalho: grupos de colunas + rótulos verticais */}\r\n <div className=\"sticky top-0 z-[3] flex border-b border-slate-200 bg-white\">\r\n <div className=\"sticky left-0 z-[4] flex shrink-0 items-end border-r border-slate-200 bg-white px-2 py-2 font-semibold\" style={{ width: labelWidth }}>\r\n {corner}\r\n </div>\r\n <div className=\"relative shrink-0 bg-white\" style={{ width: largura, height: ALTURA_CAB_COLUNA + (temGrupos ? 20 : 0) }}>\r\n {temGrupos &&\r\n faixas.map((f) => (\r\n <div\r\n key={`${f.group}-${f.start}`}\r\n className=\"absolute top-0 h-5 truncate border-l border-slate-200 px-1 text-[11px] font-bold uppercase tracking-wide text-slate-500\"\r\n style={{ left: f.start * cellSize, width: f.n * cellSize }}\r\n title={f.group}\r\n >\r\n {f.group}\r\n </div>\r\n ))}\r\n {columns.map((c, i) => (\r\n <div\r\n key={c.id}\r\n className=\"absolute bottom-1 flex justify-center text-[10px] text-slate-500\"\r\n style={{ left: i * cellSize, width: cellSize, height: ALTURA_CAB_COLUNA - 4 }}\r\n title={c.label}\r\n >\r\n <span className=\"whitespace-nowrap\" style={{ writingMode: 'vertical-rl', transform: 'rotate(180deg)' }}>\r\n {c.label}\r\n </span>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n {rows.length && columns.length ? linhas : <div className=\"p-6 text-center text-sm text-slate-400\">{emptyText}</div>}\r\n </div>\r\n </div>\r\n {tip && (\r\n <div className=\"pointer-events-none fixed z-50 max-w-[340px] rounded-md bg-slate-900 px-2 py-1.5 text-xs text-white shadow-lg\" style={{ left: tip.x, top: tip.y }}>\r\n {tip.content}\r\n </div>\r\n )}\r\n </div>\r\n )\r\n}\r\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { useMemo } from "react";
3
+ import ToastProvider, { useToast } from "../../../v1/components/feedback/Toast/Toast.js";
4
+ const opcoesV1 = (o = {}) => ({
5
+ duration: o.duracao,
6
+ action: o.acao && { label: o.acao.rotulo, onClick: o.acao.onClick }
7
+ });
8
+ function AvisosProvider({ children, rotuloFechar = "Fechar aviso", maximo = 4 }) {
9
+ return /* @__PURE__ */ jsx(ToastProvider, { closeLabel: rotuloFechar, max: maximo, children });
10
+ }
11
+ function useAvisos() {
12
+ let toast;
13
+ try {
14
+ toast = useToast();
15
+ } catch {
16
+ throw new Error("useAvisos tem de ser usado dentro de um <AvisosProvider>.");
17
+ }
18
+ return useMemo(
19
+ () => ({
20
+ sucesso: (m, o) => toast.success(m, opcoesV1(o)),
21
+ erro: (m, o) => toast.error(m, opcoesV1(o)),
22
+ aviso: (m, o) => toast.warning(m, opcoesV1(o)),
23
+ info: (m, o) => toast.info(m, opcoesV1(o)),
24
+ fechar: toast.dismiss
25
+ }),
26
+ [toast]
27
+ );
28
+ }
29
+ export {
30
+ AvisosProvider,
31
+ useAvisos
32
+ };
33
+ //# sourceMappingURL=Avisos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Avisos.js","sources":["../../../../../src/legacy/components/ui/Avisos.tsx"],"sourcesContent":["import React, { useMemo, type ReactNode } from 'react'\r\nimport ToastProvider, { useToast, type ToastOptions } from '../../../v1/components/feedback/Toast/Toast'\r\n\r\n/*\r\n * Migrado para o V1: os avisos são o `ToastProvider` / `useToast` do V1. Este\r\n * ficheiro só traduz a API antiga (em português) para a nova, para as apps que\r\n * ainda a usam continuarem a funcionar sem mudanças.\r\n */\r\n\r\n/** @deprecated Legacy — usar `useToast` do V1. */\r\nexport type TipoAviso = 'sucesso' | 'erro' | 'aviso' | 'info'\r\n\r\n/** @deprecated Legacy — usar `ToastOptions` do V1. */\r\nexport interface OpcoesAviso {\r\n /** Botão no aviso (ex: \"Tentar de novo\", \"Desfazer\"). */\r\n acao?: { rotulo: string; onClick: () => void }\r\n /** Milissegundos até fechar sozinho. 0 = só fecha à mão. */\r\n duracao?: number\r\n}\r\n\r\n/** @deprecated Legacy — usar `ToastApi` do V1. */\r\nexport interface AvisosApi {\r\n sucesso: (mensagem: ReactNode, opcoes?: OpcoesAviso) => number\r\n erro: (mensagem: ReactNode, opcoes?: OpcoesAviso) => number\r\n aviso: (mensagem: ReactNode, opcoes?: OpcoesAviso) => number\r\n info: (mensagem: ReactNode, opcoes?: OpcoesAviso) => number\r\n fechar: (id: number) => void\r\n}\r\n\r\n/** @deprecated Legacy — usar `ToastProviderProps` do V1. */\r\nexport interface AvisosProviderProps {\r\n children: ReactNode\r\n /** Rótulo do botão de fechar (leitores de ecrã). */\r\n rotuloFechar?: string\r\n /** Máximo de avisos visíveis ao mesmo tempo; os mais antigos saem. */\r\n maximo?: number\r\n}\r\n\r\nconst opcoesV1 = (o: OpcoesAviso = {}): ToastOptions => ({\r\n duration: o.duracao,\r\n action: o.acao && { label: o.acao.rotulo, onClick: o.acao.onClick },\r\n})\r\n\r\n/** @deprecated Legacy — usar `ToastProvider` do V1. */\r\nexport function AvisosProvider({ children, rotuloFechar = 'Fechar aviso', maximo = 4 }: AvisosProviderProps) {\r\n return (\r\n <ToastProvider closeLabel={rotuloFechar} max={maximo}>\r\n {children}\r\n </ToastProvider>\r\n )\r\n}\r\n\r\n/** @deprecated Legacy — usar `useToast` do V1. */\r\nexport function useAvisos(): AvisosApi {\r\n let toast: ReturnType<typeof useToast>\r\n try {\r\n toast = useToast()\r\n } catch {\r\n // A mensagem de sempre, com o nome que estas apps conhecem.\r\n throw new Error('useAvisos tem de ser usado dentro de um <AvisosProvider>.')\r\n }\r\n return useMemo<AvisosApi>(\r\n () => ({\r\n sucesso: (m, o) => toast.success(m, opcoesV1(o)),\r\n erro: (m, o) => toast.error(m, opcoesV1(o)),\r\n aviso: (m, o) => toast.warning(m, opcoesV1(o)),\r\n info: (m, o) => toast.info(m, opcoesV1(o)),\r\n fechar: toast.dismiss,\r\n }),\r\n [toast],\r\n )\r\n}\r\n"],"names":[],"mappings":";;;AAsCA,MAAM,WAAW,CAAC,IAAiB,QAAsB;AAAA,EACvD,UAAU,EAAE;AAAA,EACZ,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,QAAQ,SAAS,EAAE,KAAK,QAAA;AAC5D;AAGO,SAAS,eAAe,EAAE,UAAU,eAAe,gBAAgB,SAAS,KAA0B;AAC3G,6BACG,eAAA,EAAc,YAAY,cAAc,KAAK,QAC3C,UACH;AAEJ;AAGO,SAAS,YAAuB;AACrC,MAAI;AACJ,MAAI;AACF,YAAQ,SAAA;AAAA,EACV,QAAQ;AAEN,UAAM,IAAI,MAAM,2DAA2D;AAAA,EAC7E;AACA,SAAO;AAAA,IACL,OAAO;AAAA,MACL,SAAS,CAAC,GAAG,MAAM,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC;AAAA,MAC/C,MAAM,CAAC,GAAG,MAAM,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;AAAA,MAC1C,OAAO,CAAC,GAAG,MAAM,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC;AAAA,MAC7C,MAAM,CAAC,GAAG,MAAM,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC;AAAA,MACzC,QAAQ,MAAM;AAAA,IAAA;AAAA,IAEhB,CAAC,KAAK;AAAA,EAAA;AAEV;"}
@@ -0,0 +1,19 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ function BarraAcoes({ children, esquerda, fixa = true }) {
3
+ return /* @__PURE__ */ jsxs(
4
+ "div",
5
+ {
6
+ role: "group",
7
+ "aria-label": "Ações",
8
+ className: `${fixa ? "sticky bottom-0 z-20" : ""} flex flex-wrap items-center gap-2 border-t border-slate-200 bg-white/95 px-4 py-3 backdrop-blur dark:border-slate-700 dark:bg-slate-900/95`,
9
+ children: [
10
+ esquerda && /* @__PURE__ */ jsx("div", { className: "flex flex-wrap items-center gap-2", children: esquerda }),
11
+ /* @__PURE__ */ jsx("div", { className: "ml-auto flex flex-wrap items-center gap-2", children })
12
+ ]
13
+ }
14
+ );
15
+ }
16
+ export {
17
+ BarraAcoes as default
18
+ };
19
+ //# sourceMappingURL=BarraAcoes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BarraAcoes.js","sources":["../../../../../src/legacy/components/ui/BarraAcoes.tsx"],"sourcesContent":["import React, { type ReactNode } from 'react'\r\n\r\n/** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */\r\nexport interface BarraAcoesProps {\r\n /** Ações principais, à direita (ex: \"Guardar\"). A principal vai em último. */\r\n children: ReactNode\r\n /** Ações secundárias, à esquerda (ex: \"Voltar à lista\"). */\r\n esquerda?: ReactNode\r\n /** Fica colada ao fundo do ecrã enquanto se desce na página. Por omissão sim. */\r\n fixa?: boolean\r\n}\r\n\r\n/**\r\n * Barra de ações de uma página de detalhe ou formulário.\r\n *\r\n * Fixa ao fundo para \"Guardar\" estar sempre à vista: numa página longa o botão\r\n * no topo desaparece ao descer, e os botões repetidos em cima e em baixo\r\n * acabavam com textos diferentes.\r\n * @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy.\r\n */\r\nexport default function BarraAcoes({ children, esquerda, fixa = true }: BarraAcoesProps) {\r\n return (\r\n <div\r\n role=\"group\"\r\n aria-label=\"Ações\"\r\n className={`${fixa ? 'sticky bottom-0 z-20' : ''} flex flex-wrap items-center gap-2 border-t border-slate-200 bg-white/95 px-4 py-3 backdrop-blur dark:border-slate-700 dark:bg-slate-900/95`}\r\n >\r\n {esquerda && <div className=\"flex flex-wrap items-center gap-2\">{esquerda}</div>}\r\n <div className=\"ml-auto flex flex-wrap items-center gap-2\">{children}</div>\r\n </div>\r\n )\r\n}\r\n"],"names":[],"mappings":";AAoBA,SAAwB,WAAW,EAAE,UAAU,UAAU,OAAO,QAAyB;AACvF,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAW;AAAA,MACX,WAAW,GAAG,OAAO,yBAAyB,EAAE;AAAA,MAE/C,UAAA;AAAA,QAAA,YAAY,oBAAC,OAAA,EAAI,WAAU,qCAAqC,UAAA,UAAS;AAAA,QAC1E,oBAAC,OAAA,EAAI,WAAU,6CAA6C,SAAA,CAAS;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAG3E;"}
@@ -0,0 +1,19 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import PageHeader from "../../../v1/components/layout/PageHeader/PageHeader.js";
3
+ function CabecalhoPagina({ titulo, descricao, caminho, acoes, extra, rotuloCaminho = "Caminho" }) {
4
+ return /* @__PURE__ */ jsx(
5
+ PageHeader,
6
+ {
7
+ title: titulo,
8
+ description: descricao,
9
+ breadcrumb: caminho?.map((n) => ({ label: n.rotulo, href: n.href, onClick: n.onClick })),
10
+ actions: acoes,
11
+ extra,
12
+ breadcrumbLabel: rotuloCaminho
13
+ }
14
+ );
15
+ }
16
+ export {
17
+ CabecalhoPagina as default
18
+ };
19
+ //# sourceMappingURL=CabecalhoPagina.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CabecalhoPagina.js","sources":["../../../../../src/legacy/components/ui/CabecalhoPagina.tsx"],"sourcesContent":["import React, { type ReactNode } from 'react'\r\nimport PageHeader from '../../../v1/components/layout/PageHeader/PageHeader'\r\n\r\n/*\r\n * Migrado para o V1: o cabeçalho é o `PageHeader` do V1 (ou o `Page`, que o\r\n * inclui). Este ficheiro só traduz a API antiga (em português) para a nova,\r\n * para as apps que ainda a usam continuarem a funcionar sem mudanças.\r\n */\r\n\r\n/** @deprecated Legacy — usar `BreadcrumbItem` do V1. */\r\nexport interface NivelCaminho {\r\n rotulo: ReactNode\r\n /** Ligação normal. Para o router da app, usar `onClick` (ex: `() => navigate('/x')`). */\r\n href?: string\r\n onClick?: () => void\r\n}\r\n\r\n/** @deprecated Legacy — usar `PageHeaderProps` do V1. */\r\nexport interface CabecalhoPaginaProps {\r\n titulo: ReactNode\r\n descricao?: ReactNode\r\n /** Caminho até à página (área › lista › registo). O último nível é a página atual. */\r\n caminho?: NivelCaminho[]\r\n /** Botões da página (ex: \"Novo\", \"Editar\"). */\r\n acoes?: ReactNode\r\n /** Linha extra por baixo da descrição (etiquetas de estado, responsável…). */\r\n extra?: ReactNode\r\n /** Rótulo acessível da navegação do caminho. */\r\n rotuloCaminho?: string\r\n}\r\n\r\n/** @deprecated Legacy — usar `PageHeader` (ou `Page`) do V1. */\r\nexport default function CabecalhoPagina({ titulo, descricao, caminho, acoes, extra, rotuloCaminho = 'Caminho' }: CabecalhoPaginaProps) {\r\n return (\r\n <PageHeader\r\n title={titulo}\r\n description={descricao}\r\n breadcrumb={caminho?.map((n) => ({ label: n.rotulo, href: n.href, onClick: n.onClick }))}\r\n actions={acoes}\r\n extra={extra}\r\n breadcrumbLabel={rotuloCaminho}\r\n />\r\n )\r\n}\r\n"],"names":[],"mappings":";;AAgCA,SAAwB,gBAAgB,EAAE,QAAQ,WAAW,SAAS,OAAO,OAAO,gBAAgB,aAAmC;AACrI,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,MACP,aAAa;AAAA,MACb,YAAY,SAAS,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,MAAM,EAAE,MAAM,SAAS,EAAE,UAAU;AAAA,MACvF,SAAS;AAAA,MACT;AAAA,MACA,iBAAiB;AAAA,IAAA;AAAA,EAAA;AAGvB;"}
@@ -0,0 +1,9 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import SearchInput from "../../../v1/primitives/forms/SearchInput/SearchInput.js";
3
+ function CaixaPesquisa({ valor, onMudar, placeholder = "Pesquisar…", rotulo, className = "w-56", autoFocus }) {
4
+ return /* @__PURE__ */ jsx(SearchInput, { value: valor, onChange: onMudar, placeholder, label: rotulo, className, autoFocus });
5
+ }
6
+ export {
7
+ CaixaPesquisa as default
8
+ };
9
+ //# sourceMappingURL=CaixaPesquisa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CaixaPesquisa.js","sources":["../../../../../src/legacy/components/ui/CaixaPesquisa.tsx"],"sourcesContent":["import React from 'react'\r\nimport SearchInput from '../../../v1/primitives/forms/SearchInput/SearchInput'\r\n\r\n/*\r\n * Migrado para o V1: a caixa de pesquisa é o `SearchInput` do V1 (mesmo\r\n * aspeto e comportamento). Este ficheiro só traduz a API antiga.\r\n */\r\n\r\n/** @deprecated Legacy — usar `SearchInputProps` do V1. */\r\nexport interface CaixaPesquisaProps {\r\n valor: string\r\n onMudar: (valor: string) => void\r\n placeholder?: string\r\n /** Nome acessível (leitores de ecrã). Por omissão, o placeholder. */\r\n rotulo?: string\r\n /** Largura (classes tailwind). Por omissão w-56. */\r\n className?: string\r\n autoFocus?: boolean\r\n}\r\n\r\n/** @deprecated Legacy — usar `SearchInput` do V1. */\r\nexport default function CaixaPesquisa({ valor, onMudar, placeholder = 'Pesquisar…', rotulo, className = 'w-56', autoFocus }: CaixaPesquisaProps) {\r\n return <SearchInput value={valor} onChange={onMudar} placeholder={placeholder} label={rotulo} className={className} autoFocus={autoFocus} />\r\n}\r\n"],"names":[],"mappings":";;AAqBA,SAAwB,cAAc,EAAE,OAAO,SAAS,cAAc,cAAc,QAAQ,YAAY,QAAQ,aAAiC;AAC/I,SAAO,oBAAC,aAAA,EAAY,OAAO,OAAO,UAAU,SAAS,aAA0B,OAAO,QAAQ,WAAsB,UAAA,CAAsB;AAC5I;"}
@@ -0,0 +1,34 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import ConfirmDialog from "../../../v1/components/overlays/ConfirmDialog/ConfirmDialog.js";
3
+ function Confirmacao({
4
+ aberto,
5
+ titulo,
6
+ children,
7
+ onConfirmar,
8
+ onCancelar,
9
+ textoConfirmar = "Confirmar",
10
+ textoCancelar = "Cancelar",
11
+ variante = "normal",
12
+ aConfirmar = false,
13
+ acaoSecundaria
14
+ }) {
15
+ return /* @__PURE__ */ jsx(
16
+ ConfirmDialog,
17
+ {
18
+ open: aberto,
19
+ title: titulo,
20
+ message: children,
21
+ tone: variante === "perigo" ? "danger" : "default",
22
+ confirmLabel: textoConfirmar,
23
+ cancelLabel: textoCancelar,
24
+ loading: aConfirmar,
25
+ secondaryAction: acaoSecundaria && { label: acaoSecundaria.rotulo, onClick: acaoSecundaria.onClick },
26
+ onConfirm: onConfirmar,
27
+ onCancel: onCancelar
28
+ }
29
+ );
30
+ }
31
+ export {
32
+ Confirmacao as default
33
+ };
34
+ //# sourceMappingURL=Confirmacao.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Confirmacao.js","sources":["../../../../../src/legacy/components/ui/Confirmacao.tsx"],"sourcesContent":["import React, { type ReactNode } from 'react'\r\nimport ConfirmDialog from '../../../v1/components/overlays/ConfirmDialog/ConfirmDialog'\r\n\r\n/*\r\n * Migrado para o V1: a confirmação é o `ConfirmDialog` do V1 (ou `useConfirm`).\r\n * Este ficheiro só traduz a API antiga (em português) para a nova, para as\r\n * apps que ainda a usam continuarem a funcionar sem mudanças.\r\n */\r\n\r\n/** @deprecated Legacy — usar `ConfirmDialog` ou `useConfirm` do V1. */\r\nexport interface ConfirmacaoProps {\r\n aberto: boolean\r\n titulo: ReactNode\r\n /** Explicação: o que vai acontecer, a que registo, se é reversível. */\r\n children?: ReactNode\r\n onConfirmar: () => void\r\n onCancelar: () => void\r\n /** Texto do botão — o verbo da ação (\"Eliminar\", \"Submeter\"), não \"OK\". */\r\n textoConfirmar?: string\r\n textoCancelar?: string\r\n /** `perigo` pinta a ação a vermelho e põe o foco em Cancelar. */\r\n variante?: 'normal' | 'perigo'\r\n /** A ação está a correr: botões desativados. */\r\n aConfirmar?: boolean\r\n /** Uma segunda saída (ex: \"Desativar\" em vez de eliminar, \"Eliminar só o contrato\"). */\r\n acaoSecundaria?: { rotulo: string; onClick: () => void }\r\n}\r\n\r\n/** @deprecated Legacy — usar `ConfirmDialog` ou `useConfirm` do V1. */\r\nexport default function Confirmacao({\r\n aberto,\r\n titulo,\r\n children,\r\n onConfirmar,\r\n onCancelar,\r\n textoConfirmar = 'Confirmar',\r\n textoCancelar = 'Cancelar',\r\n variante = 'normal',\r\n aConfirmar = false,\r\n acaoSecundaria,\r\n}: ConfirmacaoProps) {\r\n return (\r\n <ConfirmDialog\r\n open={aberto}\r\n title={titulo}\r\n message={children}\r\n tone={variante === 'perigo' ? 'danger' : 'default'}\r\n confirmLabel={textoConfirmar}\r\n cancelLabel={textoCancelar}\r\n loading={aConfirmar}\r\n secondaryAction={acaoSecundaria && { label: acaoSecundaria.rotulo, onClick: acaoSecundaria.onClick }}\r\n onConfirm={onConfirmar}\r\n onCancel={onCancelar}\r\n />\r\n )\r\n}\r\n"],"names":[],"mappings":";;AA6BA,SAAwB,YAAY;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,aAAa;AAAA,EACb;AACF,GAAqB;AACnB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAM;AAAA,MACN,OAAO;AAAA,MACP,SAAS;AAAA,MACT,MAAM,aAAa,WAAW,WAAW;AAAA,MACzC,cAAc;AAAA,MACd,aAAa;AAAA,MACb,SAAS;AAAA,MACT,iBAAiB,kBAAkB,EAAE,OAAO,eAAe,QAAQ,SAAS,eAAe,QAAA;AAAA,MAC3F,WAAW;AAAA,MACX,UAAU;AAAA,IAAA;AAAA,EAAA;AAGhB;"}
@@ -0,0 +1,41 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { SelectInput } from "../../../v1/primitives/forms/SelectInput/SelectInput.js";
3
+ function Escolha({
4
+ valor,
5
+ opcoes,
6
+ onMudar,
7
+ rotulo,
8
+ placeholder = "Escolher…",
9
+ opcaoVazia,
10
+ disabled = false,
11
+ pesquisa,
12
+ className,
13
+ tamanho = "barra",
14
+ aspeto = "campo",
15
+ corEtiqueta
16
+ }) {
17
+ const etiqueta = aspeto === "etiqueta";
18
+ return /* @__PURE__ */ jsx(
19
+ SelectInput,
20
+ {
21
+ "aria-label": rotulo,
22
+ value: valor,
23
+ onValueChange: onMudar,
24
+ options: opcoes.map((o) => typeof o === "string" ? o : { value: o.valor, label: o.rotulo, description: o.descricao }),
25
+ placeholder,
26
+ placeholderOption: false,
27
+ emptyOption: opcaoVazia,
28
+ disabled,
29
+ searchable: pesquisa,
30
+ variant: etiqueta ? "pill" : "field",
31
+ pillClassName: corEtiqueta,
32
+ tall: tamanho === "formulario",
33
+ labels: { search: "Pesquisar…", searchIn: "Pesquisar em {label}", noResults: "Sem resultados" },
34
+ className: `inline-block ${className ?? (etiqueta ? "" : "min-w-[10rem] max-w-[18rem]")}`
35
+ }
36
+ );
37
+ }
38
+ export {
39
+ Escolha as default
40
+ };
41
+ //# sourceMappingURL=Escolha.js.map