@umodeapporg/ui 0.0.0-canary.ca10e69
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/README.md +78 -0
- 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 +467 -0
- package/dist/components/DateTime/DatePicker.d.ts +21 -0
- package/dist/components/DateTime/DatePicker.js +124 -0
- package/dist/components/DateTime/DatePicker.js.map +1 -0
- package/dist/components/DateTime/DateRangePicker.d.ts +21 -0
- package/dist/components/DateTime/DateRangePicker.js +208 -0
- package/dist/components/DateTime/DateRangePicker.js.map +1 -0
- package/dist/components/Form/ControlledButton.d.ts +25 -0
- package/dist/components/Form/ControlledButton.js +73 -0
- package/dist/components/Form/ControlledButton.js.map +1 -0
- package/dist/components/Form/ControlledCheckbox.d.ts +16 -0
- package/dist/components/Form/ControlledCheckbox.js +115 -0
- package/dist/components/Form/ControlledCheckbox.js.map +1 -0
- package/dist/components/Form/ControlledDialog.d.ts +51 -0
- package/dist/components/Form/ControlledDialog.js +191 -0
- package/dist/components/Form/ControlledDialog.js.map +1 -0
- package/dist/components/Form/ControlledDialogPrimitives.d.ts +53 -0
- package/dist/components/Form/ControlledDialogPrimitives.js +245 -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 +241 -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 +33 -0
- package/dist/components/Form/ControlledImage/index.js +110 -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 +53 -0
- package/dist/components/Form/ControlledSelect.js +797 -0
- package/dist/components/Form/ControlledSelect.js.map +1 -0
- package/dist/components/Form/ControlledSwitch.d.ts +21 -0
- package/dist/components/Form/ControlledSwitch.js +107 -0
- package/dist/components/Form/ControlledSwitch.js.map +1 -0
- package/dist/components/Form/ControlledTabs.d.ts +75 -0
- package/dist/components/Form/ControlledTabs.js +515 -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 +48 -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 +60 -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 +13 -0
- package/dist/components/Form/ControlledVoiceTextarea.js +99 -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/FieldLabel.d.ts +16 -0
- package/dist/components/Form/FieldLabel.js +7 -0
- package/dist/components/Form/FieldLabel.js.map +1 -0
- package/dist/components/Form/RichTextEditor.d.ts +86 -0
- package/dist/components/Form/RichTextEditor.js +581 -0
- package/dist/components/Form/RichTextEditor.js.map +1 -0
- package/dist/components/Form/attachments/AttachmentPreviewList.d.ts +22 -0
- package/dist/components/Form/attachments/AttachmentPreviewList.js +95 -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 +24 -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/LinkButton.d.ts +26 -0
- package/dist/components/Navigation/LinkButton.js +82 -0
- package/dist/components/Navigation/LinkButton.js.map +1 -0
- package/dist/components/Navigation/PageTitle.d.ts +95 -0
- package/dist/components/Navigation/PageTitle.js +241 -0
- package/dist/components/Navigation/PageTitle.js.map +1 -0
- package/dist/components/Navigation/PageTitleCollapseContext.d.ts +13 -0
- package/dist/components/Navigation/PageTitleCollapseContext.js +9 -0
- package/dist/components/Navigation/PageTitleCollapseContext.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/Navigation/ReactRouterNavigationAdapter.d.ts +7 -0
- package/dist/components/Navigation/ReactRouterNavigationAdapter.js +27 -0
- package/dist/components/Navigation/ReactRouterNavigationAdapter.js.map +1 -0
- package/dist/components/Navigation/UiNavigationContext.d.ts +38 -0
- package/dist/components/Navigation/UiNavigationContext.js +44 -0
- package/dist/components/Navigation/UiNavigationContext.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 +390 -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 +266 -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/Shell/AppHeader.d.ts +25 -0
- package/dist/components/Shell/AppHeader.js +69 -0
- package/dist/components/Shell/AppHeader.js.map +1 -0
- package/dist/components/Shell/AppShell.d.ts +22 -0
- package/dist/components/Shell/AppShell.js +146 -0
- package/dist/components/Shell/AppShell.js.map +1 -0
- package/dist/components/Shell/AppSidebar.d.ts +20 -0
- package/dist/components/Shell/AppSidebar.js +93 -0
- package/dist/components/Shell/AppSidebar.js.map +1 -0
- package/dist/components/Shell/LanguageToggle.d.ts +8 -0
- package/dist/components/Shell/LanguageToggle.js +59 -0
- package/dist/components/Shell/LanguageToggle.js.map +1 -0
- package/dist/components/Shell/PumpkinGlyph.d.ts +13 -0
- package/dist/components/Shell/PumpkinGlyph.js +29 -0
- package/dist/components/Shell/PumpkinGlyph.js.map +1 -0
- package/dist/components/Shell/SidebarMenu.d.ts +29 -0
- package/dist/components/Shell/SidebarMenu.js +254 -0
- package/dist/components/Shell/SidebarMenu.js.map +1 -0
- package/dist/components/Shell/ThemeToggle.d.ts +18 -0
- package/dist/components/Shell/ThemeToggle.js +68 -0
- package/dist/components/Shell/ThemeToggle.js.map +1 -0
- package/dist/components/Shell/headerControlStyles.d.ts +10 -0
- package/dist/components/Shell/headerControlStyles.js +11 -0
- package/dist/components/Shell/headerControlStyles.js.map +1 -0
- package/dist/components/Shell/sidebarFavorites.d.ts +21 -0
- package/dist/components/Shell/sidebarFavorites.js +69 -0
- package/dist/components/Shell/sidebarFavorites.js.map +1 -0
- package/dist/components/Shell/useSidebarState.d.ts +14 -0
- package/dist/components/Shell/useSidebarState.js +106 -0
- package/dist/components/Shell/useSidebarState.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 +27 -0
- package/dist/components/UI/BaseDataCard.js +170 -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 +127 -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 +190 -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 +95 -0
- package/dist/components/UI/ControlledAccordion.js.map +1 -0
- package/dist/components/UI/ControlledCollapse.d.ts +18 -0
- package/dist/components/UI/ControlledCollapse.js +40 -0
- package/dist/components/UI/ControlledCollapse.js.map +1 -0
- package/dist/components/UI/ControlledMenu.d.ts +79 -0
- package/dist/components/UI/ControlledMenu.js +234 -0
- package/dist/components/UI/ControlledMenu.js.map +1 -0
- package/dist/components/UI/ControlledPopover.d.ts +59 -0
- package/dist/components/UI/ControlledPopover.js +189 -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 +15 -0
- package/dist/components/UI/ControlledSlider.js +34 -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 +146 -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 +108 -0
- package/dist/components/UI/DataTable/DataTable.js +606 -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 +33 -0
- package/dist/components/UI/DataTable/DataTableBody.js +260 -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 +88 -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 +282 -0
- package/dist/components/UI/DataTable/DataTableBulkEditDialog.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableBulkEditRowsPicker.d.ts +13 -0
- package/dist/components/UI/DataTable/DataTableBulkEditRowsPicker.js +95 -0
- package/dist/components/UI/DataTable/DataTableBulkEditRowsPicker.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableBulkEditValueEditor.d.ts +20 -0
- package/dist/components/UI/DataTable/DataTableBulkEditValueEditor.js +94 -0
- package/dist/components/UI/DataTable/DataTableBulkEditValueEditor.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableColumnToggle.d.ts +34 -0
- package/dist/components/UI/DataTable/DataTableColumnToggle.js +170 -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 +65 -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 +149 -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 +110 -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 +54 -0
- package/dist/components/UI/DataTable/applyDataTableFilters.js.map +1 -0
- package/dist/components/UI/DataTable/bulkEditValues.d.ts +8 -0
- package/dist/components/UI/DataTable/bulkEditValues.js +13 -0
- package/dist/components/UI/DataTable/bulkEditValues.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 +36 -0
- package/dist/components/UI/DataTable/grid/GridProvider.js +128 -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 +82 -0
- package/dist/components/UI/DataTable/grid/gridStore.js +259 -0
- package/dist/components/UI/DataTable/grid/gridStore.js.map +1 -0
- package/dist/components/UI/DataTable/grid/gridTypes.d.ts +59 -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 +25 -0
- package/dist/components/UI/DataTable/grid/useGridKeyboard.js +135 -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 +535 -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 +336 -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/useDataTableUndoHistory.d.ts +30 -0
- package/dist/components/UI/DataTable/useDataTableUndoHistory.js +130 -0
- package/dist/components/UI/DataTable/useDataTableUndoHistory.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/Flow/FlowAnnotationDraftPreview.d.ts +6 -0
- package/dist/components/UI/Flow/FlowAnnotationDraftPreview.js +65 -0
- package/dist/components/UI/Flow/FlowAnnotationDraftPreview.js.map +1 -0
- package/dist/components/UI/Flow/FlowAnnotationNode.d.ts +34 -0
- package/dist/components/UI/Flow/FlowAnnotationNode.js +231 -0
- package/dist/components/UI/Flow/FlowAnnotationNode.js.map +1 -0
- package/dist/components/UI/Flow/FlowAnnotationToolbar.d.ts +32 -0
- package/dist/components/UI/Flow/FlowAnnotationToolbar.js +298 -0
- package/dist/components/UI/Flow/FlowAnnotationToolbar.js.map +1 -0
- package/dist/components/UI/Flow/FlowBlockNode.d.ts +35 -0
- package/dist/components/UI/Flow/FlowBlockNode.js +91 -0
- package/dist/components/UI/Flow/FlowBlockNode.js.map +1 -0
- package/dist/components/UI/Flow/FlowCanvas.d.ts +23 -0
- package/dist/components/UI/Flow/FlowCanvas.js +559 -0
- package/dist/components/UI/Flow/FlowCanvas.js.map +1 -0
- package/dist/components/UI/Flow/FlowConnectionEdge.d.ts +18 -0
- package/dist/components/UI/Flow/FlowConnectionEdge.js +116 -0
- package/dist/components/UI/Flow/FlowConnectionEdge.js.map +1 -0
- package/dist/components/UI/Flow/FlowEditorProvider.d.ts +17 -0
- package/dist/components/UI/Flow/FlowEditorProvider.js +27 -0
- package/dist/components/UI/Flow/FlowEditorProvider.js.map +1 -0
- package/dist/components/UI/Flow/FlowInspector.d.ts +11 -0
- package/dist/components/UI/Flow/FlowInspector.js +131 -0
- package/dist/components/UI/Flow/FlowInspector.js.map +1 -0
- package/dist/components/UI/Flow/FlowIssueList.d.ts +8 -0
- package/dist/components/UI/Flow/FlowIssueList.js +55 -0
- package/dist/components/UI/Flow/FlowIssueList.js.map +1 -0
- package/dist/components/UI/Flow/FlowLaneMap.d.ts +30 -0
- package/dist/components/UI/Flow/FlowLaneMap.js +206 -0
- package/dist/components/UI/Flow/FlowLaneMap.js.map +1 -0
- package/dist/components/UI/Flow/FlowNodeShell.d.ts +20 -0
- package/dist/components/UI/Flow/FlowNodeShell.js +81 -0
- package/dist/components/UI/Flow/FlowNodeShell.js.map +1 -0
- package/dist/components/UI/Flow/FlowResizablePanel.d.ts +20 -0
- package/dist/components/UI/Flow/FlowResizablePanel.js +118 -0
- package/dist/components/UI/Flow/FlowResizablePanel.js.map +1 -0
- package/dist/components/UI/Flow/FlowSelectionBar.d.ts +10 -0
- package/dist/components/UI/Flow/FlowSelectionBar.js +56 -0
- package/dist/components/UI/Flow/FlowSelectionBar.js.map +1 -0
- package/dist/components/UI/Flow/FlowZoomControls.d.ts +12 -0
- package/dist/components/UI/Flow/FlowZoomControls.js +54 -0
- package/dist/components/UI/Flow/FlowZoomControls.js.map +1 -0
- package/dist/components/UI/Flow/flowAnnotations.d.ts +38 -0
- package/dist/components/UI/Flow/flowAnnotations.js +123 -0
- package/dist/components/UI/Flow/flowAnnotations.js.map +1 -0
- package/dist/components/UI/Flow/flowBlockRegistry.d.ts +12 -0
- package/dist/components/UI/Flow/flowBlockRegistry.js +20 -0
- package/dist/components/UI/Flow/flowBlockRegistry.js.map +1 -0
- package/dist/components/UI/Flow/flowEditorStore.d.ts +73 -0
- package/dist/components/UI/Flow/flowEditorStore.js +402 -0
- package/dist/components/UI/Flow/flowEditorStore.js.map +1 -0
- package/dist/components/UI/Flow/flowGraph.d.ts +32 -0
- package/dist/components/UI/Flow/flowGraph.js +157 -0
- package/dist/components/UI/Flow/flowGraph.js.map +1 -0
- package/dist/components/UI/Flow/flowTypes.d.ts +104 -0
- package/dist/components/UI/Flow/flowTypes.js +2 -0
- package/dist/components/UI/Flow/flowTypes.js.map +1 -0
- package/dist/components/UI/Flow/flowViewport.d.ts +25 -0
- package/dist/components/UI/Flow/flowViewport.js +31 -0
- package/dist/components/UI/Flow/flowViewport.js.map +1 -0
- package/dist/components/UI/Flow/index.d.ts +13 -0
- package/dist/components/UI/Flow/index.js +44 -0
- package/dist/components/UI/Flow/index.js.map +1 -0
- package/dist/components/UI/Flow/useFlowAnnotationDrawing.d.ts +25 -0
- package/dist/components/UI/Flow/useFlowAnnotationDrawing.js +117 -0
- package/dist/components/UI/Flow/useFlowAnnotationDrawing.js.map +1 -0
- package/dist/components/UI/Flow/useFlowLabels.d.ts +10 -0
- package/dist/components/UI/Flow/useFlowLabels.js +51 -0
- package/dist/components/UI/Flow/useFlowLabels.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 +74 -0
- package/dist/components/UI/HorizontalScrollArea.js.map +1 -0
- package/dist/components/UI/ImageAiAdjust/ImageAiAdjustDialog.d.ts +21 -0
- package/dist/components/UI/ImageAiAdjust/ImageAiAdjustDialog.js +235 -0
- package/dist/components/UI/ImageAiAdjust/ImageAiAdjustDialog.js.map +1 -0
- package/dist/components/UI/ImageAiAdjust/ImageAiDiscardReasonDialog.d.ts +8 -0
- package/dist/components/UI/ImageAiAdjust/ImageAiDiscardReasonDialog.js +67 -0
- package/dist/components/UI/ImageAiAdjust/ImageAiDiscardReasonDialog.js.map +1 -0
- package/dist/components/UI/ImageAiAdjust/ImageAiVerificationNotice.d.ts +8 -0
- package/dist/components/UI/ImageAiAdjust/ImageAiVerificationNotice.js +39 -0
- package/dist/components/UI/ImageAiAdjust/ImageAiVerificationNotice.js.map +1 -0
- package/dist/components/UI/ImageAiAdjust/imageAiReview.d.ts +22 -0
- package/dist/components/UI/ImageAiAdjust/imageAiReview.js +37 -0
- package/dist/components/UI/ImageAiAdjust/imageAiReview.js.map +1 -0
- package/dist/components/UI/ImageAiAdjust/imageAiVerification.d.ts +19 -0
- package/dist/components/UI/ImageAiAdjust/imageAiVerification.js +25 -0
- package/dist/components/UI/ImageAiAdjust/imageAiVerification.js.map +1 -0
- package/dist/components/UI/ImageAiAdjust/useImageAiAdjust.d.ts +52 -0
- package/dist/components/UI/ImageAiAdjust/useImageAiAdjust.js +109 -0
- package/dist/components/UI/ImageAiAdjust/useImageAiAdjust.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/AnnotationEditor.d.ts +13 -0
- package/dist/components/UI/ImageAnnotator/AnnotationEditor.js +362 -0
- package/dist/components/UI/ImageAnnotator/AnnotationEditor.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/ImageAnnotationDialog.d.ts +15 -0
- package/dist/components/UI/ImageAnnotator/ImageAnnotationDialog.js +61 -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/AnnotationCropFrame.d.ts +16 -0
- package/dist/components/UI/ImageAnnotator/canvas/AnnotationCropFrame.js +156 -0
- package/dist/components/UI/ImageAnnotator/canvas/AnnotationCropFrame.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 +127 -0
- package/dist/components/UI/ImageAnnotator/canvas/AnnotationSelection.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/canvas/AnnotationStage.d.ts +26 -0
- package/dist/components/UI/ImageAnnotator/canvas/AnnotationStage.js +241 -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 +70 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationColorPopover.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationCropBar.d.ts +12 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationCropBar.js +89 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationCropBar.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 +17 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationTextOverlay.js +79 -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 +91 -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/annotationCrop.d.ts +12 -0
- package/dist/components/UI/ImageAnnotator/helpers/annotationCrop.js +64 -0
- package/dist/components/UI/ImageAnnotator/helpers/annotationCrop.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 +29 -0
- package/dist/components/UI/ImageAnnotator/hooks/useAnnotationDocument.js +160 -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 +80 -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 +98 -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/ImageMaskPainter/index.d.ts +24 -0
- package/dist/components/UI/ImageMaskPainter/index.js +284 -0
- package/dist/components/UI/ImageMaskPainter/index.js.map +1 -0
- package/dist/components/UI/ImageMaskPainter/maskStrokes.d.ts +19 -0
- package/dist/components/UI/ImageMaskPainter/maskStrokes.js +71 -0
- package/dist/components/UI/ImageMaskPainter/maskStrokes.js.map +1 -0
- package/dist/components/UI/ImagePlaceholder.d.ts +24 -0
- package/dist/components/UI/ImagePlaceholder.js +29 -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 +53 -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 +91 -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 +51 -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 +30 -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 +22 -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/UserMenu.d.ts +50 -0
- package/dist/components/UI/UserMenu.js +212 -0
- package/dist/components/UI/UserMenu.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/iconFont.d.ts +9 -0
- package/dist/helpers/iconFont.js +37 -0
- package/dist/helpers/iconFont.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 +32 -0
- package/dist/helpers/imageFile.js +108 -0
- package/dist/helpers/imageFile.js.map +1 -0
- package/dist/helpers/layeredSurfaces.d.ts +28 -0
- package/dist/helpers/layeredSurfaces.js +19 -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 +10 -0
- package/dist/helpers/mergeClasses.js +34 -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 +59 -0
- package/dist/helpers/objectHelpers.js.map +1 -0
- package/dist/helpers/portalHost.d.ts +10 -0
- package/dist/helpers/portalHost.js +7 -0
- package/dist/helpers/portalHost.js.map +1 -0
- package/dist/helpers/richText.d.ts +46 -0
- package/dist/helpers/richText.js +197 -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/themeSkins.d.ts +12 -0
- package/dist/helpers/themeSkins.js +13 -0
- package/dist/helpers/themeSkins.js.map +1 -0
- package/dist/helpers/themeTokens.d.ts +28 -0
- package/dist/helpers/themeTokens.js +35 -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 +42 -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/useThemeSkin.d.ts +7 -0
- package/dist/hooks/useThemeSkin.js +19 -0
- package/dist/hooks/useThemeSkin.js.map +1 -0
- package/dist/hooks/useVoiceTranscription.d.ts +29 -0
- package/dist/hooks/useVoiceTranscription.js +208 -0
- package/dist/hooks/useVoiceTranscription.js.map +1 -0
- package/dist/index.d.ts +63 -0
- package/dist/index.js +157 -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 +12 -0
- package/dist/interfaces/IFilterOption.js +2 -0
- package/dist/interfaces/IFilterOption.js.map +1 -0
- package/dist/locales/en/ui.json.d.ts +682 -0
- package/dist/locales/en/ui.json.js +120 -0
- package/dist/locales/en/ui.json.js.map +1 -0
- package/dist/locales/index.d.ts +1362 -0
- package/dist/locales/index.js +7 -0
- package/dist/locales/index.js.map +1 -0
- package/dist/locales/pt/ui.json.d.ts +682 -0
- package/dist/locales/pt/ui.json.js +120 -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 +245 -0
- package/src/assets/fonts/LICENSE-Inter.txt +92 -0
- package/src/assets/fonts/LICENSE-MaterialSymbols.txt +202 -0
- package/src/assets/fonts/LICENSE-Virgil.txt +45 -0
- package/src/assets/fonts/inter-latin-ext.woff2 +0 -0
- package/src/assets/fonts/inter-latin.woff2 +0 -0
- package/src/assets/fonts/material-symbols-outlined.woff2 +0 -0
- package/src/assets/fonts/virgil.woff2 +0 -0
- package/src/assets/styles/base.css +585 -0
- package/src/assets/styles/index.css +1 -0
- package/src/assets/styles/theme.css +453 -0
- package/tailwind-plugins/glass.js +162 -0
- package/tailwind.preset.js +392 -0
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import DOMPurify from "dompurify";
|
|
2
|
+
const MENTION_TAG = "user";
|
|
3
|
+
const RICH_TEXT_COLORS = [
|
|
4
|
+
"default",
|
|
5
|
+
"brand",
|
|
6
|
+
"info",
|
|
7
|
+
"success",
|
|
8
|
+
"warning",
|
|
9
|
+
"danger",
|
|
10
|
+
"accent",
|
|
11
|
+
"secondary",
|
|
12
|
+
"muted"
|
|
13
|
+
];
|
|
14
|
+
const RICH_TEXT_COLOR_CLASS = {
|
|
15
|
+
brand: "rt-color-brand",
|
|
16
|
+
secondary: "rt-color-secondary",
|
|
17
|
+
accent: "rt-color-accent",
|
|
18
|
+
success: "rt-color-success",
|
|
19
|
+
warning: "rt-color-warning",
|
|
20
|
+
danger: "rt-color-danger",
|
|
21
|
+
info: "rt-color-info",
|
|
22
|
+
muted: "rt-color-muted"
|
|
23
|
+
};
|
|
24
|
+
const RICH_TEXT_COLOR_SWATCH_CLASS = {
|
|
25
|
+
default: "bg-foreground",
|
|
26
|
+
brand: "bg-brand",
|
|
27
|
+
secondary: "bg-secondary",
|
|
28
|
+
accent: "bg-accent",
|
|
29
|
+
success: "bg-success",
|
|
30
|
+
warning: "bg-warning",
|
|
31
|
+
danger: "bg-danger",
|
|
32
|
+
info: "bg-info",
|
|
33
|
+
muted: "bg-foreground-faint"
|
|
34
|
+
};
|
|
35
|
+
const RICH_TEXT_FILE_CLASS = "rt-file";
|
|
36
|
+
const RICH_TEXT_IMAGE_CLASS = "rt-image";
|
|
37
|
+
const RICH_TEXT_IMAGE_LINK_CLASS = "rt-image-link";
|
|
38
|
+
const COLOR_CLASS_LIST = Object.values(RICH_TEXT_COLOR_CLASS);
|
|
39
|
+
const ALLOWED_CLASSES = /* @__PURE__ */ new Set([
|
|
40
|
+
...COLOR_CLASS_LIST,
|
|
41
|
+
RICH_TEXT_FILE_CLASS,
|
|
42
|
+
RICH_TEXT_IMAGE_CLASS,
|
|
43
|
+
RICH_TEXT_IMAGE_LINK_CLASS
|
|
44
|
+
]);
|
|
45
|
+
const ALLOWED_TAGS = [
|
|
46
|
+
MENTION_TAG,
|
|
47
|
+
"p",
|
|
48
|
+
"br",
|
|
49
|
+
"div",
|
|
50
|
+
"span",
|
|
51
|
+
"b",
|
|
52
|
+
"strong",
|
|
53
|
+
"i",
|
|
54
|
+
"em",
|
|
55
|
+
"s",
|
|
56
|
+
"strike",
|
|
57
|
+
"u",
|
|
58
|
+
"ul",
|
|
59
|
+
"ol",
|
|
60
|
+
"li",
|
|
61
|
+
"blockquote",
|
|
62
|
+
"a",
|
|
63
|
+
"img"
|
|
64
|
+
];
|
|
65
|
+
const ALLOWED_ATTR = ["href", "target", "rel", "class", "src", "alt", "width", "height"];
|
|
66
|
+
let hookRegistered = false;
|
|
67
|
+
const registerSanitizerHooks = () => {
|
|
68
|
+
if (hookRegistered) return;
|
|
69
|
+
hookRegistered = true;
|
|
70
|
+
DOMPurify.addHook("afterSanitizeAttributes", (node) => {
|
|
71
|
+
const element = node;
|
|
72
|
+
if (element.tagName === "A") {
|
|
73
|
+
element.setAttribute("target", "_blank");
|
|
74
|
+
element.setAttribute("rel", "noopener noreferrer");
|
|
75
|
+
}
|
|
76
|
+
if (!element.getAttribute?.("class")) return;
|
|
77
|
+
const kept = (element.getAttribute("class") ?? "").split(/\s+/).filter((className) => ALLOWED_CLASSES.has(className));
|
|
78
|
+
if (kept.length) element.setAttribute("class", kept.join(" "));
|
|
79
|
+
else element.removeAttribute("class");
|
|
80
|
+
});
|
|
81
|
+
};
|
|
82
|
+
const isPlainTextBody = (html) => {
|
|
83
|
+
if (!html) return true;
|
|
84
|
+
return !/<(?!\/?user\b)[a-z][^>]*>/i.test(html);
|
|
85
|
+
};
|
|
86
|
+
const sanitizeRichText = (html) => {
|
|
87
|
+
if (!html) return "";
|
|
88
|
+
registerSanitizerHooks();
|
|
89
|
+
return DOMPurify.sanitize(html, {
|
|
90
|
+
ALLOWED_TAGS,
|
|
91
|
+
ALLOWED_ATTR,
|
|
92
|
+
ALLOW_DATA_ATTR: false
|
|
93
|
+
});
|
|
94
|
+
};
|
|
95
|
+
const richTextToPlainText = (html) => {
|
|
96
|
+
if (!html) return "";
|
|
97
|
+
const parsed = new DOMParser().parseFromString(sanitizeRichText(html), "text/html");
|
|
98
|
+
return (parsed.body.textContent ?? "").trim();
|
|
99
|
+
};
|
|
100
|
+
const isRichTextEmpty = (html) => {
|
|
101
|
+
if (richTextToPlainText(html).length > 0) return false;
|
|
102
|
+
const parsed = new DOMParser().parseFromString(sanitizeRichText(html), "text/html");
|
|
103
|
+
return parsed.body.querySelector(`img, .${RICH_TEXT_FILE_CLASS}`) === null;
|
|
104
|
+
};
|
|
105
|
+
const HTML_ESCAPES = {
|
|
106
|
+
"&": "&",
|
|
107
|
+
"<": "<",
|
|
108
|
+
">": ">"
|
|
109
|
+
};
|
|
110
|
+
const plainTextToRichHtml = (text) => {
|
|
111
|
+
if (!text) return "";
|
|
112
|
+
return text.replace(/[&<>]/g, (character) => HTML_ESCAPES[character] ?? character).replace(/\n/g, "<br>");
|
|
113
|
+
};
|
|
114
|
+
const toEditableRichHtml = (value) => isPlainTextBody(value) ? plainTextToRichHtml(value) : value ?? "";
|
|
115
|
+
const COLOR_SENTINEL_HEX = "#010203";
|
|
116
|
+
const COLOR_SENTINEL_RGB = "rgb(1,2,3)";
|
|
117
|
+
const stripColorClasses = (element) => {
|
|
118
|
+
COLOR_CLASS_LIST.forEach((className) => element.classList.remove(className));
|
|
119
|
+
if (!element.classList.length) element.removeAttribute("class");
|
|
120
|
+
};
|
|
121
|
+
const unwrapIfBare = (element) => {
|
|
122
|
+
if (element.tagName !== "SPAN" || element.attributes.length > 0) return;
|
|
123
|
+
const parent = element.parentNode;
|
|
124
|
+
if (!parent) return;
|
|
125
|
+
while (element.firstChild) parent.insertBefore(element.firstChild, element);
|
|
126
|
+
parent.removeChild(element);
|
|
127
|
+
};
|
|
128
|
+
const normalizeRichTextColorNodes = (editor, color) => {
|
|
129
|
+
const targetClass = color === "default" ? "" : RICH_TEXT_COLOR_CLASS[color];
|
|
130
|
+
editor.querySelectorAll('[style*="color"]').forEach((node) => {
|
|
131
|
+
if (node.style.color.replace(/\s/g, "") !== COLOR_SENTINEL_RGB) return;
|
|
132
|
+
node.style.removeProperty("color");
|
|
133
|
+
if (!node.getAttribute("style")) node.removeAttribute("style");
|
|
134
|
+
node.querySelectorAll("[class]").forEach(stripColorClasses);
|
|
135
|
+
stripColorClasses(node);
|
|
136
|
+
if (targetClass) node.classList.add(targetClass);
|
|
137
|
+
else unwrapIfBare(node);
|
|
138
|
+
});
|
|
139
|
+
};
|
|
140
|
+
const applyRichTextColor = (editor, color) => {
|
|
141
|
+
document.execCommand("styleWithCSS", false, "true");
|
|
142
|
+
document.execCommand("foreColor", false, COLOR_SENTINEL_HEX);
|
|
143
|
+
normalizeRichTextColorNodes(editor, color);
|
|
144
|
+
};
|
|
145
|
+
const activeRichTextColor = (editor) => {
|
|
146
|
+
const selection = window.getSelection();
|
|
147
|
+
const anchor = selection?.anchorNode;
|
|
148
|
+
if (!anchor) return "default";
|
|
149
|
+
const element = anchor.nodeType === Node.ELEMENT_NODE ? anchor : anchor.parentElement;
|
|
150
|
+
if (!element || !editor.contains(element)) return "default";
|
|
151
|
+
const colored = element.closest(COLOR_CLASS_LIST.map((className) => `.${className}`).join(","));
|
|
152
|
+
if (!colored || !editor.contains(colored)) return "default";
|
|
153
|
+
const match = Object.entries(RICH_TEXT_COLOR_CLASS).find(
|
|
154
|
+
([, className]) => colored.classList.contains(className)
|
|
155
|
+
);
|
|
156
|
+
return match?.[0] ?? "default";
|
|
157
|
+
};
|
|
158
|
+
const isImageAttachment = (attachment) => attachment.kind === "image" || attachment.mimeType?.startsWith("image/") === true;
|
|
159
|
+
const buildFileChipMarkup = (attachment) => {
|
|
160
|
+
const link = document.createElement("a");
|
|
161
|
+
link.setAttribute("href", attachment.url);
|
|
162
|
+
link.setAttribute("target", "_blank");
|
|
163
|
+
link.setAttribute("rel", "noopener noreferrer");
|
|
164
|
+
if (!isImageAttachment(attachment)) {
|
|
165
|
+
link.setAttribute("class", RICH_TEXT_FILE_CLASS);
|
|
166
|
+
link.textContent = attachment.name;
|
|
167
|
+
return link.outerHTML;
|
|
168
|
+
}
|
|
169
|
+
const image = document.createElement("img");
|
|
170
|
+
image.setAttribute("src", attachment.url);
|
|
171
|
+
image.setAttribute("alt", attachment.name);
|
|
172
|
+
image.setAttribute("class", RICH_TEXT_IMAGE_CLASS);
|
|
173
|
+
if (attachment.width) image.setAttribute("width", String(attachment.width));
|
|
174
|
+
if (attachment.height) image.setAttribute("height", String(attachment.height));
|
|
175
|
+
link.setAttribute("class", RICH_TEXT_IMAGE_LINK_CLASS);
|
|
176
|
+
link.appendChild(image);
|
|
177
|
+
return link.outerHTML;
|
|
178
|
+
};
|
|
179
|
+
export {
|
|
180
|
+
RICH_TEXT_COLORS,
|
|
181
|
+
RICH_TEXT_COLOR_CLASS,
|
|
182
|
+
RICH_TEXT_COLOR_SWATCH_CLASS,
|
|
183
|
+
RICH_TEXT_FILE_CLASS,
|
|
184
|
+
RICH_TEXT_IMAGE_CLASS,
|
|
185
|
+
RICH_TEXT_IMAGE_LINK_CLASS,
|
|
186
|
+
activeRichTextColor,
|
|
187
|
+
applyRichTextColor,
|
|
188
|
+
buildFileChipMarkup,
|
|
189
|
+
isPlainTextBody,
|
|
190
|
+
isRichTextEmpty,
|
|
191
|
+
normalizeRichTextColorNodes,
|
|
192
|
+
plainTextToRichHtml,
|
|
193
|
+
richTextToPlainText,
|
|
194
|
+
sanitizeRichText,
|
|
195
|
+
toEditableRichHtml
|
|
196
|
+
};
|
|
197
|
+
//# sourceMappingURL=richText.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"richText.js","sources":["../../src/helpers/richText.ts"],"sourcesContent":["import DOMPurify from 'dompurify';\n\nimport { IFileAttachment } from '../interfaces/IFileAttachment';\n\n/**\n * Rich text authored in this app is HTML written by a user, so nothing here reaches the DOM\n * without passing through the sanitizer first, and nothing the editor writes may carry a\n * literal colour: a hex picked under the light theme is unreadable under the dark one. Colour\n * travels as one of these class names and the theme resolves it, so the same stored string\n * stays legible in both.\n */\nconst MENTION_TAG = 'user';\n\nexport type TRichTextColor =\n 'default' | 'brand' | 'secondary' | 'accent' | 'success' | 'warning' | 'danger' | 'info' | 'muted';\n\nexport const RICH_TEXT_COLORS: Array<TRichTextColor> = [\n 'default',\n 'brand',\n 'info',\n 'success',\n 'warning',\n 'danger',\n 'accent',\n 'secondary',\n 'muted',\n];\n\nexport const RICH_TEXT_COLOR_CLASS: Record<Exclude<TRichTextColor, 'default'>, string> = {\n brand: 'rt-color-brand',\n secondary: 'rt-color-secondary',\n accent: 'rt-color-accent',\n success: 'rt-color-success',\n warning: 'rt-color-warning',\n danger: 'rt-color-danger',\n info: 'rt-color-info',\n muted: 'rt-color-muted',\n};\n\n/** The swatch shown in the palette: a token-driven background, never the stored value. */\nexport const RICH_TEXT_COLOR_SWATCH_CLASS: Record<TRichTextColor, string> = {\n default: 'bg-foreground',\n brand: 'bg-brand',\n secondary: 'bg-secondary',\n accent: 'bg-accent',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-danger',\n info: 'bg-info',\n muted: 'bg-foreground-faint',\n};\n\nexport const RICH_TEXT_FILE_CLASS = 'rt-file';\n/** An image written INTO the body, as opposed to a file referenced by name. */\nexport const RICH_TEXT_IMAGE_CLASS = 'rt-image';\nexport const RICH_TEXT_IMAGE_LINK_CLASS = 'rt-image-link';\n\nconst COLOR_CLASS_LIST = Object.values(RICH_TEXT_COLOR_CLASS);\nconst ALLOWED_CLASSES = new Set<string>([\n ...COLOR_CLASS_LIST,\n RICH_TEXT_FILE_CLASS,\n RICH_TEXT_IMAGE_CLASS,\n RICH_TEXT_IMAGE_LINK_CLASS,\n]);\n\nconst ALLOWED_TAGS = [\n MENTION_TAG,\n 'p',\n 'br',\n 'div',\n 'span',\n 'b',\n 'strong',\n 'i',\n 'em',\n 's',\n 'strike',\n 'u',\n 'ul',\n 'ol',\n 'li',\n 'blockquote',\n 'a',\n 'img',\n];\n\nconst ALLOWED_ATTR = ['href', 'target', 'rel', 'class', 'src', 'alt', 'width', 'height'];\n\nlet hookRegistered = false;\n\nconst registerSanitizerHooks = (): void => {\n if (hookRegistered) return;\n hookRegistered = true;\n\n DOMPurify.addHook('afterSanitizeAttributes', (node) => {\n const element = node as HTMLElement;\n\n // A link authored by someone else must not be able to reach back into this tab.\n if (element.tagName === 'A') {\n element.setAttribute('target', '_blank');\n element.setAttribute('rel', 'noopener noreferrer');\n }\n\n if (!element.getAttribute?.('class')) return;\n\n const kept = (element.getAttribute('class') ?? '')\n .split(/\\s+/)\n .filter((className) => ALLOWED_CLASSES.has(className));\n\n if (kept.length) element.setAttribute('class', kept.join(' '));\n else element.removeAttribute('class');\n });\n};\n\n/**\n * Text written before the rich editor existed is plain text with real line breaks. Rendered as\n * HTML those breaks collapse, so the renderer needs to know which format it is looking at.\n */\nexport const isPlainTextBody = (html?: string): boolean => {\n if (!html) return true;\n\n return !/<(?!\\/?user\\b)[a-z][^>]*>/i.test(html);\n};\n\nexport const sanitizeRichText = (html?: string): string => {\n if (!html) return '';\n\n registerSanitizerHooks();\n\n return DOMPurify.sanitize(html, {\n ALLOWED_TAGS,\n ALLOWED_ATTR,\n ALLOW_DATA_ATTR: false,\n });\n};\n\n/** Emptiness has to be measured on the text: an editor the user only clicked into holds `<br>`. */\nexport const richTextToPlainText = (html?: string): string => {\n if (!html) return '';\n\n const parsed = new DOMParser().parseFromString(sanitizeRichText(html), 'text/html');\n return (parsed.body.textContent ?? '').trim();\n};\n\n/**\n * A body whose only content is an attachment has no text at all, so measuring emptiness on the\n * text alone would throw away the picture the user just wrote into the field.\n */\nexport const isRichTextEmpty = (html?: string): boolean => {\n if (richTextToPlainText(html).length > 0) return false;\n\n const parsed = new DOMParser().parseFromString(sanitizeRichText(html), 'text/html');\n return parsed.body.querySelector(`img, .${RICH_TEXT_FILE_CLASS}`) === null;\n};\n\nconst HTML_ESCAPES: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>',\n};\n\n/**\n * Seeds the editor from a value stored before the field became rich text. The line structure is\n * preserved and the text is escaped, so nothing in it is read as markup.\n */\nexport const plainTextToRichHtml = (text?: string): string => {\n if (!text) return '';\n\n return text.replace(/[&<>]/g, (character) => HTML_ESCAPES[character] ?? character).replace(/\\n/g, '<br>');\n};\n\n/** The value as the editor should receive it, whichever format it was stored in. */\nexport const toEditableRichHtml = (value?: string): string =>\n isPlainTextBody(value) ? plainTextToRichHtml(value) : (value ?? '');\n\n/**\n * `foreColor` is the only command that knows how to split a partial selection, so the colour is\n * applied through it with a value nothing else in the app uses, and the nodes it just produced\n * are then rewritten to the theme class. Nothing keeps the literal colour.\n */\nconst COLOR_SENTINEL_HEX = '#010203';\nconst COLOR_SENTINEL_RGB = 'rgb(1,2,3)';\n\nconst stripColorClasses = (element: HTMLElement): void => {\n COLOR_CLASS_LIST.forEach((className) => element.classList.remove(className));\n if (!element.classList.length) element.removeAttribute('class');\n};\n\nconst unwrapIfBare = (element: HTMLElement): void => {\n if (element.tagName !== 'SPAN' || element.attributes.length > 0) return;\n\n const parent = element.parentNode;\n if (!parent) return;\n\n while (element.firstChild) parent.insertBefore(element.firstChild, element);\n parent.removeChild(element);\n};\n\n/**\n * Rewrites whatever `foreColor` just produced. Called again on every input because a colour\n * chosen with no selection only materialises on the next typed character: without this pass\n * that character would keep the literal sentinel colour, which the sanitizer drops.\n */\nexport const normalizeRichTextColorNodes = (editor: HTMLElement, color: TRichTextColor): void => {\n const targetClass = color === 'default' ? '' : RICH_TEXT_COLOR_CLASS[color];\n\n editor.querySelectorAll<HTMLElement>('[style*=\"color\"]').forEach((node) => {\n if (node.style.color.replace(/\\s/g, '') !== COLOR_SENTINEL_RGB) return;\n\n node.style.removeProperty('color');\n if (!node.getAttribute('style')) node.removeAttribute('style');\n\n node.querySelectorAll<HTMLElement>('[class]').forEach(stripColorClasses);\n stripColorClasses(node);\n\n if (targetClass) node.classList.add(targetClass);\n else unwrapIfBare(node);\n });\n};\n\nexport const applyRichTextColor = (editor: HTMLElement, color: TRichTextColor): void => {\n document.execCommand('styleWithCSS', false, 'true');\n document.execCommand('foreColor', false, COLOR_SENTINEL_HEX);\n normalizeRichTextColorNodes(editor, color);\n};\n\n/** The colour of the text under the caret, so the palette can show what is currently applied. */\nexport const activeRichTextColor = (editor: HTMLElement): TRichTextColor => {\n const selection = window.getSelection();\n const anchor = selection?.anchorNode;\n if (!anchor) return 'default';\n\n const element = anchor.nodeType === Node.ELEMENT_NODE ? (anchor as HTMLElement) : anchor.parentElement;\n if (!element || !editor.contains(element)) return 'default';\n\n const colored = element.closest<HTMLElement>(COLOR_CLASS_LIST.map((className) => `.${className}`).join(','));\n if (!colored || !editor.contains(colored)) return 'default';\n\n const match = (Object.entries(RICH_TEXT_COLOR_CLASS) as Array<[Exclude<TRichTextColor, 'default'>, string]>).find(\n ([, className]) => colored.classList.contains(className),\n );\n\n return match?.[0] ?? 'default';\n};\n\nconst isImageAttachment = (attachment: IFileAttachment): boolean =>\n attachment.kind === 'image' || attachment.mimeType?.startsWith('image/') === true;\n\n/**\n * An uploaded file referenced from inside the body. Hosts that have no attachment field of\n * their own still keep the reference, because it travels in the same string the text does.\n * An image is written as the picture itself, wrapped in the link that opens it at full size:\n * a name-only chip hides what was attached, and the reader has no way to look at it.\n */\nexport const buildFileChipMarkup = (attachment: IFileAttachment): string => {\n const link = document.createElement('a');\n link.setAttribute('href', attachment.url);\n link.setAttribute('target', '_blank');\n link.setAttribute('rel', 'noopener noreferrer');\n\n if (!isImageAttachment(attachment)) {\n link.setAttribute('class', RICH_TEXT_FILE_CLASS);\n link.textContent = attachment.name;\n return link.outerHTML;\n }\n\n const image = document.createElement('img');\n image.setAttribute('src', attachment.url);\n image.setAttribute('alt', attachment.name);\n image.setAttribute('class', RICH_TEXT_IMAGE_CLASS);\n if (attachment.width) image.setAttribute('width', String(attachment.width));\n if (attachment.height) image.setAttribute('height', String(attachment.height));\n\n link.setAttribute('class', RICH_TEXT_IMAGE_LINK_CLASS);\n link.appendChild(image);\n return link.outerHTML;\n};\n"],"names":[],"mappings":";AAWA,MAAM,cAAc;AAKb,MAAM,mBAA0C;AAAA,EACrD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,MAAM,wBAA4E;AAAA,EACvF,OAAO;AAAA,EACP,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AACT;AAGO,MAAM,+BAA+D;AAAA,EAC1E,SAAS;AAAA,EACT,OAAO;AAAA,EACP,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AACT;AAEO,MAAM,uBAAuB;AAE7B,MAAM,wBAAwB;AAC9B,MAAM,6BAA6B;AAE1C,MAAM,mBAAmB,OAAO,OAAO,qBAAqB;AAC5D,MAAM,sCAAsB,IAAY;AAAA,EACtC,GAAG;AAAA,EACH;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,MAAM,eAAe;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,MAAM,eAAe,CAAC,QAAQ,UAAU,OAAO,SAAS,OAAO,OAAO,SAAS,QAAQ;AAEvF,IAAI,iBAAiB;AAErB,MAAM,yBAAyB,MAAY;AACzC,MAAI,eAAgB;AACpB,mBAAiB;AAEjB,YAAU,QAAQ,2BAA2B,CAAC,SAAS;AACrD,UAAM,UAAU;AAGhB,QAAI,QAAQ,YAAY,KAAK;AAC3B,cAAQ,aAAa,UAAU,QAAQ;AACvC,cAAQ,aAAa,OAAO,qBAAqB;AAAA,IACnD;AAEA,QAAI,CAAC,QAAQ,eAAe,OAAO,EAAG;AAEtC,UAAM,QAAQ,QAAQ,aAAa,OAAO,KAAK,IAC5C,MAAM,KAAK,EACX,OAAO,CAAC,cAAc,gBAAgB,IAAI,SAAS,CAAC;AAEvD,QAAI,KAAK,OAAQ,SAAQ,aAAa,SAAS,KAAK,KAAK,GAAG,CAAC;AAAA,QACxD,SAAQ,gBAAgB,OAAO;AAAA,EACtC,CAAC;AACH;AAMO,MAAM,kBAAkB,CAAC,SAA2B;AACzD,MAAI,CAAC,KAAM,QAAO;AAElB,SAAO,CAAC,6BAA6B,KAAK,IAAI;AAChD;AAEO,MAAM,mBAAmB,CAAC,SAA0B;AACzD,MAAI,CAAC,KAAM,QAAO;AAElB,yBAAA;AAEA,SAAO,UAAU,SAAS,MAAM;AAAA,IAC9B;AAAA,IACA;AAAA,IACA,iBAAiB;AAAA,EAAA,CAClB;AACH;AAGO,MAAM,sBAAsB,CAAC,SAA0B;AAC5D,MAAI,CAAC,KAAM,QAAO;AAElB,QAAM,SAAS,IAAI,UAAA,EAAY,gBAAgB,iBAAiB,IAAI,GAAG,WAAW;AAClF,UAAQ,OAAO,KAAK,eAAe,IAAI,KAAA;AACzC;AAMO,MAAM,kBAAkB,CAAC,SAA2B;AACzD,MAAI,oBAAoB,IAAI,EAAE,SAAS,EAAG,QAAO;AAEjD,QAAM,SAAS,IAAI,UAAA,EAAY,gBAAgB,iBAAiB,IAAI,GAAG,WAAW;AAClF,SAAO,OAAO,KAAK,cAAc,SAAS,oBAAoB,EAAE,MAAM;AACxE;AAEA,MAAM,eAAuC;AAAA,EAC3C,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AACP;AAMO,MAAM,sBAAsB,CAAC,SAA0B;AAC5D,MAAI,CAAC,KAAM,QAAO;AAElB,SAAO,KAAK,QAAQ,UAAU,CAAC,cAAc,aAAa,SAAS,KAAK,SAAS,EAAE,QAAQ,OAAO,MAAM;AAC1G;AAGO,MAAM,qBAAqB,CAAC,UACjC,gBAAgB,KAAK,IAAI,oBAAoB,KAAK,IAAK,SAAS;AAOlE,MAAM,qBAAqB;AAC3B,MAAM,qBAAqB;AAE3B,MAAM,oBAAoB,CAAC,YAA+B;AACxD,mBAAiB,QAAQ,CAAC,cAAc,QAAQ,UAAU,OAAO,SAAS,CAAC;AAC3E,MAAI,CAAC,QAAQ,UAAU,OAAQ,SAAQ,gBAAgB,OAAO;AAChE;AAEA,MAAM,eAAe,CAAC,YAA+B;AACnD,MAAI,QAAQ,YAAY,UAAU,QAAQ,WAAW,SAAS,EAAG;AAEjE,QAAM,SAAS,QAAQ;AACvB,MAAI,CAAC,OAAQ;AAEb,SAAO,QAAQ,WAAY,QAAO,aAAa,QAAQ,YAAY,OAAO;AAC1E,SAAO,YAAY,OAAO;AAC5B;AAOO,MAAM,8BAA8B,CAAC,QAAqB,UAAgC;AAC/F,QAAM,cAAc,UAAU,YAAY,KAAK,sBAAsB,KAAK;AAE1E,SAAO,iBAA8B,kBAAkB,EAAE,QAAQ,CAAC,SAAS;AACzE,QAAI,KAAK,MAAM,MAAM,QAAQ,OAAO,EAAE,MAAM,mBAAoB;AAEhE,SAAK,MAAM,eAAe,OAAO;AACjC,QAAI,CAAC,KAAK,aAAa,OAAO,EAAG,MAAK,gBAAgB,OAAO;AAE7D,SAAK,iBAA8B,SAAS,EAAE,QAAQ,iBAAiB;AACvE,sBAAkB,IAAI;AAEtB,QAAI,YAAa,MAAK,UAAU,IAAI,WAAW;AAAA,sBAC7B,IAAI;AAAA,EACxB,CAAC;AACH;AAEO,MAAM,qBAAqB,CAAC,QAAqB,UAAgC;AACtF,WAAS,YAAY,gBAAgB,OAAO,MAAM;AAClD,WAAS,YAAY,aAAa,OAAO,kBAAkB;AAC3D,8BAA4B,QAAQ,KAAK;AAC3C;AAGO,MAAM,sBAAsB,CAAC,WAAwC;AAC1E,QAAM,YAAY,OAAO,aAAA;AACzB,QAAM,SAAS,WAAW;AAC1B,MAAI,CAAC,OAAQ,QAAO;AAEpB,QAAM,UAAU,OAAO,aAAa,KAAK,eAAgB,SAAyB,OAAO;AACzF,MAAI,CAAC,WAAW,CAAC,OAAO,SAAS,OAAO,EAAG,QAAO;AAElD,QAAM,UAAU,QAAQ,QAAqB,iBAAiB,IAAI,CAAC,cAAc,IAAI,SAAS,EAAE,EAAE,KAAK,GAAG,CAAC;AAC3G,MAAI,CAAC,WAAW,CAAC,OAAO,SAAS,OAAO,EAAG,QAAO;AAElD,QAAM,QAAS,OAAO,QAAQ,qBAAqB,EAA0D;AAAA,IAC3G,CAAC,CAAA,EAAG,SAAS,MAAM,QAAQ,UAAU,SAAS,SAAS;AAAA,EAAA;AAGzD,SAAO,QAAQ,CAAC,KAAK;AACvB;AAEA,MAAM,oBAAoB,CAAC,eACzB,WAAW,SAAS,WAAW,WAAW,UAAU,WAAW,QAAQ,MAAM;AAQxE,MAAM,sBAAsB,CAAC,eAAwC;AAC1E,QAAM,OAAO,SAAS,cAAc,GAAG;AACvC,OAAK,aAAa,QAAQ,WAAW,GAAG;AACxC,OAAK,aAAa,UAAU,QAAQ;AACpC,OAAK,aAAa,OAAO,qBAAqB;AAE9C,MAAI,CAAC,kBAAkB,UAAU,GAAG;AAClC,SAAK,aAAa,SAAS,oBAAoB;AAC/C,SAAK,cAAc,WAAW;AAC9B,WAAO,KAAK;AAAA,EACd;AAEA,QAAM,QAAQ,SAAS,cAAc,KAAK;AAC1C,QAAM,aAAa,OAAO,WAAW,GAAG;AACxC,QAAM,aAAa,OAAO,WAAW,IAAI;AACzC,QAAM,aAAa,SAAS,qBAAqB;AACjD,MAAI,WAAW,MAAO,OAAM,aAAa,SAAS,OAAO,WAAW,KAAK,CAAC;AAC1E,MAAI,WAAW,OAAQ,OAAM,aAAa,UAAU,OAAO,WAAW,MAAM,CAAC;AAE7E,OAAK,aAAa,SAAS,0BAA0B;AACrD,OAAK,YAAY,KAAK;AACtB,SAAO,KAAK;AACd;"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Truncate text to a specified length and append ellipsis
|
|
3
|
+
* @param value - The text to truncate
|
|
4
|
+
* @param length - Maximum length before truncation (default: 100)
|
|
5
|
+
* @returns Truncated text with ellipsis or original text if shorter than limit
|
|
6
|
+
*/
|
|
7
|
+
export declare const sliceText: (value: string, length?: number) => string;
|
|
8
|
+
/**
|
|
9
|
+
* Capitalize the first letter of a string and lowercase the rest
|
|
10
|
+
* @param str - The string to capitalize
|
|
11
|
+
* @param allWords - If true, capitalizes the first letter of each word
|
|
12
|
+
* @returns Capitalized string or empty string if invalid input
|
|
13
|
+
*/
|
|
14
|
+
export declare const capitalize: (str?: string, allWords?: boolean) => string;
|
|
15
|
+
/**
|
|
16
|
+
* Capitalize the first letter of each word in a string
|
|
17
|
+
* @param str - The string to capitalize
|
|
18
|
+
* @returns String with each word capitalized or empty string if invalid input
|
|
19
|
+
*/
|
|
20
|
+
export declare const capitalizeAllLetters: (str?: string) => string;
|
|
21
|
+
/**
|
|
22
|
+
* Normalize text by removing accents and converting to lowercase
|
|
23
|
+
* @param text - The text to normalize
|
|
24
|
+
* @returns Normalized text without accents in lowercase
|
|
25
|
+
*/
|
|
26
|
+
export declare function normalizeText(text: string): string;
|
|
27
|
+
/**
|
|
28
|
+
* Check if a parameter contains a search term (case and accent insensitive)
|
|
29
|
+
* @param param - The text to search in
|
|
30
|
+
* @param search - The search term
|
|
31
|
+
* @returns True if the search term is found in the parameter
|
|
32
|
+
*/
|
|
33
|
+
export declare const formatFilter: (param: string | undefined | null, search: string | number) => boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Extract the first name from a full name
|
|
36
|
+
* @param name - The full name string
|
|
37
|
+
* @returns The first word/name from the full name
|
|
38
|
+
*/
|
|
39
|
+
export declare const getFirstName: (name: string) => string;
|
|
40
|
+
/**
|
|
41
|
+
* Generate avatar letters from a user's name
|
|
42
|
+
* @param name - The user's full name
|
|
43
|
+
* @returns 1-2 uppercase letters for avatar display (first + last name initials)
|
|
44
|
+
*/
|
|
45
|
+
export declare const getUserAvatarLetters: (name: string) => string;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
const sliceText = (value, length = 100) => {
|
|
2
|
+
if (value === void 0 || value.length < length) return value;
|
|
3
|
+
return `${value.slice(0, length)}...`;
|
|
4
|
+
};
|
|
5
|
+
const LOWERCASE_LETTER_PATTERN = /\p{Ll}/u;
|
|
6
|
+
const UPPERCASE_LETTER_PATTERN = /\p{Lu}/u;
|
|
7
|
+
const hasDeliberateCasing = (word) => LOWERCASE_LETTER_PATTERN.test(word) && UPPERCASE_LETTER_PATTERN.test(word.slice(1));
|
|
8
|
+
const capitalizeWord = (word) => hasDeliberateCasing(word) ? word : word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
|
|
9
|
+
const capitalize = (str, allWords = false) => {
|
|
10
|
+
if (!str || typeof str !== "string") return "";
|
|
11
|
+
if (allWords) return str.split(" ").map(capitalizeWord).join(" ");
|
|
12
|
+
const [firstWord, ...otherWords] = str.split(" ");
|
|
13
|
+
return [
|
|
14
|
+
capitalizeWord(firstWord),
|
|
15
|
+
...otherWords.map((word) => hasDeliberateCasing(word) ? word : word.toLowerCase())
|
|
16
|
+
].join(" ");
|
|
17
|
+
};
|
|
18
|
+
const capitalizeAllLetters = (str) => {
|
|
19
|
+
if (!str || typeof str !== "string") return "";
|
|
20
|
+
return str.split(" ").map(capitalizeWord).join(" ");
|
|
21
|
+
};
|
|
22
|
+
function normalizeText(text) {
|
|
23
|
+
if (text === void 0 || text === null) return "";
|
|
24
|
+
text = text.toLowerCase();
|
|
25
|
+
text = text.replace(/[áàãâä]/g, "a");
|
|
26
|
+
text = text.replace(/[éèêë]/g, "e");
|
|
27
|
+
text = text.replace(/[íìîï]/g, "i");
|
|
28
|
+
text = text.replace(/[óòõôö]/g, "o");
|
|
29
|
+
text = text.replace(/[úùûü]/g, "u");
|
|
30
|
+
text = text.replace(/[ç]/g, "c");
|
|
31
|
+
return text;
|
|
32
|
+
}
|
|
33
|
+
const formatFilter = (param, search) => normalizeText(param || "").includes(normalizeText(String(search)));
|
|
34
|
+
const getFirstName = (name) => {
|
|
35
|
+
return (name ?? "").split(" ")[0];
|
|
36
|
+
};
|
|
37
|
+
const getUserAvatarLetters = (name) => {
|
|
38
|
+
if (!name) return "";
|
|
39
|
+
if (typeof name !== "string") return "";
|
|
40
|
+
if (!name.includes(" ")) {
|
|
41
|
+
return name.substring(0, 2).toUpperCase();
|
|
42
|
+
}
|
|
43
|
+
const words = name.split(" ");
|
|
44
|
+
const ret = [words[0]];
|
|
45
|
+
if (words.length > 1) ret.push(words.slice(-1)[0]);
|
|
46
|
+
return ret.map((word) => word[0]).join("").toUpperCase();
|
|
47
|
+
};
|
|
48
|
+
export {
|
|
49
|
+
capitalize,
|
|
50
|
+
capitalizeAllLetters,
|
|
51
|
+
formatFilter,
|
|
52
|
+
getFirstName,
|
|
53
|
+
getUserAvatarLetters,
|
|
54
|
+
normalizeText,
|
|
55
|
+
sliceText
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=stringHelpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stringHelpers.js","sources":["../../src/helpers/stringHelpers.ts"],"sourcesContent":["/**\n * Truncate text to a specified length and append ellipsis\n * @param value - The text to truncate\n * @param length - Maximum length before truncation (default: 100)\n * @returns Truncated text with ellipsis or original text if shorter than limit\n */\nexport const sliceText = (value: string, length = 100) => {\n if (value === undefined || value.length < length) return value;\n\n return `${value.slice(0, length)}...`;\n};\n\nconst LOWERCASE_LETTER_PATTERN = /\\p{Ll}/u;\nconst UPPERCASE_LETTER_PATTERN = /\\p{Lu}/u;\n\n/**\n * A word that mixes cases after its first letter (`uMode`, `iPhone`, `McDonald`) carries a\n * deliberate spelling, so capitalization must leave it untouched instead of flattening it\n * to `Umode`. All-caps and all-lowercase words are still normalized.\n */\nconst hasDeliberateCasing = (word: string) =>\n LOWERCASE_LETTER_PATTERN.test(word) && UPPERCASE_LETTER_PATTERN.test(word.slice(1));\n\nconst capitalizeWord = (word: string) =>\n hasDeliberateCasing(word) ? word : word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();\n\n/**\n * Capitalize the first letter of a string and lowercase the rest\n * @param str - The string to capitalize\n * @param allWords - If true, capitalizes the first letter of each word\n * @returns Capitalized string or empty string if invalid input\n */\nexport const capitalize = (str?: string, allWords = false) => {\n if (!str || typeof str !== 'string') return '';\n\n if (allWords) return str.split(' ').map(capitalizeWord).join(' ');\n\n const [firstWord, ...otherWords] = str.split(' ');\n return [\n capitalizeWord(firstWord),\n ...otherWords.map((word) => (hasDeliberateCasing(word) ? word : word.toLowerCase())),\n ].join(' ');\n};\n\n/**\n * Capitalize the first letter of each word in a string\n * @param str - The string to capitalize\n * @returns String with each word capitalized or empty string if invalid input\n */\nexport const capitalizeAllLetters = (str?: string) => {\n if (!str || typeof str !== 'string') return '';\n return str.split(' ').map(capitalizeWord).join(' ');\n};\n\n/**\n * Normalize text by removing accents and converting to lowercase\n * @param text - The text to normalize\n * @returns Normalized text without accents in lowercase\n */\nexport function normalizeText(text: string): string {\n if (text === undefined || text === null) return '';\n\n text = text.toLowerCase();\n text = text.replace(/[áàãâä]/g, 'a');\n text = text.replace(/[éèêë]/g, 'e');\n text = text.replace(/[íìîï]/g, 'i');\n text = text.replace(/[óòõôö]/g, 'o');\n text = text.replace(/[úùûü]/g, 'u');\n text = text.replace(/[ç]/g, 'c');\n return text;\n}\n\n/**\n * Check if a parameter contains a search term (case and accent insensitive)\n * @param param - The text to search in\n * @param search - The search term\n * @returns True if the search term is found in the parameter\n */\nexport const formatFilter = (param: string | undefined | null, search: string | number) =>\n normalizeText(param || '').includes(normalizeText(String(search)));\n\n/**\n * Extract the first name from a full name\n * @param name - The full name string\n * @returns The first word/name from the full name\n */\nexport const getFirstName = (name: string): string => {\n return (name ?? '').split(' ')[0];\n};\n\n/**\n * Generate avatar letters from a user's name\n * @param name - The user's full name\n * @returns 1-2 uppercase letters for avatar display (first + last name initials)\n */\nexport const getUserAvatarLetters = (name: string) => {\n if (!name) return '';\n if (typeof name !== 'string') return '';\n if (!name.includes(' ')) {\n return name.substring(0, 2).toUpperCase();\n }\n\n const words = name.split(' ');\n const ret: Array<string> = [words[0]];\n\n if (words.length > 1) ret.push(words.slice(-1)[0]);\n\n return ret\n .map((word) => word[0])\n .join('')\n .toUpperCase();\n};\n"],"names":[],"mappings":"AAMO,MAAM,YAAY,CAAC,OAAe,SAAS,QAAQ;AACxD,MAAI,UAAU,UAAa,MAAM,SAAS,OAAQ,QAAO;AAEzD,SAAO,GAAG,MAAM,MAAM,GAAG,MAAM,CAAC;AAClC;AAEA,MAAM,2BAA2B;AACjC,MAAM,2BAA2B;AAOjC,MAAM,sBAAsB,CAAC,SAC3B,yBAAyB,KAAK,IAAI,KAAK,yBAAyB,KAAK,KAAK,MAAM,CAAC,CAAC;AAEpF,MAAM,iBAAiB,CAAC,SACtB,oBAAoB,IAAI,IAAI,OAAO,KAAK,OAAO,CAAC,EAAE,YAAA,IAAgB,KAAK,MAAM,CAAC,EAAE,YAAA;AAQ3E,MAAM,aAAa,CAAC,KAAc,WAAW,UAAU;AAC5D,MAAI,CAAC,OAAO,OAAO,QAAQ,SAAU,QAAO;AAE5C,MAAI,SAAU,QAAO,IAAI,MAAM,GAAG,EAAE,IAAI,cAAc,EAAE,KAAK,GAAG;AAEhE,QAAM,CAAC,WAAW,GAAG,UAAU,IAAI,IAAI,MAAM,GAAG;AAChD,SAAO;AAAA,IACL,eAAe,SAAS;AAAA,IACxB,GAAG,WAAW,IAAI,CAAC,SAAU,oBAAoB,IAAI,IAAI,OAAO,KAAK,YAAA,CAAc;AAAA,EAAA,EACnF,KAAK,GAAG;AACZ;AAOO,MAAM,uBAAuB,CAAC,QAAiB;AACpD,MAAI,CAAC,OAAO,OAAO,QAAQ,SAAU,QAAO;AAC5C,SAAO,IAAI,MAAM,GAAG,EAAE,IAAI,cAAc,EAAE,KAAK,GAAG;AACpD;AAOO,SAAS,cAAc,MAAsB;AAClD,MAAI,SAAS,UAAa,SAAS,KAAM,QAAO;AAEhD,SAAO,KAAK,YAAA;AACZ,SAAO,KAAK,QAAQ,YAAY,GAAG;AACnC,SAAO,KAAK,QAAQ,WAAW,GAAG;AAClC,SAAO,KAAK,QAAQ,WAAW,GAAG;AAClC,SAAO,KAAK,QAAQ,YAAY,GAAG;AACnC,SAAO,KAAK,QAAQ,WAAW,GAAG;AAClC,SAAO,KAAK,QAAQ,QAAQ,GAAG;AAC/B,SAAO;AACT;AAQO,MAAM,eAAe,CAAC,OAAkC,WAC7D,cAAc,SAAS,EAAE,EAAE,SAAS,cAAc,OAAO,MAAM,CAAC,CAAC;AAO5D,MAAM,eAAe,CAAC,SAAyB;AACpD,UAAQ,QAAQ,IAAI,MAAM,GAAG,EAAE,CAAC;AAClC;AAOO,MAAM,uBAAuB,CAAC,SAAiB;AACpD,MAAI,CAAC,KAAM,QAAO;AAClB,MAAI,OAAO,SAAS,SAAU,QAAO;AACrC,MAAI,CAAC,KAAK,SAAS,GAAG,GAAG;AACvB,WAAO,KAAK,UAAU,GAAG,CAAC,EAAE,YAAA;AAAA,EAC9B;AAEA,QAAM,QAAQ,KAAK,MAAM,GAAG;AAC5B,QAAM,MAAqB,CAAC,MAAM,CAAC,CAAC;AAEpC,MAAI,MAAM,SAAS,EAAG,KAAI,KAAK,MAAM,MAAM,EAAE,EAAE,CAAC,CAAC;AAEjD,SAAO,IACJ,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,EACrB,KAAK,EAAE,EACP,YAAA;AACL;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const UI_THEME_SKIN_ATTRIBUTE = "data-theme-skin";
|
|
2
|
+
/**
|
|
3
|
+
* A skin re-colours exactly ONE scheme (see the Skins block in theme.css). The host paints it
|
|
4
|
+
* by writing that scheme to `data-theme` and the skin name to `data-theme-skin`, so everything
|
|
5
|
+
* that only understands light and dark keeps working untouched.
|
|
6
|
+
*/
|
|
7
|
+
export declare const UI_THEME_SKIN_SCHEMES: {
|
|
8
|
+
readonly halloween: "dark";
|
|
9
|
+
};
|
|
10
|
+
export type TUiThemeSkin = keyof typeof UI_THEME_SKIN_SCHEMES;
|
|
11
|
+
export declare const UI_THEME_SKINS: Array<TUiThemeSkin>;
|
|
12
|
+
export declare const isUiThemeSkin: (value: unknown) => value is TUiThemeSkin;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const UI_THEME_SKIN_ATTRIBUTE = "data-theme-skin";
|
|
2
|
+
const UI_THEME_SKIN_SCHEMES = {
|
|
3
|
+
halloween: "dark"
|
|
4
|
+
};
|
|
5
|
+
const UI_THEME_SKINS = Object.keys(UI_THEME_SKIN_SCHEMES);
|
|
6
|
+
const isUiThemeSkin = (value) => typeof value === "string" && UI_THEME_SKINS.includes(value);
|
|
7
|
+
export {
|
|
8
|
+
UI_THEME_SKINS,
|
|
9
|
+
UI_THEME_SKIN_ATTRIBUTE,
|
|
10
|
+
UI_THEME_SKIN_SCHEMES,
|
|
11
|
+
isUiThemeSkin
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=themeSkins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"themeSkins.js","sources":["../../src/helpers/themeSkins.ts"],"sourcesContent":["import type { TUiResolvedTheme } from '../hooks/useResolvedTheme';\n\nexport const UI_THEME_SKIN_ATTRIBUTE = 'data-theme-skin';\n\n/**\n * A skin re-colours exactly ONE scheme (see the Skins block in theme.css). The host paints it\n * by writing that scheme to `data-theme` and the skin name to `data-theme-skin`, so everything\n * that only understands light and dark keeps working untouched.\n */\nexport const UI_THEME_SKIN_SCHEMES = {\n halloween: 'dark',\n} as const satisfies Record<string, TUiResolvedTheme>;\n\nexport type TUiThemeSkin = keyof typeof UI_THEME_SKIN_SCHEMES;\n\nexport const UI_THEME_SKINS = Object.keys(UI_THEME_SKIN_SCHEMES) as Array<TUiThemeSkin>;\n\nexport const isUiThemeSkin = (value: unknown): value is TUiThemeSkin =>\n typeof value === 'string' && (UI_THEME_SKINS as Array<string>).includes(value);\n"],"names":[],"mappings":"AAEO,MAAM,0BAA0B;AAOhC,MAAM,wBAAwB;AAAA,EACnC,WAAW;AACb;AAIO,MAAM,iBAAiB,OAAO,KAAK,qBAAqB;AAExD,MAAM,gBAAgB,CAAC,UAC5B,OAAO,UAAU,YAAa,eAAiC,SAAS,KAAK;"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reads a design token as a concrete colour, for the few consumers that cannot use a CSS
|
|
3
|
+
* class: canvas rendering, and third-party libraries that take colours as JS strings
|
|
4
|
+
* (ApexCharts, Excalidraw exports).
|
|
5
|
+
*
|
|
6
|
+
* Reading from the stylesheet instead of duplicating the palette in TypeScript is what
|
|
7
|
+
* keeps a single source of truth: change theme.css and every chart follows.
|
|
8
|
+
*/
|
|
9
|
+
export declare const readThemeToken: (name: string, fallback?: string) => string;
|
|
10
|
+
export interface IThemeChartTokens {
|
|
11
|
+
/** Qualitative series palette, hue- and luminance-separated, validated for every theme. */
|
|
12
|
+
series: Array<string>;
|
|
13
|
+
grid: string;
|
|
14
|
+
axis: string;
|
|
15
|
+
/** Text drawn INSIDE a bar or slice, i.e. on top of a series colour. */
|
|
16
|
+
label: string;
|
|
17
|
+
foreground: string;
|
|
18
|
+
foregroundMuted: string;
|
|
19
|
+
surface: string;
|
|
20
|
+
border: string;
|
|
21
|
+
/** Feeds ApexCharts' own `theme.mode`, which drives its tooltip and legend defaults. */
|
|
22
|
+
mode: 'light' | 'dark';
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Recomputed whenever the resolved theme or its skin changes: the CSS variables have already
|
|
26
|
+
* been swapped by then, so `getComputedStyle` returns the new values.
|
|
27
|
+
*/
|
|
28
|
+
export declare const useThemeChartTokens: () => IThemeChartTokens;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { useMemo } from "react";
|
|
2
|
+
import { useResolvedTheme } from "../hooks/useResolvedTheme.js";
|
|
3
|
+
import { useThemeSkin } from "../hooks/useThemeSkin.js";
|
|
4
|
+
const readThemeToken = (name, fallback = "#000000") => {
|
|
5
|
+
if (typeof window === "undefined") return fallback;
|
|
6
|
+
const raw = getComputedStyle(document.documentElement).getPropertyValue(`--color-${name}`).trim();
|
|
7
|
+
if (!raw) return fallback;
|
|
8
|
+
if (raw.startsWith("#") || raw.startsWith("rgb")) return raw;
|
|
9
|
+
const [r, g, b] = raw.split(/\s+/);
|
|
10
|
+
return `rgb(${r}, ${g}, ${b})`;
|
|
11
|
+
};
|
|
12
|
+
const SERIES_TOKENS = ["chart-1", "chart-2", "chart-3", "chart-4", "chart-5", "chart-6", "chart-7", "chart-8"];
|
|
13
|
+
const useThemeChartTokens = () => {
|
|
14
|
+
const resolvedTheme = useResolvedTheme();
|
|
15
|
+
const themeSkin = useThemeSkin();
|
|
16
|
+
return useMemo(
|
|
17
|
+
() => ({
|
|
18
|
+
series: SERIES_TOKENS.map((token) => readThemeToken(token)),
|
|
19
|
+
grid: readThemeToken("chart-grid"),
|
|
20
|
+
axis: readThemeToken("chart-axis"),
|
|
21
|
+
label: readThemeToken("chart-label"),
|
|
22
|
+
foreground: readThemeToken("foreground"),
|
|
23
|
+
foregroundMuted: readThemeToken("foreground-muted"),
|
|
24
|
+
surface: readThemeToken("surface"),
|
|
25
|
+
border: readThemeToken("border"),
|
|
26
|
+
mode: resolvedTheme
|
|
27
|
+
}),
|
|
28
|
+
[resolvedTheme, themeSkin]
|
|
29
|
+
);
|
|
30
|
+
};
|
|
31
|
+
export {
|
|
32
|
+
readThemeToken,
|
|
33
|
+
useThemeChartTokens
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=themeTokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"themeTokens.js","sources":["../../src/helpers/themeTokens.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport { useResolvedTheme } from '../hooks/useResolvedTheme';\nimport { useThemeSkin } from '../hooks/useThemeSkin';\n\n/**\n * Reads a design token as a concrete colour, for the few consumers that cannot use a CSS\n * class: canvas rendering, and third-party libraries that take colours as JS strings\n * (ApexCharts, Excalidraw exports).\n *\n * Reading from the stylesheet instead of duplicating the palette in TypeScript is what\n * keeps a single source of truth: change theme.css and every chart follows.\n */\nexport const readThemeToken = (name: string, fallback = '#000000'): string => {\n if (typeof window === 'undefined') return fallback;\n const raw = getComputedStyle(document.documentElement).getPropertyValue(`--color-${name}`).trim();\n if (!raw) return fallback;\n if (raw.startsWith('#') || raw.startsWith('rgb')) return raw;\n const [r, g, b] = raw.split(/\\s+/);\n return `rgb(${r}, ${g}, ${b})`;\n};\n\nexport interface IThemeChartTokens {\n /** Qualitative series palette, hue- and luminance-separated, validated for every theme. */\n series: Array<string>;\n grid: string;\n axis: string;\n /** Text drawn INSIDE a bar or slice, i.e. on top of a series colour. */\n label: string;\n foreground: string;\n foregroundMuted: string;\n surface: string;\n border: string;\n /** Feeds ApexCharts' own `theme.mode`, which drives its tooltip and legend defaults. */\n mode: 'light' | 'dark';\n}\n\nconst SERIES_TOKENS = ['chart-1', 'chart-2', 'chart-3', 'chart-4', 'chart-5', 'chart-6', 'chart-7', 'chart-8'];\n\n/**\n * Recomputed whenever the resolved theme or its skin changes: the CSS variables have already\n * been swapped by then, so `getComputedStyle` returns the new values.\n */\nexport const useThemeChartTokens = (): IThemeChartTokens => {\n const resolvedTheme = useResolvedTheme();\n const themeSkin = useThemeSkin();\n\n return useMemo(\n () => ({\n series: SERIES_TOKENS.map((token) => readThemeToken(token)),\n grid: readThemeToken('chart-grid'),\n axis: readThemeToken('chart-axis'),\n label: readThemeToken('chart-label'),\n foreground: readThemeToken('foreground'),\n foregroundMuted: readThemeToken('foreground-muted'),\n surface: readThemeToken('surface'),\n border: readThemeToken('border'),\n mode: resolvedTheme,\n }),\n [resolvedTheme, themeSkin],\n );\n};\n"],"names":[],"mappings":";;;AAaO,MAAM,iBAAiB,CAAC,MAAc,WAAW,cAAsB;AAC5E,MAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,QAAM,MAAM,iBAAiB,SAAS,eAAe,EAAE,iBAAiB,WAAW,IAAI,EAAE,EAAE,KAAA;AAC3F,MAAI,CAAC,IAAK,QAAO;AACjB,MAAI,IAAI,WAAW,GAAG,KAAK,IAAI,WAAW,KAAK,EAAG,QAAO;AACzD,QAAM,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,MAAM,KAAK;AACjC,SAAO,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;AAC7B;AAiBA,MAAM,gBAAgB,CAAC,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,SAAS;AAMtG,MAAM,sBAAsB,MAAyB;AAC1D,QAAM,gBAAgB,iBAAA;AACtB,QAAM,YAAY,aAAA;AAElB,SAAO;AAAA,IACL,OAAO;AAAA,MACL,QAAQ,cAAc,IAAI,CAAC,UAAU,eAAe,KAAK,CAAC;AAAA,MAC1D,MAAM,eAAe,YAAY;AAAA,MACjC,MAAM,eAAe,YAAY;AAAA,MACjC,OAAO,eAAe,aAAa;AAAA,MACnC,YAAY,eAAe,YAAY;AAAA,MACvC,iBAAiB,eAAe,kBAAkB;AAAA,MAClD,SAAS,eAAe,SAAS;AAAA,MACjC,QAAQ,eAAe,QAAQ;AAAA,MAC/B,MAAM;AAAA,IAAA;AAAA,IAER,CAAC,eAAe,SAAS;AAAA,EAAA;AAE7B;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type TUiErrorVariant = 'error' | 'permission' | 'not-found' | 'offline';
|
|
2
|
+
export interface IUiErrorPresentation {
|
|
3
|
+
variant: TUiErrorVariant;
|
|
4
|
+
/** Key in the `common` namespace, resolved by the surface that renders it. */
|
|
5
|
+
titleKey: string;
|
|
6
|
+
descriptionKey: string;
|
|
7
|
+
/** False when asking again cannot change the answer (a denial, a missing record). */
|
|
8
|
+
isRetryable: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Port: the UI layer knows a request failed, never why. The app registers the classifier at boot
|
|
12
|
+
* (see `UiLayerBridge`), so a shared surface like the table can say "you do not have permission"
|
|
13
|
+
* instead of painting every failure as a system error.
|
|
14
|
+
*
|
|
15
|
+
* Returns null when nothing was registered or the cause is not recognisable, and the caller keeps
|
|
16
|
+
* whatever copy it already had.
|
|
17
|
+
*/
|
|
18
|
+
type TUiErrorPresenter = (error: unknown) => IUiErrorPresentation | null;
|
|
19
|
+
export declare const configureUiErrorPresenter: (presenter: TUiErrorPresenter) => void;
|
|
20
|
+
export declare const describeUiError: (error: unknown) => IUiErrorPresentation | null;
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
let presentError = () => null;
|
|
2
|
+
const configureUiErrorPresenter = (presenter) => {
|
|
3
|
+
presentError = presenter;
|
|
4
|
+
};
|
|
5
|
+
const describeUiError = (error) => error === null || error === void 0 ? null : presentError(error);
|
|
6
|
+
export {
|
|
7
|
+
configureUiErrorPresenter,
|
|
8
|
+
describeUiError
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=uiErrorPresenter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uiErrorPresenter.js","sources":["../../src/helpers/uiErrorPresenter.ts"],"sourcesContent":["export type TUiErrorVariant = 'error' | 'permission' | 'not-found' | 'offline';\n\nexport interface IUiErrorPresentation {\n variant: TUiErrorVariant;\n /** Key in the `common` namespace, resolved by the surface that renders it. */\n titleKey: string;\n descriptionKey: string;\n /** False when asking again cannot change the answer (a denial, a missing record). */\n isRetryable: boolean;\n}\n\n/**\n * Port: the UI layer knows a request failed, never why. The app registers the classifier at boot\n * (see `UiLayerBridge`), so a shared surface like the table can say \"you do not have permission\"\n * instead of painting every failure as a system error.\n *\n * Returns null when nothing was registered or the cause is not recognisable, and the caller keeps\n * whatever copy it already had.\n */\ntype TUiErrorPresenter = (error: unknown) => IUiErrorPresentation | null;\n\nlet presentError: TUiErrorPresenter = () => null;\n\nexport const configureUiErrorPresenter = (presenter: TUiErrorPresenter): void => {\n presentError = presenter;\n};\n\nexport const describeUiError = (error: unknown): IUiErrorPresentation | null =>\n error === null || error === undefined ? null : presentError(error);\n"],"names":[],"mappings":"AAqBA,IAAI,eAAkC,MAAM;AAErC,MAAM,4BAA4B,CAAC,cAAuC;AAC/E,iBAAe;AACjB;AAEO,MAAM,kBAAkB,CAAC,UAC9B,UAAU,QAAQ,UAAU,SAAY,OAAO,aAAa,KAAK;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface IUiLogger {
|
|
2
|
+
debug: (...args: Array<unknown>) => void;
|
|
3
|
+
info: (...args: Array<unknown>) => void;
|
|
4
|
+
warn: (...args: Array<unknown>) => void;
|
|
5
|
+
error: (...args: Array<unknown>) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare const configureUiLogger: (nextLogger: IUiLogger | null) => void;
|
|
8
|
+
export declare const uiLogger: IUiLogger;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
let configuredLogger = null;
|
|
2
|
+
const configureUiLogger = (nextLogger) => {
|
|
3
|
+
configuredLogger = nextLogger;
|
|
4
|
+
};
|
|
5
|
+
const resolveLogger = () => configuredLogger ?? globalThis.logger ?? console;
|
|
6
|
+
const uiLogger = {
|
|
7
|
+
debug: (...args) => resolveLogger().debug(...args),
|
|
8
|
+
info: (...args) => resolveLogger().info(...args),
|
|
9
|
+
warn: (...args) => resolveLogger().warn(...args),
|
|
10
|
+
error: (...args) => resolveLogger().error(...args)
|
|
11
|
+
};
|
|
12
|
+
export {
|
|
13
|
+
configureUiLogger,
|
|
14
|
+
uiLogger
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=uiLogger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uiLogger.js","sources":["../../src/helpers/uiLogger.ts"],"sourcesContent":["export interface IUiLogger {\n debug: (...args: Array<unknown>) => void;\n info: (...args: Array<unknown>) => void;\n warn: (...args: Array<unknown>) => void;\n error: (...args: Array<unknown>) => void;\n}\n\nlet configuredLogger: IUiLogger | null = null;\n\nexport const configureUiLogger = (nextLogger: IUiLogger | null): void => {\n configuredLogger = nextLogger;\n};\n\n// The ambient `logger` is the dashboard's sink; this is the only UI file allowed to read it.\nconst resolveLogger = (): IUiLogger =>\n configuredLogger ?? (globalThis as { logger?: IUiLogger }).logger ?? (console as IUiLogger);\n\nexport const uiLogger: IUiLogger = {\n debug: (...args) => resolveLogger().debug(...args),\n info: (...args) => resolveLogger().info(...args),\n warn: (...args) => resolveLogger().warn(...args),\n error: (...args) => resolveLogger().error(...args),\n};\n"],"names":[],"mappings":"AAOA,IAAI,mBAAqC;AAElC,MAAM,oBAAoB,CAAC,eAAuC;AACvE,qBAAmB;AACrB;AAGA,MAAM,gBAAgB,MACpB,oBAAqB,WAAsC,UAAW;AAEjE,MAAM,WAAsB;AAAA,EACjC,OAAO,IAAI,SAAS,gBAAgB,MAAM,GAAG,IAAI;AAAA,EACjD,MAAM,IAAI,SAAS,gBAAgB,KAAK,GAAG,IAAI;AAAA,EAC/C,MAAM,IAAI,SAAS,gBAAgB,KAAK,GAAG,IAAI;AAAA,EAC/C,OAAO,IAAI,SAAS,gBAAgB,MAAM,GAAG,IAAI;AACnD;"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface IUiPreferencesStorage {
|
|
2
|
+
read: <T>(key: string) => T | null;
|
|
3
|
+
write: <T>(key: string, value: T) => void;
|
|
4
|
+
}
|
|
5
|
+
export interface IUiPreferencesConfig {
|
|
6
|
+
storage?: IUiPreferencesStorage;
|
|
7
|
+
/** Identifies whom a preference belongs to on a shared browser; null keeps it unscoped. */
|
|
8
|
+
resolveScopeId?: () => string | null;
|
|
9
|
+
}
|
|
10
|
+
export declare const configureUiPreferences: ({ storage, resolveScopeId }: IUiPreferencesConfig) => void;
|
|
11
|
+
export declare const readUiPreference: <T>(key: string) => T | null;
|
|
12
|
+
export declare const writeUiPreference: <T>(key: string, value: T) => void;
|
|
13
|
+
export declare const resolveUiPreferenceScopeId: () => string | null;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { uiLogger } from "./uiLogger.js";
|
|
2
|
+
const browserStorage = {
|
|
3
|
+
read: (key) => {
|
|
4
|
+
try {
|
|
5
|
+
const raw = window.localStorage.getItem(key);
|
|
6
|
+
return raw === null ? null : JSON.parse(raw);
|
|
7
|
+
} catch (error) {
|
|
8
|
+
uiLogger.debug("[uiPreferences] unreadable entry", key, error);
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
write: (key, value) => {
|
|
13
|
+
try {
|
|
14
|
+
window.localStorage.setItem(key, JSON.stringify(value));
|
|
15
|
+
} catch (error) {
|
|
16
|
+
uiLogger.debug("[uiPreferences] write failed", key, error);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
let activeStorage = browserStorage;
|
|
21
|
+
let activeScopeResolver = () => null;
|
|
22
|
+
const configureUiPreferences = ({ storage, resolveScopeId }) => {
|
|
23
|
+
if (storage) activeStorage = storage;
|
|
24
|
+
if (resolveScopeId) activeScopeResolver = resolveScopeId;
|
|
25
|
+
};
|
|
26
|
+
const readUiPreference = (key) => activeStorage.read(key);
|
|
27
|
+
const writeUiPreference = (key, value) => activeStorage.write(key, value);
|
|
28
|
+
const resolveUiPreferenceScopeId = () => activeScopeResolver();
|
|
29
|
+
export {
|
|
30
|
+
configureUiPreferences,
|
|
31
|
+
readUiPreference,
|
|
32
|
+
resolveUiPreferenceScopeId,
|
|
33
|
+
writeUiPreference
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=uiPreferences.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uiPreferences.js","sources":["../../src/helpers/uiPreferences.ts"],"sourcesContent":["import { uiLogger } from './uiLogger';\n\nexport interface IUiPreferencesStorage {\n read: <T>(key: string) => T | null;\n write: <T>(key: string, value: T) => void;\n}\n\nexport interface IUiPreferencesConfig {\n storage?: IUiPreferencesStorage;\n /** Identifies whom a preference belongs to on a shared browser; null keeps it unscoped. */\n resolveScopeId?: () => string | null;\n}\n\nconst browserStorage: IUiPreferencesStorage = {\n read: <T>(key: string): T | null => {\n try {\n const raw = window.localStorage.getItem(key);\n return raw === null ? null : (JSON.parse(raw) as T);\n } catch (error) {\n uiLogger.debug('[uiPreferences] unreadable entry', key, error);\n return null;\n }\n },\n write: <T>(key: string, value: T): void => {\n try {\n window.localStorage.setItem(key, JSON.stringify(value));\n } catch (error) {\n uiLogger.debug('[uiPreferences] write failed', key, error);\n }\n },\n};\n\nlet activeStorage: IUiPreferencesStorage = browserStorage;\nlet activeScopeResolver: () => string | null = () => null;\n\nexport const configureUiPreferences = ({ storage, resolveScopeId }: IUiPreferencesConfig): void => {\n if (storage) activeStorage = storage;\n if (resolveScopeId) activeScopeResolver = resolveScopeId;\n};\n\nexport const readUiPreference = <T>(key: string): T | null => activeStorage.read<T>(key);\n\nexport const writeUiPreference = <T>(key: string, value: T): void => activeStorage.write(key, value);\n\nexport const resolveUiPreferenceScopeId = (): string | null => activeScopeResolver();\n"],"names":[],"mappings":";AAaA,MAAM,iBAAwC;AAAA,EAC5C,MAAM,CAAI,QAA0B;AAClC,QAAI;AACF,YAAM,MAAM,OAAO,aAAa,QAAQ,GAAG;AAC3C,aAAO,QAAQ,OAAO,OAAQ,KAAK,MAAM,GAAG;AAAA,IAC9C,SAAS,OAAO;AACd,eAAS,MAAM,oCAAoC,KAAK,KAAK;AAC7D,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,OAAO,CAAI,KAAa,UAAmB;AACzC,QAAI;AACF,aAAO,aAAa,QAAQ,KAAK,KAAK,UAAU,KAAK,CAAC;AAAA,IACxD,SAAS,OAAO;AACd,eAAS,MAAM,gCAAgC,KAAK,KAAK;AAAA,IAC3D;AAAA,EACF;AACF;AAEA,IAAI,gBAAuC;AAC3C,IAAI,sBAA2C,MAAM;AAE9C,MAAM,yBAAyB,CAAC,EAAE,SAAS,qBAAiD;AACjG,MAAI,QAAS,iBAAgB;AAC7B,MAAI,eAAgB,uBAAsB;AAC5C;AAEO,MAAM,mBAAmB,CAAI,QAA0B,cAAc,KAAQ,GAAG;AAEhF,MAAM,oBAAoB,CAAI,KAAa,UAAmB,cAAc,MAAM,KAAK,KAAK;AAE5F,MAAM,6BAA6B,MAAqB,oBAAA;"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type TUrlParamSetter = (updater: (previousParams: URLSearchParams) => URLSearchParams, options?: {
|
|
2
|
+
replace?: boolean;
|
|
3
|
+
}) => void;
|
|
4
|
+
/** Reservado ao `ControlledTabs`: nenhum outro controle pode assumir esse parâmetro. */
|
|
5
|
+
export declare const TABS_URL_PARAM = "activeTab";
|
|
6
|
+
/**
|
|
7
|
+
* Quem manda no parâmetro quando dois controles pedem a mesma chave. Abas são navegação e ficam
|
|
8
|
+
* acima de um seletor de visualização, então assumem a chave mesmo montando depois.
|
|
9
|
+
*/
|
|
10
|
+
export declare const URL_PARAM_PRIORITY: {
|
|
11
|
+
readonly viewToggle: 1;
|
|
12
|
+
readonly tabs: 2;
|
|
13
|
+
};
|
|
14
|
+
export type TUrlParamPriority = (typeof URL_PARAM_PRIORITY)[keyof typeof URL_PARAM_PRIORITY];
|
|
15
|
+
export declare const claimUrlParam: (key: string, ownerId: object, priority: TUrlParamPriority) => boolean;
|
|
16
|
+
export declare const releaseUrlParam: (key: string, ownerId: object) => void;
|
|
17
|
+
export declare const ownsUrlParam: (key: string, ownerId: object) => boolean;
|
|
18
|
+
/** Agenda a gravação de um parâmetro, preservando os demais. Valor vazio remove o parâmetro. */
|
|
19
|
+
export declare const queueUrlParamUpdate: (key: string, value: string, setSearchParams: TUrlParamSetter) => void;
|