@umodeapporg/ui 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/images/common-pngs/sparkles.png.js +5 -0
- package/dist/assets/images/common-pngs/sparkles.png.js.map +1 -0
- package/dist/assets/umode-ui.css +182 -0
- package/dist/components/DateTime/DatePicker.d.ts +19 -0
- package/dist/components/DateTime/DatePicker.js +121 -0
- package/dist/components/DateTime/DatePicker.js.map +1 -0
- package/dist/components/DateTime/DateRangePicker.d.ts +19 -0
- package/dist/components/DateTime/DateRangePicker.js +205 -0
- package/dist/components/DateTime/DateRangePicker.js.map +1 -0
- package/dist/components/Form/ControlledButton.d.ts +13 -0
- package/dist/components/Form/ControlledButton.js +68 -0
- package/dist/components/Form/ControlledButton.js.map +1 -0
- package/dist/components/Form/ControlledCheckbox.d.ts +12 -0
- package/dist/components/Form/ControlledCheckbox.js +101 -0
- package/dist/components/Form/ControlledCheckbox.js.map +1 -0
- package/dist/components/Form/ControlledDialog.d.ts +44 -0
- package/dist/components/Form/ControlledDialog.js +185 -0
- package/dist/components/Form/ControlledDialog.js.map +1 -0
- package/dist/components/Form/ControlledDialogPrimitives.d.ts +30 -0
- package/dist/components/Form/ControlledDialogPrimitives.js +121 -0
- package/dist/components/Form/ControlledDialogPrimitives.js.map +1 -0
- package/dist/components/Form/ControlledDrawer.d.ts +37 -0
- package/dist/components/Form/ControlledDrawer.js +237 -0
- package/dist/components/Form/ControlledDrawer.js.map +1 -0
- package/dist/components/Form/ControlledForm/InputField.d.ts +11 -0
- package/dist/components/Form/ControlledForm/InputField.js +75 -0
- package/dist/components/Form/ControlledForm/InputField.js.map +1 -0
- package/dist/components/Form/ControlledForm/index.d.ts +27 -0
- package/dist/components/Form/ControlledForm/index.js +113 -0
- package/dist/components/Form/ControlledForm/index.js.map +1 -0
- package/dist/components/Form/ControlledImage/Img.d.ts +11 -0
- package/dist/components/Form/ControlledImage/Img.js +29 -0
- package/dist/components/Form/ControlledImage/Img.js.map +1 -0
- package/dist/components/Form/ControlledImage/index.d.ts +30 -0
- package/dist/components/Form/ControlledImage/index.js +107 -0
- package/dist/components/Form/ControlledImage/index.js.map +1 -0
- package/dist/components/Form/ControlledImage/useImage.d.ts +9 -0
- package/dist/components/Form/ControlledImage/useImage.js +110 -0
- package/dist/components/Form/ControlledImage/useImage.js.map +1 -0
- package/dist/components/Form/ControlledInput.d.ts +23 -0
- package/dist/components/Form/ControlledInput.js +52 -0
- package/dist/components/Form/ControlledInput.js.map +1 -0
- package/dist/components/Form/ControlledRadio.d.ts +15 -0
- package/dist/components/Form/ControlledRadio.js +91 -0
- package/dist/components/Form/ControlledRadio.js.map +1 -0
- package/dist/components/Form/ControlledSelect.d.ts +44 -0
- package/dist/components/Form/ControlledSelect.js +545 -0
- package/dist/components/Form/ControlledSelect.js.map +1 -0
- package/dist/components/Form/ControlledSwitch.d.ts +14 -0
- package/dist/components/Form/ControlledSwitch.js +88 -0
- package/dist/components/Form/ControlledSwitch.js.map +1 -0
- package/dist/components/Form/ControlledTabs.d.ts +70 -0
- package/dist/components/Form/ControlledTabs.js +470 -0
- package/dist/components/Form/ControlledTabs.js.map +1 -0
- package/dist/components/Form/ControlledTabsPrimitives.d.ts +43 -0
- package/dist/components/Form/ControlledTabsPrimitives.js +47 -0
- package/dist/components/Form/ControlledTabsPrimitives.js.map +1 -0
- package/dist/components/Form/ControlledTextarea.d.ts +22 -0
- package/dist/components/Form/ControlledTextarea.js +46 -0
- package/dist/components/Form/ControlledTextarea.js.map +1 -0
- package/dist/components/Form/ControlledTimeline.d.ts +26 -0
- package/dist/components/Form/ControlledTimeline.js +57 -0
- package/dist/components/Form/ControlledTimeline.js.map +1 -0
- package/dist/components/Form/ControlledViewToggle.d.ts +74 -0
- package/dist/components/Form/ControlledViewToggle.js +157 -0
- package/dist/components/Form/ControlledViewToggle.js.map +1 -0
- package/dist/components/Form/ControlledVoiceTextarea.d.ts +11 -0
- package/dist/components/Form/ControlledVoiceTextarea.js +88 -0
- package/dist/components/Form/ControlledVoiceTextarea.js.map +1 -0
- package/dist/components/Form/CurrencyInput.d.ts +8 -0
- package/dist/components/Form/CurrencyInput.js +17 -0
- package/dist/components/Form/CurrencyInput.js.map +1 -0
- package/dist/components/Form/RichTextEditor.d.ts +80 -0
- package/dist/components/Form/RichTextEditor.js +546 -0
- package/dist/components/Form/RichTextEditor.js.map +1 -0
- package/dist/components/Form/attachments/AttachmentPreviewList.d.ts +8 -0
- package/dist/components/Form/attachments/AttachmentPreviewList.js +71 -0
- package/dist/components/Form/attachments/AttachmentPreviewList.js.map +1 -0
- package/dist/components/Form/attachments/FileDropzone.d.ts +12 -0
- package/dist/components/Form/attachments/FileDropzone.js +84 -0
- package/dist/components/Form/attachments/FileDropzone.js.map +1 -0
- package/dist/components/Navigation/ControlledBreadcrumb.d.ts +13 -0
- package/dist/components/Navigation/ControlledBreadcrumb.js +23 -0
- package/dist/components/Navigation/ControlledBreadcrumb.js.map +1 -0
- package/dist/components/Navigation/ErrorPage.d.ts +2 -0
- package/dist/components/Navigation/ErrorPage.js +27 -0
- package/dist/components/Navigation/ErrorPage.js.map +1 -0
- package/dist/components/Navigation/PageTitle.d.ts +41 -0
- package/dist/components/Navigation/PageTitle.js +147 -0
- package/dist/components/Navigation/PageTitle.js.map +1 -0
- package/dist/components/Navigation/PageTitleNavigationContext.d.ts +21 -0
- package/dist/components/Navigation/PageTitleNavigationContext.js +17 -0
- package/dist/components/Navigation/PageTitleNavigationContext.js.map +1 -0
- package/dist/components/Search/UnifiedSearchBar.d.ts +31 -0
- package/dist/components/Search/UnifiedSearchBar.js +167 -0
- package/dist/components/Search/UnifiedSearchBar.js.map +1 -0
- package/dist/components/Search/filters/ActiveFiltersBar.d.ts +15 -0
- package/dist/components/Search/filters/ActiveFiltersBar.js +48 -0
- package/dist/components/Search/filters/ActiveFiltersBar.js.map +1 -0
- package/dist/components/Search/filters/FilterChipsRow.d.ts +17 -0
- package/dist/components/Search/filters/FilterChipsRow.js +113 -0
- package/dist/components/Search/filters/FilterChipsRow.js.map +1 -0
- package/dist/components/Search/filters/FilterFieldControl.d.ts +19 -0
- package/dist/components/Search/filters/FilterFieldControl.js +387 -0
- package/dist/components/Search/filters/FilterFieldControl.js.map +1 -0
- package/dist/components/Search/filters/FiltersButton.d.ts +24 -0
- package/dist/components/Search/filters/FiltersButton.js +52 -0
- package/dist/components/Search/filters/FiltersButton.js.map +1 -0
- package/dist/components/Search/filters/FiltersForm.d.ts +18 -0
- package/dist/components/Search/filters/FiltersForm.js +112 -0
- package/dist/components/Search/filters/FiltersForm.js.map +1 -0
- package/dist/components/Search/filters/FiltersPanel.d.ts +32 -0
- package/dist/components/Search/filters/FiltersPanel.js +264 -0
- package/dist/components/Search/filters/FiltersPanel.js.map +1 -0
- package/dist/components/Search/filters/FiltersSummaryTooltip.d.ts +20 -0
- package/dist/components/Search/filters/FiltersSummaryTooltip.js +26 -0
- package/dist/components/Search/filters/FiltersSummaryTooltip.js.map +1 -0
- package/dist/components/Search/filters/filterTypes.d.ts +162 -0
- package/dist/components/Search/filters/filterTypes.js +2 -0
- package/dist/components/Search/filters/filterTypes.js.map +1 -0
- package/dist/components/Search/filters/filterValues.d.ts +22 -0
- package/dist/components/Search/filters/filterValues.js +91 -0
- package/dist/components/Search/filters/filterValues.js.map +1 -0
- package/dist/components/Search/filters/filtersLayout.d.ts +4 -0
- package/dist/components/Search/filters/filtersLayout.js +18 -0
- package/dist/components/Search/filters/filtersLayout.js.map +1 -0
- package/dist/components/Search/filters/index.d.ts +11 -0
- package/dist/components/Search/filters/index.js +32 -0
- package/dist/components/Search/filters/index.js.map +1 -0
- package/dist/components/Search/filters/useFilters.d.ts +33 -0
- package/dist/components/Search/filters/useFilters.js +162 -0
- package/dist/components/Search/filters/useFilters.js.map +1 -0
- package/dist/components/Search/index.d.ts +2 -0
- package/dist/components/Search/index.js +34 -0
- package/dist/components/Search/index.js.map +1 -0
- package/dist/components/UI/AccordionIcon.d.ts +10 -0
- package/dist/components/UI/AccordionIcon.js +22 -0
- package/dist/components/UI/AccordionIcon.js.map +1 -0
- package/dist/components/UI/AlertInfo/dismissedAlertsStore.d.ts +2 -0
- package/dist/components/UI/AlertInfo/dismissedAlertsStore.js +22 -0
- package/dist/components/UI/AlertInfo/dismissedAlertsStore.js.map +1 -0
- package/dist/components/UI/AlertInfo/index.d.ts +30 -0
- package/dist/components/UI/AlertInfo/index.js +78 -0
- package/dist/components/UI/AlertInfo/index.js.map +1 -0
- package/dist/components/UI/BaseDataCard.d.ts +25 -0
- package/dist/components/UI/BaseDataCard.js +163 -0
- package/dist/components/UI/BaseDataCard.js.map +1 -0
- package/dist/components/UI/BulkActionBar.d.ts +35 -0
- package/dist/components/UI/BulkActionBar.js +125 -0
- package/dist/components/UI/BulkActionBar.js.map +1 -0
- package/dist/components/UI/Chips/OutlinedChip.d.ts +42 -0
- package/dist/components/UI/Chips/OutlinedChip.js +183 -0
- package/dist/components/UI/Chips/OutlinedChip.js.map +1 -0
- package/dist/components/UI/Chips/StatusChip.d.ts +8 -0
- package/dist/components/UI/Chips/StatusChip.js +33 -0
- package/dist/components/UI/Chips/StatusChip.js.map +1 -0
- package/dist/components/UI/Chips/chipTones.d.ts +6 -0
- package/dist/components/UI/Chips/chipTones.js +53 -0
- package/dist/components/UI/Chips/chipTones.js.map +1 -0
- package/dist/components/UI/ColorSwatch.d.ts +30 -0
- package/dist/components/UI/ColorSwatch.js +53 -0
- package/dist/components/UI/ColorSwatch.js.map +1 -0
- package/dist/components/UI/Colors.d.ts +10 -0
- package/dist/components/UI/Colors.js +41 -0
- package/dist/components/UI/Colors.js.map +1 -0
- package/dist/components/UI/ControlledAccordion.d.ts +38 -0
- package/dist/components/UI/ControlledAccordion.js +89 -0
- package/dist/components/UI/ControlledAccordion.js.map +1 -0
- package/dist/components/UI/ControlledCollapse.d.ts +13 -0
- package/dist/components/UI/ControlledCollapse.js +32 -0
- package/dist/components/UI/ControlledCollapse.js.map +1 -0
- package/dist/components/UI/ControlledMenu.d.ts +73 -0
- package/dist/components/UI/ControlledMenu.js +231 -0
- package/dist/components/UI/ControlledMenu.js.map +1 -0
- package/dist/components/UI/ControlledPopover.d.ts +44 -0
- package/dist/components/UI/ControlledPopover.js +144 -0
- package/dist/components/UI/ControlledPopover.js.map +1 -0
- package/dist/components/UI/ControlledProgress.d.ts +13 -0
- package/dist/components/UI/ControlledProgress.js +46 -0
- package/dist/components/UI/ControlledProgress.js.map +1 -0
- package/dist/components/UI/ControlledSlider.d.ts +13 -0
- package/dist/components/UI/ControlledSlider.js +29 -0
- package/dist/components/UI/ControlledSlider.js.map +1 -0
- package/dist/components/UI/ControlledTooltip.d.ts +21 -0
- package/dist/components/UI/ControlledTooltip.js +140 -0
- package/dist/components/UI/ControlledTooltip.js.map +1 -0
- package/dist/components/UI/CustomBadge.d.ts +15 -0
- package/dist/components/UI/CustomBadge.js +34 -0
- package/dist/components/UI/CustomBadge.js.map +1 -0
- package/dist/components/UI/CustomCard.d.ts +13 -0
- package/dist/components/UI/CustomCard.js +36 -0
- package/dist/components/UI/CustomCard.js.map +1 -0
- package/dist/components/UI/CustomChart.d.ts +21 -0
- package/dist/components/UI/CustomChart.js +108 -0
- package/dist/components/UI/CustomChart.js.map +1 -0
- package/dist/components/UI/DataTable/DataTable.d.ts +100 -0
- package/dist/components/UI/DataTable/DataTable.js +546 -0
- package/dist/components/UI/DataTable/DataTable.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableAutoCard.d.ts +20 -0
- package/dist/components/UI/DataTable/DataTableAutoCard.js +39 -0
- package/dist/components/UI/DataTable/DataTableAutoCard.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableBody.d.ts +29 -0
- package/dist/components/UI/DataTable/DataTableBody.js +243 -0
- package/dist/components/UI/DataTable/DataTableBody.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableBodyCell.d.ts +21 -0
- package/dist/components/UI/DataTable/DataTableBodyCell.js +77 -0
- package/dist/components/UI/DataTable/DataTableBodyCell.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableBulkEditButton.d.ts +11 -0
- package/dist/components/UI/DataTable/DataTableBulkEditButton.js +24 -0
- package/dist/components/UI/DataTable/DataTableBulkEditButton.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableBulkEditDialog.d.ts +25 -0
- package/dist/components/UI/DataTable/DataTableBulkEditDialog.js +251 -0
- package/dist/components/UI/DataTable/DataTableBulkEditDialog.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableColumnToggle.d.ts +34 -0
- package/dist/components/UI/DataTable/DataTableColumnToggle.js +168 -0
- package/dist/components/UI/DataTable/DataTableColumnToggle.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableDetailModal.d.ts +17 -0
- package/dist/components/UI/DataTable/DataTableDetailModal.js +109 -0
- package/dist/components/UI/DataTable/DataTableDetailModal.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableDetailPanel.d.ts +21 -0
- package/dist/components/UI/DataTable/DataTableDetailPanel.js +51 -0
- package/dist/components/UI/DataTable/DataTableDetailPanel.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableDetailTable.d.ts +35 -0
- package/dist/components/UI/DataTable/DataTableDetailTable.js +129 -0
- package/dist/components/UI/DataTable/DataTableDetailTable.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableEditModeButton.d.ts +12 -0
- package/dist/components/UI/DataTable/DataTableEditModeButton.js +29 -0
- package/dist/components/UI/DataTable/DataTableEditModeButton.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableFilters.d.ts +20 -0
- package/dist/components/UI/DataTable/DataTableFilters.js +64 -0
- package/dist/components/UI/DataTable/DataTableFilters.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableHead.d.ts +27 -0
- package/dist/components/UI/DataTable/DataTableHead.js +198 -0
- package/dist/components/UI/DataTable/DataTableHead.js.map +1 -0
- package/dist/components/UI/DataTable/DataTablePagination.d.ts +15 -0
- package/dist/components/UI/DataTable/DataTablePagination.js +145 -0
- package/dist/components/UI/DataTable/DataTablePagination.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableSaveButton.d.ts +13 -0
- package/dist/components/UI/DataTable/DataTableSaveButton.js +21 -0
- package/dist/components/UI/DataTable/DataTableSaveButton.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableSegmentedTabs.d.ts +8 -0
- package/dist/components/UI/DataTable/DataTableSegmentedTabs.js +35 -0
- package/dist/components/UI/DataTable/DataTableSegmentedTabs.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableStates.d.ts +17 -0
- package/dist/components/UI/DataTable/DataTableStates.js +59 -0
- package/dist/components/UI/DataTable/DataTableStates.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableToolbar.d.ts +28 -0
- package/dist/components/UI/DataTable/DataTableToolbar.js +109 -0
- package/dist/components/UI/DataTable/DataTableToolbar.js.map +1 -0
- package/dist/components/UI/DataTable/applyDataTableFilters.d.ts +16 -0
- package/dist/components/UI/DataTable/applyDataTableFilters.js +53 -0
- package/dist/components/UI/DataTable/applyDataTableFilters.js.map +1 -0
- package/dist/components/UI/DataTable/cells/DataTableActionsCell.d.ts +7 -0
- package/dist/components/UI/DataTable/cells/DataTableActionsCell.js +55 -0
- package/dist/components/UI/DataTable/cells/DataTableActionsCell.js.map +1 -0
- package/dist/components/UI/DataTable/cells/DataTableCell.d.ts +15 -0
- package/dist/components/UI/DataTable/cells/DataTableCell.js +63 -0
- package/dist/components/UI/DataTable/cells/DataTableCell.js.map +1 -0
- package/dist/components/UI/DataTable/cells/DataTableCodeCell.d.ts +6 -0
- package/dist/components/UI/DataTable/cells/DataTableCodeCell.js +7 -0
- package/dist/components/UI/DataTable/cells/DataTableCodeCell.js.map +1 -0
- package/dist/components/UI/DataTable/cells/DataTableColorCell.d.ts +7 -0
- package/dist/components/UI/DataTable/cells/DataTableColorCell.js +10 -0
- package/dist/components/UI/DataTable/cells/DataTableColorCell.js.map +1 -0
- package/dist/components/UI/DataTable/cells/DataTableCountCell.d.ts +5 -0
- package/dist/components/UI/DataTable/cells/DataTableCountCell.js +7 -0
- package/dist/components/UI/DataTable/cells/DataTableCountCell.js.map +1 -0
- package/dist/components/UI/DataTable/cells/DataTableDateCell.d.ts +5 -0
- package/dist/components/UI/DataTable/cells/DataTableDateCell.js +12 -0
- package/dist/components/UI/DataTable/cells/DataTableDateCell.js.map +1 -0
- package/dist/components/UI/DataTable/cells/DataTableEditableCell.d.ts +23 -0
- package/dist/components/UI/DataTable/cells/DataTableEditableCell.js +242 -0
- package/dist/components/UI/DataTable/cells/DataTableEditableCell.js.map +1 -0
- package/dist/components/UI/DataTable/cells/DataTableEmpenhoCell.d.ts +10 -0
- package/dist/components/UI/DataTable/cells/DataTableEmpenhoCell.js +7 -0
- package/dist/components/UI/DataTable/cells/DataTableEmpenhoCell.js.map +1 -0
- package/dist/components/UI/DataTable/cells/DataTableOriginCell.d.ts +6 -0
- package/dist/components/UI/DataTable/cells/DataTableOriginCell.js +25 -0
- package/dist/components/UI/DataTable/cells/DataTableOriginCell.js.map +1 -0
- package/dist/components/UI/DataTable/cells/DataTableStatusCell.d.ts +6 -0
- package/dist/components/UI/DataTable/cells/DataTableStatusCell.js +24 -0
- package/dist/components/UI/DataTable/cells/DataTableStatusCell.js.map +1 -0
- package/dist/components/UI/DataTable/cells/DataTableTagCell.d.ts +6 -0
- package/dist/components/UI/DataTable/cells/DataTableTagCell.js +25 -0
- package/dist/components/UI/DataTable/cells/DataTableTagCell.js.map +1 -0
- package/dist/components/UI/DataTable/cells/DataTableTextCell.d.ts +6 -0
- package/dist/components/UI/DataTable/cells/DataTableTextCell.js +7 -0
- package/dist/components/UI/DataTable/cells/DataTableTextCell.js.map +1 -0
- package/dist/components/UI/DataTable/cells/DataTableThumbnailCell.d.ts +6 -0
- package/dist/components/UI/DataTable/cells/DataTableThumbnailCell.js +10 -0
- package/dist/components/UI/DataTable/cells/DataTableThumbnailCell.js.map +1 -0
- package/dist/components/UI/DataTable/dataTableClasses.d.ts +12 -0
- package/dist/components/UI/DataTable/dataTableClasses.js +29 -0
- package/dist/components/UI/DataTable/dataTableClasses.js.map +1 -0
- package/dist/components/UI/DataTable/dataTableColumnWidths.d.ts +15 -0
- package/dist/components/UI/DataTable/dataTableColumnWidths.js +153 -0
- package/dist/components/UI/DataTable/dataTableColumnWidths.js.map +1 -0
- package/dist/components/UI/DataTable/dataTableColumnsStore.d.ts +12 -0
- package/dist/components/UI/DataTable/dataTableColumnsStore.js +68 -0
- package/dist/components/UI/DataTable/dataTableColumnsStore.js.map +1 -0
- package/dist/components/UI/DataTable/dataTableMotion.d.ts +6 -0
- package/dist/components/UI/DataTable/dataTableMotion.js +15 -0
- package/dist/components/UI/DataTable/dataTableMotion.js.map +1 -0
- package/dist/components/UI/DataTable/grid/GridFillHandle.d.ts +8 -0
- package/dist/components/UI/DataTable/grid/GridFillHandle.js +70 -0
- package/dist/components/UI/DataTable/grid/GridFillHandle.js.map +1 -0
- package/dist/components/UI/DataTable/grid/GridProvider.d.ts +31 -0
- package/dist/components/UI/DataTable/grid/GridProvider.js +85 -0
- package/dist/components/UI/DataTable/grid/GridProvider.js.map +1 -0
- package/dist/components/UI/DataTable/grid/fill/fillStrategies.d.ts +19 -0
- package/dist/components/UI/DataTable/grid/fill/fillStrategies.js +73 -0
- package/dist/components/UI/DataTable/grid/fill/fillStrategies.js.map +1 -0
- package/dist/components/UI/DataTable/grid/gridStore.d.ts +69 -0
- package/dist/components/UI/DataTable/grid/gridStore.js +219 -0
- package/dist/components/UI/DataTable/grid/gridStore.js.map +1 -0
- package/dist/components/UI/DataTable/grid/gridTypes.d.ts +47 -0
- package/dist/components/UI/DataTable/grid/gridTypes.js +27 -0
- package/dist/components/UI/DataTable/grid/gridTypes.js.map +1 -0
- package/dist/components/UI/DataTable/grid/useGridFillApply.d.ts +18 -0
- package/dist/components/UI/DataTable/grid/useGridFillApply.js +74 -0
- package/dist/components/UI/DataTable/grid/useGridFillApply.js.map +1 -0
- package/dist/components/UI/DataTable/grid/useGridInstance.d.ts +27 -0
- package/dist/components/UI/DataTable/grid/useGridInstance.js +41 -0
- package/dist/components/UI/DataTable/grid/useGridInstance.js.map +1 -0
- package/dist/components/UI/DataTable/grid/useGridKeyboard.d.ts +17 -0
- package/dist/components/UI/DataTable/grid/useGridKeyboard.js +114 -0
- package/dist/components/UI/DataTable/grid/useGridKeyboard.js.map +1 -0
- package/dist/components/UI/DataTable/index.d.ts +19 -0
- package/dist/components/UI/DataTable/index.js +34 -0
- package/dist/components/UI/DataTable/index.js.map +1 -0
- package/dist/components/UI/DataTable/types.d.ts +513 -0
- package/dist/components/UI/DataTable/types.js +13 -0
- package/dist/components/UI/DataTable/types.js.map +1 -0
- package/dist/components/UI/DataTable/useCellEditingState.d.ts +20 -0
- package/dist/components/UI/DataTable/useCellEditingState.js +33 -0
- package/dist/components/UI/DataTable/useCellEditingState.js.map +1 -0
- package/dist/components/UI/DataTable/useColumnOrder.d.ts +25 -0
- package/dist/components/UI/DataTable/useColumnOrder.js +94 -0
- package/dist/components/UI/DataTable/useColumnOrder.js.map +1 -0
- package/dist/components/UI/DataTable/useColumnSizing.d.ts +9 -0
- package/dist/components/UI/DataTable/useColumnSizing.js +21 -0
- package/dist/components/UI/DataTable/useColumnSizing.js.map +1 -0
- package/dist/components/UI/DataTable/useColumnVisibility.d.ts +19 -0
- package/dist/components/UI/DataTable/useColumnVisibility.js +47 -0
- package/dist/components/UI/DataTable/useColumnVisibility.js.map +1 -0
- package/dist/components/UI/DataTable/useDataTableCommitQueue.d.ts +69 -0
- package/dist/components/UI/DataTable/useDataTableCommitQueue.js +220 -0
- package/dist/components/UI/DataTable/useDataTableCommitQueue.js.map +1 -0
- package/dist/components/UI/DataTable/useDataTableEditBuffer.d.ts +36 -0
- package/dist/components/UI/DataTable/useDataTableEditBuffer.js +29 -0
- package/dist/components/UI/DataTable/useDataTableEditBuffer.js.map +1 -0
- package/dist/components/UI/DataTable/useDataTableInstance.d.ts +65 -0
- package/dist/components/UI/DataTable/useDataTableInstance.js +306 -0
- package/dist/components/UI/DataTable/useDataTableInstance.js.map +1 -0
- package/dist/components/UI/DataTable/useDataTableSource.d.ts +85 -0
- package/dist/components/UI/DataTable/useDataTableSource.js +199 -0
- package/dist/components/UI/DataTable/useDataTableSource.js.map +1 -0
- package/dist/components/UI/DataTable/useFlipRows.d.ts +22 -0
- package/dist/components/UI/DataTable/useFlipRows.js +90 -0
- package/dist/components/UI/DataTable/useFlipRows.js.map +1 -0
- package/dist/components/UI/ErrorBoundary.d.ts +20 -0
- package/dist/components/UI/ErrorBoundary.js +36 -0
- package/dist/components/UI/ErrorBoundary.js.map +1 -0
- package/dist/components/UI/GeneratedByAI.d.ts +2 -0
- package/dist/components/UI/GeneratedByAI.js +12 -0
- package/dist/components/UI/GeneratedByAI.js.map +1 -0
- package/dist/components/UI/HorizontalScrollArea.d.ts +22 -0
- package/dist/components/UI/HorizontalScrollArea.js +73 -0
- package/dist/components/UI/HorizontalScrollArea.js.map +1 -0
- package/dist/components/UI/ImageAiAdjust/ImageAiAdjustDialog.d.ts +15 -0
- package/dist/components/UI/ImageAiAdjust/ImageAiAdjustDialog.js +144 -0
- package/dist/components/UI/ImageAiAdjust/ImageAiAdjustDialog.js.map +1 -0
- package/dist/components/UI/ImageAiAdjust/useImageAiAdjust.d.ts +29 -0
- package/dist/components/UI/ImageAiAdjust/useImageAiAdjust.js +84 -0
- package/dist/components/UI/ImageAiAdjust/useImageAiAdjust.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/AnnotationEditor.d.ts +12 -0
- package/dist/components/UI/ImageAnnotator/AnnotationEditor.js +267 -0
- package/dist/components/UI/ImageAnnotator/AnnotationEditor.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/ImageAnnotationDialog.d.ts +13 -0
- package/dist/components/UI/ImageAnnotator/ImageAnnotationDialog.js +58 -0
- package/dist/components/UI/ImageAnnotator/ImageAnnotationDialog.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/annotationStyle.d.ts +28 -0
- package/dist/components/UI/ImageAnnotator/annotationStyle.js +56 -0
- package/dist/components/UI/ImageAnnotator/annotationStyle.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/canvas/AnnotationElementNode.d.ts +17 -0
- package/dist/components/UI/ImageAnnotator/canvas/AnnotationElementNode.js +329 -0
- package/dist/components/UI/ImageAnnotator/canvas/AnnotationElementNode.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/canvas/AnnotationSelection.d.ts +10 -0
- package/dist/components/UI/ImageAnnotator/canvas/AnnotationSelection.js +125 -0
- package/dist/components/UI/ImageAnnotator/canvas/AnnotationSelection.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/canvas/AnnotationStage.d.ts +19 -0
- package/dist/components/UI/ImageAnnotator/canvas/AnnotationStage.js +216 -0
- package/dist/components/UI/ImageAnnotator/canvas/AnnotationStage.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationActionBar.d.ts +15 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationActionBar.js +77 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationActionBar.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationColorPopover.d.ts +11 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationColorPopover.js +69 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationColorPopover.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationElementActions.d.ts +8 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationElementActions.js +58 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationElementActions.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationStyleBar.d.ts +13 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationStyleBar.js +183 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationStyleBar.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationTextOverlay.d.ts +15 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationTextOverlay.js +78 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationTextOverlay.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationToolButton.d.ts +15 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationToolButton.js +46 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationToolButton.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationToolbar.d.ts +10 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationToolbar.js +80 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationToolbar.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/helpers/annotationCanvas.d.ts +21 -0
- package/dist/components/UI/ImageAnnotator/helpers/annotationCanvas.js +45 -0
- package/dist/components/UI/ImageAnnotator/helpers/annotationCanvas.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/helpers/annotationElements.d.ts +15 -0
- package/dist/components/UI/ImageAnnotator/helpers/annotationElements.js +165 -0
- package/dist/components/UI/ImageAnnotator/helpers/annotationElements.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/helpers/annotationExport.d.ts +15 -0
- package/dist/components/UI/ImageAnnotator/helpers/annotationExport.js +23 -0
- package/dist/components/UI/ImageAnnotator/helpers/annotationExport.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/helpers/konvaFullBuild.d.ts +8 -0
- package/dist/components/UI/ImageAnnotator/helpers/konvaFullBuild.js +10 -0
- package/dist/components/UI/ImageAnnotator/helpers/konvaFullBuild.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/hooks/useAnnotationBaseImage.d.ts +9 -0
- package/dist/components/UI/ImageAnnotator/hooks/useAnnotationBaseImage.js +56 -0
- package/dist/components/UI/ImageAnnotator/hooks/useAnnotationBaseImage.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/hooks/useAnnotationDocument.d.ts +27 -0
- package/dist/components/UI/ImageAnnotator/hooks/useAnnotationDocument.js +149 -0
- package/dist/components/UI/ImageAnnotator/hooks/useAnnotationDocument.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/hooks/useAnnotationShortcuts.d.ts +14 -0
- package/dist/components/UI/ImageAnnotator/hooks/useAnnotationShortcuts.js +79 -0
- package/dist/components/UI/ImageAnnotator/hooks/useAnnotationShortcuts.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/hooks/useCoarsePointer.d.ts +5 -0
- package/dist/components/UI/ImageAnnotator/hooks/useCoarsePointer.js +23 -0
- package/dist/components/UI/ImageAnnotator/hooks/useCoarsePointer.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/hooks/useHtmlImage.d.ts +2 -0
- package/dist/components/UI/ImageAnnotator/hooks/useHtmlImage.js +27 -0
- package/dist/components/UI/ImageAnnotator/hooks/useHtmlImage.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/interfaces/annotationDocument.d.ts +89 -0
- package/dist/components/UI/ImageAnnotator/interfaces/annotationDocument.js +13 -0
- package/dist/components/UI/ImageAnnotator/interfaces/annotationDocument.js.map +1 -0
- package/dist/components/UI/ImagePlaceholder.d.ts +24 -0
- package/dist/components/UI/ImagePlaceholder.js +26 -0
- package/dist/components/UI/ImagePlaceholder.js.map +1 -0
- package/dist/components/UI/ImageZoomOverlay.d.ts +7 -0
- package/dist/components/UI/ImageZoomOverlay.js +49 -0
- package/dist/components/UI/ImageZoomOverlay.js.map +1 -0
- package/dist/components/UI/InformationCard.d.ts +26 -0
- package/dist/components/UI/InformationCard.js +89 -0
- package/dist/components/UI/InformationCard.js.map +1 -0
- package/dist/components/UI/Kanban/KanbanBoard.d.ts +26 -0
- package/dist/components/UI/Kanban/KanbanBoard.js +89 -0
- package/dist/components/UI/Kanban/KanbanBoard.js.map +1 -0
- package/dist/components/UI/Kanban/KanbanCard.d.ts +22 -0
- package/dist/components/UI/Kanban/KanbanCard.js +47 -0
- package/dist/components/UI/Kanban/KanbanCard.js.map +1 -0
- package/dist/components/UI/Kanban/KanbanLane.d.ts +37 -0
- package/dist/components/UI/Kanban/KanbanLane.js +77 -0
- package/dist/components/UI/Kanban/KanbanLane.js.map +1 -0
- package/dist/components/UI/Kanban/index.d.ts +4 -0
- package/dist/components/UI/Kanban/index.js +11 -0
- package/dist/components/UI/Kanban/index.js.map +1 -0
- package/dist/components/UI/Kanban/kanbanBoardContext.d.ts +13 -0
- package/dist/components/UI/Kanban/kanbanBoardContext.js +13 -0
- package/dist/components/UI/Kanban/kanbanBoardContext.js.map +1 -0
- package/dist/components/UI/LazyMarkdown.d.ts +5 -0
- package/dist/components/UI/LazyMarkdown.js +8 -0
- package/dist/components/UI/LazyMarkdown.js.map +1 -0
- package/dist/components/UI/LoadingPage.d.ts +2 -0
- package/dist/components/UI/LoadingPage.js +13 -0
- package/dist/components/UI/LoadingPage.js.map +1 -0
- package/dist/components/UI/LoadingSpinner.d.ts +14 -0
- package/dist/components/UI/LoadingSpinner.js +32 -0
- package/dist/components/UI/LoadingSpinner.js.map +1 -0
- package/dist/components/UI/MaterialSymbol/consts.d.ts +2 -0
- package/dist/components/UI/MaterialSymbol/consts.js +3472 -0
- package/dist/components/UI/MaterialSymbol/consts.js.map +1 -0
- package/dist/components/UI/MaterialSymbol/index.d.ts +18 -0
- package/dist/components/UI/MaterialSymbol/index.js +46 -0
- package/dist/components/UI/MaterialSymbol/index.js.map +1 -0
- package/dist/components/UI/MaterialSymbol/types.d.ts +37 -0
- package/dist/components/UI/MaterialSymbol/types.js +2 -0
- package/dist/components/UI/MaterialSymbol/types.js.map +1 -0
- package/dist/components/UI/NoDataFound/index.d.ts +31 -0
- package/dist/components/UI/NoDataFound/index.js +215 -0
- package/dist/components/UI/NoDataFound/index.js.map +1 -0
- package/dist/components/UI/NoDataFound/noDataFoundPresets.d.ts +31 -0
- package/dist/components/UI/NoDataFound/noDataFoundPresets.js +99 -0
- package/dist/components/UI/NoDataFound/noDataFoundPresets.js.map +1 -0
- package/dist/components/UI/ReferenceCard.d.ts +16 -0
- package/dist/components/UI/ReferenceCard.js +59 -0
- package/dist/components/UI/ReferenceCard.js.map +1 -0
- package/dist/components/UI/RichTextContent.d.ts +14 -0
- package/dist/components/UI/RichTextContent.js +28 -0
- package/dist/components/UI/RichTextContent.js.map +1 -0
- package/dist/components/UI/SkeletonLoading.d.ts +9 -0
- package/dist/components/UI/SkeletonLoading.js +20 -0
- package/dist/components/UI/SkeletonLoading.js.map +1 -0
- package/dist/components/UI/ThreeDots.d.ts +11 -0
- package/dist/components/UI/ThreeDots.js +18 -0
- package/dist/components/UI/ThreeDots.js.map +1 -0
- package/dist/components/UI/Toast.d.ts +16 -0
- package/dist/components/UI/Toast.js +81 -0
- package/dist/components/UI/Toast.js.map +1 -0
- package/dist/components/UI/ToastHost.d.ts +2 -0
- package/dist/components/UI/ToastHost.js +25 -0
- package/dist/components/UI/ToastHost.js.map +1 -0
- package/dist/components/UI/TypingEffect.d.ts +10 -0
- package/dist/components/UI/TypingEffect.js +31 -0
- package/dist/components/UI/TypingEffect.js.map +1 -0
- package/dist/components/UI/UmodeLogo.d.ts +10 -0
- package/dist/components/UI/UmodeLogo.js +128 -0
- package/dist/components/UI/UmodeLogo.js.map +1 -0
- package/dist/components/UI/UsersAvatar.d.ts +7 -0
- package/dist/components/UI/UsersAvatar.js +29 -0
- package/dist/components/UI/UsersAvatar.js.map +1 -0
- package/dist/components/UI/access/UiAccessContext.d.ts +21 -0
- package/dist/components/UI/access/UiAccessContext.js +14 -0
- package/dist/components/UI/access/UiAccessContext.js.map +1 -0
- package/dist/components/UI/cells/ArrayCell.d.ts +5 -0
- package/dist/components/UI/cells/ArrayCell.js +25 -0
- package/dist/components/UI/cells/ArrayCell.js.map +1 -0
- package/dist/components/UI/cells/BooleanCell.d.ts +5 -0
- package/dist/components/UI/cells/BooleanCell.js +22 -0
- package/dist/components/UI/cells/BooleanCell.js.map +1 -0
- package/dist/components/UI/cells/DetailsTableCell.d.ts +7 -0
- package/dist/components/UI/cells/DetailsTableCell.js +30 -0
- package/dist/components/UI/cells/DetailsTableCell.js.map +1 -0
- package/dist/components/UI/cells/ProductImageCell.d.ts +5 -0
- package/dist/components/UI/cells/ProductImageCell.js +21 -0
- package/dist/components/UI/cells/ProductImageCell.js.map +1 -0
- package/dist/components/UI/cells/UrlLinkCell.d.ts +6 -0
- package/dist/components/UI/cells/UrlLinkCell.js +19 -0
- package/dist/components/UI/cells/UrlLinkCell.js.map +1 -0
- package/dist/components/Upload/SimpleUploaderComponent.d.ts +9 -0
- package/dist/components/Upload/SimpleUploaderComponent.js +72 -0
- package/dist/components/Upload/SimpleUploaderComponent.js.map +1 -0
- package/dist/components/Upload/UploaderComponent.d.ts +29 -0
- package/dist/components/Upload/UploaderComponent.js +241 -0
- package/dist/components/Upload/UploaderComponent.js.map +1 -0
- package/dist/components/Upload/XlsExportButton.d.ts +13 -0
- package/dist/components/Upload/XlsExportButton.js +47 -0
- package/dist/components/Upload/XlsExportButton.js.map +1 -0
- package/dist/helpers/composeRefs.d.ts +7 -0
- package/dist/helpers/composeRefs.js +14 -0
- package/dist/helpers/composeRefs.js.map +1 -0
- package/dist/helpers/dateHelpers.d.ts +47 -0
- package/dist/helpers/dateHelpers.js +69 -0
- package/dist/helpers/dateHelpers.js.map +1 -0
- package/dist/helpers/fileAttachments.d.ts +3 -0
- package/dist/helpers/fileAttachments.js +17 -0
- package/dist/helpers/fileAttachments.js.map +1 -0
- package/dist/helpers/formatHelpers.d.ts +36 -0
- package/dist/helpers/formatHelpers.js +65 -0
- package/dist/helpers/formatHelpers.js.map +1 -0
- package/dist/helpers/imageCompression.d.ts +5 -0
- package/dist/helpers/imageCompression.js +49 -0
- package/dist/helpers/imageCompression.js.map +1 -0
- package/dist/helpers/imageFile.d.ts +16 -0
- package/dist/helpers/imageFile.js +59 -0
- package/dist/helpers/imageFile.js.map +1 -0
- package/dist/helpers/layeredSurfaces.d.ts +10 -0
- package/dist/helpers/layeredSurfaces.js +14 -0
- package/dist/helpers/layeredSurfaces.js.map +1 -0
- package/dist/helpers/mathHelpers.d.ts +14 -0
- package/dist/helpers/mathHelpers.js +13 -0
- package/dist/helpers/mathHelpers.js.map +1 -0
- package/dist/helpers/mergeClasses.d.ts +6 -0
- package/dist/helpers/mergeClasses.js +12 -0
- package/dist/helpers/mergeClasses.js.map +1 -0
- package/dist/helpers/moduleLoadErrorHelpers.d.ts +1 -0
- package/dist/helpers/moduleLoadErrorHelpers.js +25 -0
- package/dist/helpers/moduleLoadErrorHelpers.js.map +1 -0
- package/dist/helpers/objectHelpers.d.ts +13 -0
- package/dist/helpers/objectHelpers.js +60 -0
- package/dist/helpers/objectHelpers.js.map +1 -0
- package/dist/helpers/richText.d.ts +37 -0
- package/dist/helpers/richText.js +171 -0
- package/dist/helpers/richText.js.map +1 -0
- package/dist/helpers/stringHelpers.d.ts +45 -0
- package/dist/helpers/stringHelpers.js +57 -0
- package/dist/helpers/stringHelpers.js.map +1 -0
- package/dist/helpers/themeTokens.d.ts +28 -0
- package/dist/helpers/themeTokens.js +33 -0
- package/dist/helpers/themeTokens.js.map +1 -0
- package/dist/helpers/uiErrorPresenter.d.ts +21 -0
- package/dist/helpers/uiErrorPresenter.js +10 -0
- package/dist/helpers/uiErrorPresenter.js.map +1 -0
- package/dist/helpers/uiLogger.d.ts +8 -0
- package/dist/helpers/uiLogger.js +16 -0
- package/dist/helpers/uiLogger.js.map +1 -0
- package/dist/helpers/uiPreferences.d.ts +13 -0
- package/dist/helpers/uiPreferences.js +35 -0
- package/dist/helpers/uiPreferences.js.map +1 -0
- package/dist/helpers/urlParamSync.d.ts +19 -0
- package/dist/helpers/urlParamSync.js +54 -0
- package/dist/helpers/urlParamSync.js.map +1 -0
- package/dist/helpers/utilityHelpers.d.ts +81 -0
- package/dist/helpers/utilityHelpers.js +133 -0
- package/dist/helpers/utilityHelpers.js.map +1 -0
- package/dist/helpers/validationHelpers.d.ts +36 -0
- package/dist/helpers/validationHelpers.js +44 -0
- package/dist/helpers/validationHelpers.js.map +1 -0
- package/dist/hooks/useAnchoredFloating.d.ts +22 -0
- package/dist/hooks/useAnchoredFloating.js +59 -0
- package/dist/hooks/useAnchoredFloating.js.map +1 -0
- package/dist/hooks/useBreakpoint.d.ts +16 -0
- package/dist/hooks/useBreakpoint.js +47 -0
- package/dist/hooks/useBreakpoint.js.map +1 -0
- package/dist/hooks/useDebounce.d.ts +8 -0
- package/dist/hooks/useDebounce.js +36 -0
- package/dist/hooks/useDebounce.js.map +1 -0
- package/dist/hooks/useFileAttachments.d.ts +43 -0
- package/dist/hooks/useFileAttachments.js +158 -0
- package/dist/hooks/useFileAttachments.js.map +1 -0
- package/dist/hooks/useHoverCapable.d.ts +6 -0
- package/dist/hooks/useHoverCapable.js +28 -0
- package/dist/hooks/useHoverCapable.js.map +1 -0
- package/dist/hooks/useInlineEditor.d.ts +5 -0
- package/dist/hooks/useInlineEditor.js +41 -0
- package/dist/hooks/useInlineEditor.js.map +1 -0
- package/dist/hooks/useMobile.d.ts +7 -0
- package/dist/hooks/useMobile.js +8 -0
- package/dist/hooks/useMobile.js.map +1 -0
- package/dist/hooks/useNotification.d.ts +38 -0
- package/dist/hooks/useNotification.js +39 -0
- package/dist/hooks/useNotification.js.map +1 -0
- package/dist/hooks/useResolvedTheme.d.ts +7 -0
- package/dist/hooks/useResolvedTheme.js +15 -0
- package/dist/hooks/useResolvedTheme.js.map +1 -0
- package/dist/hooks/useVoiceTranscription.d.ts +25 -0
- package/dist/hooks/useVoiceTranscription.js +106 -0
- package/dist/hooks/useVoiceTranscription.js.map +1 -0
- package/dist/index.d.ts +50 -0
- package/dist/index.js +125 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/IFileAttachment.d.ts +18 -0
- package/dist/interfaces/IFileAttachment.js +2 -0
- package/dist/interfaces/IFileAttachment.js.map +1 -0
- package/dist/interfaces/IFilterOption.d.ts +10 -0
- package/dist/interfaces/IFilterOption.js +2 -0
- package/dist/interfaces/IFilterOption.js.map +1 -0
- package/dist/locales/en/ui.json.d.ts +470 -0
- package/dist/locales/en/ui.json.js +99 -0
- package/dist/locales/en/ui.json.js.map +1 -0
- package/dist/locales/index.d.ts +938 -0
- package/dist/locales/index.js +7 -0
- package/dist/locales/index.js.map +1 -0
- package/dist/locales/pt/ui.json.d.ts +470 -0
- package/dist/locales/pt/ui.json.js +99 -0
- package/dist/locales/pt/ui.json.js.map +1 -0
- package/dist/motion/index.d.ts +2 -0
- package/dist/motion/index.js +17 -0
- package/dist/motion/index.js.map +1 -0
- package/dist/motion/motionPresets.d.ts +44 -0
- package/dist/motion/motionPresets.js +67 -0
- package/dist/motion/motionPresets.js.map +1 -0
- package/dist/motion/motionTokens.d.ts +40 -0
- package/dist/motion/motionTokens.js +29 -0
- package/dist/motion/motionTokens.js.map +1 -0
- package/package.json +174 -0
- package/src/assets/styles/theme.css +381 -0
- package/tailwind-plugins/glass.js +167 -0
- package/tailwind.preset.js +367 -0
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useMemo, useRef, useCallback, useEffect } from "react";
|
|
3
|
+
import { parse } from "date-fns";
|
|
4
|
+
import { useTranslation } from "react-i18next";
|
|
5
|
+
import DatePicker from "../../DateTime/DatePicker.js";
|
|
6
|
+
import DateRangePicker from "../../DateTime/DateRangePicker.js";
|
|
7
|
+
import ControlledCheckbox from "../../Form/ControlledCheckbox.js";
|
|
8
|
+
import ControlledInput from "../../Form/ControlledInput.js";
|
|
9
|
+
import { ControlledSelect } from "../../Form/ControlledSelect.js";
|
|
10
|
+
import ControlledSwitch from "../../Form/ControlledSwitch.js";
|
|
11
|
+
import OutlinedChip from "../../UI/Chips/OutlinedChip.js";
|
|
12
|
+
import NoDataFound from "../../UI/NoDataFound/index.js";
|
|
13
|
+
import SkeletonLoading from "../../UI/SkeletonLoading.js";
|
|
14
|
+
import { uiLogger } from "../../../helpers/uiLogger.js";
|
|
15
|
+
const asString = (value) => typeof value === "string" ? value : "";
|
|
16
|
+
const asStringArray = (value) => Array.isArray(value) ? value.map(String) : [];
|
|
17
|
+
const TextControl = ({ field, value, onChange, disabled }) => /* @__PURE__ */ jsx(
|
|
18
|
+
ControlledInput,
|
|
19
|
+
{
|
|
20
|
+
label: field.title,
|
|
21
|
+
placeholder: field.placeholder,
|
|
22
|
+
value: asString(value),
|
|
23
|
+
disabled,
|
|
24
|
+
onChange: (event) => onChange(event.target.value)
|
|
25
|
+
}
|
|
26
|
+
);
|
|
27
|
+
const NumberControl = ({ field, value, onChange, disabled }) => /* @__PURE__ */ jsx(
|
|
28
|
+
ControlledInput,
|
|
29
|
+
{
|
|
30
|
+
type: "number",
|
|
31
|
+
label: field.title,
|
|
32
|
+
placeholder: field.placeholder,
|
|
33
|
+
min: field.min,
|
|
34
|
+
max: field.max,
|
|
35
|
+
value: value === void 0 || value === null ? "" : String(value),
|
|
36
|
+
disabled,
|
|
37
|
+
onChange: (event) => onChange(event.target.value)
|
|
38
|
+
}
|
|
39
|
+
);
|
|
40
|
+
const SelectControl = ({ field, value, onChange, disabled }) => /* @__PURE__ */ jsx(
|
|
41
|
+
ControlledSelect,
|
|
42
|
+
{
|
|
43
|
+
label: field.title,
|
|
44
|
+
options: field.options ?? [],
|
|
45
|
+
selectedValue: asString(value),
|
|
46
|
+
searchable: field.searchable,
|
|
47
|
+
clearable: field.clearable ?? true,
|
|
48
|
+
disabled,
|
|
49
|
+
onChangeHook: (selected) => onChange(Array.isArray(selected) ? selected[0] ?? "" : selected)
|
|
50
|
+
}
|
|
51
|
+
);
|
|
52
|
+
const MultiSelectControl = ({
|
|
53
|
+
field,
|
|
54
|
+
value,
|
|
55
|
+
onChange,
|
|
56
|
+
disabled
|
|
57
|
+
}) => /* @__PURE__ */ jsx(
|
|
58
|
+
ControlledSelect,
|
|
59
|
+
{
|
|
60
|
+
multiple: true,
|
|
61
|
+
inFieldChips: true,
|
|
62
|
+
label: field.title,
|
|
63
|
+
options: field.options ?? [],
|
|
64
|
+
selectedValue: asStringArray(value),
|
|
65
|
+
searchable: field.searchable,
|
|
66
|
+
clearable: field.clearable ?? true,
|
|
67
|
+
disabled,
|
|
68
|
+
onChangeHook: (selected) => onChange(Array.isArray(selected) ? selected : [selected])
|
|
69
|
+
}
|
|
70
|
+
);
|
|
71
|
+
const AsyncSelectControl = ({
|
|
72
|
+
field,
|
|
73
|
+
value,
|
|
74
|
+
values,
|
|
75
|
+
onChange,
|
|
76
|
+
disabled
|
|
77
|
+
}) => {
|
|
78
|
+
const { t } = useTranslation("ui");
|
|
79
|
+
const [options, setOptions] = useState(field.initialOptions ?? []);
|
|
80
|
+
const [hasMore, setHasMore] = useState(false);
|
|
81
|
+
const [loading, setLoading] = useState(false);
|
|
82
|
+
const [failed, setFailed] = useState(false);
|
|
83
|
+
const pageRef = useRef(1);
|
|
84
|
+
const requestSeqRef = useRef(0);
|
|
85
|
+
const valuesRef = useRef(values);
|
|
86
|
+
valuesRef.current = values;
|
|
87
|
+
const loadPage = useCallback(
|
|
88
|
+
async (page, search, append) => {
|
|
89
|
+
const requestSeq = ++requestSeqRef.current;
|
|
90
|
+
setLoading(true);
|
|
91
|
+
setFailed(false);
|
|
92
|
+
try {
|
|
93
|
+
const result = await field.loadOptions({ page, search, values: valuesRef.current });
|
|
94
|
+
if (requestSeq !== requestSeqRef.current) return [];
|
|
95
|
+
const nextOptions = result?.options ?? [];
|
|
96
|
+
pageRef.current = page;
|
|
97
|
+
setHasMore(Boolean(result?.hasMore));
|
|
98
|
+
setOptions((previous) => append ? [...previous, ...nextOptions] : nextOptions);
|
|
99
|
+
return nextOptions;
|
|
100
|
+
} catch (error) {
|
|
101
|
+
if (requestSeq === requestSeqRef.current) {
|
|
102
|
+
uiLogger.error(`[FilterFieldControl] Failed to load options for "${field.key}"`, error);
|
|
103
|
+
setFailed(true);
|
|
104
|
+
}
|
|
105
|
+
return [];
|
|
106
|
+
} finally {
|
|
107
|
+
if (requestSeq === requestSeqRef.current) setLoading(false);
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
[field]
|
|
111
|
+
);
|
|
112
|
+
const dependencyKey = (field.dependsOn ?? []).map((key) => JSON.stringify(values?.[key])).join("|");
|
|
113
|
+
useEffect(() => {
|
|
114
|
+
let cancelled = false;
|
|
115
|
+
const run = async () => {
|
|
116
|
+
const loaded = await loadPage(1, void 0, false);
|
|
117
|
+
if (cancelled || loaded.length === 0) return;
|
|
118
|
+
};
|
|
119
|
+
void run();
|
|
120
|
+
return () => {
|
|
121
|
+
cancelled = true;
|
|
122
|
+
};
|
|
123
|
+
}, [dependencyKey, loadPage]);
|
|
124
|
+
const fetchMoreOptions = useCallback(
|
|
125
|
+
async ({ search, reset }) => {
|
|
126
|
+
const term = search.trim() === "" ? void 0 : search;
|
|
127
|
+
await loadPage(reset ? 1 : pageRef.current + 1, term, !reset);
|
|
128
|
+
},
|
|
129
|
+
[loadPage]
|
|
130
|
+
);
|
|
131
|
+
const selectedValue = field.multiple ? asStringArray(value) : asString(value);
|
|
132
|
+
if (failed) {
|
|
133
|
+
return /* @__PURE__ */ jsx(
|
|
134
|
+
NoDataFound,
|
|
135
|
+
{
|
|
136
|
+
size: "inline",
|
|
137
|
+
variant: "error",
|
|
138
|
+
message: t("filters.optionsError", { field: field.title }),
|
|
139
|
+
action: { label: t("actions.tryAgain"), onClick: () => void loadPage(1, void 0, false), icon: "refresh" }
|
|
140
|
+
}
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
return /* @__PURE__ */ jsx(
|
|
144
|
+
ControlledSelect,
|
|
145
|
+
{
|
|
146
|
+
label: field.title,
|
|
147
|
+
options,
|
|
148
|
+
selectedValue,
|
|
149
|
+
multiple: field.multiple,
|
|
150
|
+
inFieldChips: field.multiple,
|
|
151
|
+
searchable: field.searchable ?? true,
|
|
152
|
+
clearable: field.clearable ?? true,
|
|
153
|
+
disabled,
|
|
154
|
+
loading,
|
|
155
|
+
infiniteScroll: true,
|
|
156
|
+
hasMoreOptions: hasMore,
|
|
157
|
+
fetchMoreOptions,
|
|
158
|
+
onChangeHook: (selected) => onChange(
|
|
159
|
+
field.multiple ? Array.isArray(selected) ? selected : [selected] : Array.isArray(selected) ? selected[0] ?? "" : selected
|
|
160
|
+
)
|
|
161
|
+
}
|
|
162
|
+
);
|
|
163
|
+
};
|
|
164
|
+
const parseIsoDate = (value) => {
|
|
165
|
+
if (!value) return void 0;
|
|
166
|
+
const parsed = parse(value, "yyyy-MM-dd", /* @__PURE__ */ new Date());
|
|
167
|
+
return Number.isNaN(parsed.getTime()) ? void 0 : parsed;
|
|
168
|
+
};
|
|
169
|
+
const DateControl = ({ field, value, onChange, disabled }) => /* @__PURE__ */ jsx(
|
|
170
|
+
DatePicker,
|
|
171
|
+
{
|
|
172
|
+
label: field.title,
|
|
173
|
+
minDate: field.minDate,
|
|
174
|
+
maxDate: field.maxDate,
|
|
175
|
+
disabled,
|
|
176
|
+
startValue: parseIsoDate(asString(value)),
|
|
177
|
+
onUpdate: (next) => onChange(next ?? "")
|
|
178
|
+
}
|
|
179
|
+
);
|
|
180
|
+
const DateRangeControl = ({
|
|
181
|
+
field,
|
|
182
|
+
value,
|
|
183
|
+
onChange,
|
|
184
|
+
disabled
|
|
185
|
+
}) => {
|
|
186
|
+
const range = value ?? {};
|
|
187
|
+
const from = parseIsoDate(range.from);
|
|
188
|
+
const to = parseIsoDate(range.to);
|
|
189
|
+
return /* @__PURE__ */ jsx(
|
|
190
|
+
DateRangePicker,
|
|
191
|
+
{
|
|
192
|
+
label: field.title,
|
|
193
|
+
minDate: field.minDate,
|
|
194
|
+
maxDate: field.maxDate,
|
|
195
|
+
disabled,
|
|
196
|
+
startValue: from ? { from, to } : void 0,
|
|
197
|
+
onUpdate: (next) => onChange({ from: next.from, to: next.to })
|
|
198
|
+
}
|
|
199
|
+
);
|
|
200
|
+
};
|
|
201
|
+
const RangeControl = ({ field, value, onChange, disabled }) => {
|
|
202
|
+
const { t } = useTranslation("ui");
|
|
203
|
+
const range = value ?? {};
|
|
204
|
+
const update = (bound, raw) => {
|
|
205
|
+
const parsed = raw === "" ? void 0 : Number(raw);
|
|
206
|
+
onChange({ ...range, [bound]: Number.isNaN(parsed) ? void 0 : parsed });
|
|
207
|
+
};
|
|
208
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-y-1.5", children: [
|
|
209
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-foreground-muted", children: field.title }),
|
|
210
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-x-2", children: [
|
|
211
|
+
/* @__PURE__ */ jsx(
|
|
212
|
+
ControlledInput,
|
|
213
|
+
{
|
|
214
|
+
type: "number",
|
|
215
|
+
label: t("filters.rangeMin"),
|
|
216
|
+
min: field.min,
|
|
217
|
+
max: field.max,
|
|
218
|
+
disabled,
|
|
219
|
+
value: range.min === void 0 ? "" : String(range.min),
|
|
220
|
+
onChange: (event) => update("min", event.target.value)
|
|
221
|
+
}
|
|
222
|
+
),
|
|
223
|
+
/* @__PURE__ */ jsx("span", { className: "shrink-0 text-xs text-foreground-faint", children: t("filters.rangeSeparator") }),
|
|
224
|
+
/* @__PURE__ */ jsx(
|
|
225
|
+
ControlledInput,
|
|
226
|
+
{
|
|
227
|
+
type: "number",
|
|
228
|
+
label: t("filters.rangeMax"),
|
|
229
|
+
min: field.min,
|
|
230
|
+
max: field.max,
|
|
231
|
+
disabled,
|
|
232
|
+
value: range.max === void 0 ? "" : String(range.max),
|
|
233
|
+
onChange: (event) => update("max", event.target.value)
|
|
234
|
+
}
|
|
235
|
+
)
|
|
236
|
+
] })
|
|
237
|
+
] });
|
|
238
|
+
};
|
|
239
|
+
const BooleanControl = ({ field, value, onChange, disabled }) => /* @__PURE__ */ jsx(
|
|
240
|
+
ControlledSwitch,
|
|
241
|
+
{
|
|
242
|
+
checked: value === true,
|
|
243
|
+
disabled,
|
|
244
|
+
label: field.label ?? field.title,
|
|
245
|
+
onChange: (checked) => onChange(checked)
|
|
246
|
+
}
|
|
247
|
+
);
|
|
248
|
+
const CheckboxGroupControl = ({
|
|
249
|
+
field,
|
|
250
|
+
value,
|
|
251
|
+
onChange,
|
|
252
|
+
disabled
|
|
253
|
+
}) => {
|
|
254
|
+
const { t } = useTranslation("ui");
|
|
255
|
+
const [search, setSearch] = useState("");
|
|
256
|
+
const selected = asStringArray(value);
|
|
257
|
+
const options = useMemo(() => {
|
|
258
|
+
const list = field.options ?? [];
|
|
259
|
+
if (!field.searchable || search.trim().length === 0) return list;
|
|
260
|
+
const term = search.trim().toLowerCase();
|
|
261
|
+
return list.filter((option) => option.label.toLowerCase().includes(term));
|
|
262
|
+
}, [field.options, field.searchable, search]);
|
|
263
|
+
const toggle = (optionValue) => {
|
|
264
|
+
onChange(
|
|
265
|
+
selected.includes(optionValue) ? selected.filter((entry) => entry !== optionValue) : [...selected, optionValue]
|
|
266
|
+
);
|
|
267
|
+
};
|
|
268
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-y-2", children: [
|
|
269
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-foreground-muted", children: field.title }),
|
|
270
|
+
field.searchable && /* @__PURE__ */ jsx(
|
|
271
|
+
ControlledInput,
|
|
272
|
+
{
|
|
273
|
+
label: t("filters.searchOptions"),
|
|
274
|
+
value: search,
|
|
275
|
+
disabled,
|
|
276
|
+
onChange: (event) => setSearch(event.target.value)
|
|
277
|
+
}
|
|
278
|
+
),
|
|
279
|
+
/* @__PURE__ */ jsx("div", { className: "flex max-h-56 flex-col gap-y-1 overflow-y-auto", children: options.length === 0 ? /* @__PURE__ */ jsx(NoDataFound, { size: "inline", variant: "search", message: t("filters.noOptions") }) : options.map((option) => /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-x-2", children: [
|
|
280
|
+
/* @__PURE__ */ jsx(
|
|
281
|
+
ControlledCheckbox,
|
|
282
|
+
{
|
|
283
|
+
checked: selected.includes(option.value),
|
|
284
|
+
disabled,
|
|
285
|
+
label: option.label,
|
|
286
|
+
onChange: () => toggle(option.value)
|
|
287
|
+
}
|
|
288
|
+
),
|
|
289
|
+
option.secondaryLabel && /* @__PURE__ */ jsx("span", { className: "shrink-0 text-xs tabular-nums text-foreground-faint", children: option.secondaryLabel }),
|
|
290
|
+
option.swatch && /* @__PURE__ */ jsx(
|
|
291
|
+
"span",
|
|
292
|
+
{
|
|
293
|
+
className: "size-3 shrink-0 rounded-full border border-surface shadow-sm ring-1 ring-border",
|
|
294
|
+
style: { backgroundColor: option.swatch }
|
|
295
|
+
}
|
|
296
|
+
)
|
|
297
|
+
] }, option.value)) })
|
|
298
|
+
] });
|
|
299
|
+
};
|
|
300
|
+
const RadioControl = ({ field, value, onChange, disabled }) => {
|
|
301
|
+
const selected = asString(value);
|
|
302
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-y-2", children: [
|
|
303
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-foreground-muted", children: field.title }),
|
|
304
|
+
/* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-2", children: (field.options ?? []).map((option) => /* @__PURE__ */ jsx(
|
|
305
|
+
OutlinedChip,
|
|
306
|
+
{
|
|
307
|
+
label: option.label,
|
|
308
|
+
preserveLabelCase: true,
|
|
309
|
+
tone: selected === option.value ? "purple" : "neutral",
|
|
310
|
+
variant: selected === option.value ? "solid" : "outlined",
|
|
311
|
+
size: "sm",
|
|
312
|
+
disabled,
|
|
313
|
+
onClick: () => onChange(selected === option.value ? "" : option.value)
|
|
314
|
+
},
|
|
315
|
+
option.value
|
|
316
|
+
)) })
|
|
317
|
+
] });
|
|
318
|
+
};
|
|
319
|
+
const TagsControl = ({ field, value, onChange, disabled }) => {
|
|
320
|
+
const selected = asStringArray(value);
|
|
321
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-y-2", children: [
|
|
322
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-foreground-muted", children: field.title }),
|
|
323
|
+
/* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-2", children: (field.options ?? []).map((option) => {
|
|
324
|
+
const isSelected = selected.includes(option.value);
|
|
325
|
+
return /* @__PURE__ */ jsx(
|
|
326
|
+
OutlinedChip,
|
|
327
|
+
{
|
|
328
|
+
label: option.label,
|
|
329
|
+
preserveLabelCase: true,
|
|
330
|
+
tone: isSelected ? "purple" : "neutral",
|
|
331
|
+
variant: isSelected ? "solid" : "outlined",
|
|
332
|
+
size: "sm",
|
|
333
|
+
disabled,
|
|
334
|
+
onClick: () => onChange(isSelected ? selected.filter((entry) => entry !== option.value) : [...selected, option.value])
|
|
335
|
+
},
|
|
336
|
+
option.value
|
|
337
|
+
);
|
|
338
|
+
}) })
|
|
339
|
+
] });
|
|
340
|
+
};
|
|
341
|
+
const CustomControl = ({ field, value, onChange, disabled }) => /* @__PURE__ */ jsx(Fragment, { children: field.render({ value, onChange, disabled }) });
|
|
342
|
+
const FILTER_CONTROL_REGISTRY = {
|
|
343
|
+
text: TextControl,
|
|
344
|
+
number: NumberControl,
|
|
345
|
+
select: SelectControl,
|
|
346
|
+
multiselect: MultiSelectControl,
|
|
347
|
+
"async-select": AsyncSelectControl,
|
|
348
|
+
date: DateControl,
|
|
349
|
+
"date-range": DateRangeControl,
|
|
350
|
+
range: RangeControl,
|
|
351
|
+
boolean: BooleanControl,
|
|
352
|
+
"checkbox-group": CheckboxGroupControl,
|
|
353
|
+
radio: RadioControl,
|
|
354
|
+
tags: TagsControl,
|
|
355
|
+
custom: CustomControl
|
|
356
|
+
};
|
|
357
|
+
const FilterFieldControl = ({
|
|
358
|
+
field,
|
|
359
|
+
value,
|
|
360
|
+
values,
|
|
361
|
+
onChange,
|
|
362
|
+
disabled,
|
|
363
|
+
loading
|
|
364
|
+
}) => {
|
|
365
|
+
if (loading) return /* @__PURE__ */ jsx(SkeletonLoading, { className: "h-10 w-full rounded-lg" });
|
|
366
|
+
const Control = FILTER_CONTROL_REGISTRY[field.kind];
|
|
367
|
+
if (!Control) return null;
|
|
368
|
+
const control = /* @__PURE__ */ jsx(
|
|
369
|
+
Control,
|
|
370
|
+
{
|
|
371
|
+
field,
|
|
372
|
+
value,
|
|
373
|
+
values,
|
|
374
|
+
onChange,
|
|
375
|
+
disabled: disabled || field.disabled
|
|
376
|
+
}
|
|
377
|
+
);
|
|
378
|
+
if (!field.description) return control;
|
|
379
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-y-1", children: [
|
|
380
|
+
control,
|
|
381
|
+
/* @__PURE__ */ jsx("span", { className: "px-1 text-xs text-foreground-faint", children: field.description })
|
|
382
|
+
] });
|
|
383
|
+
};
|
|
384
|
+
export {
|
|
385
|
+
FilterFieldControl as default
|
|
386
|
+
};
|
|
387
|
+
//# sourceMappingURL=FilterFieldControl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterFieldControl.js","sources":["../../../../src/components/Search/filters/FilterFieldControl.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport * as React from 'react';\nimport { parse } from 'date-fns';\nimport { useTranslation } from 'react-i18next';\n\nimport DatePicker from '@/components/DateTime/DatePicker';\nimport DateRangePicker from '@/components/DateTime/DateRangePicker';\nimport ControlledCheckbox from '@/components/Form/ControlledCheckbox';\nimport ControlledInput from '@/components/Form/ControlledInput';\nimport { ControlledSelect, IControlledSelectFetchParams } from '@/components/Form/ControlledSelect';\nimport ControlledSwitch from '@/components/Form/ControlledSwitch';\nimport OutlinedChip from '@/components/UI/Chips/OutlinedChip';\nimport NoDataFound from '@/components/UI/NoDataFound';\nimport SkeletonLoading from '@/components/UI/SkeletonLoading';\nimport { uiLogger } from '@/helpers/uiLogger';\nimport { IFilterOption } from '@/interfaces/IFilterOption';\n\nimport {\n IFilterAsyncSelectField,\n IFilterBooleanField,\n IFilterCheckboxGroupField,\n IFilterCustomField,\n IFilterDateField,\n IFilterDateRangeField,\n IFilterDateRangeValue,\n IFilterMultiSelectField,\n IFilterNumberField,\n IFilterRadioField,\n IFilterRangeField,\n IFilterRangeValue,\n IFilterSelectField,\n IFilterTagsField,\n IFilterTextField,\n TFilterField,\n TFilterValues,\n} from './filterTypes';\n\nexport interface IFilterControlProps<TField extends TFilterField> {\n field: TField;\n value: unknown;\n values: TFilterValues;\n onChange: (value: unknown) => void;\n disabled?: boolean;\n}\n\nconst asString = (value: unknown): string => (typeof value === 'string' ? value : '');\nconst asStringArray = (value: unknown): Array<string> => (Array.isArray(value) ? value.map(String) : []);\n\n// ───── text / number ────────────────────────────────────────────────\n\nconst TextControl: React.FC<IFilterControlProps<IFilterTextField>> = ({ field, value, onChange, disabled }) => (\n <ControlledInput\n label={field.title}\n placeholder={field.placeholder}\n value={asString(value)}\n disabled={disabled}\n onChange={(event) => onChange(event.target.value)}\n />\n);\n\nconst NumberControl: React.FC<IFilterControlProps<IFilterNumberField>> = ({ field, value, onChange, disabled }) => (\n <ControlledInput\n type=\"number\"\n label={field.title}\n placeholder={field.placeholder}\n min={field.min}\n max={field.max}\n value={value === undefined || value === null ? '' : String(value)}\n disabled={disabled}\n onChange={(event) => onChange(event.target.value)}\n />\n);\n\n// ───── select family ────────────────────────────────────────────────\n\nconst SelectControl: React.FC<IFilterControlProps<IFilterSelectField>> = ({ field, value, onChange, disabled }) => (\n <ControlledSelect\n label={field.title}\n options={field.options ?? []}\n selectedValue={asString(value)}\n searchable={field.searchable}\n clearable={field.clearable ?? true}\n disabled={disabled}\n onChangeHook={(selected) => onChange(Array.isArray(selected) ? (selected[0] ?? '') : selected)}\n />\n);\n\nconst MultiSelectControl: React.FC<IFilterControlProps<IFilterMultiSelectField>> = ({\n field,\n value,\n onChange,\n disabled,\n}) => (\n <ControlledSelect\n multiple\n inFieldChips\n label={field.title}\n options={field.options ?? []}\n selectedValue={asStringArray(value)}\n searchable={field.searchable}\n clearable={field.clearable ?? true}\n disabled={disabled}\n onChangeHook={(selected) => onChange(Array.isArray(selected) ? selected : [selected])}\n />\n);\n\n/**\n * Owns paging, search and the option cache so consumers only answer\n * \"give me page N\". Previously every screen reimplemented this with its own\n * page counter, metadata state and loaded-once ref.\n */\nconst AsyncSelectControl: React.FC<IFilterControlProps<IFilterAsyncSelectField>> = ({\n field,\n value,\n values,\n onChange,\n disabled,\n}) => {\n const { t } = useTranslation('ui');\n const [options, setOptions] = useState<Array<IFilterOption>>(field.initialOptions ?? []);\n const [hasMore, setHasMore] = useState(false);\n const [loading, setLoading] = useState(false);\n const [failed, setFailed] = useState(false);\n const pageRef = useRef(1);\n // Discards responses that resolve after a newer request started (a search reset racing a\n // page append), so stale pages never overwrite fresher data.\n const requestSeqRef = useRef(0);\n const valuesRef = useRef(values);\n valuesRef.current = values;\n\n const loadPage = useCallback(\n async (page: number, search: string | undefined, append: boolean): Promise<Array<IFilterOption>> => {\n const requestSeq = ++requestSeqRef.current;\n setLoading(true);\n setFailed(false);\n try {\n const result = await field.loadOptions({ page, search, values: valuesRef.current });\n if (requestSeq !== requestSeqRef.current) return [];\n\n const nextOptions = result?.options ?? [];\n pageRef.current = page;\n setHasMore(Boolean(result?.hasMore));\n setOptions((previous) => (append ? [...previous, ...nextOptions] : nextOptions));\n\n return nextOptions;\n } catch (error) {\n if (requestSeq === requestSeqRef.current) {\n uiLogger.error(`[FilterFieldControl] Failed to load options for \"${field.key}\"`, error);\n setFailed(true);\n }\n\n return [];\n } finally {\n if (requestSeq === requestSeqRef.current) setLoading(false);\n }\n },\n [field],\n );\n\n const dependencyKey = (field.dependsOn ?? []).map((key) => JSON.stringify(values?.[key])).join('|');\n\n useEffect(() => {\n let cancelled = false;\n const run = async () => {\n const loaded = await loadPage(1, undefined, false);\n if (cancelled || loaded.length === 0) return;\n };\n void run();\n\n return () => {\n cancelled = true;\n };\n }, [dependencyKey, loadPage]);\n\n const fetchMoreOptions = useCallback(\n async ({ search, reset }: IControlledSelectFetchParams): Promise<void> => {\n const term = search.trim() === '' ? undefined : search;\n await loadPage(reset ? 1 : pageRef.current + 1, term, !reset);\n },\n [loadPage],\n );\n\n const selectedValue = field.multiple ? asStringArray(value) : asString(value);\n\n if (failed) {\n return (\n <NoDataFound\n size=\"inline\"\n variant=\"error\"\n message={t('filters.optionsError', { field: field.title })}\n action={{ label: t('actions.tryAgain'), onClick: () => void loadPage(1, undefined, false), icon: 'refresh' }}\n />\n );\n }\n\n return (\n <ControlledSelect\n label={field.title}\n options={options}\n selectedValue={selectedValue}\n multiple={field.multiple}\n inFieldChips={field.multiple}\n searchable={field.searchable ?? true}\n clearable={field.clearable ?? true}\n disabled={disabled}\n loading={loading}\n infiniteScroll\n hasMoreOptions={hasMore}\n fetchMoreOptions={fetchMoreOptions}\n onChangeHook={(selected) =>\n onChange(\n field.multiple\n ? Array.isArray(selected)\n ? selected\n : [selected]\n : Array.isArray(selected)\n ? (selected[0] ?? '')\n : selected,\n )\n }\n />\n );\n};\n\n// ───── dates ────────────────────────────────────────────────────────\n\nconst parseIsoDate = (value: string | undefined): Date | undefined => {\n if (!value) return undefined;\n const parsed = parse(value, 'yyyy-MM-dd', new Date());\n\n return Number.isNaN(parsed.getTime()) ? undefined : parsed;\n};\n\nconst DateControl: React.FC<IFilterControlProps<IFilterDateField>> = ({ field, value, onChange, disabled }) => (\n <DatePicker\n label={field.title}\n minDate={field.minDate}\n maxDate={field.maxDate}\n disabled={disabled}\n startValue={parseIsoDate(asString(value))}\n onUpdate={(next) => onChange(next ?? '')}\n />\n);\n\nconst DateRangeControl: React.FC<IFilterControlProps<IFilterDateRangeField>> = ({\n field,\n value,\n onChange,\n disabled,\n}) => {\n const range = (value ?? {}) as IFilterDateRangeValue;\n const from = parseIsoDate(range.from);\n const to = parseIsoDate(range.to);\n\n return (\n <DateRangePicker\n label={field.title}\n minDate={field.minDate}\n maxDate={field.maxDate}\n disabled={disabled}\n startValue={from ? { from, to } : undefined}\n onUpdate={(next) => onChange({ from: next.from, to: next.to })}\n />\n );\n};\n\n// ───── range ────────────────────────────────────────────────────────\n\nconst RangeControl: React.FC<IFilterControlProps<IFilterRangeField>> = ({ field, value, onChange, disabled }) => {\n const { t } = useTranslation('ui');\n const range = (value ?? {}) as IFilterRangeValue;\n\n const update = (bound: 'min' | 'max', raw: string) => {\n const parsed = raw === '' ? undefined : Number(raw);\n onChange({ ...range, [bound]: Number.isNaN(parsed as number) ? undefined : parsed });\n };\n\n return (\n <div className=\"flex flex-col gap-y-1.5\">\n <span className=\"text-xs font-medium text-foreground-muted\">{field.title}</span>\n <div className=\"flex items-center gap-x-2\">\n <ControlledInput\n type=\"number\"\n label={t('filters.rangeMin')}\n min={field.min}\n max={field.max}\n disabled={disabled}\n value={range.min === undefined ? '' : String(range.min)}\n onChange={(event) => update('min', event.target.value)}\n />\n <span className=\"shrink-0 text-xs text-foreground-faint\">{t('filters.rangeSeparator')}</span>\n <ControlledInput\n type=\"number\"\n label={t('filters.rangeMax')}\n min={field.min}\n max={field.max}\n disabled={disabled}\n value={range.max === undefined ? '' : String(range.max)}\n onChange={(event) => update('max', event.target.value)}\n />\n </div>\n </div>\n );\n};\n\n// ───── boolean / checkbox / radio / tags ────────────────────────────\n\nconst BooleanControl: React.FC<IFilterControlProps<IFilterBooleanField>> = ({ field, value, onChange, disabled }) => (\n <ControlledSwitch\n checked={value === true}\n disabled={disabled}\n label={field.label ?? field.title}\n onChange={(checked) => onChange(checked)}\n />\n);\n\nconst CheckboxGroupControl: React.FC<IFilterControlProps<IFilterCheckboxGroupField>> = ({\n field,\n value,\n onChange,\n disabled,\n}) => {\n const { t } = useTranslation('ui');\n const [search, setSearch] = useState('');\n const selected = asStringArray(value);\n const options = useMemo(() => {\n const list = field.options ?? [];\n if (!field.searchable || search.trim().length === 0) return list;\n const term = search.trim().toLowerCase();\n\n return list.filter((option) => option.label.toLowerCase().includes(term));\n }, [field.options, field.searchable, search]);\n\n const toggle = (optionValue: string) => {\n onChange(\n selected.includes(optionValue) ? selected.filter((entry) => entry !== optionValue) : [...selected, optionValue],\n );\n };\n\n return (\n <div className=\"flex flex-col gap-y-2\">\n <span className=\"text-xs font-medium text-foreground-muted\">{field.title}</span>\n {field.searchable && (\n <ControlledInput\n label={t('filters.searchOptions')}\n value={search}\n disabled={disabled}\n onChange={(event) => setSearch(event.target.value)}\n />\n )}\n <div className=\"flex max-h-56 flex-col gap-y-1 overflow-y-auto\">\n {options.length === 0 ? (\n <NoDataFound size=\"inline\" variant=\"search\" message={t('filters.noOptions')} />\n ) : (\n options.map((option) => (\n <div key={option.value} className=\"flex min-w-0 items-center gap-x-2\">\n <ControlledCheckbox\n checked={selected.includes(option.value)}\n disabled={disabled}\n label={option.label}\n onChange={() => toggle(option.value)}\n />\n {option.secondaryLabel && (\n <span className=\"shrink-0 text-xs tabular-nums text-foreground-faint\">{option.secondaryLabel}</span>\n )}\n {option.swatch && (\n <span\n className=\"size-3 shrink-0 rounded-full border border-surface shadow-sm ring-1 ring-border\"\n style={{ backgroundColor: option.swatch }}\n />\n )}\n </div>\n ))\n )}\n </div>\n </div>\n );\n};\n\nconst RadioControl: React.FC<IFilterControlProps<IFilterRadioField>> = ({ field, value, onChange, disabled }) => {\n const selected = asString(value);\n\n return (\n <div className=\"flex flex-col gap-y-2\">\n <span className=\"text-xs font-medium text-foreground-muted\">{field.title}</span>\n <div className=\"flex flex-wrap gap-2\">\n {(field.options ?? []).map((option) => (\n <OutlinedChip\n key={option.value}\n label={option.label}\n preserveLabelCase\n tone={selected === option.value ? 'purple' : 'neutral'}\n variant={selected === option.value ? 'solid' : 'outlined'}\n size=\"sm\"\n disabled={disabled}\n onClick={() => onChange(selected === option.value ? '' : option.value)}\n />\n ))}\n </div>\n </div>\n );\n};\n\nconst TagsControl: React.FC<IFilterControlProps<IFilterTagsField>> = ({ field, value, onChange, disabled }) => {\n const selected = asStringArray(value);\n\n return (\n <div className=\"flex flex-col gap-y-2\">\n <span className=\"text-xs font-medium text-foreground-muted\">{field.title}</span>\n <div className=\"flex flex-wrap gap-2\">\n {(field.options ?? []).map((option) => {\n const isSelected = selected.includes(option.value);\n\n return (\n <OutlinedChip\n key={option.value}\n label={option.label}\n preserveLabelCase\n tone={isSelected ? 'purple' : 'neutral'}\n variant={isSelected ? 'solid' : 'outlined'}\n size=\"sm\"\n disabled={disabled}\n onClick={() =>\n onChange(isSelected ? selected.filter((entry) => entry !== option.value) : [...selected, option.value])\n }\n />\n );\n })}\n </div>\n </div>\n );\n};\n\nconst CustomControl: React.FC<IFilterControlProps<IFilterCustomField>> = ({ field, value, onChange, disabled }) => (\n <>{field.render({ value, onChange, disabled })}</>\n);\n\n// ───── registry ─────────────────────────────────────────────────────\n\ntype TFilterControl = React.FC<IFilterControlProps<never>>;\n\nconst FILTER_CONTROL_REGISTRY: Record<TFilterField['kind'], TFilterControl> = {\n text: TextControl as TFilterControl,\n number: NumberControl as TFilterControl,\n select: SelectControl as TFilterControl,\n multiselect: MultiSelectControl as TFilterControl,\n 'async-select': AsyncSelectControl as TFilterControl,\n date: DateControl as TFilterControl,\n 'date-range': DateRangeControl as TFilterControl,\n range: RangeControl as TFilterControl,\n boolean: BooleanControl as TFilterControl,\n 'checkbox-group': CheckboxGroupControl as TFilterControl,\n radio: RadioControl as TFilterControl,\n tags: TagsControl as TFilterControl,\n custom: CustomControl as TFilterControl,\n};\n\ninterface IFilterFieldControlProps {\n field: TFilterField;\n value: unknown;\n values: TFilterValues;\n onChange: (value: unknown) => void;\n disabled?: boolean;\n loading?: boolean;\n}\n\nconst FilterFieldControl: React.FC<IFilterFieldControlProps> = ({\n field,\n value,\n values,\n onChange,\n disabled,\n loading,\n}) => {\n if (loading) return <SkeletonLoading className=\"h-10 w-full rounded-lg\" />;\n\n const Control = FILTER_CONTROL_REGISTRY[field.kind];\n if (!Control) return null;\n\n const control = (\n <Control\n field={field as never}\n value={value}\n values={values}\n onChange={onChange}\n disabled={disabled || field.disabled}\n />\n );\n\n if (!field.description) return control;\n\n return (\n <div className=\"flex flex-col gap-y-1\">\n {control}\n <span className=\"px-1 text-xs text-foreground-faint\">{field.description}</span>\n </div>\n );\n};\n\nexport default FilterFieldControl;\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { IFiltersButtonSummaryItem } from './filterTypes';
|
|
2
|
+
export type { IFiltersButtonSummaryItem };
|
|
3
|
+
export interface IFiltersButtonProps {
|
|
4
|
+
onClick?: () => void;
|
|
5
|
+
activeCount?: number;
|
|
6
|
+
/** Applied filters listed on hover. Complements the permanent count badge. */
|
|
7
|
+
activeFilters?: Array<IFiltersButtonSummaryItem>;
|
|
8
|
+
loading?: boolean;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
label?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Match the buttons standing next to it: `sm` next to a search field or in a
|
|
13
|
+
* dense toolbar, `md` when the neighbours are full-size page actions.
|
|
14
|
+
*/
|
|
15
|
+
size?: 'sm' | 'md';
|
|
16
|
+
className?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* The one trigger for every filter surface. Geometry matches the button the app
|
|
20
|
+
* has always used; the applied state is carried by colour and the count badge,
|
|
21
|
+
* so a filter is visible without hovering, and the hover adds the detail.
|
|
22
|
+
*/
|
|
23
|
+
declare const FiltersButton: import('react').ForwardRefExoticComponent<IFiltersButtonProps & import('react').RefAttributes<HTMLButtonElement>>;
|
|
24
|
+
export default FiltersButton;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef } from "react";
|
|
3
|
+
import classNames from "classnames";
|
|
4
|
+
import { useTranslation } from "react-i18next";
|
|
5
|
+
import ControlledButton from "../../Form/ControlledButton.js";
|
|
6
|
+
import LoadingSpinner from "../../UI/LoadingSpinner.js";
|
|
7
|
+
import { MaterialSymbol } from "../../UI/MaterialSymbol/index.js";
|
|
8
|
+
import FiltersSummaryTooltip from "./FiltersSummaryTooltip.js";
|
|
9
|
+
const FiltersButton = forwardRef(
|
|
10
|
+
({ onClick, activeCount = 0, activeFilters, loading, disabled, label, size = "sm", className, ...rest }, ref) => {
|
|
11
|
+
const { t } = useTranslation("ui");
|
|
12
|
+
const hasActiveFilters = activeCount > 0;
|
|
13
|
+
const trigger = /* @__PURE__ */ jsxs("span", { className: "relative inline-block", children: [
|
|
14
|
+
/* @__PURE__ */ jsxs(
|
|
15
|
+
ControlledButton,
|
|
16
|
+
{
|
|
17
|
+
...rest,
|
|
18
|
+
ref,
|
|
19
|
+
onClick,
|
|
20
|
+
disabled: disabled || loading,
|
|
21
|
+
variant: "outlined",
|
|
22
|
+
tone: "neutral",
|
|
23
|
+
size,
|
|
24
|
+
className: classNames(
|
|
25
|
+
"flex flex-row items-center justify-center gap-x-1 capitalize",
|
|
26
|
+
size === "sm" && "max-w-28",
|
|
27
|
+
hasActiveFilters && "border-brand-border bg-brand-soft text-brand-emphasis hover:bg-brand-soft",
|
|
28
|
+
className
|
|
29
|
+
),
|
|
30
|
+
children: [
|
|
31
|
+
loading ? /* @__PURE__ */ jsx(LoadingSpinner, { size: 5 }) : /* @__PURE__ */ jsx(MaterialSymbol, { icon: "filter_list_alt", size: 20 }),
|
|
32
|
+
label ?? t("actions.filter")
|
|
33
|
+
]
|
|
34
|
+
}
|
|
35
|
+
),
|
|
36
|
+
hasActiveFilters && /* @__PURE__ */ jsx("span", { className: "absolute -right-2 -top-2 flex size-5 cursor-default items-center justify-center rounded-full bg-brand text-xs text-brand-fg", children: activeCount })
|
|
37
|
+
] });
|
|
38
|
+
return /* @__PURE__ */ jsx(
|
|
39
|
+
FiltersSummaryTooltip,
|
|
40
|
+
{
|
|
41
|
+
items: activeFilters ?? [],
|
|
42
|
+
fallback: hasActiveFilters ? t("filters.appliedCount", { count: activeCount }) : void 0,
|
|
43
|
+
children: trigger
|
|
44
|
+
}
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
);
|
|
48
|
+
FiltersButton.displayName = "FiltersButton";
|
|
49
|
+
export {
|
|
50
|
+
FiltersButton as default
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=FiltersButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FiltersButton.js","sources":["../../../../src/components/Search/filters/FiltersButton.tsx"],"sourcesContent":["import { forwardRef } from 'react';\nimport classNames from 'classnames';\nimport { useTranslation } from 'react-i18next';\n\nimport ControlledButton from '@/components/Form/ControlledButton';\nimport LoadingSpinner from '@/components/UI/LoadingSpinner';\nimport { MaterialSymbol } from '@/components/UI/MaterialSymbol';\n\nimport FiltersSummaryTooltip from './FiltersSummaryTooltip';\nimport { IFiltersButtonSummaryItem } from './filterTypes';\n\nexport type { IFiltersButtonSummaryItem };\n\nexport interface IFiltersButtonProps {\n onClick?: () => void;\n activeCount?: number;\n /** Applied filters listed on hover. Complements the permanent count badge. */\n activeFilters?: Array<IFiltersButtonSummaryItem>;\n loading?: boolean;\n disabled?: boolean;\n label?: string;\n /**\n * Match the buttons standing next to it: `sm` next to a search field or in a\n * dense toolbar, `md` when the neighbours are full-size page actions.\n */\n size?: 'sm' | 'md';\n className?: string;\n}\n\n/**\n * The one trigger for every filter surface. Geometry matches the button the app\n * has always used; the applied state is carried by colour and the count badge,\n * so a filter is visible without hovering, and the hover adds the detail.\n */\nconst FiltersButton = forwardRef<HTMLButtonElement, IFiltersButtonProps>(\n ({ onClick, activeCount = 0, activeFilters, loading, disabled, label, size = 'sm', className, ...rest }, ref) => {\n const { t } = useTranslation('ui');\n const hasActiveFilters = activeCount > 0;\n\n const trigger = (\n <span className=\"relative inline-block\">\n <ControlledButton\n {...rest}\n ref={ref}\n onClick={onClick}\n disabled={disabled || loading}\n variant=\"outlined\"\n tone=\"neutral\"\n size={size}\n className={classNames(\n 'flex flex-row items-center justify-center gap-x-1 capitalize',\n size === 'sm' && 'max-w-28',\n hasActiveFilters && 'border-brand-border bg-brand-soft text-brand-emphasis hover:bg-brand-soft',\n className,\n )}\n >\n {loading ? <LoadingSpinner size={5} /> : <MaterialSymbol icon=\"filter_list_alt\" size={20} />}\n {label ?? t('actions.filter')}\n </ControlledButton>\n\n {hasActiveFilters && (\n <span className=\"absolute -right-2 -top-2 flex size-5 cursor-default items-center justify-center rounded-full bg-brand text-xs text-brand-fg\">\n {activeCount}\n </span>\n )}\n </span>\n );\n\n return (\n <FiltersSummaryTooltip\n items={activeFilters ?? []}\n fallback={hasActiveFilters ? t('filters.appliedCount', { count: activeCount }) : undefined}\n >\n {trigger}\n </FiltersSummaryTooltip>\n );\n },\n);\n\nFiltersButton.displayName = 'FiltersButton';\n\nexport default FiltersButton;\n"],"names":[],"mappings":";;;;;;;;AAkCA,MAAM,gBAAgB;AAAA,EACpB,CAAC,EAAE,SAAS,cAAc,GAAG,eAAe,SAAS,UAAU,OAAO,OAAO,MAAM,WAAW,GAAG,KAAA,GAAQ,QAAQ;AAC/G,UAAM,EAAE,EAAA,IAAM,eAAe,IAAI;AACjC,UAAM,mBAAmB,cAAc;AAEvC,UAAM,UACJ,qBAAC,QAAA,EAAK,WAAU,yBACd,UAAA;AAAA,MAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACE,GAAG;AAAA,UACJ;AAAA,UACA;AAAA,UACA,UAAU,YAAY;AAAA,UACtB,SAAQ;AAAA,UACR,MAAK;AAAA,UACL;AAAA,UACA,WAAW;AAAA,YACT;AAAA,YACA,SAAS,QAAQ;AAAA,YACjB,oBAAoB;AAAA,YACpB;AAAA,UAAA;AAAA,UAGD,UAAA;AAAA,YAAA,UAAU,oBAAC,gBAAA,EAAe,MAAM,EAAA,CAAG,wBAAM,gBAAA,EAAe,MAAK,mBAAkB,MAAM,GAAA,CAAI;AAAA,YACzF,SAAS,EAAE,gBAAgB;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAG7B,oBACC,oBAAC,QAAA,EAAK,WAAU,+HACb,UAAA,YAAA,CACH;AAAA,IAAA,GAEJ;AAGF,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO,iBAAiB,CAAA;AAAA,QACxB,UAAU,mBAAmB,EAAE,wBAAwB,EAAE,OAAO,YAAA,CAAa,IAAI;AAAA,QAEhF,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF;AAEA,cAAc,cAAc;"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { IFilterGroup, TFilterField, TFilterValues } from './filterTypes';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
export interface IFiltersFormProps {
|
|
4
|
+
fields: Array<TFilterField>;
|
|
5
|
+
groups?: Array<IFilterGroup>;
|
|
6
|
+
values: TFilterValues;
|
|
7
|
+
onValueChange: (key: string, value: unknown) => void;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
loading?: boolean;
|
|
10
|
+
emptyMessage?: string;
|
|
11
|
+
className?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Renders a schema. Knows nothing about drawers, so the same form powers the
|
|
15
|
+
* side panel, an inline bar and a popover.
|
|
16
|
+
*/
|
|
17
|
+
declare const FiltersForm: React.FC<IFiltersFormProps>;
|
|
18
|
+
export default FiltersForm;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo, useState } from "react";
|
|
3
|
+
import classNames from "classnames";
|
|
4
|
+
import { useTranslation } from "react-i18next";
|
|
5
|
+
import ControlledButton from "../../Form/ControlledButton.js";
|
|
6
|
+
import ControlledTooltip from "../../UI/ControlledTooltip.js";
|
|
7
|
+
import { MaterialSymbol } from "../../UI/MaterialSymbol/index.js";
|
|
8
|
+
import NoDataFound from "../../UI/NoDataFound/index.js";
|
|
9
|
+
import FilterFieldControl from "./FilterFieldControl.js";
|
|
10
|
+
import { getVisibleFilterFields } from "./filterValues.js";
|
|
11
|
+
const UNGROUPED = "__ungrouped";
|
|
12
|
+
const FiltersForm = ({
|
|
13
|
+
fields,
|
|
14
|
+
groups,
|
|
15
|
+
values,
|
|
16
|
+
onValueChange,
|
|
17
|
+
disabled,
|
|
18
|
+
loading,
|
|
19
|
+
emptyMessage,
|
|
20
|
+
className
|
|
21
|
+
}) => {
|
|
22
|
+
const { t } = useTranslation("ui");
|
|
23
|
+
const visibleFields = useMemo(() => getVisibleFilterFields(fields ?? [], values ?? {}), [fields, values]);
|
|
24
|
+
const renderableGroups = useMemo(() => {
|
|
25
|
+
const declared = groups ?? [];
|
|
26
|
+
if (declared.length === 0) return [{ group: null, fields: visibleFields }];
|
|
27
|
+
const byGroup = /* @__PURE__ */ new Map();
|
|
28
|
+
visibleFields.forEach((field) => {
|
|
29
|
+
const groupId = field.group ?? UNGROUPED;
|
|
30
|
+
byGroup.set(groupId, [...byGroup.get(groupId) ?? [], field]);
|
|
31
|
+
});
|
|
32
|
+
const result = [];
|
|
33
|
+
const ungrouped = byGroup.get(UNGROUPED) ?? [];
|
|
34
|
+
if (ungrouped.length > 0) result.push({ group: null, fields: ungrouped });
|
|
35
|
+
declared.forEach((group) => {
|
|
36
|
+
const groupFields = byGroup.get(group.id) ?? [];
|
|
37
|
+
if (groupFields.length > 0) result.push({ group, fields: groupFields });
|
|
38
|
+
});
|
|
39
|
+
return result;
|
|
40
|
+
}, [groups, visibleFields]);
|
|
41
|
+
const [collapsed, setCollapsed] = useState(() => {
|
|
42
|
+
const initial = {};
|
|
43
|
+
(groups ?? []).forEach((group) => {
|
|
44
|
+
if (group.collapsible && group.defaultOpen === false) initial[group.id] = true;
|
|
45
|
+
});
|
|
46
|
+
return initial;
|
|
47
|
+
});
|
|
48
|
+
if (visibleFields.length === 0 && !loading) {
|
|
49
|
+
return /* @__PURE__ */ jsx(NoDataFound, { size: "sm", variant: "empty", message: emptyMessage ?? t("filters.noFields") });
|
|
50
|
+
}
|
|
51
|
+
const renderField = (field) => {
|
|
52
|
+
const control = /* @__PURE__ */ jsx(
|
|
53
|
+
FilterFieldControl,
|
|
54
|
+
{
|
|
55
|
+
field,
|
|
56
|
+
value: values?.[field.key],
|
|
57
|
+
values: values ?? {},
|
|
58
|
+
onChange: (next) => onValueChange(field.key, next),
|
|
59
|
+
disabled,
|
|
60
|
+
loading
|
|
61
|
+
}
|
|
62
|
+
);
|
|
63
|
+
if (!field.disabled || !field.disabledReason) return /* @__PURE__ */ jsx("div", { children: control }, field.key);
|
|
64
|
+
return /* @__PURE__ */ jsx(ControlledTooltip, { className: "z-[9999]", content: field.disabledReason, children: /* @__PURE__ */ jsx("div", { children: control }) }, field.key);
|
|
65
|
+
};
|
|
66
|
+
return /* @__PURE__ */ jsx("div", { className: classNames("flex flex-col gap-y-4", className), children: renderableGroups.map(({ group, fields: groupFields }) => {
|
|
67
|
+
if (!group) {
|
|
68
|
+
return /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-y-4", children: groupFields.map(renderField) }, UNGROUPED);
|
|
69
|
+
}
|
|
70
|
+
const isCollapsed = Boolean(collapsed[group.id]);
|
|
71
|
+
return /* @__PURE__ */ jsxs(
|
|
72
|
+
"section",
|
|
73
|
+
{
|
|
74
|
+
className: "flex flex-col gap-y-3 border-t border-border-subtle pt-4 first:border-t-0 first:pt-0",
|
|
75
|
+
children: [
|
|
76
|
+
/* @__PURE__ */ jsxs(
|
|
77
|
+
ControlledButton,
|
|
78
|
+
{
|
|
79
|
+
defaultHtmlButton: true,
|
|
80
|
+
disabled: !group.collapsible,
|
|
81
|
+
onClick: () => group.collapsible && setCollapsed((prev) => ({ ...prev, [group.id]: !prev[group.id] })),
|
|
82
|
+
className: "flex w-full items-center justify-between gap-x-2 text-left",
|
|
83
|
+
children: [
|
|
84
|
+
/* @__PURE__ */ jsxs("span", { className: "flex items-center gap-x-2", children: [
|
|
85
|
+
group.icon && /* @__PURE__ */ jsx(MaterialSymbol, { icon: group.icon, size: 16, className: "text-brand-emphasis" }),
|
|
86
|
+
/* @__PURE__ */ jsxs("span", { className: "flex flex-col", children: [
|
|
87
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs font-semibold uppercase tracking-wide text-foreground-subtle", children: group.title }),
|
|
88
|
+
group.description && /* @__PURE__ */ jsx("span", { className: "text-xs text-foreground-faint", children: group.description })
|
|
89
|
+
] })
|
|
90
|
+
] }),
|
|
91
|
+
group.collapsible && /* @__PURE__ */ jsx(
|
|
92
|
+
MaterialSymbol,
|
|
93
|
+
{
|
|
94
|
+
icon: isCollapsed ? "expand_more" : "expand_less",
|
|
95
|
+
size: 18,
|
|
96
|
+
className: "text-foreground-faint"
|
|
97
|
+
}
|
|
98
|
+
)
|
|
99
|
+
]
|
|
100
|
+
}
|
|
101
|
+
),
|
|
102
|
+
!isCollapsed && /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-y-4", children: groupFields.map(renderField) })
|
|
103
|
+
]
|
|
104
|
+
},
|
|
105
|
+
group.id
|
|
106
|
+
);
|
|
107
|
+
}) });
|
|
108
|
+
};
|
|
109
|
+
export {
|
|
110
|
+
FiltersForm as default
|
|
111
|
+
};
|
|
112
|
+
//# sourceMappingURL=FiltersForm.js.map
|