@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,157 @@
|
|
|
1
|
+
import { flowOutputsOf } from "./flowBlockRegistry.js";
|
|
2
|
+
const FLOW_LEVEL_GAP = 336;
|
|
3
|
+
const FLOW_SIBLING_GAP = 176;
|
|
4
|
+
const nodesOf = (graph) => Array.isArray(graph?.nodes) ? graph.nodes : [];
|
|
5
|
+
const edgesOf = (graph) => Array.isArray(graph?.edges) ? graph.edges : [];
|
|
6
|
+
const outgoingByNode = (graph) => {
|
|
7
|
+
const outgoing = /* @__PURE__ */ new Map();
|
|
8
|
+
for (const edge of edgesOf(graph)) {
|
|
9
|
+
outgoing.set(edge.source, [...outgoing.get(edge.source) ?? [], edge]);
|
|
10
|
+
}
|
|
11
|
+
return outgoing;
|
|
12
|
+
};
|
|
13
|
+
const triggerNodesOf = (graph, registry) => nodesOf(graph).filter((node) => registry.get(node.type)?.category === "trigger");
|
|
14
|
+
const isFlowNodeRemovable = (node, registry) => registry.get(node.type)?.removable !== false;
|
|
15
|
+
const reachableFrom = (graph, startNodeId) => {
|
|
16
|
+
const outgoing = outgoingByNode(graph);
|
|
17
|
+
const visited = /* @__PURE__ */ new Set();
|
|
18
|
+
const pending = [startNodeId];
|
|
19
|
+
while (pending.length > 0) {
|
|
20
|
+
const nodeId = pending.pop();
|
|
21
|
+
if (nodeId === void 0 || visited.has(nodeId)) continue;
|
|
22
|
+
visited.add(nodeId);
|
|
23
|
+
for (const edge of outgoing.get(nodeId) ?? []) pending.push(edge.target);
|
|
24
|
+
}
|
|
25
|
+
return visited;
|
|
26
|
+
};
|
|
27
|
+
const findCycle = (graph) => {
|
|
28
|
+
const outgoing = outgoingByNode(graph);
|
|
29
|
+
const state = /* @__PURE__ */ new Map();
|
|
30
|
+
const path = [];
|
|
31
|
+
const visit = (nodeId) => {
|
|
32
|
+
state.set(nodeId, "visiting");
|
|
33
|
+
path.push(nodeId);
|
|
34
|
+
for (const edge of outgoing.get(nodeId) ?? []) {
|
|
35
|
+
const targetState = state.get(edge.target);
|
|
36
|
+
if (targetState === "visiting") return path.slice(path.indexOf(edge.target));
|
|
37
|
+
if (targetState === void 0) {
|
|
38
|
+
const cycle = visit(edge.target);
|
|
39
|
+
if (cycle) return cycle;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
path.pop();
|
|
43
|
+
state.set(nodeId, "done");
|
|
44
|
+
return null;
|
|
45
|
+
};
|
|
46
|
+
for (const node of nodesOf(graph)) {
|
|
47
|
+
if (state.has(node.nodeId)) continue;
|
|
48
|
+
const cycle = visit(node.nodeId);
|
|
49
|
+
if (cycle) return cycle;
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
};
|
|
53
|
+
const canConnect = (graph, registry, candidate) => {
|
|
54
|
+
const { source, sourcePort, target } = candidate;
|
|
55
|
+
if (!source || !target || source === target) return false;
|
|
56
|
+
const nodes = nodesOf(graph);
|
|
57
|
+
const sourceNode = nodes.find((node) => node.nodeId === source);
|
|
58
|
+
const targetNode = nodes.find((node) => node.nodeId === target);
|
|
59
|
+
if (!sourceNode || !targetNode) return false;
|
|
60
|
+
const sourceDefinition = registry.get(sourceNode.type);
|
|
61
|
+
const targetDefinition = registry.get(targetNode.type);
|
|
62
|
+
if (!flowOutputsOf(sourceDefinition, sourceNode.config).includes(sourcePort)) return false;
|
|
63
|
+
if (!targetDefinition || targetDefinition.category === "trigger") return false;
|
|
64
|
+
const edges = edgesOf(graph);
|
|
65
|
+
if (edges.some((edge) => edge.source === source && edge.sourcePort === sourcePort)) return false;
|
|
66
|
+
if (edges.some((edge) => edge.target === target)) return false;
|
|
67
|
+
return !reachableFrom(graph, target).has(source);
|
|
68
|
+
};
|
|
69
|
+
const validateFlowGraph = (graph, registry) => {
|
|
70
|
+
const issues = [];
|
|
71
|
+
const nodes = nodesOf(graph);
|
|
72
|
+
const edges = edgesOf(graph);
|
|
73
|
+
for (const node of nodes) {
|
|
74
|
+
const definition = registry.get(node.type);
|
|
75
|
+
if (!definition) {
|
|
76
|
+
issues.push({ code: "unknownBlock", severity: "error", nodeId: node.nodeId });
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
for (const blockIssue of definition.validate(node.config) ?? []) {
|
|
80
|
+
issues.push({ ...blockIssue, nodeId: node.nodeId });
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
const triggers = triggerNodesOf(graph, registry);
|
|
84
|
+
if (triggers.length === 0) issues.push({ code: "missingTrigger", severity: "error" });
|
|
85
|
+
triggers.slice(1).forEach((trigger) => {
|
|
86
|
+
issues.push({ code: "multipleTriggers", severity: "error", nodeId: trigger.nodeId });
|
|
87
|
+
});
|
|
88
|
+
const firstTrigger = triggers[0];
|
|
89
|
+
if (firstTrigger) {
|
|
90
|
+
const reachable = reachableFrom(graph, firstTrigger.nodeId);
|
|
91
|
+
nodes.filter((node) => !reachable.has(node.nodeId) && registry.get(node.type)?.category !== "trigger").forEach((node) => issues.push({ code: "unreachableNode", severity: "error", nodeId: node.nodeId }));
|
|
92
|
+
}
|
|
93
|
+
const inputCount = /* @__PURE__ */ new Map();
|
|
94
|
+
const portCount = /* @__PURE__ */ new Map();
|
|
95
|
+
for (const edge of edges) {
|
|
96
|
+
inputCount.set(edge.target, (inputCount.get(edge.target) ?? 0) + 1);
|
|
97
|
+
const portKey = `${edge.source}|${edge.sourcePort}`;
|
|
98
|
+
portCount.set(portKey, (portCount.get(portKey) ?? 0) + 1);
|
|
99
|
+
}
|
|
100
|
+
inputCount.forEach((count, nodeId) => {
|
|
101
|
+
if (count > 1) issues.push({ code: "multipleInputs", severity: "error", nodeId });
|
|
102
|
+
});
|
|
103
|
+
edges.filter((edge) => (portCount.get(`${edge.source}|${edge.sourcePort}`) ?? 0) > 1).forEach(
|
|
104
|
+
(edge) => issues.push({ code: "portFanOut", severity: "error", edgeId: edge.edgeId, nodeId: edge.source })
|
|
105
|
+
);
|
|
106
|
+
const cycle = findCycle(graph);
|
|
107
|
+
if (cycle) cycle.forEach((nodeId) => issues.push({ code: "cycle", severity: "error", nodeId }));
|
|
108
|
+
nodes.filter((node) => flowOutputsOf(registry.get(node.type), node.config).includes("true")).filter((node) => !edges.some((edge) => edge.source === node.nodeId && edge.sourcePort === "true")).forEach((node) => issues.push({ code: "missingTrueBranch", severity: "warning", nodeId: node.nodeId }));
|
|
109
|
+
return issues;
|
|
110
|
+
};
|
|
111
|
+
const hasBlockingIssues = (issues) => (issues ?? []).some((issue) => issue.severity === "error");
|
|
112
|
+
const layoutFlowByLevels = (graph, registry) => {
|
|
113
|
+
const nodes = nodesOf(graph);
|
|
114
|
+
const outgoing = outgoingByNode(graph);
|
|
115
|
+
const levelOf = /* @__PURE__ */ new Map();
|
|
116
|
+
const roots = triggerNodesOf(graph, registry);
|
|
117
|
+
const queue = roots.map((root) => root.nodeId);
|
|
118
|
+
roots.forEach((root) => levelOf.set(root.nodeId, 0));
|
|
119
|
+
while (queue.length > 0) {
|
|
120
|
+
const nodeId = queue.shift();
|
|
121
|
+
if (nodeId === void 0) continue;
|
|
122
|
+
const level = levelOf.get(nodeId) ?? 0;
|
|
123
|
+
for (const edge of outgoing.get(nodeId) ?? []) {
|
|
124
|
+
if (levelOf.has(edge.target)) continue;
|
|
125
|
+
levelOf.set(edge.target, level + 1);
|
|
126
|
+
queue.push(edge.target);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
const deepestLevel = Math.max(-1, ...Array.from(levelOf.values()));
|
|
130
|
+
nodes.filter((node) => !levelOf.has(node.nodeId)).forEach((node) => levelOf.set(node.nodeId, deepestLevel + 1));
|
|
131
|
+
const nodesByLevel = /* @__PURE__ */ new Map();
|
|
132
|
+
nodes.forEach((node) => {
|
|
133
|
+
const level = levelOf.get(node.nodeId) ?? 0;
|
|
134
|
+
nodesByLevel.set(level, [...nodesByLevel.get(level) ?? [], node.nodeId]);
|
|
135
|
+
});
|
|
136
|
+
const positions = {};
|
|
137
|
+
nodesByLevel.forEach((nodeIds, level) => {
|
|
138
|
+
const columnHeight = (nodeIds.length - 1) * FLOW_SIBLING_GAP;
|
|
139
|
+
nodeIds.forEach((nodeId, index) => {
|
|
140
|
+
positions[nodeId] = { x: level * FLOW_LEVEL_GAP, y: index * FLOW_SIBLING_GAP - columnHeight / 2 };
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
return positions;
|
|
144
|
+
};
|
|
145
|
+
export {
|
|
146
|
+
FLOW_LEVEL_GAP,
|
|
147
|
+
FLOW_SIBLING_GAP,
|
|
148
|
+
canConnect,
|
|
149
|
+
findCycle,
|
|
150
|
+
hasBlockingIssues,
|
|
151
|
+
isFlowNodeRemovable,
|
|
152
|
+
layoutFlowByLevels,
|
|
153
|
+
reachableFrom,
|
|
154
|
+
triggerNodesOf,
|
|
155
|
+
validateFlowGraph
|
|
156
|
+
};
|
|
157
|
+
//# sourceMappingURL=flowGraph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flowGraph.js","sources":["../../../../src/components/UI/Flow/flowGraph.ts"],"sourcesContent":["import { flowOutputsOf, type IFlowBlockRegistry } from './flowBlockRegistry';\nimport type { IFlowEdge, IFlowGraph, IFlowIssue, IFlowNode, IFlowPosition, TFlowPortId } from './flowTypes';\n\n/** The flow reads left to right: one level per column, siblings stacked in the column. */\nexport const FLOW_LEVEL_GAP = 336;\nexport const FLOW_SIBLING_GAP = 176;\n\nconst nodesOf = (graph: IFlowGraph): Array<IFlowNode> => (Array.isArray(graph?.nodes) ? graph.nodes : []);\nconst edgesOf = (graph: IFlowGraph): Array<IFlowEdge> => (Array.isArray(graph?.edges) ? graph.edges : []);\n\nconst outgoingByNode = (graph: IFlowGraph): Map<string, Array<IFlowEdge>> => {\n const outgoing = new Map<string, Array<IFlowEdge>>();\n for (const edge of edgesOf(graph)) {\n outgoing.set(edge.source, [...(outgoing.get(edge.source) ?? []), edge]);\n }\n return outgoing;\n};\n\nexport const triggerNodesOf = (graph: IFlowGraph, registry: IFlowBlockRegistry): Array<IFlowNode> =>\n nodesOf(graph).filter((node) => registry.get(node.type)?.category === 'trigger');\n\nexport const isFlowNodeRemovable = (node: IFlowNode, registry: IFlowBlockRegistry): boolean =>\n registry.get(node.type)?.removable !== false;\n\n/** Node ids reachable from `startNodeId` following edges, the start included. */\nexport const reachableFrom = (graph: IFlowGraph, startNodeId: string): Set<string> => {\n const outgoing = outgoingByNode(graph);\n const visited = new Set<string>();\n const pending = [startNodeId];\n while (pending.length > 0) {\n const nodeId = pending.pop();\n if (nodeId === undefined || visited.has(nodeId)) continue;\n visited.add(nodeId);\n for (const edge of outgoing.get(nodeId) ?? []) pending.push(edge.target);\n }\n return visited;\n};\n\n/** The node ids of the first cycle found, in order, or null when the graph has none. */\nexport const findCycle = (graph: IFlowGraph): Array<string> | null => {\n const outgoing = outgoingByNode(graph);\n const state = new Map<string, 'visiting' | 'done'>();\n const path: Array<string> = [];\n\n const visit = (nodeId: string): Array<string> | null => {\n state.set(nodeId, 'visiting');\n path.push(nodeId);\n for (const edge of outgoing.get(nodeId) ?? []) {\n const targetState = state.get(edge.target);\n if (targetState === 'visiting') return path.slice(path.indexOf(edge.target));\n if (targetState === undefined) {\n const cycle = visit(edge.target);\n if (cycle) return cycle;\n }\n }\n path.pop();\n state.set(nodeId, 'done');\n return null;\n };\n\n for (const node of nodesOf(graph)) {\n if (state.has(node.nodeId)) continue;\n const cycle = visit(node.nodeId);\n if (cycle) return cycle;\n }\n return null;\n};\n\nexport interface IFlowConnectionCandidate {\n source: string;\n sourcePort: TFlowPortId;\n target: string;\n}\n\n/**\n * The V0 shape is a tree with no fan-out: one input per block, one edge per output\n * port, no edge into a trigger and no cycle. Keeping this rule here lets the canvas\n * refuse a bad connection while it is being drawn, not only when publishing.\n */\nexport const canConnect = (\n graph: IFlowGraph,\n registry: IFlowBlockRegistry,\n candidate: IFlowConnectionCandidate,\n): boolean => {\n const { source, sourcePort, target } = candidate;\n if (!source || !target || source === target) return false;\n\n const nodes = nodesOf(graph);\n const sourceNode = nodes.find((node) => node.nodeId === source);\n const targetNode = nodes.find((node) => node.nodeId === target);\n if (!sourceNode || !targetNode) return false;\n\n const sourceDefinition = registry.get(sourceNode.type);\n const targetDefinition = registry.get(targetNode.type);\n if (!flowOutputsOf(sourceDefinition, sourceNode.config).includes(sourcePort)) return false;\n if (!targetDefinition || targetDefinition.category === 'trigger') return false;\n\n const edges = edgesOf(graph);\n if (edges.some((edge) => edge.source === source && edge.sourcePort === sourcePort)) return false;\n if (edges.some((edge) => edge.target === target)) return false;\n\n return !reachableFrom(graph, target).has(source);\n};\n\n/** The structural rules of the V0 shape, plus each block's own `validate`. */\nexport const validateFlowGraph = (graph: IFlowGraph, registry: IFlowBlockRegistry): Array<IFlowIssue> => {\n const issues: Array<IFlowIssue> = [];\n const nodes = nodesOf(graph);\n const edges = edgesOf(graph);\n\n for (const node of nodes) {\n const definition = registry.get(node.type);\n if (!definition) {\n issues.push({ code: 'unknownBlock', severity: 'error', nodeId: node.nodeId });\n continue;\n }\n for (const blockIssue of definition.validate(node.config) ?? []) {\n issues.push({ ...blockIssue, nodeId: node.nodeId });\n }\n }\n\n const triggers = triggerNodesOf(graph, registry);\n if (triggers.length === 0) issues.push({ code: 'missingTrigger', severity: 'error' });\n triggers.slice(1).forEach((trigger) => {\n issues.push({ code: 'multipleTriggers', severity: 'error', nodeId: trigger.nodeId });\n });\n\n const firstTrigger = triggers[0];\n if (firstTrigger) {\n const reachable = reachableFrom(graph, firstTrigger.nodeId);\n nodes\n .filter((node) => !reachable.has(node.nodeId) && registry.get(node.type)?.category !== 'trigger')\n .forEach((node) => issues.push({ code: 'unreachableNode', severity: 'error', nodeId: node.nodeId }));\n }\n\n const inputCount = new Map<string, number>();\n const portCount = new Map<string, number>();\n for (const edge of edges) {\n inputCount.set(edge.target, (inputCount.get(edge.target) ?? 0) + 1);\n const portKey = `${edge.source}|${edge.sourcePort}`;\n portCount.set(portKey, (portCount.get(portKey) ?? 0) + 1);\n }\n inputCount.forEach((count, nodeId) => {\n if (count > 1) issues.push({ code: 'multipleInputs', severity: 'error', nodeId });\n });\n edges\n .filter((edge) => (portCount.get(`${edge.source}|${edge.sourcePort}`) ?? 0) > 1)\n .forEach((edge) =>\n issues.push({ code: 'portFanOut', severity: 'error', edgeId: edge.edgeId, nodeId: edge.source }),\n );\n\n const cycle = findCycle(graph);\n if (cycle) cycle.forEach((nodeId) => issues.push({ code: 'cycle', severity: 'error', nodeId }));\n\n nodes\n .filter((node) => flowOutputsOf(registry.get(node.type), node.config).includes('true'))\n .filter((node) => !edges.some((edge) => edge.source === node.nodeId && edge.sourcePort === 'true'))\n .forEach((node) => issues.push({ code: 'missingTrueBranch', severity: 'warning', nodeId: node.nodeId }));\n\n return issues;\n};\n\nexport const hasBlockingIssues = (issues: Array<IFlowIssue>): boolean =>\n (issues ?? []).some((issue) => issue.severity === 'error');\n\n/**\n * Lays the tree out by levels from the trigger: each level one column to the right,\n * siblings stacked in the column. Used only for a flow with no saved positions (one born from a rule) or when\n * the user asks for it; a position the user arranged is data and is never overwritten\n * implicitly.\n */\nexport const layoutFlowByLevels = (graph: IFlowGraph, registry: IFlowBlockRegistry): Record<string, IFlowPosition> => {\n const nodes = nodesOf(graph);\n const outgoing = outgoingByNode(graph);\n const levelOf = new Map<string, number>();\n const roots = triggerNodesOf(graph, registry);\n const queue: Array<string> = roots.map((root) => root.nodeId);\n roots.forEach((root) => levelOf.set(root.nodeId, 0));\n\n while (queue.length > 0) {\n const nodeId = queue.shift();\n if (nodeId === undefined) continue;\n const level = levelOf.get(nodeId) ?? 0;\n for (const edge of outgoing.get(nodeId) ?? []) {\n if (levelOf.has(edge.target)) continue;\n levelOf.set(edge.target, level + 1);\n queue.push(edge.target);\n }\n }\n\n const deepestLevel = Math.max(-1, ...Array.from(levelOf.values()));\n nodes.filter((node) => !levelOf.has(node.nodeId)).forEach((node) => levelOf.set(node.nodeId, deepestLevel + 1));\n\n const nodesByLevel = new Map<number, Array<string>>();\n nodes.forEach((node) => {\n const level = levelOf.get(node.nodeId) ?? 0;\n nodesByLevel.set(level, [...(nodesByLevel.get(level) ?? []), node.nodeId]);\n });\n\n const positions: Record<string, IFlowPosition> = {};\n nodesByLevel.forEach((nodeIds, level) => {\n const columnHeight = (nodeIds.length - 1) * FLOW_SIBLING_GAP;\n nodeIds.forEach((nodeId, index) => {\n positions[nodeId] = { x: level * FLOW_LEVEL_GAP, y: index * FLOW_SIBLING_GAP - columnHeight / 2 };\n });\n });\n return positions;\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { ComponentType, ReactNode } from 'react';
|
|
2
|
+
import { SymbolCodepoints } from '../MaterialSymbol';
|
|
3
|
+
export type TFlowPortId = 'next' | 'true' | 'false' | 'error';
|
|
4
|
+
export type TFlowBlockCategory = 'trigger' | 'condition' | 'action';
|
|
5
|
+
export interface IFlowPosition {
|
|
6
|
+
x: number;
|
|
7
|
+
y: number;
|
|
8
|
+
}
|
|
9
|
+
export interface IFlowNode<TConfig = unknown> {
|
|
10
|
+
nodeId: string;
|
|
11
|
+
type: string;
|
|
12
|
+
typeVersion: number;
|
|
13
|
+
config: TConfig;
|
|
14
|
+
position: IFlowPosition;
|
|
15
|
+
label?: string;
|
|
16
|
+
disabled?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface IFlowEdge {
|
|
19
|
+
edgeId: string;
|
|
20
|
+
source: string;
|
|
21
|
+
sourcePort: TFlowPortId;
|
|
22
|
+
target: string;
|
|
23
|
+
}
|
|
24
|
+
export type TFlowAnnotationKind = 'text' | 'rectangle' | 'ellipse' | 'line' | 'arrow' | 'step' | 'drawing';
|
|
25
|
+
export type TFlowAnnotationStroke = 'thin' | 'medium' | 'thick';
|
|
26
|
+
export type TFlowAnnotationTone = 'neutral' | 'brand' | 'success' | 'warning' | 'danger' | 'info';
|
|
27
|
+
/** What a press on the empty canvas does: select (marquee) or draw one kind of annotation. */
|
|
28
|
+
export type TFlowCanvasTool = 'select' | TFlowAnnotationKind;
|
|
29
|
+
export type TFlowShapeTool = Extract<TFlowAnnotationKind, 'line' | 'arrow' | 'rectangle' | 'ellipse' | 'step'>;
|
|
30
|
+
export interface IFlowSize {
|
|
31
|
+
width: number;
|
|
32
|
+
height: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* A note drawn on the canvas for the people reading the flow. It never runs: the engine reads
|
|
36
|
+
* `nodes` and `edges` only, and graph validation ignores it.
|
|
37
|
+
*/
|
|
38
|
+
export interface IFlowAnnotation {
|
|
39
|
+
annotationId: string;
|
|
40
|
+
kind: TFlowAnnotationKind;
|
|
41
|
+
/** Top-left corner of its box, in canvas coordinates. */
|
|
42
|
+
position: IFlowPosition;
|
|
43
|
+
size: IFlowSize;
|
|
44
|
+
tone: TFlowAnnotationTone;
|
|
45
|
+
/** Line weight of shapes and strokes, and the size of a text. Absent reads as `medium`. */
|
|
46
|
+
stroke?: TFlowAnnotationStroke;
|
|
47
|
+
text?: string;
|
|
48
|
+
/** `step`: the number it shows. */
|
|
49
|
+
step?: number;
|
|
50
|
+
/** `line` and `arrow`: start and end; `drawing`: the stroke. Relative to `position`. */
|
|
51
|
+
points?: Array<IFlowPosition>;
|
|
52
|
+
}
|
|
53
|
+
export interface IFlowGraph {
|
|
54
|
+
nodes: Array<IFlowNode>;
|
|
55
|
+
edges: Array<IFlowEdge>;
|
|
56
|
+
annotations?: Array<IFlowAnnotation>;
|
|
57
|
+
}
|
|
58
|
+
export type TFlowIssueSeverity = 'error' | 'warning';
|
|
59
|
+
export type TFlowGraphIssueCode = 'missingTrigger' | 'multipleTriggers' | 'unknownBlock' | 'unreachableNode' | 'multipleInputs' | 'portFanOut' | 'cycle' | 'missingTrueBranch';
|
|
60
|
+
export interface IFlowIssue {
|
|
61
|
+
/** A graph rule from `TFlowGraphIssueCode`, or a block-specific code from its `validate`. */
|
|
62
|
+
code: string;
|
|
63
|
+
severity: TFlowIssueSeverity;
|
|
64
|
+
/** Already translated by the block. Graph issues leave it empty and the UI names them. */
|
|
65
|
+
message?: string;
|
|
66
|
+
nodeId?: string;
|
|
67
|
+
edgeId?: string;
|
|
68
|
+
}
|
|
69
|
+
export type TFlowRunStepStatus = 'passed' | 'failed' | 'skipped' | 'wouldRun' | 'error' | 'blocked';
|
|
70
|
+
/** The result of one run (real or simulated) painted over the canvas. */
|
|
71
|
+
export interface IFlowRunOverlay {
|
|
72
|
+
steps: Record<string, TFlowRunStepStatus>;
|
|
73
|
+
traversedEdgeIds: Array<string>;
|
|
74
|
+
}
|
|
75
|
+
export interface IFlowBlockConfigPanelProps<TConfig> {
|
|
76
|
+
config: TConfig;
|
|
77
|
+
onChange: (next: TConfig) => void;
|
|
78
|
+
readOnly?: boolean;
|
|
79
|
+
}
|
|
80
|
+
export type TFlowBlockIssue = Omit<IFlowIssue, 'nodeId' | 'edgeId'>;
|
|
81
|
+
export interface IFlowBlockDefinition<TConfig = unknown> {
|
|
82
|
+
/** Namespaced and stable: `trigger.recordEvent`, `action.moveWorkflowCard`. */
|
|
83
|
+
type: string;
|
|
84
|
+
typeVersion: number;
|
|
85
|
+
category: TFlowBlockCategory;
|
|
86
|
+
icon: SymbolCodepoints;
|
|
87
|
+
/** Translated by the host. */
|
|
88
|
+
label: string;
|
|
89
|
+
outputs: Array<TFlowPortId>;
|
|
90
|
+
/** Ports that depend on the config, e.g. an error path the user turns on inside the block. Defaults to `outputs`. */
|
|
91
|
+
resolveOutputs?: (config: TConfig) => Array<TFlowPortId>;
|
|
92
|
+
/** How many of this block a flow may hold; omit for no limit. */
|
|
93
|
+
maxInstances?: number;
|
|
94
|
+
/** `false` keeps the block on the canvas: Delete and the inspector skip it. Defaults to `true`. */
|
|
95
|
+
removable?: boolean;
|
|
96
|
+
createDefaultConfig: () => TConfig;
|
|
97
|
+
ConfigPanel: ComponentType<IFlowBlockConfigPanelProps<TConfig>>;
|
|
98
|
+
/** When one block stands for several kinds (chosen inside it), the icon and name of the chosen kind. */
|
|
99
|
+
resolveIcon?: (config: TConfig) => SymbolCodepoints | undefined;
|
|
100
|
+
resolveLabel?: (config: TConfig) => string | undefined;
|
|
101
|
+
/** One line inside the block on the canvas. */
|
|
102
|
+
renderSummary: (config: TConfig) => ReactNode;
|
|
103
|
+
validate: (config: TConfig) => Array<TFlowBlockIssue>;
|
|
104
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flowTypes.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface IFlowViewport {
|
|
2
|
+
x: number;
|
|
3
|
+
y: number;
|
|
4
|
+
zoom: number;
|
|
5
|
+
}
|
|
6
|
+
export interface IFlowRect {
|
|
7
|
+
x: number;
|
|
8
|
+
y: number;
|
|
9
|
+
width: number;
|
|
10
|
+
height: number;
|
|
11
|
+
}
|
|
12
|
+
export interface IFlowSize {
|
|
13
|
+
width: number;
|
|
14
|
+
height: number;
|
|
15
|
+
}
|
|
16
|
+
/** Breathing room between a revealed block and the edge of the canvas, in screen pixels. */
|
|
17
|
+
export declare const FLOW_REVEAL_PADDING = 32;
|
|
18
|
+
/**
|
|
19
|
+
* The smallest pan that brings `rect` (flow coordinates) fully inside a canvas of `canvasSize`
|
|
20
|
+
* (screen pixels), keeping the zoom. Returns null when the rect is already fully visible, so a
|
|
21
|
+
* block on screen never moves the view. A rect larger than the canvas is aligned to its top-left.
|
|
22
|
+
*/
|
|
23
|
+
export declare const viewportToReveal: (viewport: IFlowViewport, rect: IFlowRect, canvasSize: IFlowSize, padding?: number) => IFlowViewport | null;
|
|
24
|
+
/** The box around several rects; null for none. */
|
|
25
|
+
export declare const boundsOfRects: (rects: Array<IFlowRect>) => IFlowRect | null;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
const FLOW_REVEAL_PADDING = 32;
|
|
2
|
+
const shiftOnAxis = (start, end, min, max) => {
|
|
3
|
+
if (start < min) return min - start;
|
|
4
|
+
if (end > max) return Math.max(max - end, min - start);
|
|
5
|
+
return 0;
|
|
6
|
+
};
|
|
7
|
+
const viewportToReveal = (viewport, rect, canvasSize, padding = FLOW_REVEAL_PADDING) => {
|
|
8
|
+
if (canvasSize.width <= 0 || canvasSize.height <= 0) return null;
|
|
9
|
+
const left = viewport.x + rect.x * viewport.zoom;
|
|
10
|
+
const top = viewport.y + rect.y * viewport.zoom;
|
|
11
|
+
const right = left + rect.width * viewport.zoom;
|
|
12
|
+
const bottom = top + rect.height * viewport.zoom;
|
|
13
|
+
const deltaX = shiftOnAxis(left, right, padding, canvasSize.width - padding);
|
|
14
|
+
const deltaY = shiftOnAxis(top, bottom, padding, canvasSize.height - padding);
|
|
15
|
+
if (deltaX === 0 && deltaY === 0) return null;
|
|
16
|
+
return { x: viewport.x + deltaX, y: viewport.y + deltaY, zoom: viewport.zoom };
|
|
17
|
+
};
|
|
18
|
+
const boundsOfRects = (rects) => {
|
|
19
|
+
if (rects.length === 0) return null;
|
|
20
|
+
const minX = Math.min(...rects.map((rect) => rect.x));
|
|
21
|
+
const minY = Math.min(...rects.map((rect) => rect.y));
|
|
22
|
+
const maxX = Math.max(...rects.map((rect) => rect.x + rect.width));
|
|
23
|
+
const maxY = Math.max(...rects.map((rect) => rect.y + rect.height));
|
|
24
|
+
return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };
|
|
25
|
+
};
|
|
26
|
+
export {
|
|
27
|
+
FLOW_REVEAL_PADDING,
|
|
28
|
+
boundsOfRects,
|
|
29
|
+
viewportToReveal
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=flowViewport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flowViewport.js","sources":["../../../../src/components/UI/Flow/flowViewport.ts"],"sourcesContent":["export interface IFlowViewport {\n x: number;\n y: number;\n zoom: number;\n}\n\nexport interface IFlowRect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface IFlowSize {\n width: number;\n height: number;\n}\n\n/** Breathing room between a revealed block and the edge of the canvas, in screen pixels. */\nexport const FLOW_REVEAL_PADDING = 32;\n\nconst shiftOnAxis = (start: number, end: number, min: number, max: number): number => {\n if (start < min) return min - start;\n if (end > max) return Math.max(max - end, min - start);\n return 0;\n};\n\n/**\n * The smallest pan that brings `rect` (flow coordinates) fully inside a canvas of `canvasSize`\n * (screen pixels), keeping the zoom. Returns null when the rect is already fully visible, so a\n * block on screen never moves the view. A rect larger than the canvas is aligned to its top-left.\n */\nexport const viewportToReveal = (\n viewport: IFlowViewport,\n rect: IFlowRect,\n canvasSize: IFlowSize,\n padding: number = FLOW_REVEAL_PADDING,\n): IFlowViewport | null => {\n if (canvasSize.width <= 0 || canvasSize.height <= 0) return null;\n const left = viewport.x + rect.x * viewport.zoom;\n const top = viewport.y + rect.y * viewport.zoom;\n const right = left + rect.width * viewport.zoom;\n const bottom = top + rect.height * viewport.zoom;\n\n const deltaX = shiftOnAxis(left, right, padding, canvasSize.width - padding);\n const deltaY = shiftOnAxis(top, bottom, padding, canvasSize.height - padding);\n if (deltaX === 0 && deltaY === 0) return null;\n return { x: viewport.x + deltaX, y: viewport.y + deltaY, zoom: viewport.zoom };\n};\n\n/** The box around several rects; null for none. */\nexport const boundsOfRects = (rects: Array<IFlowRect>): IFlowRect | null => {\n if (rects.length === 0) return null;\n const minX = Math.min(...rects.map((rect) => rect.x));\n const minY = Math.min(...rects.map((rect) => rect.y));\n const maxX = Math.max(...rects.map((rect) => rect.x + rect.width));\n const maxY = Math.max(...rects.map((rect) => rect.y + rect.height));\n return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };\n};\n"],"names":[],"mappings":"AAmBO,MAAM,sBAAsB;AAEnC,MAAM,cAAc,CAAC,OAAe,KAAa,KAAa,QAAwB;AACpF,MAAI,QAAQ,IAAK,QAAO,MAAM;AAC9B,MAAI,MAAM,IAAK,QAAO,KAAK,IAAI,MAAM,KAAK,MAAM,KAAK;AACrD,SAAO;AACT;AAOO,MAAM,mBAAmB,CAC9B,UACA,MACA,YACA,UAAkB,wBACO;AACzB,MAAI,WAAW,SAAS,KAAK,WAAW,UAAU,EAAG,QAAO;AAC5D,QAAM,OAAO,SAAS,IAAI,KAAK,IAAI,SAAS;AAC5C,QAAM,MAAM,SAAS,IAAI,KAAK,IAAI,SAAS;AAC3C,QAAM,QAAQ,OAAO,KAAK,QAAQ,SAAS;AAC3C,QAAM,SAAS,MAAM,KAAK,SAAS,SAAS;AAE5C,QAAM,SAAS,YAAY,MAAM,OAAO,SAAS,WAAW,QAAQ,OAAO;AAC3E,QAAM,SAAS,YAAY,KAAK,QAAQ,SAAS,WAAW,SAAS,OAAO;AAC5E,MAAI,WAAW,KAAK,WAAW,EAAG,QAAO;AACzC,SAAO,EAAE,GAAG,SAAS,IAAI,QAAQ,GAAG,SAAS,IAAI,QAAQ,MAAM,SAAS,KAAA;AAC1E;AAGO,MAAM,gBAAgB,CAAC,UAA8C;AAC1E,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,QAAM,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC;AACpD,QAAM,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC;AACpD,QAAM,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI,KAAK,KAAK,CAAC;AACjE,QAAM,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI,KAAK,MAAM,CAAC;AAClE,SAAO,EAAE,GAAG,MAAM,GAAG,MAAM,OAAO,OAAO,MAAM,QAAQ,OAAO,KAAA;AAChE;"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { FLOW_ANNOTATION_TONES, normalizeFlowAnnotations } from './flowAnnotations';
|
|
2
|
+
export { createFlowBlockRegistry, defineFlowBlock, flowOutputsOf, type IFlowBlockRegistry } from './flowBlockRegistry';
|
|
3
|
+
export { default as FlowCanvas, type IFlowCanvasProps } from './FlowCanvas';
|
|
4
|
+
export { default as FlowEditorProvider, useFlowBlockRegistry, useFlowEditor, useFlowEditorStore, } from './FlowEditorProvider';
|
|
5
|
+
export { createFlowEditorStore, type IFlowAnnotationGeometry, type IFlowEditorState, type IFlowSelection, selectFlowInspectedNodeId, type TFlowEditorStore, } from './flowEditorStore';
|
|
6
|
+
export { canConnect, findCycle, FLOW_LEVEL_GAP, FLOW_SIBLING_GAP, hasBlockingIssues, isFlowNodeRemovable, layoutFlowByLevels, reachableFrom, triggerNodesOf, validateFlowGraph, } from './flowGraph';
|
|
7
|
+
export { default as FlowInspector } from './FlowInspector';
|
|
8
|
+
export { default as FlowIssueList } from './FlowIssueList';
|
|
9
|
+
export { default as FlowLaneMap, type IFlowArc, type IFlowLane, type TFlowArcTone } from './FlowLaneMap';
|
|
10
|
+
export { default as FlowNodeShell, type IFlowNodeShellProps } from './FlowNodeShell';
|
|
11
|
+
export { default as FlowResizablePanel, type IFlowResizablePanelProps } from './FlowResizablePanel';
|
|
12
|
+
export type * from './flowTypes';
|
|
13
|
+
export { FLOW_RUN_STATUS_TONE, useFlowLabels } from './useFlowLabels';
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { FLOW_ANNOTATION_TONES, normalizeFlowAnnotations } from "./flowAnnotations.js";
|
|
2
|
+
import { createFlowBlockRegistry, defineFlowBlock, flowOutputsOf } from "./flowBlockRegistry.js";
|
|
3
|
+
import { default as default2 } from "./FlowCanvas.js";
|
|
4
|
+
import { default as default3, useFlowBlockRegistry, useFlowEditor, useFlowEditorStore } from "./FlowEditorProvider.js";
|
|
5
|
+
import { createFlowEditorStore, selectFlowInspectedNodeId } from "./flowEditorStore.js";
|
|
6
|
+
import { FLOW_LEVEL_GAP, FLOW_SIBLING_GAP, canConnect, findCycle, hasBlockingIssues, isFlowNodeRemovable, layoutFlowByLevels, reachableFrom, triggerNodesOf, validateFlowGraph } from "./flowGraph.js";
|
|
7
|
+
import { default as default4 } from "./FlowInspector.js";
|
|
8
|
+
import { default as default5 } from "./FlowIssueList.js";
|
|
9
|
+
import { default as default6 } from "./FlowLaneMap.js";
|
|
10
|
+
import { default as default7 } from "./FlowNodeShell.js";
|
|
11
|
+
import { default as default8 } from "./FlowResizablePanel.js";
|
|
12
|
+
import { FLOW_RUN_STATUS_TONE, useFlowLabels } from "./useFlowLabels.js";
|
|
13
|
+
export {
|
|
14
|
+
FLOW_ANNOTATION_TONES,
|
|
15
|
+
FLOW_LEVEL_GAP,
|
|
16
|
+
FLOW_RUN_STATUS_TONE,
|
|
17
|
+
FLOW_SIBLING_GAP,
|
|
18
|
+
default2 as FlowCanvas,
|
|
19
|
+
default3 as FlowEditorProvider,
|
|
20
|
+
default4 as FlowInspector,
|
|
21
|
+
default5 as FlowIssueList,
|
|
22
|
+
default6 as FlowLaneMap,
|
|
23
|
+
default7 as FlowNodeShell,
|
|
24
|
+
default8 as FlowResizablePanel,
|
|
25
|
+
canConnect,
|
|
26
|
+
createFlowBlockRegistry,
|
|
27
|
+
createFlowEditorStore,
|
|
28
|
+
defineFlowBlock,
|
|
29
|
+
findCycle,
|
|
30
|
+
flowOutputsOf,
|
|
31
|
+
hasBlockingIssues,
|
|
32
|
+
isFlowNodeRemovable,
|
|
33
|
+
layoutFlowByLevels,
|
|
34
|
+
normalizeFlowAnnotations,
|
|
35
|
+
reachableFrom,
|
|
36
|
+
selectFlowInspectedNodeId,
|
|
37
|
+
triggerNodesOf,
|
|
38
|
+
useFlowBlockRegistry,
|
|
39
|
+
useFlowEditor,
|
|
40
|
+
useFlowEditorStore,
|
|
41
|
+
useFlowLabels,
|
|
42
|
+
validateFlowGraph
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { RefObject } from 'react';
|
|
2
|
+
import { IFlowPosition, TFlowAnnotationKind, TFlowAnnotationStroke, TFlowAnnotationTone, TFlowCanvasTool } from './flowTypes';
|
|
3
|
+
export interface IFlowAnnotationDraft {
|
|
4
|
+
kind: TFlowAnnotationKind;
|
|
5
|
+
tone: TFlowAnnotationTone;
|
|
6
|
+
stroke: TFlowAnnotationStroke;
|
|
7
|
+
start: IFlowPosition;
|
|
8
|
+
current: IFlowPosition;
|
|
9
|
+
points: Array<IFlowPosition>;
|
|
10
|
+
}
|
|
11
|
+
interface IUseFlowAnnotationDrawingOptions {
|
|
12
|
+
containerRef: RefObject<HTMLDivElement>;
|
|
13
|
+
tool: TFlowCanvasTool;
|
|
14
|
+
tone: TFlowAnnotationTone;
|
|
15
|
+
stroke: TFlowAnnotationStroke;
|
|
16
|
+
enabled: boolean;
|
|
17
|
+
onCreated: (annotationId: string, kind: TFlowAnnotationKind) => void;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* While a drawing tool is active, a press anywhere on the canvas draws, over blocks and annotations
|
|
21
|
+
* too, as in Figma. Wheel and pinch keep panning and zooming, because nothing is laid over the canvas:
|
|
22
|
+
* the press is heard on the pane itself. Returns the shape being drawn, for the preview.
|
|
23
|
+
*/
|
|
24
|
+
export declare const useFlowAnnotationDrawing: ({ containerRef, tool, tone, stroke, enabled, onCreated, }: IUseFlowAnnotationDrawingOptions) => IFlowAnnotationDraft | null;
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { useState, useEffect } from "react";
|
|
2
|
+
import { useReactFlow } from "@xyflow/react";
|
|
3
|
+
import { FLOW_DRAWING_MAX_POINTS, nextFlowStepNumber, FLOW_ANNOTATION_MIN_SIZE, FLOW_TEXT_CARET_OFFSET, boxBetween, boxAroundPoints } from "./flowAnnotations.js";
|
|
4
|
+
import { useFlowEditorStore } from "./FlowEditorProvider.js";
|
|
5
|
+
const CLICK_TRAVEL_PX = 4;
|
|
6
|
+
const DEFAULT_SHAPE_SIZE = { width: 160, height: 96 };
|
|
7
|
+
const DEFAULT_ARROW_LENGTH = 160;
|
|
8
|
+
const STEP_SIZE = 32;
|
|
9
|
+
const STROKE_PADDING = 6;
|
|
10
|
+
const ARROW_PADDING = 12;
|
|
11
|
+
const DRAWING_STEP_PX = 2;
|
|
12
|
+
const FREE_POSITION = { snapToGrid: false };
|
|
13
|
+
const distance = (from, to) => Math.hypot(to.x - from.x, to.y - from.y);
|
|
14
|
+
const annotationFromDraft = (draft, isClick, nextStep) => {
|
|
15
|
+
const { kind, tone, stroke, start, current } = draft;
|
|
16
|
+
const style = { kind, tone, stroke };
|
|
17
|
+
if (kind === "text")
|
|
18
|
+
return {
|
|
19
|
+
...style,
|
|
20
|
+
position: { x: start.x, y: start.y - FLOW_TEXT_CARET_OFFSET },
|
|
21
|
+
size: { width: FLOW_ANNOTATION_MIN_SIZE, height: FLOW_ANNOTATION_MIN_SIZE },
|
|
22
|
+
text: ""
|
|
23
|
+
};
|
|
24
|
+
if (kind === "step")
|
|
25
|
+
return {
|
|
26
|
+
...style,
|
|
27
|
+
position: { x: start.x - STEP_SIZE / 2, y: start.y - STEP_SIZE / 2 },
|
|
28
|
+
size: { width: STEP_SIZE, height: STEP_SIZE },
|
|
29
|
+
step: nextStep
|
|
30
|
+
};
|
|
31
|
+
if (kind === "rectangle" || kind === "ellipse")
|
|
32
|
+
return isClick ? { ...style, position: start, size: DEFAULT_SHAPE_SIZE } : { ...style, ...boxBetween(start, current) };
|
|
33
|
+
if (kind === "arrow" || kind === "line") {
|
|
34
|
+
const end = isClick ? { x: start.x + DEFAULT_ARROW_LENGTH, y: start.y } : current;
|
|
35
|
+
return { ...style, ...boxAroundPoints([start, end], ARROW_PADDING) };
|
|
36
|
+
}
|
|
37
|
+
if (draft.points.length < 2) return null;
|
|
38
|
+
return { ...style, ...boxAroundPoints(draft.points, STROKE_PADDING) };
|
|
39
|
+
};
|
|
40
|
+
const useFlowAnnotationDrawing = ({
|
|
41
|
+
containerRef,
|
|
42
|
+
tool,
|
|
43
|
+
tone,
|
|
44
|
+
stroke,
|
|
45
|
+
enabled,
|
|
46
|
+
onCreated
|
|
47
|
+
}) => {
|
|
48
|
+
const store = useFlowEditorStore();
|
|
49
|
+
const { screenToFlowPosition } = useReactFlow();
|
|
50
|
+
const [draft, setDraft] = useState(null);
|
|
51
|
+
useEffect(() => {
|
|
52
|
+
if (!enabled || tool === "select") return void 0;
|
|
53
|
+
const pane = containerRef.current?.querySelector(".react-flow__pane");
|
|
54
|
+
if (!pane) return void 0;
|
|
55
|
+
let detachGesture = null;
|
|
56
|
+
const handlePointerDown = (event) => {
|
|
57
|
+
if (event.button !== 0 || !(event.target instanceof Node) || !pane.contains(event.target)) return;
|
|
58
|
+
event.preventDefault();
|
|
59
|
+
event.stopPropagation();
|
|
60
|
+
const kind = tool;
|
|
61
|
+
const startScreen = { x: event.clientX, y: event.clientY };
|
|
62
|
+
const start = screenToFlowPosition(startScreen, FREE_POSITION);
|
|
63
|
+
let current = { kind, tone, stroke, start, current: start, points: [start] };
|
|
64
|
+
let lastKeptScreen = startScreen;
|
|
65
|
+
setDraft(current);
|
|
66
|
+
const handlePointerMove = (moveEvent) => {
|
|
67
|
+
const screen = { x: moveEvent.clientX, y: moveEvent.clientY };
|
|
68
|
+
const point = screenToFlowPosition(screen, FREE_POSITION);
|
|
69
|
+
const keepsPoint = kind === "drawing" && distance(lastKeptScreen, screen) >= DRAWING_STEP_PX && current.points.length < FLOW_DRAWING_MAX_POINTS;
|
|
70
|
+
if (keepsPoint) lastKeptScreen = screen;
|
|
71
|
+
current = { ...current, current: point, points: keepsPoint ? [...current.points, point] : current.points };
|
|
72
|
+
setDraft(current);
|
|
73
|
+
};
|
|
74
|
+
const detach = () => {
|
|
75
|
+
window.removeEventListener("pointermove", handlePointerMove);
|
|
76
|
+
window.removeEventListener("pointerup", handlePointerUp);
|
|
77
|
+
window.removeEventListener("pointercancel", handlePointerCancel);
|
|
78
|
+
detachGesture = null;
|
|
79
|
+
};
|
|
80
|
+
const handlePointerUp = (upEvent) => {
|
|
81
|
+
detach();
|
|
82
|
+
setDraft(null);
|
|
83
|
+
const isClick = distance(startScreen, { x: upEvent.clientX, y: upEvent.clientY }) < CLICK_TRAVEL_PX;
|
|
84
|
+
const annotation = annotationFromDraft(
|
|
85
|
+
{ ...current, current: screenToFlowPosition({ x: upEvent.clientX, y: upEvent.clientY }, FREE_POSITION) },
|
|
86
|
+
isClick,
|
|
87
|
+
nextFlowStepNumber(store.getState().graph.annotations ?? [])
|
|
88
|
+
);
|
|
89
|
+
if (!annotation) return;
|
|
90
|
+
const swallowClick = (clickEvent) => clickEvent.stopPropagation();
|
|
91
|
+
pane.addEventListener("click", swallowClick, { capture: true, once: true });
|
|
92
|
+
window.setTimeout(() => pane.removeEventListener("click", swallowClick, { capture: true }), 0);
|
|
93
|
+
const annotationId = store.getState().addAnnotation(annotation);
|
|
94
|
+
onCreated(annotationId, kind);
|
|
95
|
+
};
|
|
96
|
+
const handlePointerCancel = () => {
|
|
97
|
+
detach();
|
|
98
|
+
setDraft(null);
|
|
99
|
+
};
|
|
100
|
+
window.addEventListener("pointermove", handlePointerMove);
|
|
101
|
+
window.addEventListener("pointerup", handlePointerUp);
|
|
102
|
+
window.addEventListener("pointercancel", handlePointerCancel);
|
|
103
|
+
detachGesture = detach;
|
|
104
|
+
};
|
|
105
|
+
pane.addEventListener("pointerdown", handlePointerDown, true);
|
|
106
|
+
return () => {
|
|
107
|
+
pane.removeEventListener("pointerdown", handlePointerDown, true);
|
|
108
|
+
detachGesture?.();
|
|
109
|
+
setDraft(null);
|
|
110
|
+
};
|
|
111
|
+
}, [containerRef, enabled, tool, tone, stroke, screenToFlowPosition, store, onCreated]);
|
|
112
|
+
return draft;
|
|
113
|
+
};
|
|
114
|
+
export {
|
|
115
|
+
useFlowAnnotationDrawing
|
|
116
|
+
};
|
|
117
|
+
//# sourceMappingURL=useFlowAnnotationDrawing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFlowAnnotationDrawing.js","sources":["../../../../src/components/UI/Flow/useFlowAnnotationDrawing.ts"],"sourcesContent":["import { type RefObject, useEffect, useState } from 'react';\n\nimport { useReactFlow } from '@xyflow/react';\n\nimport {\n boxAroundPoints,\n boxBetween,\n FLOW_ANNOTATION_MIN_SIZE,\n FLOW_DRAWING_MAX_POINTS,\n FLOW_TEXT_CARET_OFFSET,\n nextFlowStepNumber,\n} from './flowAnnotations';\nimport { useFlowEditorStore } from './FlowEditorProvider';\nimport type {\n IFlowAnnotation,\n IFlowPosition,\n TFlowAnnotationKind,\n TFlowAnnotationStroke,\n TFlowAnnotationTone,\n TFlowCanvasTool,\n} from './flowTypes';\n\n/** Below this travel (screen px) a press is a click: shapes and arrows get a default size. */\nconst CLICK_TRAVEL_PX = 4;\nconst DEFAULT_SHAPE_SIZE = { width: 160, height: 96 };\nconst DEFAULT_ARROW_LENGTH = 160;\nconst STEP_SIZE = 32;\nconst STROKE_PADDING = 6;\nconst ARROW_PADDING = 12;\n/** Between two kept points of a stroke, in screen px: denser adds weight, not detail. */\nconst DRAWING_STEP_PX = 2;\n/** xyflow snaps converted points to the block grid by default; a hand-drawn stroke must stay free. */\nconst FREE_POSITION = { snapToGrid: false };\n\nexport interface IFlowAnnotationDraft {\n kind: TFlowAnnotationKind;\n tone: TFlowAnnotationTone;\n stroke: TFlowAnnotationStroke;\n start: IFlowPosition;\n current: IFlowPosition;\n points: Array<IFlowPosition>;\n}\n\ninterface IUseFlowAnnotationDrawingOptions {\n containerRef: RefObject<HTMLDivElement>;\n tool: TFlowCanvasTool;\n tone: TFlowAnnotationTone;\n stroke: TFlowAnnotationStroke;\n enabled: boolean;\n onCreated: (annotationId: string, kind: TFlowAnnotationKind) => void;\n}\n\nconst distance = (from: { x: number; y: number }, to: { x: number; y: number }): number =>\n Math.hypot(to.x - from.x, to.y - from.y);\n\nconst annotationFromDraft = (\n draft: IFlowAnnotationDraft,\n isClick: boolean,\n nextStep: number,\n): Omit<IFlowAnnotation, 'annotationId'> | null => {\n const { kind, tone, stroke, start, current } = draft;\n const style = { kind, tone, stroke };\n if (kind === 'text')\n return {\n ...style,\n position: { x: start.x, y: start.y - FLOW_TEXT_CARET_OFFSET },\n size: { width: FLOW_ANNOTATION_MIN_SIZE, height: FLOW_ANNOTATION_MIN_SIZE },\n text: '',\n };\n if (kind === 'step')\n return {\n ...style,\n position: { x: start.x - STEP_SIZE / 2, y: start.y - STEP_SIZE / 2 },\n size: { width: STEP_SIZE, height: STEP_SIZE },\n step: nextStep,\n };\n if (kind === 'rectangle' || kind === 'ellipse')\n return isClick\n ? { ...style, position: start, size: DEFAULT_SHAPE_SIZE }\n : { ...style, ...boxBetween(start, current) };\n if (kind === 'arrow' || kind === 'line') {\n const end = isClick ? { x: start.x + DEFAULT_ARROW_LENGTH, y: start.y } : current;\n return { ...style, ...boxAroundPoints([start, end], ARROW_PADDING) };\n }\n if (draft.points.length < 2) return null;\n return { ...style, ...boxAroundPoints(draft.points, STROKE_PADDING) };\n};\n\n/**\n * While a drawing tool is active, a press anywhere on the canvas draws, over blocks and annotations\n * too, as in Figma. Wheel and pinch keep panning and zooming, because nothing is laid over the canvas:\n * the press is heard on the pane itself. Returns the shape being drawn, for the preview.\n */\nexport const useFlowAnnotationDrawing = ({\n containerRef,\n tool,\n tone,\n stroke,\n enabled,\n onCreated,\n}: IUseFlowAnnotationDrawingOptions): IFlowAnnotationDraft | null => {\n const store = useFlowEditorStore();\n const { screenToFlowPosition } = useReactFlow();\n const [draft, setDraft] = useState<IFlowAnnotationDraft | null>(null);\n\n useEffect(() => {\n if (!enabled || tool === 'select') return undefined;\n const pane = containerRef.current?.querySelector<HTMLElement>('.react-flow__pane');\n if (!pane) return undefined;\n let detachGesture: (() => void) | null = null;\n\n const handlePointerDown = (event: PointerEvent) => {\n if (event.button !== 0 || !(event.target instanceof Node) || !pane.contains(event.target)) return;\n // Cancelling the press also cancels the mousedown that would start dragging the block under it.\n event.preventDefault();\n event.stopPropagation();\n const kind = tool;\n const startScreen = { x: event.clientX, y: event.clientY };\n const start = screenToFlowPosition(startScreen, FREE_POSITION);\n let current: IFlowAnnotationDraft = { kind, tone, stroke, start, current: start, points: [start] };\n let lastKeptScreen = startScreen;\n setDraft(current);\n\n const handlePointerMove = (moveEvent: PointerEvent) => {\n const screen = { x: moveEvent.clientX, y: moveEvent.clientY };\n const point = screenToFlowPosition(screen, FREE_POSITION);\n const keepsPoint =\n kind === 'drawing' &&\n distance(lastKeptScreen, screen) >= DRAWING_STEP_PX &&\n current.points.length < FLOW_DRAWING_MAX_POINTS;\n if (keepsPoint) lastKeptScreen = screen;\n current = { ...current, current: point, points: keepsPoint ? [...current.points, point] : current.points };\n setDraft(current);\n };\n\n const detach = () => {\n window.removeEventListener('pointermove', handlePointerMove);\n window.removeEventListener('pointerup', handlePointerUp);\n window.removeEventListener('pointercancel', handlePointerCancel);\n detachGesture = null;\n };\n\n const handlePointerUp = (upEvent: PointerEvent) => {\n detach();\n setDraft(null);\n const isClick = distance(startScreen, { x: upEvent.clientX, y: upEvent.clientY }) < CLICK_TRAVEL_PX;\n const annotation = annotationFromDraft(\n { ...current, current: screenToFlowPosition({ x: upEvent.clientX, y: upEvent.clientY }, FREE_POSITION) },\n isClick,\n nextFlowStepNumber(store.getState().graph.annotations ?? []),\n );\n if (!annotation) return;\n // The click that follows this release would clear the new selection, or select what is under it.\n const swallowClick = (clickEvent: MouseEvent) => clickEvent.stopPropagation();\n pane.addEventListener('click', swallowClick, { capture: true, once: true });\n window.setTimeout(() => pane.removeEventListener('click', swallowClick, { capture: true }), 0);\n const annotationId = store.getState().addAnnotation(annotation);\n onCreated(annotationId, kind);\n };\n\n const handlePointerCancel = () => {\n detach();\n setDraft(null);\n };\n\n window.addEventListener('pointermove', handlePointerMove);\n window.addEventListener('pointerup', handlePointerUp);\n window.addEventListener('pointercancel', handlePointerCancel);\n detachGesture = detach;\n };\n\n pane.addEventListener('pointerdown', handlePointerDown, true);\n return () => {\n pane.removeEventListener('pointerdown', handlePointerDown, true);\n detachGesture?.();\n setDraft(null);\n };\n }, [containerRef, enabled, tool, tone, stroke, screenToFlowPosition, store, onCreated]);\n\n return draft;\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { TChipTone } from '../Chips/chipTones';
|
|
2
|
+
import { IFlowIssue, TFlowBlockCategory, TFlowPortId, TFlowRunStepStatus } from './flowTypes';
|
|
3
|
+
export declare const FLOW_RUN_STATUS_TONE: Record<TFlowRunStepStatus, TChipTone>;
|
|
4
|
+
/** Every label the flow UI shows, spelled as literal keys so the translation tooling can read them. */
|
|
5
|
+
export declare const useFlowLabels: () => {
|
|
6
|
+
ports: Record<TFlowPortId, string>;
|
|
7
|
+
categories: Record<TFlowBlockCategory, string>;
|
|
8
|
+
runStatus: Record<TFlowRunStepStatus, string>;
|
|
9
|
+
issueMessage: (issue: IFlowIssue) => string;
|
|
10
|
+
};
|