@ynput/ayon-frontend-shared 0.3.22 → 0.3.23
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 +23 -22
- package/dist/DetailsPanel.es.js.map +1 -1
- package/dist/_virtual/index.cjs14.js +1 -1
- package/dist/_virtual/index.cjs15.js +1 -1
- package/dist/_virtual/index.cjs19.js +1 -1
- package/dist/_virtual/index.cjs22.js +1 -1
- package/dist/_virtual/index.cjs23.js +1 -1
- package/dist/_virtual/index.cjs24.js +1 -1
- package/dist/_virtual/index.cjs6.js +1 -1
- package/dist/_virtual/index.cjs8.js +1 -1
- package/dist/_virtual/index.cjs9.js +1 -1
- package/dist/_virtual/index.es10.js +2 -2
- package/dist/_virtual/index.es11.js +2 -2
- package/dist/_virtual/index.es13.js +2 -2
- package/dist/_virtual/index.es14.js +2 -5
- package/dist/_virtual/index.es14.js.map +1 -1
- package/dist/_virtual/index.es15.js +2 -2
- package/dist/_virtual/index.es16.js +2 -2
- package/dist/_virtual/index.es17.js +2 -2
- package/dist/_virtual/index.es18.js +2 -2
- package/dist/_virtual/index.es19.js +2 -2
- package/dist/_virtual/index.es22.js +3 -3
- package/dist/_virtual/index.es23.js +5 -5
- package/dist/_virtual/index.es24.js +5 -5
- package/dist/_virtual/index.es6.js +2 -2
- package/dist/_virtual/index.es8.js +2 -2
- package/dist/_virtual/index.es9.js +5 -2
- package/dist/_virtual/index.es9.js.map +1 -1
- package/dist/components.cjs.js +1 -1
- package/dist/components.es.js +157 -155
- package/dist/components.es.js.map +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.es.js +10 -9
- package/dist/index.es.js.map +1 -1
- package/dist/node_modules/rehype/node_modules/unified/lib/index.cjs.js +1 -1
- package/dist/node_modules/rehype/node_modules/unified/lib/index.es.js +2 -2
- package/dist/node_modules/rehype/node_modules/vfile/lib/index.cjs.js +1 -1
- package/dist/node_modules/rehype/node_modules/vfile/lib/index.es.js +1 -1
- package/dist/node_modules/rehype-parse/lib/index.cjs.js +1 -1
- package/dist/node_modules/rehype-parse/lib/index.es.js +1 -1
- package/dist/node_modules/remove-accents/index.cjs.js +1 -1
- package/dist/node_modules/remove-accents/index.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/error-codes/dist/index.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/error-codes/dist/index.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/index.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/index.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/module/index.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/module/index.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/plugins/snapshot/index.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/plugins/snapshot/index.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/remote/index.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/remote/index.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/shared/index.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/shared/index.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/type/index.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/type/index.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/hooks/index.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/hooks/index.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/index.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/index.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/index.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/index.cjs.js.map +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/index.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/sdk/dist/index.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/sdk/dist/index.es.js +1 -1
- package/dist/shared/node_modules/prop-types/index.cjs.js +1 -1
- package/dist/shared/node_modules/prop-types/index.es.js +1 -1
- package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.cjs.js +1 -1
- package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.cjs.js.map +1 -1
- package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.es.js +1 -1
- package/dist/shared/node_modules/react-transition-group/esm/Transition.cjs.js +1 -1
- package/dist/shared/node_modules/react-transition-group/esm/Transition.cjs.js.map +1 -1
- package/dist/shared/node_modules/react-transition-group/esm/Transition.es.js +1 -1
- package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.cjs.js +1 -1
- package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.cjs.js.map +1 -1
- package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.es.js +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 +155 -175
- package/dist/shared/src/components/AttributeEditor/AttributeEditor.es.js.map +1 -1
- package/dist/shared/src/components/AttributeEditor/attributeTypeMap.cjs.js +2 -0
- package/dist/shared/src/components/AttributeEditor/attributeTypeMap.cjs.js.map +1 -0
- package/dist/shared/src/components/AttributeEditor/attributeTypeMap.es.js +77 -0
- package/dist/shared/src/components/AttributeEditor/attributeTypeMap.es.js.map +1 -0
- 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 +3 -2
- 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 +3 -2
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.es.js.map +1 -1
- package/dist/shared/src/components/EnumEditor/EnumEditorItem.cjs.js +1 -1
- package/dist/shared/src/components/EnumEditor/EnumEditorItem.cjs.js.map +1 -1
- package/dist/shared/src/components/EnumEditor/EnumEditorItem.es.js +27 -27
- package/dist/shared/src/components/EnumEditor/EnumEditorItem.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 +3 -2
- package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.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 +3 -2
- package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +5 -4
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
- package/dist/shared/src/components/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 -2
- 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 +3 -2
- 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 +3 -2
- package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js.map +1 -1
- package/dist/shared/src/components/RenameForm/RenameForm.cjs.js +1 -1
- package/dist/shared/src/components/RenameForm/RenameForm.cjs.js.map +1 -1
- package/dist/shared/src/components/RenameForm/RenameForm.es.js +3 -2
- 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 +3 -2
- 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 +4 -3
- 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 +3 -2
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesSelector/Card.cjs.js +2 -0
- package/dist/shared/src/components/ReviewablesSelector/Card.cjs.js.map +1 -0
- package/dist/shared/src/components/ReviewablesSelector/Card.es.js +307 -0
- package/dist/shared/src/components/ReviewablesSelector/Card.es.js.map +1 -0
- package/dist/shared/src/components/ReviewablesSelector/ReviewablesSelector.cjs.js +1 -1
- package/dist/shared/src/components/ReviewablesSelector/ReviewablesSelector.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesSelector/ReviewablesSelector.es.js +64 -322
- package/dist/shared/src/components/ReviewablesSelector/ReviewablesSelector.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesSelector/ReviewablesSelector.styled.cjs.js +22 -5
- package/dist/shared/src/components/ReviewablesSelector/ReviewablesSelector.styled.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesSelector/ReviewablesSelector.styled.es.js +27 -9
- package/dist/shared/src/components/ReviewablesSelector/ReviewablesSelector.styled.es.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/FormFile.cjs.js +1 -1
- package/dist/shared/src/components/SimpleFormDialog/FormFile.cjs.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/FormFile.es.js +5 -4
- package/dist/shared/src/components/SimpleFormDialog/FormFile.es.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js +1 -1
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js +3 -2
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js +1 -1
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js.map +1 -1
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js +3 -2
- 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 +5 -4
- package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js +1 -1
- package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js +3 -2
- package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js +1 -1
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js +3 -2
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +3 -2
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.es.js +3 -2
- 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 +3 -2
- 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 +3 -2
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.es.js +17 -16
- package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.es.js +3 -2
- 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 +3 -2
- package/dist/shared/src/containers/DetailsPanel/containers/FeedContextWrapper.es.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js +3 -2
- 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 +3 -2
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js +3 -2
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js +3 -2
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityCheckbox/ActivityCheckbox.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityCheckbox/ActivityCheckbox.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityCheckbox/ActivityCheckbox.es.js +3 -2
- 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 +3 -2
- 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 +3 -2
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js +3 -2
- package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/helpers.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/helpers.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/helpers.es.js +7 -6
- package/dist/shared/src/containers/Feed/components/CommentInput/helpers.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js +3 -2
- package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.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 +3 -2
- 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 +3 -2
- 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 +3 -2
- 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 +3 -2
- 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 +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/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 +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js +6 -5
- 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 +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.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 +3 -2
- 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 +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js +3 -2
- 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 +3 -2
- 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 +3 -2
- 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 +9 -8
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js +14 -13
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/queryFilterToClientFilter.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/queryFilterToClientFilter.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/queryFilterToClientFilter.es.js +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/utils/queryFilterToClientFilter.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js +4 -3
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js +5 -4
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.es.js +3 -2
- 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 +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.es.js.map +1 -1
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +1 -1
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js.map +1 -1
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +3 -2
- 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 +3 -2
- package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js.map +1 -1
- package/dist/shared/src/containers/Slicer/components/SlicerSearch.cjs.js +1 -1
- package/dist/shared/src/containers/Slicer/components/SlicerSearch.cjs.js.map +1 -1
- package/dist/shared/src/containers/Slicer/components/SlicerSearch.es.js +3 -2
- package/dist/shared/src/containers/Slicer/components/SlicerSearch.es.js.map +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useSelectedEntityIds.cjs.js +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useSelectedEntityIds.cjs.js.map +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useSelectedEntityIds.es.js +3 -2
- package/dist/shared/src/containers/Slicer/hooks/useSelectedEntityIds.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 +4 -4
- package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.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 +3 -2
- package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.es.js.map +1 -1
- package/dist/shared/src/context/WebsocketContext.cjs.js +1 -1
- package/dist/shared/src/context/WebsocketContext.cjs.js.map +1 -1
- package/dist/shared/src/context/WebsocketContext.es.js +5 -4
- package/dist/shared/src/context/WebsocketContext.es.js.map +1 -1
- package/dist/shared/src/hooks/useLoadModule.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useLoadModule.es.js.map +1 -1
- package/dist/shared/src/util/getAttributeIcon.cjs.js +1 -1
- package/dist/shared/src/util/getAttributeIcon.cjs.js.map +1 -1
- package/dist/shared/src/util/getAttributeIcon.es.js +5 -5
- package/dist/shared/src/util/getAttributeIcon.es.js.map +1 -1
- package/dist/types/components/AttributeEditor/attributeTypeMap.d.ts +13 -0
- package/dist/types/components/AttributeEditor/index.d.ts +1 -0
- package/dist/types/components/ReviewablesSelector/Card.d.ts +18 -0
- package/dist/types/components/ReviewablesSelector/ReviewablesSelector.d.ts +1 -2
- package/dist/types/components/ReviewablesSelector/ReviewablesSelector.styled.d.ts +1 -0
- package/package.json +1 -1
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { j as n } from "../../../../_virtual/jsx-runtime.es.js";
|
|
2
|
-
import { useState as
|
|
3
|
-
import { Dialog as
|
|
4
|
-
import { camelCase as
|
|
5
|
-
import { MinMaxField as
|
|
6
|
-
import { EnumEditor as
|
|
2
|
+
import { useState as D, useEffect as J } from "react";
|
|
3
|
+
import { Dialog as G, FormLayout as X, FormRow as h, InputText as O, LockedInput as Z, Dropdown as _, InputSwitch as T, Button as $, Spacer as H, SaveButton as Q } from "@ynput/ayon-react-components";
|
|
4
|
+
import { camelCase as P, upperFirst as W } from "lodash";
|
|
5
|
+
import { MinMaxField as ee } from "./components/MinMaxField.es.js";
|
|
6
|
+
import { EnumEditor as te } from "../EnumEditor/EnumEditor.es.js";
|
|
7
7
|
import "../EnumEditor/EnumEditor.styled.es.js";
|
|
8
8
|
import "clsx";
|
|
9
|
-
|
|
9
|
+
import { backendToUiType as U, UI_TYPE_FIELDS as ae, UI_TYPE_EXCLUDE as ne, UI_TYPE_OPTIONS as A, uiTypeToBackend as ie } from "./attributeTypeMap.es.js";
|
|
10
|
+
const oe = [
|
|
10
11
|
{ value: "project", label: "Project" },
|
|
11
12
|
{ value: "folder", label: "Folder" },
|
|
12
13
|
{ value: "task", label: "Task" },
|
|
@@ -15,7 +16,7 @@ const Z = [
|
|
|
15
16
|
{ value: "representation", label: "Representation" },
|
|
16
17
|
{ value: "user", label: "User" },
|
|
17
18
|
{ value: "list", label: "List" }
|
|
18
|
-
],
|
|
19
|
+
], le = [
|
|
19
20
|
{ value: "description", scope: null },
|
|
20
21
|
{ value: "example", scope: null },
|
|
21
22
|
// @ts-expect-error - project is not a scope?
|
|
@@ -24,39 +25,7 @@ const Z = [
|
|
|
24
25
|
value: "inherit",
|
|
25
26
|
scope: ["project", "folder", "task", "product", "version", "representation", "user"]
|
|
26
27
|
}
|
|
27
|
-
],
|
|
28
|
-
string: {
|
|
29
|
-
value: "string",
|
|
30
|
-
label: "String",
|
|
31
|
-
fields: ["minLength", "maxLength", "enum", "regex"]
|
|
32
|
-
},
|
|
33
|
-
integer: {
|
|
34
|
-
value: "integer",
|
|
35
|
-
label: "Integer",
|
|
36
|
-
fields: ["ge", "gt", "le", "lt"]
|
|
37
|
-
},
|
|
38
|
-
float: {
|
|
39
|
-
value: "float",
|
|
40
|
-
label: "Decimal number",
|
|
41
|
-
fields: ["ge", "gt", "le", "lt"]
|
|
42
|
-
},
|
|
43
|
-
list_of_strings: {
|
|
44
|
-
value: "list_of_strings",
|
|
45
|
-
label: "List Of Strings",
|
|
46
|
-
fields: ["minItems", "maxItems", "enum"]
|
|
47
|
-
},
|
|
48
|
-
boolean: {
|
|
49
|
-
value: "boolean",
|
|
50
|
-
label: "Boolean",
|
|
51
|
-
fields: [],
|
|
52
|
-
exclude: ["example"]
|
|
53
|
-
},
|
|
54
|
-
datetime: {
|
|
55
|
-
value: "datetime",
|
|
56
|
-
label: "Datetime",
|
|
57
|
-
fields: []
|
|
58
|
-
}
|
|
59
|
-
}, H = {
|
|
28
|
+
], se = {
|
|
60
29
|
name: "",
|
|
61
30
|
scope: ["folder", "task"],
|
|
62
31
|
builtin: !1,
|
|
@@ -78,237 +47,248 @@ const Z = [
|
|
|
78
47
|
le: void 0,
|
|
79
48
|
lt: void 0
|
|
80
49
|
}
|
|
81
|
-
},
|
|
82
|
-
const
|
|
83
|
-
Object.keys(
|
|
84
|
-
!
|
|
50
|
+
}, re = (r, c) => {
|
|
51
|
+
const s = JSON.parse(JSON.stringify(se)), v = ["name"];
|
|
52
|
+
Object.keys(s).forEach((o) => {
|
|
53
|
+
!v.includes(o) && r.includes(o) && o !== "data" && delete s[o];
|
|
85
54
|
});
|
|
86
|
-
const
|
|
87
|
-
return
|
|
88
|
-
!
|
|
89
|
-
}),
|
|
90
|
-
const m =
|
|
91
|
-
m === "data" &&
|
|
92
|
-
}),
|
|
93
|
-
},
|
|
94
|
-
attribute:
|
|
95
|
-
defaultData:
|
|
96
|
-
existingNames:
|
|
97
|
-
error:
|
|
98
|
-
isUpdating:
|
|
99
|
-
excludes:
|
|
55
|
+
const x = ["title"];
|
|
56
|
+
return s.data && Object.keys(s.data).forEach((o) => {
|
|
57
|
+
!x.includes(o) && r.includes(o) && delete s.data[o];
|
|
58
|
+
}), c && Object.keys(c).forEach((o) => {
|
|
59
|
+
const m = o;
|
|
60
|
+
m === "data" && c.data && s.data ? s.data = { ...s.data, ...c.data } : c[m] !== void 0 && (s[m] = c[m]);
|
|
61
|
+
}), s;
|
|
62
|
+
}, ge = ({
|
|
63
|
+
attribute: r,
|
|
64
|
+
defaultData: c,
|
|
65
|
+
existingNames: s,
|
|
66
|
+
error: v = "",
|
|
67
|
+
isUpdating: x,
|
|
68
|
+
excludes: o = [],
|
|
100
69
|
onHide: m,
|
|
101
|
-
onEdit:
|
|
102
|
-
onDelete:
|
|
70
|
+
onEdit: B,
|
|
71
|
+
onDelete: k
|
|
103
72
|
}) => {
|
|
104
|
-
const
|
|
105
|
-
...
|
|
106
|
-
name:
|
|
107
|
-
} : void 0,
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
);
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
}, [
|
|
116
|
-
const
|
|
117
|
-
|
|
118
|
-
}, d = (e,
|
|
119
|
-
|
|
120
|
-
if (!
|
|
121
|
-
return
|
|
122
|
-
const
|
|
123
|
-
return { ...
|
|
73
|
+
const M = c ? {
|
|
74
|
+
...c,
|
|
75
|
+
name: c.name || (c.data?.title ? P(c.data.title) : void 0)
|
|
76
|
+
} : void 0, j = r || re(o, {
|
|
77
|
+
position: s.length,
|
|
78
|
+
...M
|
|
79
|
+
}), [a, y] = D(j), [f, S] = D(
|
|
80
|
+
() => U(j?.data?.type, j?.data?.enum)
|
|
81
|
+
), [N, L] = D(() => j?.data?.type === "float");
|
|
82
|
+
J(() => {
|
|
83
|
+
r && (y(r), S(U(r.data?.type, r.data?.enum)), L(r.data?.type === "float"));
|
|
84
|
+
}, [r]);
|
|
85
|
+
const p = !r, C = (e, t) => {
|
|
86
|
+
y((i) => i && { ...i, [e]: t });
|
|
87
|
+
}, d = (e, t) => {
|
|
88
|
+
y((i) => {
|
|
89
|
+
if (!i || !i.data)
|
|
90
|
+
return i;
|
|
91
|
+
const l = { ...i.data, [e]: t };
|
|
92
|
+
return { ...i, data: l };
|
|
124
93
|
});
|
|
125
94
|
};
|
|
126
|
-
let
|
|
127
|
-
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
},
|
|
131
|
-
|
|
132
|
-
|
|
95
|
+
let b = "";
|
|
96
|
+
a && p && (s.includes(a.name) ? b = "This attribute already exists" : a.name.match("^[a-zA-Z_]{2,64}$") || (v = "Invalid attribute name"));
|
|
97
|
+
const w = () => {
|
|
98
|
+
a && B(a);
|
|
99
|
+
}, K = /* @__PURE__ */ n.jsxs("div", { style: { display: "flex", width: "100%", flexDirection: "row" }, children: [
|
|
100
|
+
k && r && /* @__PURE__ */ n.jsx(
|
|
101
|
+
$,
|
|
133
102
|
{
|
|
134
103
|
variant: "danger",
|
|
135
104
|
label: "Delete attribute",
|
|
136
105
|
icon: "delete",
|
|
137
|
-
disabled:
|
|
138
|
-
onClick:
|
|
106
|
+
disabled: x,
|
|
107
|
+
onClick: k
|
|
139
108
|
}
|
|
140
109
|
),
|
|
141
|
-
/* @__PURE__ */ n.jsx(
|
|
110
|
+
/* @__PURE__ */ n.jsx(H, {}),
|
|
142
111
|
/* @__PURE__ */ n.jsx(
|
|
143
|
-
|
|
112
|
+
Q,
|
|
144
113
|
{
|
|
145
|
-
label:
|
|
114
|
+
label: p ? "Create Attribute" : "Save Attribute",
|
|
146
115
|
icon: "check",
|
|
147
|
-
disabled: !!
|
|
148
|
-
active: !
|
|
149
|
-
saving:
|
|
150
|
-
onClick:
|
|
116
|
+
disabled: !!b || !a,
|
|
117
|
+
active: !b && !!a,
|
|
118
|
+
saving: x,
|
|
119
|
+
onClick: w
|
|
151
120
|
}
|
|
152
121
|
)
|
|
153
122
|
] });
|
|
154
|
-
let
|
|
155
|
-
|
|
156
|
-
(!e?.scope || e?.scope?.some((
|
|
157
|
-
})
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
Y,
|
|
123
|
+
let E = [];
|
|
124
|
+
le.forEach((e) => {
|
|
125
|
+
(!e?.scope || e?.scope?.some((t) => a?.scope?.includes(t))) && E.push(e.value);
|
|
126
|
+
});
|
|
127
|
+
const V = ae[f] ?? [], z = ne[f] ?? [];
|
|
128
|
+
E = [...E, ...V].filter((e) => !z.includes(e));
|
|
129
|
+
const F = {
|
|
130
|
+
enum: (e = [], t) => /* @__PURE__ */ n.jsx(
|
|
131
|
+
te,
|
|
164
132
|
{
|
|
165
133
|
values: e,
|
|
166
|
-
onChange: (
|
|
167
|
-
|
|
134
|
+
onChange: (i) => {
|
|
135
|
+
t(i?.length ? i : void 0);
|
|
168
136
|
}
|
|
169
137
|
}
|
|
170
138
|
),
|
|
171
|
-
inherit: (e,
|
|
172
|
-
|
|
139
|
+
inherit: (e, t) => /* @__PURE__ */ n.jsx(
|
|
140
|
+
T,
|
|
173
141
|
{
|
|
174
142
|
checked: e,
|
|
175
|
-
onChange: (
|
|
143
|
+
onChange: (i) => t(i.target.checked)
|
|
176
144
|
}
|
|
177
145
|
),
|
|
178
|
-
booleanDefault: (e,
|
|
179
|
-
|
|
146
|
+
booleanDefault: (e, t) => /* @__PURE__ */ n.jsx(
|
|
147
|
+
T,
|
|
180
148
|
{
|
|
181
149
|
checked: e,
|
|
182
|
-
onChange: (
|
|
150
|
+
onChange: (i) => t(i.target.checked)
|
|
183
151
|
}
|
|
184
152
|
)
|
|
185
|
-
},
|
|
186
|
-
const
|
|
187
|
-
d("title",
|
|
153
|
+
}, R = (e) => {
|
|
154
|
+
const t = e.target.value;
|
|
155
|
+
d("title", t), p && C("name", P(t));
|
|
156
|
+
}, Y = (e) => {
|
|
157
|
+
const t = e[0];
|
|
158
|
+
S(t), d("type", ie(t, N)), t !== "select" && t !== "multi_select" && d("enum", void 0), t !== "text" && a?.data?.regex && d("regex", "");
|
|
188
159
|
};
|
|
189
160
|
return /* @__PURE__ */ n.jsx(
|
|
190
|
-
|
|
161
|
+
G,
|
|
191
162
|
{
|
|
192
|
-
header:
|
|
193
|
-
footer:
|
|
163
|
+
header: a?.data?.title || a?.name || "New attribute",
|
|
164
|
+
footer: K,
|
|
194
165
|
onClose: m,
|
|
195
166
|
isOpen: !0,
|
|
196
167
|
style: { width: 700, zIndex: 999 },
|
|
197
168
|
size: "full",
|
|
198
169
|
enableBackdropClose: !1,
|
|
199
170
|
onKeyDown: (e) => {
|
|
200
|
-
e.key === "Enter" && (e.metaKey || e.ctrlKey) && (e.preventDefault(),
|
|
171
|
+
e.key === "Enter" && (e.metaKey || e.ctrlKey) && (e.preventDefault(), w());
|
|
201
172
|
},
|
|
202
|
-
children:
|
|
203
|
-
!
|
|
204
|
-
!
|
|
205
|
-
|
|
173
|
+
children: a && /* @__PURE__ */ n.jsxs(X, { children: [
|
|
174
|
+
!o.includes("title") && /* @__PURE__ */ n.jsx(h, { label: "Title", children: /* @__PURE__ */ n.jsx(O, { value: a?.data.title, onChange: R, autoFocus: !0 }) }, "title"),
|
|
175
|
+
!o.includes("name") && /* @__PURE__ */ n.jsx(h, { label: "Name", children: /* @__PURE__ */ n.jsx(
|
|
176
|
+
Z,
|
|
206
177
|
{
|
|
207
|
-
value:
|
|
208
|
-
disabled: !
|
|
209
|
-
onSubmit: (e) =>
|
|
178
|
+
value: a.name,
|
|
179
|
+
disabled: !p,
|
|
180
|
+
onSubmit: (e) => C("name", e),
|
|
210
181
|
label: "name"
|
|
211
182
|
}
|
|
212
183
|
) }, "name"),
|
|
213
|
-
!
|
|
214
|
-
|
|
184
|
+
!o.includes("scope") && /* @__PURE__ */ n.jsx(h, { label: "Scope", children: /* @__PURE__ */ n.jsx(
|
|
185
|
+
_,
|
|
215
186
|
{
|
|
216
|
-
options:
|
|
217
|
-
disabled:
|
|
218
|
-
value:
|
|
219
|
-
onChange: (e) =>
|
|
187
|
+
options: oe,
|
|
188
|
+
disabled: a.builtin,
|
|
189
|
+
value: a.scope || [],
|
|
190
|
+
onChange: (e) => C("scope", e),
|
|
220
191
|
multiSelect: !0,
|
|
221
192
|
widthExpand: !0
|
|
222
193
|
}
|
|
223
194
|
) }),
|
|
224
|
-
!
|
|
225
|
-
|
|
195
|
+
!o.includes("type") && /* @__PURE__ */ n.jsx(h, { label: "Type", children: /* @__PURE__ */ n.jsx(
|
|
196
|
+
_,
|
|
226
197
|
{
|
|
227
|
-
value: [
|
|
228
|
-
disabled:
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
d("type", a), !s && t?.data?.regex && d("regex", "");
|
|
233
|
-
},
|
|
198
|
+
value: [f],
|
|
199
|
+
disabled: a.builtin || !p,
|
|
200
|
+
valueIcon: A.find((e) => e.value === f)?.icon,
|
|
201
|
+
options: A,
|
|
202
|
+
onChange: Y,
|
|
234
203
|
minSelected: 1,
|
|
235
204
|
widthExpand: !0
|
|
236
205
|
}
|
|
237
206
|
) }),
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
207
|
+
!o.includes("type") && f === "number" && /* @__PURE__ */ n.jsx(h, { label: "Decimal", children: /* @__PURE__ */ n.jsx(
|
|
208
|
+
T,
|
|
209
|
+
{
|
|
210
|
+
checked: N,
|
|
211
|
+
disabled: a.builtin || !p,
|
|
212
|
+
onChange: (e) => {
|
|
213
|
+
const t = e.target.checked;
|
|
214
|
+
L(t), d("type", t ? "float" : "integer");
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
) }),
|
|
218
|
+
E.map((e) => {
|
|
219
|
+
if (o.includes(e)) return null;
|
|
220
|
+
let t = null, i = W(e);
|
|
241
221
|
if (e === "enum" || e === "inherit") {
|
|
242
|
-
const
|
|
243
|
-
|
|
244
|
-
} else if (e === "default" &&
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
(
|
|
222
|
+
const l = F[e];
|
|
223
|
+
t = l(a?.data[e], (g) => d(e, g));
|
|
224
|
+
} else if (e === "default" && a?.data?.type === "boolean")
|
|
225
|
+
t = F.booleanDefault(
|
|
226
|
+
a?.data[e],
|
|
227
|
+
(l) => d(e, l)
|
|
248
228
|
);
|
|
249
229
|
else if (["ge", "gt", "le", "lt"].includes(e)) {
|
|
250
230
|
if (["gt", "lt"].includes(e)) return null;
|
|
251
|
-
|
|
252
|
-
|
|
231
|
+
t = /* @__PURE__ */ n.jsx(
|
|
232
|
+
ee,
|
|
253
233
|
{
|
|
254
|
-
value:
|
|
234
|
+
value: a?.data,
|
|
255
235
|
isMin: e === "ge",
|
|
256
|
-
isFloat:
|
|
257
|
-
onChange: (
|
|
258
|
-
const g =
|
|
236
|
+
isFloat: a?.data?.type === "float",
|
|
237
|
+
onChange: (l) => {
|
|
238
|
+
const g = l.ge !== void 0 ? Number(l.ge) : void 0, I = l.le !== void 0 ? Number(l.le) : void 0;
|
|
259
239
|
// @ts-expect-error
|
|
260
|
-
|
|
261
|
-
|
|
240
|
+
l.ge !== void 0 && isNaN(g) || // @ts-expect-error
|
|
241
|
+
l.le !== void 0 && isNaN(I) || y((u) => {
|
|
262
242
|
if (!u || !u.data) return u;
|
|
263
|
-
const
|
|
264
|
-
return { ...u, data:
|
|
243
|
+
const q = { ...u.data, ...l };
|
|
244
|
+
return { ...u, data: q };
|
|
265
245
|
});
|
|
266
246
|
}
|
|
267
247
|
}
|
|
268
|
-
),
|
|
248
|
+
), i = e === "ge" ? "Min" : "Max";
|
|
269
249
|
} else {
|
|
270
|
-
const
|
|
271
|
-
const
|
|
250
|
+
const l = (g) => {
|
|
251
|
+
const I = g.target.value;
|
|
272
252
|
switch (e) {
|
|
273
253
|
case "minLength":
|
|
274
254
|
case "maxLength":
|
|
275
255
|
case "minItems":
|
|
276
256
|
case "maxItems": {
|
|
277
|
-
const u = parseInt(
|
|
257
|
+
const u = parseInt(I, 10);
|
|
278
258
|
d(e, isNaN(u) ? void 0 : u);
|
|
279
259
|
break;
|
|
280
260
|
}
|
|
281
261
|
default:
|
|
282
|
-
d(e,
|
|
262
|
+
d(e, I);
|
|
283
263
|
break;
|
|
284
264
|
}
|
|
285
265
|
};
|
|
286
|
-
|
|
287
|
-
|
|
266
|
+
t = /* @__PURE__ */ n.jsx(
|
|
267
|
+
O,
|
|
288
268
|
{
|
|
289
|
-
value: String(
|
|
290
|
-
onChange:
|
|
269
|
+
value: String(a?.data[e] ?? ""),
|
|
270
|
+
onChange: l
|
|
291
271
|
}
|
|
292
272
|
);
|
|
293
273
|
}
|
|
294
274
|
return /* @__PURE__ */ n.jsx(
|
|
295
275
|
h,
|
|
296
276
|
{
|
|
297
|
-
label:
|
|
277
|
+
label: i,
|
|
298
278
|
style: {
|
|
299
279
|
alignItems: "flex-start"
|
|
300
280
|
},
|
|
301
|
-
children:
|
|
281
|
+
children: t
|
|
302
282
|
},
|
|
303
283
|
e
|
|
304
284
|
);
|
|
305
285
|
}),
|
|
306
|
-
/* @__PURE__ */ n.jsx("span", { children: (
|
|
286
|
+
/* @__PURE__ */ n.jsx("span", { children: (b || v) && /* @__PURE__ */ n.jsx("span", { className: "form-error-text", children: b || v }) })
|
|
307
287
|
] })
|
|
308
288
|
}
|
|
309
289
|
);
|
|
310
290
|
};
|
|
311
291
|
export {
|
|
312
|
-
|
|
292
|
+
ge as AttributeEditor
|
|
313
293
|
};
|
|
314
294
|
//# sourceMappingURL=AttributeEditor.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AttributeEditor.es.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, AttributeEnumItem } from '@shared/api'\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: (AttributeModel['scope'] | '')[] | null\n}\n\nconst GLOBAL_FIELDS: GlobalFieldEntry[] = [\n { value: 'description', scope: null },\n { value: 'example', scope: null },\n // @ts-expect-error - project is not a scope?\n { value: 'default', scope: ['project'] },\n {\n value: 'inherit',\n scope: ['project', 'folder', 'task', 'product', 'version', 'representation', 'user'],\n },\n]\n\ninterface TypeOptionDef {\n value: AttributeData['type']\n label: string\n fields: (keyof AttributeData)[]\n exclude?: (keyof AttributeData)[]\n}\n\ninterface TypeOptionsMap {\n [key: string]: TypeOptionDef\n}\n\nconst TYPE_OPTIONS: TypeOptionsMap = {\n string: {\n value: 'string',\n label: 'String',\n fields: ['minLength', 'maxLength', 'enum', 'regex'],\n },\n integer: {\n value: 'integer',\n label: 'Integer',\n fields: ['ge', 'gt', 'le', 'lt'],\n },\n float: {\n value: 'float',\n label: 'Decimal number',\n fields: ['ge', 'gt', 'le', 'lt'],\n },\n list_of_strings: {\n value: 'list_of_strings',\n label: 'List Of Strings',\n fields: ['minItems', 'maxItems', 'enum'],\n },\n boolean: {\n value: 'boolean',\n label: 'Boolean',\n fields: [],\n exclude: ['example'],\n },\n datetime: {\n value: 'datetime',\n label: 'Datetime',\n fields: [],\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 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 [formData, setFormData] = useState<AttributeForm | null>(\n attribute ||\n buildInitFormData(excludes, {\n position: existingNames.length,\n ...resolvedDefaultData,\n }),\n )\n\n useEffect(() => {\n if (!!attribute) setFormData(attribute)\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 // @ts-expect-error - project scope will never be found here?\n if (!globalField?.scope || globalField?.scope?.some((s) => formData?.scope?.includes(s))) {\n dataFields.push(globalField.value)\n }\n })\n\n if (formData?.data.type && TYPE_OPTIONS[formData.data.type]) {\n const typeOpt = TYPE_OPTIONS[formData.data.type]\n dataFields = [...dataFields, ...typeOpt.fields].filter((f) => !typeOpt.exclude?.includes(f))\n }\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 as AttributeEnumItem[]}\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 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 <Dropdown\n value={[formData?.data?.type]}\n disabled={formData.builtin || !isNew}\n options={Object.values(TYPE_OPTIONS)}\n onChange={(v) => {\n const newType = v[0] as AttributeData['type']\n // Check if regex is supported for the new type\n const typeOpt = TYPE_OPTIONS[newType]\n const supportsRegex = typeOpt?.fields?.includes('regex')\n\n setData('type', newType)\n // Clear regex if not supported by the new type\n if (!supportsRegex && formData?.data?.regex) {\n setData('regex', '')\n }\n }}\n minSelected={1}\n widthExpand\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 = 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":["SCOPE_OPTIONS","GLOBAL_FIELDS","TYPE_OPTIONS","initFormData","buildInitFormData","excludes","data","formData","required","key","requiredData","typedKey","AttributeEditor","attribute","defaultData","existingNames","error","isUpdating","onHide","onEdit","onDelete","resolvedDefaultData","camelCase","setFormData","useState","useEffect","isNew","setTopLevelData","value","d","setData","dt","internalError","handleSubmit","footer","jsxs","jsx","Button","Spacer","SaveButton","dataFields","globalField","s","typeOpt","f","customFields","onChange","EnumEditor","val","InputSwitch","e","handleTitleChange","v","Dialog","FormLayout","FormRow","InputText","LockedInput","Dropdown","newType","supportsRegex","field","fieldComp","fieldLabel","upperFirst","renderer","MinMaxField","geValue","leValue","handleInputChange","strValue","num"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AttributeEditor.es.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, AttributeEnumItem } from '@shared/api'\nimport {\n UIAttributeType,\n UI_TYPE_OPTIONS,\n UI_TYPE_FIELDS,\n UI_TYPE_EXCLUDE,\n backendToUiType,\n uiTypeToBackend,\n} from './attributeTypeMap'\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: (AttributeModel['scope'] | '')[] | null\n}\n\nconst GLOBAL_FIELDS: GlobalFieldEntry[] = [\n { value: 'description', scope: null },\n { value: 'example', scope: null },\n // @ts-expect-error - project is not a scope?\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 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 // @ts-expect-error - project scope will never be found here?\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 as AttributeEnumItem[]}\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\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 <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 />\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 = 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":["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","Dialog","FormLayout","FormRow","InputText","LockedInput","Dropdown","UI_TYPE_OPTIONS","o","checked","field","fieldComp","fieldLabel","upperFirst","renderer","MinMaxField","geValue","leValue","handleInputChange","strValue","num"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("lodash");require("react-toastify");const t=require("../../util/getAttributeIcon.cjs.js");require("uuid");require("../../util/pubsub.cjs.js");const r=[{value:"text",label:"Text",icon:t.getAttributeIcon("text","string")},{value:"select",label:"Select",icon:t.getAttributeIcon("select","string",!0)},{value:"multi_select",label:"Multi-select",icon:t.getAttributeIcon("multi_select","list_of_strings",!0)},{value:"number",label:"Number",icon:t.getAttributeIcon("number","integer")},{value:"checkbox",label:"Checkbox",icon:t.getAttributeIcon("checkbox","boolean")},{value:"datetime",label:"Date and time",icon:t.getAttributeIcon("datetime","datetime")}],s={text:["minLength","maxLength","regex"],select:["enum"],multi_select:["enum","minItems","maxItems"],number:["ge","gt","le","lt"],checkbox:[],datetime:[]},u={checkbox:["example"]},i=(e,n)=>{switch(e){case"string":return n?.length?"select":"text";case"list_of_strings":return"multi_select";case"integer":case"float":return"number";case"boolean":return"checkbox";case"datetime":return"datetime";default:return"text"}},a=(e,n)=>{switch(e){case"text":return"string";case"select":return"string";case"multi_select":return"list_of_strings";case"number":return n?"float":"integer";case"checkbox":return"boolean";case"datetime":return"datetime"}},o=["string","integer","float","boolean","datetime","list_of_strings"],b=(e,n)=>{if(!e||!o.includes(e))return e??"";const c=i(e,n);return r.find(l=>l.value===c)?.label??e};exports.UI_TYPE_EXCLUDE=u;exports.UI_TYPE_FIELDS=s;exports.UI_TYPE_OPTIONS=r;exports.backendToUiType=i;exports.getUiTypeLabel=b;exports.uiTypeToBackend=a;
|
|
2
|
+
//# sourceMappingURL=attributeTypeMap.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attributeTypeMap.cjs.js","sources":["../../../../../src/components/AttributeEditor/attributeTypeMap.ts"],"sourcesContent":["import { AttributeData } from '@shared/api'\nimport { getAttributeIcon } from '@shared/util'\n\nexport type UIAttributeType =\n | 'text'\n | 'select'\n | 'multi_select'\n | 'number'\n | 'checkbox'\n | 'datetime'\n\nexport interface UITypeOption {\n value: UIAttributeType\n label: string\n icon: string\n}\n\nexport const UI_TYPE_OPTIONS: UITypeOption[] = [\n { value: 'text', label: 'Text', icon: getAttributeIcon('text', 'string') },\n { value: 'select', label: 'Select', icon: getAttributeIcon('select', 'string', true) },\n {\n value: 'multi_select',\n label: 'Multi-select',\n icon: getAttributeIcon('multi_select', 'list_of_strings', true),\n },\n { value: 'number', label: 'Number', icon: getAttributeIcon('number', 'integer') },\n { value: 'checkbox', label: 'Checkbox', icon: getAttributeIcon('checkbox', 'boolean') },\n { value: 'datetime', label: 'Date and time', icon: getAttributeIcon('datetime', 'datetime') },\n]\n\nexport const UI_TYPE_FIELDS: Record<UIAttributeType, (keyof AttributeData)[]> = {\n text: ['minLength', 'maxLength', 'regex'],\n select: ['enum'],\n multi_select: ['enum', 'minItems', 'maxItems'],\n number: ['ge', 'gt', 'le', 'lt'],\n checkbox: [],\n datetime: [],\n}\n\nexport const UI_TYPE_EXCLUDE: Partial<Record<UIAttributeType, (keyof AttributeData)[]>> = {\n checkbox: ['example'],\n}\n\nexport const backendToUiType = (\n type: AttributeData['type'] | undefined,\n enumValues?: AttributeData['enum'],\n): UIAttributeType => {\n switch (type) {\n case 'string':\n return enumValues?.length ? 'select' : 'text'\n case 'list_of_strings':\n return 'multi_select'\n case 'integer':\n case 'float':\n return 'number'\n case 'boolean':\n return 'checkbox'\n case 'datetime':\n return 'datetime'\n default:\n return 'text'\n }\n}\n\nexport const uiTypeToBackend = (\n uiType: UIAttributeType,\n isDecimal: boolean,\n): AttributeData['type'] => {\n switch (uiType) {\n case 'text':\n return 'string'\n case 'select':\n return 'string'\n case 'multi_select':\n return 'list_of_strings'\n case 'number':\n return isDecimal ? 'float' : 'integer'\n case 'checkbox':\n return 'boolean'\n case 'datetime':\n return 'datetime'\n }\n}\n\nconst UI_MAPPED_BACKEND_TYPES: ReadonlyArray<AttributeData['type']> = [\n 'string',\n 'integer',\n 'float',\n 'boolean',\n 'datetime',\n 'list_of_strings',\n]\n\nexport const getUiTypeLabel = (\n type: AttributeData['type'] | undefined,\n enumValues?: AttributeData['enum'],\n): string => {\n // Unknown / unsupported backend types fall back to the raw type string\n // so the table doesn't mislabel them (e.g. list_of_integers, dict).\n if (!type || !UI_MAPPED_BACKEND_TYPES.includes(type)) return type ?? ''\n const uiType = backendToUiType(type, enumValues)\n return UI_TYPE_OPTIONS.find((o) => o.value === uiType)?.label ?? type\n}\n"],"names":["UI_TYPE_OPTIONS","getAttributeIcon","UI_TYPE_FIELDS","UI_TYPE_EXCLUDE","backendToUiType","type","enumValues","uiTypeToBackend","uiType","isDecimal","UI_MAPPED_BACKEND_TYPES","getUiTypeLabel","o"],"mappings":"sOAiBO,MAAMA,EAAkC,CAC7C,CAAE,MAAO,OAAQ,MAAO,OAAQ,KAAMC,EAAAA,iBAAiB,OAAQ,QAAQ,CAAA,EACvE,CAAE,MAAO,SAAU,MAAO,SAAU,KAAMA,EAAAA,iBAAiB,SAAU,SAAU,EAAI,CAAA,EACnF,CACE,MAAO,eACP,MAAO,eACP,KAAMA,EAAAA,iBAAiB,eAAgB,kBAAmB,EAAI,CAAA,EAEhE,CAAE,MAAO,SAAU,MAAO,SAAU,KAAMA,EAAAA,iBAAiB,SAAU,SAAS,CAAA,EAC9E,CAAE,MAAO,WAAY,MAAO,WAAY,KAAMA,EAAAA,iBAAiB,WAAY,SAAS,CAAA,EACpF,CAAE,MAAO,WAAY,MAAO,gBAAiB,KAAMA,EAAAA,iBAAiB,WAAY,UAAU,CAAA,CAC5F,EAEaC,EAAmE,CAC9E,KAAM,CAAC,YAAa,YAAa,OAAO,EACxC,OAAQ,CAAC,MAAM,EACf,aAAc,CAAC,OAAQ,WAAY,UAAU,EAC7C,OAAQ,CAAC,KAAM,KAAM,KAAM,IAAI,EAC/B,SAAU,CAAA,EACV,SAAU,CAAA,CACZ,EAEaC,EAA6E,CACxF,SAAU,CAAC,SAAS,CACtB,EAEaC,EAAkB,CAC7BC,EACAC,IACoB,CACpB,OAAQD,EAAA,CACN,IAAK,SACH,OAAOC,GAAY,OAAS,SAAW,OACzC,IAAK,kBACH,MAAO,eACT,IAAK,UACL,IAAK,QACH,MAAO,SACT,IAAK,UACH,MAAO,WACT,IAAK,WACH,MAAO,WACT,QACE,MAAO,MAAA,CAEb,EAEaC,EAAkB,CAC7BC,EACAC,IAC0B,CAC1B,OAAQD,EAAA,CACN,IAAK,OACH,MAAO,SACT,IAAK,SACH,MAAO,SACT,IAAK,eACH,MAAO,kBACT,IAAK,SACH,OAAOC,EAAY,QAAU,UAC/B,IAAK,WACH,MAAO,UACT,IAAK,WACH,MAAO,UAAA,CAEb,EAEMC,EAAgE,CACpE,SACA,UACA,QACA,UACA,WACA,iBACF,EAEaC,EAAiB,CAC5BN,EACAC,IACW,CAGX,GAAI,CAACD,GAAQ,CAACK,EAAwB,SAASL,CAAI,SAAUA,GAAQ,GACrE,MAAMG,EAASJ,EAAgBC,EAAMC,CAAU,EAC/C,OAAON,EAAgB,KAAMY,GAAMA,EAAE,QAAUJ,CAAM,GAAG,OAASH,CACnE"}
|