@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.
- package/dist/esm/index.js +222 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/legacy/assets/svgs/proef-footer-logo.svg.js +5 -0
- package/dist/esm/legacy/assets/svgs/proef-footer-logo.svg.js.map +1 -0
- package/dist/esm/legacy/components/atoms/Acronym/Acronym.css +43 -0
- package/dist/esm/legacy/components/atoms/Acronym/Acronym.js +31 -0
- package/dist/esm/legacy/components/atoms/Acronym/Acronym.js.map +1 -0
- package/dist/esm/legacy/components/atoms/BreadCrumb/BreadCrumb.css +36 -0
- package/dist/esm/legacy/components/atoms/BreadCrumb/BreadCrumb.js +57 -0
- package/dist/esm/legacy/components/atoms/BreadCrumb/BreadCrumb.js.map +1 -0
- package/dist/esm/legacy/components/atoms/Button/variants/ActionButton.css +218 -0
- package/dist/esm/legacy/components/atoms/Button/variants/ActionButton.js +50 -0
- package/dist/esm/legacy/components/atoms/Button/variants/ActionButton.js.map +1 -0
- package/dist/esm/legacy/components/atoms/Button/variants/FilterButton.css +56 -0
- package/dist/esm/legacy/components/atoms/Button/variants/FilterButton.js +34 -0
- package/dist/esm/legacy/components/atoms/Button/variants/FilterButton.js.map +1 -0
- package/dist/esm/legacy/components/atoms/Button/variants/IconButton.css +74 -0
- package/dist/esm/legacy/components/atoms/Button/variants/IconButton.js +29 -0
- package/dist/esm/legacy/components/atoms/Button/variants/IconButton.js.map +1 -0
- package/dist/esm/legacy/components/atoms/Button/variants/MainButton.css +99 -0
- package/dist/esm/legacy/components/atoms/Button/variants/MainButton.js +36 -0
- package/dist/esm/legacy/components/atoms/Button/variants/MainButton.js.map +1 -0
- package/dist/esm/legacy/components/atoms/Button/variants/TabButton.css +63 -0
- package/dist/esm/legacy/components/atoms/Button/variants/TabButton.js +21 -0
- package/dist/esm/legacy/components/atoms/Button/variants/TabButton.js.map +1 -0
- package/dist/esm/legacy/components/atoms/Field/Field.css +171 -0
- package/dist/esm/legacy/components/atoms/Field/Field.js +70 -0
- package/dist/esm/legacy/components/atoms/Field/Field.js.map +1 -0
- package/dist/esm/legacy/components/atoms/IconText/IconText.css +10 -0
- package/dist/esm/legacy/components/atoms/IconText/IconText.js +25 -0
- package/dist/esm/legacy/components/atoms/IconText/IconText.js.map +1 -0
- package/dist/esm/legacy/components/atoms/Icone/Icone.js +24 -0
- package/dist/esm/legacy/components/atoms/Icone/Icone.js.map +1 -0
- package/dist/esm/legacy/components/atoms/Input/Input.css +12 -0
- package/dist/esm/legacy/components/atoms/Input/Input.js +28 -0
- package/dist/esm/legacy/components/atoms/Input/Input.js.map +1 -0
- package/dist/esm/legacy/components/atoms/InputData/InputData.js +36 -0
- package/dist/esm/legacy/components/atoms/InputData/InputData.js.map +1 -0
- package/dist/esm/legacy/components/atoms/Label/Label.css +192 -0
- package/dist/esm/legacy/components/atoms/Label/Label.js +13 -0
- package/dist/esm/legacy/components/atoms/Label/Label.js.map +1 -0
- package/dist/esm/legacy/components/atoms/MultiTagPickerTag/MultiTagPickerTag.css +40 -0
- package/dist/esm/legacy/components/atoms/MultiTagPickerTag/MultiTagPickerTag.js +21 -0
- package/dist/esm/legacy/components/atoms/MultiTagPickerTag/MultiTagPickerTag.js.map +1 -0
- package/dist/esm/legacy/components/atoms/Select/Select.css +16 -0
- package/dist/esm/legacy/components/atoms/Select/Select.js +27 -0
- package/dist/esm/legacy/components/atoms/Select/Select.js.map +1 -0
- package/dist/esm/legacy/components/atoms/Stack/Stack.js +20 -0
- package/dist/esm/legacy/components/atoms/Stack/Stack.js.map +1 -0
- package/dist/esm/legacy/components/atoms/Switch/CustomSwitch.css +36 -0
- package/dist/esm/legacy/components/atoms/Switch/CustomSwitch.js +29 -0
- package/dist/esm/legacy/components/atoms/Switch/CustomSwitch.js.map +1 -0
- package/dist/esm/legacy/components/atoms/Tooltip/Tooltip.css +17 -0
- package/dist/esm/legacy/components/atoms/Tooltip/Tooltip.js +41 -0
- package/dist/esm/legacy/components/atoms/Tooltip/Tooltip.js.map +1 -0
- package/dist/esm/legacy/components/charts/Charts.js +259 -0
- package/dist/esm/legacy/components/charts/Charts.js.map +1 -0
- package/dist/esm/legacy/components/layout/AppLauncher/AppLauncher.js +100 -0
- package/dist/esm/legacy/components/layout/AppLauncher/AppLauncher.js.map +1 -0
- package/dist/esm/legacy/components/layout/Error/Error.css +20 -0
- package/dist/esm/legacy/components/layout/Error/Error.js +12 -0
- package/dist/esm/legacy/components/layout/Error/Error.js.map +1 -0
- package/dist/esm/legacy/components/layout/Footer/Footer.css +42 -0
- package/dist/esm/legacy/components/layout/Footer/Footer.js +23 -0
- package/dist/esm/legacy/components/layout/Footer/Footer.js.map +1 -0
- package/dist/esm/legacy/components/layout/Header/Header.css +66 -0
- package/dist/esm/legacy/components/layout/Header/Header.js +37 -0
- package/dist/esm/legacy/components/layout/Header/Header.js.map +1 -0
- package/dist/esm/legacy/components/layout/Layout/Layout.js +92 -0
- package/dist/esm/legacy/components/layout/Layout/Layout.js.map +1 -0
- package/dist/esm/legacy/components/layout/Sidebar/Sidebar.js +227 -0
- package/dist/esm/legacy/components/layout/Sidebar/Sidebar.js.map +1 -0
- package/dist/esm/legacy/components/layout/Spinner/Spinner.css +10 -0
- package/dist/esm/legacy/components/layout/Spinner/Spinner.js +19 -0
- package/dist/esm/legacy/components/layout/Spinner/Spinner.js.map +1 -0
- package/dist/esm/legacy/components/layout/TopBar/TopBar.js +34 -0
- package/dist/esm/legacy/components/layout/TopBar/TopBar.js.map +1 -0
- package/dist/esm/legacy/components/layout/TopNavLayout/TopNavLayout.js +82 -0
- package/dist/esm/legacy/components/layout/TopNavLayout/TopNavLayout.js.map +1 -0
- package/dist/esm/legacy/components/molecules/BarraValor/BarraValor.js +25 -0
- package/dist/esm/legacy/components/molecules/BarraValor/BarraValor.js.map +1 -0
- package/dist/esm/legacy/components/molecules/ColumnPicker/ColumnPicker.js +179 -0
- package/dist/esm/legacy/components/molecules/ColumnPicker/ColumnPicker.js.map +1 -0
- package/dist/esm/legacy/components/molecules/ConfirmModal/ConfirmModal.css +3 -0
- package/dist/esm/legacy/components/molecules/ConfirmModal/ConfirmModal.js +33 -0
- package/dist/esm/legacy/components/molecules/ConfirmModal/ConfirmModal.js.map +1 -0
- package/dist/esm/legacy/components/molecules/DataTable/DataTable.js +1145 -0
- package/dist/esm/legacy/components/molecules/DataTable/DataTable.js.map +1 -0
- package/dist/esm/legacy/components/molecules/FileDropzone/FileDropzone.js +68 -0
- package/dist/esm/legacy/components/molecules/FileDropzone/FileDropzone.js.map +1 -0
- package/dist/esm/legacy/components/molecules/LanguageSwitcher/LanguageSwitcher.js +96 -0
- package/dist/esm/legacy/components/molecules/LanguageSwitcher/LanguageSwitcher.js.map +1 -0
- package/dist/esm/legacy/components/molecules/Modal/Modal.css +54 -0
- package/dist/esm/legacy/components/molecules/Modal/Modal.js +64 -0
- package/dist/esm/legacy/components/molecules/Modal/Modal.js.map +1 -0
- package/dist/esm/legacy/components/molecules/MultiTagPicker/MultiTagPicker.css +97 -0
- package/dist/esm/legacy/components/molecules/MultiTagPicker/MultiTagPicker.js +113 -0
- package/dist/esm/legacy/components/molecules/MultiTagPicker/MultiTagPicker.js.map +1 -0
- package/dist/esm/legacy/components/molecules/PhotoAvatar/PhotoAvatar.js +107 -0
- package/dist/esm/legacy/components/molecules/PhotoAvatar/PhotoAvatar.js.map +1 -0
- package/dist/esm/legacy/components/molecules/Search/Search.css +18 -0
- package/dist/esm/legacy/components/molecules/Search/Search.js +30 -0
- package/dist/esm/legacy/components/molecules/Search/Search.js.map +1 -0
- package/dist/esm/legacy/components/molecules/SeletorPesquisa/SeletorPesquisa.js +116 -0
- package/dist/esm/legacy/components/molecules/SeletorPesquisa/SeletorPesquisa.js.map +1 -0
- package/dist/esm/legacy/components/molecules/Sidebar/Sidebar.css +69 -0
- package/dist/esm/legacy/components/molecules/Sidebar/Sidebar.js +62 -0
- package/dist/esm/legacy/components/molecules/Sidebar/Sidebar.js.map +1 -0
- package/dist/esm/legacy/components/molecules/UserAvatar/UserAvatar.js +105 -0
- package/dist/esm/legacy/components/molecules/UserAvatar/UserAvatar.js.map +1 -0
- package/dist/esm/legacy/components/organisms/GanttChart/GanttChart.js +162 -0
- package/dist/esm/legacy/components/organisms/GanttChart/GanttChart.js.map +1 -0
- package/dist/esm/legacy/components/organisms/Kanban/Kanban.js +88 -0
- package/dist/esm/legacy/components/organisms/Kanban/Kanban.js.map +1 -0
- package/dist/esm/legacy/components/organisms/LazyLoader/LazyLoader.js +87 -0
- package/dist/esm/legacy/components/organisms/LazyLoader/LazyLoader.js.map +1 -0
- package/dist/esm/legacy/components/organisms/MapaPontos/MapaPontos.js +427 -0
- package/dist/esm/legacy/components/organisms/MapaPontos/MapaPontos.js.map +1 -0
- package/dist/esm/legacy/components/organisms/PainelFiltros/PainelFiltros.js +206 -0
- package/dist/esm/legacy/components/organisms/PainelFiltros/PainelFiltros.js.map +1 -0
- package/dist/esm/legacy/components/organisms/PesquisaRapida/PesquisaRapida.js +147 -0
- package/dist/esm/legacy/components/organisms/PesquisaRapida/PesquisaRapida.js.map +1 -0
- package/dist/esm/legacy/components/organisms/Profile/Profile.css +26 -0
- package/dist/esm/legacy/components/organisms/Profile/Profile.js +26 -0
- package/dist/esm/legacy/components/organisms/Profile/Profile.js.map +1 -0
- package/dist/esm/legacy/components/organisms/RoleGuard/RoleGuard.js +68 -0
- package/dist/esm/legacy/components/organisms/RoleGuard/RoleGuard.js.map +1 -0
- package/dist/esm/legacy/components/organisms/Selector/Selector.css +87 -0
- package/dist/esm/legacy/components/organisms/Selector/Selector.js +181 -0
- package/dist/esm/legacy/components/organisms/Selector/Selector.js.map +1 -0
- package/dist/esm/legacy/components/organisms/StatusMatrix/StatusMatrix.js +115 -0
- package/dist/esm/legacy/components/organisms/StatusMatrix/StatusMatrix.js.map +1 -0
- package/dist/esm/legacy/components/ui/Avisos.js +86 -0
- package/dist/esm/legacy/components/ui/Avisos.js.map +1 -0
- package/dist/esm/legacy/components/ui/BarraAcoes.js +19 -0
- package/dist/esm/legacy/components/ui/BarraAcoes.js.map +1 -0
- package/dist/esm/legacy/components/ui/CabecalhoPagina.js +32 -0
- package/dist/esm/legacy/components/ui/CabecalhoPagina.js.map +1 -0
- package/dist/esm/legacy/components/ui/CaixaPesquisa.js +57 -0
- package/dist/esm/legacy/components/ui/CaixaPesquisa.js.map +1 -0
- package/dist/esm/legacy/components/ui/Confirmacao.js +52 -0
- package/dist/esm/legacy/components/ui/Confirmacao.js.map +1 -0
- package/dist/esm/legacy/components/ui/Escolha.js +157 -0
- package/dist/esm/legacy/components/ui/Escolha.js.map +1 -0
- package/dist/esm/legacy/components/ui/FaixaAviso.js +17 -0
- package/dist/esm/legacy/components/ui/FaixaAviso.js.map +1 -0
- package/dist/esm/legacy/components/ui/MenuAcoes.js +116 -0
- package/dist/esm/legacy/components/ui/MenuAcoes.js.map +1 -0
- package/dist/esm/legacy/components/ui/Passos.js +32 -0
- package/dist/esm/legacy/components/ui/Passos.js.map +1 -0
- package/dist/esm/legacy/components/ui/Separadores.js +52 -0
- package/dist/esm/legacy/components/ui/Separadores.js.map +1 -0
- package/dist/esm/legacy/components/ui/TextoAuto.js +33 -0
- package/dist/esm/legacy/components/ui/TextoAuto.js.map +1 -0
- package/dist/esm/legacy/components/ui/Ui.js +360 -0
- package/dist/esm/legacy/components/ui/Ui.js.map +1 -0
- package/dist/esm/legacy/components/ui/painelFlutuante.js +52 -0
- package/dist/esm/legacy/components/ui/painelFlutuante.js.map +1 -0
- package/dist/esm/legacy/constants/Colors.js +33 -0
- package/dist/esm/legacy/constants/Colors.js.map +1 -0
- package/dist/esm/legacy/constants/FontWeight.js +35 -0
- package/dist/esm/legacy/constants/FontWeight.js.map +1 -0
- package/dist/esm/legacy/contexts/apiContext.js +25 -0
- package/dist/esm/legacy/contexts/apiContext.js.map +1 -0
- package/dist/esm/legacy/contexts/authContext.js +85 -0
- package/dist/esm/legacy/contexts/authContext.js.map +1 -0
- package/dist/esm/legacy/contexts/socketContext.js +34 -0
- package/dist/esm/legacy/contexts/socketContext.js.map +1 -0
- package/dist/esm/legacy/hooks/useApi.js +62 -0
- package/dist/esm/legacy/hooks/useApi.js.map +1 -0
- package/dist/esm/legacy/hooks/useTheme.js +39 -0
- package/dist/esm/legacy/hooks/useTheme.js.map +1 -0
- package/dist/esm/legacy/pages/Error/ErrorPage.css +18 -0
- package/dist/esm/legacy/pages/Error/ErrorPage.js +50 -0
- package/dist/esm/legacy/pages/Error/ErrorPage.js.map +1 -0
- package/dist/esm/legacy/pages/Loading/Loading.css +46 -0
- package/dist/esm/legacy/pages/Loading/Loading.js +9 -0
- package/dist/esm/legacy/pages/Loading/Loading.js.map +1 -0
- package/dist/esm/legacy/pages/Login/LoginScreen.js +46 -0
- package/dist/esm/legacy/pages/Login/LoginScreen.js.map +1 -0
- package/dist/esm/legacy/pages/NotFound/NotFound.css +21 -0
- package/dist/esm/legacy/pages/NotFound/NotFound.js +24 -0
- package/dist/esm/legacy/pages/NotFound/NotFound.js.map +1 -0
- package/dist/esm/legacy/styles/themes/ButtonThemes.js +28 -0
- package/dist/esm/legacy/styles/themes/ButtonThemes.js.map +1 -0
- package/dist/esm/legacy/styles/utils/utils.js +7 -0
- package/dist/esm/legacy/styles/utils/utils.js.map +1 -0
- package/dist/esm/legacy/utils/stringUtils.js +35 -0
- package/dist/esm/legacy/utils/stringUtils.js.map +1 -0
- package/dist/esm/v1/capabilities/documents/QRScanning/scanQRCodes.js +157 -0
- package/dist/esm/v1/capabilities/documents/QRScanning/scanQRCodes.js.map +1 -0
- package/dist/esm/v1/components/documents/DocumentDropzone/DocumentDropzone.js +307 -0
- package/dist/esm/v1/components/documents/DocumentDropzone/DocumentDropzone.js.map +1 -0
- package/dist/esm/v1/components/forms/FormField/FormField.js +59 -0
- package/dist/esm/v1/components/forms/FormField/FormField.js.map +1 -0
- package/dist/esm/v1/components/forms/FormGrid/FormGrid.js +20 -0
- package/dist/esm/v1/components/forms/FormGrid/FormGrid.js.map +1 -0
- package/dist/esm/v1/components/overlays/Dialog/Dialog.js +87 -0
- package/dist/esm/v1/components/overlays/Dialog/Dialog.js.map +1 -0
- package/dist/esm/v1/foundations/icons/icons.js +76 -0
- package/dist/esm/v1/foundations/icons/icons.js.map +1 -0
- package/dist/esm/v1/primitives/buttons/Button/Button.js +27 -0
- package/dist/esm/v1/primitives/buttons/Button/Button.js.map +1 -0
- package/dist/esm/v1/primitives/documents/PdfPreview/PdfPreview.js +137 -0
- package/dist/esm/v1/primitives/documents/PdfPreview/PdfPreview.js.map +1 -0
- package/dist/esm/v1/primitives/documents/PdfPreview/pdfjs.js +26 -0
- package/dist/esm/v1/primitives/documents/PdfPreview/pdfjs.js.map +1 -0
- package/dist/esm/v1/primitives/forms/LookupInput/LookupInput.js +37 -0
- package/dist/esm/v1/primitives/forms/LookupInput/LookupInput.js.map +1 -0
- package/dist/esm/v1/primitives/forms/SelectInput/SelectInput.js +29 -0
- package/dist/esm/v1/primitives/forms/SelectInput/SelectInput.js.map +1 -0
- package/dist/esm/v1/primitives/forms/TextArea/TextArea.js +75 -0
- package/dist/esm/v1/primitives/forms/TextArea/TextArea.js.map +1 -0
- package/dist/esm/v1/primitives/forms/TextInput/TextInput.js +21 -0
- package/dist/esm/v1/primitives/forms/TextInput/TextInput.js.map +1 -0
- package/dist/esm/v1/primitives/forms/field.js +12 -0
- package/dist/esm/v1/primitives/forms/field.js.map +1 -0
- package/dist/style.css +1 -1
- package/dist/style.layered.css +1 -1
- package/dist/types/index.d.ts +14 -13
- package/dist/types/{components → legacy/components}/atoms/Acronym/Acronym.d.ts +1 -0
- package/dist/types/{components → legacy/components}/atoms/BreadCrumb/BreadCrumb.d.ts +1 -0
- package/dist/types/{components → legacy/components}/atoms/Button/variants/ActionButton.d.ts +1 -0
- package/dist/types/{components → legacy/components}/atoms/Button/variants/FilterButton.d.ts +1 -0
- package/dist/types/{components → legacy/components}/atoms/Button/variants/IconButton.d.ts +1 -0
- package/dist/types/{components → legacy/components}/atoms/Button/variants/MainButton.d.ts +1 -0
- package/dist/types/{components → legacy/components}/atoms/Button/variants/TabButton.d.ts +1 -0
- package/dist/types/{components → legacy/components}/atoms/Field/Field.d.ts +1 -0
- package/dist/types/{components → legacy/components}/atoms/IconText/IconText.d.ts +1 -0
- package/dist/types/{components → legacy/components}/atoms/Icone/Icone.d.ts +2 -0
- package/dist/types/{components → legacy/components}/atoms/Input/Input.d.ts +1 -0
- package/dist/types/{components → legacy/components}/atoms/InputData/InputData.d.ts +4 -0
- package/dist/types/{components → legacy/components}/atoms/Label/Label.d.ts +1 -0
- package/dist/types/{components → legacy/components}/atoms/Select/Select.d.ts +1 -0
- package/dist/types/{components → legacy/components}/atoms/Stack/Stack.d.ts +1 -0
- package/dist/types/{components → legacy/components}/atoms/Switch/CustomSwitch.d.ts +1 -0
- package/dist/types/{components → legacy/components}/atoms/Tooltip/Tooltip.d.ts +1 -0
- package/dist/types/{components → legacy/components}/charts/Charts.d.ts +29 -6
- package/dist/types/{components → legacy/components}/layout/AppLauncher/AppLauncher.d.ts +3 -0
- package/dist/types/{components → legacy/components}/layout/Error/Error.d.ts +1 -0
- package/dist/types/{components → legacy/components}/layout/Footer/Footer.d.ts +1 -0
- package/dist/types/{components → legacy/components}/layout/Header/Header.d.ts +1 -0
- package/dist/types/{components → legacy/components}/layout/Layout/Layout.d.ts +2 -0
- package/dist/types/{components → legacy/components}/layout/Sidebar/Sidebar.d.ts +5 -0
- package/dist/types/{components → legacy/components}/layout/Spinner/Spinner.d.ts +1 -0
- package/dist/types/{components → legacy/components}/layout/TopBar/TopBar.d.ts +2 -0
- package/dist/types/{components → legacy/components}/layout/TopNavLayout/TopNavLayout.d.ts +3 -0
- package/dist/types/{components → legacy/components}/molecules/BarraValor/BarraValor.d.ts +3 -0
- package/dist/types/{components → legacy/components}/molecules/ColumnPicker/ColumnPicker.d.ts +8 -1
- package/dist/types/{components → legacy/components}/molecules/ConfirmModal/ConfirmModal.d.ts +2 -0
- package/dist/types/{components → legacy/components}/molecules/DataTable/DataTable.d.ts +6 -0
- package/dist/types/{components → legacy/components}/molecules/FileDropzone/FileDropzone.d.ts +3 -0
- package/dist/types/{components → legacy/components}/molecules/LanguageSwitcher/LanguageSwitcher.d.ts +3 -0
- package/dist/types/{components → legacy/components}/molecules/Modal/Modal.d.ts +2 -0
- package/dist/types/{components → legacy/components}/molecules/MultiTagPicker/MultiTagPicker.d.ts +2 -0
- package/dist/types/{components → legacy/components}/molecules/PhotoAvatar/PhotoAvatar.d.ts +1 -0
- package/dist/types/{components → legacy/components}/molecules/SeletorPesquisa/SeletorPesquisa.d.ts +3 -0
- package/dist/types/{components → legacy/components}/molecules/Sidebar/Sidebar.d.ts +1 -0
- package/dist/types/{components → legacy/components}/molecules/UserAvatar/UserAvatar.d.ts +1 -0
- package/dist/types/{components → legacy/components}/organisms/GanttChart/GanttChart.d.ts +8 -1
- package/dist/types/{components → legacy/components}/organisms/Kanban/Kanban.d.ts +3 -0
- package/dist/types/{components → legacy/components}/organisms/LazyLoader/LazyLoader.d.ts +1 -0
- package/dist/types/{components → legacy/components}/organisms/MapaPontos/MapaPontos.d.ts +12 -2
- package/dist/types/{components → legacy/components}/organisms/PainelFiltros/PainelFiltros.d.ts +7 -0
- package/dist/types/{components → legacy/components}/organisms/PesquisaRapida/PesquisaRapida.d.ts +5 -0
- package/dist/types/{components → legacy/components}/organisms/Profile/Profile.d.ts +1 -0
- package/dist/types/{components → legacy/components}/organisms/RoleGuard/RoleGuard.d.ts +6 -1
- package/dist/types/{components → legacy/components}/organisms/Selector/Selector.d.ts +1 -0
- package/dist/types/{components → legacy/components}/organisms/StatusMatrix/StatusMatrix.d.ts +6 -0
- package/dist/types/{components → legacy/components}/ui/Avisos.d.ts +9 -1
- package/dist/types/{components → legacy/components}/ui/BarraAcoes.d.ts +2 -0
- package/dist/types/{components → legacy/components}/ui/CabecalhoPagina.d.ts +6 -1
- package/dist/types/{components → legacy/components}/ui/Confirmacao.d.ts +2 -0
- package/dist/types/{components → legacy/components}/ui/FaixaAviso.d.ts +3 -0
- package/dist/types/{components → legacy/components}/ui/Passos.d.ts +3 -0
- package/dist/types/{components → legacy/components}/ui/Separadores.d.ts +3 -0
- package/dist/types/{components → legacy/components}/ui/TextoAuto.d.ts +2 -0
- package/dist/types/{components → legacy/components}/ui/Ui.d.ts +41 -7
- package/dist/types/{constants → legacy/constants}/FontWeight.d.ts +1 -0
- package/dist/types/{contexts → legacy/contexts}/apiContext.d.ts +1 -0
- package/dist/types/{contexts → legacy/contexts}/authContext.d.ts +2 -0
- package/dist/types/{contexts → legacy/contexts}/socketContext.d.ts +2 -0
- package/dist/types/{exports → legacy/exports}/hooks.d.ts +1 -1
- package/dist/types/{exports → legacy/exports}/molecules.d.ts +2 -1
- package/dist/types/legacy/exports/types.d.ts +7 -0
- package/dist/types/{hooks → legacy/hooks}/useApi.d.ts +2 -0
- package/dist/types/{hooks → legacy/hooks}/useTheme.d.ts +2 -0
- package/dist/types/{pages → legacy/pages}/Error/ErrorPage.d.ts +1 -0
- package/dist/types/{pages → legacy/pages}/Loading/Loading.d.ts +1 -0
- package/dist/types/{pages → legacy/pages}/Login/LoginScreen.d.ts +2 -0
- package/dist/types/{pages → legacy/pages}/NotFound/NotFound.d.ts +1 -0
- package/dist/types/legacy/styles/utils/utils.d.ts +2 -0
- package/dist/types/{types → legacy/types}/Fetcher.d.ts +1 -0
- package/dist/types/{types → legacy/types}/LoggedUser.d.ts +1 -0
- package/dist/types/{types → legacy/types}/SidebarMenu.d.ts +2 -0
- package/dist/types/legacy/types/themes/AcronymThemes.d.ts +4 -0
- package/dist/types/{types → legacy/types}/themes/ButtonThemes.d.ts +3 -0
- package/dist/types/legacy/types/themes/CustomSwitchThemes.d.ts +4 -0
- package/dist/types/{types → legacy/types}/themes/IconTextThemes.d.ts +1 -0
- package/dist/types/legacy/utils/stringUtils.d.ts +6 -0
- package/dist/types/v1/capabilities/documents/QRScanning/scanQRCodes.d.ts +25 -0
- package/dist/types/v1/components/documents/DocumentDropzone/DocumentDropzone.d.ts +60 -0
- package/dist/types/v1/components/forms/FormField/FormField.d.ts +44 -0
- package/dist/types/v1/components/forms/FormGrid/FormGrid.d.ts +21 -0
- package/dist/types/v1/components/overlays/Dialog/Dialog.d.ts +55 -0
- package/dist/types/v1/foundations/icons/icons.d.ts +24 -0
- package/dist/types/v1/index.d.ts +25 -0
- package/dist/types/v1/primitives/buttons/Button/Button.d.ts +18 -0
- package/dist/types/v1/primitives/documents/PdfPreview/PdfPreview.d.ts +17 -0
- package/dist/types/v1/primitives/documents/PdfPreview/pdfjs.d.ts +11 -0
- package/dist/types/v1/primitives/forms/LookupInput/LookupInput.d.ts +25 -0
- package/dist/types/v1/primitives/forms/SelectInput/SelectInput.d.ts +19 -0
- package/dist/types/v1/primitives/forms/TextArea/TextArea.d.ts +37 -0
- package/dist/types/v1/primitives/forms/TextInput/TextInput.d.ts +16 -0
- package/dist/types/v1/primitives/forms/field.d.ts +20 -0
- package/package.json +38 -33
- package/dist/bundle.js +0 -2
- package/dist/bundle.js.LICENSE.txt +0 -80
- package/dist/types/components/atoms/Icone/Icone.test.d.ts +0 -1
- package/dist/types/components/layout/Sidebar/Sidebar.test.d.ts +0 -1
- package/dist/types/components/molecules/BarraValor/BarraValor.test.d.ts +0 -1
- package/dist/types/components/molecules/DataTable/DataTable.test.d.ts +0 -1
- package/dist/types/components/molecules/SeletorPesquisa/SeletorPesquisa.test.d.ts +0 -1
- package/dist/types/components/organisms/Kanban/Kanban.test.d.ts +0 -1
- package/dist/types/components/organisms/RoleGuard/RoleGuard.test.d.ts +0 -1
- package/dist/types/components/ui/CaixaPesquisa.test.d.ts +0 -1
- package/dist/types/components/ui/Escolha.test.d.ts +0 -1
- package/dist/types/components/ui/Paginas.test.d.ts +0 -1
- package/dist/types/exports/types.d.ts +0 -7
- package/dist/types/styles/utils/utils.d.ts +0 -1
- package/dist/types/test/setup.d.ts +0 -1
- package/dist/types/types/themes/AcronymThemes.d.ts +0 -3
- package/dist/types/types/themes/CustomSwitchThemes.d.ts +0 -3
- package/dist/types/utils/stringUtils.d.ts +0 -3
- /package/dist/types/{components → legacy/components}/atoms/MultiTagPickerTag/MultiTagPickerTag.d.ts +0 -0
- /package/dist/types/{components → legacy/components}/atoms/SearchSelect/SearchSelect.d.ts +0 -0
- /package/dist/types/{components → legacy/components}/molecules/Search/Search.d.ts +0 -0
- /package/dist/types/{components → legacy/components}/ui/CaixaPesquisa.d.ts +0 -0
- /package/dist/types/{components → legacy/components}/ui/Escolha.d.ts +0 -0
- /package/dist/types/{components → legacy/components}/ui/MenuAcoes.d.ts +0 -0
- /package/dist/types/{components → legacy/components}/ui/painelFlutuante.d.ts +0 -0
- /package/dist/types/{constants → legacy/constants}/Colors.d.ts +0 -0
- /package/dist/types/{exports → legacy/exports}/assets.d.ts +0 -0
- /package/dist/types/{exports → legacy/exports}/atoms.d.ts +0 -0
- /package/dist/types/{exports → legacy/exports}/charts.d.ts +0 -0
- /package/dist/types/{exports → legacy/exports}/constants.d.ts +0 -0
- /package/dist/types/{exports → legacy/exports}/contexts.d.ts +0 -0
- /package/dist/types/{exports → legacy/exports}/layout.d.ts +0 -0
- /package/dist/types/{exports → legacy/exports}/organisms.d.ts +0 -0
- /package/dist/types/{exports → legacy/exports}/pages.d.ts +0 -0
- /package/dist/types/{exports → legacy/exports}/styles.d.ts +0 -0
- /package/dist/types/{exports → legacy/exports}/ui.d.ts +0 -0
- /package/dist/types/{exports → legacy/exports}/utils.d.ts +0 -0
- /package/dist/types/{styles → legacy/styles}/themes/ButtonThemes.d.ts +0 -0
- /package/dist/types/{types → legacy/types}/SelectableElement.d.ts +0 -0
- /package/dist/types/{utils → legacy/utils}/keycloak.d.ts +0 -0
|
@@ -0,0 +1,1145 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useEffect, useRef, useLayoutEffect, useMemo, Fragment } from "react";
|
|
3
|
+
import Escolha from "../../ui/Escolha.js";
|
|
4
|
+
import { createPortal } from "react-dom";
|
|
5
|
+
const DEFAULT_LABELS = {
|
|
6
|
+
total: "Total",
|
|
7
|
+
results: "{count} results",
|
|
8
|
+
resizeColumn: "Drag to resize · double-click to reset",
|
|
9
|
+
export: "Export",
|
|
10
|
+
loading: "Loading…",
|
|
11
|
+
empty: "No data",
|
|
12
|
+
error: "Failed to load",
|
|
13
|
+
search: "Search…",
|
|
14
|
+
clear: "Clear",
|
|
15
|
+
clearAll: "Clear all",
|
|
16
|
+
noOptions: "No options",
|
|
17
|
+
selected: "{count} sel.",
|
|
18
|
+
moreOptions: "Showing {shown} of {total} — refine your search",
|
|
19
|
+
loadingOptions: "Loading options from all pages…",
|
|
20
|
+
min: "From",
|
|
21
|
+
max: "To",
|
|
22
|
+
page: "Page {page}/{pages}",
|
|
23
|
+
prev: "Prev",
|
|
24
|
+
next: "Next",
|
|
25
|
+
sortAsc: "Sort ascending",
|
|
26
|
+
sortDesc: "Sort descending",
|
|
27
|
+
groupBy: "Group by {label}",
|
|
28
|
+
ungroup: "Remove grouping by {label}",
|
|
29
|
+
clearGroups: "Clear grouping",
|
|
30
|
+
perPage: "Per page",
|
|
31
|
+
selectAll: "(Select all)",
|
|
32
|
+
selectAllResults: "(Select results)"
|
|
33
|
+
};
|
|
34
|
+
const Funnel = ({ size = 12, 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.5", strokeLinecap: "round", strokeLinejoin: "round", className, children: /* @__PURE__ */ jsx("path", { d: "M22 3H2l8 9.46V19l4 2v-8.54L22 3z" }) });
|
|
35
|
+
const Layers = ({ size = 11, 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.5", strokeLinecap: "round", strokeLinejoin: "round", className, children: [
|
|
36
|
+
/* @__PURE__ */ jsx("path", { d: "m12 2 9 5-9 5-9-5 9-5z" }),
|
|
37
|
+
/* @__PURE__ */ jsx("path", { d: "m3 17 9 5 9-5M3 12l9 5 9-5" })
|
|
38
|
+
] });
|
|
39
|
+
const Caret = ({ size = 11, 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: "3", strokeLinecap: "round", strokeLinejoin: "round", className, children: /* @__PURE__ */ jsx("path", { d: "m9 18 6-6-6-6" }) });
|
|
40
|
+
const EMPTY = "—";
|
|
41
|
+
const MAX_OPCOES_FILTRO = 50;
|
|
42
|
+
const DEFAULT_STICKY_WIDTH = 160;
|
|
43
|
+
const COLLATOR = new Intl.Collator(void 0, { numeric: true });
|
|
44
|
+
function rawValue(row, col) {
|
|
45
|
+
if (col.value) {
|
|
46
|
+
const v2 = col.value(row);
|
|
47
|
+
return v2 == null ? null : v2;
|
|
48
|
+
}
|
|
49
|
+
const v = row[col.key];
|
|
50
|
+
if (v == null) return null;
|
|
51
|
+
if (typeof v === "number" || typeof v === "string") return v;
|
|
52
|
+
return String(v);
|
|
53
|
+
}
|
|
54
|
+
function filterKey(row, col) {
|
|
55
|
+
const v = rawValue(row, col);
|
|
56
|
+
return v == null || v === "" ? EMPTY : String(v);
|
|
57
|
+
}
|
|
58
|
+
function timestampDeData(v) {
|
|
59
|
+
if (v == null || v === "") return NaN;
|
|
60
|
+
if (v instanceof Date) return v.getTime();
|
|
61
|
+
const s = String(v).trim();
|
|
62
|
+
const m = /^(\d{1,2})[/-](\d{1,2})[/-](\d{4})/.exec(s);
|
|
63
|
+
if (m) return Date.UTC(Number(m[3]), Number(m[2]) - 1, Number(m[1]));
|
|
64
|
+
const t = new Date(s).getTime();
|
|
65
|
+
return Number.isNaN(t) ? NaN : t;
|
|
66
|
+
}
|
|
67
|
+
function compare(a, b, type) {
|
|
68
|
+
if (a == null && b == null) return 0;
|
|
69
|
+
if (a == null) return 1;
|
|
70
|
+
if (b == null) return -1;
|
|
71
|
+
if (type === "number") return Number(a) - Number(b);
|
|
72
|
+
if (type === "date") return timestampDeData(a) - timestampDeData(b);
|
|
73
|
+
return COLLATOR.compare(String(a), String(b));
|
|
74
|
+
}
|
|
75
|
+
function valorParaIntervalo(row, col) {
|
|
76
|
+
const v = rawValue(row, col);
|
|
77
|
+
return col.sortType === "date" ? timestampDeData(v) : Number(v);
|
|
78
|
+
}
|
|
79
|
+
function toCsv(columns, rows) {
|
|
80
|
+
const esc = (v) => {
|
|
81
|
+
const s = v == null ? "" : String(v);
|
|
82
|
+
return /[",\n]/.test(s) ? `"${s.replace(/"/g, '""')}"` : s;
|
|
83
|
+
};
|
|
84
|
+
const head = columns.map((c) => esc(c.label)).join(",");
|
|
85
|
+
const body = rows.map((r) => columns.map((c) => esc(rawValue(r, c))).join(",")).join("\n");
|
|
86
|
+
return `${head}
|
|
87
|
+
${body}`;
|
|
88
|
+
}
|
|
89
|
+
const ordenarRotulos = (a, b) => a === EMPTY ? 1 : b === EMPTY ? -1 : COLLATOR.compare(a, b);
|
|
90
|
+
const SEM_CRUZAMENTO = [];
|
|
91
|
+
const escaparRegex = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
92
|
+
function pesquisaCuringa(q) {
|
|
93
|
+
let fonte = "";
|
|
94
|
+
let literal = "";
|
|
95
|
+
let temCuringa = false;
|
|
96
|
+
for (let i = 0; i < q.length; i++) {
|
|
97
|
+
const c = q[i];
|
|
98
|
+
const seguinte = q[i + 1];
|
|
99
|
+
if (c === "~" && (seguinte === "*" || seguinte === "?" || seguinte === "~")) {
|
|
100
|
+
fonte += escaparRegex(seguinte);
|
|
101
|
+
literal += seguinte;
|
|
102
|
+
i++;
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (c === "*" || c === "?") {
|
|
106
|
+
fonte += c === "*" ? ".*" : ".";
|
|
107
|
+
literal += c;
|
|
108
|
+
temCuringa = true;
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
fonte += escaparRegex(c);
|
|
112
|
+
literal += c;
|
|
113
|
+
}
|
|
114
|
+
if (!temCuringa) return (v) => v.includes(literal);
|
|
115
|
+
const rx = new RegExp(`^${fonte}$`);
|
|
116
|
+
return (v) => rx.test(v);
|
|
117
|
+
}
|
|
118
|
+
function DataTable({
|
|
119
|
+
columns,
|
|
120
|
+
data,
|
|
121
|
+
allData,
|
|
122
|
+
onDataNeeded,
|
|
123
|
+
isAllDataLoading,
|
|
124
|
+
alwaysClient,
|
|
125
|
+
onClientModeChange,
|
|
126
|
+
rowKey,
|
|
127
|
+
onRowClick,
|
|
128
|
+
onRowDoubleClick,
|
|
129
|
+
rowClassName,
|
|
130
|
+
isLoading,
|
|
131
|
+
isError,
|
|
132
|
+
maxHeight = "70vh",
|
|
133
|
+
pageSize,
|
|
134
|
+
pageSizeOptions,
|
|
135
|
+
selectable,
|
|
136
|
+
onSelectionChange,
|
|
137
|
+
clearSelectionTrigger,
|
|
138
|
+
storageKey,
|
|
139
|
+
defaultMaxColumnWidth = 360,
|
|
140
|
+
resizableColumns = true,
|
|
141
|
+
sortFromFilter = true,
|
|
142
|
+
filterMode = "excel",
|
|
143
|
+
defaultSortKey,
|
|
144
|
+
defaultSortDir,
|
|
145
|
+
viewRef,
|
|
146
|
+
exportFileName,
|
|
147
|
+
onExport,
|
|
148
|
+
extraToolbar,
|
|
149
|
+
emptySubLabel,
|
|
150
|
+
emptyIcon,
|
|
151
|
+
labels,
|
|
152
|
+
totalRow = false,
|
|
153
|
+
defaultGroupBy
|
|
154
|
+
}) {
|
|
155
|
+
const L = { ...DEFAULT_LABELS, ...labels };
|
|
156
|
+
const [larguras, setLarguras] = useState(() => {
|
|
157
|
+
if (!storageKey) return {};
|
|
158
|
+
try {
|
|
159
|
+
return JSON.parse(localStorage.getItem(`dt_widths_${storageKey}`) ?? "{}");
|
|
160
|
+
} catch {
|
|
161
|
+
return {};
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
useEffect(() => {
|
|
165
|
+
if (!storageKey) return;
|
|
166
|
+
try {
|
|
167
|
+
localStorage.setItem(`dt_widths_${storageKey}`, JSON.stringify(larguras));
|
|
168
|
+
} catch {
|
|
169
|
+
}
|
|
170
|
+
}, [larguras, storageKey]);
|
|
171
|
+
const larguraMax = (c) => larguras[c.key] ?? c.maxWidth ?? (defaultMaxColumnWidth > 0 ? defaultMaxColumnWidth : void 0);
|
|
172
|
+
const iniciarResize = (e, key) => {
|
|
173
|
+
e.preventDefault();
|
|
174
|
+
e.stopPropagation();
|
|
175
|
+
const th = e.currentTarget.parentElement;
|
|
176
|
+
const x0 = e.clientX;
|
|
177
|
+
const w0 = th?.getBoundingClientRect().width ?? 120;
|
|
178
|
+
const mover = (ev) => setLarguras((l) => ({ ...l, [key]: Math.max(60, Math.round(w0 + ev.clientX - x0)) }));
|
|
179
|
+
const parar = () => {
|
|
180
|
+
window.removeEventListener("mousemove", mover);
|
|
181
|
+
window.removeEventListener("mouseup", parar);
|
|
182
|
+
document.body.style.cursor = "";
|
|
183
|
+
};
|
|
184
|
+
document.body.style.cursor = "col-resize";
|
|
185
|
+
window.addEventListener("mousemove", mover);
|
|
186
|
+
window.addEventListener("mouseup", parar);
|
|
187
|
+
};
|
|
188
|
+
const reporLargura = (key) => setLarguras((l) => {
|
|
189
|
+
const n = { ...l };
|
|
190
|
+
delete n[key];
|
|
191
|
+
return n;
|
|
192
|
+
});
|
|
193
|
+
const lerSessao = (sufixo) => {
|
|
194
|
+
if (!storageKey) return void 0;
|
|
195
|
+
try {
|
|
196
|
+
const raw = sessionStorage.getItem(`dt_${sufixo}_${storageKey}`);
|
|
197
|
+
return raw === null ? void 0 : JSON.parse(raw);
|
|
198
|
+
} catch {
|
|
199
|
+
return void 0;
|
|
200
|
+
}
|
|
201
|
+
};
|
|
202
|
+
const [sort, setSort] = useState(() => {
|
|
203
|
+
const guardada = lerSessao("sort");
|
|
204
|
+
if (guardada !== void 0) return guardada && columns.some((c) => c.key === guardada.key) ? guardada : null;
|
|
205
|
+
return defaultSortKey ? { key: defaultSortKey, dir: defaultSortDir === "desc" ? -1 : 1 } : null;
|
|
206
|
+
});
|
|
207
|
+
const [columnFilters, setColumnFilters] = useState(() => {
|
|
208
|
+
if (!storageKey) return {};
|
|
209
|
+
try {
|
|
210
|
+
const raw = sessionStorage.getItem(`dt_filters_${storageKey}`);
|
|
211
|
+
if (!raw) return {};
|
|
212
|
+
const parsed = JSON.parse(raw);
|
|
213
|
+
return Object.fromEntries(Object.entries(parsed).map(([k, v]) => [k, new Set(v)]));
|
|
214
|
+
} catch {
|
|
215
|
+
return {};
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
const [rangeFilters, setRangeFilters] = useState(() => {
|
|
219
|
+
if (!storageKey) return {};
|
|
220
|
+
try {
|
|
221
|
+
const raw = sessionStorage.getItem(`dt_ranges_${storageKey}`);
|
|
222
|
+
return raw ? JSON.parse(raw) : {};
|
|
223
|
+
} catch {
|
|
224
|
+
return {};
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
const [groupByKeys, setGroupByKeys] = useState(
|
|
228
|
+
() => (lerSessao("group") ?? defaultGroupBy ?? []).filter((k) => columns.some((c) => c.key === k))
|
|
229
|
+
);
|
|
230
|
+
const [collapsedGroups, setCollapsedGroups] = useState(/* @__PURE__ */ new Set());
|
|
231
|
+
const [selectedKeys, setSelectedKeys] = useState(/* @__PURE__ */ new Set());
|
|
232
|
+
const [openFilter, setOpenFilter] = useState(null);
|
|
233
|
+
const [filterSearch, setFilterSearch] = useState("");
|
|
234
|
+
const filterRefs = useRef(/* @__PURE__ */ new Map());
|
|
235
|
+
const popupRef = useRef(null);
|
|
236
|
+
const [popupPos, setPopupPos] = useState(null);
|
|
237
|
+
const isGrouped = groupByKeys.length > 0;
|
|
238
|
+
useEffect(() => {
|
|
239
|
+
if (!storageKey) return;
|
|
240
|
+
const serializavel = Object.fromEntries(Object.entries(columnFilters).map(([k, v]) => [k, Array.from(v)]));
|
|
241
|
+
try {
|
|
242
|
+
sessionStorage.setItem(`dt_filters_${storageKey}`, JSON.stringify(serializavel));
|
|
243
|
+
sessionStorage.setItem(`dt_ranges_${storageKey}`, JSON.stringify(rangeFilters));
|
|
244
|
+
sessionStorage.setItem(`dt_sort_${storageKey}`, JSON.stringify(sort));
|
|
245
|
+
sessionStorage.setItem(`dt_group_${storageKey}`, JSON.stringify(groupByKeys));
|
|
246
|
+
} catch {
|
|
247
|
+
}
|
|
248
|
+
}, [columnFilters, rangeFilters, sort, groupByKeys, storageKey]);
|
|
249
|
+
useLayoutEffect(() => {
|
|
250
|
+
if (!openFilter) {
|
|
251
|
+
setPopupPos(null);
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
const recalcular = () => {
|
|
255
|
+
const el = filterRefs.current.get(openFilter);
|
|
256
|
+
if (!el) return;
|
|
257
|
+
const r = el.getBoundingClientRect();
|
|
258
|
+
const largura = Math.min(288, window.innerWidth * 0.8);
|
|
259
|
+
const left = Math.max(8, Math.min(r.left, window.innerWidth - largura - 8));
|
|
260
|
+
setPopupPos({ top: r.bottom + 6, left });
|
|
261
|
+
};
|
|
262
|
+
recalcular();
|
|
263
|
+
window.addEventListener("scroll", recalcular, true);
|
|
264
|
+
window.addEventListener("resize", recalcular);
|
|
265
|
+
return () => {
|
|
266
|
+
window.removeEventListener("scroll", recalcular, true);
|
|
267
|
+
window.removeEventListener("resize", recalcular);
|
|
268
|
+
};
|
|
269
|
+
}, [openFilter]);
|
|
270
|
+
useEffect(() => {
|
|
271
|
+
const onDown = (e) => {
|
|
272
|
+
if (!openFilter) return;
|
|
273
|
+
const alvo = e.target;
|
|
274
|
+
const botao = filterRefs.current.get(openFilter);
|
|
275
|
+
if (botao?.contains(alvo) || popupRef.current?.contains(alvo)) return;
|
|
276
|
+
setOpenFilter(null);
|
|
277
|
+
setFilterSearch("");
|
|
278
|
+
};
|
|
279
|
+
document.addEventListener("mousedown", onDown);
|
|
280
|
+
return () => document.removeEventListener("mousedown", onDown);
|
|
281
|
+
}, [openFilter]);
|
|
282
|
+
const resolverValor = (key) => {
|
|
283
|
+
const col = columns.find((c) => c.key === key);
|
|
284
|
+
if (col) return (row) => rawValue(row, col);
|
|
285
|
+
for (const c of columns) {
|
|
286
|
+
const ef = c.extraFilters?.find((f) => f.key === key);
|
|
287
|
+
if (ef) return ef.value;
|
|
288
|
+
}
|
|
289
|
+
return void 0;
|
|
290
|
+
};
|
|
291
|
+
const rotuloDe = (fn, row) => {
|
|
292
|
+
const v = fn(row);
|
|
293
|
+
return v == null || v === "" ? EMPTY : String(v);
|
|
294
|
+
};
|
|
295
|
+
const modoExcel = filterMode === "excel";
|
|
296
|
+
const activeFilters = useMemo(
|
|
297
|
+
() => Object.entries(columnFilters).filter(([, s]) => s && (modoExcel || s.size > 0)),
|
|
298
|
+
[columnFilters, modoExcel]
|
|
299
|
+
);
|
|
300
|
+
const activeRanges = useMemo(
|
|
301
|
+
() => Object.entries(rangeFilters).filter(([, r]) => r && (r.min != null || r.max != null)),
|
|
302
|
+
[rangeFilters]
|
|
303
|
+
);
|
|
304
|
+
const hasActiveFilters = activeFilters.length > 0 || activeRanges.length > 0;
|
|
305
|
+
const isClientMode = !!allData && (!!alwaysClient || hasActiveFilters || !!sort || isGrouped);
|
|
306
|
+
const effectiveData = isClientMode ? allData : data;
|
|
307
|
+
useEffect(() => {
|
|
308
|
+
if (!allData && (hasActiveFilters || sort || isGrouped)) onDataNeeded?.();
|
|
309
|
+
}, [allData, hasActiveFilters, sort, isGrouped]);
|
|
310
|
+
useEffect(() => {
|
|
311
|
+
onClientModeChange?.(isClientMode);
|
|
312
|
+
}, [isClientMode]);
|
|
313
|
+
useEffect(() => {
|
|
314
|
+
if (clearSelectionTrigger === void 0) return;
|
|
315
|
+
setSelectedKeys(/* @__PURE__ */ new Set());
|
|
316
|
+
}, [clearSelectionTrigger]);
|
|
317
|
+
const chaveFiltrosCol = JSON.stringify(
|
|
318
|
+
Object.entries(columnFilters).map(([k, v]) => [k, [...v].sort()]).sort()
|
|
319
|
+
);
|
|
320
|
+
useEffect(() => {
|
|
321
|
+
if (!selectable) return;
|
|
322
|
+
setSelectedKeys(/* @__PURE__ */ new Set());
|
|
323
|
+
onSelectionChange?.(/* @__PURE__ */ new Set());
|
|
324
|
+
}, [chaveFiltrosCol]);
|
|
325
|
+
const cruzFiltros = modoExcel ? SEM_CRUZAMENTO : activeFilters;
|
|
326
|
+
const cruzRanges = modoExcel ? SEM_CRUZAMENTO : activeRanges;
|
|
327
|
+
const distinctValues = (key) => {
|
|
328
|
+
const valueFn = resolverValor(key);
|
|
329
|
+
if (!valueFn) return [];
|
|
330
|
+
let fonte = allData ?? data;
|
|
331
|
+
for (const [outraKey, escolhidos] of cruzFiltros) {
|
|
332
|
+
if (outraKey === key) continue;
|
|
333
|
+
const outraFn = resolverValor(outraKey);
|
|
334
|
+
if (!outraFn) continue;
|
|
335
|
+
fonte = fonte.filter((row) => escolhidos.has(rotuloDe(outraFn, row)));
|
|
336
|
+
}
|
|
337
|
+
for (const [outraKey, r] of cruzRanges) {
|
|
338
|
+
if (outraKey === key) continue;
|
|
339
|
+
const col = columns.find((c) => c.key === outraKey);
|
|
340
|
+
if (!col) continue;
|
|
341
|
+
fonte = fonte.filter((row) => {
|
|
342
|
+
const n = valorParaIntervalo(row, col);
|
|
343
|
+
if (!Number.isFinite(n)) return false;
|
|
344
|
+
if (r.min != null && n < r.min) return false;
|
|
345
|
+
if (r.max != null && n > r.max) return false;
|
|
346
|
+
return true;
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
const set = /* @__PURE__ */ new Set();
|
|
350
|
+
fonte.forEach((row) => set.add(rotuloDe(valueFn, row)));
|
|
351
|
+
return Array.from(set).sort(ordenarRotulos);
|
|
352
|
+
};
|
|
353
|
+
const openFilterOptions = useMemo(() => {
|
|
354
|
+
if (!openFilter) return [];
|
|
355
|
+
return distinctValues(openFilter);
|
|
356
|
+
}, [openFilter, data, allData, columns, cruzFiltros, cruzRanges]);
|
|
357
|
+
const openFilterOptionsLower = useMemo(() => openFilterOptions.map((v) => v.toLowerCase()), [openFilterOptions]);
|
|
358
|
+
const opcoesVisiveis = useMemo(() => {
|
|
359
|
+
const q = filterSearch.toLowerCase();
|
|
360
|
+
const corresponde = q ? modoExcel ? pesquisaCuringa(q) : (v) => v.includes(q) : null;
|
|
361
|
+
const opts = [];
|
|
362
|
+
const correspondentes = [];
|
|
363
|
+
for (let i = 0; i < openFilterOptions.length; i++) {
|
|
364
|
+
if (corresponde && !corresponde(openFilterOptionsLower[i])) continue;
|
|
365
|
+
correspondentes.push(openFilterOptions[i]);
|
|
366
|
+
if (opts.length < MAX_OPCOES_FILTRO) opts.push(openFilterOptions[i]);
|
|
367
|
+
}
|
|
368
|
+
return { opts, total: correspondentes.length, correspondentes };
|
|
369
|
+
}, [openFilterOptions, openFilterOptionsLower, filterSearch, modoExcel]);
|
|
370
|
+
const filtrar = (rows) => {
|
|
371
|
+
if (activeFilters.length === 0 && activeRanges.length === 0) return rows;
|
|
372
|
+
return rows.filter(
|
|
373
|
+
(row) => activeFilters.every(([key, sel]) => {
|
|
374
|
+
const fn = resolverValor(key);
|
|
375
|
+
return fn ? sel.has(rotuloDe(fn, row)) : true;
|
|
376
|
+
}) && activeRanges.every(([key, r]) => {
|
|
377
|
+
const col = columns.find((c) => c.key === key);
|
|
378
|
+
if (!col) return true;
|
|
379
|
+
const n = valorParaIntervalo(row, col);
|
|
380
|
+
if (!Number.isFinite(n)) return false;
|
|
381
|
+
if (r.min != null && n < r.min) return false;
|
|
382
|
+
if (r.max != null && n > r.max) return false;
|
|
383
|
+
return true;
|
|
384
|
+
})
|
|
385
|
+
);
|
|
386
|
+
};
|
|
387
|
+
const ordenar = (rows) => {
|
|
388
|
+
if (!sort) return rows;
|
|
389
|
+
const col = columns.find((c) => c.key === sort.key);
|
|
390
|
+
if (!col) return rows;
|
|
391
|
+
return [...rows].sort((a, b) => compare(rawValue(a, col), rawValue(b, col), col.sortType) * sort.dir);
|
|
392
|
+
};
|
|
393
|
+
const filtered = useMemo(
|
|
394
|
+
() => filtrar(effectiveData),
|
|
395
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
396
|
+
[effectiveData, activeFilters, activeRanges, columns]
|
|
397
|
+
);
|
|
398
|
+
const sorted = useMemo(
|
|
399
|
+
() => ordenar(filtered),
|
|
400
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
401
|
+
[filtered, sort, columns]
|
|
402
|
+
);
|
|
403
|
+
const alternarGrupo = (key) => {
|
|
404
|
+
if (!allData) onDataNeeded?.();
|
|
405
|
+
setGroupByKeys((prev) => prev.includes(key) ? prev.filter((k) => k !== key) : [...prev, key]);
|
|
406
|
+
setCollapsedGroups(/* @__PURE__ */ new Set());
|
|
407
|
+
};
|
|
408
|
+
const removerGrupo = (key) => {
|
|
409
|
+
setGroupByKeys((prev) => prev.filter((k) => k !== key));
|
|
410
|
+
setCollapsedGroups(/* @__PURE__ */ new Set());
|
|
411
|
+
};
|
|
412
|
+
const limparGrupos = () => {
|
|
413
|
+
setGroupByKeys([]);
|
|
414
|
+
setCollapsedGroups(/* @__PURE__ */ new Set());
|
|
415
|
+
};
|
|
416
|
+
const alternarColapso = (path) => setCollapsedGroups((prev) => {
|
|
417
|
+
const n = new Set(prev);
|
|
418
|
+
if (n.has(path)) n.delete(path);
|
|
419
|
+
else n.add(path);
|
|
420
|
+
return n;
|
|
421
|
+
});
|
|
422
|
+
const construirGrupos = (items, keys, nivel, pathPai) => {
|
|
423
|
+
if (nivel >= keys.length) return [];
|
|
424
|
+
const key = keys[nivel];
|
|
425
|
+
const col = columns.find((c) => c.key === key);
|
|
426
|
+
if (!col) return [];
|
|
427
|
+
const ordemFn = col.groupSortKey;
|
|
428
|
+
const mapa = /* @__PURE__ */ new Map();
|
|
429
|
+
items.forEach((item) => {
|
|
430
|
+
const rotulo = filterKey(item, col);
|
|
431
|
+
const ordem = ordemFn ? String(ordemFn(item) ?? "") : rotulo;
|
|
432
|
+
const atual = mapa.get(rotulo);
|
|
433
|
+
if (atual) atual.items.push(item);
|
|
434
|
+
else mapa.set(rotulo, { ordem, items: [item] });
|
|
435
|
+
});
|
|
436
|
+
return Array.from(mapa.entries()).sort(([ra, a], [rb, b]) => ordemFn ? COLLATOR.compare(a.ordem, b.ordem) : ordenarRotulos(ra, rb)).map(([val, { ordem, items: itensGrupo }]) => {
|
|
437
|
+
const path = pathPai ? `${pathPai}\0${val}` : val;
|
|
438
|
+
return { val, ordem, path, items: itensGrupo, filhos: construirGrupos(itensGrupo, keys, nivel + 1, path) };
|
|
439
|
+
});
|
|
440
|
+
};
|
|
441
|
+
const grupos = useMemo(
|
|
442
|
+
() => isGrouped ? construirGrupos(sorted, groupByKeys, 0, "") : [],
|
|
443
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
444
|
+
[sorted, groupByKeys, isGrouped, columns]
|
|
445
|
+
);
|
|
446
|
+
const [page, setPage] = useState(1);
|
|
447
|
+
const [pageSizeAtual, setPageSizeAtual] = useState(pageSize);
|
|
448
|
+
useEffect(() => setPageSizeAtual(pageSize), [pageSize]);
|
|
449
|
+
useEffect(() => {
|
|
450
|
+
setPage(1);
|
|
451
|
+
}, [columnFilters, rangeFilters, sort, groupByKeys, pageSizeAtual]);
|
|
452
|
+
const paginando = !!pageSizeAtual && !isGrouped;
|
|
453
|
+
const totalPages = paginando ? Math.max(1, Math.ceil(sorted.length / pageSizeAtual)) : 1;
|
|
454
|
+
const currentPage = Math.min(page, totalPages);
|
|
455
|
+
const pageData = paginando ? sorted.slice((currentPage - 1) * pageSizeAtual, currentPage * pageSizeAtual) : sorted;
|
|
456
|
+
const chaveDe = (row, i) => String(rowKey ? rowKey(row, i) : i);
|
|
457
|
+
const indicePorLinha = useMemo(() => {
|
|
458
|
+
const m = /* @__PURE__ */ new Map();
|
|
459
|
+
sorted.forEach((r, i) => m.set(r, i));
|
|
460
|
+
return m;
|
|
461
|
+
}, [sorted]);
|
|
462
|
+
const visibleKeys = useMemo(
|
|
463
|
+
() => pageData.map((row, i) => chaveDe(row, i)),
|
|
464
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
465
|
+
[pageData, rowKey]
|
|
466
|
+
);
|
|
467
|
+
const alternarLinha = (key) => setSelectedKeys((prev) => {
|
|
468
|
+
const next = new Set(prev);
|
|
469
|
+
if (next.has(key)) next.delete(key);
|
|
470
|
+
else next.add(key);
|
|
471
|
+
onSelectionChange?.(next);
|
|
472
|
+
return next;
|
|
473
|
+
});
|
|
474
|
+
const alternarTodas = () => setSelectedKeys((prev) => {
|
|
475
|
+
const todasMarcadas = visibleKeys.length > 0 && visibleKeys.every((k) => prev.has(k));
|
|
476
|
+
const next = new Set(prev);
|
|
477
|
+
if (todasMarcadas) visibleKeys.forEach((k) => next.delete(k));
|
|
478
|
+
else visibleKeys.forEach((k) => next.add(k));
|
|
479
|
+
onSelectionChange?.(next);
|
|
480
|
+
return next;
|
|
481
|
+
});
|
|
482
|
+
const todasVisiveisMarcadas = visibleKeys.length > 0 && visibleKeys.every((k) => selectedKeys.has(k));
|
|
483
|
+
const algumaVisivelMarcada = visibleKeys.some((k) => selectedKeys.has(k)) && !todasVisiveisMarcadas;
|
|
484
|
+
useEffect(() => {
|
|
485
|
+
if (!viewRef) return;
|
|
486
|
+
viewRef.current = {
|
|
487
|
+
apply: (rows) => ordenar(filtrar(rows)),
|
|
488
|
+
rows: sorted,
|
|
489
|
+
hasFilters: hasActiveFilters,
|
|
490
|
+
precisaDataset: hasActiveFilters || !!sort || isGrouped,
|
|
491
|
+
estado: () => ({
|
|
492
|
+
columnFilters: Object.fromEntries(activeFilters.map(([k, v]) => [k, [...v]])),
|
|
493
|
+
rangeFilters: Object.fromEntries(activeRanges),
|
|
494
|
+
sortKey: sort?.key ?? null,
|
|
495
|
+
sortDir: sort ? sort.dir === 1 ? "asc" : "desc" : "asc",
|
|
496
|
+
groupBy: groupByKeys
|
|
497
|
+
}),
|
|
498
|
+
repor: (e) => {
|
|
499
|
+
setColumnFilters(Object.fromEntries(Object.entries(e?.columnFilters ?? {}).map(([k, v]) => [k, new Set(v)])));
|
|
500
|
+
setRangeFilters(e?.rangeFilters ?? {});
|
|
501
|
+
setSort(e?.sortKey ? { key: e.sortKey, dir: e.sortDir === "desc" ? -1 : 1 } : null);
|
|
502
|
+
setGroupByKeys(e?.groupBy ?? []);
|
|
503
|
+
setCollapsedGroups(/* @__PURE__ */ new Set());
|
|
504
|
+
const precisaTudo = !!e?.sortKey || !!e?.groupBy?.length || Object.keys(e?.columnFilters ?? {}).length > 0 || Object.keys(e?.rangeFilters ?? {}).length > 0;
|
|
505
|
+
if (precisaTudo && !allData) onDataNeeded?.();
|
|
506
|
+
}
|
|
507
|
+
};
|
|
508
|
+
});
|
|
509
|
+
const toggleSort = (key) => {
|
|
510
|
+
if (!allData) onDataNeeded?.();
|
|
511
|
+
setSort((s) => s?.key === key ? s.dir === 1 ? { key, dir: -1 } : null : { key, dir: 1 });
|
|
512
|
+
};
|
|
513
|
+
const selecaoDaColuna = (key) => new Set(columnFilters[key] ?? (modoExcel ? openFilterOptions : []));
|
|
514
|
+
const aplicarSelecao = (key, sel) => setColumnFilters((prev) => {
|
|
515
|
+
const proximo = { ...prev };
|
|
516
|
+
if (modoExcel && sel.size === openFilterOptions.length) delete proximo[key];
|
|
517
|
+
else proximo[key] = sel;
|
|
518
|
+
return proximo;
|
|
519
|
+
});
|
|
520
|
+
const toggleFilterValue = (key, val) => {
|
|
521
|
+
if (!allData) onDataNeeded?.();
|
|
522
|
+
const sel = selecaoDaColuna(key);
|
|
523
|
+
if (sel.has(val)) sel.delete(val);
|
|
524
|
+
else sel.add(val);
|
|
525
|
+
aplicarSelecao(key, sel);
|
|
526
|
+
};
|
|
527
|
+
const alternarTodos = (key, marcar) => {
|
|
528
|
+
if (!allData) onDataNeeded?.();
|
|
529
|
+
const sel = selecaoDaColuna(key);
|
|
530
|
+
for (const v of opcoesVisiveis.correspondentes) {
|
|
531
|
+
if (marcar) sel.add(v);
|
|
532
|
+
else sel.delete(v);
|
|
533
|
+
}
|
|
534
|
+
aplicarSelecao(key, sel);
|
|
535
|
+
};
|
|
536
|
+
const setRange = (key, campo, valor, tipo) => {
|
|
537
|
+
if (!allData) onDataNeeded?.();
|
|
538
|
+
setRangeFilters((prev) => {
|
|
539
|
+
const atual = { ...prev[key] ?? {} };
|
|
540
|
+
const n = tipo === "date" ? timestampDeData(valor) + (campo === "max" ? 86399999 : 0) : Number(valor);
|
|
541
|
+
if (valor === "" || !Number.isFinite(n)) delete atual[campo];
|
|
542
|
+
else atual[campo] = n;
|
|
543
|
+
const next = { ...prev };
|
|
544
|
+
if (atual.min == null && atual.max == null) delete next[key];
|
|
545
|
+
else next[key] = atual;
|
|
546
|
+
return next;
|
|
547
|
+
});
|
|
548
|
+
};
|
|
549
|
+
const clearColumnFilter = (key) => {
|
|
550
|
+
setColumnFilters((prev) => {
|
|
551
|
+
const n = { ...prev };
|
|
552
|
+
delete n[key];
|
|
553
|
+
return n;
|
|
554
|
+
});
|
|
555
|
+
setRangeFilters((prev) => {
|
|
556
|
+
const n = { ...prev };
|
|
557
|
+
delete n[key];
|
|
558
|
+
return n;
|
|
559
|
+
});
|
|
560
|
+
};
|
|
561
|
+
const clearAllFilters = () => {
|
|
562
|
+
setColumnFilters({});
|
|
563
|
+
setRangeFilters({});
|
|
564
|
+
};
|
|
565
|
+
const temIntervalo = (key) => {
|
|
566
|
+
const r = rangeFilters[key];
|
|
567
|
+
return !!r && (r.min != null || r.max != null);
|
|
568
|
+
};
|
|
569
|
+
const temFiltro = (key) => (modoExcel ? columnFilters[key] !== void 0 : (columnFilters[key]?.size ?? 0) > 0) || temIntervalo(key);
|
|
570
|
+
const handleExport = () => {
|
|
571
|
+
if (onExport) return onExport(sorted);
|
|
572
|
+
const csv = toCsv(columns, sorted);
|
|
573
|
+
const blob = new Blob([`\uFEFF${csv}`], { type: "text/csv;charset=utf-8;" });
|
|
574
|
+
const url = URL.createObjectURL(blob);
|
|
575
|
+
const a = document.createElement("a");
|
|
576
|
+
a.href = url;
|
|
577
|
+
a.download = `${exportFileName}.csv`;
|
|
578
|
+
a.click();
|
|
579
|
+
URL.revokeObjectURL(url);
|
|
580
|
+
};
|
|
581
|
+
const alignClass = (a) => a === "right" ? "text-right" : a === "center" ? "text-center" : "text-left";
|
|
582
|
+
const ePresaAEsquerda = (c) => c.sticky === true || c.sticky === "left";
|
|
583
|
+
const stickyLeft = useMemo(() => {
|
|
584
|
+
const offsets = {};
|
|
585
|
+
let acc = selectable ? 40 : 0;
|
|
586
|
+
for (const c of columns) {
|
|
587
|
+
if (!ePresaAEsquerda(c)) continue;
|
|
588
|
+
offsets[c.key] = acc;
|
|
589
|
+
acc += c.width ?? DEFAULT_STICKY_WIDTH;
|
|
590
|
+
}
|
|
591
|
+
return offsets;
|
|
592
|
+
}, [columns, selectable]);
|
|
593
|
+
const stickyRight = useMemo(() => {
|
|
594
|
+
const offsets = {};
|
|
595
|
+
let acc = 0;
|
|
596
|
+
for (let i = columns.length - 1; i >= 0; i--) {
|
|
597
|
+
const c = columns[i];
|
|
598
|
+
if (c.sticky !== "right") continue;
|
|
599
|
+
offsets[c.key] = acc;
|
|
600
|
+
acc += c.width ?? DEFAULT_STICKY_WIDTH;
|
|
601
|
+
}
|
|
602
|
+
return offsets;
|
|
603
|
+
}, [columns]);
|
|
604
|
+
const estiloPreso = (c) => {
|
|
605
|
+
if (ePresaAEsquerda(c)) return { left: stickyLeft[c.key] };
|
|
606
|
+
if (c.sticky === "right") return { right: stickyRight[c.key] };
|
|
607
|
+
return void 0;
|
|
608
|
+
};
|
|
609
|
+
const nColunas = columns.length + (selectable ? 1 : 0);
|
|
610
|
+
const aEsperarDataset = !allData && !!isAllDataLoading && (hasActiveFilters || !!sort || isGrouped);
|
|
611
|
+
const linhasBase = allData ?? data;
|
|
612
|
+
const semDados = useMemo(
|
|
613
|
+
() => new Set(columns.filter((c) => !linhasBase.some((r) => rawValue(r, c) !== null)).map((c) => c.key)),
|
|
614
|
+
[columns, linhasBase]
|
|
615
|
+
);
|
|
616
|
+
const filtravel = (c) => c.filterable ?? !semDados.has(c.key);
|
|
617
|
+
const agrupavel = (c) => c.groupable ?? (!semDados.has(c.key) && !c.groupAggregate && (!c.sortType || c.sortType === "text"));
|
|
618
|
+
if (isLoading) {
|
|
619
|
+
return /* @__PURE__ */ jsx("div", { className: "py-16 text-center text-sm font-bold uppercase tracking-widest text-slate-400", children: L.loading });
|
|
620
|
+
}
|
|
621
|
+
if (isError) {
|
|
622
|
+
return /* @__PURE__ */ jsx("div", { className: "py-16 text-center text-sm font-bold uppercase tracking-widest text-red-400", children: L.error });
|
|
623
|
+
}
|
|
624
|
+
const renderPopup = (key, col, tituloExtra) => {
|
|
625
|
+
const { opts, total: totalOpcoes } = opcoesVisiveis;
|
|
626
|
+
const sel = columnFilters[key];
|
|
627
|
+
const isFiltered = temFiltro(key);
|
|
628
|
+
const podeOrdenar = !!sortFromFilter && !!col && col.sortable !== false;
|
|
629
|
+
const temRange = !!col && (col.sortType === "number" || col.sortType === "date");
|
|
630
|
+
return createPortal(
|
|
631
|
+
/* @__PURE__ */ jsxs(
|
|
632
|
+
"div",
|
|
633
|
+
{
|
|
634
|
+
ref: popupRef,
|
|
635
|
+
style: { position: "fixed", top: popupPos.top, left: popupPos.left },
|
|
636
|
+
className: "z-[100] w-72 max-w-[80vw] bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-700 shadow-2xl rounded-xl overflow-hidden",
|
|
637
|
+
children: [
|
|
638
|
+
tituloExtra && /* @__PURE__ */ jsx("div", { className: "px-3 pt-2.5 pb-2 border-b border-slate-100 dark:border-slate-800", children: /* @__PURE__ */ jsx("span", { className: "text-[9px] font-black uppercase tracking-widest text-proef-blue dark:text-proef-turquoise", children: tituloExtra }) }),
|
|
639
|
+
!allData && isAllDataLoading && // As opções à vista ainda são só as de `data`. Dizê-lo é melhor do que deixar
|
|
640
|
+
// escolher de uma lista incompleta.
|
|
641
|
+
/* @__PURE__ */ jsx("div", { className: "px-2 py-1.5 bg-amber-50 dark:bg-amber-500/10 border-b border-amber-100 dark:border-amber-500/20 text-[10px] text-amber-700 dark:text-amber-300", children: L.loadingOptions }),
|
|
642
|
+
podeOrdenar && /* @__PURE__ */ jsxs("div", { className: "border-b border-slate-100 dark:border-slate-800 p-1.5 space-y-0.5", children: [
|
|
643
|
+
/* @__PURE__ */ jsxs(
|
|
644
|
+
"button",
|
|
645
|
+
{
|
|
646
|
+
onClick: () => {
|
|
647
|
+
if (!allData) onDataNeeded?.();
|
|
648
|
+
setSort({ key, dir: 1 });
|
|
649
|
+
},
|
|
650
|
+
className: `appearance-none bg-transparent border-0 cursor-pointer w-full flex items-center gap-2 px-2.5 py-1.5 text-[11px] font-semibold text-left hover:bg-slate-50 dark:hover:bg-slate-800 ${sort?.key === key && sort.dir === 1 ? "text-proef-blue dark:text-proef-turquoise bg-slate-50 dark:bg-slate-800" : "text-slate-600 dark:text-slate-300"}`,
|
|
651
|
+
children: [
|
|
652
|
+
"▲ ",
|
|
653
|
+
L.sortAsc
|
|
654
|
+
]
|
|
655
|
+
}
|
|
656
|
+
),
|
|
657
|
+
/* @__PURE__ */ jsxs(
|
|
658
|
+
"button",
|
|
659
|
+
{
|
|
660
|
+
onClick: () => {
|
|
661
|
+
if (!allData) onDataNeeded?.();
|
|
662
|
+
setSort({ key, dir: -1 });
|
|
663
|
+
},
|
|
664
|
+
className: `appearance-none bg-transparent border-0 cursor-pointer w-full flex items-center gap-2 px-2.5 py-1.5 text-[11px] font-semibold text-left hover:bg-slate-50 dark:hover:bg-slate-800 ${sort?.key === key && sort.dir === -1 ? "text-proef-blue dark:text-proef-turquoise bg-slate-50 dark:bg-slate-800" : "text-slate-600 dark:text-slate-300"}`,
|
|
665
|
+
children: [
|
|
666
|
+
"▼ ",
|
|
667
|
+
L.sortDesc
|
|
668
|
+
]
|
|
669
|
+
}
|
|
670
|
+
)
|
|
671
|
+
] }),
|
|
672
|
+
/* @__PURE__ */ jsxs("div", { className: "p-2", children: [
|
|
673
|
+
temRange && // Intervalo antes da lista: numa coluna numérica ou de datas é o que se procura
|
|
674
|
+
// ("acima de 30 dias", "a partir de julho"), não um valor exato numa lista de dezenas.
|
|
675
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5 mb-2", children: [
|
|
676
|
+
/* @__PURE__ */ jsx(
|
|
677
|
+
"input",
|
|
678
|
+
{
|
|
679
|
+
type: col.sortType === "date" ? "date" : "number",
|
|
680
|
+
defaultValue: "",
|
|
681
|
+
onChange: (e) => setRange(key, "min", e.target.value, col.sortType),
|
|
682
|
+
placeholder: L.min,
|
|
683
|
+
title: L.min,
|
|
684
|
+
className: "w-1/2 bg-slate-50 dark:bg-slate-800 dark:text-slate-100 dark:[color-scheme:dark] border border-slate-200 dark:border-slate-700 rounded-lg px-2 py-1.5 text-xs outline-none focus:border-proef-blue dark:focus:border-proef-turquoise"
|
|
685
|
+
}
|
|
686
|
+
),
|
|
687
|
+
/* @__PURE__ */ jsx(
|
|
688
|
+
"input",
|
|
689
|
+
{
|
|
690
|
+
type: col.sortType === "date" ? "date" : "number",
|
|
691
|
+
defaultValue: "",
|
|
692
|
+
onChange: (e) => setRange(key, "max", e.target.value, col.sortType),
|
|
693
|
+
placeholder: L.max,
|
|
694
|
+
title: L.max,
|
|
695
|
+
className: "w-1/2 bg-slate-50 dark:bg-slate-800 dark:text-slate-100 dark:[color-scheme:dark] border border-slate-200 dark:border-slate-700 rounded-lg px-2 py-1.5 text-xs outline-none focus:border-proef-blue dark:focus:border-proef-turquoise"
|
|
696
|
+
}
|
|
697
|
+
)
|
|
698
|
+
] }),
|
|
699
|
+
/* @__PURE__ */ jsx(
|
|
700
|
+
"input",
|
|
701
|
+
{
|
|
702
|
+
autoFocus: true,
|
|
703
|
+
value: filterSearch,
|
|
704
|
+
onChange: (e) => setFilterSearch(e.target.value),
|
|
705
|
+
placeholder: L.search,
|
|
706
|
+
className: "w-full bg-slate-50 dark:bg-slate-800 dark:text-slate-100 border border-slate-200 dark:border-slate-700 rounded-lg px-2 py-1.5 text-xs outline-none focus:border-proef-blue dark:focus:border-proef-turquoise mb-2"
|
|
707
|
+
}
|
|
708
|
+
),
|
|
709
|
+
/* @__PURE__ */ jsxs("div", { className: "max-h-64 overflow-y-auto overflow-x-hidden space-y-0.5", children: [
|
|
710
|
+
modoExcel && opts.length > 0 && (() => {
|
|
711
|
+
const marcados = opcoesVisiveis.correspondentes.filter((v) => sel ? sel.has(v) : true).length;
|
|
712
|
+
const todos = marcados === opcoesVisiveis.correspondentes.length;
|
|
713
|
+
const alguns = marcados > 0 && !todos;
|
|
714
|
+
return /* @__PURE__ */ jsxs(
|
|
715
|
+
"button",
|
|
716
|
+
{
|
|
717
|
+
onClick: () => alternarTodos(key, !todos),
|
|
718
|
+
className: "appearance-none bg-transparent border-0 border-b border-slate-100 dark:border-slate-800 cursor-pointer w-full flex items-center gap-2 px-1.5 py-1 mb-0.5 hover:bg-slate-50 dark:hover:bg-slate-800 text-left normal-case tracking-normal",
|
|
719
|
+
children: [
|
|
720
|
+
/* @__PURE__ */ jsxs(
|
|
721
|
+
"span",
|
|
722
|
+
{
|
|
723
|
+
className: `w-3.5 h-3.5 flex items-center justify-center border shrink-0 rounded ${todos || alguns ? "bg-proef-navy dark:bg-proef-turquoise border-proef-navy dark:border-proef-turquoise text-white dark:text-proef-navy" : "border-slate-300 dark:border-slate-600"}`,
|
|
724
|
+
children: [
|
|
725
|
+
todos && /* @__PURE__ */ jsx("span", { className: "text-[9px] leading-none", children: "✓" }),
|
|
726
|
+
alguns && /* @__PURE__ */ jsx("span", { className: "text-[9px] leading-none", children: "–" })
|
|
727
|
+
]
|
|
728
|
+
}
|
|
729
|
+
),
|
|
730
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs text-slate-700 dark:text-slate-200 font-semibold break-words", children: filterSearch ? L.selectAllResults : L.selectAll })
|
|
731
|
+
]
|
|
732
|
+
}
|
|
733
|
+
);
|
|
734
|
+
})(),
|
|
735
|
+
opts.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-[11px] text-slate-400 text-center py-3", children: L.noOptions }) : opts.map((v) => {
|
|
736
|
+
const checked = sel ? sel.has(v) : modoExcel;
|
|
737
|
+
return /* @__PURE__ */ jsxs(
|
|
738
|
+
"button",
|
|
739
|
+
{
|
|
740
|
+
onClick: () => toggleFilterValue(key, v),
|
|
741
|
+
className: "appearance-none bg-transparent border-0 cursor-pointer w-full flex items-center gap-2 px-1.5 py-1 hover:bg-slate-50 dark:hover:bg-slate-800 text-left normal-case tracking-normal",
|
|
742
|
+
children: [
|
|
743
|
+
/* @__PURE__ */ jsx(
|
|
744
|
+
"span",
|
|
745
|
+
{
|
|
746
|
+
className: `w-3.5 h-3.5 flex items-center justify-center border shrink-0 rounded ${checked ? "bg-proef-navy dark:bg-proef-turquoise border-proef-navy dark:border-proef-turquoise text-white dark:text-proef-navy" : "border-slate-300 dark:border-slate-600"}`,
|
|
747
|
+
children: checked && /* @__PURE__ */ jsx("span", { className: "text-[9px] leading-none", children: "✓" })
|
|
748
|
+
}
|
|
749
|
+
),
|
|
750
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs text-slate-700 dark:text-slate-200 font-normal break-words", children: v })
|
|
751
|
+
]
|
|
752
|
+
},
|
|
753
|
+
v
|
|
754
|
+
);
|
|
755
|
+
})
|
|
756
|
+
] }),
|
|
757
|
+
totalOpcoes > opts.length && /* @__PURE__ */ jsx("p", { className: "text-[10.5px] text-slate-400 text-center pt-2", children: L.moreOptions.replace("{shown}", String(opts.length)).replace("{total}", String(totalOpcoes)) }),
|
|
758
|
+
isFiltered && /* @__PURE__ */ jsx(
|
|
759
|
+
"button",
|
|
760
|
+
{
|
|
761
|
+
onClick: () => clearColumnFilter(key),
|
|
762
|
+
className: "appearance-none bg-transparent border-0 border-t border-slate-100 dark:border-slate-800 cursor-pointer w-full mt-2 pt-2 text-[10px] font-black uppercase tracking-wider text-red-400 hover:text-red-500",
|
|
763
|
+
children: L.clear
|
|
764
|
+
}
|
|
765
|
+
)
|
|
766
|
+
] })
|
|
767
|
+
]
|
|
768
|
+
}
|
|
769
|
+
),
|
|
770
|
+
document.body
|
|
771
|
+
);
|
|
772
|
+
};
|
|
773
|
+
const botaoFunil = (key, col, extra) => {
|
|
774
|
+
const isOpen = openFilter === key;
|
|
775
|
+
const isFiltered = temFiltro(key);
|
|
776
|
+
return /* @__PURE__ */ jsxs(
|
|
777
|
+
"div",
|
|
778
|
+
{
|
|
779
|
+
className: "relative",
|
|
780
|
+
ref: (el) => {
|
|
781
|
+
if (el) filterRefs.current.set(key, el);
|
|
782
|
+
else filterRefs.current.delete(key);
|
|
783
|
+
},
|
|
784
|
+
children: [
|
|
785
|
+
/* @__PURE__ */ jsx(
|
|
786
|
+
"button",
|
|
787
|
+
{
|
|
788
|
+
onClick: () => {
|
|
789
|
+
if (!isOpen && !allData) onDataNeeded?.();
|
|
790
|
+
setOpenFilter(isOpen ? null : key);
|
|
791
|
+
setFilterSearch("");
|
|
792
|
+
},
|
|
793
|
+
className: `appearance-none border-0 bg-transparent cursor-pointer p-0.5 transition-colors ${extra ? isFiltered || isOpen ? "text-violet-600 dark:text-violet-300" : "text-slate-300 dark:text-slate-600 hover:text-slate-500 dark:hover:text-slate-300" : isFiltered || isOpen ? "text-proef-turquoise" : "text-slate-300 dark:text-slate-600 hover:text-slate-500 dark:hover:text-slate-300"}`,
|
|
794
|
+
title: extra?.label ?? col?.label,
|
|
795
|
+
children: /* @__PURE__ */ jsx(Funnel, { size: extra ? 10 : 11, className: isFiltered ? "fill-current" : "" })
|
|
796
|
+
}
|
|
797
|
+
),
|
|
798
|
+
isOpen && popupPos && renderPopup(key, col, extra?.label)
|
|
799
|
+
]
|
|
800
|
+
},
|
|
801
|
+
key
|
|
802
|
+
);
|
|
803
|
+
};
|
|
804
|
+
const renderLinha = (row, i) => {
|
|
805
|
+
const k = chaveDe(row, i);
|
|
806
|
+
const marcada = selectable && selectedKeys.has(k);
|
|
807
|
+
return /* @__PURE__ */ jsxs(
|
|
808
|
+
"tr",
|
|
809
|
+
{
|
|
810
|
+
onClick: () => onRowClick?.(row),
|
|
811
|
+
onDoubleClick: () => onRowDoubleClick?.(row),
|
|
812
|
+
className: `group even:bg-slate-50/50 dark:even:bg-slate-800/40 hover:bg-slate-100/70 dark:hover:bg-slate-800/70 transition-colors ${onRowClick || onRowDoubleClick ? "cursor-pointer" : ""} ${marcada ? "bg-proef-turquoise/5" : ""} ${rowClassName?.(row) ?? ""}`,
|
|
813
|
+
children: [
|
|
814
|
+
selectable && /* @__PURE__ */ jsx(
|
|
815
|
+
"td",
|
|
816
|
+
{
|
|
817
|
+
className: "px-3 py-2.5 border-b border-slate-100 dark:border-slate-800 w-10",
|
|
818
|
+
onClick: (e) => {
|
|
819
|
+
e.stopPropagation();
|
|
820
|
+
alternarLinha(k);
|
|
821
|
+
},
|
|
822
|
+
children: /* @__PURE__ */ jsx(
|
|
823
|
+
"span",
|
|
824
|
+
{
|
|
825
|
+
className: `w-4 h-4 flex items-center justify-center border transition-colors rounded ${marcada ? "bg-proef-navy dark:bg-proef-turquoise border-proef-navy dark:border-proef-turquoise text-white dark:text-proef-navy" : "border-slate-300 dark:border-slate-600 hover:border-slate-400 dark:hover:border-slate-500"}`,
|
|
826
|
+
children: marcada && /* @__PURE__ */ jsx("span", { className: "text-[9px] leading-none", children: "✓" })
|
|
827
|
+
}
|
|
828
|
+
)
|
|
829
|
+
}
|
|
830
|
+
),
|
|
831
|
+
columns.map((c) => /* @__PURE__ */ jsx(
|
|
832
|
+
"td",
|
|
833
|
+
{
|
|
834
|
+
style: estiloPreso(c),
|
|
835
|
+
className: `px-3 py-2.5 border-b border-slate-100 dark:border-slate-800 whitespace-nowrap ${alignClass(c.align)} ${c.sticky ? `sticky z-[1] ${c.sticky === "right" ? "border-l border-slate-200 dark:border-slate-700" : ""} ${i % 2 === 1 ? "bg-slate-50 dark:bg-slate-800" : "bg-white dark:bg-slate-900"} group-hover:bg-slate-100 dark:group-hover:bg-slate-800` : ""} ${c.cellClassName ?? ""}`,
|
|
836
|
+
children: (() => {
|
|
837
|
+
const conteudo = c.render ? c.render(row) : rawValue(row, c) ?? /* @__PURE__ */ jsx("span", { className: "text-slate-400", children: EMPTY });
|
|
838
|
+
const max = larguraMax(c);
|
|
839
|
+
if (!max) return conteudo;
|
|
840
|
+
const v = rawValue(row, c);
|
|
841
|
+
return /* @__PURE__ */ jsx("div", { className: "overflow-hidden text-ellipsis", style: { maxWidth: max, width: larguras[c.key] }, title: v !== null && v !== void 0 ? String(v) : void 0, children: conteudo });
|
|
842
|
+
})()
|
|
843
|
+
},
|
|
844
|
+
c.key
|
|
845
|
+
))
|
|
846
|
+
]
|
|
847
|
+
},
|
|
848
|
+
k
|
|
849
|
+
);
|
|
850
|
+
};
|
|
851
|
+
const primeiraComValor = columns.findIndex((c) => !!c.groupAggregate);
|
|
852
|
+
const colunasComValor = primeiraComValor >= 0 ? columns.slice(primeiraComValor) : [];
|
|
853
|
+
const colunasRotuloGrupo = primeiraComValor >= 0 ? primeiraComValor + (selectable ? 1 : 0) : nColunas;
|
|
854
|
+
const renderGrupos = (nos, nivel) => nos.map((no) => {
|
|
855
|
+
const recolhido = collapsedGroups.has(no.path);
|
|
856
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
857
|
+
/* @__PURE__ */ jsxs("tr", { className: "bg-slate-50/80 dark:bg-slate-800/60 cursor-pointer select-none", onClick: () => alternarColapso(no.path), children: [
|
|
858
|
+
/* @__PURE__ */ jsx("td", { colSpan: colunasRotuloGrupo, className: "px-3 py-1.5 border-b border-t border-slate-100 dark:border-slate-800", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", style: { paddingLeft: nivel * 16 }, children: [
|
|
859
|
+
/* @__PURE__ */ jsx(
|
|
860
|
+
Caret,
|
|
861
|
+
{
|
|
862
|
+
size: 11,
|
|
863
|
+
className: `text-proef-blue/60 dark:text-proef-turquoise/70 transition-transform shrink-0 ${recolhido ? "" : "rotate-90"}`
|
|
864
|
+
}
|
|
865
|
+
),
|
|
866
|
+
/* @__PURE__ */ jsx("span", { className: "text-[10px] font-black uppercase tracking-[0.15em] text-proef-blue/70 dark:text-proef-turquoise/80", children: no.val }),
|
|
867
|
+
/* @__PURE__ */ jsxs("span", { className: "text-[10px] text-slate-400 ml-1", children: [
|
|
868
|
+
"(",
|
|
869
|
+
no.items.length,
|
|
870
|
+
")"
|
|
871
|
+
] })
|
|
872
|
+
] }) }),
|
|
873
|
+
colunasComValor.map((c) => /* @__PURE__ */ jsx("td", { className: `px-3 py-1.5 border-b border-t border-slate-100 dark:border-slate-800 whitespace-nowrap text-xs font-bold text-slate-700 dark:text-slate-200 ${alignClass(c.align)}`, children: c.groupAggregate?.(no.items) }, c.key))
|
|
874
|
+
] }),
|
|
875
|
+
!recolhido && (no.filhos.length > 0 ? renderGrupos(no.filhos, nivel + 1) : no.items.map((row) => renderLinha(row, indicePorLinha.get(row) ?? 0)))
|
|
876
|
+
] }, no.path);
|
|
877
|
+
});
|
|
878
|
+
return /* @__PURE__ */ jsxs("div", { children: [
|
|
879
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 mb-2.5", children: [
|
|
880
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs text-slate-500 dark:text-slate-400", children: L.results.replace("{count}", String(sorted.length)) }),
|
|
881
|
+
/* @__PURE__ */ jsxs("div", { className: "ml-auto flex items-center gap-2", children: [
|
|
882
|
+
extraToolbar,
|
|
883
|
+
exportFileName && sorted.length > 0 && /* @__PURE__ */ jsxs(
|
|
884
|
+
"button",
|
|
885
|
+
{
|
|
886
|
+
onClick: handleExport,
|
|
887
|
+
className: "appearance-none cursor-pointer inline-flex items-center gap-1.5 h-8 px-3.5 rounded-lg border border-proef-navy dark:border-proef-turquoise bg-proef-navy dark:bg-proef-turquoise text-white dark:text-proef-navy hover:bg-proef-blue dark:hover:bg-proef-turquoise/80 text-[11px] font-black uppercase tracking-widest transition-colors",
|
|
888
|
+
children: [
|
|
889
|
+
"⭳ ",
|
|
890
|
+
L.export
|
|
891
|
+
]
|
|
892
|
+
}
|
|
893
|
+
)
|
|
894
|
+
] })
|
|
895
|
+
] }),
|
|
896
|
+
isGrouped && /* @__PURE__ */ jsxs("div", { className: "mb-2 flex items-center gap-2 flex-wrap", children: [
|
|
897
|
+
groupByKeys.map((key) => {
|
|
898
|
+
const col = columns.find((c) => c.key === key);
|
|
899
|
+
return /* @__PURE__ */ jsxs(
|
|
900
|
+
"div",
|
|
901
|
+
{
|
|
902
|
+
className: "flex items-center gap-1.5 bg-violet-100 dark:bg-violet-500/20 text-violet-800 dark:text-violet-200 px-2.5 py-1 text-[10px] font-black uppercase tracking-wider",
|
|
903
|
+
children: [
|
|
904
|
+
/* @__PURE__ */ jsx(Layers, { size: 9 }),
|
|
905
|
+
/* @__PURE__ */ jsx("span", { children: col?.label ?? key }),
|
|
906
|
+
/* @__PURE__ */ jsx(
|
|
907
|
+
"button",
|
|
908
|
+
{
|
|
909
|
+
onClick: () => removerGrupo(key),
|
|
910
|
+
className: "appearance-none bg-transparent border-0 cursor-pointer ml-0.5 hover:text-violet-600",
|
|
911
|
+
children: "✕"
|
|
912
|
+
}
|
|
913
|
+
)
|
|
914
|
+
]
|
|
915
|
+
},
|
|
916
|
+
key
|
|
917
|
+
);
|
|
918
|
+
}),
|
|
919
|
+
/* @__PURE__ */ jsx(
|
|
920
|
+
"button",
|
|
921
|
+
{
|
|
922
|
+
onClick: limparGrupos,
|
|
923
|
+
className: "appearance-none bg-transparent border-0 cursor-pointer text-[10px] font-black uppercase tracking-wider text-slate-400 hover:text-red-500 transition-colors",
|
|
924
|
+
children: L.clearGroups
|
|
925
|
+
}
|
|
926
|
+
)
|
|
927
|
+
] }),
|
|
928
|
+
(activeFilters.length > 0 || activeRanges.length > 0) && /* @__PURE__ */ jsxs("div", { className: "mb-2 flex items-center gap-2 flex-wrap", children: [
|
|
929
|
+
activeRanges.map(([key, r]) => {
|
|
930
|
+
const col = columns.find((c) => c.key === key);
|
|
931
|
+
const fmt = (v) => v == null ? "" : col?.sortType === "date" ? new Date(v).toLocaleDateString() : String(v);
|
|
932
|
+
const txt = r.min != null && r.max != null ? `${fmt(r.min)} – ${fmt(r.max)}` : r.min != null ? `≥ ${fmt(r.min)}` : `≤ ${fmt(r.max)}`;
|
|
933
|
+
return /* @__PURE__ */ jsxs(
|
|
934
|
+
"div",
|
|
935
|
+
{
|
|
936
|
+
className: "flex items-center gap-1.5 bg-proef-turquoise/15 text-proef-navy dark:text-proef-turquoise px-2.5 py-1 text-[10px] font-black uppercase tracking-wider",
|
|
937
|
+
children: [
|
|
938
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
|
939
|
+
col?.label ?? key,
|
|
940
|
+
": ",
|
|
941
|
+
txt
|
|
942
|
+
] }),
|
|
943
|
+
/* @__PURE__ */ jsx(
|
|
944
|
+
"button",
|
|
945
|
+
{
|
|
946
|
+
onClick: () => clearColumnFilter(key),
|
|
947
|
+
className: "appearance-none bg-transparent border-0 cursor-pointer ml-0.5 hover:text-proef-blue dark:hover:text-proef-turquoise",
|
|
948
|
+
children: "✕"
|
|
949
|
+
}
|
|
950
|
+
)
|
|
951
|
+
]
|
|
952
|
+
},
|
|
953
|
+
`r-${key}`
|
|
954
|
+
);
|
|
955
|
+
}),
|
|
956
|
+
activeFilters.flatMap(([key, sel]) => {
|
|
957
|
+
const col = columns.find((c) => c.key === key);
|
|
958
|
+
const extra = !col ? columns.flatMap((c) => c.extraFilters ?? []).find((f) => f.key === key) : void 0;
|
|
959
|
+
const chipLabel = col?.label ?? extra?.label ?? key;
|
|
960
|
+
const arr = Array.from(sel);
|
|
961
|
+
if (col?.valueChipColors) {
|
|
962
|
+
const cores = col.valueChipColors;
|
|
963
|
+
return arr.map((v) => /* @__PURE__ */ jsxs(
|
|
964
|
+
"div",
|
|
965
|
+
{
|
|
966
|
+
className: `flex items-center gap-1.5 px-2.5 py-1 text-[10px] font-black uppercase tracking-wider ${cores[v] ?? "bg-proef-turquoise/15 text-proef-navy dark:text-proef-turquoise"}`,
|
|
967
|
+
children: [
|
|
968
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
|
969
|
+
chipLabel,
|
|
970
|
+
": ",
|
|
971
|
+
v
|
|
972
|
+
] }),
|
|
973
|
+
/* @__PURE__ */ jsx(
|
|
974
|
+
"button",
|
|
975
|
+
{
|
|
976
|
+
onClick: () => toggleFilterValue(key, v),
|
|
977
|
+
className: "appearance-none bg-transparent border-0 cursor-pointer ml-0.5 hover:opacity-70",
|
|
978
|
+
children: "✕"
|
|
979
|
+
}
|
|
980
|
+
)
|
|
981
|
+
]
|
|
982
|
+
},
|
|
983
|
+
`${key}:${v}`
|
|
984
|
+
));
|
|
985
|
+
}
|
|
986
|
+
const txt = arr.length > 2 || arr.length === 0 ? L.selected.replace("{count}", String(arr.length)) : arr.join(", ");
|
|
987
|
+
return [
|
|
988
|
+
/* @__PURE__ */ jsxs(
|
|
989
|
+
"div",
|
|
990
|
+
{
|
|
991
|
+
className: "flex items-center gap-1.5 bg-proef-turquoise/15 text-proef-navy dark:text-proef-turquoise px-2.5 py-1 text-[10px] font-black uppercase tracking-wider",
|
|
992
|
+
children: [
|
|
993
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
|
994
|
+
chipLabel,
|
|
995
|
+
": ",
|
|
996
|
+
txt
|
|
997
|
+
] }),
|
|
998
|
+
/* @__PURE__ */ jsx(
|
|
999
|
+
"button",
|
|
1000
|
+
{
|
|
1001
|
+
onClick: () => clearColumnFilter(key),
|
|
1002
|
+
className: "appearance-none bg-transparent border-0 cursor-pointer ml-0.5 hover:text-proef-blue dark:hover:text-proef-turquoise",
|
|
1003
|
+
children: "✕"
|
|
1004
|
+
}
|
|
1005
|
+
)
|
|
1006
|
+
]
|
|
1007
|
+
},
|
|
1008
|
+
key
|
|
1009
|
+
)
|
|
1010
|
+
];
|
|
1011
|
+
}),
|
|
1012
|
+
/* @__PURE__ */ jsx(
|
|
1013
|
+
"button",
|
|
1014
|
+
{
|
|
1015
|
+
onClick: clearAllFilters,
|
|
1016
|
+
className: "appearance-none bg-transparent border-0 cursor-pointer text-[10px] font-black uppercase tracking-wider text-slate-400 hover:text-red-500 transition-colors",
|
|
1017
|
+
children: L.clearAll
|
|
1018
|
+
}
|
|
1019
|
+
)
|
|
1020
|
+
] }),
|
|
1021
|
+
/* @__PURE__ */ jsx("div", { className: "overflow-auto rounded-xl border border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-900", style: { maxHeight }, children: /* @__PURE__ */ jsxs("table", { className: "w-full text-[13px] border-collapse dark:text-slate-200", children: [
|
|
1022
|
+
/* @__PURE__ */ jsx("thead", { className: "sticky top-0 z-[2]", children: /* @__PURE__ */ jsxs("tr", { children: [
|
|
1023
|
+
selectable && /* @__PURE__ */ jsx("th", { className: "bg-slate-50 dark:bg-slate-800 px-3 py-2.5 border-b border-slate-200 dark:border-slate-700 w-10 sticky left-0 z-[3]", children: /* @__PURE__ */ jsx(
|
|
1024
|
+
"button",
|
|
1025
|
+
{
|
|
1026
|
+
onClick: alternarTodas,
|
|
1027
|
+
className: `appearance-none cursor-pointer w-4 h-4 flex items-center justify-center border transition-colors rounded ${todasVisiveisMarcadas ? "bg-proef-navy dark:bg-proef-turquoise border-proef-navy dark:border-proef-turquoise text-white dark:text-proef-navy" : algumaVisivelMarcada ? "bg-slate-300 dark:bg-slate-600 border-slate-300 dark:border-slate-600 text-white" : "bg-white dark:bg-slate-900 border-slate-300 dark:border-slate-600 hover:border-slate-400 dark:hover:border-slate-500"}`,
|
|
1028
|
+
children: (todasVisiveisMarcadas || algumaVisivelMarcada) && /* @__PURE__ */ jsx("span", { className: "text-[9px] leading-none", children: "✓" })
|
|
1029
|
+
}
|
|
1030
|
+
) }),
|
|
1031
|
+
columns.map((c) => {
|
|
1032
|
+
temFiltro(c.key);
|
|
1033
|
+
const podeOrdenar = c.sortable !== false;
|
|
1034
|
+
const podeAgrupar = agrupavel(c);
|
|
1035
|
+
const agrupada = groupByKeys.includes(c.key);
|
|
1036
|
+
return /* @__PURE__ */ jsxs(
|
|
1037
|
+
"th",
|
|
1038
|
+
{
|
|
1039
|
+
style: {
|
|
1040
|
+
...c.width ? { minWidth: c.width } : {},
|
|
1041
|
+
...larguras[c.key] ? { width: larguras[c.key], minWidth: larguras[c.key], maxWidth: larguras[c.key] } : {},
|
|
1042
|
+
...estiloPreso(c) ?? {}
|
|
1043
|
+
},
|
|
1044
|
+
className: `group/th relative bg-slate-50 dark:bg-slate-800 text-[11.5px] uppercase tracking-wide text-slate-500 dark:text-slate-400 font-semibold px-3 py-2.5 border-b border-slate-200 dark:border-slate-700 whitespace-nowrap select-none ${alignClass(
|
|
1045
|
+
c.align
|
|
1046
|
+
)} ${c.sticky ? `sticky z-[3] bg-slate-50 dark:bg-slate-800 ${c.sticky === "right" ? "border-l border-slate-200 dark:border-slate-700" : ""}` : ""} ${c.headerClassName ?? ""}`,
|
|
1047
|
+
children: [
|
|
1048
|
+
resizableColumns && // Pega no limite direito: arrastar redimensiona; duplo clique repõe a largura automática
|
|
1049
|
+
/* @__PURE__ */ jsx(
|
|
1050
|
+
"span",
|
|
1051
|
+
{
|
|
1052
|
+
role: "separator",
|
|
1053
|
+
"aria-orientation": "vertical",
|
|
1054
|
+
title: L.resizeColumn,
|
|
1055
|
+
onMouseDown: (e) => iniciarResize(e, c.key),
|
|
1056
|
+
onDoubleClick: () => reporLargura(c.key),
|
|
1057
|
+
onClick: (e) => e.stopPropagation(),
|
|
1058
|
+
className: "absolute right-0 top-0 z-[4] h-full w-1.5 cursor-col-resize bg-transparent hover:bg-proef-blue/40 group-hover/th:bg-slate-300/60 dark:group-hover/th:bg-slate-600/60"
|
|
1059
|
+
}
|
|
1060
|
+
),
|
|
1061
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
|
|
1062
|
+
podeOrdenar ? /* @__PURE__ */ jsxs(
|
|
1063
|
+
"button",
|
|
1064
|
+
{
|
|
1065
|
+
onClick: () => toggleSort(c.key),
|
|
1066
|
+
className: "appearance-none bg-transparent border-0 cursor-pointer p-0 uppercase tracking-wide text-slate-500 dark:text-slate-400 hover:text-proef-blue dark:hover:text-proef-turquoise font-semibold",
|
|
1067
|
+
children: [
|
|
1068
|
+
c.label,
|
|
1069
|
+
sort?.key === c.key && /* @__PURE__ */ jsx("span", { className: "ml-1", children: sort.dir === 1 ? "▲" : "▼" })
|
|
1070
|
+
]
|
|
1071
|
+
}
|
|
1072
|
+
) : /* @__PURE__ */ jsx("span", { children: c.label }),
|
|
1073
|
+
podeAgrupar && /* @__PURE__ */ jsx(
|
|
1074
|
+
"button",
|
|
1075
|
+
{
|
|
1076
|
+
onClick: () => alternarGrupo(c.key),
|
|
1077
|
+
title: (agrupada ? L.ungroup : L.groupBy).replace("{label}", c.label),
|
|
1078
|
+
className: `appearance-none bg-transparent border-0 cursor-pointer p-0.5 transition-colors ${agrupada ? "text-violet-600 dark:text-violet-300" : "text-slate-300 dark:text-slate-600 hover:text-slate-500 dark:hover:text-slate-300"}`,
|
|
1079
|
+
children: /* @__PURE__ */ jsx(Layers, { size: 10 })
|
|
1080
|
+
}
|
|
1081
|
+
),
|
|
1082
|
+
filtravel(c) && botaoFunil(c.key, c),
|
|
1083
|
+
c.extraFilters?.map((ef) => botaoFunil(ef.key, void 0, { label: ef.label }))
|
|
1084
|
+
] }),
|
|
1085
|
+
c.headerExtra && /* @__PURE__ */ jsx("div", { className: "mt-0.5 normal-case font-normal tracking-normal", children: c.headerExtra(filtered) })
|
|
1086
|
+
]
|
|
1087
|
+
},
|
|
1088
|
+
c.key
|
|
1089
|
+
);
|
|
1090
|
+
})
|
|
1091
|
+
] }) }),
|
|
1092
|
+
/* @__PURE__ */ jsx("tbody", { children: aEsperarDataset ? /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("td", { colSpan: nColunas, className: "py-16 text-center text-sm font-bold uppercase tracking-widest text-slate-400", children: L.loading }) }) : isGrouped ? grupos.length === 0 ? /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("td", { colSpan: nColunas, className: "py-16 text-center text-sm text-slate-400", children: L.empty }) }) : renderGrupos(grupos, 0) : sorted.length === 0 ? /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsxs("td", { colSpan: nColunas, className: "py-16 text-center", children: [
|
|
1093
|
+
emptyIcon && /* @__PURE__ */ jsx("div", { className: "flex justify-center mb-2", children: emptyIcon }),
|
|
1094
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm text-slate-400", children: L.empty }),
|
|
1095
|
+
emptySubLabel && /* @__PURE__ */ jsx("p", { className: "text-xs text-slate-400 mt-1", children: emptySubLabel })
|
|
1096
|
+
] }) }) : pageData.map((row, i) => renderLinha(row, i)) }),
|
|
1097
|
+
totalRow && !aEsperarDataset && sorted.length > 0 && /* @__PURE__ */ jsx("tfoot", { className: "sticky bottom-0 z-[2]", children: /* @__PURE__ */ jsxs("tr", { className: "bg-slate-100 dark:bg-slate-800 font-black text-slate-800 dark:text-slate-100", children: [
|
|
1098
|
+
/* @__PURE__ */ jsx("td", { colSpan: colunasRotuloGrupo, className: "px-3 py-2 border-t-2 border-slate-200 dark:border-slate-700 text-[10px] uppercase tracking-widest", children: L.total }),
|
|
1099
|
+
colunasComValor.map((c) => /* @__PURE__ */ jsx("td", { className: `px-3 py-2 border-t-2 border-slate-200 dark:border-slate-700 whitespace-nowrap text-xs ${alignClass(c.align)}`, children: c.groupAggregate?.(sorted) }, c.key))
|
|
1100
|
+
] }) })
|
|
1101
|
+
] }) }),
|
|
1102
|
+
paginando && (totalPages > 1 || (pageSizeOptions?.length ?? 0) > 0) && /* @__PURE__ */ jsxs("div", { className: "mt-2.5 flex items-center justify-between gap-2", children: [
|
|
1103
|
+
/* @__PURE__ */ jsx("span", { className: "text-[10px] font-black uppercase tracking-widest text-slate-400", children: L.page.replace("{page}", String(currentPage)).replace("{pages}", String(totalPages)) }),
|
|
1104
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
|
|
1105
|
+
(pageSizeOptions?.length ?? 0) > 0 && /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1.5 mr-2 text-[10px] font-black uppercase tracking-widest text-slate-400", children: [
|
|
1106
|
+
L.perPage,
|
|
1107
|
+
/* @__PURE__ */ jsx(
|
|
1108
|
+
Escolha,
|
|
1109
|
+
{
|
|
1110
|
+
rotulo: L.perPage,
|
|
1111
|
+
valor: String(pageSizeAtual),
|
|
1112
|
+
onMudar: (v) => setPageSizeAtual(Number(v)),
|
|
1113
|
+
className: "w-20 normal-case tracking-normal font-normal",
|
|
1114
|
+
opcoes: [.../* @__PURE__ */ new Set([...pageSizeOptions ?? [], pageSizeAtual])].sort((a, b) => a - b).map(String)
|
|
1115
|
+
}
|
|
1116
|
+
)
|
|
1117
|
+
] }),
|
|
1118
|
+
/* @__PURE__ */ jsx(
|
|
1119
|
+
"button",
|
|
1120
|
+
{
|
|
1121
|
+
disabled: currentPage <= 1,
|
|
1122
|
+
onClick: () => setPage((p) => Math.max(1, p - 1)),
|
|
1123
|
+
className: "appearance-none cursor-pointer bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-700 text-[10px] font-black uppercase rounded-lg tracking-widest px-3 py-1.5 text-slate-500 dark:text-slate-400 hover:enabled:border-proef-navy dark:hover:enabled:border-proef-turquoise hover:enabled:text-proef-navy dark:hover:enabled:text-proef-turquoise disabled:opacity-30 disabled:cursor-not-allowed transition-colors",
|
|
1124
|
+
children: L.prev
|
|
1125
|
+
}
|
|
1126
|
+
),
|
|
1127
|
+
/* @__PURE__ */ jsx(
|
|
1128
|
+
"button",
|
|
1129
|
+
{
|
|
1130
|
+
disabled: currentPage >= totalPages,
|
|
1131
|
+
onClick: () => setPage((p) => Math.min(totalPages, p + 1)),
|
|
1132
|
+
className: "appearance-none cursor-pointer bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-700 text-[10px] font-black uppercase rounded-lg tracking-widest px-3 py-1.5 text-slate-500 dark:text-slate-400 hover:enabled:border-proef-navy dark:hover:enabled:border-proef-turquoise hover:enabled:text-proef-navy dark:hover:enabled:text-proef-turquoise disabled:opacity-30 disabled:cursor-not-allowed transition-colors",
|
|
1133
|
+
children: L.next
|
|
1134
|
+
}
|
|
1135
|
+
)
|
|
1136
|
+
] })
|
|
1137
|
+
] })
|
|
1138
|
+
] });
|
|
1139
|
+
}
|
|
1140
|
+
export {
|
|
1141
|
+
DataTable as default,
|
|
1142
|
+
pesquisaCuringa,
|
|
1143
|
+
timestampDeData
|
|
1144
|
+
};
|
|
1145
|
+
//# sourceMappingURL=DataTable.js.map
|