@ynput/ayon-frontend-shared 0.3.37 → 0.3.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/DetailsPanel.cjs.js +1 -1
- package/dist/DetailsPanel.es.js +25 -24
- package/dist/DetailsPanel.es.js.map +1 -1
- package/dist/_virtual/index.cjs6.js +1 -1
- package/dist/_virtual/index.cjs8.js +1 -1
- package/dist/_virtual/index.es6.js +2 -2
- package/dist/_virtual/index.es8.js +2 -2
- package/dist/index.cjs.js +1 -1
- package/dist/index.es.js +12 -11
- package/dist/index.es.js.map +1 -1
- package/dist/node_modules/parse-numeric-range/index.cjs.js +1 -1
- package/dist/node_modules/parse-numeric-range/index.es.js +1 -1
- package/dist/node_modules/remove-accents/index.cjs.js +1 -1
- package/dist/node_modules/remove-accents/index.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/error-codes/dist/index.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/error-codes/dist/index.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/index.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/index.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/utils.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/utils.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/sdk/dist/utils.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/sdk/dist/utils.es.js +1 -1
- package/dist/shared/node_modules/react-is/index.cjs.js +1 -1
- package/dist/shared/node_modules/react-is/index.es.js +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js +3 -2
- package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js.map +1 -1
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js +1 -1
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js.map +1 -1
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js +5 -4
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js.map +1 -1
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.cjs.js +1 -1
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.es.js +5 -4
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.es.js.map +1 -1
- package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js +1 -1
- package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js.map +1 -1
- package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js +5 -4
- package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.cjs.js +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.cjs.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.es.js +5 -4
- package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.es.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +5 -4
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
- package/dist/shared/src/components/RemotePage/ProjectPageRemote.cjs.js +1 -1
- package/dist/shared/src/components/RemotePage/ProjectPageRemote.cjs.js.map +1 -1
- package/dist/shared/src/components/RemotePage/ProjectPageRemote.es.js +5 -4
- package/dist/shared/src/components/RemotePage/ProjectPageRemote.es.js.map +1 -1
- package/dist/shared/src/components/RemotePage/RemotePageWrapper.cjs.js +1 -1
- package/dist/shared/src/components/RemotePage/RemotePageWrapper.cjs.js.map +1 -1
- package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js +5 -4
- package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js.map +1 -1
- package/dist/shared/src/components/RenameForm/RenameForm.cjs.js +1 -1
- package/dist/shared/src/components/RenameForm/RenameForm.cjs.js.map +1 -1
- package/dist/shared/src/components/RenameForm/RenameForm.es.js +5 -4
- package/dist/shared/src/components/RenameForm/RenameForm.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js +5 -4
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js +6 -5
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js +1 -1
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js +5 -4
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesSelector/Card.cjs.js +1 -1
- package/dist/shared/src/components/ReviewablesSelector/Card.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesSelector/Card.es.js +5 -4
- package/dist/shared/src/components/ReviewablesSelector/Card.es.js.map +1 -1
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js +1 -1
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js.map +1 -1
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js +254 -240
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/FormFile.cjs.js +1 -1
- package/dist/shared/src/components/SimpleFormDialog/FormFile.cjs.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/FormFile.es.js +7 -6
- package/dist/shared/src/components/SimpleFormDialog/FormFile.es.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js +1 -1
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js +5 -4
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js +1 -1
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js.map +1 -1
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js +5 -4
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js.map +1 -1
- package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js +1 -1
- package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js.map +1 -1
- package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js +9 -8
- package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js +1 -1
- package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js +5 -4
- package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js +1 -1
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js +5 -4
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +5 -4
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.es.js +5 -4
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.es.js +5 -4
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.es.js +5 -4
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/DetailsPanelMoreMenu.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/DetailsPanelMoreMenu.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/DetailsPanelMoreMenu.es.js +5 -4
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/DetailsPanelMoreMenu.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useContextAccess.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useContextAccess.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useContextAccess.es.js +5 -4
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useContextAccess.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.es.js +17 -16
- package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.es.js +5 -4
- package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/containers/FeedContextWrapper.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/containers/FeedContextWrapper.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/containers/FeedContextWrapper.es.js +5 -4
- package/dist/shared/src/containers/DetailsPanel/containers/FeedContextWrapper.es.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js +5 -4
- package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js +5 -4
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js +5 -4
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js +5 -4
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityCheckbox/ActivityCheckbox.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityCheckbox/ActivityCheckbox.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityCheckbox/ActivityCheckbox.es.js +5 -4
- package/dist/shared/src/containers/Feed/components/ActivityCheckbox/ActivityCheckbox.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js +5 -4
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.es.js +5 -4
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityVersionReview/ActivityVersionReview.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityVersionReview/ActivityVersionReview.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityVersionReview/ActivityVersionReview.es.js +7 -6
- package/dist/shared/src/containers/Feed/components/ActivityVersionReview/ActivityVersionReview.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js +5 -4
- package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/helpers.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/helpers.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/helpers.es.js +9 -8
- package/dist/shared/src/containers/Feed/components/CommentInput/helpers.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js +5 -4
- package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js.map +1 -1
- package/dist/shared/src/containers/ListTable/ListTable.cjs.js +1 -1
- package/dist/shared/src/containers/ListTable/ListTable.cjs.js.map +1 -1
- package/dist/shared/src/containers/ListTable/ListTable.es.js +5 -4
- package/dist/shared/src/containers/ListTable/ListTable.es.js.map +1 -1
- package/dist/shared/src/containers/ListTable/ListTableCell.cjs.js +1 -1
- package/dist/shared/src/containers/ListTable/ListTableCell.cjs.js.map +1 -1
- package/dist/shared/src/containers/ListTable/ListTableCell.es.js +3 -2
- package/dist/shared/src/containers/ListTable/ListTableCell.es.js.map +1 -1
- package/dist/shared/src/containers/ListTable/ListTableHeader.cjs.js +1 -1
- package/dist/shared/src/containers/ListTable/ListTableHeader.cjs.js.map +1 -1
- package/dist/shared/src/containers/ListTable/ListTableHeader.es.js +5 -4
- package/dist/shared/src/containers/ListTable/ListTableHeader.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +171 -168
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +87 -85
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/ColumnDndProvider.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/ColumnDndProvider.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/ColumnDndProvider.es.js +5 -4
- package/dist/shared/src/containers/ProjectTreeTable/components/ColumnDndProvider.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js +5 -4
- package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js +5 -4
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.es.js +5 -4
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.es.js +63 -58
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js +5 -4
- package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js +8 -7
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js +5 -4
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.es.js +5 -4
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.es.js +5 -4
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js +248 -207
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js +5 -4
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.es.js +5 -4
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js +5 -4
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js +5 -4
- package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js +5 -4
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.es.js +5 -4
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js +16 -15
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/queryFilterToClientFilter.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/queryFilterToClientFilter.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/queryFilterToClientFilter.es.js +66 -55
- package/dist/shared/src/containers/ProjectTreeTable/utils/queryFilterToClientFilter.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.es.js +5 -4
- package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js +2 -2
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js +47 -45
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CommentsWidget.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CommentsWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CommentsWidget.es.js +5 -4
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CommentsWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js +11 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js +76 -51
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.es.js +5 -4
- package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.es.js +5 -4
- package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.es.js.map +1 -1
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +1 -1
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js.map +1 -1
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +5 -4
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js.map +1 -1
- package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js +1 -1
- package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js.map +1 -1
- package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js +5 -4
- package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js.map +1 -1
- package/dist/shared/src/containers/Slicer/components/SlicerSearch.cjs.js +1 -1
- package/dist/shared/src/containers/Slicer/components/SlicerSearch.cjs.js.map +1 -1
- package/dist/shared/src/containers/Slicer/components/SlicerSearch.es.js +5 -4
- package/dist/shared/src/containers/Slicer/components/SlicerSearch.es.js.map +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useSelectedEntityIds.cjs.js +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useSelectedEntityIds.cjs.js.map +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useSelectedEntityIds.es.js +5 -4
- package/dist/shared/src/containers/Slicer/hooks/useSelectedEntityIds.es.js.map +1 -1
- package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.cjs.js +1 -1
- package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.es.js +5 -4
- package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.es.js.map +1 -1
- package/dist/shared/src/context/WebsocketContext.cjs.js +1 -1
- package/dist/shared/src/context/WebsocketContext.cjs.js.map +1 -1
- package/dist/shared/src/context/WebsocketContext.es.js +7 -6
- package/dist/shared/src/context/WebsocketContext.es.js.map +1 -1
- package/dist/types/containers/ProjectTreeTable/ProjectTreeTable.d.ts +1 -0
- package/dist/types/containers/ProjectTreeTable/context/ProjectTableContext.d.ts +1 -0
- package/dist/types/containers/ProjectTreeTable/context/ProjectTableProvider.d.ts +2 -1
- package/dist/types/containers/ProjectTreeTable/hooks/useFetchOverviewData.d.ts +1 -0
- package/dist/types/containers/ProjectTreeTable/types/overviewContext.d.ts +1 -0
- package/dist/types/containers/ProjectTreeTable/widgets/CellWidget.d.ts +1 -0
- package/dist/types/containers/ProjectTreeTable/widgets/LinksWidget.d.ts +1 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectTreeTable.cjs.js","sources":["../../../../../src/containers/ProjectTreeTable/ProjectTreeTable.tsx"],"sourcesContent":["import { useMemo, useRef, useEffect, CSSProperties, useCallback, UIEventHandler, FC } from 'react' // Added useCallback\nimport { useVirtualizer, VirtualItem, Virtualizer } from '@tanstack/react-virtual'\n// TanStack Table imports\nimport {\n useReactTable,\n getCoreRowModel,\n getFilteredRowModel,\n getExpandedRowModel,\n filterFns,\n flexRender,\n Row,\n getSortedRowModel,\n Cell,\n Table,\n Header,\n HeaderGroup,\n RowData,\n ExpandedState,\n} from '@tanstack/react-table'\n\n// Utility imports\nimport clsx from 'clsx'\n\n// Type imports\nimport type { TableRow } from './types/table'\n\n// Component imports\nimport buildTreeTableColumns, {\n DefaultColumns,\n isEntityExpandable,\n TreeTableExtraColumn,\n} from './buildTreeTableColumns'\nimport * as Styled from './ProjectTreeTable.styled'\nimport { RowDragHandleCellContent, ColumnHeaderMenu } from './components'\nimport { TableFooterRow } from './components/TableFooterRow'\nimport type { FieldStats } from '@shared/api'\nimport { getCommonPinningStyles, getColumnWidth } from './utils/pinningUtils'\nimport EmptyPlaceholder from '../../components/EmptyPlaceholder'\nimport HeaderActionButton from './components/HeaderActionButton'\n\n// Context imports\nimport { useCellEditing } from './context/CellEditingContext'\nimport { useSelectionCellsContext } from './context/SelectionCellsContext'\nimport { ClipboardProvider } from './context/ClipboardContext'\nimport { useSelectedRowsContext } from './context/SelectedRowsContext'\nimport { useColumnSettingsContext } from './context/ColumnSettingsContext'\nimport { useMenuContext } from '../../context/MenuContext'\nimport { ROW_SELECTION_COLUMN_ID, DRAG_HANDLE_COLUMN_ID } from './constants'\n\n// Hook imports\nimport useCustomColumnWidthVars from './hooks/useCustomColumnWidthVars'\nimport usePrefetchFolderTasks from './hooks/usePrefetchFolderTasks'\nimport useCellContextMenu, {\n HeaderLabel,\n ContextMenuItemConstructors,\n} from './hooks/useCellContextMenu'\nimport useColumnVirtualization from './hooks/useColumnVirtualization'\nimport useKeyboardNavigation from './hooks/useKeyboardNavigation'\nimport useDynamicRowHeight from './hooks/useDynamicRowHeight'\n\n// EntityPickerDialog import\nimport { EntityPickerDialog } from '../EntityPickerDialog/EntityPickerDialog'\n// Move entity hook\nimport { useMoveEntities } from './hooks/useMoveEntities'\nimport { useProjectDataContext } from '@shared/containers'\n\n// Utility function imports\nimport { CellId, getCellId, parseCellId } from './utils/cellUtils'\nimport { generateLoadingRows, generateDummyAttributes } from './utils/loadingUtils'\nimport { isEntityRestricted, isTargetReadOnly } from './utils/restrictedEntity'\nimport { createPortal } from 'react-dom'\nimport { Button, Icon } from '@ynput/ayon-react-components'\nimport {\n ProjectTableAttribute,\n BuiltInFieldOptions,\n MainCountLabels,\n SummaryCellContentProps,\n} from './types'\nimport { EnumItem } from '@shared/api'\nimport { ToggleExpandAll, useProjectTableContext } from './context/ProjectTableContext'\nimport {\n checkColumnVisibility,\n ensureAtLeastOneVisibleColumn,\n getEntityViewierIds,\n getReadOnlyLists,\n getTableFieldOptions,\n} from './utils'\nimport { EntityUpdate } from './hooks/useUpdateTableData'\n\n// dnd-kit imports\nimport {\n DragOverlay,\n useDndContext,\n type UniqueIdentifier,\n // Removed: DndContext, KeyboardSensor, MouseSensor, TouchSensor, closestCenter, DragEndEvent, DragStartEvent, Active, Over, useSensor, useSensors\n} from '@dnd-kit/core'\n// import { restrictToVerticalAxis } from '@dnd-kit/modifiers'\nimport {\n SortableContext,\n verticalListSortingStrategy,\n useSortable,\n horizontalListSortingStrategy,\n} from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\n\nimport { useProjectContext, usePowerpack, setDetailsPanelTabForScope } from '@shared/context'\nimport { useLoadModule } from '@shared/hooks'\nimport { EDIT_TRIGGER_CLASS } from './widgets/CellWidget'\nimport { toast } from 'react-toastify'\nimport { EntityMoveData } from '@shared/context/MoveEntityContext'\nimport { upperFirst } from 'lodash'\nimport { ColumnsConfig } from './types/columnConfig'\n\ntype CellUpdate = (\n entity: Omit<EntityUpdate, 'id'>,\n config?: { selection?: string[] },\n) => Promise<void>\n\n// rendered while the powerpack summaries remote is unavailable (no license / old addon)\nconst SummaryCellContentFallback: FC<SummaryCellContentProps> = () => null\n\ndeclare module '@tanstack/react-table' {\n interface TableMeta<TData extends RowData> {\n options?: BuiltInFieldOptions\n readOnly?: ProjectTreeTableProps['readOnly']\n projectName?: string\n updateEntities?: CellUpdate\n toggleExpandAll?: ToggleExpandAll\n selection?: string[]\n columnsConfig?: ColumnsConfig\n }\n}\n\nconst matchesColumnId = (id: string, subscribers: string[]) => {\n return subscribers.some((sub) => {\n if (sub.includes('*')) {\n // Escape all regex special characters\n const escaped = sub.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n // Replace escaped '*' (\\*) with regex '.*'\n const pattern = '^' + escaped.replace(/\\\\\\*/g, '.*') + '$'\n const regex = new RegExp(pattern)\n return regex.test(id)\n }\n return id === sub\n })\n}\n\nexport interface ProjectTreeTableProps extends React.HTMLAttributes<HTMLDivElement> {\n scope: string\n sliceId: string\n onScrollBottom?: React.HTMLAttributes<HTMLDivElement>['onScroll']\n onOpenNew?: (type: 'folder' | 'task') => void\n readOnly?: (DefaultColumns | string)[]\n excludedColumns?: (DefaultColumns | string)[]\n excludedSorting?: (DefaultColumns | string)[]\n extraColumns?: TreeTableExtraColumn[]\n includeLinks?: boolean\n isLoading?: boolean\n isExpandable?: boolean // if true, show the expand/collapse icons\n enableSorting?: boolean\n clientSorting?: boolean\n sortableRows?: boolean\n onRowReorder?: (active: UniqueIdentifier, over: UniqueIdentifier | null) => void // Adjusted type for active/over if needed, or keep as Active, Over\n dndActiveId?: UniqueIdentifier | null // Added prop\n columnsConfig?: ColumnsConfig // Configure column behavior (display, styling, etc.)\n showColumnSummaries?: boolean // render the fixed summary footer row\n fieldStats?: FieldStats[] // primary-entity stats (tasks/versions) feeding the footer\n groupFieldStats?: FieldStats[] // group-entity stats (folders/products) for the 'all' row scope\n fieldStatsLoading?: boolean // footer stats still loading -> show skeletons\n mainCountLabels?: MainCountLabels // labels for the main cell dual count (defaults folders/tasks)\n onScrollBottomGroupBy?: (groupValue: string) => void // Handle scroll to bottom for grouped data\n contextMenuItems?: ContextMenuItemConstructors // Additional context menu items to merge with defaults\n onColumnVisibleChange?: (changes: Record<string, boolean>) => void\n onColumnVisibleChangeSubscribed?: string[]\n pt?: {\n container?: React.HTMLAttributes<HTMLDivElement>\n head?: Partial<TableHeadProps>\n }\n}\n\nexport const ProjectTreeTable = ({\n scope,\n sliceId,\n onScroll,\n onScrollBottom, // when the user scrolls to the bottom of the table, this callback is called\n onOpenNew,\n readOnly,\n excludedColumns,\n excludedSorting,\n extraColumns,\n includeLinks,\n isLoading: isLoadingProp,\n isExpandable,\n enableSorting = true,\n clientSorting = false,\n sortableRows = false,\n onRowReorder,\n dndActiveId, // Destructure new prop\n columnsConfig,\n showColumnSummaries = false,\n fieldStats,\n groupFieldStats,\n fieldStatsLoading,\n mainCountLabels,\n onScrollBottomGroupBy, // Destructure new prop for group-by load more\n contextMenuItems: propsContextMenuItems, // Additional context menu items from props\n onColumnVisibleChange,\n onColumnVisibleChangeSubscribed,\n pt,\n ...props\n}: ProjectTreeTableProps) => {\n const {\n columnVisibility,\n columnPinning,\n columnOrder,\n columnSizing,\n setAllColumns,\n sorting,\n sortingOnChange,\n columnPinningOnChange,\n columnSizingOnChange,\n defaultColumnVisibility,\n columnVisibilityOnChange,\n columnOrderOnChange,\n groupBy,\n columnSummaries,\n updateColumnSummary,\n columnSummaryScopes,\n updateColumnSummaryScope,\n columnSummaryFormats,\n updateColumnSummaryFormat,\n } = useColumnSettingsContext()\n const { productTypes, projectName, ...projectInfo } = useProjectContext()\n\n const {\n tableData,\n attribFields,\n entitiesMap,\n users,\n isLoading: isLoadingData,\n error,\n isInitialized,\n expanded,\n updateExpanded,\n toggleExpandAll,\n showHierarchy,\n isFlatFolderView,\n fetchNextPage,\n scopes, // or entityTypes\n getEntityById,\n onResetView,\n overrideGroupBy,\n } = useProjectTableContext()\n const isGrouping = !!groupBy || !!overrideGroupBy\n\n const { writableFields } = useProjectDataContext()\n\n const isLoading = isLoadingProp || isLoadingData\n\n const {\n statuses = [],\n folderTypes = [],\n taskTypes = [],\n tags = [],\n linkTypes = [],\n } = projectInfo || {}\n const options: BuiltInFieldOptions = useMemo(\n () =>\n getTableFieldOptions({\n users,\n statuses,\n folderTypes,\n taskTypes,\n productTypes,\n tags,\n scopes,\n }),\n [users, statuses, folderTypes, taskTypes, scopes, tags],\n )\n\n //The virtualizer needs to know the scrollable container element\n const tableContainerRef = useRef<HTMLDivElement>(null)\n // reference of how many rows are currently rendered in the table\n const tableRowsCountRef = useRef(0)\n\n // Selection context\n const { registerGrid } = useSelectionCellsContext()\n\n // generate loading attrib and rows\n const { loadingAttrib, loadingRows } = useMemo(() => {\n // count the number of children in tbody\n const tableRowsCount = tableContainerRef.current?.querySelectorAll('tbody tr').length || 0\n const loadingAttrib = generateDummyAttributes()\n const loadingRows = generateLoadingRows(\n showHierarchy && tableData.length > 0\n ? Math.min(tableRowsCount, 50)\n : groupBy\n ? Math.max(tableRowsCountRef.current, 50)\n : 50,\n )\n\n return { loadingAttrib, loadingRows }\n }, [])\n\n const showLoadingRows = !isInitialized || isLoading\n\n // Format readonly columns and attributes\n const { readOnlyColumns, readOnlyAttribs } = useMemo(\n () => getReadOnlyLists(attribFields, writableFields, readOnly),\n [attribFields, writableFields, readOnly],\n )\n\n const { selectedCells } = useSelectionCellsContext()\n const { updateEntities } = useCellEditing()\n\n const handleCellUpdate: CellUpdate = useCallback(\n async (entity, config) => {\n const { selection = [] } = config || {}\n const entitiesToUpdate: EntityUpdate[] = []\n if (!selection?.length) {\n entitiesToUpdate.push({ ...entity, id: entity.rowId })\n } else {\n // if includeSelection is true, update all the selected cells with the same columnId\n const { field, value, isAttrib } = entity\n for (const cellId of selectedCells) {\n const { colId, rowId } = parseCellId(cellId) || {}\n\n // ignore row selection column\n if (colId === ROW_SELECTION_COLUMN_ID) continue\n\n const entity = getEntityById(rowId || '')\n if (!entity) {\n console.warn(`Entity with ID ${rowId} not found for cell update.`)\n continue\n }\n\n if ((!colId?.includes('attrib_') || colId?.replace('attrib_', '') === field) && rowId) {\n entitiesToUpdate.push({\n field: field,\n rowId: rowId,\n id: entity.entityId,\n value: value,\n isAttrib: isAttrib,\n type: entity.entityType,\n })\n }\n }\n }\n\n if (!entitiesToUpdate.length) {\n console.warn('No entities to update, skipping updateEntities call.')\n toast.warn('No entities to update.')\n return\n }\n\n await updateEntities(entitiesToUpdate, true)\n },\n [updateEntities, getEntityById, selectedCells],\n )\n\n const columnAttribs = useMemo(\n () => (isInitialized ? attribFields : loadingAttrib),\n [attribFields, loadingAttrib, isInitialized],\n )\n\n const getNameLabelHeader = () => {\n if (scopes.includes('version')) return 'Product / Version'\n return scopes.map((s) => upperFirst(s)).join(' / ')\n }\n\n const columns = useMemo(() => {\n const baseColumns = buildTreeTableColumns({\n scopes,\n attribs: columnAttribs,\n links: linkTypes,\n includeLinks,\n showHierarchy,\n isFlatFolderView,\n options,\n extraColumns,\n excluded: excludedColumns,\n excludedSorting,\n groupBy,\n nameLabel: getNameLabelHeader(),\n })\n\n if (sortableRows && enableSorting) {\n return [\n {\n id: DRAG_HANDLE_COLUMN_ID,\n header: () => null,\n cell: () => null, // Content rendered by TableBodyRow\n size: 24,\n minSize: 24,\n maxSize: 24,\n enableResizing: false,\n enableSorting: false,\n enableHiding: false,\n enablePinning: false, // Programmatically pinned\n },\n ...baseColumns,\n ]\n }\n return baseColumns\n }, [\n scopes,\n columnAttribs,\n showHierarchy,\n isFlatFolderView,\n isExpandable,\n options,\n linkTypes,\n includeLinks,\n extraColumns,\n excludedColumns,\n excludedSorting,\n sortableRows,\n enableSorting,\n groupBy,\n ])\n\n // Keep ColumnSettingsProvider's allColumns ref up to date\n useEffect(() => {\n const ids = columns.map((c) => c.id!).filter(Boolean)\n setAllColumns(ids)\n }, [columns, setAllColumns])\n\n const resolvedColumnVisibility = useMemo(() => {\n const merged = { ...columnVisibility }\n columns.forEach((col) => {\n // @ts-ignore\n const explicitVisible = col.visible\n if (col.id && merged[col.id] === undefined) {\n if (explicitVisible !== undefined) {\n merged[col.id] = explicitVisible\n } else {\n merged[col.id] = checkColumnVisibility({}, col.id, defaultColumnVisibility)\n }\n }\n })\n return ensureAtLeastOneVisibleColumn(merged, columns.map((c) => c.id as string).filter(Boolean))\n }, [columnVisibility, defaultColumnVisibility, columns])\n\n const table = useReactTable({\n data: showLoadingRows ? loadingRows : tableData,\n columns,\n defaultColumn: {\n minSize: 50,\n size: 150,\n },\n enableRowSelection: true, //enable row selection for all rows\n getRowId: (row) => row.id,\n enableSubRowSelection: false, //disable sub row selection\n getSubRows: (row) => row.subRows,\n getRowCanExpand: () => !!isExpandable || showHierarchy || isFlatFolderView || isGrouping,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n filterFromLeafRows: true,\n // EXPANDABLE\n onExpandedChange: updateExpanded,\n // SORTING\n enableSorting,\n getSortedRowModel: getSortedRowModel(),\n sortDescFirst: false,\n manualSorting: !clientSorting,\n onSortingChange: sortingOnChange,\n columnResizeMode: 'onChange',\n onColumnPinningChange: columnPinningOnChange,\n onColumnSizingChange: columnSizingOnChange,\n onColumnVisibilityChange: columnVisibilityOnChange,\n onColumnOrderChange: columnOrderOnChange,\n // @ts-ignore\n filterFns,\n state: {\n expanded,\n sorting,\n columnPinning: (() => {\n const leftPins: string[] = []\n if (sortableRows) {\n leftPins.push(DRAG_HANDLE_COLUMN_ID)\n }\n leftPins.push(ROW_SELECTION_COLUMN_ID)\n\n // Add other unique pins from context, ensuring they are not the programmatic ones\n const contextLeftPins = (columnPinning.left || []).filter(\n (id) => id !== DRAG_HANDLE_COLUMN_ID && id !== ROW_SELECTION_COLUMN_ID,\n )\n leftPins.push(...contextLeftPins)\n // Remove duplicates just in case, though filter should handle it\n const uniqueLeftPins = [...new Set(leftPins)]\n\n return {\n left: uniqueLeftPins,\n right: columnPinning.right,\n }\n })(),\n columnSizing,\n columnVisibility: resolvedColumnVisibility,\n columnOrder,\n },\n meta: {\n projectName,\n options,\n readOnly: readOnlyColumns,\n updateEntities: handleCellUpdate,\n toggleExpandAll,\n loadMoreRows: fetchNextPage,\n selection: Array.from(selectedCells),\n columnsConfig,\n },\n })\n\n // TODO: when there is data (like in error) then we have infinite rendering\n\n const { rows } = table.getRowModel()\n\n // update the tableRowsCountRef with the current number of rows\n useEffect(() => {\n tableRowsCountRef.current = rows.length\n }, [rows.length])\n\n // Register grid structure with selection context when rows or columns change\n useEffect(() => {\n if (!rows.length) return\n const rowIds = rows.map((row) => row.id)\n const colIds = table.getAllLeafColumns().map((col) => col.id)\n const colIdsSortedByPinning = [...colIds].sort((a, b) => {\n if (ROW_SELECTION_COLUMN_ID === b) return 1\n const colA = columnPinning.left?.includes(a) ? 0 : 1\n const colB = columnPinning.left?.includes(b) ? 0 : 1\n return colA - colB\n })\n\n registerGrid(rowIds, colIdsSortedByPinning)\n }, [rows, table.getAllLeafColumns(), columnPinning, ROW_SELECTION_COLUMN_ID, registerGrid])\n\n const visibleColumns = table.getVisibleLeafColumns()\n\n // Use the column virtualization hook\n const { columnVirtualizer, virtualPaddingLeft, virtualPaddingRight } = useColumnVirtualization({\n visibleColumns,\n tableContainerRef,\n columnPinning,\n columnSizing,\n columnOrder,\n })\n\n // Track column visibility changes for subscribed columns\n const prevVisibleRef = useRef<Record<string, boolean>>({})\n const virtualItems = columnVirtualizer.getVirtualItems()\n\n // Subscribe to column visibility changes\n useEffect(() => {\n if (!onColumnVisibleChange || !onColumnVisibleChangeSubscribed?.length) return\n\n const visibleColumnIds = new Set(virtualItems.map((item) => visibleColumns[item.index]?.id))\n const changes: Record<string, boolean> = {}\n let hasChanged = false\n\n // We only care about columns that match the subscription patterns\n const subscribedColumns = table\n .getAllLeafColumns()\n .filter((col) => matchesColumnId(col.id, onColumnVisibleChangeSubscribed))\n\n subscribedColumns.forEach((col) => {\n const isVisible = visibleColumnIds.has(col.id)\n if (prevVisibleRef.current[col.id] !== isVisible) {\n changes[col.id] = isVisible\n hasChanged = true\n prevVisibleRef.current[col.id] = isVisible\n }\n })\n\n if (hasChanged) {\n onColumnVisibleChange(changes)\n }\n }, [virtualItems, onColumnVisibleChange, onColumnVisibleChangeSubscribed, visibleColumns, table])\n\n const columnSizeVars = useCustomColumnWidthVars(table, columnSizing)\n\n // Summary footer is a powerpack feature.\n // popup hidden for now: also expose `setPowerpackDialog, isLoading: isLicenseLoading`\n const { powerLicense } = usePowerpack()\n const [RemoteSummaryCellContent, { isLoaded: isFooterLoaded, isLoading: isFooterModuleLoading }] =\n useLoadModule<FC<SummaryCellContentProps>>({\n addon: 'powerpack',\n remote: 'views',\n module: 'SummaryCellContent',\n fallback: SummaryCellContentFallback,\n skip: !showColumnSummaries || !powerLicense,\n })\n // Free-user upsell row hidden for now (too many power-feature prompts); keep for later.\n // Render the row as soon as the module is loading or loaded (not on load failure),\n // so skeletons show during the load instead of the row popping in late.\n const summariesEnabled =\n showColumnSummaries &&\n powerLicense &&\n (isFooterLoaded || isFooterModuleLoading) &&\n !!rows.length\n // shimmer while the remote module or the footer stats are still loading\n const summariesLoading = isFooterModuleLoading || !isFooterLoaded || !!fieldStatsLoading\n // only show the upsell once the license check resolves, so licensed users\n // don't see the bolt flash before the addon loads\n // const showSummaryPowerFeature = !isLicenseLoading && !powerLicense\n\n // Calculate dynamic row height based on user setting from Customize panel\n const { getRowHeight, defaultRowHeight } = useDynamicRowHeight()\n\n const attribByField = useMemo(() => {\n return attribFields.reduce((acc: Record<string, EnumItem[]>, attrib) => {\n if (attrib.data?.enum?.length) {\n acc[attrib.name] = attrib.data?.enum\n }\n return acc\n }, {})\n }, [attribFields])\n\n const rowOrderIds = useMemo(() => tableData.map((row) => row.id), [tableData])\n // Get column IDs for drag-and-drop from context columnOrder (exclude non-draggable columns)\n // This ensures SortableContext items match what the drag handlers use\n const columnOrderIds = useMemo(() => {\n return columnOrder.filter(\n (id) => id !== DRAG_HANDLE_COLUMN_ID && id !== ROW_SELECTION_COLUMN_ID,\n )\n }, [columnOrder])\n\n const draggedRowData = useMemo(() => {\n if (!dndActiveId || !sortableRows) return null // Use dndActiveId\n return tableData.find((r) => r.id === dndActiveId) // Use dndActiveId\n }, [dndActiveId, tableData, sortableRows])\n\n const combinedScrollHandler: UIEventHandler<HTMLDivElement> = useCallback(\n (e) => {\n // Call the original onScroll if provided\n onScroll?.(e)\n\n if (onScrollBottom) {\n const containerRefElement = e.currentTarget\n if (containerRefElement && !showHierarchy && !isFlatFolderView && !groupBy) {\n const { scrollHeight, scrollTop, clientHeight } = containerRefElement\n //once the user has scrolled within 500px of the bottom of the table, fetch more data if we can\n if (scrollHeight - scrollTop - clientHeight < 500 && !isLoading) {\n onScrollBottom(e)\n }\n }\n }\n\n // Handle scroll-to-bottom for grouped data\n if (onScrollBottomGroupBy && groupBy) {\n const containerRefElement = e.currentTarget\n // look for a load more button\n const loadMoreButton = containerRefElement?.querySelector('.load-more')\n // get load more button id\n const loadMoreButtonId = loadMoreButton?.getAttribute('id')\n const groupValue = loadMoreButtonId?.split('-')[2] // assuming the id is in the format 'load-more-groupValue'\n if (groupValue) {\n onScrollBottomGroupBy(groupValue)\n }\n }\n },\n [onScroll, onScrollBottom, onScrollBottomGroupBy, showHierarchy, groupBy, isLoading],\n )\n\n // Get move entity functions for the dialog\n const {\n isEntityPickerOpen,\n handleMoveSubmit,\n closeMoveDialog,\n movingEntities,\n handleMoveToRoot,\n getDisabledFolderIds,\n getDisabledMessage,\n } = useMoveEntities({\n projectName,\n })\n\n const handleMoveSubmitWithExpand = (selection: string[]) => {\n handleMoveSubmit(selection)\n const folderIdToExpand = selection[0]\n\n updateExpanded((prevExpanded: ExpandedState) => {\n if (typeof prevExpanded === 'boolean') {\n if (prevExpanded) {\n return prevExpanded\n }\n return { [folderIdToExpand]: true }\n }\n\n if (prevExpanded[folderIdToExpand]) {\n return prevExpanded\n }\n\n return {\n ...prevExpanded,\n [folderIdToExpand]: true,\n }\n })\n }\n\n const tableUiContent = (\n <ClipboardProvider\n entitiesMap={entitiesMap}\n columnEnums={{ ...options, ...attribByField }}\n columnReadOnly={readOnlyAttribs}\n visibleColumns={visibleColumns}\n >\n <Styled.TableWrapper {...props}>\n <Styled.TableContainer\n ref={tableContainerRef}\n style={{ height: '100%', padding: 0 }}\n onScroll={combinedScrollHandler}\n {...pt?.container}\n data-column-dnd-container\n className={clsx(\n 'table-container',\n {\n resizing: table.getState().columnSizingInfo.isResizingColumn,\n },\n pt?.container?.className,\n )}\n >\n <table\n style={{\n display: 'grid',\n borderCollapse: 'collapse',\n userSelect: 'none',\n ...columnSizeVars,\n width: table.getTotalSize(),\n cursor: table.getState().columnSizingInfo.isResizingColumn ? 'col-resize' : undefined,\n // stretch tbody to the container so the column dividers fill the empty\n // space below the rows; also pins the summary footer to the bottom\n minHeight: '100%',\n gridTemplateRows: 'auto 1fr auto',\n }}\n >\n <TableHead\n columnVirtualizer={columnVirtualizer}\n table={table}\n virtualPaddingLeft={virtualPaddingLeft}\n virtualPaddingRight={virtualPaddingRight}\n isLoading={isLoading}\n readOnlyColumns={readOnlyColumns}\n sortableRows={sortableRows}\n columnOrderIds={columnOrderIds}\n {...pt?.head}\n />\n <TableBody\n columnVirtualizer={columnVirtualizer}\n table={table}\n tableContainerRef={tableContainerRef}\n virtualPaddingLeft={virtualPaddingLeft}\n virtualPaddingRight={virtualPaddingRight}\n showHierarchy={showHierarchy}\n attribs={attribFields}\n onOpenNew={onOpenNew}\n rowOrderIds={rowOrderIds}\n sortableRows={sortableRows}\n error={error}\n isLoading={isLoading}\n isGrouping={isGrouping}\n getRowHeight={getRowHeight}\n defaultRowHeight={defaultRowHeight}\n onResetView={onResetView}\n contextMenuItems={propsContextMenuItems}\n />\n {summariesEnabled && (\n <TableFooterRow\n columnVirtualizer={columnVirtualizer}\n table={table}\n virtualPaddingLeft={virtualPaddingLeft}\n virtualPaddingRight={virtualPaddingRight}\n isLoading={summariesLoading}\n // Free-user upsell hidden for now; keep for later:\n // onClick={showSummaryPowerFeature ? () => setPowerpackDialog('columnSummaries') : undefined}\n renderCellContent={(columnId) => (\n <RemoteSummaryCellContent\n columnId={columnId}\n attribs={attribFields}\n fieldStats={fieldStats}\n groupFieldStats={groupFieldStats}\n calc={columnSummaries[columnId]}\n onCalcChange={(calc) => updateColumnSummary(columnId, calc)}\n format={columnSummaryFormats[columnId]}\n onFormatChange={(format) => updateColumnSummaryFormat(columnId, format)}\n scope={columnSummaryScopes[columnId]}\n onScopeChange={(scope) => updateColumnSummaryScope(columnId, scope)}\n mainCountLabels={mainCountLabels}\n fieldOptions={options}\n />\n )}\n // Power feature cell for community users (hidden for now), shows a bolt hint in the name column:\n // renderCellContent={(columnId) =>\n // showSummaryPowerFeature && columnId === 'name' ? (\n // <Styled.SummaryPowerFeature>\n // <Icon icon=\"bolt\" filled />\n // Summaries\n // </Styled.SummaryPowerFeature>\n // ) : null\n // }\n />\n )}\n </table>\n </Styled.TableContainer>\n </Styled.TableWrapper>\n {/* Render EntityPickerDialog alongside table content */}\n {isEntityPickerOpen &&\n projectName &&\n movingEntities?.entities &&\n movingEntities.entities.length > 0 && (\n <EntityPickerDialog\n projectName={projectName}\n entityType=\"folder\"\n onSubmit={handleMoveSubmitWithExpand}\n onClose={closeMoveDialog}\n showMoveToRoot={movingEntities.entities.every(\n (entity: EntityMoveData) => entity.entityType === 'folder',\n )}\n onMoveToRoot={handleMoveToRoot}\n disabledIds={getDisabledFolderIds()}\n getDisabledMessage={getDisabledMessage}\n />\n )}\n </ClipboardProvider>\n )\n\n // Render DragOverlay if sortableRows and dndActiveId is present\n const dragOverlayPortal =\n sortableRows &&\n dndActiveId &&\n createPortal(\n <DragOverlay dropAnimation={null}>\n {draggedRowData\n ? (() => {\n const overlayRowInstance = table.getRowModel().rows.find((r) => r.id === dndActiveId)\n if (!overlayRowInstance) return null\n\n const tableWidth = table.getTotalSize()\n\n return (\n <table\n style={{\n width: tableWidth,\n borderCollapse: 'collapse',\n backgroundColor: 'var(--md-sys-color-surface-container-high)',\n boxShadow: '0 0 10px rgba(0,0,0,0.2)',\n ...columnSizeVars,\n }}\n >\n <tbody>\n <Styled.TR style={{ display: 'flex', userSelect: 'none' }}>\n {virtualPaddingLeft ? (\n <td style={{ display: 'flex', width: virtualPaddingLeft }} />\n ) : null}\n {columnVirtualizer.getVirtualItems().map((vc) => {\n const cell = overlayRowInstance.getVisibleCells()[vc.index]\n if (!cell) return null\n\n const cellStyleBase: CSSProperties = {\n ...getCommonPinningStyles(cell.column),\n width: getColumnWidth(cell.column.id),\n display: 'flex',\n alignItems: 'center',\n height: defaultRowHeight,\n }\n\n if (cell.column.id === DRAG_HANDLE_COLUMN_ID) {\n return (\n <Styled.TD\n key={`overlay-drag-${cell.id}`}\n style={{ ...cellStyleBase, justifyContent: 'center' }}\n className={clsx(cell.column.id)}\n >\n <Icon icon=\"drag_handle\" /> {/* Static icon */}\n </Styled.TD>\n )\n }\n return (\n <TD\n cell={cell}\n cellId={`overlay-${getCellId(overlayRowInstance.id, cell.column.id)}`}\n rowId={overlayRowInstance.id}\n key={`overlay-cell-${cell.id}`}\n showHierarchy={showHierarchy}\n />\n )\n })}\n {virtualPaddingRight ? (\n <td style={{ display: 'flex', width: virtualPaddingRight }} />\n ) : null}\n </Styled.TR>\n </tbody>\n </table>\n )\n })()\n : null}\n </DragOverlay>,\n document.body,\n )\n\n if (sortableRows) {\n return (\n <>\n {tableUiContent}\n {dragOverlayPortal}\n <ColumnDragOverlay table={table} />\n </>\n )\n } else {\n return (\n <>\n {tableUiContent}\n <ColumnDragOverlay table={table} />\n </>\n )\n }\n}\n\n/**\n * Isolated component for column drag overlay.\n * This prevents the entire table from re-rendering on every drag frame.\n */\ninterface ColumnDragOverlayProps {\n table: Table<TableRow>\n}\n\nconst ColumnDragOverlay = ({ table }: ColumnDragOverlayProps) => {\n const { active } = useDndContext()\n\n // Only process if dragging a column\n const isColumnDrag = active?.data?.current?.type === 'column'\n const activeColumnId = isColumnDrag ? (active?.id as string) : null\n\n const draggedColumnHeader = useMemo(() => {\n if (!activeColumnId) return null\n return table.getHeaderGroups()[0]?.headers.find((h) => h.id === activeColumnId) || null\n }, [activeColumnId, table])\n\n if (!activeColumnId || !draggedColumnHeader) return null\n\n return createPortal(\n <DragOverlay dropAnimation={null}>\n <Styled.HeaderCell\n style={{\n width: draggedColumnHeader.column.getSize(),\n backgroundColor: 'var(--md-sys-color-surface-container-high)',\n boxShadow: '0 0 10px rgba(0,0,0,0.2)',\n display: 'flex',\n alignItems: 'center',\n minHeight: 34,\n }}\n >\n <Styled.TableCellContent className=\"bold header\">\n {flexRender(\n draggedColumnHeader.column.columnDef.header,\n draggedColumnHeader.getContext(),\n )}\n </Styled.TableCellContent>\n </Styled.HeaderCell>\n </DragOverlay>,\n document.body,\n )\n}\n\ninterface TableHeadProps extends React.HTMLAttributes<HTMLTableSectionElement> {\n columnVirtualizer: Virtualizer<HTMLDivElement, HTMLTableCellElement>\n table: Table<TableRow>\n virtualPaddingLeft: number | undefined\n virtualPaddingRight: number | undefined\n isLoading: boolean\n readOnlyColumns?: string[]\n sortableRows?: boolean\n columnOrderIds: string[]\n}\n\nconst TableHead = ({\n columnVirtualizer,\n table,\n virtualPaddingLeft,\n virtualPaddingRight,\n isLoading,\n readOnlyColumns,\n sortableRows,\n columnOrderIds,\n ...props\n}: TableHeadProps) => {\n return (\n <Styled.TableHeader {...props}>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableHeadRow\n key={headerGroup.id}\n columnVirtualizer={columnVirtualizer}\n headerGroup={headerGroup}\n virtualPaddingLeft={virtualPaddingLeft}\n virtualPaddingRight={virtualPaddingRight}\n isLoading={isLoading}\n readOnlyColumns={readOnlyColumns}\n sortableRows={sortableRows}\n columnOrderIds={columnOrderIds}\n />\n ))}\n </Styled.TableHeader>\n )\n}\n\ninterface TableHeadRowProps {\n columnVirtualizer: Virtualizer<HTMLDivElement, HTMLTableCellElement>\n headerGroup: HeaderGroup<TableRow>\n virtualPaddingLeft: number | undefined\n virtualPaddingRight: number | undefined\n isLoading: boolean\n readOnlyColumns?: string[]\n sortableRows?: boolean\n columnOrderIds: string[]\n}\n\nconst TableHeadRow = ({\n columnVirtualizer,\n headerGroup,\n virtualPaddingLeft,\n virtualPaddingRight,\n isLoading,\n readOnlyColumns,\n sortableRows,\n columnOrderIds,\n}: TableHeadRowProps) => {\n const virtualColumns = columnVirtualizer.getVirtualItems()\n const { active } = useDndContext()\n const isColumnDrag = active?.data?.current?.type === 'column'\n const isDraggedColumnPinned = isColumnDrag && (active?.data?.current?.isPinned ?? false)\n\n return (\n <Styled.ColumnHeader key={headerGroup.id} style={{ display: 'flex' }}>\n {virtualPaddingLeft ? (\n //fake empty column to the left for virtualization scroll padding\n <th style={{ display: 'flex', width: virtualPaddingLeft }} />\n ) : null}\n <SortableContext items={columnOrderIds} strategy={horizontalListSortingStrategy}>\n {virtualColumns.map((virtualColumn) => {\n const header = headerGroup.headers[virtualColumn.index]\n // Exclude certain columns from being draggable\n const isDraggable =\n header.id !== DRAG_HANDLE_COLUMN_ID && header.id !== ROW_SELECTION_COLUMN_ID\n\n return (\n <TableHeadCell\n key={header.id}\n header={header}\n isLoading={isLoading}\n isReadOnly={readOnlyColumns?.includes(header.id)}\n canSort={header.column.getCanSort()}\n canFilter={header.column.getCanFilter()}\n canHide={header.column.getCanHide()}\n canPin={header.column.getCanPin()}\n canResize={header.column.getCanResize()}\n sortableRows={sortableRows}\n isDraggable={isDraggable}\n isColumnDrag={isColumnDrag}\n isDraggedColumnPinned={isDraggedColumnPinned}\n />\n )\n })}\n </SortableContext>\n {virtualPaddingRight ? (\n //fake empty column to the right for virtualization scroll padding\n <th style={{ display: 'flex', width: virtualPaddingRight }} />\n ) : null}\n </Styled.ColumnHeader>\n )\n}\n\ninterface TableHeadCellProps {\n header: Header<TableRow, unknown>\n isLoading: boolean\n canSort?: boolean\n canFilter?: boolean\n canHide?: boolean\n canPin?: boolean\n canResize?: boolean\n isReadOnly?: boolean\n sortableRows?: boolean\n isDraggable?: boolean\n isColumnDrag?: boolean\n isDraggedColumnPinned?: boolean\n}\n\nconst TableHeadCell = ({\n header,\n isLoading,\n canFilter,\n canHide,\n canSort,\n canPin,\n canResize,\n isReadOnly,\n sortableRows,\n isDraggable = true,\n isColumnDrag,\n isDraggedColumnPinned,\n}: TableHeadCellProps) => {\n const { column } = header\n const sorting = column.getIsSorted()\n const menuId = `column-header-menu-${column.id}`\n const { menuOpen } = useMenuContext()\n const isOpen = menuOpen === menuId\n const { columnPinning } = useColumnSettingsContext()\n\n // Check if this column is pinned\n const isThisColumnPinned = columnPinning.left?.includes(column.id) || false\n\n // useSortable for column drag-and-drop\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({\n id: column.id,\n data: { type: 'column', isPinned: isThisColumnPinned },\n disabled: !isDraggable,\n })\n\n const isDraggingInSameSection = isColumnDrag && isDraggedColumnPinned === isThisColumnPinned\n\n // Build drag styles\n const getDragStyle = (): CSSProperties => {\n if (isDragging) {\n return {\n transform: CSS.Translate.toString(transform!),\n transition,\n visibility: 'hidden',\n zIndex: 200,\n }\n }\n if (isDraggingInSameSection && transform) {\n // For pinned columns, temporarily remove sticky positioning during drag animation\n const pinnedOverride = isThisColumnPinned\n ? { position: 'relative' as const, left: 'auto' }\n : {}\n return { transform: CSS.Translate.toString(transform), transition, ...pinnedOverride }\n }\n return {}\n }\n\n // Prevent drag when clicking action buttons\n const preventDragFromActions = {\n onPointerDown: (e: React.PointerEvent) => e.stopPropagation(),\n onMouseDown: (e: React.MouseEvent) => e.stopPropagation(),\n }\n\n return (\n <Styled.HeaderCell\n ref={setNodeRef}\n className={clsx(header.id, 'shimmer-dark', {\n loading: isLoading,\n 'last-pinned-left': column.getIsPinned() === 'left' && column.getIsLastColumn('left'),\n resizing: column.getIsResizing(),\n dragging: isDragging,\n draggable: isDraggable,\n })}\n key={header.id}\n style={{\n ...getCommonPinningStyles(column),\n width: getColumnWidth(column.id),\n ...getDragStyle(),\n }}\n >\n {header.isPlaceholder ? null : (\n <Styled.TableCellContent\n className={clsx('bold', 'header')}\n {...(isDraggable ? { ...attributes, ...listeners } : {})}\n >\n {flexRender(column.columnDef.header, header.getContext())}\n {isReadOnly && (\n <Icon icon=\"lock\" data-tooltip={'You only have permission to read this column.'} />\n )}\n\n <Styled.HeaderButtons className=\"actions\" $isOpen={isOpen} {...preventDragFromActions}>\n {/* Column drag handle */}\n\n {(canHide || canPin || canSort) && (\n <ColumnHeaderMenu\n className=\"header-menu\"\n header={header}\n canHide={canHide}\n canPin={canPin}\n canSort={canSort}\n isResizing={column.getIsResizing()}\n menuId={menuId}\n isOpen={isOpen}\n />\n )}\n\n {/* COLUMN SORTING */}\n {canSort && (\n <HeaderActionButton\n icon=\"sort\"\n className={clsx('sort-button', { visible: sorting })}\n style={{\n transform: sorting === 'asc' ? 'rotate(180deg) scaleX(-1)' : 'none',\n }}\n onClick={column.getToggleSortingHandler()}\n selected={!!column.getIsSorted()}\n />\n )}\n\n {/* COLUMN PINNING - only show on pinned columns (exclude selection column) */}\n {column.getIsPinned() && column.id !== ROW_SELECTION_COLUMN_ID && (\n <HeaderActionButton\n icon=\"push_pin\"\n className={clsx('pin-button', 'visible')}\n onClick={() => column.pin(false)}\n selected\n />\n )}\n </Styled.HeaderButtons>\n {canResize && (\n <Styled.ResizedHandler\n {...{\n onDoubleClick: () => column.resetSize(),\n onMouseDown: (e: React.MouseEvent) => {\n e.stopPropagation()\n header.getResizeHandler()(e)\n },\n onTouchStart: header.getResizeHandler(),\n onPointerDown: (e: React.PointerEvent) => e.stopPropagation(),\n className: clsx('resize-handle', {\n resizing: column.getIsResizing(),\n }),\n }}\n />\n )}\n </Styled.TableCellContent>\n )}\n </Styled.HeaderCell>\n )\n}\n\ninterface TableBodyProps {\n columnVirtualizer: Virtualizer<HTMLDivElement, HTMLTableCellElement>\n table: Table<TableRow>\n tableContainerRef: React.RefObject<HTMLDivElement>\n showHierarchy: boolean\n virtualPaddingLeft: number | undefined\n virtualPaddingRight: number | undefined\n attribs: ProjectTableAttribute[]\n onOpenNew?: (type: 'folder' | 'task') => void\n rowOrderIds: UniqueIdentifier[]\n sortableRows: boolean\n error?: string\n isLoading: boolean\n isGrouping: boolean\n getRowHeight: (row: TableRow) => number\n defaultRowHeight: number\n onResetView?: () => void\n contextMenuItems?: ContextMenuItemConstructors\n}\n\nconst TableBody = ({\n columnVirtualizer,\n table,\n tableContainerRef,\n showHierarchy,\n virtualPaddingLeft,\n virtualPaddingRight,\n attribs,\n onOpenNew,\n rowOrderIds,\n sortableRows,\n error,\n isLoading,\n isGrouping,\n getRowHeight,\n defaultRowHeight,\n onResetView,\n contextMenuItems,\n}: TableBodyProps) => {\n const headerLabels = useMemo(() => {\n const allColumns = table.getAllColumns()\n const headers = allColumns\n .map((col) => {\n const headerId = col.id\n const header = col.columnDef.header\n if (typeof header === 'string' || typeof header === 'number') {\n return { label: header, id: headerId }\n }\n return null\n })\n .filter(Boolean)\n\n return headers as HeaderLabel[]\n }, [table.getAllColumns()])\n\n const cellContextMenuHook = useCellContextMenu({\n attribs,\n onOpenNew,\n headerLabels,\n contextMenuItems,\n })\n\n const handleTableBodyContextMenu = cellContextMenuHook.handleTableBodyContextMenu\n\n const { handlePreFetchTasks } = usePrefetchFolderTasks()\n\n const { rows } = table.getRowModel()\n\n const rowVirtualizer = useVirtualizer<HTMLDivElement, HTMLTableRowElement>({\n count: rows.length,\n estimateSize: (index) => {\n // Calculate dynamic row height based on specific row data\n const row = rows[index]\n return row ? getRowHeight(row.original) : defaultRowHeight\n },\n getScrollElement: () => tableContainerRef.current,\n //measure dynamic row height, except in firefox because it measures table border height incorrectly\n measureElement:\n typeof window !== 'undefined' && navigator.userAgent.indexOf('Firefox') === -1\n ? (element) => element?.getBoundingClientRect().height\n : undefined,\n overscan: 5,\n })\n\n const virtualRows = rowVirtualizer.getVirtualItems()\n\n // Memoize the measureElement callback\n const measureRowElement = useCallback(\n (node: HTMLTableRowElement | null) => {\n if (node) {\n rowVirtualizer.measureElement(node)\n }\n },\n [rowVirtualizer],\n )\n\n useKeyboardNavigation()\n\n // vertical column lines painted behind the rows so they extend into the empty\n // space between the last row and the summary footer\n const visibleLeafColumns = table.getVisibleLeafColumns()\n const columnDividerLefts = useMemo(() => {\n const lefts: string[] = []\n const sizeVars: string[] = []\n for (let i = 0; i < visibleLeafColumns.length - 1; i++) {\n const column = visibleLeafColumns[i]\n // selection column is forced to 20px in CSS while its size var reports defaultColumn.minSize\n sizeVars.push(column.id === ROW_SELECTION_COLUMN_ID ? '20' : `var(--col-${column.id}-size)`)\n lefts.push(`calc((${sizeVars.join(' + ')}) * 1px)`)\n }\n return lefts\n }, [visibleLeafColumns])\n\n const tbodyContent = (\n <tbody\n style={{\n minHeight: `${rowVirtualizer.getTotalSize()}px`,\n position: 'relative',\n display: 'grid',\n }}\n onContextMenu={handleTableBodyContextMenu}\n onMouseOver={(e) => {\n handlePreFetchTasks(e)\n }}\n >\n <Styled.ColumnDividers aria-hidden>\n {columnDividerLefts.map((left, i) => (\n <div key={i} style={{ left }} />\n ))}\n </Styled.ColumnDividers>\n {virtualRows.map((virtualRow, i) => {\n const row = rows[virtualRow.index] as Row<TableRow>\n // Add a check for row existence to prevent potential errors if data is out of sync\n if (!row) {\n console.warn('Virtualized row data not found for index:', virtualRow.index)\n return null\n }\n return (\n <TableBodyRow\n key={row.id + i.toString()} // dnd-kit needs this key to be stable and match the id in useSortable\n row={row}\n showHierarchy={showHierarchy}\n visibleCells={row.getVisibleCells()}\n virtualColumns={columnVirtualizer.getVirtualItems()}\n paddingLeft={virtualPaddingLeft}\n paddingRight={virtualPaddingRight}\n rowRef={measureRowElement}\n dataIndex={virtualRow.index}\n offsetTop={virtualRow.start}\n sortableRows={sortableRows}\n isGrouping={isGrouping}\n rowHeight={getRowHeight(row.original)}\n />\n )\n })}\n </tbody>\n )\n\n if (error) {\n return (\n tableContainerRef.current &&\n createPortal(\n <Styled.AnimatedEmptyPlaceholder>\n <EmptyPlaceholder message=\"No items found\" error={error}>\n {onResetView && (\n <Button\n variant=\"filled\"\n label=\"Reset working view\"\n icon=\"restart_alt\"\n onClick={onResetView}\n />\n )}\n </EmptyPlaceholder>\n </Styled.AnimatedEmptyPlaceholder>,\n tableContainerRef.current,\n )\n )\n }\n\n if (!rows.length && !isLoading) {\n return (\n tableContainerRef.current &&\n createPortal(\n <Styled.AnimatedEmptyPlaceholder>\n <EmptyPlaceholder message=\"No items found\">\n {onResetView && (\n <Button\n variant=\"filled\"\n label=\"Reset working view\"\n icon=\"restart_alt\"\n onClick={onResetView}\n />\n )}\n </EmptyPlaceholder>\n </Styled.AnimatedEmptyPlaceholder>,\n tableContainerRef.current,\n )\n )\n }\n\n if (sortableRows) {\n return (\n <SortableContext items={rowOrderIds} strategy={verticalListSortingStrategy}>\n {tbodyContent}\n </SortableContext>\n )\n } else {\n return tbodyContent\n }\n}\n\ninterface TableBodyRowProps {\n row: Row<TableRow>\n showHierarchy: boolean\n visibleCells: Cell<TableRow, unknown>[]\n virtualColumns: VirtualItem[]\n paddingLeft: number | undefined\n paddingRight: number | undefined\n rowRef: (node: HTMLTableRowElement | null) => void\n dataIndex: number\n offsetTop: number\n sortableRows: boolean\n isGrouping: boolean\n rowHeight: number\n}\n\nconst TableBodyRow = ({\n row,\n showHierarchy,\n visibleCells,\n virtualColumns,\n paddingLeft,\n paddingRight,\n rowRef,\n dataIndex,\n offsetTop,\n sortableRows,\n isGrouping = false,\n rowHeight,\n}: TableBodyRowProps) => {\n const sortable = sortableRows ? useSortable({ id: row.id }) : null\n\n const combinedRef = useCallback(\n (node: HTMLTableRowElement | null) => {\n if (sortable) {\n sortable.setNodeRef(node)\n }\n // rowRef for virtualizer measurement\n // only measure if not actively being transformed by dnd-kit\n if (!(sortable && sortable.isDragging)) {\n rowRef(node)\n }\n },\n [sortable, rowRef],\n )\n\n // Attempt to combine dnd-kit transform with virtualizer's offsetTop\n const style: CSSProperties = {\n position: 'absolute', // Use absolute positioning for virtualized items\n top: offsetTop, // Position based on virtualizer's calculation (virtualRow.start)\n left: 0, // Span full width of the relative parent (tbody)\n right: 0, // Span full width\n height: rowHeight, // Use dynamic row height\n zIndex: sortable && sortable.isDragging ? 0 : 1, // Ensure dragged item is above others\n display: 'flex', // Styled.TR is display:flex\n transform:\n sortable && sortable.transform ? CSS.Transform.toString(sortable.transform) : undefined, // Apply dnd-kit's transform for drag effect\n transition: sortable && sortable.transition ? sortable.transition : undefined,\n visibility: sortable && sortable.isDragging ? 'hidden' : 'visible', // Hide the row being dragged\n }\n\n return (\n <Styled.TR\n ref={combinedRef}\n data-index={dataIndex} //needed for dynamic row height measurement\n style={style}\n className={clsx({ 'group-row': row.original.group })}\n >\n {paddingLeft ? (\n //fake empty column to the left for virtualization scroll padding\n <td style={{ display: 'flex', width: paddingLeft }} />\n ) : null}\n {virtualColumns.map((vc, i) => {\n const cell = visibleCells[vc.index]\n if (!cell) return null // Should not happen in normal circumstances\n\n const cellId = getCellId(row.id, cell.column.id)\n\n if (cell.column.id === DRAG_HANDLE_COLUMN_ID) {\n return (\n <Styled.TD\n key={cell.id + i.toString()}\n style={{\n ...getCommonPinningStyles(cell.column),\n width: getColumnWidth(cell.column.id),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: rowHeight,\n pointerEvents: 'all',\n cursor: 'grab',\n }}\n className={clsx(cell.column.id, {\n 'last-pinned-left':\n cell.column.getIsPinned() === 'left' && cell.column.getIsLastColumn('left'),\n })}\n onMouseDown={(e) => e.stopPropagation()} // Prevent selection interference\n onMouseOver={(e) => e.stopPropagation()}\n onDoubleClick={(e) => e.stopPropagation()}\n onContextMenu={(e) => {\n e.preventDefault()\n e.stopPropagation()\n }}\n >\n <RowDragHandleCellContent\n attributes={sortable?.attributes}\n listeners={sortable?.listeners}\n />\n </Styled.TD>\n )\n }\n return (\n <TD\n cell={cell}\n cellId={cellId}\n rowId={row.id}\n key={cell.id + i.toString()}\n showHierarchy={showHierarchy}\n sortableRows={sortableRows}\n rowHeight={rowHeight}\n />\n )\n })}\n\n {paddingRight ? (\n //fake empty column to the right for virtualization scroll padding\n <td style={{ display: 'flex', width: paddingRight }} />\n ) : null}\n </Styled.TR>\n )\n}\n\ninterface TableCellProps {\n cell: Cell<TableRow, unknown>\n cellId: string\n rowId: string\n className?: string\n showHierarchy: boolean\n sortableRows?: boolean\n rowHeight?: number\n}\n\nconst TD = ({\n cell,\n rowId,\n cellId,\n className,\n showHierarchy,\n sortableRows,\n rowHeight,\n ...props\n}: TableCellProps) => {\n const { getEntityById, onOpenPlayer } = useProjectTableContext()\n\n const {\n isCellSelected,\n isCellFocused,\n startSelection,\n extendSelection,\n endSelection,\n selectCell,\n focusCell,\n getCellBorderClasses,\n clearSelection,\n selectedCells,\n setSelectedCells,\n setAnchorCell,\n setFocusedCellId,\n } = useSelectionCellsContext()\n\n const { isRowSelected } = useSelectedRowsContext()\n\n const { isEditing, setEditingCellId, editingCellId } = useCellEditing()\n\n const borderClasses = getCellBorderClasses(cellId)\n\n const isPinned = cell.column.getIsPinned()\n const isLastLeftPinnedColumn = isPinned === 'left' && cell.column.getIsLastColumn('left')\n const isRowSelectionColumn = cell.column.id === ROW_SELECTION_COLUMN_ID\n const isGroup = cell.row.original.entityType === 'group'\n const isMultipleSelected = selectedCells.size > 1\n\n return (\n <Styled.TD\n {...props}\n tabIndex={0}\n $isLastPinned={isLastLeftPinnedColumn} // is this column the last pinned column? Custom styling for borders.\n className={clsx(\n cell.column.id,\n {\n selected: isCellSelected(cellId),\n focused: isCellFocused(cellId),\n editing: isEditing(cellId),\n 'last-pinned-left': isLastLeftPinnedColumn,\n 'selected-row': isRowSelected(rowId),\n expandable:\n !!cell.row.originalSubRows && isEntityExpandable(cell.row.original.entityType),\n 'multiple-selected': isMultipleSelected,\n },\n className,\n ...borderClasses,\n )}\n style={{\n ...getCommonPinningStyles(cell.column),\n width: getColumnWidth(cell.column.id),\n height: rowHeight,\n }}\n onMouseDown={(e) => {\n // Only process left clicks (button 0), ignore right clicks\n if (e.button !== 0) return\n\n const target = e.target as HTMLElement\n\n // check we are not clicking on expander\n if (target.closest('.expander')) return\n\n // check we are not clicking in a dropdown\n if (target.closest('.options')) return\n\n // Handle double-click via e.detail (browser's native click count).\n // We handle it here in mousedown instead of relying on the dblclick event,\n // because the 1st mousedown triggers React state updates that can replace\n // the DOM node, preventing the native dblclick event from firing.\n if (e.detail === 2) {\n // comments cells are read-only but their double-click opens the details panel, so don't block them here\n const isReadOnly = isTargetReadOnly(e) && cell.column.id !== 'comments'\n if (isReadOnly || isEntityRestricted(cell.row.original.entityType) || isGroup) {\n e.preventDefault()\n return\n }\n\n // name column: select row to open details panel\n // comments column: same — comments are read and written in the details panel feed\n if (['name', 'comments'].includes(cell.column.id) && !target.closest('.expander')) {\n // all ProjectTreeTable pages render their details panel under the 'overview' scope\n if (cell.column.id === 'comments') setDetailsPanelTabForScope('overview', 'feed')\n const rowSelectionCellId = getCellId(cell.row.id, ROW_SELECTION_COLUMN_ID)\n const additive = e.metaKey || e.ctrlKey\n const position = parseCellId(rowSelectionCellId)\n\n setSelectedCells((prev) => {\n const newSelection = additive ? new Set(prev) : new Set<CellId>()\n newSelection.add(rowSelectionCellId)\n newSelection.add(cellId)\n return newSelection\n })\n if (position) {\n setAnchorCell(position)\n setFocusedCellId(rowSelectionCellId)\n }\n }\n // thumbnail: open viewer\n else if (cell.column.id === 'thumbnail') {\n if (onOpenPlayer) {\n const entity = getEntityById(cell.row.original.entityId || cell.row.id)\n if (entity) {\n const targetIds = getEntityViewierIds(entity)\n onOpenPlayer(targetIds, { quickView: true })\n }\n }\n }\n // other cells: start editing\n else {\n setEditingCellId(cellId)\n }\n\n e.preventDefault()\n return\n }\n\n // only name column can be selected for group rows\n if (isGroup && cell.column.id !== 'name') return clearSelection()\n\n // check if this is a restricted entity - prevent editing\n const isRestricted = isEntityRestricted(cell.row.original.entityType)\n\n // if clicking on an edit trigger, start editing\n if (target.closest('.' + EDIT_TRIGGER_CLASS) && !isRestricted) {\n // Select the cell first if not already selected\n if (!isCellSelected(cellId)) {\n selectCell(cellId, false, false)\n focusCell(cellId)\n }\n setEditingCellId(cellId)\n return\n }\n\n // If there's an active edit on a different cell, blur it first to save changes\n if (editingCellId && editingCellId !== cellId) {\n // Find the currently editing input and blur it\n const editingInput = document.querySelector(\n `#${editingCellId} input, #${editingCellId} [role=\"textbox\"]`,\n ) as HTMLElement\n if (editingInput) {\n editingInput.blur()\n // Wait a tick for the blur event to process and save\n setTimeout(() => {\n proceedWithSelection()\n }, 0)\n return\n }\n }\n\n proceedWithSelection()\n\n function proceedWithSelection() {\n const additive = e.metaKey || e.ctrlKey || isRowSelectionColumn\n if (e.shiftKey) {\n // Shift+click extends selection from anchor cell\n selectCell(cellId, additive, true) // true for range selection\n } else {\n startSelection(cellId, additive)\n }\n\n // Prevent default browser behavior to ensure focus stays on the cell\n e.preventDefault()\n }\n }}\n onMouseOver={(e) => {\n if (e.buttons === 1) {\n // check not selecting am edit trigger\n const target = e.target as HTMLElement\n if (target.closest('.' + EDIT_TRIGGER_CLASS)) return\n\n // Left button is pressed during mouse move - drag selection\n // Note: extendSelection is always called to allow drag to continue through cells\n // Restricted cells will be filtered out later\n extendSelection(cellId, isRowSelectionColumn)\n }\n }}\n onMouseUp={() => {\n endSelection(cellId)\n }}\n onDoubleClick={(e) => {\n // Double-click is primarily handled in onMouseDown via e.detail === 2.\n // Prevent default to avoid text selection on double-click.\n e.preventDefault()\n }}\n onContextMenu={(e) => {\n e.preventDefault()\n // if the cell is not selected, select it and deselect all others\n if (!isCellSelected(cellId)) {\n selectCell(cellId, false, false)\n }\n }}\n onKeyDown={() => {\n // keyboard events are handled in useKeyboardNavigation hook\n }}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </Styled.TD>\n )\n}\n"],"names":["SummaryCellContentFallback","matchesColumnId","id","subscribers","sub","pattern","ProjectTreeTable","scope","sliceId","onScroll","onScrollBottom","onOpenNew","readOnly","excludedColumns","excludedSorting","extraColumns","includeLinks","isLoadingProp","isExpandable","enableSorting","clientSorting","sortableRows","onRowReorder","dndActiveId","columnsConfig","showColumnSummaries","fieldStats","groupFieldStats","fieldStatsLoading","mainCountLabels","onScrollBottomGroupBy","propsContextMenuItems","onColumnVisibleChange","onColumnVisibleChangeSubscribed","pt","props","columnVisibility","columnPinning","columnOrder","columnSizing","setAllColumns","sorting","sortingOnChange","columnPinningOnChange","columnSizingOnChange","defaultColumnVisibility","columnVisibilityOnChange","columnOrderOnChange","groupBy","columnSummaries","updateColumnSummary","columnSummaryScopes","updateColumnSummaryScope","columnSummaryFormats","updateColumnSummaryFormat","useColumnSettingsContext","productTypes","projectName","projectInfo","useProjectContext","tableData","attribFields","entitiesMap","users","isLoadingData","error","isInitialized","expanded","updateExpanded","toggleExpandAll","showHierarchy","isFlatFolderView","fetchNextPage","scopes","getEntityById","onResetView","overrideGroupBy","useProjectTableContext","isGrouping","writableFields","useProjectDataContext","isLoading","statuses","folderTypes","taskTypes","tags","linkTypes","options","useMemo","getTableFieldOptions","tableContainerRef","useRef","tableRowsCountRef","registerGrid","useSelectionCellsContext","loadingAttrib","loadingRows","tableRowsCount","generateDummyAttributes","generateLoadingRows","showLoadingRows","readOnlyColumns","readOnlyAttribs","getReadOnlyLists","selectedCells","updateEntities","useCellEditing","handleCellUpdate","useCallback","entity","config","selection","entitiesToUpdate","field","value","isAttrib","cellId","colId","rowId","parseCellId","ROW_SELECTION_COLUMN_ID","toast","columnAttribs","getNameLabelHeader","s","upperFirst","columns","baseColumns","buildTreeTableColumns","DRAG_HANDLE_COLUMN_ID","useEffect","ids","c","resolvedColumnVisibility","merged","col","explicitVisible","checkColumnVisibility","ensureAtLeastOneVisibleColumn","table","useReactTable","row","getCoreRowModel","getFilteredRowModel","getExpandedRowModel","getSortedRowModel","filterFns","leftPins","contextLeftPins","rows","rowIds","colIdsSortedByPinning","a","b","colA","colB","visibleColumns","columnVirtualizer","virtualPaddingLeft","virtualPaddingRight","useColumnVirtualization","prevVisibleRef","virtualItems","visibleColumnIds","item","changes","hasChanged","isVisible","columnSizeVars","useCustomColumnWidthVars","powerLicense","usePowerpack","RemoteSummaryCellContent","isFooterLoaded","isFooterModuleLoading","useLoadModule","summariesEnabled","summariesLoading","getRowHeight","defaultRowHeight","useDynamicRowHeight","attribByField","acc","attrib","rowOrderIds","columnOrderIds","draggedRowData","r","combinedScrollHandler","containerRefElement","scrollHeight","scrollTop","clientHeight","groupValue","isEntityPickerOpen","handleMoveSubmit","closeMoveDialog","movingEntities","handleMoveToRoot","getDisabledFolderIds","getDisabledMessage","useMoveEntities","handleMoveSubmitWithExpand","folderIdToExpand","prevExpanded","tableUiContent","jsxs","ClipboardProvider","jsx","Styled.TableWrapper","Styled.TableContainer","clsx","TableHead","TableBody","TableFooterRow","columnId","calc","format","EntityPickerDialog","dragOverlayPortal","createPortal","DragOverlay","overlayRowInstance","tableWidth","Styled.TR","vc","cell","cellStyleBase","getCommonPinningStyles","getColumnWidth","Styled.TD","Icon","TD","getCellId","Fragment","ColumnDragOverlay","active","useDndContext","activeColumnId","draggedColumnHeader","h","Styled.HeaderCell","Styled.TableCellContent","flexRender","Styled.TableHeader","headerGroup","TableHeadRow","virtualColumns","isColumnDrag","isDraggedColumnPinned","Styled.ColumnHeader","SortableContext","horizontalListSortingStrategy","virtualColumn","header","isDraggable","TableHeadCell","canFilter","canHide","canSort","canPin","canResize","isReadOnly","column","menuId","menuOpen","useMenuContext","isOpen","isThisColumnPinned","attributes","listeners","setNodeRef","transform","transition","isDragging","useSortable","isDraggingInSameSection","getDragStyle","CSS","pinnedOverride","preventDragFromActions","e","Styled.HeaderButtons","ColumnHeaderMenu","HeaderActionButton","Styled.ResizedHandler","attribs","contextMenuItems","headerLabels","headerId","handleTableBodyContextMenu","useCellContextMenu","handlePreFetchTasks","usePrefetchFolderTasks","rowVirtualizer","useVirtualizer","index","element","virtualRows","measureRowElement","node","useKeyboardNavigation","visibleLeafColumns","columnDividerLefts","lefts","sizeVars","i","tbodyContent","Styled.ColumnDividers","left","virtualRow","TableBodyRow","Styled.AnimatedEmptyPlaceholder","EmptyPlaceholder","Button","verticalListSortingStrategy","visibleCells","paddingLeft","paddingRight","rowRef","dataIndex","offsetTop","rowHeight","sortable","combinedRef","style","RowDragHandleCellContent","className","onOpenPlayer","isCellSelected","isCellFocused","startSelection","extendSelection","endSelection","selectCell","focusCell","getCellBorderClasses","clearSelection","setSelectedCells","setAnchorCell","setFocusedCellId","isRowSelected","useSelectedRowsContext","isEditing","setEditingCellId","editingCellId","borderClasses","isLastLeftPinnedColumn","isRowSelectionColumn","isGroup","isMultipleSelected","isEntityExpandable","target","isTargetReadOnly","isEntityRestricted","setDetailsPanelTabForScope","rowSelectionCellId","additive","position","prev","newSelection","targetIds","getEntityViewierIds","isRestricted","EDIT_TRIGGER_CLASS","editingInput","proceedWithSelection"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ProjectTreeTable.cjs.js","sources":["../../../../../src/containers/ProjectTreeTable/ProjectTreeTable.tsx"],"sourcesContent":["import { useMemo, useRef, useEffect, CSSProperties, useCallback, UIEventHandler, FC } from 'react' // Added useCallback\nimport { useVirtualizer, VirtualItem, Virtualizer } from '@tanstack/react-virtual'\n// TanStack Table imports\nimport {\n useReactTable,\n getCoreRowModel,\n getFilteredRowModel,\n getExpandedRowModel,\n filterFns,\n flexRender,\n Row,\n getSortedRowModel,\n Cell,\n Table,\n Header,\n HeaderGroup,\n RowData,\n ExpandedState,\n} from '@tanstack/react-table'\n\n// Utility imports\nimport clsx from 'clsx'\n\n// Type imports\nimport type { TableRow } from './types/table'\n\n// Component imports\nimport buildTreeTableColumns, {\n DefaultColumns,\n isEntityExpandable,\n TreeTableExtraColumn,\n} from './buildTreeTableColumns'\nimport * as Styled from './ProjectTreeTable.styled'\nimport { RowDragHandleCellContent, ColumnHeaderMenu } from './components'\nimport { TableFooterRow } from './components/TableFooterRow'\nimport type { FieldStats } from '@shared/api'\nimport { getCommonPinningStyles, getColumnWidth } from './utils/pinningUtils'\nimport EmptyPlaceholder from '../../components/EmptyPlaceholder'\nimport HeaderActionButton from './components/HeaderActionButton'\n\n// Context imports\nimport { useCellEditing } from './context/CellEditingContext'\nimport { useSelectionCellsContext } from './context/SelectionCellsContext'\nimport { ClipboardProvider } from './context/ClipboardContext'\nimport { useSelectedRowsContext } from './context/SelectedRowsContext'\nimport { useColumnSettingsContext } from './context/ColumnSettingsContext'\nimport { useMenuContext } from '../../context/MenuContext'\nimport { ROW_SELECTION_COLUMN_ID, DRAG_HANDLE_COLUMN_ID } from './constants'\n\n// Hook imports\nimport useCustomColumnWidthVars from './hooks/useCustomColumnWidthVars'\nimport usePrefetchFolderTasks from './hooks/usePrefetchFolderTasks'\nimport useCellContextMenu, {\n HeaderLabel,\n ContextMenuItemConstructors,\n} from './hooks/useCellContextMenu'\nimport useColumnVirtualization from './hooks/useColumnVirtualization'\nimport useKeyboardNavigation from './hooks/useKeyboardNavigation'\nimport useDynamicRowHeight from './hooks/useDynamicRowHeight'\n\n// EntityPickerDialog import\nimport { EntityPickerDialog } from '../EntityPickerDialog/EntityPickerDialog'\n// Move entity hook\nimport { useMoveEntities } from './hooks/useMoveEntities'\nimport { useProjectDataContext } from '@shared/containers'\n\n// Utility function imports\nimport { CellId, getCellId, parseCellId } from './utils/cellUtils'\nimport { generateLoadingRows, generateDummyAttributes } from './utils/loadingUtils'\nimport { isEntityRestricted, isTargetReadOnly } from './utils/restrictedEntity'\nimport { createPortal } from 'react-dom'\nimport { Button, Icon } from '@ynput/ayon-react-components'\nimport {\n ProjectTableAttribute,\n BuiltInFieldOptions,\n MainCountLabels,\n SummaryCellContentProps,\n} from './types'\nimport { EnumItem } from '@shared/api'\nimport { ToggleExpandAll, useProjectTableContext } from './context/ProjectTableContext'\nimport {\n checkColumnVisibility,\n ensureAtLeastOneVisibleColumn,\n getEntityViewierIds,\n getReadOnlyLists,\n getTableFieldOptions,\n} from './utils'\nimport { EntityUpdate } from './hooks/useUpdateTableData'\n\n// dnd-kit imports\nimport {\n DragOverlay,\n useDndContext,\n type UniqueIdentifier,\n // Removed: DndContext, KeyboardSensor, MouseSensor, TouchSensor, closestCenter, DragEndEvent, DragStartEvent, Active, Over, useSensor, useSensors\n} from '@dnd-kit/core'\n// import { restrictToVerticalAxis } from '@dnd-kit/modifiers'\nimport {\n SortableContext,\n verticalListSortingStrategy,\n useSortable,\n horizontalListSortingStrategy,\n} from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\n\nimport { useProjectContext, usePowerpack, setDetailsPanelTabForScope } from '@shared/context'\nimport { useLoadModule } from '@shared/hooks'\nimport { EDIT_TRIGGER_CLASS } from './widgets/CellWidget'\nimport { toast } from 'react-toastify'\nimport { EntityMoveData } from '@shared/context/MoveEntityContext'\nimport { upperFirst } from 'lodash'\nimport { ColumnsConfig } from './types/columnConfig'\n\ntype CellUpdate = (\n entity: Omit<EntityUpdate, 'id'>,\n config?: { selection?: string[] },\n) => Promise<void>\n\n// rendered while the powerpack summaries remote is unavailable (no license / old addon)\nconst SummaryCellContentFallback: FC<SummaryCellContentProps> = () => null\n\ndeclare module '@tanstack/react-table' {\n interface TableMeta<TData extends RowData> {\n options?: BuiltInFieldOptions\n readOnly?: ProjectTreeTableProps['readOnly']\n projectName?: string\n updateEntities?: CellUpdate\n toggleExpandAll?: ToggleExpandAll\n selection?: string[]\n columnsConfig?: ColumnsConfig\n loadingLinksEntityIds?: Set<string>\n }\n}\n\nconst matchesColumnId = (id: string, subscribers: string[]) => {\n return subscribers.some((sub) => {\n if (sub.includes('*')) {\n // Escape all regex special characters\n const escaped = sub.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n // Replace escaped '*' (\\*) with regex '.*'\n const pattern = '^' + escaped.replace(/\\\\\\*/g, '.*') + '$'\n const regex = new RegExp(pattern)\n return regex.test(id)\n }\n return id === sub\n })\n}\n\nexport interface ProjectTreeTableProps extends React.HTMLAttributes<HTMLDivElement> {\n scope: string\n sliceId: string\n onScrollBottom?: React.HTMLAttributes<HTMLDivElement>['onScroll']\n onOpenNew?: (type: 'folder' | 'task') => void\n readOnly?: (DefaultColumns | string)[]\n excludedColumns?: (DefaultColumns | string)[]\n excludedSorting?: (DefaultColumns | string)[]\n extraColumns?: TreeTableExtraColumn[]\n includeLinks?: boolean\n isLoading?: boolean\n isExpandable?: boolean // if true, show the expand/collapse icons\n enableSorting?: boolean\n clientSorting?: boolean\n sortableRows?: boolean\n onRowReorder?: (active: UniqueIdentifier, over: UniqueIdentifier | null) => void // Adjusted type for active/over if needed, or keep as Active, Over\n dndActiveId?: UniqueIdentifier | null // Added prop\n columnsConfig?: ColumnsConfig // Configure column behavior (display, styling, etc.)\n showColumnSummaries?: boolean // render the fixed summary footer row\n fieldStats?: FieldStats[] // primary-entity stats (tasks/versions) feeding the footer\n groupFieldStats?: FieldStats[] // group-entity stats (folders/products) for the 'all' row scope\n fieldStatsLoading?: boolean // footer stats still loading -> show skeletons\n mainCountLabels?: MainCountLabels // labels for the main cell dual count (defaults folders/tasks)\n onScrollBottomGroupBy?: (groupValue: string) => void // Handle scroll to bottom for grouped data\n contextMenuItems?: ContextMenuItemConstructors // Additional context menu items to merge with defaults\n onColumnVisibleChange?: (changes: Record<string, boolean>) => void\n onColumnVisibleChangeSubscribed?: string[]\n pt?: {\n container?: React.HTMLAttributes<HTMLDivElement>\n head?: Partial<TableHeadProps>\n }\n}\n\nexport const ProjectTreeTable = ({\n scope,\n sliceId,\n onScroll,\n onScrollBottom, // when the user scrolls to the bottom of the table, this callback is called\n onOpenNew,\n readOnly,\n excludedColumns,\n excludedSorting,\n extraColumns,\n includeLinks,\n isLoading: isLoadingProp,\n isExpandable,\n enableSorting = true,\n clientSorting = false,\n sortableRows = false,\n onRowReorder,\n dndActiveId, // Destructure new prop\n columnsConfig,\n showColumnSummaries = false,\n fieldStats,\n groupFieldStats,\n fieldStatsLoading,\n mainCountLabels,\n onScrollBottomGroupBy, // Destructure new prop for group-by load more\n contextMenuItems: propsContextMenuItems, // Additional context menu items from props\n onColumnVisibleChange,\n onColumnVisibleChangeSubscribed,\n pt,\n ...props\n}: ProjectTreeTableProps) => {\n const {\n columnVisibility,\n columnPinning,\n columnOrder,\n columnSizing,\n setAllColumns,\n sorting,\n sortingOnChange,\n columnPinningOnChange,\n columnSizingOnChange,\n defaultColumnVisibility,\n columnVisibilityOnChange,\n columnOrderOnChange,\n groupBy,\n columnSummaries,\n updateColumnSummary,\n columnSummaryScopes,\n updateColumnSummaryScope,\n columnSummaryFormats,\n updateColumnSummaryFormat,\n } = useColumnSettingsContext()\n const { productTypes, projectName, ...projectInfo } = useProjectContext()\n\n const {\n tableData,\n attribFields,\n entitiesMap,\n users,\n isLoading: isLoadingData,\n error,\n isInitialized,\n expanded,\n updateExpanded,\n toggleExpandAll,\n showHierarchy,\n isFlatFolderView,\n fetchNextPage,\n scopes, // or entityTypes\n getEntityById,\n onResetView,\n overrideGroupBy,\n loadingLinksEntityIds,\n } = useProjectTableContext()\n const isGrouping = !!groupBy || !!overrideGroupBy\n\n const { writableFields } = useProjectDataContext()\n\n const isLoading = isLoadingProp || isLoadingData\n\n const {\n statuses = [],\n folderTypes = [],\n taskTypes = [],\n tags = [],\n linkTypes = [],\n } = projectInfo || {}\n const options: BuiltInFieldOptions = useMemo(\n () =>\n getTableFieldOptions({\n users,\n statuses,\n folderTypes,\n taskTypes,\n productTypes,\n tags,\n scopes,\n }),\n [users, statuses, folderTypes, taskTypes, scopes, tags],\n )\n\n //The virtualizer needs to know the scrollable container element\n const tableContainerRef = useRef<HTMLDivElement>(null)\n // reference of how many rows are currently rendered in the table\n const tableRowsCountRef = useRef(0)\n\n // Selection context\n const { registerGrid } = useSelectionCellsContext()\n\n // generate loading attrib and rows\n const { loadingAttrib, loadingRows } = useMemo(() => {\n // count the number of children in tbody\n const tableRowsCount = tableContainerRef.current?.querySelectorAll('tbody tr').length || 0\n const loadingAttrib = generateDummyAttributes()\n const loadingRows = generateLoadingRows(\n showHierarchy && tableData.length > 0\n ? Math.min(tableRowsCount, 50)\n : groupBy\n ? Math.max(tableRowsCountRef.current, 50)\n : 50,\n )\n\n return { loadingAttrib, loadingRows }\n }, [])\n\n const showLoadingRows = !isInitialized || isLoading\n\n // Format readonly columns and attributes\n const { readOnlyColumns, readOnlyAttribs } = useMemo(\n () => getReadOnlyLists(attribFields, writableFields, readOnly),\n [attribFields, writableFields, readOnly],\n )\n\n const { selectedCells } = useSelectionCellsContext()\n const { updateEntities } = useCellEditing()\n\n const handleCellUpdate: CellUpdate = useCallback(\n async (entity, config) => {\n const { selection = [] } = config || {}\n const entitiesToUpdate: EntityUpdate[] = []\n if (!selection?.length) {\n entitiesToUpdate.push({ ...entity, id: entity.rowId })\n } else {\n // if includeSelection is true, update all the selected cells with the same columnId\n const { field, value, isAttrib } = entity\n for (const cellId of selectedCells) {\n const { colId, rowId } = parseCellId(cellId) || {}\n\n // ignore row selection column\n if (colId === ROW_SELECTION_COLUMN_ID) continue\n\n const entity = getEntityById(rowId || '')\n if (!entity) {\n console.warn(`Entity with ID ${rowId} not found for cell update.`)\n continue\n }\n\n if ((!colId?.includes('attrib_') || colId?.replace('attrib_', '') === field) && rowId) {\n entitiesToUpdate.push({\n field: field,\n rowId: rowId,\n id: entity.entityId,\n value: value,\n isAttrib: isAttrib,\n type: entity.entityType,\n })\n }\n }\n }\n\n if (!entitiesToUpdate.length) {\n console.warn('No entities to update, skipping updateEntities call.')\n toast.warn('No entities to update.')\n return\n }\n\n await updateEntities(entitiesToUpdate, true)\n },\n [updateEntities, getEntityById, selectedCells],\n )\n\n const columnAttribs = useMemo(\n () => (isInitialized ? attribFields : loadingAttrib),\n [attribFields, loadingAttrib, isInitialized],\n )\n\n const getNameLabelHeader = () => {\n if (scopes.includes('version')) return 'Product / Version'\n return scopes.map((s) => upperFirst(s)).join(' / ')\n }\n\n const columns = useMemo(() => {\n const baseColumns = buildTreeTableColumns({\n scopes,\n attribs: columnAttribs,\n links: linkTypes,\n includeLinks,\n showHierarchy,\n isFlatFolderView,\n options,\n extraColumns,\n excluded: excludedColumns,\n excludedSorting,\n groupBy,\n nameLabel: getNameLabelHeader(),\n })\n\n if (sortableRows && enableSorting) {\n return [\n {\n id: DRAG_HANDLE_COLUMN_ID,\n header: () => null,\n cell: () => null, // Content rendered by TableBodyRow\n size: 24,\n minSize: 24,\n maxSize: 24,\n enableResizing: false,\n enableSorting: false,\n enableHiding: false,\n enablePinning: false, // Programmatically pinned\n },\n ...baseColumns,\n ]\n }\n return baseColumns\n }, [\n scopes,\n columnAttribs,\n showHierarchy,\n isFlatFolderView,\n isExpandable,\n options,\n linkTypes,\n includeLinks,\n extraColumns,\n excludedColumns,\n excludedSorting,\n sortableRows,\n enableSorting,\n groupBy,\n ])\n\n // Keep ColumnSettingsProvider's allColumns ref up to date\n useEffect(() => {\n const ids = columns.map((c) => c.id!).filter(Boolean)\n setAllColumns(ids)\n }, [columns, setAllColumns])\n\n const resolvedColumnVisibility = useMemo(() => {\n const merged = { ...columnVisibility }\n columns.forEach((col) => {\n // @ts-ignore\n const explicitVisible = col.visible\n if (col.id && merged[col.id] === undefined) {\n if (explicitVisible !== undefined) {\n merged[col.id] = explicitVisible\n } else {\n merged[col.id] = checkColumnVisibility({}, col.id, defaultColumnVisibility)\n }\n }\n })\n return ensureAtLeastOneVisibleColumn(merged, columns.map((c) => c.id as string).filter(Boolean))\n }, [columnVisibility, defaultColumnVisibility, columns])\n\n const table = useReactTable({\n data: showLoadingRows ? loadingRows : tableData,\n columns,\n defaultColumn: {\n minSize: 50,\n size: 150,\n },\n enableRowSelection: true, //enable row selection for all rows\n getRowId: (row) => row.id,\n enableSubRowSelection: false, //disable sub row selection\n getSubRows: (row) => row.subRows,\n getRowCanExpand: () => !!isExpandable || showHierarchy || isFlatFolderView || isGrouping,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n filterFromLeafRows: true,\n // EXPANDABLE\n onExpandedChange: updateExpanded,\n // SORTING\n enableSorting,\n getSortedRowModel: getSortedRowModel(),\n sortDescFirst: false,\n manualSorting: !clientSorting,\n onSortingChange: sortingOnChange,\n columnResizeMode: 'onChange',\n onColumnPinningChange: columnPinningOnChange,\n onColumnSizingChange: columnSizingOnChange,\n onColumnVisibilityChange: columnVisibilityOnChange,\n onColumnOrderChange: columnOrderOnChange,\n // @ts-ignore\n filterFns,\n state: {\n expanded,\n sorting,\n columnPinning: (() => {\n const leftPins: string[] = []\n if (sortableRows) {\n leftPins.push(DRAG_HANDLE_COLUMN_ID)\n }\n leftPins.push(ROW_SELECTION_COLUMN_ID)\n\n // Add other unique pins from context, ensuring they are not the programmatic ones\n const contextLeftPins = (columnPinning.left || []).filter(\n (id) => id !== DRAG_HANDLE_COLUMN_ID && id !== ROW_SELECTION_COLUMN_ID,\n )\n leftPins.push(...contextLeftPins)\n // Remove duplicates just in case, though filter should handle it\n const uniqueLeftPins = [...new Set(leftPins)]\n\n return {\n left: uniqueLeftPins,\n right: columnPinning.right,\n }\n })(),\n columnSizing,\n columnVisibility: resolvedColumnVisibility,\n columnOrder,\n },\n meta: {\n projectName,\n options,\n readOnly: readOnlyColumns,\n updateEntities: handleCellUpdate,\n toggleExpandAll,\n loadMoreRows: fetchNextPage,\n selection: Array.from(selectedCells),\n columnsConfig,\n loadingLinksEntityIds,\n },\n })\n\n // TODO: when there is data (like in error) then we have infinite rendering\n\n const { rows } = table.getRowModel()\n\n // update the tableRowsCountRef with the current number of rows\n useEffect(() => {\n tableRowsCountRef.current = rows.length\n }, [rows.length])\n\n // Register grid structure with selection context when rows or columns change\n useEffect(() => {\n if (!rows.length) return\n const rowIds = rows.map((row) => row.id)\n const colIds = table.getAllLeafColumns().map((col) => col.id)\n const colIdsSortedByPinning = [...colIds].sort((a, b) => {\n if (ROW_SELECTION_COLUMN_ID === b) return 1\n const colA = columnPinning.left?.includes(a) ? 0 : 1\n const colB = columnPinning.left?.includes(b) ? 0 : 1\n return colA - colB\n })\n\n registerGrid(rowIds, colIdsSortedByPinning)\n }, [rows, table.getAllLeafColumns(), columnPinning, ROW_SELECTION_COLUMN_ID, registerGrid])\n\n const visibleColumns = table.getVisibleLeafColumns()\n\n // Use the column virtualization hook\n const { columnVirtualizer, virtualPaddingLeft, virtualPaddingRight } = useColumnVirtualization({\n visibleColumns,\n tableContainerRef,\n columnPinning,\n columnSizing,\n columnOrder,\n })\n\n // Track column visibility changes for subscribed columns\n const prevVisibleRef = useRef<Record<string, boolean>>({})\n const virtualItems = columnVirtualizer.getVirtualItems()\n\n // Subscribe to column visibility changes\n useEffect(() => {\n if (!onColumnVisibleChange || !onColumnVisibleChangeSubscribed?.length) return\n\n const visibleColumnIds = new Set(virtualItems.map((item) => visibleColumns[item.index]?.id))\n const changes: Record<string, boolean> = {}\n let hasChanged = false\n\n // We only care about columns that match the subscription patterns\n const subscribedColumns = table\n .getAllLeafColumns()\n .filter((col) => matchesColumnId(col.id, onColumnVisibleChangeSubscribed))\n\n subscribedColumns.forEach((col) => {\n const isVisible = visibleColumnIds.has(col.id)\n if (prevVisibleRef.current[col.id] !== isVisible) {\n changes[col.id] = isVisible\n hasChanged = true\n prevVisibleRef.current[col.id] = isVisible\n }\n })\n\n if (hasChanged) {\n onColumnVisibleChange(changes)\n }\n }, [virtualItems, onColumnVisibleChange, onColumnVisibleChangeSubscribed, visibleColumns, table])\n\n const columnSizeVars = useCustomColumnWidthVars(table, columnSizing)\n\n // Summary footer is a powerpack feature.\n // popup hidden for now: also expose `setPowerpackDialog, isLoading: isLicenseLoading`\n const { powerLicense } = usePowerpack()\n const [RemoteSummaryCellContent, { isLoaded: isFooterLoaded, isLoading: isFooterModuleLoading }] =\n useLoadModule<FC<SummaryCellContentProps>>({\n addon: 'powerpack',\n remote: 'views',\n module: 'SummaryCellContent',\n fallback: SummaryCellContentFallback,\n skip: !showColumnSummaries || !powerLicense,\n })\n // Free-user upsell row hidden for now (too many power-feature prompts); keep for later.\n // Render the row as soon as the module is loading or loaded (not on load failure),\n // so skeletons show during the load instead of the row popping in late.\n const summariesEnabled =\n showColumnSummaries &&\n powerLicense &&\n (isFooterLoaded || isFooterModuleLoading) &&\n !!rows.length\n // shimmer while the remote module or the footer stats are still loading\n const summariesLoading = isFooterModuleLoading || !isFooterLoaded || !!fieldStatsLoading\n // only show the upsell once the license check resolves, so licensed users\n // don't see the bolt flash before the addon loads\n // const showSummaryPowerFeature = !isLicenseLoading && !powerLicense\n\n // Calculate dynamic row height based on user setting from Customize panel\n const { getRowHeight, defaultRowHeight } = useDynamicRowHeight()\n\n const attribByField = useMemo(() => {\n return attribFields.reduce((acc: Record<string, EnumItem[]>, attrib) => {\n if (attrib.data?.enum?.length) {\n acc[attrib.name] = attrib.data?.enum\n }\n return acc\n }, {})\n }, [attribFields])\n\n const rowOrderIds = useMemo(() => tableData.map((row) => row.id), [tableData])\n // Get column IDs for drag-and-drop from context columnOrder (exclude non-draggable columns)\n // This ensures SortableContext items match what the drag handlers use\n const columnOrderIds = useMemo(() => {\n return columnOrder.filter(\n (id) => id !== DRAG_HANDLE_COLUMN_ID && id !== ROW_SELECTION_COLUMN_ID,\n )\n }, [columnOrder])\n\n const draggedRowData = useMemo(() => {\n if (!dndActiveId || !sortableRows) return null // Use dndActiveId\n return tableData.find((r) => r.id === dndActiveId) // Use dndActiveId\n }, [dndActiveId, tableData, sortableRows])\n\n const combinedScrollHandler: UIEventHandler<HTMLDivElement> = useCallback(\n (e) => {\n // Call the original onScroll if provided\n onScroll?.(e)\n\n if (onScrollBottom) {\n const containerRefElement = e.currentTarget\n if (containerRefElement && !showHierarchy && !isFlatFolderView && !groupBy) {\n const { scrollHeight, scrollTop, clientHeight } = containerRefElement\n //once the user has scrolled within 500px of the bottom of the table, fetch more data if we can\n if (scrollHeight - scrollTop - clientHeight < 500 && !isLoading) {\n onScrollBottom(e)\n }\n }\n }\n\n // Handle scroll-to-bottom for grouped data\n if (onScrollBottomGroupBy && groupBy) {\n const containerRefElement = e.currentTarget\n // look for a load more button\n const loadMoreButton = containerRefElement?.querySelector('.load-more')\n // get load more button id\n const loadMoreButtonId = loadMoreButton?.getAttribute('id')\n const groupValue = loadMoreButtonId?.split('-')[2] // assuming the id is in the format 'load-more-groupValue'\n if (groupValue) {\n onScrollBottomGroupBy(groupValue)\n }\n }\n },\n [onScroll, onScrollBottom, onScrollBottomGroupBy, showHierarchy, groupBy, isLoading],\n )\n\n // Get move entity functions for the dialog\n const {\n isEntityPickerOpen,\n handleMoveSubmit,\n closeMoveDialog,\n movingEntities,\n handleMoveToRoot,\n getDisabledFolderIds,\n getDisabledMessage,\n } = useMoveEntities({\n projectName,\n })\n\n const handleMoveSubmitWithExpand = (selection: string[]) => {\n handleMoveSubmit(selection)\n const folderIdToExpand = selection[0]\n\n updateExpanded((prevExpanded: ExpandedState) => {\n if (typeof prevExpanded === 'boolean') {\n if (prevExpanded) {\n return prevExpanded\n }\n return { [folderIdToExpand]: true }\n }\n\n if (prevExpanded[folderIdToExpand]) {\n return prevExpanded\n }\n\n return {\n ...prevExpanded,\n [folderIdToExpand]: true,\n }\n })\n }\n\n const tableUiContent = (\n <ClipboardProvider\n entitiesMap={entitiesMap}\n columnEnums={{ ...options, ...attribByField }}\n columnReadOnly={readOnlyAttribs}\n visibleColumns={visibleColumns}\n >\n <Styled.TableWrapper {...props}>\n <Styled.TableContainer\n ref={tableContainerRef}\n style={{ height: '100%', padding: 0 }}\n onScroll={combinedScrollHandler}\n {...pt?.container}\n data-column-dnd-container\n className={clsx(\n 'table-container',\n {\n resizing: table.getState().columnSizingInfo.isResizingColumn,\n },\n pt?.container?.className,\n )}\n >\n <table\n style={{\n display: 'grid',\n borderCollapse: 'collapse',\n userSelect: 'none',\n ...columnSizeVars,\n width: table.getTotalSize(),\n cursor: table.getState().columnSizingInfo.isResizingColumn ? 'col-resize' : undefined,\n // stretch tbody to the container so the column dividers fill the empty\n // space below the rows; also pins the summary footer to the bottom\n minHeight: '100%',\n gridTemplateRows: 'auto 1fr auto',\n }}\n >\n <TableHead\n columnVirtualizer={columnVirtualizer}\n table={table}\n virtualPaddingLeft={virtualPaddingLeft}\n virtualPaddingRight={virtualPaddingRight}\n isLoading={isLoading}\n readOnlyColumns={readOnlyColumns}\n sortableRows={sortableRows}\n columnOrderIds={columnOrderIds}\n {...pt?.head}\n />\n <TableBody\n columnVirtualizer={columnVirtualizer}\n table={table}\n tableContainerRef={tableContainerRef}\n virtualPaddingLeft={virtualPaddingLeft}\n virtualPaddingRight={virtualPaddingRight}\n showHierarchy={showHierarchy}\n attribs={attribFields}\n onOpenNew={onOpenNew}\n rowOrderIds={rowOrderIds}\n sortableRows={sortableRows}\n error={error}\n isLoading={isLoading}\n isGrouping={isGrouping}\n getRowHeight={getRowHeight}\n defaultRowHeight={defaultRowHeight}\n onResetView={onResetView}\n contextMenuItems={propsContextMenuItems}\n />\n {summariesEnabled && (\n <TableFooterRow\n columnVirtualizer={columnVirtualizer}\n table={table}\n virtualPaddingLeft={virtualPaddingLeft}\n virtualPaddingRight={virtualPaddingRight}\n isLoading={summariesLoading}\n // Free-user upsell hidden for now; keep for later:\n // onClick={showSummaryPowerFeature ? () => setPowerpackDialog('columnSummaries') : undefined}\n renderCellContent={(columnId) => (\n <RemoteSummaryCellContent\n columnId={columnId}\n attribs={attribFields}\n fieldStats={fieldStats}\n groupFieldStats={groupFieldStats}\n calc={columnSummaries[columnId]}\n onCalcChange={(calc) => updateColumnSummary(columnId, calc)}\n format={columnSummaryFormats[columnId]}\n onFormatChange={(format) => updateColumnSummaryFormat(columnId, format)}\n scope={columnSummaryScopes[columnId]}\n onScopeChange={(scope) => updateColumnSummaryScope(columnId, scope)}\n mainCountLabels={mainCountLabels}\n fieldOptions={options}\n />\n )}\n // Power feature cell for community users (hidden for now), shows a bolt hint in the name column:\n // renderCellContent={(columnId) =>\n // showSummaryPowerFeature && columnId === 'name' ? (\n // <Styled.SummaryPowerFeature>\n // <Icon icon=\"bolt\" filled />\n // Summaries\n // </Styled.SummaryPowerFeature>\n // ) : null\n // }\n />\n )}\n </table>\n </Styled.TableContainer>\n </Styled.TableWrapper>\n {/* Render EntityPickerDialog alongside table content */}\n {isEntityPickerOpen &&\n projectName &&\n movingEntities?.entities &&\n movingEntities.entities.length > 0 && (\n <EntityPickerDialog\n projectName={projectName}\n entityType=\"folder\"\n onSubmit={handleMoveSubmitWithExpand}\n onClose={closeMoveDialog}\n showMoveToRoot={movingEntities.entities.every(\n (entity: EntityMoveData) => entity.entityType === 'folder',\n )}\n onMoveToRoot={handleMoveToRoot}\n disabledIds={getDisabledFolderIds()}\n getDisabledMessage={getDisabledMessage}\n />\n )}\n </ClipboardProvider>\n )\n\n // Render DragOverlay if sortableRows and dndActiveId is present\n const dragOverlayPortal =\n sortableRows &&\n dndActiveId &&\n createPortal(\n <DragOverlay dropAnimation={null}>\n {draggedRowData\n ? (() => {\n const overlayRowInstance = table.getRowModel().rows.find((r) => r.id === dndActiveId)\n if (!overlayRowInstance) return null\n\n const tableWidth = table.getTotalSize()\n\n return (\n <table\n style={{\n width: tableWidth,\n borderCollapse: 'collapse',\n backgroundColor: 'var(--md-sys-color-surface-container-high)',\n boxShadow: '0 0 10px rgba(0,0,0,0.2)',\n ...columnSizeVars,\n }}\n >\n <tbody>\n <Styled.TR style={{ display: 'flex', userSelect: 'none' }}>\n {virtualPaddingLeft ? (\n <td style={{ display: 'flex', width: virtualPaddingLeft }} />\n ) : null}\n {columnVirtualizer.getVirtualItems().map((vc) => {\n const cell = overlayRowInstance.getVisibleCells()[vc.index]\n if (!cell) return null\n\n const cellStyleBase: CSSProperties = {\n ...getCommonPinningStyles(cell.column),\n width: getColumnWidth(cell.column.id),\n display: 'flex',\n alignItems: 'center',\n height: defaultRowHeight,\n }\n\n if (cell.column.id === DRAG_HANDLE_COLUMN_ID) {\n return (\n <Styled.TD\n key={`overlay-drag-${cell.id}`}\n style={{ ...cellStyleBase, justifyContent: 'center' }}\n className={clsx(cell.column.id)}\n >\n <Icon icon=\"drag_handle\" /> {/* Static icon */}\n </Styled.TD>\n )\n }\n return (\n <TD\n cell={cell}\n cellId={`overlay-${getCellId(overlayRowInstance.id, cell.column.id)}`}\n rowId={overlayRowInstance.id}\n key={`overlay-cell-${cell.id}`}\n showHierarchy={showHierarchy}\n />\n )\n })}\n {virtualPaddingRight ? (\n <td style={{ display: 'flex', width: virtualPaddingRight }} />\n ) : null}\n </Styled.TR>\n </tbody>\n </table>\n )\n })()\n : null}\n </DragOverlay>,\n document.body,\n )\n\n if (sortableRows) {\n return (\n <>\n {tableUiContent}\n {dragOverlayPortal}\n <ColumnDragOverlay table={table} />\n </>\n )\n } else {\n return (\n <>\n {tableUiContent}\n <ColumnDragOverlay table={table} />\n </>\n )\n }\n}\n\n/**\n * Isolated component for column drag overlay.\n * This prevents the entire table from re-rendering on every drag frame.\n */\ninterface ColumnDragOverlayProps {\n table: Table<TableRow>\n}\n\nconst ColumnDragOverlay = ({ table }: ColumnDragOverlayProps) => {\n const { active } = useDndContext()\n\n // Only process if dragging a column\n const isColumnDrag = active?.data?.current?.type === 'column'\n const activeColumnId = isColumnDrag ? (active?.id as string) : null\n\n const draggedColumnHeader = useMemo(() => {\n if (!activeColumnId) return null\n return table.getHeaderGroups()[0]?.headers.find((h) => h.id === activeColumnId) || null\n }, [activeColumnId, table])\n\n if (!activeColumnId || !draggedColumnHeader) return null\n\n return createPortal(\n <DragOverlay dropAnimation={null}>\n <Styled.HeaderCell\n style={{\n width: draggedColumnHeader.column.getSize(),\n backgroundColor: 'var(--md-sys-color-surface-container-high)',\n boxShadow: '0 0 10px rgba(0,0,0,0.2)',\n display: 'flex',\n alignItems: 'center',\n minHeight: 34,\n }}\n >\n <Styled.TableCellContent className=\"bold header\">\n {flexRender(\n draggedColumnHeader.column.columnDef.header,\n draggedColumnHeader.getContext(),\n )}\n </Styled.TableCellContent>\n </Styled.HeaderCell>\n </DragOverlay>,\n document.body,\n )\n}\n\ninterface TableHeadProps extends React.HTMLAttributes<HTMLTableSectionElement> {\n columnVirtualizer: Virtualizer<HTMLDivElement, HTMLTableCellElement>\n table: Table<TableRow>\n virtualPaddingLeft: number | undefined\n virtualPaddingRight: number | undefined\n isLoading: boolean\n readOnlyColumns?: string[]\n sortableRows?: boolean\n columnOrderIds: string[]\n}\n\nconst TableHead = ({\n columnVirtualizer,\n table,\n virtualPaddingLeft,\n virtualPaddingRight,\n isLoading,\n readOnlyColumns,\n sortableRows,\n columnOrderIds,\n ...props\n}: TableHeadProps) => {\n return (\n <Styled.TableHeader {...props}>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableHeadRow\n key={headerGroup.id}\n columnVirtualizer={columnVirtualizer}\n headerGroup={headerGroup}\n virtualPaddingLeft={virtualPaddingLeft}\n virtualPaddingRight={virtualPaddingRight}\n isLoading={isLoading}\n readOnlyColumns={readOnlyColumns}\n sortableRows={sortableRows}\n columnOrderIds={columnOrderIds}\n />\n ))}\n </Styled.TableHeader>\n )\n}\n\ninterface TableHeadRowProps {\n columnVirtualizer: Virtualizer<HTMLDivElement, HTMLTableCellElement>\n headerGroup: HeaderGroup<TableRow>\n virtualPaddingLeft: number | undefined\n virtualPaddingRight: number | undefined\n isLoading: boolean\n readOnlyColumns?: string[]\n sortableRows?: boolean\n columnOrderIds: string[]\n}\n\nconst TableHeadRow = ({\n columnVirtualizer,\n headerGroup,\n virtualPaddingLeft,\n virtualPaddingRight,\n isLoading,\n readOnlyColumns,\n sortableRows,\n columnOrderIds,\n}: TableHeadRowProps) => {\n const virtualColumns = columnVirtualizer.getVirtualItems()\n const { active } = useDndContext()\n const isColumnDrag = active?.data?.current?.type === 'column'\n const isDraggedColumnPinned = isColumnDrag && (active?.data?.current?.isPinned ?? false)\n\n return (\n <Styled.ColumnHeader key={headerGroup.id} style={{ display: 'flex' }}>\n {virtualPaddingLeft ? (\n //fake empty column to the left for virtualization scroll padding\n <th style={{ display: 'flex', width: virtualPaddingLeft }} />\n ) : null}\n <SortableContext items={columnOrderIds} strategy={horizontalListSortingStrategy}>\n {virtualColumns.map((virtualColumn) => {\n const header = headerGroup.headers[virtualColumn.index]\n // Exclude certain columns from being draggable\n const isDraggable =\n header.id !== DRAG_HANDLE_COLUMN_ID && header.id !== ROW_SELECTION_COLUMN_ID\n\n return (\n <TableHeadCell\n key={header.id}\n header={header}\n isLoading={isLoading}\n isReadOnly={readOnlyColumns?.includes(header.id)}\n canSort={header.column.getCanSort()}\n canFilter={header.column.getCanFilter()}\n canHide={header.column.getCanHide()}\n canPin={header.column.getCanPin()}\n canResize={header.column.getCanResize()}\n sortableRows={sortableRows}\n isDraggable={isDraggable}\n isColumnDrag={isColumnDrag}\n isDraggedColumnPinned={isDraggedColumnPinned}\n />\n )\n })}\n </SortableContext>\n {virtualPaddingRight ? (\n //fake empty column to the right for virtualization scroll padding\n <th style={{ display: 'flex', width: virtualPaddingRight }} />\n ) : null}\n </Styled.ColumnHeader>\n )\n}\n\ninterface TableHeadCellProps {\n header: Header<TableRow, unknown>\n isLoading: boolean\n canSort?: boolean\n canFilter?: boolean\n canHide?: boolean\n canPin?: boolean\n canResize?: boolean\n isReadOnly?: boolean\n sortableRows?: boolean\n isDraggable?: boolean\n isColumnDrag?: boolean\n isDraggedColumnPinned?: boolean\n}\n\nconst TableHeadCell = ({\n header,\n isLoading,\n canFilter,\n canHide,\n canSort,\n canPin,\n canResize,\n isReadOnly,\n sortableRows,\n isDraggable = true,\n isColumnDrag,\n isDraggedColumnPinned,\n}: TableHeadCellProps) => {\n const { column } = header\n const sorting = column.getIsSorted()\n const menuId = `column-header-menu-${column.id}`\n const { menuOpen } = useMenuContext()\n const isOpen = menuOpen === menuId\n const { columnPinning } = useColumnSettingsContext()\n\n // Check if this column is pinned\n const isThisColumnPinned = columnPinning.left?.includes(column.id) || false\n\n // useSortable for column drag-and-drop\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({\n id: column.id,\n data: { type: 'column', isPinned: isThisColumnPinned },\n disabled: !isDraggable,\n })\n\n const isDraggingInSameSection = isColumnDrag && isDraggedColumnPinned === isThisColumnPinned\n\n // Build drag styles\n const getDragStyle = (): CSSProperties => {\n if (isDragging) {\n return {\n transform: CSS.Translate.toString(transform!),\n transition,\n visibility: 'hidden',\n zIndex: 200,\n }\n }\n if (isDraggingInSameSection && transform) {\n // For pinned columns, temporarily remove sticky positioning during drag animation\n const pinnedOverride = isThisColumnPinned\n ? { position: 'relative' as const, left: 'auto' }\n : {}\n return { transform: CSS.Translate.toString(transform), transition, ...pinnedOverride }\n }\n return {}\n }\n\n // Prevent drag when clicking action buttons\n const preventDragFromActions = {\n onPointerDown: (e: React.PointerEvent) => e.stopPropagation(),\n onMouseDown: (e: React.MouseEvent) => e.stopPropagation(),\n }\n\n return (\n <Styled.HeaderCell\n ref={setNodeRef}\n className={clsx(header.id, 'shimmer-dark', {\n loading: isLoading,\n 'last-pinned-left': column.getIsPinned() === 'left' && column.getIsLastColumn('left'),\n resizing: column.getIsResizing(),\n dragging: isDragging,\n draggable: isDraggable,\n })}\n key={header.id}\n style={{\n ...getCommonPinningStyles(column),\n width: getColumnWidth(column.id),\n ...getDragStyle(),\n }}\n >\n {header.isPlaceholder ? null : (\n <Styled.TableCellContent\n className={clsx('bold', 'header')}\n {...(isDraggable ? { ...attributes, ...listeners } : {})}\n >\n {flexRender(column.columnDef.header, header.getContext())}\n {isReadOnly && (\n <Icon icon=\"lock\" data-tooltip={'You only have permission to read this column.'} />\n )}\n\n <Styled.HeaderButtons className=\"actions\" $isOpen={isOpen} {...preventDragFromActions}>\n {/* Column drag handle */}\n\n {(canHide || canPin || canSort) && (\n <ColumnHeaderMenu\n className=\"header-menu\"\n header={header}\n canHide={canHide}\n canPin={canPin}\n canSort={canSort}\n isResizing={column.getIsResizing()}\n menuId={menuId}\n isOpen={isOpen}\n />\n )}\n\n {/* COLUMN SORTING */}\n {canSort && (\n <HeaderActionButton\n icon=\"sort\"\n className={clsx('sort-button', { visible: sorting })}\n style={{\n transform: sorting === 'asc' ? 'rotate(180deg) scaleX(-1)' : 'none',\n }}\n onClick={column.getToggleSortingHandler()}\n selected={!!column.getIsSorted()}\n />\n )}\n\n {/* COLUMN PINNING - only show on pinned columns (exclude selection column) */}\n {column.getIsPinned() && column.id !== ROW_SELECTION_COLUMN_ID && (\n <HeaderActionButton\n icon=\"push_pin\"\n className={clsx('pin-button', 'visible')}\n onClick={() => column.pin(false)}\n selected\n />\n )}\n </Styled.HeaderButtons>\n {canResize && (\n <Styled.ResizedHandler\n {...{\n onDoubleClick: () => column.resetSize(),\n onMouseDown: (e: React.MouseEvent) => {\n e.stopPropagation()\n header.getResizeHandler()(e)\n },\n onTouchStart: header.getResizeHandler(),\n onPointerDown: (e: React.PointerEvent) => e.stopPropagation(),\n className: clsx('resize-handle', {\n resizing: column.getIsResizing(),\n }),\n }}\n />\n )}\n </Styled.TableCellContent>\n )}\n </Styled.HeaderCell>\n )\n}\n\ninterface TableBodyProps {\n columnVirtualizer: Virtualizer<HTMLDivElement, HTMLTableCellElement>\n table: Table<TableRow>\n tableContainerRef: React.RefObject<HTMLDivElement>\n showHierarchy: boolean\n virtualPaddingLeft: number | undefined\n virtualPaddingRight: number | undefined\n attribs: ProjectTableAttribute[]\n onOpenNew?: (type: 'folder' | 'task') => void\n rowOrderIds: UniqueIdentifier[]\n sortableRows: boolean\n error?: string\n isLoading: boolean\n isGrouping: boolean\n getRowHeight: (row: TableRow) => number\n defaultRowHeight: number\n onResetView?: () => void\n contextMenuItems?: ContextMenuItemConstructors\n}\n\nconst TableBody = ({\n columnVirtualizer,\n table,\n tableContainerRef,\n showHierarchy,\n virtualPaddingLeft,\n virtualPaddingRight,\n attribs,\n onOpenNew,\n rowOrderIds,\n sortableRows,\n error,\n isLoading,\n isGrouping,\n getRowHeight,\n defaultRowHeight,\n onResetView,\n contextMenuItems,\n}: TableBodyProps) => {\n const headerLabels = useMemo(() => {\n const allColumns = table.getAllColumns()\n const headers = allColumns\n .map((col) => {\n const headerId = col.id\n const header = col.columnDef.header\n if (typeof header === 'string' || typeof header === 'number') {\n return { label: header, id: headerId }\n }\n return null\n })\n .filter(Boolean)\n\n return headers as HeaderLabel[]\n }, [table.getAllColumns()])\n\n const cellContextMenuHook = useCellContextMenu({\n attribs,\n onOpenNew,\n headerLabels,\n contextMenuItems,\n })\n\n const handleTableBodyContextMenu = cellContextMenuHook.handleTableBodyContextMenu\n\n const { handlePreFetchTasks } = usePrefetchFolderTasks()\n\n const { rows } = table.getRowModel()\n\n const rowVirtualizer = useVirtualizer<HTMLDivElement, HTMLTableRowElement>({\n count: rows.length,\n estimateSize: (index) => {\n // Calculate dynamic row height based on specific row data\n const row = rows[index]\n return row ? getRowHeight(row.original) : defaultRowHeight\n },\n getScrollElement: () => tableContainerRef.current,\n //measure dynamic row height, except in firefox because it measures table border height incorrectly\n measureElement:\n typeof window !== 'undefined' && navigator.userAgent.indexOf('Firefox') === -1\n ? (element) => element?.getBoundingClientRect().height\n : undefined,\n overscan: 5,\n })\n\n const virtualRows = rowVirtualizer.getVirtualItems()\n\n // Memoize the measureElement callback\n const measureRowElement = useCallback(\n (node: HTMLTableRowElement | null) => {\n if (node) {\n rowVirtualizer.measureElement(node)\n }\n },\n [rowVirtualizer],\n )\n\n useKeyboardNavigation()\n\n // vertical column lines painted behind the rows so they extend into the empty\n // space between the last row and the summary footer\n const visibleLeafColumns = table.getVisibleLeafColumns()\n const columnDividerLefts = useMemo(() => {\n const lefts: string[] = []\n const sizeVars: string[] = []\n for (let i = 0; i < visibleLeafColumns.length - 1; i++) {\n const column = visibleLeafColumns[i]\n // selection column is forced to 20px in CSS while its size var reports defaultColumn.minSize\n sizeVars.push(column.id === ROW_SELECTION_COLUMN_ID ? '20' : `var(--col-${column.id}-size)`)\n lefts.push(`calc((${sizeVars.join(' + ')}) * 1px)`)\n }\n return lefts\n }, [visibleLeafColumns])\n\n const tbodyContent = (\n <tbody\n style={{\n minHeight: `${rowVirtualizer.getTotalSize()}px`,\n position: 'relative',\n display: 'grid',\n }}\n onContextMenu={handleTableBodyContextMenu}\n onMouseOver={(e) => {\n handlePreFetchTasks(e)\n }}\n >\n <Styled.ColumnDividers aria-hidden>\n {columnDividerLefts.map((left, i) => (\n <div key={i} style={{ left }} />\n ))}\n </Styled.ColumnDividers>\n {virtualRows.map((virtualRow, i) => {\n const row = rows[virtualRow.index] as Row<TableRow>\n // Add a check for row existence to prevent potential errors if data is out of sync\n if (!row) {\n console.warn('Virtualized row data not found for index:', virtualRow.index)\n return null\n }\n return (\n <TableBodyRow\n key={row.id + i.toString()} // dnd-kit needs this key to be stable and match the id in useSortable\n row={row}\n showHierarchy={showHierarchy}\n visibleCells={row.getVisibleCells()}\n virtualColumns={columnVirtualizer.getVirtualItems()}\n paddingLeft={virtualPaddingLeft}\n paddingRight={virtualPaddingRight}\n rowRef={measureRowElement}\n dataIndex={virtualRow.index}\n offsetTop={virtualRow.start}\n sortableRows={sortableRows}\n isGrouping={isGrouping}\n rowHeight={getRowHeight(row.original)}\n />\n )\n })}\n </tbody>\n )\n\n if (error) {\n return (\n tableContainerRef.current &&\n createPortal(\n <Styled.AnimatedEmptyPlaceholder>\n <EmptyPlaceholder message=\"No items found\" error={error}>\n {onResetView && (\n <Button\n variant=\"filled\"\n label=\"Reset working view\"\n icon=\"restart_alt\"\n onClick={onResetView}\n />\n )}\n </EmptyPlaceholder>\n </Styled.AnimatedEmptyPlaceholder>,\n tableContainerRef.current,\n )\n )\n }\n\n if (!rows.length && !isLoading) {\n return (\n tableContainerRef.current &&\n createPortal(\n <Styled.AnimatedEmptyPlaceholder>\n <EmptyPlaceholder message=\"No items found\">\n {onResetView && (\n <Button\n variant=\"filled\"\n label=\"Reset working view\"\n icon=\"restart_alt\"\n onClick={onResetView}\n />\n )}\n </EmptyPlaceholder>\n </Styled.AnimatedEmptyPlaceholder>,\n tableContainerRef.current,\n )\n )\n }\n\n if (sortableRows) {\n return (\n <SortableContext items={rowOrderIds} strategy={verticalListSortingStrategy}>\n {tbodyContent}\n </SortableContext>\n )\n } else {\n return tbodyContent\n }\n}\n\ninterface TableBodyRowProps {\n row: Row<TableRow>\n showHierarchy: boolean\n visibleCells: Cell<TableRow, unknown>[]\n virtualColumns: VirtualItem[]\n paddingLeft: number | undefined\n paddingRight: number | undefined\n rowRef: (node: HTMLTableRowElement | null) => void\n dataIndex: number\n offsetTop: number\n sortableRows: boolean\n isGrouping: boolean\n rowHeight: number\n}\n\nconst TableBodyRow = ({\n row,\n showHierarchy,\n visibleCells,\n virtualColumns,\n paddingLeft,\n paddingRight,\n rowRef,\n dataIndex,\n offsetTop,\n sortableRows,\n isGrouping = false,\n rowHeight,\n}: TableBodyRowProps) => {\n const sortable = sortableRows ? useSortable({ id: row.id }) : null\n\n const combinedRef = useCallback(\n (node: HTMLTableRowElement | null) => {\n if (sortable) {\n sortable.setNodeRef(node)\n }\n // rowRef for virtualizer measurement\n // only measure if not actively being transformed by dnd-kit\n if (!(sortable && sortable.isDragging)) {\n rowRef(node)\n }\n },\n [sortable, rowRef],\n )\n\n // Attempt to combine dnd-kit transform with virtualizer's offsetTop\n const style: CSSProperties = {\n position: 'absolute', // Use absolute positioning for virtualized items\n top: offsetTop, // Position based on virtualizer's calculation (virtualRow.start)\n left: 0, // Span full width of the relative parent (tbody)\n right: 0, // Span full width\n height: rowHeight, // Use dynamic row height\n zIndex: sortable && sortable.isDragging ? 0 : 1, // Ensure dragged item is above others\n display: 'flex', // Styled.TR is display:flex\n transform:\n sortable && sortable.transform ? CSS.Transform.toString(sortable.transform) : undefined, // Apply dnd-kit's transform for drag effect\n transition: sortable && sortable.transition ? sortable.transition : undefined,\n visibility: sortable && sortable.isDragging ? 'hidden' : 'visible', // Hide the row being dragged\n }\n\n return (\n <Styled.TR\n ref={combinedRef}\n data-index={dataIndex} //needed for dynamic row height measurement\n style={style}\n className={clsx({ 'group-row': row.original.group })}\n >\n {paddingLeft ? (\n //fake empty column to the left for virtualization scroll padding\n <td style={{ display: 'flex', width: paddingLeft }} />\n ) : null}\n {virtualColumns.map((vc, i) => {\n const cell = visibleCells[vc.index]\n if (!cell) return null // Should not happen in normal circumstances\n\n const cellId = getCellId(row.id, cell.column.id)\n\n if (cell.column.id === DRAG_HANDLE_COLUMN_ID) {\n return (\n <Styled.TD\n key={cell.id + i.toString()}\n style={{\n ...getCommonPinningStyles(cell.column),\n width: getColumnWidth(cell.column.id),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: rowHeight,\n pointerEvents: 'all',\n cursor: 'grab',\n }}\n className={clsx(cell.column.id, {\n 'last-pinned-left':\n cell.column.getIsPinned() === 'left' && cell.column.getIsLastColumn('left'),\n })}\n onMouseDown={(e) => e.stopPropagation()} // Prevent selection interference\n onMouseOver={(e) => e.stopPropagation()}\n onDoubleClick={(e) => e.stopPropagation()}\n onContextMenu={(e) => {\n e.preventDefault()\n e.stopPropagation()\n }}\n >\n <RowDragHandleCellContent\n attributes={sortable?.attributes}\n listeners={sortable?.listeners}\n />\n </Styled.TD>\n )\n }\n return (\n <TD\n cell={cell}\n cellId={cellId}\n rowId={row.id}\n key={cell.id + i.toString()}\n showHierarchy={showHierarchy}\n sortableRows={sortableRows}\n rowHeight={rowHeight}\n />\n )\n })}\n\n {paddingRight ? (\n //fake empty column to the right for virtualization scroll padding\n <td style={{ display: 'flex', width: paddingRight }} />\n ) : null}\n </Styled.TR>\n )\n}\n\ninterface TableCellProps {\n cell: Cell<TableRow, unknown>\n cellId: string\n rowId: string\n className?: string\n showHierarchy: boolean\n sortableRows?: boolean\n rowHeight?: number\n}\n\nconst TD = ({\n cell,\n rowId,\n cellId,\n className,\n showHierarchy,\n sortableRows,\n rowHeight,\n ...props\n}: TableCellProps) => {\n const { getEntityById, onOpenPlayer } = useProjectTableContext()\n\n const {\n isCellSelected,\n isCellFocused,\n startSelection,\n extendSelection,\n endSelection,\n selectCell,\n focusCell,\n getCellBorderClasses,\n clearSelection,\n selectedCells,\n setSelectedCells,\n setAnchorCell,\n setFocusedCellId,\n } = useSelectionCellsContext()\n\n const { isRowSelected } = useSelectedRowsContext()\n\n const { isEditing, setEditingCellId, editingCellId } = useCellEditing()\n\n const borderClasses = getCellBorderClasses(cellId)\n\n const isPinned = cell.column.getIsPinned()\n const isLastLeftPinnedColumn = isPinned === 'left' && cell.column.getIsLastColumn('left')\n const isRowSelectionColumn = cell.column.id === ROW_SELECTION_COLUMN_ID\n const isGroup = cell.row.original.entityType === 'group'\n const isMultipleSelected = selectedCells.size > 1\n\n return (\n <Styled.TD\n {...props}\n tabIndex={0}\n $isLastPinned={isLastLeftPinnedColumn} // is this column the last pinned column? Custom styling for borders.\n className={clsx(\n cell.column.id,\n {\n selected: isCellSelected(cellId),\n focused: isCellFocused(cellId),\n editing: isEditing(cellId),\n 'last-pinned-left': isLastLeftPinnedColumn,\n 'selected-row': isRowSelected(rowId),\n expandable:\n !!cell.row.originalSubRows && isEntityExpandable(cell.row.original.entityType),\n 'multiple-selected': isMultipleSelected,\n },\n className,\n ...borderClasses,\n )}\n style={{\n ...getCommonPinningStyles(cell.column),\n width: getColumnWidth(cell.column.id),\n height: rowHeight,\n }}\n onMouseDown={(e) => {\n // Only process left clicks (button 0), ignore right clicks\n if (e.button !== 0) return\n\n const target = e.target as HTMLElement\n\n // check we are not clicking on expander\n if (target.closest('.expander')) return\n\n // check we are not clicking in a dropdown\n if (target.closest('.options')) return\n\n // Handle double-click via e.detail (browser's native click count).\n // We handle it here in mousedown instead of relying on the dblclick event,\n // because the 1st mousedown triggers React state updates that can replace\n // the DOM node, preventing the native dblclick event from firing.\n if (e.detail === 2) {\n // comments cells are read-only but their double-click opens the details panel, so don't block them here\n const isReadOnly = isTargetReadOnly(e) && cell.column.id !== 'comments'\n if (isReadOnly || isEntityRestricted(cell.row.original.entityType) || isGroup) {\n e.preventDefault()\n return\n }\n\n // name column: select row to open details panel\n // comments column: same — comments are read and written in the details panel feed\n if (['name', 'comments'].includes(cell.column.id) && !target.closest('.expander')) {\n // all ProjectTreeTable pages render their details panel under the 'overview' scope\n if (cell.column.id === 'comments') setDetailsPanelTabForScope('overview', 'feed')\n const rowSelectionCellId = getCellId(cell.row.id, ROW_SELECTION_COLUMN_ID)\n const additive = e.metaKey || e.ctrlKey\n const position = parseCellId(rowSelectionCellId)\n\n setSelectedCells((prev) => {\n const newSelection = additive ? new Set(prev) : new Set<CellId>()\n newSelection.add(rowSelectionCellId)\n newSelection.add(cellId)\n return newSelection\n })\n if (position) {\n setAnchorCell(position)\n setFocusedCellId(rowSelectionCellId)\n }\n }\n // thumbnail: open viewer\n else if (cell.column.id === 'thumbnail') {\n if (onOpenPlayer) {\n const entity = getEntityById(cell.row.original.entityId || cell.row.id)\n if (entity) {\n const targetIds = getEntityViewierIds(entity)\n onOpenPlayer(targetIds, { quickView: true })\n }\n }\n }\n // other cells: start editing\n else {\n setEditingCellId(cellId)\n }\n\n e.preventDefault()\n return\n }\n\n // only name column can be selected for group rows\n if (isGroup && cell.column.id !== 'name') return clearSelection()\n\n // check if this is a restricted entity - prevent editing\n const isRestricted = isEntityRestricted(cell.row.original.entityType)\n\n // if clicking on an edit trigger, start editing\n if (target.closest('.' + EDIT_TRIGGER_CLASS) && !isRestricted) {\n // Select the cell first if not already selected\n if (!isCellSelected(cellId)) {\n selectCell(cellId, false, false)\n focusCell(cellId)\n }\n setEditingCellId(cellId)\n return\n }\n\n // If there's an active edit on a different cell, blur it first to save changes\n if (editingCellId && editingCellId !== cellId) {\n // Find the currently editing input and blur it\n const editingInput = document.querySelector(\n `#${editingCellId} input, #${editingCellId} [role=\"textbox\"]`,\n ) as HTMLElement\n if (editingInput) {\n editingInput.blur()\n // Wait a tick for the blur event to process and save\n setTimeout(() => {\n proceedWithSelection()\n }, 0)\n return\n }\n }\n\n proceedWithSelection()\n\n function proceedWithSelection() {\n const additive = e.metaKey || e.ctrlKey || isRowSelectionColumn\n if (e.shiftKey) {\n // Shift+click extends selection from anchor cell\n selectCell(cellId, additive, true) // true for range selection\n } else {\n startSelection(cellId, additive)\n }\n\n // Prevent default browser behavior to ensure focus stays on the cell\n e.preventDefault()\n }\n }}\n onMouseOver={(e) => {\n if (e.buttons === 1) {\n // check not selecting am edit trigger\n const target = e.target as HTMLElement\n if (target.closest('.' + EDIT_TRIGGER_CLASS)) return\n\n // Left button is pressed during mouse move - drag selection\n // Note: extendSelection is always called to allow drag to continue through cells\n // Restricted cells will be filtered out later\n extendSelection(cellId, isRowSelectionColumn)\n }\n }}\n onMouseUp={() => {\n endSelection(cellId)\n }}\n onDoubleClick={(e) => {\n // Double-click is primarily handled in onMouseDown via e.detail === 2.\n // Prevent default to avoid text selection on double-click.\n e.preventDefault()\n }}\n onContextMenu={(e) => {\n e.preventDefault()\n // if the cell is not selected, select it and deselect all others\n if (!isCellSelected(cellId)) {\n selectCell(cellId, false, false)\n }\n }}\n onKeyDown={() => {\n // keyboard events are handled in useKeyboardNavigation hook\n }}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </Styled.TD>\n )\n}\n"],"names":["SummaryCellContentFallback","matchesColumnId","id","subscribers","sub","pattern","ProjectTreeTable","scope","sliceId","onScroll","onScrollBottom","onOpenNew","readOnly","excludedColumns","excludedSorting","extraColumns","includeLinks","isLoadingProp","isExpandable","enableSorting","clientSorting","sortableRows","onRowReorder","dndActiveId","columnsConfig","showColumnSummaries","fieldStats","groupFieldStats","fieldStatsLoading","mainCountLabels","onScrollBottomGroupBy","propsContextMenuItems","onColumnVisibleChange","onColumnVisibleChangeSubscribed","pt","props","columnVisibility","columnPinning","columnOrder","columnSizing","setAllColumns","sorting","sortingOnChange","columnPinningOnChange","columnSizingOnChange","defaultColumnVisibility","columnVisibilityOnChange","columnOrderOnChange","groupBy","columnSummaries","updateColumnSummary","columnSummaryScopes","updateColumnSummaryScope","columnSummaryFormats","updateColumnSummaryFormat","useColumnSettingsContext","productTypes","projectName","projectInfo","useProjectContext","tableData","attribFields","entitiesMap","users","isLoadingData","error","isInitialized","expanded","updateExpanded","toggleExpandAll","showHierarchy","isFlatFolderView","fetchNextPage","scopes","getEntityById","onResetView","overrideGroupBy","loadingLinksEntityIds","useProjectTableContext","isGrouping","writableFields","useProjectDataContext","isLoading","statuses","folderTypes","taskTypes","tags","linkTypes","options","useMemo","getTableFieldOptions","tableContainerRef","useRef","tableRowsCountRef","registerGrid","useSelectionCellsContext","loadingAttrib","loadingRows","tableRowsCount","generateDummyAttributes","generateLoadingRows","showLoadingRows","readOnlyColumns","readOnlyAttribs","getReadOnlyLists","selectedCells","updateEntities","useCellEditing","handleCellUpdate","useCallback","entity","config","selection","entitiesToUpdate","field","value","isAttrib","cellId","colId","rowId","parseCellId","ROW_SELECTION_COLUMN_ID","toast","columnAttribs","getNameLabelHeader","s","upperFirst","columns","baseColumns","buildTreeTableColumns","DRAG_HANDLE_COLUMN_ID","useEffect","ids","c","resolvedColumnVisibility","merged","col","explicitVisible","checkColumnVisibility","ensureAtLeastOneVisibleColumn","table","useReactTable","row","getCoreRowModel","getFilteredRowModel","getExpandedRowModel","getSortedRowModel","filterFns","leftPins","contextLeftPins","rows","rowIds","colIdsSortedByPinning","a","b","colA","colB","visibleColumns","columnVirtualizer","virtualPaddingLeft","virtualPaddingRight","useColumnVirtualization","prevVisibleRef","virtualItems","visibleColumnIds","item","changes","hasChanged","isVisible","columnSizeVars","useCustomColumnWidthVars","powerLicense","usePowerpack","RemoteSummaryCellContent","isFooterLoaded","isFooterModuleLoading","useLoadModule","summariesEnabled","summariesLoading","getRowHeight","defaultRowHeight","useDynamicRowHeight","attribByField","acc","attrib","rowOrderIds","columnOrderIds","draggedRowData","r","combinedScrollHandler","containerRefElement","scrollHeight","scrollTop","clientHeight","groupValue","isEntityPickerOpen","handleMoveSubmit","closeMoveDialog","movingEntities","handleMoveToRoot","getDisabledFolderIds","getDisabledMessage","useMoveEntities","handleMoveSubmitWithExpand","folderIdToExpand","prevExpanded","tableUiContent","jsxs","ClipboardProvider","jsx","Styled.TableWrapper","Styled.TableContainer","clsx","TableHead","TableBody","TableFooterRow","columnId","calc","format","EntityPickerDialog","dragOverlayPortal","createPortal","DragOverlay","overlayRowInstance","tableWidth","Styled.TR","vc","cell","cellStyleBase","getCommonPinningStyles","getColumnWidth","Styled.TD","Icon","TD","getCellId","Fragment","ColumnDragOverlay","active","useDndContext","activeColumnId","draggedColumnHeader","h","Styled.HeaderCell","Styled.TableCellContent","flexRender","Styled.TableHeader","headerGroup","TableHeadRow","virtualColumns","isColumnDrag","isDraggedColumnPinned","Styled.ColumnHeader","SortableContext","horizontalListSortingStrategy","virtualColumn","header","isDraggable","TableHeadCell","canFilter","canHide","canSort","canPin","canResize","isReadOnly","column","menuId","menuOpen","useMenuContext","isOpen","isThisColumnPinned","attributes","listeners","setNodeRef","transform","transition","isDragging","useSortable","isDraggingInSameSection","getDragStyle","CSS","pinnedOverride","preventDragFromActions","e","Styled.HeaderButtons","ColumnHeaderMenu","HeaderActionButton","Styled.ResizedHandler","attribs","contextMenuItems","headerLabels","headerId","handleTableBodyContextMenu","useCellContextMenu","handlePreFetchTasks","usePrefetchFolderTasks","rowVirtualizer","useVirtualizer","index","element","virtualRows","measureRowElement","node","useKeyboardNavigation","visibleLeafColumns","columnDividerLefts","lefts","sizeVars","i","tbodyContent","Styled.ColumnDividers","left","virtualRow","TableBodyRow","Styled.AnimatedEmptyPlaceholder","EmptyPlaceholder","Button","verticalListSortingStrategy","visibleCells","paddingLeft","paddingRight","rowRef","dataIndex","offsetTop","rowHeight","sortable","combinedRef","style","RowDragHandleCellContent","className","onOpenPlayer","isCellSelected","isCellFocused","startSelection","extendSelection","endSelection","selectCell","focusCell","getCellBorderClasses","clearSelection","setSelectedCells","setAnchorCell","setFocusedCellId","isRowSelected","useSelectedRowsContext","isEditing","setEditingCellId","editingCellId","borderClasses","isLastLeftPinnedColumn","isRowSelectionColumn","isGroup","isMultipleSelected","isEntityExpandable","target","isTargetReadOnly","isEntityRestricted","setDetailsPanelTabForScope","rowSelectionCellId","additive","position","prev","newSelection","targetIds","getEntityViewierIds","isRestricted","EDIT_TRIGGER_CLASS","editingInput","proceedWithSelection"],"mappings":"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"}
|