@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,100 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ function AppLauncher({
3
+ apps,
4
+ heading,
5
+ emptyLabel,
6
+ bgColor = "#001b63",
7
+ bgImage,
8
+ accentColor1 = "#0076ce",
9
+ accentColor2 = "#00d28d",
10
+ navHeight = "3.0625rem"
11
+ }) {
12
+ const useSolidBg = !bgImage;
13
+ return /* @__PURE__ */ jsxs(
14
+ "div",
15
+ {
16
+ style: {
17
+ position: "relative",
18
+ display: "flex",
19
+ flexDirection: "column",
20
+ justifyContent: "center",
21
+ overflow: "hidden",
22
+ // Full-bleed dentro do <main> do TopNavLayout (px-3 sm:px-5 py-4).
23
+ margin: "-1rem -0.75rem",
24
+ minHeight: `calc(100dvh - ${navHeight})`,
25
+ backgroundRepeat: "no-repeat",
26
+ backgroundAttachment: "fixed",
27
+ backgroundSize: "cover",
28
+ ...useSolidBg ? { backgroundColor: bgColor } : { backgroundImage: `url(${bgImage})` }
29
+ },
30
+ children: [
31
+ useSolidBg && /* @__PURE__ */ jsxs("div", { style: { position: "absolute", inset: 0, overflow: "hidden", pointerEvents: "none" }, children: [
32
+ /* @__PURE__ */ jsx("div", { style: { position: "absolute", width: "34rem", height: "34rem", borderRadius: "50%", filter: "blur(90px)", top: "-12rem", right: "-10rem", opacity: 0.22, backgroundColor: accentColor1 } }),
33
+ /* @__PURE__ */ jsx("div", { style: { position: "absolute", width: "34rem", height: "34rem", borderRadius: "50%", filter: "blur(90px)", bottom: "-14rem", left: "-12rem", opacity: 0.28, backgroundColor: accentColor2 } })
34
+ ] }),
35
+ /* @__PURE__ */ jsxs("div", { style: { position: "relative", zIndex: 1, width: "min(1500px, 92%)", margin: "0 auto", padding: "clamp(1.5rem, 4vh, 3rem) 0" }, children: [
36
+ heading && /* @__PURE__ */ jsx("h2", { style: { margin: "0 0 clamp(1.5rem, 3vh, 2.5rem)", textAlign: "center", color: "#fff", fontSize: "clamp(1.35rem, 1.6vw + 0.6rem, 2.25rem)", fontWeight: 700, letterSpacing: "-0.02em" }, className: "[&_strong]:text-proef-turquoise", children: heading }),
37
+ /* @__PURE__ */ jsx(
38
+ "div",
39
+ {
40
+ style: {
41
+ display: "grid",
42
+ gridTemplateColumns: "repeat(auto-fit, minmax(clamp(280px, 22vw, 340px), 340px))",
43
+ justifyContent: "center",
44
+ gap: "clamp(0.875rem, 1vw, 1.25rem)"
45
+ },
46
+ children: apps.map((app, i) => /* @__PURE__ */ jsxs(
47
+ "button",
48
+ {
49
+ type: "button",
50
+ onClick: app.onClick,
51
+ title: app.title2 ?? app.description ?? app.title,
52
+ className: "group",
53
+ style: {
54
+ position: "relative",
55
+ display: "flex",
56
+ alignItems: "center",
57
+ gap: "clamp(0.875rem, 0.8vw, 1.125rem)",
58
+ width: "100%",
59
+ padding: "clamp(1.125rem, 1.1vw, 1.5rem) clamp(1.25rem, 1.3vw, 1.75rem)",
60
+ textAlign: "left",
61
+ cursor: "pointer",
62
+ color: "#fff",
63
+ background: "rgba(255,255,255,0.07)",
64
+ border: "1px solid rgba(255,255,255,0.14)",
65
+ borderRadius: "10px",
66
+ backdropFilter: "blur(10px)",
67
+ transition: "transform .15s ease, background .15s ease, border-color .15s ease"
68
+ },
69
+ onMouseEnter: (e) => {
70
+ e.currentTarget.style.transform = "translateY(-2px)";
71
+ e.currentTarget.style.background = "rgba(255,255,255,0.13)";
72
+ e.currentTarget.style.borderColor = "#00d28d";
73
+ },
74
+ onMouseLeave: (e) => {
75
+ e.currentTarget.style.transform = "translateY(0)";
76
+ e.currentTarget.style.background = "rgba(255,255,255,0.07)";
77
+ e.currentTarget.style.borderColor = "rgba(255,255,255,0.14)";
78
+ },
79
+ children: [
80
+ app.icon != null && /* @__PURE__ */ jsx("span", { style: { display: "flex", alignItems: "center", justifyContent: "center", flexShrink: 0, width: "clamp(2.5rem, 2.4vw, 3.25rem)", height: "clamp(2.5rem, 2.4vw, 3.25rem)", fontSize: "clamp(1.05rem, 1vw, 1.35rem)", color: "#00d28d", background: "rgba(0,210,141,0.12)", borderRadius: "8px" }, children: app.icon }),
81
+ /* @__PURE__ */ jsxs("span", { style: { minWidth: 0 }, children: [
82
+ /* @__PURE__ */ jsx("span", { style: { display: "block", fontSize: "clamp(0.95rem, 0.85vw, 1.15rem)", fontWeight: 600, lineHeight: 1.25 }, children: app.title }),
83
+ app.description && /* @__PURE__ */ jsx("span", { style: { display: "block", marginTop: "0.2rem", fontSize: "clamp(0.78rem, 0.7vw, 0.92rem)", lineHeight: 1.3, color: "rgba(255,255,255,0.6)" }, children: app.description })
84
+ ] })
85
+ ]
86
+ },
87
+ i
88
+ ))
89
+ }
90
+ ),
91
+ apps.length === 0 && emptyLabel && /* @__PURE__ */ jsx("p", { style: { textAlign: "center", color: "rgba(255,255,255,0.6)", fontSize: "0.9rem" }, children: emptyLabel })
92
+ ] })
93
+ ]
94
+ }
95
+ );
96
+ }
97
+ export {
98
+ AppLauncher as default
99
+ };
100
+ //# sourceMappingURL=AppLauncher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppLauncher.js","sources":["../../../../../../src/legacy/components/layout/AppLauncher/AppLauncher.tsx"],"sourcesContent":["import React from 'react'\r\n\r\n/** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */\r\nexport interface LauncherApp {\r\n /** Título da app (linha principal). */\r\n title: string\r\n /** Subtítulo opcional. */\r\n description?: string\r\n /** Ícone (ReactNode) — a app passa o seu (ex: <FontAwesomeIcon .../>). */\r\n icon?: React.ReactNode\r\n onClick: () => void\r\n /** Tooltip opcional; default = description || title. */\r\n title2?: string\r\n}\r\n\r\n/** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */\r\nexport interface AppLauncherProps {\r\n apps: LauncherApp[]\r\n /** Cabeçalho (ex: <>Bem-vindo <strong>Vinst</strong></>). O <strong> fica turquesa. */\r\n heading?: React.ReactNode\r\n /** Texto quando não há apps. */\r\n emptyLabel?: string\r\n /** Fundo: cor sólida (default) ou imagem. */\r\n bgColor?: string\r\n bgImage?: string | null\r\n accentColor1?: string\r\n accentColor2?: string\r\n /** Altura da nav do TopNavLayout para o cálculo de min-height. */\r\n navHeight?: string\r\n}\r\n\r\n/**\r\n * Ecrã de launcher de aplicações (grid centrado de cartões em vidro sobre fundo\r\n * escuro). Feito para viver dentro do <main> do TopNavLayout — cancela o padding\r\n * dele com margens negativas para ficar full-bleed. Ícones vêm da app (ReactNode).\r\n * @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy.\r\n */\r\nexport default function AppLauncher({\r\n apps,\r\n heading,\r\n emptyLabel,\r\n bgColor = '#001b63',\r\n bgImage,\r\n accentColor1 = '#0076ce',\r\n accentColor2 = '#00d28d',\r\n navHeight = '3.0625rem',\r\n}: AppLauncherProps) {\r\n const useSolidBg = !bgImage\r\n\r\n return (\r\n <div\r\n style={{\r\n position: 'relative',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n overflow: 'hidden',\r\n // Full-bleed dentro do <main> do TopNavLayout (px-3 sm:px-5 py-4).\r\n margin: '-1rem -0.75rem',\r\n minHeight: `calc(100dvh - ${navHeight})`,\r\n backgroundRepeat: 'no-repeat',\r\n backgroundAttachment: 'fixed',\r\n backgroundSize: 'cover',\r\n ...(useSolidBg ? { backgroundColor: bgColor } : { backgroundImage: `url(${bgImage})` }),\r\n }}\r\n >\r\n {useSolidBg && (\r\n <div style={{ position: 'absolute', inset: 0, overflow: 'hidden', pointerEvents: 'none' }}>\r\n <div style={{ position: 'absolute', width: '34rem', height: '34rem', borderRadius: '50%', filter: 'blur(90px)', top: '-12rem', right: '-10rem', opacity: 0.22, backgroundColor: accentColor1 }} />\r\n <div style={{ position: 'absolute', width: '34rem', height: '34rem', borderRadius: '50%', filter: 'blur(90px)', bottom: '-14rem', left: '-12rem', opacity: 0.28, backgroundColor: accentColor2 }} />\r\n </div>\r\n )}\r\n\r\n <div style={{ position: 'relative', zIndex: 1, width: 'min(1500px, 92%)', margin: '0 auto', padding: 'clamp(1.5rem, 4vh, 3rem) 0' }}>\r\n {heading && (\r\n <h2 style={{ margin: '0 0 clamp(1.5rem, 3vh, 2.5rem)', textAlign: 'center', color: '#fff', fontSize: 'clamp(1.35rem, 1.6vw + 0.6rem, 2.25rem)', fontWeight: 700, letterSpacing: '-0.02em' }} className=\"[&_strong]:text-proef-turquoise\">\r\n {heading}\r\n </h2>\r\n )}\r\n\r\n <div\r\n style={{\r\n display: 'grid',\r\n gridTemplateColumns: 'repeat(auto-fit, minmax(clamp(280px, 22vw, 340px), 340px))',\r\n justifyContent: 'center',\r\n gap: 'clamp(0.875rem, 1vw, 1.25rem)',\r\n }}\r\n >\r\n {apps.map((app, i) => (\r\n <button\r\n key={i}\r\n type=\"button\"\r\n onClick={app.onClick}\r\n title={app.title2 ?? app.description ?? app.title}\r\n className=\"group\"\r\n style={{\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: 'clamp(0.875rem, 0.8vw, 1.125rem)',\r\n width: '100%',\r\n padding: 'clamp(1.125rem, 1.1vw, 1.5rem) clamp(1.25rem, 1.3vw, 1.75rem)',\r\n textAlign: 'left',\r\n cursor: 'pointer',\r\n color: '#fff',\r\n background: 'rgba(255,255,255,0.07)',\r\n border: '1px solid rgba(255,255,255,0.14)',\r\n borderRadius: '10px',\r\n backdropFilter: 'blur(10px)',\r\n transition: 'transform .15s ease, background .15s ease, border-color .15s ease',\r\n }}\r\n onMouseEnter={(e) => { e.currentTarget.style.transform = 'translateY(-2px)'; e.currentTarget.style.background = 'rgba(255,255,255,0.13)'; e.currentTarget.style.borderColor = '#00d28d' }}\r\n onMouseLeave={(e) => { e.currentTarget.style.transform = 'translateY(0)'; e.currentTarget.style.background = 'rgba(255,255,255,0.07)'; e.currentTarget.style.borderColor = 'rgba(255,255,255,0.14)' }}\r\n >\r\n {app.icon != null && (\r\n <span style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0, width: 'clamp(2.5rem, 2.4vw, 3.25rem)', height: 'clamp(2.5rem, 2.4vw, 3.25rem)', fontSize: 'clamp(1.05rem, 1vw, 1.35rem)', color: '#00d28d', background: 'rgba(0,210,141,0.12)', borderRadius: '8px' }}>\r\n {app.icon}\r\n </span>\r\n )}\r\n <span style={{ minWidth: 0 }}>\r\n <span style={{ display: 'block', fontSize: 'clamp(0.95rem, 0.85vw, 1.15rem)', fontWeight: 600, lineHeight: 1.25 }}>{app.title}</span>\r\n {app.description && (\r\n <span style={{ display: 'block', marginTop: '0.2rem', fontSize: 'clamp(0.78rem, 0.7vw, 0.92rem)', lineHeight: 1.3, color: 'rgba(255,255,255,0.6)' }}>{app.description}</span>\r\n )}\r\n </span>\r\n </button>\r\n ))}\r\n </div>\r\n\r\n {apps.length === 0 && emptyLabel && (\r\n <p style={{ textAlign: 'center', color: 'rgba(255,255,255,0.6)', fontSize: '0.9rem' }}>{emptyLabel}</p>\r\n )}\r\n </div>\r\n </div>\r\n )\r\n}\r\n"],"names":[],"mappings":";AAqCA,SAAwB,YAAY;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA,eAAe;AAAA,EACf,eAAe;AAAA,EACf,YAAY;AACd,GAAqB;AACnB,QAAM,aAAa,CAAC;AAEpB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,UAAU;AAAA,QACV,SAAS;AAAA,QACT,eAAe;AAAA,QACf,gBAAgB;AAAA,QAChB,UAAU;AAAA;AAAA,QAEV,QAAQ;AAAA,QACR,WAAW,iBAAiB,SAAS;AAAA,QACrC,kBAAkB;AAAA,QAClB,sBAAsB;AAAA,QACtB,gBAAgB;AAAA,QAChB,GAAI,aAAa,EAAE,iBAAiB,QAAA,IAAY,EAAE,iBAAiB,OAAO,OAAO,IAAA;AAAA,MAAI;AAAA,MAGtF,UAAA;AAAA,QAAA,cACC,qBAAC,OAAA,EAAI,OAAO,EAAE,UAAU,YAAY,OAAO,GAAG,UAAU,UAAU,eAAe,OAAA,GAC/E,UAAA;AAAA,UAAA,oBAAC,OAAA,EAAI,OAAO,EAAE,UAAU,YAAY,OAAO,SAAS,QAAQ,SAAS,cAAc,OAAO,QAAQ,cAAc,KAAK,UAAU,OAAO,UAAU,SAAS,MAAM,iBAAiB,aAAA,EAAa,CAAG;AAAA,UAChM,oBAAC,SAAI,OAAO,EAAE,UAAU,YAAY,OAAO,SAAS,QAAQ,SAAS,cAAc,OAAO,QAAQ,cAAc,QAAQ,UAAU,MAAM,UAAU,SAAS,MAAM,iBAAiB,eAAa,CAAG;AAAA,QAAA,GACpM;AAAA,QAGF,qBAAC,OAAA,EAAI,OAAO,EAAE,UAAU,YAAY,QAAQ,GAAG,OAAO,oBAAoB,QAAQ,UAAU,SAAS,gCAClG,UAAA;AAAA,UAAA,+BACE,MAAA,EAAG,OAAO,EAAE,QAAQ,kCAAkC,WAAW,UAAU,OAAO,QAAQ,UAAU,2CAA2C,YAAY,KAAK,eAAe,aAAa,WAAU,mCACpM,UAAA,SACH;AAAA,UAGF;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,SAAS;AAAA,gBACT,qBAAqB;AAAA,gBACrB,gBAAgB;AAAA,gBAChB,KAAK;AAAA,cAAA;AAAA,cAGN,UAAA,KAAK,IAAI,CAAC,KAAK,MACd;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,MAAK;AAAA,kBACL,SAAS,IAAI;AAAA,kBACb,OAAO,IAAI,UAAU,IAAI,eAAe,IAAI;AAAA,kBAC5C,WAAU;AAAA,kBACV,OAAO;AAAA,oBACL,UAAU;AAAA,oBACV,SAAS;AAAA,oBACT,YAAY;AAAA,oBACZ,KAAK;AAAA,oBACL,OAAO;AAAA,oBACP,SAAS;AAAA,oBACT,WAAW;AAAA,oBACX,QAAQ;AAAA,oBACR,OAAO;AAAA,oBACP,YAAY;AAAA,oBACZ,QAAQ;AAAA,oBACR,cAAc;AAAA,oBACd,gBAAgB;AAAA,oBAChB,YAAY;AAAA,kBAAA;AAAA,kBAEd,cAAc,CAAC,MAAM;AAAE,sBAAE,cAAc,MAAM,YAAY;AAAoB,sBAAE,cAAc,MAAM,aAAa;AAA0B,sBAAE,cAAc,MAAM,cAAc;AAAA,kBAAU;AAAA,kBACxL,cAAc,CAAC,MAAM;AAAE,sBAAE,cAAc,MAAM,YAAY;AAAiB,sBAAE,cAAc,MAAM,aAAa;AAA0B,sBAAE,cAAc,MAAM,cAAc;AAAA,kBAAyB;AAAA,kBAEnM,UAAA;AAAA,oBAAA,IAAI,QAAQ,QACX,oBAAC,QAAA,EAAK,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,gBAAgB,UAAU,YAAY,GAAG,OAAO,iCAAiC,QAAQ,iCAAiC,UAAU,gCAAgC,OAAO,WAAW,YAAY,wBAAwB,cAAc,MAAA,GAC3R,UAAA,IAAI,MACP;AAAA,yCAED,QAAA,EAAK,OAAO,EAAE,UAAU,KACvB,UAAA;AAAA,sBAAA,oBAAC,QAAA,EAAK,OAAO,EAAE,SAAS,SAAS,UAAU,mCAAmC,YAAY,KAAK,YAAY,KAAA,GAAS,cAAI,OAAM;AAAA,sBAC7H,IAAI,eACH,oBAAC,UAAK,OAAO,EAAE,SAAS,SAAS,WAAW,UAAU,UAAU,kCAAkC,YAAY,KAAK,OAAO,2BAA4B,cAAI,YAAA,CAAY;AAAA,oBAAA,EAAA,CAE1K;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAlCK;AAAA,cAAA,CAoCR;AAAA,YAAA;AAAA,UAAA;AAAA,UAGF,KAAK,WAAW,KAAK,kCACnB,KAAA,EAAE,OAAO,EAAE,WAAW,UAAU,OAAO,yBAAyB,UAAU,SAAA,GAAa,UAAA,WAAA,CAAW;AAAA,QAAA,EAAA,CAEvG;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -0,0 +1,20 @@
1
+ .error .cui-error {
2
+ color: red;
3
+ background-color: #f8d7da;
4
+ border: 1px solid #f5c6cb;
5
+ margin: 1rem;
6
+ padding: 1rem;
7
+ border-radius: 25px;
8
+ }
9
+ .error .cui-error-heading {
10
+ font-size: 1.2rem;
11
+ font-weight: bold;
12
+ }
13
+ .error .cui-error-list {
14
+ list-style: none;
15
+ padding: 0;
16
+ margin: 0;
17
+ }
18
+ .error .cui-error-message {
19
+ white-space: break-spaces;
20
+ }
@@ -0,0 +1,12 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import './Error.css';/* empty css */
3
+ const Error = ({ messages }) => {
4
+ return /* @__PURE__ */ jsx("div", { className: "error", children: /* @__PURE__ */ jsxs("div", { className: "cui-error", children: [
5
+ /* @__PURE__ */ jsx("h4", { children: "Ooops...." }),
6
+ /* @__PURE__ */ jsx("ul", { className: "cui-error-list", children: messages ? messages.map((message, index) => /* @__PURE__ */ jsx("li", { className: "cui-error-message", children: message }, index)) : /* @__PURE__ */ jsx("li", { children: "An unexpected error occurred." }) })
7
+ ] }) });
8
+ };
9
+ export {
10
+ Error as default
11
+ };
12
+ //# sourceMappingURL=Error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Error.js","sources":["../../../../../../src/legacy/components/layout/Error/Error.tsx"],"sourcesContent":["import React from 'react'\r\n\r\nimport './Error.scss'\r\n\r\ninterface ErrorProps {\r\n messages: string[]\r\n}\r\n\r\n/** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */\r\nconst Error: React.FC<ErrorProps> = ({ messages }) => {\r\n return (\r\n <div className=\"error\">\r\n <div className=\"cui-error\">\r\n <h4>Ooops....</h4>\r\n <ul className=\"cui-error-list\">\r\n {messages ? (\r\n messages.map((message, index) => (\r\n <li key={index} className=\"cui-error-message\">\r\n {message}\r\n </li>\r\n ))\r\n ) : (\r\n <li>An unexpected error occurred.</li>\r\n )}\r\n </ul>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default Error\r\n"],"names":[],"mappings":";;AASA,MAAM,QAA8B,CAAC,EAAE,eAAe;AACpD,6BACG,OAAA,EAAI,WAAU,SACb,UAAA,qBAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,IAAA,oBAAC,QAAG,UAAA,YAAA,CAAS;AAAA,IACb,oBAAC,QAAG,WAAU,kBACX,qBACC,SAAS,IAAI,CAAC,SAAS,8BACpB,MAAA,EAAe,WAAU,qBACvB,UAAA,QAAA,GADM,KAET,CACD,IAED,oBAAC,MAAA,EAAG,UAAA,gCAAA,CAA6B,EAAA,CAErC;AAAA,EAAA,EAAA,CACF,EAAA,CACF;AAEJ;"}
@@ -0,0 +1,42 @@
1
+ @charset "UTF-8";
2
+ /* Intencionalmente VAZIO.
3
+ *
4
+ * As atoms antigas faziam `@import url('.../styles/index.scss')`, e este ficheiro
5
+ * injetava no CONSUMIDOR (via style-loader do bundle) um reset global agressivo
6
+ * (`* { margin:0; padding:0 }`), `@font-face` Urbanist (.ttf → 404 sob subpaths),
7
+ * `canvas { height:auto }` (partia o sizing dos charts) e `body { font-family;
8
+ * background }`. Uma LIB não pode impor nada disto — nukeava o spacing/fonte/fundo
9
+ * de qualquer app que importasse o common-ui (visível sobretudo em apps com
10
+ * utilities layered, que perdem ao `*` injetado).
11
+ *
12
+ * Cada app define o seu próprio reset/fonte/fundo. Mantido como no-op p/ os
13
+ * imports existentes não partirem. */
14
+ .cui-footer {
15
+ height: 5vh;
16
+ width: 100%;
17
+ margin: auto 0 0 0;
18
+ }
19
+ .cui-footer__container {
20
+ max-width: 90vw;
21
+ margin: 0 auto;
22
+ font-size: 10px;
23
+ font-weight: 600;
24
+ padding: 1vh;
25
+ color: var(--light-gray-02);
26
+ border-top: 1px solid var(--light-gray-02);
27
+ display: flex;
28
+ align-items: center;
29
+ }
30
+ .cui-footer__title {
31
+ width: 30%;
32
+ display: flex;
33
+ justify-content: right;
34
+ font-size: 13px;
35
+ }
36
+ .cui-footer__icon {
37
+ width: 10%;
38
+ height: 20px;
39
+ }
40
+ .cui-footer__text {
41
+ width: 60%;
42
+ }
@@ -0,0 +1,23 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import logoIcon from "../../../assets/svgs/proef-footer-logo.svg.js";
3
+ import './Footer.css';/* empty css */
4
+ const Footer = ({
5
+ companyName = "the data controller",
6
+ contactEmail
7
+ }) => {
8
+ return /* @__PURE__ */ jsx("div", { className: "cui-footer", children: /* @__PURE__ */ jsxs("div", { className: "cui-footer__container", children: [
9
+ /* @__PURE__ */ jsx("p", { className: "cui-footer__title", children: "Developed By" }),
10
+ /* @__PURE__ */ jsx("img", { className: "cui-footer__icon", src: logoIcon, alt: "logo" }),
11
+ /* @__PURE__ */ jsxs("p", { className: "cui-footer__text", children: [
12
+ "In accordance with the provisions of the Personal Data Protection Legislation, we inform you that your personal data will be incorporated into our Personal Data File, for the purpose of managing our company's contact diary, the party responsible for processing your data is ",
13
+ companyName,
14
+ ". You can exercise your rights of access, rectification, opposition and erasure through this email address",
15
+ contactEmail ? `, or through the email ${contactEmail}` : "",
16
+ "."
17
+ ] })
18
+ ] }) });
19
+ };
20
+ export {
21
+ Footer as default
22
+ };
23
+ //# sourceMappingURL=Footer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Footer.js","sources":["../../../../../../src/legacy/components/layout/Footer/Footer.tsx"],"sourcesContent":["import React from 'react'\r\n\r\nimport logoIcon from '../../../assets/svgs/proef-footer-logo.svg'\r\n\r\nimport './Footer.scss'\r\n\r\nexport interface FooterProps {\r\n /** Nome do responsável pelo tratamento de dados (aviso RGPD). */\r\n companyName?: string\r\n /** Email de contacto para exercer direitos RGPD. */\r\n contactEmail?: string\r\n}\r\n\r\n/** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */\r\nconst Footer: React.FC<FooterProps> = ({\r\n companyName = 'the data controller',\r\n contactEmail,\r\n}) => {\r\n return (\r\n <div className=\"cui-footer\">\r\n <div className=\"cui-footer__container\">\r\n <p className=\"cui-footer__title\">Developed By</p>\r\n <img className=\"cui-footer__icon\" src={logoIcon} alt=\"logo\" />\r\n <p className=\"cui-footer__text\">\r\n In accordance with the provisions of the Personal Data Protection\r\n Legislation, we inform you that your personal data will be\r\n incorporated into our Personal Data File, for the purpose of managing\r\n our company&apos;s contact diary, the party responsible for processing\r\n your data is {companyName}. You can exercise your rights of access,\r\n rectification, opposition and erasure through this email address\r\n {contactEmail ? `, or through the email ${contactEmail}` : ''}.\r\n </p>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default Footer\r\n"],"names":[],"mappings":";;;AAcA,MAAM,SAAgC,CAAC;AAAA,EACrC,cAAc;AAAA,EACd;AACF,MAAM;AACJ,6BACG,OAAA,EAAI,WAAU,cACb,UAAA,qBAAC,OAAA,EAAI,WAAU,yBACb,UAAA;AAAA,IAAA,oBAAC,KAAA,EAAE,WAAU,qBAAoB,UAAA,gBAAY;AAAA,wBAC5C,OAAA,EAAI,WAAU,oBAAmB,KAAK,UAAU,KAAI,QAAO;AAAA,IAC5D,qBAAC,KAAA,EAAE,WAAU,oBAAmB,UAAA;AAAA,MAAA;AAAA,MAKhB;AAAA,MAAY;AAAA,MAEzB,eAAe,0BAA0B,YAAY,KAAK;AAAA,MAAG;AAAA,IAAA,EAAA,CAChE;AAAA,EAAA,EAAA,CACF,EAAA,CACF;AAEJ;"}
@@ -0,0 +1,66 @@
1
+ @charset "UTF-8";
2
+ /* Intencionalmente VAZIO.
3
+ *
4
+ * As atoms antigas faziam `@import url('.../styles/index.scss')`, e este ficheiro
5
+ * injetava no CONSUMIDOR (via style-loader do bundle) um reset global agressivo
6
+ * (`* { margin:0; padding:0 }`), `@font-face` Urbanist (.ttf → 404 sob subpaths),
7
+ * `canvas { height:auto }` (partia o sizing dos charts) e `body { font-family;
8
+ * background }`. Uma LIB não pode impor nada disto — nukeava o spacing/fonte/fundo
9
+ * de qualquer app que importasse o common-ui (visível sobretudo em apps com
10
+ * utilities layered, que perdem ao `*` injetado).
11
+ *
12
+ * Cada app define o seu próprio reset/fonte/fundo. Mantido como no-op p/ os
13
+ * imports existentes não partirem. */
14
+ .cui-header__wrapper {
15
+ background: var(--cui-header-bg, url("../../../../assets/imagem-6ee08a37d9.png") no-repeat fixed);
16
+ background-size: cover;
17
+ width: 100%;
18
+ height: 11vh;
19
+ max-height: 6rem;
20
+ }
21
+ .cui-header__container {
22
+ height: 100%;
23
+ display: flex;
24
+ align-items: center;
25
+ justify-content: space-between;
26
+ max-width: 90vw;
27
+ margin: 0 auto;
28
+ }
29
+ .cui-header__left, .cui-header__right {
30
+ display: flex;
31
+ align-items: center;
32
+ }
33
+ .cui-header__icon {
34
+ font-size: 1.8rem;
35
+ color: var(--light-gray-01);
36
+ transition: color 0.3s ease;
37
+ }
38
+ .cui-header__sidebar {
39
+ margin: 0 3rem 0 0;
40
+ cursor: pointer;
41
+ }
42
+ .cui-header__sidebar:hover .header__icon {
43
+ color: var(--light-gray-02);
44
+ }
45
+ .cui-header__title {
46
+ display: flex;
47
+ align-items: center;
48
+ gap: 1rem;
49
+ color: var(--light-gray-01);
50
+ cursor: pointer;
51
+ transition: all 0.3s ease;
52
+ }
53
+ .cui-header__title:hover {
54
+ color: var(--light-gray-02);
55
+ }
56
+ .cui-header__title:hover .header__icon {
57
+ color: var(--light-gray-02);
58
+ }
59
+ .cui-header__subtitle {
60
+ color: var(--light-gray-01);
61
+ margin: 0 3rem;
62
+ }
63
+ .cui-header__subtitle h2 {
64
+ font-weight: 400;
65
+ font-size: 1.3rem;
66
+ }
@@ -0,0 +1,37 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
3
+ import { faBars } from "@fortawesome/free-solid-svg-icons";
4
+ import './Header.css';/* empty css */
5
+ const Header = ({
6
+ title,
7
+ subTitle,
8
+ icon,
9
+ sideBar,
10
+ handleSideBar,
11
+ profile,
12
+ handleHome,
13
+ background
14
+ }) => {
15
+ return /* @__PURE__ */ jsx("div", { className: "cui-header", children: /* @__PURE__ */ jsx(
16
+ "header",
17
+ {
18
+ className: "cui-header__wrapper",
19
+ style: background ? { "--cui-header-bg": background } : void 0,
20
+ children: /* @__PURE__ */ jsxs("div", { className: "cui-header__container", children: [
21
+ /* @__PURE__ */ jsxs("div", { className: "cui-header__left", children: [
22
+ sideBar && /* @__PURE__ */ jsx("div", { className: "cui-header__sidebar", onClick: handleSideBar, children: /* @__PURE__ */ jsx(FontAwesomeIcon, { icon: faBars, className: "cui-header__icon" }) }),
23
+ /* @__PURE__ */ jsxs("div", { className: "cui-header__title", onClick: handleHome, children: [
24
+ icon && /* @__PURE__ */ jsx(FontAwesomeIcon, { icon, className: "cui-header__icon" }),
25
+ /* @__PURE__ */ jsx("h1", { children: title })
26
+ ] }),
27
+ subTitle && /* @__PURE__ */ jsx("div", { className: "cui-header__subtitle", children: /* @__PURE__ */ jsx("h2", { children: subTitle }) })
28
+ ] }),
29
+ /* @__PURE__ */ jsx("div", { className: "cui-header__right", children: /* @__PURE__ */ jsx("div", { className: "cui-header__profile", children: profile }) })
30
+ ] })
31
+ }
32
+ ) });
33
+ };
34
+ export {
35
+ Header as default
36
+ };
37
+ //# sourceMappingURL=Header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Header.js","sources":["../../../../../../src/legacy/components/layout/Header/Header.tsx"],"sourcesContent":["import React, { ReactNode } from 'react'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { faBars, faHouse } from '@fortawesome/free-solid-svg-icons'\r\nimport './Header.scss'\r\nimport { IconProp } from '@fortawesome/fontawesome-svg-core'\r\n\r\ntype Props = {\r\n title: string\r\n subTitle?: string\r\n icon?: IconProp\r\n sideBar: boolean\r\n handleSideBar: () => void\r\n profile: ReactNode\r\n handleHome: () => void\r\n // Sobrepõe o fundo (gradiente/imagem) por defeito. Aceita qualquer valor\r\n // válido da propriedade CSS \"background\" (cor sólida, gradiente, url(...)).\r\n background?: string\r\n}\r\n\r\n/** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */\r\nconst Header = ({\r\n title,\r\n subTitle,\r\n icon,\r\n sideBar,\r\n handleSideBar,\r\n profile,\r\n handleHome,\r\n background,\r\n}: Props) => {\r\n return (\r\n <div className=\"cui-header\">\r\n <header\r\n className=\"cui-header__wrapper\"\r\n style={background ? ({ '--cui-header-bg': background } as React.CSSProperties) : undefined}\r\n >\r\n <div className=\"cui-header__container\">\r\n <div className=\"cui-header__left\">\r\n {sideBar && (\r\n <div className=\"cui-header__sidebar\" onClick={handleSideBar}>\r\n <FontAwesomeIcon icon={faBars} className=\"cui-header__icon\" />\r\n </div>\r\n )}\r\n <div className=\"cui-header__title\" onClick={handleHome}>\r\n {icon && (\r\n <FontAwesomeIcon icon={icon} className=\"cui-header__icon\" />\r\n )}\r\n <h1>{title}</h1>\r\n </div>\r\n {subTitle && (\r\n <div className=\"cui-header__subtitle\">\r\n <h2>{subTitle}</h2>\r\n </div>\r\n )}\r\n </div>\r\n <div className=\"cui-header__right\">\r\n <div className=\"cui-header__profile\">{profile}</div>\r\n </div>\r\n </div>\r\n </header>\r\n </div>\r\n )\r\n}\r\n\r\nexport default Header\r\n"],"names":[],"mappings":";;;;AAoBA,MAAM,SAAS,CAAC;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAa;AACX,SACE,oBAAC,OAAA,EAAI,WAAU,cACb,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO,aAAc,EAAE,mBAAmB,eAAuC;AAAA,MAEjF,UAAA,qBAAC,OAAA,EAAI,WAAU,yBACb,UAAA;AAAA,QAAA,qBAAC,OAAA,EAAI,WAAU,oBACZ,UAAA;AAAA,UAAA,WACC,oBAAC,OAAA,EAAI,WAAU,uBAAsB,SAAS,eAC5C,UAAA,oBAAC,iBAAA,EAAgB,MAAM,QAAQ,WAAU,mBAAA,CAAmB,GAC9D;AAAA,UAEF,qBAAC,OAAA,EAAI,WAAU,qBAAoB,SAAS,YACzC,UAAA;AAAA,YAAA,QACC,oBAAC,iBAAA,EAAgB,MAAY,WAAU,oBAAmB;AAAA,YAE5D,oBAAC,QAAI,UAAA,MAAA,CAAM;AAAA,UAAA,GACb;AAAA,UACC,gCACE,OAAA,EAAI,WAAU,wBACb,UAAA,oBAAC,MAAA,EAAI,oBAAS,EAAA,CAChB;AAAA,QAAA,GAEJ;AAAA,QACA,oBAAC,SAAI,WAAU,qBACb,8BAAC,OAAA,EAAI,WAAU,uBAAuB,UAAA,QAAA,CAAQ,EAAA,CAChD;AAAA,MAAA,EAAA,CACF;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ;"}
@@ -0,0 +1,31 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import AppShell from "../../../../v1/components/layout/AppShell/AppShell.js";
3
+ import { labelsV1, menuV1 } from "../Sidebar/Sidebar.js";
4
+ const Layout = ({
5
+ children,
6
+ menus,
7
+ currentLang,
8
+ logoutLabel,
9
+ themeLabels,
10
+ deployedAtLabel,
11
+ footer,
12
+ sidebarOpen,
13
+ onSidebarOpenChange,
14
+ ...rest
15
+ }) => /* @__PURE__ */ jsx(
16
+ AppShell,
17
+ {
18
+ ...rest,
19
+ menu: menuV1(menus),
20
+ currentLanguage: currentLang,
21
+ labels: labelsV1({ logoutLabel, themeLabels, deployedAtLabel }),
22
+ sidebarFooter: footer,
23
+ defaultOpen: sidebarOpen,
24
+ onOpenChange: onSidebarOpenChange,
25
+ children
26
+ }
27
+ );
28
+ export {
29
+ Layout as default
30
+ };
31
+ //# sourceMappingURL=Layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Layout.js","sources":["../../../../../../src/legacy/components/layout/Layout/Layout.tsx"],"sourcesContent":["import React from 'react'\r\nimport AppShell from '../../../../v1/components/layout/AppShell/AppShell'\r\nimport { labelsV1, menuV1, type SidebarMenuItem, type SidebarLanguage, type SidebarTheme } from '../Sidebar/Sidebar'\r\n\r\n/*\r\n * Migrado para o V1: a moldura da app é o `AppShell` do V1. Este ficheiro só\r\n * mantém a API antiga, e os seus textos por omissão, para as apps que ainda a\r\n * usam.\r\n */\r\n\r\n/** @deprecated Legacy — usar `AppShellProps` do V1. */\r\nexport interface LayoutProps {\r\n children: React.ReactNode\r\n menus: SidebarMenuItem[]\r\n groupLabels?: Record<string, string>\r\n appTitle?: string\r\n /** Barra superior opcional (título/alertas), sticky acima do conteúdo. */\r\n topBar?: React.ReactNode\r\n avatar?: React.ReactNode\r\n onLogout?: () => void\r\n logoutLabel?: string\r\n languages?: SidebarLanguage[]\r\n currentLang?: string\r\n onLanguageChange?: (code: string) => void\r\n theme?: SidebarTheme\r\n onThemeChange?: (theme: SidebarTheme) => void\r\n themeLabels?: { label?: string; light?: string; dark?: string; system?: string }\r\n footer?: (isExpanded: boolean) => React.ReactNode\r\n deployedAt?: string | number | Date\r\n deployedAtLabel?: string\r\n /** Estado inicial da sidebar (aberta/fechada). */\r\n sidebarOpen?: boolean\r\n /** Chamado quando a pessoa abre/fecha a sidebar. */\r\n onSidebarOpenChange?: (open: boolean) => void\r\n}\r\n\r\n/** @deprecated Legacy — usar `AppShell` do V1. */\r\nconst Layout = ({\r\n children,\r\n menus,\r\n currentLang,\r\n logoutLabel,\r\n themeLabels,\r\n deployedAtLabel,\r\n footer,\r\n sidebarOpen,\r\n onSidebarOpenChange,\r\n ...rest\r\n}: LayoutProps) => (\r\n <AppShell\r\n {...rest}\r\n menu={menuV1(menus)}\r\n currentLanguage={currentLang}\r\n labels={labelsV1({ logoutLabel, themeLabels, deployedAtLabel })}\r\n sidebarFooter={footer}\r\n defaultOpen={sidebarOpen}\r\n onOpenChange={onSidebarOpenChange}\r\n >\r\n {children}\r\n </AppShell>\r\n)\r\n\r\nexport default Layout\r\n"],"names":[],"mappings":";;;AAqCA,MAAM,SAAS,CAAC;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MACE;AAAA,EAAC;AAAA,EAAA;AAAA,IACE,GAAG;AAAA,IACJ,MAAM,OAAO,KAAK;AAAA,IAClB,iBAAiB;AAAA,IACjB,QAAQ,SAAS,EAAE,aAAa,aAAa,iBAAiB;AAAA,IAC9D,eAAe;AAAA,IACf,aAAa;AAAA,IACb,cAAc;AAAA,IAEb;AAAA,EAAA;AACH;"}
@@ -0,0 +1,38 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import SideNav from "../../../../v1/components/layout/SideNav/SideNav.js";
3
+ const menuV1 = (menus) => menus.map(({ badge, ...item }) => ({ ...item, end: item.end ?? item.to === "/", badges: badge ? [{ count: badge }] : void 0 }));
4
+ const labelsV1 = (p) => ({
5
+ logout: p.logoutLabel ?? "Logout",
6
+ theme: p.themeLabels?.label ?? "Theme",
7
+ light: p.themeLabels?.light ?? "Light",
8
+ dark: p.themeLabels?.dark ?? "Dark",
9
+ system: p.themeLabels?.system ?? "System",
10
+ deployedAt: p.deployedAtLabel ?? "Último deploy"
11
+ });
12
+ const Sidebar = ({
13
+ isOpen = true,
14
+ setIsOpen,
15
+ menus,
16
+ currentLang,
17
+ logoutLabel,
18
+ themeLabels,
19
+ deployedAtLabel,
20
+ ...rest
21
+ }) => /* @__PURE__ */ jsx(
22
+ SideNav,
23
+ {
24
+ ...rest,
25
+ menu: menuV1(menus),
26
+ currentLanguage: currentLang,
27
+ labels: labelsV1({ logoutLabel, themeLabels, deployedAtLabel }),
28
+ open: isOpen,
29
+ onOpenChange: setIsOpen ?? (() => {
30
+ })
31
+ }
32
+ );
33
+ export {
34
+ Sidebar as default,
35
+ labelsV1,
36
+ menuV1
37
+ };
38
+ //# sourceMappingURL=Sidebar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sidebar.js","sources":["../../../../../../src/legacy/components/layout/Sidebar/Sidebar.tsx"],"sourcesContent":["import React from 'react'\r\nimport SideNav, { type SideNavItem, type SideNavLabels } from '../../../../v1/components/layout/SideNav/SideNav'\r\n\r\n/*\r\n * Migrado para o V1: o menu lateral é o `SideNav` do V1 (normalmente dentro do\r\n * `AppShell`). Este ficheiro só mantém a API antiga, e os seus textos por\r\n * omissão, para as apps que ainda a usam.\r\n */\r\n\r\n/** @deprecated Legacy — usar `SideNavTheme` do V1. */\r\nexport type SidebarTheme = 'light' | 'dark' | 'system'\r\n\r\n/** @deprecated Legacy — usar `languages` do `SideNav` do V1. */\r\nexport interface SidebarLanguage {\r\n code: string\r\n label: string\r\n}\r\n\r\n/** @deprecated Legacy — usar `SideNavItem` do V1. */\r\nexport interface SidebarMenuItem {\r\n to: string\r\n icon: React.ComponentType<{ size?: number; className?: string }>\r\n label: string\r\n group?: string\r\n end?: boolean\r\n /** Contador opcional (ex: aprovações pendentes). */\r\n badge?: number\r\n /** Destino fora da aplicação: abre em separador novo. */\r\n external?: boolean\r\n}\r\n\r\n/** @deprecated Legacy — usar `SideNavProps` do V1. */\r\nexport interface SidebarProps {\r\n isOpen?: boolean\r\n setIsOpen?: (isOpen: boolean) => void\r\n menus: SidebarMenuItem[]\r\n groupLabels?: Record<string, string>\r\n appTitle?: string\r\n avatar?: React.ReactNode\r\n onLogout?: () => void\r\n logoutLabel?: string\r\n languages?: SidebarLanguage[]\r\n currentLang?: string\r\n onLanguageChange?: (code: string) => void\r\n theme?: SidebarTheme\r\n onThemeChange?: (theme: SidebarTheme) => void\r\n themeLabels?: { label?: string; light?: string; dark?: string; system?: string }\r\n footer?: (isExpanded: boolean) => React.ReactNode\r\n deployedAt?: string | number | Date\r\n deployedAtLabel?: string\r\n}\r\n\r\n/** Itens do menu antigo no formato do V1 (`badge` → `badges`). */\r\nexport const menuV1 = (menus: SidebarMenuItem[]): SideNavItem[] =>\r\n menus.map(({ badge, ...item }) => ({ ...item, end: item.end ?? item.to === '/', badges: badge ? [{ count: badge }] : undefined }))\r\n\r\n/** Os textos por omissão do menu antigo, para não mudarem nas apps que ainda o usam. */\r\nexport const labelsV1 = (\r\n p: Pick<SidebarProps, 'logoutLabel' | 'themeLabels' | 'deployedAtLabel'>,\r\n): Partial<SideNavLabels> => ({\r\n logout: p.logoutLabel ?? 'Logout',\r\n theme: p.themeLabels?.label ?? 'Theme',\r\n light: p.themeLabels?.light ?? 'Light',\r\n dark: p.themeLabels?.dark ?? 'Dark',\r\n system: p.themeLabels?.system ?? 'System',\r\n deployedAt: p.deployedAtLabel ?? 'Último deploy',\r\n})\r\n\r\n/** @deprecated Legacy — usar `SideNav` (ou `AppShell`) do V1. */\r\nconst Sidebar = ({\r\n isOpen = true,\r\n setIsOpen,\r\n menus,\r\n currentLang,\r\n logoutLabel,\r\n themeLabels,\r\n deployedAtLabel,\r\n ...rest\r\n}: SidebarProps) => (\r\n <SideNav\r\n {...rest}\r\n menu={menuV1(menus)}\r\n currentLanguage={currentLang}\r\n labels={labelsV1({ logoutLabel, themeLabels, deployedAtLabel })}\r\n open={isOpen}\r\n onOpenChange={setIsOpen ?? (() => {})}\r\n />\r\n)\r\n\r\nexport default Sidebar\r\n"],"names":[],"mappings":";;AAqDO,MAAM,SAAS,CAAC,UACrB,MAAM,IAAI,CAAC,EAAE,OAAO,GAAG,KAAA,OAAY,EAAE,GAAG,MAAM,KAAK,KAAK,OAAO,KAAK,OAAO,KAAK,QAAQ,QAAQ,CAAC,EAAE,OAAO,OAAO,IAAI,SAAY;AAG5H,MAAM,WAAW,CACtB,OAC4B;AAAA,EAC5B,QAAQ,EAAE,eAAe;AAAA,EACzB,OAAO,EAAE,aAAa,SAAS;AAAA,EAC/B,OAAO,EAAE,aAAa,SAAS;AAAA,EAC/B,MAAM,EAAE,aAAa,QAAQ;AAAA,EAC7B,QAAQ,EAAE,aAAa,UAAU;AAAA,EACjC,YAAY,EAAE,mBAAmB;AACnC;AAGA,MAAM,UAAU,CAAC;AAAA,EACf,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MACE;AAAA,EAAC;AAAA,EAAA;AAAA,IACE,GAAG;AAAA,IACJ,MAAM,OAAO,KAAK;AAAA,IAClB,iBAAiB;AAAA,IACjB,QAAQ,SAAS,EAAE,aAAa,aAAa,iBAAiB;AAAA,IAC9D,MAAM;AAAA,IACN,cAAc,cAAc,MAAM;AAAA,IAAC;AAAA,EAAA;AACrC;"}
@@ -0,0 +1,10 @@
1
+ .cui-spinner {
2
+ display: flex;
3
+ align-items: center;
4
+ justify-content: center;
5
+ width: 100%;
6
+ }
7
+ .cui-spinner .cui-icon {
8
+ font-size: 1.5rem;
9
+ color: var(--dark-blue);
10
+ }
@@ -0,0 +1,19 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
3
+ import { faSpinner } from "@fortawesome/free-solid-svg-icons";
4
+ import './Spinner.css';/* empty css */
5
+ const Spinner = () => {
6
+ return /* @__PURE__ */ jsx("div", { className: "cui-spinner", children: /* @__PURE__ */ jsx(
7
+ FontAwesomeIcon,
8
+ {
9
+ icon: faSpinner,
10
+ className: "cui-icon",
11
+ spin: true,
12
+ "aria-hidden": "true"
13
+ }
14
+ ) });
15
+ };
16
+ export {
17
+ Spinner as default
18
+ };
19
+ //# sourceMappingURL=Spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Spinner.js","sources":["../../../../../../src/legacy/components/layout/Spinner/Spinner.tsx"],"sourcesContent":["import React from 'react'\r\n\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { faSpinner } from '@fortawesome/free-solid-svg-icons'\r\nimport './Spinner.scss'\r\n\r\n/** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */\r\nconst Spinner: React.FC = () => {\r\n return (\r\n <div className=\"cui-spinner\">\r\n <FontAwesomeIcon\r\n icon={faSpinner}\r\n className={'cui-icon'}\r\n spin\r\n aria-hidden=\"true\"\r\n />\r\n </div>\r\n )\r\n}\r\n\r\nexport default Spinner\r\n"],"names":[],"mappings":";;;;AAOA,MAAM,UAAoB,MAAM;AAC9B,SACE,oBAAC,OAAA,EAAI,WAAU,eACb,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAM;AAAA,MACN,WAAW;AAAA,MACX,MAAI;AAAA,MACJ,eAAY;AAAA,IAAA;AAAA,EAAA,GAEhB;AAEJ;"}
@@ -0,0 +1,34 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ const Search = ({ size = 24, className }) => /* @__PURE__ */ jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className, children: [
3
+ /* @__PURE__ */ jsx("circle", { cx: "11", cy: "11", r: "8" }),
4
+ /* @__PURE__ */ jsx("path", { d: "m21 21-4.3-4.3" })
5
+ ] });
6
+ const Bell = ({ size = 24, className }) => /* @__PURE__ */ jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className, children: [
7
+ /* @__PURE__ */ jsx("path", { d: "M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9" }),
8
+ /* @__PURE__ */ jsx("path", { d: "M10.3 21a1.94 1.94 0 0 0 3.4 0" })
9
+ ] });
10
+ const TopBar = ({ searchPlaceholder, onSearch, right }) => {
11
+ return /* @__PURE__ */ jsxs("header", { className: "h-16 bg-white border-b border-slate-100 dark:bg-slate-900 dark:border-slate-800 fixed top-0 right-0 left-0 sm:left-64 z-30 flex items-center justify-between px-4 sm:px-12", children: [
12
+ /* @__PURE__ */ jsx("div", { className: "flex items-center gap-4 flex-1 max-w-xl", children: /* @__PURE__ */ jsxs("div", { className: "relative group w-full", children: [
13
+ /* @__PURE__ */ jsx(Search, { size: 16, className: "absolute left-0 top-1/2 -translate-y-1/2 text-slate-400 group-focus-within:text-proef-blue transition-colors" }),
14
+ /* @__PURE__ */ jsx(
15
+ "input",
16
+ {
17
+ type: "text",
18
+ placeholder: searchPlaceholder,
19
+ onChange: (e) => onSearch?.(e.target.value),
20
+ className: "w-full bg-transparent border-none py-2.5 pl-8 pr-4 text-sm focus:ring-0 outline-none placeholder:text-slate-400 font-medium"
21
+ }
22
+ ),
23
+ /* @__PURE__ */ jsx("div", { className: "absolute bottom-1 left-0 right-4 h-0.5 bg-slate-100 scale-x-0 group-focus-within:scale-x-100 transition-transform origin-left duration-300" })
24
+ ] }) }),
25
+ /* @__PURE__ */ jsx("div", { className: "flex items-center gap-4", children: right ?? /* @__PURE__ */ jsxs("button", { className: "relative p-2 text-slate-400 hover:text-proef-navy transition-colors", children: [
26
+ /* @__PURE__ */ jsx(Bell, { size: 20 }),
27
+ /* @__PURE__ */ jsx("span", { className: "absolute top-2 right-2 w-1.5 h-1.5 bg-proef-turquoise rounded-full" })
28
+ ] }) })
29
+ ] });
30
+ };
31
+ export {
32
+ TopBar as default
33
+ };
34
+ //# sourceMappingURL=TopBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TopBar.js","sources":["../../../../../../src/legacy/components/layout/TopBar/TopBar.tsx"],"sourcesContent":["import React from 'react'\r\n\r\n// ── Inline icons (no lucide-react dependency in common-ui) ────────────────\r\ntype IconProps = { size?: number; className?: string }\r\n\r\nconst Search = ({ size = 24, className }: IconProps) => (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className}>\r\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\r\n <path d=\"m21 21-4.3-4.3\" />\r\n </svg>\r\n)\r\n\r\nconst Bell = ({ size = 24, className }: IconProps) => (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className}>\r\n <path d=\"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9\" />\r\n <path d=\"M10.3 21a1.94 1.94 0 0 0 3.4 0\" />\r\n </svg>\r\n)\r\n\r\n/** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */\r\nexport interface TopBarProps {\r\n searchPlaceholder?: string\r\n onSearch?: (value: string) => void\r\n right?: React.ReactNode\r\n}\r\n\r\n/** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */\r\nconst TopBar = ({ searchPlaceholder, onSearch, right }: TopBarProps) => {\r\n return (\r\n <header className=\"h-16 bg-white border-b border-slate-100 dark:bg-slate-900 dark:border-slate-800 fixed top-0 right-0 left-0 sm:left-64 z-30 flex items-center justify-between px-4 sm:px-12\">\r\n <div className=\"flex items-center gap-4 flex-1 max-w-xl\">\r\n <div className=\"relative group w-full\">\r\n <Search size={16} className=\"absolute left-0 top-1/2 -translate-y-1/2 text-slate-400 group-focus-within:text-proef-blue transition-colors\" />\r\n <input\r\n type=\"text\"\r\n placeholder={searchPlaceholder}\r\n onChange={(e) => onSearch?.(e.target.value)}\r\n className=\"w-full bg-transparent border-none py-2.5 pl-8 pr-4 text-sm focus:ring-0 outline-none placeholder:text-slate-400 font-medium\"\r\n />\r\n <div className=\"absolute bottom-1 left-0 right-4 h-0.5 bg-slate-100 scale-x-0 group-focus-within:scale-x-100 transition-transform origin-left duration-300\" />\r\n </div>\r\n </div>\r\n <div className=\"flex items-center gap-4\">\r\n {right ?? (\r\n <button className=\"relative p-2 text-slate-400 hover:text-proef-navy transition-colors\">\r\n <Bell size={20} />\r\n <span className=\"absolute top-2 right-2 w-1.5 h-1.5 bg-proef-turquoise rounded-full\" />\r\n </button>\r\n )}\r\n </div>\r\n </header>\r\n )\r\n}\r\n\r\nexport default TopBar\r\n"],"names":[],"mappings":";AAKA,MAAM,SAAS,CAAC,EAAE,OAAO,IAAI,UAAA,MACzB,qBAAC,OAAA,EAAI,OAAM,8BAA6B,OAAO,MAAM,QAAQ,MAAM,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,eAAc,SAAQ,gBAAe,SAAQ,WAClL,UAAA;AAAA,EAAA,oBAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,KAAI;AAAA,EAC9B,oBAAC,QAAA,EAAK,GAAE,iBAAA,CAAiB;AAAA,GAC7B;AAGJ,MAAM,OAAO,CAAC,EAAE,OAAO,IAAI,UAAA,MACvB,qBAAC,OAAA,EAAI,OAAM,8BAA6B,OAAO,MAAM,QAAQ,MAAM,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,eAAc,SAAQ,gBAAe,SAAQ,WAClL,UAAA;AAAA,EAAA,oBAAC,QAAA,EAAK,GAAE,4CAAA,CAA4C;AAAA,EACpD,oBAAC,QAAA,EAAK,GAAE,iCAAA,CAAiC;AAAA,GAC7C;AAWJ,MAAM,SAAS,CAAC,EAAE,mBAAmB,UAAU,YAAyB;AACpE,SACI,qBAAC,UAAA,EAAO,WAAU,8KACd,UAAA;AAAA,IAAA,oBAAC,SAAI,WAAU,2CACX,UAAA,qBAAC,OAAA,EAAI,WAAU,yBACX,UAAA;AAAA,MAAA,oBAAC,QAAA,EAAO,MAAM,IAAI,WAAU,gHAA+G;AAAA,MAC3I;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,MAAK;AAAA,UACL,aAAa;AAAA,UACb,UAAU,CAAC,MAAM,WAAW,EAAE,OAAO,KAAK;AAAA,UAC1C,WAAU;AAAA,QAAA;AAAA,MAAA;AAAA,MAEd,oBAAC,OAAA,EAAI,WAAU,6IAAA,CAA6I;AAAA,IAAA,EAAA,CAChK,EAAA,CACJ;AAAA,IACA,oBAAC,SAAI,WAAU,2BACV,mBACG,qBAAC,UAAA,EAAO,WAAU,uEACd,UAAA;AAAA,MAAA,oBAAC,MAAA,EAAK,MAAM,GAAA,CAAI;AAAA,MAChB,oBAAC,QAAA,EAAK,WAAU,qEAAA,CAAqE;AAAA,IAAA,EAAA,CACzF,EAAA,CAER;AAAA,EAAA,GACJ;AAER;"}
@@ -0,0 +1,82 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { NavLink } from "react-router-dom";
3
+ const LogOut = ({ size = 16, className }) => /* @__PURE__ */ jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className, children: [
4
+ /* @__PURE__ */ jsx("path", { d: "M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4" }),
5
+ /* @__PURE__ */ jsx("polyline", { points: "16 17 21 12 16 7" }),
6
+ /* @__PURE__ */ jsx("line", { x1: "21", x2: "9", y1: "12", y2: "12" })
7
+ ] });
8
+ const Sun = ({ size = 16, className }) => /* @__PURE__ */ jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className, children: [
9
+ /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "4" }),
10
+ /* @__PURE__ */ jsx("path", { d: "M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41" })
11
+ ] });
12
+ const Moon = ({ size = 16, className }) => /* @__PURE__ */ jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className, children: /* @__PURE__ */ jsx("path", { d: "M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9z" }) });
13
+ const Monitor = ({ size = 16, className }) => /* @__PURE__ */ jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className, children: [
14
+ /* @__PURE__ */ jsx("rect", { width: "20", height: "14", x: "2", y: "3", rx: "2" }),
15
+ /* @__PURE__ */ jsx("path", { d: "M8 21h8M12 17v4" })
16
+ ] });
17
+ const TopNavLayout = ({
18
+ children,
19
+ menus,
20
+ appTitle,
21
+ appSubtitle,
22
+ logo,
23
+ avatar,
24
+ userName,
25
+ onLogout,
26
+ logoutLabel = "Logout",
27
+ languages,
28
+ currentLang,
29
+ onLanguageChange,
30
+ theme,
31
+ onThemeChange,
32
+ themeLabels,
33
+ maxWidth = 1400
34
+ }) => {
35
+ const ThemeIcon = theme === "light" ? Sun : theme === "dark" ? Moon : Monitor;
36
+ const cycleTheme = () => {
37
+ if (!onThemeChange) return;
38
+ const order = ["light", "dark", "system"];
39
+ onThemeChange(order[(order.indexOf(theme ?? "system") + 1) % order.length]);
40
+ };
41
+ return /* @__PURE__ */ jsxs("div", { className: "min-h-screen dark:bg-slate-950", children: [
42
+ /* @__PURE__ */ jsx("nav", { className: "bg-white border-b border-slate-200 dark:bg-slate-900 dark:border-slate-700 sticky top-0 z-50 shadow-sm", children: /* @__PURE__ */ jsx("div", { style: { maxWidth }, className: "mx-auto px-5", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-5 h-12", children: [
43
+ /* @__PURE__ */ jsx("div", { className: "shrink-0", children: logo ?? /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2.5", children: [
44
+ /* @__PURE__ */ jsx("div", { className: "w-1 h-7 bg-proef-turquoise" }),
45
+ /* @__PURE__ */ jsxs("div", { children: [
46
+ /* @__PURE__ */ jsx("div", { className: "text-sm font-black tracking-tighter text-proef-navy uppercase leading-none", children: appTitle }),
47
+ appSubtitle && /* @__PURE__ */ jsx("div", { className: "text-[9px] font-bold uppercase tracking-[0.15em] text-slate-400 mt-0.5", children: appSubtitle })
48
+ ] })
49
+ ] }) }),
50
+ /* @__PURE__ */ jsx("div", { className: "flex gap-0.5 flex-1 overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden", children: menus.map((item) => /* @__PURE__ */ jsx(
51
+ NavLink,
52
+ {
53
+ to: item.to,
54
+ end: item.end,
55
+ className: ({ isActive }) => `px-3 py-1.5 text-[12px] font-bold whitespace-nowrap transition-colors border-b-2 ${isActive ? "text-proef-blue border-proef-blue" : "text-slate-500 hover:text-proef-navy border-transparent"}`,
56
+ children: item.label
57
+ },
58
+ item.to
59
+ )) }),
60
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 shrink-0", children: [
61
+ languages && languages.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex gap-1", children: languages.map((l) => /* @__PURE__ */ jsx(
62
+ "button",
63
+ {
64
+ onClick: () => onLanguageChange?.(l.code),
65
+ className: `appearance-none bg-transparent border-0 cursor-pointer px-1 text-[10px] font-black uppercase tracking-widest transition-colors ${currentLang === l.code ? "text-proef-blue" : "text-slate-400 hover:text-proef-navy"}`,
66
+ children: l.label
67
+ },
68
+ l.code
69
+ )) }),
70
+ onThemeChange && /* @__PURE__ */ jsx("button", { onClick: cycleTheme, title: themeLabels?.label ?? "Theme", className: "appearance-none bg-transparent border-0 cursor-pointer p-1.5 text-slate-400 hover:text-proef-navy transition-colors", children: /* @__PURE__ */ jsx(ThemeIcon, { size: 16 }) }),
71
+ avatar,
72
+ userName && /* @__PURE__ */ jsx("span", { className: "text-[11px] font-semibold text-slate-500 hidden sm:block", children: userName }),
73
+ onLogout && /* @__PURE__ */ jsx("button", { onClick: onLogout, title: logoutLabel, className: "appearance-none bg-transparent border-0 cursor-pointer p-1.5 text-slate-400 hover:text-incumprido transition-colors", children: /* @__PURE__ */ jsx(LogOut, { size: 16 }) })
74
+ ] })
75
+ ] }) }) }),
76
+ /* @__PURE__ */ jsx("main", { style: { maxWidth }, className: "mx-auto px-3 sm:px-5 py-4", children })
77
+ ] });
78
+ };
79
+ export {
80
+ TopNavLayout as default
81
+ };
82
+ //# sourceMappingURL=TopNavLayout.js.map