@nextelco/common-ui 2.1.98 → 2.1.99

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 (356) hide show
  1. package/dist/esm/index.js +222 -0
  2. package/dist/esm/index.js.map +1 -0
  3. package/dist/esm/legacy/assets/svgs/proef-footer-logo.svg.js +5 -0
  4. package/dist/esm/legacy/assets/svgs/proef-footer-logo.svg.js.map +1 -0
  5. package/dist/esm/legacy/components/atoms/Acronym/Acronym.css +43 -0
  6. package/dist/esm/legacy/components/atoms/Acronym/Acronym.js +31 -0
  7. package/dist/esm/legacy/components/atoms/Acronym/Acronym.js.map +1 -0
  8. package/dist/esm/legacy/components/atoms/BreadCrumb/BreadCrumb.css +36 -0
  9. package/dist/esm/legacy/components/atoms/BreadCrumb/BreadCrumb.js +57 -0
  10. package/dist/esm/legacy/components/atoms/BreadCrumb/BreadCrumb.js.map +1 -0
  11. package/dist/esm/legacy/components/atoms/Button/variants/ActionButton.css +218 -0
  12. package/dist/esm/legacy/components/atoms/Button/variants/ActionButton.js +50 -0
  13. package/dist/esm/legacy/components/atoms/Button/variants/ActionButton.js.map +1 -0
  14. package/dist/esm/legacy/components/atoms/Button/variants/FilterButton.css +56 -0
  15. package/dist/esm/legacy/components/atoms/Button/variants/FilterButton.js +34 -0
  16. package/dist/esm/legacy/components/atoms/Button/variants/FilterButton.js.map +1 -0
  17. package/dist/esm/legacy/components/atoms/Button/variants/IconButton.css +74 -0
  18. package/dist/esm/legacy/components/atoms/Button/variants/IconButton.js +29 -0
  19. package/dist/esm/legacy/components/atoms/Button/variants/IconButton.js.map +1 -0
  20. package/dist/esm/legacy/components/atoms/Button/variants/MainButton.css +99 -0
  21. package/dist/esm/legacy/components/atoms/Button/variants/MainButton.js +36 -0
  22. package/dist/esm/legacy/components/atoms/Button/variants/MainButton.js.map +1 -0
  23. package/dist/esm/legacy/components/atoms/Button/variants/TabButton.css +63 -0
  24. package/dist/esm/legacy/components/atoms/Button/variants/TabButton.js +21 -0
  25. package/dist/esm/legacy/components/atoms/Button/variants/TabButton.js.map +1 -0
  26. package/dist/esm/legacy/components/atoms/Field/Field.css +171 -0
  27. package/dist/esm/legacy/components/atoms/Field/Field.js +70 -0
  28. package/dist/esm/legacy/components/atoms/Field/Field.js.map +1 -0
  29. package/dist/esm/legacy/components/atoms/IconText/IconText.css +10 -0
  30. package/dist/esm/legacy/components/atoms/IconText/IconText.js +25 -0
  31. package/dist/esm/legacy/components/atoms/IconText/IconText.js.map +1 -0
  32. package/dist/esm/legacy/components/atoms/Icone/Icone.js +24 -0
  33. package/dist/esm/legacy/components/atoms/Icone/Icone.js.map +1 -0
  34. package/dist/esm/legacy/components/atoms/Input/Input.css +12 -0
  35. package/dist/esm/legacy/components/atoms/Input/Input.js +28 -0
  36. package/dist/esm/legacy/components/atoms/Input/Input.js.map +1 -0
  37. package/dist/esm/legacy/components/atoms/InputData/InputData.js +36 -0
  38. package/dist/esm/legacy/components/atoms/InputData/InputData.js.map +1 -0
  39. package/dist/esm/legacy/components/atoms/Label/Label.css +192 -0
  40. package/dist/esm/legacy/components/atoms/Label/Label.js +13 -0
  41. package/dist/esm/legacy/components/atoms/Label/Label.js.map +1 -0
  42. package/dist/esm/legacy/components/atoms/MultiTagPickerTag/MultiTagPickerTag.css +40 -0
  43. package/dist/esm/legacy/components/atoms/MultiTagPickerTag/MultiTagPickerTag.js +21 -0
  44. package/dist/esm/legacy/components/atoms/MultiTagPickerTag/MultiTagPickerTag.js.map +1 -0
  45. package/dist/esm/legacy/components/atoms/Select/Select.css +16 -0
  46. package/dist/esm/legacy/components/atoms/Select/Select.js +27 -0
  47. package/dist/esm/legacy/components/atoms/Select/Select.js.map +1 -0
  48. package/dist/esm/legacy/components/atoms/Stack/Stack.js +20 -0
  49. package/dist/esm/legacy/components/atoms/Stack/Stack.js.map +1 -0
  50. package/dist/esm/legacy/components/atoms/Switch/CustomSwitch.css +36 -0
  51. package/dist/esm/legacy/components/atoms/Switch/CustomSwitch.js +29 -0
  52. package/dist/esm/legacy/components/atoms/Switch/CustomSwitch.js.map +1 -0
  53. package/dist/esm/legacy/components/atoms/Tooltip/Tooltip.css +17 -0
  54. package/dist/esm/legacy/components/atoms/Tooltip/Tooltip.js +41 -0
  55. package/dist/esm/legacy/components/atoms/Tooltip/Tooltip.js.map +1 -0
  56. package/dist/esm/legacy/components/charts/Charts.js +259 -0
  57. package/dist/esm/legacy/components/charts/Charts.js.map +1 -0
  58. package/dist/esm/legacy/components/layout/AppLauncher/AppLauncher.js +100 -0
  59. package/dist/esm/legacy/components/layout/AppLauncher/AppLauncher.js.map +1 -0
  60. package/dist/esm/legacy/components/layout/Error/Error.css +20 -0
  61. package/dist/esm/legacy/components/layout/Error/Error.js +12 -0
  62. package/dist/esm/legacy/components/layout/Error/Error.js.map +1 -0
  63. package/dist/esm/legacy/components/layout/Footer/Footer.css +42 -0
  64. package/dist/esm/legacy/components/layout/Footer/Footer.js +23 -0
  65. package/dist/esm/legacy/components/layout/Footer/Footer.js.map +1 -0
  66. package/dist/esm/legacy/components/layout/Header/Header.css +66 -0
  67. package/dist/esm/legacy/components/layout/Header/Header.js +37 -0
  68. package/dist/esm/legacy/components/layout/Header/Header.js.map +1 -0
  69. package/dist/esm/legacy/components/layout/Layout/Layout.js +92 -0
  70. package/dist/esm/legacy/components/layout/Layout/Layout.js.map +1 -0
  71. package/dist/esm/legacy/components/layout/Sidebar/Sidebar.js +227 -0
  72. package/dist/esm/legacy/components/layout/Sidebar/Sidebar.js.map +1 -0
  73. package/dist/esm/legacy/components/layout/Spinner/Spinner.css +10 -0
  74. package/dist/esm/legacy/components/layout/Spinner/Spinner.js +19 -0
  75. package/dist/esm/legacy/components/layout/Spinner/Spinner.js.map +1 -0
  76. package/dist/esm/legacy/components/layout/TopBar/TopBar.js +34 -0
  77. package/dist/esm/legacy/components/layout/TopBar/TopBar.js.map +1 -0
  78. package/dist/esm/legacy/components/layout/TopNavLayout/TopNavLayout.js +82 -0
  79. package/dist/esm/legacy/components/layout/TopNavLayout/TopNavLayout.js.map +1 -0
  80. package/dist/esm/legacy/components/molecules/BarraValor/BarraValor.js +25 -0
  81. package/dist/esm/legacy/components/molecules/BarraValor/BarraValor.js.map +1 -0
  82. package/dist/esm/legacy/components/molecules/ColumnPicker/ColumnPicker.js +179 -0
  83. package/dist/esm/legacy/components/molecules/ColumnPicker/ColumnPicker.js.map +1 -0
  84. package/dist/esm/legacy/components/molecules/ConfirmModal/ConfirmModal.css +3 -0
  85. package/dist/esm/legacy/components/molecules/ConfirmModal/ConfirmModal.js +33 -0
  86. package/dist/esm/legacy/components/molecules/ConfirmModal/ConfirmModal.js.map +1 -0
  87. package/dist/esm/legacy/components/molecules/DataTable/DataTable.js +1145 -0
  88. package/dist/esm/legacy/components/molecules/DataTable/DataTable.js.map +1 -0
  89. package/dist/esm/legacy/components/molecules/FileDropzone/FileDropzone.js +68 -0
  90. package/dist/esm/legacy/components/molecules/FileDropzone/FileDropzone.js.map +1 -0
  91. package/dist/esm/legacy/components/molecules/LanguageSwitcher/LanguageSwitcher.js +96 -0
  92. package/dist/esm/legacy/components/molecules/LanguageSwitcher/LanguageSwitcher.js.map +1 -0
  93. package/dist/esm/legacy/components/molecules/Modal/Modal.css +54 -0
  94. package/dist/esm/legacy/components/molecules/Modal/Modal.js +64 -0
  95. package/dist/esm/legacy/components/molecules/Modal/Modal.js.map +1 -0
  96. package/dist/esm/legacy/components/molecules/MultiTagPicker/MultiTagPicker.css +97 -0
  97. package/dist/esm/legacy/components/molecules/MultiTagPicker/MultiTagPicker.js +113 -0
  98. package/dist/esm/legacy/components/molecules/MultiTagPicker/MultiTagPicker.js.map +1 -0
  99. package/dist/esm/legacy/components/molecules/PhotoAvatar/PhotoAvatar.js +107 -0
  100. package/dist/esm/legacy/components/molecules/PhotoAvatar/PhotoAvatar.js.map +1 -0
  101. package/dist/esm/legacy/components/molecules/Search/Search.css +18 -0
  102. package/dist/esm/legacy/components/molecules/Search/Search.js +30 -0
  103. package/dist/esm/legacy/components/molecules/Search/Search.js.map +1 -0
  104. package/dist/esm/legacy/components/molecules/SeletorPesquisa/SeletorPesquisa.js +116 -0
  105. package/dist/esm/legacy/components/molecules/SeletorPesquisa/SeletorPesquisa.js.map +1 -0
  106. package/dist/esm/legacy/components/molecules/Sidebar/Sidebar.css +69 -0
  107. package/dist/esm/legacy/components/molecules/Sidebar/Sidebar.js +62 -0
  108. package/dist/esm/legacy/components/molecules/Sidebar/Sidebar.js.map +1 -0
  109. package/dist/esm/legacy/components/molecules/UserAvatar/UserAvatar.js +105 -0
  110. package/dist/esm/legacy/components/molecules/UserAvatar/UserAvatar.js.map +1 -0
  111. package/dist/esm/legacy/components/organisms/GanttChart/GanttChart.js +162 -0
  112. package/dist/esm/legacy/components/organisms/GanttChart/GanttChart.js.map +1 -0
  113. package/dist/esm/legacy/components/organisms/Kanban/Kanban.js +88 -0
  114. package/dist/esm/legacy/components/organisms/Kanban/Kanban.js.map +1 -0
  115. package/dist/esm/legacy/components/organisms/LazyLoader/LazyLoader.js +87 -0
  116. package/dist/esm/legacy/components/organisms/LazyLoader/LazyLoader.js.map +1 -0
  117. package/dist/esm/legacy/components/organisms/MapaPontos/MapaPontos.js +427 -0
  118. package/dist/esm/legacy/components/organisms/MapaPontos/MapaPontos.js.map +1 -0
  119. package/dist/esm/legacy/components/organisms/PainelFiltros/PainelFiltros.js +206 -0
  120. package/dist/esm/legacy/components/organisms/PainelFiltros/PainelFiltros.js.map +1 -0
  121. package/dist/esm/legacy/components/organisms/PesquisaRapida/PesquisaRapida.js +147 -0
  122. package/dist/esm/legacy/components/organisms/PesquisaRapida/PesquisaRapida.js.map +1 -0
  123. package/dist/esm/legacy/components/organisms/Profile/Profile.css +26 -0
  124. package/dist/esm/legacy/components/organisms/Profile/Profile.js +26 -0
  125. package/dist/esm/legacy/components/organisms/Profile/Profile.js.map +1 -0
  126. package/dist/esm/legacy/components/organisms/RoleGuard/RoleGuard.js +68 -0
  127. package/dist/esm/legacy/components/organisms/RoleGuard/RoleGuard.js.map +1 -0
  128. package/dist/esm/legacy/components/organisms/Selector/Selector.css +87 -0
  129. package/dist/esm/legacy/components/organisms/Selector/Selector.js +181 -0
  130. package/dist/esm/legacy/components/organisms/Selector/Selector.js.map +1 -0
  131. package/dist/esm/legacy/components/organisms/StatusMatrix/StatusMatrix.js +115 -0
  132. package/dist/esm/legacy/components/organisms/StatusMatrix/StatusMatrix.js.map +1 -0
  133. package/dist/esm/legacy/components/ui/Avisos.js +86 -0
  134. package/dist/esm/legacy/components/ui/Avisos.js.map +1 -0
  135. package/dist/esm/legacy/components/ui/BarraAcoes.js +19 -0
  136. package/dist/esm/legacy/components/ui/BarraAcoes.js.map +1 -0
  137. package/dist/esm/legacy/components/ui/CabecalhoPagina.js +32 -0
  138. package/dist/esm/legacy/components/ui/CabecalhoPagina.js.map +1 -0
  139. package/dist/esm/legacy/components/ui/CaixaPesquisa.js +57 -0
  140. package/dist/esm/legacy/components/ui/CaixaPesquisa.js.map +1 -0
  141. package/dist/esm/legacy/components/ui/Confirmacao.js +52 -0
  142. package/dist/esm/legacy/components/ui/Confirmacao.js.map +1 -0
  143. package/dist/esm/legacy/components/ui/Escolha.js +157 -0
  144. package/dist/esm/legacy/components/ui/Escolha.js.map +1 -0
  145. package/dist/esm/legacy/components/ui/FaixaAviso.js +17 -0
  146. package/dist/esm/legacy/components/ui/FaixaAviso.js.map +1 -0
  147. package/dist/esm/legacy/components/ui/MenuAcoes.js +116 -0
  148. package/dist/esm/legacy/components/ui/MenuAcoes.js.map +1 -0
  149. package/dist/esm/legacy/components/ui/Passos.js +32 -0
  150. package/dist/esm/legacy/components/ui/Passos.js.map +1 -0
  151. package/dist/esm/legacy/components/ui/Separadores.js +52 -0
  152. package/dist/esm/legacy/components/ui/Separadores.js.map +1 -0
  153. package/dist/esm/legacy/components/ui/TextoAuto.js +33 -0
  154. package/dist/esm/legacy/components/ui/TextoAuto.js.map +1 -0
  155. package/dist/esm/legacy/components/ui/Ui.js +360 -0
  156. package/dist/esm/legacy/components/ui/Ui.js.map +1 -0
  157. package/dist/esm/legacy/components/ui/painelFlutuante.js +52 -0
  158. package/dist/esm/legacy/components/ui/painelFlutuante.js.map +1 -0
  159. package/dist/esm/legacy/constants/Colors.js +33 -0
  160. package/dist/esm/legacy/constants/Colors.js.map +1 -0
  161. package/dist/esm/legacy/constants/FontWeight.js +35 -0
  162. package/dist/esm/legacy/constants/FontWeight.js.map +1 -0
  163. package/dist/esm/legacy/contexts/apiContext.js +25 -0
  164. package/dist/esm/legacy/contexts/apiContext.js.map +1 -0
  165. package/dist/esm/legacy/contexts/authContext.js +85 -0
  166. package/dist/esm/legacy/contexts/authContext.js.map +1 -0
  167. package/dist/esm/legacy/contexts/socketContext.js +34 -0
  168. package/dist/esm/legacy/contexts/socketContext.js.map +1 -0
  169. package/dist/esm/legacy/hooks/useApi.js +62 -0
  170. package/dist/esm/legacy/hooks/useApi.js.map +1 -0
  171. package/dist/esm/legacy/hooks/useTheme.js +39 -0
  172. package/dist/esm/legacy/hooks/useTheme.js.map +1 -0
  173. package/dist/esm/legacy/pages/Error/ErrorPage.css +18 -0
  174. package/dist/esm/legacy/pages/Error/ErrorPage.js +50 -0
  175. package/dist/esm/legacy/pages/Error/ErrorPage.js.map +1 -0
  176. package/dist/esm/legacy/pages/Loading/Loading.css +46 -0
  177. package/dist/esm/legacy/pages/Loading/Loading.js +9 -0
  178. package/dist/esm/legacy/pages/Loading/Loading.js.map +1 -0
  179. package/dist/esm/legacy/pages/Login/LoginScreen.js +46 -0
  180. package/dist/esm/legacy/pages/Login/LoginScreen.js.map +1 -0
  181. package/dist/esm/legacy/pages/NotFound/NotFound.css +21 -0
  182. package/dist/esm/legacy/pages/NotFound/NotFound.js +24 -0
  183. package/dist/esm/legacy/pages/NotFound/NotFound.js.map +1 -0
  184. package/dist/esm/legacy/styles/themes/ButtonThemes.js +28 -0
  185. package/dist/esm/legacy/styles/themes/ButtonThemes.js.map +1 -0
  186. package/dist/esm/legacy/styles/utils/utils.js +7 -0
  187. package/dist/esm/legacy/styles/utils/utils.js.map +1 -0
  188. package/dist/esm/legacy/utils/stringUtils.js +35 -0
  189. package/dist/esm/legacy/utils/stringUtils.js.map +1 -0
  190. package/dist/esm/v1/capabilities/documents/QRScanning/scanQRCodes.js +157 -0
  191. package/dist/esm/v1/capabilities/documents/QRScanning/scanQRCodes.js.map +1 -0
  192. package/dist/esm/v1/components/documents/DocumentDropzone/DocumentDropzone.js +307 -0
  193. package/dist/esm/v1/components/documents/DocumentDropzone/DocumentDropzone.js.map +1 -0
  194. package/dist/esm/v1/components/forms/FormField/FormField.js +59 -0
  195. package/dist/esm/v1/components/forms/FormField/FormField.js.map +1 -0
  196. package/dist/esm/v1/components/forms/FormGrid/FormGrid.js +20 -0
  197. package/dist/esm/v1/components/forms/FormGrid/FormGrid.js.map +1 -0
  198. package/dist/esm/v1/components/overlays/Dialog/Dialog.js +87 -0
  199. package/dist/esm/v1/components/overlays/Dialog/Dialog.js.map +1 -0
  200. package/dist/esm/v1/foundations/icons/icons.js +76 -0
  201. package/dist/esm/v1/foundations/icons/icons.js.map +1 -0
  202. package/dist/esm/v1/primitives/buttons/Button/Button.js +27 -0
  203. package/dist/esm/v1/primitives/buttons/Button/Button.js.map +1 -0
  204. package/dist/esm/v1/primitives/documents/PdfPreview/PdfPreview.js +137 -0
  205. package/dist/esm/v1/primitives/documents/PdfPreview/PdfPreview.js.map +1 -0
  206. package/dist/esm/v1/primitives/documents/PdfPreview/pdfjs.js +26 -0
  207. package/dist/esm/v1/primitives/documents/PdfPreview/pdfjs.js.map +1 -0
  208. package/dist/esm/v1/primitives/forms/LookupInput/LookupInput.js +37 -0
  209. package/dist/esm/v1/primitives/forms/LookupInput/LookupInput.js.map +1 -0
  210. package/dist/esm/v1/primitives/forms/SelectInput/SelectInput.js +29 -0
  211. package/dist/esm/v1/primitives/forms/SelectInput/SelectInput.js.map +1 -0
  212. package/dist/esm/v1/primitives/forms/TextArea/TextArea.js +75 -0
  213. package/dist/esm/v1/primitives/forms/TextArea/TextArea.js.map +1 -0
  214. package/dist/esm/v1/primitives/forms/TextInput/TextInput.js +21 -0
  215. package/dist/esm/v1/primitives/forms/TextInput/TextInput.js.map +1 -0
  216. package/dist/esm/v1/primitives/forms/field.js +12 -0
  217. package/dist/esm/v1/primitives/forms/field.js.map +1 -0
  218. package/dist/style.css +1 -1
  219. package/dist/style.layered.css +1 -1
  220. package/dist/types/index.d.ts +14 -13
  221. package/dist/types/{components → legacy/components}/atoms/Acronym/Acronym.d.ts +1 -0
  222. package/dist/types/{components → legacy/components}/atoms/BreadCrumb/BreadCrumb.d.ts +1 -0
  223. package/dist/types/{components → legacy/components}/atoms/Button/variants/ActionButton.d.ts +1 -0
  224. package/dist/types/{components → legacy/components}/atoms/Button/variants/FilterButton.d.ts +1 -0
  225. package/dist/types/{components → legacy/components}/atoms/Button/variants/IconButton.d.ts +1 -0
  226. package/dist/types/{components → legacy/components}/atoms/Button/variants/MainButton.d.ts +1 -0
  227. package/dist/types/{components → legacy/components}/atoms/Button/variants/TabButton.d.ts +1 -0
  228. package/dist/types/{components → legacy/components}/atoms/Field/Field.d.ts +1 -0
  229. package/dist/types/{components → legacy/components}/atoms/IconText/IconText.d.ts +1 -0
  230. package/dist/types/{components → legacy/components}/atoms/Icone/Icone.d.ts +2 -0
  231. package/dist/types/{components → legacy/components}/atoms/Input/Input.d.ts +1 -0
  232. package/dist/types/{components → legacy/components}/atoms/InputData/InputData.d.ts +4 -0
  233. package/dist/types/{components → legacy/components}/atoms/Label/Label.d.ts +1 -0
  234. package/dist/types/{components → legacy/components}/atoms/Select/Select.d.ts +1 -0
  235. package/dist/types/{components → legacy/components}/atoms/Stack/Stack.d.ts +1 -0
  236. package/dist/types/{components → legacy/components}/atoms/Switch/CustomSwitch.d.ts +1 -0
  237. package/dist/types/{components → legacy/components}/atoms/Tooltip/Tooltip.d.ts +1 -0
  238. package/dist/types/{components → legacy/components}/charts/Charts.d.ts +29 -6
  239. package/dist/types/{components → legacy/components}/layout/AppLauncher/AppLauncher.d.ts +3 -0
  240. package/dist/types/{components → legacy/components}/layout/Error/Error.d.ts +1 -0
  241. package/dist/types/{components → legacy/components}/layout/Footer/Footer.d.ts +1 -0
  242. package/dist/types/{components → legacy/components}/layout/Header/Header.d.ts +1 -0
  243. package/dist/types/{components → legacy/components}/layout/Layout/Layout.d.ts +2 -0
  244. package/dist/types/{components → legacy/components}/layout/Sidebar/Sidebar.d.ts +5 -0
  245. package/dist/types/{components → legacy/components}/layout/Spinner/Spinner.d.ts +1 -0
  246. package/dist/types/{components → legacy/components}/layout/TopBar/TopBar.d.ts +2 -0
  247. package/dist/types/{components → legacy/components}/layout/TopNavLayout/TopNavLayout.d.ts +3 -0
  248. package/dist/types/{components → legacy/components}/molecules/BarraValor/BarraValor.d.ts +3 -0
  249. package/dist/types/{components → legacy/components}/molecules/ColumnPicker/ColumnPicker.d.ts +8 -1
  250. package/dist/types/{components → legacy/components}/molecules/ConfirmModal/ConfirmModal.d.ts +2 -0
  251. package/dist/types/{components → legacy/components}/molecules/DataTable/DataTable.d.ts +6 -0
  252. package/dist/types/{components → legacy/components}/molecules/FileDropzone/FileDropzone.d.ts +3 -0
  253. package/dist/types/{components → legacy/components}/molecules/LanguageSwitcher/LanguageSwitcher.d.ts +3 -0
  254. package/dist/types/{components → legacy/components}/molecules/Modal/Modal.d.ts +2 -0
  255. package/dist/types/{components → legacy/components}/molecules/MultiTagPicker/MultiTagPicker.d.ts +2 -0
  256. package/dist/types/{components → legacy/components}/molecules/PhotoAvatar/PhotoAvatar.d.ts +1 -0
  257. package/dist/types/{components → legacy/components}/molecules/SeletorPesquisa/SeletorPesquisa.d.ts +3 -0
  258. package/dist/types/{components → legacy/components}/molecules/Sidebar/Sidebar.d.ts +1 -0
  259. package/dist/types/{components → legacy/components}/molecules/UserAvatar/UserAvatar.d.ts +1 -0
  260. package/dist/types/{components → legacy/components}/organisms/GanttChart/GanttChart.d.ts +8 -1
  261. package/dist/types/{components → legacy/components}/organisms/Kanban/Kanban.d.ts +3 -0
  262. package/dist/types/{components → legacy/components}/organisms/LazyLoader/LazyLoader.d.ts +1 -0
  263. package/dist/types/{components → legacy/components}/organisms/MapaPontos/MapaPontos.d.ts +12 -2
  264. package/dist/types/{components → legacy/components}/organisms/PainelFiltros/PainelFiltros.d.ts +7 -0
  265. package/dist/types/{components → legacy/components}/organisms/PesquisaRapida/PesquisaRapida.d.ts +5 -0
  266. package/dist/types/{components → legacy/components}/organisms/Profile/Profile.d.ts +1 -0
  267. package/dist/types/{components → legacy/components}/organisms/RoleGuard/RoleGuard.d.ts +6 -1
  268. package/dist/types/{components → legacy/components}/organisms/Selector/Selector.d.ts +1 -0
  269. package/dist/types/{components → legacy/components}/organisms/StatusMatrix/StatusMatrix.d.ts +6 -0
  270. package/dist/types/{components → legacy/components}/ui/Avisos.d.ts +9 -1
  271. package/dist/types/{components → legacy/components}/ui/BarraAcoes.d.ts +2 -0
  272. package/dist/types/{components → legacy/components}/ui/CabecalhoPagina.d.ts +6 -1
  273. package/dist/types/{components → legacy/components}/ui/Confirmacao.d.ts +2 -0
  274. package/dist/types/{components → legacy/components}/ui/FaixaAviso.d.ts +3 -0
  275. package/dist/types/{components → legacy/components}/ui/Passos.d.ts +3 -0
  276. package/dist/types/{components → legacy/components}/ui/Separadores.d.ts +3 -0
  277. package/dist/types/{components → legacy/components}/ui/TextoAuto.d.ts +2 -0
  278. package/dist/types/{components → legacy/components}/ui/Ui.d.ts +41 -7
  279. package/dist/types/{constants → legacy/constants}/FontWeight.d.ts +1 -0
  280. package/dist/types/{contexts → legacy/contexts}/apiContext.d.ts +1 -0
  281. package/dist/types/{contexts → legacy/contexts}/authContext.d.ts +2 -0
  282. package/dist/types/{contexts → legacy/contexts}/socketContext.d.ts +2 -0
  283. package/dist/types/{exports → legacy/exports}/hooks.d.ts +1 -1
  284. package/dist/types/{exports → legacy/exports}/molecules.d.ts +2 -1
  285. package/dist/types/legacy/exports/types.d.ts +7 -0
  286. package/dist/types/{hooks → legacy/hooks}/useApi.d.ts +2 -0
  287. package/dist/types/{hooks → legacy/hooks}/useTheme.d.ts +2 -0
  288. package/dist/types/{pages → legacy/pages}/Error/ErrorPage.d.ts +1 -0
  289. package/dist/types/{pages → legacy/pages}/Loading/Loading.d.ts +1 -0
  290. package/dist/types/{pages → legacy/pages}/Login/LoginScreen.d.ts +2 -0
  291. package/dist/types/{pages → legacy/pages}/NotFound/NotFound.d.ts +1 -0
  292. package/dist/types/legacy/styles/utils/utils.d.ts +2 -0
  293. package/dist/types/{types → legacy/types}/Fetcher.d.ts +1 -0
  294. package/dist/types/{types → legacy/types}/LoggedUser.d.ts +1 -0
  295. package/dist/types/{types → legacy/types}/SidebarMenu.d.ts +2 -0
  296. package/dist/types/legacy/types/themes/AcronymThemes.d.ts +4 -0
  297. package/dist/types/{types → legacy/types}/themes/ButtonThemes.d.ts +3 -0
  298. package/dist/types/legacy/types/themes/CustomSwitchThemes.d.ts +4 -0
  299. package/dist/types/{types → legacy/types}/themes/IconTextThemes.d.ts +1 -0
  300. package/dist/types/legacy/utils/stringUtils.d.ts +6 -0
  301. package/dist/types/v1/capabilities/documents/QRScanning/scanQRCodes.d.ts +25 -0
  302. package/dist/types/v1/components/documents/DocumentDropzone/DocumentDropzone.d.ts +60 -0
  303. package/dist/types/v1/components/forms/FormField/FormField.d.ts +44 -0
  304. package/dist/types/v1/components/forms/FormGrid/FormGrid.d.ts +21 -0
  305. package/dist/types/v1/components/overlays/Dialog/Dialog.d.ts +55 -0
  306. package/dist/types/v1/foundations/icons/icons.d.ts +24 -0
  307. package/dist/types/v1/index.d.ts +25 -0
  308. package/dist/types/v1/primitives/buttons/Button/Button.d.ts +18 -0
  309. package/dist/types/v1/primitives/documents/PdfPreview/PdfPreview.d.ts +17 -0
  310. package/dist/types/v1/primitives/documents/PdfPreview/pdfjs.d.ts +11 -0
  311. package/dist/types/v1/primitives/forms/LookupInput/LookupInput.d.ts +25 -0
  312. package/dist/types/v1/primitives/forms/SelectInput/SelectInput.d.ts +19 -0
  313. package/dist/types/v1/primitives/forms/TextArea/TextArea.d.ts +37 -0
  314. package/dist/types/v1/primitives/forms/TextInput/TextInput.d.ts +16 -0
  315. package/dist/types/v1/primitives/forms/field.d.ts +20 -0
  316. package/package.json +38 -33
  317. package/dist/bundle.js +0 -2
  318. package/dist/bundle.js.LICENSE.txt +0 -80
  319. package/dist/types/components/atoms/Icone/Icone.test.d.ts +0 -1
  320. package/dist/types/components/layout/Sidebar/Sidebar.test.d.ts +0 -1
  321. package/dist/types/components/molecules/BarraValor/BarraValor.test.d.ts +0 -1
  322. package/dist/types/components/molecules/DataTable/DataTable.test.d.ts +0 -1
  323. package/dist/types/components/molecules/SeletorPesquisa/SeletorPesquisa.test.d.ts +0 -1
  324. package/dist/types/components/organisms/Kanban/Kanban.test.d.ts +0 -1
  325. package/dist/types/components/organisms/RoleGuard/RoleGuard.test.d.ts +0 -1
  326. package/dist/types/components/ui/CaixaPesquisa.test.d.ts +0 -1
  327. package/dist/types/components/ui/Escolha.test.d.ts +0 -1
  328. package/dist/types/components/ui/Paginas.test.d.ts +0 -1
  329. package/dist/types/exports/types.d.ts +0 -7
  330. package/dist/types/styles/utils/utils.d.ts +0 -1
  331. package/dist/types/test/setup.d.ts +0 -1
  332. package/dist/types/types/themes/AcronymThemes.d.ts +0 -3
  333. package/dist/types/types/themes/CustomSwitchThemes.d.ts +0 -3
  334. package/dist/types/utils/stringUtils.d.ts +0 -3
  335. /package/dist/types/{components → legacy/components}/atoms/MultiTagPickerTag/MultiTagPickerTag.d.ts +0 -0
  336. /package/dist/types/{components → legacy/components}/atoms/SearchSelect/SearchSelect.d.ts +0 -0
  337. /package/dist/types/{components → legacy/components}/molecules/Search/Search.d.ts +0 -0
  338. /package/dist/types/{components → legacy/components}/ui/CaixaPesquisa.d.ts +0 -0
  339. /package/dist/types/{components → legacy/components}/ui/Escolha.d.ts +0 -0
  340. /package/dist/types/{components → legacy/components}/ui/MenuAcoes.d.ts +0 -0
  341. /package/dist/types/{components → legacy/components}/ui/painelFlutuante.d.ts +0 -0
  342. /package/dist/types/{constants → legacy/constants}/Colors.d.ts +0 -0
  343. /package/dist/types/{exports → legacy/exports}/assets.d.ts +0 -0
  344. /package/dist/types/{exports → legacy/exports}/atoms.d.ts +0 -0
  345. /package/dist/types/{exports → legacy/exports}/charts.d.ts +0 -0
  346. /package/dist/types/{exports → legacy/exports}/constants.d.ts +0 -0
  347. /package/dist/types/{exports → legacy/exports}/contexts.d.ts +0 -0
  348. /package/dist/types/{exports → legacy/exports}/layout.d.ts +0 -0
  349. /package/dist/types/{exports → legacy/exports}/organisms.d.ts +0 -0
  350. /package/dist/types/{exports → legacy/exports}/pages.d.ts +0 -0
  351. /package/dist/types/{exports → legacy/exports}/styles.d.ts +0 -0
  352. /package/dist/types/{exports → legacy/exports}/ui.d.ts +0 -0
  353. /package/dist/types/{exports → legacy/exports}/utils.d.ts +0 -0
  354. /package/dist/types/{styles → legacy/styles}/themes/ButtonThemes.d.ts +0 -0
  355. /package/dist/types/{types → legacy/types}/SelectableElement.d.ts +0 -0
  356. /package/dist/types/{utils → legacy/utils}/keycloak.d.ts +0 -0
@@ -0,0 +1,360 @@
1
+ import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
+ import Escolha from "./Escolha.js";
3
+ function IconX({ className = "" }) {
4
+ return /* @__PURE__ */ jsxs(
5
+ "svg",
6
+ {
7
+ viewBox: "0 0 24 24",
8
+ fill: "none",
9
+ stroke: "currentColor",
10
+ strokeWidth: 2,
11
+ strokeLinecap: "round",
12
+ strokeLinejoin: "round",
13
+ className,
14
+ "aria-hidden": "true",
15
+ children: [
16
+ /* @__PURE__ */ jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
17
+ /* @__PURE__ */ jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
18
+ ]
19
+ }
20
+ );
21
+ }
22
+ function Card({ title, extra, children, className = "" }) {
23
+ return /* @__PURE__ */ jsxs("div", { className: `bg-white border border-slate-200 dark:bg-slate-900 dark:border-slate-700 rounded-xl p-4 sm:p-5 ${className}`, children: [
24
+ (title || extra) && /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-3 mb-3.5", children: [
25
+ title && /* @__PURE__ */ jsx("div", { className: "text-sm font-semibold dark:text-slate-100", children: title }),
26
+ extra
27
+ ] }),
28
+ children
29
+ ] });
30
+ }
31
+ function SectionGroup({
32
+ title,
33
+ tone = "accent",
34
+ children
35
+ }) {
36
+ const tones = {
37
+ accent: ["border-slate-200 dark:border-slate-700", "text-proef-navy dark:text-slate-100"],
38
+ ok: ["border-ok", "text-ok"],
39
+ blue: ["border-[#4FA8FF]", "text-[#2E8CE0]"],
40
+ red: ["border-incumprido", "text-incumprido"],
41
+ purple: ["border-[#8B5CF6]", "text-[#7C3AED]"],
42
+ yellow: ["border-[#D9A400]", "text-[#B78400]"]
43
+ };
44
+ const [borda, texto] = tones[tone];
45
+ return /* @__PURE__ */ jsxs("div", { className: `border-[1.5px] ${borda} rounded-2xl p-4 pb-1 mb-5 bg-[rgba(24,34,56,0.015)] dark:bg-slate-900/40`, children: [
46
+ /* @__PURE__ */ jsx("div", { className: `text-[15px] font-bold text-center tracking-wide mb-3.5 ${texto}`, children: title }),
47
+ children
48
+ ] });
49
+ }
50
+ function Kpi({
51
+ label,
52
+ value,
53
+ tone = "default",
54
+ delta,
55
+ onClick,
56
+ bgTint = false,
57
+ active = false,
58
+ hint,
59
+ dot,
60
+ barra,
61
+ rodape,
62
+ denso = false
63
+ }) {
64
+ const cores = {
65
+ default: "text-slate-800 dark:text-slate-100",
66
+ brand: "text-proef-blue dark:text-sky-300",
67
+ ok: "text-ok",
68
+ risco: "text-risco",
69
+ incumprido: "text-incumprido"
70
+ };
71
+ const fundos = {
72
+ default: "bg-white border-slate-200 dark:bg-slate-900 dark:border-slate-700",
73
+ brand: "bg-proef-blue/10 border-transparent dark:bg-sky-500/15",
74
+ ok: "bg-ok-bg border-transparent",
75
+ risco: "bg-risco-bg border-transparent",
76
+ incumprido: "bg-incumprido-bg border-transparent"
77
+ };
78
+ const base = denso ? `relative border rounded-lg px-2.5 py-1.5 flex flex-col justify-center text-left gap-0.5 ${bgTint ? fundos[tone] : "bg-white border-slate-200 dark:bg-slate-900 dark:border-slate-700"}` : `relative border rounded-xl px-4 py-3 min-h-[88px] flex flex-col items-center justify-center text-center gap-1.5 ${bgTint ? fundos[tone] : "bg-white border-slate-200 dark:bg-slate-900 dark:border-slate-700"}`;
79
+ const totalBarra = Array.isArray(barra) ? barra.reduce((s, x) => s + x.peso, 0) : 0;
80
+ const conteudo = /* @__PURE__ */ jsxs(Fragment, { children: [
81
+ /* @__PURE__ */ jsxs("div", { className: `${denso ? "text-[10px] uppercase tracking-wide" : "text-xs"} text-slate-500 dark:text-slate-400 flex items-center gap-1.5`, children: [
82
+ dot && /* @__PURE__ */ jsx("i", { className: "w-2 h-2 rounded-full inline-block shrink-0", style: { background: dot } }),
83
+ /* @__PURE__ */ jsx("span", { className: "truncate", children: label })
84
+ ] }),
85
+ /* @__PURE__ */ jsxs("div", { className: denso ? "flex items-baseline gap-1.5" : "", children: [
86
+ /* @__PURE__ */ jsx("span", { className: `${denso ? "text-xl" : "text-2xl"} font-semibold ${cores[tone]}`, children: value }),
87
+ delta && /* @__PURE__ */ jsx("span", { className: `${denso ? "text-[11px]" : "hidden"} text-slate-400 truncate`, children: delta })
88
+ ] }),
89
+ delta && !denso && /* @__PURE__ */ jsx("div", { className: "text-[11.5px] text-slate-400", children: delta }),
90
+ barra != null && /* @__PURE__ */ jsx("div", { className: "w-full h-1 bg-slate-100 dark:bg-slate-800 rounded overflow-hidden flex", children: Array.isArray(barra) ? barra.map((x, i) => /* @__PURE__ */ jsx(
91
+ "i",
92
+ {
93
+ style: { width: totalBarra ? `${x.peso / totalBarra * 100}%` : 0, background: x.cor }
94
+ },
95
+ i
96
+ )) : /* @__PURE__ */ jsx("i", { style: { width: `${Math.min(100, Math.max(0, barra))}%`, background: "currentColor" }, className: cores[tone] }) }),
97
+ rodape && /* @__PURE__ */ jsx("div", { className: "text-[11px] text-slate-400", children: rodape })
98
+ ] });
99
+ if (!onClick) return /* @__PURE__ */ jsx("div", { className: base, children: conteudo });
100
+ return /* @__PURE__ */ jsxs(
101
+ "button",
102
+ {
103
+ type: "button",
104
+ onClick,
105
+ title: hint,
106
+ "aria-pressed": active,
107
+ className: `${base} w-full cursor-pointer shadow-sm transition hover:-translate-y-0.5 hover:border-proef-blue dark:hover:border-sky-400 hover:shadow-md focus:outline-none focus-visible:ring-2 focus-visible:ring-proef-blue ${active ? "ring-2 ring-proef-blue border-proef-blue" : ""}`,
108
+ children: [
109
+ /* @__PURE__ */ jsx(
110
+ "svg",
111
+ {
112
+ "aria-hidden": true,
113
+ viewBox: "0 0 24 24",
114
+ className: `absolute right-2.5 top-2.5 h-3.5 w-3.5 ${active ? "text-proef-blue dark:text-sky-300" : "text-slate-300 dark:text-slate-600"}`,
115
+ fill: "none",
116
+ stroke: "currentColor",
117
+ strokeWidth: 2,
118
+ strokeLinecap: "round",
119
+ strokeLinejoin: "round",
120
+ children: /* @__PURE__ */ jsx("path", { d: "M3 4h18l-7 8.5V19l-4 2v-8.5L3 4z" })
121
+ }
122
+ ),
123
+ conteudo
124
+ ]
125
+ }
126
+ );
127
+ }
128
+ function Badge({ tone = "neutral", children }) {
129
+ const cores = {
130
+ ok: "bg-ok-bg text-ok",
131
+ risco: "bg-risco-bg text-risco",
132
+ incumprido: "bg-incumprido-bg text-incumprido",
133
+ neutral: "bg-neutral-bg text-neutral",
134
+ accent: "bg-proef-blue/10 text-proef-navy dark:bg-sky-500/15 dark:text-sky-300"
135
+ };
136
+ return /* @__PURE__ */ jsxs("span", { className: `inline-flex items-center gap-1.5 px-2.5 py-0.5 rounded-full text-xs font-medium whitespace-nowrap ${cores[tone]}`, children: [
137
+ /* @__PURE__ */ jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-current" }),
138
+ children
139
+ ] });
140
+ }
141
+ function BadgeSla({ status, labels }) {
142
+ const tone = status === "ok" ? "ok" : status === "risco" ? "risco" : "incumprido";
143
+ const defaults = { ok: "On time", risco: "At risk", incumprido: "Breached" };
144
+ const label = labels?.[status] ?? defaults[status];
145
+ return /* @__PURE__ */ jsx(Badge, { tone, children: label });
146
+ }
147
+ const CORES_ESTADO_INTERNO = {
148
+ "Concluído": ["#1F8A55", "#E5F6EC"],
149
+ "Aferição": ["#2E6DA4", "#E5F0FA"],
150
+ "Para Tratamento": ["#1868B0", "#E5F0FA"],
151
+ "Aguarda Validação LS": ["#2E6DA4", "#E5F0FA"],
152
+ "Aguarda Produção LS": ["#6E8CAD", "#EDF2F7"],
153
+ "Incompleto/Devolvido": ["#C2255C", "#FBE5EF"],
154
+ "Falta de Documentação": ["#B96E00", "#FCF0DC"],
155
+ Ignorar: ["#767C88", "#EEF0F2"],
156
+ Cancelado: ["#767C88", "#EEF0F2"]
157
+ };
158
+ function ChipEstadoInterno({ estado }) {
159
+ if (!estado) return /* @__PURE__ */ jsx("span", { className: "text-slate-400", children: "—" });
160
+ const cor = CORES_ESTADO_INTERNO[estado];
161
+ if (!cor) return /* @__PURE__ */ jsx("span", { children: estado });
162
+ return /* @__PURE__ */ jsx("span", { className: "px-2 py-0.5 rounded text-[11px] font-medium inline-block", style: { color: cor[0], background: cor[1] }, children: estado });
163
+ }
164
+ function Btn({
165
+ children,
166
+ onClick,
167
+ variant = "default",
168
+ active = false,
169
+ disabled = false,
170
+ title,
171
+ type = "button"
172
+ }) {
173
+ const base = "inline-flex items-center justify-center gap-1.5 h-8 px-3.5 rounded-lg text-[11px] font-black uppercase tracking-widest transition-colors disabled:opacity-50 disabled:cursor-not-allowed whitespace-nowrap";
174
+ const variantes = {
175
+ default: active ? "bg-proef-navy text-white border border-proef-navy dark:bg-proef-blue dark:border-proef-blue" : "bg-white text-slate-500 border border-slate-200 hover:border-proef-navy hover:text-proef-navy dark:bg-slate-800 dark:text-slate-300 dark:border-slate-700 dark:hover:border-slate-400 dark:hover:text-white",
176
+ accent: "bg-proef-navy text-white border border-proef-navy hover:bg-proef-blue dark:bg-proef-blue dark:border-proef-blue dark:hover:bg-sky-500",
177
+ danger: "bg-incumprido text-white border border-incumprido hover:opacity-90 dark:bg-red-600 dark:border-red-600",
178
+ ghost: "text-slate-500 hover:text-proef-navy dark:text-slate-400 dark:hover:text-white"
179
+ };
180
+ return /* @__PURE__ */ jsx("button", { type, onClick, disabled, title, className: `${base} ${variantes[variant]}`, children });
181
+ }
182
+ function BtnGroup({
183
+ value,
184
+ options,
185
+ onChange,
186
+ label
187
+ }) {
188
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 flex-wrap", children: [
189
+ label && /* @__PURE__ */ jsx("span", { className: "text-[10px] font-black uppercase tracking-wider text-slate-400 shrink-0 whitespace-nowrap leading-normal", children: label }),
190
+ /* @__PURE__ */ jsx("div", { className: "flex gap-1.5 flex-wrap", children: options.map((o) => /* @__PURE__ */ jsx(Btn, { active: value === o.value, onClick: () => onChange(o.value), children: o.label }, o.value)) })
191
+ ] });
192
+ }
193
+ function Estado({
194
+ carregando,
195
+ erro,
196
+ vazio,
197
+ labels
198
+ }) {
199
+ if (carregando) return /* @__PURE__ */ jsx("div", { className: "py-10 text-center text-sm text-slate-400", children: labels?.loading ?? "Loading…" });
200
+ if (erro) return /* @__PURE__ */ jsx("div", { className: "py-10 text-center text-sm text-incumprido", children: labels?.error ?? "Failed to load" });
201
+ if (vazio) return /* @__PURE__ */ jsx("div", { className: "py-10 text-center text-sm text-slate-400", children: labels?.empty ?? "No data" });
202
+ return null;
203
+ }
204
+ function Modal({ open, onClose, title, children, wide }) {
205
+ if (!open) return null;
206
+ return /* @__PURE__ */ jsx(
207
+ "div",
208
+ {
209
+ onClick: (e) => {
210
+ if (e.target === e.currentTarget) onClose();
211
+ },
212
+ className: "fixed inset-0 bg-[rgba(20,30,50,0.45)] z-50 flex items-center justify-center p-4",
213
+ children: /* @__PURE__ */ jsxs("div", { className: `bg-white dark:bg-slate-900 rounded-xl w-full ${wide ? "max-w-[min(1600px,95vw)]" : "max-w-[720px]"} max-h-[85vh] flex flex-col shadow-2xl`, children: [
214
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-4 px-5 py-4 border-b border-slate-200 dark:border-slate-700", children: [
215
+ /* @__PURE__ */ jsx("div", { className: "text-[15px] font-bold text-proef-navy dark:text-slate-100", children: title }),
216
+ /* @__PURE__ */ jsx("button", { onClick: onClose, "aria-label": "Close", className: "text-slate-500 hover:text-slate-800 dark:text-slate-400 dark:hover:text-slate-100", children: /* @__PURE__ */ jsx(IconX, { className: "w-5 h-5" }) })
217
+ ] }),
218
+ /* @__PURE__ */ jsx("div", { className: "overflow-auto thin-scroll px-5 py-4", children })
219
+ ] })
220
+ }
221
+ );
222
+ }
223
+ function Campo({ label, children, className = "" }) {
224
+ return /* @__PURE__ */ jsxs("label", { className: `flex flex-col gap-1 ${className}`, children: [
225
+ /* @__PURE__ */ jsx("span", { className: "text-[10px] font-black uppercase tracking-wider text-slate-400 leading-normal", children: label }),
226
+ children
227
+ ] });
228
+ }
229
+ function CampoSelect({
230
+ label,
231
+ value,
232
+ options,
233
+ onChange,
234
+ placeholderVazio,
235
+ disabled = false,
236
+ className = ""
237
+ }) {
238
+ const normalizadas = options.map((o) => typeof o === "string" ? { value: o, label: o } : o);
239
+ return /* @__PURE__ */ jsx(Campo, { label, className, children: /* @__PURE__ */ jsx(
240
+ Escolha,
241
+ {
242
+ valor: value,
243
+ opcoes: normalizadas.map((o) => ({ valor: o.value, rotulo: o.label })),
244
+ onMudar: onChange,
245
+ rotulo: label,
246
+ opcaoVazia: placeholderVazio,
247
+ placeholder: placeholderVazio,
248
+ disabled,
249
+ className: "min-w-[10rem] max-w-56"
250
+ }
251
+ ) });
252
+ }
253
+ function CampoPesquisa({
254
+ label,
255
+ valorInicial = "",
256
+ onConfirmar,
257
+ placeholder,
258
+ className = ""
259
+ }) {
260
+ const confirmar = (v) => onConfirmar(v.trim() || void 0);
261
+ return /* @__PURE__ */ jsx(Campo, { label, className, children: /* @__PURE__ */ jsx(
262
+ "input",
263
+ {
264
+ type: "search",
265
+ defaultValue: valorInicial,
266
+ placeholder,
267
+ onKeyDown: (e) => {
268
+ if (e.key === "Enter") confirmar(e.target.value);
269
+ },
270
+ onBlur: (e) => confirmar(e.target.value),
271
+ className: "h-8 border border-slate-300 rounded-lg px-2.5 text-sm w-64 bg-white dark:bg-slate-800 dark:border-slate-600 dark:text-slate-100 dark:placeholder:text-slate-500"
272
+ }
273
+ ) });
274
+ }
275
+ function CampoInterruptor({
276
+ label,
277
+ checked,
278
+ onChange
279
+ }) {
280
+ return /* @__PURE__ */ jsxs("label", { className: "flex items-center gap-2 text-sm pb-1.5 cursor-pointer select-none", children: [
281
+ /* @__PURE__ */ jsx("input", { type: "checkbox", checked, onChange: (e) => onChange(e.target.checked) }),
282
+ label
283
+ ] });
284
+ }
285
+ function BarraFiltros({ children }) {
286
+ return /* @__PURE__ */ jsx("div", { className: "bg-white border border-slate-200 dark:bg-slate-900 dark:border-slate-700 rounded-xl px-4 py-3 flex flex-wrap items-end gap-3", children });
287
+ }
288
+ function LinhaAlerta({
289
+ severidade,
290
+ icone,
291
+ titulo,
292
+ detalhe,
293
+ referencia,
294
+ onReferenciaClick,
295
+ quando
296
+ }) {
297
+ const barras = {
298
+ critico: "border-l-incumprido",
299
+ grave: "border-l-orange-500",
300
+ atencao: "border-l-risco",
301
+ info: "border-l-sky-400"
302
+ };
303
+ const textos = {
304
+ critico: "text-incumprido",
305
+ grave: "text-orange-600 dark:text-orange-400",
306
+ atencao: "text-risco",
307
+ info: "text-sky-600 dark:text-sky-400"
308
+ };
309
+ return /* @__PURE__ */ jsxs("div", { className: `bg-white border border-slate-200 dark:bg-slate-900 dark:border-y-slate-700 dark:border-r-slate-700 border-l-4 ${barras[severidade]} rounded-lg px-4 py-2.5 flex items-start gap-3`, children: [
310
+ icone && /* @__PURE__ */ jsx("span", { className: `${textos[severidade]} shrink-0 mt-0.5`, children: icone }),
311
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
312
+ /* @__PURE__ */ jsx("div", { className: "text-sm font-semibold text-slate-800 dark:text-slate-100", children: titulo }),
313
+ detalhe && /* @__PURE__ */ jsx("div", { className: "text-xs text-slate-500 dark:text-slate-400", children: detalhe })
314
+ ] }),
315
+ referencia && /* @__PURE__ */ jsx(
316
+ "button",
317
+ {
318
+ type: "button",
319
+ onClick: onReferenciaClick,
320
+ className: "text-xs font-mono text-proef-navy dark:text-sky-300 hover:underline shrink-0",
321
+ children: referencia
322
+ }
323
+ ),
324
+ quando && /* @__PURE__ */ jsx("span", { className: "text-xs text-slate-400 shrink-0 tabular-nums", children: quando })
325
+ ] });
326
+ }
327
+ function ListaCampos({
328
+ campos,
329
+ colunas = 2,
330
+ mostrarVazios = false
331
+ }) {
332
+ const vazio = (v) => v == null || v === "" || v === "—";
333
+ const visiveis = mostrarVazios ? campos : campos.filter((c) => !vazio(c.valor));
334
+ if (!visiveis.length) return null;
335
+ const grelha = { 1: "", 2: "md:grid-cols-2", 3: "md:grid-cols-3" }[colunas];
336
+ return /* @__PURE__ */ jsx("dl", { className: `grid ${grelha} gap-x-6 gap-y-1`, children: visiveis.map((c) => /* @__PURE__ */ jsxs("div", { className: "flex justify-between gap-3 border-b border-slate-100 dark:border-slate-800 py-1", children: [
337
+ /* @__PURE__ */ jsx("dt", { className: "text-xs text-slate-500 dark:text-slate-400", children: c.label }),
338
+ /* @__PURE__ */ jsx("dd", { className: "text-xs font-medium text-slate-800 dark:text-slate-100 text-right", children: c.valor })
339
+ ] }, c.label)) });
340
+ }
341
+ export {
342
+ Badge,
343
+ BadgeSla,
344
+ BarraFiltros,
345
+ Btn,
346
+ BtnGroup,
347
+ Campo,
348
+ CampoInterruptor,
349
+ CampoPesquisa,
350
+ CampoSelect,
351
+ Card,
352
+ ChipEstadoInterno,
353
+ Estado,
354
+ Kpi,
355
+ LinhaAlerta,
356
+ ListaCampos,
357
+ Modal,
358
+ SectionGroup
359
+ };
360
+ //# sourceMappingURL=Ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Ui.js","sources":["../../../../../src/legacy/components/ui/Ui.tsx"],"sourcesContent":["import React, { type ReactNode } from 'react'\r\nimport Escolha from './Escolha'\r\n\r\n/** Visual UI primitives (proef design system). Prefer these over repeating classes. */\r\n\r\n/**\r\n * SLA status accepted by BadgeSla.\r\n * @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy.\r\n */\r\nexport type StatusSla = 'ok' | 'risco' | 'incumprido'\r\n\r\nfunction IconX({ className = '' }: { className?: string }) {\r\n return (\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth={2}\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className={className}\r\n aria-hidden=\"true\"\r\n >\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\r\n </svg>\r\n )\r\n}\r\n\r\n/** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */\r\nexport function Card({ title, extra, children, className = '' }: { title?: ReactNode; extra?: ReactNode; children: ReactNode; className?: string }) {\r\n return (\r\n <div className={`bg-white border border-slate-200 dark:bg-slate-900 dark:border-slate-700 rounded-xl p-4 sm:p-5 ${className}`}>\r\n {(title || extra) && (\r\n <div className=\"flex items-start justify-between gap-3 mb-3.5\">\r\n {title && <div className=\"text-sm font-semibold dark:text-slate-100\">{title}</div>}\r\n {extra}\r\n </div>\r\n )}\r\n {children}\r\n </div>\r\n )\r\n}\r\n\r\n/**\r\n * Colour-bordered group — the overview sections in the prototype.\r\n * @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy.\r\n */\r\nexport function SectionGroup({\r\n title,\r\n tone = 'accent',\r\n children,\r\n}: {\r\n title: string\r\n tone?: 'accent' | 'ok' | 'blue' | 'red' | 'purple' | 'yellow'\r\n children: ReactNode\r\n}) {\r\n const tones: Record<string, [string, string]> = {\r\n accent: ['border-slate-200 dark:border-slate-700', 'text-proef-navy dark:text-slate-100'],\r\n ok: ['border-ok', 'text-ok'],\r\n blue: ['border-[#4FA8FF]', 'text-[#2E8CE0]'],\r\n red: ['border-incumprido', 'text-incumprido'],\r\n purple: ['border-[#8B5CF6]', 'text-[#7C3AED]'],\r\n yellow: ['border-[#D9A400]', 'text-[#B78400]'],\r\n }\r\n const [borda, texto] = tones[tone]!\r\n return (\r\n <div className={`border-[1.5px] ${borda} rounded-2xl p-4 pb-1 mb-5 bg-[rgba(24,34,56,0.015)] dark:bg-slate-900/40`}>\r\n <div className={`text-[15px] font-bold text-center tracking-wide mb-3.5 ${texto}`}>{title}</div>\r\n {children}\r\n </div>\r\n )\r\n}\r\n\r\nexport type KpiTone = 'default' | 'brand' | 'ok' | 'risco' | 'incumprido'\r\n\r\n/** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */\r\nexport function Kpi({\r\n label,\r\n value,\r\n tone = 'default',\r\n delta,\r\n onClick,\r\n bgTint = false,\r\n active = false,\r\n hint,\r\n dot,\r\n barra,\r\n rodape,\r\n denso = false,\r\n}: {\r\n label: string\r\n value: ReactNode\r\n tone?: KpiTone\r\n delta?: ReactNode\r\n onClick?: () => void\r\n /** Ponto colorido antes do rótulo — liga o indicador à cor que ele tem no mapa ou na legenda. */\r\n dot?: string\r\n /**\r\n * Barra por baixo do valor. Um número é uma percentagem; uma lista é uma\r\n * barra repartida, com cada troço proporcional ao seu peso.\r\n *\r\n * Serve para o indicador dizer a PROPORÇÃO e não só o valor: \"253 concluídas\"\r\n * não diz nada sem saber de quantas.\r\n */\r\n barra?: number | { peso: number; cor: string }[]\r\n /** Linha pequena no fim, para um dado que acompanha mas não é o indicador. */\r\n rodape?: ReactNode\r\n /**\r\n * Faixa fina em vez de cartão.\r\n *\r\n * Oito indicadores em cartões de 88px empurram o conteúdo para fora do ecrã,\r\n * e o conteúdo é que é o trabalho. Denso alinha à esquerda e corta a altura\r\n * para metade — os números continuam a ler-se, e o mapa fica acima da dobra.\r\n */\r\n denso?: boolean\r\n /** Fundo colorido (tom claro) em vez de só o número — opt-in, sem quebrar o uso existente. */\r\n bgTint?: boolean\r\n /** Filtro ativo (KPI clicável selecionado): contorno azul. */\r\n active?: boolean\r\n /** Tooltip do KPI clicável (ex: \"Filtrar a tabela\"). */\r\n hint?: string\r\n}) {\r\n const cores: Record<KpiTone, string> = {\r\n default: 'text-slate-800 dark:text-slate-100',\r\n brand: 'text-proef-blue dark:text-sky-300',\r\n ok: 'text-ok',\r\n risco: 'text-risco',\r\n incumprido: 'text-incumprido',\r\n }\r\n const fundos: Record<KpiTone, string> = {\r\n default: 'bg-white border-slate-200 dark:bg-slate-900 dark:border-slate-700',\r\n brand: 'bg-proef-blue/10 border-transparent dark:bg-sky-500/15',\r\n ok: 'bg-ok-bg border-transparent',\r\n risco: 'bg-risco-bg border-transparent',\r\n incumprido: 'bg-incumprido-bg border-transparent',\r\n }\r\n const base = denso\r\n ? `relative border rounded-lg px-2.5 py-1.5 flex flex-col justify-center text-left gap-0.5 ${\r\n bgTint ? fundos[tone] : 'bg-white border-slate-200 dark:bg-slate-900 dark:border-slate-700'\r\n }`\r\n : `relative border rounded-xl px-4 py-3 min-h-[88px] flex flex-col items-center justify-center text-center gap-1.5 ${\r\n bgTint ? fundos[tone] : 'bg-white border-slate-200 dark:bg-slate-900 dark:border-slate-700'\r\n }`\r\n const totalBarra = Array.isArray(barra) ? barra.reduce((s, x) => s + x.peso, 0) : 0\r\n const conteudo = (\r\n <>\r\n <div className={`${denso ? 'text-[10px] uppercase tracking-wide' : 'text-xs'} text-slate-500 dark:text-slate-400 flex items-center gap-1.5`}>\r\n {dot && <i className=\"w-2 h-2 rounded-full inline-block shrink-0\" style={{ background: dot }} />}\r\n <span className=\"truncate\">{label}</span>\r\n </div>\r\n {/* Em denso o valor e o secundário partilham a linha: é o que poupa\r\n altura sem tirar informação. */}\r\n <div className={denso ? 'flex items-baseline gap-1.5' : ''}>\r\n <span className={`${denso ? 'text-xl' : 'text-2xl'} font-semibold ${cores[tone]}`}>{value}</span>\r\n {delta && (\r\n <span className={`${denso ? 'text-[11px]' : 'hidden'} text-slate-400 truncate`}>{delta}</span>\r\n )}\r\n </div>\r\n {delta && !denso && <div className=\"text-[11.5px] text-slate-400\">{delta}</div>}\r\n {barra != null && (\r\n <div className=\"w-full h-1 bg-slate-100 dark:bg-slate-800 rounded overflow-hidden flex\">\r\n {Array.isArray(barra) ? (\r\n barra.map((x, i) => (\r\n <i\r\n key={i}\r\n style={{ width: totalBarra ? `${(x.peso / totalBarra) * 100}%` : 0, background: x.cor }}\r\n />\r\n ))\r\n ) : (\r\n <i style={{ width: `${Math.min(100, Math.max(0, barra))}%`, background: 'currentColor' }} className={cores[tone]} />\r\n )}\r\n </div>\r\n )}\r\n {rodape && <div className=\"text-[11px] text-slate-400\">{rodape}</div>}\r\n </>\r\n )\r\n if (!onClick) return <div className={base}>{conteudo}</div>\r\n return (\r\n <button\r\n type=\"button\"\r\n onClick={onClick}\r\n title={hint}\r\n aria-pressed={active}\r\n className={`${base} w-full cursor-pointer shadow-sm transition hover:-translate-y-0.5 hover:border-proef-blue dark:hover:border-sky-400 hover:shadow-md focus:outline-none focus-visible:ring-2 focus-visible:ring-proef-blue ${\r\n active ? 'ring-2 ring-proef-blue border-proef-blue' : ''\r\n }`}\r\n >\r\n <svg\r\n aria-hidden\r\n viewBox=\"0 0 24 24\"\r\n className={`absolute right-2.5 top-2.5 h-3.5 w-3.5 ${active ? 'text-proef-blue dark:text-sky-300' : 'text-slate-300 dark:text-slate-600'}`}\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth={2}\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n >\r\n <path d=\"M3 4h18l-7 8.5V19l-4 2v-8.5L3 4z\" />\r\n </svg>\r\n {conteudo}\r\n </button>\r\n )\r\n}\r\n\r\n/** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */\r\nexport type BadgeTone = 'ok' | 'risco' | 'incumprido' | 'neutral' | 'accent'\r\n\r\n/** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */\r\nexport function Badge({ tone = 'neutral', children }: { tone?: BadgeTone; children: ReactNode }) {\r\n const cores: Record<BadgeTone, string> = {\r\n ok: 'bg-ok-bg text-ok',\r\n risco: 'bg-risco-bg text-risco',\r\n incumprido: 'bg-incumprido-bg text-incumprido',\r\n neutral: 'bg-neutral-bg text-neutral',\r\n accent: 'bg-proef-blue/10 text-proef-navy dark:bg-sky-500/15 dark:text-sky-300',\r\n }\r\n return (\r\n <span className={`inline-flex items-center gap-1.5 px-2.5 py-0.5 rounded-full text-xs font-medium whitespace-nowrap ${cores[tone]}`}>\r\n <span className=\"w-1.5 h-1.5 rounded-full bg-current\" />\r\n {children}\r\n </span>\r\n )\r\n}\r\n\r\n/**\r\n * SLA badge — picks the tone and label from `status`. Labels overridable via `labels`.\r\n * @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy.\r\n */\r\nexport function BadgeSla({ status, labels }: { status: StatusSla; labels?: { ok?: string; risco?: string; incumprido?: string } }) {\r\n const tone: BadgeTone = status === 'ok' ? 'ok' : status === 'risco' ? 'risco' : 'incumprido'\r\n const defaults: Record<StatusSla, string> = { ok: 'On time', risco: 'At risk', incumprido: 'Breached' }\r\n const label = labels?.[status] ?? defaults[status]\r\n return <Badge tone={tone}>{label}</Badge>\r\n}\r\n\r\n/** Internal-state chip — prototype colours (ESTADO_INTERNO_COLORS). */\r\nconst CORES_ESTADO_INTERNO: Record<string, [string, string]> = {\r\n 'Concluído': ['#1F8A55', '#E5F6EC'],\r\n 'Aferição': ['#2E6DA4', '#E5F0FA'],\r\n 'Para Tratamento': ['#1868B0', '#E5F0FA'],\r\n 'Aguarda Validação LS': ['#2E6DA4', '#E5F0FA'],\r\n 'Aguarda Produção LS': ['#6E8CAD', '#EDF2F7'],\r\n 'Incompleto/Devolvido': ['#C2255C', '#FBE5EF'],\r\n 'Falta de Documentação': ['#B96E00', '#FCF0DC'],\r\n Ignorar: ['#767C88', '#EEF0F2'],\r\n Cancelado: ['#767C88', '#EEF0F2'],\r\n}\r\n\r\n/** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */\r\nexport function ChipEstadoInterno({ estado }: { estado: string | null }) {\r\n if (!estado) return <span className=\"text-slate-400\">—</span>\r\n const cor = CORES_ESTADO_INTERNO[estado]\r\n if (!cor) return <span>{estado}</span>\r\n return (\r\n <span className=\"px-2 py-0.5 rounded text-[11px] font-medium inline-block\" style={{ color: cor[0], background: cor[1] }}>\r\n {estado}\r\n </span>\r\n )\r\n}\r\n\r\n/** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */\r\nexport function Btn({\r\n children,\r\n onClick,\r\n variant = 'default',\r\n active = false,\r\n disabled = false,\r\n title,\r\n type = 'button',\r\n}: {\r\n children: ReactNode\r\n onClick?: () => void\r\n variant?: 'default' | 'accent' | 'danger' | 'ghost'\r\n active?: boolean\r\n disabled?: boolean\r\n title?: string\r\n type?: 'button' | 'submit'\r\n}) {\r\n // Estilo do design system proef (Tickets): uppercase, font-black, tracking-widest; activo em navy.\r\n // Mesma altura (h-8) e cantos (rounded-lg) de todos os controlos da biblioteca: Exportar, Colunas, selects, campos.\r\n const base = 'inline-flex items-center justify-center gap-1.5 h-8 px-3.5 rounded-lg text-[11px] font-black uppercase tracking-widest transition-colors disabled:opacity-50 disabled:cursor-not-allowed whitespace-nowrap'\r\n const variantes: Record<string, string> = {\r\n default: active\r\n ? 'bg-proef-navy text-white border border-proef-navy dark:bg-proef-blue dark:border-proef-blue'\r\n : 'bg-white text-slate-500 border border-slate-200 hover:border-proef-navy hover:text-proef-navy dark:bg-slate-800 dark:text-slate-300 dark:border-slate-700 dark:hover:border-slate-400 dark:hover:text-white',\r\n accent: 'bg-proef-navy text-white border border-proef-navy hover:bg-proef-blue dark:bg-proef-blue dark:border-proef-blue dark:hover:bg-sky-500',\r\n danger: 'bg-incumprido text-white border border-incumprido hover:opacity-90 dark:bg-red-600 dark:border-red-600',\r\n ghost: 'text-slate-500 hover:text-proef-navy dark:text-slate-400 dark:hover:text-white',\r\n }\r\n return (\r\n <button type={type} onClick={onClick} disabled={disabled} title={title} className={`${base} ${variantes[variant]}`}>\r\n {children}\r\n </button>\r\n )\r\n}\r\n\r\n/**\r\n * Mutually exclusive button group (granularity, dimension…).\r\n * @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy.\r\n */\r\nexport function BtnGroup<T extends string>({\r\n value,\r\n options,\r\n onChange,\r\n label,\r\n}: {\r\n value: T\r\n options: { value: T; label: string }[]\r\n onChange: (v: T) => void\r\n /** Rótulo opcional à esquerda (ex: \"Situação\"), com espaçamento próprio. */\r\n label?: string\r\n}) {\r\n return (\r\n <div className=\"flex items-center gap-3 flex-wrap\">\r\n {label && (\r\n <span className=\"text-[10px] font-black uppercase tracking-wider text-slate-400 shrink-0 whitespace-nowrap leading-normal\">{label}</span>\r\n )}\r\n <div className=\"flex gap-1.5 flex-wrap\">\r\n {options.map((o) => (\r\n <Btn key={o.value} active={value === o.value} onClick={() => onChange(o.value)}>\r\n {o.label}\r\n </Btn>\r\n ))}\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\n/** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */\r\nexport function Estado({\r\n carregando,\r\n erro,\r\n vazio,\r\n labels,\r\n}: {\r\n carregando?: boolean\r\n erro?: boolean\r\n vazio?: boolean\r\n labels?: { loading?: string; error?: string; empty?: string }\r\n}) {\r\n if (carregando) return <div className=\"py-10 text-center text-sm text-slate-400\">{labels?.loading ?? 'Loading…'}</div>\r\n if (erro) return <div className=\"py-10 text-center text-sm text-incumprido\">{labels?.error ?? 'Failed to load'}</div>\r\n if (vazio) return <div className=\"py-10 text-center text-sm text-slate-400\">{labels?.empty ?? 'No data'}</div>\r\n return null\r\n}\r\n\r\n/** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */\r\nexport function Modal({ open, onClose, title, children, wide }: { open: boolean; onClose: () => void; title: ReactNode; children: ReactNode; wide?: boolean }) {\r\n if (!open) return null\r\n return (\r\n <div\r\n onClick={(e) => {\r\n if (e.target === e.currentTarget) onClose()\r\n }}\r\n className=\"fixed inset-0 bg-[rgba(20,30,50,0.45)] z-50 flex items-center justify-center p-4\"\r\n >\r\n {/*\r\n `wide` acompanha o ecrã em vez de parar num número fixo.\r\n\r\n 1200px era estreito num ecrã grande: um modal com mapa e tabela lado a\r\n lado ficava com a tabela cortada e o mapa pequeno, enquanto meio ecrã\r\n ficava vazio. O tecto de 1600px existe para o texto não ficar a\r\n atravessar o monitor todo, e os 95vw para o modal nunca encostar às\r\n margens.\r\n */}\r\n <div className={`bg-white dark:bg-slate-900 rounded-xl w-full ${wide ? 'max-w-[min(1600px,95vw)]' : 'max-w-[720px]'} max-h-[85vh] flex flex-col shadow-2xl`}>\r\n <div className=\"flex items-center justify-between gap-4 px-5 py-4 border-b border-slate-200 dark:border-slate-700\">\r\n <div className=\"text-[15px] font-bold text-proef-navy dark:text-slate-100\">{title}</div>\r\n <button onClick={onClose} aria-label=\"Close\" className=\"text-slate-500 hover:text-slate-800 dark:text-slate-400 dark:hover:text-slate-100\">\r\n <IconX className=\"w-5 h-5\" />\r\n </button>\r\n </div>\r\n <div className=\"overflow-auto thin-scroll px-5 py-4\">{children}</div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\n// ─── Filtros ────────────────────────────────────────────────────────────────\r\n// O kit não tinha campos de formulário, e cada ecrã acabava a repetir o mesmo\r\n// <label> com <select> e as mesmas classes. Estes três resolvem a barra de\r\n// filtros que praticamente todos os ecrãs de listagem têm.\r\n\r\n/**\r\n * Rótulo pequeno em maiúsculas por cima do campo.\r\n * @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy.\r\n */\r\nexport function Campo({ label, children, className = '' }: { label: string; children: ReactNode; className?: string }) {\r\n return (\r\n <label className={`flex flex-col gap-1 ${className}`}>\r\n <span className=\"text-[10px] font-black uppercase tracking-wider text-slate-400 leading-normal\">{label}</span>\r\n {children}\r\n </label>\r\n )\r\n}\r\n\r\n/**\r\n * Select com opção vazia à cabeça.\r\n *\r\n * A opção vazia é obrigatória e não opcional: sem ela não há como desfazer uma\r\n * escolha, e o utilizador fica preso ao primeiro valor que carregou.\r\n * @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy.\r\n */\r\nexport function CampoSelect({\r\n label,\r\n value,\r\n options,\r\n onChange,\r\n placeholderVazio,\r\n disabled = false,\r\n className = '',\r\n}: {\r\n label: string\r\n value: string\r\n options: readonly string[] | readonly { value: string; label: string }[]\r\n onChange: (v: string) => void\r\n placeholderVazio: string\r\n disabled?: boolean\r\n className?: string\r\n}) {\r\n const normalizadas = options.map((o) => (typeof o === 'string' ? { value: o, label: o } : o))\r\n return (\r\n <Campo label={label} className={className}>\r\n {/* Mesma lista suspensa em todos os portais (Escolha), em vez do <select> nativo. */}\r\n <Escolha\r\n valor={value}\r\n opcoes={normalizadas.map((o) => ({ valor: o.value, rotulo: o.label }))}\r\n onMudar={onChange}\r\n rotulo={label}\r\n opcaoVazia={placeholderVazio}\r\n placeholder={placeholderVazio}\r\n disabled={disabled}\r\n className=\"min-w-[10rem] max-w-56\"\r\n />\r\n </Campo>\r\n )\r\n}\r\n\r\n/**\r\n * Campo de pesquisa que só dispara ao confirmar.\r\n *\r\n * Deliberadamente NÃO pesquisa a cada tecla: sobre dezenas de milhares de\r\n * registos isso seria um pedido por letra. Confirma-se com Enter ou ao sair do\r\n * campo.\r\n * @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy.\r\n */\r\nexport function CampoPesquisa({\r\n label,\r\n valorInicial = '',\r\n onConfirmar,\r\n placeholder,\r\n className = '',\r\n}: {\r\n label: string\r\n valorInicial?: string\r\n onConfirmar: (v: string | undefined) => void\r\n placeholder?: string\r\n className?: string\r\n}) {\r\n const confirmar = (v: string): void => onConfirmar(v.trim() || undefined)\r\n return (\r\n <Campo label={label} className={className}>\r\n <input\r\n type=\"search\"\r\n defaultValue={valorInicial}\r\n placeholder={placeholder}\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter') confirmar((e.target as HTMLInputElement).value)\r\n }}\r\n onBlur={(e) => confirmar(e.target.value)}\r\n className=\"h-8 border border-slate-300 rounded-lg px-2.5 text-sm w-64 bg-white dark:bg-slate-800 dark:border-slate-600 dark:text-slate-100 dark:placeholder:text-slate-500\"\r\n />\r\n </Campo>\r\n )\r\n}\r\n\r\n/**\r\n * Caixa de interruptor com rótulo à direita, alinhada com os campos ao lado.\r\n * @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy.\r\n */\r\nexport function CampoInterruptor({\r\n label,\r\n checked,\r\n onChange,\r\n}: {\r\n label: string\r\n checked: boolean\r\n onChange: (v: boolean) => void\r\n}) {\r\n return (\r\n <label className=\"flex items-center gap-2 text-sm pb-1.5 cursor-pointer select-none\">\r\n <input type=\"checkbox\" checked={checked} onChange={(e) => onChange(e.target.checked)} />\r\n {label}\r\n </label>\r\n )\r\n}\r\n\r\n/**\r\n * Barra onde os campos de filtro assentam.\r\n * @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy.\r\n */\r\nexport function BarraFiltros({ children }: { children: ReactNode }) {\r\n return (\r\n <div className=\"bg-white border border-slate-200 dark:bg-slate-900 dark:border-slate-700 rounded-xl px-4 py-3 flex flex-wrap items-end gap-3\">\r\n {children}\r\n </div>\r\n )\r\n}\r\n\r\n// ─── Listas ─────────────────────────────────────────────────────────────────\r\n\r\n/** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */\r\nexport type SeveridadeAlerta = 'critico' | 'grave' | 'atencao' | 'info'\r\n\r\n/**\r\n * Linha de uma lista de alertas.\r\n *\r\n * A severidade está na barra lateral colorida e não no fundo: uma lista de\r\n * cinquenta linhas com fundos saturados é ilegível, e o que se quer é poder\r\n * varrer a coluna da esquerda e saber onde parar.\r\n * @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy.\r\n */\r\nexport function LinhaAlerta({\r\n severidade,\r\n icone,\r\n titulo,\r\n detalhe,\r\n referencia,\r\n onReferenciaClick,\r\n quando,\r\n}: {\r\n severidade: SeveridadeAlerta\r\n icone?: ReactNode\r\n titulo: ReactNode\r\n detalhe?: ReactNode\r\n /** Identificador clicável à direita (ex: número da ordem). */\r\n referencia?: string\r\n onReferenciaClick?: () => void\r\n quando?: ReactNode\r\n}) {\r\n const barras: Record<SeveridadeAlerta, string> = {\r\n critico: 'border-l-incumprido',\r\n grave: 'border-l-orange-500',\r\n atencao: 'border-l-risco',\r\n info: 'border-l-sky-400',\r\n }\r\n const textos: Record<SeveridadeAlerta, string> = {\r\n critico: 'text-incumprido',\r\n grave: 'text-orange-600 dark:text-orange-400',\r\n atencao: 'text-risco',\r\n info: 'text-sky-600 dark:text-sky-400',\r\n }\r\n\r\n return (\r\n <div className={`bg-white border border-slate-200 dark:bg-slate-900 dark:border-y-slate-700 dark:border-r-slate-700 border-l-4 ${barras[severidade]} rounded-lg px-4 py-2.5 flex items-start gap-3`}>\r\n {icone && <span className={`${textos[severidade]} shrink-0 mt-0.5`}>{icone}</span>}\r\n <div className=\"min-w-0 flex-1\">\r\n <div className=\"text-sm font-semibold text-slate-800 dark:text-slate-100\">{titulo}</div>\r\n {detalhe && <div className=\"text-xs text-slate-500 dark:text-slate-400\">{detalhe}</div>}\r\n </div>\r\n {referencia && (\r\n <button\r\n type=\"button\"\r\n onClick={onReferenciaClick}\r\n className=\"text-xs font-mono text-proef-navy dark:text-sky-300 hover:underline shrink-0\"\r\n >\r\n {referencia}\r\n </button>\r\n )}\r\n {quando && <span className=\"text-xs text-slate-400 shrink-0 tabular-nums\">{quando}</span>}\r\n </div>\r\n )\r\n}\r\n\r\n/**\r\n * Grelha de pares rótulo/valor, para painéis de detalhe.\r\n *\r\n * Os campos vazios são omitidos por omissão: num registo vindo de várias\r\n * origens, metade dos campos costuma não existir, e uma coluna de travessões\r\n * não informa ninguém. `mostrarVazios` repõe-os quando a ausência é o que\r\n * interessa ver.\r\n * @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy.\r\n */\r\nexport function ListaCampos({\r\n campos,\r\n colunas = 2,\r\n mostrarVazios = false,\r\n}: {\r\n campos: { label: string; valor: ReactNode }[]\r\n colunas?: 1 | 2 | 3\r\n mostrarVazios?: boolean\r\n}) {\r\n const vazio = (v: ReactNode): boolean => v == null || v === '' || v === '—'\r\n const visiveis = mostrarVazios ? campos : campos.filter((c) => !vazio(c.valor))\r\n if (!visiveis.length) return null\r\n\r\n const grelha = { 1: '', 2: 'md:grid-cols-2', 3: 'md:grid-cols-3' }[colunas]\r\n\r\n return (\r\n <dl className={`grid ${grelha} gap-x-6 gap-y-1`}>\r\n {visiveis.map((c) => (\r\n <div key={c.label} className=\"flex justify-between gap-3 border-b border-slate-100 dark:border-slate-800 py-1\">\r\n <dt className=\"text-xs text-slate-500 dark:text-slate-400\">{c.label}</dt>\r\n <dd className=\"text-xs font-medium text-slate-800 dark:text-slate-100 text-right\">{c.valor}</dd>\r\n </div>\r\n ))}\r\n </dl>\r\n )\r\n}\r\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import { useState, useRef, useCallback, useLayoutEffect, useEffect } from "react";
2
+ const CLS_PAINEL = "fixed z-[60] min-w-[10rem] max-h-72 overflow-auto rounded-xl border border-slate-200 bg-white py-1 text-sm shadow-lg dark:border-slate-700 dark:bg-slate-900";
3
+ const clsItem = (ativo, perigo = false) => `w-full flex items-center gap-2.5 px-3 py-2 text-left cursor-pointer select-none ${perigo ? "text-red-600 dark:text-red-300" : "text-slate-700 dark:text-slate-200"} ${ativo ? "bg-slate-100 dark:bg-slate-800" : "bg-transparent hover:bg-slate-50 dark:hover:bg-slate-800"}`;
4
+ function usePainelFlutuante(alinhar = "esquerda") {
5
+ const [aberto, setAberto] = useState(false);
6
+ const refBotao = useRef(null);
7
+ const refPainel = useRef(null);
8
+ const [pos, setPos] = useState(null);
9
+ const fechar = useCallback(() => setAberto(false), []);
10
+ useLayoutEffect(() => {
11
+ if (!aberto || !refBotao.current) {
12
+ setPos(null);
13
+ return;
14
+ }
15
+ const r = refBotao.current.getBoundingClientRect();
16
+ const altura = refPainel.current?.offsetHeight ?? 240;
17
+ const horizontal = alinhar === "direita" ? { right: window.innerWidth - r.right } : { left: r.left };
18
+ const cabeEmBaixo = r.bottom + 4 + altura <= window.innerHeight - 8;
19
+ setPos({
20
+ ...horizontal,
21
+ minWidth: r.width,
22
+ ...cabeEmBaixo || r.top < altura ? { top: r.bottom + 4 } : { bottom: window.innerHeight - r.top + 4 }
23
+ });
24
+ }, [aberto, alinhar]);
25
+ useEffect(() => {
26
+ if (!aberto) return;
27
+ const clique = (e) => {
28
+ const t = e.target;
29
+ if (!refBotao.current?.contains(t) && !refPainel.current?.contains(t)) setAberto(false);
30
+ };
31
+ const scroll = (e) => {
32
+ if (!refPainel.current?.contains(e.target)) setAberto(false);
33
+ };
34
+ const redimensionar = () => setAberto(false);
35
+ document.addEventListener("mousedown", clique);
36
+ window.addEventListener("scroll", scroll, true);
37
+ window.addEventListener("resize", redimensionar);
38
+ return () => {
39
+ document.removeEventListener("mousedown", clique);
40
+ window.removeEventListener("scroll", scroll, true);
41
+ window.removeEventListener("resize", redimensionar);
42
+ };
43
+ }, [aberto]);
44
+ const estilo = pos ?? { top: 0, left: 0, visibility: "hidden" };
45
+ return { aberto, setAberto, fechar, refBotao, refPainel, estilo };
46
+ }
47
+ export {
48
+ CLS_PAINEL,
49
+ clsItem,
50
+ usePainelFlutuante
51
+ };
52
+ //# sourceMappingURL=painelFlutuante.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"painelFlutuante.js","sources":["../../../../../src/legacy/components/ui/painelFlutuante.ts"],"sourcesContent":["import { useCallback, useEffect, useLayoutEffect, useRef, useState, type CSSProperties } from 'react'\r\n\r\n/**\r\n * Aspeto comum das listas suspensas (Escolha e MenuAcoes): cartão arredondado com sombra, nos dois temas.\r\n * Um só sítio para as duas ficarem iguais.\r\n */\r\nexport const CLS_PAINEL =\r\n 'fixed z-[60] min-w-[10rem] max-h-72 overflow-auto rounded-xl border border-slate-200 bg-white py-1 text-sm shadow-lg dark:border-slate-700 dark:bg-slate-900'\r\n/** Item de uma lista suspensa; `ativo` = o que o teclado tem selecionado. */\r\nexport const clsItem = (ativo: boolean, perigo = false) =>\r\n `w-full flex items-center gap-2.5 px-3 py-2 text-left cursor-pointer select-none ${\r\n perigo ? 'text-red-600 dark:text-red-300' : 'text-slate-700 dark:text-slate-200'\r\n } ${ativo ? 'bg-slate-100 dark:bg-slate-800' : 'bg-transparent hover:bg-slate-50 dark:hover:bg-slate-800'}`\r\n\r\n/**\r\n * Painel flutuante preso a um botão: posição fixa (não é cortado por tabelas ou modais com scroll), abre para\r\n * cima quando não cabe por baixo, fecha ao clicar fora, com Esc, ao fazer scroll fora dele ou ao redimensionar.\r\n */\r\nexport function usePainelFlutuante(alinhar: 'esquerda' | 'direita' = 'esquerda') {\r\n const [aberto, setAberto] = useState(false)\r\n const refBotao = useRef<HTMLButtonElement>(null)\r\n const refPainel = useRef<HTMLDivElement>(null)\r\n const [pos, setPos] = useState<CSSProperties | null>(null)\r\n\r\n const fechar = useCallback(() => setAberto(false), [])\r\n\r\n useLayoutEffect(() => {\r\n if (!aberto || !refBotao.current) {\r\n setPos(null)\r\n return\r\n }\r\n const r = refBotao.current.getBoundingClientRect()\r\n const altura = refPainel.current?.offsetHeight ?? 240\r\n const horizontal = alinhar === 'direita' ? { right: window.innerWidth - r.right } : { left: r.left }\r\n const cabeEmBaixo = r.bottom + 4 + altura <= window.innerHeight - 8\r\n setPos({\r\n ...horizontal,\r\n minWidth: r.width,\r\n ...(cabeEmBaixo || r.top < altura ? { top: r.bottom + 4 } : { bottom: window.innerHeight - r.top + 4 }),\r\n })\r\n }, [aberto, alinhar])\r\n\r\n useEffect(() => {\r\n if (!aberto) return\r\n const clique = (e: MouseEvent) => {\r\n const t = e.target as Node\r\n if (!refBotao.current?.contains(t) && !refPainel.current?.contains(t)) setAberto(false)\r\n }\r\n const scroll = (e: Event) => {\r\n if (!refPainel.current?.contains(e.target as Node)) setAberto(false)\r\n }\r\n const redimensionar = () => setAberto(false)\r\n document.addEventListener('mousedown', clique)\r\n window.addEventListener('scroll', scroll, true)\r\n window.addEventListener('resize', redimensionar)\r\n return () => {\r\n document.removeEventListener('mousedown', clique)\r\n window.removeEventListener('scroll', scroll, true)\r\n window.removeEventListener('resize', redimensionar)\r\n }\r\n }, [aberto])\r\n\r\n // Antes de medir, o painel desenha-se invisível (para se saber a altura).\r\n const estilo: CSSProperties = pos ?? { top: 0, left: 0, visibility: 'hidden' }\r\n return { aberto, setAberto, fechar, refBotao, refPainel, estilo }\r\n}\r\n"],"names":[],"mappings":";AAMO,MAAM,aACX;AAEK,MAAM,UAAU,CAAC,OAAgB,SAAS,UAC/C,mFACE,SAAS,mCAAmC,oCAC9C,IAAI,QAAQ,mCAAmC,0DAA0D;AAMpG,SAAS,mBAAmB,UAAkC,YAAY;AAC/E,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,KAAK;AAC1C,QAAM,WAAW,OAA0B,IAAI;AAC/C,QAAM,YAAY,OAAuB,IAAI;AAC7C,QAAM,CAAC,KAAK,MAAM,IAAI,SAA+B,IAAI;AAEzD,QAAM,SAAS,YAAY,MAAM,UAAU,KAAK,GAAG,CAAA,CAAE;AAErD,kBAAgB,MAAM;AACpB,QAAI,CAAC,UAAU,CAAC,SAAS,SAAS;AAChC,aAAO,IAAI;AACX;AAAA,IACF;AACA,UAAM,IAAI,SAAS,QAAQ,sBAAA;AAC3B,UAAM,SAAS,UAAU,SAAS,gBAAgB;AAClD,UAAM,aAAa,YAAY,YAAY,EAAE,OAAO,OAAO,aAAa,EAAE,MAAA,IAAU,EAAE,MAAM,EAAE,KAAA;AAC9F,UAAM,cAAc,EAAE,SAAS,IAAI,UAAU,OAAO,cAAc;AAClE,WAAO;AAAA,MACL,GAAG;AAAA,MACH,UAAU,EAAE;AAAA,MACZ,GAAI,eAAe,EAAE,MAAM,SAAS,EAAE,KAAK,EAAE,SAAS,EAAA,IAAM,EAAE,QAAQ,OAAO,cAAc,EAAE,MAAM,EAAA;AAAA,IAAE,CACtG;AAAA,EACH,GAAG,CAAC,QAAQ,OAAO,CAAC;AAEpB,YAAU,MAAM;AACd,QAAI,CAAC,OAAQ;AACb,UAAM,SAAS,CAAC,MAAkB;AAChC,YAAM,IAAI,EAAE;AACZ,UAAI,CAAC,SAAS,SAAS,SAAS,CAAC,KAAK,CAAC,UAAU,SAAS,SAAS,CAAC,aAAa,KAAK;AAAA,IACxF;AACA,UAAM,SAAS,CAAC,MAAa;AAC3B,UAAI,CAAC,UAAU,SAAS,SAAS,EAAE,MAAc,aAAa,KAAK;AAAA,IACrE;AACA,UAAM,gBAAgB,MAAM,UAAU,KAAK;AAC3C,aAAS,iBAAiB,aAAa,MAAM;AAC7C,WAAO,iBAAiB,UAAU,QAAQ,IAAI;AAC9C,WAAO,iBAAiB,UAAU,aAAa;AAC/C,WAAO,MAAM;AACX,eAAS,oBAAoB,aAAa,MAAM;AAChD,aAAO,oBAAoB,UAAU,QAAQ,IAAI;AACjD,aAAO,oBAAoB,UAAU,aAAa;AAAA,IACpD;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAGX,QAAM,SAAwB,OAAO,EAAE,KAAK,GAAG,MAAM,GAAG,YAAY,SAAA;AACpE,SAAO,EAAE,QAAQ,WAAW,QAAQ,UAAU,WAAW,OAAA;AAC3D;"}
@@ -0,0 +1,33 @@
1
+ var Color = /* @__PURE__ */ ((Color2) => {
2
+ Color2["BRIGHT_BLUE"] = "#006fff";
3
+ Color2["BRIGHT_GREEN"] = "#17daa4";
4
+ Color2["DARK_BLUE"] = "#010060";
5
+ Color2["LIGHT_GRAY_01"] = "#dddddd";
6
+ Color2["ALMOST_WHITE"] = "#f8f8f8";
7
+ Color2["ALMOST_BLACK"] = "#1f1f1f";
8
+ Color2["MEDIUM_BLUE"] = "#87a9ff";
9
+ Color2["MEDIUM_GREEN"] = "#b0ebdb";
10
+ Color2["MEDIUM_DARK_BLUE"] = "#7d7dab";
11
+ Color2["MEDIUM_GRAY_01"] = "#c2c2c2";
12
+ Color2["LIGHT_GRAY_02"] = "#ededed";
13
+ Color2["LIGHT_BLUE"] = "#cedcff";
14
+ Color2["DARK_GRAY"] = "#6c6c6c";
15
+ Color2["WARM_YELLOW"] = "#ebc25a";
16
+ Color2["WARM_ORANGE"] = "#eb745a";
17
+ Color2["LIGHT_YELLOW"] = "#ffedbf";
18
+ Color2["BRIGHT_PURPLE"] = "#801de2";
19
+ Color2["REJECTED"] = "#de4321";
20
+ Color2["APPROVED"] = "#1dc88a";
21
+ Color2["STAND_BY"] = "#ffcc4a";
22
+ Color2["BG_LIGHT_YELLOW"] = "#ffedbf";
23
+ Color2["DARK_YELLOW"] = "#856404";
24
+ Color2["BG_LIGHT_RED"] = "#ffbdae";
25
+ Color2["DARK_RED"] = "#842029";
26
+ Color2["BG_SUCCESS"] = "#8ef8d2";
27
+ Color2["DARK_green"] = "#0f5132";
28
+ return Color2;
29
+ })(Color || {});
30
+ export {
31
+ Color
32
+ };
33
+ //# sourceMappingURL=Colors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Colors.js","sources":["../../../../src/legacy/constants/Colors.ts"],"sourcesContent":["export enum Color {\r\n\r\n BRIGHT_BLUE = '#006fff',\r\n BRIGHT_GREEN = '#17daa4',\r\n DARK_BLUE = '#010060',\r\n LIGHT_GRAY_01 = '#dddddd',\r\n ALMOST_WHITE = '#f8f8f8',\r\n ALMOST_BLACK = '#1f1f1f',\r\n \r\n /* Secundary */\r\n MEDIUM_BLUE = '#87a9ff',\r\n MEDIUM_GREEN = '#b0ebdb',\r\n MEDIUM_DARK_BLUE = '#7d7dab',\r\n MEDIUM_GRAY_01 = '#c2c2c2',\r\n LIGHT_GRAY_02 = '#ededed',\r\n LIGHT_BLUE = '#cedcff',\r\n DARK_GRAY = '#6c6c6c',\r\n \r\n /* Tertiary */\r\n WARM_YELLOW = '#ebc25a',\r\n WARM_ORANGE = '#eb745a',\r\n LIGHT_YELLOW = '#ffedbf',\r\n BRIGHT_PURPLE = '#801de2',\r\n \r\n /* Alert */\r\n REJECTED = '#de4321',\r\n APPROVED = '#1dc88a',\r\n STAND_BY = '#ffcc4a',\r\n \r\n /* Notifications */\r\n BG_LIGHT_YELLOW = '#ffedbf',\r\n DARK_YELLOW = '#856404',\r\n BG_LIGHT_RED = '#ffbdae',\r\n DARK_RED = '#842029',\r\n BG_SUCCESS = '#8ef8d2',\r\n DARK_green = '#0f5132',\r\n\r\n}"],"names":["Color"],"mappings":"AAAO,IAAK,0BAAAA,WAAL;AAEHA,SAAA,aAAA,IAAc;AACdA,SAAA,cAAA,IAAe;AACfA,SAAA,WAAA,IAAY;AACZA,SAAA,eAAA,IAAgB;AAChBA,SAAA,cAAA,IAAe;AACfA,SAAA,cAAA,IAAe;AAGfA,SAAA,aAAA,IAAc;AACdA,SAAA,cAAA,IAAe;AACfA,SAAA,kBAAA,IAAmB;AACnBA,SAAA,gBAAA,IAAiB;AACjBA,SAAA,eAAA,IAAgB;AAChBA,SAAA,YAAA,IAAa;AACbA,SAAA,WAAA,IAAY;AAGZA,SAAA,aAAA,IAAc;AACdA,SAAA,aAAA,IAAc;AACdA,SAAA,cAAA,IAAe;AACfA,SAAA,eAAA,IAAgB;AAGhBA,SAAA,UAAA,IAAW;AACXA,SAAA,UAAA,IAAW;AACXA,SAAA,UAAA,IAAW;AAGXA,SAAA,iBAAA,IAAkB;AAClBA,SAAA,aAAA,IAAc;AACdA,SAAA,cAAA,IAAe;AACfA,SAAA,UAAA,IAAW;AACXA,SAAA,YAAA,IAAa;AACbA,SAAA,YAAA,IAAa;AAnCL,SAAAA;AAAA,GAAA,SAAA,CAAA,CAAA;"}
@@ -0,0 +1,35 @@
1
+ var FontWeight = /* @__PURE__ */ ((FontWeight2) => {
2
+ FontWeight2["LIGHT"] = "light";
3
+ FontWeight2["MEDIUM"] = "medium";
4
+ FontWeight2["REGULAR"] = "regular";
5
+ FontWeight2["SEMIBOLD"] = "semibold";
6
+ FontWeight2["BOLD"] = "bold";
7
+ return FontWeight2;
8
+ })(FontWeight || {});
9
+ const WeightValue = {
10
+ [
11
+ "light"
12
+ /* LIGHT */
13
+ ]: 300,
14
+ [
15
+ "medium"
16
+ /* MEDIUM */
17
+ ]: 400,
18
+ [
19
+ "regular"
20
+ /* REGULAR */
21
+ ]: 500,
22
+ [
23
+ "semibold"
24
+ /* SEMIBOLD */
25
+ ]: 600,
26
+ [
27
+ "bold"
28
+ /* BOLD */
29
+ ]: 700
30
+ };
31
+ export {
32
+ FontWeight,
33
+ WeightValue
34
+ };
35
+ //# sourceMappingURL=FontWeight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FontWeight.js","sources":["../../../../src/legacy/constants/FontWeight.ts"],"sourcesContent":["/** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */\r\nexport enum FontWeight {\r\n LIGHT = 'light',\r\n MEDIUM = 'medium',\r\n REGULAR = 'regular',\r\n SEMIBOLD = 'semibold',\r\n BOLD = 'bold',\r\n}\r\n\r\nexport const WeightValue: Record<FontWeight, number> = {\r\n [FontWeight.LIGHT]: 300,\r\n [FontWeight.MEDIUM]: 400,\r\n [FontWeight.REGULAR]: 500,\r\n [FontWeight.SEMIBOLD]: 600,\r\n [FontWeight.BOLD]: 700,\r\n}\r\n"],"names":["FontWeight"],"mappings":"AACO,IAAK,+BAAAA,gBAAL;AACLA,cAAA,OAAA,IAAQ;AACRA,cAAA,QAAA,IAAS;AACTA,cAAA,SAAA,IAAU;AACVA,cAAA,UAAA,IAAW;AACXA,cAAA,MAAA,IAAO;AALG,SAAAA;AAAA,GAAA,cAAA,CAAA,CAAA;AAQL,MAAM,cAA0C;AAAA,EACrD;AAAA,IAAC;AAAA;AAAA,KAAmB;AAAA,EACpB;AAAA,IAAC;AAAA;AAAA,KAAoB;AAAA,EACrB;AAAA,IAAC;AAAA;AAAA,KAAqB;AAAA,EACtB;AAAA,IAAC;AAAA;AAAA,KAAsB;AAAA,EACvB;AAAA,IAAC;AAAA;AAAA,KAAkB;AACrB;"}
@@ -0,0 +1,25 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext } from "react";
3
+ import axios from "axios";
4
+ const ApiContext = createContext(void 0);
5
+ const ApiProvider = ({ children, baseURL, token, withCredentials }) => {
6
+ const axiosInstance = axios.create({
7
+ baseURL,
8
+ timeout: 1e4,
9
+ withCredentials: withCredentials !== void 0 ? withCredentials : true,
10
+ headers: token ? { Authorization: `Bearer ${token}` } : void 0
11
+ });
12
+ return /* @__PURE__ */ jsx(ApiContext.Provider, { value: axiosInstance, children });
13
+ };
14
+ const useAxiosInstance = () => {
15
+ const axiosInstance = useContext(ApiContext);
16
+ if (!axiosInstance) {
17
+ throw new Error("useAxiosInstance must be used within an ApiProvider");
18
+ }
19
+ return axiosInstance;
20
+ };
21
+ export {
22
+ ApiProvider,
23
+ useAxiosInstance
24
+ };
25
+ //# sourceMappingURL=apiContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiContext.js","sources":["../../../../src/legacy/contexts/apiContext.tsx"],"sourcesContent":["import React, { createContext, useContext } from 'react'\r\nimport axios, { AxiosInstance } from 'axios'\r\n\r\n// Create context for the Axios instance\r\nconst ApiContext = createContext<AxiosInstance | undefined>(undefined)\r\n\r\n// Provider to set the Axios instance with baseURL and optional token\r\n/** @deprecated Legacy — não usar em código novo. Ver Storybook › Legacy. */\r\nexport const ApiProvider: React.FC<{\r\n children: React.ReactNode\r\n baseURL: string\r\n token?: string\r\n withCredentials?: boolean\r\n}> = ({ children, baseURL, token, withCredentials }) => {\r\n const axiosInstance = axios.create({\r\n baseURL,\r\n timeout: 10000,\r\n withCredentials: withCredentials !== undefined ? withCredentials : true,\r\n headers: token ? { Authorization: `Bearer ${token}` } : undefined,\r\n })\r\n\r\n return (\r\n <ApiContext.Provider value={axiosInstance}>{children}</ApiContext.Provider>\r\n )\r\n}\r\n\r\n// Hook to access the Axios instance\r\nexport const useAxiosInstance = () => {\r\n const axiosInstance = useContext(ApiContext)\r\n if (!axiosInstance) {\r\n throw new Error('useAxiosInstance must be used within an ApiProvider')\r\n }\r\n return axiosInstance\r\n}\r\n"],"names":[],"mappings":";;;AAIA,MAAM,aAAa,cAAyC,MAAS;AAI9D,MAAM,cAKR,CAAC,EAAE,UAAU,SAAS,OAAO,sBAAsB;AACtD,QAAM,gBAAgB,MAAM,OAAO;AAAA,IACjC;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB,oBAAoB,SAAY,kBAAkB;AAAA,IACnE,SAAS,QAAQ,EAAE,eAAe,UAAU,KAAK,OAAO;AAAA,EAAA,CACzD;AAED,6BACG,WAAW,UAAX,EAAoB,OAAO,eAAgB,UAAS;AAEzD;AAGO,MAAM,mBAAmB,MAAM;AACpC,QAAM,gBAAgB,WAAW,UAAU;AAC3C,MAAI,CAAC,eAAe;AAClB,UAAM,IAAI,MAAM,qDAAqD;AAAA,EACvE;AACA,SAAO;AACT;"}