@ynput/ayon-frontend-shared 0.4.1 → 0.4.2
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 +37 -201
- package/dist/DetailsPanel.es.js.map +1 -1
- package/dist/ProjectTreeTable.cjs.js +1 -1
- package/dist/ProjectTreeTable.es.js +248 -512
- package/dist/ProjectTreeTable.es.js.map +1 -1
- package/dist/Slicer.cjs.js +1 -1
- package/dist/Slicer.es.js +31 -233
- package/dist/Slicer.es.js.map +1 -1
- package/dist/components.cjs.js +1 -1
- package/dist/components.es.js +83 -82
- package/dist/components.es.js.map +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.es.js +32 -130
- package/dist/index.es.js.map +1 -1
- package/dist/shared/src/api/generated/graphql.cjs.js +8 -7
- package/dist/shared/src/api/generated/graphql.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/graphql.es.js +18 -17
- package/dist/shared/src/api/generated/graphql.es.js.map +1 -1
- package/dist/shared/src/api/generated/graphqlLinks.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/graphqlLinks.es.js.map +1 -1
- package/dist/shared/src/api/queries/actions/getActions.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/actions/getActions.es.js.map +1 -1
- package/dist/shared/src/api/queries/activities/getActivities.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/activities/getActivities.es.js.map +1 -1
- package/dist/shared/src/api/queries/activities/getCategories.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/activities/getCategories.es.js.map +1 -1
- package/dist/shared/src/api/queries/activities/patchTableLatestComments.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/activities/patchTableLatestComments.es.js.map +1 -1
- package/dist/shared/src/api/queries/activities/util/activitiesHelpers.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/activities/util/activitiesHelpers.es.js.map +1 -1
- package/dist/shared/src/api/queries/activities/util/activityRealtimeHandler.cjs.js +1 -1
- package/dist/shared/src/api/queries/activities/util/activityRealtimeHandler.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/activities/util/activityRealtimeHandler.es.js +55 -151
- package/dist/shared/src/api/queries/activities/util/activityRealtimeHandler.es.js.map +1 -1
- package/dist/shared/src/api/queries/addons/updateAddons.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/addons/updateAddons.es.js.map +1 -1
- package/dist/shared/src/api/queries/attributes/getAttributes.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/attributes/getAttributes.es.js.map +1 -1
- package/dist/shared/src/api/queries/columnStats/columnStats.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/columnStats/columnStats.es.js.map +1 -1
- package/dist/shared/src/api/queries/columnStats/metricTargets.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/columnStats/metricTargets.es.js.map +1 -1
- package/dist/shared/src/api/queries/entities/getEntity.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entities/getEntity.es.js.map +1 -1
- package/dist/shared/src/api/queries/entities/getEntityPanel.cjs.js +1 -1
- package/dist/shared/src/api/queries/entities/getEntityPanel.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entities/getEntityPanel.es.js +58 -113
- package/dist/shared/src/api/queries/entities/getEntityPanel.es.js.map +1 -1
- package/dist/shared/src/api/queries/entities/patchDetailsPanel.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entities/patchDetailsPanel.es.js.map +1 -1
- package/dist/shared/src/api/queries/entityLists/getLists.cjs.js +1 -1
- package/dist/shared/src/api/queries/entityLists/getLists.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entityLists/getLists.es.js +67 -118
- package/dist/shared/src/api/queries/entityLists/getLists.es.js.map +1 -1
- package/dist/shared/src/api/queries/entityLists/listFolders.cjs.js +1 -1
- package/dist/shared/src/api/queries/entityLists/listFolders.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entityLists/listFolders.es.js +40 -95
- package/dist/shared/src/api/queries/entityLists/listFolders.es.js.map +1 -1
- package/dist/shared/src/api/queries/entityLists/updateLists.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entityLists/updateLists.es.js.map +1 -1
- package/dist/shared/src/api/queries/folders/getFolderDeleteInfo.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/folders/getFolderDeleteInfo.es.js.map +1 -1
- package/dist/shared/src/api/queries/folders/getFolders.cjs.js +1 -1
- package/dist/shared/src/api/queries/folders/getFolders.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/folders/getFolders.es.js +68 -119
- package/dist/shared/src/api/queries/folders/getFolders.es.js.map +1 -1
- package/dist/shared/src/api/queries/links/getEntityLinks.cjs.js +1 -1
- package/dist/shared/src/api/queries/links/getEntityLinks.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/links/getEntityLinks.es.js +73 -128
- package/dist/shared/src/api/queries/links/getEntityLinks.es.js.map +1 -1
- package/dist/shared/src/api/queries/links/updateLinks.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/links/updateLinks.es.js.map +1 -1
- package/dist/shared/src/api/queries/overview/getOverview.cjs.js +1 -1
- package/dist/shared/src/api/queries/overview/getOverview.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/overview/getOverview.es.js +229 -282
- package/dist/shared/src/api/queries/overview/getOverview.es.js.map +1 -1
- package/dist/shared/src/api/queries/overview/updateOverview.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/overview/updateOverview.es.js.map +1 -1
- package/dist/shared/src/api/queries/products/getFolderProducts.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/products/getFolderProducts.es.js.map +1 -1
- package/dist/shared/src/api/queries/projectFolders/projectFolders.cjs.js +1 -1
- package/dist/shared/src/api/queries/projectFolders/projectFolders.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/projectFolders/projectFolders.es.js +80 -134
- package/dist/shared/src/api/queries/projectFolders/projectFolders.es.js.map +1 -1
- package/dist/shared/src/api/queries/review/getReview.cjs.js +1 -1
- package/dist/shared/src/api/queries/review/getReview.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/review/getReview.es.js +95 -152
- package/dist/shared/src/api/queries/review/getReview.es.js.map +1 -1
- package/dist/shared/src/api/queries/share/share.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/share/share.es.js.map +1 -1
- package/dist/shared/src/api/queries/system/getSystem.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/system/getSystem.es.js.map +1 -1
- package/dist/shared/src/api/queries/userDashboard/getUserDashboard.cjs.js +1 -1
- package/dist/shared/src/api/queries/userDashboard/getUserDashboard.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/userDashboard/getUserDashboard.es.js +88 -141
- package/dist/shared/src/api/queries/userDashboard/getUserDashboard.es.js.map +1 -1
- package/dist/shared/src/api/queries/users/getUsers.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/users/getUsers.es.js.map +1 -1
- package/dist/shared/src/api/queries/versions/getVersionsProducts.cjs.js +1 -1
- package/dist/shared/src/api/queries/versions/getVersionsProducts.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/versions/getVersionsProducts.es.js +30 -80
- package/dist/shared/src/api/queries/versions/getVersionsProducts.es.js.map +1 -1
- package/dist/shared/src/api/queries/versions/getVersionsProductsUtils.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/versions/getVersionsProductsUtils.es.js.map +1 -1
- package/dist/shared/src/api/queries/versions/updateVersions.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/versions/updateVersions.es.js.map +1 -1
- package/dist/shared/src/api/queries/views/getViews.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/views/getViews.es.js.map +1 -1
- package/dist/shared/src/api/queries/views/updateViews.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/views/updateViews.es.js.map +1 -1
- package/dist/shared/src/api/queries/watchers/getWatchers.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/watchers/getWatchers.es.js.map +1 -1
- package/dist/shared/src/components/AccessSearchInput/AccessSearchInput.cjs.js.map +1 -1
- package/dist/shared/src/components/AccessSearchInput/AccessSearchInput.es.js.map +1 -1
- package/dist/shared/src/components/AttributeEditor/AttributeEditor.cjs.js +1 -1
- package/dist/shared/src/components/AttributeEditor/AttributeEditor.cjs.js.map +1 -1
- package/dist/shared/src/components/AttributeEditor/AttributeEditor.es.js +28 -30
- package/dist/shared/src/components/AttributeEditor/AttributeEditor.es.js.map +1 -1
- package/dist/shared/src/components/AttributeEditor/attributeTypeMap.cjs.js +1 -1
- package/dist/shared/src/components/AttributeEditor/attributeTypeMap.cjs.js.map +1 -1
- package/dist/shared/src/components/AttributeEditor/attributeTypeMap.es.js +29 -125
- package/dist/shared/src/components/AttributeEditor/attributeTypeMap.es.js.map +1 -1
- package/dist/shared/src/components/ColumnHeaderMenuUI.cjs.js +3 -3
- package/dist/shared/src/components/ColumnHeaderMenuUI.cjs.js.map +1 -1
- package/dist/shared/src/components/ColumnHeaderMenuUI.es.js +16 -310
- package/dist/shared/src/components/ColumnHeaderMenuUI.es.js.map +1 -1
- package/dist/shared/src/components/DeleteEntitiesConfirm/DeleteConfirmContent.cjs.js +5 -5
- package/dist/shared/src/components/DeleteEntitiesConfirm/DeleteConfirmContent.cjs.js.map +1 -1
- package/dist/shared/src/components/DeleteEntitiesConfirm/DeleteConfirmContent.es.js +49 -145
- package/dist/shared/src/components/DeleteEntitiesConfirm/DeleteConfirmContent.es.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js +5 -5
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.es.js +45 -141
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.es.js.map +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 +26 -182
- package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.cjs.js +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.es.js +9 -195
- package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.es.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.cjs.js +2 -2
- package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.es.js +5 -200
- package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.es.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/DetailsSection.cjs.js +4 -4
- package/dist/shared/src/components/DetailsPanelDetails/DetailsSection.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/DetailsSection.es.js +18 -114
- package/dist/shared/src/components/DetailsPanelDetails/DetailsSection.es.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/FieldLabel.cjs.js +2 -2
- package/dist/shared/src/components/DetailsPanelDetails/FieldLabel.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/FieldLabel.es.js +13 -109
- package/dist/shared/src/components/DetailsPanelDetails/FieldLabel.es.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.cjs.js +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.es.js +11 -316
- package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.es.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityFormData.cjs.js +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityFormData.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityFormData.es.js +23 -119
- package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityFormData.es.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/hooks/useMentionSystem.cjs.js +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/hooks/useMentionSystem.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/hooks/useMentionSystem.es.js +0 -111
- package/dist/shared/src/components/DetailsPanelDetails/hooks/useMentionSystem.es.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/hooks/useQuillFormats.cjs.js +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/hooks/useQuillFormats.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/hooks/useQuillFormats.es.js +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/hooks/useQuillFormats.es.js.map +1 -1
- package/dist/shared/src/components/EntityIcon/EntityIcon.cjs.js +1 -1
- package/dist/shared/src/components/EntityIcon/EntityIcon.cjs.js.map +1 -1
- package/dist/shared/src/components/EntityIcon/EntityIcon.es.js +12 -314
- package/dist/shared/src/components/EntityIcon/EntityIcon.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 +86 -273
- 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 +34 -335
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.es.js.map +1 -1
- package/dist/shared/src/components/EntityPath/EntityPath.cjs.js.map +1 -1
- package/dist/shared/src/components/EntityPath/EntityPath.es.js.map +1 -1
- package/dist/shared/src/components/EntityPath/SegmentProvider.cjs.js +1 -1
- package/dist/shared/src/components/EntityPath/SegmentProvider.cjs.js.map +1 -1
- package/dist/shared/src/components/EntityPath/SegmentProvider.es.js +15 -310
- package/dist/shared/src/components/EntityPath/SegmentProvider.es.js.map +1 -1
- package/dist/shared/src/components/EnumEditor/DraggableEnumEditorItem.cjs.js.map +1 -1
- package/dist/shared/src/components/EnumEditor/DraggableEnumEditorItem.es.js.map +1 -1
- package/dist/shared/src/components/EnumEditor/EnumEditorItem.cjs.js.map +1 -1
- package/dist/shared/src/components/EnumEditor/EnumEditorItem.es.js.map +1 -1
- package/dist/shared/src/components/Feedback/FeedbackContext.cjs.js +1 -1
- package/dist/shared/src/components/Feedback/FeedbackContext.cjs.js.map +1 -1
- package/dist/shared/src/components/Feedback/FeedbackContext.es.js +89 -293
- package/dist/shared/src/components/Feedback/FeedbackContext.es.js.map +1 -1
- package/dist/shared/src/components/FilterErrorActions/FilterErrorActions.cjs.js +2 -2
- package/dist/shared/src/components/FilterErrorActions/FilterErrorActions.cjs.js.map +1 -1
- package/dist/shared/src/components/FilterErrorActions/FilterErrorActions.es.js +10 -106
- package/dist/shared/src/components/FilterErrorActions/FilterErrorActions.es.js.map +1 -1
- package/dist/shared/src/components/InfoMessage/InfoMessage.cjs.js +1 -1
- package/dist/shared/src/components/InfoMessage/InfoMessage.cjs.js.map +1 -1
- package/dist/shared/src/components/InfoMessage/InfoMessage.es.js +6 -5
- package/dist/shared/src/components/LinksManager/LinkManagerItem.cjs.js.map +1 -1
- package/dist/shared/src/components/LinksManager/LinkManagerItem.es.js.map +1 -1
- package/dist/shared/src/components/LinksManager/LinksManager.cjs.js +1 -1
- package/dist/shared/src/components/LinksManager/LinksManager.cjs.js.map +1 -1
- package/dist/shared/src/components/LinksManager/LinksManager.es.js +51 -346
- package/dist/shared/src/components/LinksManager/LinksManager.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 +7 -212
- package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js.map +1 -1
- package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.cjs.js +1 -1
- package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.cjs.js.map +1 -1
- package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.es.js +2 -205
- package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.es.js.map +1 -1
- package/dist/shared/src/components/ListMetaData/ListMetaData.cjs.js +1 -1
- package/dist/shared/src/components/ListMetaData/ListMetaData.cjs.js.map +1 -1
- package/dist/shared/src/components/ListMetaData/ListMetaData.es.js +4 -185
- package/dist/shared/src/components/ListMetaData/ListMetaData.es.js.map +1 -1
- package/dist/shared/src/components/Menu/Menu.cjs.js +1 -1
- package/dist/shared/src/components/Menu/Menu.cjs.js.map +1 -1
- package/dist/shared/src/components/Menu/Menu.es.js +48 -343
- package/dist/shared/src/components/Menu/Menu.es.js.map +1 -1
- package/dist/shared/src/components/Menu/MenuItem.cjs.js +1 -1
- package/dist/shared/src/components/Menu/MenuItem.cjs.js.map +1 -1
- package/dist/shared/src/components/Menu/MenuItem.es.js +20 -316
- package/dist/shared/src/components/Menu/MenuItem.es.js.map +1 -1
- package/dist/shared/src/components/Menu/MenuList.cjs.js +1 -1
- package/dist/shared/src/components/Menu/MenuList.cjs.js.map +1 -1
- package/dist/shared/src/components/Menu/MenuList.es.js +74 -373
- package/dist/shared/src/components/Menu/MenuList.es.js.map +1 -1
- package/dist/shared/src/components/Powerpack/PowerpackButton.cjs.js +2 -2
- package/dist/shared/src/components/Powerpack/PowerpackButton.cjs.js.map +1 -1
- package/dist/shared/src/components/Powerpack/PowerpackButton.es.js +16 -315
- package/dist/shared/src/components/Powerpack/PowerpackButton.es.js.map +1 -1
- package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js +1 -1
- package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js +48 -346
- package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.cjs.js +2 -2
- package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.cjs.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.es.js +134 -304
- package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.es.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +2 -2
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +74 -367
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js +1 -1
- package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js +3 -299
- package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.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 +34 -334
- 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 +30 -331
- package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js.map +1 -1
- package/dist/shared/src/components/RenameForm/RenameForm.cjs.js +5 -5
- package/dist/shared/src/components/RenameForm/RenameForm.cjs.js.map +1 -1
- package/dist/shared/src/components/RenameForm/RenameForm.es.js +77 -372
- 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 +114 -309
- 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 +66 -365
- 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 +14 -316
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.cjs.js +1 -1
- package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.es.js +70 -72
- package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.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 +24 -326
- package/dist/shared/src/components/ReviewablesSelector/Card.es.js.map +1 -1
- package/dist/shared/src/components/SearchFilter/filterScopeRegistry.cjs.js.map +1 -1
- package/dist/shared/src/components/SearchFilter/filterScopeRegistry.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 +335 -534
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js.map +1 -1
- package/dist/shared/src/components/SettingsPanel/SettingsPanel.cjs.js +7 -7
- package/dist/shared/src/components/SettingsPanel/SettingsPanel.cjs.js.map +1 -1
- package/dist/shared/src/components/SettingsPanel/SettingsPanel.es.js +29 -329
- package/dist/shared/src/components/SettingsPanel/SettingsPanel.es.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/FormFile.cjs.js +4 -4
- package/dist/shared/src/components/SimpleFormDialog/FormFile.cjs.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/FormFile.es.js +53 -355
- package/dist/shared/src/components/SimpleFormDialog/FormFile.es.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js +2 -2
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js +95 -394
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
- package/dist/shared/src/components/SyncButton/SyncButton.cjs.js +2 -2
- package/dist/shared/src/components/SyncButton/SyncButton.cjs.js.map +1 -1
- package/dist/shared/src/components/SyncButton/SyncButton.es.js +52 -165
- package/dist/shared/src/components/SyncButton/SyncButton.es.js.map +1 -1
- package/dist/shared/src/components/Thumbnail/StackedThumbnails.cjs.js +3 -3
- package/dist/shared/src/components/Thumbnail/StackedThumbnails.cjs.js.map +1 -1
- package/dist/shared/src/components/Thumbnail/StackedThumbnails.es.js +35 -334
- package/dist/shared/src/components/Thumbnail/StackedThumbnails.es.js.map +1 -1
- package/dist/shared/src/components/Thumbnail/Thumbnail.cjs.js +1 -1
- package/dist/shared/src/components/Thumbnail/Thumbnail.cjs.js.map +1 -1
- package/dist/shared/src/components/Thumbnail/Thumbnail.es.js +26 -122
- package/dist/shared/src/components/Thumbnail/Thumbnail.es.js.map +1 -1
- package/dist/shared/src/components/ThumbnailSimple/ThumbnailSimple.cjs.js +3 -3
- package/dist/shared/src/components/ThumbnailSimple/ThumbnailSimple.cjs.js.map +1 -1
- package/dist/shared/src/components/ThumbnailSimple/ThumbnailSimple.es.js +22 -118
- package/dist/shared/src/components/ThumbnailSimple/ThumbnailSimple.es.js.map +1 -1
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js +13 -13
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js.map +1 -1
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js +99 -300
- 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 +61 -262
- package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js.map +1 -1
- package/dist/shared/src/config/plannerFeatures.cjs.js.map +1 -1
- package/dist/shared/src/config/plannerFeatures.es.js.map +1 -1
- package/dist/shared/src/config/powerpackFeatures.cjs.js.map +1 -1
- package/dist/shared/src/config/powerpackFeatures.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 +6 -210
- package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionIcon.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionIcon.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/Actions.cjs.js +1 -1
- package/dist/shared/src/containers/Actions/Actions.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/Actions.es.js +51 -250
- package/dist/shared/src/containers/Actions/Actions.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionsDropdown/ActionsDropdown.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionsDropdown/ActionsDropdown.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 +20 -323
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
- package/dist/shared/src/containers/ContextMenu/ContextMenuItem.cjs.js.map +1 -1
- package/dist/shared/src/containers/ContextMenu/ContextMenuItem.es.js.map +1 -1
- package/dist/shared/src/containers/ContextMenu/useCreateContextMenu.cjs.js.map +1 -1
- package/dist/shared/src/containers/ContextMenu/useCreateContextMenu.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 +143 -327
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.cjs.js +3 -3
- 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 +27 -329
- 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 +39 -236
- 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 +65 -255
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.es.js +16 -317
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.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 +61 -354
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/DetailsPanelMoreMenu.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/components/ShareDialog.cjs.js +5 -5
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/components/ShareDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/components/ShareDialog.es.js +20 -116
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/components/ShareDialog.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 +2 -306
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useContextAccess.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useMenuOptions.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useMenuOptions.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useMenuOptions.es.js +51 -147
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useMenuOptions.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js +2 -202
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelTabs/DetailsPanelTabs.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelTabs/DetailsPanelTabs.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/SubtasksSearchFilter/SubtasksSearchFilter.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/SubtasksSearchFilter/SubtasksSearchFilter.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.cjs.js +9 -9
- 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 +18 -320
- 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 +13 -217
- 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 +22 -323
- package/dist/shared/src/containers/DetailsPanel/containers/FeedContextWrapper.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/containers/FeedWrapper.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/containers/FeedWrapper.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/containers/FeedWrapper.es.js +27 -307
- package/dist/shared/src/containers/DetailsPanel/containers/FeedWrapper.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/helpers/buildDetailsPanelTitles.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/helpers/buildDetailsPanelTitles.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/helpers/buildEntityTypeIcons.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/helpers/buildEntityTypeIcons.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/helpers/getAllProjectsStatuses.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/helpers/getAllProjectsStatuses.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/helpers/getEntityPathData.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/helpers/getEntityPathData.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/helpers/getThumbnails.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/helpers/getThumbnails.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/helpers/getThumbnails.es.js +10 -106
- package/dist/shared/src/containers/DetailsPanel/helpers/getThumbnails.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/helpers/mergeProjectInfo.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/helpers/mergeProjectInfo.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js +2 -209
- package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js +2 -2
- package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js +74 -373
- 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 +20 -324
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js +6 -6
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js +32 -338
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js +3 -3
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js +12 -318
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/hooks/useExpandedWithInitialFolders.cjs.js +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/hooks/useExpandedWithInitialFolders.cjs.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/hooks/useExpandedWithInitialFolders.es.js +11 -107
- package/dist/shared/src/containers/EntityPickerDialog/hooks/useExpandedWithInitialFolders.es.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.cjs.js +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.cjs.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.es.js +23 -228
- package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.es.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/util/buildEntityPickerTableData.cjs.js +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/util/buildEntityPickerTableData.cjs.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/util/buildEntityPickerTableData.es.js +27 -123
- package/dist/shared/src/containers/EntityPickerDialog/util/buildEntityPickerTableData.es.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/util/getExpandedFoldersFromIds.cjs.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/util/getExpandedFoldersFromIds.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/Feed.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/Feed.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/Feed.es.js +65 -245
- package/dist/shared/src/containers/Feed/Feed.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityCategorySelect/ActivityCategorySelect.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityCategorySelect/ActivityCategorySelect.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 +8 -309
- 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 +145 -421
- 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 +18 -317
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityReference/ActivityReference.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityReference/ActivityReference.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityReference/ActivityReference.es.js +24 -120
- package/dist/shared/src/containers/Feed/components/ActivityReference/ActivityReference.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.es.js +42 -331
- package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.styled.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.styled.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js +2 -2
- 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 +227 -372
- package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/VersionReviewPill.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/VersionReviewPill.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 +38 -341
- package/dist/shared/src/containers/Feed/components/CommentInput/helpers.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.es.js +22 -324
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useBlendedCategoryColor.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useBlendedCategoryColor.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useBlendedCategoryColor.es.js +9 -105
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useBlendedCategoryColor.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.es.js +21 -324
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/modules/index.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/modules/index.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/modules/index.es.js +16 -26
- package/dist/shared/src/containers/Feed/components/CommentInput/modules/index.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/quillFormats.cjs.js +2 -0
- package/dist/shared/src/containers/Feed/components/CommentInput/quillFormats.cjs.js.map +1 -0
- package/dist/shared/src/containers/Feed/components/CommentInput/quillFormats.es.js +14 -0
- package/dist/shared/src/containers/Feed/components/CommentInput/quillFormats.es.js.map +1 -0
- package/dist/shared/src/containers/Feed/components/CommentInput/types.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/types.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/types.es.js +2 -15
- package/dist/shared/src/containers/Feed/components/CommentInput/types.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/FeedSearchFilter.cjs.js +2 -2
- package/dist/shared/src/containers/Feed/components/FeedSearchFilter.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/FeedSearchFilter.es.js +62 -361
- package/dist/shared/src/containers/Feed/components/FeedSearchFilter.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js +57 -356
- package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.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 +14 -310
- package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/context/FeedContext.es.js +34 -238
- package/dist/shared/src/containers/Feed/context/FeedContext.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/hooks/useCommentMutations.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/hooks/useCommentMutations.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/hooks/useCommentMutations.es.js +67 -163
- package/dist/shared/src/containers/Feed/hooks/useCommentMutations.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/hooks/useLastVersionReview.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/hooks/useLastVersionReview.es.js +18 -8
- package/dist/shared/src/containers/Feed/hooks/useLastVersionReview.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/mentionHelpers/getMentionTasks.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/mentionHelpers/getMentionTasks.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/mentionHelpers/getMentionTasks.es.js +10 -106
- package/dist/shared/src/containers/Feed/mentionHelpers/getMentionTasks.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/mentionHelpers/getMentionUsers.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/mentionHelpers/getMentionUsers.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/mentionHelpers/getMentionVersions.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/mentionHelpers/getMentionVersions.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/mentionHelpers/getMentionVersions.es.js +13 -109
- package/dist/shared/src/containers/Feed/mentionHelpers/getMentionVersions.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 +115 -284
- 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 +44 -177
- 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 +46 -343
- package/dist/shared/src/containers/ListTable/ListTableHeader.es.js.map +1 -1
- package/dist/shared/src/containers/ListTable/ListTableWidgets.cjs.js.map +1 -1
- package/dist/shared/src/containers/ListTable/ListTableWidgets.es.js.map +1 -1
- package/dist/shared/src/containers/MoveEntityDialog/MoveEntityDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/MoveEntityDialog/MoveEntityDialog.es.js.map +1 -1
- package/dist/shared/src/containers/NewEntity/components/NewEntity.cjs.js +3 -3
- package/dist/shared/src/containers/NewEntity/components/NewEntity.cjs.js.map +1 -1
- package/dist/shared/src/containers/NewEntity/components/NewEntity.es.js +170 -459
- package/dist/shared/src/containers/NewEntity/components/NewEntity.es.js.map +1 -1
- package/dist/shared/src/containers/NewEntity/components/TypeEditor.cjs.js.map +1 -1
- package/dist/shared/src/containers/NewEntity/components/TypeEditor.es.js.map +1 -1
- package/dist/shared/src/containers/NewEntity/context/NewEntityContext.cjs.js +1 -1
- package/dist/shared/src/containers/NewEntity/context/NewEntityContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/NewEntity/context/NewEntityContext.es.js +117 -314
- package/dist/shared/src/containers/NewEntity/context/NewEntityContext.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 +590 -859
- 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 +245 -391
- 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 +75 -375
- 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 +32 -204
- 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 +27 -124
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/TableFooterRow.cjs.js +7 -7
- package/dist/shared/src/containers/ProjectTreeTable/components/TableFooterRow.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/TableFooterRow.es.js +35 -131
- package/dist/shared/src/containers/ProjectTreeTable/components/TableFooterRow.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 +97 -292
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js +4 -4
- package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js +243 -441
- package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.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 +156 -330
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js +4 -208
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js +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 +120 -420
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.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 +71 -245
- package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardComments.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardComments.es.js +3 -3
- package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardComments.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardSubtasks.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardSubtasks.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardTypes.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardTypes.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardValidation.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardValidation.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardValidation.es.js +83 -179
- package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardValidation.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js +13 -317
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.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 +59 -233
- 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 +74 -248
- 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 +147 -439
- 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 +23 -197
- 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 +32 -206
- 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 +32 -332
- 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 +135 -335
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.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 +29 -203
- 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 +36 -204
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.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 +78 -282
- 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 +31 -232
- 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 +24 -198
- 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 +29 -203
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.es.js +167 -467
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.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 +41 -215
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/clientFilterToQueryFilter.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/clientFilterToQueryFilter.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/getEntityViewerIds.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/getEntityViewerIds.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/getFolderIdsToQueryFromExpanded.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/getFolderIdsToQueryFromExpanded.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/getTableFieldOptions.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/getTableFieldOptions.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/getTypeDefaultValue.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/getTypeDefaultValue.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/linksToTableData.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/linksToTableData.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/loadingUtils.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/loadingUtils.es.js.map +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.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/sanitizeQueryFilter.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/sanitizeQueryFilter.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/validateUpdateEntities.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/validateUpdateEntities.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.cjs.js +2 -2
- package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.es.js +14 -315
- 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 +113 -398
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CommentsWidget.cjs.js +5 -5
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CommentsWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CommentsWidget.es.js +40 -332
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CommentsWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/EntityNameWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/EntityNameWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/EntityWidget.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/EntityWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/EntityWidget.es.js +22 -194
- package/dist/shared/src/containers/ProjectTreeTable/widgets/EntityWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumCellValue.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumCellValue.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js +3 -3
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js +52 -348
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/MarkdownWidget.cjs.js +5 -5
- package/dist/shared/src/containers/ProjectTreeTable/widgets/MarkdownWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/MarkdownWidget.es.js +77 -364
- package/dist/shared/src/containers/ProjectTreeTable/widgets/MarkdownWidget.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 +28 -202
- 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 +36 -333
- package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/TextContentWidget.cjs.js +5 -5
- package/dist/shared/src/containers/ProjectTreeTable/widgets/TextContentWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/TextContentWidget.es.js +130 -424
- package/dist/shared/src/containers/ProjectTreeTable/widgets/TextContentWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidget.cjs.js +4 -4
- package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidget.es.js +80 -176
- package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.cjs.js +5 -5
- package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.es.js +12 -108
- package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.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 +20 -217
- 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 +231 -527
- package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js.map +1 -1
- package/dist/shared/src/containers/Slicer/components/Slicer.cjs.js +2 -2
- package/dist/shared/src/containers/Slicer/components/Slicer.cjs.js.map +1 -1
- package/dist/shared/src/containers/Slicer/components/Slicer.es.js +69 -367
- package/dist/shared/src/containers/Slicer/components/Slicer.es.js.map +1 -1
- package/dist/shared/src/containers/Slicer/components/SlicerDropdownFallback.cjs.js +2 -2
- package/dist/shared/src/containers/Slicer/components/SlicerDropdownFallback.cjs.js.map +1 -1
- package/dist/shared/src/containers/Slicer/components/SlicerDropdownFallback.es.js +18 -318
- package/dist/shared/src/containers/Slicer/components/SlicerDropdownFallback.es.js.map +1 -1
- package/dist/shared/src/containers/Slicer/components/SlicerSearch.cjs.js +2 -2
- package/dist/shared/src/containers/Slicer/components/SlicerSearch.cjs.js.map +1 -1
- package/dist/shared/src/containers/Slicer/components/SlicerSearch.es.js +24 -328
- package/dist/shared/src/containers/Slicer/components/SlicerSearch.es.js.map +1 -1
- package/dist/shared/src/containers/Slicer/context/SlicerContext.cjs.js +1 -1
- package/dist/shared/src/containers/Slicer/context/SlicerContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/Slicer/context/SlicerContext.es.js +69 -370
- package/dist/shared/src/containers/Slicer/context/SlicerContext.es.js.map +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useEntityListsSlice.cjs.js +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useEntityListsSlice.cjs.js.map +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useEntityListsSlice.es.js +27 -228
- package/dist/shared/src/containers/Slicer/hooks/useEntityListsSlice.es.js.map +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useHierarchyContextMenuItems.cjs.js +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useHierarchyContextMenuItems.cjs.js.map +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useHierarchyContextMenuItems.es.js +34 -236
- package/dist/shared/src/containers/Slicer/hooks/useHierarchyContextMenuItems.es.js.map +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useProjectAnatomySlices.cjs.js +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useProjectAnatomySlices.cjs.js.map +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useProjectAnatomySlices.es.js +5 -309
- package/dist/shared/src/containers/Slicer/hooks/useProjectAnatomySlices.es.js.map +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useSlicerAttributesData.cjs.js +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useSlicerAttributesData.cjs.js.map +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useSlicerAttributesData.es.js +7 -311
- package/dist/shared/src/containers/Slicer/hooks/useSlicerAttributesData.es.js.map +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useSlicerCounts.cjs.js +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useSlicerCounts.cjs.js.map +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useSlicerCounts.es.js +11 -314
- package/dist/shared/src/containers/Slicer/hooks/useSlicerCounts.es.js.map +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useSlicerRemotes.cjs.js +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useSlicerRemotes.cjs.js.map +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useSlicerRemotes.es.js +13 -316
- package/dist/shared/src/containers/Slicer/hooks/useSlicerRemotes.es.js.map +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useSlicerRowSelection.cjs.js +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useSlicerRowSelection.cjs.js.map +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useSlicerRowSelection.es.js +34 -338
- package/dist/shared/src/containers/Slicer/hooks/useSlicerRowSelection.es.js.map +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useSlicerSplitter.cjs.js +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useSlicerSplitter.cjs.js.map +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useSlicerSplitter.es.js +11 -316
- package/dist/shared/src/containers/Slicer/hooks/useSlicerSplitter.es.js.map +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.cjs.js +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.cjs.js.map +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.es.js +72 -368
- package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.es.js.map +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useUsersTable.cjs.js.map +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useUsersTable.es.js.map +1 -1
- package/dist/shared/src/containers/Slicer/util/createFilterFromSlicer.cjs.js.map +1 -1
- package/dist/shared/src/containers/Slicer/util/createFilterFromSlicer.es.js.map +1 -1
- package/dist/shared/src/containers/Views/ViewItem/ViewItem.cjs.js +1 -1
- package/dist/shared/src/containers/Views/ViewItem/ViewItem.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/ViewItem/ViewItem.es.js +24 -120
- package/dist/shared/src/containers/Views/ViewItem/ViewItem.es.js.map +1 -1
- package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewFormDialogFallback.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewFormDialogFallback.es.js.map +1 -1
- package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.cjs.js +1 -1
- package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.es.js +35 -336
- package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.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 +55 -354
- package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.es.js.map +1 -1
- package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js +2 -2
- package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.es.js +40 -335
- package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.es.js.map +1 -1
- package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js +1 -1
- package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/context/ViewsContext.es.js +59 -262
- package/dist/shared/src/containers/Views/context/ViewsContext.es.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/pages/useListsViewSettings.cjs.js +1 -1
- package/dist/shared/src/containers/Views/hooks/pages/useListsViewSettings.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/pages/useListsViewSettings.es.js +17 -113
- package/dist/shared/src/containers/Views/hooks/pages/useListsViewSettings.es.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/pages/useOverviewViewSettings.cjs.js +1 -1
- package/dist/shared/src/containers/Views/hooks/pages/useOverviewViewSettings.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/pages/useOverviewViewSettings.es.js +45 -141
- package/dist/shared/src/containers/Views/hooks/pages/useOverviewViewSettings.es.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/pages/useTaskProgressViewSettings.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/pages/useTaskProgressViewSettings.es.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.cjs.js +1 -1
- package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.es.js +22 -216
- package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.es.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.es.js.map +1 -1
- package/dist/shared/src/containers/Views/types.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/types.es.js.map +1 -1
- package/dist/shared/src/containers/Views/utils/generateWorkingView.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/utils/generateWorkingView.es.js.map +1 -1
- package/dist/shared/src/context/AddonContext.cjs.js.map +1 -1
- package/dist/shared/src/context/AddonContext.es.js.map +1 -1
- package/dist/shared/src/context/AddonProjectContext.cjs.js +1 -1
- package/dist/shared/src/context/AddonProjectContext.cjs.js.map +1 -1
- package/dist/shared/src/context/AddonProjectContext.es.js +19 -115
- package/dist/shared/src/context/AddonProjectContext.es.js.map +1 -1
- package/dist/shared/src/context/DeleteEntitiesContext.cjs.js +1 -1
- package/dist/shared/src/context/DeleteEntitiesContext.cjs.js.map +1 -1
- package/dist/shared/src/context/DeleteEntitiesContext.es.js +1 -1
- package/dist/shared/src/context/DeleteEntitiesContext.es.js.map +1 -1
- package/dist/shared/src/context/DetailsPanelContext.cjs.js +1 -1
- package/dist/shared/src/context/DetailsPanelContext.cjs.js.map +1 -1
- package/dist/shared/src/context/DetailsPanelContext.es.js +66 -362
- package/dist/shared/src/context/DetailsPanelContext.es.js.map +1 -1
- package/dist/shared/src/context/EntityUpdatesContext.cjs.js +1 -1
- package/dist/shared/src/context/EntityUpdatesContext.cjs.js.map +1 -1
- package/dist/shared/src/context/EntityUpdatesContext.es.js +61 -358
- package/dist/shared/src/context/EntityUpdatesContext.es.js.map +1 -1
- package/dist/shared/src/context/PowerpackContext.cjs.js +1 -1
- package/dist/shared/src/context/PowerpackContext.cjs.js.map +1 -1
- package/dist/shared/src/context/PowerpackContext.es.js +42 -344
- package/dist/shared/src/context/PowerpackContext.es.js.map +1 -1
- package/dist/shared/src/context/ProjectFoldersContext.cjs.js +1 -1
- package/dist/shared/src/context/ProjectFoldersContext.cjs.js.map +1 -1
- package/dist/shared/src/context/ProjectFoldersContext.es.js +26 -231
- package/dist/shared/src/context/ProjectFoldersContext.es.js.map +1 -1
- package/dist/shared/src/context/RemoteModulesContext.cjs.js.map +1 -1
- package/dist/shared/src/context/RemoteModulesContext.es.js.map +1 -1
- package/dist/shared/src/context/SubtasksModulesContext.cjs.js +1 -1
- package/dist/shared/src/context/SubtasksModulesContext.cjs.js.map +1 -1
- package/dist/shared/src/context/SubtasksModulesContext.es.js +23 -324
- package/dist/shared/src/context/SubtasksModulesContext.es.js.map +1 -1
- package/dist/shared/src/context/ThumbnailUploaderContext.cjs.js +1 -1
- package/dist/shared/src/context/ThumbnailUploaderContext.cjs.js.map +1 -1
- package/dist/shared/src/context/ThumbnailUploaderContext.es.js +17 -21
- package/dist/shared/src/context/ThumbnailUploaderContext.es.js.map +1 -1
- package/dist/shared/src/context/UriContext.cjs.js +1 -1
- package/dist/shared/src/context/UriContext.cjs.js.map +1 -1
- package/dist/shared/src/context/UriContext.es.js +2 -2
- package/dist/shared/src/context/UriContext.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 +28 -229
- package/dist/shared/src/context/WebsocketContext.es.js.map +1 -1
- package/dist/shared/src/hooks/useEntityUpdate.cjs.js +1 -1
- package/dist/shared/src/hooks/useEntityUpdate.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useEntityUpdate.es.js +2 -208
- package/dist/shared/src/hooks/useEntityUpdate.es.js.map +1 -1
- package/dist/shared/src/hooks/useGroupByRemoteModules.cjs.js +1 -1
- package/dist/shared/src/hooks/useGroupByRemoteModules.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useGroupByRemoteModules.es.js +11 -314
- package/dist/shared/src/hooks/useGroupByRemoteModules.es.js.map +1 -1
- package/dist/shared/src/hooks/useHierarchyTable.cjs.js +1 -1
- package/dist/shared/src/hooks/useHierarchyTable.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useHierarchyTable.es.js +30 -333
- package/dist/shared/src/hooks/useHierarchyTable.es.js.map +1 -1
- package/dist/shared/src/hooks/useLoadModules.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useLoadModules.es.js.map +1 -1
- package/dist/shared/src/hooks/useReviewablesKeyboardNavigation.cjs.js +1 -1
- package/dist/shared/src/hooks/useReviewablesKeyboardNavigation.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useReviewablesKeyboardNavigation.es.js +19 -115
- package/dist/shared/src/hooks/useReviewablesKeyboardNavigation.es.js.map +1 -1
- package/dist/shared/src/hooks/useUserProjectConfig.cjs.js +1 -1
- package/dist/shared/src/hooks/useUserProjectConfig.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useUserProjectConfig.es.js +6 -212
- package/dist/shared/src/hooks/useUserProjectConfig.es.js.map +1 -1
- package/dist/shared/src/util/buildHierarchicalTableRows.cjs.js.map +1 -1
- package/dist/shared/src/util/buildHierarchicalTableRows.es.js.map +1 -1
- package/dist/shared/src/util/checkName.cjs.js.map +1 -1
- package/dist/shared/src/util/checkName.es.js.map +1 -1
- package/dist/shared/src/util/columnConfigConverter.cjs.js.map +1 -1
- package/dist/shared/src/util/columnConfigConverter.es.js.map +1 -1
- package/dist/shared/src/util/getAttributeIcon.cjs.js.map +1 -1
- package/dist/shared/src/util/getAttributeIcon.es.js.map +1 -1
- package/dist/shared/src/util/getBundleMode.cjs.js +1 -1
- package/dist/shared/src/util/getBundleMode.cjs.js.map +1 -1
- package/dist/shared/src/util/getBundleMode.es.js +16 -112
- package/dist/shared/src/util/getBundleMode.es.js.map +1 -1
- package/dist/shared/src/util/getGroupByDataType.cjs.js.map +1 -1
- package/dist/shared/src/util/getGroupByDataType.es.js.map +1 -1
- package/dist/shared/src/util/getPriorityOptions.cjs.js.map +1 -1
- package/dist/shared/src/util/getPriorityOptions.es.js.map +1 -1
- package/dist/shared/src/util/iconUtils.cjs.js.map +1 -1
- package/dist/shared/src/util/iconUtils.es.js.map +1 -1
- package/dist/shared/src/util/mentionTypeOptions.cjs.js +2 -0
- package/dist/shared/src/util/mentionTypeOptions.cjs.js.map +1 -0
- package/dist/shared/src/util/mentionTypeOptions.es.js +16 -0
- package/dist/shared/src/util/mentionTypeOptions.es.js.map +1 -0
- package/dist/shared/src/util/parseFilename.cjs.js +2 -0
- package/dist/shared/src/util/parseFilename.cjs.js.map +1 -0
- package/dist/shared/src/util/parseFilename.es.js +8 -0
- package/dist/shared/src/util/parseFilename.es.js.map +1 -0
- package/dist/shared/src/util/uriUtils.cjs.js.map +1 -1
- package/dist/shared/src/util/uriUtils.es.js.map +1 -1
- package/dist/types/api/base/index.d.ts +1 -1
- package/dist/types/api/generated/graphql.d.ts +5 -2
- package/dist/types/api/generated/graphqlLinks.d.ts +1 -0
- package/dist/types/api/queries/activities/getActivities.d.ts +4 -2
- package/dist/types/api/queries/activities/getCategories.d.ts +1 -1
- package/dist/types/api/queries/activities/util/activityRealtimeHandler.d.ts +1 -1
- package/dist/types/api/queries/entities/getEntity.d.ts +2 -1
- package/dist/types/api/queries/entities/getEntityPanel.d.ts +2 -1
- package/dist/types/api/queries/entities/updateEntity.d.ts +2 -1
- package/dist/types/api/queries/entityLists/getLists.d.ts +305 -305
- package/dist/types/api/queries/overview/getOverview.d.ts +35 -18
- package/dist/types/api/queries/project/getProject.d.ts +62 -61
- package/dist/types/api/queries/system/getSystem.d.ts +1 -1
- package/dist/types/api/queries/userDashboard/getUserDashboard.d.ts +2 -1
- package/dist/types/api/queries/users/getUsers.d.ts +2 -1
- package/dist/types/api/queries/versions/getVersionsProducts.d.ts +4 -2
- package/dist/types/api/queries/views/getViews.d.ts +1 -1
- package/dist/types/components/DetailsPanelDetails/DetailsSection.d.ts +1 -1
- package/dist/types/components/Menu/Menu.d.ts +1 -1
- package/dist/types/components/Menu/MenuList.d.ts +1 -1
- package/dist/types/components/Powerpack/PowerpackButton.d.ts +1 -1
- package/dist/types/components/ProjectTableSettings/ColumnsSettings.d.ts +1 -1
- package/dist/types/components/ProjectTableSettings/ProjectTableSettings.d.ts +2 -2
- package/dist/types/components/ProjectTableSettings/TableSettingsFallback.d.ts +1 -1
- package/dist/types/components/RemotePage/ProjectPageRemote.d.ts +1 -1
- package/dist/types/components/RemotePage/RemotePageWrapper.d.ts +4 -2
- package/dist/types/components/RenameForm/RenameForm.d.ts +1 -1
- package/dist/types/components/ReviewablesList/SortableReviewableCard.d.ts +1 -1
- package/dist/types/components/ReviewablesList/useReviewablesUpload.d.ts +2 -2
- package/dist/types/components/ReviewablesSelector/Card.d.ts +1 -1
- package/dist/types/components/SearchFilter/filterScopeRegistry.d.ts +1 -1
- package/dist/types/components/SearchFilter/useBuildFilterOptions.d.ts +1 -1
- package/dist/types/components/SettingsPanel/SettingsPanel.d.ts +1 -1
- package/dist/types/components/SyncButton/SyncButton.d.ts +1 -1
- package/dist/types/components/Thumbnail/StackedThumbnails.d.ts +1 -2
- package/dist/types/config/plannerFeatures.d.ts +1 -1
- package/dist/types/config/powerpackFeatures.d.ts +1 -1
- package/dist/types/containers/Actions/Actions.d.ts +2 -2
- package/dist/types/containers/ContextMenu/ContextMenuItem.d.ts +1 -1
- package/dist/types/containers/ContextMenu/useCreateContextMenu.d.ts +1 -1
- package/dist/types/containers/DetailsPanel/DetailsPanel.d.ts +1 -1
- package/dist/types/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.d.ts +2 -2
- package/dist/types/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useContextAccess.d.ts +1 -1
- package/dist/types/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useMenuOptions.d.ts +2 -2
- package/dist/types/containers/DetailsPanel/components/DetailsPanelTabs/DetailsPanelTabs.d.ts +1 -1
- package/dist/types/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.d.ts +3 -3
- package/dist/types/containers/DetailsPanel/containers/DetailsPanelSubtasks.d.ts +1 -1
- package/dist/types/containers/DetailsPanel/helpers/buildEntityTypeIcons.d.ts +1 -1
- package/dist/types/containers/DetailsPanel/helpers/getEntityPathData.d.ts +1 -1
- package/dist/types/containers/DetailsPanel/helpers/mergeProjectInfo.d.ts +1 -1
- package/dist/types/containers/DetailsPanel/hooks/useGetEntityPath.d.ts +1 -1
- package/dist/types/containers/EntityPickerDialog/components/EntityTypeTable.d.ts +1 -1
- package/dist/types/containers/EntityPickerDialog/hooks/useGetEntityPickerData.d.ts +1 -1
- package/dist/types/containers/EntityPickerDialog/util/buildEntityPickerTableData.d.ts +1 -1
- package/dist/types/containers/Feed/components/ActivityCategorySelect/ActivityCategorySelect.d.ts +1 -1
- package/dist/types/containers/Feed/components/ActivityReference/ActivityReference.styled.d.ts +2 -2
- package/dist/types/containers/Feed/components/ActivityVersionReview/ActivityVersionReview.d.ts +1 -1
- package/dist/types/containers/Feed/components/ActivityVersions/ActivityVersions.styled.d.ts +1 -1
- package/dist/types/containers/Feed/components/CommentInput/modules/index.d.ts +1 -1
- package/dist/types/containers/Feed/components/CommentInput/quillFormats.d.ts +1 -0
- package/dist/types/containers/Feed/components/CommentInput/types.d.ts +1 -12
- package/dist/types/containers/Feed/components/FileUploadCard/FileUploadCard.d.ts +1 -1
- package/dist/types/containers/Feed/context/FeedContext.d.ts +1 -1
- package/dist/types/containers/Feed/hooks/useLastVersionReview.d.ts +1 -1
- package/dist/types/containers/Feed/mentionHelpers/getMentionTasks.d.ts +1 -1
- package/dist/types/containers/Feed/mentionHelpers/getMentionUsers.d.ts +1 -1
- package/dist/types/containers/Feed/mentionHelpers/getMentionVersions.d.ts +2 -2
- package/dist/types/containers/ProjectTreeTable/ProjectTreeTable.d.ts +1 -1
- package/dist/types/containers/ProjectTreeTable/buildTreeTableColumns.d.ts +1 -1
- package/dist/types/containers/ProjectTreeTable/context/ProjectTableContext.d.ts +4 -3
- package/dist/types/containers/ProjectTreeTable/hooks/useCellContextMenu.d.ts +1 -1
- package/dist/types/containers/ProjectTreeTable/hooks/useFetchOverviewData.d.ts +4 -5
- package/dist/types/containers/ProjectTreeTable/hooks/useFolderRelationships.d.ts +1 -1
- package/dist/types/containers/ProjectTreeTable/hooks/useGetEntityTypeData.d.ts +2 -2
- package/dist/types/containers/ProjectTreeTable/hooks/useMoveEntities.d.ts +1 -1
- package/dist/types/containers/ProjectTreeTable/hooks/usePasteLinks.d.ts +1 -1
- package/dist/types/containers/ProjectTreeTable/hooks/useQueryFilters.d.ts +1 -1
- package/dist/types/containers/ProjectTreeTable/types/overviewContext.d.ts +6 -5
- package/dist/types/containers/ProjectTreeTable/utils/getEntityViewerIds.d.ts +1 -1
- package/dist/types/containers/ProjectTreeTable/utils/getFolderIdsToQueryFromExpanded.d.ts +1 -1
- package/dist/types/containers/ProjectTreeTable/utils/linksToTableData.d.ts +1 -1
- package/dist/types/containers/ProjectTreeTable/utils/sanitizeQueryFilter.d.ts +1 -1
- package/dist/types/containers/ProjectTreeTable/widgets/LinksWidget.d.ts +1 -1
- package/dist/types/containers/ProjectTreeTable/widgets/NameWidget.d.ts +1 -1
- package/dist/types/containers/ProjectTreeTable/widgets/TextWidget.d.ts +2 -1
- package/dist/types/containers/Slicer/components/Slicer.d.ts +2 -2
- package/dist/types/containers/Slicer/components/SlicerDropdownFallback.d.ts +1 -1
- package/dist/types/containers/Slicer/context/SlicerContext.d.ts +3 -4
- package/dist/types/containers/Slicer/hooks/useEntityListsSlice.d.ts +1 -1
- package/dist/types/containers/Slicer/hooks/useHierarchyContextMenuItems.d.ts +3 -3
- package/dist/types/containers/Slicer/hooks/useProjectAnatomySlices.d.ts +1 -1
- package/dist/types/containers/Slicer/hooks/useSlicerCounts.d.ts +1 -1
- package/dist/types/containers/Slicer/hooks/useUsersTable.d.ts +1 -1
- package/dist/types/containers/Slicer/types.d.ts +1 -1
- package/dist/types/containers/Views/hooks/pages/useListsViewSettings.d.ts +1 -1
- package/dist/types/containers/Views/hooks/pages/useOverviewViewSettings.d.ts +1 -1
- package/dist/types/containers/Views/types.d.ts +1 -1
- package/dist/types/context/AddonContext.d.ts +1 -1
- package/dist/types/context/AddonProjectContext.d.ts +2 -2
- package/dist/types/context/DetailsPanelContext.d.ts +2 -2
- package/dist/types/context/SubtasksModulesContext.d.ts +1 -1
- package/dist/types/hooks/useHierarchyTable.d.ts +1 -1
- package/dist/types/util/buildHierarchicalTableRows.d.ts +1 -1
- package/dist/types/util/columnConfigConverter.d.ts +1 -1
- package/dist/types/util/getBundleMode.d.ts +1 -1
- package/dist/types/util/getGroupByDataType.d.ts +1 -1
- package/dist/types/util/index.d.ts +2 -0
- package/dist/types/util/mentionTypeOptions.d.ts +12 -0
- package/dist/types/util/parseFilename.d.ts +1 -0
- package/dist/types/util/uriUtils.d.ts +1 -1
- package/dist/util.cjs.js +1 -1
- package/dist/util.es.js +24 -20
- package/dist/util.es.js.map +1 -1
- package/package.json +1 -1
- package/dist/shared/src/components/ThumbnailSimple/index.cjs.js +0 -2
- package/dist/shared/src/components/ThumbnailSimple/index.cjs.js.map +0 -1
- package/dist/shared/src/components/ThumbnailSimple/index.es.js +0 -6
- package/dist/shared/src/components/ThumbnailSimple/index.es.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getViews.es.js","sources":["../../../../../../src/api/queries/views/getViews.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"getViews.es.js","sources":["../../../../../../src/api/queries/views/getViews.ts"],"sourcesContent":["import { viewsApi } from '@shared/api/generated'\nimport type { ListViewsApiResponse } from '@shared/api/generated'\nimport { DefinitionsFromApi, OverrideResultType, TagTypesFromApi } from '@reduxjs/toolkit/query'\n\nexport const getScopeTag = (viewType: string, projectName?: string) => {\n return {\n type: 'view',\n id: `${viewType.toUpperCase()}${projectName ? `:${projectName.toUpperCase()}` : ''}`,\n }\n}\n\nconst VIEW_LIST_TAG = { type: 'view', id: 'LIST' }\n\ntype GetViewListResult = ListViewsApiResponse['views']\n\ntype Definitions = DefinitionsFromApi<typeof viewsApi>\ntype TagTypes = TagTypesFromApi<typeof viewsApi>\n// update the definitions to include the new types\ntype UpdatedDefinitions = Omit<Definitions, 'listViews'> & {\n listViews: OverrideResultType<Definitions['listViews'], GetViewListResult>\n}\n\nexport const getViewsApi = viewsApi.enhanceEndpoints<TagTypes, UpdatedDefinitions>({\n endpoints: {\n listViews: {\n transformResponse: (response: ListViewsApiResponse) => response?.views || [],\n providesTags: (result, _e, { viewType, projectName }) =>\n result\n ? [\n VIEW_LIST_TAG,\n getScopeTag(viewType, projectName),\n ...result\n .filter((v) => v.id != null)\n .map((v) => ({ type: 'view' as const, id: v.id })),\n ]\n : [VIEW_LIST_TAG],\n transformErrorResponse: (error: any) => error.data?.detail,\n },\n getWorkingView: {\n providesTags: (result, _e, { viewType, projectName }) => [\n { type: 'view', id: result?.id },\n getScopeTag(viewType, projectName),\n VIEW_LIST_TAG,\n ],\n transformErrorResponse: (error: any) => error.data?.detail,\n },\n getView: {\n providesTags: (result, error, arg) => [{ type: 'view', id: arg.viewId }, VIEW_LIST_TAG],\n transformErrorResponse: (error: any) => error.data?.detail,\n },\n getDefaultView: {\n providesTags: (result, _e, { viewType, projectName }) =>\n result\n ? [{ type: 'view', id: result.id }, getScopeTag(viewType, projectName)]\n : [getScopeTag(viewType, projectName)],\n transformErrorResponse: (error: any) => error.data?.detail,\n },\n getBaseView: {\n providesTags: (result, _e, { viewType, projectName }) =>\n result\n ? [{ type: 'view', id: result.id }, getScopeTag(viewType, projectName)]\n : [getScopeTag(viewType, projectName)],\n transformErrorResponse: (error: any) => error.data?.detail,\n },\n },\n})\n\nexport const {\n useListViewsQuery,\n useGetWorkingViewQuery,\n useGetViewQuery,\n useGetDefaultViewQuery,\n useGetBaseViewQuery,\n} = getViewsApi\n"],"names":["getScopeTag","viewType","projectName","VIEW_LIST_TAG","getViewsApi","viewsApi","response","result","_e","v","error","arg","useListViewsQuery","useGetWorkingViewQuery","useGetViewQuery","useGetDefaultViewQuery","useGetBaseViewQuery"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIO,MAAMA,IAAc,CAACC,GAAkBC,OACrC;AAAA,EACL,MAAM;AAAA,EACN,IAAI,GAAGD,EAAS,YAAA,CAAa,GAAGC,IAAc,IAAIA,EAAY,aAAa,KAAK,EAAE;AAAA,IAIhFC,IAAgB,EAAE,MAAM,QAAQ,IAAI,OAAA,GAW7BC,IAAcC,EAAS,iBAA+C;AAAA,EACjF,WAAW;AAAA,IACT,WAAW;AAAA,MACT,mBAAmB,CAACC,MAAmCA,GAAU,SAAS,CAAA;AAAA,MAC1E,cAAc,CAACC,GAAQC,GAAI,EAAE,UAAAP,GAAU,aAAAC,EAAA,MACrCK,IACI;AAAA,QACEJ;AAAA,QACAH,EAAYC,GAAUC,CAAW;AAAA,QACjC,GAAGK,EACA,OAAO,CAACE,MAAMA,EAAE,MAAM,IAAI,EAC1B,IAAI,CAACA,OAAO,EAAE,MAAM,QAAiB,IAAIA,EAAE,KAAK;AAAA,MAAA,IAErD,CAACN,CAAa;AAAA,MACpB,wBAAwB,CAACO,MAAeA,EAAM,MAAM;AAAA,IAAA;AAAA,IAEtD,gBAAgB;AAAA,MACd,cAAc,CAACH,GAAQC,GAAI,EAAE,UAAAP,GAAU,aAAAC,QAAkB;AAAA,QACvD,EAAE,MAAM,QAAQ,IAAIK,GAAQ,GAAA;AAAA,QAC5BP,EAAYC,GAAUC,CAAW;AAAA,QACjCC;AAAA,MAAA;AAAA,MAEF,wBAAwB,CAACO,MAAeA,EAAM,MAAM;AAAA,IAAA;AAAA,IAEtD,SAAS;AAAA,MACP,cAAc,CAACH,GAAQG,GAAOC,MAAQ,CAAC,EAAE,MAAM,QAAQ,IAAIA,EAAI,OAAA,GAAUR,CAAa;AAAA,MACtF,wBAAwB,CAACO,MAAeA,EAAM,MAAM;AAAA,IAAA;AAAA,IAEtD,gBAAgB;AAAA,MACd,cAAc,CAACH,GAAQC,GAAI,EAAE,UAAAP,GAAU,aAAAC,EAAA,MACrCK,IACI,CAAC,EAAE,MAAM,QAAQ,IAAIA,EAAO,GAAA,GAAMP,EAAYC,GAAUC,CAAW,CAAC,IACpE,CAACF,EAAYC,GAAUC,CAAW,CAAC;AAAA,MACzC,wBAAwB,CAACQ,MAAeA,EAAM,MAAM;AAAA,IAAA;AAAA,IAEtD,aAAa;AAAA,MACX,cAAc,CAACH,GAAQC,GAAI,EAAE,UAAAP,GAAU,aAAAC,EAAA,MACrCK,IACI,CAAC,EAAE,MAAM,QAAQ,IAAIA,EAAO,GAAA,GAAMP,EAAYC,GAAUC,CAAW,CAAC,IACpE,CAACF,EAAYC,GAAUC,CAAW,CAAC;AAAA,MACzC,wBAAwB,CAACQ,MAAeA,EAAM,MAAM;AAAA,IAAA;AAAA,EACtD;AAEJ,CAAC,GAEY;AAAA,EACX,mBAAAE;AAAA,EACA,wBAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,wBAAAC;AAAA,EACA,qBAAAC;AACF,IAAIZ;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateViews.cjs.js","sources":["../../../../../../src/api/queries/views/updateViews.ts"],"sourcesContent":["import { ViewListItemModel } from '@shared/api/generated'\nimport { getScopeTag, getViewsApi } from './getViews'\nimport { v4 as uuidv4 } from 'uuid'\n\nconst updateViewsApi = getViewsApi.enhanceEndpoints({\n endpoints: {\n createView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled, getState }) => {\n const { payload } = arg\n const state = getState()\n // @ts-expect-error - user is not typed in the state\n const user = state.user?.name\n\n // Optimistically update the view list\n const patch = dispatch(\n getViewsApi.util.updateQueryData(\n 'listViews',\n { viewType: arg.viewType, projectName: arg.projectName },\n (draft) => {\n const newView: ViewListItemModel = {\n ...payload,\n working: payload.working || false,\n scope: arg.projectName ? 'project' : 'studio',\n visibility: 'private',\n position: draft.length + 1, // Add to the end of the list\n owner: user,\n accessLevel: 30,\n }\n if (payload.working) {\n // For working views, find and replace the existing working view\n const existingWorkingIndex = draft.findIndex((view) => view.working === true)\n if (existingWorkingIndex !== -1) {\n // Keep the existing ID but update all other properties\n const existingId = draft[existingWorkingIndex].id\n draft[existingWorkingIndex] = { ...newView, id: existingId }\n } else {\n // No existing working view, add the new one\n draft.push(newView)\n }\n } else {\n // For non-working views, add to the list as usual\n draft.push(newView)\n }\n\n // finally sort the view by position and then by label\n draft.sort((a, b) => {\n if (a.position !== b.position) {\n return a.position - b.position\n }\n return a.label.localeCompare(b.label)\n })\n },\n ),\n )\n\n // Also update the getWorkingView cache if this is a working view\n let workingViewPatch\n if (payload.working) {\n workingViewPatch = dispatch(\n getViewsApi.util.updateQueryData(\n 'getWorkingView',\n { viewType: arg.viewType, projectName: arg.projectName },\n (draft) => {\n // Preserve the existing ID if there's already a working view\n const existingId = draft?.id\n const updatedWorkingView = {\n ...payload,\n working: true,\n scope: arg.projectName ? 'project' : 'studio',\n visibility: 'private',\n owner: user,\n ...(existingId && { id: existingId }), // Keep existing ID if it exists\n }\n // Update the working view cache with the new view data\n Object.assign(draft, updatedWorkingView)\n },\n ),\n )\n }\n\n let baseViewPatch\n\n if (payload.label === '__base__') {\n const newBaseView = {\n id: uuidv4(),\n ...payload,\n working: false,\n scope: arg.projectName ? 'project' : 'studio',\n visibility: 'private',\n owner: user,\n accessLevel: 30,\n position: 0,\n }\n\n baseViewPatch = dispatch(\n getViewsApi.util.updateQueryData(\n 'getBaseView',\n { viewType: arg.viewType, projectName: arg.projectName },\n (draft) => {\n if (draft) {\n Object.assign(draft, newBaseView)\n }\n },\n ),\n )\n\n // If the cache wasn't updated (because it didn't exist), upsert it\n if (!baseViewPatch?.patches?.length) {\n dispatch(\n getViewsApi.util.upsertQueryData(\n 'getBaseView',\n { viewType: arg.viewType, projectName: arg.projectName },\n newBaseView as any,\n ),\n )\n }\n }\n\n try {\n await queryFulfilled\n } catch (error) {\n patch.undo()\n if (workingViewPatch) workingViewPatch.undo()\n if (baseViewPatch) baseViewPatch.undo()\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n // updates the view list cache for a specific view type and project\n invalidatesTags: (_r, _e, { viewType, projectName, payload }) => [\n { type: 'view', id: payload.id },\n getScopeTag(viewType, projectName),\n ],\n },\n updateView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled }) => {\n const { viewId, payload, viewType, projectName } = arg\n\n const patches: any[] = []\n\n // 1. Update listViews\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData('listViews', { viewType, projectName }, (draft) => {\n const view = draft.find((v) => v.id === viewId)\n if (view) {\n Object.assign(view, payload)\n }\n }),\n ),\n )\n\n // 2. Update getWorkingView\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData(\n 'getWorkingView',\n { viewType, projectName },\n (draft) => {\n if (draft?.id === viewId) {\n Object.assign(draft, payload)\n }\n },\n ),\n ),\n )\n\n // 3. Update getDefaultView\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData(\n 'getDefaultView',\n { viewType, projectName },\n (draft) => {\n if (draft?.id === viewId) {\n Object.assign(draft, payload)\n }\n },\n ),\n ),\n )\n\n // 4. Update getView\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData(\n 'getView',\n { viewType, viewId, projectName },\n (draft) => {\n if (draft) {\n Object.assign(draft, payload)\n }\n },\n ),\n ),\n )\n\n try {\n await queryFulfilled\n } catch (error) {\n patches.forEach((patch) => patch.undo())\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n invalidatesTags: (_r, _e, { viewType, projectName, viewId, payload }) => {\n const tags: any[] = []\n\n // Only invalidate when metadata fields (label, owner, etc.) change.\n // For settings-only updates the optimistic cache patches are sufficient —\n // emitting the view ID tag here would trigger a background refetch that races\n // with any other in-flight rapid mutations and temporarily reverts the cache\n // to a stale server response, causing a visible \"previous view\" flicker.\n const metadataFields = [\n 'label',\n 'owner',\n 'position',\n 'visibility',\n 'scope',\n 'accessLevel',\n 'working',\n ]\n const hasMetadataChanges = Object.keys(payload).some((key) => metadataFields.includes(key))\n\n if (hasMetadataChanges) {\n tags.push({ type: 'view', id: viewId })\n tags.push(getScopeTag(viewType, projectName))\n }\n\n return tags\n },\n },\n deleteView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled, getState }) => {\n const { viewId, projectName, viewType } = arg\n const state = getState()\n\n // Optimistically remove the view from the list\n const patches: any[] = []\n\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData('listViews', { viewType, projectName }, (draft) => {\n return draft.filter((view) => view.id !== viewId)\n }),\n ),\n )\n\n // Check both project and studio level for base and default views\n const scopesToCheck = [\n { projectName },\n { projectName: undefined }, // studio level\n ]\n const queriesToCheck = ['getBaseView', 'getDefaultView'] as const\n\n for (const scope of scopesToCheck) {\n for (const queryName of queriesToCheck) {\n const currentView = getViewsApi.endpoints[queryName].select({\n viewType,\n projectName: scope.projectName,\n })(state)\n\n if (currentView?.isSuccess && currentView.data?.id === viewId) {\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData(\n queryName,\n { viewType, projectName: scope.projectName },\n () => null as any,\n ),\n ),\n )\n }\n }\n }\n\n try {\n await queryFulfilled\n } catch (error) {\n // If the query failed, roll back all optimistic updates\n patches.forEach((patch) => patch.undo())\n console.error('Failed to delete view:', error)\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n // updates the view list cache for a specific view type and project\n invalidatesTags: (_r, _e, { viewType, projectName, viewId }) => [\n { type: 'view', id: viewId },\n getScopeTag(viewType, projectName),\n getScopeTag(viewType, undefined),\n ],\n },\n setDefaultView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled, getState }) => {\n const { setDefaultViewRequestModel, projectName, viewType } = arg\n const { viewId } = setDefaultViewRequestModel\n const state = getState()\n // get current state of default view\n const currentDefaultView = getViewsApi.endpoints.getDefaultView.select({\n viewType,\n projectName,\n })(state)\n\n // check if there is even a cache for the default view\n if (currentDefaultView?.isSuccess && currentDefaultView.data?.id) {\n // Optimistically update the default view\n const patch = dispatch(\n getViewsApi.util.updateQueryData(\n 'getDefaultView',\n { viewType, projectName },\n (draft) => {\n if (draft) {\n // Try to find the view in the listViews cache\n const listViewData = getViewsApi.endpoints.listViews.select({\n viewType,\n projectName,\n })(state)\n const view = listViewData?.data?.find((v) => v.id === viewId)\n\n if (view) {\n // If the view is found in the listViews cache, update the getDefaultView cache with the full view data\n Object.assign(draft, view)\n } else {\n // If the view is not found, only update the ID\n draft.id = viewId\n }\n }\n },\n ),\n )\n\n try {\n await queryFulfilled\n } catch (error) {\n // If the query failed, we need to roll back the optimistic update\n patch.undo()\n console.error('Failed to set default view:', error)\n }\n } else {\n console.warn(\n 'No current default view found, skipping optimistic update and invalidating default view cache',\n )\n // If there is no current default view, we skip the optimistic update\n // it will be handled by the invalidation below\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n // updates the default view cache for a specific view type and project\n invalidatesTags: (_r, _e, { viewType, projectName, setDefaultViewRequestModel }) => [\n { type: 'view', id: setDefaultViewRequestModel.viewId },\n getScopeTag(viewType, projectName),\n ],\n },\n },\n})\n\nexport const {\n useCreateViewMutation,\n useUpdateViewMutation,\n useDeleteViewMutation,\n useSetDefaultViewMutation,\n} = updateViewsApi\nexport { updateViewsApi as viewsQueries }\n"],"names":["updateViewsApi","getViewsApi","arg","dispatch","queryFulfilled","getState","payload","user","patch","draft","newView","existingWorkingIndex","view","existingId","a","b","workingViewPatch","updatedWorkingView","baseViewPatch","newBaseView","uuidv4","error","_r","_e","viewType","projectName","getScopeTag","viewId","patches","v","tags","metadataFields","key","state","scopesToCheck","queriesToCheck","scope","queryName","currentView","setDefaultViewRequestModel","currentDefaultView","useCreateViewMutation","useUpdateViewMutation","useDeleteViewMutation","useSetDefaultViewMutation"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"updateViews.cjs.js","sources":["../../../../../../src/api/queries/views/updateViews.ts"],"sourcesContent":["import type { ViewListItemModel } from '@shared/api/generated'\nimport { getScopeTag, getViewsApi } from './getViews'\nimport { v4 as uuidv4 } from 'uuid'\n\nconst updateViewsApi = getViewsApi.enhanceEndpoints({\n endpoints: {\n createView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled, getState }) => {\n const { payload } = arg\n const state = getState()\n // @ts-expect-error - user is not typed in the state\n const user = state.user?.name\n\n // Optimistically update the view list\n const patch = dispatch(\n getViewsApi.util.updateQueryData(\n 'listViews',\n { viewType: arg.viewType, projectName: arg.projectName },\n (draft) => {\n const newView: ViewListItemModel = {\n ...payload,\n working: payload.working || false,\n scope: arg.projectName ? 'project' : 'studio',\n visibility: 'private',\n position: draft.length + 1, // Add to the end of the list\n owner: user,\n accessLevel: 30,\n }\n if (payload.working) {\n // For working views, find and replace the existing working view\n const existingWorkingIndex = draft.findIndex((view) => view.working === true)\n if (existingWorkingIndex !== -1) {\n // Keep the existing ID but update all other properties\n const existingId = draft[existingWorkingIndex].id\n draft[existingWorkingIndex] = { ...newView, id: existingId }\n } else {\n // No existing working view, add the new one\n draft.push(newView)\n }\n } else {\n // For non-working views, add to the list as usual\n draft.push(newView)\n }\n\n // finally sort the view by position and then by label\n draft.sort((a, b) => {\n if (a.position !== b.position) {\n return a.position - b.position\n }\n return a.label.localeCompare(b.label)\n })\n },\n ),\n )\n\n // Also update the getWorkingView cache if this is a working view\n let workingViewPatch\n if (payload.working) {\n workingViewPatch = dispatch(\n getViewsApi.util.updateQueryData(\n 'getWorkingView',\n { viewType: arg.viewType, projectName: arg.projectName },\n (draft) => {\n // Preserve the existing ID if there's already a working view\n const existingId = draft?.id\n const updatedWorkingView = {\n ...payload,\n working: true,\n scope: arg.projectName ? 'project' : 'studio',\n visibility: 'private',\n owner: user,\n ...(existingId && { id: existingId }), // Keep existing ID if it exists\n }\n // Update the working view cache with the new view data\n Object.assign(draft, updatedWorkingView)\n },\n ),\n )\n }\n\n let baseViewPatch\n\n if (payload.label === '__base__') {\n const newBaseView = {\n id: uuidv4(),\n ...payload,\n working: false,\n scope: arg.projectName ? 'project' : 'studio',\n visibility: 'private',\n owner: user,\n accessLevel: 30,\n position: 0,\n }\n\n baseViewPatch = dispatch(\n getViewsApi.util.updateQueryData(\n 'getBaseView',\n { viewType: arg.viewType, projectName: arg.projectName },\n (draft) => {\n if (draft) {\n Object.assign(draft, newBaseView)\n }\n },\n ),\n )\n\n // If the cache wasn't updated (because it didn't exist), upsert it\n if (!baseViewPatch?.patches?.length) {\n dispatch(\n getViewsApi.util.upsertQueryData(\n 'getBaseView',\n { viewType: arg.viewType, projectName: arg.projectName },\n newBaseView as any,\n ),\n )\n }\n }\n\n try {\n await queryFulfilled\n } catch (error) {\n patch.undo()\n if (workingViewPatch) workingViewPatch.undo()\n if (baseViewPatch) baseViewPatch.undo()\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n // updates the view list cache for a specific view type and project\n invalidatesTags: (_r, _e, { viewType, projectName, payload }) => [\n { type: 'view', id: payload.id },\n getScopeTag(viewType, projectName),\n ],\n },\n updateView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled }) => {\n const { viewId, payload, viewType, projectName } = arg\n\n const patches: any[] = []\n\n // 1. Update listViews\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData('listViews', { viewType, projectName }, (draft) => {\n const view = draft.find((v) => v.id === viewId)\n if (view) {\n Object.assign(view, payload)\n }\n }),\n ),\n )\n\n // 2. Update getWorkingView\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData(\n 'getWorkingView',\n { viewType, projectName },\n (draft) => {\n if (draft?.id === viewId) {\n Object.assign(draft, payload)\n }\n },\n ),\n ),\n )\n\n // 3. Update getDefaultView\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData(\n 'getDefaultView',\n { viewType, projectName },\n (draft) => {\n if (draft?.id === viewId) {\n Object.assign(draft, payload)\n }\n },\n ),\n ),\n )\n\n // 4. Update getView\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData(\n 'getView',\n { viewType, viewId, projectName },\n (draft) => {\n if (draft) {\n Object.assign(draft, payload)\n }\n },\n ),\n ),\n )\n\n try {\n await queryFulfilled\n } catch (error) {\n patches.forEach((patch) => patch.undo())\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n invalidatesTags: (_r, _e, { viewType, projectName, viewId, payload }) => {\n const tags: any[] = []\n\n // Only invalidate when metadata fields (label, owner, etc.) change.\n // For settings-only updates the optimistic cache patches are sufficient —\n // emitting the view ID tag here would trigger a background refetch that races\n // with any other in-flight rapid mutations and temporarily reverts the cache\n // to a stale server response, causing a visible \"previous view\" flicker.\n const metadataFields = [\n 'label',\n 'owner',\n 'position',\n 'visibility',\n 'scope',\n 'accessLevel',\n 'working',\n ]\n const hasMetadataChanges = Object.keys(payload).some((key) => metadataFields.includes(key))\n\n if (hasMetadataChanges) {\n tags.push({ type: 'view', id: viewId })\n tags.push(getScopeTag(viewType, projectName))\n }\n\n return tags\n },\n },\n deleteView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled, getState }) => {\n const { viewId, projectName, viewType } = arg\n const state = getState()\n\n // Optimistically remove the view from the list\n const patches: any[] = []\n\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData('listViews', { viewType, projectName }, (draft) => {\n return draft.filter((view) => view.id !== viewId)\n }),\n ),\n )\n\n // Check both project and studio level for base and default views\n const scopesToCheck = [\n { projectName },\n { projectName: undefined }, // studio level\n ]\n const queriesToCheck = ['getBaseView', 'getDefaultView'] as const\n\n for (const scope of scopesToCheck) {\n for (const queryName of queriesToCheck) {\n const currentView = getViewsApi.endpoints[queryName].select({\n viewType,\n projectName: scope.projectName,\n })(state)\n\n if (currentView?.isSuccess && currentView.data?.id === viewId) {\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData(\n queryName,\n { viewType, projectName: scope.projectName },\n () => null as any,\n ),\n ),\n )\n }\n }\n }\n\n try {\n await queryFulfilled\n } catch (error) {\n // If the query failed, roll back all optimistic updates\n patches.forEach((patch) => patch.undo())\n console.error('Failed to delete view:', error)\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n // updates the view list cache for a specific view type and project\n invalidatesTags: (_r, _e, { viewType, projectName, viewId }) => [\n { type: 'view', id: viewId },\n getScopeTag(viewType, projectName),\n getScopeTag(viewType, undefined),\n ],\n },\n setDefaultView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled, getState }) => {\n const { setDefaultViewRequestModel, projectName, viewType } = arg\n const { viewId } = setDefaultViewRequestModel\n const state = getState()\n // get current state of default view\n const currentDefaultView = getViewsApi.endpoints.getDefaultView.select({\n viewType,\n projectName,\n })(state)\n\n // check if there is even a cache for the default view\n if (currentDefaultView?.isSuccess && currentDefaultView.data?.id) {\n // Optimistically update the default view\n const patch = dispatch(\n getViewsApi.util.updateQueryData(\n 'getDefaultView',\n { viewType, projectName },\n (draft) => {\n if (draft) {\n // Try to find the view in the listViews cache\n const listViewData = getViewsApi.endpoints.listViews.select({\n viewType,\n projectName,\n })(state)\n const view = listViewData?.data?.find((v) => v.id === viewId)\n\n if (view) {\n // If the view is found in the listViews cache, update the getDefaultView cache with the full view data\n Object.assign(draft, view)\n } else {\n // If the view is not found, only update the ID\n draft.id = viewId\n }\n }\n },\n ),\n )\n\n try {\n await queryFulfilled\n } catch (error) {\n // If the query failed, we need to roll back the optimistic update\n patch.undo()\n console.error('Failed to set default view:', error)\n }\n } else {\n console.warn(\n 'No current default view found, skipping optimistic update and invalidating default view cache',\n )\n // If there is no current default view, we skip the optimistic update\n // it will be handled by the invalidation below\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n // updates the default view cache for a specific view type and project\n invalidatesTags: (_r, _e, { viewType, projectName, setDefaultViewRequestModel }) => [\n { type: 'view', id: setDefaultViewRequestModel.viewId },\n getScopeTag(viewType, projectName),\n ],\n },\n },\n})\n\nexport const {\n useCreateViewMutation,\n useUpdateViewMutation,\n useDeleteViewMutation,\n useSetDefaultViewMutation,\n} = updateViewsApi\nexport { updateViewsApi as viewsQueries }\n"],"names":["updateViewsApi","getViewsApi","arg","dispatch","queryFulfilled","getState","payload","user","patch","draft","newView","existingWorkingIndex","view","existingId","a","b","workingViewPatch","updatedWorkingView","baseViewPatch","newBaseView","uuidv4","error","_r","_e","viewType","projectName","getScopeTag","viewId","patches","v","tags","metadataFields","key","state","scopesToCheck","queriesToCheck","scope","queryName","currentView","setDefaultViewRequestModel","currentDefaultView","useCreateViewMutation","useUpdateViewMutation","useDeleteViewMutation","useSetDefaultViewMutation"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateViews.es.js","sources":["../../../../../../src/api/queries/views/updateViews.ts"],"sourcesContent":["import { ViewListItemModel } from '@shared/api/generated'\nimport { getScopeTag, getViewsApi } from './getViews'\nimport { v4 as uuidv4 } from 'uuid'\n\nconst updateViewsApi = getViewsApi.enhanceEndpoints({\n endpoints: {\n createView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled, getState }) => {\n const { payload } = arg\n const state = getState()\n // @ts-expect-error - user is not typed in the state\n const user = state.user?.name\n\n // Optimistically update the view list\n const patch = dispatch(\n getViewsApi.util.updateQueryData(\n 'listViews',\n { viewType: arg.viewType, projectName: arg.projectName },\n (draft) => {\n const newView: ViewListItemModel = {\n ...payload,\n working: payload.working || false,\n scope: arg.projectName ? 'project' : 'studio',\n visibility: 'private',\n position: draft.length + 1, // Add to the end of the list\n owner: user,\n accessLevel: 30,\n }\n if (payload.working) {\n // For working views, find and replace the existing working view\n const existingWorkingIndex = draft.findIndex((view) => view.working === true)\n if (existingWorkingIndex !== -1) {\n // Keep the existing ID but update all other properties\n const existingId = draft[existingWorkingIndex].id\n draft[existingWorkingIndex] = { ...newView, id: existingId }\n } else {\n // No existing working view, add the new one\n draft.push(newView)\n }\n } else {\n // For non-working views, add to the list as usual\n draft.push(newView)\n }\n\n // finally sort the view by position and then by label\n draft.sort((a, b) => {\n if (a.position !== b.position) {\n return a.position - b.position\n }\n return a.label.localeCompare(b.label)\n })\n },\n ),\n )\n\n // Also update the getWorkingView cache if this is a working view\n let workingViewPatch\n if (payload.working) {\n workingViewPatch = dispatch(\n getViewsApi.util.updateQueryData(\n 'getWorkingView',\n { viewType: arg.viewType, projectName: arg.projectName },\n (draft) => {\n // Preserve the existing ID if there's already a working view\n const existingId = draft?.id\n const updatedWorkingView = {\n ...payload,\n working: true,\n scope: arg.projectName ? 'project' : 'studio',\n visibility: 'private',\n owner: user,\n ...(existingId && { id: existingId }), // Keep existing ID if it exists\n }\n // Update the working view cache with the new view data\n Object.assign(draft, updatedWorkingView)\n },\n ),\n )\n }\n\n let baseViewPatch\n\n if (payload.label === '__base__') {\n const newBaseView = {\n id: uuidv4(),\n ...payload,\n working: false,\n scope: arg.projectName ? 'project' : 'studio',\n visibility: 'private',\n owner: user,\n accessLevel: 30,\n position: 0,\n }\n\n baseViewPatch = dispatch(\n getViewsApi.util.updateQueryData(\n 'getBaseView',\n { viewType: arg.viewType, projectName: arg.projectName },\n (draft) => {\n if (draft) {\n Object.assign(draft, newBaseView)\n }\n },\n ),\n )\n\n // If the cache wasn't updated (because it didn't exist), upsert it\n if (!baseViewPatch?.patches?.length) {\n dispatch(\n getViewsApi.util.upsertQueryData(\n 'getBaseView',\n { viewType: arg.viewType, projectName: arg.projectName },\n newBaseView as any,\n ),\n )\n }\n }\n\n try {\n await queryFulfilled\n } catch (error) {\n patch.undo()\n if (workingViewPatch) workingViewPatch.undo()\n if (baseViewPatch) baseViewPatch.undo()\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n // updates the view list cache for a specific view type and project\n invalidatesTags: (_r, _e, { viewType, projectName, payload }) => [\n { type: 'view', id: payload.id },\n getScopeTag(viewType, projectName),\n ],\n },\n updateView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled }) => {\n const { viewId, payload, viewType, projectName } = arg\n\n const patches: any[] = []\n\n // 1. Update listViews\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData('listViews', { viewType, projectName }, (draft) => {\n const view = draft.find((v) => v.id === viewId)\n if (view) {\n Object.assign(view, payload)\n }\n }),\n ),\n )\n\n // 2. Update getWorkingView\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData(\n 'getWorkingView',\n { viewType, projectName },\n (draft) => {\n if (draft?.id === viewId) {\n Object.assign(draft, payload)\n }\n },\n ),\n ),\n )\n\n // 3. Update getDefaultView\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData(\n 'getDefaultView',\n { viewType, projectName },\n (draft) => {\n if (draft?.id === viewId) {\n Object.assign(draft, payload)\n }\n },\n ),\n ),\n )\n\n // 4. Update getView\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData(\n 'getView',\n { viewType, viewId, projectName },\n (draft) => {\n if (draft) {\n Object.assign(draft, payload)\n }\n },\n ),\n ),\n )\n\n try {\n await queryFulfilled\n } catch (error) {\n patches.forEach((patch) => patch.undo())\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n invalidatesTags: (_r, _e, { viewType, projectName, viewId, payload }) => {\n const tags: any[] = []\n\n // Only invalidate when metadata fields (label, owner, etc.) change.\n // For settings-only updates the optimistic cache patches are sufficient —\n // emitting the view ID tag here would trigger a background refetch that races\n // with any other in-flight rapid mutations and temporarily reverts the cache\n // to a stale server response, causing a visible \"previous view\" flicker.\n const metadataFields = [\n 'label',\n 'owner',\n 'position',\n 'visibility',\n 'scope',\n 'accessLevel',\n 'working',\n ]\n const hasMetadataChanges = Object.keys(payload).some((key) => metadataFields.includes(key))\n\n if (hasMetadataChanges) {\n tags.push({ type: 'view', id: viewId })\n tags.push(getScopeTag(viewType, projectName))\n }\n\n return tags\n },\n },\n deleteView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled, getState }) => {\n const { viewId, projectName, viewType } = arg\n const state = getState()\n\n // Optimistically remove the view from the list\n const patches: any[] = []\n\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData('listViews', { viewType, projectName }, (draft) => {\n return draft.filter((view) => view.id !== viewId)\n }),\n ),\n )\n\n // Check both project and studio level for base and default views\n const scopesToCheck = [\n { projectName },\n { projectName: undefined }, // studio level\n ]\n const queriesToCheck = ['getBaseView', 'getDefaultView'] as const\n\n for (const scope of scopesToCheck) {\n for (const queryName of queriesToCheck) {\n const currentView = getViewsApi.endpoints[queryName].select({\n viewType,\n projectName: scope.projectName,\n })(state)\n\n if (currentView?.isSuccess && currentView.data?.id === viewId) {\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData(\n queryName,\n { viewType, projectName: scope.projectName },\n () => null as any,\n ),\n ),\n )\n }\n }\n }\n\n try {\n await queryFulfilled\n } catch (error) {\n // If the query failed, roll back all optimistic updates\n patches.forEach((patch) => patch.undo())\n console.error('Failed to delete view:', error)\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n // updates the view list cache for a specific view type and project\n invalidatesTags: (_r, _e, { viewType, projectName, viewId }) => [\n { type: 'view', id: viewId },\n getScopeTag(viewType, projectName),\n getScopeTag(viewType, undefined),\n ],\n },\n setDefaultView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled, getState }) => {\n const { setDefaultViewRequestModel, projectName, viewType } = arg\n const { viewId } = setDefaultViewRequestModel\n const state = getState()\n // get current state of default view\n const currentDefaultView = getViewsApi.endpoints.getDefaultView.select({\n viewType,\n projectName,\n })(state)\n\n // check if there is even a cache for the default view\n if (currentDefaultView?.isSuccess && currentDefaultView.data?.id) {\n // Optimistically update the default view\n const patch = dispatch(\n getViewsApi.util.updateQueryData(\n 'getDefaultView',\n { viewType, projectName },\n (draft) => {\n if (draft) {\n // Try to find the view in the listViews cache\n const listViewData = getViewsApi.endpoints.listViews.select({\n viewType,\n projectName,\n })(state)\n const view = listViewData?.data?.find((v) => v.id === viewId)\n\n if (view) {\n // If the view is found in the listViews cache, update the getDefaultView cache with the full view data\n Object.assign(draft, view)\n } else {\n // If the view is not found, only update the ID\n draft.id = viewId\n }\n }\n },\n ),\n )\n\n try {\n await queryFulfilled\n } catch (error) {\n // If the query failed, we need to roll back the optimistic update\n patch.undo()\n console.error('Failed to set default view:', error)\n }\n } else {\n console.warn(\n 'No current default view found, skipping optimistic update and invalidating default view cache',\n )\n // If there is no current default view, we skip the optimistic update\n // it will be handled by the invalidation below\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n // updates the default view cache for a specific view type and project\n invalidatesTags: (_r, _e, { viewType, projectName, setDefaultViewRequestModel }) => [\n { type: 'view', id: setDefaultViewRequestModel.viewId },\n getScopeTag(viewType, projectName),\n ],\n },\n },\n})\n\nexport const {\n useCreateViewMutation,\n useUpdateViewMutation,\n useDeleteViewMutation,\n useSetDefaultViewMutation,\n} = updateViewsApi\nexport { updateViewsApi as viewsQueries }\n"],"names":["updateViewsApi","getViewsApi","arg","dispatch","queryFulfilled","getState","payload","user","patch","draft","newView","existingWorkingIndex","view","existingId","a","b","workingViewPatch","updatedWorkingView","baseViewPatch","newBaseView","uuidv4","error","_r","_e","viewType","projectName","getScopeTag","viewId","patches","v","tags","metadataFields","key","state","scopesToCheck","queriesToCheck","scope","queryName","currentView","setDefaultViewRequestModel","currentDefaultView","useCreateViewMutation","useUpdateViewMutation","useDeleteViewMutation","useSetDefaultViewMutation"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"updateViews.es.js","sources":["../../../../../../src/api/queries/views/updateViews.ts"],"sourcesContent":["import type { ViewListItemModel } from '@shared/api/generated'\nimport { getScopeTag, getViewsApi } from './getViews'\nimport { v4 as uuidv4 } from 'uuid'\n\nconst updateViewsApi = getViewsApi.enhanceEndpoints({\n endpoints: {\n createView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled, getState }) => {\n const { payload } = arg\n const state = getState()\n // @ts-expect-error - user is not typed in the state\n const user = state.user?.name\n\n // Optimistically update the view list\n const patch = dispatch(\n getViewsApi.util.updateQueryData(\n 'listViews',\n { viewType: arg.viewType, projectName: arg.projectName },\n (draft) => {\n const newView: ViewListItemModel = {\n ...payload,\n working: payload.working || false,\n scope: arg.projectName ? 'project' : 'studio',\n visibility: 'private',\n position: draft.length + 1, // Add to the end of the list\n owner: user,\n accessLevel: 30,\n }\n if (payload.working) {\n // For working views, find and replace the existing working view\n const existingWorkingIndex = draft.findIndex((view) => view.working === true)\n if (existingWorkingIndex !== -1) {\n // Keep the existing ID but update all other properties\n const existingId = draft[existingWorkingIndex].id\n draft[existingWorkingIndex] = { ...newView, id: existingId }\n } else {\n // No existing working view, add the new one\n draft.push(newView)\n }\n } else {\n // For non-working views, add to the list as usual\n draft.push(newView)\n }\n\n // finally sort the view by position and then by label\n draft.sort((a, b) => {\n if (a.position !== b.position) {\n return a.position - b.position\n }\n return a.label.localeCompare(b.label)\n })\n },\n ),\n )\n\n // Also update the getWorkingView cache if this is a working view\n let workingViewPatch\n if (payload.working) {\n workingViewPatch = dispatch(\n getViewsApi.util.updateQueryData(\n 'getWorkingView',\n { viewType: arg.viewType, projectName: arg.projectName },\n (draft) => {\n // Preserve the existing ID if there's already a working view\n const existingId = draft?.id\n const updatedWorkingView = {\n ...payload,\n working: true,\n scope: arg.projectName ? 'project' : 'studio',\n visibility: 'private',\n owner: user,\n ...(existingId && { id: existingId }), // Keep existing ID if it exists\n }\n // Update the working view cache with the new view data\n Object.assign(draft, updatedWorkingView)\n },\n ),\n )\n }\n\n let baseViewPatch\n\n if (payload.label === '__base__') {\n const newBaseView = {\n id: uuidv4(),\n ...payload,\n working: false,\n scope: arg.projectName ? 'project' : 'studio',\n visibility: 'private',\n owner: user,\n accessLevel: 30,\n position: 0,\n }\n\n baseViewPatch = dispatch(\n getViewsApi.util.updateQueryData(\n 'getBaseView',\n { viewType: arg.viewType, projectName: arg.projectName },\n (draft) => {\n if (draft) {\n Object.assign(draft, newBaseView)\n }\n },\n ),\n )\n\n // If the cache wasn't updated (because it didn't exist), upsert it\n if (!baseViewPatch?.patches?.length) {\n dispatch(\n getViewsApi.util.upsertQueryData(\n 'getBaseView',\n { viewType: arg.viewType, projectName: arg.projectName },\n newBaseView as any,\n ),\n )\n }\n }\n\n try {\n await queryFulfilled\n } catch (error) {\n patch.undo()\n if (workingViewPatch) workingViewPatch.undo()\n if (baseViewPatch) baseViewPatch.undo()\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n // updates the view list cache for a specific view type and project\n invalidatesTags: (_r, _e, { viewType, projectName, payload }) => [\n { type: 'view', id: payload.id },\n getScopeTag(viewType, projectName),\n ],\n },\n updateView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled }) => {\n const { viewId, payload, viewType, projectName } = arg\n\n const patches: any[] = []\n\n // 1. Update listViews\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData('listViews', { viewType, projectName }, (draft) => {\n const view = draft.find((v) => v.id === viewId)\n if (view) {\n Object.assign(view, payload)\n }\n }),\n ),\n )\n\n // 2. Update getWorkingView\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData(\n 'getWorkingView',\n { viewType, projectName },\n (draft) => {\n if (draft?.id === viewId) {\n Object.assign(draft, payload)\n }\n },\n ),\n ),\n )\n\n // 3. Update getDefaultView\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData(\n 'getDefaultView',\n { viewType, projectName },\n (draft) => {\n if (draft?.id === viewId) {\n Object.assign(draft, payload)\n }\n },\n ),\n ),\n )\n\n // 4. Update getView\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData(\n 'getView',\n { viewType, viewId, projectName },\n (draft) => {\n if (draft) {\n Object.assign(draft, payload)\n }\n },\n ),\n ),\n )\n\n try {\n await queryFulfilled\n } catch (error) {\n patches.forEach((patch) => patch.undo())\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n invalidatesTags: (_r, _e, { viewType, projectName, viewId, payload }) => {\n const tags: any[] = []\n\n // Only invalidate when metadata fields (label, owner, etc.) change.\n // For settings-only updates the optimistic cache patches are sufficient —\n // emitting the view ID tag here would trigger a background refetch that races\n // with any other in-flight rapid mutations and temporarily reverts the cache\n // to a stale server response, causing a visible \"previous view\" flicker.\n const metadataFields = [\n 'label',\n 'owner',\n 'position',\n 'visibility',\n 'scope',\n 'accessLevel',\n 'working',\n ]\n const hasMetadataChanges = Object.keys(payload).some((key) => metadataFields.includes(key))\n\n if (hasMetadataChanges) {\n tags.push({ type: 'view', id: viewId })\n tags.push(getScopeTag(viewType, projectName))\n }\n\n return tags\n },\n },\n deleteView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled, getState }) => {\n const { viewId, projectName, viewType } = arg\n const state = getState()\n\n // Optimistically remove the view from the list\n const patches: any[] = []\n\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData('listViews', { viewType, projectName }, (draft) => {\n return draft.filter((view) => view.id !== viewId)\n }),\n ),\n )\n\n // Check both project and studio level for base and default views\n const scopesToCheck = [\n { projectName },\n { projectName: undefined }, // studio level\n ]\n const queriesToCheck = ['getBaseView', 'getDefaultView'] as const\n\n for (const scope of scopesToCheck) {\n for (const queryName of queriesToCheck) {\n const currentView = getViewsApi.endpoints[queryName].select({\n viewType,\n projectName: scope.projectName,\n })(state)\n\n if (currentView?.isSuccess && currentView.data?.id === viewId) {\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData(\n queryName,\n { viewType, projectName: scope.projectName },\n () => null as any,\n ),\n ),\n )\n }\n }\n }\n\n try {\n await queryFulfilled\n } catch (error) {\n // If the query failed, roll back all optimistic updates\n patches.forEach((patch) => patch.undo())\n console.error('Failed to delete view:', error)\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n // updates the view list cache for a specific view type and project\n invalidatesTags: (_r, _e, { viewType, projectName, viewId }) => [\n { type: 'view', id: viewId },\n getScopeTag(viewType, projectName),\n getScopeTag(viewType, undefined),\n ],\n },\n setDefaultView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled, getState }) => {\n const { setDefaultViewRequestModel, projectName, viewType } = arg\n const { viewId } = setDefaultViewRequestModel\n const state = getState()\n // get current state of default view\n const currentDefaultView = getViewsApi.endpoints.getDefaultView.select({\n viewType,\n projectName,\n })(state)\n\n // check if there is even a cache for the default view\n if (currentDefaultView?.isSuccess && currentDefaultView.data?.id) {\n // Optimistically update the default view\n const patch = dispatch(\n getViewsApi.util.updateQueryData(\n 'getDefaultView',\n { viewType, projectName },\n (draft) => {\n if (draft) {\n // Try to find the view in the listViews cache\n const listViewData = getViewsApi.endpoints.listViews.select({\n viewType,\n projectName,\n })(state)\n const view = listViewData?.data?.find((v) => v.id === viewId)\n\n if (view) {\n // If the view is found in the listViews cache, update the getDefaultView cache with the full view data\n Object.assign(draft, view)\n } else {\n // If the view is not found, only update the ID\n draft.id = viewId\n }\n }\n },\n ),\n )\n\n try {\n await queryFulfilled\n } catch (error) {\n // If the query failed, we need to roll back the optimistic update\n patch.undo()\n console.error('Failed to set default view:', error)\n }\n } else {\n console.warn(\n 'No current default view found, skipping optimistic update and invalidating default view cache',\n )\n // If there is no current default view, we skip the optimistic update\n // it will be handled by the invalidation below\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n // updates the default view cache for a specific view type and project\n invalidatesTags: (_r, _e, { viewType, projectName, setDefaultViewRequestModel }) => [\n { type: 'view', id: setDefaultViewRequestModel.viewId },\n getScopeTag(viewType, projectName),\n ],\n },\n },\n})\n\nexport const {\n useCreateViewMutation,\n useUpdateViewMutation,\n useDeleteViewMutation,\n useSetDefaultViewMutation,\n} = updateViewsApi\nexport { updateViewsApi as viewsQueries }\n"],"names":["updateViewsApi","getViewsApi","arg","dispatch","queryFulfilled","getState","payload","user","patch","draft","newView","existingWorkingIndex","view","existingId","a","b","workingViewPatch","updatedWorkingView","baseViewPatch","newBaseView","uuidv4","error","_r","_e","viewType","projectName","getScopeTag","viewId","patches","v","tags","metadataFields","key","state","scopesToCheck","queriesToCheck","scope","queryName","currentView","setDefaultViewRequestModel","currentDefaultView","useCreateViewMutation","useUpdateViewMutation","useDeleteViewMutation","useSetDefaultViewMutation"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getWatchers.cjs.js","sources":["../../../../../../src/api/queries/watchers/getWatchers.ts"],"sourcesContent":["import { activityFeedApi
|
|
1
|
+
{"version":3,"file":"getWatchers.cjs.js","sources":["../../../../../../src/api/queries/watchers/getWatchers.ts"],"sourcesContent":["import { activityFeedApi } from '@shared/api/generated'\nimport type { GetEntityWatchersApiArg } from '@shared/api/generated'\nimport { FetchBaseQueryError } from '@reduxjs/toolkit/query'\n\nconst enhancedApi = activityFeedApi.enhanceEndpoints({\n endpoints: {\n getEntityWatchers: {},\n setEntityWatchers: {},\n },\n})\n\ntype GetEntitiesWatchersApiArg = {\n entities: GetEntityWatchersApiArg[]\n}\n\ninterface GetEntitiesWatchers extends GetEntityWatchersApiArg {\n watchers: string[]\n}\n\ntype GetEntitiesWatchersResult = GetEntitiesWatchers[]\n\ntype SetEntitiesWatchersApiArg = {\n entities: GetEntitiesWatchers[]\n}\n\n// GET WATCHERS\nconst injectedApi = enhancedApi.injectEndpoints({\n endpoints: (build) => ({\n getEntitiesWatchers: build.query<GetEntitiesWatchersResult, GetEntitiesWatchersApiArg>({\n async queryFn({ entities = [] }, { dispatch }) {\n try {\n const entitiesWatchers = await Promise.all(\n entities.map(async (entity) => {\n const result = await dispatch(\n enhancedApi.endpoints.getEntityWatchers.initiate(entity, { forceRefetch: true }),\n )\n return {\n ...entity,\n watchers: result.data?.watchers || [],\n }\n }),\n )\n\n return { data: entitiesWatchers }\n } catch (error) {\n // handle errors appropriately\n console.error(error)\n throw error\n }\n },\n providesTags: (_result, _error, { entities }) =>\n entities.flatMap((entity) => [\n { type: 'watchers', id: entity.entityId },\n { type: 'watchers', id: `${entity.entityType.toUpperCase()}-LIST` },\n ]),\n }),\n }),\n})\n\n// UPDATE WATCHERS\nconst injectedApi2 = injectedApi.injectEndpoints({\n endpoints: (build) => ({\n setEntitiesWatchers: build.mutation<undefined, SetEntitiesWatchersApiArg>({\n async queryFn({ entities = [] }, { dispatch }) {\n const promises = entities.map((entity) =>\n dispatch(\n enhancedApi.endpoints.setEntityWatchers.initiate({\n entityId: entity.entityId,\n entityType: entity.entityType,\n projectName: entity.projectName,\n watchersModel: { watchers: entity.watchers },\n }),\n ),\n )\n\n try {\n await Promise.all(promises)\n return { data: undefined }\n } catch (e: any) {\n const error = { status: 'FETCH_ERROR', error: e.message } as FetchBaseQueryError\n return { error }\n }\n },\n async onQueryStarted({ entities }, { dispatch, queryFulfilled, getState }) {\n const state = getState()\n const tags = entities.map((entity) => ({ type: 'watchers', id: entity.entityId }))\n // find all the affected query combinations by seeing which queries are invalidated by the tags\n const entries = enhancedApi.util.selectInvalidatedBy(state, tags)\n\n let patches: any[] = []\n\n try {\n // now update the cache for all affected queries\n entries.forEach((entry) => {\n const patch = dispatch(\n injectedApi.util.updateQueryData(\n 'getEntitiesWatchers',\n entry.originalArgs,\n (draft) => {\n entry.originalArgs.entities.forEach((entryEntity: GetEntityWatchersApiArg) => {\n // find the entity patch\n const entity = entities.find((e) => e.entityId === entryEntity.entityId)\n if (!entity) return\n // find the entity in the draft\n const entityDraft = draft.find((e) => e.entityId === entity.entityId)\n if (!entityDraft) throw new Error('Entity draft not found')\n const watchersPatch = entity.watchers\n\n // update draft\n entityDraft.watchers = watchersPatch\n })\n },\n ),\n )\n patches.push(patch)\n })\n\n await queryFulfilled\n } catch (error: any) {\n const message = `Error: ${error?.error?.data?.detail}` as any\n console.error(message, error)\n patches.forEach((patch) => patch?.undo())\n }\n },\n // invalidates all versions if any of the entities are tasks\n invalidatesTags: (_result, _error, { entities }) =>\n entities.some((entity) => entity.entityType === 'task')\n ? [{ type: 'watchers', id: 'VERSION-LIST' }]\n : [],\n }),\n }),\n})\n\nexport const { useGetEntitiesWatchersQuery, useSetEntitiesWatchersMutation } = injectedApi2\nexport { injectedApi2 as watchersQueries }\n"],"names":["enhancedApi","activityFeedApi","injectedApi","build","entities","dispatch","entity","result","error","_result","_error","injectedApi2","promises","queryFulfilled","getState","state","tags","entries","patches","entry","patch","draft","entryEntity","e","entityDraft","watchersPatch","message","useGetEntitiesWatchersQuery","useSetEntitiesWatchersMutation"],"mappings":"oxDAIA,MAAMA,EAAcC,EAAAA,IAAgB,iBAAiB,CACnD,UAAW,CACT,kBAAmB,CAAA,EACnB,kBAAmB,CAAA,CAAC,CAExB,CAAC,EAiBKC,EAAcF,EAAY,gBAAgB,CAC9C,UAAYG,IAAW,CACrB,oBAAqBA,EAAM,MAA4D,CACrF,MAAM,QAAQ,CAAE,SAAAC,EAAW,CAAA,CAAC,EAAK,CAAE,SAAAC,CAAA,EAAY,CAC7C,GAAI,CAaF,MAAO,CAAE,KAZgB,MAAM,QAAQ,IACrCD,EAAS,IAAI,MAAOE,GAAW,CAC7B,MAAMC,EAAS,MAAMF,EACnBL,EAAY,UAAU,kBAAkB,SAASM,EAAQ,CAAE,aAAc,GAAM,CAAA,EAEjF,MAAO,CACL,GAAGA,EACH,SAAUC,EAAO,MAAM,UAAY,CAAA,CAAC,CAExC,CAAC,CAAA,CAGY,CACjB,OAASC,EAAO,CAEd,cAAQ,MAAMA,CAAK,EACbA,CACR,CACF,EACA,aAAc,CAACC,EAASC,EAAQ,CAAE,SAAAN,KAChCA,EAAS,QAASE,GAAW,CAC3B,CAAE,KAAM,WAAY,GAAIA,EAAO,QAAA,EAC/B,CAAE,KAAM,WAAY,GAAI,GAAGA,EAAO,WAAW,YAAA,CAAa,OAAA,CAAQ,CACnE,CAAA,CACJ,CAAA,EAEL,CAAC,EAGKK,EAAeT,EAAY,gBAAgB,CAC/C,UAAYC,IAAW,CACrB,oBAAqBA,EAAM,SAA+C,CACxE,MAAM,QAAQ,CAAE,SAAAC,EAAW,CAAA,CAAC,EAAK,CAAE,SAAAC,CAAA,EAAY,CAC7C,MAAMO,EAAWR,EAAS,IAAKE,GAC7BD,EACEL,EAAY,UAAU,kBAAkB,SAAS,CAC/C,SAAUM,EAAO,SACjB,WAAYA,EAAO,WACnB,YAAaA,EAAO,YACpB,cAAe,CAAE,SAAUA,EAAO,QAAA,CAAS,CAC5C,CAAA,CACH,EAGF,GAAI,CACF,aAAM,QAAQ,IAAIM,CAAQ,EACnB,CAAE,KAAM,MAAA,CACjB,OAAS,EAAQ,CAEf,MAAO,CAAE,MADK,CAAE,OAAQ,cAAe,MAAO,EAAE,OAAA,CACvC,CACX,CACF,EACA,MAAM,eAAe,CAAE,SAAAR,CAAA,EAAY,CAAE,SAAAC,EAAU,eAAAQ,EAAgB,SAAAC,GAAY,CACzE,MAAMC,EAAQD,EAAA,EACRE,EAAOZ,EAAS,IAAKE,IAAY,CAAE,KAAM,WAAY,GAAIA,EAAO,QAAA,EAAW,EAE3EW,EAAUjB,EAAY,KAAK,oBAAoBe,EAAOC,CAAI,EAEhE,IAAIE,EAAiB,CAAA,EAErB,GAAI,CAEFD,EAAQ,QAASE,GAAU,CACzB,MAAMC,EAAQf,EACZH,EAAY,KAAK,gBACf,sBACAiB,EAAM,aACLE,GAAU,CACTF,EAAM,aAAa,SAAS,QAASG,GAAyC,CAE5E,MAAMhB,EAASF,EAAS,KAAMmB,GAAMA,EAAE,WAAaD,EAAY,QAAQ,EACvE,GAAI,CAAChB,EAAQ,OAEb,MAAMkB,EAAcH,EAAM,KAAME,GAAMA,EAAE,WAAajB,EAAO,QAAQ,EACpE,GAAI,CAACkB,EAAa,MAAM,IAAI,MAAM,wBAAwB,EAC1D,MAAMC,EAAgBnB,EAAO,SAG7BkB,EAAY,SAAWC,CACzB,CAAC,CACH,CAAA,CACF,EAEFP,EAAQ,KAAKE,CAAK,CACpB,CAAC,EAED,MAAMP,CACR,OAASL,EAAY,CACnB,MAAMkB,EAAU,UAAUlB,GAAO,OAAO,MAAM,MAAM,GACpD,QAAQ,MAAMkB,EAASlB,CAAK,EAC5BU,EAAQ,QAASE,GAAUA,GAAO,MAAM,CAC1C,CACF,EAEA,gBAAiB,CAACX,EAASC,EAAQ,CAAE,SAAAN,CAAA,IACnCA,EAAS,KAAME,GAAWA,EAAO,aAAe,MAAM,EAClD,CAAC,CAAE,KAAM,WAAY,GAAI,cAAA,CAAgB,EACzC,CAAA,CAAC,CACR,CAAA,EAEL,CAAC,EAEY,CAAE,4BAAAqB,EAA6B,+BAAAC,GAAmCjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getWatchers.es.js","sources":["../../../../../../src/api/queries/watchers/getWatchers.ts"],"sourcesContent":["import { activityFeedApi
|
|
1
|
+
{"version":3,"file":"getWatchers.es.js","sources":["../../../../../../src/api/queries/watchers/getWatchers.ts"],"sourcesContent":["import { activityFeedApi } from '@shared/api/generated'\nimport type { GetEntityWatchersApiArg } from '@shared/api/generated'\nimport { FetchBaseQueryError } from '@reduxjs/toolkit/query'\n\nconst enhancedApi = activityFeedApi.enhanceEndpoints({\n endpoints: {\n getEntityWatchers: {},\n setEntityWatchers: {},\n },\n})\n\ntype GetEntitiesWatchersApiArg = {\n entities: GetEntityWatchersApiArg[]\n}\n\ninterface GetEntitiesWatchers extends GetEntityWatchersApiArg {\n watchers: string[]\n}\n\ntype GetEntitiesWatchersResult = GetEntitiesWatchers[]\n\ntype SetEntitiesWatchersApiArg = {\n entities: GetEntitiesWatchers[]\n}\n\n// GET WATCHERS\nconst injectedApi = enhancedApi.injectEndpoints({\n endpoints: (build) => ({\n getEntitiesWatchers: build.query<GetEntitiesWatchersResult, GetEntitiesWatchersApiArg>({\n async queryFn({ entities = [] }, { dispatch }) {\n try {\n const entitiesWatchers = await Promise.all(\n entities.map(async (entity) => {\n const result = await dispatch(\n enhancedApi.endpoints.getEntityWatchers.initiate(entity, { forceRefetch: true }),\n )\n return {\n ...entity,\n watchers: result.data?.watchers || [],\n }\n }),\n )\n\n return { data: entitiesWatchers }\n } catch (error) {\n // handle errors appropriately\n console.error(error)\n throw error\n }\n },\n providesTags: (_result, _error, { entities }) =>\n entities.flatMap((entity) => [\n { type: 'watchers', id: entity.entityId },\n { type: 'watchers', id: `${entity.entityType.toUpperCase()}-LIST` },\n ]),\n }),\n }),\n})\n\n// UPDATE WATCHERS\nconst injectedApi2 = injectedApi.injectEndpoints({\n endpoints: (build) => ({\n setEntitiesWatchers: build.mutation<undefined, SetEntitiesWatchersApiArg>({\n async queryFn({ entities = [] }, { dispatch }) {\n const promises = entities.map((entity) =>\n dispatch(\n enhancedApi.endpoints.setEntityWatchers.initiate({\n entityId: entity.entityId,\n entityType: entity.entityType,\n projectName: entity.projectName,\n watchersModel: { watchers: entity.watchers },\n }),\n ),\n )\n\n try {\n await Promise.all(promises)\n return { data: undefined }\n } catch (e: any) {\n const error = { status: 'FETCH_ERROR', error: e.message } as FetchBaseQueryError\n return { error }\n }\n },\n async onQueryStarted({ entities }, { dispatch, queryFulfilled, getState }) {\n const state = getState()\n const tags = entities.map((entity) => ({ type: 'watchers', id: entity.entityId }))\n // find all the affected query combinations by seeing which queries are invalidated by the tags\n const entries = enhancedApi.util.selectInvalidatedBy(state, tags)\n\n let patches: any[] = []\n\n try {\n // now update the cache for all affected queries\n entries.forEach((entry) => {\n const patch = dispatch(\n injectedApi.util.updateQueryData(\n 'getEntitiesWatchers',\n entry.originalArgs,\n (draft) => {\n entry.originalArgs.entities.forEach((entryEntity: GetEntityWatchersApiArg) => {\n // find the entity patch\n const entity = entities.find((e) => e.entityId === entryEntity.entityId)\n if (!entity) return\n // find the entity in the draft\n const entityDraft = draft.find((e) => e.entityId === entity.entityId)\n if (!entityDraft) throw new Error('Entity draft not found')\n const watchersPatch = entity.watchers\n\n // update draft\n entityDraft.watchers = watchersPatch\n })\n },\n ),\n )\n patches.push(patch)\n })\n\n await queryFulfilled\n } catch (error: any) {\n const message = `Error: ${error?.error?.data?.detail}` as any\n console.error(message, error)\n patches.forEach((patch) => patch?.undo())\n }\n },\n // invalidates all versions if any of the entities are tasks\n invalidatesTags: (_result, _error, { entities }) =>\n entities.some((entity) => entity.entityType === 'task')\n ? [{ type: 'watchers', id: 'VERSION-LIST' }]\n : [],\n }),\n }),\n})\n\nexport const { useGetEntitiesWatchersQuery, useSetEntitiesWatchersMutation } = injectedApi2\nexport { injectedApi2 as watchersQueries }\n"],"names":["enhancedApi","activityFeedApi","injectedApi","build","entities","dispatch","entity","result","error","_result","_error","injectedApi2","promises","e","queryFulfilled","getState","state","tags","entries","patches","entry","patch","draft","entryEntity","entityDraft","watchersPatch","message","useGetEntitiesWatchersQuery","useSetEntitiesWatchersMutation"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccessSearchInput.cjs.js","sources":["../../../../../src/components/AccessSearchInput/AccessSearchInput.tsx"],"sourcesContent":["import React, { FC, useState, useRef, KeyboardEvent, ChangeEvent } from 'react'\nimport { matchSorter } from 'match-sorter'\nimport { InputText } from '@ynput/ayon-react-components'\nimport { AccessLevel } from '../AccessUser/AccessUser'\nimport * as Styled from './AccessSearchInput.styled'\nimport { AccessUser } from '../AccessUser/AccessUser'\nimport clsx from 'clsx'\nimport { ShareOption } from '@shared/api'\n\nconst MAX_USERS_DISPLAYED = 500\n// Email validation regex\nconst EMAIL_REGEX = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n\nexport interface AccessSearchInputProps extends React.HTMLAttributes<HTMLDivElement> {\n shareOptions: ShareOption[]\n existingAccess: string[] // Array of names already in access\n owner: string | undefined | null\n placeholder?: string\n disabled?: boolean\n mode?: 'internal' | 'external'\n onSelectOption: (option: ShareOption, accessLevel: AccessLevel) => void\n pt?: {\n list?: Partial<React.HTMLAttributes<HTMLUListElement>>\n }\n}\n\nexport const AccessSearchInput: FC<AccessSearchInputProps> = ({\n shareOptions,\n existingAccess,\n owner,\n placeholder = 'Add people or access groups',\n disabled = false,\n mode = 'internal',\n onSelectOption,\n pt,\n ...props\n}) => {\n const [searchValue, setSearchValue] = useState('')\n const [isOpen, setIsOpen] = useState(false)\n const [highlightedIndex, setHighlightedIndex] = useState(-1)\n const inputRef = useRef<HTMLInputElement>(null)\n\n // sort default by special groups __everyone__, __{type}__, team:, group:, user: and alphabetically\n const defaultSorted = shareOptions\n .filter((option) => !existingAccess.includes(option.value))\n .toSorted((a, b) => {\n const getRank = (option: ShareOption) => {\n if (option.value === '__everyone__') return 0\n if (option.value.startsWith('__')) return 1\n if (option.value.startsWith('team:')) return 2\n if (option.value.startsWith('group:')) return 3\n if (option.value.startsWith('user:')) return 4\n return 5\n }\n const rankA = getRank(a)\n const rankB = getRank(b)\n if (rankA !== rankB) return rankA - rankB\n return a.label.localeCompare(b.label)\n })\n\n // Filter and sort options based on search value\n const filteredOptions = (\n searchValue\n ? matchSorter(defaultSorted, searchValue, {\n keys: ['name', 'label', 'value'],\n threshold: matchSorter.rankings.CONTAINS,\n })\n : defaultSorted\n ).slice(0, MAX_USERS_DISPLAYED)\n\n // Check if search value is a valid email and not already added\n const isValidNewEmail =\n EMAIL_REGEX.test(searchValue) &&\n !shareOptions.some((g) => g.name === searchValue) &&\n mode === 'external'\n\n // Handle input focus\n const handleFocus = () => {\n setIsOpen(true)\n setHighlightedIndex(-1)\n }\n\n // Handle input blur\n const handleBlur = () => {\n // Delay closing to allow for option selection\n setTimeout(() => {\n setIsOpen(false)\n setHighlightedIndex(-1)\n }, 200)\n }\n\n // Handle input change\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n setSearchValue(e.target.value)\n setHighlightedIndex(-1)\n setIsOpen(true)\n }\n\n // Handle keyboard navigation\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (!isOpen || filteredOptions.length === 0) {\n // If Enter is pressed and no options are highlighted, select the first option\n if (e.key === 'Enter' && filteredOptions.length > 0) {\n e.preventDefault()\n handleSelectOption(filteredOptions[0])\n }\n return\n }\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault()\n setHighlightedIndex((prev) => (prev < filteredOptions.length - 1 ? prev + 1 : prev))\n break\n case 'ArrowUp':\n e.preventDefault()\n setHighlightedIndex((prev) => (prev > 0 ? prev - 1 : -1))\n break\n case 'Enter':\n e.preventDefault()\n if (highlightedIndex >= 0 && highlightedIndex < filteredOptions.length) {\n handleSelectOption(filteredOptions[highlightedIndex])\n } else if (filteredOptions.length > 0) {\n // If no specific option is highlighted, select the first one\n handleSelectOption(filteredOptions[0])\n }\n break\n case 'Escape':\n setIsOpen(false)\n setHighlightedIndex(-1)\n inputRef.current?.blur()\n // stop dialog from closing\n e.stopPropagation()\n break\n }\n }\n\n // Handle option selection\n const handleSelectOption = (option: ShareOption) => {\n onSelectOption(option, 10) // Default access level is 10 (Read-only)\n setSearchValue('')\n setIsOpen(false)\n setHighlightedIndex(-1)\n inputRef.current?.focus()\n }\n\n // Handle adding a new email\n const handleAddNewEmail = () => {\n onSelectOption(\n {\n name: searchValue,\n label: searchValue,\n value: searchValue,\n shareType: 'guest',\n },\n 10,\n )\n setSearchValue('')\n setIsOpen(false)\n setHighlightedIndex(-1)\n inputRef.current?.focus()\n }\n\n return (\n <Styled.Container {...props}>\n <InputText\n ref={inputRef}\n value={searchValue}\n placeholder={placeholder}\n disabled={disabled}\n onFocus={handleFocus}\n onClick={handleFocus}\n onBlur={handleBlur}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n style={{ width: '100%' }}\n />\n\n {isOpen && (filteredOptions.length > 0 || isValidNewEmail) && (\n <Styled.SuggestionsList\n {...pt?.list}\n className={clsx(pt?.list?.className, { 'no-owner': !owner })}\n >\n {filteredOptions.map((option, index) => (\n <AccessUser\n key={option.value}\n name={option.name}\n label={option.label}\n shareType={option.shareType}\n isOwner={false}\n isMe={false}\n data-index={index}\n className={index === highlightedIndex ? 'highlighted' : ''}\n style={{ cursor: 'pointer' }}\n onClick={() => handleSelectOption(option)}\n onMouseEnter={() => setHighlightedIndex(index)}\n isCompact\n isSearchResult\n >\n {/* No controls needed for search suggestions */}\n </AccessUser>\n ))}\n\n {/* Add new email option */}\n {isValidNewEmail && (\n <AccessUser\n name={searchValue}\n label={searchValue}\n shareType=\"guest\"\n isOwner={false}\n isMe={false}\n data-index={filteredOptions.length}\n className={filteredOptions.length === highlightedIndex ? 'highlighted' : ''}\n style={{ cursor: 'pointer' }}\n onClick={handleAddNewEmail}\n onMouseEnter={() => setHighlightedIndex(filteredOptions.length)}\n isCompact\n isSearchResult\n />\n )}\n\n {filteredOptions.length === MAX_USERS_DISPLAYED && (\n <li className=\"tip\">More than 500 results, please refine your search...</li>\n )}\n </Styled.SuggestionsList>\n )}\n </Styled.Container>\n )\n}\n"],"names":["MAX_USERS_DISPLAYED","EMAIL_REGEX","AccessSearchInput","shareOptions","existingAccess","owner","placeholder","disabled","mode","onSelectOption","pt","props","searchValue","setSearchValue","useState","isOpen","setIsOpen","highlightedIndex","setHighlightedIndex","inputRef","useRef","defaultSorted","option","a","b","getRank","rankA","rankB","filteredOptions","matchSorter","isValidNewEmail","g","handleFocus","handleBlur","handleInputChange","handleKeyDown","handleSelectOption","prev","handleAddNewEmail","jsxs","Styled.Container","jsx","InputText","Styled.SuggestionsList","clsx","index","AccessUser"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AccessSearchInput.cjs.js","sources":["../../../../../src/components/AccessSearchInput/AccessSearchInput.tsx"],"sourcesContent":["import React, { FC, useState, useRef, KeyboardEvent, ChangeEvent } from 'react'\nimport { matchSorter } from 'match-sorter'\nimport { InputText } from '@ynput/ayon-react-components'\nimport { AccessLevel } from '../AccessUser/AccessUser'\nimport * as Styled from './AccessSearchInput.styled'\nimport { AccessUser } from '../AccessUser/AccessUser'\nimport clsx from 'clsx'\nimport type { ShareOption } from '@shared/api'\n\nconst MAX_USERS_DISPLAYED = 500\n// Email validation regex\nconst EMAIL_REGEX = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n\nexport interface AccessSearchInputProps extends React.HTMLAttributes<HTMLDivElement> {\n shareOptions: ShareOption[]\n existingAccess: string[] // Array of names already in access\n owner: string | undefined | null\n placeholder?: string\n disabled?: boolean\n mode?: 'internal' | 'external'\n onSelectOption: (option: ShareOption, accessLevel: AccessLevel) => void\n pt?: {\n list?: Partial<React.HTMLAttributes<HTMLUListElement>>\n }\n}\n\nexport const AccessSearchInput: FC<AccessSearchInputProps> = ({\n shareOptions,\n existingAccess,\n owner,\n placeholder = 'Add people or access groups',\n disabled = false,\n mode = 'internal',\n onSelectOption,\n pt,\n ...props\n}) => {\n const [searchValue, setSearchValue] = useState('')\n const [isOpen, setIsOpen] = useState(false)\n const [highlightedIndex, setHighlightedIndex] = useState(-1)\n const inputRef = useRef<HTMLInputElement>(null)\n\n // sort default by special groups __everyone__, __{type}__, team:, group:, user: and alphabetically\n const defaultSorted = shareOptions\n .filter((option) => !existingAccess.includes(option.value))\n .toSorted((a, b) => {\n const getRank = (option: ShareOption) => {\n if (option.value === '__everyone__') return 0\n if (option.value.startsWith('__')) return 1\n if (option.value.startsWith('team:')) return 2\n if (option.value.startsWith('group:')) return 3\n if (option.value.startsWith('user:')) return 4\n return 5\n }\n const rankA = getRank(a)\n const rankB = getRank(b)\n if (rankA !== rankB) return rankA - rankB\n return a.label.localeCompare(b.label)\n })\n\n // Filter and sort options based on search value\n const filteredOptions = (\n searchValue\n ? matchSorter(defaultSorted, searchValue, {\n keys: ['name', 'label', 'value'],\n threshold: matchSorter.rankings.CONTAINS,\n })\n : defaultSorted\n ).slice(0, MAX_USERS_DISPLAYED)\n\n // Check if search value is a valid email and not already added\n const isValidNewEmail =\n EMAIL_REGEX.test(searchValue) &&\n !shareOptions.some((g) => g.name === searchValue) &&\n mode === 'external'\n\n // Handle input focus\n const handleFocus = () => {\n setIsOpen(true)\n setHighlightedIndex(-1)\n }\n\n // Handle input blur\n const handleBlur = () => {\n // Delay closing to allow for option selection\n setTimeout(() => {\n setIsOpen(false)\n setHighlightedIndex(-1)\n }, 200)\n }\n\n // Handle input change\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n setSearchValue(e.target.value)\n setHighlightedIndex(-1)\n setIsOpen(true)\n }\n\n // Handle keyboard navigation\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (!isOpen || filteredOptions.length === 0) {\n // If Enter is pressed and no options are highlighted, select the first option\n if (e.key === 'Enter' && filteredOptions.length > 0) {\n e.preventDefault()\n handleSelectOption(filteredOptions[0])\n }\n return\n }\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault()\n setHighlightedIndex((prev) => (prev < filteredOptions.length - 1 ? prev + 1 : prev))\n break\n case 'ArrowUp':\n e.preventDefault()\n setHighlightedIndex((prev) => (prev > 0 ? prev - 1 : -1))\n break\n case 'Enter':\n e.preventDefault()\n if (highlightedIndex >= 0 && highlightedIndex < filteredOptions.length) {\n handleSelectOption(filteredOptions[highlightedIndex])\n } else if (filteredOptions.length > 0) {\n // If no specific option is highlighted, select the first one\n handleSelectOption(filteredOptions[0])\n }\n break\n case 'Escape':\n setIsOpen(false)\n setHighlightedIndex(-1)\n inputRef.current?.blur()\n // stop dialog from closing\n e.stopPropagation()\n break\n }\n }\n\n // Handle option selection\n const handleSelectOption = (option: ShareOption) => {\n onSelectOption(option, 10) // Default access level is 10 (Read-only)\n setSearchValue('')\n setIsOpen(false)\n setHighlightedIndex(-1)\n inputRef.current?.focus()\n }\n\n // Handle adding a new email\n const handleAddNewEmail = () => {\n onSelectOption(\n {\n name: searchValue,\n label: searchValue,\n value: searchValue,\n shareType: 'guest',\n },\n 10,\n )\n setSearchValue('')\n setIsOpen(false)\n setHighlightedIndex(-1)\n inputRef.current?.focus()\n }\n\n return (\n <Styled.Container {...props}>\n <InputText\n ref={inputRef}\n value={searchValue}\n placeholder={placeholder}\n disabled={disabled}\n onFocus={handleFocus}\n onClick={handleFocus}\n onBlur={handleBlur}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n style={{ width: '100%' }}\n />\n\n {isOpen && (filteredOptions.length > 0 || isValidNewEmail) && (\n <Styled.SuggestionsList\n {...pt?.list}\n className={clsx(pt?.list?.className, { 'no-owner': !owner })}\n >\n {filteredOptions.map((option, index) => (\n <AccessUser\n key={option.value}\n name={option.name}\n label={option.label}\n shareType={option.shareType}\n isOwner={false}\n isMe={false}\n data-index={index}\n className={index === highlightedIndex ? 'highlighted' : ''}\n style={{ cursor: 'pointer' }}\n onClick={() => handleSelectOption(option)}\n onMouseEnter={() => setHighlightedIndex(index)}\n isCompact\n isSearchResult\n >\n {/* No controls needed for search suggestions */}\n </AccessUser>\n ))}\n\n {/* Add new email option */}\n {isValidNewEmail && (\n <AccessUser\n name={searchValue}\n label={searchValue}\n shareType=\"guest\"\n isOwner={false}\n isMe={false}\n data-index={filteredOptions.length}\n className={filteredOptions.length === highlightedIndex ? 'highlighted' : ''}\n style={{ cursor: 'pointer' }}\n onClick={handleAddNewEmail}\n onMouseEnter={() => setHighlightedIndex(filteredOptions.length)}\n isCompact\n isSearchResult\n />\n )}\n\n {filteredOptions.length === MAX_USERS_DISPLAYED && (\n <li className=\"tip\">More than 500 results, please refine your search...</li>\n )}\n </Styled.SuggestionsList>\n )}\n </Styled.Container>\n )\n}\n"],"names":["MAX_USERS_DISPLAYED","EMAIL_REGEX","AccessSearchInput","shareOptions","existingAccess","owner","placeholder","disabled","mode","onSelectOption","pt","props","searchValue","setSearchValue","useState","isOpen","setIsOpen","highlightedIndex","setHighlightedIndex","inputRef","useRef","defaultSorted","option","a","b","getRank","rankA","rankB","filteredOptions","matchSorter","isValidNewEmail","g","handleFocus","handleBlur","handleInputChange","handleKeyDown","handleSelectOption","prev","handleAddNewEmail","jsxs","Styled.Container","jsx","InputText","Styled.SuggestionsList","clsx","index","AccessUser"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccessSearchInput.es.js","sources":["../../../../../src/components/AccessSearchInput/AccessSearchInput.tsx"],"sourcesContent":["import React, { FC, useState, useRef, KeyboardEvent, ChangeEvent } from 'react'\nimport { matchSorter } from 'match-sorter'\nimport { InputText } from '@ynput/ayon-react-components'\nimport { AccessLevel } from '../AccessUser/AccessUser'\nimport * as Styled from './AccessSearchInput.styled'\nimport { AccessUser } from '../AccessUser/AccessUser'\nimport clsx from 'clsx'\nimport { ShareOption } from '@shared/api'\n\nconst MAX_USERS_DISPLAYED = 500\n// Email validation regex\nconst EMAIL_REGEX = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n\nexport interface AccessSearchInputProps extends React.HTMLAttributes<HTMLDivElement> {\n shareOptions: ShareOption[]\n existingAccess: string[] // Array of names already in access\n owner: string | undefined | null\n placeholder?: string\n disabled?: boolean\n mode?: 'internal' | 'external'\n onSelectOption: (option: ShareOption, accessLevel: AccessLevel) => void\n pt?: {\n list?: Partial<React.HTMLAttributes<HTMLUListElement>>\n }\n}\n\nexport const AccessSearchInput: FC<AccessSearchInputProps> = ({\n shareOptions,\n existingAccess,\n owner,\n placeholder = 'Add people or access groups',\n disabled = false,\n mode = 'internal',\n onSelectOption,\n pt,\n ...props\n}) => {\n const [searchValue, setSearchValue] = useState('')\n const [isOpen, setIsOpen] = useState(false)\n const [highlightedIndex, setHighlightedIndex] = useState(-1)\n const inputRef = useRef<HTMLInputElement>(null)\n\n // sort default by special groups __everyone__, __{type}__, team:, group:, user: and alphabetically\n const defaultSorted = shareOptions\n .filter((option) => !existingAccess.includes(option.value))\n .toSorted((a, b) => {\n const getRank = (option: ShareOption) => {\n if (option.value === '__everyone__') return 0\n if (option.value.startsWith('__')) return 1\n if (option.value.startsWith('team:')) return 2\n if (option.value.startsWith('group:')) return 3\n if (option.value.startsWith('user:')) return 4\n return 5\n }\n const rankA = getRank(a)\n const rankB = getRank(b)\n if (rankA !== rankB) return rankA - rankB\n return a.label.localeCompare(b.label)\n })\n\n // Filter and sort options based on search value\n const filteredOptions = (\n searchValue\n ? matchSorter(defaultSorted, searchValue, {\n keys: ['name', 'label', 'value'],\n threshold: matchSorter.rankings.CONTAINS,\n })\n : defaultSorted\n ).slice(0, MAX_USERS_DISPLAYED)\n\n // Check if search value is a valid email and not already added\n const isValidNewEmail =\n EMAIL_REGEX.test(searchValue) &&\n !shareOptions.some((g) => g.name === searchValue) &&\n mode === 'external'\n\n // Handle input focus\n const handleFocus = () => {\n setIsOpen(true)\n setHighlightedIndex(-1)\n }\n\n // Handle input blur\n const handleBlur = () => {\n // Delay closing to allow for option selection\n setTimeout(() => {\n setIsOpen(false)\n setHighlightedIndex(-1)\n }, 200)\n }\n\n // Handle input change\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n setSearchValue(e.target.value)\n setHighlightedIndex(-1)\n setIsOpen(true)\n }\n\n // Handle keyboard navigation\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (!isOpen || filteredOptions.length === 0) {\n // If Enter is pressed and no options are highlighted, select the first option\n if (e.key === 'Enter' && filteredOptions.length > 0) {\n e.preventDefault()\n handleSelectOption(filteredOptions[0])\n }\n return\n }\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault()\n setHighlightedIndex((prev) => (prev < filteredOptions.length - 1 ? prev + 1 : prev))\n break\n case 'ArrowUp':\n e.preventDefault()\n setHighlightedIndex((prev) => (prev > 0 ? prev - 1 : -1))\n break\n case 'Enter':\n e.preventDefault()\n if (highlightedIndex >= 0 && highlightedIndex < filteredOptions.length) {\n handleSelectOption(filteredOptions[highlightedIndex])\n } else if (filteredOptions.length > 0) {\n // If no specific option is highlighted, select the first one\n handleSelectOption(filteredOptions[0])\n }\n break\n case 'Escape':\n setIsOpen(false)\n setHighlightedIndex(-1)\n inputRef.current?.blur()\n // stop dialog from closing\n e.stopPropagation()\n break\n }\n }\n\n // Handle option selection\n const handleSelectOption = (option: ShareOption) => {\n onSelectOption(option, 10) // Default access level is 10 (Read-only)\n setSearchValue('')\n setIsOpen(false)\n setHighlightedIndex(-1)\n inputRef.current?.focus()\n }\n\n // Handle adding a new email\n const handleAddNewEmail = () => {\n onSelectOption(\n {\n name: searchValue,\n label: searchValue,\n value: searchValue,\n shareType: 'guest',\n },\n 10,\n )\n setSearchValue('')\n setIsOpen(false)\n setHighlightedIndex(-1)\n inputRef.current?.focus()\n }\n\n return (\n <Styled.Container {...props}>\n <InputText\n ref={inputRef}\n value={searchValue}\n placeholder={placeholder}\n disabled={disabled}\n onFocus={handleFocus}\n onClick={handleFocus}\n onBlur={handleBlur}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n style={{ width: '100%' }}\n />\n\n {isOpen && (filteredOptions.length > 0 || isValidNewEmail) && (\n <Styled.SuggestionsList\n {...pt?.list}\n className={clsx(pt?.list?.className, { 'no-owner': !owner })}\n >\n {filteredOptions.map((option, index) => (\n <AccessUser\n key={option.value}\n name={option.name}\n label={option.label}\n shareType={option.shareType}\n isOwner={false}\n isMe={false}\n data-index={index}\n className={index === highlightedIndex ? 'highlighted' : ''}\n style={{ cursor: 'pointer' }}\n onClick={() => handleSelectOption(option)}\n onMouseEnter={() => setHighlightedIndex(index)}\n isCompact\n isSearchResult\n >\n {/* No controls needed for search suggestions */}\n </AccessUser>\n ))}\n\n {/* Add new email option */}\n {isValidNewEmail && (\n <AccessUser\n name={searchValue}\n label={searchValue}\n shareType=\"guest\"\n isOwner={false}\n isMe={false}\n data-index={filteredOptions.length}\n className={filteredOptions.length === highlightedIndex ? 'highlighted' : ''}\n style={{ cursor: 'pointer' }}\n onClick={handleAddNewEmail}\n onMouseEnter={() => setHighlightedIndex(filteredOptions.length)}\n isCompact\n isSearchResult\n />\n )}\n\n {filteredOptions.length === MAX_USERS_DISPLAYED && (\n <li className=\"tip\">More than 500 results, please refine your search...</li>\n )}\n </Styled.SuggestionsList>\n )}\n </Styled.Container>\n )\n}\n"],"names":["MAX_USERS_DISPLAYED","EMAIL_REGEX","AccessSearchInput","shareOptions","existingAccess","owner","placeholder","disabled","mode","onSelectOption","pt","props","searchValue","setSearchValue","useState","isOpen","setIsOpen","highlightedIndex","setHighlightedIndex","inputRef","useRef","defaultSorted","option","a","b","getRank","rankA","rankB","filteredOptions","matchSorter","isValidNewEmail","g","handleFocus","handleBlur","handleInputChange","handleKeyDown","handleSelectOption","prev","handleAddNewEmail","jsxs","Styled.Container","jsx","InputText","Styled.SuggestionsList","clsx","index","AccessUser"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AccessSearchInput.es.js","sources":["../../../../../src/components/AccessSearchInput/AccessSearchInput.tsx"],"sourcesContent":["import React, { FC, useState, useRef, KeyboardEvent, ChangeEvent } from 'react'\nimport { matchSorter } from 'match-sorter'\nimport { InputText } from '@ynput/ayon-react-components'\nimport { AccessLevel } from '../AccessUser/AccessUser'\nimport * as Styled from './AccessSearchInput.styled'\nimport { AccessUser } from '../AccessUser/AccessUser'\nimport clsx from 'clsx'\nimport type { ShareOption } from '@shared/api'\n\nconst MAX_USERS_DISPLAYED = 500\n// Email validation regex\nconst EMAIL_REGEX = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n\nexport interface AccessSearchInputProps extends React.HTMLAttributes<HTMLDivElement> {\n shareOptions: ShareOption[]\n existingAccess: string[] // Array of names already in access\n owner: string | undefined | null\n placeholder?: string\n disabled?: boolean\n mode?: 'internal' | 'external'\n onSelectOption: (option: ShareOption, accessLevel: AccessLevel) => void\n pt?: {\n list?: Partial<React.HTMLAttributes<HTMLUListElement>>\n }\n}\n\nexport const AccessSearchInput: FC<AccessSearchInputProps> = ({\n shareOptions,\n existingAccess,\n owner,\n placeholder = 'Add people or access groups',\n disabled = false,\n mode = 'internal',\n onSelectOption,\n pt,\n ...props\n}) => {\n const [searchValue, setSearchValue] = useState('')\n const [isOpen, setIsOpen] = useState(false)\n const [highlightedIndex, setHighlightedIndex] = useState(-1)\n const inputRef = useRef<HTMLInputElement>(null)\n\n // sort default by special groups __everyone__, __{type}__, team:, group:, user: and alphabetically\n const defaultSorted = shareOptions\n .filter((option) => !existingAccess.includes(option.value))\n .toSorted((a, b) => {\n const getRank = (option: ShareOption) => {\n if (option.value === '__everyone__') return 0\n if (option.value.startsWith('__')) return 1\n if (option.value.startsWith('team:')) return 2\n if (option.value.startsWith('group:')) return 3\n if (option.value.startsWith('user:')) return 4\n return 5\n }\n const rankA = getRank(a)\n const rankB = getRank(b)\n if (rankA !== rankB) return rankA - rankB\n return a.label.localeCompare(b.label)\n })\n\n // Filter and sort options based on search value\n const filteredOptions = (\n searchValue\n ? matchSorter(defaultSorted, searchValue, {\n keys: ['name', 'label', 'value'],\n threshold: matchSorter.rankings.CONTAINS,\n })\n : defaultSorted\n ).slice(0, MAX_USERS_DISPLAYED)\n\n // Check if search value is a valid email and not already added\n const isValidNewEmail =\n EMAIL_REGEX.test(searchValue) &&\n !shareOptions.some((g) => g.name === searchValue) &&\n mode === 'external'\n\n // Handle input focus\n const handleFocus = () => {\n setIsOpen(true)\n setHighlightedIndex(-1)\n }\n\n // Handle input blur\n const handleBlur = () => {\n // Delay closing to allow for option selection\n setTimeout(() => {\n setIsOpen(false)\n setHighlightedIndex(-1)\n }, 200)\n }\n\n // Handle input change\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n setSearchValue(e.target.value)\n setHighlightedIndex(-1)\n setIsOpen(true)\n }\n\n // Handle keyboard navigation\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (!isOpen || filteredOptions.length === 0) {\n // If Enter is pressed and no options are highlighted, select the first option\n if (e.key === 'Enter' && filteredOptions.length > 0) {\n e.preventDefault()\n handleSelectOption(filteredOptions[0])\n }\n return\n }\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault()\n setHighlightedIndex((prev) => (prev < filteredOptions.length - 1 ? prev + 1 : prev))\n break\n case 'ArrowUp':\n e.preventDefault()\n setHighlightedIndex((prev) => (prev > 0 ? prev - 1 : -1))\n break\n case 'Enter':\n e.preventDefault()\n if (highlightedIndex >= 0 && highlightedIndex < filteredOptions.length) {\n handleSelectOption(filteredOptions[highlightedIndex])\n } else if (filteredOptions.length > 0) {\n // If no specific option is highlighted, select the first one\n handleSelectOption(filteredOptions[0])\n }\n break\n case 'Escape':\n setIsOpen(false)\n setHighlightedIndex(-1)\n inputRef.current?.blur()\n // stop dialog from closing\n e.stopPropagation()\n break\n }\n }\n\n // Handle option selection\n const handleSelectOption = (option: ShareOption) => {\n onSelectOption(option, 10) // Default access level is 10 (Read-only)\n setSearchValue('')\n setIsOpen(false)\n setHighlightedIndex(-1)\n inputRef.current?.focus()\n }\n\n // Handle adding a new email\n const handleAddNewEmail = () => {\n onSelectOption(\n {\n name: searchValue,\n label: searchValue,\n value: searchValue,\n shareType: 'guest',\n },\n 10,\n )\n setSearchValue('')\n setIsOpen(false)\n setHighlightedIndex(-1)\n inputRef.current?.focus()\n }\n\n return (\n <Styled.Container {...props}>\n <InputText\n ref={inputRef}\n value={searchValue}\n placeholder={placeholder}\n disabled={disabled}\n onFocus={handleFocus}\n onClick={handleFocus}\n onBlur={handleBlur}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n style={{ width: '100%' }}\n />\n\n {isOpen && (filteredOptions.length > 0 || isValidNewEmail) && (\n <Styled.SuggestionsList\n {...pt?.list}\n className={clsx(pt?.list?.className, { 'no-owner': !owner })}\n >\n {filteredOptions.map((option, index) => (\n <AccessUser\n key={option.value}\n name={option.name}\n label={option.label}\n shareType={option.shareType}\n isOwner={false}\n isMe={false}\n data-index={index}\n className={index === highlightedIndex ? 'highlighted' : ''}\n style={{ cursor: 'pointer' }}\n onClick={() => handleSelectOption(option)}\n onMouseEnter={() => setHighlightedIndex(index)}\n isCompact\n isSearchResult\n >\n {/* No controls needed for search suggestions */}\n </AccessUser>\n ))}\n\n {/* Add new email option */}\n {isValidNewEmail && (\n <AccessUser\n name={searchValue}\n label={searchValue}\n shareType=\"guest\"\n isOwner={false}\n isMe={false}\n data-index={filteredOptions.length}\n className={filteredOptions.length === highlightedIndex ? 'highlighted' : ''}\n style={{ cursor: 'pointer' }}\n onClick={handleAddNewEmail}\n onMouseEnter={() => setHighlightedIndex(filteredOptions.length)}\n isCompact\n isSearchResult\n />\n )}\n\n {filteredOptions.length === MAX_USERS_DISPLAYED && (\n <li className=\"tip\">More than 500 results, please refine your search...</li>\n )}\n </Styled.SuggestionsList>\n )}\n </Styled.Container>\n )\n}\n"],"names":["MAX_USERS_DISPLAYED","EMAIL_REGEX","AccessSearchInput","shareOptions","existingAccess","owner","placeholder","disabled","mode","onSelectOption","pt","props","searchValue","setSearchValue","useState","isOpen","setIsOpen","highlightedIndex","setHighlightedIndex","inputRef","useRef","defaultSorted","option","a","b","getRank","rankA","rankB","filteredOptions","matchSorter","isValidNewEmail","g","handleFocus","handleBlur","handleInputChange","handleKeyDown","handleSelectOption","prev","handleAddNewEmail","jsxs","Styled.Container","jsx","InputText","Styled.SuggestionsList","clsx","index","AccessUser"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("../../../../_virtual/jsx-runtime.cjs.js"),w=require("react"),s=require("@ynput/ayon-react-components"),S=require("lodash"),B=require("./components/MinMaxField.cjs.js"),G=require("../EnumEditor/EnumEditor.cjs.js")
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("../../../../_virtual/jsx-runtime.cjs.js"),w=require("react"),s=require("@ynput/ayon-react-components"),S=require("lodash"),B=require("./components/MinMaxField.cjs.js"),G=require("../EnumEditor/EnumEditor.cjs.js"),p=require("./attributeTypeMap.cjs.js"),V=require("styled-components"),z=V.div`
|
|
2
2
|
display: flex;
|
|
3
3
|
flex-direction: row;
|
|
4
4
|
gap: var(--base-gap-large);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AttributeEditor.cjs.js","sources":["../../../../../src/components/AttributeEditor/AttributeEditor.tsx"],"sourcesContent":["import { FC, useEffect, useState } from 'react'\nimport {\n SaveButton,\n Spacer,\n FormLayout,\n FormRow,\n InputText,\n InputSwitch,\n LockedInput,\n Dropdown,\n Dialog,\n Button,\n} from '@ynput/ayon-react-components'\nimport { camelCase, upperFirst } from 'lodash'\nimport { MinMaxField } from './components'\nimport { EnumEditor } from '@shared/components/EnumEditor'\nimport { AttributeData, AttributeModel } from '@shared/api'\nimport {\n UIAttributeType,\n UI_TYPE_OPTIONS,\n UI_TYPE_FIELDS,\n UI_TYPE_EXCLUDE,\n backendToUiType,\n uiTypeToBackend,\n WIDGET_UNDEFINED_KEY,\n} from './attributeTypeMap'\nimport styled from 'styled-components'\n\nconst RowFieldGroup = styled.div`\n display: flex;\n flex-direction: row;\n gap: var(--base-gap-large);\n align-items: center;\n`\n\nconst SCOPE_OPTIONS = [\n { value: 'project', label: 'Project' },\n { value: 'folder', label: 'Folder' },\n { value: 'task', label: 'Task' },\n { value: 'product', label: 'Product' },\n { value: 'version', label: 'Version' },\n { value: 'representation', label: 'Representation' },\n { value: 'user', label: 'User' },\n { value: 'list', label: 'List' },\n]\n\n// Define types for constants\ninterface GlobalFieldEntry {\n value: keyof AttributeData\n scope: NonNullable<AttributeModel['scope']>[number][] | null\n}\n\nconst GLOBAL_FIELDS: GlobalFieldEntry[] = [\n { value: 'description', scope: null },\n { value: 'example', scope: null },\n { value: 'default', scope: ['project'] },\n {\n value: 'inherit',\n scope: ['project', 'folder', 'task', 'product', 'version', 'representation', 'user'],\n },\n]\n\ntype Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>\ntype PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\nexport type AttributeForm = PartialBy<AttributeModel, 'scope' | 'position'>\ntype Excludes = (keyof Omit<AttributeModel, 'data'> | keyof AttributeData)[]\n\nconst initFormData: AttributeForm = {\n name: '',\n scope: ['folder', 'task'],\n builtin: false,\n position: 0,\n data: {\n type: 'string',\n title: '',\n description: '',\n example: '',\n default: undefined,\n enum: undefined,\n widget: undefined,\n minLength: undefined,\n maxLength: undefined,\n regex: '',\n minItems: undefined,\n maxItems: undefined,\n ge: undefined,\n gt: undefined,\n le: undefined,\n lt: undefined,\n },\n}\n\n// build the form data based on excludes and to update any data\nconst buildInitFormData = (excludes: Excludes, data?: Partial<AttributeForm>) => {\n // Create a deep clone of init form data\n const formData = JSON.parse(JSON.stringify(initFormData)) as AttributeForm\n\n // Filter out top-level excludes if not in required\n const required = ['name']\n Object.keys(formData).forEach((key) => {\n if (\n !required.includes(key) &&\n excludes.includes(key as keyof Omit<AttributeModel, 'data'>) &&\n key !== 'data'\n ) {\n delete formData[key as keyof AttributeForm]\n }\n })\n\n // Filter out data field excludes if not in in required\n const requiredData = ['title']\n if (formData.data) {\n Object.keys(formData.data).forEach((key) => {\n if (!requiredData.includes(key) && excludes.includes(key as keyof AttributeData)) {\n delete formData.data[key as keyof AttributeData]\n }\n })\n }\n\n // Merge with provided data if any\n if (data) {\n // Merge top-level fields\n Object.keys(data).forEach((key) => {\n const typedKey = key as keyof AttributeForm\n\n if (typedKey === 'data' && data.data && formData.data) {\n // Deep merge of data fields\n formData.data = { ...formData.data, ...data.data }\n } else if (data[typedKey] !== undefined) {\n // @ts-ignore - We know these properties exist\n formData[typedKey] = data[typedKey]\n }\n })\n }\n\n return formData\n}\n\nexport interface AttributeEditorProps {\n attribute: AttributeForm | null\n defaultData?: Partial<AttributeForm>\n existingNames: string[]\n error?: string\n isUpdating?: boolean\n excludes?: Excludes\n onHide: () => void\n onEdit: (attribute: AttributeForm) => void\n onDelete?: () => void\n}\n\nexport const AttributeEditor: FC<AttributeEditorProps> = ({\n attribute,\n defaultData,\n existingNames,\n error = '',\n isUpdating,\n excludes = [],\n onHide,\n onEdit,\n onDelete,\n}) => {\n const resolvedDefaultData = defaultData\n ? {\n ...defaultData,\n name:\n defaultData.name ||\n (defaultData.data?.title ? camelCase(defaultData.data.title) : undefined),\n }\n : undefined\n\n const initData =\n attribute ||\n buildInitFormData(excludes, {\n position: existingNames.length,\n ...resolvedDefaultData,\n })\n\n const [formData, setFormData] = useState<AttributeForm | null>(initData)\n const [uiType, setUiType] = useState<UIAttributeType>(() =>\n backendToUiType(initData?.data?.type, initData?.data?.enum),\n )\n const [isDecimal, setIsDecimal] = useState<boolean>(() => initData?.data?.type === 'float')\n\n useEffect(() => {\n if (!!attribute) {\n setFormData(attribute)\n setUiType(backendToUiType(attribute.data?.type, attribute.data?.enum))\n setIsDecimal(attribute.data?.type === 'float')\n }\n }, [attribute])\n\n const isNew = !attribute\n\n // const setTopLevelData = (key: string, value: string) => {\n const setTopLevelData = <K extends keyof Omit<AttributeModel, 'data'>>(\n key: K,\n value: AttributeModel[K],\n ) => {\n setFormData((d) => {\n if (!d) {\n return d\n }\n return { ...d, [key]: value }\n })\n }\n\n // const setData = (key, value) => {\n const setData = <K extends keyof AttributeData>(key: K, value: AttributeData[K]) => {\n setFormData((d) => {\n // Add a check for d and d.data\n if (!d || !d.data) {\n return d\n }\n const dt = { ...d.data, [key]: value }\n return { ...d, data: dt }\n })\n }\n\n let internalError = ''\n if (formData) {\n if (isNew) {\n if (existingNames.includes(formData.name)) internalError = 'This attribute already exists'\n else if (!formData.name.match('^[a-zA-Z_]{2,64}$')) error = 'Invalid attribute name'\n } // name validation\n }\n\n const handleSubmit = () => {\n if (formData) {\n onEdit(formData)\n }\n }\n\n const footer = (\n <div style={{ display: 'flex', width: '100%', flexDirection: 'row' }}>\n {onDelete && attribute && (\n <Button\n variant=\"danger\"\n label={'Delete attribute'}\n icon={'delete'}\n disabled={isUpdating}\n onClick={onDelete}\n />\n )}\n <Spacer />\n <SaveButton\n label={isNew ? 'Create Attribute' : 'Save Attribute'}\n icon={'check'}\n disabled={!!internalError || !formData}\n active={!internalError && !!formData}\n saving={isUpdating}\n onClick={handleSubmit}\n />\n </div>\n )\n\n let dataFields: (keyof AttributeData)[] = []\n\n // add global fields, only if scope are null (all) or the scope is included\n GLOBAL_FIELDS.forEach((globalField) => {\n if (!globalField?.scope || globalField?.scope?.some((s) => formData?.scope?.includes(s))) {\n dataFields.push(globalField.value)\n }\n })\n\n const typeFields = UI_TYPE_FIELDS[uiType] ?? []\n const typeExclude = UI_TYPE_EXCLUDE[uiType] ?? []\n dataFields = [...dataFields, ...typeFields].filter((f) => !typeExclude.includes(f))\n\n type CustomFieldRenderer = (value: any, onChange: (newValue: any) => void) => JSX.Element | null\n const customFields: {\n enum: CustomFieldRenderer\n inherit: CustomFieldRenderer\n booleanDefault: CustomFieldRenderer\n } = {\n enum: (value = [], onChange) => (\n <EnumEditor\n values={value}\n onChange={(val) => {\n onChange(val?.length ? val : undefined)\n }}\n />\n ),\n inherit: (value, onChange) => (\n <InputSwitch\n checked={value}\n onChange={(e) => onChange((e.target as HTMLInputElement).checked)}\n />\n ),\n booleanDefault: (value, onChange) => (\n <InputSwitch\n checked={value}\n onChange={(e) => onChange((e.target as HTMLInputElement).checked)}\n />\n ),\n }\n\n const handleTitleChange = (e: React.ChangeEvent) => {\n const v = (e.target as HTMLInputElement).value\n setData('title', v)\n\n if (isNew) {\n setTopLevelData('name', camelCase(v))\n }\n }\n\n const handleUiTypeChange = (v: string[]) => {\n const newUiType = v[0] as UIAttributeType\n setUiType(newUiType)\n setData('type', uiTypeToBackend(newUiType, isDecimal))\n\n // Clear enum when switching away from select/multi_select\n if (newUiType !== 'select' && newUiType !== 'multi_select') {\n setData('enum', undefined)\n }\n // Clear regex if not supported by the new type\n if (newUiType !== 'text' && formData?.data?.regex) {\n setData('regex', '')\n }\n\n // Clear widget\n setData('widget', undefined)\n }\n\n const selectedOption = UI_TYPE_OPTIONS.find((o) => o.value === uiType)\n const widgets = selectedOption?.widgets\n\n return (\n <Dialog\n header={formData?.data?.title || formData?.name || 'New attribute'}\n footer={footer}\n onClose={onHide}\n isOpen={true}\n style={{ width: 700, zIndex: 999 }}\n size=\"full\"\n enableBackdropClose={false}\n onKeyDown={(e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault()\n handleSubmit()\n }\n }}\n >\n {formData && (\n <FormLayout>\n {!excludes.includes('title') && (\n <FormRow label={'Title'} key={'title'}>\n <InputText value={formData?.data['title']} onChange={handleTitleChange} autoFocus />\n </FormRow>\n )}\n {!excludes.includes('name') && (\n <FormRow label={'Name'} key={'name'}>\n <LockedInput\n value={formData.name}\n disabled={!isNew}\n onSubmit={(v) => setTopLevelData('name', v)}\n label=\"name\"\n />\n </FormRow>\n )}\n {!excludes.includes('scope') && (\n <FormRow label=\"Scope\">\n <Dropdown\n options={SCOPE_OPTIONS}\n disabled={formData.builtin}\n value={formData.scope || []}\n onChange={(v) => setTopLevelData('scope', v as AttributeModel['scope'])}\n multiSelect\n widthExpand\n />\n </FormRow>\n )}\n {!excludes.includes('type') && (\n <FormRow label=\"Type\">\n <RowFieldGroup>\n <Dropdown\n value={[uiType]}\n disabled={formData.builtin || !isNew}\n valueIcon={UI_TYPE_OPTIONS.find((o) => o.value === uiType)?.icon}\n options={UI_TYPE_OPTIONS}\n onChange={handleUiTypeChange}\n minSelected={1}\n widthExpand\n style={{ flex: 1 }}\n />\n {widgets && widgets.length > 0 && (\n <Dropdown\n value={[\n formData.data.widget ||\n widgets.find((w) => w.isDefault)?.value ||\n WIDGET_UNDEFINED_KEY,\n ]}\n disabled={formData.builtin}\n dataKey=\"value\"\n options={widgets}\n onChange={(v) =>\n setData('widget', v[0] === WIDGET_UNDEFINED_KEY ? undefined : v[0])\n }\n style={{ flex: 0.5 }}\n />\n )}\n </RowFieldGroup>\n </FormRow>\n )}\n {!excludes.includes('type') && uiType === 'number' && (\n <FormRow label=\"Decimal\">\n <InputSwitch\n checked={isDecimal}\n disabled={formData.builtin || !isNew}\n onChange={(e) => {\n const checked = (e.target as HTMLInputElement).checked\n setIsDecimal(checked)\n setData('type', checked ? 'float' : 'integer')\n }}\n />\n </FormRow>\n )}\n {dataFields.map((field) => {\n // skip if field is excluded\n if (excludes.includes(field)) return null\n\n let fieldComp = null\n let fieldLabel: string = upperFirst(field)\n\n if (field === 'enum' || field === 'inherit') {\n const renderer = customFields[field as 'enum' | 'inherit']\n fieldComp = renderer(formData?.data[field], (value) => setData(field, value))\n } else if (field === 'default' && formData?.data?.type === 'boolean') {\n fieldComp = customFields['booleanDefault'](\n formData?.data[field] as boolean,\n (value) => setData(field, value as AttributeData['default']),\n )\n } else if (['ge', 'gt', 'le', 'lt'].includes(field)) {\n // ignore gt and lt\n if (['gt', 'lt'].includes(field)) return null\n fieldComp = (\n <MinMaxField\n value={formData?.data}\n isMin={field === 'ge'}\n isFloat={formData?.data?.type === 'float'}\n onChange={(v) => {\n const geValue = v.ge !== undefined ? Number(v.ge) : undefined\n const leValue = v.le !== undefined ? Number(v.le) : undefined\n\n if (\n // @ts-expect-error\n (v.ge !== undefined && isNaN(geValue)) ||\n // @ts-expect-error\n (v.le !== undefined && isNaN(leValue))\n ) {\n // Do not update the form if the value is not a valid number\n return\n }\n\n setFormData((d) => {\n if (!d || !d.data) return d\n const dt = { ...d.data, ...v }\n return { ...d, data: dt }\n })\n }}\n />\n )\n\n // rewrite field to min or max for display label\n fieldLabel = field === 'ge' ? 'Min' : 'Max'\n } else {\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const strValue = e.target.value\n switch (field) {\n case 'minLength':\n case 'maxLength':\n case 'minItems':\n case 'maxItems': {\n const num = parseInt(strValue, 10)\n setData(field, isNaN(num) ? undefined : num)\n break\n }\n default:\n // For string fields ('description', 'regex') or 'any' type fields ('example', 'default')\n setData(field, strValue as AttributeData[typeof field])\n break\n }\n }\n\n fieldComp = (\n <InputText\n value={String(formData?.data[field] ?? '')}\n onChange={handleInputChange}\n />\n )\n }\n\n return (\n <FormRow\n label={fieldLabel}\n key={field}\n style={{\n alignItems: 'flex-start',\n }}\n >\n {fieldComp}\n </FormRow>\n )\n })}\n <span>\n {(internalError || error) && (\n <span className=\"form-error-text\">{internalError || error}</span>\n )}\n </span>\n </FormLayout>\n )}\n </Dialog>\n )\n}\n"],"names":["RowFieldGroup","styled","SCOPE_OPTIONS","GLOBAL_FIELDS","initFormData","buildInitFormData","excludes","data","formData","required","key","requiredData","typedKey","AttributeEditor","attribute","defaultData","existingNames","error","isUpdating","onHide","onEdit","onDelete","resolvedDefaultData","camelCase","initData","setFormData","useState","uiType","setUiType","backendToUiType","isDecimal","setIsDecimal","useEffect","isNew","setTopLevelData","value","d","setData","dt","internalError","handleSubmit","footer","jsxs","jsx","Button","Spacer","SaveButton","dataFields","globalField","s","typeFields","UI_TYPE_FIELDS","typeExclude","UI_TYPE_EXCLUDE","f","customFields","onChange","EnumEditor","val","InputSwitch","e","handleTitleChange","v","handleUiTypeChange","newUiType","uiTypeToBackend","widgets","UI_TYPE_OPTIONS","o","Dialog","FormLayout","FormRow","InputText","LockedInput","Dropdown","w","WIDGET_UNDEFINED_KEY","checked","field","fieldComp","fieldLabel","upperFirst","renderer","MinMaxField","geValue","leValue","handleInputChange","strValue","num"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AttributeEditor.cjs.js","sources":["../../../../../src/components/AttributeEditor/AttributeEditor.tsx"],"sourcesContent":["import { FC, useEffect, useState } from 'react'\nimport {\n SaveButton,\n Spacer,\n FormLayout,\n FormRow,\n InputText,\n InputSwitch,\n LockedInput,\n Dropdown,\n Dialog,\n Button,\n} from '@ynput/ayon-react-components'\nimport { camelCase, upperFirst } from 'lodash'\nimport { MinMaxField } from './components'\nimport { EnumEditor } from '@shared/components/EnumEditor/EnumEditor'\nimport type { AttributeData, AttributeModel } from '@shared/api'\nimport {\n UIAttributeType,\n UI_TYPE_OPTIONS,\n UI_TYPE_FIELDS,\n UI_TYPE_EXCLUDE,\n backendToUiType,\n uiTypeToBackend,\n WIDGET_UNDEFINED_KEY,\n} from './attributeTypeMap'\nimport styled from 'styled-components'\n\nconst RowFieldGroup = styled.div`\n display: flex;\n flex-direction: row;\n gap: var(--base-gap-large);\n align-items: center;\n`\n\nconst SCOPE_OPTIONS = [\n { value: 'project', label: 'Project' },\n { value: 'folder', label: 'Folder' },\n { value: 'task', label: 'Task' },\n { value: 'product', label: 'Product' },\n { value: 'version', label: 'Version' },\n { value: 'representation', label: 'Representation' },\n { value: 'user', label: 'User' },\n { value: 'list', label: 'List' },\n]\n\n// Define types for constants\ninterface GlobalFieldEntry {\n value: keyof AttributeData\n scope: NonNullable<AttributeModel['scope']>[number][] | null\n}\n\nconst GLOBAL_FIELDS: GlobalFieldEntry[] = [\n { value: 'description', scope: null },\n { value: 'example', scope: null },\n { value: 'default', scope: ['project'] },\n {\n value: 'inherit',\n scope: ['project', 'folder', 'task', 'product', 'version', 'representation', 'user'],\n },\n]\n\ntype Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>\ntype PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\nexport type AttributeForm = PartialBy<AttributeModel, 'scope' | 'position'>\ntype Excludes = (keyof Omit<AttributeModel, 'data'> | keyof AttributeData)[]\n\nconst initFormData: AttributeForm = {\n name: '',\n scope: ['folder', 'task'],\n builtin: false,\n position: 0,\n data: {\n type: 'string',\n title: '',\n description: '',\n example: '',\n default: undefined,\n enum: undefined,\n widget: undefined,\n minLength: undefined,\n maxLength: undefined,\n regex: '',\n minItems: undefined,\n maxItems: undefined,\n ge: undefined,\n gt: undefined,\n le: undefined,\n lt: undefined,\n },\n}\n\n// build the form data based on excludes and to update any data\nconst buildInitFormData = (excludes: Excludes, data?: Partial<AttributeForm>) => {\n // Create a deep clone of init form data\n const formData = JSON.parse(JSON.stringify(initFormData)) as AttributeForm\n\n // Filter out top-level excludes if not in required\n const required = ['name']\n Object.keys(formData).forEach((key) => {\n if (\n !required.includes(key) &&\n excludes.includes(key as keyof Omit<AttributeModel, 'data'>) &&\n key !== 'data'\n ) {\n delete formData[key as keyof AttributeForm]\n }\n })\n\n // Filter out data field excludes if not in in required\n const requiredData = ['title']\n if (formData.data) {\n Object.keys(formData.data).forEach((key) => {\n if (!requiredData.includes(key) && excludes.includes(key as keyof AttributeData)) {\n delete formData.data[key as keyof AttributeData]\n }\n })\n }\n\n // Merge with provided data if any\n if (data) {\n // Merge top-level fields\n Object.keys(data).forEach((key) => {\n const typedKey = key as keyof AttributeForm\n\n if (typedKey === 'data' && data.data && formData.data) {\n // Deep merge of data fields\n formData.data = { ...formData.data, ...data.data }\n } else if (data[typedKey] !== undefined) {\n // @ts-ignore - We know these properties exist\n formData[typedKey] = data[typedKey]\n }\n })\n }\n\n return formData\n}\n\nexport interface AttributeEditorProps {\n attribute: AttributeForm | null\n defaultData?: Partial<AttributeForm>\n existingNames: string[]\n error?: string\n isUpdating?: boolean\n excludes?: Excludes\n onHide: () => void\n onEdit: (attribute: AttributeForm) => void\n onDelete?: () => void\n}\n\nexport const AttributeEditor: FC<AttributeEditorProps> = ({\n attribute,\n defaultData,\n existingNames,\n error = '',\n isUpdating,\n excludes = [],\n onHide,\n onEdit,\n onDelete,\n}) => {\n const resolvedDefaultData = defaultData\n ? {\n ...defaultData,\n name:\n defaultData.name ||\n (defaultData.data?.title ? camelCase(defaultData.data.title) : undefined),\n }\n : undefined\n\n const initData =\n attribute ||\n buildInitFormData(excludes, {\n position: existingNames.length,\n ...resolvedDefaultData,\n })\n\n const [formData, setFormData] = useState<AttributeForm | null>(initData)\n const [uiType, setUiType] = useState<UIAttributeType>(() =>\n backendToUiType(initData?.data?.type, initData?.data?.enum),\n )\n const [isDecimal, setIsDecimal] = useState<boolean>(() => initData?.data?.type === 'float')\n\n useEffect(() => {\n if (!!attribute) {\n setFormData(attribute)\n setUiType(backendToUiType(attribute.data?.type, attribute.data?.enum))\n setIsDecimal(attribute.data?.type === 'float')\n }\n }, [attribute])\n\n const isNew = !attribute\n\n // const setTopLevelData = (key: string, value: string) => {\n const setTopLevelData = <K extends keyof Omit<AttributeModel, 'data'>>(\n key: K,\n value: AttributeModel[K],\n ) => {\n setFormData((d) => {\n if (!d) {\n return d\n }\n return { ...d, [key]: value }\n })\n }\n\n // const setData = (key, value) => {\n const setData = <K extends keyof AttributeData>(key: K, value: AttributeData[K]) => {\n setFormData((d) => {\n // Add a check for d and d.data\n if (!d || !d.data) {\n return d\n }\n const dt = { ...d.data, [key]: value }\n return { ...d, data: dt }\n })\n }\n\n let internalError = ''\n if (formData) {\n if (isNew) {\n if (existingNames.includes(formData.name)) internalError = 'This attribute already exists'\n else if (!formData.name.match('^[a-zA-Z_]{2,64}$')) error = 'Invalid attribute name'\n } // name validation\n }\n\n const handleSubmit = () => {\n if (formData) {\n onEdit(formData)\n }\n }\n\n const footer = (\n <div style={{ display: 'flex', width: '100%', flexDirection: 'row' }}>\n {onDelete && attribute && (\n <Button\n variant=\"danger\"\n label={'Delete attribute'}\n icon={'delete'}\n disabled={isUpdating}\n onClick={onDelete}\n />\n )}\n <Spacer />\n <SaveButton\n label={isNew ? 'Create Attribute' : 'Save Attribute'}\n icon={'check'}\n disabled={!!internalError || !formData}\n active={!internalError && !!formData}\n saving={isUpdating}\n onClick={handleSubmit}\n />\n </div>\n )\n\n let dataFields: (keyof AttributeData)[] = []\n\n // add global fields, only if scope are null (all) or the scope is included\n GLOBAL_FIELDS.forEach((globalField) => {\n if (!globalField?.scope || globalField?.scope?.some((s) => formData?.scope?.includes(s))) {\n dataFields.push(globalField.value)\n }\n })\n\n const typeFields = UI_TYPE_FIELDS[uiType] ?? []\n const typeExclude = UI_TYPE_EXCLUDE[uiType] ?? []\n dataFields = [...dataFields, ...typeFields].filter((f) => !typeExclude.includes(f))\n\n type CustomFieldRenderer = (value: any, onChange: (newValue: any) => void) => JSX.Element | null\n const customFields: {\n enum: CustomFieldRenderer\n inherit: CustomFieldRenderer\n booleanDefault: CustomFieldRenderer\n } = {\n enum: (value = [], onChange) => (\n <EnumEditor\n values={value}\n onChange={(val) => {\n onChange(val?.length ? val : undefined)\n }}\n />\n ),\n inherit: (value, onChange) => (\n <InputSwitch\n checked={value}\n onChange={(e) => onChange((e.target as HTMLInputElement).checked)}\n />\n ),\n booleanDefault: (value, onChange) => (\n <InputSwitch\n checked={value}\n onChange={(e) => onChange((e.target as HTMLInputElement).checked)}\n />\n ),\n }\n\n const handleTitleChange = (e: React.ChangeEvent) => {\n const v = (e.target as HTMLInputElement).value\n setData('title', v)\n\n if (isNew) {\n setTopLevelData('name', camelCase(v))\n }\n }\n\n const handleUiTypeChange = (v: string[]) => {\n const newUiType = v[0] as UIAttributeType\n setUiType(newUiType)\n setData('type', uiTypeToBackend(newUiType, isDecimal))\n\n // Clear enum when switching away from select/multi_select\n if (newUiType !== 'select' && newUiType !== 'multi_select') {\n setData('enum', undefined)\n }\n // Clear regex if not supported by the new type\n if (newUiType !== 'text' && formData?.data?.regex) {\n setData('regex', '')\n }\n\n // Clear widget\n setData('widget', undefined)\n }\n\n const selectedOption = UI_TYPE_OPTIONS.find((o) => o.value === uiType)\n const widgets = selectedOption?.widgets\n\n return (\n <Dialog\n header={formData?.data?.title || formData?.name || 'New attribute'}\n footer={footer}\n onClose={onHide}\n isOpen={true}\n style={{ width: 700, zIndex: 999 }}\n size=\"full\"\n enableBackdropClose={false}\n onKeyDown={(e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault()\n handleSubmit()\n }\n }}\n >\n {formData && (\n <FormLayout>\n {!excludes.includes('title') && (\n <FormRow label={'Title'} key={'title'}>\n <InputText value={formData?.data['title']} onChange={handleTitleChange} autoFocus />\n </FormRow>\n )}\n {!excludes.includes('name') && (\n <FormRow label={'Name'} key={'name'}>\n <LockedInput\n value={formData.name}\n disabled={!isNew}\n onSubmit={(v) => setTopLevelData('name', v)}\n label=\"name\"\n />\n </FormRow>\n )}\n {!excludes.includes('scope') && (\n <FormRow label=\"Scope\">\n <Dropdown\n options={SCOPE_OPTIONS}\n disabled={formData.builtin}\n value={formData.scope || []}\n onChange={(v) => setTopLevelData('scope', v as AttributeModel['scope'])}\n multiSelect\n widthExpand\n />\n </FormRow>\n )}\n {!excludes.includes('type') && (\n <FormRow label=\"Type\">\n <RowFieldGroup>\n <Dropdown\n value={[uiType]}\n disabled={formData.builtin || !isNew}\n valueIcon={UI_TYPE_OPTIONS.find((o) => o.value === uiType)?.icon}\n options={UI_TYPE_OPTIONS}\n onChange={handleUiTypeChange}\n minSelected={1}\n widthExpand\n style={{ flex: 1 }}\n />\n {widgets && widgets.length > 0 && (\n <Dropdown\n value={[\n formData.data.widget ||\n widgets.find((w) => w.isDefault)?.value ||\n WIDGET_UNDEFINED_KEY,\n ]}\n disabled={formData.builtin}\n dataKey=\"value\"\n options={widgets}\n onChange={(v) =>\n setData('widget', v[0] === WIDGET_UNDEFINED_KEY ? undefined : v[0])\n }\n style={{ flex: 0.5 }}\n />\n )}\n </RowFieldGroup>\n </FormRow>\n )}\n {!excludes.includes('type') && uiType === 'number' && (\n <FormRow label=\"Decimal\">\n <InputSwitch\n checked={isDecimal}\n disabled={formData.builtin || !isNew}\n onChange={(e) => {\n const checked = (e.target as HTMLInputElement).checked\n setIsDecimal(checked)\n setData('type', checked ? 'float' : 'integer')\n }}\n />\n </FormRow>\n )}\n {dataFields.map((field) => {\n // skip if field is excluded\n if (excludes.includes(field)) return null\n\n let fieldComp = null\n let fieldLabel: string = upperFirst(field)\n\n if (field === 'enum' || field === 'inherit') {\n const renderer = customFields[field as 'enum' | 'inherit']\n fieldComp = renderer(formData?.data[field], (value) => setData(field, value))\n } else if (field === 'default' && formData?.data?.type === 'boolean') {\n fieldComp = customFields['booleanDefault'](\n formData?.data[field] as boolean,\n (value) => setData(field, value as AttributeData['default']),\n )\n } else if (['ge', 'gt', 'le', 'lt'].includes(field)) {\n // ignore gt and lt\n if (['gt', 'lt'].includes(field)) return null\n fieldComp = (\n <MinMaxField\n value={formData?.data}\n isMin={field === 'ge'}\n isFloat={formData?.data?.type === 'float'}\n onChange={(v) => {\n const geValue = v.ge !== undefined ? Number(v.ge) : undefined\n const leValue = v.le !== undefined ? Number(v.le) : undefined\n\n if (\n // @ts-expect-error\n (v.ge !== undefined && isNaN(geValue)) ||\n // @ts-expect-error\n (v.le !== undefined && isNaN(leValue))\n ) {\n // Do not update the form if the value is not a valid number\n return\n }\n\n setFormData((d) => {\n if (!d || !d.data) return d\n const dt = { ...d.data, ...v }\n return { ...d, data: dt }\n })\n }}\n />\n )\n\n // rewrite field to min or max for display label\n fieldLabel = field === 'ge' ? 'Min' : 'Max'\n } else {\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const strValue = e.target.value\n switch (field) {\n case 'minLength':\n case 'maxLength':\n case 'minItems':\n case 'maxItems': {\n const num = parseInt(strValue, 10)\n setData(field, isNaN(num) ? undefined : num)\n break\n }\n default:\n // For string fields ('description', 'regex') or 'any' type fields ('example', 'default')\n setData(field, strValue as AttributeData[typeof field])\n break\n }\n }\n\n fieldComp = (\n <InputText\n value={String(formData?.data[field] ?? '')}\n onChange={handleInputChange}\n />\n )\n }\n\n return (\n <FormRow\n label={fieldLabel}\n key={field}\n style={{\n alignItems: 'flex-start',\n }}\n >\n {fieldComp}\n </FormRow>\n )\n })}\n <span>\n {(internalError || error) && (\n <span className=\"form-error-text\">{internalError || error}</span>\n )}\n </span>\n </FormLayout>\n )}\n </Dialog>\n )\n}\n"],"names":["RowFieldGroup","styled","SCOPE_OPTIONS","GLOBAL_FIELDS","initFormData","buildInitFormData","excludes","data","formData","required","key","requiredData","typedKey","AttributeEditor","attribute","defaultData","existingNames","error","isUpdating","onHide","onEdit","onDelete","resolvedDefaultData","camelCase","initData","setFormData","useState","uiType","setUiType","backendToUiType","isDecimal","setIsDecimal","useEffect","isNew","setTopLevelData","value","d","setData","dt","internalError","handleSubmit","footer","jsxs","jsx","Button","Spacer","SaveButton","dataFields","globalField","s","typeFields","UI_TYPE_FIELDS","typeExclude","UI_TYPE_EXCLUDE","f","customFields","onChange","EnumEditor","val","InputSwitch","e","handleTitleChange","v","handleUiTypeChange","newUiType","uiTypeToBackend","widgets","UI_TYPE_OPTIONS","o","Dialog","FormLayout","FormRow","InputText","LockedInput","Dropdown","w","WIDGET_UNDEFINED_KEY","checked","field","fieldComp","fieldLabel","upperFirst","renderer","MinMaxField","geValue","leValue","handleInputChange","strValue","num"],"mappings":"4XA4BMA,EAAgBC,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAOvBC,EAAgB,CACpB,CAAE,MAAO,UAAW,MAAO,SAAA,EAC3B,CAAE,MAAO,SAAU,MAAO,QAAA,EAC1B,CAAE,MAAO,OAAQ,MAAO,MAAA,EACxB,CAAE,MAAO,UAAW,MAAO,SAAA,EAC3B,CAAE,MAAO,UAAW,MAAO,SAAA,EAC3B,CAAE,MAAO,iBAAkB,MAAO,gBAAA,EAClC,CAAE,MAAO,OAAQ,MAAO,MAAA,EACxB,CAAE,MAAO,OAAQ,MAAO,MAAA,CAC1B,EAQMC,EAAoC,CACxC,CAAE,MAAO,cAAe,MAAO,IAAA,EAC/B,CAAE,MAAO,UAAW,MAAO,IAAA,EAC3B,CAAE,MAAO,UAAW,MAAO,CAAC,SAAS,CAAA,EACrC,CACE,MAAO,UACP,MAAO,CAAC,UAAW,SAAU,OAAQ,UAAW,UAAW,iBAAkB,MAAM,CAAA,CAEvF,EAOMC,EAA8B,CAClC,KAAM,GACN,MAAO,CAAC,SAAU,MAAM,EACxB,QAAS,GACT,SAAU,EACV,KAAM,CACJ,KAAM,SACN,MAAO,GACP,YAAa,GACb,QAAS,GACT,QAAS,OACT,KAAM,OACN,OAAQ,OACR,UAAW,OACX,UAAW,OACX,MAAO,GACP,SAAU,OACV,SAAU,OACV,GAAI,OACJ,GAAI,OACJ,GAAI,OACJ,GAAI,MAAA,CAER,EAGMC,EAAoB,CAACC,EAAoBC,IAAkC,CAE/E,MAAMC,EAAW,KAAK,MAAM,KAAK,UAAUJ,CAAY,CAAC,EAGlDK,EAAW,CAAC,MAAM,EACxB,OAAO,KAAKD,CAAQ,EAAE,QAASE,GAAQ,CAEnC,CAACD,EAAS,SAASC,CAAG,GACtBJ,EAAS,SAASI,CAAyC,GAC3DA,IAAQ,QAER,OAAOF,EAASE,CAA0B,CAE9C,CAAC,EAGD,MAAMC,EAAe,CAAC,OAAO,EAC7B,OAAIH,EAAS,MACX,OAAO,KAAKA,EAAS,IAAI,EAAE,QAASE,GAAQ,CACtC,CAACC,EAAa,SAASD,CAAG,GAAKJ,EAAS,SAASI,CAA0B,GAC7E,OAAOF,EAAS,KAAKE,CAA0B,CAEnD,CAAC,EAICH,GAEF,OAAO,KAAKA,CAAI,EAAE,QAASG,GAAQ,CACjC,MAAME,EAAWF,EAEbE,IAAa,QAAUL,EAAK,MAAQC,EAAS,KAE/CA,EAAS,KAAO,CAAE,GAAGA,EAAS,KAAM,GAAGD,EAAK,IAAA,EACnCA,EAAKK,CAAQ,IAAM,SAE5BJ,EAASI,CAAQ,EAAIL,EAAKK,CAAQ,EAEtC,CAAC,EAGIJ,CACT,EAcaK,EAA4C,CAAC,CACxD,UAAAC,EACA,YAAAC,EACA,cAAAC,EACA,MAAAC,EAAQ,GACR,WAAAC,EACA,SAAAZ,EAAW,CAAA,EACX,OAAAa,EACA,OAAAC,EACA,SAAAC,CACF,IAAM,CACJ,MAAMC,EAAsBP,EACxB,CACE,GAAGA,EACH,KACEA,EAAY,OACXA,EAAY,MAAM,MAAQQ,EAAAA,UAAUR,EAAY,KAAK,KAAK,EAAI,OAAA,EAEnE,OAEES,EACJV,GACAT,EAAkBC,EAAU,CAC1B,SAAUU,EAAc,OACxB,GAAGM,CAAA,CACJ,EAEG,CAACd,EAAUiB,CAAW,EAAIC,EAAAA,SAA+BF,CAAQ,EACjE,CAACG,EAAQC,CAAS,EAAIF,EAAAA,SAA0B,IACpDG,EAAAA,gBAAgBL,GAAU,MAAM,KAAMA,GAAU,MAAM,IAAI,CAAA,EAEtD,CAACM,EAAWC,CAAY,EAAIL,EAAAA,SAAkB,IAAMF,GAAU,MAAM,OAAS,OAAO,EAE1FQ,EAAAA,UAAU,IAAM,CACRlB,IACJW,EAAYX,CAAS,EACrBc,EAAUC,EAAAA,gBAAgBf,EAAU,MAAM,KAAMA,EAAU,MAAM,IAAI,CAAC,EACrEiB,EAAajB,EAAU,MAAM,OAAS,OAAO,EAEjD,EAAG,CAACA,CAAS,CAAC,EAEd,MAAMmB,EAAQ,CAACnB,EAGToB,EAAkB,CACtBxB,EACAyB,IACG,CACHV,EAAaW,GACNA,GAGE,CAAE,GAAGA,EAAG,CAAC1B,CAAG,EAAGyB,CAAA,CACvB,CACH,EAGME,EAAU,CAAgC3B,EAAQyB,IAA4B,CAClFV,EAAaW,GAAM,CAEjB,GAAI,CAACA,GAAK,CAACA,EAAE,KACX,OAAOA,EAET,MAAME,EAAK,CAAE,GAAGF,EAAE,KAAM,CAAC1B,CAAG,EAAGyB,CAAA,EAC/B,MAAO,CAAE,GAAGC,EAAG,KAAME,CAAA,CACvB,CAAC,CACH,EAEA,IAAIC,EAAgB,GAChB/B,GACEyB,IACEjB,EAAc,SAASR,EAAS,IAAI,EAAG+B,EAAgB,gCACjD/B,EAAS,KAAK,MAAM,mBAAmB,IAAGS,EAAQ,2BAIhE,MAAMuB,EAAe,IAAM,CACrBhC,GACFY,EAAOZ,CAAQ,CAEnB,EAEMiC,EACJC,EAAAA,kBAAAA,KAAC,MAAA,CAAI,MAAO,CAAE,QAAS,OAAQ,MAAO,OAAQ,cAAe,KAAA,EAC1D,SAAA,CAAArB,GAAYP,GACX6B,EAAAA,kBAAAA,IAACC,EAAAA,OAAA,CACC,QAAQ,SACR,MAAO,mBACP,KAAM,SACN,SAAU1B,EACV,QAASG,CAAA,CAAA,0BAGZwB,EAAAA,OAAA,EAAO,EACRF,EAAAA,kBAAAA,IAACG,EAAAA,WAAA,CACC,MAAOb,EAAQ,mBAAqB,iBACpC,KAAM,QACN,SAAU,CAAC,CAACM,GAAiB,CAAC/B,EAC9B,OAAQ,CAAC+B,GAAiB,CAAC,CAAC/B,EAC5B,OAAQU,EACR,QAASsB,CAAA,CAAA,CACX,EACF,EAGF,IAAIO,EAAsC,CAAA,EAG1C5C,EAAc,QAAS6C,GAAgB,EACjC,CAACA,GAAa,OAASA,GAAa,OAAO,KAAMC,GAAMzC,GAAU,OAAO,SAASyC,CAAC,CAAC,IACrFF,EAAW,KAAKC,EAAY,KAAK,CAErC,CAAC,EAED,MAAME,EAAaC,EAAAA,eAAexB,CAAM,GAAK,CAAA,EACvCyB,EAAcC,EAAAA,gBAAgB1B,CAAM,GAAK,CAAA,EAC/CoB,EAAa,CAAC,GAAGA,EAAY,GAAGG,CAAU,EAAE,OAAQI,GAAM,CAACF,EAAY,SAASE,CAAC,CAAC,EAGlF,MAAMC,EAIF,CACF,KAAM,CAACpB,EAAQ,CAAA,EAAIqB,IACjBb,EAAAA,kBAAAA,IAACc,EAAAA,WAAA,CACC,OAAQtB,EACR,SAAWuB,GAAQ,CACjBF,EAASE,GAAK,OAASA,EAAM,MAAS,CACxC,CAAA,CAAA,EAGJ,QAAS,CAACvB,EAAOqB,IACfb,EAAAA,kBAAAA,IAACgB,EAAAA,YAAA,CACC,QAASxB,EACT,SAAWyB,GAAMJ,EAAUI,EAAE,OAA4B,OAAO,CAAA,CAAA,EAGpE,eAAgB,CAACzB,EAAOqB,IACtBb,EAAAA,kBAAAA,IAACgB,EAAAA,YAAA,CACC,QAASxB,EACT,SAAWyB,GAAMJ,EAAUI,EAAE,OAA4B,OAAO,CAAA,CAAA,CAClE,EAIEC,EAAqB,GAAyB,CAClD,MAAMC,EAAK,EAAE,OAA4B,MACzCzB,EAAQ,QAASyB,CAAC,EAEd7B,GACFC,EAAgB,OAAQX,YAAUuC,CAAC,CAAC,CAExC,EAEMC,EAAsBD,GAAgB,CAC1C,MAAME,EAAYF,EAAE,CAAC,EACrBlC,EAAUoC,CAAS,EACnB3B,EAAQ,OAAQ4B,EAAAA,gBAAgBD,EAAWlC,CAAS,CAAC,EAGjDkC,IAAc,UAAYA,IAAc,gBAC1C3B,EAAQ,OAAQ,MAAS,EAGvB2B,IAAc,QAAUxD,GAAU,MAAM,OAC1C6B,EAAQ,QAAS,EAAE,EAIrBA,EAAQ,SAAU,MAAS,CAC7B,EAGM6B,EADiBC,EAAAA,gBAAgB,KAAMC,GAAMA,EAAE,QAAUzC,CAAM,GACrC,QAEhC,OACEgB,EAAAA,kBAAAA,IAAC0B,EAAAA,OAAA,CACC,OAAQ7D,GAAU,MAAM,OAASA,GAAU,MAAQ,gBACnD,OAAAiC,EACA,QAAStB,EACT,OAAQ,GACR,MAAO,CAAE,MAAO,IAAK,OAAQ,GAAA,EAC7B,KAAK,OACL,oBAAqB,GACrB,UAAY,GAA2C,CACjD,EAAE,MAAQ,UAAY,EAAE,SAAW,EAAE,WACvC,EAAE,eAAA,EACFqB,EAAA,EAEJ,EAEC,SAAAhC,4BACE8D,EAAAA,WAAA,CACE,SAAA,CAAA,CAAChE,EAAS,SAAS,OAAO,2BACxBiE,UAAA,CAAQ,MAAO,QACd,SAAA5B,wBAAC6B,EAAAA,UAAA,CAAU,MAAOhE,GAAU,KAAK,MAAU,SAAUqD,EAAmB,UAAS,GAAC,GADtD,OAE9B,EAED,CAACvD,EAAS,SAAS,MAAM,GACxBqC,EAAAA,kBAAAA,IAAC4B,EAAAA,QAAA,CAAQ,MAAO,OACd,SAAA5B,EAAAA,kBAAAA,IAAC8B,EAAAA,YAAA,CACC,MAAOjE,EAAS,KAChB,SAAU,CAACyB,EACX,SAAW6B,GAAM5B,EAAgB,OAAQ4B,CAAC,EAC1C,MAAM,MAAA,CAAA,GALmB,MAO7B,EAED,CAACxD,EAAS,SAAS,OAAO,GACzBqC,EAAAA,kBAAAA,IAAC4B,EAAAA,QAAA,CAAQ,MAAM,QACb,SAAA5B,EAAAA,kBAAAA,IAAC+B,EAAAA,SAAA,CACC,QAASxE,EACT,SAAUM,EAAS,QACnB,MAAOA,EAAS,OAAS,CAAA,EACzB,SAAWsD,GAAM5B,EAAgB,QAAS4B,CAA4B,EACtE,YAAW,GACX,YAAW,EAAA,CAAA,EAEf,EAED,CAACxD,EAAS,SAAS,MAAM,2BACvBiE,EAAAA,QAAA,CAAQ,MAAM,OACb,SAAA7B,EAAAA,kBAAAA,KAAC1C,EAAA,CACC,SAAA,CAAA2C,EAAAA,kBAAAA,IAAC+B,EAAAA,SAAA,CACC,MAAO,CAAC/C,CAAM,EACd,SAAUnB,EAAS,SAAW,CAACyB,EAC/B,UAAWkC,EAAAA,gBAAgB,KAAMC,GAAMA,EAAE,QAAUzC,CAAM,GAAG,KAC5D,QAASwC,EAAAA,gBACT,SAAUJ,EACV,YAAa,EACb,YAAW,GACX,MAAO,CAAE,KAAM,CAAA,CAAE,CAAA,EAElBG,GAAWA,EAAQ,OAAS,GAC3BvB,EAAAA,kBAAAA,IAAC+B,EAAAA,SAAA,CACC,MAAO,CACLlE,EAAS,KAAK,QACZ0D,EAAQ,KAAMS,GAAMA,EAAE,SAAS,GAAG,OAClCC,EAAAA,oBAAA,EAEJ,SAAUpE,EAAS,QACnB,QAAQ,QACR,QAAS0D,EACT,SAAWJ,GACTzB,EAAQ,SAAUyB,EAAE,CAAC,IAAMc,uBAAuB,OAAYd,EAAE,CAAC,CAAC,EAEpE,MAAO,CAAE,KAAM,EAAA,CAAI,CAAA,CACrB,CAAA,CAEJ,CAAA,CACF,EAED,CAACxD,EAAS,SAAS,MAAM,GAAKqB,IAAW,UACxCgB,EAAAA,kBAAAA,IAAC4B,EAAAA,QAAA,CAAQ,MAAM,UACb,SAAA5B,EAAAA,kBAAAA,IAACgB,EAAAA,YAAA,CACC,QAAS7B,EACT,SAAUtB,EAAS,SAAW,CAACyB,EAC/B,SAAW,GAAM,CACf,MAAM4C,EAAW,EAAE,OAA4B,QAC/C9C,EAAa8C,CAAO,EACpBxC,EAAQ,OAAQwC,EAAU,QAAU,SAAS,CAC/C,CAAA,CAAA,EAEJ,EAED9B,EAAW,IAAK+B,GAAU,CAEzB,GAAIxE,EAAS,SAASwE,CAAK,EAAG,OAAO,KAErC,IAAIC,EAAY,KACZC,EAAqBC,EAAAA,WAAWH,CAAK,EAEzC,GAAIA,IAAU,QAAUA,IAAU,UAAW,CAC3C,MAAMI,EAAW3B,EAAauB,CAA2B,EACzDC,EAAYG,EAAS1E,GAAU,KAAKsE,CAAK,EAAI3C,GAAUE,EAAQyC,EAAO3C,CAAK,CAAC,CAC9E,SAAW2C,IAAU,WAAatE,GAAU,MAAM,OAAS,UACzDuE,EAAYxB,EAAa,eACvB/C,GAAU,KAAKsE,CAAK,EACnB3C,GAAUE,EAAQyC,EAAO3C,CAAiC,CAAA,UAEpD,CAAC,KAAM,KAAM,KAAM,IAAI,EAAE,SAAS2C,CAAK,EAAG,CAEnD,GAAI,CAAC,KAAM,IAAI,EAAE,SAASA,CAAK,EAAG,OAAO,KACzCC,EACEpC,EAAAA,kBAAAA,IAACwC,EAAAA,YAAA,CACC,MAAO3E,GAAU,KACjB,MAAOsE,IAAU,KACjB,QAAStE,GAAU,MAAM,OAAS,QAClC,SAAWsD,GAAM,CACf,MAAMsB,EAAUtB,EAAE,KAAO,OAAY,OAAOA,EAAE,EAAE,EAAI,OAC9CuB,EAAUvB,EAAE,KAAO,OAAY,OAAOA,EAAE,EAAE,EAAI,OAIjDA,EAAE,KAAO,QAAa,MAAMsB,CAAO,GAEnCtB,EAAE,KAAO,QAAa,MAAMuB,CAAO,GAMtC5D,EAAaW,GAAM,CACjB,GAAI,CAACA,GAAK,CAACA,EAAE,KAAM,OAAOA,EAC1B,MAAME,EAAK,CAAE,GAAGF,EAAE,KAAM,GAAG0B,CAAA,EAC3B,MAAO,CAAE,GAAG1B,EAAG,KAAME,CAAA,CACvB,CAAC,CACH,CAAA,CAAA,EAKJ0C,EAAaF,IAAU,KAAO,MAAQ,KACxC,KAAO,CACL,MAAMQ,EAAqB1B,GAA2C,CACpE,MAAM2B,EAAW3B,EAAE,OAAO,MAC1B,OAAQkB,EAAA,CACN,IAAK,YACL,IAAK,YACL,IAAK,WACL,IAAK,WAAY,CACf,MAAMU,EAAM,SAASD,EAAU,EAAE,EACjClD,EAAQyC,EAAO,MAAMU,CAAG,EAAI,OAAYA,CAAG,EAC3C,KACF,CACA,QAEEnD,EAAQyC,EAAOS,CAAuC,EACtD,KAAA,CAEN,EAEAR,EACEpC,EAAAA,kBAAAA,IAAC6B,EAAAA,UAAA,CACC,MAAO,OAAOhE,GAAU,KAAKsE,CAAK,GAAK,EAAE,EACzC,SAAUQ,CAAA,CAAA,CAGhB,CAEA,OACE3C,EAAAA,kBAAAA,IAAC4B,EAAAA,QAAA,CACC,MAAOS,EAEP,MAAO,CACL,WAAY,YAAA,EAGb,SAAAD,CAAA,EALID,CAAA,CAQX,CAAC,EACDnC,EAAAA,kBAAAA,IAAC,OAAA,CACG,UAAAJ,GAAiBtB,IACjB0B,EAAAA,kBAAAA,IAAC,QAAK,UAAU,kBAAmB,SAAAJ,GAAiBtB,CAAA,CAAM,CAAA,CAE9D,CAAA,CAAA,CACF,CAAA,CAAA,CAIR"}
|