sanity 3.26.2-canary.52 → 3.26.2-canary.69
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/lib/_chunks/{_internal-2CJ5wSKF.js → _internal-6Pl2wJGj.js} +422 -201
- package/lib/_chunks/_internal-6Pl2wJGj.js.map +1 -0
- package/lib/_chunks/{_internal-79flWvL8.js → _internal-yQwMw2ht.js} +419 -203
- package/lib/_chunks/_internal-yQwMw2ht.js.map +1 -0
- package/lib/_chunks/{_internalBrowser-QAFz3SKp.js → _internalBrowser-HWvRXvlU.js} +22 -22
- package/lib/_chunks/_internalBrowser-HWvRXvlU.js.map +1 -0
- package/lib/_chunks/{_internalBrowser-Y0qKZ-GA.js → _internalBrowser-TWIhitgI.js} +22 -22
- package/lib/_chunks/_internalBrowser-TWIhitgI.js.map +1 -0
- package/lib/_chunks/{deployApiAction-SHteit1G.js → deployApiAction-TZcCtXan.js} +2 -2
- package/lib/_chunks/{deployApiAction-SHteit1G.js.map → deployApiAction-TZcCtXan.js.map} +1 -1
- package/lib/_chunks/{deployApiAction-bRyJpGOS.js → deployApiAction-rVL67VYW.js} +2 -2
- package/lib/_chunks/{deployApiAction-bRyJpGOS.js.map → deployApiAction-rVL67VYW.js.map} +1 -1
- package/lib/_chunks/{getStudioConfig-JSkc4GE0.js → getStudioWorkspaces-HX9o9-hl.js} +20 -4
- package/lib/_chunks/getStudioWorkspaces-HX9o9-hl.js.map +1 -0
- package/lib/_chunks/{index-EO9iRnDS.js → index-2kSxso3r.js} +2 -2
- package/lib/_chunks/{index-EO9iRnDS.js.map → index-2kSxso3r.js.map} +1 -1
- package/lib/_chunks/{index-FQCCBbuC.js → index-751ZLh3z.js} +6 -6
- package/lib/_chunks/{index-FQCCBbuC.js.map → index-751ZLh3z.js.map} +1 -1
- package/lib/_chunks/{index-VNSHvpZr.js → index-HcF369ru.js} +2 -2
- package/lib/_chunks/{index-VNSHvpZr.js.map → index-HcF369ru.js.map} +1 -1
- package/lib/_chunks/{index-Xs2xnLUV.js → index-MAAxgUnl.js} +6 -6
- package/lib/_chunks/{index-Xs2xnLUV.js.map → index-MAAxgUnl.js.map} +1 -1
- package/lib/_chunks/{index-AaK2CidU.js → index-NweJPfGb.js} +2 -2
- package/lib/_chunks/{index-AaK2CidU.js.map → index-NweJPfGb.js.map} +1 -1
- package/lib/_chunks/{index-R7R6AyHF.js → index-zobOqko7.js} +2 -2
- package/lib/_chunks/{index-R7R6AyHF.js.map → index-zobOqko7.js.map} +1 -1
- package/lib/_chunks/{listApisAction-6lGkFZrU.js → listApisAction-IvKV4iAd.js} +2 -2
- package/lib/_chunks/{listApisAction-6lGkFZrU.js.map → listApisAction-IvKV4iAd.js.map} +1 -1
- package/lib/_chunks/{listApisAction-CqCkBz-F.js → listApisAction-oca2uykY.js} +2 -2
- package/lib/_chunks/{listApisAction-CqCkBz-F.js.map → listApisAction-oca2uykY.js.map} +1 -1
- package/lib/_chunks/pane-9HEeITpx.js +5 -0
- package/lib/_chunks/pane-9HEeITpx.js.map +1 -0
- package/lib/_chunks/pane-QyVrOLqS.js +2 -0
- package/lib/_chunks/pane-QyVrOLqS.js.map +1 -0
- package/lib/_chunks/pane-TXXUUvdc.js +5 -0
- package/lib/_chunks/pane-TXXUUvdc.js.map +1 -0
- package/lib/_chunks/pane-cQxQtBcL.js +2 -0
- package/lib/_chunks/pane-cQxQtBcL.js.map +1 -0
- package/lib/_chunks/{structure-qJLnDJXq.js → structure-iqIDIH7-.js} +3 -3
- package/lib/_chunks/structure-iqIDIH7-.js.map +1 -0
- package/lib/_chunks/{structure-588eAwLd.js → structure-o_wMXC_G.js} +3 -3
- package/lib/_chunks/structure-o_wMXC_G.js.map +1 -0
- package/lib/_chunks/validateAction-4Jl_y_iB.js +154 -0
- package/lib/_chunks/validateAction-4Jl_y_iB.js.map +1 -0
- package/lib/_chunks/{validateAction-GUvMkXiN.js → validateAction-6q8Sqwaz.js} +25 -73
- package/lib/_chunks/validateAction-6q8Sqwaz.js.map +1 -0
- package/lib/_chunks/validateAction-Bz67ApRP.js +143 -0
- package/lib/_chunks/validateAction-Bz67ApRP.js.map +1 -0
- package/lib/_chunks/{validateAction-NIrqtyYJ.js → validateAction-shi462sq.js} +27 -75
- package/lib/_chunks/validateAction-shi462sq.js.map +1 -0
- package/lib/_internal/cli/threads/getGraphQLAPIs.js +2 -2
- package/lib/_internal/cli/threads/getGraphQLAPIs.js.map +1 -1
- package/lib/_internal/cli/threads/validateDocuments.js +5 -3
- package/lib/_internal/cli/threads/validateDocuments.js.map +1 -1
- package/lib/_internal/cli/threads/validateSchema.js +55 -0
- package/lib/_internal/cli/threads/validateSchema.js.map +1 -0
- package/lib/_internal.esm.js +1 -1
- package/lib/_internal.js +1 -1
- package/lib/_internalBrowser.esm.js +1 -1
- package/lib/_internalBrowser.js +1 -1
- package/lib/desk.esm.js +1 -1
- package/lib/desk.js +1 -1
- package/lib/exports/index.d.ts +25 -0
- package/lib/index.cjs.mjs +1 -0
- package/lib/index.esm.js +2 -2
- package/lib/index.js +2 -1
- package/lib/index.js.map +1 -1
- package/lib/structure.esm.js +1 -1
- package/lib/structure.js +1 -1
- package/package.json +15 -15
- package/src/_internal/cli/actions/schema/formatSchemaValidation.ts +96 -0
- package/src/_internal/cli/actions/schema/validateAction.ts +120 -0
- package/src/_internal/cli/actions/validation/reporters/prettyReporter/formatDocumentValidation.ts +17 -95
- package/src/_internal/cli/commands/index.ts +2 -0
- package/src/_internal/cli/commands/migration/createMigrationCommand.ts +18 -10
- package/src/_internal/cli/commands/migration/listMigrationsCommand.ts +34 -31
- package/src/_internal/cli/commands/migration/prettyMutationFormatter.ts +214 -0
- package/src/_internal/cli/commands/migration/runMigrationCommand.ts +102 -58
- package/src/_internal/cli/commands/migration/templates/minimalAdvanced.ts +1 -1
- package/src/_internal/cli/commands/migration/templates/minimalSimple.ts +1 -1
- package/src/_internal/cli/commands/migration/templates/renameField.ts +3 -3
- package/src/_internal/cli/commands/migration/templates/renameType.ts +1 -1
- package/src/_internal/cli/commands/migration/templates/stringToPTE.ts +1 -1
- package/src/_internal/cli/commands/migration/utils/mutationFormatter.ts +1 -1
- package/src/_internal/cli/commands/schema/validateSchemaCommand.ts +35 -0
- package/src/_internal/cli/threads/getGraphQLAPIs.ts +2 -2
- package/src/_internal/cli/threads/validateDocuments.ts +6 -3
- package/src/_internal/cli/threads/validateSchema.ts +73 -0
- package/src/_internal/cli/util/{getStudioConfig.ts → getStudioWorkspaces.ts} +30 -8
- package/src/_internal/cli/util/tree.ts +110 -0
- package/src/core/config/index.ts +1 -0
- package/src/core/config/prepareConfig.ts +2 -5
- package/src/core/config/resolveSchemaTypes.ts +29 -0
- package/src/core/studio/screens/schemaErrors/SchemaProblemGroups.tsx +4 -2
- package/src/structure/comments/src/components/pte/blocks/MentionInlineBlock.tsx +13 -6
- package/lib/_chunks/_internal-2CJ5wSKF.js.map +0 -1
- package/lib/_chunks/_internal-79flWvL8.js.map +0 -1
- package/lib/_chunks/_internalBrowser-QAFz3SKp.js.map +0 -1
- package/lib/_chunks/_internalBrowser-Y0qKZ-GA.js.map +0 -1
- package/lib/_chunks/getStudioConfig-JSkc4GE0.js.map +0 -1
- package/lib/_chunks/pane-QmJb9ZTN.js +0 -2
- package/lib/_chunks/pane-QmJb9ZTN.js.map +0 -1
- package/lib/_chunks/pane-SK7FWNTJ.js +0 -2
- package/lib/_chunks/pane-SK7FWNTJ.js.map +0 -1
- package/lib/_chunks/pane-y4hpcKe1.js +0 -5
- package/lib/_chunks/pane-y4hpcKe1.js.map +0 -1
- package/lib/_chunks/pane-yQXBQyyI.js +0 -5
- package/lib/_chunks/pane-yQXBQyyI.js.map +0 -1
- package/lib/_chunks/structure-588eAwLd.js.map +0 -1
- package/lib/_chunks/structure-qJLnDJXq.js.map +0 -1
- package/lib/_chunks/validateAction-GUvMkXiN.js.map +0 -1
- package/lib/_chunks/validateAction-NIrqtyYJ.js.map +0 -1
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"structure-o_wMXC_G.js","sources":["../../src/structure/components/Delay.tsx","../../src/structure/i18n/index.ts","../../src/structure/components/DocTitle.tsx","../../src/structure/components/RenderActionCollectionState.tsx","../../src/structure/components/RenderBadgeCollectionState.tsx","../../src/structure/components/confirmDeleteDialog/useReferringDocuments.ts","../../src/structure/components/paneItem/PaneItemPreview.tsx","../../src/structure/components/paneRouter/PaneRouterContext.tsx","../../src/structure/components/paneRouter/BackLink.tsx","../../src/structure/components/pane/PaneLayoutContext.ts","../../src/structure/components/pane/usePaneLayout.ts","../../src/structure/components/paneRouter/ChildLink.tsx","../../src/structure/components/paneRouter/ReferenceChildLink.tsx","../../src/structure/components/paneRouter/ParameterizedLink.tsx","../../src/structure/components/paneRouter/usePaneRouter.ts","../../src/structure/components/confirmDeleteDialog/ReferencePreviewLink.tsx","../../src/structure/components/confirmDeleteDialog/ConfirmDeleteDialogBody.styles.tsx","../../src/structure/components/confirmDeleteDialog/ConfirmDeleteDialogBody.tsx","../../src/structure/components/confirmDeleteDialog/ConfirmDeleteDialog.tsx","../../src/structure/components/confirmDeleteDialog/index.tsx","../../src/structure/components/pane/PaneMenuButtonItem.tsx","../../src/structure/components/pane/PaneContextMenuButton.tsx","../../src/structure/components/pane/constants.ts","../../src/structure/components/pane/PaneContext.ts","../../src/structure/components/pane/PaneDivider.tsx","../../src/structure/components/pane/Pane.tsx","../../src/structure/components/pane/usePane.ts","../../src/structure/components/pane/PaneContent.styles.tsx","../../src/structure/components/pane/PaneContent.tsx","../../src/structure/components/pane/PaneFooter.styles.tsx","../../src/structure/components/pane/PaneFooter.tsx","../../src/structure/components/pane/PaneHeader.styles.tsx","../../src/structure/components/pane/PaneHeader.tsx","../../src/structure/components/pane/PaneHeaderActionButton.tsx","../../src/structure/components/pane/PaneLayout.styles.tsx","../../src/structure/components/pane/helpers/_calcPaneResize.ts","../../src/structure/components/pane/helpers/_getDOMPath.ts","../../src/structure/components/pane/helpers/_sortElements.ts","../../src/structure/components/pane/paneLayoutController.ts","../../src/structure/components/pane/PaneLayout.tsx","../../src/structure/menuNodes.ts","../../src/structure/components/IntentButton.tsx","../../src/structure/components/paneHeaderActions/InsufficientPermissionsMessageTooltip.tsx","../../src/structure/components/paneHeaderActions/PaneHeaderCreateButton.tsx","../../src/structure/components/paneHeaderActions/PaneHeaderActions.tsx","../../src/structure/components/MissingSchemaType.tsx","../../src/structure/components/paneItem/PaneItem.tsx","../../src/structure/panes/document/DocumentPaneContext.ts","../../src/structure/panes/document/useDocumentPane.tsx","../../src/structure/documentActions/DeleteAction.tsx","../../src/structure/documentActions/DiscardChangesAction.tsx","../../src/structure/documentActions/DuplicateAction.tsx","../../src/structure/documentActions/HistoryRestoreAction.tsx","../../src/structure/documentActions/__telemetry__/documentActions.telemetry.ts","../../src/structure/documentActions/PublishAction.tsx","../../src/structure/documentActions/UnpublishAction.tsx","../../src/structure/documentBadges/LiveEditBadge.ts","../../src/structure/constants.ts","../../src/structure/getIntentState.ts","../../src/structure/router.ts","../../src/structure/comments/i18n/index.ts","../../src/structure/panes/document/constants.ts","../../src/structure/comments/src/components/avatars/CommentsAvatar.tsx","../../src/structure/comments/src/components/avatars/SpacerAvatar.tsx","../../src/structure/comments/src/components/pte/blocks/MentionInlineBlock.tsx","../../src/structure/comments/src/components/pte/blocks/NormalBlock.tsx","../../src/structure/comments/src/components/pte/CommentMessageSerializer.tsx","../../src/structure/comments/src/components/pte/config.ts","../../src/structure/comments/src/components/icons/SendIcon.tsx","../../src/structure/comments/src/components/icons/MentionIcon.tsx","../../src/structure/comments/src/components/icons/AddCommentIcon.tsx","../../src/structure/comments/src/components/icons/CommentIcon.tsx","../../src/structure/comments/src/components/icons/ReactionIcon.tsx","../../src/structure/comments/src/helpers.ts","../../src/structure/comments/src/components/pte/comment-input/CommentInputProvider.tsx","../../src/structure/comments/src/components/pte/comment-input/useCommentInput.ts","../../src/structure/comments/src/components/mentions/MentionsMenuItem.tsx","../../src/structure/comments/src/components/mentions/MentionsMenu.tsx","../../src/structure/comments/src/components/pte/render/renderBlock.tsx","../../src/structure/comments/src/components/pte/render/renderChild.tsx","../../src/structure/comments/src/components/pte/comment-input/useCursorElement.ts","../../src/structure/comments/src/components/pte/comment-input/Editable.tsx","../../src/structure/comments/src/components/pte/comment-input/CommentInputInner.tsx","../../src/structure/comments/src/components/pte/comment-input/CommentInputDiscardDialog.tsx","../../src/structure/comments/src/components/pte/comment-input/CommentInput.tsx","../../src/structure/comments/src/components/constants.ts","../../src/structure/comments/src/constants.ts","../../src/structure/comments/src/components/reactions/EmojiText.styled.ts","../../src/structure/comments/src/components/reactions/CommentReactionsMenu.tsx","../../src/structure/comments/src/components/reactions/CommentReactionsMenuButton.tsx","../../src/structure/comments/src/components/reactions/CommentReactionsUsersTooltip.tsx","../../src/structure/comments/src/components/reactions/TransparentCard.styled.ts","../../src/structure/comments/src/components/reactions/CommentReactionsBar.tsx","../../src/structure/comments/src/components/list/CommentsListItemContextMenu.tsx","../../src/structure/comments/src/components/list/CommentsListItemLayout.tsx","../../src/structure/comments/src/components/list/styles.ts","../../src/structure/comments/src/components/list/CommentsListItem.tsx","../../src/structure/comments/src/components/CommentBreadcrumbs.tsx","../../src/structure/comments/src/components/list/CreateNewThreadInput.tsx","../../src/structure/comments/src/components/list/CommentThreadLayout.tsx","../../src/structure/comments/src/components/list/CommentsListStatus.tsx","../../src/structure/comments/src/components/list/CommentsList.tsx","../../src/structure/comments/src/components/CommentDeleteDialog.tsx","../../src/structure/comments/src/components/onboarding/CommentsOnboardingPopover.tsx","../../src/structure/comments/src/context/comments/CommentsContext.ts","../../src/structure/comments/src/hooks/useMentionOptions.ts","../../src/structure/comments/src/hooks/useNotificationTarget.ts","../../src/structure/comments/src/hooks/use-comment-operations/reactOperation.ts","../../src/structure/comments/src/hooks/use-comment-operations/updateOperation.ts","../../src/structure/comments/src/hooks/use-comment-operations/editOperation.ts","../../src/structure/comments/src/hooks/use-comment-operations/removeOperation.ts","../../src/structure/comments/src/hooks/use-comment-operations/createOperation.ts","../../src/structure/comments/src/hooks/use-comment-operations/useCommentOperations.ts","../../src/structure/comments/src/hooks/useComments.ts","../../src/structure/comments/src/hooks/useCommentsSetup.ts","../../src/structure/comments/src/context/enabled/CommentsEnabledContext.ts","../../src/structure/comments/src/context/enabled/CommentsEnabledProvider.tsx","../../src/structure/comments/src/hooks/useCommentsEnabled.ts","../../src/structure/comments/src/context/onboarding/CommentsOnboardingContext.ts","../../src/structure/comments/src/context/onboarding/CommentsOnboardingProvider.tsx","../../src/structure/comments/src/hooks/useCommentsOnboarding.ts","../../src/structure/comments/src/hooks/useCommentsSelectedPath.ts","../../src/structure/comments/src/hooks/useResolveCommentsEnabled.ts","../../src/structure/comments/src/utils/buildCommentBreadcrumbs.ts","../../src/structure/comments/src/utils/mergeCommentReactions.ts","../../src/structure/comments/src/store/reducer.ts","../../src/structure/comments/src/store/useCommentsStore.ts","../../src/structure/comments/src/utils/buildCommentThreadItems.ts","../../src/structure/comments/src/context/comments/CommentsProvider.tsx","../../src/structure/comments/src/context/setup/CommentsSetupContext.ts","../../src/structure/comments/src/context/setup/CommentsSetupProvider.tsx","../../src/structure/comments/src/context/selected-path/CommentsSelectedPathContext.ts","../../src/structure/comments/src/context/selected-path/CommentsSelectedPathProvider.tsx","../../src/structure/comments/plugin/inspector/CommentsInspectorHeader.tsx","../../src/structure/comments/plugin/inspector/CommentsInspectorFeedbackFooter.tsx","../../src/structure/comments/plugin/inspector/CommentsInspector.tsx","../../src/structure/comments/plugin/inspector/index.ts","../../src/structure/comments/plugin/field/CommentsFieldButton.tsx","../../src/structure/comments/plugin/field/CommentsField.tsx","../../src/structure/comments/plugin/document-layout/CommentsDocumentLayout.tsx","../../src/structure/comments/plugin/studio-layout/CommentsStudioLayout.tsx","../../src/structure/comments/plugin/index.ts","../../src/structure/StructureToolContext.ts","../../src/structure/useStructureTool.ts","../../src/structure/panes/document/timeline/constants.ts","../../src/structure/panes/document/timeline/helpers.ts","../../src/structure/panes/document/timeline/userAvatarStack.tsx","../../src/structure/panes/document/timeline/timelineItem.styled.tsx","../../src/structure/panes/document/timeline/timelineI18n.ts","../../src/structure/panes/document/timeline/timelineItem.tsx","../../src/structure/panes/document/timeline/timeline.styled.tsx","../../src/structure/panes/document/timeline/timeline.tsx","../../src/structure/panes/document/timeline/TimelineError.tsx","../../src/structure/panes/document/timeline/timelineMenu.tsx","../../src/structure/panes/document/documentInspector/DocumentInspectorHeader.tsx","../../src/structure/panes/document/documentInspector/Resizer.tsx","../../src/structure/panes/document/documentInspector/Resizable.tsx","../../src/structure/panes/document/documentInspector/DocumentInspectorPanel.tsx","../../src/structure/panes/document/inspectors/changes/helpers.ts","../../src/structure/panes/document/inspectors/changes/ChangesInspector.tsx","../../src/structure/panes/document/inspectors/changes/index.ts","../../src/structure/panes/document/inspectors/validation/getPathTitles.ts","../../src/structure/panes/document/inspectors/validation/ValidationInspector.tsx","../../src/structure/panes/document/inspectors/validation/index.ts","../../src/structure/structureTool.ts","../../src/structure/structureBuilder/SerializeError.ts","../../src/structure/structureBuilder/util/getExtendedProjection.ts","../../src/structure/structureBuilder/Sort.ts","../../src/structure/structureBuilder/MenuItem.ts","../../src/structure/structureBuilder/MenuItemGroup.ts","../../src/structure/structureBuilder/util/validateId.ts","../../src/structure/structureBuilder/util/getStructureNodeId.ts","../../src/structure/structureBuilder/Component.ts","../../src/structure/structureBuilder/util/resolveTypeForDocument.ts","../../src/structure/structureBuilder/views/View.ts","../../src/structure/structureBuilder/views/ComponentView.ts","../../src/structure/structureBuilder/views/FormView.ts","../../src/structure/structureBuilder/views/index.ts","../../src/structure/structureBuilder/Document.ts","../../src/structure/structureBuilder/Layout.ts","../../src/structure/structureBuilder/Intent.ts","../../src/structure/structureBuilder/InitialValueTemplateItem.ts","../../src/structure/structureBuilder/GenericList.ts","../../src/structure/structureBuilder/DocumentList.ts","../../src/structure/structureBuilder/List.ts","../../src/structure/structureBuilder/ListItem.ts","../../src/structure/structureBuilder/DocumentListItem.ts","../../src/structure/structureBuilder/DocumentTypeList.ts","../../src/structure/structureBuilder/documentTypeListItems.ts","../../src/structure/structureBuilder/createStructureBuilder.ts","../../src/structure/StructureToolProvider.tsx","../../src/structure/panes/error/ErrorPane.tsx","../../src/structure/panes/loading/getWaitMessages.ts","../../src/structure/panes/loading/LoadingPane.tsx","../../src/structure/panes/document/usePreviewUrl.ts","../../src/structure/panes/document/getInitialValueTemplateOpts.ts","../../src/structure/panes/document/DocumentPaneProvider.tsx","../../src/structure/panes/document/DocumentOperationResults.tsx","../../src/structure/useStructureToolSetting.ts","../../src/structure/panes/document/inspectDialog/constants.ts","../../src/structure/panes/document/inspectDialog/helpers.ts","../../src/structure/panes/document/inspectDialog/InspectDialog.styles.tsx","../../src/structure/panes/document/inspectDialog/Search.tsx","../../src/structure/panes/document/inspectDialog/InspectDialog.tsx","../../src/structure/components/spacerButton/SpacerButton.tsx","../../src/structure/panes/document/documentPanel/banners/Banner.tsx","../../src/structure/panes/document/documentPanel/banners/DeletedDocumentBanner.tsx","../../src/structure/panes/document/documentPanel/banners/DeprecatedDocumentTypeBanner.tsx","../../src/structure/panes/document/documentPanel/banners/PermissionCheckBanner.tsx","../../src/structure/panes/document/documentPanel/banners/ReferenceChangedBanner.tsx","../../src/structure/panes/document/useDocumentTitle.ts","../../src/structure/panes/document/documentPanel/documentViews/useConditionalToast.ts","../../src/structure/panes/document/documentPanel/documentViews/FormHeader.tsx","../../src/structure/panes/document/documentPanel/documentViews/FormView.tsx","../../src/structure/panes/document/documentPanel/DocumentPanel.tsx","../../src/structure/panes/document/statusBar/dialogs/constants.ts","../../src/structure/panes/document/statusBar/dialogs/ConfirmDialog.tsx","../../src/structure/panes/document/statusBar/dialogs/ModalDialog.tsx","../../src/structure/panes/document/statusBar/dialogs/PopoverDialog.tsx","../../src/structure/panes/document/statusBar/ActionStateDialog.tsx","../../src/structure/panes/document/statusBar/ActionMenuButton.tsx","../../src/structure/panes/document/statusBar/DocumentStatusBarActions.tsx","../../src/structure/panes/document/statusBar/useResizeObserver.ts","../../src/structure/panes/document/statusBar/DocumentBadges.tsx","../../src/structure/panes/document/statusBar/DocumentStatusPulse/AnimatedStatusIcon.tsx","../../src/structure/panes/document/statusBar/DocumentStatusPulse/DocumentStatusPulse.tsx","../../src/structure/panes/document/statusBar/DocumentStatusLine.tsx","../../src/structure/panes/document/statusBar/DocumentStatusBar.tsx","../../src/structure/panes/document/keyboardShortcuts/DocumentActionShortcuts.tsx","../../src/structure/panes/document/documentPanel/header/DocumentHeaderTabs.tsx","../../src/structure/panes/document/documentPanel/header/DocumentHeaderTitle.tsx","../../src/structure/panes/document/documentPanel/header/DocumentPanelHeader.tsx","../../src/structure/panes/document/DocumentInspectorMenuItemsResolver.tsx","../../src/structure/panes/document/menuItems.ts","../../src/structure/panes/document/document-layout/DocumentLayoutError.tsx","../../src/structure/panes/document/document-layout/DocumentLayout.tsx","../../src/structure/panes/document/document-layout/useDocumentLayoutComponent.ts","../../src/structure/panes/document/DocumentPane.tsx","../../src/structure/panes/documentList/constants.ts","../../src/structure/panes/documentList/helpers.ts","../../src/structure/panes/documentList/DocumentListPaneContent.tsx","../../src/structure/panes/documentList/DocumentListPaneHeader.tsx","../../src/structure/panes/documentList/listenSearchQuery.ts","../../src/structure/panes/documentList/useDocumentList.ts","../../src/structure/panes/documentList/DocumentListPane.tsx"],"sourcesContent":["import React, {useEffect, useState} from 'react'\n\nexport function Delay({\n children,\n ms = 0,\n}: {\n children?: React.ReactElement | (() => React.ReactElement)\n ms?: number\n}): React.ReactElement {\n const [ready, setReady] = useState(ms <= 0)\n\n useEffect(() => {\n if (ms <= 0) {\n return undefined\n }\n\n const timeoutId = setTimeout(() => setReady(true), ms)\n\n return () => {\n clearTimeout(timeoutId)\n }\n }, [ms])\n\n if (!ready || !children) {\n return <></>\n }\n\n return typeof children === 'function' ? children() : children\n}\n","import {defineLocaleResourceBundle} from 'sanity'\n\n/**\n * The locale namespace for the structure tool\n *\n * @public\n */\nexport const structureLocaleNamespace = 'structure' as const\n\n/**\n * The default locale bundle for the structure tool, which is US English.\n *\n * @internal\n */\nexport const structureUsEnglishLocaleBundle = defineLocaleResourceBundle({\n locale: 'en-US',\n namespace: structureLocaleNamespace,\n resources: () => import('./resources'),\n})\n\n/**\n * The locale resource keys for the structure tool.\n *\n * @alpha\n * @hidden\n */\nexport type {StructureLocaleResourceKeys} from './resources'\n","import {SanityDocumentLike} from '@sanity/types'\nimport React from 'react'\nimport {structureLocaleNamespace} from '../i18n'\nimport {useSchema, useTranslation, unstable_useValuePreview as useValuePreview} from 'sanity'\n\nexport interface DocTitleProps {\n document: SanityDocumentLike\n}\n\nexport function DocTitle(props: DocTitleProps) {\n const {document: documentValue} = props\n const schema = useSchema()\n const schemaType = schema.get(documentValue._type)\n const {t} = useTranslation(structureLocaleNamespace)\n\n const {error, value} = useValuePreview({\n schemaType: schemaType!,\n value: documentValue,\n })\n\n if (!schemaType) {\n return <code>{t('doc-title.unknown-schema-type.text', {schemaType: documentValue._type})}</code>\n }\n\n if (error) {\n return <>{t('doc-title.error.text', {errorMessage: error.message})}</>\n }\n\n return (\n <>\n {value?.title || (\n <span style={{color: 'var(--card-muted-fg-color)'}}>{t('doc-title.fallback.text')}</span>\n )}\n </>\n )\n}\n","import React from 'react'\nimport {\n type DocumentActionDescription,\n type DocumentActionProps,\n GetHookCollectionState,\n} from 'sanity'\n\n/** @internal */\nexport interface Action<Args, Description> {\n (args: Args): Description | null\n}\n\n/** @internal */\nexport interface RenderActionCollectionProps {\n actions: Action<DocumentActionProps, DocumentActionDescription>[]\n actionProps: DocumentActionProps\n children: (props: {states: DocumentActionDescription[]}) => React.ReactNode\n onActionComplete?: () => void\n}\n\n/** @internal */\nexport const RenderActionCollectionState = (props: RenderActionCollectionProps) => {\n const {actions, children, actionProps, onActionComplete} = props\n\n return (\n <GetHookCollectionState onReset={onActionComplete} hooks={actions} args={actionProps}>\n {children}\n </GetHookCollectionState>\n )\n}\n","import React from 'react'\nimport {\n type DocumentBadgeDescription,\n type DocumentBadgeProps,\n type EditStateFor,\n GetHookCollectionState,\n} from 'sanity'\n\n/** @internal */\nexport interface Badge<Args, Description> {\n (args: Args): Description | null\n}\n\n/** @internal */\nexport interface RenderBadgeCollectionProps {\n badges: Badge<DocumentBadgeProps, DocumentBadgeDescription>[]\n badgeProps: EditStateFor\n children: (props: {states: DocumentBadgeDescription[]}) => React.ReactNode\n onActionComplete?: () => void\n}\n\n/** @internal */\nexport const RenderBadgeCollectionState = (props: RenderBadgeCollectionProps) => {\n const {badges, children, badgeProps, ...rest} = props\n\n return (\n <GetHookCollectionState {...rest} hooks={badges} args={badgeProps}>\n {children}\n </GetHookCollectionState>\n )\n}\n","import {useMemo} from 'react'\nimport {ClientError, SanityClient} from '@sanity/client'\nimport {Observable, timer, fromEvent, EMPTY, of} from 'rxjs'\nimport {\n map,\n startWith,\n distinctUntilChanged,\n switchMap,\n shareReplay,\n catchError,\n} from 'rxjs/operators'\nimport {\n AvailabilityResponse,\n DEFAULT_STUDIO_CLIENT_OPTIONS,\n DocumentStore,\n useDocumentStore,\n createHookFromObservableFactory,\n getDraftId,\n getPublishedId,\n useClient,\n} from 'sanity'\n\n// this is used in place of `instanceof` so the matching can be more robust and\n// won't have any issues with dual packages etc\n// https://nodejs.org/api/packages.html#dual-package-hazard\nfunction isClientError(e: unknown): e is ClientError {\n if (typeof e !== 'object') return false\n if (!e) return false\n return 'statusCode' in e && 'response' in e\n}\n\nconst POLL_INTERVAL = 5000\n\n// only fetches when the document is visible\nlet visiblePoll$: Observable<number>\nconst getVisiblePoll$ = () => {\n if (!visiblePoll$) {\n visiblePoll$ = fromEvent(document, 'visibilitychange').pipe(\n // add empty emission to have this fire on creation\n startWith(null),\n map(() => document.visibilityState === 'visible'),\n distinctUntilChanged(),\n switchMap((visible) =>\n visible\n ? // using timer instead of interval since timer will emit on creation\n timer(0, POLL_INTERVAL)\n : EMPTY,\n ),\n shareReplay({refCount: true, bufferSize: 1}),\n )\n }\n return visiblePoll$\n}\n\nexport type ReferringDocuments = {\n isLoading: boolean\n totalCount: number\n projectIds: string[]\n datasetNames: string[]\n hasUnknownDatasetNames: boolean\n internalReferences?: {\n totalCount: number\n references: Array<{_id: string; _type: string}>\n }\n crossDatasetReferences?: {\n totalCount: number\n references: Array<{\n /**\n * The project ID of the document that is currently referencing the subject\n * document. Unlike `documentId` and `datasetName`, this should always be\n * defined.\n */\n projectId: string\n /**\n * The ID of the document that is currently referencing the subject\n * document. This will be omitted if there is no access to the current\n * project and dataset pair (e.g. if no `sanity-project-token` were\n * configured)\n */\n documentId?: string\n /**\n * The dataset name that is currently referencing the subject document.\n * This will be omitted if there is no access to the current project and\n * dataset pair (e.g. if no `sanity-project-token` were configured)\n */\n datasetName?: string\n }>\n }\n}\n\nfunction getDocumentExistence(\n documentId: string,\n {versionedClient}: {versionedClient: SanityClient},\n): Observable<string | undefined> {\n const draftId = getDraftId(documentId)\n const publishedId = getPublishedId(documentId)\n const requestOptions = {\n uri: versionedClient.getDataUrl('doc', `${draftId},${publishedId}`),\n json: true,\n query: {excludeContent: 'true'},\n tag: 'use-referring-documents.document-existence',\n }\n return versionedClient.observable.request<AvailabilityResponse>(requestOptions).pipe(\n map(({omitted}) => {\n const nonExistant = omitted.filter((doc) => doc.reason === 'existence')\n if (nonExistant.length === 2) {\n // None of the documents exist\n return undefined\n }\n\n if (nonExistant.length === 0) {\n // Both exist, so use the published one\n return publishedId\n }\n\n // If the draft does not exist, use the published ID, and vice versa\n return nonExistant.some((doc) => doc.id === draftId) ? publishedId : draftId\n }),\n )\n}\n\n/**\n * fetches the cross-dataset references using the client observable.request\n * method (for that requests can be automatically cancelled)\n */\nfunction fetchCrossDatasetReferences(\n documentId: string,\n context: {versionedClient: SanityClient},\n): Observable<ReferringDocuments['crossDatasetReferences']> {\n const {versionedClient} = context\n\n return getVisiblePoll$().pipe(\n switchMap(() => getDocumentExistence(documentId, context)),\n switchMap((checkDocumentId) => {\n if (!checkDocumentId) {\n return of({totalCount: 0, references: []})\n }\n\n const currentDataset = versionedClient.config().dataset\n\n return versionedClient.observable\n .request({\n url: `/data/references/${currentDataset}/documents/${checkDocumentId}/to?excludeInternalReferences=true&excludePaths=true`,\n tag: 'use-referring-documents.external',\n })\n .pipe(\n catchError((e) => {\n // it's possible that referencing document doesn't exist yet so the\n // API will return a 404. In those cases, we want to catch and return\n // a response with no references\n if (isClientError(e) && e.statusCode === 404) {\n return of({totalCount: 0, references: []})\n }\n\n throw e\n }),\n )\n }),\n )\n}\n\nconst useInternalReferences = createHookFromObservableFactory(\n ([documentId, documentStore]: [string, DocumentStore]) => {\n const referencesClause = '*[references($documentId)][0...100]{_id,_type}'\n const totalClause = 'count(*[references($documentId)])'\n const fetchQuery = `{\"references\":${referencesClause},\"totalCount\":${totalClause}}`\n const listenQuery = '*[references($documentId)]'\n\n return documentStore.listenQuery(\n {fetch: fetchQuery, listen: listenQuery},\n {documentId},\n {tag: 'use-referring-documents', transitions: ['appear', 'disappear'], throttleTime: 5000},\n ) as Observable<ReferringDocuments['internalReferences']>\n },\n)\n\nconst useCrossDatasetReferences = createHookFromObservableFactory(\n ([documentId, versionedClient]: [string, SanityClient]) => {\n // (documentId: string, versionedClient: SanityClient) => {\n return getVisiblePoll$().pipe(\n switchMap(() =>\n fetchCrossDatasetReferences(documentId, {\n versionedClient,\n }),\n ),\n )\n },\n)\n\nexport function useReferringDocuments(documentId: string): ReferringDocuments {\n const versionedClient = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n\n const documentStore = useDocumentStore()\n const publishedId = getPublishedId(documentId)\n\n const [internalReferences, isInternalReferencesLoading] = useInternalReferences(\n useMemo(() => [publishedId, documentStore], [documentStore, publishedId]),\n )\n\n const [crossDatasetReferences, isCrossDatasetReferencesLoading] = useCrossDatasetReferences(\n useMemo(() => [publishedId, versionedClient], [publishedId, versionedClient]),\n )\n\n const projectIds = useMemo(() => {\n return Array.from(\n new Set(\n crossDatasetReferences?.references\n .map((crossDatasetReference) => crossDatasetReference.projectId)\n .filter(Boolean),\n ),\n ).sort()\n }, [crossDatasetReferences?.references])\n\n const datasetNames = useMemo(() => {\n return Array.from(\n new Set<string>(\n crossDatasetReferences?.references\n // .filter((name) => typeof name === 'string')\n .map((crossDatasetReference) => crossDatasetReference?.datasetName || '')\n .filter((datasetName) => Boolean(datasetName) && datasetName !== ''),\n ),\n ).sort()\n }, [crossDatasetReferences?.references])\n\n const hasUnknownDatasetNames = useMemo(() => {\n return Boolean(\n crossDatasetReferences?.references.some(\n (crossDatasetReference) => typeof crossDatasetReference.datasetName !== 'string',\n ),\n )\n }, [crossDatasetReferences?.references])\n\n return {\n totalCount: (internalReferences?.totalCount || 0) + (crossDatasetReferences?.totalCount || 0),\n projectIds,\n datasetNames,\n hasUnknownDatasetNames,\n internalReferences,\n crossDatasetReferences,\n isLoading: isInternalReferencesLoading || isCrossDatasetReferencesLoading,\n }\n}\n","import type {SanityDocument, SchemaType} from '@sanity/types'\nimport React, {isValidElement} from 'react'\nimport {isNumber, isString} from 'lodash'\nimport {Flex} from '@sanity/ui'\nimport {useMemoObservable} from 'react-rx'\nimport {TooltipDelayGroupProvider} from '../../../ui-components'\nimport type {PaneItemPreviewState} from './types'\nimport {\n DocumentPresence,\n DocumentPreviewPresence,\n DocumentPreviewStore,\n GeneralPreviewLayoutKey,\n getPreviewStateObservable,\n getPreviewValueWithFallback,\n SanityDefaultPreview,\n isRecord,\n DocumentStatusIndicator,\n DocumentStatus,\n} from 'sanity'\n\nexport interface PaneItemPreviewProps {\n documentPreviewStore: DocumentPreviewStore\n icon: React.ComponentType | false\n layout: GeneralPreviewLayoutKey\n presence?: DocumentPresence[]\n schemaType: SchemaType\n value: SanityDocument\n}\n\n/**\n * Preview component for _documents_ rendered in structure panes.\n *\n * Note that non-document previews are not handled by this component,\n * despite being pane items! Non-document previews bypass this entirely\n * and are rendered by `<SanityDefaultPreview>`.\n */\nexport function PaneItemPreview(props: PaneItemPreviewProps) {\n const {icon, layout, presence, schemaType, value} = props\n const title =\n (isRecord(value.title) && isValidElement(value.title)) ||\n isString(value.title) ||\n isNumber(value.title)\n ? value.title\n : null\n\n // NOTE: this emits sync so can never be null\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const {draft, published, isLoading} = useMemoObservable<PaneItemPreviewState>(\n () => getPreviewStateObservable(props.documentPreviewStore, schemaType, value._id, title),\n [props.documentPreviewStore, schemaType, value._id, title],\n )!\n\n const status = isLoading ? null : (\n <TooltipDelayGroupProvider>\n <Flex align=\"center\" gap={3}>\n {presence && presence.length > 0 && <DocumentPreviewPresence presence={presence} />}\n <DocumentStatusIndicator draft={draft} published={published} />\n </Flex>\n </TooltipDelayGroupProvider>\n )\n\n const tooltip = <DocumentStatus draft={draft} published={published} />\n\n return (\n <SanityDefaultPreview\n {...getPreviewValueWithFallback({value, draft, published})}\n isPlaceholder={isLoading}\n icon={icon}\n layout={layout}\n status={status}\n tooltip={tooltip}\n />\n )\n}\n","import {createContext} from 'react'\nimport {PaneRouterContextValue} from './types'\n\nfunction missingContext<T = unknown>(): T {\n throw new Error('Pane is missing router context')\n}\n\n/**\n *\n * @hidden\n * @beta\n */\nexport const PaneRouterContext = createContext<PaneRouterContextValue>({\n index: 0,\n groupIndex: 0,\n siblingIndex: 0,\n payload: undefined,\n params: {},\n hasGroupSiblings: false,\n groupLength: 0,\n routerPanesState: [],\n BackLink: () => missingContext(),\n ChildLink: () => missingContext(),\n ReferenceChildLink: () => missingContext(),\n handleEditReference: () => missingContext(),\n ParameterizedLink: () => missingContext(),\n replaceCurrent: () => missingContext(),\n closeCurrentAndAfter: () => missingContext(),\n closeCurrent: () => missingContext(),\n duplicateCurrent: () => missingContext(),\n setView: () => missingContext(),\n setParams: () => missingContext(),\n setPayload: () => missingContext(),\n navigateIntent: () => missingContext(),\n createPathWithParams: () => missingContext(),\n})\n","import React, {forwardRef, useContext, useMemo} from 'react'\nimport {PaneRouterContext} from './PaneRouterContext'\nimport {BackLinkProps} from './types'\nimport {StateLink} from 'sanity/router'\n\n/**\n * @internal\n */\nexport const BackLink = forwardRef(function BackLink(\n props: BackLinkProps,\n ref: React.ForwardedRef<HTMLAnchorElement>,\n) {\n const {routerPanesState, groupIndex} = useContext(PaneRouterContext)\n const panes = useMemo(() => routerPanesState.slice(0, groupIndex), [groupIndex, routerPanesState])\n const state = useMemo(() => ({panes}), [panes])\n\n return <StateLink {...props} ref={ref} state={state} />\n}) as React.ComponentType<BackLinkProps>\n","import {createContext} from 'react'\nimport {PaneLayoutContextValue} from './types'\n\n/**\n * @internal\n */\nexport const PaneLayoutContext = createContext<PaneLayoutContextValue | null>(null)\n","import {useContext} from 'react'\nimport {PaneLayoutContext} from './PaneLayoutContext'\nimport {PaneLayoutContextValue} from './types'\n\n/**\n *\n * @hidden\n * @beta This API will change. DO NOT USE IN PRODUCTION.\n */\nexport function usePaneLayout(): PaneLayoutContextValue {\n const pane = useContext(PaneLayoutContext)\n\n if (!pane) {\n throw new Error('PaneLayout: missing context value')\n }\n\n return pane\n}\n","import React, {forwardRef, useContext} from 'react'\nimport {PaneRouterContext} from './PaneRouterContext'\nimport {ChildLinkProps} from './types'\nimport {StateLink} from 'sanity/router'\n\n/**\n * @internal\n */\nexport const ChildLink = forwardRef(function ChildLink(\n props: ChildLinkProps,\n ref: React.ForwardedRef<HTMLAnchorElement>,\n) {\n const {childId, childPayload, childParameters, ...rest} = props\n const {routerPanesState, groupIndex} = useContext(PaneRouterContext)\n\n return (\n <StateLink\n {...rest}\n ref={ref}\n state={{\n panes: [\n ...routerPanesState.slice(0, groupIndex + 1),\n [{id: childId, params: childParameters, payload: childPayload}],\n ],\n }}\n />\n )\n})\n","import React, {forwardRef} from 'react'\nimport {toString as pathToString} from '@sanity/util/paths'\nimport {ChildLink} from './ChildLink'\nimport {ReferenceChildLinkProps} from './types'\n\nexport const ReferenceChildLink = forwardRef(function ReferenceChildLink(\n {documentId, documentType, parentRefPath, children, template, ...rest}: ReferenceChildLinkProps,\n ref: React.ForwardedRef<HTMLAnchorElement>,\n) {\n return (\n <ChildLink\n {...rest}\n ref={ref}\n childId={documentId}\n childPayload={template?.params}\n childParameters={{\n type: documentType,\n parentRefPath: pathToString(parentRefPath),\n ...(template && {template: template?.id}),\n }}\n >\n {children}\n </ChildLink>\n )\n})\n","import React, {forwardRef, useContext, useMemo} from 'react'\nimport {PaneRouterContext} from './PaneRouterContext'\nimport {useUnique} from 'sanity'\nimport {StateLink} from 'sanity/router'\n\ninterface ParameterizedLinkProps {\n params?: Record<string, string>\n payload?: unknown\n children?: React.ReactNode\n}\n\n/**\n * @internal\n */\nexport const ParameterizedLink = forwardRef(function ParameterizedLink(\n props: ParameterizedLinkProps,\n ref: React.ForwardedRef<HTMLAnchorElement>,\n) {\n const {routerPanesState: currentPanes, groupIndex, siblingIndex} = useContext(PaneRouterContext)\n const {params, payload, ...rest} = props\n const nextParams = useUnique(params)\n const nextPayload = useUnique(payload)\n\n const nextState = useMemo(() => {\n const currentGroup = currentPanes[groupIndex]\n const currentSibling = currentGroup[siblingIndex]\n\n const nextSibling = {\n ...currentSibling,\n params: nextParams ?? currentSibling.params,\n payload: nextPayload ?? currentSibling.payload,\n }\n\n const nextGroup = [\n ...currentGroup.slice(0, siblingIndex),\n nextSibling,\n ...currentGroup.slice(siblingIndex + 1),\n ]\n\n const nextPanes = [\n ...currentPanes.slice(0, groupIndex),\n nextGroup,\n ...currentPanes.slice(groupIndex + 1),\n ]\n\n return {panes: nextPanes}\n }, [currentPanes, groupIndex, nextParams, nextPayload, siblingIndex])\n\n return <StateLink ref={ref} {...rest} state={nextState} />\n})\n","import {useContext} from 'react'\nimport {PaneRouterContext} from './PaneRouterContext'\nimport {PaneRouterContextValue} from './types'\n\n/**\n *\n * @hidden\n * @beta\n */\nexport function usePaneRouter(): PaneRouterContextValue {\n return useContext(PaneRouterContext)\n}\n","import React, {useCallback} from 'react'\nimport type {SanityDocument, SchemaType} from '@sanity/types'\nimport {PaneItemPreview} from '../paneItem/PaneItemPreview'\nimport {usePaneRouter} from '../paneRouter'\nimport {\n FIXME,\n PreviewCard,\n getPublishedId,\n useDocumentPresence,\n useDocumentPreviewStore,\n} from 'sanity'\n\nconst EMPTY_ARRAY: [] = []\n\ninterface ReferencePreviewLinkProps {\n onClick?: () => void\n type: SchemaType & {icon?: any}\n value: SanityDocument\n}\n\nexport function ReferencePreviewLink(props: ReferencePreviewLinkProps) {\n const {onClick, type, value} = props\n const publishedId = getPublishedId(value?._id)\n const documentPresence = useDocumentPresence(publishedId)\n const documentPreviewStore = useDocumentPreviewStore()\n const {ReferenceChildLink} = usePaneRouter()\n\n const Link = useCallback(\n function LinkComponent(linkProps: {children: React.ReactNode}) {\n return (\n <ReferenceChildLink\n documentId={value?._id}\n documentType={type?.name}\n parentRefPath={EMPTY_ARRAY}\n {...linkProps}\n />\n )\n },\n [ReferenceChildLink, type?.name, value?._id],\n )\n\n return (\n <PreviewCard __unstable_focusRing as={Link as FIXME} data-as=\"a\" onClick={onClick} radius={2}>\n <PaneItemPreview\n documentPreviewStore={documentPreviewStore}\n icon={type?.icon}\n layout=\"compact\"\n presence={documentPresence?.length > 0 ? documentPresence : EMPTY_ARRAY}\n schemaType={type}\n value={value}\n />\n </PreviewCard>\n )\n}\n","import React from 'react'\nimport styled from 'styled-components'\nimport {rem, Flex, Text, Box, Inline} from '@sanity/ui'\nimport {InfoOutlineIcon} from '@sanity/icons'\nimport {Tooltip} from '../../../ui-components'\nimport {structureLocaleNamespace} from '../../i18n'\nimport {useTranslation} from 'sanity'\n\nexport const ChevronWrapper = styled(Box)`\n margin-left: auto;\n`\n\nexport const CrossDatasetReferencesDetails = styled.details`\n flex: none;\n\n &[open] ${ChevronWrapper} {\n transform: rotate(180deg);\n }\n`\n\nexport const CrossDatasetReferencesSummary = styled.summary`\n list-style: none;\n\n &::-webkit-details-marker {\n display: none;\n }\n`\n\nexport const Table = styled.table`\n width: 100%;\n text-align: left;\n padding: 0 ${({theme}) => rem(theme.sanity.space[2])};\n border-collapse: collapse;\n\n th {\n padding: ${({theme}) => rem(theme.sanity.space[1])};\n }\n\n td {\n padding: 0 ${({theme}) => rem(theme.sanity.space[1])};\n }\n\n tr > *:last-child {\n text-align: right;\n }\n`\n\nexport const DocumentIdFlex = styled(Flex)`\n min-height: 33px;\n`\n\nexport const OtherReferenceCount = (props: {totalCount: number; references: unknown[]}) => {\n const {t} = useTranslation(structureLocaleNamespace)\n const difference = props.totalCount - props.references.length\n\n if (!difference) return null\n\n return (\n <Box padding={2}>\n <Inline space={2}>\n <Text size={1} muted>\n {t('confirm-delete-dialog.other-reference-count.title', {count: difference})}\n </Text>\n\n <Tooltip\n portal\n placement=\"top\"\n content={t('confirm-delete-dialog.other-reference-count.tooltip')}\n >\n <Text size={1} muted>\n <InfoOutlineIcon />\n </Text>\n </Tooltip>\n </Inline>\n </Box>\n )\n}\n","import React, {useCallback} from 'react'\nimport {\n DocumentsIcon,\n CopyIcon,\n UnknownIcon,\n ChevronDownIcon,\n WarningOutlineIcon,\n} from '@sanity/icons'\nimport {useToast, Text, Box, Flex, Card, Stack} from '@sanity/ui'\nimport CopyToClipboard from 'react-copy-to-clipboard'\nimport {Button} from '../../../ui-components'\nimport {structureLocaleNamespace} from '../../i18n'\nimport {ReferencePreviewLink} from './ReferencePreviewLink'\nimport {ReferringDocuments} from './useReferringDocuments'\nimport {\n OtherReferenceCount,\n CrossDatasetReferencesDetails,\n CrossDatasetReferencesSummary,\n Table,\n ChevronWrapper,\n DocumentIdFlex,\n} from './ConfirmDeleteDialogBody.styles'\nimport {SanityDefaultPreview, Translate, useSchema, useTranslation} from 'sanity'\n\ntype DeletionConfirmationDialogBodyProps = Required<ReferringDocuments> & {\n documentTitle: React.ReactNode\n action: 'unpublish' | 'delete'\n onReferenceLinkClick?: () => void\n}\n\n/**\n * The inner part of the `ConfirmDeleteDialog`. This is ran when both the\n * `crossDatasetReferences` and `internalReferences` are loaded.\n */\nexport function ConfirmDeleteDialogBody({\n crossDatasetReferences,\n internalReferences,\n documentTitle,\n totalCount,\n action,\n datasetNames,\n hasUnknownDatasetNames,\n onReferenceLinkClick,\n}: DeletionConfirmationDialogBodyProps) {\n const schema = useSchema()\n const toast = useToast()\n const {t} = useTranslation(structureLocaleNamespace)\n\n const renderPreviewItem = useCallback(\n (item: any) => {\n const type = schema.get(item._type)\n if (type) {\n return <ReferencePreviewLink type={type} value={item} onClick={onReferenceLinkClick} />\n }\n\n return (\n // Padding added to match the ReferencePreviewLink styling\n <Box padding={2}>\n <SanityDefaultPreview\n icon={UnknownIcon}\n title={t('confirm-delete-dialog.preview-item.preview-unavailable.title')}\n subtitle={t('confirm-delete-dialog.preview-item.preview-unavailable.subtitle', {\n documentId: item._id,\n })}\n layout=\"default\"\n />\n </Box>\n )\n },\n [schema, t, onReferenceLinkClick],\n )\n\n if (internalReferences?.totalCount === 0 && crossDatasetReferences?.totalCount === 0) {\n return (\n <Text as=\"p\" size={1}>\n <Translate\n t={t}\n i18nKey=\"confirm-delete-dialog.confirmation.text\"\n context={action}\n components={{DocumentTitle: () => <strong>{documentTitle}</strong>}}\n />\n </Text>\n )\n }\n\n // We do some extra checks to handle cases where you have unavailable dataset\n // name(s) due to permissions, both alone and in combination with known datasets\n\n // This normalizes one or more undefined dataset names to the catch-all `unavailable`\n const normalizedDatasetNames = [\n ...datasetNames,\n ...(hasUnknownDatasetNames ? ['unavailable'] : []),\n ]\n\n const datasetSubtitle = t('confirm-delete-dialog.cdr-summary.subtitle', {\n count: normalizedDatasetNames.length,\n datasets: normalizedDatasetNames.join(', '),\n context: hasUnknownDatasetNames && normalizedDatasetNames.length ? 'unavailable' : '',\n })\n\n return (\n <Flex direction=\"column\" gap={4}>\n <Card padding={3} radius={2} tone=\"caution\" flex=\"none\">\n <Flex>\n <Text aria-hidden=\"true\" size={1}>\n <WarningOutlineIcon />\n </Text>\n <Box flex={1} marginLeft={3}>\n <Text size={1}>\n <Translate\n i18nKey=\"confirm-delete-dialog.referring-document-count.text\"\n components={{DocumentTitle: () => documentTitle}}\n t={t}\n values={{count: totalCount}}\n />\n </Text>\n </Box>\n </Flex>\n </Card>\n <Box flex=\"none\">\n <Text size={1}>\n <Translate\n i18nKey=\"confirm-delete-dialog.referring-documents-descriptor.text\"\n t={t}\n context={action}\n components={{DocumentTitle: () => documentTitle}}\n />\n </Text>\n </Box>\n <Card radius={2} shadow={1} flex=\"auto\" padding={2}>\n <Flex direction=\"column\">\n {internalReferences.totalCount > 0 && (\n <Stack as=\"ul\" marginBottom={2} space={2} data-testid=\"internal-references\">\n {internalReferences?.references.map((item) => (\n <Box as=\"li\" key={item._id}>\n {renderPreviewItem(item)}\n </Box>\n ))}\n\n {internalReferences.totalCount > internalReferences.references.length && (\n <Box as=\"li\" padding={3}>\n <OtherReferenceCount {...internalReferences} />\n </Box>\n )}\n </Stack>\n )}\n\n {crossDatasetReferences.totalCount > 0 && (\n <CrossDatasetReferencesDetails\n data-testid=\"cross-dataset-references\"\n style={{\n // only add the border if needed\n borderTop:\n internalReferences.totalCount > 0\n ? '1px solid var(--card-shadow-outline-color)'\n : undefined,\n }}\n >\n <CrossDatasetReferencesSummary>\n <Card\n as=\"a\"\n marginTop={internalReferences.totalCount > 0 ? 2 : 0}\n radius={2}\n shadow={1}\n paddingY={1}\n >\n <Flex align=\"center\" gap={3} paddingX={3} paddingY={1}>\n <Text size={1}>\n <DocumentsIcon />\n </Text>\n <Stack space={2}>\n <Text textOverflow=\"ellipsis\" size={1}>\n {t('confirm-delete-dialog.cdr-summary.title', {\n count: normalizedDatasetNames.length,\n documentCount: t('confirm-delete-dialog.cdr-summary.document-count', {\n count: crossDatasetReferences.totalCount,\n }),\n })}\n </Text>\n <Text title={datasetSubtitle} textOverflow=\"ellipsis\" size={1} muted>\n {datasetSubtitle}\n </Text>\n </Stack>\n <ChevronWrapper>\n <Text muted size={1}>\n <ChevronDownIcon />\n </Text>\n </ChevronWrapper>\n </Flex>\n </Card>\n </CrossDatasetReferencesSummary>\n\n <Box overflow=\"auto\" paddingTop={2}>\n <Table>\n <thead>\n <tr>\n <th>\n <Text muted size={1} style={{minWidth: '5rem'}} weight=\"medium\">\n {t('confirm-delete-dialog.cdr-table.project-id.label')}\n </Text>\n </th>\n <th>\n <Text muted size={1} weight=\"medium\">\n {t('confirm-delete-dialog.cdr-table.dataset.label')}\n </Text>\n </th>\n <th>\n <Text muted size={1} weight=\"medium\">\n {t('confirm-delete-dialog.cdr-table.document-id.label')}\n </Text>\n </th>\n </tr>\n </thead>\n <tbody>\n {crossDatasetReferences.references\n .filter((reference): reference is Required<typeof reference> => {\n return 'projectId' in reference\n })\n .map(({projectId, datasetName, documentId}, index) => (\n // eslint-disable-next-line react/no-array-index-key\n <tr key={`${documentId}-${index}`}>\n <td>\n <Text size={1}>{projectId}</Text>\n </td>\n <td>\n <Text size={1}>{datasetName || 'unavailable'}</Text>\n </td>\n <td>\n <DocumentIdFlex align=\"center\" gap={2} justify=\"flex-end\">\n <Text textOverflow=\"ellipsis\" size={1}>\n {documentId || 'unavailable'}\n </Text>\n {documentId && (\n <CopyToClipboard\n text={documentId}\n // eslint-disable-next-line react/jsx-no-bind\n onCopy={() => {\n toast.push({\n title: t(\n 'confirm-delete-dialog.cdr-table.id-copied-toast.title',\n ),\n status: 'success',\n })\n }}\n >\n <Button\n mode=\"bleed\"\n icon={CopyIcon}\n tooltipProps={{\n content: t(\n 'confirm-delete-dialog.cdr-table.copy-id-button.tooltip',\n ),\n }}\n />\n </CopyToClipboard>\n )}\n </DocumentIdFlex>\n </td>\n </tr>\n ))}\n </tbody>\n </Table>\n\n <OtherReferenceCount {...crossDatasetReferences} />\n </Box>\n </CrossDatasetReferencesDetails>\n )}\n </Flex>\n </Card>\n <Box flex=\"none\">\n <Text size={1}>\n <Translate\n i18nKey=\"confirm-delete-dialog.referential-integrity-disclaimer.text\"\n t={t}\n context={action}\n components={{DocumentTitle: () => documentTitle}}\n />\n </Text>\n </Box>\n </Flex>\n )\n}\n","import React, {useMemo, useId} from 'react'\nimport styled from 'styled-components'\nimport {Box, Flex} from '@sanity/ui'\nimport {Dialog} from '../../../ui-components'\nimport {DocTitle} from '../DocTitle'\nimport {structureLocaleNamespace} from '../../i18n'\nimport {useReferringDocuments} from './useReferringDocuments'\nimport {ConfirmDeleteDialogBody} from './ConfirmDeleteDialogBody'\nimport {useTranslation, LoadingBlock} from 'sanity'\n\n/** @internal */\nexport const DialogBody = styled(Box)`\n box-sizing: border-box;\n`\n\n/** @internal */\nexport const LoadingContainer = styled(Flex).attrs({\n align: 'center',\n direction: 'column',\n justify: 'center',\n})`\n height: 110px;\n`\n\n/** @internal */\nexport interface ConfirmDeleteDialogProps {\n /**\n * Incoming document ID used to find other referencing documents. This\n * field respects draft IDs (e.g. if you pass in a published ID when one\n * doesn't exist the document title may not show up).\n */\n id: string\n /**\n * The schema typename of the incoming document\n */\n type: string\n /**\n * The name of the action being done. (e.g. the `'unpublish'` action requires\n * the same document deletion confirmation).\n */\n action?: 'delete' | 'unpublish'\n onCancel: () => void\n onConfirm: () => void\n}\n\n/**\n * A confirmation dialog used to prevent unwanted document deletes. Loads all\n * the referencing internal and cross-data references prior to showing the\n * delete button.\n *\n * @internal\n */\nexport function ConfirmDeleteDialog({\n id,\n type,\n action = 'delete',\n onCancel,\n onConfirm,\n}: ConfirmDeleteDialogProps) {\n const {t} = useTranslation(structureLocaleNamespace)\n const dialogId = `deletion-confirmation-${useId()}`\n const {\n internalReferences,\n crossDatasetReferences,\n isLoading,\n totalCount,\n projectIds,\n datasetNames,\n hasUnknownDatasetNames,\n } = useReferringDocuments(id)\n const documentTitle = <DocTitle document={useMemo(() => ({_id: id, _type: type}), [id, type])} />\n const showConfirmButton = !isLoading\n\n return (\n <Dialog\n width={1}\n id={dialogId}\n header={t('confirm-delete-dialog.header.text', {context: action})}\n footer={{\n cancelButton: {\n onClick: onCancel,\n text: t('confirm-delete-dialog.cancel-button.text'),\n },\n confirmButton: showConfirmButton\n ? {\n text:\n totalCount > 0\n ? t('confirm-delete-dialog.confirm-anyway-button.text', {context: action})\n : t('confirm-delete-dialog.confirm-button.text', {context: action}),\n onClick: onConfirm,\n }\n : undefined,\n }}\n onClose={onCancel}\n onClickOutside={onCancel}\n >\n <DialogBody>\n {crossDatasetReferences && internalReferences && !isLoading ? (\n <ConfirmDeleteDialogBody\n crossDatasetReferences={crossDatasetReferences}\n internalReferences={internalReferences}\n documentTitle={documentTitle}\n isLoading={isLoading}\n totalCount={totalCount}\n action={action}\n projectIds={projectIds}\n datasetNames={datasetNames}\n hasUnknownDatasetNames={hasUnknownDatasetNames}\n onReferenceLinkClick={onCancel}\n />\n ) : (\n <LoadingContainer data-testid=\"loading-container\">\n <LoadingBlock showText title={t('confirm-delete-dialog.loading.text')} />\n </LoadingContainer>\n )}\n </DialogBody>\n </Dialog>\n )\n}\n","import React, {useCallback, useState, useId} from 'react'\nimport {Box, ErrorBoundary, Text} from '@sanity/ui'\nimport {Dialog} from '../../../ui-components'\nimport {structureLocaleNamespace} from '../../i18n'\nimport {ConfirmDeleteDialog, ConfirmDeleteDialogProps} from './ConfirmDeleteDialog'\nimport {useTranslation} from 'sanity'\n\nexport type {ConfirmDeleteDialogProps}\n\ntype ArgType<T> = T extends (arg: infer U) => unknown ? U : never\ntype ErrorInfo = ArgType<React.ComponentProps<typeof ErrorBoundary>['onCatch']>\n\n/** @internal */\nfunction ConfirmDeleteDialogContainer(props: ConfirmDeleteDialogProps) {\n const {t} = useTranslation(structureLocaleNamespace)\n const id = useId()\n const [error, setError] = useState<ErrorInfo | null>(null)\n const handleRetry = useCallback(() => setError(null), [])\n\n return error ? (\n <Dialog\n id={`dialog-error-${id}`}\n data-testid=\"confirm-delete-error-dialog\"\n header={t('confirm-delete-dialog.error.title.text')}\n footer={{\n confirmButton: {\n text: t('confirm-delete-dialog.error.retry-button.text'),\n onClick: handleRetry,\n tone: 'default',\n },\n }}\n onClose={props.onCancel}\n >\n <Box padding={4}>\n <Text size={1}>{t('confirm-delete-dialog.error.message.text')}</Text>\n </Box>\n </Dialog>\n ) : (\n <ErrorBoundary onCatch={setError}>\n <ConfirmDeleteDialog {...props} />\n </ErrorBoundary>\n )\n}\n\nexport {ConfirmDeleteDialogContainer as ConfirmDeleteDialog}\n","import {CheckmarkIcon} from '@sanity/icons'\nimport {MenuDivider, Text} from '@sanity/ui'\nimport React, {useCallback, MouseEvent} from 'react'\nimport {Intent} from '../../structureBuilder'\nimport {MenuGroup, MenuItem, PopoverProps} from '../../../ui-components'\nimport {_PaneMenuItem, _PaneMenuNode} from './types'\nimport {TooltipOfDisabled, useGetI18nText, useI18nText} from 'sanity'\nimport {useIntentLink} from 'sanity/router'\n\nconst MENU_GROUP_POPOVER_PROPS: PopoverProps = {\n constrainSize: true,\n placement: 'left-start',\n portal: true,\n}\n\nexport function PaneMenuButtonItem(props: {\n disabled?: boolean\n isAfterGroup: boolean\n node: _PaneMenuNode\n}) {\n const {disabled, isAfterGroup, node} = props\n const getI18nText = useGetI18nText('i18n' in node ? node : undefined)\n\n if (node.type === 'divider') {\n return <MenuDivider />\n }\n\n const {title} = getI18nText(node)\n\n if (node.type === 'group') {\n if (node.children.length === 0) {\n return null\n }\n\n if (node.expanded) {\n return (\n <>\n {isAfterGroup && <MenuDivider />}\n {node.children.map((child, childIndex) => (\n <PaneMenuButtonItem\n disabled={disabled || Boolean(node.disabled)}\n isAfterGroup={node.children[childIndex - 1]?.type === 'group'}\n key={child.key}\n node={child}\n />\n ))}\n </>\n )\n }\n\n return (\n <>\n {isAfterGroup && <MenuDivider />}\n <MenuGroup\n disabled={disabled}\n icon={node.icon}\n popover={MENU_GROUP_POPOVER_PROPS}\n text={title}\n >\n {node.children.map((child, childIndex) => (\n <PaneMenuButtonItem\n disabled={disabled || Boolean(node.disabled)}\n isAfterGroup={node.children[childIndex - 1]?.type === 'group'}\n key={child.key}\n node={child}\n />\n ))}\n </MenuGroup>\n </>\n )\n }\n\n return (\n <>\n {isAfterGroup && <MenuDivider />}\n <PaneContextMenuItemResolver disabled={disabled} node={node} />\n </>\n )\n}\n\nfunction PaneContextMenuItemResolver(props: {disabled?: boolean; node: _PaneMenuItem}) {\n const {node} = props\n\n if (node.intent) {\n return <PaneContextIntentMenuItem {...props} intent={node.intent} />\n }\n\n return <PaneContextMenuItem {...props} />\n}\n\nfunction PaneContextMenuItem(props: {disabled?: boolean; node: _PaneMenuItem}) {\n const {disabled, node} = props\n const tooltipContent = typeof node.disabled === 'object' && (\n <Text size={1}>{node.disabled.reason}</Text>\n )\n const {title} = useI18nText(node)\n\n return (\n <TooltipOfDisabled content={tooltipContent} placement=\"left\">\n <MenuItem\n disabled={disabled || Boolean(node.disabled)}\n hotkeys={node.hotkey?.split('+')}\n icon={node.icon}\n iconRight={node.iconRight || (node.selected && CheckmarkIcon)}\n // eslint-disable-next-line react/jsx-handler-names\n onClick={node.onAction}\n pressed={node.selected}\n text={title}\n tone={node.tone}\n />\n </TooltipOfDisabled>\n )\n}\n\nfunction PaneContextIntentMenuItem(props: {\n disabled?: boolean\n intent: Intent\n node: _PaneMenuItem\n}) {\n const {disabled, intent, node} = props\n const tooltipContent = typeof node.disabled === 'object' && (\n <Text size={1}>{node.disabled.reason}</Text>\n )\n const intentLink = useIntentLink({intent: intent.type, params: intent.params})\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLDivElement>) => {\n intentLink.onClick(event)\n node.onAction()\n },\n [intentLink, node],\n )\n\n const {title} = useI18nText(node)\n\n return (\n <TooltipOfDisabled content={tooltipContent} placement=\"left\">\n <MenuItem\n as=\"a\"\n disabled={disabled || Boolean(node.disabled)}\n hotkeys={node.hotkey?.split('+')}\n href={intentLink.href}\n icon={node.icon}\n iconRight={node.selected ? CheckmarkIcon : undefined}\n onClick={handleClick}\n pressed={node.selected}\n text={title}\n tone={node.tone}\n />\n </TooltipOfDisabled>\n )\n}\n","import {Menu} from '@sanity/ui'\nimport React, {useId} from 'react'\nimport {MenuButton, PopoverProps} from '../../../ui-components'\nimport {_PaneMenuItem, _PaneMenuNode} from './types'\nimport {PaneMenuButtonItem} from './PaneMenuButtonItem'\nimport {ContextMenuButton} from 'sanity'\n\ninterface PaneContextMenuButtonProps {\n nodes: _PaneMenuNode[]\n}\n\nconst CONTEXT_MENU_POPOVER_PROPS: PopoverProps = {\n constrainSize: true,\n placement: 'bottom',\n portal: true,\n}\n\nfunction nodesHasTone(nodes: _PaneMenuNode[], tone: NonNullable<_PaneMenuItem['tone']>): boolean {\n return nodes.some((node) => {\n return (\n (node.type === 'item' && node.tone === tone) ||\n (node.type === 'group' && nodesHasTone(node.children, tone))\n )\n })\n}\n\n/**\n *\n * @hidden\n * @beta This API will change. DO NOT USE IN PRODUCTION.\n */\nexport function PaneContextMenuButton(props: PaneContextMenuButtonProps) {\n const {nodes} = props\n const id = useId()\n\n const hasCritical = nodesHasTone(nodes, 'critical')\n const hasCaution = nodesHasTone(nodes, 'caution')\n\n return (\n <MenuButton\n button={\n <ContextMenuButton\n // eslint-disable-next-line no-nested-ternary\n tone={hasCritical ? 'critical' : hasCaution ? 'caution' : undefined}\n />\n }\n id={id}\n menu={\n <Menu>\n {nodes.map((node, nodeIndex) => {\n const isAfterGroup = nodes[nodeIndex - 1]?.type === 'group'\n\n return <PaneMenuButtonItem isAfterGroup={isAfterGroup} key={node.key} node={node} />\n })}\n </Menu>\n }\n popover={CONTEXT_MENU_POPOVER_PROPS}\n />\n )\n}\n","/**\n * @internal\n */\nexport const PANE_DEBUG = false\n\n/**\n * @internal\n */\nexport const PANE_COLLAPSED_WIDTH = 51\n\n/**\n * @internal\n */\nexport const PANE_DEFAULT_MIN_WIDTH = PANE_COLLAPSED_WIDTH * 4\n","import {createContext} from 'react'\nimport {PaneContextValue} from './types'\n\n/**\n * @internal\n */\nexport const PaneContext = createContext<PaneContextValue | null>(null)\n","import {Layer} from '@sanity/ui'\nimport React, {useCallback, useState} from 'react'\nimport styled from 'styled-components'\nimport {usePaneLayout} from './usePaneLayout'\n\nconst Root = styled(Layer)`\n position: relative;\n width: 1px;\n min-width: 1px;\n\n &:before {\n content: '';\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 1px;\n background-color: var(--card-border-color);\n }\n\n &:not([data-disabled]) {\n cursor: ew-resize;\n width: 9px;\n min-width: 9px;\n margin: 0 -4px;\n\n &:before {\n left: 4px;\n }\n\n &:after {\n content: '';\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n width: 9px;\n bottom: 0;\n background-color: var(--card-border-color);\n opacity: 0;\n transition: opacity 150ms;\n }\n\n &[data-dragging]:after,\n &:hover:after {\n opacity: 0.2;\n }\n }\n`\n\n/**\n *\n * @hidden\n * @beta This API will change. DO NOT USE IN PRODUCTION.\n */\nexport function PaneDivider({\n disabled,\n element,\n}: {\n disabled?: boolean\n element: HTMLElement | null\n}) {\n const {resize} = usePaneLayout()\n const [dragging, setDragging] = useState(false)\n\n const handleMouseDown = useCallback(\n (event: any) => {\n if (!element) return\n\n setDragging(true)\n\n event.preventDefault()\n\n const startX = event.pageX\n\n resize('start', element, 0)\n\n const handleMouseMove = (e: MouseEvent) => {\n e.preventDefault()\n\n const deltaX = e.pageX - startX\n\n resize('move', element, deltaX)\n }\n\n const handleMouseUp = (e: MouseEvent) => {\n e.preventDefault()\n\n setDragging(false)\n\n window.removeEventListener('mousemove', handleMouseMove)\n window.removeEventListener('mouseup', handleMouseUp)\n\n resize('end', element, 0)\n }\n\n window.addEventListener('mousemove', handleMouseMove)\n window.addEventListener('mouseup', handleMouseUp)\n },\n [element, resize],\n )\n\n return (\n <Root\n data-disabled={disabled ? '' : undefined}\n data-dragging={dragging ? '' : undefined}\n onMouseDown={handleMouseDown}\n />\n )\n}\n","import {BoundaryElementProvider, Card, CardProps, Code, Flex, useForwardedRef} from '@sanity/ui'\nimport React, {forwardRef, useMemo, useState, useCallback, useEffect} from 'react'\nimport styled from 'styled-components'\nimport {PANE_COLLAPSED_WIDTH, PANE_DEBUG, PANE_DEFAULT_MIN_WIDTH} from './constants'\nimport {PaneContext} from './PaneContext'\nimport {PaneDivider} from './PaneDivider'\nimport {usePaneLayout} from './usePaneLayout'\nimport {LegacyLayerProvider} from 'sanity'\n\ninterface PaneProps {\n children?: React.ReactNode\n currentMinWidth?: number\n currentMaxWidth?: number\n flex?: number\n id: string\n minWidth?: number\n maxWidth?: number\n selected?: boolean\n}\n\nconst Root = styled(Card)`\n outline: none;\n\n // NOTE: This will render a border to the right side of each pane\n // without taking up physical space.\n box-shadow: 1px 0 0 var(--card-border-color);\n`\n\n/**\n *\n * @hidden\n * @beta This API will change. DO NOT USE IN PRODUCTION.\n */\n// eslint-disable-next-line complexity\nexport const Pane = forwardRef(function Pane(\n props: PaneProps &\n Omit<CardProps, 'as' | 'overflow'> &\n Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'height' | 'hidden' | 'id' | 'style'>,\n ref: React.ForwardedRef<HTMLDivElement>,\n) {\n const {\n children,\n currentMinWidth: currentMinWidthProp,\n currentMaxWidth: currentMaxWidthProp,\n flex: flexProp = 1,\n id,\n minWidth: minWidthProp,\n maxWidth: maxWidthProp,\n selected = false,\n ...restProps\n } = props\n const [rootElement, setRootElement] = useState<HTMLDivElement | null>(null)\n const {\n collapse,\n collapsed: layoutCollapsed,\n expand,\n expandedElement,\n mount,\n panes,\n } = usePaneLayout()\n const pane = panes.find((p) => p.element === rootElement)\n const paneIndex = pane && panes.indexOf(pane)\n const nextPane = typeof paneIndex === 'number' ? panes[paneIndex + 1] : undefined\n const isLast = paneIndex === panes.length - 1\n const expanded = expandedElement === rootElement\n const collapsed = layoutCollapsed ? false : pane?.collapsed || false\n const nextCollapsed = nextPane?.collapsed || false\n const forwardedRef = useForwardedRef(ref)\n const flex = pane?.flex ?? flexProp\n const currentMinWidth = pane?.currentMinWidth ?? currentMinWidthProp\n const currentMaxWidth = pane?.currentMaxWidth ?? currentMaxWidthProp\n\n const setRef = useCallback(\n (refValue: HTMLDivElement | null) => {\n setRootElement(refValue)\n forwardedRef.current = refValue\n },\n [forwardedRef],\n )\n\n useEffect(() => {\n if (!rootElement) return undefined\n return mount(rootElement, {\n currentMinWidth: currentMinWidthProp,\n currentMaxWidth: currentMaxWidthProp,\n flex: flexProp,\n id,\n minWidth: minWidthProp,\n maxWidth: maxWidthProp,\n })\n }, [\n currentMinWidthProp,\n currentMaxWidthProp,\n flexProp,\n id,\n minWidthProp,\n maxWidthProp,\n mount,\n rootElement,\n ])\n\n const handleCollapse = useCallback(() => {\n if (!rootElement) return\n collapse(rootElement)\n }, [collapse, rootElement])\n\n const handleExpand = useCallback(() => {\n if (!rootElement) return\n expand(rootElement)\n }, [expand, rootElement])\n\n const contextValue = useMemo(\n () => ({\n collapse: handleCollapse,\n collapsed: layoutCollapsed ? false : collapsed,\n expand: handleExpand,\n index: paneIndex,\n isLast,\n rootElement,\n }),\n [collapsed, handleCollapse, handleExpand, isLast, layoutCollapsed, paneIndex, rootElement],\n )\n\n const minWidth = useMemo(() => {\n if (layoutCollapsed) {\n return undefined\n }\n\n if (collapsed) return PANE_COLLAPSED_WIDTH\n\n if (currentMinWidth === 0) {\n return minWidthProp || PANE_DEFAULT_MIN_WIDTH\n }\n\n if (isLast) {\n return minWidthProp || PANE_DEFAULT_MIN_WIDTH\n }\n\n return currentMinWidth || minWidthProp || PANE_DEFAULT_MIN_WIDTH\n }, [collapsed, currentMinWidth, isLast, layoutCollapsed, minWidthProp])\n\n const maxWidth = useMemo(() => {\n if (collapsed) return PANE_COLLAPSED_WIDTH\n\n if (layoutCollapsed && isLast) {\n return undefined\n }\n\n if (isLast) {\n if (maxWidthProp) {\n return currentMaxWidth ?? maxWidthProp\n }\n\n return undefined\n }\n\n return currentMaxWidth ?? maxWidthProp\n }, [collapsed, currentMaxWidth, isLast, layoutCollapsed, maxWidthProp])\n\n const hidden = layoutCollapsed && !isLast\n\n const divider = useMemo(\n () =>\n !isLast &&\n !layoutCollapsed && (\n <LegacyLayerProvider zOffset=\"paneResizer\">\n <PaneDivider disabled={collapsed || nextCollapsed} element={rootElement} />\n </LegacyLayerProvider>\n ),\n [collapsed, isLast, layoutCollapsed, nextCollapsed, rootElement],\n )\n\n const style = useMemo(\n () => ({\n flex,\n minWidth,\n maxWidth: maxWidth === Infinity ? undefined : maxWidth,\n }),\n [flex, minWidth, maxWidth],\n )\n\n return (\n <>\n <LegacyLayerProvider zOffset=\"pane\">\n <PaneContext.Provider value={contextValue}>\n <Root\n data-testid=\"pane\"\n data-ui=\"Pane\"\n tone=\"inherit\"\n hidden={hidden}\n id={id}\n overflow={layoutCollapsed ? undefined : 'hidden'}\n {...restProps}\n data-pane-collapsed={collapsed ? '' : undefined}\n data-pane-index={paneIndex}\n data-pane-selected={selected ? '' : undefined}\n ref={setRef}\n style={style}\n >\n {PANE_DEBUG && (\n <Card padding={4} tone={expanded ? 'primary' : 'caution'}>\n <Code size={1}>\n {[\n `#${paneIndex}`,\n `collapsed=${collapsed}`,\n `currentMinWidth=${currentMinWidth}`,\n `currentMaxWidth=${currentMaxWidth}`,\n `flex=${flex}`,\n `minWidth=${minWidth}`,\n `maxWidth=${maxWidth}`,\n ].join('\\n')}\n </Code>\n </Card>\n )}\n\n <BoundaryElementProvider element={rootElement}>\n {!hidden && (\n <Flex direction=\"column\" height=\"fill\">\n {children}\n </Flex>\n )}\n </BoundaryElementProvider>\n </Root>\n </PaneContext.Provider>\n </LegacyLayerProvider>\n\n {divider}\n </>\n )\n})\n","import {useContext} from 'react'\nimport {PaneContext} from './PaneContext'\nimport {PaneContextValue} from './types'\n\n/**\n *\n * @hidden\n * @beta This API will change. DO NOT USE IN PRODUCTION.\n */\nexport function usePane(): PaneContextValue {\n const pane = useContext(PaneContext)\n\n if (!pane) {\n throw new Error('Pane: missing context value')\n }\n\n return pane\n}\n","import {Card} from '@sanity/ui'\nimport styled from 'styled-components'\n\nexport const Root = styled(Card)`\n position: relative;\n outline: none;\n`\n\nRoot.displayName = 'PaneContent__root'\n","import {BoxOverflow} from '@sanity/ui'\nimport React, {forwardRef} from 'react'\nimport {usePane} from './usePane'\nimport {usePaneLayout} from './usePaneLayout'\nimport {Root} from './PaneContent.styles'\n\ninterface PaneContentProps {\n as?: React.ElementType | keyof JSX.IntrinsicElements\n overflow?: BoxOverflow\n padding?: number | number[]\n}\n\n/**\n *\n * @hidden\n * @beta This API will change. DO NOT USE IN PRODUCTION.\n */\nexport const PaneContent = forwardRef(function PaneContent(\n props: PaneContentProps & Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'height' | 'ref'>,\n ref: React.ForwardedRef<HTMLDivElement>,\n) {\n const {as, children, overflow, padding, ...restProps} = props\n const {collapsed} = usePane()\n const {collapsed: layoutCollapsed} = usePaneLayout()\n\n return (\n <Root\n data-testid=\"pane-content\"\n forwardedAs={as}\n {...restProps}\n flex={1}\n hidden={collapsed}\n overflow={layoutCollapsed ? undefined : overflow}\n padding={padding}\n ref={ref}\n tone=\"inherit\"\n >\n {children}\n </Root>\n )\n})\n","import {Card, Layer} from '@sanity/ui'\nimport styled from 'styled-components'\n\nexport const Root = styled(Layer)`\n position: sticky;\n bottom: 0;\n\n &:before {\n content: '';\n display: block;\n position: absolute;\n left: 0;\n right: 0;\n top: -1px;\n border-bottom: 1px solid var(--card-border-color);\n }\n`\n\nexport const RootCard = styled(Card)`\n padding-bottom: env(safe-area-inset-bottom);\n`\n","import {Box} from '@sanity/ui'\nimport React, {forwardRef} from 'react'\nimport {usePane} from './usePane'\nimport {Root, RootCard} from './PaneFooter.styles'\nimport {LegacyLayerProvider} from 'sanity'\n\ninterface PaneFooterProps {\n children?: React.ReactNode\n padding?: number | number[]\n}\n\n/**\n *\n * @hidden\n * @beta This API will change. DO NOT USE IN PRODUCTION.\n */\nexport const PaneFooter = forwardRef(function PaneFooter(\n props: PaneFooterProps,\n ref: React.ForwardedRef<HTMLDivElement>,\n) {\n const {children, padding} = props\n const {collapsed} = usePane()\n\n return (\n <LegacyLayerProvider zOffset=\"paneFooter\">\n <Root data-testid=\"pane-footer\" hidden={collapsed} ref={ref}>\n <RootCard tone=\"inherit\">\n <Box padding={padding}>{children}</Box>\n </RootCard>\n </Root>\n </LegacyLayerProvider>\n )\n})\n","import {Box, Flex, Layer, rgba, TextSkeleton, Text, Theme, Card} from '@sanity/ui'\nimport styled, {css} from 'styled-components'\n\ninterface RootProps {\n $border?: boolean\n}\n\nexport const Root = styled(Layer)<RootProps>(({$border}) => {\n return css`\n line-height: 0;\n position: sticky;\n top: 0;\n\n &:not([data-collapsed]):after {\n content: '';\n display: block;\n position: absolute;\n left: 0;\n right: 0;\n bottom: -1px;\n border-bottom: 1px solid ${$border ? 'var(--card-border-color)' : 'transparent'};\n opacity: 1;\n }\n `\n})\n\nexport const Layout = styled(Flex)`\n transform-origin: calc(51px / 2);\n\n [data-collapsed] > div > & {\n transform: rotate(90deg);\n }\n`\n\nexport const TitleCard = styled(Card)(({theme}: {theme: Theme}) => {\n const {fg, bg} = theme.sanity.color.card.enabled\n\n // Disable color updates on hover\n return css`\n background-color: ${bg};\n\n [data-ui='Text'] {\n color: ${fg};\n }\n `\n})\n\nexport const TitleTextSkeleton = styled(TextSkeleton)`\n width: 66%;\n max-width: 175px;\n`\n\nexport const TitleText = styled(Text)`\n cursor: default;\n outline: none;\n`\n\nexport const TabsBox = styled(Box)(({theme}: {theme: Theme}) => {\n const {color, space} = theme.sanity\n\n return css`\n overflow: hidden;\n overflow: clip;\n position: relative;\n\n & > div {\n white-space: nowrap;\n overflow: auto;\n /* Hide scrollbars */\n scrollbar-width: none;\n &::-webkit-scrollbar {\n width: 0;\n height: 0;\n }\n }\n\n /* right padding */\n & > div:after {\n content: '';\n display: inline-block;\n top: 0;\n right: 0;\n bottom: 0;\n width: ${space[3]}px;\n height: 1px;\n }\n\n /* Gradient that makes it look like tabs disappear into nothing (looks nicer) */\n &:after {\n content: '';\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n background: linear-gradient(to right, ${rgba(color.base.bg, 0)}, var(--card-bg-color));\n width: ${space[3]}px;\n pointer-events: none;\n }\n `\n})\n","import {useElementRect, Box, Card, Flex, LayerProvider} from '@sanity/ui'\nimport React, {useMemo, useCallback, forwardRef} from 'react'\nimport {usePane} from './usePane'\nimport {Layout, Root, TabsBox, TitleCard, TitleTextSkeleton, TitleText} from './PaneHeader.styles'\nimport {LegacyLayerProvider} from 'sanity'\n\n/**\n * @beta This API will change. DO NOT USE IN PRODUCTION.\n */\nexport interface PaneHeaderProps {\n actions?: React.ReactNode\n backButton?: React.ReactNode\n border?: boolean\n contentAfter?: React.ReactNode\n loading?: boolean\n subActions?: React.ReactNode\n tabIndex?: number\n tabs?: React.ReactNode\n title: React.ReactNode\n}\n\n/**\n *\n * @hidden\n * @beta This API will change. DO NOT USE IN PRODUCTION.\n */\nexport const PaneHeader = forwardRef(function PaneHeader(\n props: PaneHeaderProps,\n ref: React.ForwardedRef<HTMLDivElement>,\n) {\n const {actions, backButton, border, contentAfter, loading, subActions, tabs, tabIndex, title} =\n props\n const {collapse, collapsed, expand, rootElement: paneElement} = usePane()\n const paneRect = useElementRect(paneElement || null)\n\n const layoutStyle = useMemo(\n () => ({\n width: collapsed ? paneRect?.height || window.innerHeight : undefined,\n }),\n [collapsed, paneRect],\n )\n\n const handleTitleClick = useCallback(() => {\n if (collapsed) return\n collapse()\n }, [collapse, collapsed])\n\n const handleLayoutClick = useCallback(() => {\n if (!collapsed) return\n expand()\n }, [collapsed, expand])\n\n const showTabsOrSubActions = Boolean(!collapsed && (tabs || subActions))\n\n return (\n <LayerProvider zOffset={100}>\n <Root\n $border={border}\n data-collapsed={collapsed ? '' : undefined}\n data-testid=\"pane-header\"\n ref={ref}\n >\n <LegacyLayerProvider zOffset=\"paneHeader\">\n <Card data-collapsed={collapsed ? '' : undefined} tone=\"inherit\">\n <Layout\n gap={1}\n onClick={handleLayoutClick}\n padding={3}\n paddingBottom={collapsed ? 3 : 2}\n sizing=\"border\"\n style={layoutStyle}\n >\n {backButton && <Box flex=\"none\">{backButton}</Box>}\n\n <TitleCard\n __unstable_focusRing\n flex={1}\n forwardedAs=\"button\"\n onClick={handleTitleClick}\n paddingLeft={backButton ? 1 : 2}\n padding={2}\n tabIndex={tabIndex}\n >\n {loading && <TitleTextSkeleton animated radius={1} size={1} />}\n {!loading && (\n <TitleText size={1} textOverflow=\"ellipsis\" weight=\"semibold\">\n {title}\n </TitleText>\n )}\n </TitleCard>\n\n {actions && (\n <Flex align=\"center\" hidden={collapsed}>\n <LegacyLayerProvider zOffset=\"paneHeader\">{actions}</LegacyLayerProvider>\n </Flex>\n )}\n </Layout>\n\n {showTabsOrSubActions && (\n <Flex\n align=\"center\"\n hidden={collapsed}\n overflow=\"auto\"\n paddingBottom={3}\n paddingX={3}\n >\n <TabsBox flex={1} marginRight={subActions ? 3 : 0}>\n {tabs}\n </TabsBox>\n\n {subActions && subActions}\n </Flex>\n )}\n\n {!collapsed && contentAfter && contentAfter}\n </Card>\n </LegacyLayerProvider>\n </Root>\n </LayerProvider>\n )\n})\n","import React, {MouseEvent, useCallback, useId} from 'react'\nimport {Menu} from '@sanity/ui'\nimport {UnknownIcon} from '@sanity/icons'\nimport {Intent} from '../../structureBuilder'\nimport {Button, MenuButton} from '../../../ui-components'\nimport {_PaneMenuGroup, _PaneMenuItem} from './types'\nimport {PaneMenuButtonItem} from './PaneMenuButtonItem'\nimport {StatusButton, useI18nText} from 'sanity'\nimport {useIntentLink} from 'sanity/router'\n\nfunction getDisabledReason(node: _PaneMenuItem) {\n /**\n * This component supports receiving a `reason: string | react.ReactNode`.\n * We are casting it as string, to avoid the ts error, as content will be rendered into the tooltip which only accepts string, but it won't crash if it's a ReactNode.\n * For the aria label, we want to check if it's actually a string, to avoid generating an aria-label with the value `[object Object]`.\n */\n const disabledReason =\n typeof node.disabled === 'object' ? (node.disabled.reason as string) : undefined\n const ariaLabel =\n typeof node.disabled === 'object' && typeof node.disabled?.reason === 'string'\n ? node.disabled.reason\n : 'This is disabled'\n\n return {disabledReason, ariaLabel, isDisabled: Boolean(node.disabled)}\n}\nexport interface PaneHeaderActionButtonProps {\n node: _PaneMenuItem | _PaneMenuGroup\n}\n\nexport function PaneHeaderActionButton(props: PaneHeaderActionButtonProps) {\n const {node} = props\n\n if (node.type === 'item') {\n return <PaneHeaderMenuItemActionButton node={node} />\n }\n\n if (node.type === 'group') {\n return <PaneHeaderMenuGroupActionButton node={node} />\n }\n\n console.warn('unknown menu node (expected `type: \"item\" | \"group\"`):', node)\n\n return null\n}\n\nexport interface PaneHeaderMenuItemActionButtonProps {\n node: _PaneMenuItem\n}\n\nexport function PaneHeaderMenuItemActionButton(props: PaneHeaderMenuItemActionButtonProps) {\n const {node} = props\n const {title} = useI18nText(node)\n\n if (node.intent) {\n return <PaneHeaderActionIntentButton {...props} intent={node.intent} />\n }\n\n const {disabledReason, ariaLabel, isDisabled} = getDisabledReason(node)\n\n return (\n <StatusButton\n disabled={Boolean(node.disabled)}\n icon={node.icon}\n // eslint-disable-next-line react/jsx-handler-names\n onClick={node.onAction}\n selected={node.selected}\n tone={node.tone}\n aria-label={ariaLabel}\n tooltipProps={{\n hotkeys: !isDisabled && node.hotkey ? node.hotkey.split('+') : undefined,\n content: isDisabled ? disabledReason : title,\n }}\n />\n )\n}\n\nfunction PaneHeaderActionIntentButton(props: {intent: Intent; node: _PaneMenuItem}) {\n const {intent, node} = props\n const intentLink = useIntentLink({intent: intent.type, params: intent.params})\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n intentLink.onClick(event)\n node.onAction()\n },\n [intentLink, node],\n )\n\n const {disabledReason, ariaLabel, isDisabled} = getDisabledReason(node)\n\n return (\n <StatusButton\n as=\"a\"\n disabled={isDisabled}\n href={intentLink.href}\n icon={node.icon}\n onClick={handleClick}\n selected={node.selected}\n tone={node.tone}\n aria-label={ariaLabel}\n tooltipProps={{\n hotkeys: !isDisabled && node.hotkey ? node.hotkey.split('+') : undefined,\n content: isDisabled ? disabledReason : node.title,\n placement: 'bottom',\n portal: true,\n }}\n />\n )\n}\n\nexport interface PaneHeaderMenuGroupActionButtonProps {\n node: _PaneMenuGroup\n}\n\nfunction PaneHeaderMenuGroupActionButton(props: PaneHeaderMenuGroupActionButtonProps) {\n const {node} = props\n const {title} = useI18nText(node)\n\n return (\n <MenuButton\n button={\n <Button\n disabled={!!node.disabled}\n icon={node.icon ?? UnknownIcon}\n label={title}\n mode=\"bleed\"\n tooltipProps={{content: node.title, portal: true}}\n />\n }\n id={useId()}\n menu={\n <Menu>\n {node.children.map((child, idx) => {\n return (\n <PaneMenuButtonItem\n disabled={Boolean(node.disabled)}\n isAfterGroup={node.children[idx - 1]?.type === 'group'}\n key={child.key}\n node={child}\n />\n )\n })}\n </Menu>\n }\n />\n )\n}\n","import {Card} from '@sanity/ui'\nimport styled from 'styled-components'\n\nexport const Root = styled(Card)`\n transition: opacity 200ms;\n position: relative;\n z-index: 1;\n padding-left: env(safe-area-inset-left);\n padding-right: env(safe-area-inset-right);\n opacity: 0;\n\n &:not([hidden]) {\n display: flex;\n }\n\n &:not([data-collapsed]) {\n overflow: auto;\n }\n\n &[data-mounted] {\n opacity: 1;\n }\n\n &[data-resizing] {\n pointer-events: none;\n }\n`\n","import {PANE_DEFAULT_MIN_WIDTH} from '../constants'\nimport {PaneConfigOpts, PaneResizeCache} from '../types'\n\nexport function _calcPaneResize(\n cache: PaneResizeCache,\n left: PaneConfigOpts,\n right: PaneConfigOpts,\n deltaX: number,\n): {leftFlex: number; leftW: number; rightFlex: number; rightW: number} {\n const sum = {\n flex: cache.left.flex + cache.right.flex,\n width: cache.left.width + cache.right.width,\n }\n\n const leftMinWidth = left.minWidth ?? PANE_DEFAULT_MIN_WIDTH\n const rightMinWidth = right.minWidth ?? PANE_DEFAULT_MIN_WIDTH\n\n const leftMaxWidth = Math.min(left.maxWidth || Infinity, sum.width - rightMinWidth)\n const rightMaxWidth = Math.min(right.maxWidth || Infinity, sum.width - leftMinWidth)\n\n // Get min. delta X\n let minDeltaX = leftMinWidth - cache.left.width\n const rightMinDeltaX = cache.right.width - rightMaxWidth\n if (minDeltaX < rightMinDeltaX) {\n minDeltaX = rightMinDeltaX\n }\n\n // Get max. delta X\n let maxDeltaX = cache.right.width - rightMinWidth\n const leftMaxDeltaX = leftMaxWidth - cache.left.width\n if (maxDeltaX > leftMaxDeltaX) {\n maxDeltaX = leftMaxDeltaX\n }\n\n const _deltaX = Math.min(Math.max(deltaX, minDeltaX), maxDeltaX)\n\n const leftW = cache.left.width + _deltaX\n const rightW = cache.right.width - _deltaX\n\n const leftFlex = (leftW / sum.width) * sum.flex\n const rightFlex = (rightW / sum.width) * sum.flex\n\n return {leftFlex, leftW, rightFlex, rightW}\n}\n","/**\n * @internal\n */\nexport function _getDOMPath(rootElement: HTMLElement, el: HTMLElement): number[] {\n const path: number[] = []\n\n let e = el\n\n while (e !== rootElement) {\n const parentElement = e.parentElement\n\n if (!parentElement) return path\n\n const children = Array.from(parentElement.childNodes)\n const index = children.indexOf(e)\n\n path.unshift(index)\n\n if (parentElement === rootElement) {\n return path\n }\n\n e = parentElement\n }\n\n return path\n}\n","import {_getDOMPath} from './_getDOMPath'\n\nconst EMPTY_PATH: number[] = []\n\n/**\n * @internal\n */\nexport function _sortElements(rootElement: HTMLElement, elements: HTMLElement[]): void {\n // Create a map containing the DOM path of each pane element.\n // The DOM path is relative to the `rootElement`, and is used in the next step for sorting.\n const map = new WeakMap<HTMLElement, number[]>()\n\n for (const element of elements) {\n map.set(element, _getDOMPath(rootElement, element))\n }\n\n const _sortByElementPath = (a: HTMLElement, b: HTMLElement) => {\n const _a = map.get(a) || EMPTY_PATH\n const _b = map.get(b) || EMPTY_PATH\n\n const len = Math.max(_a.length, _b.length)\n\n // Loop until there are different indexes\n for (let i = 0; i < len; i += 1) {\n const aIndex = _a[i] || -1\n const bIndex = _b[i] || -1\n\n if (aIndex !== bIndex) {\n return aIndex - bIndex\n }\n }\n\n return 0\n }\n\n elements.sort(_sortByElementPath)\n}\n","import {PANE_COLLAPSED_WIDTH, PANE_DEFAULT_MIN_WIDTH} from './constants'\nimport {_calcPaneResize, _sortElements} from './helpers'\nimport {PaneConfigOpts, PaneData, PaneResizeCache, PaneResizeData} from './types'\n\nexport interface PaneLayoutState {\n expandedElement: HTMLElement | null\n panes: PaneData[]\n resizing: boolean\n}\n\nexport type PaneLayoutStateObserver = (state: PaneLayoutState) => void\n\nexport interface PaneLayoutController {\n collapse: (element: HTMLElement) => void\n expand: (element: HTMLElement) => void\n mount: (element: HTMLElement, options: PaneConfigOpts) => () => void\n resize: (type: 'start' | 'move' | 'end', leftElement: HTMLElement, deltaX: number) => void\n setRootElement: (nextRootElement: HTMLElement | null) => void\n setRootWidth: (nextRootWidth: number) => void\n subscribe: (observer: PaneLayoutStateObserver) => () => void\n}\n\nexport function createPaneLayoutController(): PaneLayoutController {\n const observers: PaneLayoutStateObserver[] = []\n const elements: HTMLElement[] = []\n const optionsMap = new WeakMap<HTMLElement, PaneConfigOpts & {original: PaneConfigOpts}>()\n const userCollapsedElementSet = new Set<HTMLElement>()\n const cache: Partial<PaneResizeCache> = {}\n\n // Mutable internal state\n let rootElement: HTMLElement | null = null\n let rootWidth = 0\n let expandedElement: HTMLElement | null = null\n let resizeDataMap = new Map<HTMLElement, PaneResizeData>()\n let resizing = false\n\n function collapse(element: HTMLElement) {\n userCollapsedElementSet.add(element)\n\n if (expandedElement === element) {\n expandedElement = null\n }\n\n _notifyObservers()\n }\n\n function expand(element: HTMLElement) {\n userCollapsedElementSet.delete(element)\n\n expandedElement = element\n\n _notifyObservers()\n }\n\n function mount(element: HTMLElement, options: PaneConfigOpts) {\n optionsMap.set(element, {...options, original: options})\n\n elements.push(element)\n\n if (rootElement) {\n _sortElements(rootElement, elements)\n }\n\n expand(element)\n\n return () => {\n const idx = elements.indexOf(element)\n\n if (idx > -1) {\n elements.splice(idx, 1)\n }\n\n optionsMap.delete(element)\n\n _notifyObservers()\n }\n }\n\n // eslint-disable-next-line complexity\n function resize(type: 'start' | 'move' | 'end', leftElement: HTMLElement, deltaX: number) {\n const leftIndex = elements.indexOf(leftElement)\n const leftOptions = optionsMap.get(leftElement)\n\n if (!leftOptions) return\n\n const rightElement = elements[leftIndex + 1]\n const rightOptions = optionsMap.get(rightElement)\n\n if (!rightOptions) return\n\n if (type === 'start') {\n resizing = true\n\n cache.left = {\n element: leftElement,\n flex: leftOptions.flex || 1,\n width: leftElement.offsetWidth,\n }\n\n cache.right = {\n element: rightElement,\n flex: rightOptions.flex || 1,\n width: rightElement.offsetWidth,\n }\n\n _notifyObservers()\n }\n\n if (type === 'move' && cache.left && cache.right) {\n resizeDataMap = new Map<HTMLElement, PaneResizeData>()\n\n const {leftW, rightW, leftFlex, rightFlex} = _calcPaneResize(\n cache as PaneResizeCache,\n leftOptions,\n rightOptions,\n deltaX,\n )\n\n // update resize cache\n resizeDataMap.set(leftElement, {flex: leftFlex, width: leftW})\n resizeDataMap.set(rightElement, {flex: rightFlex, width: rightW})\n\n _notifyObservers()\n }\n\n if (type === 'end') {\n resizing = false\n\n const leftResizeData = resizeDataMap.get(leftElement)\n const rightResizeData = resizeDataMap.get(rightElement)\n\n // Update left options\n optionsMap.set(leftElement, {\n ...leftOptions,\n currentMinWidth: 0,\n currentMaxWidth: leftOptions.maxWidth ?? Infinity,\n flex: leftResizeData?.flex ?? leftOptions.flex,\n })\n\n // Update right options\n optionsMap.set(rightElement, {\n ...rightOptions,\n currentMinWidth: 0,\n currentMaxWidth: leftOptions.maxWidth ?? Infinity,\n flex: rightResizeData?.flex ?? rightOptions.flex,\n })\n\n // Reset resize data map\n resizeDataMap = new Map()\n\n // Reset cache\n delete cache.left\n delete cache.right\n\n _notifyObservers()\n }\n }\n\n function setRootElement(nextRootElement: HTMLElement | null) {\n rootElement = nextRootElement\n }\n\n function setRootWidth(nextRootWidth: number) {\n rootWidth = nextRootWidth\n _notifyObservers()\n }\n\n function subscribe(observer: PaneLayoutStateObserver) {\n observers.push(observer)\n\n return () => {\n const idx = observers.push(observer)\n\n if (idx > -1) {\n observers.splice(idx, 1)\n }\n }\n }\n\n return {collapse, expand, mount, resize, setRootElement, setRootWidth, subscribe}\n\n // eslint-disable-next-line complexity\n function _notifyObservers() {\n if (!rootWidth) return\n\n // Create a reversed array of pane elements, so we can loop over them backwards.\n // Place the expanded element first (so it has the least chance of being collapsed).\n const _elements: HTMLElement[] = []\n for (const element of elements) {\n if (element !== expandedElement) {\n _elements.unshift(element)\n }\n }\n if (expandedElement) {\n _elements.unshift(expandedElement)\n }\n\n const dataMap = new WeakMap<HTMLElement, PaneData>()\n const len = _elements.length\n const lastElement = _elements[0]\n const collapsedWidth = (len - 1) * PANE_COLLAPSED_WIDTH\n\n let remaingWidth = rootWidth - collapsedWidth\n\n for (const element of _elements) {\n const options = optionsMap.get(element)\n\n if (!options) {\n continue\n }\n\n const minWidth = options.currentMinWidth || options.minWidth || PANE_DEFAULT_MIN_WIDTH\n const isLast = element === lastElement\n\n // A pane is collapsed if:\n // - it’s explictly collapsed by the user\n const userCollapsed = userCollapsedElementSet.has(element)\n // - it’s minimum width is larger than the remaining width\n const sizeCollapsed = minWidth > remaingWidth\n // - if the element is not the last (expanded pane)\n const collapsed = isLast ? false : userCollapsed || sizeCollapsed\n\n const resizeData = resizeDataMap.get(element)\n\n // Collect pane data\n dataMap.set(element, {\n element: element,\n collapsed: collapsed,\n currentMinWidth: resizeData?.width ?? options.currentMinWidth,\n currentMaxWidth: resizeData?.width ?? options.currentMaxWidth,\n flex: resizeData?.flex ?? options.flex ?? 1,\n })\n\n // Update remaining width\n if (collapsed) {\n remaingWidth -= PANE_COLLAPSED_WIDTH\n } else {\n remaingWidth -= minWidth - PANE_COLLAPSED_WIDTH\n }\n }\n\n const panes: PaneData[] = []\n\n for (const element of elements) {\n const data = dataMap.get(element)\n\n if (data) panes.push(data)\n }\n\n for (const observer of observers) {\n observer({\n expandedElement: expandedElement || elements[elements.length - 1] || null,\n panes,\n resizing,\n })\n }\n }\n}\n","import {CardProps, useElementRect} from '@sanity/ui'\nimport React, {useMemo, useState, useEffect} from 'react'\nimport {PaneLayoutContext} from './PaneLayoutContext'\nimport {PaneLayoutContextValue} from './types'\nimport {Root} from './PaneLayout.styles'\nimport {createPaneLayoutController, PaneLayoutState} from './paneLayoutController'\n\n/**\n *\n * @hidden\n * @beta This API will change. DO NOT USE IN PRODUCTION.\n */\nexport interface PaneLayoutProps {\n minWidth?: number\n onCollapse?: () => void\n onExpand?: () => void\n}\n\n/**\n *\n * @hidden\n * @beta This API will change. DO NOT USE IN PRODUCTION.\n */\nexport function PaneLayout(\n props: PaneLayoutProps &\n CardProps &\n Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'height' | 'ref' | 'wrap'>,\n) {\n const {children, minWidth, onCollapse, onExpand, ...restProps} = props\n const controller = useMemo(() => createPaneLayoutController(), [])\n const [rootElement, setRootElement] = useState<HTMLDivElement | null>(null)\n const rootRect = useElementRect(rootElement)\n const width = rootRect?.width || 0\n const collapsed = width === undefined || !minWidth ? undefined : width < minWidth\n const [state, setState] = useState<PaneLayoutState>({\n expandedElement: null,\n panes: [],\n resizing: false,\n })\n\n // Set root element\n useEffect(() => controller.setRootElement(rootElement), [controller, rootElement])\n\n // Set root size\n useEffect(() => controller.setRootWidth(width), [controller, width])\n\n // Subscribe to state changes\n useEffect(() => controller.subscribe(setState), [controller])\n\n // Call the `onCollapse` and `onExpand` callbacks as the `collapsed` boolean changes\n useEffect(() => {\n if (collapsed === undefined) return\n if (collapsed && onCollapse) onCollapse()\n if (!collapsed && onExpand) onExpand()\n }, [collapsed, onCollapse, onExpand])\n\n // This is the context value that gives each pane the information they need\n const paneLayout: PaneLayoutContextValue = useMemo(\n () => ({\n collapse: controller.collapse,\n collapsed,\n expand: controller.expand,\n expandedElement: state.expandedElement,\n mount: controller.mount,\n panes: state.panes,\n resize: controller.resize,\n resizing: state.resizing,\n }),\n [collapsed, controller, state.expandedElement, state.panes, state.resizing],\n )\n\n return (\n <PaneLayoutContext.Provider value={paneLayout}>\n <Root\n data-ui=\"PaneLayout\"\n {...restProps}\n data-collapsed={collapsed ? '' : undefined}\n // The `data-resizing` attribute is used to improve cursor behavior\n data-resizing={state.resizing ? '' : undefined}\n // The `data-mounted` attribute is used to fade in the layout and prevent flash of\n // non-collapsed panes\n data-mounted={width ? '' : undefined}\n ref={setRootElement}\n >\n {children}\n </Root>\n </PaneLayoutContext.Provider>\n )\n}\n","/* eslint-disable camelcase */\n\nimport {negate} from 'lodash'\nimport {_PaneMenuGroup, _PaneMenuItem, _PaneMenuNode} from './components/pane/types'\nimport {PaneMenuItem, PaneMenuItemGroup, DocumentFieldMenuActionNode} from './types'\n\nexport function isMenuNodeButton(node: _PaneMenuNode): node is _PaneMenuItem | _PaneMenuGroup {\n return (node.type === 'item' || node.type === 'group') && node.renderAsButton\n}\n\nexport const isNotMenuNodeButton = negate(isMenuNodeButton)\n\nexport function resolveMenuNodes(params: {\n actionHandler: (item: PaneMenuItem) => void\n fieldActions?: DocumentFieldMenuActionNode[]\n menuItems: PaneMenuItem[]\n menuItemGroups: PaneMenuItemGroup[]\n}): _PaneMenuNode[] {\n const {fieldActions = [], menuItems, menuItemGroups} = params\n\n const nodes: _PaneMenuNode[] = []\n\n let keyOffset = 0\n\n for (let i = 0; i < fieldActions.length; i += 1) {\n const a = fieldActions[i]\n\n nodes.push(mapFieldActionToPaneMenuNode(a, `${i}-${a.type}`))\n }\n\n keyOffset += nodes.length\n\n const groups: _PaneMenuGroup[] = []\n\n for (const itemGroup of menuItemGroups) {\n const group = groups.find((g) => g.key === itemGroup.id)\n\n if (!group) {\n groups.push({\n type: 'group',\n key: itemGroup.id,\n\n children: [],\n expanded: true,\n renderAsButton: false,\n title: itemGroup.title,\n i18n: itemGroup.i18n,\n })\n }\n }\n\n const ungroupedItems: _PaneMenuItem[] = []\n\n for (let i = 0; i < menuItems.length; i += 1) {\n const item = menuItems[i]\n\n let group = item.group && groups.find((g) => g.key === item.group)\n\n if (item.group && !group) {\n group = {\n type: 'group',\n key: item.group,\n\n expanded: true,\n icon: item.icon,\n title: item.group,\n children: [],\n renderAsButton: false,\n }\n groups.push(group)\n }\n\n if (group) {\n group.children.push({\n type: 'item',\n key: `${keyOffset + i}-item`,\n\n hotkey: item.shortcut,\n icon: item.icon,\n onAction: () => params.actionHandler(item),\n renderAsButton: item.showAsAction ?? false,\n selected: item.selected,\n title: item.title,\n i18n: item.i18n,\n tone: item.tone,\n })\n } else {\n ungroupedItems.push({\n type: 'item',\n key: `${keyOffset + i}-item`,\n\n hotkey: item.shortcut,\n icon: item.icon,\n onAction: () => params.actionHandler(item),\n renderAsButton: item.showAsAction ?? false,\n selected: item.selected,\n title: item.title,\n i18n: item.i18n,\n tone: item.tone,\n })\n }\n }\n\n return [...ungroupedItems, ...groups, ...nodes]\n}\n\nfunction mapFieldActionToPaneMenuNode(a: DocumentFieldMenuActionNode, key: string): _PaneMenuNode {\n if (a.type === 'divider') {\n return {\n type: 'divider',\n key,\n }\n }\n\n if (a.type === 'group') {\n return {\n type: 'group',\n key,\n\n children: a.children.map((child, childIdx) =>\n mapFieldActionToPaneMenuNode(child, `${key}-${childIdx}-${child.type}`),\n ),\n disabled: a.disabled,\n expanded: a.expanded ?? true,\n icon: a.icon,\n title: a.title,\n i18n: a.i18n,\n renderAsButton: a.renderAsButton ?? false,\n }\n }\n\n return {\n type: 'item',\n key,\n intent: a.intent,\n disabled: a.disabled,\n icon: a.icon,\n iconRight: a.iconRight,\n onAction: a.onAction,\n renderAsButton: a.renderAsButton ?? false,\n selected: a.selected,\n title: a.title,\n i18n: a.i18n,\n tone: a.tone,\n }\n}\n","import React, {forwardRef, useMemo} from 'react'\nimport {PaneMenuItem} from '../types'\nimport {Button, ButtonProps} from '../../ui-components'\nimport {IntentLink} from 'sanity/router'\n\ntype RouterIntent = NonNullable<PaneMenuItem['intent']>\n\nexport const IntentButton = forwardRef(function IntentButton(\n props: {\n intent: RouterIntent\n } & ButtonProps &\n Omit<React.ComponentProps<typeof Button>, 'as' | 'href' | 'type'>,\n ref: React.ForwardedRef<HTMLAnchorElement>,\n) {\n const {intent, ...restProps} = props\n\n const Link = useMemo(\n () =>\n // eslint-disable-next-line @typescript-eslint/no-shadow\n forwardRef(function Link(\n linkProps: {children: React.ReactNode},\n linkRef: React.ForwardedRef<HTMLAnchorElement>,\n ) {\n return (\n <IntentLink {...linkProps} intent={intent.type} params={intent.params} ref={linkRef} />\n )\n }),\n [intent],\n )\n\n return props.disabled ? (\n <Button {...restProps} as=\"a\" role=\"link\" aria-disabled=\"true\" />\n ) : (\n <Button\n {...restProps}\n as={Link}\n data-as=\"a\"\n ref={ref as React.ForwardedRef<HTMLButtonElement>}\n />\n )\n})\n","import React from 'react'\nimport {Tooltip} from '../../../ui-components'\nimport {structureLocaleNamespace} from '../../i18n'\nimport {useCurrentUser, InsufficientPermissionsMessage, useTranslation} from 'sanity'\n\ninterface InsufficientPermissionsMessageTooltipProps {\n reveal: boolean\n /**\n * delegates to `InsufficientPermissionsMessage`'s `context` prop\n * @see InsufficientPermissionsMessage\n */\n context: React.ComponentProps<typeof InsufficientPermissionsMessage>['context']\n loading: boolean\n children: React.ReactNode\n}\n\nexport function InsufficientPermissionsMessageTooltip({\n reveal,\n context,\n loading,\n children,\n}: InsufficientPermissionsMessageTooltipProps) {\n const currentUser = useCurrentUser()\n const {t} = useTranslation(structureLocaleNamespace)\n\n if (!reveal) {\n return <>{children}</>\n }\n\n return (\n <Tooltip\n content={\n loading ? (\n t('insufficient-permissions-message-tooltip.loading-text')\n ) : (\n <InsufficientPermissionsMessage context={context} currentUser={currentUser} />\n )\n }\n portal\n >\n {/* this wrapping div is to allow mouse events */}\n {/* while the child element is disabled */}\n <div>{children}</div>\n </Tooltip>\n )\n}\n","import {AddIcon} from '@sanity/icons'\nimport React, {useMemo, forwardRef} from 'react'\nimport {Menu} from '@sanity/ui'\nimport {Schema} from '@sanity/types'\nimport {Button, MenuButton, PopoverProps, MenuItem} from '../../../ui-components'\nimport {IntentButton} from '../IntentButton'\nimport {structureLocaleNamespace} from '../../i18n'\nimport {InsufficientPermissionsMessageTooltip} from './InsufficientPermissionsMessageTooltip'\nimport {IntentLink} from 'sanity/router'\nimport {\n useTemplatePermissions,\n TemplatePermissionsResult,\n Template,\n InitialValueTemplateItem,\n useSchema,\n useTemplates,\n useTranslation,\n useGetI18nText,\n} from 'sanity'\n\nexport type PaneHeaderIntentProps = React.ComponentProps<typeof IntentButton>['intent']\n\nconst POPOVER_PROPS: PopoverProps = {\n constrainSize: true,\n placement: 'bottom',\n portal: true,\n}\n\nconst getIntent = (\n schema: Schema,\n templates: Template[],\n item: InitialValueTemplateItem,\n): PaneHeaderIntentProps | null => {\n const typeName = templates.find((t) => t.id === item.templateId)?.schemaType\n if (!typeName) return null\n\n const baseParams = {\n template: item.templateId,\n type: typeName,\n id: item.initialDocumentId,\n }\n\n return {\n type: 'create',\n params: item.parameters ? [baseParams, item.parameters] : baseParams,\n }\n}\n\ninterface PaneHeaderCreateButtonProps {\n templateItems: InitialValueTemplateItem[]\n}\n\nexport function PaneHeaderCreateButton({templateItems}: PaneHeaderCreateButtonProps) {\n const schema = useSchema()\n const templates = useTemplates()\n\n const {t} = useTranslation(structureLocaleNamespace)\n const getI18nText = useGetI18nText([...templateItems, ...templates])\n\n const [templatePermissions, isTemplatePermissionsLoading] = useTemplatePermissions({\n templateItems,\n })\n\n const nothingGranted = useMemo(() => {\n return (\n !isTemplatePermissionsLoading &&\n templatePermissions?.every((permission) => !permission.granted)\n )\n }, [isTemplatePermissionsLoading, templatePermissions])\n\n const permissionsById = useMemo(() => {\n if (!templatePermissions) return {}\n return templatePermissions.reduce<Record<string, TemplatePermissionsResult | undefined>>(\n (acc, permission) => {\n acc[permission.id] = permission\n return acc\n },\n {},\n )\n }, [templatePermissions])\n\n if (nothingGranted) {\n return (\n <InsufficientPermissionsMessageTooltip\n context=\"create-document-type\"\n reveal\n loading={isTemplatePermissionsLoading}\n >\n <Button\n aria-label={t('pane-header.disabled-created-button.aria-label')}\n icon={AddIcon}\n data-testid=\"action-intent-button\"\n disabled\n mode=\"bleed\"\n // This button handles the tooltip in a special way, won't reuse the forced tooltip.\n tooltipProps={null}\n />\n </InsufficientPermissionsMessageTooltip>\n )\n }\n\n if (templateItems.length === 1) {\n const firstItem = templateItems[0]\n const permissions = permissionsById[firstItem.id]\n const disabled = !permissions?.granted\n const intent = getIntent(schema, templates, firstItem)\n if (!intent) return null\n\n return (\n <InsufficientPermissionsMessageTooltip\n reveal={disabled}\n loading={isTemplatePermissionsLoading}\n context=\"create-document-type\"\n >\n <IntentButton\n aria-label={getI18nText(firstItem).title}\n icon={firstItem.icon || AddIcon}\n intent={intent}\n mode=\"bleed\"\n disabled={disabled}\n data-testid=\"action-intent-button\"\n tooltipProps={disabled ? null : {content: t('pane-header.create-new-button.tooltip')}}\n />\n </InsufficientPermissionsMessageTooltip>\n )\n }\n\n return (\n <MenuButton\n button={\n <Button\n icon={AddIcon}\n mode=\"bleed\"\n data-testid=\"multi-action-intent-button\"\n tooltipProps={{content: t('pane-header.create-new-button.tooltip')}}\n />\n }\n id=\"create-menu\"\n menu={\n <Menu>\n {templateItems.map((item, itemIndex) => {\n const permissions = permissionsById[item.id]\n const disabled = !permissions?.granted\n const intent = getIntent(schema, templates, item)\n const template = templates.find((i) => i.id === item.templateId)\n if (!template || !intent) return null\n\n const Link = forwardRef((linkProps, linkRef: React.ForwardedRef<never>) =>\n disabled ? (\n <button type=\"button\" disabled {...linkProps} ref={linkRef} />\n ) : (\n <IntentLink\n {...linkProps}\n intent={intent.type}\n params={intent.params}\n ref={linkRef}\n />\n ),\n )\n\n Link.displayName = 'Link'\n\n const {title} = getI18nText({\n ...item,\n // replace the title with the template title\n title: item.title || getI18nText(template).title,\n })\n\n return (\n <InsufficientPermissionsMessageTooltip\n context=\"create-document-type\"\n key={item.id}\n reveal={disabled}\n loading={isTemplatePermissionsLoading}\n >\n <MenuItem\n as={Link}\n data-as={disabled ? 'button' : 'a'}\n text={title}\n aria-label={\n disabled ? t('pane-header.disabled-created-button.aria-label') : title\n }\n disabled={disabled}\n data-testid={`action-intent-button-${itemIndex}`}\n />\n </InsufficientPermissionsMessageTooltip>\n )\n })}\n </Menu>\n }\n popover={POPOVER_PROPS}\n />\n )\n}\n","import {Flex} from '@sanity/ui'\nimport {uniqBy} from 'lodash'\nimport React, {memo, useCallback, useMemo} from 'react'\nimport {isMenuNodeButton, isNotMenuNodeButton, resolveMenuNodes} from '../../menuNodes'\nimport type {StructureToolPaneActionHandler, PaneMenuItem, PaneMenuItemGroup} from '../../types'\nimport {PaneContextMenuButton} from '../pane/PaneContextMenuButton'\nimport {PaneHeaderActionButton} from '../pane/PaneHeaderActionButton'\nimport {PaneHeaderCreateButton} from './PaneHeaderCreateButton'\nimport {useTemplates, type InitialValueTemplateItem, EMPTY_ARRAY, EMPTY_OBJECT} from 'sanity'\n\nfunction isNonNullable<T>(value: T): value is NonNullable<T> {\n return value !== null && value !== undefined\n}\n\n/**\n * hashes an object to a string where the order of the keys don't matter\n */\nconst hashObject = (value: unknown) => {\n const sortObject = (v: unknown): unknown => {\n if (typeof v !== 'object' || !v) return v\n if (Array.isArray(v)) return v.map(sortObject)\n return Object.entries(v).sort(([keyA], [keyB]) => keyA.localeCompare(keyB, 'en'))\n }\n\n const normalize = (v: unknown) => JSON.parse(JSON.stringify(v))\n\n return JSON.stringify(sortObject(normalize(value)))\n}\n\ninterface PaneHeaderActionsProps {\n initialValueTemplateItems?: InitialValueTemplateItem[]\n menuItems?: PaneMenuItem[]\n menuItemGroups?: PaneMenuItemGroup[]\n actionHandlers?: Record<string, StructureToolPaneActionHandler>\n}\n\nexport const PaneHeaderActions = memo(function PaneHeaderActions(props: PaneHeaderActionsProps) {\n const {\n initialValueTemplateItems: initialValueTemplateItemsFromStructure = EMPTY_ARRAY,\n menuItems = EMPTY_ARRAY,\n menuItemGroups = EMPTY_ARRAY,\n actionHandlers = EMPTY_OBJECT as Record<string, StructureToolPaneActionHandler>,\n } = props\n\n const templates = useTemplates()\n\n const handleAction = useCallback(\n (item: PaneMenuItem) => {\n if (typeof item.action === 'string' && !(item.action in actionHandlers)) {\n console.warn('No handler for action:', item.action)\n return false\n }\n\n const handler =\n // eslint-disable-next-line no-nested-ternary\n typeof item.action === 'function'\n ? item.action\n : typeof item.action === 'string'\n ? actionHandlers[item.action]\n : null\n\n if (handler) {\n handler(item.params as Record<string, string>)\n return true\n }\n\n return false\n },\n [actionHandlers],\n )\n\n const menuNodes = useMemo(\n () =>\n resolveMenuNodes({\n actionHandler: handleAction,\n menuItemGroups,\n menuItems: menuItems\n // remove items with `create` intents because those will get combined\n // into one action button (see `initialValueTemplateItemFromMenuItems`)\n .filter((item) => item.intent?.type !== 'create'),\n }),\n [handleAction, menuItemGroups, menuItems],\n )\n\n const actionNodes = useMemo(() => menuNodes.filter(isMenuNodeButton), [menuNodes])\n const contextMenuNodes = useMemo(() => menuNodes.filter(isNotMenuNodeButton), [menuNodes])\n\n const initialValueTemplateItemFromMenuItems = useMemo(() => {\n return menuItems\n .map((item, menuItemIndex) => {\n if (item.intent?.type !== 'create') return null\n\n const {params} = item.intent\n if (!params) return null\n\n const intentParams = Array.isArray(params) ? params[0] : params\n const templateParams = Array.isArray(params) ? params[1] : undefined\n\n // fallback to the schema type name as the template ID.\n // by default, the initial template values are populated from every\n // document type in the schema\n const templateId = intentParams.template || intentParams.type\n if (!templateId) return null\n\n // eslint-disable-next-line max-nested-callbacks\n const template = templates.find((t) => t.id === templateId)\n // the template doesn't exist then the action might be disabled\n if (!template) return null\n\n const initialDocumentId = intentParams.id\n\n return {\n item,\n template,\n templateParams,\n menuItemIndex,\n initialDocumentId,\n }\n })\n .filter(isNonNullable)\n .map(({initialDocumentId, item, template, menuItemIndex, templateParams}) => {\n const initialValueTemplateItem: InitialValueTemplateItem = {\n id: `menuItem${menuItemIndex}`,\n initialDocumentId,\n templateId: template.id,\n type: 'initialValueTemplateItem',\n title: item.title || template.title,\n i18n: item.i18n || template.i18n,\n icon: item.icon as InitialValueTemplateItem['icon'],\n description: template.description,\n parameters: templateParams,\n schemaType: template.schemaType,\n }\n\n return initialValueTemplateItem\n })\n }, [menuItems, templates])\n\n const combinedInitialValueTemplates = useMemo(() => {\n // this de-dupes create actions\n return uniqBy(\n [...initialValueTemplateItemFromMenuItems, ...initialValueTemplateItemsFromStructure],\n (item) => hashObject([item.initialDocumentId, item.templateId, item.parameters]),\n )\n }, [initialValueTemplateItemFromMenuItems, initialValueTemplateItemsFromStructure])\n\n return (\n <Flex gap={1}>\n {combinedInitialValueTemplates.length > 0 && (\n <PaneHeaderCreateButton templateItems={combinedInitialValueTemplates} />\n )}\n\n {actionNodes.map((node) => (\n <PaneHeaderActionButton key={node.key} node={node} />\n ))}\n\n {contextMenuNodes.length > 0 && <PaneContextMenuButton nodes={contextMenuNodes} />}\n </Flex>\n )\n})\n","import {WarningOutlineIcon} from '@sanity/icons'\nimport {SanityDocument} from '@sanity/types'\nimport React from 'react'\nimport {structureLocaleNamespace} from '../i18n'\nimport {GeneralPreviewLayoutKey, SanityDefaultPreview, Translate, useTranslation} from 'sanity'\n\nexport interface MissingSchemaTypeProps {\n layout?: GeneralPreviewLayoutKey\n value: SanityDocument\n}\n\nexport function MissingSchemaType(props: MissingSchemaTypeProps) {\n const {t} = useTranslation(structureLocaleNamespace)\n const {layout, value} = props\n\n return (\n <SanityDefaultPreview\n title={\n <em>\n <Translate\n t={t}\n i18nKey=\"pane-item.missing-schema-type.title\"\n components={{Code: 'code'}}\n values={{documentType: value._type}}\n />\n </em>\n }\n subtitle={\n <Translate\n t={t}\n i18nKey=\"pane-item.missing-schema-type.subtitle\"\n components={{Code: 'code'}}\n values={{documentId: value._id}}\n />\n }\n // eslint-disable-next-line react/jsx-no-bind\n media={() => <WarningOutlineIcon />}\n layout={layout}\n />\n )\n}\n","import {FolderIcon, ChevronRightIcon, DocumentIcon} from '@sanity/icons'\nimport {isSanityDocument, PreviewValue, SanityDocument, SchemaType} from '@sanity/types'\nimport {Box, CardProps, Text} from '@sanity/ui'\nimport React, {ReactNode, useCallback, useEffect, useMemo, useState} from 'react'\nimport {MissingSchemaType} from '../MissingSchemaType'\nimport {usePaneRouter} from '../paneRouter'\nimport {PaneItemPreview} from './PaneItemPreview'\nimport {\n FIXME,\n GeneralPreviewLayoutKey,\n PreviewCard,\n SanityDefaultPreview,\n useDocumentPresence,\n useDocumentPreviewStore,\n useSchema,\n} from 'sanity'\n\ninterface PaneItemProps {\n id: string\n layout?: GeneralPreviewLayoutKey\n icon?: React.ComponentType<any> | false\n pressed?: boolean\n selected?: boolean\n title?: string\n value?: PreviewValue | SanityDocument\n schemaType?: SchemaType\n margin?: CardProps['margin']\n marginBottom?: CardProps['marginBottom']\n marginTop?: CardProps['marginTop']\n}\n\n/**\n * Return `false` if we explicitly disable the icon.\n * Otherwise return the passed icon or the schema type icon as a backup.\n */\nexport function getIconWithFallback(\n icon: React.ComponentType<any> | false | undefined,\n schemaType: SchemaType | undefined,\n defaultIcon: React.ComponentType<any>,\n): React.ComponentType<any> | false {\n if (icon === false) {\n return false\n }\n\n return icon || (schemaType && schemaType.icon) || defaultIcon || false\n}\n\nexport function PaneItem(props: PaneItemProps) {\n const {\n icon,\n id,\n layout = 'default',\n pressed,\n schemaType,\n selected,\n title,\n value,\n margin,\n marginBottom,\n marginTop,\n } = props\n const schema = useSchema()\n const documentPreviewStore = useDocumentPreviewStore()\n const {ChildLink} = usePaneRouter()\n const documentPresence = useDocumentPresence(id)\n const hasSchemaType = Boolean(schemaType && schemaType.name && schema.get(schemaType.name))\n const [clicked, setClicked] = useState<boolean>(false)\n\n const preview = useMemo(() => {\n if (value && isSanityDocument(value)) {\n if (!schemaType || !hasSchemaType) {\n return <MissingSchemaType value={value} />\n }\n\n return (\n <PaneItemPreview\n documentPreviewStore={documentPreviewStore}\n icon={getIconWithFallback(icon, schemaType, DocumentIcon)}\n layout={layout}\n schemaType={schemaType}\n value={value}\n presence={documentPresence}\n />\n )\n }\n\n // Always render non-document values as compact previews\n return (\n <SanityDefaultPreview\n status={\n <Box style={{opacity: 0.5}}>\n <Text muted size={1}>\n <ChevronRightIcon />\n </Text>\n </Box>\n }\n icon={getIconWithFallback(icon, schemaType, FolderIcon)}\n layout=\"compact\"\n title={title}\n />\n )\n }, [\n documentPreviewStore,\n hasSchemaType,\n icon,\n layout,\n schemaType,\n title,\n value,\n documentPresence,\n ])\n\n const Link = useMemo(\n () =>\n function LinkComponent(linkProps: {children: ReactNode}) {\n return <ChildLink {...linkProps} childId={id} />\n },\n [ChildLink, id],\n )\n\n const handleClick = useCallback((e: React.MouseEvent<HTMLElement>) => {\n if (e.metaKey) {\n setClicked(false)\n return\n }\n\n setClicked(true)\n }, [])\n\n // Reset `clicked` state when `selected` prop changes\n useEffect(() => setClicked(false), [selected])\n\n return (\n <PreviewCard\n __unstable_focusRing\n as={Link as FIXME}\n data-as=\"a\"\n margin={margin}\n marginBottom={marginBottom}\n marginTop={marginTop}\n onClick={handleClick}\n pressed={pressed}\n radius={2}\n selected={selected || clicked}\n sizing=\"border\"\n tabIndex={-1}\n tone=\"inherit\"\n >\n {preview}\n </PreviewCard>\n )\n}\n","import {\n ValidationMarker,\n Path,\n SanityDocument,\n ObjectSchemaType,\n SanityDocumentLike,\n} from '@sanity/types'\nimport {createContext} from 'react'\nimport {View} from '../../structureBuilder'\nimport {PaneMenuItem, PaneMenuItemGroup} from '../../types'\nimport {TimelineMode} from './types'\nimport {\n DocumentActionComponent,\n DocumentBadgeComponent,\n DocumentFieldAction,\n DocumentFormNode,\n DocumentInspector,\n DocumentLanguageFilterComponent,\n EditStateFor,\n PatchEvent,\n PermissionCheckResult,\n StateTree,\n TimelineStore,\n} from 'sanity'\n\n/** @internal */\nexport interface DocumentPaneContextValue {\n actions: DocumentActionComponent[] | null\n activeViewId: string | null\n badges: DocumentBadgeComponent[] | null\n changesOpen: boolean\n closeInspector: (inspectorName?: string) => void\n collapsedFieldSets: StateTree<boolean> | undefined\n collapsedPaths: StateTree<boolean> | undefined\n compareValue: Partial<SanityDocument> | null\n connectionState: 'connecting' | 'reconnecting' | 'connected'\n displayed: Partial<SanityDocument> | null\n documentId: string\n documentIdRaw: string\n documentType: string\n editState: EditStateFor | null\n fieldActions: DocumentFieldAction[]\n focusPath: Path\n index: number\n inspectOpen: boolean\n inspector: DocumentInspector | null\n inspectors: DocumentInspector[]\n menuItemGroups: PaneMenuItemGroup[]\n onBlur: (blurredPath: Path) => void\n onChange: (event: PatchEvent) => void\n onFocus: (pathOrEvent: Path) => void\n onHistoryClose: () => void\n onHistoryOpen: () => void\n onInspectClose: () => void\n onMenuAction: (item: PaneMenuItem) => void\n onPaneClose: () => void\n onPaneSplit?: () => void\n onPathOpen: (path: Path) => void\n onSetActiveFieldGroup: (path: Path, groupName: string) => void\n onSetCollapsedPath: (path: Path, expanded: boolean) => void\n onSetCollapsedFieldSet: (path: Path, expanded: boolean) => void\n openInspector: (inspectorName: string, paneParams?: Record<string, string>) => void\n paneKey: string\n previewUrl?: string | null\n ready: boolean\n schemaType: ObjectSchemaType\n setTimelineMode: (mode: TimelineMode) => void\n setTimelineRange(since: string | null, rev: string | null): void\n setIsDeleting: (state: boolean) => void\n timelineError: Error | null\n timelineMode: TimelineMode\n timelineStore: TimelineStore\n title: string | null\n validation: ValidationMarker[]\n value: SanityDocumentLike\n views: View[]\n formState: DocumentFormNode | null\n permissions?: PermissionCheckResult | null\n isDeleting: boolean\n isDeleted: boolean\n isPermissionsLoading: boolean\n unstable_languageFilter: DocumentLanguageFilterComponent[]\n}\n\n/** @internal */\nexport const DocumentPaneContext = createContext<DocumentPaneContextValue | null>(null)\n","import {useContext} from 'react'\nimport {DocumentPaneContext, DocumentPaneContextValue} from './DocumentPaneContext'\n\n/** @internal */\nexport function useDocumentPane(): DocumentPaneContextValue {\n const documentPane = useContext(DocumentPaneContext)\n\n if (!documentPane) {\n throw new Error('DocumentPane: missing context value')\n }\n\n return documentPane\n}\n","/* eslint-disable import/no-extraneous-dependencies */\n\nimport {TrashIcon} from '@sanity/icons'\nimport React, {useCallback, useState} from 'react'\nimport {ConfirmDeleteDialog} from '../components'\nimport {useDocumentPane} from '../panes/document/useDocumentPane'\nimport {structureLocaleNamespace} from '../i18n'\nimport {\n DocumentActionComponent,\n InsufficientPermissionsMessage,\n useCurrentUser,\n useDocumentOperation,\n useDocumentPairPermissions,\n useTranslation,\n} from 'sanity'\n\nconst DISABLED_REASON_TITLE_KEY = {\n NOTHING_TO_DELETE: 'action.delete.disabled.nothing-to-delete',\n NOT_READY: 'action.delete.disabled.not-ready',\n}\n\n/** @internal */\nexport const DeleteAction: DocumentActionComponent = ({id, type, draft, onComplete}) => {\n const {setIsDeleting: paneSetIsDeleting} = useDocumentPane()\n const {delete: deleteOp} = useDocumentOperation(id, type)\n const [isDeleting, setIsDeleting] = useState(false)\n const [isConfirmDialogOpen, setConfirmDialogOpen] = useState(false)\n\n const {t} = useTranslation(structureLocaleNamespace)\n\n const handleCancel = useCallback(() => {\n setConfirmDialogOpen(false)\n onComplete()\n }, [onComplete])\n\n const handleConfirm = useCallback(() => {\n setIsDeleting(true)\n setConfirmDialogOpen(false)\n paneSetIsDeleting(true)\n deleteOp.execute()\n onComplete()\n }, [deleteOp, onComplete, paneSetIsDeleting])\n\n const handle = useCallback(() => {\n setConfirmDialogOpen(true)\n }, [])\n\n const [permissions, isPermissionsLoading] = useDocumentPairPermissions({\n id,\n type,\n permission: 'delete',\n })\n\n const currentUser = useCurrentUser()\n\n if (!isPermissionsLoading && !permissions?.granted) {\n return {\n tone: 'critical',\n icon: TrashIcon,\n disabled: true,\n label: t('action.delete.label'),\n title: <InsufficientPermissionsMessage context=\"delete-document\" currentUser={currentUser} />,\n }\n }\n\n return {\n tone: 'critical',\n icon: TrashIcon,\n disabled: isDeleting || Boolean(deleteOp.disabled) || isPermissionsLoading,\n title: (deleteOp.disabled && t(DISABLED_REASON_TITLE_KEY[deleteOp.disabled])) || '',\n label: isDeleting ? t('action.delete.running.label') : t('action.delete.label'),\n shortcut: 'Ctrl+Alt+D',\n onHandle: handle,\n dialog: isConfirmDialogOpen && {\n type: 'custom',\n component: (\n <ConfirmDeleteDialog\n // eslint-disable-next-line @sanity/i18n/no-attribute-string-literals\n action=\"delete\"\n id={draft?._id || id}\n type={type}\n onCancel={handleCancel}\n onConfirm={handleConfirm}\n />\n ),\n },\n }\n}\n\nDeleteAction.action = 'delete'\n","/* eslint-disable import/no-extraneous-dependencies */\n\nimport {ResetIcon} from '@sanity/icons'\nimport React, {useCallback, useMemo, useState} from 'react'\nimport {structureLocaleNamespace} from '../i18n'\nimport {\n DocumentActionComponent,\n DocumentActionDialogProps,\n InsufficientPermissionsMessage,\n useCurrentUser,\n useDocumentOperation,\n useDocumentPairPermissions,\n useTranslation,\n} from 'sanity'\n\nconst DISABLED_REASON_KEY = {\n NO_CHANGES: 'action.discard-changes.disabled.no-changes',\n NOT_PUBLISHED: 'action.discard-changes.disabled.not-published',\n NOT_READY: 'action.discard-changes.disabled.not-ready',\n} as const\n\n/** @internal */\nexport const DiscardChangesAction: DocumentActionComponent = ({\n id,\n type,\n published,\n liveEdit,\n onComplete,\n}) => {\n const {discardChanges} = useDocumentOperation(id, type)\n const [isConfirmDialogOpen, setConfirmDialogOpen] = useState(false)\n const [permissions, isPermissionsLoading] = useDocumentPairPermissions({\n id,\n type,\n permission: 'discardDraft',\n })\n const currentUser = useCurrentUser()\n\n const {t} = useTranslation(structureLocaleNamespace)\n\n const handleConfirm = useCallback(() => {\n discardChanges.execute()\n onComplete()\n }, [discardChanges, onComplete])\n\n const handle = useCallback(() => {\n setConfirmDialogOpen(true)\n }, [])\n\n const dialog: DocumentActionDialogProps | false = useMemo(\n () =>\n isConfirmDialogOpen && {\n type: 'confirm',\n tone: 'critical',\n onCancel: onComplete,\n onConfirm: handleConfirm,\n message: t('action.discard-changes.confirm-dialog.confirm-discard-changes'),\n },\n [handleConfirm, isConfirmDialogOpen, onComplete, t],\n )\n\n if (!published || liveEdit) {\n return null\n }\n\n if (!isPermissionsLoading && !permissions?.granted) {\n return {\n tone: 'critical',\n icon: ResetIcon,\n disabled: true,\n label: t('action.discard-changes.label'),\n title: <InsufficientPermissionsMessage context=\"discard-changes\" currentUser={currentUser} />,\n }\n }\n\n return {\n tone: 'critical',\n icon: ResetIcon,\n disabled: Boolean(discardChanges.disabled) || isPermissionsLoading,\n title: (discardChanges.disabled && DISABLED_REASON_KEY[discardChanges.disabled]) || '',\n label: t('action.discard-changes.label'),\n onHandle: handle,\n dialog,\n }\n}\n\nDiscardChangesAction.action = 'discardChanges'\n","import {CopyIcon} from '@sanity/icons'\nimport {uuid} from '@sanity/uuid'\nimport React, {useCallback, useState} from 'react'\nimport {filter, firstValueFrom} from 'rxjs'\nimport {structureLocaleNamespace} from '../i18n'\nimport {useRouter} from 'sanity/router'\nimport {\n DocumentActionComponent,\n InsufficientPermissionsMessage,\n useDocumentPairPermissions,\n useDocumentOperation,\n useCurrentUser,\n useTranslation,\n useDocumentStore,\n} from 'sanity'\n\nconst DISABLED_REASON_KEY = {\n NOTHING_TO_DUPLICATE: 'action.duplicate.disabled.nothing-to-duplicate',\n NOT_READY: 'action.duplicate.disabled.not-ready',\n}\n\n/** @internal */\nexport const DuplicateAction: DocumentActionComponent = ({id, type, onComplete}) => {\n const documentStore = useDocumentStore()\n const {duplicate} = useDocumentOperation(id, type)\n const {navigateIntent} = useRouter()\n const [isDuplicating, setDuplicating] = useState(false)\n const [permissions, isPermissionsLoading] = useDocumentPairPermissions({\n id,\n type,\n permission: 'duplicate',\n })\n\n const {t} = useTranslation(structureLocaleNamespace)\n\n const currentUser = useCurrentUser()\n\n const handle = useCallback(async () => {\n const dupeId = uuid()\n\n setDuplicating(true)\n\n // set up the listener before executing\n const duplicateSuccess = firstValueFrom(\n documentStore.pair\n .operationEvents(id, type)\n .pipe(filter((e) => e.op === 'duplicate' && e.type === 'success')),\n )\n duplicate.execute(dupeId)\n\n // only navigate to the duplicated document when the operation is successful\n await duplicateSuccess\n navigateIntent('edit', {id: dupeId, type})\n\n onComplete()\n }, [documentStore.pair, duplicate, id, navigateIntent, onComplete, type])\n\n if (!isPermissionsLoading && !permissions?.granted) {\n return {\n icon: CopyIcon,\n disabled: true,\n label: t('action.duplicate.label'),\n title: (\n <InsufficientPermissionsMessage context=\"duplicate-document\" currentUser={currentUser} />\n ),\n }\n }\n\n return {\n icon: CopyIcon,\n disabled: isDuplicating || Boolean(duplicate.disabled) || isPermissionsLoading,\n label: isDuplicating ? t('action.duplicate.running.label') : t('action.duplicate.label'),\n title: duplicate.disabled ? t(DISABLED_REASON_KEY[duplicate.disabled]) : '',\n onHandle: handle,\n }\n}\n\nDuplicateAction.action = 'duplicate'\n","import {RestoreIcon} from '@sanity/icons'\nimport React, {useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {structureLocaleNamespace} from '../i18n'\nimport {\n DocumentActionComponent,\n DocumentActionDialogProps,\n useDocumentOperation,\n useDocumentOperationEvent,\n useTranslation,\n} from 'sanity'\nimport {useRouter} from 'sanity/router'\n\n/** @internal */\nexport const HistoryRestoreAction: DocumentActionComponent = ({id, type, revision, onComplete}) => {\n const {restore} = useDocumentOperation(id, type)\n const event = useDocumentOperationEvent(id, type)\n const {navigateIntent} = useRouter()\n const prevEvent = useRef(event)\n const [isConfirmDialogOpen, setConfirmDialogOpen] = useState(false)\n const {t} = useTranslation(structureLocaleNamespace)\n\n const handleConfirm = useCallback(() => {\n restore.execute(revision!)\n onComplete()\n }, [restore, revision, onComplete])\n\n /**\n * If the restore operation is successful, navigate to the document edit view\n */\n useEffect(() => {\n if (!event || event === prevEvent.current) return\n\n if (event.type === 'success' && event.op === 'restore') {\n navigateIntent('edit', {id, type})\n }\n\n prevEvent.current = event\n }, [event, id, navigateIntent, type])\n\n const handle = useCallback(() => {\n setConfirmDialogOpen(true)\n }, [])\n\n const dialog: DocumentActionDialogProps | null = useMemo(() => {\n if (isConfirmDialogOpen) {\n return {\n type: 'confirm',\n tone: 'critical',\n onCancel: onComplete,\n onConfirm: handleConfirm,\n message: t('action.restore.confirm.message'),\n }\n }\n\n return null\n }, [handleConfirm, isConfirmDialogOpen, onComplete, t])\n\n const isRevisionInitialVersion = revision === '@initial'\n const isRevisionLatestVersion = revision === undefined // undefined means latest version\n\n if (isRevisionLatestVersion) {\n return null\n }\n\n return {\n label: t('action.restore.label'),\n color: 'primary',\n onHandle: handle,\n title: t(\n isRevisionInitialVersion\n ? 'action.restore.disabled.cannot-restore-initial'\n : 'action.restore.tooltip',\n ),\n icon: RestoreIcon,\n dialog,\n disabled: isRevisionInitialVersion,\n }\n}\n\nHistoryRestoreAction.action = 'restore'\n","import {defineEvent} from '@sanity/telemetry'\n\ninterface DocumentPublishedInfo {\n /**\n * The document was created and published straight away\n */\n publishedImmediately: boolean\n\n /**\n * The document had a previously published version when it was published\n */\n previouslyPublished: boolean\n}\nexport const DocumentPublished = defineEvent<DocumentPublishedInfo>({\n name: 'Document Published',\n version: 1,\n description: 'User clicked the \"Publish\" button in the document pane',\n})\n","import {CheckmarkIcon, PublishIcon} from '@sanity/icons'\nimport {isValidationErrorMarker} from '@sanity/types'\nimport React, {useCallback, useEffect, useState} from 'react'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {useDocumentPane} from '../panes/document/useDocumentPane'\nimport {structureLocaleNamespace, type StructureLocaleResourceKeys} from '../i18n'\n\nimport {DocumentPublished} from './__telemetry__/documentActions.telemetry'\nimport {\n DocumentActionComponent,\n InsufficientPermissionsMessage,\n TFunction,\n useCurrentUser,\n useDocumentOperation,\n useDocumentPairPermissions,\n useEditState,\n useSyncState,\n useRelativeTime,\n useTranslation,\n useValidationStatus,\n} from 'sanity'\n\nconst DISABLED_REASON_TITLE_KEY: Record<string, StructureLocaleResourceKeys> = {\n LIVE_EDIT_ENABLED: 'action.publish.live-edit.publish-disabled',\n ALREADY_PUBLISHED: 'action.publish.already-published.no-time-ago.tooltip',\n NO_CHANGES: 'action.publish.no-changes.tooltip',\n NOT_READY: 'action.publish.disabled.not-ready',\n} as const\n\nfunction getDisabledReason(\n reason: keyof typeof DISABLED_REASON_TITLE_KEY,\n publishedAt: string | undefined,\n t: TFunction,\n) {\n if (reason === 'ALREADY_PUBLISHED' && publishedAt) {\n return <AlreadyPublished publishedAt={publishedAt} />\n }\n return t(DISABLED_REASON_TITLE_KEY[reason])\n}\n\nfunction AlreadyPublished({publishedAt}: {publishedAt: string}) {\n const {t} = useTranslation(structureLocaleNamespace)\n const timeSincePublished = useRelativeTime(publishedAt)\n return <span>{t('action.publish.already-published.tooltip', {timeSincePublished})}</span>\n}\n\n/** @internal */\n// eslint-disable-next-line complexity\nexport const PublishAction: DocumentActionComponent = (props) => {\n const {id, type, liveEdit, draft, published} = props\n const [publishState, setPublishState] = useState<'publishing' | 'published' | null>(null)\n const {publish} = useDocumentOperation(id, type)\n const validationStatus = useValidationStatus(id, type)\n const syncState = useSyncState(id, type)\n const {changesOpen, onHistoryOpen, documentId, documentType} = useDocumentPane()\n const editState = useEditState(documentId, documentType)\n const {t} = useTranslation(structureLocaleNamespace)\n\n const revision = (editState?.draft || editState?.published || {})._rev\n\n const hasValidationErrors = validationStatus.validation.some(isValidationErrorMarker)\n // we use this to \"schedule\" publish after pending tasks (e.g. validation and sync) has completed\n const [publishScheduled, setPublishScheduled] = useState<boolean>(false)\n const isSyncing = syncState.isSyncing\n const isValidating = validationStatus.isValidating\n const [permissions, isPermissionsLoading] = useDocumentPairPermissions({\n id,\n type,\n permission: 'publish',\n })\n\n const currentUser = useCurrentUser()\n\n // eslint-disable-next-line no-nested-ternary\n const title = publish.disabled\n ? getDisabledReason(publish.disabled, (published || {})._updatedAt, t) || ''\n : hasValidationErrors\n ? t('action.publish.validation-issues.tooltip')\n : ''\n\n const hasDraft = Boolean(draft)\n\n const doPublish = useCallback(() => {\n publish.execute()\n setPublishState('publishing')\n }, [publish])\n\n useEffect(() => {\n // make sure the validation status is about the current revision and not an earlier one\n const validationComplete =\n validationStatus.isValidating === false && validationStatus.revision !== revision\n\n if (!publishScheduled || isSyncing || !validationComplete) {\n return\n }\n\n if (!hasValidationErrors) {\n doPublish()\n }\n setPublishScheduled(false)\n }, [\n isSyncing,\n doPublish,\n hasValidationErrors,\n publishScheduled,\n validationStatus.revision,\n revision,\n isValidating,\n validationStatus.isValidating,\n ])\n\n useEffect(() => {\n const didPublish = publishState === 'publishing' && !hasDraft\n if (didPublish) {\n if (changesOpen) {\n // Re-open the panel\n onHistoryOpen()\n }\n }\n const nextState = didPublish ? 'published' : null\n const delay = didPublish ? 200 : 4000\n const timer = setTimeout(() => {\n setPublishState(nextState)\n }, delay)\n return () => clearTimeout(timer)\n }, [changesOpen, publishState, hasDraft, onHistoryOpen])\n\n const telemetry = useTelemetry()\n\n const handle = useCallback(() => {\n telemetry.log(DocumentPublished, {\n publishedImmediately: !draft?._createdAt,\n previouslyPublished: Boolean(published),\n })\n if (\n syncState.isSyncing ||\n validationStatus.isValidating ||\n validationStatus.revision !== revision\n ) {\n setPublishScheduled(true)\n } else {\n doPublish()\n }\n }, [\n telemetry,\n draft?._createdAt,\n published,\n syncState.isSyncing,\n validationStatus.isValidating,\n validationStatus.revision,\n revision,\n doPublish,\n ])\n\n if (liveEdit) {\n return {\n tone: 'default',\n icon: PublishIcon,\n label: t('action.publish.live-edit.label'),\n title: t('action.publish.live-edit.tooltip'),\n disabled: true,\n }\n }\n\n if (!isPermissionsLoading && !permissions?.granted) {\n return {\n tone: 'default',\n icon: PublishIcon,\n label: 'Publish',\n title: (\n <InsufficientPermissionsMessage context=\"publish-document\" currentUser={currentUser} />\n ),\n disabled: true,\n }\n }\n\n const disabled = Boolean(\n publishScheduled ||\n editState?.transactionSyncLock?.enabled ||\n publishState === 'publishing' ||\n publishState === 'published' ||\n hasValidationErrors ||\n publish.disabled,\n )\n\n return {\n disabled: disabled || isPermissionsLoading,\n tone: 'default',\n label:\n // eslint-disable-next-line no-nested-ternary\n publishState === 'published'\n ? t('action.publish.published.label')\n : publishScheduled || publishState === 'publishing'\n ? t('action.publish.running.label')\n : t('action.publish.draft.label'),\n // @todo: Implement loading state, to show a `<Button loading />` state\n // loading: publishScheduled || publishState === 'publishing',\n icon: PublishIcon,\n // eslint-disable-next-line no-nested-ternary\n title: publishScheduled\n ? t('action.publish.waiting')\n : publishState === 'published' || publishState === 'publishing'\n ? null\n : title,\n shortcut: disabled || publishScheduled ? null : 'Ctrl+Alt+P',\n onHandle: handle,\n }\n}\n\nPublishAction.action = 'publish'\n","import {UnpublishIcon} from '@sanity/icons'\nimport React, {useCallback, useMemo, useState} from 'react'\nimport {ConfirmDeleteDialog} from '../components'\nimport {structureLocaleNamespace} from '../i18n'\nimport {\n DocumentActionComponent,\n InsufficientPermissionsMessage,\n useDocumentPairPermissions,\n useCurrentUser,\n useDocumentOperation,\n DocumentActionModalDialogProps,\n useTranslation,\n} from 'sanity'\n\nconst DISABLED_REASON_KEY = {\n NOT_PUBLISHED: 'action.unpublish.disabled.not-published',\n NOT_READY: 'action.unpublish.disabled.not-ready',\n LIVE_EDIT_ENABLED: 'action.unpublish.disabled.live-edit-enabled',\n}\n\n/** @internal */\nexport const UnpublishAction: DocumentActionComponent = ({\n id,\n type,\n draft,\n onComplete,\n liveEdit,\n}) => {\n const {unpublish} = useDocumentOperation(id, type)\n const [isConfirmDialogOpen, setConfirmDialogOpen] = useState(false)\n const [permissions, isPermissionsLoading] = useDocumentPairPermissions({\n id,\n type,\n permission: 'unpublish',\n })\n const currentUser = useCurrentUser()\n const {t} = useTranslation(structureLocaleNamespace)\n\n const handleCancel = useCallback(() => {\n setConfirmDialogOpen(false)\n onComplete()\n }, [onComplete])\n\n const handleConfirm = useCallback(() => {\n setConfirmDialogOpen(false)\n unpublish.execute()\n onComplete()\n }, [onComplete, unpublish])\n\n const dialog: DocumentActionModalDialogProps | null = useMemo(() => {\n if (isConfirmDialogOpen) {\n return {\n type: 'dialog',\n onClose: onComplete,\n content: (\n <ConfirmDeleteDialog\n id={draft?._id || id}\n type={type}\n // eslint-disable-next-line @sanity/i18n/no-attribute-string-literals\n action=\"unpublish\"\n onCancel={handleCancel}\n onConfirm={handleConfirm}\n />\n ),\n }\n }\n\n return null\n }, [draft, id, handleCancel, handleConfirm, isConfirmDialogOpen, onComplete, type])\n\n if (liveEdit) {\n return null\n }\n\n if (!isPermissionsLoading && !permissions?.granted) {\n return {\n tone: 'critical',\n icon: UnpublishIcon,\n label: 'Unpublish',\n title: (\n <InsufficientPermissionsMessage context=\"unpublish-document\" currentUser={currentUser} />\n ),\n disabled: true,\n }\n }\n\n return {\n tone: 'critical',\n icon: UnpublishIcon,\n disabled: Boolean(unpublish.disabled) || isPermissionsLoading,\n label: t('action.unpublish.label'),\n title: unpublish.disabled ? t(DISABLED_REASON_KEY[unpublish.disabled]) : '',\n onHandle: () => setConfirmDialogOpen(true),\n dialog,\n }\n}\n\nUnpublishAction.action = 'unpublish'\n","import {DocumentBadgeComponent} from 'sanity'\n\n/** @internal */\nexport const LiveEditBadge: DocumentBadgeComponent = (props) => {\n const {liveEdit} = props\n\n if (liveEdit) {\n return {\n label: 'Live',\n color: 'danger',\n }\n }\n\n return null\n}\n","/**\n * @internal\n */\nexport const _DEBUG = false\n\nexport const EMPTY_PARAMS = {}\nexport const LOADING_PANE = Symbol('LOADING_PANE')\n\nexport const DOCUMENT_PANEL_PORTAL_ELEMENT = 'documentPanelPortalElement'\n","import {uuid} from '@sanity/uuid'\nimport {PaneNode, RouterPanes} from './types'\nimport {EMPTY_PARAMS, LOADING_PANE} from './constants'\n\nconst state: {\n activePanes: Array<PaneNode | typeof LOADING_PANE>\n} = {activePanes: []}\n\nexport function setActivePanes(panes: Array<PaneNode | typeof LOADING_PANE>): void {\n state.activePanes = panes\n}\n\n/**\n * This function looks at the _active panes_ to resolve an intent. this type of\n * intent resolution is faster and does not cause the panes to reset\n *\n * @internal\n */\nexport function getIntentState(\n intent: string,\n params: Record<string, string>,\n routerState: {panes?: RouterPanes} | undefined,\n payload: unknown,\n): {panes: RouterPanes} | {intent: string; params: Record<string, string>; payload: unknown} {\n const panes = routerState?.panes || []\n const activePanes = state.activePanes || []\n const editDocumentId = params.id || uuid()\n const isTemplate = intent === 'create' && params.template\n\n // Loop through open panes and see if any of them can handle the intent\n for (let i = activePanes.length - 1; i >= 0; i--) {\n const pane = activePanes[i]\n\n if (typeof pane !== 'object') continue\n\n // NOTE: if you update this logic, please also update the similar handler in\n // `resolveIntent.ts`\n if (\n pane.canHandleIntent?.(intent, params, {\n pane,\n index: i,\n }) ||\n // see `resolveIntent.ts` for more info\n (pane.type === 'documentList' &&\n pane.schemaTypeName === params.type &&\n pane.options.filter === '_type == $type')\n ) {\n const paneParams = isTemplate ? {template: params.template} : EMPTY_PARAMS\n\n return {\n panes: panes\n .slice(0, i)\n .concat([[{id: editDocumentId, params: paneParams, payload}]]) as RouterPanes,\n }\n }\n }\n\n return {intent: intent, params, payload}\n}\n","import {omit} from 'lodash'\nimport {RouterPanes, RouterPaneGroup, RouterPaneSibling} from './types'\nimport {route, decodeJsonParams, encodeJsonParams} from 'sanity/router'\n\nconst EMPTY_PARAMS = {}\n\n/**\n * @internal\n */\nexport function legacyEditParamsToState(params: string): Record<string, unknown> {\n try {\n return JSON.parse(decodeURIComponent(params))\n } catch (err) {\n // eslint-disable-next-line no-console\n console.warn('Failed to parse JSON parameters')\n return {}\n }\n}\n\nexport function encodePanesSegment(panes: RouterPanes): string {\n return (panes || [])\n .map((group) => group.map(encodeChunks).join('|'))\n .map(encodeURIComponent)\n .join(';')\n}\n\n/**\n * @internal\n */\nexport function legacyEditParamsToPath(params: Record<string, unknown>): string {\n return JSON.stringify(params)\n}\n\n// http://localhost:3333/intent/create/template=book-by-author;type=book/eyJhdXRob3JJZCI6Imdycm0ifQ==\n\n/**\n * @internal\n */\nexport function toState(pathSegment: string): RouterPaneGroup[] {\n return parsePanesSegment(decodeURIComponent(pathSegment))\n}\n\n/**\n * @internal\n */\nexport function toPath(panes: RouterPaneGroup[]): string {\n return encodePanesSegment(panes)\n}\n\nexport const router = route.create('/', [\n // \"Asynchronous intent resolving\" route\n route.intents('/intent'),\n\n // Legacy fallback route, will be redirected to new format\n route.create('/edit/:type/:editDocumentId', [\n route.create({\n path: '/:params',\n transform: {params: {toState: legacyEditParamsToState, toPath: legacyEditParamsToPath}},\n }),\n ]),\n\n // The regular path - when the intent can be resolved to a specific pane\n route.create({\n path: '/:panes',\n // Legacy URLs, used to handle redirects\n children: [route.create('/:action', route.create('/:legacyEditDocumentId'))],\n transform: {\n panes: {toState, toPath},\n },\n }),\n])\n\n// old: authors;knut,{\"template\":\"diaryEntry\"}\n// new: authors;knut,view=diff,eyJyZXYxIjoiYWJjMTIzIiwicmV2MiI6ImRlZjQ1NiJ9|latest-posts\n\nconst panePattern = /^([.a-z0-9_-]+),?({.*?})?(?:(;|$))/i\nconst isParam = (str: string) => /^[a-z0-9]+=[^=]+/i.test(str)\nconst isPayloadLike = (str: string) => /^[A-Za-z0-9\\-_]+(?:={0,2})$/.test(str)\nconst exclusiveParams = ['view', 'since', 'rev', 'inspect', 'comment']\n\ntype Truthy<T> = T extends false\n ? never\n : T extends ''\n ? never\n : T extends 0\n ? never\n : T extends 0n\n ? never\n : T extends null | undefined\n ? NonNullable<T>\n : T\nconst isTruthy = Boolean as (t: unknown) => boolean as <T>(t: T) => t is Truthy<T>\n\nfunction parseChunks(chunks: string[], initial: RouterPaneSibling): RouterPaneSibling {\n const sibling: RouterPaneSibling = {...initial, params: EMPTY_PARAMS, payload: undefined}\n return chunks.reduce((pane, chunk) => {\n if (isParam(chunk)) {\n const key = chunk.slice(0, chunk.indexOf('='))\n const value = chunk.slice(key.length + 1)\n pane.params = {...pane.params, [decodeURIComponent(key)]: decodeURIComponent(value)}\n } else if (isPayloadLike(chunk)) {\n pane.payload = tryParseBase64Payload(chunk)\n } else {\n // eslint-disable-next-line no-console\n console.warn('Unknown pane segment: %s - skipping', chunk)\n }\n\n return pane\n }, sibling)\n}\n\nfunction encodeChunks(pane: RouterPaneSibling, index: number, group: RouterPaneGroup): string {\n const {payload, params = {}, id} = pane\n const [firstSibling] = group\n const paneIsFirstSibling = pane === firstSibling\n const sameAsFirst = index !== 0 && id === firstSibling.id\n const encodedPayload =\n typeof payload === 'undefined' ? undefined : encodeJsonParams(payload as any)\n\n const encodedParams = Object.entries(params)\n .filter((entry): entry is [string, string] => {\n const [key, value] = entry\n if (!value) return false\n if (paneIsFirstSibling) return true\n\n // omit the value if it's the same as the value from the first sibling\n const valueFromFirstSibling = firstSibling.params?.[key]\n if (value === valueFromFirstSibling && !exclusiveParams.includes(key)) return false\n return true\n })\n .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)\n\n return (\n [sameAsFirst ? '' : id]\n .concat([encodedParams.length > 0 && encodedParams, encodedPayload].filter(isTruthy).flat())\n .join(',') || ','\n )\n}\n\nexport function parsePanesSegment(str: string): RouterPanes {\n if (str.indexOf(',{') !== -1) {\n return parseOldPanesSegment(str)\n }\n\n return str\n .split(';')\n .map((group) => {\n const [firstSibling, ...restOfSiblings] = group.split('|').map((segment) => {\n const [id, ...chunks] = segment.split(',')\n return parseChunks(chunks, {id})\n })\n\n return [\n firstSibling,\n ...restOfSiblings.map((sibling) => ({\n ...firstSibling,\n ...sibling,\n id: sibling.id || firstSibling.id,\n params: {...omit(firstSibling.params, exclusiveParams), ...sibling.params},\n payload: sibling.payload || firstSibling.payload,\n })),\n ]\n })\n .filter((group) => group.length > 0)\n}\n\nfunction parseOldPanesSegment(str: string): RouterPanes {\n const chunks: RouterPaneGroup = []\n\n let buffer = str\n while (buffer.length) {\n const [match, id, payloadChunk] = buffer.match(panePattern) || []\n if (!match) {\n buffer = buffer.slice(1)\n continue\n }\n\n const payload = payloadChunk && tryParsePayload(payloadChunk)\n chunks.push({id, payload})\n\n buffer = buffer.slice(match.length)\n }\n\n return [chunks]\n}\n\nfunction tryParsePayload(json: string) {\n try {\n return JSON.parse(json)\n } catch (err) {\n // eslint-disable-next-line no-console\n console.warn(`Failed to parse parameters: ${err.message}`)\n return undefined\n }\n}\n\nfunction tryParseBase64Payload(data: string): unknown {\n try {\n return data ? decodeJsonParams(data) : undefined\n } catch (err) {\n // eslint-disable-next-line no-console\n console.warn(`Failed to parse parameters: ${err.message}`)\n return undefined\n }\n}\n","import {defineLocaleResourceBundle} from 'sanity'\n\n/**\n * The locale namespace for the comments plugin\n *\n * @public\n */\nexport const commentsLocaleNamespace = 'comments' as const\n\n/**\n * The default locale bundle for the comments plugin, which is US English.\n *\n * @internal\n */\nexport const commentsUsEnglishLocaleBundle = defineLocaleResourceBundle({\n locale: 'en-US',\n namespace: commentsLocaleNamespace,\n resources: () => import('./resources'),\n})\n\n/**\n * The locale resource keys for the comments plugin.\n *\n * @alpha\n * @hidden\n */\nexport type {CommentsLocaleResourceKeys} from './resources'\n","import {PaneRouterContextValue} from '../../components'\nimport {PaneMenuItemGroup} from '../../types'\n\nexport const DOCUMENT_PANEL_MIN_WIDTH = 320\nexport const DOCUMENT_PANEL_INITIAL_MIN_WIDTH = 600\n\nexport const DOCUMENT_INSPECTOR_MIN_WIDTH = 320\nexport const DOCUMENT_INSPECTOR_MAX_WIDTH = 540\n\nexport const EMPTY_PARAMS: NonNullable<PaneRouterContextValue['params']> = {}\n\nexport const INSPECT_ACTION_PREFIX = 'inspect:'\n\nexport const DEFAULT_MENU_ITEM_GROUPS: PaneMenuItemGroup[] = [{id: 'inspectors'}, {id: 'links'}]\n\n// inspectors\nexport const HISTORY_INSPECTOR_NAME = 'sanity/structure/history'\nexport const VALIDATION_INSPECTOR_NAME = 'sanity/structure/validation'\nexport const COMMENTS_INSPECTOR_NAME = 'sanity/structure/comments'\n","import React, {useMemo} from 'react'\nimport styled from 'styled-components'\nimport {Avatar, AvatarProps} from '@sanity/ui'\nimport {User} from '@sanity/types'\n\nconst StyledAvatar = styled(Avatar)`\n svg > ellipse {\n stroke: transparent;\n }\n`\n\nconst SYMBOLS = /[^\\p{Alpha}\\p{White_Space}]/gu\nconst WHITESPACE = /\\p{White_Space}+/u\n\nfunction nameToInitials(fullName: string) {\n const namesArray = fullName.replace(SYMBOLS, '').split(WHITESPACE)\n\n if (namesArray.length === 1) {\n return `${namesArray[0].charAt(0)}`.toUpperCase()\n }\n\n return `${namesArray[0].charAt(0)}${namesArray[namesArray.length - 1].charAt(0)}`\n}\n\ninterface CommentsAvatarProps extends AvatarProps {\n user: User | undefined | null\n}\n\nexport function CommentsAvatar(props: CommentsAvatarProps) {\n const {user: userProp, ...restProps} = props\n const user = userProp as User\n const initials = useMemo(() => nameToInitials(user?.displayName || ''), [user?.displayName])\n\n if (!user) return <StyledAvatar {...restProps} />\n\n return (\n <StyledAvatar\n initials={initials}\n src={user?.imageUrl}\n title={user?.displayName}\n {...restProps}\n />\n )\n}\n","import React from 'react'\n\nexport const AVATAR_HEIGHT = 25\n\nconst INLINE_STYLE: React.CSSProperties = {\n minWidth: AVATAR_HEIGHT,\n}\n\n/**\n * This component is used to as a spacer in situations where we want to align\n * components without avatars with components that have avatars.\n */\nexport function SpacerAvatar() {\n return <div style={INLINE_STYLE} />\n}\n","import React from 'react'\nimport {Flex, Text, TextSkeleton} from '@sanity/ui'\nimport styled, {css} from 'styled-components'\nimport {Tooltip} from '../../../../../../ui-components'\nimport {CommentsAvatar} from '../../avatars'\nimport {useCurrentUser, useUser} from 'sanity'\n\nconst Span = styled.span(({theme}) => {\n const {regular} = theme.sanity.fonts?.text.weights\n const {hovered} = theme.sanity.color?.card\n const {bg} = theme.sanity.color.selectable?.caution.pressed || {}\n\n return css`\n font-weight: ${regular};\n color: var(--card-link-fg-color);\n border-radius: 2px;\n background-color: ${hovered.bg};\n padding: 1px;\n box-sizing: border-box;\n\n &[data-active='true'] {\n background-color: ${bg};\n }\n `\n})\n\ninterface MentionInlineBlockProps {\n userId: string\n selected: boolean\n}\n\nexport function MentionInlineBlock(props: MentionInlineBlockProps) {\n const {selected, userId} = props\n const [user, loading] = useUser(userId)\n const currentUser = useCurrentUser()\n\n if (!user || loading)\n return (\n <TextSkeleton\n data-testid=\"comment-mentions-loading-skeleton\"\n style={{width: '10ch'}}\n size={0}\n muted\n radius={1}\n animated\n />\n )\n\n return (\n <Tooltip\n portal\n content={\n <Flex align=\"center\" gap={2}>\n <Flex>\n <CommentsAvatar user={user} />\n </Flex>\n\n <Text size={1}>{user.displayName}</Text>\n </Flex>\n }\n >\n <Span data-selected={selected} data-active={currentUser?.id === userId}>\n @{user.displayName}\n </Span>\n </Tooltip>\n )\n}\n","import React from 'react'\nimport {Flex, Text} from '@sanity/ui'\nimport styled from 'styled-components'\n\nconst NormalText = styled(Text)`\n word-break: break-word;\n`\n\ninterface NormalBlockProps {\n children: React.ReactNode\n}\n\nexport function NormalBlock(props: NormalBlockProps) {\n const {children} = props\n\n return <NormalText size={1}>{children}</NormalText>\n return (\n <Flex>\n <Text size={1}>{children}</Text>\n </Flex>\n )\n}\n","import {Stack} from '@sanity/ui'\nimport styled, {css} from 'styled-components'\nimport React from 'react'\nimport {PortableText, PortableTextComponents} from '@portabletext/react'\nimport {CommentMessage} from '../../types'\nimport {MentionInlineBlock, NormalBlock} from './blocks'\n\nconst PortableTextWrap = styled(Stack)(() => {\n return css`\n & > [data-ui='Text']:not(:first-child) {\n margin-top: 1em; // todo: improve\n }\n\n & > [data-ui='Text']:has(> span:empty) {\n display: none;\n }\n `\n})\n\nconst EMPTY_ARRAY: [] = []\n\nconst components: PortableTextComponents = {\n block: {\n normal: ({children}) => <NormalBlock>{children}</NormalBlock>,\n\n // Since we do not offer any formatting options, we can just use the normal block for all of these.\n h1: ({children}) => <NormalBlock>{children}</NormalBlock>,\n h2: ({children}) => <NormalBlock>{children}</NormalBlock>,\n h3: ({children}) => <NormalBlock>{children}</NormalBlock>,\n h4: ({children}) => <NormalBlock>{children}</NormalBlock>,\n h5: ({children}) => <NormalBlock>{children}</NormalBlock>,\n h6: ({children}) => <NormalBlock>{children}</NormalBlock>,\n blockquote: ({children}) => <NormalBlock>{children}</NormalBlock>,\n code: ({children}) => <NormalBlock>{children}</NormalBlock>,\n },\n list: {\n bullet: ({children}) => children,\n number: ({children}) => <>{children}</>,\n checkmarks: ({children}) => <>{children}</>,\n },\n listItem: {\n bullet: ({children}) => <NormalBlock>{children}</NormalBlock>,\n number: ({children}) => <NormalBlock>{children}</NormalBlock>,\n checkmarks: ({children}) => <NormalBlock>{children}</NormalBlock>,\n },\n marks: {\n // Since we do not offer any formatting options, we can just use the normal block for all of these.\n strong: ({children}) => <>{children}</>,\n em: ({children}) => <>{children}</>,\n code: ({children}) => <>{children}</>,\n underline: ({children}) => <>{children}</>,\n strikeThrough: ({children}) => <>{children}</>,\n link: ({children}) => <>{children}</>,\n },\n types: {\n mention: (props) => {\n return <MentionInlineBlock userId={props?.value?.userId} selected={false} />\n },\n },\n}\n\ninterface CommentMessageSerializerProps {\n blocks: CommentMessage\n}\n\n/**\n * @beta\n * @hidden\n */\nexport function CommentMessageSerializer(props: CommentMessageSerializerProps) {\n const {blocks} = props\n\n return (\n <PortableTextWrap>\n <PortableText value={blocks || EMPTY_ARRAY} components={components} />\n </PortableTextWrap>\n )\n}\n","import {Schema} from '@sanity/schema'\nimport {defineArrayMember, defineField} from '@sanity/types'\n\nexport const mentionObject = defineField({\n name: 'mention',\n type: 'object',\n fields: [\n {\n name: 'userId',\n type: 'string',\n },\n ],\n})\n\nconst blockType = defineField({\n type: 'block',\n name: 'block',\n of: [mentionObject],\n marks: {\n annotations: [],\n },\n styles: [{title: 'Normal', value: 'normal'}],\n lists: [],\n})\n\nconst portableTextType = defineArrayMember({\n type: 'array',\n name: 'body',\n of: [blockType],\n})\n\nconst schema = Schema.compile({\n name: 'comments',\n types: [portableTextType],\n})\n\nexport const editorSchemaType = schema.get('body')\n","import React, {forwardRef} from 'react'\n\nexport const SendIcon = forwardRef(function Icon(\n props: React.SVGProps<SVGSVGElement>,\n ref: React.Ref<SVGSVGElement>,\n) {\n return (\n <svg\n data-sanity-icon=\"send\"\n fill=\"none\"\n height=\"1em\"\n ref={ref}\n viewBox=\"0 0 25 25\"\n width=\"1em\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n clipRule=\"evenodd\"\n d=\"M21.1602 12.5L7.16016 19.5V14.8765L13.6656 12.4989L7.16016 9.97149L7.16016 5.5L21.1602 12.5Z\"\n stroke=\"currentColor\"\n strokeWidth={1.2}\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n})\n","import React, {forwardRef} from 'react'\n\nexport const MentionIcon = forwardRef(function Icon(\n props: React.SVGProps<SVGSVGElement>,\n ref: React.Ref<SVGSVGElement>,\n) {\n return (\n <svg\n data-sanity-icon=\"mention\"\n fill=\"none\"\n height=\"1em\"\n ref={ref}\n viewBox=\"0 0 25 25\"\n width=\"1em\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M16.6633 18.9383C15.539 19.6562 14.2034 20.0723 12.7705 20.0723C8.77022 20.0723 5.52734 16.8294 5.52734 12.8291C5.52734 8.82881 8.77022 5.58594 12.7705 5.58594C16.7708 5.58594 20.0137 8.82881 20.0137 12.8291C20.0137 13.6623 19.8249 14.7093 19.6141 15.2077C19.5578 15.3408 19.479 15.4845 19.3936 15.6238C19.0955 16.1106 18.5507 16.3721 17.9807 16.4018V16.4018C16.8271 16.462 15.8588 15.5428 15.8588 14.3877V9.27302\"\n stroke=\"currentColor\"\n strokeWidth={1.2}\n strokeLinejoin=\"round\"\n />\n <circle cx=\"12.5732\" cy=\"12.8291\" r=\"3.08691\" stroke=\"currentColor\" strokeWidth={1.2} />\n </svg>\n )\n})\n","import React, {forwardRef} from 'react'\n\nexport const AddCommentIcon = forwardRef(function Icon(\n props: React.SVGProps<SVGSVGElement>,\n ref: React.Ref<SVGSVGElement>,\n) {\n return (\n <svg\n data-sanity-icon=\"add-comment\"\n fill=\"none\"\n height=\"1em\"\n ref={ref}\n viewBox=\"0 0 25 25\"\n width=\"1em\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M12.3368 5.97917H6.89453C5.78996 5.97917 4.89453 6.8746 4.89453 7.97917V13.4881C4.89453 14.5926 5.78996 15.4881 6.89453 15.4881H8.69808V19.2916L12.5016 15.4881H16.207C17.3115 15.4881 18.207 14.5926 18.207 13.4881V11.7158\"\n stroke=\"currentColor\"\n strokeWidth={1.2}\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M18.2081 2.08333V9.87058M14.3145 5.97695H22.1017\"\n stroke=\"currentColor\"\n strokeWidth={1.2}\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n})\n","import React, {forwardRef} from 'react'\n\n// A slightly (arguably) more optically centered version of the current <CommentIcon> provided by @sanity/icons\n// @todo: remove this and replace with an updated version from @sanity/icons\nexport const CommentIcon = forwardRef(function Icon(\n props: React.SVGProps<SVGSVGElement>,\n ref: React.Ref<SVGSVGElement>,\n) {\n return (\n <svg\n data-sanity-icon=\"comment\"\n width=\"1em\"\n height=\"1em\"\n ref={ref}\n viewBox=\"0 0 25 25\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M7.5 15.5H9.5V19.5L13.5 15.5H17.5C18.6046 15.5 19.5 14.6046 19.5 13.5V7.5C19.5 6.39543 18.6046 5.5 17.5 5.5H7.5C6.39543 5.5 5.5 6.39543 5.5 7.5V13.5C5.5 14.6046 6.39543 15.5 7.5 15.5Z\"\n stroke=\"currentColor\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.2\"\n />\n </svg>\n )\n})\n","import React, {forwardRef} from 'react'\n\nexport const ReactionIcon = forwardRef(function Icon(\n props: React.SVGProps<SVGSVGElement>,\n ref: React.Ref<SVGSVGElement>,\n) {\n return (\n <svg\n data-sanity-icon=\"add-reaction\"\n fill=\"none\"\n height=\"1em\"\n ref={ref}\n viewBox=\"0 0 25 25\"\n width=\"1em\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M10.1044 10.4011L10.1044 10.9972\"\n stroke=\"currentColor\"\n strokeWidth={1.2}\n strokeLinecap=\"square\"\n />\n <path\n d=\"M14.2393 10.4011L14.2393 10.9972\"\n stroke=\"currentColor\"\n strokeWidth={1.2}\n strokeLinecap=\"square\"\n />\n <path\n d=\"M7.12128 14.1151C7.70803 15.0226 9.66113 16.8377 11.7735 16.8377C13.8859 16.8377 15.6713 15.0226 16.4257 14.1151\"\n stroke=\"currentColor\"\n strokeWidth={1.2}\n strokeLinecap=\"square\"\n />\n <path\n d=\"M16.703 6.43905C15.3486 5.36511 13.6357 4.72374 11.773 4.72374C7.38731 4.72374 3.83203 8.27902 3.83203 12.6647C3.83203 17.0503 7.38731 20.6056 11.773 20.6056C16.0995 20.6056 19.618 17.1455 19.712 12.8415\"\n stroke=\"currentColor\"\n strokeWidth={1.2}\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M19.1135 9.03425L19.1135 11.4903L20.3135 11.4903L20.3135 9.03425L22.7693 9.03425L22.7693 7.83425L20.3135 7.83425L20.3135 5.37941L19.1135 5.37941L19.1135 7.83425L16.6584 7.83425L16.6584 9.03425L19.1135 9.03425Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n})\n","import {useMemo, useRef} from 'react'\nimport {isEqual} from 'lodash'\nimport {CommentMessage} from './types'\nimport {isPortableTextSpan, isPortableTextTextBlock} from 'sanity'\n\nexport function useCommentHasChanged(message: CommentMessage): boolean {\n const prevMessage = useRef<CommentMessage>(message)\n\n return useMemo(() => !isEqual(prevMessage.current, message), [message])\n}\n\nexport function hasCommentMessageValue(value: CommentMessage): boolean {\n if (!value) return false\n\n return value?.some(\n (block) =>\n isPortableTextTextBlock(block) &&\n (block?.children || [])?.some((c) => (isPortableTextSpan(c) ? c.text : c.userId)),\n )\n}\n","import {\n EditorSelection,\n PortableTextEditor,\n usePortableTextEditor,\n} from '@sanity/portable-text-editor'\nimport React, {useCallback, useMemo, useState} from 'react'\nimport {Path, isPortableTextSpan} from '@sanity/types'\nimport {CommentMessage, MentionOptionsHookValue} from '../../../types'\nimport {hasCommentMessageValue, useCommentHasChanged} from '../../../helpers'\nimport {useDidUpdate} from 'sanity'\n\nexport interface CommentInputContextValue {\n canSubmit?: boolean\n closeMentions: () => void\n editor: PortableTextEditor\n expandOnFocus?: boolean\n focused: boolean\n focusEditor: () => void\n focusOnMount?: boolean\n hasChanges: boolean\n insertAtChar: () => void\n insertMention: (userId: string) => void\n mentionOptions: MentionOptionsHookValue\n mentionsMenuOpen: boolean\n mentionsSearchTerm: string\n onBeforeInput: (event: InputEvent) => void\n openMentions: () => void\n readOnly: boolean\n value: CommentMessage\n}\n\nexport const CommentInputContext = React.createContext<CommentInputContextValue | null>(null)\n\ninterface CommentInputProviderProps {\n children: React.ReactNode\n expandOnFocus?: boolean\n focused: boolean\n focusOnMount?: boolean\n mentionOptions: MentionOptionsHookValue\n onMentionMenuOpenChange?: (open: boolean) => void\n readOnly?: boolean\n value: CommentMessage\n}\n\nexport function CommentInputProvider(props: CommentInputProviderProps) {\n const {\n children,\n expandOnFocus = false,\n focused,\n focusOnMount = false,\n mentionOptions,\n onMentionMenuOpenChange,\n value,\n readOnly,\n } = props\n\n const editor = usePortableTextEditor()\n\n const [mentionsMenuOpen, setMentionsMenuOpen] = useState<boolean>(false)\n const [mentionsSearchTerm, setMentionsSearchTerm] = useState<string>('')\n const [selectionAtMentionInsert, setSelectionAtMentionInsert] = useState<EditorSelection>(null)\n\n const canSubmit = useMemo(() => hasCommentMessageValue(value), [value])\n\n const hasChanges = useCommentHasChanged(value)\n\n const focusEditor = useCallback(() => {\n if (readOnly) return\n PortableTextEditor.focus(editor)\n }, [editor, readOnly])\n\n const closeMentions = useCallback(() => {\n setMentionsMenuOpen(false)\n setMentionsSearchTerm('')\n setSelectionAtMentionInsert(null)\n }, [])\n\n const openMentions = useCallback(() => {\n setMentionsMenuOpen(true)\n setMentionsSearchTerm('')\n setMentionsMenuOpen(true)\n setSelectionAtMentionInsert(PortableTextEditor.getSelection(editor))\n }, [editor])\n\n // This function activates or deactivates the mentions menu and updates\n // the mention search term when the user types into the Portable Text Editor.\n const onBeforeInput = useCallback(\n (event: InputEvent): void => {\n const selection = PortableTextEditor.getSelection(editor)\n const cursorOffset = selection ? selection.focus.offset : 0\n const focusChild = PortableTextEditor.focusChild(editor)\n const focusSpan = (isPortableTextSpan(focusChild) && focusChild) || undefined\n\n const isInsertText = event.inputType === 'insertText'\n const isDeleteText = event.inputType === 'deleteContentBackward'\n const isInsertingAtChar = isInsertText && event.data === '@'\n\n const lastIndexOfAt = focusSpan?.text.substring(0, cursorOffset).lastIndexOf('@') || 0\n\n const isWhitespaceCharBeforeCursorPosition =\n focusSpan?.text.substring(cursorOffset - 1, cursorOffset) === ' '\n\n const filterStartsWithSpaceChar = isInsertText && event.data === ' ' && !mentionsSearchTerm\n\n // If we are inserting a '@' character - open the mentions menu and reset the search term.\n // Only do this if it is in the start of the text, or if '@' is inserted when following a whitespace char.\n if (isInsertingAtChar && (cursorOffset < 1 || isWhitespaceCharBeforeCursorPosition)) {\n openMentions()\n return\n }\n\n // If the user begins typing their filter with a space, or if they are deleting\n // characters after activation and the '@' is no longer there,\n // clear the search term and close the mentions menu.\n if (\n filterStartsWithSpaceChar ||\n (isDeleteText &&\n (focusSpan?.text.length === 1 || lastIndexOfAt === (focusSpan?.text.length || 0) - 1))\n ) {\n closeMentions()\n return\n }\n\n // Update the search term\n if (isPortableTextSpan(focusChild)) {\n // Term starts with the @ char in the value until the cursor offset\n let term = focusChild.text.substring(lastIndexOfAt + 1, cursorOffset)\n // Add the char to the mentions search term\n if (isInsertText) {\n term += event.data\n }\n // Exclude the char from the mentions search term\n if (isDeleteText) {\n term = term.substring(0, term.length - 1)\n }\n // Set the updated mentions search term\n setMentionsSearchTerm(term)\n }\n },\n [closeMentions, editor, mentionsSearchTerm, openMentions],\n )\n\n const insertAtChar = useCallback(() => {\n setMentionsMenuOpen(true)\n PortableTextEditor.focus(editor)\n PortableTextEditor.insertChild(editor, editor.schemaTypes.span, {text: '@'})\n setSelectionAtMentionInsert(PortableTextEditor.getSelection(editor))\n }, [editor])\n\n useDidUpdate(mentionsMenuOpen, () => onMentionMenuOpenChange?.(mentionsMenuOpen))\n\n const insertMention = useCallback(\n (userId: string) => {\n const mentionSchemaType = editor.schemaTypes.inlineObjects.find((t) => t.name === 'mention')\n let mentionPath: Path | undefined\n\n const [span, spanPath] =\n (selectionAtMentionInsert &&\n PortableTextEditor.findByPath(editor, selectionAtMentionInsert.focus.path)) ||\n []\n if (span && isPortableTextSpan(span) && spanPath && mentionSchemaType) {\n PortableTextEditor.focus(editor)\n const offset = PortableTextEditor.getSelection(editor)?.focus.offset\n if (typeof offset !== 'undefined') {\n PortableTextEditor.delete(\n editor,\n {\n anchor: {path: spanPath, offset: span.text.lastIndexOf('@')},\n focus: {path: spanPath, offset},\n },\n {mode: 'selected'},\n )\n PortableTextEditor.insertChild(editor, mentionSchemaType, {\n userId: userId,\n })\n PortableTextEditor.insertChild(editor, editor.schemaTypes.span, {text: ' '})\n }\n }\n },\n [editor, selectionAtMentionInsert],\n )\n\n const ctxValue = useMemo(\n (): CommentInputContextValue => ({\n canSubmit,\n closeMentions,\n editor,\n expandOnFocus,\n focused,\n focusEditor,\n focusOnMount,\n hasChanges,\n insertAtChar,\n insertMention,\n mentionOptions,\n mentionsMenuOpen,\n mentionsSearchTerm,\n onBeforeInput,\n openMentions,\n readOnly: Boolean(readOnly),\n value,\n }),\n [\n canSubmit,\n closeMentions,\n editor,\n expandOnFocus,\n focused,\n focusEditor,\n focusOnMount,\n hasChanges,\n insertAtChar,\n insertMention,\n mentionOptions,\n mentionsMenuOpen,\n mentionsSearchTerm,\n onBeforeInput,\n openMentions,\n readOnly,\n value,\n ],\n )\n\n return <CommentInputContext.Provider value={ctxValue}>{children}</CommentInputContext.Provider>\n}\n","import {useContext} from 'react'\nimport {CommentInputContext, CommentInputContextValue} from './CommentInputProvider'\n\nexport function useCommentInput(): CommentInputContextValue {\n const ctx = useContext(CommentInputContext)\n\n if (!ctx) {\n throw new Error('useCommentInputContext must be used within a CommentInputProvider')\n }\n\n return ctx\n}\n","import {TextSkeleton, Flex, Text, Card, Box, Badge} from '@sanity/ui'\nimport React, {useCallback} from 'react'\nimport styled from 'styled-components'\nimport {MentionOptionUser} from '../../types'\nimport {commentsLocaleNamespace} from '../../../i18n'\nimport {CommentsAvatar} from '../avatars'\nimport {useUser, useTranslation} from 'sanity'\n\nconst InnerFlex = styled(Flex)``\n\nconst SKELETON_INLINE_STYLE: React.CSSProperties = {width: '50%'}\n\ninterface MentionsItemProps {\n user: MentionOptionUser\n onSelect: (userId: string) => void\n}\n\nexport function MentionsMenuItem(props: MentionsItemProps) {\n const {user, onSelect} = props\n const [loadedUser] = useUser(user.id)\n const {t} = useTranslation(commentsLocaleNamespace)\n\n const avatar = (\n <CommentsAvatar user={loadedUser} status={user.canBeMentioned ? undefined : 'inactive'} />\n )\n\n const text = loadedUser ? (\n <Text size={1} textOverflow=\"ellipsis\" title={loadedUser.displayName}>\n {loadedUser.displayName}\n </Text>\n ) : (\n <TextSkeleton size={1} style={SKELETON_INLINE_STYLE} />\n )\n\n const handleSelect = useCallback(() => {\n onSelect(user.id)\n }, [onSelect, user.id])\n\n return (\n <Card as=\"button\" disabled={!user.canBeMentioned} onClick={handleSelect} padding={2} radius={2}>\n <Flex align=\"center\" gap={3}>\n <InnerFlex align=\"center\" gap={2} flex={1}>\n {avatar}\n <Box>{text}</Box>\n </InnerFlex>\n\n {!user.canBeMentioned && (\n <Badge fontSize={1} mode=\"outline\">\n {t('comments.mentions-unauthorized')}\n </Badge>\n )}\n </Flex>\n </Card>\n )\n}\n","import {Box, Flex, Stack, Text} from '@sanity/ui'\nimport styled from 'styled-components'\nimport React, {useCallback, useImperativeHandle, useMemo, useRef, useState} from 'react'\nimport {deburr} from 'lodash'\nimport {MentionOptionUser} from '../../types'\nimport {commentsLocaleNamespace} from '../../../i18n'\nimport {MentionsMenuItem} from './MentionsMenuItem'\nimport {CommandList, CommandListHandle, LoadingBlock, useTranslation} from 'sanity'\n\nconst EMPTY_ARRAY: MentionOptionUser[] = []\n\nconst Root = styled(Stack)({\n maxWidth: '220px', // todo: improve\n})\n\nconst ITEM_HEIGHT = 41\nconst LIST_PADDING = 4\nconst MAX_ITEMS = 7\n\nconst FlexWrap = styled(Flex)({\n maxHeight: ITEM_HEIGHT * MAX_ITEMS + LIST_PADDING * 2 + ITEM_HEIGHT / 2,\n})\n\nexport interface MentionsMenuHandle {\n setSearchTerm: (term: string) => void\n}\ninterface MentionsMenuProps {\n loading: boolean\n inputElement?: HTMLDivElement | null\n onSelect: (userId: string) => void\n options: MentionOptionUser[] | null\n}\n\nexport const MentionsMenu = React.forwardRef(function MentionsMenu(\n props: MentionsMenuProps,\n ref: React.Ref<MentionsMenuHandle>,\n) {\n const {t} = useTranslation(commentsLocaleNamespace)\n const {loading, onSelect, options = [], inputElement} = props\n const [searchTerm, setSearchTerm] = useState<string>('')\n const commandListRef = useRef<CommandListHandle>(null)\n\n useImperativeHandle(\n ref,\n () => {\n return {\n setSearchTerm(term: string) {\n setSearchTerm(term)\n },\n }\n },\n [],\n )\n\n const renderItem = useCallback(\n (itemProps: MentionOptionUser) => {\n return <MentionsMenuItem user={itemProps} onSelect={onSelect} />\n },\n [onSelect],\n )\n\n const getItemDisabled = useCallback(\n (index: number) => {\n return !options?.[index]?.canBeMentioned\n },\n [options],\n )\n\n const filteredOptions = useMemo(() => {\n if (!searchTerm) return options || EMPTY_ARRAY\n\n // We deburr the search term and the display names so that when searching\n // for e.g \"bjorge\" we also get results for \"bjørge\"\n const deburredSearchTerm = deburr(searchTerm).toLocaleLowerCase()\n\n const deburredOptions = options?.map((option) => ({\n ...option,\n displayName: deburr(option.displayName || '').toLocaleLowerCase(),\n }))\n\n const filtered = deburredOptions\n ?.filter((option) => {\n return option?.displayName?.includes(deburredSearchTerm)\n })\n // Sort by whether the displayName starts with the search term to get more relevant results first\n ?.sort((a, b) => {\n const matchA = a.displayName?.startsWith(deburredSearchTerm)\n const matchB = b.displayName?.startsWith(deburredSearchTerm)\n\n if (matchA && !matchB) return -1\n if (!matchA && matchB) return 1\n\n return 0\n })\n\n return filtered || EMPTY_ARRAY\n }, [options, searchTerm])\n\n if (loading) {\n return (\n <Root>\n <LoadingBlock showText />\n </Root>\n )\n }\n\n // In this case the input element is the actual content editable HTMLDivElement from the PTE.\n // Typecast it to an input element to make the CommandList component happy.\n const _inputElement = inputElement ? (inputElement as HTMLInputElement) : undefined\n\n return (\n <Flex direction=\"column\" height=\"fill\" data-testid=\"comments-mentions-menu\">\n {filteredOptions.length === 0 && (\n <Box padding={5}>\n <Text align=\"center\" size={1} muted>\n {t('comments.mentions-not-found')}\n </Text>\n </Box>\n )}\n\n {filteredOptions.length > 0 && (\n <FlexWrap direction=\"column\" flex={1} overflow=\"hidden\">\n <CommandList\n activeItemDataAttr=\"data-hovered\"\n ariaLabel={t('comments.mentions-user-list-aria-label')}\n fixedHeight\n getItemDisabled={getItemDisabled}\n inputElement={_inputElement}\n itemHeight={41}\n items={filteredOptions}\n padding={1}\n ref={commandListRef}\n renderItem={renderItem}\n />\n </FlexWrap>\n )}\n </Flex>\n )\n})\n","import React from 'react'\nimport {RenderBlockFunction} from '@sanity/portable-text-editor'\nimport {NormalBlock} from '../blocks'\n\nexport const renderBlock: RenderBlockFunction = (blockProps) => {\n const {children} = blockProps\n\n return <NormalBlock>{children}</NormalBlock>\n}\n","import React from 'react'\nimport {RenderChildFunction, BlockChildRenderProps} from '@sanity/portable-text-editor'\nimport {MentionInlineBlock} from '../blocks'\n\nexport const renderChild: RenderChildFunction = (childProps: BlockChildRenderProps) => {\n const {children, value, selected} = childProps\n\n const isMention = value._type === 'mention' && value.userId\n\n if (isMention) {\n return <MentionInlineBlock selected={selected} userId={value?.userId as string} />\n }\n\n return children\n}\n","import {useState, useMemo, useEffect, useCallback} from 'react'\n\nconst EVENT_LISTENER_OPTIONS: AddEventListenerOptions = {passive: true}\n\ninterface CursorElementHookOptions {\n disabled: boolean\n rootElement: HTMLElement | null\n}\n\nexport function useCursorElement(opts: CursorElementHookOptions): HTMLElement | null {\n const {disabled, rootElement} = opts\n const [cursorRect, setCursorRect] = useState<DOMRect | null>(null)\n\n const cursorElement = useMemo(() => {\n if (!cursorRect) {\n return null\n }\n return {\n getBoundingClientRect: () => {\n return cursorRect\n },\n } as HTMLElement\n }, [cursorRect])\n\n const handleSelectionChange = useCallback(() => {\n if (disabled) {\n setCursorRect(null)\n return\n }\n\n const sel = window.getSelection()\n\n if (!sel || !sel.isCollapsed || sel.rangeCount === 0) return\n\n const range = sel.getRangeAt(0)\n const isWithinRoot = rootElement?.contains(range.commonAncestorContainer)\n\n if (!isWithinRoot) {\n setCursorRect(null)\n return\n }\n const rect = range?.getBoundingClientRect()\n if (rect) {\n setCursorRect(rect)\n }\n }, [disabled, rootElement])\n\n useEffect(() => {\n document.addEventListener('selectionchange', handleSelectionChange, EVENT_LISTENER_OPTIONS)\n\n return () => {\n document.removeEventListener('selectionchange', handleSelectionChange)\n }\n }, [handleSelectionChange])\n\n return cursorElement\n}\n","import React, {KeyboardEvent, useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {useClickOutside} from '@sanity/ui'\nimport {\n EditorSelection,\n PortableTextEditable,\n usePortableTextEditorSelection,\n} from '@sanity/portable-text-editor'\nimport styled, {css} from 'styled-components'\nimport {isEqual} from 'lodash'\nimport {isPortableTextSpan, isPortableTextTextBlock} from '@sanity/types'\nimport {Popover, PopoverProps} from '../../../../../../ui-components'\nimport {MentionsMenu, MentionsMenuHandle} from '../../mentions'\nimport {renderBlock, renderChild} from '../render'\nimport {useCommentInput} from './useCommentInput'\nimport {useCursorElement} from './useCursorElement'\n\nconst POPOVER_FALLBACK_PLACEMENTS: PopoverProps['fallbackPlacements'] = ['bottom', 'top']\nconst INLINE_STYLE: React.CSSProperties = {outline: 'none'}\nconst EMPTY_ARRAY: [] = []\n\nconst PlaceholderWrapper = styled.span(() => {\n return css`\n overflow: hidden;\n text-overflow: ellipsis;\n text-wrap: nowrap;\n display: block;\n `\n})\n\nexport const StyledPopover = styled(Popover)(({theme}) => {\n const {space, radius} = theme.sanity\n\n return css`\n &[data-placement='bottom'] {\n transform: translateY(${space[1]}px);\n }\n\n &[data-placement='top'] {\n transform: translateY(-${space[1]}px);\n }\n\n [data-ui='Popover__wrapper'] {\n border-radius: ${radius[3]}px;\n display: flex;\n flex-direction: column;\n overflow: clip;\n overflow: hidden;\n position: relative;\n width: 300px; // todo: improve\n }\n `\n})\n\ninterface EditableProps {\n focusLock?: boolean\n onBlur?: (e: React.FormEvent<HTMLDivElement>) => void\n onFocus?: (e: React.FormEvent<HTMLDivElement>) => void\n onKeyDown?: (e: React.KeyboardEvent<Element>) => void\n onSubmit?: () => void\n placeholder?: React.ReactNode\n}\n\nexport interface EditableHandle {\n setShowMentionOptions: (show: boolean) => void\n}\n\nexport function Editable(props: EditableProps) {\n const {\n focusLock,\n placeholder = 'Create a new comment',\n onFocus,\n onBlur,\n onKeyDown,\n onSubmit,\n } = props\n const [popoverElement, setPopoverElement] = useState<HTMLDivElement | null>(null)\n const rootElementRef = useRef<HTMLDivElement | null>(null)\n const editableRef = useRef<HTMLDivElement | null>(null)\n const mentionsMenuRef = useRef<MentionsMenuHandle | null>(null)\n\n const selection = usePortableTextEditorSelection()\n\n const {\n canSubmit,\n closeMentions,\n insertMention,\n mentionOptions,\n mentionsMenuOpen,\n mentionsSearchTerm,\n onBeforeInput,\n value,\n } = useCommentInput()\n\n const cursorElement = useCursorElement({\n disabled: !mentionsMenuOpen,\n rootElement: rootElementRef.current,\n })\n\n const renderPlaceholder = useCallback(\n () => <PlaceholderWrapper>{placeholder}</PlaceholderWrapper>,\n [placeholder],\n )\n\n const handleClickOutside = useCallback(() => {\n if (mentionsMenuOpen) {\n closeMentions()\n }\n }, [closeMentions, mentionsMenuOpen])\n\n useClickOutside(handleClickOutside, [popoverElement])\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n switch (event.key) {\n case 'Enter':\n // Shift enter is used to insert a new line,\n // keep the default behavior\n if (event.shiftKey) {\n break\n }\n // Enter is being used both to select something from the mentionsMenu\n // or to submit the comment. Prevent the default behavior.\n event.preventDefault()\n event.stopPropagation()\n\n // If the mention menu is open close it, but don't submit.\n if (mentionsMenuOpen) {\n closeMentions()\n break\n }\n\n // Submit the comment if eligible for submission\n if (onSubmit && canSubmit) {\n onSubmit()\n }\n break\n\n case 'Escape':\n case 'ArrowLeft':\n case 'ArrowRight':\n if (mentionsMenuOpen) {\n // stop these events if the menu is open\n event.preventDefault()\n event.stopPropagation()\n closeMentions()\n }\n break\n default:\n }\n // Call parent key handler\n if (onKeyDown) onKeyDown(event)\n },\n [canSubmit, closeMentions, mentionsMenuOpen, onKeyDown, onSubmit],\n )\n\n const initialSelectionAtEndOfContent: EditorSelection | undefined = useMemo(() => {\n if (selection) {\n return undefined\n }\n const lastBlock = (value || EMPTY_ARRAY).slice(-1)[0]\n const lastChild = isPortableTextTextBlock(lastBlock)\n ? lastBlock.children.slice(-1)[0]\n : undefined\n if (!lastChild) {\n return undefined\n }\n const point = {\n path: [{_key: lastBlock._key}, 'children', {_key: lastChild._key}],\n offset: isPortableTextSpan(lastChild) ? lastChild.text.length : 0,\n }\n return {\n focus: point,\n anchor: point,\n }\n }, [value, selection])\n\n // Update the mentions search term in the mentions menu\n useEffect(() => {\n mentionsMenuRef.current?.setSearchTerm(mentionsSearchTerm)\n }, [mentionsSearchTerm])\n\n // Close mentions if the user selects text\n useEffect(() => {\n if (mentionsMenuOpen && selection && !isEqual(selection.anchor, selection.focus)) {\n closeMentions()\n }\n }, [mentionsMenuOpen, closeMentions, selection])\n\n const popoverContent = (\n <MentionsMenu\n inputElement={editableRef.current}\n loading={mentionOptions.loading}\n onSelect={insertMention}\n options={mentionOptions.data || EMPTY_ARRAY}\n ref={mentionsMenuRef}\n />\n )\n\n return (\n <div ref={rootElementRef}>\n <StyledPopover\n arrow={false}\n constrainSize\n content={popoverContent}\n disabled={!mentionsMenuOpen}\n fallbackPlacements={POPOVER_FALLBACK_PLACEMENTS}\n open={mentionsMenuOpen}\n placement=\"bottom\"\n ref={setPopoverElement}\n referenceElement={cursorElement}\n />\n\n <PortableTextEditable\n data-testid=\"comment-input-editable\"\n data-ui=\"EditableElement\"\n onBeforeInput={onBeforeInput}\n onBlur={onBlur}\n onFocus={onFocus}\n onKeyDown={handleKeyDown}\n ref={editableRef}\n renderBlock={renderBlock}\n renderChild={renderChild}\n renderPlaceholder={renderPlaceholder}\n selection={initialSelectionAtEndOfContent}\n style={INLINE_STYLE}\n tabIndex={focusLock ? 0 : undefined}\n />\n </div>\n )\n}\n","import React, {useCallback} from 'react'\nimport {Flex, MenuDivider, Box, Card, Stack} from '@sanity/ui'\nimport styled, {css} from 'styled-components'\nimport {CurrentUser} from '@sanity/types'\nimport {MentionIcon, SendIcon} from '../../icons'\nimport {CommentsAvatar} from '../../avatars/CommentsAvatar'\nimport {Button, TooltipDelayGroupProvider} from '../../../../../../ui-components'\nimport {commentsLocaleNamespace} from '../../../../i18n'\nimport {useCommentInput} from './useCommentInput'\nimport {Editable} from './Editable'\nimport {useTranslation, useUser} from 'sanity'\n\nconst EditableWrap = styled(Box)`\n max-height: 20vh;\n overflow-y: auto;\n`\n\nconst ButtonDivider = styled(MenuDivider)({\n height: 20,\n width: 1,\n})\n\nconst RootCard = styled(Card)(({theme}) => {\n const radii = theme.sanity.radius[2]\n\n return css`\n border-radius: ${radii}px;\n\n &:not([data-expand-on-focus='false'], :focus-within) {\n background: transparent;\n box-shadow: unset;\n }\n\n &[data-focused='true']:focus-within {\n ${EditableWrap} {\n min-height: 1em;\n }\n\n box-shadow: inset 0 0 0 1px var(--card-focus-ring-color);\n }\n\n &:focus-within {\n ${EditableWrap} {\n min-height: 1em;\n }\n }\n\n &[data-expand-on-focus='false'] {\n ${EditableWrap} {\n min-height: 1em;\n }\n }\n\n &[data-expand-on-focus='true'] {\n [data-ui='CommentInputActions']:not([hidden]) {\n display: none;\n }\n\n &:focus-within {\n [data-ui='CommentInputActions'] {\n display: flex;\n }\n }\n }\n `\n})\n\ninterface CommentInputInnerProps {\n currentUser: CurrentUser\n focusLock?: boolean\n onBlur?: (e: React.FormEvent<HTMLDivElement>) => void\n onFocus?: (e: React.FormEvent<HTMLDivElement>) => void\n onKeyDown?: (e: React.KeyboardEvent<Element>) => void\n onSubmit: () => void\n placeholder?: React.ReactNode\n withAvatar?: boolean\n}\n\nexport function CommentInputInner(props: CommentInputInnerProps) {\n const {currentUser, focusLock, onBlur, onFocus, onKeyDown, onSubmit, placeholder, withAvatar} =\n props\n\n const [user] = useUser(currentUser.id)\n const {canSubmit, expandOnFocus, focused, hasChanges, insertAtChar, openMentions, readOnly} =\n useCommentInput()\n\n const {t} = useTranslation(commentsLocaleNamespace)\n const avatar = withAvatar ? <CommentsAvatar user={user} /> : null\n\n const handleMentionButtonClicked = useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation()\n insertAtChar()\n openMentions()\n },\n [insertAtChar, openMentions],\n )\n\n return (\n <Flex align=\"flex-start\" gap={2}>\n {avatar}\n\n <RootCard\n data-expand-on-focus={expandOnFocus && !canSubmit ? 'true' : 'false'}\n data-focused={focused ? 'true' : 'false'}\n flex={1}\n shadow={1}\n sizing=\"border\"\n tone={readOnly ? 'transparent' : 'default'}\n >\n <Stack>\n <EditableWrap paddingX={1} paddingY={2} sizing=\"border\">\n <Editable\n focusLock={focusLock}\n onBlur={onBlur}\n onFocus={onFocus}\n onKeyDown={onKeyDown}\n onSubmit={onSubmit}\n placeholder={placeholder}\n />\n </EditableWrap>\n\n <Flex align=\"center\" data-ui=\"CommentInputActions\" gap={1} justify=\"flex-end\" padding={1}>\n <TooltipDelayGroupProvider>\n <Button\n aria-label={t('comments.tooltip-mention-user-aria-label')}\n data-testid=\"comment-mention-button\"\n disabled={readOnly}\n icon={MentionIcon}\n mode=\"bleed\"\n onClick={handleMentionButtonClicked}\n tooltipProps={{content: t('comments.tooltip-mention-user')}}\n />\n\n <ButtonDivider />\n\n <Button\n aria-label={t('comments.tooltip-send-comment-aria-label')}\n disabled={!canSubmit || !hasChanges || readOnly}\n icon={SendIcon}\n mode={hasChanges && canSubmit ? 'default' : 'bleed'}\n onClick={onSubmit}\n tone={hasChanges && canSubmit ? 'primary' : 'default'}\n tooltipProps={{content: t('comments.tooltip-send-comment')}}\n />\n </TooltipDelayGroupProvider>\n </Flex>\n </Stack>\n </RootCard>\n </Flex>\n )\n}\n","import {DialogProvider, Text, ThemeColorProvider} from '@sanity/ui'\nimport React, {useCallback} from 'react'\nimport {Dialog} from '../../../../../../ui-components'\nimport {commentsLocaleNamespace} from '../../../../i18n'\nimport {useTranslation} from 'sanity'\n\nconst Z_OFFSET = 9999999 // Change to appropriate z-offset\n\n/**\n * @beta\n * @hidden\n */\nexport interface CommentInputDiscardDialogProps {\n onClose: () => void\n onConfirm: () => void\n}\n\n/**\n * @beta\n * @hidden\n */\nexport function CommentInputDiscardDialog(props: CommentInputDiscardDialogProps) {\n const {t} = useTranslation(commentsLocaleNamespace)\n const {onClose, onConfirm} = props\n\n const handleCancelClick = useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation()\n onClose()\n },\n [onClose],\n )\n\n const handleConfirmClick = useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation()\n onConfirm()\n },\n [onConfirm],\n )\n\n // The ThemeColorProvider is needed to make sure that the backdrop of the dialog not\n // inherits the tone of parent color providers.\n // The PortalProvider and DialogProvider is needed to make sure that the dialog is\n // rendered fullscreen and not scoped to the form view.\n return (\n <ThemeColorProvider tone=\"default\">\n <DialogProvider zOffset={Z_OFFSET}>\n <Dialog\n header={t('comments.discard-header')}\n id=\"discard-comment-dialog\"\n onClose={onClose}\n width={0}\n onClickOutside={onClose}\n footer={{\n cancelButton: {\n onClick: handleCancelClick,\n },\n confirmButton: {\n onClick: handleConfirmClick,\n text: t('comments.discard-button-confirm'),\n tone: 'critical',\n },\n }}\n >\n <Text size={1}>{t('comments.discard-text')}</Text>\n </Dialog>\n </DialogProvider>\n </ThemeColorProvider>\n )\n}\n","import React, {forwardRef, useCallback, useImperativeHandle, useMemo, useRef, useState} from 'react'\nimport {EditorChange, PortableTextEditor, keyGenerator} from '@sanity/portable-text-editor'\nimport {CurrentUser, PortableTextBlock} from '@sanity/types'\nimport {Stack, focusFirstDescendant, focusLastDescendant} from '@sanity/ui'\nimport {editorSchemaType} from '../config'\nimport {MentionOptionsHookValue} from '../../../types'\nimport {CommentInputInner} from './CommentInputInner'\nimport {CommentInputProvider} from './CommentInputProvider'\nimport {CommentInputDiscardDialog} from './CommentInputDiscardDialog'\n\nconst EMPTY_ARRAY: [] = []\n\nconst SCROLL_INTO_VIEW_OPTIONS: ScrollIntoViewOptions = {\n behavior: 'smooth',\n block: 'center',\n inline: 'center',\n}\n\nexport interface CommentInputProps {\n currentUser: CurrentUser\n expandOnFocus?: boolean\n focusLock?: boolean\n focusOnMount?: boolean\n mentionOptions: MentionOptionsHookValue\n onBlur?: (e: React.FormEvent<HTMLDivElement>) => void\n onChange: (value: PortableTextBlock[]) => void\n onDiscardCancel: () => void\n onDiscardConfirm: () => void\n onFocus?: (e: React.FormEvent<HTMLDivElement>) => void\n onKeyDown?: (e: React.KeyboardEvent<Element>) => void\n onMentionMenuOpenChange?: (open: boolean) => void\n onSubmit: () => void\n placeholder?: React.ReactNode\n readOnly?: boolean\n value: PortableTextBlock[] | null\n withAvatar?: boolean\n}\n\ninterface CommentDiscardDialogController {\n open: () => void\n close: () => void\n}\n\nexport interface CommentInputHandle {\n blur: () => void\n discardDialogController: CommentDiscardDialogController\n focus: () => void\n scrollTo: () => void\n reset: () => void\n}\n\n/**\n * @beta\n * @hidden\n */\nexport const CommentInput = forwardRef<CommentInputHandle, CommentInputProps>(\n function CommentInput(props, ref) {\n const {\n currentUser,\n expandOnFocus,\n focusLock = false,\n focusOnMount,\n mentionOptions,\n onBlur,\n onChange,\n onDiscardCancel,\n onDiscardConfirm,\n onFocus,\n onKeyDown,\n onMentionMenuOpenChange,\n onSubmit,\n placeholder,\n readOnly,\n value = EMPTY_ARRAY,\n withAvatar = true,\n } = props\n const [focused, setFocused] = useState<boolean>(false)\n const editorRef = useRef<PortableTextEditor | null>(null)\n const editorContainerRef = useRef<HTMLDivElement | null>(null)\n const [showDiscardDialog, setShowDiscardDialog] = useState<boolean>(false)\n\n const preDivRef = useRef<HTMLDivElement | null>(null)\n const postDivRef = useRef<HTMLDivElement | null>(null)\n const innerRef = useRef<HTMLDivElement | null>(null)\n\n // A unique (React) key for the editor instance.\n const [editorInstanceKey, setEditorInstanceKey] = useState(keyGenerator())\n\n const requestFocus = useCallback(() => {\n requestAnimationFrame(() => {\n if (!editorRef.current) return\n PortableTextEditor.focus(editorRef.current)\n })\n }, [])\n\n const resetEditorInstance = useCallback(() => {\n setEditorInstanceKey(keyGenerator())\n }, [])\n\n const handleChange = useCallback(\n (change: EditorChange) => {\n // Focus the editor when ready if focusOnMount is true\n if (change.type === 'ready') {\n if (focusOnMount) {\n requestFocus()\n }\n }\n if (change.type === 'focus') {\n setFocused(true)\n }\n\n if (change.type === 'blur') {\n setFocused(false)\n }\n\n // Update the comment value whenever the comment is edited by the user.\n if (change.type === 'patch' && editorRef.current) {\n const editorStateValue = PortableTextEditor.getValue(editorRef.current)\n onChange(editorStateValue || EMPTY_ARRAY)\n }\n },\n [focusOnMount, onChange, requestFocus],\n )\n\n const scrollToEditor = useCallback(() => {\n editorContainerRef.current?.scrollIntoView(SCROLL_INTO_VIEW_OPTIONS)\n }, [])\n\n const handleSubmit = useCallback(() => {\n onSubmit()\n resetEditorInstance()\n requestFocus()\n scrollToEditor()\n }, [onSubmit, requestFocus, resetEditorInstance, scrollToEditor])\n\n const handleDiscardConfirm = useCallback(() => {\n onDiscardConfirm()\n resetEditorInstance()\n }, [onDiscardConfirm, resetEditorInstance])\n\n // The way a user a comment can be discarded varies from the context it is used in.\n // This controller is used to take care of the main logic of the discard process, while\n // specific behavior is handled by the consumer.\n const discardDialogController = useMemo((): CommentDiscardDialogController => {\n return {\n open: () => {\n setShowDiscardDialog(true)\n },\n close: () => {\n setShowDiscardDialog(false)\n requestFocus()\n },\n }\n }, [requestFocus])\n\n useImperativeHandle(\n ref,\n () => {\n return {\n focus: requestFocus,\n blur() {\n if (editorRef.current) {\n PortableTextEditor.blur(editorRef.current)\n }\n },\n scrollTo: scrollToEditor,\n reset: resetEditorInstance,\n\n discardDialogController,\n }\n },\n [discardDialogController, requestFocus, resetEditorInstance, scrollToEditor],\n )\n\n const handleFocus = useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n if (!focusLock) return\n\n const target = event.target\n const innerEl = innerRef.current\n\n if (innerEl && target === preDivRef.current) {\n focusLastDescendant(innerEl)\n return\n }\n\n if (innerEl && target === postDivRef.current) {\n focusFirstDescendant(innerEl)\n }\n },\n [focusLock],\n )\n\n return (\n <>\n {showDiscardDialog && (\n <CommentInputDiscardDialog onClose={onDiscardCancel} onConfirm={handleDiscardConfirm} />\n )}\n\n <Stack ref={editorContainerRef} data-testid=\"comment-input\" onFocus={handleFocus}>\n <PortableTextEditor\n key={editorInstanceKey}\n onChange={handleChange}\n readOnly={readOnly}\n ref={editorRef}\n schemaType={editorSchemaType}\n value={value || EMPTY_ARRAY}\n >\n <CommentInputProvider\n expandOnFocus={expandOnFocus}\n focused={focused}\n focusOnMount={focusOnMount}\n mentionOptions={mentionOptions}\n onMentionMenuOpenChange={onMentionMenuOpenChange}\n readOnly={readOnly}\n value={value}\n >\n {focusLock && <div ref={preDivRef} tabIndex={0} />}\n\n <Stack ref={innerRef}>\n <CommentInputInner\n currentUser={currentUser}\n focusLock={focusLock}\n onBlur={onBlur}\n onFocus={onFocus}\n onKeyDown={onKeyDown}\n onSubmit={handleSubmit}\n placeholder={placeholder}\n withAvatar={withAvatar}\n />\n </Stack>\n\n {focusLock && <div ref={postDivRef} tabIndex={0} />}\n </CommentInputProvider>\n </PortableTextEditor>\n </Stack>\n </>\n )\n },\n)\n","import {FlexProps} from '@sanity/ui'\n\nexport const FLEX_GAP: FlexProps['gap'] = 3\n","import {CommentReactionOption, CommentReactionShortNames} from './types'\n\n// These should not be alphabetized as the current order is intentional\nexport const COMMENT_REACTION_OPTIONS: CommentReactionOption[] = [\n {\n shortName: ':+1:',\n title: 'Thumbs up',\n },\n {\n shortName: ':-1:',\n title: 'Thumbs down',\n },\n {\n shortName: ':heart:',\n title: 'Heart',\n },\n {\n shortName: ':rocket:',\n title: 'Rocket',\n },\n {\n shortName: ':heavy_plus_sign:',\n title: 'Heavy plus sign',\n },\n {\n shortName: ':eyes:',\n title: 'Eyes',\n },\n]\n\nexport const COMMENT_REACTION_EMOJIS: Record<CommentReactionShortNames, string> = {\n ':-1:': '👎',\n ':+1:': '👍',\n ':eyes:': '👀',\n ':heart:': '❤️',\n ':heavy_plus_sign:': '➕',\n ':rocket:': '🚀',\n}\n","import {Text} from '@sanity/ui'\nimport styled from 'styled-components'\n\nexport const EmojiText = styled(Text)`\n font-family: 'Twemoji Mozilla', 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',\n 'Noto Color Emoji', 'EmojiOne Color', 'Android Emoji', sans-serif;\n`\n","// eslint-disable-next-line no-restricted-imports\nimport {Button as UIButton, Grid} from '@sanity/ui'\nimport React, {useCallback, useEffect, useState} from 'react'\nimport {CommentReactionOption} from '../../types'\nimport {commentsLocaleNamespace} from '../../../i18n'\nimport {COMMENT_REACTION_EMOJIS} from '../../constants'\nimport {EmojiText} from './EmojiText.styled'\nimport {useTranslation} from 'sanity'\n\nconst GRID_COLUMNS = 6\n\ninterface CommentReactionsMenuProps {\n options: CommentReactionOption[]\n onSelect: (option: CommentReactionOption) => void\n}\n\nexport function CommentReactionsMenu(props: CommentReactionsMenuProps) {\n const {options, onSelect} = props\n const {t} = useTranslation(commentsLocaleNamespace)\n const [focusableElements, setFocusableElements] = useState<HTMLButtonElement[]>([])\n const [rootElement, setRootElement] = useState<HTMLDivElement | null>(null)\n const [focusedIndex, setFocusedIndex] = useState<number>(0)\n\n const handleRootKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n const focusableLen = focusableElements.length\n\n if (event.key === 'ArrowRight') {\n setFocusedIndex((prev) => (prev + 1) % focusableLen)\n }\n if (event.key === 'ArrowLeft') {\n setFocusedIndex((prev) => (prev - 1 + focusableLen) % focusableLen)\n }\n // if (event.key === 'ArrowDown') {\n // setFocusedIndex((prev) => (prev + GRID_COLUMNS) % focusableLen)\n // }\n // if (event.key === 'ArrowUp') {\n // setFocusedIndex((prev) => (prev - GRID_COLUMNS + focusableLen) % focusableLen)\n // }\n },\n [focusableElements.length],\n )\n\n const handleOptionClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n const index = focusableElements.indexOf(event.currentTarget)\n setFocusedIndex(index)\n onSelect(options[index])\n },\n [focusableElements, onSelect, options],\n )\n\n // Get all the buttons in the grid and set them as focusable elements.\n useEffect(() => {\n if (rootElement) {\n const buttons = rootElement.querySelectorAll('button')\n setFocusableElements(Array.from(buttons))\n }\n }, [rootElement])\n\n // Focus the button at the focused index.\n useEffect(() => {\n if (focusableElements.length > 0) {\n focusableElements[focusedIndex].focus()\n }\n }, [focusableElements, focusedIndex])\n\n return (\n <Grid\n columns={GRID_COLUMNS}\n gap={1}\n onKeyDown={handleRootKeyDown}\n ref={setRootElement}\n role=\"menu\"\n >\n {options.map((o) => {\n const emoji = COMMENT_REACTION_EMOJIS[o.shortName]\n\n return (\n <UIButton\n aria-label={t('comments.reactions-menu-button-aria-label', {\n reaction: o.title || o.shortName,\n })}\n key={o.shortName}\n mode=\"bleed\"\n onClick={handleOptionClick}\n padding={2}\n role=\"menuitem\"\n tabIndex={-1}\n >\n <EmojiText align=\"center\" size={2}>\n {emoji}\n </EmojiText>\n </UIButton>\n )\n })}\n </Grid>\n )\n}\n","import {TFunction} from 'i18next'\nimport React, {cloneElement, useCallback, useMemo, useState} from 'react'\nimport {Card, useClickOutside} from '@sanity/ui'\nimport {CommentReactionOption} from '../../types'\nimport {Popover, PopoverProps} from '../../../../../ui-components'\nimport {commentsLocaleNamespace} from '../../../i18n'\nimport {CommentReactionsMenu} from './CommentReactionsMenu'\nimport {useTranslation} from 'sanity'\n\nconst POPOVER_FALLBACK_PLACEMENTS: PopoverProps['fallbackPlacements'] = ['top', 'bottom']\n\nexport interface CommentReactionsMenuButtonProps {\n onMenuClose?: () => void\n onMenuOpen?: () => void\n onSelect: (option: CommentReactionOption) => void\n options: CommentReactionOption[]\n readOnly?: boolean\n renderMenuButton: (props: {open: boolean; t: TFunction}) => React.ReactElement\n}\n\nexport function CommentReactionsMenuButton(props: CommentReactionsMenuButtonProps) {\n const {onMenuClose, onMenuOpen, onSelect, options, readOnly, renderMenuButton} = props\n const [buttonElement, setButtonElement] = useState<HTMLButtonElement | null>(null)\n const [popoverElement, setPopoverElement] = useState<HTMLDivElement | null>(null)\n\n const [open, setOpen] = useState<boolean>(false)\n const {t} = useTranslation(commentsLocaleNamespace)\n\n const handleClick = useCallback(() => {\n const next = !open\n setOpen(next)\n\n if (next) {\n onMenuOpen?.()\n } else {\n onMenuClose?.()\n }\n }, [onMenuClose, onMenuOpen, open])\n\n const handleClose = useCallback(() => {\n if (!open) return\n\n setOpen(false)\n onMenuClose?.()\n buttonElement?.focus()\n }, [buttonElement, onMenuClose, open])\n\n const handleClickOutside = useCallback(handleClose, [handleClose])\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n const {key, shiftKey} = event\n\n if ((shiftKey && key === 'Tab') || key === 'Escape' || key === 'Tab') {\n handleClose()\n }\n },\n [handleClose],\n )\n\n useClickOutside(handleClickOutside, [popoverElement, buttonElement])\n\n const handleSelect = useCallback(\n (option: CommentReactionOption) => {\n onSelect(option)\n handleClose()\n },\n [handleClose, onSelect],\n )\n\n const button = useMemo(() => {\n // Get the button element from the renderMenuButton function.\n const btn = renderMenuButton({open, t})\n\n // Clone the button element and add the necessary props.\n return cloneElement(btn, {\n 'aria-expanded': open,\n 'aria-haspopup': 'true',\n disabled: readOnly,\n id: 'reactions-menu-button',\n onClick: handleClick,\n ref: setButtonElement,\n t: t,\n })\n }, [handleClick, open, readOnly, renderMenuButton, t])\n\n const popoverContent = (\n <Card\n aria-labelledby=\"reactions-menu-button\"\n onKeyDown={handleKeyDown}\n padding={1}\n radius={3}\n tone=\"default\"\n >\n <CommentReactionsMenu onSelect={handleSelect} options={options} />\n </Card>\n )\n\n return (\n <Popover\n constrainSize\n content={popoverContent}\n fallbackPlacements={POPOVER_FALLBACK_PLACEMENTS}\n open={open}\n placement=\"bottom\"\n portal\n ref={setPopoverElement}\n tone=\"default\"\n >\n {button}\n </Popover>\n )\n}\n","import {Flex, Text, Stack, Box} from '@sanity/ui'\nimport React, {Fragment, useMemo} from 'react'\nimport styled from 'styled-components'\nimport {COMMENT_REACTION_EMOJIS} from '../../constants'\nimport {CommentReactionShortNames} from '../../types'\nimport {Tooltip} from '../../../../../ui-components'\nimport {commentsLocaleNamespace} from '../../../i18n'\nimport {EmojiText} from './EmojiText.styled'\nimport {CurrentUser, Translate, useTranslation, useUser} from 'sanity'\n\nconst TEXT_SIZE: number | number[] = 1\n\nconst ContentStack = styled(Stack)`\n max-width: 180px;\n`\n\nconst InlineText = styled(Text).attrs({size: TEXT_SIZE})`\n display: inline-block !important;\n`\n\nconst TextBox = styled(Box)`\n line-height: 1;\n text-align: center;\n`\n\ninterface UserDisplayNameProps {\n currentUserId: string\n isFirst?: boolean\n separator?: boolean\n userId: string\n}\n\nfunction UserDisplayName(props: UserDisplayNameProps) {\n const {currentUserId, isFirst, userId, separator} = props\n const [user] = useUser(userId)\n const {t} = useTranslation(commentsLocaleNamespace)\n\n const isCurrentUser = currentUserId === userId\n const you = isFirst ? t('comments.reaction-user-you') : t('comments.reaction-user-you-lowercase')\n const content = isCurrentUser ? you : user?.displayName ?? t('comments.reaction-unknown-user')\n const text = separator ? `${content}, ` : content\n\n return <InlineText weight=\"medium\"> {text} </InlineText>\n}\n\ninterface CommentReactionsUsersTooltipProps {\n children: React.ReactNode\n currentUser: CurrentUser\n reactionName: CommentReactionShortNames\n userIds: string[]\n}\n\nexport function CommentReactionsUsersTooltip(props: CommentReactionsUsersTooltipProps) {\n const {children, ...restProps} = props\n\n return (\n <Tooltip\n content={<CommentReactionsUsersTooltipContent {...restProps} />}\n placement=\"bottom\"\n portal\n >\n <div>{children}</div>\n </Tooltip>\n )\n}\n\nexport function CommentReactionsUsersTooltipContent(\n props: Omit<CommentReactionsUsersTooltipProps, 'children'>,\n) {\n const {currentUser, reactionName, userIds} = props\n const {t} = useTranslation(commentsLocaleNamespace)\n const content = useMemo(() => {\n const len = userIds.length\n\n if (len === 0 || !currentUser) return null\n\n return userIds.map((id, index) => {\n const separator = index < userIds.length - 1 && len > 2 && index !== userIds.length - 2\n const showAnd = index === len - 1 && len > 1\n\n return (\n <Fragment key={id}>\n {showAnd && (\n <>\n <InlineText>{t('comments.reaction-separator')} </InlineText>{' '}\n </>\n )}\n <UserDisplayName\n currentUserId={currentUser.id}\n isFirst={index === 0}\n separator={separator}\n userId={id}\n />{' '}\n </Fragment>\n )\n })\n }, [currentUser, userIds, t])\n\n return (\n <ContentStack padding={1}>\n <Flex justify=\"center\" paddingBottom={2} paddingTop={1}>\n <EmojiText size={4}>{COMMENT_REACTION_EMOJIS[reactionName]}</EmojiText>\n </Flex>\n\n <TextBox>\n <Translate\n t={t}\n i18nKey=\"comments.user-reacted-with\"\n values={{reactionName: reactionName}}\n components={{\n Content: () => <>{content}</>,\n Text: ({children}) => (\n <>\n <InlineText muted>{children}</InlineText> <wbr />{' '}\n </>\n ),\n ReactionName: ({children}) => <InlineText muted>{children}</InlineText>,\n }}\n />\n </TextBox>\n </ContentStack>\n )\n}\n","import {Card} from '@sanity/ui'\nimport styled from 'styled-components'\n\n/**\n * Returns a styled `<Card>` without a background.\n * This is a temporary workaround to force nested Sanity UI components to adhere to a specific tone (and bypass color mixing).\n *\n * TODO: consider exposing an unstable prop in Sanity UI to facilitate this.\n */\nexport const TransparentCard = styled(Card)`\n background: none;\n`\n","import React, {useCallback, useMemo, useRef} from 'react'\nimport {CurrentUser} from '@sanity/types'\nimport {\n // eslint-disable-next-line no-restricted-imports\n Button as UIButton,\n Flex,\n Text,\n} from '@sanity/ui'\nimport {CommentReactionItem, CommentReactionOption, CommentReactionShortNames} from '../../types'\nimport {COMMENT_REACTION_EMOJIS, COMMENT_REACTION_OPTIONS} from '../../constants'\nimport {ReactionIcon} from '../icons'\nimport {Tooltip, TooltipDelayGroupProvider} from '../../../../../ui-components'\nimport {CommentReactionsMenuButton} from './CommentReactionsMenuButton'\nimport {CommentReactionsUsersTooltip} from './CommentReactionsUsersTooltip'\nimport {EmojiText} from './EmojiText.styled'\nimport {TransparentCard} from './TransparentCard.styled'\nimport {TFunction} from 'sanity'\n\n/**\n * A function that groups reactions by name. For example:\n *\n * ```js\n * [\n * [':name:', [{shortName: ':name:', userId: 'user1'}, {shortName: ':name:', userId: 'user2'}],\n * [':name2:', [{shortName: ':name2:', userId: 'user1'}]\n * ]\n *```\n */\nfunction groupReactionsByName(reactions: CommentReactionItem[]) {\n const grouped = reactions.reduce(\n (acc, reaction) => {\n const {shortName} = reaction\n\n if (!acc[shortName]) {\n acc[shortName] = []\n }\n\n acc[shortName].push(reaction)\n\n return acc\n },\n {} as Record<CommentReactionShortNames, CommentReactionItem[]>,\n )\n\n // Sort based on the first appearance of the reaction in `reactions` array.\n // This is to ensure that the order of the reactions is consistent so that\n // the reactions are not jumping around when new reactions are added.\n const sorted = Object.entries(grouped).sort(([nameA], [nameB]) => {\n const indexA = reactions.findIndex((r) => r.shortName === nameA)\n const indexB = reactions.findIndex((r) => r.shortName === nameB)\n\n return indexA - indexB\n })\n\n return sorted as [CommentReactionShortNames, CommentReactionItem[]][]\n}\n\nconst renderMenuButton = ({open, t}: {open: boolean; t: TFunction}) => {\n return (\n <UIButton fontSize={1} mode=\"ghost\" padding={0} radius=\"full\" selected={open}>\n <Flex paddingX={3} paddingY={2}>\n <Tooltip animate content={t('comments.reaction-bar-tooltip')} disabled={open}>\n <Text size={1}>\n <ReactionIcon />\n </Text>\n </Tooltip>\n </Flex>\n </UIButton>\n )\n}\n\ninterface CommentReactionsBarProps {\n currentUser: CurrentUser\n onSelect: (reaction: CommentReactionOption) => void\n reactions: CommentReactionItem[]\n readOnly?: boolean\n}\n\nexport const CommentReactionsBar = React.memo(function CommentReactionsBar(\n props: CommentReactionsBarProps,\n) {\n const {currentUser, onSelect, reactions, readOnly} = props\n\n const handleSelect = useCallback(\n (name: CommentReactionShortNames) => {\n const option = COMMENT_REACTION_OPTIONS.find((o) => o.shortName === name)\n\n if (option) {\n onSelect(option)\n }\n },\n [onSelect],\n )\n\n // The list of the current user's reactions, e.g. [':+1:', ':heart:']\n const currentUserReactionNames = useMemo(() => {\n return reactions.filter((r) => r.userId === currentUser?.id).map((r) => r.shortName)\n }, [currentUser?.id, reactions])\n\n // Reactions grouped by name, e.g. [ [':+1:', [{shortName: ':+1:', userId: 'user1'}] ] ]\n const groupedReactions = useMemo(() => {\n const grouped = groupReactionsByName(reactions)\n\n // Filter out reactions that are not in the `COMMENT_REACTION_EMOJIS` map.\n return grouped.filter(([name]) => COMMENT_REACTION_EMOJIS[name])\n }, [reactions])\n\n // An array of the initial order of the reactions. This is used to sort the reactions.\n // E.g. [':+1:', ':heart:']\n const sortOrder = useRef<string[]>(Object.keys(Object.fromEntries(groupedReactions)))\n\n // Sort the reactions based on the initial order to make sure that the reactions\n // are not jumping around when new reactions are added.\n const sortedReactions = useMemo(() => {\n const sorted = groupedReactions.sort(([nameA], [nameB]) => {\n const indexA = sortOrder.current.indexOf(nameA)\n const indexB = sortOrder.current.indexOf(nameB)\n\n if (indexA === -1) {\n return 1\n }\n\n if (indexB === -1) {\n return -1\n }\n\n return indexA - indexB\n })\n\n sortOrder.current = sorted.map(([name]) => name)\n\n return sorted\n }, [groupedReactions])\n\n return (\n <Flex align=\"center\" gap={1} wrap=\"wrap\">\n <TooltipDelayGroupProvider>\n {sortedReactions.map(([name, reactionsList]) => {\n const hasReacted = currentUserReactionNames.includes(name)\n const userIds = reactionsList.map((r) => r.userId)\n const emoji = COMMENT_REACTION_EMOJIS[name]\n\n return (\n <CommentReactionsUsersTooltip\n currentUser={currentUser}\n key={name}\n reactionName={name}\n userIds={userIds}\n >\n <TransparentCard tone=\"default\">\n <UIButton\n disabled={readOnly}\n mode=\"ghost\"\n // eslint-disable-next-line react/jsx-no-bind\n onClick={() => handleSelect(name)}\n padding={2}\n radius=\"full\"\n selected={hasReacted}\n tone={hasReacted ? 'primary' : 'default'}\n >\n <Flex align=\"center\" gap={1}>\n <EmojiText size={1}>{emoji}</EmojiText>\n\n <Text size={0} weight={hasReacted ? 'semibold' : 'medium'}>\n {reactionsList?.length}\n </Text>\n </Flex>\n </UIButton>\n </TransparentCard>\n </CommentReactionsUsersTooltip>\n )\n })}\n\n <TransparentCard tone=\"default\">\n <CommentReactionsMenuButton\n // eslint-disable-next-line react/jsx-no-bind\n onSelect={(o) => handleSelect(o.shortName)}\n options={COMMENT_REACTION_OPTIONS}\n readOnly={readOnly}\n renderMenuButton={renderMenuButton}\n />\n </TransparentCard>\n </TooltipDelayGroupProvider>\n </Flex>\n )\n})\n","import {CheckmarkCircleIcon, UndoIcon, EditIcon, TrashIcon, LinkIcon} from '@sanity/icons'\nimport {Card, Flex, Menu, MenuDivider} from '@sanity/ui'\nimport styled from 'styled-components'\nimport {\n Button,\n MenuButton,\n MenuButtonProps,\n MenuItem,\n TooltipDelayGroupProvider,\n} from '../../../../../ui-components'\nimport {CommentReactionOption, CommentStatus} from '../../types'\nimport {CommentReactionsMenuButton} from '../reactions'\nimport {COMMENT_REACTION_OPTIONS} from '../../constants'\nimport {ReactionIcon} from '../icons'\nimport {commentsLocaleNamespace} from '../../../i18n'\nimport {ContextMenuButton, TFunction, useTranslation} from 'sanity'\n\nconst renderMenuButton = ({open, t}: {open: boolean; t: TFunction}) => (\n <Button\n aria-label={t('comments.list-item-context-menu-add-reaction-aria-label')}\n icon={ReactionIcon}\n mode=\"bleed\"\n selected={open}\n tooltipProps={{content: t('comments.list-item-context-menu-add-reaction')}}\n />\n)\n\nconst POPOVER_PROPS: MenuButtonProps['popover'] = {\n placement: 'bottom-end',\n}\n\nconst FloatingCard = styled(Card)`\n &:empty {\n display: none;\n }\n`\n\ninterface CommentsListItemContextMenuProps {\n canDelete: boolean | undefined\n canEdit: boolean | undefined\n isParent: boolean | undefined\n onCopyLink?: () => void\n onDeleteStart?: () => void\n onEditStart?: () => void\n onMenuClose?: () => void\n onMenuOpen?: () => void\n onReactionSelect?: (option: CommentReactionOption) => void\n onStatusChange?: () => void\n readOnly?: boolean\n status: CommentStatus\n}\n\nexport function CommentsListItemContextMenu(props: CommentsListItemContextMenuProps) {\n const {\n canDelete,\n canEdit,\n isParent,\n onCopyLink,\n onDeleteStart,\n onEditStart,\n onMenuClose,\n onMenuOpen,\n onReactionSelect,\n onStatusChange,\n readOnly,\n status,\n } = props\n\n const showMenuButton = Boolean(onCopyLink || onDeleteStart || onEditStart)\n\n const {t} = useTranslation(commentsLocaleNamespace)\n\n return (\n <TooltipDelayGroupProvider>\n <Flex>\n <FloatingCard display=\"flex\" shadow={2} padding={1} radius={2} sizing=\"border\">\n {onReactionSelect && (\n <CommentReactionsMenuButton\n onMenuClose={onMenuClose}\n onMenuOpen={onMenuOpen}\n onSelect={onReactionSelect}\n options={COMMENT_REACTION_OPTIONS}\n readOnly={readOnly}\n renderMenuButton={renderMenuButton}\n />\n )}\n\n {isParent && (\n <Button\n aria-label={\n status === 'open'\n ? t('comments.list-item-resolved-tooltip-aria-label')\n : t('comments.list-item-re-open-resolved-aria-label')\n }\n disabled={readOnly}\n icon={status === 'open' ? CheckmarkCircleIcon : UndoIcon}\n mode=\"bleed\"\n onClick={onStatusChange}\n tooltipProps={{\n content:\n status === 'open'\n ? t('comments.list-item-resolved-tooltip-content')\n : t('comments.list-item-re-open-resolved'),\n }}\n />\n )}\n\n <MenuButton\n id=\"comment-actions-menu\"\n button={\n <ContextMenuButton\n aria-label={t('comments.list-item-open-menu-aria-label')}\n disabled={readOnly}\n hidden={!showMenuButton}\n />\n }\n onOpen={onMenuOpen}\n onClose={onMenuClose}\n menu={\n <Menu>\n <MenuItem\n hidden={!canEdit}\n icon={EditIcon}\n onClick={onEditStart}\n text={t('comments.list-item-edit-comment')}\n />\n\n <MenuItem\n hidden={!canDelete}\n icon={TrashIcon}\n onClick={onDeleteStart}\n text={t('comments.list-item-delete-comment')}\n tone=\"critical\"\n />\n\n <MenuDivider hidden={!canDelete && !canEdit} />\n\n <MenuItem\n hidden={!onCopyLink}\n icon={LinkIcon}\n onClick={onCopyLink}\n text={t('comments.list-item-copy-link')}\n />\n </Menu>\n }\n popover={POPOVER_PROPS}\n />\n </FloatingCard>\n </Flex>\n </TooltipDelayGroupProvider>\n )\n}\n","import {hues} from '@sanity/color'\nimport {TextSkeleton, Flex, Stack, Text, Card, useClickOutside, Box} from '@sanity/ui'\nimport React, {useCallback, useMemo, useRef, useState} from 'react'\nimport {CurrentUser} from '@sanity/types'\nimport styled, {css} from 'styled-components'\nimport {format} from 'date-fns'\nimport {CommentMessageSerializer} from '../pte'\nimport {CommentInput, CommentInputHandle} from '../pte/comment-input'\nimport {\n CommentDocument,\n CommentEditPayload,\n CommentMessage,\n CommentReactionOption,\n CommentStatus,\n MentionOptionsHookValue,\n} from '../../types'\nimport {FLEX_GAP} from '../constants'\nimport {hasCommentMessageValue, useCommentHasChanged} from '../../helpers'\nimport {AVATAR_HEIGHT, CommentsAvatar, SpacerAvatar} from '../avatars'\nimport {CommentReactionsBar} from '../reactions'\nimport {commentsLocaleNamespace} from '../../../i18n'\nimport {CommentsListItemContextMenu} from './CommentsListItemContextMenu'\nimport {TimeAgoOpts, useTimeAgo, useUser, useDidUpdate, useTranslation} from 'sanity'\n\nconst stopPropagation = (e: React.MouseEvent<HTMLDivElement>) => e.stopPropagation()\n\nconst ContextMenuBox = styled(Box)``\n\nconst SKELETON_INLINE_STYLE: React.CSSProperties = {width: '50%'}\n\nconst EMPTY_ARRAY: [] = []\n\nconst TimeText = styled(Text)(({theme}) => {\n const isDark = theme.sanity.color.dark\n const fg = hues.gray[isDark ? 200 : 800].hex\n\n return css`\n min-width: max-content;\n --card-fg-color: ${fg};\n color: var(--card-fg-color);\n `\n})\n\nconst InnerStack = styled(Stack)`\n transition: opacity 200ms ease;\n\n &[data-muted='true'] {\n transition: unset;\n opacity: 0.5;\n }\n`\n\nconst ErrorFlex = styled(Flex)`\n min-height: ${AVATAR_HEIGHT}px;\n`\n\nconst RetryCardButton = styled(Card)`\n // Add not on hover\n &:not(:hover) {\n background-color: transparent;\n }\n`\n\nconst RootStack = styled(Stack)(({theme}) => {\n const {space} = theme.sanity\n\n return css`\n position: relative;\n\n // Only show the floating layer on hover when hover is supported.\n // Else, the layer is always visible.\n @media (hover: hover) {\n ${ContextMenuBox} {\n opacity: 0;\n position: absolute;\n right: 0;\n top: 0;\n transform: translate(${space[1]}px, -${space[1]}px);\n }\n\n ${ContextMenuBox} {\n &:focus-within {\n opacity: 1;\n }\n }\n\n &:hover {\n ${ContextMenuBox} {\n opacity: 1;\n }\n }\n }\n\n &[data-menu-open='true'] {\n ${ContextMenuBox} {\n opacity: 1;\n }\n }\n `\n})\n\ninterface CommentsListItemLayoutProps {\n canDelete?: boolean\n canEdit?: boolean\n comment: CommentDocument\n currentUser: CurrentUser\n hasError?: boolean\n isParent?: boolean\n isRetrying?: boolean\n mentionOptions: MentionOptionsHookValue\n onCopyLink?: (id: string) => void\n onCreateRetry?: (id: string) => void\n onDelete: (id: string) => void\n onEdit: (id: string, message: CommentEditPayload) => void\n onInputKeyDown?: (event: React.KeyboardEvent<Element>) => void\n onReactionSelect?: (id: string, reaction: CommentReactionOption) => void\n onStatusChange?: (id: string, status: CommentStatus) => void\n readOnly?: boolean\n}\n\nconst TIME_AGO_OPTS: TimeAgoOpts = {agoSuffix: true}\n\nexport function CommentsListItemLayout(props: CommentsListItemLayoutProps) {\n const {\n canDelete,\n canEdit,\n comment,\n currentUser,\n hasError,\n isParent,\n isRetrying,\n mentionOptions,\n onCopyLink,\n onCreateRetry,\n onDelete,\n onEdit,\n onInputKeyDown,\n onReactionSelect,\n onStatusChange,\n readOnly,\n } = props\n const {_createdAt, authorId, message, _id, lastEditedAt} = comment\n const [user] = useUser(authorId)\n const {t} = useTranslation(commentsLocaleNamespace)\n\n const [value, setValue] = useState<CommentMessage>(message)\n const [isEditing, setIsEditing] = useState<boolean>(false)\n const [rootElement, setRootElement] = useState<HTMLDivElement | null>(null)\n const startMessage = useRef<CommentMessage>(message)\n const [menuOpen, setMenuOpen] = useState<boolean>(false)\n\n const hasChanges = useCommentHasChanged(value)\n const hasValue = useMemo(() => hasCommentMessageValue(value), [value])\n\n // Filter out reactions that's been optimistically removed from the comment.\n const reactions = useMemo(\n () =>\n (comment?.reactions?.filter((r) => r?._optimisticState !== 'removed') || EMPTY_ARRAY).filter(\n (r) => {\n // Filter out reactions that might have to incorrect format\n return 'userId' in r && 'shortName' in r\n },\n ),\n [comment?.reactions],\n )\n\n const hasReactions = Boolean(reactions?.length)\n\n const commentInputRef = useRef<CommentInputHandle>(null)\n\n const createdDate = _createdAt ? new Date(_createdAt) : new Date()\n const createdTimeAgo = useTimeAgo(createdDate, TIME_AGO_OPTS)\n const formattedCreatedAt = format(createdDate, 'PPPPp')\n\n const formattedLastEditAt = lastEditedAt ? format(new Date(lastEditedAt), 'PPPPp') : null\n const displayError = hasError || isRetrying\n\n const handleMenuOpen = useCallback(() => setMenuOpen(true), [])\n const handleMenuClose = useCallback(() => setMenuOpen(false), [])\n const handleCopyLink = useCallback(() => onCopyLink?.(_id), [_id, onCopyLink])\n const handleCreateRetry = useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n e.stopPropagation()\n onCreateRetry?.(_id)\n },\n [_id, onCreateRetry],\n )\n const handleDelete = useCallback(() => onDelete(_id), [_id, onDelete])\n\n const cancelEdit = useCallback(() => {\n setIsEditing(false)\n setValue(startMessage.current)\n }, [])\n\n const startDiscard = useCallback(() => {\n if (!hasValue || !hasChanges) {\n cancelEdit()\n return\n }\n commentInputRef.current?.discardDialogController.open()\n }, [cancelEdit, hasChanges, hasValue])\n\n const handleInputKeyDown = useCallback(\n (event: React.KeyboardEvent<Element>) => {\n // Don't act if the input already prevented this event\n if (event.isDefaultPrevented()) {\n return\n }\n // Discard the input text\n if (event.key === 'Escape') {\n event.preventDefault()\n event.stopPropagation()\n startDiscard()\n }\n // Call parent handler\n if (onInputKeyDown) onInputKeyDown(event)\n },\n [onInputKeyDown, startDiscard],\n )\n\n const cancelDiscard = useCallback(() => {\n commentInputRef.current?.discardDialogController.close()\n }, [])\n\n const confirmDiscard = useCallback(() => {\n commentInputRef.current?.discardDialogController.close()\n cancelEdit()\n }, [cancelEdit])\n\n const handleReactionSelect = useCallback(\n (reaction: CommentReactionOption) => {\n onReactionSelect?.(_id, reaction)\n },\n [_id, onReactionSelect],\n )\n\n const handleEditSubmit = useCallback(() => {\n onEdit(_id, {message: value})\n setIsEditing(false)\n }, [_id, onEdit, value])\n\n const handleOpenStatusChange = useCallback(() => {\n onStatusChange?.(_id, comment.status === 'open' ? 'resolved' : 'open')\n }, [_id, comment.status, onStatusChange])\n\n const toggleEdit = useCallback(() => {\n setIsEditing((v) => !v)\n }, [])\n\n const handleCloseMenu = useCallback(() => setMenuOpen(false), [])\n\n const handleClickOutside = useCallback(() => {\n if (!hasChanges) {\n cancelEdit()\n }\n }, [cancelEdit, hasChanges])\n\n const handleRootKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Escape' && !hasChanges) {\n cancelEdit()\n }\n },\n [cancelEdit, hasChanges],\n )\n\n useDidUpdate(isEditing, handleCloseMenu)\n\n useClickOutside(handleClickOutside, [rootElement])\n\n const name = user?.displayName ? (\n <Text size={1} weight=\"medium\" textOverflow=\"ellipsis\" title={user.displayName}>\n {user.displayName}\n </Text>\n ) : (\n <TextSkeleton size={1} style={SKELETON_INLINE_STYLE} />\n )\n\n return (\n <RootStack\n data-menu-open={menuOpen ? 'true' : 'false'}\n onKeyDown={handleRootKeyDown}\n ref={setRootElement}\n space={4}\n >\n <InnerStack space={1} data-muted={displayError}>\n <Flex align=\"center\" gap={FLEX_GAP} flex={1}>\n <CommentsAvatar user={user} />\n\n <Flex align=\"center\" paddingBottom={1} sizing=\"border\" flex={1}>\n <Flex align=\"flex-end\" gap={2}>\n <Box flex={1}>{name}</Box>\n\n {!displayError && (\n <Flex align=\"center\" gap={1}>\n <TimeText muted size={0} title={formattedCreatedAt}>\n {createdTimeAgo}\n </TimeText>\n\n {formattedLastEditAt && (\n <TimeText muted size={0} title={formattedLastEditAt}>\n ({t('comments.list-item-layout-edited')})\n </TimeText>\n )}\n </Flex>\n )}\n </Flex>\n </Flex>\n\n {!isEditing && !displayError && (\n <ContextMenuBox data-root-menu={isParent ? 'true' : 'false'} onClick={stopPropagation}>\n <CommentsListItemContextMenu\n canDelete={canDelete}\n canEdit={canEdit}\n isParent={isParent}\n onCopyLink={handleCopyLink}\n onDeleteStart={handleDelete}\n onEditStart={toggleEdit}\n onMenuClose={handleMenuClose}\n onMenuOpen={handleMenuOpen}\n onReactionSelect={handleReactionSelect}\n onStatusChange={handleOpenStatusChange}\n readOnly={readOnly}\n status={comment.status}\n />\n </ContextMenuBox>\n )}\n </Flex>\n\n {isEditing && (\n <Flex align=\"flex-start\" gap={2}>\n <SpacerAvatar />\n\n <Stack flex={1}>\n <CommentInput\n currentUser={currentUser}\n focusOnMount\n mentionOptions={mentionOptions}\n onChange={setValue}\n onDiscardCancel={cancelDiscard}\n onDiscardConfirm={confirmDiscard}\n onKeyDown={handleInputKeyDown}\n onSubmit={handleEditSubmit}\n readOnly={readOnly}\n ref={commentInputRef}\n value={value}\n withAvatar={false}\n />\n </Stack>\n </Flex>\n )}\n\n {!isEditing && (\n <Flex gap={FLEX_GAP}>\n <SpacerAvatar />\n\n <CommentMessageSerializer blocks={message} />\n </Flex>\n )}\n\n {hasReactions && (\n <Flex gap={FLEX_GAP} marginTop={2}>\n <SpacerAvatar />\n\n <Box onClick={stopPropagation}>\n <CommentReactionsBar\n currentUser={currentUser}\n onSelect={handleReactionSelect}\n reactions={reactions}\n readOnly={readOnly}\n />\n </Box>\n </Flex>\n )}\n </InnerStack>\n\n {displayError && (\n <ErrorFlex gap={FLEX_GAP}>\n <SpacerAvatar />\n\n <Flex align=\"center\" gap={1} flex={1}>\n <Text muted size={1}>\n {hasError && t('comments.list-item-layout-failed-sent')}\n {isRetrying && t('comments.list-item-layout-posting')}\n </Text>\n\n <Flex hidden={isRetrying}>\n <RetryCardButton\n __unstable_focusRing\n display=\"flex\"\n forwardedAs=\"button\"\n onClick={handleCreateRetry}\n padding={1}\n radius={2}\n tone=\"primary\"\n >\n <Text size={1} muted>\n {t('comments.list-item-layout-retry')}\n </Text>\n </RetryCardButton>\n </Flex>\n </Flex>\n </ErrorFlex>\n )}\n </RootStack>\n )\n}\n","import {Card, CardProps} from '@sanity/ui'\nimport styled from 'styled-components'\n\nexport const ThreadCard = styled(Card).attrs<CardProps>(({tone}) => ({\n padding: 3,\n radius: 3,\n sizing: 'border',\n tone: tone || 'transparent',\n}))<CardProps>`\n // ...\n`\n","import React, {useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {Flex, Stack, useLayer} from '@sanity/ui'\nimport styled, {css} from 'styled-components'\nimport {CurrentUser} from '@sanity/types'\nimport {ChevronDownIcon} from '@sanity/icons'\nimport {CommentInput, CommentInputHandle} from '../pte'\nimport {\n CommentCreatePayload,\n CommentDocument,\n CommentEditPayload,\n CommentMessage,\n CommentReactionOption,\n CommentStatus,\n MentionOptionsHookValue,\n} from '../../types'\nimport {SpacerAvatar} from '../avatars'\nimport {hasCommentMessageValue} from '../../helpers'\nimport {CommentsSelectedPath} from '../../context'\nimport {Button} from '../../../../../ui-components'\nimport {commentsLocaleNamespace} from '../../../i18n'\nimport {CommentsListItemLayout} from './CommentsListItemLayout'\nimport {ThreadCard} from './styles'\nimport {useTranslation} from 'sanity'\n\nconst EMPTY_ARRAY: [] = []\n\nconst MAX_COLLAPSED_REPLIES = 5\n\n// data-active = when the comment is selected\n// data-hovered = when the mouse is over the comment\nconst StyledThreadCard = styled(ThreadCard)(({theme}) => {\n const {hovered} = theme.sanity.color.button.bleed.default\n\n return css`\n position: relative;\n\n &:has(> [data-ui='GhostButton']:focus:focus-visible) {\n box-shadow:\n inset 0 0 0 1px var(--card-border-color),\n 0 0 0 1px var(--card-bg-color),\n 0 0 0 2px var(--card-focus-ring-color);\n }\n\n // When the comment is not selected, we want to apply hover styles.\n // The hover styles is managed with the [data-hovered] attribute instead of the :hover pseudo class\n // since we want to show the hover styles when hovering over the menu items in the context menu as well.\n // The context menu is rendered using a portal, so the :hover pseudo class won't work when hovering over\n // the menu items.\n &:not([data-active='true']) {\n @media (hover: hover) {\n &[data-hovered='true'] {\n --card-bg-color: ${hovered.bg2};\n\n [data-root-menu='true'] {\n opacity: 1;\n }\n }\n }\n }\n `\n})\n\nconst ExpandButton = styled(Button)(({theme}) => {\n const {medium} = theme.sanity.fonts.text.weights\n\n return css`\n font-weight: ${medium};\n `\n})\n\nconst GhostButton = styled.button`\n opacity: 0;\n position: absolute;\n right: 0;\n top: 0;\n bottom: 0;\n left: 0;\n`\n\ninterface CommentsListItemProps {\n canReply?: boolean\n currentUser: CurrentUser\n isSelected: boolean\n mentionOptions: MentionOptionsHookValue\n onCopyLink?: (id: string) => void\n onCreateRetry: (id: string) => void\n onDelete: (id: string) => void\n onEdit: (id: string, payload: CommentEditPayload) => void\n onKeyDown?: (event: React.KeyboardEvent<Element>) => void\n onPathSelect?: (nextPath: CommentsSelectedPath) => void\n onReactionSelect?: (id: string, reaction: CommentReactionOption) => void\n onReply: (payload: CommentCreatePayload) => void\n onStatusChange?: (id: string, status: CommentStatus) => void\n parentComment: CommentDocument\n readOnly?: boolean\n replies: CommentDocument[] | undefined\n}\n\nexport const CommentsListItem = React.memo(function CommentsListItem(props: CommentsListItemProps) {\n const {\n canReply,\n currentUser,\n isSelected,\n mentionOptions,\n onCopyLink,\n onCreateRetry,\n onDelete,\n onEdit,\n onKeyDown,\n onPathSelect,\n onReactionSelect,\n onReply,\n onStatusChange,\n parentComment,\n readOnly,\n replies = EMPTY_ARRAY,\n } = props\n const {t} = useTranslation(commentsLocaleNamespace)\n const [value, setValue] = useState<CommentMessage>(EMPTY_ARRAY)\n const [collapsed, setCollapsed] = useState<boolean>(true)\n const didExpand = useRef<boolean>(false)\n const replyInputRef = useRef<CommentInputHandle>(null)\n\n const {isTopLayer} = useLayer()\n\n const hasValue = useMemo(() => hasCommentMessageValue(value), [value])\n\n const [mouseOver, setMouseOver] = useState<boolean>(false)\n\n const handleMouseEnter = useCallback(() => setMouseOver(true), [])\n const handleMouseLeave = useCallback(() => setMouseOver(false), [])\n\n const handleReplySubmit = useCallback(() => {\n const nextComment: CommentCreatePayload = {\n fieldPath: parentComment.target.path.field,\n message: value,\n parentCommentId: parentComment._id,\n status: parentComment?.status || 'open',\n // Since this is a reply to an existing comment, we use the same thread ID as the parent\n threadId: parentComment.threadId,\n // A new comment will not have any reactions\n reactions: EMPTY_ARRAY,\n }\n\n onReply?.(nextComment)\n setValue(EMPTY_ARRAY)\n }, [\n onReply,\n parentComment._id,\n parentComment?.status,\n parentComment.target.path.field,\n parentComment.threadId,\n value,\n ])\n\n const startDiscard = useCallback(() => {\n if (!hasValue) {\n setValue(EMPTY_ARRAY)\n return\n }\n\n replyInputRef.current?.discardDialogController.open()\n }, [hasValue])\n\n const handleInputKeyDown = useCallback(\n (event: React.KeyboardEvent<Element>) => {\n // Don't act if the input already prevented this event\n if (event.isDefaultPrevented()) {\n return\n }\n // Discard input text with Escape\n if (event.key === 'Escape') {\n event.preventDefault()\n event.stopPropagation()\n startDiscard()\n }\n },\n [startDiscard],\n )\n\n const cancelDiscard = useCallback(() => {\n replyInputRef.current?.discardDialogController.close()\n }, [])\n\n const confirmDiscard = useCallback(() => {\n setValue(EMPTY_ARRAY)\n replyInputRef.current?.discardDialogController.close()\n replyInputRef.current?.focus()\n }, [])\n\n const handleThreadRootClick = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n e.stopPropagation()\n\n // Don't act if the click was caused by clicking\n // outside e.g. a popover or a menu\n if (!isTopLayer) return\n\n onPathSelect?.({\n fieldPath: parentComment.target.path.field,\n origin: 'inspector',\n threadId: parentComment.threadId,\n })\n },\n [isTopLayer, onPathSelect, parentComment.target.path.field, parentComment.threadId],\n )\n\n const handleExpand = useCallback((e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation()\n setCollapsed(false)\n didExpand.current = true\n }, [])\n\n const splicedReplies = useMemo(() => {\n if (collapsed) return replies?.slice(-MAX_COLLAPSED_REPLIES)\n return replies\n }, [replies, collapsed])\n\n const showCollapseButton = useMemo(() => {\n if (!replies) return false\n return replies.length > MAX_COLLAPSED_REPLIES\n }, [replies])\n\n const expandButtonText = useMemo(() => {\n return `${replies?.length - MAX_COLLAPSED_REPLIES} more ${\n replies?.length - MAX_COLLAPSED_REPLIES === 1 ? 'comment' : 'comments'\n }`\n }, [replies?.length])\n\n useEffect(() => {\n if (replies.length > MAX_COLLAPSED_REPLIES && !didExpand.current) {\n setCollapsed(true)\n }\n }, [replies])\n\n const renderedReplies = useMemo(\n () =>\n splicedReplies.map((reply) => (\n <Stack as=\"li\" key={reply._id} data-comment-id={reply._id}>\n <CommentsListItemLayout\n canDelete={reply.authorId === currentUser.id}\n canEdit={reply.authorId === currentUser.id}\n comment={reply}\n currentUser={currentUser}\n hasError={reply._state?.type === 'createError'}\n isRetrying={reply._state?.type === 'createRetrying'}\n mentionOptions={mentionOptions}\n onCopyLink={onCopyLink}\n onCreateRetry={onCreateRetry}\n onDelete={onDelete}\n onEdit={onEdit}\n onInputKeyDown={handleInputKeyDown}\n onReactionSelect={onReactionSelect}\n readOnly={readOnly}\n />\n </Stack>\n )),\n [\n currentUser,\n handleInputKeyDown,\n mentionOptions,\n onCopyLink,\n onCreateRetry,\n onDelete,\n onEdit,\n onReactionSelect,\n readOnly,\n splicedReplies,\n ],\n )\n\n return (\n <Stack space={2}>\n <StyledThreadCard\n data-active={isSelected ? 'true' : 'false'}\n data-hovered={mouseOver ? 'true' : 'false'}\n onClick={handleThreadRootClick}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n tone={isSelected ? 'caution' : undefined}\n >\n <GhostButton\n data-ui=\"GhostButton\"\n aria-label={t('comments.button-go-to-field-aria-label')}\n />\n\n <Stack\n as=\"ul\"\n // Add some extra padding to the bottom if there is no reply input.\n // This is to make the UI look more balanced.\n paddingBottom={canReply ? undefined : 1}\n space={4}\n >\n <Stack as=\"li\" data-comment-id={parentComment._id}>\n <CommentsListItemLayout\n canDelete={parentComment.authorId === currentUser.id}\n canEdit={parentComment.authorId === currentUser.id}\n comment={parentComment}\n currentUser={currentUser}\n hasError={parentComment._state?.type === 'createError'}\n isParent\n isRetrying={parentComment._state?.type === 'createRetrying'}\n mentionOptions={mentionOptions}\n onCopyLink={onCopyLink}\n onCreateRetry={onCreateRetry}\n onDelete={onDelete}\n onEdit={onEdit}\n onInputKeyDown={onKeyDown}\n onReactionSelect={onReactionSelect}\n onStatusChange={onStatusChange}\n readOnly={readOnly}\n />\n </Stack>\n\n {showCollapseButton && !didExpand.current && (\n <Flex gap={1} paddingY={1} sizing=\"border\">\n <SpacerAvatar />\n\n <ExpandButton\n iconRight={ChevronDownIcon}\n mode=\"bleed\"\n onClick={handleExpand}\n text={expandButtonText}\n />\n </Flex>\n )}\n\n {renderedReplies}\n\n {canReply && (\n <CommentInput\n currentUser={currentUser}\n expandOnFocus\n mentionOptions={mentionOptions}\n onChange={setValue}\n onDiscardCancel={cancelDiscard}\n onDiscardConfirm={confirmDiscard}\n onKeyDown={handleInputKeyDown}\n onSubmit={handleReplySubmit}\n placeholder={t('comments.placeholder-reply')}\n readOnly={readOnly}\n ref={replyInputRef}\n value={value}\n />\n )}\n </Stack>\n </StyledThreadCard>\n </Stack>\n )\n})\n","import {ChevronRightIcon} from '@sanity/icons'\nimport {Box, Flex, Stack, Text} from '@sanity/ui'\nimport React, {Fragment, useMemo} from 'react'\nimport {Tooltip} from '../../../../ui-components'\n\nexport interface CommentBreadcrumbsProps {\n titlePath: string[]\n maxLength: number\n}\n\ntype Item = string | string[]\n\nconst separator = (\n <Text muted>\n <ChevronRightIcon />\n </Text>\n)\n\nconst renderItem = (item: string, index: number) => {\n return (\n <Box as=\"li\" key={`${item}-${index}`}>\n <Text textOverflow=\"ellipsis\" size={1} weight=\"medium\">\n {item}\n </Text>\n </Box>\n )\n}\n\nexport function CommentBreadcrumbs(props: CommentBreadcrumbsProps) {\n const {titlePath, maxLength} = props\n\n const items: Item[] = useMemo(() => {\n const len = titlePath.length\n const beforeLength = Math.ceil(maxLength / 2)\n const afterLength = Math.floor(maxLength / 2)\n\n if (maxLength && len > maxLength) {\n return [\n ...titlePath.slice(0, beforeLength - 1),\n titlePath.slice(beforeLength - 1, len - afterLength),\n ...titlePath.slice(len - afterLength),\n ]\n }\n\n return titlePath\n }, [maxLength, titlePath])\n\n const nodes = useMemo(() => {\n return items.map((item, index) => {\n const key = `${item}-${index}`\n const showSeparator = index < items.length - 1\n\n if (Array.isArray(item)) {\n return (\n <Fragment key={key}>\n <Tooltip\n content={\n <Stack space={2} padding={2}>\n {item.map(renderItem)}\n </Stack>\n }\n >\n <Box>{renderItem('...', index)}</Box>\n </Tooltip>\n\n {showSeparator && separator}\n </Fragment>\n )\n }\n\n return (\n <Fragment key={key}>\n {renderItem(item, index)}\n\n {showSeparator && separator}\n </Fragment>\n )\n })\n }, [items])\n\n return (\n <Flex align=\"center\" as=\"ol\" gap={2}>\n {nodes}\n </Flex>\n )\n}\n","import type {CurrentUser} from '@sanity/types'\nimport React, {useState, useCallback, useRef, useMemo} from 'react'\nimport type {CommentMessage, MentionOptionsHookValue} from '../../types'\nimport {CommentInput, CommentInputHandle, CommentInputProps} from '../pte'\nimport {commentsLocaleNamespace} from '../../../i18n'\nimport {hasCommentMessageValue} from '../../helpers'\nimport {EMPTY_ARRAY, Translate, useTranslation} from 'sanity'\n\ninterface CreateNewThreadInputProps {\n currentUser: CurrentUser\n fieldName: string\n mentionOptions: MentionOptionsHookValue\n onBlur?: CommentInputProps['onBlur']\n onFocus?: CommentInputProps['onFocus']\n onKeyDown?: (event: React.KeyboardEvent<Element>) => void\n onNewThreadCreate: (payload: CommentMessage) => void\n readOnly?: boolean\n}\n\nexport function CreateNewThreadInput(props: CreateNewThreadInputProps) {\n const {\n currentUser,\n fieldName,\n mentionOptions,\n onBlur,\n onFocus,\n onKeyDown,\n onNewThreadCreate,\n readOnly,\n } = props\n const {t} = useTranslation(commentsLocaleNamespace)\n\n const [value, setValue] = useState<CommentMessage>(EMPTY_ARRAY)\n const commentInputHandle = useRef<CommentInputHandle | null>(null)\n\n const handleSubmit = useCallback(() => {\n onNewThreadCreate?.(value)\n setValue(EMPTY_ARRAY)\n }, [onNewThreadCreate, value])\n\n const hasValue = useMemo(() => hasCommentMessageValue(value), [value])\n\n const startDiscard = useCallback(() => {\n if (!hasValue) {\n return\n }\n commentInputHandle.current?.discardDialogController.open()\n }, [hasValue])\n\n const handleInputKeyDown = useCallback(\n (event: React.KeyboardEvent<Element>) => {\n // Don't act if the input already prevented this event\n if (event.isDefaultPrevented()) {\n return\n }\n // Discard the input text\n if (event.key === 'Escape') {\n event.preventDefault()\n event.stopPropagation()\n startDiscard()\n }\n // Call parent handler\n if (onKeyDown) onKeyDown(event)\n },\n [onKeyDown, startDiscard],\n )\n\n const confirmDiscard = useCallback(() => {\n setValue(EMPTY_ARRAY)\n commentInputHandle.current?.discardDialogController.close()\n commentInputHandle.current?.focus()\n }, [])\n\n const cancelDiscard = useCallback(() => {\n commentInputHandle.current?.discardDialogController.close()\n }, [])\n\n const placeholder = (\n <Translate\n t={t}\n i18nKey=\"comments.placeholder-create-thread\"\n components={{Strong: () => <b>{fieldName}</b>}}\n />\n )\n\n return (\n <CommentInput\n currentUser={currentUser}\n expandOnFocus\n mentionOptions={mentionOptions}\n onBlur={onBlur}\n onChange={setValue}\n onDiscardCancel={cancelDiscard}\n onDiscardConfirm={confirmDiscard}\n onKeyDown={handleInputKeyDown}\n onFocus={onFocus}\n onSubmit={handleSubmit}\n placeholder={placeholder}\n readOnly={readOnly}\n ref={commentInputHandle}\n value={value}\n />\n )\n}\n","import {CurrentUser} from '@sanity/types'\nimport {\n Flex,\n Stack,\n // eslint-disable-next-line no-restricted-imports\n Button, // Button with specific styling and children behavior.\n} from '@sanity/ui'\nimport React, {useCallback, useMemo} from 'react'\nimport {uuid} from '@sanity/uuid'\nimport styled, {css} from 'styled-components'\nimport {\n CommentMessage,\n CommentCreatePayload,\n MentionOptionsHookValue,\n CommentListBreadcrumbs,\n} from '../../types'\nimport {CommentBreadcrumbs} from '../CommentBreadcrumbs'\nimport {CommentsSelectedPath} from '../../context'\nimport {commentsLocaleNamespace} from '../../../i18n'\nimport {CreateNewThreadInput} from './CreateNewThreadInput'\nimport {ThreadCard} from './styles'\nimport {useTranslation} from 'sanity'\n\nconst HeaderFlex = styled(Flex)`\n min-height: 25px;\n`\n\nconst BreadcrumbsButton = styled(Button)(({theme}) => {\n const fg = theme.sanity.color.base.fg\n return css`\n --card-fg-color: ${fg};\n\n // The width is needed to make the text ellipsis work\n // in the breadcrumbs component\n max-width: 100%;\n `\n})\n\ninterface CommentThreadLayoutProps {\n breadcrumbs?: CommentListBreadcrumbs\n canCreateNewThread: boolean\n children: React.ReactNode\n currentUser: CurrentUser\n fieldPath: string\n isSelected: boolean\n mentionOptions: MentionOptionsHookValue\n onNewThreadCreate: (payload: CommentCreatePayload) => void\n onPathSelect?: (nextPath: CommentsSelectedPath) => void\n readOnly?: boolean\n}\n\nexport function CommentThreadLayout(props: CommentThreadLayoutProps) {\n const {\n breadcrumbs,\n canCreateNewThread,\n children,\n currentUser,\n fieldPath,\n isSelected,\n mentionOptions,\n onNewThreadCreate,\n onPathSelect,\n readOnly,\n } = props\n\n const {t} = useTranslation(commentsLocaleNamespace)\n\n const handleNewThreadCreate = useCallback(\n (payload: CommentMessage) => {\n const nextComment: CommentCreatePayload = {\n fieldPath,\n message: payload,\n parentCommentId: undefined,\n status: 'open',\n // Since this is a new comment, we generate a new thread ID\n threadId: uuid(),\n // New comments have no reactions\n reactions: [],\n }\n\n onNewThreadCreate?.(nextComment)\n },\n [onNewThreadCreate, fieldPath],\n )\n\n const handleBreadcrumbsClick = useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation()\n\n onPathSelect?.({\n fieldPath,\n origin: 'inspector',\n threadId: null,\n })\n },\n [fieldPath, onPathSelect],\n )\n\n const handleNewThreadClick = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n e.stopPropagation()\n // Skip if the click was triggered from \"Enter\" keydown.\n // This because we don't want to trigger `onPathSelect` when\n // submitting the new thread form.\n if (e.detail === 0) return\n\n onPathSelect?.({\n fieldPath,\n origin: 'inspector',\n threadId: null,\n })\n },\n [fieldPath, onPathSelect],\n )\n\n const crumbsTitlePath = useMemo(() => breadcrumbs?.map((p) => p.title) || [], [breadcrumbs])\n const lastCrumb = crumbsTitlePath[crumbsTitlePath.length - 1]\n\n return (\n <Stack space={2}>\n <HeaderFlex align=\"center\" gap={2} paddingRight={1} sizing=\"border\">\n <Stack flex={1}>\n <Flex align=\"center\">\n <BreadcrumbsButton\n aria-label={t('comments.thread-breadcrumb-layout-aria-label', {lastCrumb: lastCrumb})}\n mode=\"bleed\"\n onClick={handleBreadcrumbsClick}\n padding={2}\n space={2}\n >\n <CommentBreadcrumbs maxLength={3} titlePath={crumbsTitlePath} />\n </BreadcrumbsButton>\n </Flex>\n </Stack>\n </HeaderFlex>\n\n {canCreateNewThread && (\n <ThreadCard onClick={handleNewThreadClick} tone={isSelected ? 'caution' : undefined}>\n <CreateNewThreadInput\n currentUser={currentUser}\n fieldName={lastCrumb}\n mentionOptions={mentionOptions}\n onNewThreadCreate={handleNewThreadCreate}\n readOnly={readOnly}\n />\n </ThreadCard>\n )}\n\n <Stack space={2}>{children}</Stack>\n </Stack>\n )\n}\n","import {Flex, Container, Stack, Text} from '@sanity/ui'\nimport React from 'react'\nimport {commentsLocaleNamespace} from '../../../i18n'\nimport {CommentStatus} from '../../types'\nimport {LoadingBlock, TFunction, useTranslation} from 'sanity'\n\ninterface EmptyStateMessage {\n title: string\n message: React.ReactNode\n}\n\nexport function getEmptyStateMessages(t: TFunction): Record<CommentStatus, EmptyStateMessage> {\n return {\n open: {\n title: t('comments.list-status-empty-state-open-title'),\n message: t('comments.list-status-empty-state-open-text'),\n },\n resolved: {\n title: t('comments.list-status-empty-state-resolved-title'),\n message: t('comments.list-status-empty-state-resolved-text'),\n },\n }\n}\n\ninterface CommentsListStatusProps {\n error: Error | null\n hasNoComments: boolean\n loading: boolean\n status: CommentStatus\n}\n\nexport function CommentsListStatus(props: CommentsListStatusProps) {\n const {status, error, loading, hasNoComments} = props\n const {t} = useTranslation(commentsLocaleNamespace)\n const emptyStateMessages = getEmptyStateMessages(t)\n\n if (error) {\n return (\n <Flex align=\"center\" justify=\"center\" flex={1} padding={4}>\n <Flex align=\"center\">\n <Text size={1} muted>\n {t('comments.list-status-error')}\n </Text>\n </Flex>\n </Flex>\n )\n }\n\n if (loading) {\n return <LoadingBlock showText title={t('comments.list-status-loading')} />\n }\n\n if (hasNoComments) {\n return (\n <Flex align=\"center\" justify=\"center\" flex={1} sizing=\"border\">\n <Container width={0} padding={4}>\n <Stack space={3}>\n <Text align=\"center\" size={1} muted weight=\"medium\">\n {emptyStateMessages[status].title}\n </Text>\n\n <Text align=\"center\" size={1} muted>\n {emptyStateMessages[status].message}\n </Text>\n </Stack>\n </Container>\n </Flex>\n )\n }\n\n return null\n}\n","import React, {forwardRef, useCallback, useImperativeHandle, useMemo, useState} from 'react'\nimport {BoundaryElementProvider, Flex, Stack} from '@sanity/ui'\nimport {CurrentUser} from '@sanity/types'\nimport {\n CommentCreatePayload,\n CommentEditPayload,\n CommentReactionOption,\n CommentStatus,\n CommentThreadItem,\n MentionOptionsHookValue,\n} from '../../types'\nimport {CommentsSelectedPath} from '../../context'\nimport {CommentsListItem} from './CommentsListItem'\nimport {CommentThreadLayout} from './CommentThreadLayout'\nimport {CommentsListStatus} from './CommentsListStatus'\n\nconst SCROLL_INTO_VIEW_OPTIONS: ScrollIntoViewOptions = {\n behavior: 'smooth',\n block: 'start',\n inline: 'nearest',\n}\n\ninterface GroupedComments {\n [field: string]: CommentThreadItem[]\n}\n\nfunction groupThreads(comments: CommentThreadItem[]) {\n return comments.reduce((acc, comment) => {\n const field = comment.fieldPath\n\n if (!acc[field]) {\n acc[field] = []\n }\n\n acc[field].push(comment)\n\n return acc\n }, {} as GroupedComments)\n}\n\n/**\n * @beta\n * @hidden\n */\nexport interface CommentsListProps {\n comments: CommentThreadItem[]\n currentUser: CurrentUser\n error: Error | null\n loading: boolean\n mentionOptions: MentionOptionsHookValue\n onCopyLink?: (id: string) => void\n onCreateRetry: (id: string) => void\n onDelete: (id: string) => void\n onEdit: (id: string, payload: CommentEditPayload) => void\n onNewThreadCreate: (payload: CommentCreatePayload) => void\n onPathSelect?: (nextPath: CommentsSelectedPath) => void\n onReactionSelect?: (id: string, reaction: CommentReactionOption) => void\n onReply: (payload: CommentCreatePayload) => void\n onStatusChange?: (id: string, status: CommentStatus) => void\n readOnly?: boolean\n selectedPath: CommentsSelectedPath | null\n status: CommentStatus\n}\n\n/**\n * @beta\n * @hidden\n */\nexport interface CommentsListHandle {\n scrollToComment: (id: string) => void\n}\n\nconst CommentsListInner = forwardRef<CommentsListHandle, CommentsListProps>(\n function CommentsListInner(props: CommentsListProps, ref) {\n const {\n comments,\n currentUser,\n error,\n loading,\n mentionOptions,\n onCopyLink,\n onCreateRetry,\n onDelete,\n onEdit,\n onNewThreadCreate,\n onPathSelect,\n onReactionSelect,\n onReply,\n onStatusChange,\n readOnly,\n selectedPath,\n status,\n } = props\n const [boundaryElement, setBoundaryElement] = useState<HTMLDivElement | null>(null)\n\n const scrollToComment = useCallback((id: string) => {\n const commentElement = document?.querySelector(`[data-comment-id=\"${id}\"]`)\n\n if (commentElement) {\n commentElement.scrollIntoView(SCROLL_INTO_VIEW_OPTIONS)\n }\n }, [])\n\n useImperativeHandle(\n ref,\n () => {\n return {\n scrollToComment,\n }\n },\n [scrollToComment],\n )\n\n const groupedThreads = useMemo(() => Object.entries(groupThreads(comments)), [comments])\n\n const showComments = !loading && !error && groupedThreads.length > 0\n\n return (\n <Flex\n direction=\"column\"\n flex={1}\n height=\"fill\"\n overflow=\"hidden\"\n ref={setBoundaryElement}\n sizing=\"border\"\n >\n <CommentsListStatus\n error={error}\n hasNoComments={groupedThreads.length === 0}\n loading={loading}\n status={status}\n />\n\n {showComments && (\n <Stack\n as=\"ul\"\n flex={1}\n overflow=\"auto\"\n padding={3}\n paddingTop={1}\n paddingBottom={6}\n sizing=\"border\"\n space={1}\n >\n <BoundaryElementProvider element={boundaryElement}>\n {groupedThreads?.map(([fieldPath, group]) => {\n // Since all threads in the group point to the same field, the breadcrumbs will be\n // the same for all of them. Therefore, we can just pick the first one.\n const breadcrumbs = group[0].breadcrumbs\n\n // The thread ID is used to scroll to the thread.\n // We pick the first thread id in the group so that we scroll to the first thread\n // in the group.\n const firstThreadId = group[0].threadId\n\n // The new thread is selected if the field path matches the selected path and\n // there is no thread ID selected.\n const newThreadSelected =\n selectedPath?.fieldPath === fieldPath && !selectedPath.threadId\n\n return (\n <Stack as=\"li\" key={fieldPath} data-group-id={firstThreadId} paddingTop={3}>\n <CommentThreadLayout\n breadcrumbs={breadcrumbs}\n canCreateNewThread={status === 'open'}\n currentUser={currentUser}\n fieldPath={fieldPath}\n isSelected={newThreadSelected}\n key={fieldPath}\n mentionOptions={mentionOptions}\n onNewThreadCreate={onNewThreadCreate}\n onPathSelect={onPathSelect}\n readOnly={readOnly}\n >\n {group.map((item) => {\n // The default sort order is by date, descending (newest first).\n // However, inside a thread, we want the order to be ascending (oldest first).\n // So we reverse the array here.\n // We use slice() to avoid mutating the original array.\n const replies = item.replies.slice().reverse()\n\n const canReply =\n status === 'open' &&\n item.parentComment._state?.type !== 'createError' &&\n item.parentComment._state?.type !== 'createRetrying'\n\n // The thread is selected if the thread ID and field path matches the\n // selected path.\n const threadIsSelected =\n selectedPath?.threadId === item.parentComment.threadId &&\n selectedPath?.fieldPath === item.parentComment.target.path.field\n\n return (\n <CommentsListItem\n canReply={canReply}\n currentUser={currentUser}\n isSelected={threadIsSelected}\n key={item.parentComment._id}\n mentionOptions={mentionOptions}\n onCopyLink={onCopyLink}\n onCreateRetry={onCreateRetry}\n onDelete={onDelete}\n onEdit={onEdit}\n onPathSelect={onPathSelect}\n onReactionSelect={onReactionSelect}\n onReply={onReply}\n onStatusChange={onStatusChange}\n parentComment={item.parentComment}\n readOnly={readOnly}\n replies={replies}\n />\n )\n })}\n </CommentThreadLayout>\n </Stack>\n )\n })}\n </BoundaryElementProvider>\n </Stack>\n )}\n </Flex>\n )\n },\n)\n\n/**\n * @beta\n * @hidden\n */\nexport const CommentsList = React.memo(CommentsListInner)\n","import {Stack, Text} from '@sanity/ui'\nimport React, {useCallback} from 'react'\nimport {Dialog} from '../../../../ui-components'\nimport {commentsLocaleNamespace} from '../../i18n'\nimport {TFunction, TextWithTone, useTranslation} from 'sanity'\n\nfunction getDialogCopy(\n t: TFunction,\n): Record<'thread' | 'comment', {title: string; body: string; confirmButtonText: string}> {\n return {\n thread: {\n title: t('comments.delete-thread-title'),\n body: t('comments.delete-thread-body'),\n confirmButtonText: t('comments.delete-thread-confirm'),\n },\n comment: {\n title: t('comments.delete-comment-title'),\n body: t('comments.delete-comment-body'),\n confirmButtonText: t('comments.delete-comment-confirm'),\n },\n }\n}\n\n/**\n * @beta\n * @hidden\n */\nexport interface CommentDeleteDialogProps {\n commentId: string\n error: Error | null\n isParent: boolean\n loading: boolean\n onClose: () => void\n onConfirm: (id: string) => void\n}\n\n/**\n * @beta\n * @hidden\n */\nexport function CommentDeleteDialog(props: CommentDeleteDialogProps) {\n const {isParent, onClose, commentId, onConfirm, loading, error} = props\n const {t} = useTranslation(commentsLocaleNamespace)\n const dialogCopy = getDialogCopy(t)\n const {title, body, confirmButtonText} = dialogCopy[isParent ? 'thread' : 'comment']\n\n const handleDelete = useCallback(() => {\n onConfirm(commentId)\n }, [commentId, onConfirm])\n\n return (\n <Dialog\n footer={{\n cancelButton: {\n onClick: onClose,\n },\n confirmButton: {\n loading,\n onClick: handleDelete,\n text: confirmButtonText,\n tone: 'critical',\n },\n }}\n header={title}\n id=\"delete-comment-dialog\"\n onClose={onClose}\n width={0}\n >\n <Stack space={4}>\n <Text size={1}>{body}</Text>\n\n {error && <TextWithTone tone=\"critical\">{t('comments.delete-dialog-error')}</TextWithTone>}\n </Stack>\n </Dialog>\n )\n}\n","import {Box, Flex, Stack, Text} from '@sanity/ui'\nimport React from 'react'\nimport styled, {keyframes} from 'styled-components'\nimport {Button, Popover, PopoverProps} from '../../../../../ui-components'\nimport {commentsLocaleNamespace} from '../../../i18n'\nimport {useTranslation} from 'sanity'\n\nconst Root = styled(Box)`\n max-width: 280px;\n`\n\nconst fadeInKeyFrame = keyframes`\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n`\n\nconst StyledPopover = styled(Popover)`\n opacity: 0;\n // Fade in the popover after 500ms\n animation: ${fadeInKeyFrame} 200ms 500ms forwards;\n`\n\ninterface CommentsOnboardingPopoverProps extends Omit<PopoverProps, 'content'> {\n // ...\n onDismiss: () => void\n}\n\nexport function CommentsOnboardingPopover(props: CommentsOnboardingPopoverProps) {\n const {onDismiss} = props\n const {t} = useTranslation(commentsLocaleNamespace)\n\n return (\n <StyledPopover\n content={\n <Root padding={4}>\n <Stack space={3}>\n <Text weight=\"medium\" size={1}>\n {t('comments.onboarding-popover-header')}\n </Text>\n\n <Text size={1}>{t('comments.onboarding-popover-body')}</Text>\n\n <Flex justify=\"flex-end\" marginTop={2}>\n <Button\n text={t('comments.onboarding-popover-dismiss')}\n tone=\"primary\"\n onClick={onDismiss}\n />\n </Flex>\n </Stack>\n </Root>\n }\n open\n portal\n {...props}\n />\n )\n}\n","import {createContext} from 'react'\nimport {CommentsContextValue} from './types'\n\nexport const CommentsContext = createContext<CommentsContextValue | null>(null)\n","/* eslint-disable max-nested-callbacks */\nimport {useState, useEffect, useMemo} from 'react'\nimport {Observable, concat, forkJoin, map, mergeMap, of, switchMap} from 'rxjs'\nimport {SanityDocument} from '@sanity/client'\nimport {sortBy} from 'lodash'\nimport {Loadable, MentionOptionUser, MentionOptionsHookValue} from '../types'\nimport {\n DEFAULT_STUDIO_CLIENT_OPTIONS,\n grantsPermissionOn,\n ProjectData,\n useClient,\n useProjectStore,\n useUserStore,\n} from 'sanity'\n\nconst INITIAL_STATE: MentionOptionsHookValue = {\n data: [],\n error: null,\n loading: true,\n}\n\nexport interface MentionHookOptions {\n documentValue: SanityDocument | null\n}\n\nlet cachedSystemGroups: [] | null = null\n\nexport function useMentionOptions(opts: MentionHookOptions): MentionOptionsHookValue {\n const {documentValue} = opts\n\n const projectStore = useProjectStore()\n const userStore = useUserStore()\n const client = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n\n const [state, setState] = useState<MentionOptionsHookValue>(INITIAL_STATE)\n\n const list$ = useMemo(() => {\n // 1. Get the project members and filter out the robot users\n const members$: Observable<ProjectData['members']> = projectStore\n .get()\n .pipe(map((res: ProjectData) => res.members?.filter((m) => !m.isRobot)))\n\n // 2. Map the members to users to get more data of the users such as displayName (used for filtering)\n const users$: Observable<MentionOptionUser[]> = members$.pipe(\n switchMap(async (members) => {\n const ids = members.map(({id}) => id)\n const users = await userStore.getUsers(ids)\n return users\n }),\n map((res) =>\n res.map((user) => ({\n displayName: user.displayName,\n id: user.id,\n canBeMentioned: false,\n })),\n ),\n )\n\n // 3. Get all the system groups. Use the cached response if it exists to avoid unnecessary requests.\n const cached = cachedSystemGroups\n const systemGroup$ = cached ? of(cached) : client.observable.fetch('*[_type == \"system.group\"]')\n\n // 4. Check if the user has read permission on the document and set the `canBeMentioned` property\n const grants$: Observable<MentionOptionUser[]> = forkJoin([users$, systemGroup$]).pipe(\n mergeMap(async ([users, groups]) => {\n if (!cached) {\n cachedSystemGroups = groups\n }\n\n const grantPromises = users?.map(async (user) => {\n const grants = groups.map((group: any) => {\n if (group.members.includes(user.id)) {\n return group.grants\n }\n\n return []\n })\n\n const flattenedGrants = [...grants].flat()\n const {granted} = await grantsPermissionOn(\n user.id,\n flattenedGrants,\n 'read',\n documentValue,\n )\n\n return {\n ...user,\n canBeMentioned: granted,\n }\n })\n\n const usersWithPermission = await Promise.all(grantPromises || [])\n\n return usersWithPermission\n }),\n )\n\n // 5. Sort the users alphabetically\n const $alphabetical: Observable<Loadable<MentionOptionUser[]>> = grants$.pipe(\n map((res) => ({\n error: null,\n loading: false,\n data: sortBy(res, 'displayName'),\n })),\n )\n\n return $alphabetical\n }, [client.observable, documentValue, projectStore, userStore])\n\n useEffect(() => {\n const initial$ = of(INITIAL_STATE)\n const state$ = concat(initial$, list$)\n\n const sub = state$.subscribe(setState)\n\n return () => {\n sub.unsubscribe()\n }\n }, [list$])\n\n return state\n}\n","import {useCallback} from 'react'\nimport {useMemoObservable} from 'react-rx'\nimport {of} from 'rxjs'\nimport {usePaneRouter} from '../../../components'\nimport {COMMENTS_INSPECTOR_NAME} from '../../../panes/document/constants'\nimport {CommentContext} from '../types'\nimport {getPreviewStateObservable, useDocumentPreviewStore, useSchema, useWorkspace} from 'sanity'\n\ninterface NotificationTargetHookOptions {\n documentId: string\n documentType: string\n}\n\ninterface NotificationTargetHookValue {\n /**\n * Returns an object with notification-specific values for the selected comment, such as\n * the current workspace + document title and full URL to the comment.\n * These values are currently used in notification emails.\n *\n * **Please note:** this will generate a URL for the comment based on the current _active_ pane.\n * The current active pane may not necessarily be the right-most structure pane and in these\n * cases, the selected comment may not be visible on initial load when visiting these URLs.\n */\n getNotificationValue: ({commentId}: {commentId: string}) => CommentContext['notification']\n}\n\n/** @internal */\nexport function useNotificationTarget(\n opts: NotificationTargetHookOptions,\n): NotificationTargetHookValue {\n const {documentId, documentType} = opts || {}\n const schemaType = useSchema().get(documentType)\n const {title: workspaceTitle} = useWorkspace()\n const {createPathWithParams, params} = usePaneRouter()\n\n const documentPreviewStore = useDocumentPreviewStore()\n\n const previewState = useMemoObservable(() => {\n if (!documentId || !schemaType) return of(null)\n return getPreviewStateObservable(documentPreviewStore, schemaType, documentId, '')\n }, [documentId, documentPreviewStore, schemaType])\n\n const {published, draft} = previewState || {}\n const documentTitle = (draft?.title || published?.title || 'Sanity document') as string\n\n const handleGetNotificationValue = useCallback(\n ({commentId}: {commentId: string}) => {\n // Generate a path based on the current pane params.\n // We force a value for `inspect` to ensure that this is included in URLs when comments\n // are created outside of the inspector context (i.e. directly on the field)\n // @todo: consider filtering pane router params and culling all non-active RHS panes prior to generating this link\n const path = createPathWithParams({\n ...params,\n comment: commentId,\n inspect: COMMENTS_INSPECTOR_NAME,\n })\n const url = `${window.location.origin}${path}`\n\n return {documentTitle, url, workspaceTitle}\n },\n [createPathWithParams, documentTitle, params, workspaceTitle],\n )\n\n return {\n getNotificationValue: handleGetNotificationValue,\n }\n}\n","import {SanityClient} from '@sanity/client'\nimport {CurrentUser} from '@sanity/types'\nimport {\n CommentReactionShortNames,\n CommentReactionItem,\n CommentCreatePayload,\n CommentDocument,\n CommentReactionOption,\n} from '../../types'\n\n// We construct the reaction key by combining the user id and the short name of the reaction.\n// This reduces the risk of having duplicate reactions for the same user.\n// Although this should not happen, the current implementation of the comment system using\n// optimistic updates could cause this to happen in an edge case.\nfunction createReactionKey(userId: string, shortName: CommentReactionShortNames) {\n return `${userId}-${shortName}`\n}\n\ninterface ReactOperationProps {\n client: SanityClient\n currentUser: CurrentUser\n id: string\n reaction: CommentReactionOption\n getComment?: (id: string) => CommentDocument | undefined\n onUpdate?: (id: string, comment: Partial<CommentCreatePayload>) => void\n}\n\nexport async function reactOperation(props: ReactOperationProps): Promise<void> {\n const {client, currentUser, id, reaction, getComment, onUpdate} = props\n\n const reactions = getComment?.(id)?.reactions || []\n const currentUserReactions = reactions.filter((r) => r.userId === currentUser.id)\n\n const _key = createReactionKey(currentUser.id, reaction.shortName)\n\n const currentReaction = currentUserReactions.find(\n (r) => r._key === _key && r._optimisticState !== 'removed',\n )\n\n if (currentReaction) {\n // The next optimistic reactions.\n // Comments with the `_optimisticState` set to removed will be filtered out\n // when rendering the list of reactions but kept in the list of reactions\n // to make sure the reaction don't reappears when a real time update is received.\n const next = reactions.map((r) => {\n if (r._key === currentReaction._key) {\n return {...r, _optimisticState: 'removed' as const}\n }\n\n return r\n })\n\n // Pass the updated reactions to the onUpdate callback to instantly update the UI.\n onUpdate?.(id, {reactions: next})\n\n // Unset the reaction\n await client\n .patch(id)\n .unset([`reactions[_key==\"${_key}\"]`])\n .commit()\n\n return\n }\n\n if (!currentReaction) {\n // The new reaction item to add to the comment\n const reactionItem: CommentReactionItem = {\n _key,\n addedAt: new Date().toISOString(),\n shortName: reaction.shortName,\n userId: currentUser.id,\n }\n\n const optimisticReactionItem: CommentReactionItem = {...reactionItem, _optimisticState: 'added'}\n\n // The next optimistic reactions\n const next = reactions\n .concat(optimisticReactionItem)\n .filter((r) => !(r._key === reactionItem._key && r._optimisticState === 'removed'))\n\n // Pass the updated reactions to the onUpdate callback to instantly update the UI.\n onUpdate?.(id, {reactions: next})\n\n // Append the new reaction to the comment\n await client\n .patch(id)\n .setIfMissing({reactions: []})\n .append('reactions', [reactionItem])\n .commit()\n }\n}\n","import {SanityClient} from '@sanity/client'\nimport {CommentCreatePayload} from '../../types'\n\ninterface UpdateOperationProps {\n client: SanityClient\n id: string\n comment: Partial<CommentCreatePayload>\n onUpdate?: (id: string, comment: Partial<CommentCreatePayload>) => void\n}\n\nexport async function updateOperation(props: UpdateOperationProps): Promise<void> {\n const {client, id, comment, onUpdate} = props\n onUpdate?.(id, comment)\n\n // If the update contains a status, we'll update the status of all replies\n // to the comment as well.\n if (comment.status) {\n await Promise.all([\n client\n .patch({query: `*[_type == \"comment\" && parentCommentId == \"${id}\"]`})\n .set({\n status: comment.status,\n })\n .commit(),\n client.patch(id).set(comment).commit(),\n ])\n\n return\n }\n\n // Else we'll just update the comment itself\n await client?.patch(id).set(comment).commit()\n}\n","import {SanityClient} from '@sanity/client'\nimport {CommentEditPayload} from '../../types'\n\ninterface EditOperationProps {\n client: SanityClient\n comment: CommentEditPayload\n id: string\n onEdit?: (id: string, comment: CommentEditPayload) => void\n}\n\nexport async function editOperation(props: EditOperationProps): Promise<void> {\n const {client, id, comment, onEdit} = props\n\n const editedComment = {\n message: comment.message,\n lastEditedAt: new Date().toISOString(),\n } satisfies CommentEditPayload\n\n onEdit?.(id, editedComment)\n\n await client.patch(id).set(editedComment).commit()\n}\n","import {SanityClient} from '@sanity/client'\n\ninterface RemoveOperationProps {\n client: SanityClient\n id: string\n onRemove?: (id: string) => void\n}\n\nexport async function removeOperation(props: RemoveOperationProps): Promise<void> {\n const {client, id, onRemove} = props\n onRemove?.(id)\n\n await Promise.all([\n client.delete({query: `*[_type == \"comment\" && parentCommentId == \"${id}\"]`}),\n client.delete(id),\n ])\n}\n","import {uuid} from '@sanity/uuid'\nimport {SanityClient} from '@sanity/client'\nimport {\n CommentContext,\n CommentCreatePayload,\n CommentDocument,\n CommentPostPayload,\n} from '../../types'\nimport {CurrentUser, Tool} from 'sanity'\n\ninterface CreateOperationProps {\n activeTool: Tool | undefined\n client: SanityClient | null\n comment: CommentCreatePayload\n currentUser: CurrentUser\n dataset: string\n documentId: string\n documentType: string\n getComment?: (id: string) => CommentDocument | undefined\n getNotificationValue: (comment: {commentId: string}) => CommentContext['notification']\n getThreadLength?: (threadId: string) => number\n onCreate?: (comment: CommentPostPayload) => void\n onCreateError: (id: string, error: Error) => void\n projectId: string\n runSetup: (comment: CommentPostPayload) => Promise<void>\n workspace: string\n}\n\nexport async function createOperation(props: CreateOperationProps): Promise<void> {\n const {\n activeTool,\n client,\n comment,\n currentUser,\n dataset,\n documentId,\n documentType,\n getNotificationValue,\n getThreadLength,\n onCreate,\n onCreateError,\n projectId,\n runSetup,\n workspace,\n } = props\n\n // The comment payload might already have an id if, for example, the comment was created\n // but the request failed. In that case, we'll reuse the id when retrying to\n // create the comment.\n const commentId = comment?.id || uuid()\n\n const authorId = currentUser.id\n\n // Get the current thread length of the thread the comment is being added to.\n // We add 1 to the length to account for the comment being added.\n const currentThreadLength = (getThreadLength?.(comment.threadId) || 0) + 1\n\n const {\n documentTitle = '',\n url = '',\n workspaceTitle = '',\n } = getNotificationValue({commentId}) || {}\n\n const notification: CommentContext['notification'] = {\n currentThreadLength,\n documentTitle,\n url,\n workspaceTitle,\n }\n\n const nextComment: CommentPostPayload = {\n _id: commentId,\n _type: 'comment',\n authorId,\n lastEditedAt: undefined,\n message: comment.message,\n parentCommentId: comment.parentCommentId,\n status: comment.status,\n threadId: comment.threadId,\n\n context: {\n payload: {\n workspace,\n },\n notification,\n tool: activeTool?.name || '',\n },\n\n reactions: [],\n\n target: {\n path: {\n field: comment.fieldPath,\n },\n document: {\n _dataset: dataset,\n _projectId: projectId,\n _ref: documentId,\n _type: 'crossDatasetReference',\n _weak: true,\n },\n documentType,\n },\n }\n\n onCreate?.(nextComment)\n\n // If we don't have a client, that means that the dataset doesn't have an addon dataset.\n // Therefore, when the first comment is created, we need to create the addon dataset and create\n // a client for it and then post the comment. We do this here, since we know that we have a\n // comment to create.\n if (!client) {\n try {\n await runSetup(nextComment)\n } catch (err) {\n onCreateError?.(nextComment._id, err)\n throw err\n }\n return\n }\n\n try {\n await client.create(nextComment)\n } catch (err) {\n onCreateError?.(nextComment._id, err)\n throw err\n }\n}\n","import {useCallback, useMemo} from 'react'\nimport {CurrentUser, SchemaType} from '@sanity/types'\nimport {SanityClient} from '@sanity/client'\nimport {\n CommentCreatePayload,\n CommentDocument,\n CommentEditPayload,\n CommentOperations,\n CommentPostPayload,\n CommentReactionOption,\n} from '../../types'\nimport {useNotificationTarget} from '../useNotificationTarget'\nimport {reactOperation} from './reactOperation'\nimport {updateOperation} from './updateOperation'\nimport {editOperation} from './editOperation'\nimport {removeOperation} from './removeOperation'\nimport {createOperation} from './createOperation'\nimport {useRouterState} from 'sanity/router'\nimport {useWorkspace} from 'sanity'\n\nexport interface CommentOperationsHookValue {\n operation: CommentOperations\n}\n\nexport interface CommentOperationsHookOptions {\n client: SanityClient | null\n currentUser: CurrentUser | null\n dataset: string\n documentId: string\n documentType: string\n getComment?: (id: string) => CommentDocument | undefined\n getThreadLength?: (threadId: string) => number\n onCreate?: (comment: CommentPostPayload) => void\n onCreateError: (id: string, error: Error) => void\n onEdit?: (id: string, comment: CommentEditPayload) => void\n onRemove?: (id: string) => void\n onUpdate?: (id: string, comment: Partial<CommentCreatePayload>) => void\n projectId: string\n runSetup: (comment: CommentPostPayload) => Promise<void>\n schemaType: SchemaType | undefined\n workspace: string\n}\n\nexport function useCommentOperations(\n opts: CommentOperationsHookOptions,\n): CommentOperationsHookValue {\n const {\n client,\n currentUser,\n dataset,\n documentId,\n documentType,\n getComment,\n getThreadLength,\n onCreate,\n onCreateError,\n onEdit,\n onRemove,\n onUpdate,\n projectId,\n runSetup,\n workspace,\n } = opts\n\n const activeToolName = useRouterState(\n useCallback(\n (routerState) => (typeof routerState.tool === 'string' ? routerState.tool : undefined),\n [],\n ),\n )\n const {tools} = useWorkspace()\n\n const activeTool = useMemo(\n () => tools.find((tool) => tool.name === activeToolName),\n [activeToolName, tools],\n )\n const {getNotificationValue} = useNotificationTarget({documentId, documentType})\n\n const handleCreate = useCallback(\n async (comment: CommentCreatePayload) => {\n // Unlike the other operations, we want to proceed with create operation even\n // though there is no client available. This is because if there is no client for the\n // comments addon dataset, it will be created in the `createOperation`, and the\n // comment will be created in that dataset when the client is eventually created.\n if (!currentUser?.id) return\n\n await createOperation({\n activeTool,\n client,\n comment,\n currentUser,\n dataset,\n documentId,\n documentType,\n getNotificationValue,\n getThreadLength,\n onCreate,\n onCreateError,\n projectId,\n runSetup,\n workspace,\n })\n },\n [\n activeTool,\n client,\n currentUser,\n dataset,\n documentId,\n documentType,\n getNotificationValue,\n getThreadLength,\n onCreate,\n onCreateError,\n projectId,\n runSetup,\n workspace,\n ],\n )\n\n const handleRemove = useCallback(\n async (id: string) => {\n if (!client) return\n\n await removeOperation({\n client,\n id,\n onRemove,\n })\n },\n [client, onRemove],\n )\n\n const handleEdit = useCallback(\n async (id: string, comment: CommentEditPayload) => {\n if (!client) return\n\n await editOperation({\n client,\n comment,\n id,\n onEdit,\n })\n },\n [client, onEdit],\n )\n\n const handleUpdate = useCallback(\n async (id: string, comment: Partial<CommentCreatePayload>) => {\n if (!client) return\n\n await updateOperation({\n client,\n id,\n comment,\n onUpdate,\n })\n },\n [client, onUpdate],\n )\n\n const handleReact = useCallback(\n async (id: string, reaction: CommentReactionOption) => {\n if (!client || !currentUser?.id) return\n\n await reactOperation({\n client,\n currentUser,\n id,\n reaction,\n getComment,\n onUpdate,\n })\n },\n [client, currentUser, getComment, onUpdate],\n )\n\n return useMemo(\n () => ({\n operation: {\n create: handleCreate,\n edit: handleEdit,\n react: handleReact,\n remove: handleRemove,\n update: handleUpdate,\n } satisfies CommentOperations,\n }),\n [handleCreate, handleEdit, handleRemove, handleUpdate, handleReact],\n )\n}\n","import {useContext} from 'react'\nimport {CommentsContextValue} from '../context/comments/types'\nimport {CommentsContext} from '../context'\n\n/**\n * @beta\n * @hidden\n */\nexport function useComments(): CommentsContextValue {\n const value = useContext(CommentsContext)\n\n if (!value) {\n throw new Error('useComments must be used within a CommentsProvider')\n }\n\n return value\n}\n","import {useContext} from 'react'\nimport {CommentsSetupContext, CommentsSetupContextValue} from '../context'\n\nexport function useCommentsSetup(): CommentsSetupContextValue {\n const ctx = useContext(CommentsSetupContext)\n\n if (!ctx) {\n throw new Error('useCommentsSetup: missing context value')\n }\n\n return ctx\n}\n","import {createContext} from 'react'\nimport {CommentsEnabledContextValue} from './types'\n\nexport const CommentsEnabledContext = createContext<CommentsEnabledContextValue | null>(null)\n","import React from 'react'\nimport {useResolveCommentsEnabled} from '../../hooks'\nimport {CommentsEnabledContext} from './CommentsEnabledContext'\n\ninterface CommentsEnabledProviderProps {\n children: React.ReactNode\n documentId: string\n documentType: string\n}\n\nexport const CommentsEnabledProvider = React.memo(function CommentsEnabledProvider(\n props: CommentsEnabledProviderProps,\n) {\n const {children, documentId, documentType} = props\n\n const isEnabled = useResolveCommentsEnabled(documentId, documentType)\n\n return (\n <CommentsEnabledContext.Provider value={isEnabled}>{children}</CommentsEnabledContext.Provider>\n )\n})\n","import {useContext} from 'react'\nimport {CommentsEnabledContext} from '../context/enabled'\n\n/**\n * @internal\n * This hook returns a boolean indicating whether comments are enabled or not.\n * It checks if the project has the `studioComments` feature flag enabled and\n * if comments is enabled for the current document in the config API.\n */\nexport function useCommentsEnabled(): boolean {\n const ctx = useContext(CommentsEnabledContext)\n\n if (ctx === null) {\n throw new Error('useCommentsEnabled: missing context value')\n }\n\n return ctx\n}\n","import {createContext} from 'react'\nimport {CommentsOnboardingContextValue} from './types'\n\nexport const CommentsOnboardingContext = createContext<CommentsOnboardingContextValue | null>(null)\n","import React, {useCallback, useMemo, useState} from 'react'\nimport {CommentsOnboardingContext} from './CommentsOnboardingContext'\nimport {CommentsOnboardingContextValue} from './types'\n\nconst VERSION = 1\nconst LOCAL_STORAGE_KEY = `sanityStudio:comments:inspector:onboarding:dismissed:v${VERSION}`\n\nconst setLocalStorage = (value: boolean) => {\n try {\n window.localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(value))\n } catch (_) {\n // Fail silently\n }\n}\n\nconst getLocalStorage = (): boolean => {\n try {\n const value = window.localStorage.getItem(LOCAL_STORAGE_KEY)\n return value ? JSON.parse(value) : false\n } catch (_) {\n return false\n }\n}\n\ninterface CommentsOnboardingProviderProps {\n children: React.ReactNode\n}\n\nexport function CommentsOnboardingProvider(props: CommentsOnboardingProviderProps) {\n const {children} = props\n const [dismissed, setDismissed] = useState<boolean>(getLocalStorage())\n\n const handleDismiss = useCallback(() => {\n setDismissed(true)\n setLocalStorage(true)\n }, [setDismissed])\n\n const ctxValue = useMemo(\n (): CommentsOnboardingContextValue => ({\n setDismissed: handleDismiss,\n isDismissed: dismissed,\n }),\n [handleDismiss, dismissed],\n )\n\n return (\n <CommentsOnboardingContext.Provider value={ctxValue}>\n {children}\n </CommentsOnboardingContext.Provider>\n )\n}\n","import {useContext} from 'react'\nimport {CommentsOnboardingContext} from '../context/onboarding'\nimport {CommentsOnboardingContextValue} from '../context/onboarding/types'\n\nexport function useCommentsOnboarding(): CommentsOnboardingContextValue {\n const ctx = useContext(CommentsOnboardingContext)\n\n if (!ctx) {\n throw new Error('useCommentsOnboarding: missing context value')\n }\n\n return ctx\n}\n","import {useContext} from 'react'\nimport {CommentsSelectedPathContext, CommentsSelectedPathContextValue} from '../context'\n\nexport function useCommentsSelectedPath(): CommentsSelectedPathContextValue {\n const ctx = useContext(CommentsSelectedPathContext)\n\n if (!ctx) {\n throw new Error('useCommentsSelectedPath: missing context value')\n }\n\n return ctx\n}\n","import {useMemo} from 'react'\nimport {getPublishedId, useFeatureEnabled, useSource} from 'sanity'\n\n/**\n * @internal\n * A hook that resolves if comments are enabled for the current document and document type\n * and if the feature is enabled for the current project.\n */\nexport function useResolveCommentsEnabled(documentId: string, documentType: string): boolean {\n // Check if the projects plan has the feature enabled\n const {enabled: featureEnabled, isLoading} = useFeatureEnabled('studioComments')\n\n const {enabled} = useSource().document.unstable_comments\n\n // Check if the feature is enabled for the current document in the config\n const enabledFromConfig = useMemo(\n () => enabled({documentType, documentId: getPublishedId(documentId)}),\n [documentId, documentType, enabled],\n )\n\n const isEnabled = !isLoading && featureEnabled && enabledFromConfig\n\n return isEnabled\n}\n","import {\n SchemaType,\n ObjectField,\n isObjectSchemaType,\n CurrentUser,\n ArraySchemaType,\n ConditionalPropertyCallbackContext,\n ObjectSchemaType,\n ObjectFieldType,\n PathSegment,\n isArraySchemaType,\n} from '@sanity/types'\nimport {findIndex} from 'lodash'\nimport * as PathUtils from '@sanity/util/paths'\nimport {SanityDocument} from '@sanity/client'\nimport {CommentListBreadcrumbs} from '../types'\nimport {getSchemaTypeTitle, getValueAtPath, resolveConditionalProperty} from 'sanity'\n\nfunction getSchemaField(\n schemaType: SchemaType,\n fieldPath: string,\n): ObjectField<SchemaType> | undefined {\n const paths = PathUtils.fromString(fieldPath)\n const firstPath = paths[0]\n\n if (firstPath && isObjectSchemaType(schemaType)) {\n const field = schemaType?.fields?.find((f) => f.name === firstPath)\n\n if (field) {\n const nextPath = PathUtils.toString(paths.slice(1))\n\n if (nextPath) {\n return getSchemaField(field.type, nextPath)\n }\n\n return field\n }\n }\n\n return undefined\n}\n\nfunction findArrayItemIndex(array: unknown[], pathSegment: PathSegment): number | false {\n if (typeof pathSegment === 'number') {\n return pathSegment\n }\n const index = findIndex(array, pathSegment)\n return index === -1 ? false : index\n}\n\ninterface BuildCommentBreadcrumbsProps {\n documentValue: Partial<SanityDocument> | null\n fieldPath: string\n schemaType: SchemaType\n currentUser: CurrentUser\n}\n\n/**\n * @beta\n * @hidden\n *\n * This function builds a breadcrumb trail for a given comment using its field path.\n * It will validate each segment of the path against the document value and/or schema type.\n * The path is invalid if:\n * - The field is hidden by a conditional field\n * - The field is not found in the schema type\n * - The field is not found in the document value (array items only)\n */\nexport function buildCommentBreadcrumbs(\n props: BuildCommentBreadcrumbsProps,\n): CommentListBreadcrumbs {\n const {currentUser, schemaType, fieldPath, documentValue} = props\n const paths = PathUtils.fromString(fieldPath)\n const fieldPaths: CommentListBreadcrumbs = []\n\n let currentSchemaType: ArraySchemaType<SchemaType> | ObjectFieldType<SchemaType> | null = null\n\n paths.forEach((seg, index) => {\n const currentPath = paths.slice(0, index + 1)\n const previousPath = paths.slice(0, index)\n\n const field = getSchemaField(schemaType, PathUtils.toString(currentPath))\n const isKeySegment = seg.hasOwnProperty('_key')\n\n const parentValue = getValueAtPath(documentValue, previousPath)\n const currentValue = getValueAtPath(documentValue, currentPath)\n\n const conditionalContext: ConditionalPropertyCallbackContext = {\n document: documentValue as SanityDocument,\n currentUser,\n parent: parentValue,\n value: currentValue,\n }\n\n // If the field is a key segment and the parent value is an array, we'll\n // try to find the index of the array item in the parent value.\n // If the index is not found, we'll mark it as invalid.\n // This can happen if the array item has been removed from the document value.\n if (isKeySegment && Array.isArray(parentValue)) {\n const arrayItemIndex = findArrayItemIndex(parentValue, seg)\n\n const isNumber = typeof arrayItemIndex === 'number'\n\n fieldPaths.push({\n invalid: arrayItemIndex === false,\n isArrayItem: true,\n title: isNumber ? `#${Number(arrayItemIndex) + 1}` : 'Unknown array item',\n })\n\n return\n }\n\n // If we find a field in the schema type, we'll add it to the breadcrumb trail.\n if (field?.type) {\n const hidden = resolveConditionalProperty(field.type.hidden, conditionalContext)\n\n fieldPaths.push({\n invalid: hidden,\n isArrayItem: false,\n title: getSchemaTypeTitle(field.type),\n })\n\n // Store the current schema type so we can use it in the next iteration.\n currentSchemaType = field.type\n\n return\n }\n\n if (isArraySchemaType(currentSchemaType)) {\n // Get the value of the array field in the document value\n const arrayValue: any = getValueAtPath(documentValue, previousPath)\n\n // Get the object type of the array field in the schema type\n // from the array field's `_type` property in the document value.\n const objectType = arrayValue?._type\n\n // Find the object field in the array field's `of` array using\n // the object type from the document value.\n const objectField = currentSchemaType?.of?.find(\n (type) => type.name === objectType,\n ) as ObjectSchemaType\n\n // Find the field in the object field's `fields` array\n // using the field name from the path segment.\n const currentField = objectField?.fields?.find(\n (f) => f.name === seg,\n ) as ObjectField<SchemaType>\n\n // If we don't find the `_type` property in the document value, that\n // means that the field is an anonymous object field and don't have a\n // name defined in the schema type.\n // In this case, we try to find all the fields of the current schema type\n // and check if the field name from the path segment matches any of them.\n // If we find a match, we'll use the field's type to get the title.\n if (!objectType && currentValue) {\n const allCurrentFields = currentSchemaType?.of\n ?.map((o: any) => o?.fields)\n .filter(Boolean)\n .flat()\n\n const anonymousField = allCurrentFields?.find((f) => f?.name === seg)\n const hidden = resolveConditionalProperty(anonymousField?.type?.hidden, conditionalContext)\n\n if (anonymousField) {\n fieldPaths.push({\n invalid: hidden,\n isArrayItem: false,\n title: getSchemaTypeTitle(anonymousField?.type),\n })\n\n currentSchemaType = anonymousField?.type\n }\n return\n }\n\n if (!currentField) {\n fieldPaths.push({\n invalid: true,\n isArrayItem: false,\n title: 'Unknown field',\n })\n\n return\n }\n\n // Get the title of the current field\n const currentTitle = getSchemaTypeTitle(currentField?.type)\n\n // Resolve the hidden property of the object field\n const objectFieldHidden = resolveConditionalProperty(\n objectField?.type?.hidden,\n conditionalContext,\n )\n\n // Resolve the hidden property of the current field\n const currentFieldHidden = resolveConditionalProperty(\n currentField?.type.hidden,\n conditionalContext,\n )\n\n // If the object field or the current field is hidden, we'll mark it as invalid.\n const isHidden = objectFieldHidden || currentFieldHidden\n\n // Add the field to the breadcrumb trail\n fieldPaths.push({\n invalid: isHidden,\n isArrayItem: false,\n title: currentTitle,\n })\n\n // If the current field is an object field, we'll set it as the current schema type\n // so we can use it in the next iteration.\n currentSchemaType = currentField?.type\n\n return\n }\n\n // If we get here, the field is not found in the schema type\n // or the document value so we'll mark it as invalid.\n fieldPaths.push({\n invalid: true,\n isArrayItem: false,\n title: 'Unknown field',\n })\n })\n\n return fieldPaths\n}\n","import {CommentReactionItem} from '../types'\n\n/**\n * A function to merge two arrays of comment reactions.\n */\nexport function mergeCommentReactions(\n reactionsA: CommentReactionItem[],\n reactionsB: CommentReactionItem[],\n): CommentReactionItem[] {\n const mergedReactions: Record<string, CommentReactionItem> = {}\n\n // Merge reactionsA into the result\n for (const reaction of reactionsA) {\n mergedReactions[reaction._key] = {...reaction}\n }\n\n // Merge reactionsB into the result, overriding or adding new reactions\n for (const reaction of reactionsB) {\n mergedReactions[reaction._key] = {...mergedReactions[reaction._key], ...reaction}\n }\n\n // Convert the mergedReactions object back to an array\n const result = Object.values(mergedReactions)\n\n return result\n}\n","import {CommentDocument, CommentPostPayload} from '../types'\nimport {mergeCommentReactions} from '../utils'\n\ninterface CommentAddedAction {\n payload: CommentDocument | CommentPostPayload\n type: 'COMMENT_ADDED'\n}\n\ninterface CommentDeletedAction {\n id: string\n type: 'COMMENT_DELETED'\n}\n\ninterface CommentUpdatedAction {\n payload: CommentDocument | Partial<CommentPostPayload>\n type: 'COMMENT_UPDATED'\n}\n\ninterface CommentsSetAction {\n comments: CommentDocument[]\n type: 'COMMENTS_SET'\n}\n\ninterface CommentReceivedAction {\n payload: CommentDocument\n type: 'COMMENT_RECEIVED'\n}\n\nexport type CommentsReducerAction =\n | CommentAddedAction\n | CommentDeletedAction\n | CommentUpdatedAction\n | CommentsSetAction\n | CommentReceivedAction\n\nexport interface CommentsReducerState {\n comments: Record<string, CommentDocument>\n}\n\n/**\n * Transform an array of comments into an object with the comment id as key:\n * ```\n * {\n * 'comment-1': { _id: 'comment-1', ... },\n * 'comment-2': { _id: 'comment-2', ... },\n * }\n * ```\n */\nfunction createCommentsSet(comments: CommentDocument[]) {\n const commentsById = comments.reduce((acc, comment) => ({...acc, [comment._id]: comment}), {})\n return commentsById\n}\n\nexport function commentsReducer(\n state: CommentsReducerState,\n action: CommentsReducerAction,\n): CommentsReducerState {\n switch (action.type) {\n case 'COMMENTS_SET': {\n // Create an object with the comment id as key\n const commentsById = createCommentsSet(action.comments)\n\n return {\n ...state,\n comments: commentsById,\n }\n }\n\n case 'COMMENT_ADDED': {\n const nextCommentResult = action.payload as CommentDocument\n const nextCommentValue = nextCommentResult satisfies CommentDocument\n\n const nextComment = {\n [nextCommentResult._id]: {\n ...state.comments[nextCommentResult._id],\n ...nextCommentValue,\n _state: nextCommentResult._state || undefined,\n // If the comment is created optimistically, it won't have a createdAt date as this is set on the server.\n // However, we need to set a createdAt date to be able to sort the comments correctly.\n // Therefore, we set the createdAt date to the current date here if it's missing while creating the comment.\n // Once the comment is created and received from the server, the createdAt date will be updated to the correct value.\n _createdAt: nextCommentResult._createdAt || new Date().toISOString(),\n } satisfies CommentDocument,\n }\n\n return {\n ...state,\n comments: {\n ...state.comments,\n ...nextComment,\n },\n }\n }\n\n case 'COMMENT_RECEIVED': {\n const nextCommentResult = action.payload as CommentDocument\n\n return {\n ...state,\n comments: {\n ...state.comments,\n [nextCommentResult._id]: nextCommentResult,\n },\n }\n }\n\n case 'COMMENT_DELETED': {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {[action.id]: _, ...restComments} = state.comments\n\n // Delete all replies to the deleted comment\n Object.keys(restComments).forEach((commentId) => {\n if (restComments[commentId].parentCommentId === action.id) {\n delete restComments[commentId]\n }\n })\n\n return {\n ...state,\n comments: restComments,\n }\n }\n\n case 'COMMENT_UPDATED': {\n const updatedComment = action.payload\n const id = updatedComment._id as string\n const comment = state.comments[id]\n\n // Due to optimistic updates, we need to merge the current optimistic reactions with the\n // incoming reactions to make sure that any optimistic reactions are not lost or\n // re-added when we receive the updated comment from the server.\n const optimisticReactions = comment?.reactions?.filter((v) => v?._optimisticState) || []\n const incomingReactions = updatedComment.reactions || []\n const nextReactions = mergeCommentReactions(optimisticReactions, incomingReactions)\n\n const nextComment = {\n // Add existing comment data\n ...comment,\n // Add incoming comment data\n ...updatedComment,\n // Add reactions merged with optimistic reactions\n reactions: nextReactions,\n } satisfies CommentDocument\n\n return {\n ...state,\n comments: {\n ...state.comments,\n [id]: nextComment,\n },\n }\n }\n\n default:\n return state\n }\n}\n","import {useMemo, useEffect, useCallback, useReducer, useState} from 'react'\nimport {ListenEvent, ListenOptions, SanityClient} from '@sanity/client'\nimport {catchError, of} from 'rxjs'\nimport {CommentDocument, Loadable} from '../types'\nimport {CommentsReducerAction, CommentsReducerState, commentsReducer} from './reducer'\nimport {getPublishedId} from 'sanity'\n\nexport interface CommentsStoreOptions {\n documentId: string\n client: SanityClient | null\n}\n\ninterface CommentsStoreReturnType extends Loadable<CommentDocument[]> {\n dispatch: React.Dispatch<CommentsReducerAction>\n}\n\nconst INITIAL_STATE: CommentsReducerState = {\n comments: {},\n}\n\nconst LISTEN_OPTIONS: ListenOptions = {\n events: ['welcome', 'mutation', 'reconnect'],\n includeResult: true,\n visibility: 'query',\n}\n\nexport const SORT_FIELD = '_createdAt'\nexport const SORT_ORDER = 'desc'\n\nconst QUERY_FILTERS = [`_type == \"comment\"`, `target.document._ref == $documentId`]\n\nconst QUERY_PROJECTION = `{\n _createdAt,\n _id,\n authorId,\n lastEditedAt,\n message,\n parentCommentId,\n status,\n target,\n threadId,\n reactions\n}`\n\n// Newest comments first\nconst QUERY_SORT_ORDER = `order(${SORT_FIELD} ${SORT_ORDER})`\n\nconst QUERY = `*[${QUERY_FILTERS.join(' && ')}] ${QUERY_PROJECTION} | ${QUERY_SORT_ORDER}`\n\nexport function useCommentsStore(opts: CommentsStoreOptions): CommentsStoreReturnType {\n const {client, documentId} = opts\n\n const [state, dispatch] = useReducer(commentsReducer, INITIAL_STATE)\n const [loading, setLoading] = useState<boolean>(client !== null)\n const [error, setError] = useState<Error | null>(null)\n\n const params = useMemo(() => ({documentId: getPublishedId(documentId)}), [documentId])\n\n const initialFetch = useCallback(async () => {\n if (!client) {\n setLoading(false)\n return\n }\n\n try {\n const res = await client.fetch(QUERY, params)\n dispatch({type: 'COMMENTS_SET', comments: res})\n setLoading(false)\n } catch (err) {\n setError(err)\n }\n }, [client, params])\n\n const handleListenerEvent = useCallback(\n async (event: ListenEvent<Record<string, CommentDocument>>) => {\n // Fetch all comments on initial connection\n if (event.type === 'welcome') {\n setLoading(true)\n await initialFetch()\n setLoading(false)\n }\n\n // The reconnect event means that we are trying to reconnect to the realtime listener.\n // In this case we set loading to true to indicate that we're trying to\n // reconnect. Once a connection has been established, the welcome event\n // will be received and we'll fetch all comments again (above).\n if (event.type === 'reconnect') {\n setLoading(true)\n }\n\n // Handle mutations (create, update, delete) from the realtime listener\n // and update the comments store accordingly\n if (event.type === 'mutation') {\n if (event.transition === 'appear') {\n const nextComment = event.result as CommentDocument | undefined\n\n if (nextComment) {\n dispatch({\n type: 'COMMENT_RECEIVED',\n payload: nextComment,\n })\n }\n }\n\n if (event.transition === 'disappear') {\n dispatch({type: 'COMMENT_DELETED', id: event.documentId})\n }\n\n if (event.transition === 'update') {\n const updatedComment = event.result as CommentDocument | undefined\n\n if (updatedComment) {\n dispatch({\n type: 'COMMENT_UPDATED',\n payload: updatedComment,\n })\n }\n }\n }\n },\n [initialFetch],\n )\n\n const listener$ = useMemo(() => {\n if (!client) return of()\n\n const events$ = client.observable.listen(QUERY, params, LISTEN_OPTIONS).pipe(\n catchError((err) => {\n setError(err)\n return of(err)\n }),\n )\n\n return events$\n }, [client, params])\n\n useEffect(() => {\n const sub = listener$.subscribe(handleListenerEvent)\n\n return () => {\n sub?.unsubscribe()\n }\n }, [handleListenerEvent, listener$])\n\n // Transform comments object to array\n const commentsAsArray = useMemo(() => Object.values(state.comments), [state.comments])\n\n return {\n data: commentsAsArray,\n dispatch,\n error,\n loading,\n }\n}\n","import {SanityDocument} from '@sanity/client'\nimport {SchemaType, CurrentUser} from '@sanity/types'\nimport {CommentDocument, CommentThreadItem} from '../types'\nimport {buildCommentBreadcrumbs} from './buildCommentBreadcrumbs'\n\ninterface BuildCommentThreadItemsProps {\n comments: CommentDocument[]\n currentUser: CurrentUser\n documentValue: Partial<SanityDocument> | null\n schemaType: SchemaType\n}\n\n/**\n * This function formats comments into a structure that is easier to work with in the UI.\n * It also validates each comment against the document value and schema type to ensure\n * that the comment is valid. If the comment is invalid, it will be omitted from the\n * returned array.\n */\nexport function buildCommentThreadItems(props: BuildCommentThreadItemsProps): CommentThreadItem[] {\n const {comments, currentUser, documentValue, schemaType} = props\n const parentComments = comments?.filter((c) => !c.parentCommentId)\n\n const items = parentComments\n .map((parentComment) => {\n const crumbs = buildCommentBreadcrumbs({\n currentUser,\n documentValue,\n fieldPath: parentComment.target.path.field,\n schemaType,\n })\n\n const hasInvalidBreadcrumb = crumbs.some((bc) => bc.invalid)\n\n if (hasInvalidBreadcrumb) return undefined\n\n const replies = comments?.filter((r) => r.parentCommentId === parentComment._id)\n\n const commentsCount = [parentComment, ...replies].length\n\n return {\n breadcrumbs: crumbs,\n commentsCount,\n fieldPath: parentComment.target.path.field,\n parentComment,\n replies,\n threadId: parentComment.threadId,\n }\n })\n .filter(Boolean) as CommentThreadItem[]\n\n return items\n}\n","import React, {memo, useCallback, useMemo, useState} from 'react'\nimport {orderBy} from 'lodash'\nimport {\n CommentCreatePayload,\n CommentEditPayload,\n CommentPostPayload,\n CommentStatus,\n CommentThreadItem,\n} from '../../types'\nimport {\n CommentOperationsHookOptions,\n MentionHookOptions,\n useCommentOperations,\n useCommentsSetup,\n useMentionOptions,\n} from '../../hooks'\nimport {useCommentsStore} from '../../store'\nimport {buildCommentThreadItems} from '../../utils/buildCommentThreadItems'\nimport {CommentsContext} from './CommentsContext'\nimport {CommentsContextValue} from './types'\nimport {getPublishedId, useEditState, useSchema, useCurrentUser, useWorkspace} from 'sanity'\n\nconst EMPTY_ARRAY: [] = []\n\nconst EMPTY_COMMENTS_DATA = {\n open: EMPTY_ARRAY,\n resolved: EMPTY_ARRAY,\n}\n\ninterface ThreadItemsByStatus {\n open: CommentThreadItem[]\n resolved: CommentThreadItem[]\n}\n\n/**\n * @beta\n * @hidden\n */\nexport interface CommentsProviderProps {\n children: React.ReactNode\n documentId: string\n documentType: string\n\n isCommentsOpen?: boolean\n onCommentsOpen?: () => void\n}\n\n/**\n * @beta\n */\nexport const CommentsProvider = memo(function CommentsProvider(props: CommentsProviderProps) {\n const {children, documentId, documentType, isCommentsOpen, onCommentsOpen} = props\n const [status, setStatus] = useState<CommentStatus>('open')\n\n const {client, runSetup, isRunningSetup} = useCommentsSetup()\n const publishedId = getPublishedId(documentId)\n const editState = useEditState(publishedId, documentType, 'low')\n const schemaType = useSchema().get(documentType)\n const currentUser = useCurrentUser()\n const {name: workspaceName, dataset, projectId} = useWorkspace()\n const {\n dispatch,\n data = EMPTY_ARRAY,\n error,\n loading,\n } = useCommentsStore({\n documentId: publishedId,\n client,\n })\n\n const documentValue = useMemo(() => {\n return editState.draft || editState.published\n }, [editState.draft, editState.published])\n\n const mentionOptions = useMentionOptions(\n useMemo((): MentionHookOptions => ({documentValue}), [documentValue]),\n )\n\n const threadItemsByStatus: ThreadItemsByStatus = useMemo(() => {\n if (!schemaType || !currentUser) return EMPTY_COMMENTS_DATA\n // Since we only make one query to get all comments using the order `_createdAt desc` – we\n // can't know for sure that the comments added through the real time listener will be in the\n // correct order. In order to avoid that comments are out of order, we make an additional\n // sort here. The comments can be out of order if e.g a comment creation fails and is retried\n // later.\n const sorted = orderBy(data, ['_createdAt'], ['desc'])\n\n const items = buildCommentThreadItems({\n comments: sorted,\n schemaType,\n currentUser,\n documentValue,\n })\n\n return {\n open: items.filter((item) => item.parentComment.status === 'open'),\n resolved: items.filter((item) => item.parentComment.status === 'resolved'),\n }\n }, [currentUser, data, documentValue, schemaType])\n\n const getThreadLength = useCallback(\n (threadId: string) => {\n return threadItemsByStatus.open.filter((item) => item.threadId === threadId).length\n },\n [threadItemsByStatus.open],\n )\n\n const getComment = useCallback((id: string) => data?.find((c) => c._id === id), [data])\n\n const handleOnCreate = useCallback(\n (payload: CommentPostPayload) => {\n // If the comment we try to create already exists in the local state and has\n // the 'createError' state, we know that we are retrying a comment creation.\n // In that case, we want to change the state to 'createRetrying'.\n const hasError = data?.find((c) => c._id === payload._id)?._state?.type === 'createError'\n\n dispatch({\n type: 'COMMENT_ADDED',\n payload: {\n ...payload,\n _state: hasError ? {type: 'createRetrying'} : undefined,\n },\n })\n },\n [data, dispatch],\n )\n\n const handleOnUpdate = useCallback(\n (id: string, payload: Partial<CommentCreatePayload>) => {\n dispatch({\n type: 'COMMENT_UPDATED',\n payload: {\n _id: id,\n ...payload,\n },\n })\n },\n [dispatch],\n )\n\n const handleOnEdit = useCallback(\n (id: string, payload: CommentEditPayload) => {\n dispatch({\n type: 'COMMENT_UPDATED',\n payload: {\n _id: id,\n ...payload,\n },\n })\n },\n [dispatch],\n )\n\n const handleOnCreateError = useCallback(\n (id: string, err: Error) => {\n // When an error occurs during comment creation, we update the comment state\n // to `createError`. This will make the comment appear in the UI as a comment\n // that failed to be created. The user can then retry the comment creation.\n dispatch({\n type: 'COMMENT_UPDATED',\n payload: {\n _id: id,\n _state: {\n error: err,\n type: 'createError',\n },\n },\n })\n },\n [dispatch],\n )\n\n const {operation} = useCommentOperations(\n useMemo(\n (): CommentOperationsHookOptions => ({\n client,\n currentUser,\n dataset,\n documentId: publishedId,\n documentType,\n projectId,\n schemaType,\n workspace: workspaceName,\n getThreadLength,\n getComment,\n // This function runs when the first comment creation is executed.\n // It is used to create the addon dataset and configure a client for\n // the addon dataset.\n runSetup,\n // The following callbacks runs when the comment operation are executed.\n // They are used to update the local state of the comments immediately after\n // a comment operation has been executed. This is done to avoid waiting for\n // the real time listener to update the comments and make the UI feel more\n // responsive. The comment will be updated again when we receive an mutation\n // event from the real time listener.\n onCreate: handleOnCreate,\n onCreateError: handleOnCreateError,\n onEdit: handleOnEdit,\n onUpdate: handleOnUpdate,\n }),\n [\n client,\n currentUser,\n dataset,\n publishedId,\n documentType,\n projectId,\n schemaType,\n workspaceName,\n getThreadLength,\n getComment,\n runSetup,\n handleOnCreate,\n handleOnCreateError,\n handleOnEdit,\n handleOnUpdate,\n ],\n ),\n )\n\n const ctxValue = useMemo(\n (): CommentsContextValue => ({\n isRunningSetup,\n\n status,\n setStatus,\n\n getComment,\n\n isCommentsOpen,\n onCommentsOpen,\n\n comments: {\n data: threadItemsByStatus,\n error,\n loading: loading || isRunningSetup,\n },\n\n operation: {\n create: operation.create,\n edit: operation.edit,\n react: operation.react,\n remove: operation.remove,\n update: operation.update,\n },\n mentionOptions,\n }),\n [\n error,\n getComment,\n isCommentsOpen,\n isRunningSetup,\n loading,\n mentionOptions,\n onCommentsOpen,\n operation.create,\n operation.edit,\n operation.react,\n operation.remove,\n operation.update,\n status,\n threadItemsByStatus,\n ],\n )\n\n return <CommentsContext.Provider value={ctxValue}>{children}</CommentsContext.Provider>\n})\n","import {createContext} from 'react'\nimport {CommentsSetupContextValue} from './types'\n\n/**\n * @beta\n * @hidden\n */\nexport const CommentsSetupContext = createContext<CommentsSetupContextValue | null>(null)\n","import React, {useCallback, useEffect, useMemo, useState} from 'react'\nimport {SanityClient} from '@sanity/client'\nimport {CommentPostPayload} from '../../types'\nimport {CommentsSetupContext} from './CommentsSetupContext'\nimport {CommentsSetupContextValue} from './types'\nimport {useWorkspace, useClient, DEFAULT_STUDIO_CLIENT_OPTIONS} from 'sanity'\n\nconst API_VERSION = 'v2023-11-13'\n\ninterface CommentsSetupProviderProps {\n children: React.ReactNode\n}\n\n/**\n * @beta\n * @hidden\n */\nexport function CommentsSetupProvider(props: CommentsSetupProviderProps) {\n const {children} = props\n const {dataset, projectId} = useWorkspace()\n const originalClient = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n const [addonDatasetClient, setAddonDatasetClient] = useState<SanityClient | null>(null)\n const [isRunningSetup, setIsRunningSetup] = useState<boolean>(false)\n\n const getAddonDatasetName = useCallback(async (): Promise<string | undefined> => {\n const res = await originalClient.withConfig({apiVersion: API_VERSION}).request({\n uri: `/projects/${projectId}/datasets?datasetProfile=comments&addonFor=${dataset}`,\n tag: 'sanity.studio',\n })\n\n // The response is an array containing the addon dataset. We only expect\n // one addon dataset to be returned, so we return the name of the first\n // addon dataset in the array.\n return res?.[0]?.name\n }, [dataset, originalClient, projectId])\n\n const handleCreateClient = useCallback(\n (addonDatasetName: string) => {\n const client = originalClient.withConfig({\n apiVersion: API_VERSION,\n dataset: addonDatasetName,\n projectId,\n requestTagPrefix: 'sanity.studio',\n useCdn: false,\n withCredentials: true,\n })\n\n return client\n },\n [originalClient, projectId],\n )\n\n const handleRunSetup = useCallback(\n async (comment: CommentPostPayload) => {\n setIsRunningSetup(true)\n\n // Before running the setup, we check if the addon dataset already exists.\n // The addon dataset might already exist if another user has already run\n // the setup, but the current user has not refreshed the page yet and\n // therefore don't have a client for the addon dataset yet.\n try {\n const addonDatasetName = await getAddonDatasetName()\n\n if (addonDatasetName) {\n const client = handleCreateClient(addonDatasetName)\n setAddonDatasetClient(client)\n await client.create(comment)\n setIsRunningSetup(false)\n return\n }\n } catch (_) {\n // If the dataset does not exist we will get an error, but we can ignore\n // it since we will create the dataset in the next step.\n }\n\n try {\n // 1. Create the addon dataset\n const res = await originalClient.withConfig({apiVersion: API_VERSION}).request({\n uri: `/comments/${dataset}/setup`,\n method: 'POST',\n })\n\n const datasetName = res?.datasetName\n\n // 2. We can't continue if the addon dataset name is not returned\n if (!datasetName) {\n setIsRunningSetup(false)\n return\n }\n\n // 3. Create a client for the addon dataset and set it in the context value\n // so that the consumers can use it to execute comment operations and set up\n // the real time listener for the addon dataset.\n const client = handleCreateClient(datasetName)\n setAddonDatasetClient(client)\n\n // 4. Create the comment\n await client.create(comment)\n } catch (err) {\n throw err\n } finally {\n setIsRunningSetup(false)\n }\n },\n [dataset, getAddonDatasetName, handleCreateClient, originalClient],\n )\n\n useEffect(() => {\n // On mount, we check if the addon dataset already exists. If it does, we create\n // a client for it and set it in the context value so that the consumers can use\n // it to execute comment operations and set up the real time listener for the addon\n // dataset.\n getAddonDatasetName().then((addonDatasetName) => {\n if (!addonDatasetName) return\n const client = handleCreateClient(addonDatasetName)\n setAddonDatasetClient(client)\n })\n }, [getAddonDatasetName, handleCreateClient])\n\n const ctxValue = useMemo(\n (): CommentsSetupContextValue => ({\n client: addonDatasetClient,\n runSetup: handleRunSetup,\n isRunningSetup,\n }),\n [addonDatasetClient, handleRunSetup, isRunningSetup],\n )\n\n return <CommentsSetupContext.Provider value={ctxValue}>{children}</CommentsSetupContext.Provider>\n}\n","import {createContext} from 'react'\nimport {CommentsSelectedPathContextValue} from './types'\n\nexport const CommentsSelectedPathContext = createContext<CommentsSelectedPathContextValue | null>(\n null,\n)\n","import React, {useCallback, useMemo, useState} from 'react'\nimport {CommentsSelectedPathContext} from './CommentsSelectedPathContext'\nimport {CommentsSelectedPath, CommentsSelectedPathContextValue} from './types'\n\ninterface CommentsSelectedPathProviderProps {\n children: React.ReactNode\n}\n\nexport const CommentsSelectedPathProvider = React.memo(function CommentsSelectedPathProvider(\n props: CommentsSelectedPathProviderProps,\n) {\n const {children} = props\n const [selectedPath, setSelectedPath] = useState<CommentsSelectedPath | null>(null)\n\n const handleSelectPath = useCallback((nextPath: CommentsSelectedPath | null) => {\n setSelectedPath(nextPath)\n }, [])\n\n const ctxValue = useMemo(\n (): CommentsSelectedPathContextValue => ({\n selectedPath,\n setSelectedPath: handleSelectPath,\n }),\n [selectedPath, handleSelectPath],\n )\n\n return (\n <CommentsSelectedPathContext.Provider value={ctxValue}>\n {children}\n </CommentsSelectedPathContext.Provider>\n )\n})\n","import {CheckmarkIcon, ChevronDownIcon, DoubleChevronRightIcon} from '@sanity/icons'\nimport {Card, Flex, Menu, Text} from '@sanity/ui'\nimport React, {forwardRef, useCallback} from 'react'\nimport styled from 'styled-components'\nimport {Button, MenuButton, MenuItem} from '../../../../ui-components'\nimport {commentsLocaleNamespace} from '../../i18n'\nimport {CommentStatus} from '../../src'\nimport {BetaBadge, useTranslation} from 'sanity'\n\nconst Root = styled(Card)({\n position: 'relative',\n zIndex: 1,\n lineHeight: 0,\n})\n\ninterface CommentsInspectorHeaderProps {\n onClose: () => void\n onViewChange: (view: CommentStatus) => void\n view: CommentStatus\n}\n\nexport const CommentsInspectorHeader = forwardRef(function CommentsInspectorHeader(\n props: CommentsInspectorHeaderProps,\n ref: React.ForwardedRef<HTMLDivElement>,\n) {\n const {t} = useTranslation(commentsLocaleNamespace)\n const {onClose, onViewChange, view} = props\n\n const handleSetOpenView = useCallback(() => onViewChange('open'), [onViewChange])\n const handleSetResolvedView = useCallback(() => onViewChange('resolved'), [onViewChange])\n\n return (\n <Root ref={ref}>\n <Flex padding={2}>\n <Flex align=\"center\" flex={1} gap={2} paddingY={2} padding={3}>\n <Text as=\"h1\" size={1} weight=\"medium\">\n {t('comments.header-title')}\n </Text>\n\n <BetaBadge />\n </Flex>\n\n <Flex flex=\"none\" padding={1} gap={2}>\n <MenuButton\n id=\"comment-status-menu-button\"\n button={\n <Button\n text={\n view === 'open'\n ? t('comments.dropdown-title-open')\n : t('comments.dropdown-title-resolved')\n }\n mode=\"bleed\"\n iconRight={ChevronDownIcon}\n />\n } //this startcase needs to be fixed\n menu={\n <Menu style={{width: '180px'}}>\n <MenuItem\n iconRight={view === 'open' ? CheckmarkIcon : undefined}\n onClick={handleSetOpenView}\n text={t('comments.dropdown-item-open')}\n />\n <MenuItem\n iconRight={view === 'resolved' ? CheckmarkIcon : undefined}\n onClick={handleSetResolvedView}\n text={t('comments.dropdown-item-resolved')}\n />\n </Menu>\n }\n popover={{placement: 'bottom-end'}}\n />\n\n <Button\n aria-label={t('comments.button-close-pane-text-aria-label')}\n icon={DoubleChevronRightIcon}\n mode=\"bleed\"\n onClick={onClose}\n tooltipProps={{content: t('comments.button-close-pane-text')}}\n />\n </Flex>\n </Flex>\n </Root>\n )\n})\n","import {LaunchIcon} from '@sanity/icons'\nimport {Card, Text} from '@sanity/ui'\nimport React from 'react'\nimport styled from 'styled-components'\nimport {commentsLocaleNamespace} from '../../i18n'\nimport {useTranslation} from 'sanity'\n\nconst FEEDBACK_FORM_LINK = 'https://snty.link/comments-beta-feedback'\n\nconst Span = styled.span`\n margin-right: 0.2em;\n`\n\nconst Link = styled.a`\n white-space: nowrap;\n`\n\nconst FooterCard = styled(Card)({\n position: 'relative',\n zIndex: 1,\n})\n\nexport function CommentsInspectorFeedbackFooter() {\n const {t} = useTranslation(commentsLocaleNamespace)\n return (\n <FooterCard padding={4}>\n <Text muted size={1}>\n {t('comments.feedback-footer-title')}{' '}\n <Link href={FEEDBACK_FORM_LINK} target=\"_blank\" rel=\"noreferrer\">\n <Span>{t('comments.feedback-footer-link')} </Span> <LaunchIcon />\n </Link>\n </Text>\n </FooterCard>\n )\n}\n","import {Flex, Layer, useClickOutside, useLayer, useToast} from '@sanity/ui'\nimport {Fragment, useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport * as PathUtils from '@sanity/util/paths'\nimport styled from 'styled-components'\nimport {usePaneRouter} from '../../../components'\nimport {EMPTY_PARAMS} from '../../../constants'\nimport {useDocumentPane} from '../../../panes/document/useDocumentPane'\nimport {\n CommentCreatePayload,\n CommentDeleteDialog,\n CommentEditPayload,\n CommentReactionOption,\n CommentsList,\n CommentsListHandle,\n CommentsOnboardingPopover,\n CommentsSelectedPath,\n CommentStatus,\n useComments,\n useCommentsEnabled,\n useCommentsOnboarding,\n useCommentsSelectedPath,\n} from '../../src'\nimport {commentsLocaleNamespace} from '../../i18n'\nimport {CommentsInspectorHeader} from './CommentsInspectorHeader'\nimport {CommentsInspectorFeedbackFooter} from './CommentsInspectorFeedbackFooter'\nimport {DocumentInspectorProps, useCurrentUser, useTranslation, useUnique} from 'sanity'\n\ninterface CommentToDelete {\n commentId: string\n isParent: boolean\n}\n\nconst RootLayer = styled(Layer)`\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n`\n\nexport function CommentsInspector(props: DocumentInspectorProps) {\n const isEnabled = useCommentsEnabled()\n\n if (!isEnabled) return null\n\n // We wrap the comments inspector in a Layer in order to know when the comments inspector\n // is the top layer (that is, if there is e.g. a popover open). This is used to determine\n // if we should deselect the selected path when clicking outside the comments inspector.\n return (\n <RootLayer>\n <CommentsInspectorInner {...props} />\n </RootLayer>\n )\n}\n\nfunction CommentsInspectorInner(props: DocumentInspectorProps) {\n const {t} = useTranslation(commentsLocaleNamespace)\n const {onClose} = props\n\n const [showDeleteDialog, setShowDeleteDialog] = useState<boolean>(false)\n const [commentToDelete, setCommentToDelete] = useState<CommentToDelete | null>(null)\n const [deleteLoading, setDeleteLoading] = useState<boolean>(false)\n const [deleteError, setDeleteError] = useState<Error | null>(null)\n const commentsListHandleRef = useRef<CommentsListHandle>(null)\n\n const rootRef = useRef<HTMLDivElement | null>(null)\n\n const currentUser = useCurrentUser()\n const {params, createPathWithParams, setParams} = usePaneRouter()\n const uniqueParams = useUnique(params) || (EMPTY_PARAMS as Partial<{comment?: string}>)\n const commentIdParamRef = useRef<string | undefined>(uniqueParams?.comment)\n\n const didScrollToCommentFromParam = useRef<boolean>(false)\n\n const pushToast = useToast().push\n const {onPathOpen, ready} = useDocumentPane()\n\n const {isDismissed, setDismissed} = useCommentsOnboarding()\n\n const {comments, getComment, isRunningSetup, mentionOptions, setStatus, status, operation} =\n useComments()\n\n const {isTopLayer} = useLayer()\n\n const currentComments = useMemo(() => comments.data[status], [comments, status])\n\n const loading = useMemo(() => {\n // The comments and the document are loaded separately which means that\n // the comments might be ready before the document is ready. Since the user should\n // be able to interact with the document from the comments inspector, we need to make sure\n // that the document is ready before we allow the user to interact with the comments.\n return comments.loading || !ready\n }, [comments.loading, ready])\n\n const {selectedPath, setSelectedPath} = useCommentsSelectedPath()\n\n const handleChangeView = useCallback(\n (nextView: CommentStatus) => {\n setStatus(nextView)\n setSelectedPath(null)\n },\n [setSelectedPath, setStatus],\n )\n\n const handleCloseInspector = useCallback(() => {\n onClose()\n setSelectedPath(null)\n }, [onClose, setSelectedPath])\n\n const handleCopyLink = useCallback(\n (id: string) => {\n const path = createPathWithParams({\n ...params,\n comment: id,\n })\n\n const url = `${window.location.origin}${path}`\n\n navigator.clipboard\n .writeText(url)\n .then(() => {\n pushToast({\n closable: true,\n status: 'info',\n title: t('comments.copy-link-success-message'),\n })\n })\n .catch(() => {\n pushToast({\n closable: true,\n status: 'error',\n title: t('comments.copy-link-error-message'),\n })\n })\n },\n [createPathWithParams, params, pushToast, t],\n )\n\n const handleCreateRetry = useCallback(\n (id: string) => {\n const comment = getComment(id)\n if (!comment) return\n\n operation.create({\n fieldPath: comment.target.path.field,\n id: comment._id,\n message: comment.message,\n parentCommentId: comment.parentCommentId,\n reactions: comment.reactions || [],\n status: comment.status,\n threadId: comment.threadId,\n })\n },\n [getComment, operation],\n )\n\n const closeDeleteDialog = useCallback(() => {\n if (deleteLoading) return\n setShowDeleteDialog(false)\n setCommentToDelete(null)\n }, [deleteLoading])\n\n const handlePathSelect = useCallback(\n (nextPath: CommentsSelectedPath) => {\n setSelectedPath(nextPath)\n\n if (nextPath?.fieldPath) {\n const path = PathUtils.fromString(nextPath.fieldPath)\n onPathOpen(path)\n }\n },\n [onPathOpen, setSelectedPath],\n )\n\n const handleNewThreadCreate = useCallback(\n (payload: CommentCreatePayload) => {\n operation.create(payload)\n\n setSelectedPath({\n fieldPath: payload.fieldPath,\n origin: 'inspector',\n threadId: payload.threadId,\n })\n },\n [operation, setSelectedPath],\n )\n\n const handleReply = useCallback(\n (payload: CommentCreatePayload) => {\n operation.create(payload)\n },\n [operation],\n )\n\n const handleEdit = useCallback(\n (id: string, payload: CommentEditPayload) => {\n operation.edit(id, payload)\n },\n [operation],\n )\n\n const onDeleteStart = useCallback(\n (id: string) => {\n const parent = currentComments.find((c) => c.parentComment?._id === id)\n const isParent = Boolean(parent && parent?.replies?.length > 0)\n\n setShowDeleteDialog(true)\n setCommentToDelete({\n commentId: id,\n isParent,\n })\n },\n\n [currentComments],\n )\n\n const handleDeleteConfirm = useCallback(\n async (id: string) => {\n try {\n setDeleteLoading(true)\n await operation.remove(id)\n closeDeleteDialog()\n } catch (err) {\n setDeleteError(err)\n } finally {\n setDeleteLoading(false)\n }\n },\n [closeDeleteDialog, operation],\n )\n\n const handleScrollToComment = useCallback(\n (id: string, origin?: CommentsSelectedPath['origin']) => {\n const comment = getComment(id)\n\n if (comment) {\n setSelectedPath({\n fieldPath: comment.target.path.field || null,\n origin: origin || 'inspector',\n threadId: comment.threadId || null,\n })\n\n setTimeout(() => {\n commentsListHandleRef.current?.scrollToComment(id)\n })\n }\n },\n [getComment, setSelectedPath],\n )\n\n const handleStatusChange = useCallback(\n (id: string, nextStatus: CommentStatus) => {\n operation.update(id, {\n status: nextStatus,\n })\n\n // If the comment is being opened, we want to change to the \"open\" view\n // and scroll to the comment\n if (nextStatus === 'open') {\n setStatus('open')\n handleScrollToComment(id)\n }\n },\n [handleScrollToComment, operation, setStatus],\n )\n\n const handleReactionSelect = useCallback(\n (id: string, reaction: CommentReactionOption) => {\n operation.react(id, reaction)\n },\n [operation],\n )\n\n const handleDeselectPath = useCallback(() => {\n // Clear the selected path when clicking outside the comments inspector.\n // We do this only when the comments inspector is the top layer.\n if (selectedPath && isTopLayer) {\n setSelectedPath(null)\n }\n }, [isTopLayer, selectedPath, setSelectedPath])\n\n useClickOutside(handleDeselectPath, [rootRef.current])\n\n useEffect(() => {\n // Make sure that the comment exists before we try to scroll to it.\n // We can't solely rely on the comment id from the url since the comment might not be loaded yet.\n const commentToScrollTo = getComment(commentIdParamRef.current || '')\n\n if (!loading && commentToScrollTo && didScrollToCommentFromParam.current === false) {\n // Make sure we have the correct status set before we scroll to the comment\n setStatus(commentToScrollTo.status || 'open')\n\n // The second argument sets the select path origin to 'url' which will prevent the field in the form\n // the comment refers to from being selected and scrolled to. This is because, on mount, we will in\n // some cases attempt to perform two scrolls: one to the field and one to the comment.\n // These scroll events seems to interfere with each other and the result is that the comment is not\n // scrolled to. Therefore, when there's a comment id in the url, we prioritize scrolling to the comment\n // and not the field.\n handleScrollToComment(commentToScrollTo._id, 'url')\n\n didScrollToCommentFromParam.current = true\n commentIdParamRef.current = undefined\n\n setParams({\n ...params,\n comment: undefined,\n })\n }\n }, [getComment, handleScrollToComment, loading, params, setParams, setStatus])\n\n return (\n <Fragment>\n {commentToDelete && showDeleteDialog && (\n <CommentDeleteDialog\n {...commentToDelete}\n error={deleteError}\n loading={deleteLoading}\n onClose={closeDeleteDialog}\n onConfirm={handleDeleteConfirm}\n />\n )}\n\n <Flex\n direction=\"column\"\n flex={1}\n height=\"fill\"\n onClick={handleDeselectPath}\n overflow=\"hidden\"\n ref={rootRef}\n >\n <CommentsOnboardingPopover\n onDismiss={setDismissed}\n open={!isDismissed}\n placement=\"left-start\"\n >\n <CommentsInspectorHeader\n onClose={handleCloseInspector}\n onViewChange={handleChangeView}\n view={status}\n />\n </CommentsOnboardingPopover>\n\n {currentUser && (\n <CommentsList\n comments={currentComments}\n currentUser={currentUser}\n error={comments.error}\n loading={loading}\n mentionOptions={mentionOptions}\n onCopyLink={handleCopyLink}\n onCreateRetry={handleCreateRetry}\n onDelete={onDeleteStart}\n onEdit={handleEdit}\n onNewThreadCreate={handleNewThreadCreate}\n onPathSelect={handlePathSelect}\n onReactionSelect={handleReactionSelect}\n onReply={handleReply}\n onStatusChange={handleStatusChange}\n readOnly={isRunningSetup}\n ref={commentsListHandleRef}\n selectedPath={selectedPath}\n status={status}\n />\n )}\n\n <CommentsInspectorFeedbackFooter />\n </Flex>\n </Fragment>\n )\n}\n","import {CommentIcon} from '@sanity/icons'\nimport {COMMENTS_INSPECTOR_NAME} from '../../../panes/document/constants'\nimport {commentsLocaleNamespace} from '../../i18n'\nimport {useCommentsEnabled} from '../../src'\nimport {CommentsInspector} from './CommentsInspector'\nimport {DocumentInspectorMenuItem, defineDocumentInspector, useTranslation} from 'sanity'\n\nfunction useMenuItem(): DocumentInspectorMenuItem {\n const isEnabled = useCommentsEnabled()\n const {t} = useTranslation(commentsLocaleNamespace)\n\n return {\n hidden: !isEnabled,\n icon: CommentIcon,\n showAsAction: true,\n title: t('comments.document-inspector-title'),\n }\n}\n\nexport const commentsInspector = defineDocumentInspector({\n name: COMMENTS_INSPECTOR_NAME,\n component: CommentsInspector,\n useMenuItem,\n})\n","import React, {useCallback, useMemo, useRef, useState} from 'react'\nimport {\n Flex,\n Stack,\n Text,\n useClickOutside,\n // eslint-disable-next-line no-restricted-imports\n Button as SanityUIButton, // Button with specific styling for the children\n} from '@sanity/ui'\nimport styled from 'styled-components'\nimport {\n CommentMessage,\n CommentInput,\n CommentInputHandle,\n hasCommentMessageValue,\n AddCommentIcon,\n CommentIcon,\n MentionOptionsHookValue,\n} from '../../src'\nimport {Button, Popover, Tooltip} from '../../../../ui-components'\nimport {commentsLocaleNamespace} from '../../i18n'\nimport {CurrentUser, PortableTextBlock, Translate, useTranslation} from 'sanity'\n\nconst ContentStack = styled(Stack)`\n width: 320px;\n`\n\ninterface CommentsFieldButtonProps {\n count: number\n currentUser: CurrentUser\n fieldTitle: string\n isRunningSetup: boolean\n mentionOptions: MentionOptionsHookValue\n onChange: (value: PortableTextBlock[]) => void\n onClick?: () => void\n onCommentAdd: () => void\n onDiscard: () => void\n onInputKeyDown?: (event: React.KeyboardEvent<Element>) => void\n open: boolean\n setOpen: (open: boolean) => void\n value: CommentMessage\n}\n\nexport function CommentsFieldButton(props: CommentsFieldButtonProps) {\n const {\n count,\n currentUser,\n fieldTitle,\n isRunningSetup,\n mentionOptions,\n onChange,\n onClick,\n onCommentAdd,\n onDiscard,\n onInputKeyDown,\n open,\n setOpen,\n value,\n } = props\n const {t} = useTranslation(commentsLocaleNamespace)\n const [popoverElement, setPopoverElement] = useState<HTMLDivElement | null>(null)\n const [addCommentButtonElement, setAddCommentButtonElement] = useState<HTMLButtonElement | null>(\n null,\n )\n const commentInputHandle = useRef<CommentInputHandle | null>(null)\n const hasComments = Boolean(count > 0)\n\n const closePopover = useCallback(() => {\n if (!open) return\n setOpen(false)\n addCommentButtonElement?.focus()\n }, [addCommentButtonElement, open, setOpen])\n\n const handleSubmit = useCallback(() => {\n onCommentAdd()\n closePopover()\n }, [closePopover, onCommentAdd])\n\n const hasValue = useMemo(() => hasCommentMessageValue(value), [value])\n\n const startDiscard = useCallback(() => {\n if (!hasValue) {\n closePopover()\n return\n }\n\n commentInputHandle.current?.discardDialogController.open()\n }, [closePopover, hasValue])\n\n const handleInputKeyDown = useCallback(\n (event: React.KeyboardEvent<Element>) => {\n // Don't act if the input already prevented this event\n if (event.isDefaultPrevented()) {\n return\n }\n\n // Call parent handler\n if (onInputKeyDown) onInputKeyDown(event)\n },\n [onInputKeyDown],\n )\n\n const handleDiscardCancel = useCallback(() => {\n commentInputHandle.current?.discardDialogController.close()\n }, [])\n\n const handleDiscardConfirm = useCallback(() => {\n commentInputHandle.current?.discardDialogController.close()\n closePopover()\n onDiscard()\n }, [closePopover, onDiscard])\n\n const handlePopoverKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Escape') {\n event.preventDefault()\n event.stopPropagation()\n startDiscard()\n }\n },\n [startDiscard],\n )\n\n const handleClickOutside = useCallback(() => {\n if (!open) return\n\n startDiscard()\n }, [open, startDiscard])\n\n useClickOutside(handleClickOutside, [popoverElement])\n\n if (!hasComments) {\n const placeholder = (\n <Translate\n t={t}\n i18nKey=\"comments.placeholder-add-comment-field-title\"\n components={{Strong: () => <b>{fieldTitle}</b>}}\n />\n )\n\n const content = (\n <ContentStack padding={2} space={4}>\n <CommentInput\n currentUser={currentUser}\n focusLock\n focusOnMount\n mentionOptions={mentionOptions}\n onChange={onChange}\n onDiscardCancel={handleDiscardCancel}\n onDiscardConfirm={handleDiscardConfirm}\n onKeyDown={handleInputKeyDown}\n onSubmit={handleSubmit}\n placeholder={placeholder}\n readOnly={isRunningSetup}\n ref={commentInputHandle}\n value={value}\n />\n </ContentStack>\n )\n\n return (\n <Popover\n constrainSize\n content={content}\n fallbackPlacements={['bottom-end']}\n open={open}\n placement=\"right-start\"\n portal\n ref={setPopoverElement}\n onKeyDown={handlePopoverKeyDown}\n >\n <div>\n <Button\n aria-label={t('comments.field-button-aria-label-add')}\n disabled={isRunningSetup}\n icon={AddCommentIcon}\n mode=\"bleed\"\n onClick={onClick}\n ref={setAddCommentButtonElement}\n selected={open}\n tooltipProps={{\n content: t('comments.field-button-title'),\n placement: 'top',\n }}\n />\n </div>\n </Popover>\n )\n }\n\n return (\n <Tooltip portal placement=\"top\" content={t('comments.field-button-content', {count: count})}>\n <SanityUIButton\n aria-label={t('comments.field-button-aria-label-open')}\n mode=\"bleed\"\n onClick={onClick}\n padding={2}\n space={2}\n >\n <Flex align=\"center\" gap={2}>\n <Text size={1}>\n <CommentIcon />\n </Text>\n <Text size={0}>{count > 9 ? '9+' : count}</Text>\n </Flex>\n </SanityUIButton>\n </Tooltip>\n )\n}\n","import React, {useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {uuid} from '@sanity/uuid'\nimport * as PathUtils from '@sanity/util/paths'\nimport {PortableTextBlock} from '@sanity/types'\nimport {Stack, useBoundaryElement} from '@sanity/ui'\nimport styled, {css} from 'styled-components'\nimport scrollIntoViewIfNeeded, {Options} from 'scroll-into-view-if-needed'\nimport {motion, AnimatePresence, Variants} from 'framer-motion'\nimport {hues} from '@sanity/color'\nimport {\n useCommentsEnabled,\n useComments,\n CommentCreatePayload,\n useCommentsSelectedPath,\n} from '../../src'\nimport {CommentsFieldButton} from './CommentsFieldButton'\nimport {FieldProps, getSchemaTypeTitle, useCurrentUser} from 'sanity'\n\nconst HIGHLIGHT_BLOCK_VARIANTS: Variants = {\n initial: {\n opacity: 0,\n },\n animate: {\n opacity: 1,\n },\n exit: {\n opacity: 0,\n },\n}\n\nexport function CommentsField(props: FieldProps) {\n const isEnabled = useCommentsEnabled()\n\n if (!isEnabled) {\n return props.renderDefault(props)\n }\n\n return <CommentFieldInner {...props} />\n}\n\nconst SCROLL_INTO_VIEW_OPTIONS: ScrollIntoViewOptions = {\n behavior: 'smooth',\n block: 'start',\n}\n\nconst HighlightDiv = styled(motion.div)(({theme}) => {\n const {radius, space, color} = theme.sanity\n const bg = hues.yellow[color.dark ? 900 : 50].hex\n\n return css`\n mix-blend-mode: ${color.dark ? 'screen' : 'multiply'};\n border-radius: ${radius[3]}px;\n top: -${space[2]}px;\n left: -${space[2]}px;\n bottom: -${space[2]}px;\n right: -${space[2]}px;\n pointer-events: none;\n position: absolute;\n z-index: 1;\n width: calc(100% + ${space[2] * 2}px);\n height: calc(100% + ${space[2] * 2}px);\n background-color: ${bg};\n `\n})\n\nconst FieldStack = styled(Stack)`\n position: relative;\n`\n\nfunction CommentFieldInner(props: FieldProps) {\n const [open, setOpen] = useState<boolean>(false)\n const [value, setValue] = useState<PortableTextBlock[] | null>(null)\n const rootElementRef = useRef<HTMLDivElement | null>(null)\n const [threadIdToScrollTo, setThreadIdToScrollTo] = useState<string | null>(null)\n\n const {element: boundaryElement} = useBoundaryElement()\n\n const currentUser = useCurrentUser()\n\n const {\n comments,\n isCommentsOpen,\n isRunningSetup,\n mentionOptions,\n onCommentsOpen,\n operation,\n setStatus,\n status,\n } = useComments()\n const {selectedPath, setSelectedPath} = useCommentsSelectedPath()\n\n const fieldTitle = useMemo(() => getSchemaTypeTitle(props.schemaType), [props.schemaType])\n\n // Determine if the current field is selected\n const isSelected = useMemo(() => {\n if (!isCommentsOpen) return false\n if (selectedPath?.origin === 'form' || selectedPath?.origin === 'url') return false\n return selectedPath?.fieldPath === PathUtils.toString(props.path)\n }, [isCommentsOpen, props.path, selectedPath?.fieldPath, selectedPath?.origin])\n\n // Total number of comments for the current field\n const count = useMemo(() => {\n const stringPath = PathUtils.toString(props.path)\n\n const commentsCount = comments.data.open\n .map((c) => (c.fieldPath === stringPath ? c.commentsCount : 0))\n .reduce((acc, val) => acc + val, 0)\n\n return commentsCount || 0\n }, [comments.data.open, props.path])\n\n const hasComments = Boolean(count > 0)\n\n const handleSetThreadToScrollTo = useCallback(\n (threadId: string | null) => {\n setSelectedPath({\n threadId,\n origin: 'form',\n fieldPath: PathUtils.toString(props.path),\n })\n\n setThreadIdToScrollTo(threadId)\n },\n [props.path, setSelectedPath],\n )\n\n const handleClick = useCallback(() => {\n // When clicking a comment button when the field has comments, we want to:\n if (hasComments) {\n // 1. Change the status to 'open' if it's 'resolved'\n if (status === 'resolved') {\n setStatus('open')\n }\n\n // 2. Close the comment input if it's open\n setOpen(false)\n\n // 3. Open the comments inspector\n onCommentsOpen?.()\n\n // 4. Find the latest comment thread ID for the current field\n const scrollToThreadId = comments.data.open.find(\n (c) => c.fieldPath === PathUtils.toString(props.path),\n )?.threadId\n\n // 5. Set the thread ID to scroll to in a state and then scroll to it\n // in the `useEffect` below.\n if (scrollToThreadId) {\n handleSetThreadToScrollTo(scrollToThreadId)\n }\n\n return\n }\n\n // Else, toggle the comment input open/closed\n setOpen((v) => !v)\n }, [\n hasComments,\n status,\n onCommentsOpen,\n comments.data.open,\n setStatus,\n props.path,\n handleSetThreadToScrollTo,\n ])\n\n const handleCommentAdd = useCallback(() => {\n if (value) {\n // Since this is a new comment, we generate a new thread ID\n const newThreadId = uuid()\n\n // Construct the comment payload\n const nextComment: CommentCreatePayload = {\n fieldPath: PathUtils.toString(props.path),\n message: value,\n parentCommentId: undefined,\n status: 'open',\n threadId: newThreadId,\n // New comments have no reactions\n reactions: [],\n }\n\n // Execute the create mutation\n operation.create(nextComment)\n\n // If a comment is added to a field when viewing resolved comments, we switch\n // to open comments and scroll to the comment that was just added\n // Open the inspector when a new comment is added\n onCommentsOpen?.()\n\n if (status === 'resolved') {\n // Set the status to 'open' so that the comment is visible\n setStatus('open')\n }\n\n // Reset the value\n setValue(null)\n\n // Set the thread ID to scroll to\n handleSetThreadToScrollTo(newThreadId)\n }\n }, [handleSetThreadToScrollTo, onCommentsOpen, operation, props.path, setStatus, status, value])\n\n const handleDiscard = useCallback(() => setValue(null), [])\n\n const scrollIntoViewIfNeededOpts = useMemo(\n () =>\n ({\n ...SCROLL_INTO_VIEW_OPTIONS,\n boundary: boundaryElement,\n scrollMode: 'if-needed',\n block: 'start',\n }) satisfies Options,\n [boundaryElement],\n )\n\n // Effect that handles scroll the field into view when it's selected\n useEffect(() => {\n if (isSelected && rootElementRef.current && isCommentsOpen) {\n scrollIntoViewIfNeeded(rootElementRef.current, scrollIntoViewIfNeededOpts)\n }\n }, [boundaryElement, isCommentsOpen, isSelected, props.path, scrollIntoViewIfNeededOpts])\n\n // // Effect that handles scroll the comment thread into view when it's selected\n useEffect(() => {\n if (isCommentsOpen && threadIdToScrollTo) {\n const node = document.querySelector(`[data-group-id=\"${threadIdToScrollTo}\"]`)\n\n if (node) {\n node.scrollIntoView(SCROLL_INTO_VIEW_OPTIONS)\n setThreadIdToScrollTo(null)\n }\n }\n }, [isCommentsOpen, threadIdToScrollTo])\n\n const internalComments: FieldProps['__internal_comments'] = useMemo(\n () => ({\n button: currentUser && (\n <CommentsFieldButton\n count={Number(count)}\n currentUser={currentUser}\n fieldTitle={fieldTitle}\n isRunningSetup={isRunningSetup}\n mentionOptions={mentionOptions}\n onChange={setValue}\n onClick={handleClick}\n onCommentAdd={handleCommentAdd}\n onDiscard={handleDiscard}\n open={open}\n setOpen={setOpen}\n value={value}\n />\n ),\n hasComments,\n isAddingComment: open,\n }),\n [\n currentUser,\n count,\n fieldTitle,\n mentionOptions,\n handleClick,\n handleCommentAdd,\n handleDiscard,\n open,\n value,\n isRunningSetup,\n hasComments,\n ],\n )\n\n return (\n <FieldStack ref={rootElementRef}>\n {props.renderDefault({\n ...props,\n // eslint-disable-next-line camelcase\n __internal_comments: internalComments,\n })}\n\n <AnimatePresence>\n {isSelected && (\n <HighlightDiv\n animate=\"animate\"\n exit=\"exit\"\n initial=\"initial\"\n variants={HIGHLIGHT_BLOCK_VARIANTS}\n />\n )}\n </AnimatePresence>\n </FieldStack>\n )\n}\n","import React, {useCallback} from 'react'\nimport {\n CommentsEnabledProvider,\n CommentsProvider,\n CommentsSelectedPathProvider,\n useCommentsEnabled,\n} from '../../src'\nimport {useDocumentPane} from '../../..'\nimport {COMMENTS_INSPECTOR_NAME} from '../../../panes/document/constants'\nimport {DocumentLayoutProps} from 'sanity'\n\nexport function CommentsDocumentLayout(props: DocumentLayoutProps) {\n const {documentId, documentType} = props\n\n return (\n <CommentsEnabledProvider documentId={documentId} documentType={documentType}>\n <CommentsDocumentLayoutInner {...props} />\n </CommentsEnabledProvider>\n )\n}\n\nfunction CommentsDocumentLayoutInner(props: DocumentLayoutProps) {\n const {documentId, documentType} = props\n const commentsEnabled = useCommentsEnabled()\n const {openInspector, inspector} = useDocumentPane()\n\n const handleOpenCommentsInspector = useCallback(() => {\n if (inspector?.name === COMMENTS_INSPECTOR_NAME) return\n\n openInspector(COMMENTS_INSPECTOR_NAME)\n }, [inspector?.name, openInspector])\n\n // If comments are not enabled, render the default document layout\n if (!commentsEnabled) {\n return props.renderDefault(props)\n }\n\n return (\n <CommentsProvider\n documentId={documentId}\n documentType={documentType}\n isCommentsOpen={inspector?.name === COMMENTS_INSPECTOR_NAME}\n onCommentsOpen={handleOpenCommentsInspector}\n >\n <CommentsSelectedPathProvider>{props.renderDefault(props)}</CommentsSelectedPathProvider>\n </CommentsProvider>\n )\n}\n","import React from 'react'\nimport {CommentsOnboardingProvider, CommentsSetupProvider} from '../../src'\nimport {LayoutProps} from 'sanity'\n\nexport function CommentsStudioLayout(props: LayoutProps) {\n return (\n <CommentsSetupProvider>\n <CommentsOnboardingProvider>{props.renderDefault(props)}</CommentsOnboardingProvider>\n </CommentsSetupProvider>\n )\n}\n","import {commentsUsEnglishLocaleBundle} from '../i18n'\nimport {commentsInspector} from './inspector'\nimport {CommentsField} from './field'\nimport {CommentsDocumentLayout} from './document-layout'\nimport {CommentsStudioLayout} from './studio-layout'\nimport {definePlugin} from 'sanity'\n\nexport const comments = definePlugin({\n name: 'sanity/structure/comments',\n\n document: {\n inspectors: [commentsInspector],\n components: {\n unstable_layout: CommentsDocumentLayout,\n },\n },\n\n form: {\n components: {\n field: CommentsField,\n },\n },\n\n studio: {\n components: {\n layout: CommentsStudioLayout,\n },\n },\n\n i18n: {bundles: [commentsUsEnglishLocaleBundle]},\n})\n","import {createContext} from 'react'\nimport type {StructureToolContextValue} from './types'\n\nexport const StructureToolContext = createContext<StructureToolContextValue | null>(null)\n","import {useContext} from 'react'\nimport {StructureToolContext} from './StructureToolContext'\nimport type {StructureToolContextValue} from './types'\n\n/** @internal */\nexport function useStructureTool(): StructureToolContextValue {\n const structureTool = useContext(StructureToolContext)\n\n if (!structureTool) throw new Error(`StructureTool: missing context value`)\n\n return structureTool\n}\n","import {\n TrashIcon,\n EditIcon,\n IconComponent,\n PublishIcon,\n UnpublishIcon,\n CloseIcon,\n AddCircleIcon,\n} from '@sanity/icons'\n\nexport const TIMELINE_ICON_COMPONENTS: {[key: string]: IconComponent | undefined} = {\n create: AddCircleIcon,\n delete: TrashIcon,\n discardDraft: CloseIcon,\n initial: AddCircleIcon,\n editDraft: EditIcon,\n editLive: EditIcon,\n publish: PublishIcon,\n unpublish: UnpublishIcon,\n}\n","import {IconComponent} from '@sanity/icons'\nimport {TIMELINE_ICON_COMPONENTS} from './constants'\nimport {ChunkType} from 'sanity'\n\nexport function getTimelineEventIconComponent(type: ChunkType): IconComponent | undefined {\n return TIMELINE_ICON_COMPONENTS[type]\n}\n","import React from 'react'\nimport {AvatarStack} from '@sanity/ui'\nimport {UserAvatar} from 'sanity'\n\ninterface UserAvatarStackProps {\n maxLength?: number\n userIds: string[]\n}\n\nexport function UserAvatarStack({maxLength, userIds}: UserAvatarStackProps) {\n return (\n <AvatarStack maxLength={maxLength}>\n {userIds.map((userId) => (\n <UserAvatar key={userId} user={userId} withTooltip />\n ))}\n </AvatarStack>\n )\n}\n","import {\n Box,\n Flex,\n rem,\n // eslint-disable-next-line no-restricted-imports\n Button, // Button with specific styling and children behavior.\n} from '@sanity/ui'\nimport styled, {css} from 'styled-components'\n\nexport const IconWrapper = styled(Flex)(({theme}) => {\n const borderColor = theme.sanity.color.base.skeleton?.from\n\n return css`\n --timeline-hairline-width: 1px;\n position: relative;\n z-index: 2;\n margin: 0;\n padding: 0;\n\n &::before {\n position: absolute;\n content: '';\n height: 100%;\n width: var(--timeline-hairline-width);\n background: ${borderColor};\n top: 0;\n left: calc((100% - var(--timeline-hairline-width)) / 2);\n z-index: 1;\n }\n `\n})\n\nexport const Root = styled(Button)<{\n $selected: boolean\n $disabled: boolean\n}>(({$selected, $disabled}) => {\n return css`\n position: relative;\n width: 100%;\n\n /* Line styling */\n &[data-first] ${IconWrapper}::before {\n height: 50%;\n top: unset;\n bottom: 0;\n }\n\n &[data-last] ${IconWrapper}::before {\n height: 50%;\n }\n\n ${$selected &&\n css`\n ${IconWrapper}::before {\n background: transparent;\n }\n `}\n\n ${$disabled &&\n css`\n cursor: not-allowed;\n `}\n `\n})\n\nexport const IconBox = styled(Box)`\n background: var(--card-bg-color);\n border-radius: 50px;\n position: relative;\n z-index: 2;\n`\n\nexport const TimestampBox = styled(Box)`\n min-width: 1rem;\n margin-left: ${({theme}) => `-${rem(theme.sanity.space[1])}`};\n`\n","import type {ChunkType, StudioLocaleResourceKeys} from 'sanity'\n\n/**\n * Maps from a chunk type to an i18n key for the operation\n *\n * @internal\n */\nexport const TIMELINE_ITEM_I18N_KEY_MAPPING: Record<ChunkType, StudioLocaleResourceKeys> = {\n initial: 'timeline.operation.created-initial',\n create: 'timeline.operation.created',\n publish: 'timeline.operation.published',\n editLive: 'timeline.operation.edited-live',\n editDraft: 'timeline.operation.edited-draft',\n unpublish: 'timeline.operation.unpublished',\n discardDraft: 'timeline.operation.draft-discarded',\n delete: 'timeline.operation.deleted',\n}\n","import React, {useCallback, createElement, useMemo} from 'react'\nimport {Box, Card, Flex, Stack, Text} from '@sanity/ui'\nimport {ButtonProps} from '../../../../ui-components'\nimport {getTimelineEventIconComponent} from './helpers'\nimport {UserAvatarStack} from './userAvatarStack'\nimport {IconBox, IconWrapper, Root, TimestampBox} from './timelineItem.styled'\nimport {TIMELINE_ITEM_I18N_KEY_MAPPING} from './timelineI18n'\nimport {type ChunkType, type Chunk, useTranslation, useDateTimeFormat} from 'sanity'\n\nconst TIMELINE_ITEM_EVENT_TONE: Record<ChunkType | 'withinSelection', ButtonProps['tone']> = {\n initial: 'primary',\n create: 'primary',\n publish: 'positive',\n editLive: 'caution',\n editDraft: 'caution',\n unpublish: 'critical',\n discardDraft: 'critical',\n delete: 'critical',\n withinSelection: 'primary',\n}\n\ninterface TimelineItemProps {\n chunk: Chunk\n isFirst: boolean\n isLast: boolean\n isLatest: boolean\n isSelected: boolean\n onSelect: (chunk: Chunk) => void\n timestamp: string\n type: ChunkType\n}\n\nexport function TimelineItem({\n chunk,\n isFirst,\n isLast,\n isLatest,\n isSelected,\n onSelect,\n timestamp,\n type,\n}: TimelineItemProps) {\n const {t} = useTranslation('studio')\n\n const iconComponent = getTimelineEventIconComponent(type)\n const authorUserIds = Array.from(chunk.authors)\n const isSelectable = type !== 'delete'\n const dateFormat = useDateTimeFormat({dateStyle: 'medium', timeStyle: 'short'})\n const formattedTimestamp = useMemo(() => {\n const parsedDate = new Date(timestamp)\n const formattedDate = dateFormat.format(parsedDate)\n\n return formattedDate\n }, [timestamp, dateFormat])\n\n const handleClick = useCallback(\n (evt: React.MouseEvent<HTMLButtonElement>) => {\n evt.preventDefault()\n evt.stopPropagation()\n\n if (isSelectable) {\n onSelect(chunk)\n }\n },\n [onSelect, chunk, isSelectable],\n )\n\n return (\n <Root\n $selected={isSelected}\n $disabled={!isSelectable}\n data-chunk-id={chunk.id}\n data-first={isFirst ? true : undefined}\n data-last={isLast ? true : undefined}\n data-ui=\"timelineItem\"\n mode={isSelected ? 'default' : 'bleed'}\n onClick={handleClick}\n padding={0}\n radius={2}\n tone={isSelected ? 'primary' : TIMELINE_ITEM_EVENT_TONE[chunk.type]}\n >\n <Box paddingX={2}>\n <Flex align=\"stretch\">\n <IconWrapper align=\"center\">\n <IconBox padding={2}>\n <Text size={2}>{iconComponent && createElement(iconComponent)}</Text>\n </IconBox>\n </IconWrapper>\n\n <Stack space={2} margin={2}>\n {isLatest && (\n <Flex>\n <Card\n padding={1}\n radius={2}\n shadow={1}\n tone={isSelected ? 'primary' : TIMELINE_ITEM_EVENT_TONE[chunk.type]}\n >\n <Text muted size={0} weight=\"medium\">\n {t('timeline.latest')}\n </Text>\n </Card>\n </Flex>\n )}\n <Box>\n <Text size={1} weight=\"medium\">\n {t(TIMELINE_ITEM_I18N_KEY_MAPPING[type]) || <code>{type}</code>}\n </Text>\n </Box>\n <TimestampBox paddingX={1}>\n <Text as=\"time\" size={0} muted dateTime={timestamp}>\n {formattedTimestamp}\n </Text>\n </TimestampBox>\n </Stack>\n <Flex flex={1} justify=\"flex-end\" align=\"center\">\n <UserAvatarStack maxLength={3} userIds={authorUserIds} />\n </Flex>\n </Flex>\n </Box>\n </Root>\n )\n}\n","import {Box, Flex, Stack} from '@sanity/ui'\nimport styled, {css} from 'styled-components'\n\nexport const StackWrapper = styled(Stack)`\n max-width: 200px;\n`\n\nexport const ListWrapper = styled(Flex)`\n max-height: calc(100vh - 198px);\n min-width: 244px;\n`\n\nexport const Root = styled(Box)<{$visible?: boolean}>(({$visible}) => {\n return css`\n opacity: 0;\n pointer-events: none;\n\n ${$visible &&\n css`\n opacity: 1;\n pointer-events: auto;\n `}\n `\n})\n","import React, {useCallback, useEffect, useMemo, useState} from 'react'\nimport {Box, Text} from '@sanity/ui'\n\nimport {TimelineItem} from './timelineItem'\nimport {ListWrapper, Root, StackWrapper} from './timeline.styled'\nimport {\n Chunk,\n CommandList,\n CommandListRenderItemCallback,\n useTranslation,\n LoadingBlock,\n} from 'sanity'\n\ninterface TimelineProps {\n chunks: Chunk[]\n disabledBeforeFirstChunk?: boolean\n firstChunk?: Chunk | null\n hasMoreChunks: boolean | null\n lastChunk?: Chunk | null\n onLoadMore: () => void\n onSelect: (chunk: Chunk) => void\n}\n\nexport const Timeline = ({\n chunks,\n disabledBeforeFirstChunk,\n hasMoreChunks,\n lastChunk,\n onLoadMore,\n onSelect,\n firstChunk,\n}: TimelineProps) => {\n const [mounted, setMounted] = useState(false)\n const {t} = useTranslation('studio')\n\n const filteredChunks = useMemo(() => {\n return chunks.filter((c) => {\n if (disabledBeforeFirstChunk && firstChunk) {\n return c.index < firstChunk.index\n }\n return true\n })\n }, [chunks, disabledBeforeFirstChunk, firstChunk])\n\n const selectedIndex = useMemo(\n () => (lastChunk?.id ? filteredChunks.findIndex((c) => c.id === lastChunk.id) : -1),\n [lastChunk?.id, filteredChunks],\n )\n\n const renderItem = useCallback<CommandListRenderItemCallback<Chunk>>(\n (chunk, {activeIndex}) => {\n const isFirst = activeIndex === 0\n const isLast = (filteredChunks && activeIndex === filteredChunks.length - 1) || false\n return (\n <Box paddingBottom={isLast ? 1 : 0} paddingTop={isFirst ? 1 : 0} paddingX={1}>\n <TimelineItem\n chunk={chunk}\n isFirst={isFirst}\n isLast={isLast}\n isLatest={activeIndex === 0 && !disabledBeforeFirstChunk}\n isSelected={activeIndex === selectedIndex}\n onSelect={onSelect}\n timestamp={chunk.endTimestamp}\n type={chunk.type}\n />\n {activeIndex === filteredChunks.length - 1 && hasMoreChunks && <LoadingBlock />}\n </Box>\n )\n },\n [disabledBeforeFirstChunk, filteredChunks, hasMoreChunks, onSelect, selectedIndex],\n )\n\n useEffect(() => setMounted(true), [])\n\n return (\n <Root\n /**\n * We delay initial rendering if `selectedIndex` is present.\n * This is a _temporary_ workaround to allow the virtual <CommandList>\n * to scroll to a specific index prior to being displayed.\n *\n * Without this, there'll be a noticeable 'flash' where the virtual list\n * will render with its child items at the top and then scroll into position.\n */\n $visible={!selectedIndex || mounted}\n data-ui=\"timeline\"\n >\n {filteredChunks.length === 0 && (\n <StackWrapper padding={3} space={3}>\n <Text size={1} weight=\"medium\">\n {t('timeline.error.no-document-history-title')}\n </Text>\n <Text muted size={1}>\n {t('timeline.error.no-document-history-description')}\n </Text>\n </StackWrapper>\n )}\n\n {filteredChunks.length > 0 && (\n <ListWrapper direction=\"column\">\n <CommandList\n activeItemDataAttr=\"data-hovered\"\n ariaLabel={t('timeline.list.aria-label')}\n autoFocus=\"list\"\n initialIndex={selectedIndex}\n initialScrollAlign=\"center\"\n itemHeight={40}\n items={filteredChunks}\n onEndReached={onLoadMore}\n onEndReachedIndexOffset={20}\n overscan={5}\n renderItem={renderItem}\n wrapAround={false}\n />\n </ListWrapper>\n )}\n </Root>\n )\n}\n\nTimeline.displayName = 'Timeline'\n","import {ErrorOutlineIcon} from '@sanity/icons'\nimport {Flex, Stack} from '@sanity/ui'\nimport React from 'react'\nimport {TextWithTone, useTranslation} from 'sanity'\n\nexport function TimelineError() {\n const {t} = useTranslation('studio')\n\n return (\n <Flex align=\"flex-start\" gap={3} padding={4}>\n <TextWithTone tone=\"critical\">\n <ErrorOutlineIcon />\n </TextWithTone>\n <Stack space={4}>\n <TextWithTone size={1} tone=\"critical\" weight=\"medium\">\n {t('timeline.error.load-document-changes-title')}\n </TextWithTone>\n <TextWithTone size={1} tone=\"critical\">\n {t('timeline.error.load-document-changes-description')}\n </TextWithTone>\n </Stack>\n </Flex>\n )\n}\n","import {ChevronDownIcon} from '@sanity/icons'\nimport {Placement, useClickOutside, useGlobalKeyDown, useToast} from '@sanity/ui'\nimport React, {useCallback, useState} from 'react'\nimport styled from 'styled-components'\nimport {useDocumentPane} from '../useDocumentPane'\nimport {Button, Popover} from '../../../../ui-components'\nimport {TimelineError} from './TimelineError'\nimport {Timeline} from './timeline'\nimport {TIMELINE_ITEM_I18N_KEY_MAPPING} from './timelineI18n'\nimport {Chunk, useTimelineSelector, useTranslation} from 'sanity'\n\ninterface TimelineMenuProps {\n chunk: Chunk | null\n mode: 'rev' | 'since'\n placement?: Placement\n}\n\nconst Root = styled(Popover)`\n overflow: hidden;\n overflow: clip;\n`\n\nexport function TimelineMenu({chunk, mode, placement}: TimelineMenuProps) {\n const {setTimelineRange, setTimelineMode, timelineError, ready, timelineStore} = useDocumentPane()\n const [open, setOpen] = useState(false)\n const [button, setButton] = useState<HTMLButtonElement | null>(null)\n const [popover, setPopover] = useState<HTMLElement | null>(null)\n const toast = useToast()\n\n const chunks = useTimelineSelector(timelineStore, (state) => state.chunks)\n const loading = useTimelineSelector(timelineStore, (state) => state.isLoading)\n const hasMoreChunks = useTimelineSelector(timelineStore, (state) => state.hasMoreChunks)\n const realRevChunk = useTimelineSelector(timelineStore, (state) => state.realRevChunk)\n const sinceTime = useTimelineSelector(timelineStore, (state) => state.sinceTime)\n\n const {t} = useTranslation('studio')\n\n const handleOpen = useCallback(() => {\n setTimelineMode(mode)\n setOpen(true)\n }, [mode, setTimelineMode])\n\n const handleClose = useCallback(() => {\n setTimelineMode('closed')\n setOpen(false)\n }, [setTimelineMode])\n\n const handleClickOutside = useCallback(() => {\n if (open) {\n handleClose()\n }\n }, [handleClose, open])\n\n const handleGlobalKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (open && (event.key === 'Escape' || event.key === 'Tab')) {\n handleClose()\n button?.focus()\n }\n },\n [button, handleClose, open],\n )\n\n useClickOutside(handleClickOutside, [button, popover])\n useGlobalKeyDown(handleGlobalKeyDown)\n\n const selectRev = useCallback(\n (revChunk: Chunk) => {\n try {\n const [sinceId, revId] = timelineStore.findRangeForRev(revChunk)\n setTimelineMode('closed')\n setTimelineRange(sinceId, revId)\n } catch (err) {\n toast.push({\n closable: true,\n description: err.message,\n status: 'error',\n title: t('timeline.error.unable-to-load-revision'),\n })\n }\n },\n [setTimelineMode, setTimelineRange, t, timelineStore, toast],\n )\n\n const selectSince = useCallback(\n (sinceChunk: Chunk) => {\n try {\n const [sinceId, revId] = timelineStore.findRangeForSince(sinceChunk)\n setTimelineMode('closed')\n setTimelineRange(sinceId, revId)\n } catch (err) {\n toast.push({\n closable: true,\n description: err.message,\n status: 'error',\n title: t('timeline.error.unable-to-load-revision'),\n })\n }\n },\n [setTimelineMode, setTimelineRange, t, timelineStore, toast],\n )\n\n const handleLoadMore = useCallback(() => {\n if (!loading) {\n timelineStore.loadMore()\n }\n }, [loading, timelineStore])\n\n const content = timelineError ? (\n <TimelineError />\n ) : (\n <>\n {mode === 'rev' && (\n <Timeline\n chunks={chunks}\n firstChunk={realRevChunk}\n hasMoreChunks={hasMoreChunks}\n lastChunk={realRevChunk}\n onLoadMore={handleLoadMore}\n onSelect={selectRev}\n />\n )}\n {mode === 'since' && (\n <Timeline\n chunks={chunks}\n disabledBeforeFirstChunk\n firstChunk={realRevChunk}\n hasMoreChunks={hasMoreChunks}\n lastChunk={sinceTime}\n onLoadMore={handleLoadMore}\n onSelect={selectSince}\n />\n )}\n </>\n )\n\n const formatParams = {\n timestamp: {dateStyle: 'medium', timeStyle: 'short'},\n }\n\n const revLabel = chunk\n ? t(TIMELINE_ITEM_I18N_KEY_MAPPING[chunk.type], {\n context: 'timestamp',\n timestamp: new Date(chunk?.endTimestamp),\n formatParams,\n })\n : t('timeline.latest-version')\n\n const sinceLabel = chunk\n ? t('timeline.since', {\n timestamp: new Date(chunk?.endTimestamp),\n formatParams,\n })\n : t('timeline.since-version-missing')\n\n const buttonLabel = mode === 'rev' ? revLabel : sinceLabel\n\n return (\n <Root\n constrainSize\n content={open && content}\n data-ui=\"versionMenu\"\n open={open}\n placement={placement}\n portal\n ref={setPopover}\n >\n <Button\n disabled={!ready}\n mode=\"bleed\"\n iconRight={ChevronDownIcon}\n onClick={open ? handleClose : handleOpen}\n ref={setButton}\n selected={open}\n style={{maxWidth: '100%'}}\n text={ready ? buttonLabel : t('timeline.loading-history')}\n />\n </Root>\n )\n}\n","import {CloseIcon} from '@sanity/icons'\nimport {Box, Card, CardProps, Flex, Text} from '@sanity/ui'\nimport React, {HTMLProps, ReactNode} from 'react'\nimport styled from 'styled-components'\nimport {Button} from '../../../../ui-components'\nimport {structureLocaleNamespace} from '../../../i18n'\nimport {useTranslation} from 'sanity'\n\nexport interface DocumentInspectorHeaderProps {\n as?: CardProps['as']\n closeButtonLabel: string\n flex?: CardProps['flex']\n onClose: () => void\n title: ReactNode\n}\n\nconst Root = styled(Card)({\n position: 'relative',\n zIndex: 1,\n lineHeight: 0,\n})\n\n/** @internal */\nexport function DocumentInspectorHeader(\n props: DocumentInspectorHeaderProps & Omit<HTMLProps<HTMLDivElement>, 'as' | 'height' | 'ref'>,\n) {\n const {as: forwardedAs, children, closeButtonLabel, onClose, title, ...restProps} = props\n const {t} = useTranslation(structureLocaleNamespace)\n\n return (\n <Root {...restProps} as={forwardedAs}>\n <Flex padding={2}>\n <Box flex={1} padding={3}>\n <Text as=\"h1\" size={1} weight=\"medium\">\n {title}\n </Text>\n </Box>\n <Box flex=\"none\" padding={1}>\n <Button\n aria-label={closeButtonLabel}\n icon={CloseIcon}\n mode=\"bleed\"\n onClick={onClose}\n tooltipProps={{content: t('document-inspector.close-button.tooltip')}}\n />\n </Box>\n </Flex>\n {children}\n </Root>\n )\n}\n","import React, {useCallback, useRef} from 'react'\nimport styled from 'styled-components'\n\nconst Root = styled.div`\n position: absolute;\n top: 0;\n left: -4px;\n bottom: 0;\n width: 9px;\n z-index: 201;\n cursor: ew-resize;\n\n /* Border */\n & > span:nth-child(1) {\n display: block;\n border-left: 1px solid var(--card-border-color);\n position: absolute;\n top: 0;\n left: 4px;\n bottom: 0;\n transition: opacity 200ms;\n }\n\n /* Hover effect */\n & > span:nth-child(2) {\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n width: 9px;\n bottom: 0;\n background-color: var(--card-border-color);\n opacity: 0;\n transition: opacity 150ms;\n }\n\n @media (hover: hover) {\n &:hover > span:nth-child(2) {\n opacity: 0.2;\n }\n }\n`\n\nexport function Resizer(props: {onResize: (delta: number) => void; onResizeStart: () => void}) {\n const {onResize, onResizeStart} = props\n\n const mouseXRef = useRef(0)\n\n const handleMouseDown = useCallback(\n (event: React.MouseEvent) => {\n event.preventDefault()\n\n mouseXRef.current = event.pageX\n\n onResizeStart()\n\n const handleMouseMove = (e: MouseEvent) => {\n e.preventDefault()\n onResize(e.pageX - mouseXRef.current)\n }\n\n const handleMouseUp = () => {\n window.removeEventListener('mousemove', handleMouseMove)\n window.removeEventListener('mouseup', handleMouseUp)\n }\n\n window.addEventListener('mousemove', handleMouseMove)\n window.addEventListener('mouseup', handleMouseUp)\n },\n [onResize, onResizeStart],\n )\n\n return (\n <Root onMouseDown={handleMouseDown}>\n {/* Hover effect */}\n <span />\n\n {/* Border */}\n <span />\n </Root>\n )\n}\n","import React, {HTMLProps, useCallback, useMemo, useRef, useState} from 'react'\nimport styled from 'styled-components'\nimport {Box, BoxProps} from '@sanity/ui'\nimport {Resizer} from './Resizer'\n\nexport interface ResizableProps {\n minWidth: number\n maxWidth: number\n}\n\nconst Root = styled(Box)`\n position: relative;\n flex: 1;\n padding-left: 1px;\n`\n\nexport function Resizable(\n props: ResizableProps & BoxProps & Omit<HTMLProps<HTMLDivElement>, 'as'>,\n) {\n const {as: forwardedAs, children, minWidth, maxWidth, ...restProps} = props\n const [element, setElement] = useState<HTMLDivElement | null>(null)\n const elementWidthRef = useRef<number>()\n const [targetWidth, setTargetWidth] = useState<number>()\n\n const handleResizeStart = useCallback(() => {\n elementWidthRef.current = element?.offsetWidth\n }, [element])\n\n const handleResize = useCallback(\n (deltaX: number) => {\n const w = elementWidthRef.current\n\n if (!w) return\n\n setTargetWidth(Math.min(Math.max(w - deltaX, minWidth), maxWidth))\n },\n [minWidth, maxWidth],\n )\n\n const style = useMemo(\n () => (targetWidth ? {flex: 'none', width: targetWidth} : {minWidth, maxWidth}),\n [minWidth, maxWidth, targetWidth],\n )\n\n return (\n <Root as={forwardedAs} {...restProps} ref={setElement} style={style}>\n {children}\n <Resizer onResize={handleResize} onResizeStart={handleResizeStart} />\n </Root>\n )\n}\n","import React, {ReactElement, createElement, useCallback} from 'react'\nimport {Box} from '@sanity/ui'\nimport {usePane} from '../../../components'\nimport {useStructureTool} from '../../../useStructureTool'\nimport {DOCUMENT_INSPECTOR_MAX_WIDTH, DOCUMENT_INSPECTOR_MIN_WIDTH} from '../constants'\nimport {useDocumentPane} from '../useDocumentPane'\nimport {Resizable} from './Resizable'\n\ninterface DocumentInspectorPanelProps {\n documentId: string\n documentType: string\n flex?: number | number[]\n}\n\nexport function DocumentInspectorPanel(props: DocumentInspectorPanelProps): ReactElement | null {\n const {documentId, documentType, flex} = props\n const {collapsed} = usePane()\n const {closeInspector, inspector} = useDocumentPane()\n const {features} = useStructureTool()\n\n const handleClose = useCallback(() => {\n if (inspector) closeInspector(inspector.name)\n }, [closeInspector, inspector])\n\n if (collapsed || !inspector) return null\n\n const element = createElement(inspector.component, {\n onClose: handleClose,\n documentId,\n documentType,\n })\n\n if (features.resizablePanes) {\n return (\n <Resizable\n as=\"aside\"\n data-ui=\"DocumentInspectorPanel\"\n flex={flex}\n maxWidth={DOCUMENT_INSPECTOR_MAX_WIDTH}\n minWidth={DOCUMENT_INSPECTOR_MIN_WIDTH}\n >\n {element}\n </Resizable>\n )\n }\n\n return (\n <Box as=\"aside\" data-ui=\"DocumentInspectorPanel\" flex={flex}>\n {element}\n </Box>\n )\n}\n","import {AnnotationDetails, visitDiff, Diff} from 'sanity'\n\nexport function collectLatestAuthorAnnotations(diff: Diff): AnnotationDetails[] {\n const authorMap = new Map<string, AnnotationDetails>()\n visitDiff(diff, (child) => {\n if (child.action === 'unchanged' || !('annotation' in child) || !child.annotation) {\n return true\n }\n\n const {author, timestamp} = child.annotation\n const previous = authorMap.get(author)\n if (!previous || previous.timestamp < timestamp) {\n authorMap.set(author, child.annotation)\n }\n\n return true\n })\n\n return Array.from(authorMap.values()).sort((a, b) => (a.timestamp < b.timestamp ? 1 : -1))\n}\n","import {ObjectDiff} from '@sanity/diff'\nimport {AvatarStack, BoundaryElementProvider, Box, Card, Flex} from '@sanity/ui'\nimport React, {ReactElement, useRef} from 'react'\nimport styled from 'styled-components'\nimport {TimelineMenu} from '../../timeline'\nimport {useDocumentPane} from '../../useDocumentPane'\nimport {DocumentInspectorHeader} from '../../documentInspector'\nimport {collectLatestAuthorAnnotations} from './helpers'\nimport {\n ChangeFieldWrapper,\n ChangeList,\n DiffTooltip,\n DocumentChangeContext,\n DocumentChangeContextInstance,\n DocumentInspectorProps,\n NoChanges,\n ObjectSchemaType,\n ScrollContainer,\n UserAvatar,\n useTimelineSelector,\n useTranslation,\n LoadingBlock,\n} from 'sanity'\n\nconst Scroller = styled(ScrollContainer)`\n height: 100%;\n overflow: auto;\n position: relative;\n scroll-behavior: smooth;\n`\n\nexport function ChangesInspector(props: DocumentInspectorProps): ReactElement {\n const {onClose} = props\n const {documentId, schemaType, timelineError, timelineStore, value} = useDocumentPane()\n const scrollRef = useRef<HTMLDivElement | null>(null)\n\n // Subscribe to external timeline state changes\n const diff = useTimelineSelector(timelineStore, (state) => state.diff)\n const onOlderRevision = useTimelineSelector(timelineStore, (state) => state.onOlderRevision)\n const selectionState = useTimelineSelector(timelineStore, (state) => state.selectionState)\n const sinceTime = useTimelineSelector(timelineStore, (state) => state.sinceTime)\n const loading = selectionState === 'loading'\n const isComparingCurrent = !onOlderRevision\n\n // Note that we are using the studio core namespace here, as changes theoretically should\n // be part of Sanity core (needs to be moved from structure at some point)\n const {t} = useTranslation('studio')\n\n const documentContext: DocumentChangeContextInstance = React.useMemo(\n () => ({\n documentId,\n schemaType,\n FieldWrapper: ChangeFieldWrapper,\n rootDiff: diff,\n isComparingCurrent,\n value,\n }),\n [documentId, diff, isComparingCurrent, schemaType, value],\n )\n\n const changeAnnotations = React.useMemo(\n () => (diff ? collectLatestAuthorAnnotations(diff) : []),\n [diff],\n )\n\n return (\n <Flex data-testid=\"review-changes-pane\" direction=\"column\" height=\"fill\" overflow=\"hidden\">\n <DocumentInspectorHeader\n as=\"header\"\n closeButtonLabel={t('changes.action.close-label')}\n flex=\"none\"\n onClose={onClose}\n title={t('changes.title')}\n >\n <Flex gap={1} padding={3} paddingTop={0} paddingBottom={2}>\n <Box flex={1}>\n <TimelineMenu mode=\"since\" chunk={sinceTime} placement=\"bottom-start\" />\n </Box>\n\n <Box flex=\"none\">\n <DiffTooltip\n annotations={changeAnnotations}\n description={t('changes.changes-by-author')}\n portal\n >\n <AvatarStack maxLength={4} aria-label={t('changes.changes-by-author')}>\n {changeAnnotations.map(({author}) => (\n <UserAvatar key={author} user={author} />\n ))}\n </AvatarStack>\n </DiffTooltip>\n </Box>\n </Flex>\n </DocumentInspectorHeader>\n\n <Card flex={1}>\n <BoundaryElementProvider element={scrollRef.current}>\n <Scroller data-ui=\"Scroller\" ref={scrollRef}>\n <Box flex={1} padding={4}>\n <Content\n diff={diff}\n documentContext={documentContext}\n error={timelineError}\n loading={loading}\n schemaType={schemaType}\n />\n </Box>\n </Scroller>\n </BoundaryElementProvider>\n </Card>\n </Flex>\n )\n}\n\nfunction Content({\n error,\n diff,\n documentContext,\n loading,\n schemaType,\n}: {\n error?: Error | null\n diff: ObjectDiff<any> | null\n documentContext: DocumentChangeContextInstance\n loading: boolean\n schemaType: ObjectSchemaType\n}) {\n if (error) {\n return <NoChanges />\n }\n\n if (loading) {\n return <LoadingBlock showText />\n }\n\n if (!diff) {\n return <NoChanges />\n }\n\n return (\n <DocumentChangeContext.Provider value={documentContext}>\n <ChangeList diff={diff} schemaType={schemaType} />\n </DocumentChangeContext.Provider>\n )\n}\n","import {RestoreIcon} from '@sanity/icons'\nimport {HISTORY_INSPECTOR_NAME} from '../../constants'\nimport {useStructureTool} from '../../../../useStructureTool'\nimport {ChangesInspector} from './ChangesInspector'\nimport {DocumentInspector, useTranslation} from 'sanity'\n\nexport const changesInspector: DocumentInspector = {\n name: HISTORY_INSPECTOR_NAME,\n useMenuItem: () => {\n const {features} = useStructureTool()\n const {t} = useTranslation()\n\n return {\n hidden: !features.reviewChanges,\n icon: RestoreIcon,\n title: t('changes.title'),\n }\n },\n component: ChangesInspector,\n onClose: ({params}) => ({params: {...params, since: undefined}}),\n onOpen: ({params}) => ({params: {...params, since: '@lastPublished'}}),\n}\n","/* eslint-disable no-loop-func */\n\nimport {Path, SanityDocument, SchemaType} from '@sanity/types'\nimport {isArray, isRecord} from 'sanity'\n\nexport function getPathTitles(options: {\n path: Path\n schemaType: SchemaType\n value: Partial<SanityDocument> | null\n}): Array<{name: string; title?: string}> {\n const {path, schemaType, value} = options\n const result: Array<{name: string; title?: string}> = []\n\n let s = schemaType\n let v: unknown = value\n\n for (const segment of path) {\n // field name\n if (typeof segment === 'string') {\n if (!isRecord(v) && v !== undefined) {\n throw new Error(`Parent value is not an object, cannot get path segment: .${segment}`)\n }\n\n if (s.jsonType !== 'object') {\n throw new Error(\n `Parent type is not an object schema type, cannot get path segment: .${segment}`,\n )\n }\n\n v = v?.[segment]\n\n const field = s.fields.find((f) => f.name === segment)\n\n if (!field) {\n result.push({name: segment})\n return result\n }\n\n s = field.type\n\n result.push(s)\n\n continue\n }\n\n // array item index\n if (typeof segment === 'number') {\n if (!isArray(v) && v !== undefined) {\n throw new Error(`Parent value is not an array, cannot get path segment: [${segment}]`)\n }\n\n if (s.jsonType !== 'array') {\n throw new Error(\n `Parent type is not an array schema type, cannot get path segment: [${segment}]`,\n )\n }\n\n v = v?.[segment]\n\n const itemType = s.of.find((ofType) => {\n if (typeof v === 'string') {\n return ofType.jsonType === 'string'\n }\n\n if (typeof v === 'number') {\n return ofType.jsonType === 'number'\n }\n\n if (typeof v === 'boolean') {\n return ofType.jsonType === 'boolean'\n }\n\n if (isRecord(v)) {\n return ofType.name === v?._type\n }\n\n return false\n })\n\n if (!itemType) {\n throw new Error(`Item type not found: [${segment}]`)\n }\n\n s = itemType\n\n result.push(s)\n\n continue\n }\n\n // array item key\n if (isRecord(segment) && segment._key) {\n if (!isArray(v)) {\n throw new Error(\n `Parent value is not an array, cannot get path segment: [_key == ${segment}]`,\n )\n }\n\n if (s.jsonType !== 'array') {\n throw new Error(\n `Parent type is not an array schema type, cannot get path segment: .${segment}`,\n )\n }\n\n const values = v ?? []\n\n v = values.find((i) => isRecord(i) && i._key === segment._key)\n\n if (!isRecord(v)) {\n throw new Error(`Array item not found: [_key == ${segment._key}]`)\n }\n\n const ofType = s.of.find((i) => isRecord(v) && i.name === v?._type)\n\n if (!ofType) {\n throw new Error(`Array item type not found: .${v?._type}`)\n }\n\n s = ofType\n\n result.push(s)\n\n continue\n }\n\n throw new Error(`Invalid path segment: ${JSON.stringify(segment)}`)\n }\n\n return result\n}\n","import {ErrorOutlineIcon, IconComponent, InfoOutlineIcon, WarningOutlineIcon} from '@sanity/icons'\nimport {Box, Card, CardTone, ErrorBoundary, Flex, Stack, Text} from '@sanity/ui'\nimport {ObjectSchemaType, Path, SanityDocument, SchemaType, ValidationMarker} from '@sanity/types'\nimport React, {ErrorInfo, Fragment, createElement, useCallback, useMemo, useState} from 'react'\nimport {useDocumentPane} from '../../useDocumentPane'\nimport {DocumentInspectorHeader} from '../../documentInspector'\nimport {getPathTitles} from './getPathTitles'\nimport {DocumentInspectorProps, useTranslation} from 'sanity'\n\nconst MARKER_ICON: Record<'error' | 'warning' | 'info', IconComponent> = {\n error: ErrorOutlineIcon,\n warning: WarningOutlineIcon,\n info: InfoOutlineIcon,\n}\n\nconst MARKER_TONE: Record<'error' | 'warning' | 'info', CardTone> = {\n error: 'critical',\n warning: 'caution',\n info: 'primary',\n}\n\nexport function ValidationInspector(props: DocumentInspectorProps) {\n const {onClose} = props\n const {onFocus, onPathOpen, schemaType, validation, value} = useDocumentPane()\n const {t} = useTranslation('validation')\n\n const handleOpen = useCallback(\n (path: Path) => {\n onPathOpen(path)\n onFocus(path)\n },\n [onFocus, onPathOpen],\n )\n\n return (\n <Flex direction=\"column\" height=\"fill\" overflow=\"hidden\">\n <DocumentInspectorHeader\n as=\"header\"\n closeButtonLabel={t('panel.close-button-aria-label')}\n flex=\"none\"\n onClose={onClose}\n title={t('panel.title')}\n />\n\n <Card flex={1} overflow=\"auto\" padding={3}>\n {validation.length === 0 && (\n <Box padding={2}>\n <Text muted size={1}>\n {t('panel.no-errors-message')}\n </Text>\n </Box>\n )}\n\n {validation.length > 0 && (\n <Stack space={2}>\n {validation.map((marker, i) => (\n <ValidationCard\n // eslint-disable-next-line react/no-array-index-key\n key={i}\n marker={marker}\n onOpen={handleOpen}\n schemaType={schemaType}\n value={value}\n />\n ))}\n </Stack>\n )}\n </Card>\n </Flex>\n )\n}\n\nfunction ValidationCard(props: {\n marker: ValidationMarker\n onOpen: (path: Path) => void\n schemaType: ObjectSchemaType\n value: Partial<SanityDocument> | null\n}) {\n const {marker, onOpen, schemaType, value} = props\n const handleOpen = useCallback(() => onOpen(marker.path), [marker, onOpen])\n const [errorInfo, setErrorInfo] = useState<{error: Error; info: ErrorInfo} | null>(null)\n\n return (\n <ErrorBoundary onCatch={setErrorInfo}>\n {errorInfo && (\n <Card padding={3} radius={2} tone=\"critical\">\n <Text size={1}>{errorInfo.error.message}</Text>\n </Card>\n )}\n\n {!errorInfo && (\n <Card\n __unstable_focusRing\n as=\"button\"\n onClick={handleOpen}\n padding={3}\n radius={2}\n tone={MARKER_TONE[marker.level]}\n >\n <Flex align=\"flex-start\" gap={3}>\n <Box flex=\"none\">\n <Text size={1}>{createElement(MARKER_ICON[marker.level])}</Text>\n </Box>\n\n <Stack flex={1} space={2}>\n <DocumentNodePathBreadcrumbs\n path={marker.path}\n schemaType={schemaType}\n value={value}\n />\n\n <Text muted size={1}>\n {marker.message}\n </Text>\n </Stack>\n </Flex>\n </Card>\n )}\n </ErrorBoundary>\n )\n}\n\nfunction DocumentNodePathBreadcrumbs(props: {\n path: Path\n schemaType: SchemaType\n value: Partial<SanityDocument> | null\n}) {\n const {path, schemaType, value} = props\n\n const pathTitles = useMemo(\n () => getPathTitles({path, schemaType, value}),\n [path, schemaType, value],\n )\n\n if (!pathTitles.length) return null\n\n return (\n <Text size={1}>\n {pathTitles.map((t, i) => (\n <Fragment key={i}>\n {i > 0 && <span style={{color: 'var(--card-muted-fg-color)', opacity: 0.5}}> / </span>}\n <span style={{fontWeight: 500}}>{t.title || t.name}</span>\n </Fragment>\n ))}\n </Text>\n )\n}\n","import {CheckmarkCircleIcon, ErrorOutlineIcon, WarningOutlineIcon} from '@sanity/icons'\nimport {useMemo} from 'react'\nimport {VALIDATION_INSPECTOR_NAME} from '../../constants'\nimport {ValidationInspector} from './ValidationInspector'\nimport {\n type DocumentInspector,\n type DocumentInspectorMenuItem,\n type DocumentInspectorUseMenuItemProps,\n type FormNodeValidation,\n isValidationError,\n isValidationWarning,\n useTranslation,\n useValidationStatus,\n} from 'sanity'\n\nfunction useMenuItem(props: DocumentInspectorUseMenuItemProps): DocumentInspectorMenuItem {\n const {documentId, documentType} = props\n const {t} = useTranslation('validation')\n const {validation: validationMarkers} = useValidationStatus(documentId, documentType)\n\n const validation: FormNodeValidation[] = useMemo(\n () =>\n validationMarkers.map((item) => ({\n level: item.level,\n message: item.message,\n path: item.path,\n })),\n [validationMarkers],\n )\n\n const hasErrors = validation.some(isValidationError)\n const hasWarnings = validation.some(isValidationWarning)\n\n const icon = useMemo(() => {\n if (hasErrors) return ErrorOutlineIcon\n if (hasWarnings) return WarningOutlineIcon\n return CheckmarkCircleIcon\n }, [hasErrors, hasWarnings])\n\n const tone = useMemo(() => {\n if (hasErrors) return 'critical'\n if (hasWarnings) return 'caution'\n return 'positive'\n }, [hasErrors, hasWarnings])\n\n return {\n hidden: validation.length === 0,\n icon,\n title: t('panel.title'),\n tone,\n showAsAction: true,\n }\n}\n\nexport const validationInspector: DocumentInspector = {\n name: VALIDATION_INSPECTOR_NAME,\n component: ValidationInspector,\n useMenuItem,\n}\n","import {MasterDetailIcon} from '@sanity/icons'\nimport {lazy} from 'react'\nimport {\n DeleteAction,\n DiscardChangesAction,\n DuplicateAction,\n HistoryRestoreAction,\n PublishAction,\n UnpublishAction,\n} from './documentActions'\nimport {LiveEditBadge} from './documentBadges'\nimport {getIntentState} from './getIntentState'\nimport {router} from './router'\nimport type {StructureToolOptions} from './types'\nimport {comments} from './comments'\nimport {changesInspector} from './panes/document/inspectors/changes'\nimport {structureUsEnglishLocaleBundle} from './i18n'\nimport {validationInspector} from './panes/document/inspectors/validation'\nimport {definePlugin} from 'sanity'\n\nconst documentActions = [\n PublishAction,\n UnpublishAction,\n DiscardChangesAction,\n DuplicateAction,\n DeleteAction,\n HistoryRestoreAction,\n]\n\nconst documentBadges = [LiveEditBadge]\n\nconst inspectors = [validationInspector, changesInspector]\n\n/**\n * The structureTool is a studio plugin which adds the “structure tool” – a tool within\n * Sanity Studio in which content editors can drill down to specific documents to edit them.\n * You can configure your Studio's structure tool(s).\n *\n * @public\n * @param options - Options for the structure tool. See {@link StructureToolOptions}\n * @example Minimal example\n * ```ts\n * // sanity.config.ts\n * import { defineConfig } from 'sanity'\n * import { structureTool } from 'sanity/structure'\n *\n * export default defineConfig((\n * // ...\n * plugins: [\n * structureTool() // use defaults\n * ]\n * })\n * ```\n *\n * @example To customise your structure tool\n * ```ts\n * // sanity.config.ts\n * import { defineConfig } from 'sanity'\n * import { structureTool } from 'sanity/structure'\n * import { FaCar } from 'react-icons'\n\n * export default defineConfig((\n *\t // ...\n * plugins: [\n * structureTool({\n * name: 'cars',\n * title: 'Cars',\n * icon: FaCar,\n * structure: (S) => S.documentTypeList('car'),\n * defaultDocumentNode: (S) =>\n * S.document().views([\n * S.view.form(),\n * S.view.component(Preview).title('Preview')\n * ])\n * })\n * ]\n * })\n * ```\n * */\nexport const structureTool = definePlugin<StructureToolOptions | void>((options) => {\n const icon = options?.icon || MasterDetailIcon\n\n return {\n name: 'sanity/structure',\n document: {\n actions: (prevActions) => {\n // NOTE: since it's possible to have several structure tools in one Studio,\n // we need to check whether the document actions already exist in the Studio config\n return Array.from(new Set([...prevActions, ...documentActions]))\n },\n badges: (prevBadges) => {\n // NOTE: since it's possible to have several structure tools in one Studio,\n // we need to check whether the document badges already exist in the Studio config\n return Array.from(new Set([...prevBadges, ...documentBadges]))\n },\n inspectors: (prevInspectors) => {\n // NOTE: since it's possible to have several structure tools in one Studio,\n // we need to check whether the inspectors already exist in the Studio config\n return Array.from(new Set([...prevInspectors, ...inspectors]))\n },\n },\n\n plugins: [comments()],\n\n tools: [\n {\n name: options?.name || 'structure',\n title: options?.title || 'Structure',\n icon,\n component: lazy(() => import('./components/structureTool')),\n canHandleIntent: (intent, params) => {\n if (intent === 'create') return canHandleCreateIntent(params)\n if (intent === 'edit') return canHandleEditIntent(params)\n return false\n },\n getIntentState,\n // Controlled by sanity/src/structure/components/structureTool/StructureTitle.tsx\n controlsDocumentTitle: true,\n options,\n router,\n },\n ],\n\n i18n: {\n bundles: [structureUsEnglishLocaleBundle],\n },\n }\n})\n\nfunction canHandleCreateIntent(params: Record<string, unknown>) {\n // We can't handle create intents without a `type` parameter\n if (!('type' in params)) {\n return false\n }\n\n // We can handle any create intent as long as it has a `type` parameter,\n // but we also know how to deal with templates, where other tools might not\n return 'template' in params ? {template: true} : true\n}\n\nfunction canHandleEditIntent(params: Record<string, unknown>) {\n // We can't handle edit intents without an `id` parameter\n if (!('id' in params)) {\n return false\n }\n\n // We can handle any edit intent with a document ID, but we're best at `structure` mode\n // This ensures that other tools that can handle modes such as `presentation` or `batch`\n // can take precedence over the structure tool\n return 'mode' in params ? {mode: params.mode === 'structure'} : true\n}\n","import {SerializePath} from './StructureNodes'\n\n/** @internal */\nexport class SerializeError extends Error {\n public readonly path: SerializePath\n public helpId?: HELP_URL\n\n constructor(\n message: string,\n parentPath: SerializePath,\n pathSegment: string | number | undefined,\n hint?: string,\n ) {\n super(message)\n const segment = typeof pathSegment === 'undefined' ? '<unknown>' : `${pathSegment}`\n this.path = (parentPath || []).concat(hint ? `${segment} (${hint})` : segment)\n }\n\n withHelpUrl(id: HELP_URL): SerializeError {\n this.helpId = id\n return this\n }\n}\n\n/** @internal */\nexport enum HELP_URL {\n ID_REQUIRED = 'structure-node-id-required',\n TITLE_REQUIRED = 'structure-title-required',\n FILTER_REQUIRED = 'structure-filter-required',\n INVALID_LIST_ITEM = 'structure-invalid-list-item',\n COMPONENT_REQUIRED = 'structure-view-component-required',\n DOCUMENT_ID_REQUIRED = 'structure-document-id-required',\n DOCUMENT_TYPE_REQUIRED = 'structure-document-type-required',\n SCHEMA_TYPE_REQUIRED = 'structure-schema-type-required',\n SCHEMA_TYPE_NOT_FOUND = 'structure-schema-type-not-found',\n LIST_ITEMS_MUST_BE_ARRAY = 'structure-list-items-must-be-array',\n QUERY_PROVIDED_FOR_FILTER = 'structure-query-provided-for-filter',\n ACTION_OR_INTENT_REQUIRED = 'structure-action-or-intent-required',\n LIST_ITEM_IDS_MUST_BE_UNIQUE = 'structure-list-item-ids-must-be-unique',\n ACTION_AND_INTENT_MUTUALLY_EXCLUSIVE = 'structure-action-and-intent-mutually-exclusive',\n API_VERSION_REQUIRED_FOR_CUSTOM_FILTER = 'structure-api-version-required-for-custom-filter',\n}\n","import {SchemaType, SortOrderingItem} from '@sanity/types'\n\nconst IMPLICIT_FIELDS = ['_id', '_type', '_createdAt', '_updatedAt', '_rev']\n\n// Takes a path array and a schema type and builds a GROQ join every time it enters a reference field\nfunction joinReferences(schemaType: SchemaType, path: string[]): string {\n const [head, ...tail] = path\n\n if (!('fields' in schemaType)) {\n return ''\n }\n\n const schemaField = schemaType.fields.find((field) => field.name === head)\n if (!schemaField) {\n if (!IMPLICIT_FIELDS.includes(head)) {\n // eslint-disable-next-line no-console\n console.warn(\n 'The current ordering config targeted the nonexistent field \"%s\" on schema type \"%s\". It should be one of %o',\n head,\n schemaType.name,\n schemaType.fields.map((field) => field.name),\n )\n }\n return ''\n }\n\n if ('to' in schemaField.type && schemaField.type.name === 'reference') {\n const refTypes = schemaField.type.to\n return `${head}->{${refTypes.map((refType) => joinReferences(refType, tail)).join(',')}}`\n }\n\n const tailFields = tail.length > 0 && joinReferences(schemaField.type, tail)\n const tailWrapper = tailFields ? `{${tailFields}}` : ''\n return tail.length > 0 ? `${head}${tailWrapper}` : head\n}\n\nexport function getExtendedProjection(schemaType: SchemaType, orderBy: SortOrderingItem[]): string {\n return orderBy.map((ordering) => joinReferences(schemaType, ordering.field.split('.'))).join(', ')\n}\n","import {SortOrdering} from '@sanity/types'\nimport {structureLocaleNamespace} from '../i18n'\n\nexport const ORDER_BY_UPDATED_AT: SortOrdering = {\n title: 'Last edited',\n i18n: {\n title: {\n key: 'menu-items.sort-by.last-edited',\n ns: structureLocaleNamespace,\n },\n },\n name: 'lastEditedDesc',\n by: [{field: '_updatedAt', direction: 'desc'}],\n}\n\nexport const ORDER_BY_CREATED_AT: SortOrdering = {\n title: 'Created',\n i18n: {\n title: {\n key: 'menu-items.sort-by.created',\n ns: structureLocaleNamespace,\n },\n },\n name: 'lastCreatedDesc',\n by: [{field: '_createdAt', direction: 'desc'}],\n}\n\nexport const DEFAULT_SELECTED_ORDERING_OPTION = ORDER_BY_UPDATED_AT\n\nexport const DEFAULT_ORDERING_OPTIONS: SortOrdering[] = [\n ORDER_BY_UPDATED_AT, // _updatedAt\n ORDER_BY_CREATED_AT, // _createdAt\n]\n","import {SchemaType, SortOrdering, SortOrderingItem} from '@sanity/types'\nimport {SortIcon} from '@sanity/icons'\nimport {getExtendedProjection} from './util/getExtendedProjection'\nimport {Intent} from './Intent'\nimport {DEFAULT_ORDERING_OPTIONS} from './Sort'\nimport {SerializeOptions, Serializable, SerializePath} from './StructureNodes'\nimport {SerializeError, HELP_URL} from './SerializeError'\nimport {StructureContext} from './types'\nimport {I18nTextRecord} from 'sanity'\n\n/** @internal */\nexport function maybeSerializeMenuItem(\n item: MenuItem | MenuItemBuilder,\n index: number,\n path: SerializePath,\n): MenuItem {\n return item instanceof MenuItemBuilder ? item.serialize({path, index}) : item\n}\n\n/**\n * Menu item action type\n * @public */\nexport type MenuItemActionType =\n | string\n | ((params: Record<string, string> | undefined, scope?: any) => void)\n\n/**\n * Menu items parameters\n *\n * @public */\nexport type MenuItemParamsType = Record<string, string | unknown | undefined>\n\n/**\n * Interface for menu items\n *\n * @public */\nexport interface MenuItem {\n /**\n * The i18n key and namespace used to populate the localized title. This is\n * the recommend way to set the title if you are localizing your studio.\n */\n i18n?: I18nTextRecord<'title'>\n /**\n * Menu Item title. Note that the `i18n` configuration will take\n * precedence and this title is left here as a fallback if no i18n key is\n * provided and compatibility with older plugins\n */\n title: string\n /** Menu Item action */\n action?: MenuItemActionType\n /** Menu Item intent */\n intent?: Intent\n /** Menu Item group */\n group?: string\n // TODO: align these with TemplateItem['icon']\n /** Menu Item icon */\n icon?: React.ComponentType | React.ReactNode\n /** Menu Item parameters. See {@link MenuItemParamsType} */\n params?: MenuItemParamsType\n /** Determine if it will show the MenuItem as action */\n showAsAction?: boolean\n}\n\n/**\n * Partial menu items\n * @public\n */\nexport type PartialMenuItem = Partial<MenuItem>\n\n/**\n * Class for building menu items.\n *\n * @public */\nexport class MenuItemBuilder implements Serializable<MenuItem> {\n /** menu item option object. See {@link PartialMenuItem} */\n protected spec: PartialMenuItem\n\n constructor(\n /**\n * Structure context. See {@link StructureContext}\n */\n protected _context: StructureContext,\n spec?: MenuItem,\n ) {\n this.spec = spec ? spec : {}\n }\n\n /**\n * Set menu item action\n * @param action - menu item action. See {@link MenuItemActionType}\n * @returns menu item builder based on action provided. See {@link MenuItemBuilder}\n */\n action(action: MenuItemActionType): MenuItemBuilder {\n return this.clone({action})\n }\n\n /**\n * Get menu item action\n * @returns menu item builder action. See {@link PartialMenuItem}\n */\n getAction(): PartialMenuItem['action'] {\n return this.spec.action\n }\n\n /**\n * Set menu item intent\n * @param intent - menu item intent. See {@link Intent}\n * @returns menu item builder based on intent provided. See {@link MenuItemBuilder}\n */\n intent(intent: Intent): MenuItemBuilder {\n return this.clone({intent})\n }\n\n /**\n * Get menu item intent\n * @returns menu item intent. See {@link PartialMenuItem}\n */\n getIntent(): PartialMenuItem['intent'] {\n return this.spec.intent\n }\n\n /**\n * Set menu item title\n * @param title - menu item title\n * @returns menu item builder based on title provided. See {@link MenuItemBuilder}\n */\n title(title: string): MenuItemBuilder {\n return this.clone({title})\n }\n\n /**\n * Get menu item title. Note that the `i18n` configuration will take\n * precedence and this title is left here for compatibility.\n * @returns menu item title\n */\n getTitle(): string | undefined {\n return this.spec.title\n }\n\n /**\n * Set the i18n key and namespace used to populate the localized title.\n * @param i18n - object with i18n key and related namespace\n * @returns menu item builder based on i18n config provided. See {@link MenuItemBuilder}\n */\n i18n(i18n: I18nTextRecord<'title'>): MenuItemBuilder {\n return this.clone({i18n})\n }\n\n /**\n * Get the i18n key and namespace used to populate the localized title.\n * @returns the i18n key and namespace used to populate the localized title.\n */\n getI18n(): I18nTextRecord<'title'> | undefined {\n return this.spec.i18n\n }\n\n /**\n * Set menu item group\n * @param group - menu item group\n * @returns menu item builder based on group provided. See {@link MenuItemBuilder}\n */\n group(group: string): MenuItemBuilder {\n return this.clone({group})\n }\n\n /**\n * Get menu item group\n * @returns menu item group. See {@link PartialMenuItem}\n */\n getGroup(): PartialMenuItem['group'] {\n return this.spec.group\n }\n\n /**\n * Set menu item icon\n * @param icon - menu item icon\n * @returns menu item builder based on icon provided. See {@link MenuItemBuilder}\n */\n icon(icon: React.ComponentType | React.ReactNode): MenuItemBuilder {\n return this.clone({icon})\n }\n\n /**\n * Get menu item icon\n * @returns menu item icon. See {@link PartialMenuItem}\n */\n getIcon(): PartialMenuItem['icon'] {\n return this.spec.icon\n }\n\n /**\n * Set menu item parameters\n * @param params - menu item parameters. See {@link MenuItemParamsType}\n * @returns menu item builder based on parameters provided. See {@link MenuItemBuilder}\n */\n params(params: MenuItemParamsType): MenuItemBuilder {\n return this.clone({params})\n }\n\n /**\n * Get meny item parameters\n * @returns menu item parameters. See {@link PartialMenuItem}\n */\n getParams(): PartialMenuItem['params'] {\n return this.spec.params\n }\n\n /**\n * Set menu item to show as action\n * @param showAsAction - determine if menu item should show as action\n * @returns menu item builder based on if it should show as action. See {@link MenuItemBuilder}\n */\n showAsAction(showAsAction = true): MenuItemBuilder {\n return this.clone({showAsAction: Boolean(showAsAction)})\n }\n\n /**\n * Check if menu item should show as action\n * @returns true if menu item should show as action, false if not. See {@link PartialMenuItem}\n */\n getShowAsAction(): PartialMenuItem['showAsAction'] {\n return this.spec.showAsAction\n }\n\n /** Serialize menu item builder\n * @param options - serialization options. See {@link SerializeOptions}\n * @returns menu item node based on path provided in options. See {@link MenuItem}\n */\n serialize(options: SerializeOptions = {path: []}): MenuItem {\n const {title, action, intent} = this.spec\n if (!title) {\n const hint = typeof action === 'string' ? `action: \"${action}\"` : undefined\n throw new SerializeError(\n '`title` is required for menu item',\n options.path,\n options.index,\n hint,\n ).withHelpUrl(HELP_URL.TITLE_REQUIRED)\n }\n\n if (!action && !intent) {\n throw new SerializeError(\n `\\`action\\` or \\`intent\\` required for menu item with title ${this.spec.title}`,\n options.path,\n options.index,\n `\"${title}\"`,\n ).withHelpUrl(HELP_URL.ACTION_OR_INTENT_REQUIRED)\n }\n\n if (intent && action) {\n throw new SerializeError(\n 'cannot set both `action` AND `intent`',\n options.path,\n options.index,\n `\"${title}\"`,\n ).withHelpUrl(HELP_URL.ACTION_AND_INTENT_MUTUALLY_EXCLUSIVE)\n }\n\n return {...this.spec, title}\n }\n\n /** Clone menu item builder\n * @param withSpec - menu item options. See {@link PartialMenuItem}\n * @returns menu item builder based on context and spec provided. See {@link MenuItemBuilder}\n */\n clone(withSpec?: PartialMenuItem): MenuItemBuilder {\n const builder = new MenuItemBuilder(this._context)\n builder.spec = {...this.spec, ...(withSpec || {})}\n return builder\n }\n}\n\n/** @internal */\nexport interface SortMenuItem extends MenuItem {\n params: {\n by: SortOrderingItem[]\n }\n}\n\n/** @internal */\nexport function getOrderingMenuItem(\n context: StructureContext,\n {by, title, i18n}: SortOrdering,\n extendedProjection?: string,\n): MenuItemBuilder {\n let builder = new MenuItemBuilder(context)\n .group('sorting')\n .title(\n context.i18n.t('default-menu-item.fallback-title', {\n // note this lives in the `studio` bundle because that one is loaded by default\n ns: 'studio',\n replace: {title}, // replaces the `{{title}}` option\n }),\n ) // fallback title\n .icon(SortIcon)\n .action('setSortOrder')\n .params({by, extendedProjection})\n\n if (i18n) {\n builder = builder.i18n(i18n)\n }\n\n return builder\n}\n\n/** @internal */\nexport function getOrderingMenuItemsForSchemaType(\n context: StructureContext,\n typeName: SchemaType | string,\n): MenuItemBuilder[] {\n const {schema} = context\n const type = typeof typeName === 'string' ? schema.get(typeName) : typeName\n if (!type || !('orderings' in type)) {\n return []\n }\n\n return (\n type.orderings ? type.orderings.concat(DEFAULT_ORDERING_OPTIONS) : DEFAULT_ORDERING_OPTIONS\n ).map((ordering: SortOrdering) =>\n getOrderingMenuItem(context, ordering, getExtendedProjection(type, ordering.by)),\n )\n}\n","import {SerializeOptions, Serializable, SerializePath} from './StructureNodes'\nimport {SerializeError, HELP_URL} from './SerializeError'\nimport {StructureContext} from './types'\nimport {I18nTextRecord} from 'sanity'\n\n/** @internal */\nexport function maybeSerializeMenuItemGroup(\n item: MenuItemGroup | MenuItemGroupBuilder,\n index: number,\n path: SerializePath,\n): MenuItemGroup {\n return item instanceof MenuItemGroupBuilder ? item.serialize({path, index}) : item\n}\n\n/**\n * Interface for menu item groups\n * @public\n */\nexport interface MenuItemGroup {\n /** Menu group Id */\n id: string\n /** Menu group title */\n title: string\n i18n?: I18nTextRecord<'title'>\n}\n\n/**\n * Class for building menu item groups.\n *\n * @public\n */\nexport class MenuItemGroupBuilder implements Serializable<MenuItemGroup> {\n /** Menu item group ID */\n protected _id: string\n /** Menu item group title */\n protected _title: string\n\n protected _i18n?: I18nTextRecord<'title'>\n\n constructor(\n /**\n * Structure context. See {@link StructureContext}\n */\n protected _context: StructureContext,\n spec?: MenuItemGroup,\n ) {\n this._id = spec ? spec.id : ''\n this._title = spec ? spec.title : ''\n this._i18n = spec ? spec.i18n : undefined\n }\n\n /**\n * Set menu item group ID\n * @param id - menu item group ID\n * @returns menu item group builder based on ID provided. See {@link MenuItemGroupBuilder}\n */\n id(id: string): MenuItemGroupBuilder {\n return new MenuItemGroupBuilder(this._context, {id, title: this._title, i18n: this._i18n})\n }\n\n /**\n * Get menu item group ID\n * @returns menu item group ID\n */\n getId(): string {\n return this._id\n }\n\n /**\n * Set menu item group title\n * @param title - menu item group title\n * @returns menu item group builder based on title provided. See {@link MenuItemGroupBuilder}\n */\n title(title: string): MenuItemGroupBuilder {\n return new MenuItemGroupBuilder(this._context, {title, id: this._id, i18n: this._i18n})\n }\n\n /**\n * Get menu item group title\n * @returns menu item group title\n */\n getTitle(): string {\n return this._title\n }\n\n /**\n * Set the i18n key and namespace used to populate the localized title.\n * @param i18n - object with i18n key and related namespace\n * @returns menu item group builder based on i18n info provided. See {@link MenuItemGroupBuilder}\n */\n i18n(i18n: I18nTextRecord<'title'>): MenuItemGroupBuilder {\n return new MenuItemGroupBuilder(this._context, {i18n, id: this._id, title: this._title})\n }\n\n /**\n * Get the i18n key and namespace used to populate the localized title.\n * @returns the i18n key and namespace used to populate the localized title.\n */\n getI18n(): I18nTextRecord<'title'> | undefined {\n return this._i18n\n }\n\n /**\n * Serialize menu item group builder\n * @param options - serialization options (path). See {@link SerializeOptions}\n * @returns menu item group based on path provided in options. See {@link MenuItemGroup}\n */\n serialize(options: SerializeOptions = {path: []}): MenuItemGroup {\n const {_id, _title, _i18n} = this\n if (!_id) {\n throw new SerializeError(\n '`id` is required for a menu item group',\n options.path,\n options.index,\n _title,\n ).withHelpUrl(HELP_URL.ID_REQUIRED)\n }\n\n if (!_title) {\n throw new SerializeError(\n '`title` is required for a menu item group',\n options.path,\n _id,\n ).withHelpUrl(HELP_URL.TITLE_REQUIRED)\n }\n\n return {\n id: _id,\n title: _title,\n i18n: _i18n,\n }\n }\n}\n","import {SerializeError} from '../SerializeError'\nimport {SerializePath} from '../StructureNodes'\n\nexport const disallowedPattern = /([^A-Za-z0-9-_.])/\n\nexport function validateId(\n id: string,\n parentPath: SerializePath,\n pathSegment: string | number | undefined,\n): string {\n if (typeof id !== 'string') {\n throw new SerializeError(\n `Structure node id must be of type string, got ${typeof id}`,\n parentPath,\n pathSegment,\n )\n }\n\n const [disallowedChar] = id.match(disallowedPattern) || []\n if (disallowedChar) {\n throw new SerializeError(\n `Structure node id cannot contain character \"${disallowedChar}\"`,\n parentPath,\n pathSegment,\n )\n }\n\n if (id.startsWith('__edit__')) {\n throw new SerializeError(\n `Structure node id cannot start with __edit__`,\n parentPath,\n pathSegment,\n )\n }\n\n return id\n}\n","import {camelCase} from 'lodash'\nimport getSlug from 'speakingurl'\nimport {disallowedPattern} from './validateId'\n\nexport function getStructureNodeId(title: string, id?: string): string {\n if (id) {\n return id\n }\n\n const camelCased = camelCase(title)\n\n return disallowedPattern.test(camelCased) ? camelCase(getSlug(title)) : camelCased\n}\n","import {SerializeOptions, StructureNode, Serializable, Child} from './StructureNodes'\nimport {SerializeError, HELP_URL} from './SerializeError'\nimport {MenuItem, MenuItemBuilder, maybeSerializeMenuItem} from './MenuItem'\nimport {MenuItemGroup, MenuItemGroupBuilder, maybeSerializeMenuItemGroup} from './MenuItemGroup'\nimport {validateId} from './util/validateId'\nimport {UserComponent} from './types'\nimport {getStructureNodeId} from './util/getStructureNodeId'\nimport {I18nTextRecord} from 'sanity'\n\n/**\n * Interface for component\n *\n * @public\n */\n// TODO: rename to `StructureComponent` since it clashes with React?\nexport interface Component extends StructureNode {\n /** Component of type {@link UserComponent} */\n component: UserComponent\n /** Component child of type {@link Child} */\n child?: Child\n /** Component menu items, array of type {@link MenuItem} */\n menuItems: MenuItem[]\n /** Component menu item group, array of type {@link MenuItemGroup} */\n menuItemGroups: MenuItemGroup[]\n /** Component options */\n options: {[key: string]: unknown}\n}\n\n/**\n * Interface for component input\n *\n * @public\n */\nexport interface ComponentInput extends StructureNode {\n /** Component of type {@link UserComponent} */\n component: UserComponent\n /** Component child of type {@link Child} */\n child?: Child\n /** Component options */\n options?: {[key: string]: unknown}\n /** Component menu items. See {@link MenuItem} and {@link MenuItemBuilder} */\n menuItems?: (MenuItem | MenuItemBuilder)[]\n /** Component menu item groups. See {@link MenuItemGroup} and {@link MenuItemGroupBuilder} */\n menuItemGroups?: (MenuItemGroup | MenuItemGroupBuilder)[]\n}\n\n/**\n * Interface for buildable component\n *\n * @public\n */\nexport interface BuildableComponent extends Partial<StructureNode> {\n /** Component of type {@link UserComponent} */\n component?: UserComponent\n /** Component child of type {@link Child} */\n child?: Child\n /** Component options */\n options?: {[key: string]: unknown}\n /** Component menu items. See {@link MenuItem} and {@link MenuItemBuilder} */\n menuItems?: (MenuItem | MenuItemBuilder)[]\n /** Component menu item groups. See {@link MenuItemGroup} and {@link MenuItemGroupBuilder} */\n menuItemGroups?: (MenuItemGroup | MenuItemGroupBuilder)[]\n}\n\n/**\n * Class for building components\n *\n * @public\n */\nexport class ComponentBuilder implements Serializable<Component> {\n /** component builder option object */\n protected spec: BuildableComponent\n\n constructor(spec?: ComponentInput) {\n this.spec = {options: {}, ...(spec ? spec : {})}\n }\n\n /** Set Component ID\n * @param id - component ID\n * @returns component builder based on ID provided\n */\n id(id: string): ComponentBuilder {\n return this.clone({id})\n }\n\n /** Get ID\n * @returns ID\n */\n getId(): BuildableComponent['id'] {\n return this.spec.id\n }\n\n /** Set Component title\n * @param title - component title\n * @returns component builder based on title provided (and ID)\n */\n title(title: string): ComponentBuilder {\n return this.clone({title, id: getStructureNodeId(title, this.spec.id)})\n }\n\n /** Get Component title\n * @returns title\n */\n getTitle(): BuildableComponent['title'] {\n return this.spec.title\n }\n\n /** Set the i18n key and namespace used to populate the localized title.\n * @param i18n - the key and namespaced used to populate the localized title.\n * @returns component builder based on i18n key and ns provided\n */\n i18n(i18n: I18nTextRecord<'title'>): ComponentBuilder {\n return this.clone({i18n})\n }\n\n /** Get i18n key and namespace used to populate the localized title\n * @returns the i18n key and namespace used to populate the localized title\n */\n getI18n(): I18nTextRecord<'title'> | undefined {\n return this.spec.i18n\n }\n\n /** Set Component child\n * @param child - child component\n * @returns component builder based on child component provided\n */\n child(child: Child): ComponentBuilder {\n return this.clone({child})\n }\n\n /** Get Component child\n * @returns child component\n */\n getChild(): BuildableComponent['child'] {\n return this.spec.child\n }\n\n /** Set component\n * @param component - user built component\n * @returns component builder based on component provided\n */\n component(component: UserComponent): ComponentBuilder {\n return this.clone({component})\n }\n\n /** Get Component\n * @returns component\n */\n getComponent(): BuildableComponent['component'] {\n return this.spec.component\n }\n\n /** Set Component options\n * @param options - component options\n * @returns component builder based on options provided\n */\n options(options: {[key: string]: unknown}): ComponentBuilder {\n return this.clone({options})\n }\n\n /** Get Component options\n * @returns component options\n */\n getOptions(): NonNullable<BuildableComponent['options']> {\n return this.spec.options || {}\n }\n\n /** Set Component menu items\n * @param menuItems - component menu items\n * @returns component builder based on menuItems provided\n */\n menuItems(menuItems: (MenuItem | MenuItemBuilder)[]): ComponentBuilder {\n return this.clone({menuItems})\n }\n\n /** Get Component menu items\n * @returns menu items\n */\n getMenuItems(): BuildableComponent['menuItems'] {\n return this.spec.menuItems\n }\n\n /** Set Component menu item groups\n * @param menuItemGroups - component menu item groups\n * @returns component builder based on menuItemGroups provided\n */\n menuItemGroups(menuItemGroups: (MenuItemGroup | MenuItemGroupBuilder)[]): ComponentBuilder {\n return this.clone({menuItemGroups})\n }\n\n /** Get Component menu item groups\n * @returns menu item groups\n */\n getMenuItemGroups(): BuildableComponent['menuItemGroups'] {\n return this.spec.menuItemGroups\n }\n\n /** Serialize component\n * @param options - serialization options\n * @returns component object based on path provided in options\n *\n */\n serialize(options: SerializeOptions = {path: []}): Component {\n const {id, title, child, options: componentOptions, component} = this.spec\n if (!id) {\n throw new SerializeError(\n '`id` is required for `component` structure item',\n options.path,\n options.index,\n ).withHelpUrl(HELP_URL.ID_REQUIRED)\n }\n\n if (!component) {\n throw new SerializeError(\n '`component` is required for `component` structure item',\n options.path,\n options.index,\n ).withHelpUrl(HELP_URL.ID_REQUIRED)\n }\n\n return {\n id: validateId(id, options.path, options.index),\n title,\n type: 'component',\n child,\n component,\n options: componentOptions || {},\n menuItems: (this.spec.menuItems || []).map((item, i) =>\n maybeSerializeMenuItem(item, i, options.path),\n ),\n menuItemGroups: (this.spec.menuItemGroups || []).map((item, i) =>\n maybeSerializeMenuItemGroup(item, i, options.path),\n ),\n }\n }\n\n /** Clone component builder (allows for options overriding)\n * @param withSpec - component builder options\n * @returns cloned builder\n */\n clone(withSpec?: BuildableComponent): ComponentBuilder {\n const builder = new ComponentBuilder()\n builder.spec = {...this.spec, ...(withSpec || {})}\n return builder\n }\n}\n","import type {SanityClient} from '@sanity/client'\nimport {\n DEFAULT_STUDIO_CLIENT_OPTIONS,\n getDraftId,\n getPublishedId,\n type SourceClientOptions,\n} from 'sanity'\n\nexport async function resolveTypeForDocument(\n getClient: (options: SourceClientOptions) => SanityClient,\n id: string,\n): Promise<string | undefined> {\n const query = '*[_id in [$documentId, $draftId]]._type'\n const documentId = getPublishedId(id)\n const draftId = getDraftId(id)\n\n const types = await getClient(DEFAULT_STUDIO_CLIENT_OPTIONS).fetch(\n query,\n {documentId, draftId},\n {tag: 'structure.resolve-type'},\n )\n\n return types[0]\n}\n","import {kebabCase} from 'lodash'\nimport {Serializable, SerializeOptions, SerializePath} from '../StructureNodes'\nimport {HELP_URL, SerializeError} from '../SerializeError'\nimport {validateId} from '../util/validateId'\nimport {View} from '../types'\nimport {ComponentViewBuilder} from './ComponentView'\nimport {FormViewBuilder} from './FormView'\n\n/**\n * Interface for base view\n *\n * @public */\nexport interface BaseView {\n /** View id */\n id: string\n /** View Title */\n title: string\n /** View Icon */\n icon?: React.ComponentType | React.ReactNode\n}\n\n/**\n * Class for building generic views.\n *\n * @public\n */\nexport abstract class GenericViewBuilder<TView extends Partial<BaseView>, ConcreteImpl>\n implements Serializable<BaseView>\n{\n /** Generic view option object */\n protected spec: TView = {} as TView\n\n /** Set generic view ID\n * @param id - generic view ID\n * @returns generic view builder based on ID provided.\n */\n id(id: string): ConcreteImpl {\n return this.clone({id})\n }\n /** Get generic view ID\n * @returns generic view ID\n */\n getId(): TView['id'] {\n return this.spec.id\n }\n\n /** Set generic view title\n * @param title - generic view title\n * @returns generic view builder based on title provided and (if provided) its ID.\n */\n title(title: string): ConcreteImpl {\n return this.clone({title, id: this.spec.id || kebabCase(title)})\n }\n\n /** Get generic view title\n * @returns generic view title\n */\n getTitle(): TView['title'] {\n return this.spec.title\n }\n\n /** Set generic view icon\n * @param icon - generic view icon\n * @returns generic view builder based on icon provided.\n */\n icon(icon: React.ComponentType | React.ReactNode): ConcreteImpl {\n return this.clone({icon})\n }\n\n /** Get generic view icon\n * @returns generic view icon\n */\n getIcon(): TView['icon'] {\n return this.spec.icon\n }\n\n /** Serialize generic view\n * @param options - serialization options. See {@link SerializeOptions}\n * @returns generic view object based on path provided in options. See {@link BaseView}\n */\n serialize(options: SerializeOptions = {path: []}): BaseView {\n const {id, title, icon} = this.spec\n if (!id) {\n throw new SerializeError(\n '`id` is required for view item',\n options.path,\n options.index,\n ).withHelpUrl(HELP_URL.ID_REQUIRED)\n }\n\n if (!title) {\n throw new SerializeError(\n '`title` is required for view item',\n options.path,\n options.index,\n ).withHelpUrl(HELP_URL.TITLE_REQUIRED)\n }\n\n return {\n id: validateId(id, options.path, options.index),\n title,\n icon,\n }\n }\n\n /** Clone generic view builder (allows for options overriding)\n * @param withSpec - Partial generic view builder options. See {@link BaseView}\n * @returns Generic view builder.\n */\n abstract clone(withSpec?: Partial<BaseView>): ConcreteImpl\n}\n\nfunction isSerializable(view: BaseView | Serializable<BaseView>): view is Serializable<BaseView> {\n return typeof (view as Serializable<BaseView>).serialize === 'function'\n}\n\n/** @internal */\nexport function maybeSerializeView(\n item: View | Serializable<View>,\n index: number,\n path: SerializePath,\n): View {\n return isSerializable(item) ? item.serialize({path, index}) : item\n}\n\n/**\n * View builder. See {@link ComponentViewBuilder} and {@link FormViewBuilder}\n *\n * @public\n */\nexport type ViewBuilder = ComponentViewBuilder | FormViewBuilder\n","import {SerializeOptions} from '../StructureNodes'\nimport {SerializeError, HELP_URL} from '../SerializeError'\nimport type {UserViewComponent} from '../types'\nimport {BaseView, GenericViewBuilder} from './View'\nimport {isRecord} from 'sanity'\n\n/**\n * Interface for component views.\n *\n * @public */\nexport interface ComponentView<TOptions = Record<string, any>> extends BaseView {\n type: 'component'\n /** Component view components. See {@link UserViewComponent} */\n component: UserViewComponent\n /** Component view options */\n options: TOptions\n}\n\nconst isComponentSpec = (spec: unknown): spec is ComponentView =>\n isRecord(spec) && spec.type === 'component'\n\n/**\n * Class for building a component view.\n *\n * @public */\nexport class ComponentViewBuilder extends GenericViewBuilder<\n Partial<ComponentView>,\n ComponentViewBuilder\n> {\n /** Partial Component view option object. See {@link ComponentView} */\n protected spec: Partial<ComponentView>\n\n constructor(\n /**\n * Component view component or spec\n * @param componentOrSpec - user view component or partial component view. See {@link UserViewComponent} and {@link ComponentView}\n */\n componentOrSpec?: UserViewComponent | Partial<ComponentView>,\n ) {\n const spec = isComponentSpec(componentOrSpec) ? {...componentOrSpec} : {options: {}}\n\n super()\n this.spec = spec\n\n const userComponent =\n typeof componentOrSpec === 'function' ? componentOrSpec : this.spec.component\n\n if (userComponent) {\n // Because we're cloning, this'll return a new instance, so grab the spec from it\n this.spec = this.component(userComponent).spec\n }\n }\n\n /** Set view Component\n * @param component - component view component. See {@link UserViewComponent}\n * @returns component view builder based on component view provided. See {@link ComponentViewBuilder}\n */\n component(component: UserViewComponent): ComponentViewBuilder {\n return this.clone({component})\n }\n\n /** Get view Component\n * @returns Partial component view. See {@link ComponentView}\n */\n getComponent(): Partial<ComponentView>['component'] {\n return this.spec.component\n }\n\n /** Set view Component options\n * @param options - component view options\n * @returns component view builder based on options provided. See {@link ComponentViewBuilder}\n */\n options(options: {[key: string]: any}): ComponentViewBuilder {\n return this.clone({options})\n }\n\n /** Get view Component options\n * @returns component view options. See {@link ComponentView}\n */\n getOptions(): ComponentView['options'] {\n return this.spec.options || {}\n }\n\n /** Serialize view Component\n * @param options - serialization options. See {@link SerializeOptions}\n * @returns component view based on path provided in options. See {@link ComponentView}\n *\n */\n serialize(options: SerializeOptions = {path: []}): ComponentView {\n const base = super.serialize(options)\n\n const component = this.spec.component\n if (typeof component !== 'function') {\n throw new SerializeError(\n '`component` is required and must be a function for `component()` view item',\n options.path,\n options.index,\n ).withHelpUrl(HELP_URL.COMPONENT_REQUIRED)\n }\n\n return {\n ...base,\n component,\n options: this.spec.options || {},\n type: 'component',\n }\n }\n\n /** Clone Component view builder (allows for options overriding)\n * @param withSpec - partial for component view option. See {@link ComponentView}\n * @returns component view builder. See {@link ComponentViewBuilder}\n */\n clone(withSpec?: Partial<ComponentView>): ComponentViewBuilder {\n const builder = new ComponentViewBuilder()\n builder.spec = {...this.spec, ...(withSpec || {})}\n return builder\n }\n}\n","import {SerializeOptions} from '../StructureNodes'\nimport {BaseView, GenericViewBuilder} from './View'\n\n/**\n * Interface for form views.\n *\n * @public */\nexport interface FormView extends BaseView {\n type: 'form'\n}\n\n/**\n * Class for building a form view.\n *\n * @public */\nexport class FormViewBuilder extends GenericViewBuilder<Partial<BaseView>, FormViewBuilder> {\n /** Document list options. See {@link FormView} */\n protected spec: Partial<FormView>\n\n constructor(spec?: Partial<FormView>) {\n super()\n this.spec = {id: 'editor', title: 'Editor', ...(spec ? spec : {})}\n }\n\n /**\n * Serialize Form view builder\n * @param options - Serialize options. See {@link SerializeOptions}\n * @returns form view builder based on path provided in options. See {@link FormView}\n */\n serialize(options: SerializeOptions = {path: []}): FormView {\n return {\n ...super.serialize(options),\n type: 'form',\n }\n }\n\n /**\n * Clone Form view builder (allows for options overriding)\n * @param withSpec - Partial form view builder options. See {@link FormView}\n * @returns form view builder. See {@link FormViewBuilder}\n */\n clone(withSpec?: Partial<FormView>): FormViewBuilder {\n const builder = new FormViewBuilder()\n builder.spec = {...this.spec, ...(withSpec || {})}\n return builder\n }\n}\n","import type {UserViewComponent} from '../types'\nimport {ComponentView, ComponentViewBuilder} from './ComponentView'\nimport {FormView, FormViewBuilder} from './FormView'\n\nexport * from './FormView'\nexport * from './ComponentView'\nexport * from './View'\n\n/** @internal */\nexport const form = (spec?: Partial<FormView>): FormViewBuilder => new FormViewBuilder(spec)\n\n/** @internal */\nexport const component = (\n componentOrSpec?: UserViewComponent | Partial<ComponentView>,\n): ComponentViewBuilder => new ComponentViewBuilder(componentOrSpec)\n","import {uniq} from 'lodash'\nimport {SchemaType} from '@sanity/types'\nimport {resolveTypeForDocument} from './util/resolveTypeForDocument'\nimport {ChildResolver} from './ChildResolver'\nimport {SerializeOptions, Serializable, Child, DocumentNode, EditorNode} from './StructureNodes'\nimport {SerializeError, HELP_URL} from './SerializeError'\nimport {validateId} from './util/validateId'\nimport {ViewBuilder, maybeSerializeView} from './views/View'\nimport {form} from './views'\nimport type {StructureContext, View} from './types'\nimport {getStructureNodeId} from './util/getStructureNodeId'\nimport {I18nTextRecord} from 'sanity'\n\nconst createDocumentChildResolver =\n ({resolveDocumentNode, getClient}: StructureContext): ChildResolver =>\n async (itemId, {params, path}) => {\n let type = params.type\n\n const parentPath = path.slice(0, path.length - 1)\n const currentSegment = path[path.length - 1]\n\n if (!type) {\n type = await resolveTypeForDocument(getClient, itemId)\n }\n\n if (!type) {\n throw new SerializeError(\n `Failed to resolve document, and no type provided in parameters.`,\n parentPath,\n currentSegment,\n )\n }\n\n return resolveDocumentNode({documentId: itemId, schemaType: type})\n }\n\n/**\n * Interface for options of Partial Documents. See {@link PartialDocumentNode}\n *\n * @public */\nexport interface DocumentOptions {\n /** Document Id */\n id: string\n /** Document Type */\n type: string\n /** Document Template */\n template?: string\n /** Template parameters */\n templateParameters?: Record<string, unknown>\n}\n\n/**\n * Interface for partial document (focused on the document pane)\n *\n * @public */\nexport interface PartialDocumentNode {\n /** Document Id */\n id?: string\n /** Document title */\n title?: string\n /** I18n key and namespace used to populate the localized title */\n i18n?: I18nTextRecord<'title'>\n /** Document children of type {@link Child} */\n child?: Child\n /**\n * Views for the document pane. See {@link ViewBuilder} and {@link View}\n */\n views?: (View | ViewBuilder)[]\n /**\n * Document options. See {@link DocumentOptions}\n */\n options?: Partial<DocumentOptions>\n}\n\n/**\n * A `DocumentBuilder` is used to build a document node.\n *\n * @public */\nexport class DocumentBuilder implements Serializable<DocumentNode> {\n /** Component builder option object See {@link PartialDocumentNode} */\n protected spec: PartialDocumentNode\n\n constructor(\n /**\n * Structure context. See {@link StructureContext}\n */\n protected _context: StructureContext,\n spec?: PartialDocumentNode,\n ) {\n this.spec = spec ? spec : {}\n }\n\n /** Set Document Builder ID\n * @param id - document builder ID\n * @returns document builder based on ID provided. See {@link DocumentBuilder}\n */\n id(id: string): DocumentBuilder {\n return this.clone({id})\n }\n\n /** Get Document Builder ID\n * @returns document ID. See {@link PartialDocumentNode}\n */\n getId(): PartialDocumentNode['id'] {\n return this.spec.id\n }\n\n /** Set Document title\n * @param title - document title\n * @returns document builder based on title provided (and ID). See {@link DocumentBuilder}\n */\n title(title: string): DocumentBuilder {\n return this.clone({title, id: getStructureNodeId(title, this.spec.id)})\n }\n\n /** Get Document title\n * @returns document title. See {@link PartialDocumentNode}\n */\n getTitle(): PartialDocumentNode['title'] {\n return this.spec.title\n }\n\n /** Set the i18n key and namespace used to populate the localized title.\n * @param i18n - the key and namespaced used to populate the localized title.\n * @returns component builder based on i18n key and ns provided\n */\n i18n(i18n: I18nTextRecord<'title'>): DocumentBuilder {\n return this.clone({i18n})\n }\n\n /** Get i18n key and namespace used to populate the localized title\n * @returns the i18n key and namespace used to populate the localized title\n */\n getI18n(): I18nTextRecord<'title'> | undefined {\n return this.spec.i18n\n }\n\n /** Set Document child\n * @param child - document child\n * @returns document builder based on child provided. See {@link DocumentBuilder}\n */\n child(child: Child): DocumentBuilder {\n return this.clone({child})\n }\n\n /** Get Document child\n * @returns document child. See {@link PartialDocumentNode}\n */\n getChild(): PartialDocumentNode['child'] {\n return this.spec.child\n }\n\n /** Set Document ID\n * @param documentId - document ID\n * @returns document builder with document based on ID provided. See {@link DocumentBuilder}\n */\n documentId(documentId: string): DocumentBuilder {\n // Let's try to be a bit helpful and assign an ID from document ID if none is specified\n const paneId = this.spec.id || documentId\n return this.clone({\n id: paneId,\n options: {\n ...(this.spec.options || {}),\n id: documentId,\n },\n })\n }\n\n /** Get Document ID\n * @returns document ID. See {@link DocumentOptions}\n */\n getDocumentId(): Partial<DocumentOptions>['id'] {\n return this.spec.options?.id\n }\n\n /** Set Document Type\n * @param documentType - document type\n * @returns document builder with document based on type provided. See {@link DocumentBuilder}\n */\n schemaType(documentType: SchemaType | string): DocumentBuilder {\n return this.clone({\n options: {\n ...(this.spec.options || {}),\n type: typeof documentType === 'string' ? documentType : documentType.name,\n },\n })\n }\n\n /** Get Document Type\n * @returns document type. See {@link DocumentOptions}\n */\n getSchemaType(): Partial<DocumentOptions>['type'] {\n return this.spec.options?.type\n }\n\n /** Set Document Template\n * @param templateId - document template ID\n * @param parameters - document template parameters\n * @returns document builder with document based on template provided. See {@link DocumentBuilder}\n */\n initialValueTemplate(templateId: string, parameters?: Record<string, unknown>): DocumentBuilder {\n return this.clone({\n options: {\n ...(this.spec.options || {}),\n template: templateId,\n templateParameters: parameters,\n },\n })\n }\n\n /** Get Document Template\n * @returns document template. See {@link DocumentOptions}\n */\n getInitialValueTemplate(): Partial<DocumentOptions>['template'] {\n return this.spec.options?.template\n }\n\n /** Get Document's initial value Template parameters\n * @returns document template parameters. See {@link DocumentOptions}\n */\n getInitialValueTemplateParameters(): Partial<DocumentOptions>['templateParameters'] {\n return this.spec.options?.templateParameters\n }\n\n /** Set Document views\n * @param views - document views. See {@link ViewBuilder} and {@link View}\n * @returns document builder with document based on views provided. See {@link DocumentBuilder}\n */\n views(views: (View | ViewBuilder)[]): DocumentBuilder {\n return this.clone({views})\n }\n\n /** Get Document views\n * @returns document views. See {@link ViewBuilder} and {@link View}\n */\n getViews(): (View | ViewBuilder)[] {\n return this.spec.views || []\n }\n\n /** Serialize Document builder\n * @param options - serialization options. See {@link SerializeOptions}\n * @returns document node based on path, index and hint provided in options. See {@link DocumentNode}\n */\n serialize({path = [], index, hint}: SerializeOptions = {path: []}): DocumentNode {\n const urlId = path[index || path.length - 1]\n\n // Try to grab document ID / editor ID from URL if not defined\n const id = this.spec.id || (urlId && `${urlId}`) || ''\n const options: Partial<DocumentOptions> = {\n id,\n type: undefined,\n template: undefined,\n templateParameters: undefined,\n ...this.spec.options,\n }\n\n if (typeof id !== 'string' || !id) {\n throw new SerializeError(\n '`id` is required for document nodes',\n path,\n index,\n hint,\n ).withHelpUrl(HELP_URL.ID_REQUIRED)\n }\n\n if (!options || !options.id) {\n throw new SerializeError(\n 'document id (`id`) is required for document nodes',\n path,\n id,\n hint,\n ).withHelpUrl(HELP_URL.DOCUMENT_ID_REQUIRED)\n }\n\n if (!options || !options.type) {\n throw new SerializeError(\n 'document type (`schemaType`) is required for document nodes',\n path,\n id,\n hint,\n )\n }\n\n const views = (this.spec.views && this.spec.views.length > 0 ? this.spec.views : [form()]).map(\n (item, i) => maybeSerializeView(item, i, path),\n )\n\n const viewIds = views.map((view) => view.id)\n const dupes = uniq(viewIds.filter((viewId, i) => viewIds.includes(viewId, i + 1)))\n if (dupes.length > 0) {\n throw new SerializeError(\n `document node has views with duplicate IDs: ${dupes.join(', ')}`,\n path,\n id,\n hint,\n )\n }\n\n return {\n ...this.spec,\n child: this.spec.child || createDocumentChildResolver(this._context),\n id: validateId(id, path, index),\n type: 'document',\n options: getDocumentOptions(options),\n views,\n }\n }\n\n /** Clone Document builder\n * @param withSpec - partial document node specification used to extend the cloned builder. See {@link PartialDocumentNode}\n * @returns document builder based on context and spec provided. See {@link DocumentBuilder}\n */\n clone(withSpec: PartialDocumentNode = {}): DocumentBuilder {\n const builder = new DocumentBuilder(this._context)\n const options = {...(this.spec.options || {}), ...(withSpec.options || {})}\n builder.spec = {...this.spec, ...withSpec, options}\n return builder\n }\n}\n\nfunction getDocumentOptions(spec: Partial<DocumentOptions>): DocumentOptions {\n const opts: DocumentOptions = {\n id: spec.id || '',\n type: spec.type || '*',\n }\n\n if (spec.template) {\n opts.template = spec.template\n }\n\n if (spec.templateParameters) {\n opts.templateParameters = spec.templateParameters\n }\n\n return opts\n}\n\n/** @internal */\nexport function documentFromEditor(context: StructureContext, spec?: EditorNode): DocumentBuilder {\n let doc = spec?.type\n ? // Use user-defined document fragment as base if possible\n context.resolveDocumentNode({schemaType: spec.type})\n : // Fall back to plain old document builder\n new DocumentBuilder(context)\n\n if (!spec) return doc\n\n const {id, type, template, templateParameters} = spec.options\n doc = doc.id(spec.id).documentId(id)\n\n if (type) {\n doc = doc.schemaType(type)\n }\n if (template) {\n doc = doc.initialValueTemplate(template, templateParameters)\n }\n if (spec.child) {\n doc = doc.child(spec.child)\n }\n\n return doc\n}\n\n/** @internal */\nexport function documentFromEditorWithInitialValue(\n {resolveDocumentNode, templates}: StructureContext,\n templateId: string,\n parameters?: Record<string, unknown>,\n): DocumentBuilder {\n const template = templates.find((t) => t.id === templateId)\n\n if (!template) {\n throw new Error(`Template with ID \"${templateId}\" not defined`)\n }\n\n return resolveDocumentNode({schemaType: template.schemaType}).initialValueTemplate(\n templateId,\n parameters,\n )\n}\n","export const layoutOptions = ['default', 'card', 'media', 'detail', 'block']\n","import {PartialDocumentList, getTypeNamesFromFilter} from './DocumentList'\nimport {StructureNode} from './StructureNodes'\n\n/**\n * Intent parameters (json)\n *\n * @public\n */\nexport type IntentJsonParams = {[key: string]: any}\n\n/**\n * Base intent parameters\n *\n * @public\n * @todo dedupe with core\n */\nexport interface BaseIntentParams {\n /**\n * Document schema type name to create/edit.\n * Required for `create` intents, optional for `edit` (but encouraged, safer and faster)\n */\n type?: string\n\n /**\n * ID of the document to create/edit.\n * Required for `edit` intents, optional for `create`.\n */\n id?: string\n\n /**\n * Name (ID) of initial value template to use for `create` intent. Optional.\n */\n template?: string\n\n /**\n * Experimental field path\n *\n * @beta\n * @experimental\n * @hidden\n */\n path?: string\n\n /**\n * Optional \"mode\" to use for edit intent.\n * Known modes are `structure` and `presentation`.\n */\n mode?: string\n\n /**\n * Arbitrary/custom parameters are generally discouraged - try to keep them to a minimum,\n * or use `payload` (arbitrary JSON-serializable object) instead.\n */\n [key: string]: string | undefined\n}\n\n/** @internal */\nexport const DEFAULT_INTENT_HANDLER = Symbol('Document type list canHandleIntent')\n\n/**\n * Intent parameters\n * See {@link router.BaseIntentParams} and {@link router.IntentJsonParams}\n *\n * @public\n */\nexport type IntentParams = BaseIntentParams | [BaseIntentParams, IntentJsonParams]\n\n/**\n * Interface for intents\n * @public */\n// TODO: intents should be unified somewhere\nexport interface Intent {\n /** Intent type */\n type: string\n /** Intent parameters. See {@link IntentParams}\n */\n params?: IntentParams\n}\n\n/**\n * Interface for intent checker\n *\n * @public\n */\nexport interface IntentChecker {\n (\n /** Intent name */\n intentName: string,\n /** Intent checker parameter */\n params: {[key: string]: any},\n /** Structure context. See {@link StructureNode} */\n context: {pane: StructureNode; index: number},\n ): boolean\n /** intent checker identify */\n identity?: symbol\n}\n\n/** @internal */\nexport const defaultIntentChecker: IntentChecker = (intentName, params, {pane}): boolean => {\n const isEdit = intentName === 'edit'\n const isCreate = intentName === 'create'\n const typedSpec = pane as PartialDocumentList\n const paneFilter = typedSpec.options?.filter || ''\n const paneParams = typedSpec.options?.params || {}\n const typeNames = typedSpec.schemaTypeName\n ? [typedSpec.schemaTypeName]\n : getTypeNamesFromFilter(paneFilter, paneParams)\n\n const initialValueTemplates = typedSpec.initialValueTemplates || []\n\n if (isCreate && params.template) {\n return initialValueTemplates.some((tpl) => tpl.templateId === params.template)\n }\n\n return (\n (isEdit && params.id && typeNames.includes(params.type)) ||\n (isCreate && typeNames.includes(params.type))\n )\n}\n\ndefaultIntentChecker.identity = DEFAULT_INTENT_HANDLER\n","import {AddIcon} from '@sanity/icons'\nimport {HELP_URL, SerializeError} from './SerializeError'\nimport type {Serializable, SerializeOptions, SerializePath} from './StructureNodes'\nimport type {BaseIntentParams, IntentParams} from './Intent'\nimport type {StructureContext} from './types'\nimport {MenuItemBuilder, type MenuItem} from './MenuItem'\nimport type {InitialValueTemplateItem} from 'sanity'\n\n/**\n * A `InitialValueTemplateItemBuilder` is used to build a document node with an initial value set.\n *\n * @public\n */\nexport class InitialValueTemplateItemBuilder implements Serializable<InitialValueTemplateItem> {\n /** Initial Value template item option object. See {@link InitialValueTemplateItem} */\n protected spec: Partial<InitialValueTemplateItem>\n\n constructor(\n /**\n * Structure context. See {@link StructureContext}\n */\n protected _context: StructureContext,\n spec?: Partial<InitialValueTemplateItem>,\n ) {\n this.spec = spec ? spec : {}\n }\n\n /** Set initial value template item builder ID\n * @param id - initial value template item ID\n * @returns initial value template item based on ID provided. See {@link InitialValueTemplateItemBuilder}\n */\n id(id: string): InitialValueTemplateItemBuilder {\n return this.clone({id})\n }\n\n /** Get initial value template item builder ID\n * @returns initial value template item ID. See {@link InitialValueTemplateItem}\n */\n getId(): Partial<InitialValueTemplateItem>['id'] {\n return this.spec.id\n }\n\n /** Set initial value template item title\n * @param title - initial value template item title\n * @returns initial value template item based on title provided. See {@link InitialValueTemplateItemBuilder}\n */\n title(title: string): InitialValueTemplateItemBuilder {\n return this.clone({title})\n }\n\n /** Get initial value template item title\n * @returns initial value template item title. See {@link InitialValueTemplateItem}\n */\n getTitle(): Partial<InitialValueTemplateItem>['title'] {\n return this.spec.title\n }\n\n /** Set initial value template item description\n * @param description - initial value template item description\n * @returns initial value template item builder based on description provided. See {@link InitialValueTemplateItemBuilder}\n */\n description(description: string): InitialValueTemplateItemBuilder {\n return this.clone({description})\n }\n\n /** Get initial value template item description\n * @returns initial value template item description. See {@link InitialValueTemplateItem}\n */\n getDescription(): Partial<InitialValueTemplateItem>['description'] {\n return this.spec.description\n }\n\n /** Set initial value template ID\n * @param templateId - initial value template item template ID\n * @returns initial value template item based builder on template ID provided. See {@link InitialValueTemplateItemBuilder}\n */\n templateId(templateId: string): InitialValueTemplateItemBuilder {\n // Let's try to be a bit helpful and assign an ID from template ID if none is specified\n const paneId = this.spec.id || templateId\n return this.clone({\n id: paneId,\n templateId,\n })\n }\n\n /** Get initial value template item template ID\n * @returns initial value template item ID. See {@link InitialValueTemplateItem}\n */\n getTemplateId(): Partial<InitialValueTemplateItem>['templateId'] {\n return this.spec.templateId\n }\n\n /** Get initial value template item template parameters\n * @param parameters - initial value template item parameters\n * @returns initial value template item builder based on parameters provided. See {@link InitialValueTemplateItemBuilder}\n */\n parameters(parameters: {[key: string]: any}): InitialValueTemplateItemBuilder {\n return this.clone({parameters})\n }\n\n /** Get initial value template item template parameters\n * @returns initial value template item parameters. See {@link InitialValueTemplateItem}\n */\n getParameters(): Partial<InitialValueTemplateItem>['parameters'] {\n return this.spec.parameters\n }\n\n /** Serialize initial value template item\n * @param options - serialization options. See {@link SerializeOptions}\n * @returns initial value template item object based on the path, index and hint provided in options. See {@link InitialValueTemplateItem}\n */\n serialize({path = [], index, hint}: SerializeOptions = {path: []}): InitialValueTemplateItem {\n const {spec, _context} = this\n const {templates} = _context\n\n if (typeof spec.id !== 'string' || !spec.id) {\n throw new SerializeError(\n '`id` is required for initial value template item nodes',\n path,\n index,\n hint,\n ).withHelpUrl(HELP_URL.ID_REQUIRED)\n }\n\n if (!spec.templateId) {\n throw new SerializeError(\n 'template id (`templateId`) is required for initial value template item nodes',\n path,\n spec.id,\n hint,\n ).withHelpUrl(HELP_URL.ID_REQUIRED)\n }\n\n const template = templates.find((t) => t.id === spec.templateId)\n\n if (!template) {\n throw new SerializeError(\n 'template id (`templateId`) is required for initial value template item nodes',\n path,\n spec.id,\n hint,\n ).withHelpUrl(HELP_URL.ID_REQUIRED)\n }\n\n return {\n id: spec.id,\n templateId: spec.id,\n schemaType: template.schemaType,\n type: 'initialValueTemplateItem',\n description: spec.description || template.description,\n title: spec.title || template.title,\n subtitle: spec.subtitle,\n icon: spec.icon || template.icon,\n initialDocumentId: spec.initialDocumentId,\n parameters: spec.parameters,\n }\n }\n\n /** Clone generic view builder (allows for options overriding)\n * @param withSpec - initial value template item builder options. See {@link InitialValueTemplateItemBuilder}\n * @returns initial value template item builder based on the context and options provided. See {@link InitialValueTemplateItemBuilder}\n */\n clone(withSpec: Partial<InitialValueTemplateItem> = {}): InitialValueTemplateItemBuilder {\n const builder = new InitialValueTemplateItemBuilder(this._context)\n builder.spec = {...this.spec, ...withSpec}\n return builder\n }\n}\n\n/** @internal */\nexport function defaultInitialValueTemplateItems(\n context: StructureContext,\n): InitialValueTemplateItemBuilder[] {\n const {schema, getStructureBuilder, templates} = context\n\n // Sort templates by their schema type, in order or definition\n const typeNames = schema.getTypeNames()\n const ordered = templates\n // Don't list templates that require parameters\n // TODO: this should use the new-document template items instead maybe?\n .filter((tpl) => !tpl.parameters?.length)\n .sort((a, b) => typeNames.indexOf(a.schemaType) - typeNames.indexOf(b.schemaType))\n\n // Create actual template items out of the templates\n return ordered.map((tpl) => getStructureBuilder().initialValueTemplateItem(tpl.id))\n}\n\n/** @internal */\nexport function maybeSerializeInitialValueTemplateItem(\n item: InitialValueTemplateItem | InitialValueTemplateItemBuilder,\n index: number,\n path: SerializePath,\n): InitialValueTemplateItem {\n return item instanceof InitialValueTemplateItemBuilder ? item.serialize({path, index}) : item\n}\n\n/** @internal */\nexport function menuItemsFromInitialValueTemplateItems(\n context: StructureContext,\n templateItems: InitialValueTemplateItem[],\n): MenuItem[] {\n const {schema, templates} = context\n return templateItems.map((item) => {\n const template = templates.find((t) => t.id === item.templateId)\n const title = item.title || template?.title || 'Create'\n\n const params: BaseIntentParams = {}\n if (template && template.schemaType) {\n params.type = template.schemaType\n }\n\n if (item.templateId) {\n params.template = item.templateId\n }\n\n const intentParams: IntentParams = item.parameters ? [params, item.parameters] : params\n const schemaType = template && schema.get(template.schemaType)\n\n const i18n = item.i18n || template?.i18n\n\n let builder = new MenuItemBuilder(context)\n .title(title)\n .icon((template && template.icon) || schemaType?.icon || AddIcon)\n .intent({type: 'create', params: intentParams})\n\n if (i18n) {\n builder = builder.i18n(i18n)\n }\n\n return builder.serialize()\n })\n}\n","import {Child, Serializable, SerializeOptions, StructureNode} from './StructureNodes'\nimport {layoutOptions} from './Layout'\nimport {MenuItem, MenuItemBuilder, maybeSerializeMenuItem} from './MenuItem'\nimport {MenuItemGroup, MenuItemGroupBuilder, maybeSerializeMenuItemGroup} from './MenuItemGroup'\nimport {IntentChecker, defaultIntentChecker} from './Intent'\nimport {SerializeError} from './SerializeError'\nimport {\n InitialValueTemplateItemBuilder,\n maybeSerializeInitialValueTemplateItem,\n} from './InitialValueTemplateItem'\nimport {validateId} from './util/validateId'\nimport {getStructureNodeId} from './util/getStructureNodeId'\nimport {PreviewLayoutKey, InitialValueTemplateItem, I18nTextRecord} from 'sanity'\n\nfunction noChildResolver() {\n return undefined\n}\n\n/** @internal */\nexport const shallowIntentChecker: IntentChecker = (intentName, params, {pane, index}): boolean => {\n return index <= 1 && defaultIntentChecker(intentName, params, {pane, index})\n}\n\n/**\n * Interface for list display options\n *\n * @public */\nexport interface ListDisplayOptions {\n /** Check if list display should show icons */\n showIcons?: boolean\n}\n\n/**\n * Interface for base generic list\n *\n * @public\n */\nexport interface BaseGenericList extends StructureNode {\n /** List layout key. */\n defaultLayout?: PreviewLayoutKey\n /** Can handle intent. See {@link IntentChecker} */\n canHandleIntent?: IntentChecker\n /** List display options. See {@link ListDisplayOptions} */\n displayOptions?: ListDisplayOptions\n /** List child. See {@link Child} */\n child: Child\n /** List initial values array. See {@link InitialValueTemplateItem} and {@link InitialValueTemplateItemBuilder} */\n initialValueTemplates?: (InitialValueTemplateItem | InitialValueTemplateItemBuilder)[]\n}\n\n/**\n * Interface for generic list\n *\n * @public\n */\n// \"POJO\"/verbatim-version - end result\nexport interface GenericList extends BaseGenericList {\n /** List type */\n type: string\n /** List menu items array. See {@link MenuItem} */\n menuItems: MenuItem[]\n /** List menu item groups array. See {@link MenuItemGroup} */\n menuItemGroups: MenuItemGroup[]\n}\n\n/**\n * Interface for buildable generic list\n *\n * @public\n */\n// Used internally in builder classes to make everything optional\nexport interface BuildableGenericList extends Partial<BaseGenericList> {\n /** List menu items array. See {@link MenuItem} and {@link MenuItemBuilder} */\n menuItems?: (MenuItem | MenuItemBuilder)[]\n /** List menu items groups array. See {@link MenuItemGroup} and {@link MenuItemGroupBuilder} */\n menuItemGroups?: (MenuItemGroup | MenuItemGroupBuilder)[]\n}\n\n/**\n * Interface for generic list input\n * Allows builders and only requires things not inferrable\n *\n * @public */\n// Input version, allows builders and only requires things not inferrable\nexport interface GenericListInput extends StructureNode {\n /** Input id */\n id: string\n /** Input title */\n title: string\n /** Input menu items groups. See {@link MenuItem} and {@link MenuItemBuilder} */\n menuItems?: (MenuItem | MenuItemBuilder)[]\n /** Input menu items groups. See {@link MenuItemGroup} and {@link MenuItemGroupBuilder} */\n menuItemGroups?: (MenuItemGroup | MenuItemGroupBuilder)[]\n /** Input initial value array. See {@link InitialValueTemplateItem} and {@link InitialValueTemplateItemBuilder} */\n initialValueTemplates?: (InitialValueTemplateItem | InitialValueTemplateItemBuilder)[]\n /** Input default layout. */\n defaultLayout?: PreviewLayoutKey\n /** If input can handle intent. See {@link IntentChecker} */\n canHandleIntent?: IntentChecker\n /** Input child of type {@link Child} */\n child?: Child\n}\n\n/**\n * Class for building generic lists\n *\n * @public\n */\nexport abstract class GenericListBuilder<TList extends BuildableGenericList, ConcreteImpl>\n implements Serializable<GenericList>\n{\n /** Check if initial value templates are set */\n protected initialValueTemplatesSpecified = false\n /** Generic list option object */\n protected spec: TList = {} as TList\n\n /** Set generic list ID\n * @param id - generic list ID\n * @returns generic list builder based on ID provided.\n */\n id(id: string): ConcreteImpl {\n return this.clone({id})\n }\n\n /** Get generic list ID\n * @returns generic list ID\n */\n getId(): TList['id'] {\n return this.spec.id\n }\n\n /** Set generic list title\n * @param title - generic list title\n * @returns generic list builder based on title and ID provided.\n */\n title(title: string): ConcreteImpl {\n return this.clone({title, id: getStructureNodeId(title, this.spec.id)})\n }\n\n /** Get generic list title\n * @returns generic list title\n */\n getTitle(): TList['title'] {\n return this.spec.title\n }\n\n /** Set the i18n key and namespace used to populate the localized title.\n * @param i18n - the key and namespaced used to populate the localized title.\n * @returns component builder based on i18n key and ns provided\n */\n i18n(i18n: I18nTextRecord<'title'>): ConcreteImpl {\n return this.clone({i18n})\n }\n\n /** Get i18n key and namespace used to populate the localized title\n * @returns the i18n key and namespace used to populate the localized title\n */\n getI18n(): TList['i18n'] {\n return this.spec.i18n\n }\n\n /** Set generic list layout\n * @param defaultLayout - generic list layout key.\n * @returns generic list builder based on layout provided.\n */\n defaultLayout(defaultLayout: PreviewLayoutKey): ConcreteImpl {\n return this.clone({defaultLayout})\n }\n\n /** Get generic list layout\n * @returns generic list layout\n */\n getDefaultLayout(): TList['defaultLayout'] {\n return this.spec.defaultLayout\n }\n\n /** Set generic list menu items\n * @param menuItems - generic list menu items. See {@link MenuItem} and {@link MenuItemBuilder}\n * @returns generic list builder based on menu items provided.\n */\n menuItems(menuItems: (MenuItem | MenuItemBuilder)[] | undefined): ConcreteImpl {\n return this.clone({menuItems})\n }\n\n /** Get generic list menu items\n * @returns generic list menu items\n */\n getMenuItems(): TList['menuItems'] {\n return this.spec.menuItems\n }\n\n /** Set generic list menu item groups\n * @param menuItemGroups - generic list menu item groups. See {@link MenuItemGroup} and {@link MenuItemGroupBuilder}\n * @returns generic list builder based on menu item groups provided.\n */\n menuItemGroups(menuItemGroups: (MenuItemGroup | MenuItemGroupBuilder)[]): ConcreteImpl {\n return this.clone({menuItemGroups})\n }\n\n /** Get generic list menu item groups\n * @returns generic list menu item groups\n */\n getMenuItemGroups(): TList['menuItemGroups'] {\n return this.spec.menuItemGroups\n }\n\n /** Set generic list child\n * @param child - generic list child. See {@link Child}\n * @returns generic list builder based on child provided (clone).\n */\n child(child: Child): ConcreteImpl {\n return this.clone({child})\n }\n\n /** Get generic list child\n * @returns generic list child\n */\n getChild(): TList['child'] {\n return this.spec.child\n }\n\n /** Set generic list can handle intent\n * @param canHandleIntent - generic list intent checker. See {@link IntentChecker}\n * @returns generic list builder based on can handle intent provided.\n */\n canHandleIntent(canHandleIntent?: IntentChecker): ConcreteImpl {\n return this.clone({canHandleIntent})\n }\n\n /** Get generic list can handle intent\n * @returns generic list can handle intent\n */\n getCanHandleIntent(): TList['canHandleIntent'] {\n return this.spec.canHandleIntent\n }\n\n /** Set generic list display options\n * @param enabled - allow / disallow for showing icons\n * @returns generic list builder based on display options (showIcons) provided.\n */\n showIcons(enabled = true): ConcreteImpl {\n return this.clone({\n displayOptions: {...(this.spec.displayOptions || {}), showIcons: enabled},\n })\n }\n\n /** Get generic list display options\n * @returns generic list display options (specifically showIcons)\n */\n getShowIcons(): boolean | undefined {\n return this.spec.displayOptions ? this.spec.displayOptions.showIcons : undefined\n }\n\n /** Set generic list initial value templates\n * @param templates - generic list initial value templates. See {@link InitialValueTemplateItemBuilder}\n * @returns generic list builder based on templates provided.\n */\n initialValueTemplates(\n templates:\n | InitialValueTemplateItem\n | InitialValueTemplateItemBuilder\n | Array<InitialValueTemplateItem | InitialValueTemplateItemBuilder>,\n ): ConcreteImpl {\n this.initialValueTemplatesSpecified = true\n return this.clone({initialValueTemplates: Array.isArray(templates) ? templates : [templates]})\n }\n\n /** Get generic list initial value templates\n * @returns generic list initial value templates\n */\n getInitialValueTemplates(): TList['initialValueTemplates'] {\n return this.spec.initialValueTemplates\n }\n\n /** Serialize generic list\n * @param options - serialization options. See {@link SerializeOptions}\n * @returns generic list object based on path provided in options. See {@link GenericList}\n */\n serialize(options: SerializeOptions = {path: []}): GenericList {\n const id = this.spec.id || ''\n const path = options.path\n\n const defaultLayout = this.spec.defaultLayout\n if (defaultLayout && !layoutOptions.includes(defaultLayout)) {\n throw new SerializeError(\n `\\`layout\\` must be one of ${layoutOptions.map((item) => `\"${item}\"`).join(', ')}`,\n path,\n id || options.index,\n this.spec.title,\n )\n }\n\n const initialValueTemplates = (this.spec.initialValueTemplates || []).map((item, i) =>\n maybeSerializeInitialValueTemplateItem(item, i, path),\n )\n\n return {\n id: validateId(id, options.path, id || options.index),\n title: this.spec.title,\n i18n: this.spec.i18n,\n type: 'genericList',\n defaultLayout,\n child: this.spec.child || noChildResolver,\n canHandleIntent: this.spec.canHandleIntent || shallowIntentChecker,\n displayOptions: this.spec.displayOptions,\n initialValueTemplates,\n menuItems: (this.spec.menuItems || []).map((item, i) =>\n maybeSerializeMenuItem(item, i, path),\n ),\n menuItemGroups: (this.spec.menuItemGroups || []).map((item, i) =>\n maybeSerializeMenuItemGroup(item, i, path),\n ),\n }\n }\n\n /** Clone generic list builder (allows for options overriding)\n * @param _withSpec - generic list options.\n * @returns generic list builder.\n */\n abstract clone(_withSpec?: object): ConcreteImpl\n}\n","import {SchemaType, SortOrderingItem} from '@sanity/types'\nimport {AddIcon} from '@sanity/icons'\nimport {generateHelpUrl} from '@sanity/generate-help-url'\nimport {resolveTypeForDocument} from './util/resolveTypeForDocument'\nimport {SerializeError, HELP_URL} from './SerializeError'\nimport {SerializeOptions, Child} from './StructureNodes'\nimport {ChildResolver, ChildResolverOptions, ItemChild} from './ChildResolver'\nimport {\n GenericListBuilder,\n BuildableGenericList,\n GenericList,\n GenericListInput,\n} from './GenericList'\nimport {DocumentBuilder} from './Document'\nimport {StructureContext} from './types'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS, InitialValueTemplateItem} from 'sanity'\n\nconst validateFilter = (spec: PartialDocumentList, options: SerializeOptions) => {\n const filter = spec.options?.filter.trim() || ''\n\n if (['*', '{'].includes(filter[0])) {\n throw new SerializeError(\n `\\`filter\\` cannot start with \\`${filter[0]}\\` - looks like you are providing a query, not a filter`,\n options.path,\n spec.id,\n spec.title,\n ).withHelpUrl(HELP_URL.QUERY_PROVIDED_FOR_FILTER)\n }\n\n return filter\n}\n\nconst createDocumentChildResolverForItem =\n (context: StructureContext): ChildResolver =>\n (itemId: string, options: ChildResolverOptions): ItemChild | Promise<ItemChild> | undefined => {\n const parentItem = options.parent as DocumentList\n const template = options.params?.template\n ? context.templates.find((tpl) => tpl.id === options.params.template)\n : undefined\n const type = template\n ? template.schemaType\n : parentItem.schemaTypeName || resolveTypeForDocument(context.getClient, itemId)\n\n return Promise.resolve(type).then((schemaType) =>\n schemaType\n ? context.resolveDocumentNode({schemaType, documentId: itemId})\n : new DocumentBuilder(context).id('editor').documentId(itemId).schemaType(''),\n )\n }\n\n/**\n * Partial document list\n *\n * @public\n */\nexport interface PartialDocumentList extends BuildableGenericList {\n /** Document list options. See {@link DocumentListOptions} */\n options?: DocumentListOptions\n /** Schema type name */\n schemaTypeName?: string\n}\n\n/**\n * Interface for document list input\n *\n * @public\n */\nexport interface DocumentListInput extends GenericListInput {\n /** Document list options. See {@link DocumentListOptions} */\n options: DocumentListOptions\n}\n\n/**\n * Interface for document list\n *\n * @public\n */\nexport interface DocumentList extends GenericList {\n type: 'documentList'\n /** Document list options. See {@link DocumentListOptions} */\n options: DocumentListOptions\n /** Document list child. See {@link Child} */\n child: Child\n /** Document schema type name */\n schemaTypeName?: string\n}\n\n/**\n * Interface for document List options\n *\n * @public\n */\nexport interface DocumentListOptions {\n /** Document list filter */\n filter: string\n /** Document list parameters */\n params?: Record<string, unknown>\n /** Document list API version */\n apiVersion?: string\n /** Document list API default ordering array. */\n defaultOrdering?: SortOrderingItem[]\n}\n\n/**\n * Class for building document list\n *\n * @public\n */\nexport class DocumentListBuilder extends GenericListBuilder<\n PartialDocumentList,\n DocumentListBuilder\n> {\n /** Document list options. See {@link PartialDocumentList} */\n protected spec: PartialDocumentList\n\n constructor(\n /**\n * Structure context. See {@link StructureContext}\n */\n protected _context: StructureContext,\n spec?: DocumentListInput,\n ) {\n super()\n this.spec = spec || {}\n this.initialValueTemplatesSpecified = Boolean(spec?.initialValueTemplates)\n }\n\n /** Set API version\n * @param apiVersion - API version\n * @returns document list builder based on the options and API version provided. See {@link DocumentListBuilder}\n */\n apiVersion(apiVersion: string): DocumentListBuilder {\n return this.clone({options: {...(this.spec.options || {filter: ''}), apiVersion}})\n }\n\n /** Get API version\n * @returns API version\n */\n getApiVersion(): string | undefined {\n return this.spec.options?.apiVersion\n }\n\n /** Set Document list filter\n * @param filter - filter\n * @returns document list builder based on the options and filter provided. See {@link DocumentListBuilder}\n */\n filter(filter: string): DocumentListBuilder {\n return this.clone({options: {...(this.spec.options || {}), filter}})\n }\n\n /** Get Document list filter\n * @returns filter\n */\n getFilter(): string | undefined {\n return this.spec.options?.filter\n }\n\n /** Set Document list schema type name\n * @param type - schema type name.\n * @returns document list builder based on the schema type name provided. See {@link DocumentListBuilder}\n */\n schemaType(type: SchemaType | string): DocumentListBuilder {\n const schemaTypeName = typeof type === 'string' ? type : type.name\n return this.clone({schemaTypeName})\n }\n\n /** Get Document list schema type name\n * @returns schema type name\n */\n getSchemaType(): string | undefined {\n return this.spec.schemaTypeName\n }\n\n /** Set Document list options' parameters\n * @param params - parameters\n * @returns document list builder based on the options provided. See {@link DocumentListBuilder}\n */\n params(params: Record<string, unknown>): DocumentListBuilder {\n return this.clone({\n options: {...(this.spec.options || {filter: ''}), params},\n })\n }\n\n /** Get Document list options' parameters\n * @returns options\n */\n getParams(): Record<string, unknown> | undefined {\n return this.spec.options?.params\n }\n\n /** Set Document list default ordering\n * @param ordering - default sort ordering array. See {@link SortOrderingItem}\n * @returns document list builder based on ordering provided. See {@link DocumentListBuilder}\n */\n defaultOrdering(ordering: SortOrderingItem[]): DocumentListBuilder {\n if (!Array.isArray(ordering)) {\n throw new Error('`defaultOrdering` must be an array of order clauses')\n }\n\n return this.clone({\n options: {...(this.spec.options || {filter: ''}), defaultOrdering: ordering},\n })\n }\n\n /** Get Document list default ordering\n * @returns default ordering. See {@link SortOrderingItem}\n */\n getDefaultOrdering(): SortOrderingItem[] | undefined {\n return this.spec.options?.defaultOrdering\n }\n\n /** Serialize Document list\n * @param options - serialization options. See {@link SerializeOptions}\n * @returns document list object based on path provided in options. See {@link DocumentList}\n */\n serialize(options: SerializeOptions = {path: []}): DocumentList {\n if (typeof this.spec.id !== 'string' || !this.spec.id) {\n throw new SerializeError(\n '`id` is required for document lists',\n options.path,\n options.index,\n this.spec.title,\n ).withHelpUrl(HELP_URL.ID_REQUIRED)\n }\n\n if (!this.spec.options || !this.spec.options.filter) {\n throw new SerializeError(\n '`filter` is required for document lists',\n options.path,\n this.spec.id,\n this.spec.title,\n ).withHelpUrl(HELP_URL.FILTER_REQUIRED)\n }\n\n const hasSimpleFilter = this.spec.options?.filter === '_type == $type'\n if (!hasSimpleFilter && this.spec.options.filter && !this.spec.options.apiVersion) {\n console.warn(\n `No apiVersion specified for document type list with custom filter: \\`${this.spec.options.filter}\\`. This will be required in the future. See %s for more info.`,\n generateHelpUrl(HELP_URL.API_VERSION_REQUIRED_FOR_CUSTOM_FILTER),\n )\n }\n return {\n ...super.serialize(options),\n type: 'documentList',\n schemaTypeName: this.spec.schemaTypeName,\n child: this.spec.child || createDocumentChildResolverForItem(this._context),\n options: {\n ...this.spec.options,\n // @todo: make specifying .apiVersion required when using custom (non-simple) filters in v4\n apiVersion: this.spec.options.apiVersion || DEFAULT_STUDIO_CLIENT_OPTIONS.apiVersion,\n filter: validateFilter(this.spec, options),\n },\n }\n }\n\n /** Clone Document list builder (allows for options overriding)\n * @param withSpec - override document list spec. See {@link PartialDocumentList}\n * @returns document list builder. See {@link DocumentListBuilder}\n */\n clone(withSpec?: PartialDocumentList): DocumentListBuilder {\n const builder = new DocumentListBuilder(this._context)\n builder.spec = {...this.spec, ...(withSpec || {})}\n\n if (!this.initialValueTemplatesSpecified) {\n builder.spec.initialValueTemplates = inferInitialValueTemplates(this._context, builder.spec)\n }\n\n if (!builder.spec.schemaTypeName) {\n builder.spec.schemaTypeName = inferTypeName(builder.spec)\n }\n\n return builder\n }\n\n /** Get Document list spec\n * @returns document list spec. See {@link PartialDocumentList}\n */\n getSpec(): PartialDocumentList {\n return this.spec\n }\n}\n\nfunction inferInitialValueTemplates(\n context: StructureContext,\n spec: PartialDocumentList,\n): InitialValueTemplateItem[] | undefined {\n const {document} = context\n const {schemaTypeName, options} = spec\n const {filter, params} = options || {filter: '', params: {}}\n const typeNames = schemaTypeName\n ? [schemaTypeName]\n : Array.from(new Set(getTypeNamesFromFilter(filter, params)))\n\n if (typeNames.length === 0) {\n return undefined\n }\n\n return typeNames\n .flatMap((schemaType) =>\n document.resolveNewDocumentOptions({\n type: 'structure',\n schemaType,\n }),\n )\n .map((option) => ({...option, icon: AddIcon}))\n}\n\nfunction inferTypeName(spec: PartialDocumentList): string | undefined {\n const {options} = spec\n const {filter, params} = options || {filter: '', params: {}}\n const typeNames = getTypeNamesFromFilter(filter, params)\n return typeNames.length === 1 ? typeNames[0] : undefined\n}\n\n/** @internal */\nexport function getTypeNamesFromFilter(\n filter: string,\n params: Record<string, unknown> = {},\n): string[] {\n let typeNames = getTypeNamesFromEqualityFilter(filter, params)\n\n if (typeNames.length === 0) {\n typeNames = getTypeNamesFromInTypesFilter(filter, params)\n }\n\n return typeNames\n}\n\n// From _type == \"movie\" || _type == $otherType\nfunction getTypeNamesFromEqualityFilter(\n filter: string,\n params: Record<string, unknown> = {},\n): string[] {\n const pattern =\n /\\b_type\\s*==\\s*(['\"].*?['\"]|\\$.*?(?:\\s|$))|\\B(['\"].*?['\"]|\\$.*?(?:\\s|$))\\s*==\\s*_type/g\n const matches: string[] = []\n let match\n while ((match = pattern.exec(filter)) !== null) {\n matches.push(match[1] || match[2])\n }\n\n return matches\n .map((candidate) => {\n const typeName = candidate[0] === '$' ? params[candidate.slice(1)] : candidate\n const normalized = ((typeName as string) || '').trim().replace(/^[\"']|[\"']$/g, '')\n return normalized\n })\n .filter(Boolean)\n}\n\n// From _type in [\"dog\", \"cat\", $otherSpecies]\nfunction getTypeNamesFromInTypesFilter(\n filter: string,\n params: Record<string, unknown> = {},\n): string[] {\n const pattern = /\\b_type\\s+in\\s+\\[(.*?)\\]/\n const matches = filter.match(pattern)\n if (!matches) {\n return []\n }\n\n return matches[1]\n .split(/,\\s*/)\n .map((match) => match.trim().replace(/^[\"']+|[\"']+$/g, ''))\n .map((item) => (item[0] === '$' ? params[item.slice(1)] : item))\n .filter(Boolean) as string[]\n}\n","import {find} from 'lodash'\nimport {SerializePath, SerializeOptions, Divider} from './StructureNodes'\nimport {ChildResolverOptions, ChildResolver} from './ChildResolver'\nimport {SerializeError, HELP_URL} from './SerializeError'\nimport {ListItem, ListItemBuilder} from './ListItem'\nimport {IntentChecker} from './Intent'\nimport {isDocumentListItem} from './DocumentListItem'\nimport {\n GenericListBuilder,\n BuildableGenericList,\n GenericList,\n GenericListInput,\n shallowIntentChecker,\n} from './GenericList'\nimport {StructureContext} from './types'\nimport {isRecord} from 'sanity'\n\nconst getArgType = (thing: ListItem) => {\n if (thing instanceof ListBuilder) {\n return 'ListBuilder'\n }\n\n if (isPromise<ListItem>(thing)) {\n return 'Promise'\n }\n\n return Array.isArray(thing) ? 'array' : typeof thing\n}\n\nconst isListItem = (item: ListItem | Divider): item is ListItem => {\n return item.type === 'listItem'\n}\n\nconst defaultCanHandleIntent: IntentChecker = (intentName: string, params, context) => {\n const pane = context.pane as List\n const items = pane.items || []\n return (\n items\n .filter(isDocumentListItem)\n .some((item) => item.schemaType.name === params.type && item._id === params.id) ||\n shallowIntentChecker(intentName, params, context)\n )\n}\n\nconst resolveChildForItem: ChildResolver = (itemId: string, options: ChildResolverOptions) => {\n const parentItem = options.parent as List\n const items = parentItem.items.filter(isListItem)\n const target = (items.find((item) => item.id === itemId) || {child: undefined}).child\n\n if (!target || typeof target !== 'function') {\n return target\n }\n\n return typeof target === 'function' ? target(itemId, options) : target\n}\n\nfunction maybeSerializeListItem(\n item: ListItem | ListItemBuilder | Divider,\n index: number,\n path: SerializePath,\n): ListItem | Divider {\n if (item instanceof ListItemBuilder) {\n return item.serialize({path, index})\n }\n\n const listItem = item as ListItem\n if (listItem && listItem.type === 'divider') {\n return item as Divider\n }\n\n if (!listItem || listItem.type !== 'listItem') {\n const gotWhat = (listItem && listItem.type) || getArgType(listItem)\n const helpText = gotWhat === 'array' ? ' - did you forget to spread (...moreItems)?' : ''\n throw new SerializeError(\n `List items must be of type \"listItem\", got \"${gotWhat}\"${helpText}`,\n path,\n index,\n ).withHelpUrl(HELP_URL.INVALID_LIST_ITEM)\n }\n\n return item\n}\n\nfunction isPromise<T>(thing: unknown): thing is PromiseLike<T> {\n return isRecord(thing) && typeof thing.then === 'function'\n}\n\n/**\n * Interface for List\n *\n * @public\n */\nexport interface List extends GenericList {\n type: 'list'\n /** List items. See {@link ListItem} and {@link Divider} */\n items: (ListItem | Divider)[]\n}\n\n/**\n * Interface for list input\n *\n * @public\n */\nexport interface ListInput extends GenericListInput {\n /** List input items array. See {@link ListItem}, {@link ListItemBuilder} and {@link Divider} */\n items?: (ListItem | ListItemBuilder | Divider)[]\n}\n\n/**\n * Interface for buildable list\n *\n * @public\n */\nexport interface BuildableList extends BuildableGenericList {\n /** List items. See {@link ListItem}, {@link ListItemBuilder} and {@link Divider} */\n items?: (ListItem | ListItemBuilder | Divider)[]\n}\n\n/**\n * A `ListBuilder` is used to build a list of items in the structure tool.\n *\n * @public */\nexport class ListBuilder extends GenericListBuilder<BuildableList, ListBuilder> {\n /** buildable list option object. See {@link BuildableList} */\n protected spec: BuildableList\n\n constructor(\n /**\n * Structure context. See {@link StructureContext}\n */\n protected _context: StructureContext,\n spec?: ListInput,\n ) {\n super()\n this.spec = spec ? spec : {}\n this.initialValueTemplatesSpecified = Boolean(spec && spec.initialValueTemplates)\n }\n\n /**\n * Set list builder based on items provided\n * @param items - list items. See {@link ListItemBuilder}, {@link ListItem} and {@link Divider}\n * @returns list builder based on items provided. See {@link ListBuilder}\n */\n items(items: (ListItemBuilder | ListItem | Divider)[]): ListBuilder {\n return this.clone({items})\n }\n\n /** Get list builder items\n * @returns list items. See {@link BuildableList}\n */\n getItems(): BuildableList['items'] {\n return this.spec.items\n }\n\n /** Serialize list builder\n * @param options - serialization options. See {@link SerializeOptions}\n * @returns list based on path in options. See {@link List}\n */\n serialize(options: SerializeOptions = {path: []}): List {\n const id = this.spec.id\n if (typeof id !== 'string' || !id) {\n throw new SerializeError(\n '`id` is required for lists',\n options.path,\n options.index,\n ).withHelpUrl(HELP_URL.ID_REQUIRED)\n }\n\n const items = typeof this.spec.items === 'undefined' ? [] : this.spec.items\n if (!Array.isArray(items)) {\n throw new SerializeError(\n '`items` must be an array of items',\n options.path,\n options.index,\n ).withHelpUrl(HELP_URL.LIST_ITEMS_MUST_BE_ARRAY)\n }\n\n const path = (options.path || []).concat(id)\n const serializedItems = items.map((item, index) => maybeSerializeListItem(item, index, path))\n const dupes = serializedItems.filter((val, i) => find(serializedItems, {id: val.id}, i + 1))\n\n if (dupes.length > 0) {\n const dupeIds = dupes.map((item) => item.id).slice(0, 5)\n const dupeDesc = dupes.length > 5 ? `${dupeIds.join(', ')}...` : dupeIds.join(', ')\n throw new SerializeError(\n `List items with same ID found (${dupeDesc})`,\n options.path,\n options.index,\n ).withHelpUrl(HELP_URL.LIST_ITEM_IDS_MUST_BE_UNIQUE)\n }\n\n return {\n ...super.serialize(options),\n type: 'list',\n canHandleIntent: this.spec.canHandleIntent || defaultCanHandleIntent,\n child: this.spec.child || resolveChildForItem,\n items: serializedItems,\n }\n }\n\n /**\n * Clone list builder and return new list builder based on context and spec provided\n * @param withSpec - list options. See {@link BuildableList}\n * @returns new list builder based on context and spec provided. See {@link ListBuilder}\n */\n clone(withSpec?: BuildableList): ListBuilder {\n const builder = new ListBuilder(this._context)\n builder.spec = {...this.spec, ...(withSpec || {})}\n return builder\n }\n}\n","import {SchemaType} from '@sanity/types'\nimport {Observable} from 'rxjs'\nimport {SerializeOptions, Serializable, Collection, CollectionBuilder} from './StructureNodes'\nimport {ChildResolver, ItemChild} from './ChildResolver'\nimport {DocumentListBuilder} from './DocumentList'\nimport {SerializeError, HELP_URL} from './SerializeError'\nimport {ListBuilder} from './List'\nimport {DocumentBuilder} from './Document'\nimport {ComponentBuilder} from './Component'\nimport {validateId} from './util/validateId'\nimport {StructureContext} from './types'\nimport {getStructureNodeId} from './util/getStructureNodeId'\nimport {I18nTextRecord} from 'sanity'\n\n/**\n * Unserialized list item child.\n * See {@link Collection}, {@link CollectionBuilder}, {@link ChildResolver} and {@link ItemChild}\n *\n * @public\n */\nexport type UnserializedListItemChild =\n | Collection\n | CollectionBuilder\n | ChildResolver\n | Observable<ItemChild>\n\n/**\n * Child of List Item\n * See {@link Collection}, {@link ChildResolver}, {@link ItemChild}\n * @public\n */\nexport type ListItemChild = Collection | ChildResolver | Observable<ItemChild> | undefined\n\n/**\n * Interface for serialize list item options\n *\n * @public\n */\nexport interface ListItemSerializeOptions extends SerializeOptions {\n /** Check if list item title is optional */\n titleIsOptional?: boolean\n}\n\n/**\n * Interface for ist item display options\n *\n * @public */\nexport interface ListItemDisplayOptions {\n /** Check if list item display should show icon */\n showIcon?: boolean\n}\n\n/**\n * interface for list item input\n *\n * @public */\nexport interface ListItemInput {\n /** List item id */\n id: string\n /** List item title */\n title?: string\n /** List item icon */\n icon?: React.ComponentType | React.ReactNode\n /** List item child. See {@link ListItemChild} */\n child?: ListItemChild\n /** List item display options. See {@link ListItemDisplayOptions} */\n displayOptions?: ListItemDisplayOptions\n /** List item schema type. See {@link SchemaType} */\n schemaType?: SchemaType | string\n}\n\n/**\n * Interface for List Item\n *\n * @public */\nexport interface ListItem {\n /** List item id */\n id: string\n /** List item type */\n type: string\n /**\n * The i18n key and namespace used to populate the localized title. This is\n * the recommend way to set the title if you are localizing your studio.\n */\n i18n?: I18nTextRecord<'title'>\n /** List item title. Note that the `i18n` key and namespace will take precedence. */\n title?: string\n /** List item icon */\n icon?: React.ComponentType | React.ReactNode\n /** List item child. See {@link ListItemChild} */\n child?: ListItemChild\n /** List item display options. See {@link ListItemDisplayOptions} */\n displayOptions?: ListItemDisplayOptions\n /** List item schema type. See {@link SchemaType} */\n schemaType?: SchemaType\n}\n\n/**\n * Interface for unserialized list items.\n *\n * @public\n */\nexport interface UnserializedListItem {\n /** List item ID */\n id: string\n /** List item title */\n title: string\n /**\n * The i18n key and namespace used to populate the localized title. This is\n * the recommend way to set the title if you are localizing your studio.\n */\n i18n?: I18nTextRecord<'title'>\n /** List item icon */\n icon?: React.ComponentType | React.ReactNode\n /** List item child. See {@link UnserializedListItemChild} */\n child?: UnserializedListItemChild\n /** List item display options. See {@link ListItemDisplayOptions} */\n displayOptions?: ListItemDisplayOptions\n /** List item schema. See {@link SchemaType} */\n schemaType?: SchemaType | string\n}\n\n/**\n * Partial list item. See {@link UnserializedListItem}\n *\n * @public */\nexport type PartialListItem = Partial<UnserializedListItem>\n\n/**\n * Class for building list items\n *\n * @public */\nexport class ListItemBuilder implements Serializable<ListItem> {\n /** List item option object. See {@link PartialListItem} */\n protected spec: PartialListItem\n\n constructor(\n /**\n * Structure context. See {@link StructureContext}\n */\n protected _context: StructureContext,\n spec?: ListItemInput,\n ) {\n this.spec = spec ? spec : {}\n }\n\n /**\n * Set list item ID\n * @returns list item builder based on ID provided. See {@link ListItemBuilder}\n */\n id(id: string): ListItemBuilder {\n return this.clone({id})\n }\n\n /**\n * Get list item ID\n * @returns list item ID. See {@link PartialListItem}\n */\n getId(): PartialListItem['id'] {\n return this.spec.id\n }\n\n /**\n * Set list item title\n * @returns list item builder based on title provided. See {@link ListItemBuilder}\n */\n title(title: string): ListItemBuilder {\n return this.clone({title, id: getStructureNodeId(title, this.spec.id)})\n }\n\n /**\n * Get list item title\n * @returns list item title. See {@link PartialListItem}\n */\n getTitle(): PartialListItem['title'] {\n return this.spec.title\n }\n\n /** Set the i18n key and namespace used to populate the localized title.\n * @param i18n - the key and namespaced used to populate the localized title.\n * @returns component builder based on i18n key and ns provided\n */\n i18n(i18n: I18nTextRecord<'title'>): ListItemBuilder {\n return this.clone({i18n})\n }\n\n /** Get i18n key and namespace used to populate the localized title\n * @returns the i18n key and namespace used to populate the localized title\n */\n getI18n(): I18nTextRecord<'title'> | undefined {\n return this.spec.i18n\n }\n\n /**\n * Set list item icon\n * @returns list item builder based on icon provided. See {@link ListItemBuilder}\n */\n icon(icon: React.ComponentType | React.ReactNode): ListItemBuilder {\n return this.clone({icon})\n }\n\n /**\n * Set if list item should show icon\n * @returns list item builder based on showIcon provided. See {@link ListItemBuilder}\n */\n showIcon(enabled = true): ListItemBuilder {\n return this.clone({\n displayOptions: {...(this.spec.displayOptions || {}), showIcon: enabled},\n })\n }\n\n /**\n * Check if list item should show icon\n * @returns true if it should show the icon, false if not, undefined if not set\n */\n getShowIcon(): boolean | undefined {\n return this.spec.displayOptions ? this.spec.displayOptions.showIcon : undefined\n }\n\n /**\n *Get list item icon\n * @returns list item icon. See {@link PartialListItem}\n */\n getIcon(): PartialListItem['icon'] {\n return this.spec.icon\n }\n\n /**\n * Set list item child\n * @param child - list item child. See {@link UnserializedListItemChild}\n * @returns list item builder based on child provided. See {@link ListItemBuilder}\n */\n child(child: UnserializedListItemChild): ListItemBuilder {\n return this.clone({child})\n }\n\n /**\n * Get list item child\n * @returns list item child. See {@link PartialListItem}\n */\n getChild(): PartialListItem['child'] {\n return this.spec.child\n }\n\n /**\n * Set list item schema type\n * @param schemaType - list item schema type. See {@link SchemaType}\n * @returns list item builder based on schema type provided. See {@link ListItemBuilder}\n */\n schemaType(schemaType: SchemaType | string): ListItemBuilder {\n return this.clone({schemaType})\n }\n\n /**\n * Get list item schema type\n * @returns list item schema type. See {@link PartialListItem}\n */\n getSchemaType(): PartialListItem['schemaType'] {\n const schemaType = this.spec.schemaType\n\n if (typeof schemaType === 'string') {\n return this._context.schema.get(schemaType)\n }\n\n return this.spec.schemaType\n }\n\n /** Serialize list item builder\n * @param options - serialization options. See {@link ListItemSerializeOptions}\n * @returns list item node based on path provided in options. See {@link ListItem}\n */\n serialize(options: ListItemSerializeOptions = {path: []}): ListItem {\n const {id, title, child} = this.spec\n if (typeof id !== 'string' || !id) {\n throw new SerializeError(\n '`id` is required for list items',\n options.path,\n options.index,\n ).withHelpUrl(HELP_URL.ID_REQUIRED)\n }\n\n if (!options.titleIsOptional && (typeof title !== 'string' || !title)) {\n throw new SerializeError('`title` is required for list items', options.path, id).withHelpUrl(\n HELP_URL.TITLE_REQUIRED,\n )\n }\n\n let schemaType = this.spec.schemaType\n if (typeof schemaType === 'string') {\n const type = this._context.schema.get(schemaType)\n if (!type) {\n throw new SerializeError(\n `Could not find type \"${schemaType}\" in schema`,\n options.path,\n id,\n ).withHelpUrl(HELP_URL.SCHEMA_TYPE_NOT_FOUND)\n }\n\n schemaType = type\n }\n\n const serializeOptions = {path: options.path.concat(id), hint: 'child'}\n let listChild =\n child instanceof ComponentBuilder ||\n child instanceof DocumentListBuilder ||\n child instanceof DocumentBuilder ||\n child instanceof ListBuilder\n ? child.serialize(serializeOptions)\n : child\n\n // In the case of a function, create a bound version that will pass the correct serialize\n // context, so we may lazily resolve it at some point in the future without losing context\n if (typeof listChild === 'function') {\n const originalChild = listChild\n listChild = (itemId, childOptions) => {\n return originalChild(itemId, {...childOptions, serializeOptions})\n }\n }\n\n return {\n ...this.spec,\n id: validateId(id, options.path, options.index),\n schemaType,\n child: listChild,\n title,\n type: 'listItem',\n }\n }\n\n /** Clone list item builder\n * @param withSpec - partial list item options. See {@link PartialListItem}\n * @returns list item builder based on context and spec provided. See {@link ListItemBuilder}\n */\n clone(withSpec?: PartialListItem): ListItemBuilder {\n const builder = new ListItemBuilder(this._context)\n builder.spec = {...this.spec, ...(withSpec || {})}\n return builder\n }\n}\n","import {SchemaType} from '@sanity/types'\nimport {SerializeOptions} from './StructureNodes'\nimport {ListItemBuilder, ListItem, UnserializedListItem, ListItemInput} from './ListItem'\nimport {SerializeError, HELP_URL} from './SerializeError'\nimport {DocumentBuilder} from './Document'\nimport {StructureContext} from './types'\nimport {isRecord} from 'sanity'\n\n/**\n * Interface for document list item input\n *\n * @public\n */\nexport interface DocumentListItemInput extends ListItemInput {\n /** Document list item input schema type. See {@link SchemaType} */\n schemaType: SchemaType | string\n}\n\n/**\n * Interface for document list item\n *\n * @public\n */\nexport interface DocumentListItem extends ListItem {\n /** Document schema type. See {@link SchemaType} */\n schemaType: SchemaType\n /** Document ID */\n _id: string\n}\n\n/**\n * Partial document list item\n *\n * @public\n */\nexport type PartialDocumentListItem = Partial<UnserializedListItem>\n\nconst createDefaultChildResolver =\n (context: StructureContext, spec: PartialDocumentListItem) => (documentId: string) => {\n const schemaType =\n spec.schemaType &&\n (typeof spec.schemaType === 'string' ? spec.schemaType : spec.schemaType.name)\n\n return schemaType\n ? context.resolveDocumentNode({schemaType, documentId})\n : new DocumentBuilder(context).id('documentEditor').documentId(documentId)\n }\n\n/**\n * Class for building a document list item\n *\n * @public\n */\nexport class DocumentListItemBuilder extends ListItemBuilder {\n /** Document list options. See {@link PartialDocumentListItem} */\n protected spec: PartialDocumentListItem\n\n constructor(\n /**\n * Structure context. See {@link StructureContext}\n */\n protected _context: StructureContext,\n spec?: DocumentListItemInput,\n ) {\n super(_context, spec)\n this.spec = spec ? spec : {}\n }\n\n /**\n * Serialize document list item\n * @param options - serialization options. See {@link SerializeOptions}\n * @returns document list item object based on path provided in options. See {@link DocumentListItem}\n */\n serialize(options: SerializeOptions = {path: []}): DocumentListItem {\n const spec = super.serialize({...options, titleIsOptional: true})\n\n if (!spec.schemaType) {\n throw new SerializeError(\n '`schemaType` is required for document list items',\n options.path,\n options.index,\n ).withHelpUrl(HELP_URL.SCHEMA_TYPE_REQUIRED)\n }\n\n const child = spec.child || createDefaultChildResolver(this._context, spec)\n return {...spec, child, schemaType: spec.schemaType, _id: spec.id}\n }\n\n /** Clone Document list item builder (allows for options overriding)\n * @param withSpec - Document list item builder options. See {@link PartialDocumentListItem}\n * @returns document list item builder. See {@link DocumentListItemBuilder}\n */\n clone(withSpec?: PartialDocumentListItem): DocumentListItemBuilder {\n const builder = new DocumentListItemBuilder(this._context)\n builder.spec = {...this.spec, ...(withSpec || {})}\n return builder\n }\n}\n\n/** @internal */\nexport function isDocumentListItem(item: unknown): item is DocumentListItem {\n return isRecord(item) && typeof item.schemaType !== 'undefined' && typeof item._id === 'string'\n}\n","import {SchemaType} from '@sanity/types'\nimport {DocumentListBuilder, DocumentListInput, PartialDocumentList} from './DocumentList'\nimport {Child} from './StructureNodes'\nimport {DEFAULT_INTENT_HANDLER} from './Intent'\nimport {GenericListInput} from './GenericList'\nimport {StructureContext} from './types'\n\n/**\n * Interface for document type list input\n *\n * @public\n */\nexport interface DocumentTypeListInput extends Partial<GenericListInput> {\n /** Document type list input schema type. See {@link SchemaType} */\n schemaType: SchemaType | string\n}\n\n/**\n * Class for building a document type list\n *\n * @public\n */\nexport class DocumentTypeListBuilder extends DocumentListBuilder {\n /** Document list options. See {@link PartialDocumentList} */\n protected spec: PartialDocumentList\n\n constructor(\n /**\n * Structure context. See {@link StructureContext}\n */\n protected _context: StructureContext,\n spec?: DocumentListInput,\n ) {\n super(_context)\n this.spec = spec ? spec : {}\n }\n\n /**\n * Set Document type list child\n * @param child - Child component. See {@link Child}\n * @returns document type list builder based on child component provided without default intent handler. See {@link DocumentTypeListBuilder}\n */\n child(child: Child): DocumentTypeListBuilder {\n return this.cloneWithoutDefaultIntentHandler({child})\n }\n\n /** Clone Document type list builder (allows for options overriding)\n * @param withSpec - Document type list builder options. See {@link PartialDocumentList}\n * @returns document type list builder. See {@link DocumentTypeListBuilder}\n */\n clone(withSpec?: PartialDocumentList): DocumentTypeListBuilder {\n const parent = super.clone(withSpec)\n const builder = new DocumentTypeListBuilder(this._context)\n builder.spec = {...this.spec, ...parent.getSpec(), ...(withSpec || {})}\n return builder\n }\n\n /** Clone Document type list builder (allows for options overriding) and remove default intent handler\n * @param withSpec - Document type list builder options. See {@link PartialDocumentList}\n * @returns document type list builder without default intent handler. See {@link DocumentTypeListBuilder}\n */\n cloneWithoutDefaultIntentHandler(withSpec?: PartialDocumentList): DocumentTypeListBuilder {\n const parent = super.clone(withSpec)\n const builder = new DocumentTypeListBuilder(this._context)\n const canHandleIntent = this.spec.canHandleIntent\n const shouldOverride = canHandleIntent && canHandleIntent.identity === DEFAULT_INTENT_HANDLER\n const override = shouldOverride ? {canHandleIntent: undefined} : {}\n builder.spec = {\n ...parent.getSpec(),\n ...this.spec,\n ...(withSpec || {}),\n ...override,\n }\n return builder\n }\n}\n","import {SchemaType} from '@sanity/types'\nimport {startCase} from 'lodash'\nimport {StackCompactIcon, StackIcon} from '@sanity/icons'\nimport {structureLocaleNamespace} from '../i18n'\nimport {MenuItemBuilder, getOrderingMenuItemsForSchemaType} from './MenuItem'\nimport {DEFAULT_SELECTED_ORDERING_OPTION} from './Sort'\nimport {DocumentListBuilder} from './DocumentList'\nimport {ListItemBuilder, ListItem} from './ListItem'\nimport {DocumentTypeListBuilder, DocumentTypeListInput} from './DocumentTypeList'\nimport {defaultIntentChecker} from './Intent'\nimport {List} from './List'\nimport {Collection} from './StructureNodes'\nimport {StructureContext} from './types'\n\nfunction shouldShowIcon(schemaType: SchemaType): boolean {\n const preview = schemaType.preview\n return Boolean(preview && (preview.prepare || (preview.select && preview.select.media)))\n}\n\nconst BUNDLED_DOC_TYPES = ['sanity.imageAsset', 'sanity.fileAsset']\n\nfunction isBundledDocType(typeName: string) {\n return BUNDLED_DOC_TYPES.includes(typeName)\n}\n\nfunction isDocumentType(schemaType: SchemaType) {\n return schemaType.type?.name === 'document'\n}\n\nfunction isList(collection: Collection): collection is List {\n return collection.type === 'list'\n}\n\nexport function getDocumentTypes({schema}: StructureContext): string[] {\n return schema\n .getTypeNames()\n .filter((n) => {\n const schemaType = schema.get(n)\n return schemaType && isDocumentType(schemaType)\n })\n .filter((n) => !isBundledDocType(n))\n}\n\nexport function getDocumentTypeListItems(context: StructureContext): ListItemBuilder[] {\n const types = getDocumentTypes(context)\n return types.map((typeName) => getDocumentTypeListItem(context, typeName))\n}\n\nexport function getDocumentTypeListItem(\n context: StructureContext,\n typeName: string,\n): ListItemBuilder {\n const {schema} = context\n\n const type = schema.get(typeName)\n if (!type) {\n throw new Error(`Schema type with name \"${typeName}\" not found`)\n }\n\n const title = type.title || startCase(typeName)\n\n return new ListItemBuilder(context)\n .id(typeName)\n .title(title)\n .schemaType(type)\n .child((id, childContext) => {\n const parent = childContext.parent as Collection\n const parentItem = isList(parent)\n ? (parent.items.find((item) => item.id === id) as ListItem)\n : null\n\n let list = getDocumentTypeList(context, typeName)\n if (parentItem && parentItem.title) {\n list = list.title(parentItem.title)\n }\n\n return list\n })\n}\n\nexport function getDocumentTypeList(\n context: StructureContext,\n typeNameOrSpec: string | DocumentTypeListInput,\n): DocumentListBuilder {\n const {schema, resolveDocumentNode} = context\n\n const schemaType = typeof typeNameOrSpec === 'string' ? typeNameOrSpec : typeNameOrSpec.schemaType\n const typeName = typeof schemaType === 'string' ? schemaType : schemaType.name\n const spec: DocumentTypeListInput =\n typeof typeNameOrSpec === 'string' ? {schemaType} : typeNameOrSpec\n\n const type = schema.get(typeName)\n if (!type) {\n throw new Error(`Schema type with name \"${typeName}\" not found`)\n }\n\n const title = type.title || startCase(typeName)\n const showIcons = shouldShowIcon(type)\n\n return new DocumentTypeListBuilder(context)\n .id(spec.id || typeName)\n .title(spec.title || title)\n .filter('_type == $type')\n .params({type: typeName})\n .schemaType(type)\n .showIcons(showIcons)\n .defaultOrdering(DEFAULT_SELECTED_ORDERING_OPTION.by)\n .menuItemGroups(\n spec.menuItemGroups || [\n {\n id: 'sorting',\n title: 'Sort',\n i18n: {title: {key: 'menu-item-groups.actions-group', ns: structureLocaleNamespace}},\n },\n {\n id: 'layout',\n title: 'Layout',\n i18n: {title: {key: 'menu-item-groups.layout-group', ns: structureLocaleNamespace}},\n },\n {\n id: 'actions',\n title: 'Actions',\n i18n: {title: {key: 'menu-item-groups.sorting-group', ns: structureLocaleNamespace}},\n },\n ],\n )\n .child(\n spec.child ||\n ((documentId: string) => resolveDocumentNode({schemaType: typeName, documentId})),\n )\n .canHandleIntent(spec.canHandleIntent || defaultIntentChecker)\n .menuItems(\n spec.menuItems || [\n // Create new (from action button) will be added in serialization step of GenericList\n\n // Sort by <Y>\n ...getOrderingMenuItemsForSchemaType(context, type),\n\n // Display as <Z>\n new MenuItemBuilder(context)\n .group('layout')\n .i18n({title: {key: 'menu-items.layout.compact-view', ns: structureLocaleNamespace}})\n .title('Compact view') // fallback title\n .icon(StackCompactIcon)\n .action('setLayout')\n .params({layout: 'default'}),\n\n new MenuItemBuilder(context)\n .group('layout')\n .i18n({title: {key: 'menu-items.layout.detailed-view', ns: structureLocaleNamespace}})\n .title('Detailed view') // fallback title\n .icon(StackIcon)\n .action('setLayout')\n .params({layout: 'detail'}),\n\n // Create new (from menu) will be added in serialization step of GenericList\n ],\n )\n}\n","import {uniqueId} from 'lodash'\nimport type {SchemaType} from '@sanity/types'\nimport {isValidElementType} from 'react-is'\nimport {structureLocaleNamespace} from '../i18n'\nimport {ListBuilder} from './List'\nimport {\n getDocumentTypeListItems,\n getDocumentTypeListItem,\n getDocumentTypeList,\n} from './documentTypeListItems'\nimport {MenuItemBuilder, getOrderingMenuItemsForSchemaType, getOrderingMenuItem} from './MenuItem'\nimport {ListItemBuilder} from './ListItem'\nimport {MenuItemGroupBuilder} from './MenuItemGroup'\nimport {DocumentListBuilder} from './DocumentList'\nimport type {Divider} from './StructureNodes'\nimport {DocumentBuilder, documentFromEditor, documentFromEditorWithInitialValue} from './Document'\nimport {ComponentInput, ComponentBuilder} from './Component'\nimport {DocumentListItemBuilder} from './DocumentListItem'\nimport * as views from './views'\nimport {\n InitialValueTemplateItemBuilder,\n defaultInitialValueTemplateItems,\n menuItemsFromInitialValueTemplateItems,\n} from './InitialValueTemplateItem'\nimport type {\n StructureBuilder,\n UserComponent,\n StructureContext,\n DefaultDocumentNodeResolver,\n} from './types'\nimport {Source, getConfigContextFromSource, getPublishedId} from 'sanity'\n\n/** @internal */\nexport interface StructureBuilderOptions {\n source: Source\n defaultDocumentNode?: DefaultDocumentNodeResolver\n}\n\nfunction hasIcon(schemaType?: SchemaType | string): boolean {\n if (!schemaType || typeof schemaType === 'string') {\n return false\n }\n\n return Boolean(schemaType.icon)\n}\n\nfunction getDefaultStructure(context: StructureContext): ListBuilder {\n const items = getDocumentTypeListItems(context)\n return new ListBuilder(context)\n .id('__root__')\n .title('Content')\n .i18n({title: {key: 'default-definition.content-title', ns: structureLocaleNamespace}})\n .items(items)\n .showIcons(items.some((item) => hasIcon(item.getSchemaType())))\n}\n\n/** @internal */\nexport function createStructureBuilder({\n defaultDocumentNode,\n source,\n}: StructureBuilderOptions): StructureBuilder {\n const configContext = getConfigContextFromSource(source)\n const context: StructureContext = {\n ...source,\n getStructureBuilder: () => structureBuilder,\n resolveDocumentNode: (options) => {\n let builder =\n defaultDocumentNode?.(structureBuilder, {...options, ...configContext}) ||\n new DocumentBuilder(context)\n\n if (!builder.getId()) {\n builder = builder.id('documentEditor')\n }\n\n if (options.documentId) {\n builder = builder.documentId(getPublishedId(options.documentId))\n }\n\n return builder.schemaType(options.schemaType)\n },\n }\n\n const structureBuilder: StructureBuilder = {\n defaults: () => getDefaultStructure(context),\n documentTypeList: (...args) => getDocumentTypeList(context, ...args),\n documentTypeListItem: (...args) => getDocumentTypeListItem(context, ...args),\n documentTypeListItems: (...args) => getDocumentTypeListItems(context, ...args),\n document: (...args) => new DocumentBuilder(context, ...args),\n documentWithInitialValueTemplate: (...args) =>\n documentFromEditorWithInitialValue(context, ...args),\n defaultDocument: context.resolveDocumentNode,\n\n list: (...args) => new ListBuilder(context, ...args),\n listItem: (...args) => new ListItemBuilder(context, ...args),\n\n menuItem: (...args) => new MenuItemBuilder(context, ...args),\n menuItemGroup: (...args) => new MenuItemGroupBuilder(context, ...args),\n menuItemsFromInitialValueTemplateItems: (...args) =>\n menuItemsFromInitialValueTemplateItems(context, ...args),\n\n documentList: (...args) => new DocumentListBuilder(context, ...args),\n documentListItem: (...args) => new DocumentListItemBuilder(context, ...args),\n\n orderingMenuItem: (...args) => getOrderingMenuItem(context, ...args),\n orderingMenuItemsForType: (...args) => getOrderingMenuItemsForSchemaType(context, ...args),\n\n editor: (...args) => documentFromEditor(context, ...args),\n\n defaultInitialValueTemplateItems: (...args) =>\n defaultInitialValueTemplateItems(context, ...args),\n\n initialValueTemplateItem: (\n templateId: string,\n parameters?: Record<string, unknown>,\n ): InitialValueTemplateItemBuilder =>\n new InitialValueTemplateItemBuilder(context, {\n id: templateId,\n parameters,\n templateId,\n }),\n\n component: (spec?: ComponentInput | UserComponent) => {\n return isValidElementType(spec)\n ? new ComponentBuilder().component(spec as UserComponent)\n : new ComponentBuilder(spec as ComponentInput)\n },\n\n divider: (): Divider => ({id: uniqueId('__divider__'), type: 'divider'}),\n\n view: views,\n context,\n }\n\n return structureBuilder\n}\n","import React, {useMemo, useState} from 'react'\nimport {StructureToolContext} from './StructureToolContext'\nimport {createStructureBuilder, type DefaultDocumentNodeResolver} from './structureBuilder'\nimport type {StructureToolContextValue, StructureResolver, UnresolvedPaneNode} from './types'\nimport {useConfigContextFromSource, useDocumentStore, useSource} from 'sanity'\n\n/** @internal */\nexport interface StructureToolProviderProps {\n structure?: StructureResolver\n defaultDocumentNode?: DefaultDocumentNodeResolver\n children: React.ReactNode\n}\n\n/** @internal */\nexport function StructureToolProvider({\n defaultDocumentNode,\n structure: resolveStructure,\n children,\n}: StructureToolProviderProps): React.ReactElement {\n const [layoutCollapsed, setLayoutCollapsed] = useState(false)\n const source = useSource()\n const configContext = useConfigContextFromSource(source)\n const documentStore = useDocumentStore()\n\n const S = useMemo(() => {\n return createStructureBuilder({\n defaultDocumentNode,\n source,\n })\n }, [defaultDocumentNode, source])\n\n const rootPaneNode = useMemo(() => {\n // TODO: unify types and remove cast\n if (resolveStructure)\n return resolveStructure(S, {\n ...configContext,\n documentStore,\n }) as UnresolvedPaneNode\n return S.defaults() as UnresolvedPaneNode\n }, [S, resolveStructure, configContext, documentStore])\n\n const features: StructureToolContextValue['features'] = useMemo(\n () => ({\n backButton: layoutCollapsed,\n resizablePanes: !layoutCollapsed,\n reviewChanges: !layoutCollapsed,\n splitPanes: !layoutCollapsed,\n splitViews: !layoutCollapsed,\n }),\n [layoutCollapsed],\n )\n\n const structureTool: StructureToolContextValue = useMemo(() => {\n return {\n features,\n layoutCollapsed,\n setLayoutCollapsed,\n rootPaneNode,\n structureContext: S.context,\n }\n }, [features, layoutCollapsed, rootPaneNode, S.context])\n\n return (\n <StructureToolContext.Provider value={structureTool}>{children}</StructureToolContext.Provider>\n )\n}\n","import React from 'react'\nimport {Box, CardTone} from '@sanity/ui'\nimport {Pane, PaneContent, PaneHeader} from '../../components/pane'\n\n/**\n * @internal\n */\nexport function ErrorPane(props: {\n children?: React.ReactNode\n currentMinWidth?: number\n flex?: number\n minWidth?: number\n paneKey: string\n title?: React.ReactNode\n tone?: CardTone\n}) {\n const {\n children,\n currentMinWidth,\n flex,\n minWidth,\n paneKey,\n title = 'Error',\n tone = 'critical',\n } = props\n\n return (\n <Pane\n currentMinWidth={currentMinWidth}\n flex={flex}\n id={paneKey}\n minWidth={minWidth}\n tone={tone}\n >\n <PaneHeader title={title} />\n <PaneContent overflow=\"auto\">\n <Box paddingX={4} paddingY={5}>\n {children}\n </Box>\n </PaneContent>\n </Pane>\n )\n}\n","import {type Observable, of, merge} from 'rxjs'\nimport {mapTo, delay} from 'rxjs/operators'\nimport {isDev} from 'sanity'\n\n/**\n * @internal\n */\nexport type WaitMessage = {messageKey: string} | {message: string}\n\n/**\n * @internal\n */\nexport function getWaitMessages(path: string[]): Observable<WaitMessage> {\n const thresholds: (WaitMessage & {ms: number})[] = [\n {ms: 300, messageKey: 'panes.resolving.default-message'},\n {ms: 5000, messageKey: 'panes.resolving.slow-resolve-message'},\n ]\n\n if (isDev) {\n const message = [\n 'Check console for errors?',\n 'Is your observable/promise resolving?',\n path.length > 0 ? `Structure path: ${path.join(' ➝ ')}` : '',\n ]\n\n thresholds.push({\n ms: 10000,\n message: message.join('\\n'),\n })\n }\n\n const src = of(null)\n\n return merge(\n ...thresholds.map((threshold) =>\n src.pipe(\n mapTo(\n 'messageKey' in threshold\n ? {messageKey: threshold.messageKey}\n : {message: threshold.message},\n ),\n delay(threshold.ms),\n ),\n ),\n )\n}\n","import {type CardTone, Flex, _raf2} from '@sanity/ui'\nimport React, {memo, useMemo, useState, useEffect} from 'react'\nimport {Observable} from 'rxjs'\nimport styled from 'styled-components'\nimport {structureLocaleNamespace} from '../../i18n'\nimport {Delay} from '../../components/Delay'\nimport {Pane, PaneContent} from '../../components/pane'\nimport {WaitMessage, getWaitMessages} from './getWaitMessages'\nimport {LoadingBlock, useTranslation} from 'sanity'\n\ninterface LoadingPaneProps {\n delay?: number\n flex?: number\n message?: string | ((p: string[]) => string | Observable<WaitMessage>)\n minWidth?: number\n paneKey: string\n path?: string\n selected?: boolean\n title?: string\n tone?: CardTone\n}\n\nconst DELAY = false\nconst DEFAULT_MESSAGE_KEY = 'panes.resolving.default-message'\n\nconst Content = styled(Flex)`\n opacity: 0;\n transition: opacity 200ms;\n\n &[data-mounted] {\n opacity: 1;\n }\n`\n\n/**\n * @internal\n */\nexport const LoadingPane = memo((props: LoadingPaneProps) => {\n const {\n delay = 300,\n flex,\n message: messageProp = getWaitMessages,\n minWidth,\n paneKey,\n path,\n selected,\n title,\n tone,\n } = props\n\n const {t} = useTranslation(structureLocaleNamespace)\n\n const resolvedMessage = useMemo(() => {\n if (typeof messageProp === 'function') {\n return messageProp(path ? path.split(';') : [])\n }\n\n return messageProp\n }, [messageProp, path])\n\n const [currentMessage, setCurrentMessage] = useState<string | null>(() => {\n if (typeof resolvedMessage === 'string') return resolvedMessage\n return DEFAULT_MESSAGE_KEY\n })\n\n useEffect(() => {\n if (typeof resolvedMessage !== 'object') return undefined\n if (typeof resolvedMessage.subscribe === 'function') return undefined\n\n const sub = resolvedMessage.subscribe((message) => {\n setCurrentMessage('messageKey' in message ? t(message.messageKey) : message.message)\n })\n\n return () => sub.unsubscribe()\n }, [resolvedMessage, t])\n\n const [contentElement, setContentElement] = useState<HTMLDivElement | null>(null)\n const [mounted, setMounted] = useState(false)\n\n useEffect(() => {\n if (!contentElement) return undefined\n return _raf2(() => setMounted(true))\n }, [contentElement])\n\n const content = (\n <Content\n align=\"center\"\n data-mounted={mounted ? '' : undefined}\n direction=\"column\"\n height=\"fill\"\n justify=\"center\"\n ref={setContentElement}\n >\n <LoadingBlock showText title={title || currentMessage} />\n </Content>\n )\n\n return (\n <Pane flex={flex} id={paneKey} minWidth={minWidth} selected={selected} tone={tone}>\n <PaneContent>{DELAY ? <Delay ms={delay}>{content}</Delay> : content}</PaneContent>\n </Pane>\n )\n})\n\nLoadingPane.displayName = 'LoadingPane'\n","import {useEffect, useState} from 'react'\nimport {SanityDocument} from '@sanity/types'\nimport {useAsObservable} from 'react-rx'\nimport {debounceTime, switchMap, catchError} from 'rxjs/operators'\nimport {from, of} from 'rxjs'\nimport {useSource, isRecord} from 'sanity'\n\nconst isSanityDocument = (value: unknown): value is SanityDocument =>\n isRecord(value) && typeof value._id === 'string' && typeof value._type === 'string'\n\nexport function usePreviewUrl(value: Partial<SanityDocument> | undefined): string | undefined {\n const [previewUrl, setPreviewUrl] = useState<string | undefined>(undefined)\n const [error, setError] = useState<unknown>(null)\n const {resolveProductionUrl} = useSource().document\n // @todo refactor out of useAsObservable, and instead use `of() + useMemoObservable` like we did for `useLoadableFromCreateLoadable`\n const value$ = useAsObservable(value)\n\n if (error) throw error\n\n useEffect(() => {\n value$\n .pipe(\n // this so that the preview URL isn't fetched on every keystroke\n debounceTime(500),\n switchMap((document) =>\n isSanityDocument(document) ? from(resolveProductionUrl({document})) : of(undefined),\n ),\n catchError((e) => {\n const message = isRecord(e) && typeof e.message === 'string' ? e.message : 'Unknown error'\n throw new Error(`An error was thrown while trying to get your preview url: ${message}`)\n }),\n )\n .subscribe({\n next: setPreviewUrl,\n error: setError,\n })\n }, [resolveProductionUrl, value$])\n\n return previewUrl\n}\n","import {Template} from 'sanity'\n\ninterface InitialValueOptions {\n documentType: string\n panePayload?: unknown\n templateName?: string\n templateParams?: Record<string, unknown>\n urlTemplate?: string\n}\n\n/**\n * @internal\n */\nexport function getInitialValueTemplateOpts(\n templates: Template[],\n opts: InitialValueOptions,\n): {templateName: string; templateParams: Record<string, unknown>} {\n const payload = opts.panePayload || {}\n const structureNodeTemplate = opts.templateName\n\n if (opts.urlTemplate && structureNodeTemplate && structureNodeTemplate !== opts.urlTemplate) {\n // eslint-disable-next-line no-console\n console.warn(\n `Conflicting templates: URL says \"${opts.urlTemplate}\", structure node says \"${structureNodeTemplate}\". Using \"${structureNodeTemplate}\".`,\n )\n }\n\n const template = structureNodeTemplate || opts.urlTemplate\n const typeTemplates = templates.filter((t) => t.schemaType === opts.documentType)\n\n const templateParams = {\n ...opts.templateParams,\n ...(typeof payload === 'object' ? payload || {} : {}),\n }\n\n let templateName = template\n\n // If we have not specified a specific template, and we only have a single\n // template available for a schema type, use it\n if (!template && typeTemplates.length === 1) {\n templateName = typeTemplates[0].id\n }\n\n return {templateName: templateName!, templateParams}\n}\n","import {memo, useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport type {ObjectSchemaType, Path, SanityDocument, SanityDocumentLike} from '@sanity/types'\nimport {omit} from 'lodash'\nimport {useToast} from '@sanity/ui'\nimport {fromString as pathFromString, resolveKeyedPath} from '@sanity/util/paths'\nimport {isActionEnabled} from '@sanity/schema/_internal'\nimport {usePaneRouter} from '../../components'\nimport type {PaneMenuItem} from '../../types'\nimport {useStructureTool} from '../../useStructureTool'\nimport {structureLocaleNamespace} from '../../i18n'\nimport {DocumentPaneContext, type DocumentPaneContextValue} from './DocumentPaneContext'\nimport type {DocumentPaneProviderProps} from './types'\nimport {usePreviewUrl} from './usePreviewUrl'\nimport {getInitialValueTemplateOpts} from './getInitialValueTemplateOpts'\nimport {\n DEFAULT_MENU_ITEM_GROUPS,\n EMPTY_PARAMS,\n HISTORY_INSPECTOR_NAME,\n INSPECT_ACTION_PREFIX,\n} from './constants'\nimport {\n type DocumentFieldAction,\n type DocumentInspector,\n type DocumentPresence,\n type PatchEvent,\n type StateTree,\n EMPTY_ARRAY,\n getDraftId,\n getExpandOperations,\n getPublishedId,\n setAtPath,\n toMutationPatches,\n useConnectionState,\n useDocumentOperation,\n useDocumentValuePermissions,\n useEditState,\n useFormState,\n useInitialValue,\n usePresenceStore,\n useSchema,\n useSource,\n useTemplates,\n useTimelineSelector,\n useTimelineStore,\n useTranslation,\n useUnique,\n useValidationStatus,\n} from 'sanity'\n\n/**\n * @internal\n */\n// eslint-disable-next-line complexity, max-statements\nexport const DocumentPaneProvider = memo((props: DocumentPaneProviderProps) => {\n const {children, index, pane, paneKey, onFocusPath} = props\n const schema = useSchema()\n const templates = useTemplates()\n const {\n actions: documentActions,\n badges: documentBadges,\n unstable_fieldActions: fieldActionsResolver,\n unstable_languageFilter: languageFilterResolver,\n inspectors: inspectorsResolver,\n } = useSource().document\n const presenceStore = usePresenceStore()\n const paneRouter = usePaneRouter()\n const setPaneParams = paneRouter.setParams\n const {features} = useStructureTool()\n const {push: pushToast} = useToast()\n const {\n options,\n menuItemGroups = DEFAULT_MENU_ITEM_GROUPS,\n title = null,\n views: viewsProp = [],\n } = pane\n const paneOptions = useUnique(options)\n const documentIdRaw = paneOptions.id\n const documentId = getPublishedId(documentIdRaw)\n const documentType = options.type\n const params = useUnique(paneRouter.params) || EMPTY_PARAMS\n const panePayload = useUnique(paneRouter.payload)\n const {templateName, templateParams} = useMemo(\n () =>\n getInitialValueTemplateOpts(templates, {\n documentType,\n templateName: paneOptions.template,\n templateParams: paneOptions.templateParameters,\n panePayload,\n urlTemplate: params.template,\n }),\n [documentType, paneOptions, params, panePayload, templates],\n )\n const initialValueRaw = useInitialValue({\n documentId,\n documentType,\n templateName,\n templateParams,\n })\n const initialValue = useUnique(initialValueRaw)\n const {patch} = useDocumentOperation(documentId, documentType)\n const editState = useEditState(documentId, documentType)\n const {validation: validationRaw} = useValidationStatus(documentId, documentType)\n const connectionState = useConnectionState(documentId, documentType)\n const schemaType = schema.get(documentType) as ObjectSchemaType | undefined\n const value: SanityDocumentLike = editState?.draft || editState?.published || initialValue.value\n const [isDeleting, setIsDeleting] = useState(false)\n\n // Resolve document actions\n const actions = useMemo(\n () => documentActions({schemaType: documentType, documentId}),\n [documentActions, documentId, documentType],\n )\n\n // Resolve document badges\n const badges = useMemo(\n () => documentBadges({schemaType: documentType, documentId}),\n [documentBadges, documentId, documentType],\n )\n\n // Resolve document language filter\n const languageFilter = useMemo(\n () => languageFilterResolver({schemaType: documentType, documentId}),\n [documentId, documentType, languageFilterResolver],\n )\n\n const validation = useUnique(validationRaw)\n const views = useUnique(viewsProp)\n\n const [focusPath, setFocusPath] = useState<Path>(() =>\n params.path ? pathFromString(params.path) : EMPTY_ARRAY,\n )\n const focusPathRef = useRef(focusPath)\n const activeViewId = params.view || (views[0] && views[0].id) || null\n const [timelineMode, setTimelineMode] = useState<'since' | 'rev' | 'closed'>('closed')\n\n const [timelineError, setTimelineError] = useState<Error | null>(null)\n /**\n * Create an intermediate store which handles document Timeline + TimelineController\n * creation, and also fetches pre-requsite document snapshots. Compatible with `useSyncExternalStore`\n * and made available to child components via DocumentPaneContext.\n */\n const timelineStore = useTimelineStore({\n documentId,\n documentType,\n onError: setTimelineError,\n rev: params.rev,\n since: params.since,\n })\n\n // Subscribe to external timeline state changes\n const onOlderRevision = useTimelineSelector(timelineStore, (state) => state.onOlderRevision)\n const revTime = useTimelineSelector(timelineStore, (state) => state.revTime)\n const sinceAttributes = useTimelineSelector(timelineStore, (state) => state.sinceAttributes)\n const timelineDisplayed = useTimelineSelector(timelineStore, (state) => state.timelineDisplayed)\n const timelineReady = useTimelineSelector(timelineStore, (state) => state.timelineReady)\n const isPristine = useTimelineSelector(timelineStore, (state) => state.isPristine)\n\n /**\n * Determine if the current document is deleted.\n *\n * When the timeline is available – we check for the absence of an editable document pair\n * (both draft + published versions) as well as a non 'pristine' timeline (i.e. a timeline that consists\n * of at least one chunk).\n *\n * In the _very rare_ case where the timeline cannot be loaded – we skip this check and always assume\n * the document is NOT deleted. Since we can't accurately determine document deleted status without history,\n * skipping this check means that in these cases, users will at least be able to create new documents\n * without them being incorrectly marked as deleted.\n */\n const isDeleted = useMemo(() => {\n if (!timelineReady) {\n return false\n }\n return Boolean(!editState?.draft && !editState?.published) && !isPristine\n }, [editState?.draft, editState?.published, isPristine, timelineReady])\n\n // TODO: this may cause a lot of churn. May be a good idea to prevent these\n // requests unless the menu is open somehow\n const previewUrl = usePreviewUrl(value)\n\n const [presence, setPresence] = useState<DocumentPresence[]>([])\n useEffect(() => {\n const subscription = presenceStore.documentPresence(documentId).subscribe((nextPresence) => {\n setPresence(nextPresence)\n })\n return () => {\n subscription.unsubscribe()\n }\n }, [documentId, presenceStore])\n\n const inspectors: DocumentInspector[] = useMemo(\n () => inspectorsResolver({documentId, documentType}),\n [documentId, documentType, inspectorsResolver],\n )\n\n const [inspectorName, setInspectorName] = useState<string | null>(() => params.inspect || null)\n\n // Handle inspector name changes from URL\n const inspectParamRef = useRef<string | undefined>(params.inspect)\n useEffect(() => {\n if (inspectParamRef.current !== params.inspect) {\n inspectParamRef.current = params.inspect\n setInspectorName(params.inspect || null)\n }\n }, [params.inspect])\n\n const currentInspector = inspectors?.find((i) => i.name === inspectorName)\n const resolvedChangesInspector = inspectors.find((i) => i.name === HISTORY_INSPECTOR_NAME)\n\n const changesOpen = currentInspector?.name === HISTORY_INSPECTOR_NAME\n\n const {t} = useTranslation(structureLocaleNamespace)\n\n const inspectOpen = params.inspect === 'on'\n const compareValue: Partial<SanityDocument> | null = changesOpen\n ? sinceAttributes\n : editState?.published || null\n\n const fieldActions: DocumentFieldAction[] = useMemo(\n () => (schemaType ? fieldActionsResolver({documentId, documentType, schemaType}) : []),\n [documentId, documentType, fieldActionsResolver, schemaType],\n )\n\n /**\n * Note that in addition to connection and edit state, we also wait for a valid document timeline\n * range to be loaded. This means if we're loading an older revision, the full transaction range must\n * be loaded in full prior to the document being displayed.\n *\n * Previously, visiting studio URLs with timeline params would display the 'current' document and then\n * 'snap' in the older revision, which was disorienting and could happen mid-edit.\n *\n * In the event that the timeline cannot be loaded due to TimelineController errors or blocked requests,\n * we skip this readiness check to ensure that users aren't locked out of editing. Trying to select\n * a timeline revision in this instance will display an error localized to the popover itself.\n */\n const ready =\n connectionState === 'connected' && editState.ready && (timelineReady || !!timelineError)\n\n const displayed: Partial<SanityDocument> | undefined = useMemo(\n () => (onOlderRevision ? timelineDisplayed || {_id: value._id, _type: value._type} : value),\n [onOlderRevision, timelineDisplayed, value],\n )\n\n const setTimelineRange = useCallback(\n (newSince: string, newRev: string | null) => {\n setPaneParams({\n ...params,\n since: newSince,\n rev: newRev || undefined,\n })\n },\n [params, setPaneParams],\n )\n\n const handleFocus = useCallback(\n (nextFocusPath: Path) => {\n setFocusPath(nextFocusPath)\n\n if (focusPathRef.current !== nextFocusPath) {\n focusPathRef.current = nextFocusPath\n onFocusPath?.(nextFocusPath)\n }\n\n presenceStore.setLocation([\n {\n type: 'document',\n documentId,\n path: nextFocusPath,\n lastActiveAt: new Date().toISOString(),\n },\n ])\n },\n [documentId, onFocusPath, presenceStore, setFocusPath],\n )\n\n const handleBlur = useCallback(\n (blurredPath: Path) => {\n if (disableBlurRef.current) {\n return\n }\n\n setFocusPath(EMPTY_ARRAY)\n\n if (focusPathRef.current !== EMPTY_ARRAY) {\n focusPathRef.current = EMPTY_ARRAY\n onFocusPath?.(EMPTY_ARRAY)\n }\n\n // note: we're deliberately not syncing presence here since it would make the user avatar disappear when a\n // user clicks outside a field without focusing another one\n },\n [onFocusPath, setFocusPath],\n )\n\n const patchRef = useRef<(event: PatchEvent) => void>(() => {\n throw new Error('Nope')\n })\n\n patchRef.current = (event: PatchEvent) => {\n patch.execute(toMutationPatches(event.patches), initialValue.value)\n }\n\n const handleChange = useCallback((event: PatchEvent) => patchRef.current(event), [])\n\n const closeInspector = useCallback(\n (closeInspectorName?: string) => {\n // inspector?: DocumentInspector\n const inspector = closeInspectorName && inspectors.find((i) => i.name === closeInspectorName)\n\n if (closeInspectorName && !inspector) {\n console.warn(`No inspector named \"${closeInspectorName}\"`)\n return\n }\n\n if (!currentInspector) {\n return\n }\n\n if (inspector) {\n const result = inspector.onClose?.({params}) ?? {params}\n\n setInspectorName(null)\n inspectParamRef.current = undefined\n\n setPaneParams({...result.params, inspect: undefined})\n\n return\n }\n\n if (currentInspector) {\n const result = currentInspector.onClose?.({params}) ?? {params}\n\n setInspectorName(null)\n inspectParamRef.current = undefined\n\n setPaneParams({...result.params, inspect: undefined})\n }\n },\n [currentInspector, inspectors, params, setPaneParams],\n )\n\n const openInspector = useCallback(\n (nextInspectorName: string, paneParams?: Record<string, string>) => {\n const nextInspector = inspectors.find((i) => i.name === nextInspectorName)\n\n if (!nextInspector) {\n console.warn(`No inspector named \"${nextInspectorName}\"`)\n return\n }\n\n // if the inspector is already open, only update params\n if (currentInspector?.name === nextInspector.name) {\n setPaneParams({...params, ...paneParams, inspect: nextInspector.name})\n return\n }\n\n let currentParams = params\n\n if (currentInspector) {\n const closeResult = nextInspector.onClose?.({params: currentParams}) ?? {\n params: currentParams,\n }\n\n currentParams = closeResult.params\n }\n\n const result = nextInspector.onOpen?.({params: currentParams}) ?? {params: currentParams}\n\n setInspectorName(nextInspector.name)\n inspectParamRef.current = nextInspector.name\n\n setPaneParams({...result.params, ...paneParams, inspect: nextInspector.name})\n },\n [currentInspector, inspectors, params, setPaneParams],\n )\n\n const handleHistoryClose = useCallback(() => {\n if (resolvedChangesInspector) {\n closeInspector(resolvedChangesInspector.name)\n }\n }, [closeInspector, resolvedChangesInspector])\n\n const handleHistoryOpen = useCallback(() => {\n if (!features.reviewChanges) {\n return\n }\n\n if (resolvedChangesInspector) {\n openInspector(resolvedChangesInspector.name)\n }\n }, [features.reviewChanges, openInspector, resolvedChangesInspector])\n\n const handlePaneClose = useCallback(() => paneRouter.closeCurrent(), [paneRouter])\n\n const handlePaneSplit = useCallback(() => paneRouter.duplicateCurrent(), [paneRouter])\n\n const toggleLegacyInspect = useCallback(\n (toggle = !inspectOpen) => {\n if (toggle) {\n setPaneParams({...params, inspect: 'on'})\n } else {\n setPaneParams(omit(params, 'inspect'))\n }\n },\n [inspectOpen, params, setPaneParams],\n )\n\n const handleMenuAction = useCallback(\n (item: PaneMenuItem) => {\n if (item.action === 'production-preview' && previewUrl) {\n window.open(previewUrl)\n return true\n }\n\n if (item.action === 'inspect') {\n toggleLegacyInspect(true)\n return true\n }\n\n if (item.action === 'reviewChanges') {\n handleHistoryOpen()\n return true\n }\n\n if (typeof item.action === 'string' && item.action.startsWith(INSPECT_ACTION_PREFIX)) {\n const nextInspectorName = item.action.slice(INSPECT_ACTION_PREFIX.length)\n const nextInspector = inspectors.find((i) => i.name === nextInspectorName)\n\n if (nextInspector) {\n if (nextInspector.name === inspectorName) {\n closeInspector(nextInspector.name)\n } else {\n openInspector(nextInspector.name)\n }\n return true\n }\n }\n\n return false\n },\n [\n closeInspector,\n handleHistoryOpen,\n inspectorName,\n inspectors,\n openInspector,\n previewUrl,\n toggleLegacyInspect,\n ],\n )\n\n const handleLegacyInspectClose = useCallback(\n () => toggleLegacyInspect(false),\n [toggleLegacyInspect],\n )\n\n const [openPath, onSetOpenPath] = useState<Path>([])\n const [fieldGroupState, onSetFieldGroupState] = useState<StateTree<string>>()\n const [collapsedPaths, onSetCollapsedPath] = useState<StateTree<boolean>>()\n const [collapsedFieldSets, onSetCollapsedFieldSets] = useState<StateTree<boolean>>()\n\n const handleOnSetCollapsedPath = useCallback((path: Path, collapsed: boolean) => {\n onSetCollapsedPath((prevState) => setAtPath(prevState, path, collapsed))\n }, [])\n\n const handleOnSetCollapsedFieldSet = useCallback((path: Path, collapsed: boolean) => {\n onSetCollapsedFieldSets((prevState) => setAtPath(prevState, path, collapsed))\n }, [])\n\n const handleSetActiveFieldGroup = useCallback(\n (path: Path, groupName: string) =>\n onSetFieldGroupState((prevState) => setAtPath(prevState, path, groupName)),\n [],\n )\n\n const requiredPermission = value._createdAt ? 'update' : 'create'\n const liveEdit = Boolean(schemaType?.liveEdit)\n const docId = value._id ? value._id : 'dummy-id'\n const docPermissionsInput = useMemo(() => {\n return {\n ...value,\n _id: liveEdit ? getPublishedId(docId) : getDraftId(docId),\n }\n }, [liveEdit, value, docId])\n\n const [permissions, isPermissionsLoading] = useDocumentValuePermissions({\n document: docPermissionsInput,\n permission: requiredPermission,\n })\n\n const isNonExistent = !value?._id\n\n const readOnly = useMemo(() => {\n const hasNoPermission = !isPermissionsLoading && !permissions?.granted\n const updateActionDisabled = !isActionEnabled(schemaType!, 'update')\n const createActionDisabled = isNonExistent && !isActionEnabled(schemaType!, 'create')\n const reconnecting = connectionState === 'reconnecting'\n const isLocked = editState.transactionSyncLock?.enabled\n\n return (\n !ready ||\n revTime !== null ||\n hasNoPermission ||\n updateActionDisabled ||\n createActionDisabled ||\n reconnecting ||\n isLocked ||\n isDeleting ||\n isDeleted\n )\n }, [\n connectionState,\n editState.transactionSyncLock,\n isNonExistent,\n isDeleted,\n isDeleting,\n isPermissionsLoading,\n permissions?.granted,\n ready,\n revTime,\n schemaType,\n ])\n\n const formState = useFormState(schemaType!, {\n value: displayed,\n readOnly,\n comparisonValue: compareValue,\n focusPath,\n openPath,\n collapsedPaths,\n presence,\n validation,\n collapsedFieldSets,\n fieldGroupState,\n changesOpen,\n })\n\n const formStateRef = useRef(formState)\n formStateRef.current = formState\n\n const setOpenPath = useCallback(\n (path: Path) => {\n const ops = getExpandOperations(formStateRef.current!, path)\n ops.forEach((op) => {\n if (op.type === 'expandPath') {\n onSetCollapsedPath((prevState) => setAtPath(prevState, op.path, false))\n }\n if (op.type === 'expandFieldSet') {\n onSetCollapsedFieldSets((prevState) => setAtPath(prevState, op.path, false))\n }\n if (op.type === 'setSelectedGroup') {\n onSetFieldGroupState((prevState) => setAtPath(prevState, op.path, op.groupName))\n }\n })\n onSetOpenPath(path)\n },\n [formStateRef],\n )\n\n const documentPane: DocumentPaneContextValue = useMemo(\n () => ({\n actions,\n activeViewId,\n badges,\n changesOpen,\n closeInspector,\n collapsedFieldSets,\n collapsedPaths,\n compareValue,\n connectionState,\n displayed,\n documentId,\n documentIdRaw,\n documentType,\n editState,\n fieldActions,\n focusPath,\n inspector: currentInspector || null,\n inspectors,\n onBlur: handleBlur,\n onChange: handleChange,\n onFocus: handleFocus,\n onPathOpen: setOpenPath,\n onHistoryClose: handleHistoryClose,\n onHistoryOpen: handleHistoryOpen,\n onInspectClose: handleLegacyInspectClose,\n onMenuAction: handleMenuAction,\n onPaneClose: handlePaneClose,\n onPaneSplit: handlePaneSplit,\n onSetActiveFieldGroup: handleSetActiveFieldGroup,\n onSetCollapsedPath: handleOnSetCollapsedPath,\n onSetCollapsedFieldSet: handleOnSetCollapsedFieldSet,\n openInspector,\n index,\n inspectOpen,\n validation,\n menuItemGroups: menuItemGroups || [],\n paneKey,\n previewUrl,\n ready,\n schemaType: schemaType!,\n isPermissionsLoading,\n permissions,\n setTimelineMode,\n setTimelineRange,\n setIsDeleting,\n isDeleting,\n isDeleted,\n timelineError,\n timelineMode,\n timelineStore,\n title,\n value,\n views,\n formState,\n unstable_languageFilter: languageFilter,\n }),\n [\n actions,\n activeViewId,\n badges,\n changesOpen,\n closeInspector,\n collapsedFieldSets,\n collapsedPaths,\n compareValue,\n connectionState,\n currentInspector,\n displayed,\n documentId,\n documentIdRaw,\n documentType,\n editState,\n fieldActions,\n focusPath,\n formState,\n handleBlur,\n handleChange,\n handleFocus,\n handleHistoryClose,\n handleHistoryOpen,\n handleLegacyInspectClose,\n handleMenuAction,\n handleOnSetCollapsedFieldSet,\n handleOnSetCollapsedPath,\n handlePaneClose,\n handlePaneSplit,\n handleSetActiveFieldGroup,\n index,\n inspectOpen,\n inspectors,\n isDeleted,\n isDeleting,\n isPermissionsLoading,\n languageFilter,\n menuItemGroups,\n openInspector,\n paneKey,\n permissions,\n previewUrl,\n ready,\n schemaType,\n setOpenPath,\n setTimelineRange,\n timelineError,\n timelineMode,\n timelineStore,\n title,\n validation,\n value,\n views,\n ],\n )\n\n useEffect(() => {\n if (connectionState === 'reconnecting') {\n pushToast({\n id: 'sanity/structure/reconnecting',\n status: 'warning',\n title: t('panes.document-pane-provider.reconnecting.title'),\n })\n }\n }, [connectionState, pushToast, t])\n\n const disableBlurRef = useRef(false)\n\n // Reset `focusPath` when `documentId` or `params.path` changes\n useEffect(() => {\n if (ready && params.path) {\n const {path, ...restParams} = params\n const pathFromUrl = resolveKeyedPath(formStateRef.current?.value, pathFromString(path))\n\n disableBlurRef.current = true\n\n // Reset focus path when url params path changes\n setFocusPath(pathFromUrl)\n setOpenPath(pathFromUrl)\n\n if (focusPathRef.current !== pathFromUrl) {\n focusPathRef.current = pathFromUrl\n onFocusPath?.(pathFromUrl)\n }\n\n const timeout = setTimeout(() => {\n disableBlurRef.current = false\n }, 0)\n\n // remove the `path`-param from url after we have consumed it as the initial focus path\n paneRouter.setParams(restParams)\n\n return () => clearTimeout(timeout)\n }\n\n return undefined\n }, [params, documentId, onFocusPath, setOpenPath, ready, paneRouter])\n\n return (\n <DocumentPaneContext.Provider value={documentPane}>{children}</DocumentPaneContext.Provider>\n )\n})\n\nDocumentPaneProvider.displayName = 'DocumentPaneProvider'\n","import {useToast} from '@sanity/ui'\nimport React, {memo, useEffect, useRef} from 'react'\nimport {useDocumentPane} from './useDocumentPane'\nimport {useDocumentOperationEvent, useTranslation} from 'sanity'\nimport {usePaneRouter} from '../../components'\nimport {structureLocaleNamespace} from '../../i18n'\n\nconst IGNORE_OPS = ['patch', 'commit']\n\nexport const DocumentOperationResults = memo(function DocumentOperationResults() {\n const {push: pushToast} = useToast()\n const {documentId, documentType} = useDocumentPane()\n const event: any = useDocumentOperationEvent(documentId, documentType)\n const prevEvent = useRef(event)\n const paneRouter = usePaneRouter()\n const {t} = useTranslation(structureLocaleNamespace)\n\n useEffect(() => {\n if (!event || event === prevEvent.current) return\n\n let cleanupId: number | undefined\n\n if (event.type === 'error') {\n pushToast({\n closable: true,\n duration: 30000, // 30s\n status: 'error',\n title: t('panes.document-operation-results.operation-error', {context: event.op}),\n description: (\n <details>\n <summary>{t('panes.document-operation-results.error.summary.title')}</summary>\n {event.error.message}\n </details>\n ),\n })\n }\n\n if (event.type === 'success' && !IGNORE_OPS.includes(event.op)) {\n pushToast({\n closable: true,\n status: 'success',\n title: t('panes.document-operation-results.operation-success', {context: event.op}),\n })\n }\n\n /**\n * If the document was deleted successfully, close the pane.\n */\n if (event.type === 'success' && event.op === 'delete') {\n // Wait until next tick to allow deletion toasts to appear first\n cleanupId = setTimeout(() => paneRouter.closeCurrentAndAfter(), 0) as any as number\n }\n\n prevEvent.current = event\n\n // eslint-disable-next-line consistent-return\n return () => clearTimeout(cleanupId)\n }, [event, paneRouter, pushToast, t])\n\n return null\n})\n","import {useCallback, useEffect, useMemo, useState} from 'react'\nimport {useSettingsStore} from 'sanity'\n\n/**\n * @internal\n */\nexport function useStructureToolSetting<ValueType>(\n namespace: string | null,\n key: string,\n defaultValue?: ValueType,\n): [ValueType | undefined, (_value: ValueType) => void] {\n const settingsStore = useSettingsStore()\n const [value, setValue] = useState<ValueType | undefined>(defaultValue)\n\n const structureToolSettings = useMemo(\n () => settingsStore.forNamespace('structure-tool'),\n [settingsStore],\n )\n\n const settings = useMemo(() => {\n if (namespace) {\n return structureToolSettings.forNamespace(namespace).forKey(key)\n }\n\n return structureToolSettings.forKey(key)\n }, [structureToolSettings, namespace, key])\n\n useEffect(() => {\n const sub = settings.listen(defaultValue).subscribe({\n next: setValue as any,\n })\n\n return () => sub?.unsubscribe()\n }, [defaultValue, key, namespace, settings])\n\n const set = useCallback(\n (newValue: ValueType) => {\n setValue(newValue)\n settings.set(newValue as any)\n },\n [settings],\n )\n\n return useMemo(() => [value, set], [set, value])\n}\n","export const VIEW_MODE_PARSED = {id: 'parsed', title: 'document-inspector.view-mode.parsed'}\nexport const VIEW_MODE_RAW = {id: 'raw', title: 'document-inspector.view-mode.raw-json'}\nexport const VIEW_MODES = [VIEW_MODE_PARSED, VIEW_MODE_RAW]\n","import {SanityDocumentLike} from '@sanity/types'\nimport HLRU from 'hashlru'\nimport {isRecord, isString} from 'sanity'\n\nconst lru = HLRU(1000)\n\nexport function isExpanded(keyPath: any, value: any): any {\n const cached = lru.get(keyPath)\n\n if (cached === undefined) {\n lru.set(keyPath, Array.isArray(value) || isRecord(value))\n return isExpanded(keyPath, value)\n }\n\n return cached\n}\n\nexport function toggleExpanded(event: any): void {\n const {path} = event\n const current = lru.get(path)\n\n if (current === undefined) {\n // something is wrong\n return\n }\n\n lru.set(path, !current)\n}\n\nexport function selectElement(element: HTMLElement): void {\n const sel = window.getSelection()\n\n if (sel) {\n const range = document.createRange()\n\n sel.removeAllRanges()\n range.selectNodeContents(element)\n sel.addRange(range)\n }\n}\n\nexport function select(event: any): void {\n selectElement(event.currentTarget)\n}\n\nexport function maybeSelectAll(event: any): void {\n const selectAll = event.keyCode === 65 && (event.metaKey || event.ctrlKey)\n\n if (!selectAll) {\n return\n }\n\n event.preventDefault()\n\n selectElement(event.currentTarget)\n}\n\nexport function isDocumentLike(value: unknown): value is SanityDocumentLike {\n return isRecord(value) && isString(value._id) && isString(value._type)\n}\n","import {rem, Theme} from '@sanity/ui'\nimport styled, {css} from 'styled-components'\n\nexport const JSONInspectorWrapper = styled.div(({theme}: {theme: Theme}) => {\n const {color, fonts, space} = theme.sanity\n\n return css`\n & .json-inspector,\n & .json-inspector .json-inspector__selection {\n font-family: ${fonts.code.family};\n font-size: ${fonts.code.sizes[1].fontSize}px;\n line-height: ${fonts.code.sizes[1].lineHeight}px;\n color: var(--card-code-fg-color);\n }\n\n & .json-inspector .json-inspector__leaf {\n padding-left: ${rem(space[4])};\n }\n\n & .json-inspector .json-inspector__leaf.json-inspector__leaf_root {\n padding-top: ${rem(space[3])};\n padding-left: 0;\n }\n\n & .json-inspector > .json-inspector__leaf_root > .json-inspector__line > .json-inspector__key {\n display: none;\n }\n\n & .json-inspector .json-inspector__line {\n display: block;\n position: relative;\n cursor: default;\n }\n\n & .json-inspector .json-inspector__line::after {\n content: '';\n position: absolute;\n top: 0;\n left: -200px;\n right: -50px;\n bottom: 0;\n z-index: -1;\n pointer-events: none;\n }\n\n & .json-inspector .json-inspector__line:hover::after {\n background: var(--card-code-bg-color);\n }\n\n & .json-inspector .json-inspector__leaf_composite > .json-inspector__line {\n cursor: pointer;\n }\n\n & .json-inspector .json-inspector__leaf_composite > .json-inspector__line::before {\n content: '▸ ';\n margin-left: calc(0 - ${rem(space[4])} + 3px);\n font-size: ${fonts.code.sizes[1].fontSize}px;\n line-height: ${fonts.code.sizes[1].lineHeight}px;\n }\n\n &\n .json-inspector\n .json-inspector__leaf_expanded.json-inspector__leaf_composite\n > .json-inspector__line::before {\n content: '▾ ';\n font-size: ${fonts.code.sizes[1].fontSize}px;\n line-height: ${fonts.code.sizes[1].lineHeight}px;\n }\n\n & .json-inspector .json-inspector__radio,\n & .json-inspector .json-inspector__flatpath {\n display: none;\n }\n\n & .json-inspector .json-inspector__value {\n margin-left: ${rem(space[4] / 2)};\n }\n\n &\n .json-inspector\n > .json-inspector__leaf_root\n > .json-inspector__line\n > .json-inspector__key\n + .json-inspector__value {\n margin: 0;\n }\n\n & .json-inspector .json-inspector__key {\n color: ${color.syntax.property};\n }\n\n & .json-inspector .json-inspector__value_helper,\n & .json-inspector .json-inspector__value_null {\n color: ${color.syntax.constant};\n }\n\n & .json-inspector .json-inspector__not-found {\n padding-top: ${rem(space[3])};\n }\n\n & .json-inspector .json-inspector__value_string {\n color: ${color.syntax.string};\n }\n\n & .json-inspector .json-inspector__value_boolean {\n color: ${color.syntax.boolean};\n }\n\n & .json-inspector .json-inspector__value_number {\n color: ${color.syntax.number};\n }\n\n & .json-inspector .json-inspector__show-original {\n display: inline-block;\n padding: 0 6px;\n cursor: pointer;\n }\n\n & .json-inspector .json-inspector__show-original:hover {\n color: inherit;\n }\n\n & .json-inspector .json-inspector__show-original::before {\n content: '↔';\n }\n\n & .json-inspector .json-inspector__show-original:hover::after {\n content: ' expand';\n }\n `\n})\n","import {SearchIcon} from '@sanity/icons'\nimport {TextInput} from '@sanity/ui'\nimport React, {useCallback} from 'react'\nimport {structureLocaleNamespace} from '../../../i18n'\nimport {useTranslation} from 'sanity'\n\nexport function Search(props: {onChange: (q: string) => void; query: string}) {\n const {onChange, query} = props\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => onChange(event.target.value),\n [onChange],\n )\n const {t} = useTranslation(structureLocaleNamespace)\n\n return (\n <TextInput\n icon={SearchIcon}\n onChange={handleChange}\n placeholder={t('document-inspector.search.placeholder')}\n radius={2}\n value={query || ''}\n />\n )\n}\n","import {SanityDocument} from '@sanity/types'\nimport {Card, Code, Flex, TabList, TabPanel} from '@sanity/ui'\nimport React, {useCallback} from 'react'\nimport JSONInspector from '@rexxars/react-json-inspector'\nimport {Dialog, Tab} from '../../../../ui-components'\nimport {DocTitle} from '../../../components'\nimport {useStructureToolSetting} from '../../../useStructureToolSetting'\nimport {structureLocaleNamespace} from '../../../i18n'\nimport {useDocumentPane} from '../useDocumentPane'\nimport {VIEW_MODE_PARSED, VIEW_MODE_RAW, VIEW_MODES} from './constants'\nimport {isDocumentLike, isExpanded, maybeSelectAll, select, toggleExpanded} from './helpers'\nimport {JSONInspectorWrapper} from './InspectDialog.styles'\nimport {Search} from './Search'\nimport {Translate, useTranslation} from 'sanity'\n\ninterface InspectDialogProps {\n value: Partial<SanityDocument> | null\n}\n\nexport function InspectDialog(props: InspectDialogProps) {\n const {value} = props\n const {onInspectClose, paneKey} = useDocumentPane()\n const dialogIdPrefix = `${paneKey}_inspect_`\n\n /* this creates a view mode (the default that it opens with is the parsed tab) that is saved based on the paneKey\n where the inspect dialog lives.\n This also means that when a page is loaded, the state of the tabs remains and doesn't revert to the pane tab */\n const [viewModeId, onViewModeChange] = useStructureToolSetting(\n 'structure-tool',\n `inspect-view-preferred-view-mode-${paneKey}`,\n 'parsed',\n )\n\n /* based on the view mode it shows the right tab content */\n const viewMode = VIEW_MODES.find((mode) => mode.id === viewModeId)\n\n const setParsedViewMode = useCallback(() => {\n onViewModeChange(VIEW_MODE_PARSED.id)\n }, [onViewModeChange])\n\n const setRawViewMode = useCallback(() => {\n onViewModeChange(VIEW_MODE_RAW.id)\n }, [onViewModeChange])\n\n const {t} = useTranslation(structureLocaleNamespace)\n\n return (\n <Dialog\n bodyHeight=\"fill\"\n id={`${dialogIdPrefix}dialog`}\n header={\n isDocumentLike(value) ? (\n <Translate\n t={t}\n i18nKey=\"document-inspector.dialog.title\"\n components={{\n DocumentTitle: () => (\n <em>\n <DocTitle document={value} />\n </em>\n ),\n }}\n />\n ) : (\n <em>{t('document-inspector.dialog.title-no-value')}</em>\n )\n }\n onClose={onInspectClose}\n onClickOutside={onInspectClose}\n padding={false}\n width={2}\n >\n <Flex direction=\"column\" height=\"fill\">\n <Card\n padding={3}\n paddingTop={0}\n shadow={1}\n style={{position: 'sticky', bottom: 0, zIndex: 3}}\n >\n <TabList space={1}>\n <Tab\n aria-controls={`${dialogIdPrefix}tabpanel`}\n id={`${dialogIdPrefix}tab-${VIEW_MODE_PARSED.id}`}\n label={t(VIEW_MODE_PARSED.title)}\n onClick={setParsedViewMode}\n selected={viewMode === VIEW_MODE_PARSED}\n />\n <Tab\n aria-controls={`${dialogIdPrefix}tabpanel`}\n id={`${dialogIdPrefix}tab-${VIEW_MODE_RAW.id}`}\n label={t(VIEW_MODE_RAW.title)}\n onClick={setRawViewMode}\n selected={viewMode === VIEW_MODE_RAW}\n />\n </TabList>\n </Card>\n\n <TabPanel\n aria-labelledby={`${dialogIdPrefix}tab-${viewModeId}`}\n flex={1}\n id={`${dialogIdPrefix}tabpanel`}\n overflow=\"auto\"\n padding={4}\n style={{outline: 'none'}}\n >\n {viewMode === VIEW_MODE_PARSED && (\n <JSONInspectorWrapper>\n <JSONInspector\n data={value}\n isExpanded={isExpanded}\n onClick={toggleExpanded}\n search={Search}\n />\n </JSONInspectorWrapper>\n )}\n\n {viewMode === VIEW_MODE_RAW && (\n <Code\n language=\"json\"\n tabIndex={0}\n onKeyDown={maybeSelectAll}\n onDoubleClick={select}\n onFocus={select}\n size={1}\n >\n {JSON.stringify(value, null, 2)}\n </Code>\n )}\n </TabPanel>\n </Flex>\n </Dialog>\n )\n}\n","import React from 'react'\nimport {Button, ButtonProps} from '../../../ui-components'\n\ninterface SpacerButtonProps {\n size?: ButtonProps['size']\n}\n\n/**\n * This renders a visually hidden <Button> component that is still contributes\n * to document layout.\n *\n * It's used to simplify padding in Sanity UI components that contain buttons which\n * may not always be rendered.\n *\n * TODO: let's find a more elegant solve to this layout shift problem\n *\n * @internal\n */\nexport function SpacerButton({size}: SpacerButtonProps) {\n return (\n <Button\n aria-hidden\n disabled\n size={size}\n style={{\n pointerEvents: 'none',\n visibility: 'hidden',\n width: 0,\n }}\n text=\"-\"\n />\n )\n}\n","import {ButtonTone, Card, CardTone, Flex, Text} from '@sanity/ui'\nimport React from 'react'\nimport {Button} from '../../../../../ui-components'\nimport {SpacerButton} from '../../../../components/spacerButton'\n\ninterface BannerProps {\n action?: {\n as?: React.ElementType | keyof JSX.IntrinsicElements\n icon?: React.ComponentType\n onClick?: () => void\n text: string\n tone?: ButtonTone\n }\n content: React.ReactNode\n icon?: React.ComponentType\n tone?: CardTone\n}\n\nexport function Banner(props: BannerProps) {\n const {action, content, icon: Icon, tone = 'transparent', ...rest} = props\n\n return (\n <Card borderBottom paddingX={4} paddingY={2} tone={tone} {...rest}>\n <Flex align=\"center\" gap={3}>\n {Icon && (\n <Text size={0}>\n <Icon />\n </Text>\n )}\n\n <Flex align=\"center\" flex={1} gap={2} paddingY={3}>\n {content}\n </Flex>\n\n <SpacerButton />\n\n {action && (\n <Button\n as={action?.as}\n mode=\"ghost\"\n onClick={action?.onClick}\n text={action.text}\n tone={action.tone || 'default'}\n />\n )}\n </Flex>\n </Card>\n )\n}\n","import {ReadOnlyIcon} from '@sanity/icons'\nimport {Text} from '@sanity/ui'\nimport {useCallback} from 'react'\nimport {structureLocaleNamespace} from '../../../../i18n'\nimport {useDocumentPane} from '../../useDocumentPane'\nimport {Banner} from './Banner'\nimport {useDocumentOperation, useTranslation} from 'sanity'\nimport {useRouter} from 'sanity/router'\n\ninterface DeletedDocumentBannerProps {\n revisionId?: string | null\n}\n\nexport function DeletedDocumentBanner({revisionId}: DeletedDocumentBannerProps) {\n const {documentId, documentType} = useDocumentPane()\n const {restore} = useDocumentOperation(documentId, documentType)\n const {navigateIntent} = useRouter()\n const handleRestore = useCallback(() => {\n if (revisionId) {\n restore.execute(revisionId)\n navigateIntent('edit', {id: documentId, type: documentType})\n }\n }, [documentId, documentType, navigateIntent, restore, revisionId])\n const {t} = useTranslation(structureLocaleNamespace)\n\n return (\n <Banner\n action={\n revisionId\n ? {\n onClick: handleRestore,\n text: t('banners.deleted-document-banner.restore-button.text'),\n }\n : undefined\n }\n content={\n <Text size={1} weight=\"medium\">\n {t('banners.deleted-document-banner.text')}\n </Text>\n }\n data-testid=\"deleted-document-banner\"\n icon={ReadOnlyIcon}\n />\n )\n}\n","import {Text} from '@sanity/ui'\nimport {ErrorOutlineIcon} from '@sanity/icons'\nimport {useDocumentPane} from '../../useDocumentPane'\nimport {structureLocaleNamespace} from '../../../../i18n'\nimport {Banner} from './Banner'\nimport {Translate, isDeprecatedSchemaType, useTranslation} from 'sanity'\n\nexport function DeprecatedDocumentTypeBanner() {\n const {schemaType} = useDocumentPane()\n const {t} = useTranslation(structureLocaleNamespace)\n\n if (!isDeprecatedSchemaType(schemaType)) {\n return null\n }\n\n return (\n <Banner\n content={\n <Text size={1} weight=\"medium\">\n <Translate t={t} i18nKey=\"banners.deprecated-document-type-banner.text\" />{' '}\n {schemaType.deprecated.reason}\n </Text>\n }\n data-testid=\"deprecated-document-type-banner\"\n icon={ErrorOutlineIcon}\n />\n )\n}\n","import React from 'react'\nimport {Text} from '@sanity/ui'\nimport {ReadOnlyIcon} from '@sanity/icons'\nimport {structureLocaleNamespace} from '../../../../i18n'\nimport {Banner} from './Banner'\nimport {Translate, useCurrentUser, useListFormat, useTranslation} from 'sanity'\n\ninterface PermissionCheckBannerProps {\n granted: boolean\n requiredPermission: 'update' | 'create'\n}\n\nexport function PermissionCheckBanner({granted, requiredPermission}: PermissionCheckBannerProps) {\n const currentUser = useCurrentUser()\n const listFormat = useListFormat({style: 'short'})\n const {t} = useTranslation(structureLocaleNamespace)\n\n if (granted) return null\n\n const roleTitles = (currentUser?.roles || []).map((role) => role.title)\n const roles = listFormat\n .formatToParts(roleTitles)\n .map((part) =>\n part.type === 'element' ? <code key={part.value}>{part.value}</code> : part.value,\n )\n\n return (\n <Banner\n content={\n <Text size={1} weight=\"medium\">\n <Translate\n t={t}\n i18nKey=\"banners.permission-check-banner.missing-permission\"\n components={{Roles: () => <>{roles}</>}}\n values={{count: roles.length, roles: roleTitles}}\n context={requiredPermission}\n />\n </Text>\n }\n data-testid=\"permission-check-banner\"\n icon={ReadOnlyIcon}\n />\n )\n}\n","import {Text} from '@sanity/ui'\nimport {WarningOutlineIcon, SyncIcon, CloseIcon} from '@sanity/icons'\nimport React, {memo, useCallback, useMemo} from 'react'\nimport {fromString as pathFromString, get as pathGet} from '@sanity/util/paths'\nimport {KeyedSegment, Reference} from '@sanity/types'\nimport {debounceTime, map} from 'rxjs/operators'\nimport {concat, Observable, of} from 'rxjs'\nimport {useMemoObservable} from 'react-rx'\nimport {RouterPaneGroup} from '../../../../types'\nimport {usePaneRouter} from '../../../../components'\nimport {structureLocaleNamespace} from '../../../../i18n'\nimport {Banner} from './Banner'\nimport {DocumentAvailability, useDocumentPreviewStore, getPublishedId, useTranslation} from 'sanity'\n\ninterface ParentReferenceInfo {\n loading: boolean\n result?: {\n availability: {draft: DocumentAvailability; published: DocumentAvailability}\n refValue: string | undefined\n }\n}\n\nexport const ReferenceChangedBanner = memo(() => {\n const documentPreviewStore = useDocumentPreviewStore()\n const {params, groupIndex, routerPanesState, replaceCurrent, BackLink} = usePaneRouter()\n const routerReferenceId = routerPanesState[groupIndex]?.[0].id\n const parentGroup = routerPanesState[groupIndex - 1] as RouterPaneGroup | undefined\n const parentSibling = parentGroup?.[0]\n const parentId = parentSibling?.id\n const hasHistoryOpen = Boolean(parentSibling?.params?.rev)\n const parentRefPath = useMemo(() => {\n return (params?.parentRefPath && pathFromString(params.parentRefPath)) || null\n }, [params?.parentRefPath])\n const {t} = useTranslation(structureLocaleNamespace)\n\n /**\n * Loads information regarding the reference field of the parent pane. This\n * is only applicable to child references (aka references-in-place).\n *\n * It utilizes the pane ID of the parent pane (which is a document ID) along\n * with the `parentRefPath` router param on the current pane to find the\n * current value of the reference field on the parent document.\n *\n * This is used to compare with the current pane's document ID. If the IDs\n * don't match then this banner should reveal itself\n */\n const referenceInfo = useMemoObservable(\n (): Observable<ParentReferenceInfo> => {\n const parentRefPathSegment = parentRefPath?.[0] as string | undefined\n\n // short-circuit: this document pane is not a child reference pane\n if (!parentId || !parentRefPathSegment || !parentRefPath) {\n return of({loading: false})\n }\n\n const publishedId = getPublishedId(parentId)\n const path = pathFromString(parentRefPathSegment)\n\n // note: observePaths doesn't support keyed path segments, so we need to select the nearest parent\n const keyedSegmentIndex = path.findIndex(\n (p): p is KeyedSegment => typeof p == 'object' && '_key' in p,\n )\n\n return concat(\n // emit a loading state instantly\n of({loading: true}),\n // then emit the values from watching the published ID's path\n documentPreviewStore\n .unstable_observePathsDocumentPair(\n publishedId,\n (keyedSegmentIndex === -1 ? path : path.slice(0, keyedSegmentIndex)) as string[][],\n )\n .pipe(\n // this debounce time is needed to prevent flashing banners due to\n // the router state updating faster than the content-lake state. we\n // debounce to wait for more emissions because the value pulled\n // initially could be stale.\n debounceTime(750),\n map(\n ({draft, published}): ParentReferenceInfo => ({\n loading: false,\n result: {\n availability: {\n draft: draft.availability,\n published: published.availability,\n },\n refValue: pathGet<Reference>(draft.snapshot || published.snapshot, parentRefPath)\n ?._ref,\n },\n }),\n ),\n ),\n )\n },\n [documentPreviewStore, parentId, parentRefPath],\n {loading: true},\n )\n\n const handleReloadReference = useCallback(() => {\n if (referenceInfo.loading) return\n\n if (referenceInfo.result?.refValue) {\n replaceCurrent({\n id: referenceInfo.result.refValue,\n params: params as Record<string, string>,\n })\n }\n }, [referenceInfo.loading, referenceInfo.result, replaceCurrent, params])\n\n const shouldHide =\n // if `parentId` or `parentRefPath` is not present then this banner is n/a\n !parentId ||\n !parentRefPath ||\n // if viewing this pane via history, then hide\n hasHistoryOpen ||\n // if loading, hide\n referenceInfo.loading ||\n // if the parent document is not available (e.g. due to permission denied or\n // not found) we don't want to display a warning here, but instead rely on the\n // parent view to display the appropriate message\n (!referenceInfo.result?.availability.draft.available &&\n !referenceInfo.result?.availability.published.available) ||\n // if the references are the same, then hide the reference changed banner\n referenceInfo.result?.refValue === routerReferenceId\n\n if (shouldHide) return null\n\n return (\n <Banner\n action={\n referenceInfo.result?.refValue\n ? {\n onClick: handleReloadReference,\n icon: SyncIcon,\n text: t('banners.reference-changed-banner.reason-changed.reload-button.text'),\n }\n : {\n as: BackLink,\n icon: CloseIcon,\n text: t('banners.reference-changed-banner.reason-removed.close-button.text'),\n }\n }\n data-testid=\"reference-changed-banner\"\n content={\n <Text size={1} weight=\"medium\">\n {referenceInfo.result?.refValue\n ? t('banners.reference-changed-banner.reason-changed.text')\n : t('banners.reference-changed-banner.reason-removed.text')}\n </Text>\n }\n icon={WarningOutlineIcon}\n tone=\"caution\"\n />\n )\n})\n\nReferenceChangedBanner.displayName = 'ReferenceChangedBanner'\n","import {useDocumentPane} from './useDocumentPane'\nimport {unstable_useValuePreview as useValuePreview} from 'sanity'\n\n/**\n * useDocumentTitle hook return type.\n *\n * @beta\n * @hidden\n */\ninterface UseDocumentTitle {\n error?: string\n title?: string\n}\n\n/**\n * React hook that returns the document title for the current document in the document pane.\n *\n * @beta\n * @hidden\n *\n * @returns The document title or error. See {@link UseDocumentTitle}\n */\nexport function useDocumentTitle(): UseDocumentTitle {\n const {connectionState, schemaType, title, value: documentValue} = useDocumentPane()\n const subscribed = Boolean(documentValue) && connectionState === 'connected'\n\n const {error, value} = useValuePreview({\n enabled: subscribed,\n schemaType,\n value: documentValue,\n })\n\n if (connectionState !== 'connected') {\n return {error: undefined, title: undefined}\n }\n\n if (title) {\n return {error: undefined, title}\n }\n\n if (!documentValue) {\n return {error: undefined, title: `New ${schemaType?.title || schemaType?.name}`}\n }\n\n if (error) {\n return {error: `Error: ${error.message}`, title: undefined}\n }\n\n return {error: undefined, title: value?.title}\n}\n","import {useEffect, useRef} from 'react'\nimport {ToastParams, useToast} from '@sanity/ui'\n\nfunction usePrevious<T>(value: T) {\n const ref = useRef<T>()\n useEffect(() => {\n ref.current = value\n }, [value])\n return ref.current\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/API/setTimeout#maximum_delay_value\nconst LONG_ENOUGH_BUT_NOT_TOO_LONG = 1000 * 60 * 60 * 24 * 24\n\n/**\n * Workaround to support conditional toast (e.g. a toast that is visible as long as a condition holds true)\n */\nexport function useConditionalToast(params: ToastParams & {id: string; enabled?: boolean}) {\n const toast = useToast()\n\n const wasEnabled = usePrevious(params.enabled)\n // note1: there's a `duration || 0` in Sanity UI's pushToast(), so make it non-falsey\n // note2: cannot use `Infinity` as duration, since it exceeds setTimeout's maximum delay value\n useEffect(() => {\n if (!wasEnabled && params.enabled) {\n toast.push({...params, duration: LONG_ENOUGH_BUT_NOT_TOO_LONG})\n }\n if (wasEnabled && !params.enabled) {\n toast.push({\n ...params,\n // Note: @sanity/ui fallbacks to the default duration of 4s in case of falsey values\n duration: 0.01,\n })\n }\n }, [params, toast, wasEnabled])\n}\n","import {ObjectSchemaType, SchemaType} from '@sanity/types'\nimport {Heading, Stack, Text} from '@sanity/ui'\nimport {useTranslation} from 'react-i18next'\nimport styled, {css} from 'styled-components'\nimport {structureLocaleNamespace} from '../../../../i18n'\n\ninterface DocumentHeaderProps {\n documentId: string\n schemaType: ObjectSchemaType\n title?: string\n}\n\n/**\n * Use CSS container queries to conditionally render headings at different sizes.\n * We hide this entire container (including the document type) if container queries\n * not supported in the current browser.\n *\n * Note that usage of container queries in `styled-components` is only supported in `6.x`.\n * As such, studios that include `\"styled-components\": \"<6\"` as a dependency will only see\n * the largest heading size here, even if their browser supports it!\n */\n\nexport const TitleContainer = styled(Stack)`\n ${({theme}) => {\n return css`\n @supports not (container-type: inline-size) {\n display: none !important;\n }\n\n container-type: inline-size;\n\n [data-heading] {\n font-size: ${theme.sanity.fonts.heading.sizes[4].fontSize}px;\n line-height: ${theme.sanity.fonts.heading.sizes[4].lineHeight}px;\n overflow-wrap: break-word;\n }\n\n @container (max-width: 560px) {\n [data-heading] {\n font-size: ${theme.sanity.fonts.heading.sizes[3].fontSize}px;\n line-height: ${theme.sanity.fonts.heading.sizes[3].lineHeight}px;\n }\n }\n\n @container (max-width: 420px) {\n [data-heading] {\n font-size: ${theme.sanity.fonts.heading.sizes[2].fontSize}px;\n line-height: ${theme.sanity.fonts.heading.sizes[2].lineHeight}px;\n }\n }\n `\n }}\n`\n\n/**\n * Header containing current document title and type.\n * Document type is hidden if the document `_id` matches the current document `_type`.\n * The entire header is hidden if container queries are not supported.\n */\nexport const FormHeader = ({documentId, schemaType, title}: DocumentHeaderProps) => {\n const isSingleton = documentId === schemaType.name\n const {t} = useTranslation(structureLocaleNamespace)\n\n if (schemaType.__experimental_formPreviewTitle === false) {\n return null\n }\n\n return (\n <TitleContainer marginBottom={6} space={4}>\n {!isSingleton && (\n <Text muted size={1}>\n {schemaType.title ?? schemaType.name}\n </Text>\n )}\n\n <Heading as=\"h2\" data-heading muted={!title}>\n {title ?? t('document-view.form-view.form-title-fallback')}\n </Heading>\n </TitleContainer>\n )\n}\n","/* eslint-disable no-nested-ternary */\nimport {Box, Container, Flex, Spinner, Text, focusFirstDescendant} from '@sanity/ui'\nimport React, {forwardRef, useEffect, useMemo, useCallback, useState} from 'react'\nimport {tap} from 'rxjs/operators'\nimport {structureLocaleNamespace} from '../../../../i18n'\nimport {useDocumentTitle} from '../../useDocumentTitle'\nimport {useDocumentPane} from '../../useDocumentPane'\nimport {Delay} from '../../../../components'\nimport {useConditionalToast} from './useConditionalToast'\nimport {FormHeader} from './FormHeader'\nimport {\n FormDocumentValue,\n DocumentMutationEvent,\n DocumentRebaseEvent,\n FormBuilder,\n PatchMsg,\n PresenceOverlay,\n createPatchChannel,\n fromMutationPatches,\n useDocumentPresence,\n useDocumentStore,\n useTranslation,\n LoadingBlock,\n} from 'sanity'\n\ninterface FormViewProps {\n hidden: boolean\n margins: [number, number, number, number]\n}\n\nconst preventDefault = (ev: React.FormEvent) => ev.preventDefault()\n\nexport const FormView = forwardRef<HTMLDivElement, FormViewProps>(function FormView(props, ref) {\n const {hidden, margins} = props\n\n const {\n collapsedFieldSets,\n collapsedPaths,\n displayed: value,\n editState,\n documentId,\n documentType,\n fieldActions,\n onChange,\n validation,\n ready,\n formState,\n onFocus,\n onBlur,\n onSetCollapsedPath,\n onPathOpen,\n onSetCollapsedFieldSet,\n onSetActiveFieldGroup,\n } = useDocumentPane()\n const documentStore = useDocumentStore()\n const presence = useDocumentPresence(documentId)\n const {title} = useDocumentTitle()\n\n // The `patchChannel` is an INTERNAL publish/subscribe channel that we use to notify form-builder\n // nodes about both remote and local patches.\n // - Used by the Portable Text input to modify selections.\n // - Used by `withDocument` to reset value.\n const patchChannel = useMemo(() => createPatchChannel(), [])\n\n const isLocked = editState?.transactionSyncLock?.enabled\n const {t} = useTranslation(structureLocaleNamespace)\n\n useConditionalToast({\n id: `sync-lock-${documentId}`,\n status: 'warning',\n enabled: isLocked,\n title: t('document-view.form-view.sync-lock-toast.title'),\n description: t('document-view.form-view.sync-lock-toast.description'),\n })\n\n useEffect(() => {\n const sub = documentStore.pair\n .documentEvents(documentId, documentType)\n .pipe(\n tap((event) => {\n if (event.type === 'mutation') {\n patchChannel.publish(prepareMutationEvent(event))\n }\n\n if (event.type === 'rebase') {\n patchChannel.publish(prepareRebaseEvent(event))\n }\n }),\n )\n .subscribe()\n\n return () => {\n sub.unsubscribe()\n }\n }, [documentId, documentStore, documentType, patchChannel])\n\n const hasRev = Boolean(value?._rev)\n useEffect(() => {\n if (hasRev) {\n // this is a workaround for an issue that caused the document pushed to withDocument to get\n // stuck at the first initial value.\n // This effect is triggered only when the document goes from not having a revision, to getting one\n // so it will kick in as soon as the document is received from the backend\n patchChannel.publish({\n type: 'mutation',\n patches: [],\n snapshot: value,\n })\n }\n // React to changes in hasRev only\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [hasRev])\n\n const [formRef, setFormRef] = useState<null | HTMLDivElement>(null)\n\n useEffect(() => {\n // Only focus on the first descendant if there is not already a focus path\n // This is to avoid stealing focus from intent links\n if (ready && !formState?.focusPath.length && formRef) {\n focusFirstDescendant(formRef)\n }\n // We only want to run it on first mount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ready])\n\n const setRef = useCallback(\n (node: HTMLDivElement | null) => {\n setFormRef(node)\n if (typeof ref === 'function') {\n ref(node)\n } else if (ref) {\n ref.current = node\n }\n },\n [ref],\n )\n\n // const after = useMemo(\n // () =>\n // Array.isArray(afterEditorComponents) &&\n // afterEditorComponents.map(\n // (AfterEditorComponent: React.ComponentType<{documentId: string}>, idx: number) => (\n // <AfterEditorComponent key={String(idx)} documentId={documentId} />\n // )\n // ),\n // [documentId]\n // )\n\n if (!ready) {\n return <LoadingBlock showText />\n }\n\n return (\n <Container\n hidden={hidden}\n paddingX={4}\n paddingTop={5}\n paddingBottom={9}\n sizing=\"border\"\n width={1}\n >\n <PresenceOverlay margins={margins}>\n <Box as=\"form\" onSubmit={preventDefault} ref={setRef}>\n {ready ? (\n formState === null || hidden ? (\n <Box padding={2}>\n <Text>{t('document-view.form-view.form-hidden')}</Text>\n </Box>\n ) : (\n <>\n <FormHeader\n documentId={documentId}\n schemaType={formState.schemaType}\n title={title}\n />\n <FormBuilder\n __internal_fieldActions={fieldActions}\n __internal_patchChannel={patchChannel}\n collapsedFieldSets={collapsedFieldSets}\n collapsedPaths={collapsedPaths}\n focusPath={formState.focusPath}\n changed={formState.changed}\n focused={formState.focused}\n groups={formState.groups}\n id=\"root\"\n members={formState.members}\n onChange={onChange}\n onFieldGroupSelect={onSetActiveFieldGroup}\n onPathBlur={onBlur}\n onPathFocus={onFocus}\n onPathOpen={onPathOpen}\n onSetFieldSetCollapsed={onSetCollapsedFieldSet}\n onSetPathCollapsed={onSetCollapsedPath}\n presence={presence}\n readOnly={formState.readOnly}\n schemaType={formState.schemaType}\n validation={validation}\n value={\n // note: the form state doesn't have a typed concept of a \"document\" value\n // but these should be compatible\n formState.value as FormDocumentValue\n }\n />\n </>\n )\n ) : (\n <Delay ms={300}>\n {/* TODO: replace with loading block */}\n <Flex align=\"center\" direction=\"column\" height=\"fill\" justify=\"center\">\n <Spinner muted />\n <Box marginTop={3}>\n <Text align=\"center\" muted size={1}>\n {t('document-view.form-view.loading')}\n </Text>\n </Box>\n </Flex>\n </Delay>\n )}\n </Box>\n </PresenceOverlay>\n </Container>\n )\n})\n\nfunction prepareMutationEvent(event: DocumentMutationEvent): PatchMsg {\n const patches = event.mutations.map((mut) => mut.patch).filter(Boolean)\n\n return {\n type: 'mutation',\n snapshot: event.document,\n patches: fromMutationPatches(event.origin, patches),\n }\n}\n\nfunction prepareRebaseEvent(event: DocumentRebaseEvent): PatchMsg {\n const remotePatches = event.remoteMutations.map((mut) => mut.patch).filter(Boolean)\n const localPatches = event.localMutations.map((mut) => mut.patch).filter(Boolean)\n\n return {\n type: 'rebase',\n snapshot: event.document,\n patches: fromMutationPatches('remote', remotePatches).concat(\n fromMutationPatches('local', localPatches),\n ),\n }\n}\n","import {BoundaryElementProvider, Flex, PortalProvider, usePortal, Box} from '@sanity/ui'\nimport React, {createElement, useEffect, useMemo, useRef, useState} from 'react'\nimport styled, {css} from 'styled-components'\nimport {PaneContent, usePane, usePaneLayout} from '../../../components'\nimport {useDocumentPane} from '../useDocumentPane'\nimport {useStructureTool} from '../../../useStructureTool'\nimport {DocumentInspectorPanel} from '../documentInspector'\nimport {InspectDialog} from '../inspectDialog'\nimport {\n DeletedDocumentBanner,\n DeprecatedDocumentTypeBanner,\n PermissionCheckBanner,\n ReferenceChangedBanner,\n} from './banners'\nimport {FormView} from './documentViews'\nimport {ScrollContainer, useTimelineSelector, VirtualizerScrollInstanceProvider} from 'sanity'\n\ninterface DocumentPanelProps {\n footerHeight: number | null\n headerHeight: number | null\n isInspectOpen: boolean\n rootElement: HTMLDivElement | null\n setDocumentPanelPortalElement: (el: HTMLElement | null) => void\n}\n\nconst DocumentBox = styled(Box)({\n position: 'relative',\n})\n\nconst Scroller = styled(ScrollContainer)<{$disabled: boolean}>(({$disabled}) => {\n if ($disabled) {\n return {height: '100%'}\n }\n\n return css`\n height: 100%;\n overflow: auto;\n position: relative;\n scroll-behavior: smooth;\n outline: none;\n `\n})\n\nexport const DocumentPanel = function DocumentPanel(props: DocumentPanelProps) {\n const {footerHeight, headerHeight, isInspectOpen, rootElement, setDocumentPanelPortalElement} =\n props\n const {\n activeViewId,\n displayed,\n documentId,\n editState,\n inspector,\n value,\n views,\n ready,\n schemaType,\n permissions,\n isPermissionsLoading,\n isDeleting,\n isDeleted,\n timelineStore,\n } = useDocumentPane()\n const {collapsed: layoutCollapsed} = usePaneLayout()\n const {collapsed} = usePane()\n const parentPortal = usePortal()\n const {features} = useStructureTool()\n const portalRef = useRef<HTMLDivElement | null>(null)\n const [documentScrollElement, setDocumentScrollElement] = useState<HTMLDivElement | null>(null)\n const formContainerElement = useRef<HTMLDivElement | null>(null)\n\n const requiredPermission = value._createdAt ? 'update' : 'create'\n\n const activeView = useMemo(\n () => views.find((view) => view.id === activeViewId) || views[0] || {type: 'form'},\n [activeViewId, views],\n )\n\n // Use a local portal container when split panes is supported\n const portalElement: HTMLElement | null = features.splitPanes\n ? portalRef.current || parentPortal.element\n : parentPortal.element\n\n // Calculate the height of the header\n const margins: [number, number, number, number] = useMemo(() => {\n if (layoutCollapsed) {\n return [headerHeight || 0, 0, footerHeight ? footerHeight + 2 : 2, 0]\n }\n\n return [0, 0, 2, 0]\n }, [layoutCollapsed, footerHeight, headerHeight])\n\n const formViewHidden = activeView.type !== 'form'\n\n const activeViewNode = useMemo(\n () =>\n activeView.type === 'component' &&\n activeView.component &&\n createElement(activeView.component, {\n document: {\n draft: editState?.draft || null,\n displayed: displayed || value,\n historical: displayed,\n published: editState?.published || null,\n },\n documentId,\n options: activeView.options,\n schemaType,\n }),\n [activeView, displayed, documentId, editState?.draft, editState?.published, schemaType, value],\n )\n\n const lastNonDeletedRevId = useTimelineSelector(\n timelineStore,\n (state) => state.lastNonDeletedRevId,\n )\n\n // Scroll to top as `documentId` changes\n useEffect(() => {\n if (!documentScrollElement?.scrollTo) return\n documentScrollElement.scrollTo(0, 0)\n }, [documentId, documentScrollElement])\n\n // Pass portal element to `DocumentPane`\n useEffect(() => {\n if (portalElement) {\n setDocumentPanelPortalElement(portalElement)\n }\n }, [portalElement, setDocumentPanelPortalElement])\n\n const inspectDialog = useMemo(() => {\n return isInspectOpen ? <InspectDialog value={displayed || value} /> : null\n }, [isInspectOpen, displayed, value])\n\n const showInspector = Boolean(!collapsed && inspector)\n\n return (\n <PaneContent>\n <Flex height=\"fill\">\n {(features.resizablePanes || !showInspector) && (\n <DocumentBox flex={2} overflow=\"hidden\">\n <PortalProvider\n element={portalElement}\n __unstable_elements={{documentScrollElement: documentScrollElement}}\n >\n <BoundaryElementProvider element={documentScrollElement}>\n <VirtualizerScrollInstanceProvider\n scrollElement={documentScrollElement}\n containerElement={formContainerElement}\n >\n {activeView.type === 'form' && !isPermissionsLoading && ready && (\n <>\n <PermissionCheckBanner\n granted={Boolean(permissions?.granted)}\n requiredPermission={requiredPermission}\n />\n {!isDeleting && isDeleted && (\n <DeletedDocumentBanner revisionId={lastNonDeletedRevId} />\n )}\n <ReferenceChangedBanner />\n <DeprecatedDocumentTypeBanner />\n </>\n )}\n\n <Scroller\n $disabled={layoutCollapsed || false}\n data-testid=\"document-panel-scroller\"\n ref={setDocumentScrollElement}\n >\n <FormView\n hidden={formViewHidden}\n key={documentId + (ready ? '_ready' : '_pending')}\n margins={margins}\n ref={formContainerElement}\n />\n {activeViewNode}\n </Scroller>\n\n {inspectDialog}\n\n <div data-testid=\"document-panel-portal\" ref={portalRef} />\n </VirtualizerScrollInstanceProvider>\n </BoundaryElementProvider>\n </PortalProvider>\n </DocumentBox>\n )}\n\n {showInspector && (\n <BoundaryElementProvider element={rootElement}>\n <DocumentInspectorPanel\n documentId={documentId}\n documentType={schemaType.name}\n flex={1}\n />\n </BoundaryElementProvider>\n )}\n </Flex>\n </PaneContent>\n )\n}\n","import {Placement} from '@sanity/ui'\nimport {DialogProps} from '../../../../../ui-components'\n\nexport const POPOVER_FALLBACK_PLACEMENTS: Placement[] = ['left', 'bottom']\n\nexport const DIALOG_WIDTH_TO_UI_WIDTH: {[key: string]: DialogProps['width']} = {\n small: 0,\n medium: 1,\n large: 2,\n full: 'auto',\n}\n","import {\n Box,\n Button, // eslint-disable-line no-restricted-imports\n Flex,\n Grid,\n Popover, // eslint-disable-line no-restricted-imports\n Text,\n useClickOutside,\n useGlobalKeyDown,\n useLayer,\n} from '@sanity/ui'\nimport React, {useCallback, useState} from 'react'\nimport {structureLocaleNamespace} from '../../../../i18n'\nimport {POPOVER_FALLBACK_PLACEMENTS} from './constants'\nimport {DocumentActionConfirmDialogProps, useTranslation} from 'sanity'\n\nexport function ConfirmDialog(props: {\n dialog: DocumentActionConfirmDialogProps\n referenceElement: HTMLElement | null\n}) {\n const {dialog, referenceElement} = props\n\n return (\n <Popover\n content={<ConfirmDialogContent dialog={dialog} />}\n fallbackPlacements={POPOVER_FALLBACK_PLACEMENTS}\n open\n placement=\"top\"\n portal\n preventOverflow\n referenceElement={referenceElement}\n />\n )\n}\n\n/**\n * Dialog rendered by custom document actions of dialog type `confirm`.\n * As these are user configurable with public facing APIs, internal studio ui-components are not used.\n */\nfunction ConfirmDialogContent(props: {dialog: DocumentActionConfirmDialogProps}) {\n const {dialog} = props\n const {\n cancelButtonIcon,\n cancelButtonText,\n confirmButtonIcon,\n confirmButtonText,\n // color,\n message,\n onCancel,\n onConfirm,\n tone,\n } = dialog\n const {t} = useTranslation(structureLocaleNamespace)\n const {isTopLayer} = useLayer()\n const [element, setElement] = useState<HTMLElement | null>(null)\n\n const handleClickOutside = useCallback(() => {\n if (isTopLayer) onCancel()\n }, [isTopLayer, onCancel])\n\n const handleGlobalKeyDown = useCallback(\n (event: any) => {\n if (event.key === 'Escape' && isTopLayer) onCancel()\n },\n [isTopLayer, onCancel],\n )\n\n useClickOutside(handleClickOutside, [element])\n useGlobalKeyDown(handleGlobalKeyDown)\n\n return (\n <Flex direction=\"column\" ref={setElement} style={{minWidth: 320 - 16, maxWidth: 400}}>\n <Box flex={1} overflow=\"auto\" padding={4}>\n <Text>{message}</Text>\n </Box>\n <Box paddingX={4} paddingY={3} style={{borderTop: '1px solid var(--card-border-color)'}}>\n <Grid columns={2} gap={2}>\n <Button\n icon={cancelButtonIcon}\n onClick={onCancel}\n mode=\"ghost\"\n text={cancelButtonText || t('confirm-dialog.cancel-button.fallback-text')}\n />\n <Button\n icon={confirmButtonIcon}\n onClick={onConfirm}\n text={confirmButtonText || t('confirm-dialog.confirm-button.fallback-text')}\n tone={tone}\n />\n </Grid>\n </Box>\n </Flex>\n )\n}\n","import {\n Box,\n Dialog, // eslint-disable-line no-restricted-imports\n} from '@sanity/ui'\nimport React, {useId} from 'react'\nimport {DIALOG_WIDTH_TO_UI_WIDTH} from './constants'\nimport {DocumentActionModalDialogProps, LegacyLayerProvider} from 'sanity'\n\n/**\n * Dialog rendered by custom document actions of dialog type `dialog`.\n * As these are user configurable with public facing APIs, internal studio ui-components are not used.\n */\nexport function ModalDialog(props: {dialog: DocumentActionModalDialogProps}) {\n const {dialog} = props\n const dialogId = useId()\n\n const footer = dialog.footer && (\n <Box paddingX={4} paddingY={3}>\n {dialog.footer}\n </Box>\n )\n\n return (\n <LegacyLayerProvider zOffset=\"fullscreen\">\n <Dialog\n __unstable_hideCloseButton={dialog.showCloseButton === false}\n footer={footer}\n header={dialog.header}\n id={dialogId}\n // eslint-disable-next-line react/jsx-handler-names\n onClose={dialog.onClose}\n // eslint-disable-next-line react/jsx-handler-names\n onClickOutside={dialog.onClose}\n width={dialog.width === undefined ? 1 : DIALOG_WIDTH_TO_UI_WIDTH[dialog.width]}\n >\n <Box padding={4}>{dialog.content}</Box>\n </Dialog>\n </LegacyLayerProvider>\n )\n}\n","import {\n Popover, // eslint-disable-line no-restricted-imports\n useClickOutside,\n useGlobalKeyDown,\n useLayer,\n} from '@sanity/ui'\nimport React, {useCallback, useState} from 'react'\nimport {POPOVER_FALLBACK_PLACEMENTS} from './constants'\nimport {DocumentActionPopoverDialogProps} from 'sanity'\n\nexport function PopoverDialog(props: {\n dialog: DocumentActionPopoverDialogProps\n referenceElement: HTMLElement | null\n}) {\n const {dialog, referenceElement} = props\n\n return (\n <Popover\n content={<PopoverDialogContent dialog={dialog} />}\n fallbackPlacements={POPOVER_FALLBACK_PLACEMENTS}\n open\n placement=\"top\"\n portal\n preventOverflow\n referenceElement={referenceElement}\n />\n )\n}\n\n/**\n * Popover rendered by custom document actions of dialog type `popover`.\n * As these are user configurable with public facing APIs, internal studio ui-components are not used.\n */\nfunction PopoverDialogContent(props: {dialog: DocumentActionPopoverDialogProps}) {\n const {dialog} = props\n const {content, onClose} = dialog\n const {isTopLayer} = useLayer()\n const [element, setElement] = useState<HTMLElement | null>(null)\n\n const handleClickOutside = useCallback(() => {\n if (isTopLayer) onClose()\n }, [isTopLayer, onClose])\n\n const handleGlobalKeyDown = useCallback(\n (event: any) => {\n if (event.key === 'Escape' && isTopLayer) onClose()\n },\n [isTopLayer, onClose],\n )\n\n useClickOutside(handleClickOutside, [element])\n useGlobalKeyDown(handleGlobalKeyDown)\n\n return <div ref={setElement}>{content}</div>\n}\n","import {usePortal, PortalProvider, Text} from '@sanity/ui'\nimport React, {useId} from 'react'\nimport {Dialog} from '../../../../ui-components'\nimport {DOCUMENT_PANEL_PORTAL_ELEMENT} from '../../../constants'\nimport {ConfirmDialog} from './dialogs/ConfirmDialog'\nimport {ModalDialog} from './dialogs/ModalDialog'\nimport {PopoverDialog} from './dialogs/PopoverDialog'\nimport {DocumentActionDialogProps} from 'sanity'\n\nexport interface ActionStateDialogProps {\n dialog: DocumentActionDialogProps\n referenceElement?: HTMLElement | null\n}\n\n// A portal provider that uses the document panel portal element if it exists\n// as the portal element so that dialogs are scoped to the document panel\nfunction DocumentActionPortalProvider(props: {children: React.ReactNode}) {\n const {children} = props\n const {element, elements} = usePortal()\n const portalElement = elements?.[DOCUMENT_PANEL_PORTAL_ELEMENT] || element\n\n return <PortalProvider element={portalElement}>{children}</PortalProvider>\n}\n\nexport function ActionStateDialog(props: ActionStateDialogProps) {\n const {dialog, referenceElement = null} = props\n const modalId = useId()\n\n if (dialog.type === 'confirm') {\n return <ConfirmDialog dialog={dialog} referenceElement={referenceElement} />\n }\n\n if (dialog.type === 'popover') {\n return <PopoverDialog dialog={dialog} referenceElement={referenceElement} />\n }\n\n if (dialog.type === 'dialog' || !dialog.type) {\n return (\n <DocumentActionPortalProvider>\n <ModalDialog dialog={dialog} />\n </DocumentActionPortalProvider>\n )\n }\n\n if (dialog.type === 'custom') {\n return <DocumentActionPortalProvider>{dialog?.component}</DocumentActionPortalProvider>\n }\n\n // @todo: add validation?\n const unknownModal: any = dialog\n\n // eslint-disable-next-line no-console\n console.warn(`Unsupported modal type ${unknownModal.type}`)\n\n return (\n <Dialog\n id={modalId}\n // eslint-disable-next-line react/jsx-handler-names\n onClose={unknownModal.onClose}\n // eslint-disable-next-line react/jsx-handler-names\n onClickOutside={unknownModal.onClose}\n width={1}\n >\n {unknownModal.content || (\n // eslint-disable-next-line i18next/no-literal-string\n <Text size={1}>\n Unexpected modal type (<code>{unknownModal.type}</code>)\n </Text>\n )}\n </Dialog>\n )\n}\n","import {Menu} from '@sanity/ui'\nimport React, {useCallback, useState, useMemo, useId} from 'react'\nimport {MenuButton, MenuItem, PopoverProps} from '../../../../ui-components'\nimport {structureLocaleNamespace} from '../../../i18n'\nimport {ActionStateDialog} from './ActionStateDialog'\nimport {\n DocumentActionDescription,\n LegacyLayerProvider,\n useTranslation,\n ContextMenuButton,\n} from 'sanity'\n\nexport interface ActionMenuButtonProps {\n actionStates: DocumentActionDescription[]\n disabled: boolean\n}\n\nexport function ActionMenuButton(props: ActionMenuButtonProps) {\n const {actionStates, disabled} = props\n const idPrefix = useId()\n const [actionIndex, setActionIndex] = useState(-1)\n const [referenceElement, setReferenceElement] = useState<HTMLButtonElement | null>(null)\n\n const handleAction = useCallback((idx: number) => {\n setActionIndex(idx)\n }, [])\n\n const popoverProps: PopoverProps = useMemo(\n () => ({\n placement: 'top-end',\n portal: true,\n preventOverflow: true,\n }),\n [],\n )\n\n const currentAction = actionStates[actionIndex]\n const {t} = useTranslation(structureLocaleNamespace)\n\n return (\n <>\n <MenuButton\n id={`${idPrefix}-action-menu`}\n button={\n <ContextMenuButton\n aria-label={t('buttons.action-menu-button.aria-label')}\n disabled={disabled}\n data-testid=\"action-menu-button\"\n size=\"large\"\n tooltipProps={{content: t('buttons.action-menu-button.tooltip')}}\n />\n }\n menu={\n <Menu padding={1}>\n {actionStates.map((actionState, idx) => (\n <ActionMenuListItem\n actionState={actionState}\n disabled={disabled}\n index={idx}\n // eslint-disable-next-line react/no-array-index-key\n key={idx}\n onAction={handleAction}\n />\n ))}\n </Menu>\n }\n popover={popoverProps}\n ref={setReferenceElement}\n />\n\n {currentAction && currentAction.dialog && (\n <LegacyLayerProvider zOffset=\"paneFooter\">\n <ActionStateDialog dialog={currentAction.dialog} referenceElement={referenceElement} />\n </LegacyLayerProvider>\n )}\n </>\n )\n}\n\ninterface ActionMenuListItemProps {\n actionState: DocumentActionDescription\n disabled: boolean\n index: number\n onAction: (idx: number) => void\n}\n\nfunction ActionMenuListItem(props: ActionMenuListItemProps) {\n const {actionState, disabled, index, onAction} = props\n const {onHandle} = actionState\n\n const handleClick = useCallback(() => {\n onAction(index)\n if (onHandle) onHandle()\n }, [index, onAction, onHandle])\n\n const hotkeys = useMemo(() => {\n return actionState.shortcut\n ? String(actionState.shortcut)\n .split('+')\n .map((s) => s.slice(0, 1).toUpperCase() + s.slice(1))\n : undefined\n }, [actionState.shortcut])\n\n return (\n <MenuItem\n data-testid={`action-${actionState.label.replace(' ', '')}`}\n disabled={disabled || Boolean(actionState.disabled)}\n hotkeys={hotkeys}\n icon={actionState.icon}\n onClick={handleClick}\n text={actionState.label}\n tone={actionState.tone}\n {...(actionState.disabled && {tooltipProps: {content: actionState.title}})}\n />\n )\n}\n","import {Flex, Hotkeys, LayerProvider, Stack, Text} from '@sanity/ui'\nimport React, {memo, useMemo, useState} from 'react'\nimport {RenderActionCollectionState} from '../../../components'\nimport {HistoryRestoreAction} from '../../../documentActions'\nimport {Button, Tooltip} from '../../../../ui-components'\nimport {useDocumentPane} from '../useDocumentPane'\nimport {ActionMenuButton} from './ActionMenuButton'\nimport {ActionStateDialog} from './ActionStateDialog'\nimport {DocumentActionDescription, useTimelineSelector} from 'sanity'\n\ninterface DocumentStatusBarActionsInnerProps {\n disabled: boolean\n showMenu: boolean\n states: DocumentActionDescription[]\n}\n\nfunction DocumentStatusBarActionsInner(props: DocumentStatusBarActionsInnerProps) {\n const {disabled, showMenu, states} = props\n const [firstActionState, ...menuActionStates] = states\n const [buttonElement, setButtonElement] = useState<HTMLButtonElement | null>(null)\n\n // TODO: This could be refactored to use the tooltip from the button if the firstAction.title was updated to a string.\n const tooltipContent = useMemo(() => {\n if (!firstActionState || (!firstActionState.title && !firstActionState.shortcut)) return null\n\n return (\n <Flex style={{maxWidth: 300}} align=\"center\" gap={3}>\n {firstActionState.title && <Text size={1}>{firstActionState.title}</Text>}\n {firstActionState.shortcut && (\n <Hotkeys\n fontSize={1}\n style={{marginTop: -4, marginBottom: -4}}\n keys={String(firstActionState.shortcut)\n .split('+')\n .map((s) => s.slice(0, 1).toUpperCase() + s.slice(1).toLowerCase())}\n />\n )}\n </Flex>\n )\n }, [firstActionState])\n\n return (\n <Flex align=\"center\" gap={1}>\n {firstActionState && (\n <LayerProvider zOffset={200}>\n <Tooltip disabled={!tooltipContent} content={tooltipContent} placement=\"top\">\n <Stack>\n <Button\n data-testid={`action-${firstActionState.label}`}\n disabled={disabled || Boolean(firstActionState.disabled)}\n icon={firstActionState.icon}\n // eslint-disable-next-line react/jsx-handler-names\n onClick={firstActionState.onHandle}\n ref={setButtonElement}\n size=\"large\"\n text={firstActionState.label}\n tone={firstActionState.tone || 'primary'}\n />\n </Stack>\n </Tooltip>\n </LayerProvider>\n )}\n {showMenu && menuActionStates.length > 0 && (\n <ActionMenuButton actionStates={menuActionStates} disabled={disabled} />\n )}\n {firstActionState && firstActionState.dialog && (\n <ActionStateDialog dialog={firstActionState.dialog} referenceElement={buttonElement} />\n )}\n </Flex>\n )\n}\n\nexport const DocumentStatusBarActions = memo(function DocumentStatusBarActions() {\n const {actions, connectionState, documentId, editState} = useDocumentPane()\n // const [isMenuOpen, setMenuOpen] = useState(false)\n // const handleMenuOpen = useCallback(() => setMenuOpen(true), [])\n // const handleMenuClose = useCallback(() => setMenuOpen(false), [])\n // const handleActionComplete = useCallback(() => setMenuOpen(false), [])\n\n if (!actions || !editState) {\n return null\n }\n\n return (\n <RenderActionCollectionState\n // component={}\n // onActionComplete={handleActionComplete}\n actions={actions}\n // @ts-expect-error TODO: fix the document actions\n actionProps={editState}\n >\n {({states}) => (\n <DocumentStatusBarActionsInner\n disabled={connectionState !== 'connected'}\n // isMenuOpen={isMenuOpen}\n // onMenuOpen={handleMenuOpen}\n // onMenuClose={handleMenuClose}\n showMenu={actions.length > 1}\n states={states}\n // Use document ID as key to make sure that the actions state is reset when the document changes\n key={documentId}\n />\n )}\n </RenderActionCollectionState>\n )\n})\n\nexport const HistoryStatusBarActions = memo(function HistoryStatusBarActions() {\n const {connectionState, editState, timelineStore} = useDocumentPane()\n\n // Subscribe to external timeline state changes\n const revTime = useTimelineSelector(timelineStore, (state) => state.revTime)\n\n const revision = revTime?.id || ''\n const disabled = (editState?.draft || editState?.published || {})._rev === revision\n const actionProps = useMemo(() => ({...(editState || {}), revision}), [editState, revision])\n const historyActions = useMemo(() => [HistoryRestoreAction], [])\n\n return (\n <RenderActionCollectionState actions={historyActions} actionProps={actionProps as any}>\n {({states}) => (\n <DocumentStatusBarActionsInner\n disabled={connectionState !== 'connected' || Boolean(disabled)}\n showMenu={false}\n states={states}\n />\n )}\n </RenderActionCollectionState>\n )\n})\n","import {useLayoutEffect} from 'react'\nimport {resizeObserver} from 'sanity'\n\nexport function useResizeObserver({\n element,\n onResize,\n}: {\n element?: HTMLDivElement | null\n onResize: (event: ResizeObserverEntry) => void\n}): void {\n useLayoutEffect(() => {\n if (element) {\n resizeObserver.observe(element, onResize)\n }\n\n return () => {\n if (element) {\n resizeObserver.unobserve(element)\n }\n }\n }, [element, onResize])\n}\n","import {Badge, BadgeTone, Inline} from '@sanity/ui'\nimport React from 'react'\nimport {Tooltip} from '../../../../ui-components'\nimport {RenderBadgeCollectionState} from '../../../components'\nimport {useDocumentPane} from '../useDocumentPane'\nimport {DocumentBadgeDescription} from 'sanity'\n\ninterface DocumentBadgesInnerProps {\n states: DocumentBadgeDescription[]\n}\n\nconst BADGE_TONES: Record<string, BadgeTone | undefined> = {\n primary: 'primary',\n success: 'positive',\n warning: 'caution',\n danger: 'critical',\n}\n\nfunction DocumentBadgesInner({states}: DocumentBadgesInnerProps) {\n if (states.length === 0) {\n return null\n }\n return (\n <Inline space={1}>\n {states.map((badge, index) => (\n <Tooltip\n content={badge.title}\n disabled={!badge.title}\n key={String(index)}\n placement=\"top\"\n portal\n >\n <Badge\n fontSize={1}\n mode=\"outline\"\n paddingX={2}\n paddingY={1}\n radius={4}\n tone={badge.color ? BADGE_TONES[badge.color] : undefined}\n style={{whiteSpace: 'nowrap'}}\n >\n {badge.label}\n </Badge>\n </Tooltip>\n ))}\n </Inline>\n )\n}\n\nexport function DocumentBadges() {\n const {badges, editState} = useDocumentPane()\n\n if (!editState || !badges) return null\n\n return (\n <RenderBadgeCollectionState badges={badges} badgeProps={editState as any}>\n {({states}) => <DocumentBadgesInner states={states} />}\n </RenderBadgeCollectionState>\n )\n}\n","import React, {ComponentProps} from 'react'\nimport {motion} from 'framer-motion'\nimport styled, {keyframes} from 'styled-components'\n\nconst StyledMotionPath = styled(motion.path)`\n transform-origin: center;\n`\n\ntype MotionCircleProps = Omit<ComponentProps<typeof motion.circle>, 'd'>\ntype MotionPathProps = Omit<ComponentProps<typeof motion.path>, 'd'>\n\nconst Circle = (props: MotionCircleProps) => (\n <motion.circle fill=\"none\" r=\"8\" cx=\"12.5\" cy=\"12.5\" strokeWidth=\"1.2\" {...props} />\n)\nconst Arrows = (props: MotionPathProps) => (\n <StyledMotionPath\n fill=\"none\"\n d=\"M14 17.5619L11.5 20.5L14.5 23.0619M11 7.43811L13.5 4.50001L10.5 1.93811\"\n {...props}\n />\n)\nconst Checkmark = (props: MotionPathProps) => (\n <motion.path d=\"M9.5 12.1316L11.7414 14.5L16 10\" {...props} />\n)\n\nconst rotateAnimation = keyframes`\n 0% {\n transform: rotate(0);\n }\n 100% {\n transform: rotate(360deg);\n }\n`\nconst RotateGroup = styled.g`\n transform-origin: center;\n\n &[data-rotate] {\n animation: ${rotateAnimation} 1s ease-in-out infinite;\n }\n`\n\nconst root = {\n syncing: {\n scale: 1,\n transition: {\n duration: 0,\n },\n },\n saved: {\n scale: [1, 0.8, 1.2, 0.9, 1.1, 0.95, 1.05, 0.99, 1],\n transition: {\n duration: 0.5,\n delay: 0.2,\n },\n },\n changes: {transition: {duration: 0}},\n}\n\nconst circle = {\n syncing: {\n strokeDasharray: '0, 0, 23, 3, 23, 3',\n strokeDashoffset: 10,\n opacity: 1,\n transition: {\n duration: 0,\n },\n },\n saved: {\n strokeDasharray: '0, 0, 23, 0, 23, 0',\n strokeDashoffset: 10,\n opacity: 1,\n transition: {\n duration: 0.2,\n },\n },\n changes: {\n strokeDasharray: '0, 60, 23, 0, 23, 0',\n strokeDashoffset: 0,\n opacity: 0,\n transition: {\n duration: 0.5,\n },\n },\n}\n\nconst arrows = {\n syncing: {\n opacity: 1,\n transition: {\n duration: 0,\n },\n },\n saved: {\n opacity: 0,\n transition: {\n duration: 0.2,\n },\n },\n changes: {\n opacity: 0,\n },\n}\n\nconst checkmark = {\n syncing: {\n pathLength: 0,\n transition: {duration: 0},\n },\n saved: {\n pathLength: 1,\n transition: {\n delay: 0.4,\n duration: 0.3,\n },\n },\n changes: {\n pathLength: 0,\n transition: {\n duration: 0.2,\n },\n },\n}\n\ninterface AnimatedStatusIconProps {\n status?: 'changes' | 'saved' | 'syncing'\n}\n\nexport function AnimatedStatusIcon(props: AnimatedStatusIconProps) {\n const {status} = props\n\n if (!status) {\n return null\n }\n\n return (\n <svg\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 25 25\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.2\"\n data-sanity-icon=\"animated-status-icon\"\n >\n <motion.g variants={root} initial={status} animate={status}>\n <RotateGroup data-rotate={status === 'changes' ? undefined : ''}>\n <Arrows variants={arrows} initial={status} animate={status} />\n <Circle variants={circle} initial={status} animate={status} />\n </RotateGroup>\n <Checkmark variants={checkmark} initial={status} animate={status} />\n </motion.g>\n </svg>\n )\n}\n","import {ButtonTone, Flex, Text} from '@sanity/ui'\nimport React from 'react'\nimport {AnimatedStatusIcon} from './AnimatedStatusIcon'\nimport {structureLocaleNamespace} from '../../../../i18n'\nimport {TextWithTone, useTranslation} from 'sanity'\n\ntype StatusType = 'saved' | 'syncing'\ninterface ReviewChangesButtonProps {\n status?: StatusType\n}\n\nconst STATUS_DICTIONARY: Record<StatusType, {i18nKey: string; tone: ButtonTone}> = {\n saved: {\n i18nKey: 'status-bar.document-status-pulse.status.saved.text',\n tone: 'positive',\n },\n syncing: {\n i18nKey: 'status-bar.document-status-pulse.status.syncing.text',\n tone: 'default',\n },\n}\n\nexport const DocumentStatusPulse = (props: ReviewChangesButtonProps) => {\n const {status} = props\n const {t} = useTranslation(structureLocaleNamespace)\n\n if (status !== 'saved' && status !== 'syncing') {\n return null\n }\n\n const currentStatus = STATUS_DICTIONARY[status]\n\n return (\n <Flex align=\"center\" gap={2}>\n <TextWithTone size={1} tone={currentStatus.tone}>\n <AnimatedStatusIcon status={status} />\n </TextWithTone>\n\n <Text muted size={1}>\n {t(currentStatus.i18nKey)}\n </Text>\n </Flex>\n )\n}\n","import {Flex} from '@sanity/ui'\nimport React, {useEffect, useLayoutEffect, useState} from 'react'\nimport {Tooltip} from '../../../../ui-components'\nimport {useDocumentPane} from '../useDocumentPane'\nimport {DocumentStatusPulse} from './DocumentStatusPulse'\nimport {useSyncState, DocumentStatusIndicator, DocumentStatus} from 'sanity'\n\nconst SYNCING_TIMEOUT = 1000\nconst SAVED_TIMEOUT = 3000\n\ninterface DocumentStatusLineProps {\n singleLine?: boolean\n}\n\nexport function DocumentStatusLine({singleLine}: DocumentStatusLineProps) {\n const {documentId, documentType, editState, value} = useDocumentPane()\n\n const [status, setStatus] = useState<'saved' | 'syncing' | null>(null)\n\n const syncState = useSyncState(documentId, documentType)\n\n const lastUpdated = value?._updatedAt\n\n // eslint-disable-next-line consistent-return\n useEffect(() => {\n // Schedule an update to set the status to 'saved' when status changed to 'syncing.\n // We use `syncState.isSyncing` here to avoid the status being set to 'saved' when the document is syncing.\n if (status === 'syncing' && !syncState.isSyncing) {\n const timerId = setTimeout(() => setStatus('saved'), SYNCING_TIMEOUT)\n return () => clearTimeout(timerId)\n }\n // Schedule an update to clear the status when status changed to 'saved'\n if (status === 'saved') {\n const timerId = setTimeout(() => setStatus(null), SAVED_TIMEOUT)\n return () => clearTimeout(timerId)\n }\n }, [status, lastUpdated, syncState.isSyncing])\n\n // Clear the status when documentId changes to make sure we don't show the wrong status when opening a new document\n useLayoutEffect(() => {\n setStatus(null)\n }, [documentId])\n\n // Set status to 'syncing' when lastUpdated changes and we go from not syncing to syncing\n useLayoutEffect(() => {\n if (syncState.isSyncing) {\n setStatus('syncing')\n }\n }, [syncState.isSyncing, lastUpdated])\n\n if (status) {\n return <DocumentStatusPulse status={status || undefined} />\n }\n\n return (\n <Tooltip\n content={\n <DocumentStatus absoluteDate draft={editState?.draft} published={editState?.published} />\n }\n placement=\"top\"\n >\n <Flex align=\"center\" gap={3}>\n <DocumentStatusIndicator draft={editState?.draft} published={editState?.published} />\n <DocumentStatus\n draft={editState?.draft}\n published={editState?.published}\n singleLine={singleLine}\n />\n </Flex>\n </Tooltip>\n )\n}\n","import React, {useCallback, useState} from 'react'\nimport {Flex} from '@sanity/ui'\nimport {SpacerButton} from '../../../components/spacerButton'\nimport {useDocumentPane} from '../useDocumentPane'\nimport {DocumentStatusBarActions, HistoryStatusBarActions} from './DocumentStatusBarActions'\nimport {useResizeObserver} from './useResizeObserver'\nimport {DocumentBadges} from './DocumentBadges'\nimport {DocumentStatusLine} from './DocumentStatusLine'\nimport {useTimelineSelector} from 'sanity'\n\nexport interface DocumentStatusBarProps {\n actionsBoxRef?: React.Ref<HTMLDivElement>\n}\n\nconst CONTAINER_BREAKPOINT = 480 // px\n\nexport function DocumentStatusBar(props: DocumentStatusBarProps) {\n const {actionsBoxRef} = props\n const {editState, timelineStore} = useDocumentPane()\n\n // Subscribe to external timeline state changes\n const showingRevision = useTimelineSelector(timelineStore, (state) => state.onOlderRevision)\n\n const [collapsed, setCollapsed] = useState<boolean | null>(null)\n const [rootElement, setRootElement] = useState<HTMLDivElement | null>(null)\n\n const handleResize = useCallback((event: ResizeObserverEntry) => {\n setCollapsed(event.contentRect.width < CONTAINER_BREAKPOINT)\n }, [])\n\n useResizeObserver({element: rootElement, onResize: handleResize})\n\n const shouldRender = editState?.ready && typeof collapsed === 'boolean'\n\n return (\n <Flex direction=\"column\" ref={setRootElement} sizing=\"border\">\n {shouldRender && (\n <Flex\n align=\"stretch\"\n gap={1}\n justify=\"space-between\"\n paddingY={2}\n paddingLeft={4}\n paddingRight={3}\n >\n <Flex align=\"center\" flex={1} gap={collapsed ? 2 : 3} wrap=\"wrap\" paddingRight={3}>\n <Flex align=\"center\">\n <DocumentStatusLine singleLine={!collapsed} />\n <SpacerButton size=\"large\" />\n </Flex>\n <DocumentBadges />\n </Flex>\n\n <Flex\n align=\"flex-start\"\n justify=\"flex-end\"\n ref={actionsBoxRef}\n style={{flexShrink: 0, marginLeft: 'auto'}}\n >\n <SpacerButton size=\"large\" />\n {showingRevision ? <HistoryStatusBarActions /> : <DocumentStatusBarActions />}\n </Flex>\n </Flex>\n )}\n </Flex>\n )\n}\n","import isHotkey from 'is-hotkey'\nimport React, {ElementType, createElement, useCallback, useMemo, useState} from 'react'\nimport {ActionStateDialog} from '../statusBar'\nimport {RenderActionCollectionState} from '../../../components'\nimport {useDocumentPane} from '../useDocumentPane'\nimport {DocumentActionDescription, DocumentActionProps, LegacyLayerProvider} from 'sanity'\n\nexport interface KeyboardShortcutResponderProps {\n actionsBoxElement: HTMLElement | null\n activeIndex: number\n as?: ElementType\n currentMinWidth?: number\n flex?: number\n id: string\n minWidth?: number\n onActionStart: (index: number) => void\n rootRef: React.Ref<HTMLDivElement>\n states: DocumentActionDescription[]\n}\n\nfunction KeyboardShortcutResponder(\n props: KeyboardShortcutResponderProps & Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'height'>,\n) {\n const {\n actionsBoxElement,\n activeIndex,\n as = 'div',\n children,\n id,\n onActionStart,\n onKeyDown,\n rootRef,\n states,\n ...rest\n } = props\n\n const activeAction = states[activeIndex]\n\n const handleKeyDown = useCallback(\n (event: any) => {\n const matchingStates = states.filter(\n (state) => state.shortcut && isHotkey(state.shortcut, event),\n )\n\n const matchingState = matchingStates[0]\n\n if (matchingStates.length > 1) {\n // eslint-disable-next-line no-console\n console.warn(\n `Keyboard shortcut conflict: More than one document action matches the shortcut \"${matchingState.shortcut}\"`,\n )\n }\n\n if (matchingState && !matchingState.disabled && matchingState.onHandle) {\n event.preventDefault()\n matchingState.onHandle()\n onActionStart(states.indexOf(matchingState))\n return\n }\n\n if (onKeyDown) {\n onKeyDown(event)\n }\n },\n [onActionStart, onKeyDown, states],\n )\n\n return createElement(\n as,\n {\n id,\n onKeyDown: handleKeyDown,\n tabIndex: -1,\n ...rest,\n ref: rootRef,\n },\n [\n children,\n activeAction && activeAction.dialog && (\n <LegacyLayerProvider zOffset=\"paneFooter\">\n <ActionStateDialog dialog={activeAction.dialog} referenceElement={actionsBoxElement} />\n </LegacyLayerProvider>\n ),\n ],\n )\n}\n\nexport interface DocumentActionShortcutsProps {\n actionsBoxElement: HTMLElement | null\n as?: ElementType\n currentMinWidth?: number\n debug?: boolean\n flex: number\n id: string\n minWidth: number\n rootRef: React.Ref<HTMLDivElement>\n}\n\nexport const DocumentActionShortcuts = React.memo(\n (props: DocumentActionShortcutsProps & Omit<React.HTMLProps<HTMLDivElement>, 'as'>) => {\n const {actionsBoxElement, as = 'div', children, ...rest} = props\n const {actions, editState} = useDocumentPane()\n const [activeIndex, setActiveIndex] = useState(-1)\n\n const onActionStart = useCallback((idx: number) => {\n setActiveIndex(idx)\n }, [])\n\n const actionProps: DocumentActionProps | null = useMemo(\n () =>\n editState && {\n ...editState,\n\n // @todo: what to call here?\n onComplete: () => undefined,\n\n // @todo: get revision string\n revision: undefined,\n },\n [editState],\n )\n\n if (!actionProps || !actions) return null\n\n return (\n <RenderActionCollectionState actionProps={actionProps} actions={actions}>\n {({states}) => (\n <KeyboardShortcutResponder\n {...rest}\n activeIndex={activeIndex}\n actionsBoxElement={actionsBoxElement}\n as={as}\n onActionStart={onActionStart}\n states={states}\n >\n {children}\n </KeyboardShortcutResponder>\n )}\n </RenderActionCollectionState>\n )\n },\n)\n\nDocumentActionShortcuts.displayName = 'DocumentActionShortcuts'\n","import React, {useCallback} from 'react'\nimport {TabList} from '@sanity/ui'\nimport {useDocumentPane} from '../../useDocumentPane'\nimport {usePaneRouter} from '../../../../components'\nimport {Tab} from '../../../../../ui-components'\n\nexport function DocumentHeaderTabs() {\n const {activeViewId, paneKey, views} = useDocumentPane()\n const tabPanelId = `${paneKey}tabpanel`\n\n return (\n <TabList space={1}>\n {views.map((view, index) => (\n <DocumentHeaderTab\n icon={view.icon}\n id={`${paneKey}tab-${view.id}`}\n isActive={activeViewId === view.id}\n key={view.id}\n label={view.title}\n tabPanelId={tabPanelId}\n viewId={index === 0 ? null : view.id ?? null}\n />\n ))}\n </TabList>\n )\n}\n\nfunction DocumentHeaderTab(props: {\n icon?: React.ComponentType | React.ReactNode\n id: string\n isActive: boolean\n label: string\n tabPanelId: string\n viewId: string | null\n}) {\n const {icon, id, isActive, label, tabPanelId, viewId, ...rest} = props\n const {ready} = useDocumentPane()\n const {setView} = usePaneRouter()\n const handleClick = useCallback(() => setView(viewId), [setView, viewId])\n\n return (\n <Tab\n {...rest} // required to enable <TabList> keyboard navigation\n aria-controls={tabPanelId}\n disabled={!ready}\n icon={icon}\n id={id}\n label={label}\n onClick={handleClick}\n selected={isActive}\n />\n )\n}\n","import React, {ReactElement} from 'react'\nimport {useDocumentPane} from '../../useDocumentPane'\nimport {structureLocaleNamespace} from '../../../../i18n'\nimport {unstable_useValuePreview as useValuePreview, useTranslation} from 'sanity'\n\nexport function DocumentHeaderTitle(): ReactElement {\n const {connectionState, schemaType, title, value: documentValue} = useDocumentPane()\n const subscribed = Boolean(documentValue) && connectionState === 'connected'\n\n const {error, value} = useValuePreview({\n enabled: subscribed,\n schemaType,\n value: documentValue,\n })\n const {t} = useTranslation(structureLocaleNamespace)\n\n if (connectionState !== 'connected') {\n return <></>\n }\n\n if (title) {\n return <>{title}</>\n }\n\n if (!documentValue) {\n return (\n <>\n {t('panes.document-header-title.new.text', {\n schemaType: schemaType?.title || schemaType?.name,\n })}\n </>\n )\n }\n\n if (error) {\n return <>{t('panes.document-header-title.error.text', {error: error.message})}</>\n }\n\n return (\n <>\n {value?.title || (\n <span style={{color: 'var(--card-muted-fg-color)'}}>\n {t('panes.document-header-title.untitled.text')}\n </span>\n )}\n </>\n )\n}\n","import {ArrowLeftIcon, CloseIcon, SplitVerticalIcon} from '@sanity/icons'\nimport {Flex} from '@sanity/ui'\nimport React, {createElement, memo, forwardRef, useMemo} from 'react'\nimport {\n PaneContextMenuButton,\n PaneHeader,\n PaneHeaderActionButton,\n usePane,\n usePaneRouter,\n} from '../../../../components'\nimport {TimelineMenu} from '../../timeline'\nimport {useDocumentPane} from '../../useDocumentPane'\nimport {isMenuNodeButton, isNotMenuNodeButton, resolveMenuNodes} from '../../../../menuNodes'\nimport {useStructureTool} from '../../../../useStructureTool'\nimport {PaneMenuItem} from '../../../../types'\nimport {Button, TooltipDelayGroupProvider} from '../../../../../ui-components'\nimport {structureLocaleNamespace} from '../../../../i18n'\nimport {DocumentHeaderTabs} from './DocumentHeaderTabs'\nimport {DocumentHeaderTitle} from './DocumentHeaderTitle'\nimport {useFieldActions, useTimelineSelector, useTranslation} from 'sanity'\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface DocumentPanelHeaderProps {\n menuItems: PaneMenuItem[]\n}\n\nexport const DocumentPanelHeader = memo(\n forwardRef(function DocumentPanelHeader(\n _props: DocumentPanelHeaderProps,\n ref: React.ForwardedRef<HTMLDivElement>,\n ) {\n const {menuItems} = _props\n const {\n onMenuAction,\n onPaneClose,\n onPaneSplit,\n menuItemGroups,\n schemaType,\n timelineStore,\n ready,\n views,\n unstable_languageFilter,\n } = useDocumentPane()\n const {features} = useStructureTool()\n const {index, BackLink, hasGroupSiblings} = usePaneRouter()\n const {actions: fieldActions} = useFieldActions()\n\n const menuNodes = useMemo(\n () =>\n resolveMenuNodes({actionHandler: onMenuAction, fieldActions, menuItems, menuItemGroups}),\n [onMenuAction, fieldActions, menuItemGroups, menuItems],\n )\n\n const menuButtonNodes = useMemo(() => menuNodes.filter(isMenuNodeButton), [menuNodes])\n const contextMenuNodes = useMemo(() => menuNodes.filter(isNotMenuNodeButton), [menuNodes])\n const showTabs = views.length > 1\n\n // Subscribe to external timeline state changes\n const rev = useTimelineSelector(timelineStore, (state) => state.revTime)\n\n const {collapsed, isLast} = usePane()\n // Prevent focus if this is the last (non-collapsed) pane.\n const tabIndex = isLast && !collapsed ? -1 : 0\n\n // there are three kinds of buttons possible:\n //\n // 1. split pane - creates a new split pane\n // 2. close split pane — closes the current split pane\n // 3. close pane group — closes the current pane group\n\n // show the split pane button if they're enabled and there is more than one\n // view available to use to create a split view\n const showSplitPaneButton = features.splitViews && onPaneSplit && views.length > 1\n\n // show the split pane button close button if the split button is showing\n // and there is more than one split pane open (aka has-siblings)\n const showSplitPaneCloseButton = showSplitPaneButton && hasGroupSiblings\n\n // show the pane group close button if the `showSplitPaneCloseButton` is\n // _not_ showing (the split pane button replaces the group close button)\n // and if the back button is not showing (the back button and the close\n // button) do the same thing and shouldn't be shown at the same time)\n const showPaneGroupCloseButton = !showSplitPaneCloseButton && !features.backButton\n const {t} = useTranslation(structureLocaleNamespace)\n\n return (\n <TooltipDelayGroupProvider>\n <PaneHeader\n border\n ref={ref}\n loading={!ready}\n title={<DocumentHeaderTitle />}\n tabs={showTabs && <DocumentHeaderTabs />}\n tabIndex={tabIndex}\n backButton={\n features.backButton &&\n index > 0 && (\n <Button\n as={BackLink}\n data-as=\"a\"\n icon={ArrowLeftIcon}\n mode=\"bleed\"\n tooltipProps={{content: t('pane-header.back-button.text')}}\n />\n )\n }\n subActions={<TimelineMenu chunk={rev} mode=\"rev\" placement=\"bottom-end\" />}\n actions={\n <Flex align=\"center\" gap={1}>\n {unstable_languageFilter.length > 0 && (\n <>\n {unstable_languageFilter.map((languageFilterComponent, idx) => {\n return createElement(languageFilterComponent, {\n // eslint-disable-next-line react/no-array-index-key\n key: `language-filter-${idx}`,\n schemaType,\n })\n })}\n </>\n )}\n\n {menuButtonNodes.map((item) => (\n <PaneHeaderActionButton key={item.key} node={item} />\n ))}\n\n <PaneContextMenuButton nodes={contextMenuNodes} key=\"context-menu\" />\n\n {showSplitPaneButton && (\n <Button\n aria-label={t('buttons.split-pane-button.aria-label')}\n icon={SplitVerticalIcon}\n key=\"split-pane-button\"\n mode=\"bleed\"\n onClick={onPaneSplit}\n tooltipProps={{content: t('buttons.split-pane-button.tooltip')}}\n />\n )}\n\n {showSplitPaneCloseButton && (\n <Button\n icon={CloseIcon}\n key=\"close-view-button\"\n mode=\"bleed\"\n onClick={onPaneClose}\n tooltipProps={{content: t('buttons.split-pane-close-button.title')}}\n />\n )}\n\n {showPaneGroupCloseButton && (\n <Button\n icon={CloseIcon}\n key=\"close-view-button\"\n mode=\"bleed\"\n tooltipProps={{content: t('buttons.split-pane-close-group-button.title')}}\n as={BackLink}\n />\n )}\n </Flex>\n }\n />\n </TooltipDelayGroupProvider>\n )\n }),\n)\n","import React, {memo, useCallback, useEffect, useRef, useState} from 'react'\nimport {DocumentInspector, DocumentInspectorMenuItem, useUnique} from 'sanity'\n\ninterface InspectorMenuItemProps {\n documentId: string\n documentType: string\n index: number\n setMenuItem: (index: number, node: DocumentInspectorMenuItem) => void\n useMenuItem: NonNullable<DocumentInspector['useMenuItem']>\n}\n\nconst InspectorMenuItem = memo(function InspectorMenuItem(props: InspectorMenuItemProps) {\n const {documentId, documentType, index, setMenuItem, useMenuItem} = props\n\n const node = useUnique(\n useMenuItem({\n documentId,\n documentType,\n }),\n )\n\n useEffect(() => {\n setMenuItem(index, node)\n }, [index, node, setMenuItem])\n\n return <></>\n})\n\ninterface DocumentInspectorMenuItemsResolverProps {\n documentId: string\n documentType: string\n inspectors: DocumentInspector[]\n onMenuItems: (items: DocumentInspectorMenuItem[]) => void\n}\n\n// The menu item in a document inspector are resolved in a React hook (`useMenuItem`).\n// This means that the menu item needs to be resolved in a React component (in accordance with the rules of hooks).\n// In this component, we map over the configured inspectors and render a `InspectorMenuItem` for each.\n// The `InspectorMenuItem` will resolve the menu item in a React hook and call the `setMenuItem` callback\n// with the resolved menu item and the index of the inspector.\n// Finally, we call the `onMenuItems` callback with the resolved menu items.\nexport function DocumentInspectorMenuItemsResolver(props: DocumentInspectorMenuItemsResolverProps) {\n const {documentId, documentType, inspectors, onMenuItems} = props\n\n const len = inspectors.length\n const lenRef = useRef(len)\n\n const [menuItems, setMenuItems] = useState<DocumentInspectorMenuItem[]>(() =>\n Array.from(new Array(len)),\n )\n\n const menuItemsRef = useRef(menuItems)\n\n useEffect(() => {\n if (lenRef.current !== len) {\n const newFieldActions = Array.from(new Array(len))\n\n for (let i = 0; i < len; i++) {\n newFieldActions[i] = menuItemsRef.current[i]\n }\n\n lenRef.current = len\n\n setMenuItems(() => {\n menuItemsRef.current = newFieldActions\n return newFieldActions\n })\n }\n }, [len])\n\n const setMenuItem = useCallback((index: number, node: DocumentInspectorMenuItem) => {\n setMenuItems((prev) => {\n const next = [...prev]\n next[index] = node\n menuItemsRef.current = next\n return next\n })\n }, [])\n\n useEffect(() => {\n onMenuItems(menuItems.filter(Boolean))\n }, [menuItems, onMenuItems])\n\n return (\n <>\n {inspectors.map(\n (inspector, inspectorIndex) =>\n inspector.useMenuItem && (\n <InspectorMenuItem\n documentId={documentId}\n documentType={documentType}\n index={inspectorIndex}\n key={inspector.name}\n setMenuItem={setMenuItem}\n useMenuItem={inspector.useMenuItem}\n />\n ),\n )}\n </>\n )\n}\n","import {JsonIcon, EarthAmericasIcon} from '@sanity/icons'\nimport type {StructureToolFeatures, PaneMenuItem} from '../../types'\nimport {INSPECT_ACTION_PREFIX} from './constants'\nimport type {DocumentInspector, DocumentInspectorMenuItem, TFunction} from 'sanity'\n\ninterface GetMenuItemsParams {\n currentInspector?: DocumentInspector\n features: StructureToolFeatures\n hasValue: boolean\n inspectors: DocumentInspector[]\n previewUrl?: string | null\n inspectorMenuItems: DocumentInspectorMenuItem[]\n t: TFunction\n}\n\nfunction getInspectorItems({\n currentInspector,\n hasValue,\n inspectors,\n inspectorMenuItems,\n}: GetMenuItemsParams): PaneMenuItem[] {\n return inspectors\n .map((inspector, index) => {\n const menuItem = inspectorMenuItems[index]\n\n if (!menuItem || menuItem.hidden) return null\n\n return {\n action: `${INSPECT_ACTION_PREFIX}${inspector.name}`,\n group: menuItem.showAsAction ? undefined : 'inspectors',\n icon: menuItem.icon,\n isDisabled: !hasValue,\n selected: currentInspector?.name === inspector.name,\n shortcut: menuItem.hotkeys?.join('+'),\n showAsAction: menuItem.showAsAction,\n title: menuItem.title,\n tone: menuItem.tone,\n }\n })\n .filter(Boolean) as PaneMenuItem[]\n}\n\nfunction getInspectItem({hasValue, t}: GetMenuItemsParams): PaneMenuItem {\n return {\n action: 'inspect',\n group: 'inspectors',\n title: t('document-inspector.menu-item.title'),\n icon: JsonIcon,\n isDisabled: !hasValue,\n shortcut: 'Ctrl+Alt+I',\n }\n}\n\nexport function getProductionPreviewItem({previewUrl, t}: GetMenuItemsParams): PaneMenuItem | null {\n if (!previewUrl) return null\n\n return {\n action: 'production-preview',\n group: 'links',\n title: t('production-preview.menu-item.title'),\n icon: EarthAmericasIcon,\n shortcut: 'Ctrl+Alt+O',\n }\n}\n\nexport function getMenuItems(params: GetMenuItemsParams): PaneMenuItem[] {\n const inspectorItems = getInspectorItems(params)\n const items = [\n // Get production preview item\n getProductionPreviewItem(params),\n ].filter(Boolean) as PaneMenuItem[]\n\n return [\n ...inspectorItems,\n\n // TODO: convert to inspector or document view?\n getInspectItem(params),\n\n ...items,\n ]\n}\n","import {Card, Code, Stack, Text} from '@sanity/ui'\nimport React from 'react'\nimport {ErrorPane} from '../../error'\nimport {Translate, isDev, useTranslation} from 'sanity'\n\ninterface DocumentLayoutErrorProps {\n currentMinWidth?: number\n documentType?: string\n minWidth?: number\n paneKey: string\n value?: Record<string, unknown>\n}\n\nexport function DocumentLayoutError(props: DocumentLayoutErrorProps) {\n const {documentType, value, currentMinWidth, paneKey, minWidth} = props\n const {t} = useTranslation()\n\n return (\n <ErrorPane\n currentMinWidth={currentMinWidth}\n flex={2.5}\n minWidth={minWidth}\n paneKey={paneKey}\n title={\n <Translate\n t={t}\n i18nKey=\"panes.document-pane.document-unknown-type.title\"\n values={{documentType}}\n />\n }\n tone=\"caution\"\n >\n <Stack space={4}>\n {documentType && (\n <Text as=\"p\">\n <Translate\n t={t}\n i18nKey=\"panes.document-pane.document-unknown-type.text\"\n values={{documentType}}\n />\n </Text>\n )}\n\n {!documentType && (\n <Text as=\"p\">{t('panes.document-pane.document-unknown-type.without-schema.text')}</Text>\n )}\n\n {isDev && value && (\n /* eslint-disable i18next/no-literal-string */\n <>\n <Text as=\"p\">Here is the JSON representation of the document:</Text>\n\n <Card padding={3} overflow=\"auto\" radius={2} shadow={1} tone=\"inherit\">\n <Code language=\"json\" size={[1, 1, 2]}>\n {JSON.stringify(value, null, 2)}\n </Code>\n </Card>\n </>\n /* eslint-enable i18next/no-literal-string */\n )}\n </Stack>\n </ErrorPane>\n )\n}\n","import {useElementRect, DialogProvider, Flex, PortalProvider, DialogProviderProps} from '@sanity/ui'\nimport {useState, useCallback, useMemo} from 'react'\nimport {useTranslation} from 'react-i18next'\nimport {Path} from 'sanity-diff-patch'\nimport styled from 'styled-components'\nimport isHotkey from 'is-hotkey'\nimport {usePaneLayout, Pane, PaneFooter} from '../../../components'\nimport {DOCUMENT_PANEL_PORTAL_ELEMENT} from '../../../constants'\nimport {structureLocaleNamespace} from '../../../i18n'\nimport {useStructureTool} from '../../../useStructureTool'\nimport {DocumentOperationResults} from '../DocumentOperationResults'\nimport {\n DOCUMENT_PANEL_INITIAL_MIN_WIDTH,\n DOCUMENT_INSPECTOR_MIN_WIDTH,\n DOCUMENT_PANEL_MIN_WIDTH,\n} from '../constants'\nimport {DocumentPanel} from '../documentPanel'\nimport {DocumentActionShortcuts} from '../keyboardShortcuts'\nimport {DocumentStatusBar} from '../statusBar'\nimport {useDocumentPane} from '../useDocumentPane'\nimport {DocumentPanelHeader} from '../documentPanel/header'\nimport {DocumentInspectorMenuItemsResolver} from '../DocumentInspectorMenuItemsResolver'\nimport {usePreviewUrl} from '../usePreviewUrl'\nimport {TooltipDelayGroupProvider} from '../../../../ui-components'\nimport {getMenuItems} from '../menuItems'\nimport {DocumentLayoutError} from './DocumentLayoutError'\nimport {\n useZIndex,\n ChangeConnectorRoot,\n DocumentInspectorMenuItem,\n FieldActionsResolver,\n DocumentFieldActionNode,\n FieldActionsProvider,\n} from 'sanity'\n\nconst EMPTY_ARRAY: [] = []\n\nconst DIALOG_PROVIDER_POSITION: DialogProviderProps['position'] = [\n // We use the `position: fixed` for dialogs on narrower screens (first two media breakpoints).\n 'fixed',\n 'fixed',\n // And we use the `position: absolute` strategy (within panes) on wide screens.\n 'absolute',\n]\n\nconst StyledChangeConnectorRoot = styled(ChangeConnectorRoot)`\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n min-width: 0;\n`\n\nexport function DocumentLayout() {\n const {\n changesOpen,\n documentId,\n documentType,\n fieldActions,\n inspectOpen,\n inspector,\n inspectors,\n onFocus,\n onHistoryOpen,\n onMenuAction,\n onPathOpen,\n paneKey,\n schemaType,\n value,\n } = useDocumentPane()\n\n const {features} = useStructureTool()\n const {t} = useTranslation(structureLocaleNamespace)\n const {collapsed: layoutCollapsed} = usePaneLayout()\n const zOffsets = useZIndex()\n const previewUrl = usePreviewUrl(value)\n\n const [rootElement, setRootElement] = useState<HTMLDivElement | null>(null)\n const [footerElement, setFooterElement] = useState<HTMLDivElement | null>(null)\n const [headerElement, setHeaderElement] = useState<HTMLDivElement | null>(null)\n\n const [actionsBoxElement, setActionsBoxElement] = useState<HTMLDivElement | null>(null)\n const [documentPanelPortalElement, setDocumentPanelPortalElement] = useState<HTMLElement | null>(\n null,\n )\n\n const [inspectorMenuItems, setInspectorMenuItems] = useState<DocumentInspectorMenuItem[]>([])\n const [rootFieldActionNodes, setRootFieldActionNodes] = useState<DocumentFieldActionNode[]>([])\n\n const footerRect = useElementRect(footerElement)\n const headerRect = useElementRect(headerElement)\n const footerHeight = footerRect?.height\n const headerHeight = headerRect?.height\n const currentMinWidth =\n DOCUMENT_PANEL_INITIAL_MIN_WIDTH + (inspector ? DOCUMENT_INSPECTOR_MIN_WIDTH : 0)\n const minWidth = DOCUMENT_PANEL_MIN_WIDTH + (inspector ? DOCUMENT_INSPECTOR_MIN_WIDTH : 0)\n\n const currentInspector = useMemo(\n () => inspectors?.find((i) => i.name === inspector?.name),\n [inspectors, inspector?.name],\n )\n\n const hasValue = Boolean(value)\n\n const menuItems = useMemo(\n () =>\n getMenuItems({\n currentInspector,\n features,\n hasValue,\n inspectorMenuItems,\n inspectors,\n previewUrl,\n t,\n }),\n [currentInspector, features, hasValue, inspectorMenuItems, inspectors, previewUrl, t],\n )\n\n const handleKeyUp = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n for (const item of menuItems) {\n if (item.shortcut) {\n if (isHotkey(item.shortcut, event)) {\n event.preventDefault()\n event.stopPropagation()\n onMenuAction(item)\n return\n }\n }\n }\n },\n [onMenuAction, menuItems],\n )\n\n const onConnectorSetFocus = useCallback(\n (path: Path) => {\n onPathOpen(path)\n onFocus(path)\n },\n [onPathOpen, onFocus],\n )\n\n if (!schemaType) {\n return (\n <DocumentLayoutError\n currentMinWidth={currentMinWidth}\n documentType={documentType}\n minWidth={minWidth}\n paneKey={paneKey}\n value={value}\n />\n )\n }\n\n return (\n <>\n {inspectors.length > 0 && (\n <DocumentInspectorMenuItemsResolver\n documentId={documentId}\n documentType={documentType}\n inspectors={inspectors}\n onMenuItems={setInspectorMenuItems}\n />\n )}\n\n {fieldActions.length > 0 && schemaType && (\n <FieldActionsResolver\n actions={fieldActions}\n documentId={documentId}\n documentType={documentType}\n onActions={setRootFieldActionNodes}\n path={EMPTY_ARRAY}\n schemaType={schemaType}\n />\n )}\n\n <FieldActionsProvider actions={rootFieldActionNodes} path={EMPTY_ARRAY}>\n <DocumentActionShortcuts\n actionsBoxElement={actionsBoxElement}\n as={Pane}\n currentMinWidth={currentMinWidth}\n data-testid=\"document-pane\"\n flex={2.5}\n id={paneKey}\n minWidth={minWidth}\n onKeyUp={handleKeyUp}\n rootRef={setRootElement}\n >\n <DocumentPanelHeader ref={setHeaderElement} menuItems={menuItems} />\n\n <DialogProvider position={DIALOG_PROVIDER_POSITION} zOffset={zOffsets.portal}>\n <Flex direction=\"column\" flex={1} height={layoutCollapsed ? undefined : 'fill'}>\n <StyledChangeConnectorRoot\n data-testid=\"change-connector-root\"\n isReviewChangesOpen={changesOpen}\n onOpenReviewChanges={onHistoryOpen}\n onSetFocus={onConnectorSetFocus}\n >\n <DocumentPanel\n footerHeight={footerHeight || null}\n headerHeight={headerHeight || null}\n isInspectOpen={inspectOpen}\n rootElement={rootElement}\n setDocumentPanelPortalElement={setDocumentPanelPortalElement}\n />\n </StyledChangeConnectorRoot>\n </Flex>\n </DialogProvider>\n\n {/* These providers are added because we want the dialogs in `DocumentStatusBar` to be scoped to the document pane. */}\n {/* The portal element comes from `DocumentPanel`. */}\n <PortalProvider\n __unstable_elements={{[DOCUMENT_PANEL_PORTAL_ELEMENT]: documentPanelPortalElement}}\n >\n <DialogProvider position={DIALOG_PROVIDER_POSITION} zOffset={zOffsets.portal}>\n <PaneFooter ref={setFooterElement}>\n <TooltipDelayGroupProvider>\n <DocumentStatusBar actionsBoxRef={setActionsBoxElement} />\n </TooltipDelayGroupProvider>\n </PaneFooter>\n </DialogProvider>\n </PortalProvider>\n <DocumentOperationResults />\n </DocumentActionShortcuts>\n </FieldActionsProvider>\n </>\n )\n}\n","import {ComponentType} from 'react'\nimport {DocumentLayout} from './DocumentLayout'\nimport {DocumentLayoutProps, PluginOptions, useMiddlewareComponents} from 'sanity'\n\nfunction pick(plugin: PluginOptions) {\n return plugin.document?.components?.unstable_layout as ComponentType<\n Omit<DocumentLayoutProps, 'renderDefault'>\n >\n}\n\n/**\n * A hook that returns the document layout composed\n * by the Components API (`document.components.layout`).\n */\nexport function useDocumentLayoutComponent(): ComponentType<\n Omit<DocumentLayoutProps, 'renderDefault'>\n> {\n return useMiddlewareComponents({\n pick,\n defaultComponent: DocumentLayout,\n })\n}\n","import {Stack, Text} from '@sanity/ui'\nimport {memo, useMemo} from 'react'\nimport {fromString as pathFromString} from '@sanity/util/paths'\nimport {Path} from '@sanity/types'\nimport {DocumentPaneNode} from '../../types'\nimport {usePaneRouter} from '../../components'\nimport {ErrorPane} from '../error'\nimport {LoadingPane} from '../loading'\nimport {structureLocaleNamespace} from '../../i18n'\nimport {DocumentPaneProviderProps} from './types'\nimport {DocumentPaneProvider} from './DocumentPaneProvider'\nimport {useDocumentLayoutComponent} from './document-layout'\nimport {\n ReferenceInputOptionsProvider,\n SourceProvider,\n Translate,\n useDocumentType,\n useSource,\n useTemplatePermissions,\n useTemplates,\n useTranslation,\n} from 'sanity'\n\ntype DocumentPaneOptions = DocumentPaneNode['options']\n\n/**\n * @internal\n */\nexport const DocumentPane = memo(function DocumentPane(props: DocumentPaneProviderProps) {\n const {name: parentSourceName} = useSource()\n\n return (\n <SourceProvider name={props.pane.source || parentSourceName}>\n <DocumentPaneInner {...props} />\n </SourceProvider>\n )\n})\n\nfunction DocumentPaneInner(props: DocumentPaneProviderProps) {\n const {pane, paneKey} = props\n const {resolveNewDocumentOptions} = useSource().document\n const paneRouter = usePaneRouter()\n const options = usePaneOptions(pane.options, paneRouter.params)\n const {documentType, isLoaded: isDocumentLoaded} = useDocumentType(options.id, options.type)\n\n const DocumentLayout = useDocumentLayoutComponent()\n\n // The templates that should be creatable from inside this document pane.\n // For example, from the \"Create new\" menu in reference inputs.\n const templateItems = useMemo(() => {\n return resolveNewDocumentOptions({\n type: 'document',\n documentId: options.id,\n schemaType: options.type,\n })\n }, [options.id, options.type, resolveNewDocumentOptions])\n\n const [templatePermissions, isTemplatePermissionsLoading] = useTemplatePermissions({\n templateItems,\n })\n const isLoaded = isDocumentLoaded && !isTemplatePermissionsLoading\n\n const providerProps = useMemo(() => {\n return isLoaded && documentType && options.type !== documentType\n ? mergeDocumentType(props, options, documentType)\n : props\n }, [props, documentType, isLoaded, options])\n\n const {ReferenceChildLink, handleEditReference, groupIndex, routerPanesState} = paneRouter\n const childParams = routerPanesState[groupIndex + 1]?.[0].params || {}\n const routerPanesStateLength = routerPanesState.length\n const {parentRefPath} = childParams\n\n const activePath: {path: Path; state: 'selected' | 'pressed' | 'none'} = useMemo(() => {\n return parentRefPath\n ? {\n path: pathFromString(parentRefPath),\n state:\n // eslint-disable-next-line no-nested-ternary\n groupIndex >= routerPanesStateLength - 1\n ? 'none'\n : groupIndex >= routerPanesStateLength - 2\n ? 'selected'\n : 'pressed',\n }\n : {path: [], state: 'none'}\n }, [parentRefPath, groupIndex, routerPanesStateLength])\n\n const {t} = useTranslation(structureLocaleNamespace)\n\n if (options.type === '*' && !isLoaded) {\n return (\n <LoadingPane\n flex={2.5}\n minWidth={320}\n paneKey={paneKey}\n title={t('panes.document-pane.document-not-found.loading')}\n />\n )\n }\n\n if (!documentType) {\n return (\n <ErrorPane\n flex={2.5}\n minWidth={320}\n paneKey={paneKey}\n title={t('panes.document-pane.document-not-found.title')}\n >\n <Stack space={4}>\n <Text as=\"p\">\n <Translate\n t={t}\n i18nKey=\"panes.document-pane.document-not-found.text\"\n values={{id: options.id}}\n />\n </Text>\n </Stack>\n </ErrorPane>\n )\n }\n\n return (\n <DocumentPaneProvider\n // this needs to be here to avoid formState from being re-used across (incompatible) document types\n // see https://github.com/sanity-io/sanity/discussions/3794 for a description of the problem\n key={`${documentType}-${options.id}`}\n {...providerProps}\n >\n {/* NOTE: this is a temporary location for this provider until we */}\n {/* stabilize the reference input options formally in the form builder */}\n {/* eslint-disable-next-line react/jsx-pascal-case */}\n <ReferenceInputOptionsProvider\n EditReferenceLinkComponent={ReferenceChildLink}\n onEditReference={handleEditReference}\n initialValueTemplateItems={templatePermissions}\n activePath={activePath}\n >\n <DocumentLayout documentId={options.id} documentType={options.type} />\n </ReferenceInputOptionsProvider>\n </DocumentPaneProvider>\n )\n}\n\nfunction usePaneOptions(\n options: DocumentPaneOptions,\n params: Record<string, string | undefined> = {},\n): DocumentPaneOptions {\n const templates = useTemplates()\n\n return useMemo(() => {\n // The document type is provided, so return\n if (options.type && options.type !== '*') {\n return options\n }\n\n // Attempt to derive document type from the template configuration\n const templateName = options.template || params.template\n const template = templateName ? templates.find((t) => t.id === templateName) : undefined\n const documentType = template?.schemaType\n\n // No document type was found in a template\n if (!documentType) {\n return options\n }\n\n // The template provided the document type, so modify the pane’s `options` property\n return {...options, type: documentType}\n }, [options, params.template, templates])\n}\n\nfunction mergeDocumentType(\n props: DocumentPaneProviderProps,\n options: DocumentPaneOptions,\n documentType: string,\n): DocumentPaneProviderProps {\n return {\n ...props,\n pane: {\n ...props.pane,\n options: {...options, type: documentType},\n },\n }\n}\n","import {SortOrder} from './types'\n\nexport const PARTIAL_PAGE_LIMIT = 100\nexport const FULL_LIST_LIMIT = 2000\nexport const DEFAULT_ORDERING: SortOrder = {by: [{field: '_updatedAt', direction: 'desc'}]}\nexport const EMPTY_RECORD: Record<string, unknown> = {}\n","import * as PathUtils from '@sanity/util/paths'\nimport {\n isIndexSegment,\n isKeySegment,\n isReferenceSchemaType,\n ObjectField,\n ObjectFieldType,\n ObjectSchemaType,\n SanityDocument,\n SchemaType,\n} from '@sanity/types'\nimport {DocumentListPaneItem, SortOrder} from './types'\nimport {getPublishedId, collate} from 'sanity'\n\nexport function getDocumentKey(value: DocumentListPaneItem, index: number): string {\n return value._id ? getPublishedId(value._id) : `item-${index}`\n}\n\nexport function removePublishedWithDrafts(documents: SanityDocument[]): DocumentListPaneItem[] {\n return collate(documents).map((entry) => {\n const doc = entry.draft || entry.published\n return {\n ...doc,\n hasPublished: !!entry.published,\n hasDraft: !!entry.draft,\n }\n }) as any\n}\n\nconst RE_TYPE_NAME_IN_FILTER =\n /\\b_type\\s*==\\s*(['\"].*?['\"]|\\$.*?(?:\\s|$))|\\B(['\"].*?['\"]|\\$.*?(?:\\s|$))\\s*==\\s*_type\\b/\nexport function getTypeNameFromSingleTypeFilter(\n filter: string,\n params: Record<string, unknown> = {},\n): string | null {\n const matches = filter.match(RE_TYPE_NAME_IN_FILTER)\n\n if (!matches) {\n return null\n }\n\n const match = (matches[1] || matches[2]).trim().replace(/^[\"']|[\"']$/g, '')\n\n if (match[0] === '$') {\n const k = match.slice(1)\n const v = params[k]\n\n return typeof v === 'string' ? v : null\n }\n\n return match\n}\n\nexport function isSimpleTypeFilter(filter: string): boolean {\n return /^_type\\s*==\\s*['\"$]\\w+['\"]?\\s*$/.test(filter.trim())\n}\n\nexport function applyOrderingFunctions(order: SortOrder, schemaType: ObjectSchemaType): SortOrder {\n const orderBy = order.by.map((by) => {\n // Skip those that already have a mapper\n if (by.mapWith) {\n return by\n }\n\n const fieldType = tryResolveSchemaTypeForPath(schemaType, by.field)\n if (!fieldType) {\n return by\n }\n\n // Note: order matters here, since the jsonType of a date field is `string`,\n // but we want to apply `datetime()`, not `lower()`\n if (fieldExtendsType(fieldType, 'datetime')) {\n return {...by, mapWith: 'dateTime'}\n }\n\n if (fieldType.jsonType === 'string') {\n return {...by, mapWith: 'lower'}\n }\n\n return by\n })\n\n return orderBy.every((item, index) => item === order.by[index]) ? order : {...order, by: orderBy}\n}\n\nfunction tryResolveSchemaTypeForPath(baseType: SchemaType, path: string): SchemaType | undefined {\n const pathSegments = PathUtils.fromString(path)\n\n let current: SchemaType | undefined = baseType\n for (const segment of pathSegments) {\n if (!current) {\n return undefined\n }\n\n if (typeof segment === 'string') {\n current = getFieldTypeByName(current, segment)\n continue\n }\n\n const isArrayAccessor = isKeySegment(segment) || isIndexSegment(segment)\n if (!isArrayAccessor || current.jsonType !== 'array') {\n return undefined\n }\n\n const [memberType, otherType] = current.of || []\n if (otherType || !memberType) {\n // Can't figure out the type without knowing the value\n return undefined\n }\n\n if (!isReferenceSchemaType(memberType)) {\n current = memberType\n continue\n }\n\n const [refType, otherRefType] = memberType.to || []\n if (otherRefType || !refType) {\n // Can't figure out the type without knowing the value\n return undefined\n }\n\n current = refType\n }\n\n return current\n}\n\nfunction getFieldTypeByName(type: SchemaType, fieldName: string): SchemaType | undefined {\n if (!('fields' in type)) {\n return undefined\n }\n\n const fieldType = type.fields.find((field) => field.name === fieldName)\n return fieldType ? fieldType.type : undefined\n}\n\nexport function fieldExtendsType(field: ObjectField | ObjectFieldType, ofType: string): boolean {\n let current: SchemaType | undefined = field.type\n while (current) {\n if (current.name === ofType) {\n return true\n }\n\n if (!current.type && current.jsonType === ofType) {\n return true\n }\n\n current = current.type\n }\n\n return false\n}\n","import {SyncIcon} from '@sanity/icons'\nimport {Box, Container, Flex, Heading, Stack, Text} from '@sanity/ui'\nimport React, {useCallback, useEffect, useMemo, useState} from 'react'\nimport {SanityDocument} from '@sanity/types'\nimport styled from 'styled-components'\nimport {Button} from '../../../ui-components'\nimport {Delay, PaneContent, usePane, usePaneLayout, PaneItem} from '../../components'\nimport {DocumentListPaneItem, LoadingVariant} from './types'\nimport {FULL_LIST_LIMIT} from './constants'\nimport {structureLocaleNamespace} from '../../i18n'\nimport {\n CommandList,\n CommandListRenderItemCallback,\n GeneralPreviewLayoutKey,\n SanityDefaultPreview,\n getPublishedId,\n useSchema,\n useTranslation,\n Translate,\n LoadingBlock,\n} from 'sanity'\n\nconst RootBox = styled(Box)`\n position: relative;\n`\n\nconst CommandListBox = styled(Box)`\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n`\n\ninterface DocumentListPaneContentProps {\n childItemId?: string\n error: {message: string} | null\n filterIsSimpleTypeConstraint: boolean\n hasMaxItems?: boolean\n hasSearchQuery: boolean\n isActive?: boolean\n isLazyLoading: boolean\n isLoading: boolean\n items: DocumentListPaneItem[]\n layout?: GeneralPreviewLayoutKey\n loadingVariant?: LoadingVariant\n onListChange: () => void\n onRetry?: (event: unknown) => void\n paneTitle: string\n searchInputElement: HTMLInputElement | null\n showIcons: boolean\n}\n\nconst SKELETON_ITEMS = [...Array(30).keys()]\n\nfunction LoadingView(props: {layout?: GeneralPreviewLayoutKey}) {\n const {layout} = props\n\n return (\n <Stack paddingX={3} paddingY={2} paddingTop={0} space={1}>\n {SKELETON_ITEMS.map((num) => (\n <SanityDefaultPreview isPlaceholder layout={layout} key={num} />\n ))}\n </Stack>\n )\n}\n\nexport function DocumentListPaneContent(props: DocumentListPaneContentProps) {\n const {\n childItemId,\n error,\n filterIsSimpleTypeConstraint,\n hasMaxItems,\n hasSearchQuery,\n isActive,\n isLazyLoading,\n isLoading,\n items,\n layout,\n loadingVariant,\n onListChange,\n onRetry,\n paneTitle,\n searchInputElement,\n showIcons,\n } = props\n\n const schema = useSchema()\n\n const {collapsed: layoutCollapsed} = usePaneLayout()\n const {collapsed, index} = usePane()\n const [shouldRender, setShouldRender] = useState(false)\n const {t} = useTranslation(structureLocaleNamespace)\n\n const handleEndReached = useCallback(() => {\n if (isLoading || isLazyLoading || !shouldRender) return\n\n onListChange()\n }, [isLazyLoading, isLoading, onListChange, shouldRender])\n\n useEffect(() => {\n if (collapsed) return undefined\n\n const timer = setTimeout(() => {\n setShouldRender(true)\n }, 0)\n\n return () => {\n clearTimeout(timer)\n }\n }, [collapsed, items])\n\n const renderItem = useCallback<CommandListRenderItemCallback<SanityDocument>>(\n (item, {activeIndex}) => {\n const publishedId = getPublishedId(item._id)\n const isSelected = childItemId === publishedId\n const pressed = !isActive && isSelected\n const selected = isActive && isSelected\n const isLastItem = activeIndex === items.length - 1\n const showSpinner = isLastItem && isLazyLoading\n const showMaxItemsMessage = isLastItem && hasMaxItems\n\n return (\n <>\n <PaneItem\n icon={showIcons === false ? false : undefined}\n id={publishedId}\n layout={layout}\n marginBottom={1}\n pressed={pressed}\n schemaType={schema.get(item._type)}\n selected={selected}\n value={item}\n />\n\n {showSpinner && <LoadingBlock />}\n\n {showMaxItemsMessage && (\n <Box marginY={1} paddingX={3} paddingY={4}>\n <Text align=\"center\" muted size={1}>\n {t('panes.document-list-pane.max-items.text', {limit: FULL_LIST_LIMIT})}\n </Text>\n </Box>\n )}\n </>\n )\n },\n [childItemId, isActive, items.length, layout, schema, showIcons, hasMaxItems, isLazyLoading, t],\n )\n\n const noDocumentsContent = useMemo(() => {\n if (hasSearchQuery) {\n return (\n <Flex align=\"center\" direction=\"column\" height=\"fill\" justify=\"center\">\n <Container width={1}>\n <Box paddingX={4} paddingY={5}>\n <Text align=\"center\" muted>\n {t('panes.document-list-pane.no-documents.text')}\n </Text>\n </Box>\n </Container>\n </Flex>\n )\n }\n\n return (\n <Flex align=\"center\" direction=\"column\" height=\"fill\" justify=\"center\">\n <Container width={1}>\n <Box paddingX={4} paddingY={5}>\n <Text align=\"center\" muted>\n {filterIsSimpleTypeConstraint\n ? t('panes.document-list-pane.no-documents-of-type.text')\n : t('panes.document-list-pane.no-matching-documents.text')}\n </Text>\n </Box>\n </Container>\n </Flex>\n )\n }, [filterIsSimpleTypeConstraint, hasSearchQuery, t])\n\n const mainContent = useMemo(() => {\n if (!shouldRender) {\n return null\n }\n\n if (error) {\n return (\n <Flex align=\"center\" direction=\"column\" height=\"fill\" justify=\"center\">\n <Container width={1}>\n <Stack paddingX={4} paddingY={5} space={4}>\n <Heading as=\"h3\">{t('panes.document-list-pane.error.title')}</Heading>\n <Text as=\"p\">\n <Translate\n t={t}\n i18nKey=\"panes.document-list-pane.error.text\"\n values={{error: error.message}}\n components={{Code: ({children}) => <code>{children}</code>}}\n />\n </Text>\n\n {onRetry && (\n <Box>\n <Button\n icon={SyncIcon}\n onClick={onRetry}\n text={t('panes.document-list-pane.error.retry-button.text')}\n tone=\"primary\"\n />\n </Box>\n )}\n </Stack>\n </Container>\n </Flex>\n )\n }\n\n if (!isLoading && items.length === 0) {\n return noDocumentsContent\n }\n\n if (loadingVariant === 'initial' && isLoading) {\n return (\n <Delay ms={300}>\n <LoadingView layout={layout} />\n </Delay>\n )\n }\n\n if (loadingVariant === 'spinner' && isLoading) {\n return null\n }\n\n // prevents bug when panes won't render if first rendered while collapsed\n const key = `${index}-${collapsed}`\n\n return (\n <RootBox overflow=\"hidden\" height=\"fill\">\n <CommandListBox>\n <CommandList\n activeItemDataAttr=\"data-hovered\"\n ariaLabel={paneTitle}\n canReceiveFocus\n inputElement={searchInputElement}\n itemHeight={51}\n items={items}\n key={key}\n onEndReached={handleEndReached}\n onlyShowSelectionWhenActive\n overscan={10}\n paddingBottom={1}\n paddingX={3}\n renderItem={renderItem}\n wrapAround={false}\n />\n </CommandListBox>\n </RootBox>\n )\n // Explicitly don't include `noDocumentsContent` in the deps array, as it's\n // causing a visual bug where the \"No documents\" message is shown for a split second\n // when clearing a search query with no results\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n collapsed,\n error,\n handleEndReached,\n index,\n isLoading,\n items,\n layout,\n loadingVariant,\n // noDocumentsContent,\n onRetry,\n renderItem,\n searchInputElement,\n shouldRender,\n ])\n\n return (\n <PaneContent overflow={layoutCollapsed || loadingVariant === 'initial' ? 'hidden' : 'auto'}>\n {mainContent}\n </PaneContent>\n )\n}\n","import {ArrowLeftIcon} from '@sanity/icons'\nimport React, {memo, useMemo} from 'react'\nimport type {PaneMenuItem, PaneMenuItemGroup, StructureToolPaneActionHandler} from '../../types'\nimport {BackLink, PaneHeader, PaneHeaderActions, usePane} from '../../components'\nimport {Button, TooltipDelayGroupProvider} from '../../../ui-components'\nimport {useStructureTool} from '../../useStructureTool'\nimport type {SortOrder} from './types'\nimport type {GeneralPreviewLayoutKey, InitialValueTemplateItem} from 'sanity'\n\ninterface DocumentListPaneHeaderProps {\n contentAfter?: React.ReactNode\n index: number\n initialValueTemplates?: InitialValueTemplateItem[]\n menuItemGroups?: PaneMenuItemGroup[]\n menuItems?: PaneMenuItem[]\n setLayout: (layout: GeneralPreviewLayoutKey) => void\n setSortOrder: (sortOrder: SortOrder) => void\n title: string\n}\n\nexport const DocumentListPaneHeader = memo(\n ({\n contentAfter,\n index,\n initialValueTemplates = [],\n menuItemGroups = [],\n menuItems = [],\n setLayout,\n setSortOrder,\n title,\n }: DocumentListPaneHeaderProps) => {\n const {features} = useStructureTool()\n const {collapsed, isLast} = usePane()\n // Prevent focus if this is the last (non-collapsed) pane.\n const tabIndex = isLast && !collapsed ? -1 : 0\n\n const actionHandlers = useMemo((): Record<string, StructureToolPaneActionHandler> => {\n return {\n setLayout: ({layout: value}: {layout: GeneralPreviewLayoutKey}) => {\n setLayout(value)\n },\n setSortOrder: (sort: SortOrder) => {\n setSortOrder(sort)\n },\n }\n }, [setLayout, setSortOrder])\n\n return (\n <TooltipDelayGroupProvider>\n <PaneHeader\n actions={\n <PaneHeaderActions\n initialValueTemplateItems={initialValueTemplates}\n actionHandlers={actionHandlers}\n menuItemGroups={menuItemGroups}\n menuItems={menuItems}\n />\n }\n backButton={\n features.backButton &&\n index > 0 && (\n <Button\n as={BackLink}\n data-as=\"a\"\n icon={ArrowLeftIcon}\n mode=\"bleed\"\n tooltipProps={{content: 'Back'}}\n />\n )\n }\n contentAfter={contentAfter}\n tabIndex={tabIndex}\n title={title}\n />\n </TooltipDelayGroupProvider>\n )\n },\n)\n\nDocumentListPaneHeader.displayName = 'DocumentListPaneHeader'\n","import {SanityClient, SanityDocument} from '@sanity/client'\nimport {\n asyncScheduler,\n defer,\n merge,\n mergeMap,\n Observable,\n of,\n partition,\n share,\n take,\n throttleTime,\n throwError,\n timer,\n} from 'rxjs'\nimport {exhaustMapWithTrailing} from 'rxjs-exhaustmap-with-trailing'\nimport {SortOrder} from './types'\nimport {createSearchQuery, Schema, SearchOptions, SearchTerms, WeightedSearchOptions} from 'sanity'\nimport {getSearchableTypes, getSearchTypesWithMaxDepth} from 'sanity/_internalBrowser'\n\ninterface ListenQueryOptions {\n client: SanityClient\n filter: string\n limit: number\n params: Record<string, unknown>\n schema: Schema\n searchQuery: string\n sort: SortOrder\n staticTypeNames?: string[]\n maxFieldDepth?: number\n}\n\nexport function listenSearchQuery(options: ListenQueryOptions): Observable<SanityDocument[]> {\n const {client, schema, sort, limit, params, filter, searchQuery, staticTypeNames, maxFieldDepth} =\n options\n const sortBy = sort.by\n const extendedProjection = sort?.extendedProjection\n\n // Listen for changes with the given filter and params, and whenever a change occurs, we want to\n // re-fetch the documents that match the search query (see below).\n // We use a separate listener since the search query is too large to use in a listen query.\n const events$ = defer(() => {\n return client.listen(`*[${filter}]`, params, {\n events: ['welcome', 'mutation', 'reconnect'],\n includeResult: false,\n visibility: 'query',\n })\n }).pipe(\n mergeMap((ev, i) => {\n const isFirst = i === 0\n if (isFirst && ev.type !== 'welcome') {\n // If the first event is not welcome, it is most likely a reconnect and\n // if it's not a reconnect something is very wrong and we should throw.\n return throwError(\n () =>\n new Error(\n ev.type === 'reconnect'\n ? 'Could not establish EventSource connection'\n : `Received unexpected type of first event \"${ev.type}\"`,\n ),\n )\n }\n return of(ev)\n }),\n share(),\n )\n\n const [welcome$, mutationAndReconnect$] = partition(events$, (ev) => ev.type === 'welcome')\n\n return merge(\n welcome$.pipe(take(1)),\n mutationAndReconnect$.pipe(throttleTime(1000, asyncScheduler, {leading: true, trailing: true})),\n ).pipe(\n exhaustMapWithTrailing((event) => {\n // Get the types names to use for searching.\n // If we have a static list of types, we can skip fetching the types and use the static list.\n const typeNames$ = staticTypeNames\n ? of(staticTypeNames)\n : client.observable.fetch(`array::unique(*[${filter}][]._type)`, params)\n\n // Use the type names to create a search query and fetch the documents that match the query.\n return typeNames$.pipe(\n mergeMap((typeNames: string[]) => {\n const types = getSearchTypesWithMaxDepth(\n getSearchableTypes(schema).filter((type) => {\n return typeNames.includes(type.name)\n }),\n maxFieldDepth,\n )\n\n const searchTerms: SearchTerms = {\n filter,\n query: searchQuery || '',\n types,\n }\n\n const searchOptions: SearchOptions & WeightedSearchOptions = {\n __unstable_extendedProjection: extendedProjection,\n comments: [`findability-source: ${searchQuery ? 'list-query' : 'list'}`],\n limit,\n params,\n sort: sortBy,\n }\n\n const {query: createdQuery, params: createdParams} = createSearchQuery(\n searchTerms,\n searchOptions,\n )\n const doFetch = () => client.observable.fetch(createdQuery, createdParams)\n\n if (event.type === 'mutation' && event.visibility !== 'query') {\n // Even though the listener request specifies visibility=query, the events are not guaranteed to be delivered with visibility=query\n // If the event we are responding to arrives with visibility != query, we add a little delay to allow for the updated document to be available for queries\n // See https://www.sanity.io/docs/listening#visibility-c4786e55c3ff\n return timer(1200).pipe(mergeMap(doFetch))\n }\n return doFetch()\n }),\n )\n }),\n )\n}\n","import {useCallback, useEffect, useMemo, useState} from 'react'\nimport {concat, fromEvent, merge, of, Subject, throwError} from 'rxjs'\nimport {catchError, map, mergeMap, scan, startWith, take} from 'rxjs/operators'\nimport {DocumentListPaneItem, QueryResult, SortOrder} from './types'\nimport {getTypeNameFromSingleTypeFilter, removePublishedWithDrafts} from './helpers'\nimport {DEFAULT_ORDERING, FULL_LIST_LIMIT, PARTIAL_PAGE_LIMIT} from './constants'\nimport {listenSearchQuery} from './listenSearchQuery'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS, useClient, useSchema} from 'sanity'\nimport {useSearchMaxFieldDepth} from 'sanity/_internalBrowser'\n\nconst EMPTY_ARRAY: [] = []\n\nconst INITIAL_STATE: QueryResult = {\n error: null,\n onRetry: undefined,\n result: null,\n}\n\ninterface UseDocumentListOpts {\n apiVersion?: string\n filter: string\n params: Record<string, unknown>\n searchQuery: string | null\n sortOrder?: SortOrder\n}\n\ninterface DocumentListState {\n error: {message: string} | null\n hasMaxItems?: boolean\n isLazyLoading: boolean\n isLoading: boolean\n isSearchReady: boolean\n items: DocumentListPaneItem[]\n onListChange: () => void\n onRetry?: (event: unknown) => void\n}\n\nconst INITIAL_QUERY_RESULTS: QueryResult = {\n result: null,\n error: null,\n}\n\n/**\n * @internal\n */\nexport function useDocumentList(opts: UseDocumentListOpts): DocumentListState {\n const {filter, params: paramsProp, sortOrder, searchQuery, apiVersion} = opts\n const client = useClient({\n ...DEFAULT_STUDIO_CLIENT_OPTIONS,\n apiVersion: apiVersion || DEFAULT_STUDIO_CLIENT_OPTIONS.apiVersion,\n })\n const schema = useSchema()\n const maxFieldDepth = useSearchMaxFieldDepth()\n\n const [resultState, setResult] = useState<QueryResult>(INITIAL_STATE)\n const {onRetry, error, result} = resultState\n\n const documents = result?.documents\n\n // Filter out published documents that have drafts to avoid duplicates in the list.\n const items = useMemo(\n () => (documents ? removePublishedWithDrafts(documents) : EMPTY_ARRAY),\n [documents],\n )\n\n // A state variable to keep track of whether we are currently lazy loading the list.\n // This is used to determine whether we should show the loading spinner at the bottom of the list.\n const [isLazyLoading, setIsLazyLoading] = useState<boolean>(false)\n\n // A state to keep track of whether we have fetched the full list of documents.\n const [hasFullList, setHasFullList] = useState<boolean>(false)\n\n // A state to keep track of whether we should fetch the full list of documents.\n const [shouldFetchFullList, setShouldFetchFullList] = useState<boolean>(false)\n\n // Get the type name from the filter, if it is a simple type filter.\n const typeNameFromFilter = useMemo(\n () => getTypeNameFromSingleTypeFilter(filter, paramsProp),\n [filter, paramsProp],\n )\n\n // We can't have the loading state as part of the result state, since the loading\n // state would be updated whenever a mutation is performed in a document in the list.\n // Instead, we determine if the list is loading by checking if the result is null.\n // The result is null when:\n // 1. We are making the initial request\n // 2. The user has performed a search or changed the sort order\n const isLoading = result === null && !error\n\n // A flag to indicate whether we have reached the maximum number of documents.\n const hasMaxItems = documents?.length === FULL_LIST_LIMIT\n\n // This function is triggered when the user has scrolled to the bottom of the list\n // and we need to fetch more items.\n const onListChange = useCallback(() => {\n if (isLoading || hasFullList || shouldFetchFullList) return\n\n setShouldFetchFullList(true)\n }, [isLoading, hasFullList, shouldFetchFullList])\n\n const handleSetResult = useCallback(\n (res: QueryResult) => {\n if (res.error) {\n setResult(res)\n return\n }\n\n const documentsLength = res.result?.documents?.length || 0\n const isLoadingMoreItems = !res.error && res?.result === null && shouldFetchFullList\n\n // 1. When the result is null and shouldFetchFullList is true, we are loading _more_ items.\n // In this case, we want to wait for the next result and set the isLazyLoading state to true.\n if (isLoadingMoreItems) {\n setIsLazyLoading(true)\n return\n }\n\n // 2. If the result is not null, and less than the partial page limit, we know that\n // we have fetched the full list of documents. In this case, we want to set the\n // hasFullList state to true to prevent further requests.\n if (documentsLength < PARTIAL_PAGE_LIMIT && documentsLength !== 0 && !shouldFetchFullList) {\n setHasFullList(true)\n }\n\n // 3. If the result is null, we are loading items. In this case, we want to\n // wait for the next result.\n if (res?.result === null) {\n setResult((prev) => ({...(prev.error ? res : prev)}))\n return\n }\n\n // 4. Finally, set the result\n setIsLazyLoading(false)\n setResult(res)\n },\n [shouldFetchFullList],\n )\n\n const queryResults$ = useMemo(() => {\n const onRetry$ = new Subject<void>()\n const _onRetry = () => onRetry$.next()\n\n const limit = shouldFetchFullList ? FULL_LIST_LIMIT : PARTIAL_PAGE_LIMIT\n const sort = sortOrder || DEFAULT_ORDERING\n\n return listenSearchQuery({\n client,\n filter,\n limit,\n params: paramsProp,\n schema,\n searchQuery: searchQuery || '',\n sort,\n staticTypeNames: typeNameFromFilter ? [typeNameFromFilter] : undefined,\n maxFieldDepth,\n }).pipe(\n map((results) => ({\n result: {documents: results},\n error: null,\n })),\n startWith(INITIAL_QUERY_RESULTS),\n catchError((err) => {\n if (err instanceof ProgressEvent) {\n // todo: hack to work around issue with get-it (used by sanity/client) that propagates connection errors as ProgressEvent instances. This if-block can be removed once @sanity/client is par with a version of get-it that includes this fix: https://github.com/sanity-io/get-it/pull/127\n return throwError(() => new Error(`Request error`))\n }\n return throwError(() => err)\n }),\n catchError((err, caught$) => {\n return concat(\n of({result: null, error: err}),\n merge(fromEvent(window, 'online'), onRetry$).pipe(\n take(1),\n mergeMap(() => caught$),\n ),\n )\n }),\n scan((prev, next) => ({...prev, ...next, onRetry: _onRetry})),\n )\n }, [\n client,\n filter,\n paramsProp,\n schema,\n searchQuery,\n shouldFetchFullList,\n sortOrder,\n typeNameFromFilter,\n maxFieldDepth,\n ])\n\n useEffect(() => {\n const sub = queryResults$.subscribe(handleSetResult)\n\n return () => {\n sub.unsubscribe()\n }\n }, [handleSetResult, queryResults$])\n\n const reset = useCallback(() => {\n setHasFullList(false)\n setIsLazyLoading(false)\n setResult(INITIAL_STATE)\n setShouldFetchFullList(false)\n }, [])\n\n useEffect(() => {\n reset()\n }, [reset, filter, paramsProp, sortOrder, searchQuery])\n\n return {\n error,\n hasMaxItems,\n isLazyLoading,\n isLoading,\n isSearchReady: !error,\n items,\n onListChange,\n onRetry,\n }\n}\n","import React, {memo, useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {Box, Card, Code, TextInput} from '@sanity/ui'\nimport shallowEquals from 'shallow-equals'\nimport {isEqual} from 'lodash'\nimport {SearchIcon, SpinnerIcon} from '@sanity/icons'\nimport styled, {keyframes} from 'styled-components'\nimport {Observable, debounce, map, of, tap, timer} from 'rxjs'\nimport {useObservableCallback} from 'react-rx'\nimport {Pane} from '../../components/pane'\nimport {_DEBUG} from '../../constants'\nimport {useStructureToolSetting} from '../../useStructureToolSetting'\nimport {BaseStructureToolPaneProps} from '../types'\nimport {PaneMenuItem} from '../../types'\nimport {structureLocaleNamespace} from '../../i18n'\nimport {DEFAULT_ORDERING, EMPTY_RECORD} from './constants'\nimport {\n applyOrderingFunctions,\n getTypeNameFromSingleTypeFilter,\n isSimpleTypeFilter,\n} from './helpers'\nimport {DocumentListPaneContent} from './DocumentListPaneContent'\nimport {DocumentListPaneHeader} from './DocumentListPaneHeader'\nimport {LoadingVariant, SortOrder} from './types'\nimport {useDocumentList} from './useDocumentList'\nimport {\n GeneralPreviewLayoutKey,\n SourceProvider,\n useI18nText,\n useSchema,\n useSource,\n useTranslation,\n useUnique,\n} from 'sanity'\n\n/**\n * @internal\n */\nexport type DocumentListPaneProps = BaseStructureToolPaneProps<'documentList'>\n\nconst EMPTY_ARRAY: never[] = []\n\nconst rotate = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`\n\nconst AnimatedSpinnerIcon = styled(SpinnerIcon)`\n animation: ${rotate} 500ms linear infinite;\n`\n\nfunction useShallowUnique<ValueType>(value: ValueType): ValueType {\n const valueRef = useRef<ValueType>(value)\n if (!shallowEquals(valueRef.current, value)) {\n valueRef.current = value\n }\n return valueRef.current\n}\n\nconst addSelectedStateToMenuItems = (options: {\n menuItems?: PaneMenuItem[]\n sortOrderRaw?: SortOrder\n layout?: GeneralPreviewLayoutKey\n}) => {\n const {menuItems, sortOrderRaw, layout} = options\n\n return menuItems?.map((item) => {\n if (item.params?.layout) {\n return {\n ...item,\n selected: layout === item.params?.layout,\n }\n }\n\n if (item?.params?.by) {\n return {\n ...item,\n selected: isEqual(sortOrderRaw?.by, item?.params?.by || EMPTY_ARRAY),\n }\n }\n\n return {...item, selected: false}\n })\n}\n\n/**\n * @internal\n */\nexport const DocumentListPane = memo(function DocumentListPane(props: DocumentListPaneProps) {\n const {childItemId, index, isActive, isSelected, pane, paneKey} = props\n const schema = useSchema()\n const {name: parentSourceName} = useSource()\n\n const {\n defaultLayout = 'default',\n displayOptions,\n initialValueTemplates = EMPTY_ARRAY,\n menuItemGroups,\n menuItems,\n options,\n } = pane\n const {apiVersion, defaultOrdering = EMPTY_ARRAY, filter} = options\n const params = useShallowUnique(options.params || EMPTY_RECORD)\n const sourceName = pane.source\n const typeName = useMemo(() => getTypeNameFromSingleTypeFilter(filter, params), [filter, params])\n const showIcons = displayOptions?.showIcons !== false\n const [layout, setLayout] = useStructureToolSetting<GeneralPreviewLayoutKey>(\n typeName,\n 'layout',\n defaultLayout,\n )\n\n const {t} = useTranslation(structureLocaleNamespace)\n const {title} = useI18nText(pane)\n\n const [searchQuery, setSearchQuery] = useState<string>('')\n const [searchInputValue, setSearchInputValue] = useState<string>('')\n const [searchInputElement, setSearchInputElement] = useState<HTMLInputElement | null>(null)\n\n // A ref to determine if we should show the loading spinner in the search input.\n // This is used to avoid showing the spinner on initial load of the document list.\n // We only wan't to show the spinner when the user interacts with the search input.\n const showSearchLoadingRef = useRef<boolean>(false)\n\n // Ensure that we use the defaultOrdering value from structure builder if any as the default\n const defaultSortOrder = useMemo(() => {\n return defaultOrdering?.length > 0 ? {by: defaultOrdering} : DEFAULT_ORDERING\n }, [defaultOrdering])\n\n const [sortOrderRaw, setSortOrder] = useStructureToolSetting<SortOrder>(\n typeName,\n 'sortOrder',\n defaultSortOrder,\n )\n\n const sortWithOrderingFn =\n typeName && sortOrderRaw\n ? applyOrderingFunctions(sortOrderRaw, schema.get(typeName) as any)\n : sortOrderRaw\n\n const sortOrder = useUnique(sortWithOrderingFn)\n const filterIsSimpleTypeConstraint = isSimpleTypeFilter(filter)\n\n const {\n error,\n hasMaxItems,\n isLazyLoading,\n isLoading,\n isSearchReady,\n items,\n onListChange,\n onRetry,\n } = useDocumentList({\n apiVersion,\n filter,\n params,\n searchQuery: searchQuery?.trim(),\n sortOrder,\n })\n\n const menuItemsWithSelectedState = useMemo(\n () =>\n addSelectedStateToMenuItems({\n menuItems,\n sortOrderRaw,\n layout,\n }),\n [layout, menuItems, sortOrderRaw],\n )\n\n const handleQueryChange = useObservableCallback(\n (event$: Observable<React.ChangeEvent<HTMLInputElement>>) => {\n return event$.pipe(\n map((event) => event.target.value),\n tap(setSearchInputValue),\n debounce((value) => (value === '' ? of('') : timer(300))),\n tap(setSearchQuery),\n )\n },\n [],\n )\n\n const handleClearSearch = useCallback(() => {\n setSearchQuery('')\n setSearchInputValue('')\n }, [])\n\n const handleSearchKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Escape') {\n handleClearSearch()\n }\n },\n [handleClearSearch],\n )\n\n useEffect(() => {\n if (showSearchLoadingRef.current === false && !isLoading) {\n showSearchLoadingRef.current = true\n }\n\n return () => {\n showSearchLoadingRef.current = false\n }\n }, [isLoading])\n\n useEffect(() => {\n // Clear search field and reset showSearchLoadingRef ref\n // when switching between panes (i.e. when paneKey changes).\n handleClearSearch()\n showSearchLoadingRef.current = false\n }, [paneKey, handleClearSearch])\n\n const loadingVariant: LoadingVariant = useMemo(() => {\n const showSpinner = isLoading && items.length === 0 && showSearchLoadingRef.current\n\n if (showSpinner) return 'spinner'\n\n return 'initial'\n }, [isLoading, items.length])\n\n const searchInput = (\n <Box paddingX={3} paddingBottom={3}>\n <TextInput\n aria-label={t('panes.document-list-pane.search-input.aria-label')}\n autoComplete=\"off\"\n border={false}\n clearButton={Boolean(searchQuery)}\n disabled={!isSearchReady}\n fontSize={[2, 2, 1]}\n icon={loadingVariant === 'spinner' ? AnimatedSpinnerIcon : SearchIcon}\n onChange={handleQueryChange}\n onClear={handleClearSearch}\n onKeyDown={handleSearchKeyDown}\n padding={2}\n placeholder={t('panes.document-list-pane.search-input.placeholder')}\n radius={2}\n ref={setSearchInputElement}\n spellCheck={false}\n value={searchInputValue}\n />\n </Box>\n )\n\n return (\n <SourceProvider name={sourceName || parentSourceName}>\n <Pane\n currentMaxWidth={350}\n data-ui=\"DocumentListPane\"\n id={paneKey}\n maxWidth={640}\n minWidth={320}\n selected={isSelected}\n >\n {_DEBUG && (\n <Card padding={4} tone=\"transparent\">\n <Code>{pane.source || '(none)'}</Code>\n </Card>\n )}\n\n <DocumentListPaneHeader\n contentAfter={searchInput}\n index={index}\n initialValueTemplates={initialValueTemplates}\n menuItemGroups={menuItemGroups}\n menuItems={menuItemsWithSelectedState}\n setLayout={setLayout}\n setSortOrder={setSortOrder}\n title={title}\n />\n\n <DocumentListPaneContent\n childItemId={childItemId}\n error={error}\n filterIsSimpleTypeConstraint={filterIsSimpleTypeConstraint}\n hasMaxItems={hasMaxItems}\n hasSearchQuery={Boolean(searchQuery)}\n isActive={isActive}\n isLazyLoading={isLazyLoading}\n isLoading={isLoading}\n items={items}\n key={paneKey}\n layout={layout}\n loadingVariant={loadingVariant}\n onListChange={onListChange}\n onRetry={onRetry}\n paneTitle={title}\n searchInputElement={searchInputElement}\n showIcons={showIcons}\n />\n </Pane>\n </SourceProvider>\n )\n})\n"],"names":["Delay","_ref","children","ms","ready","setReady","useState","useEffect","timeoutId","setTimeout","clearTimeout","jsx","Fragment","structureLocaleNamespace","structureUsEnglishLocaleBundle","defineLocaleResourceBundle","locale","namespace","resources","Promise","resolve","then","require","DocTitle","props","document","documentValue","schema","useSchema","schemaType","get","_type","t","useTranslation","error","value","useValuePreview","errorMessage","message","title","style","color","RenderActionCollectionState","actions","actionProps","onActionComplete","GetHookCollectionState","onReset","hooks","args","RenderBadgeCollectionState","badges","badgeProps","rest","isClientError","e","POLL_INTERVAL","visiblePoll$","getVisiblePoll$","fromEvent","pipe","startWith","map","visibilityState","distinctUntilChanged","switchMap","visible","timer","EMPTY","shareReplay","refCount","bufferSize","getDocumentExistence","documentId","_ref2","versionedClient","draftId","getDraftId","publishedId","getPublishedId","requestOptions","uri","getDataUrl","concat","json","query","excludeContent","tag","observable","request","_ref3","omitted","nonExistant","filter","doc","reason","length","some","id","fetchCrossDatasetReferences","context","checkDocumentId","of","totalCount","references","currentDataset","config","dataset","url","catchError","statusCode","useInternalReferences","createHookFromObservableFactory","_ref4","documentStore","referencesClause","totalClause","fetchQuery","listenQuery","fetch","listen","transitions","throttleTime","useCrossDatasetReferences","_ref5","useReferringDocuments","useClient","DEFAULT_STUDIO_CLIENT_OPTIONS","useDocumentStore","internalReferences","isInternalReferencesLoading","useMemo","crossDatasetReferences","isCrossDatasetReferencesLoading","projectIds","Array","from","Set","crossDatasetReference","projectId","Boolean","sort","datasetNames","datasetName","hasUnknownDatasetNames","isLoading","PaneItemPreview","icon","layout","presence","isRecord","isValidElement","isString","isNumber","draft","published","useMemoObservable","getPreviewStateObservable","documentPreviewStore","_id","status","TooltipDelayGroupProvider","Flex","align","gap","DocumentPreviewPresence","DocumentStatusIndicator","tooltip","DocumentStatus","SanityDefaultPreview","getPreviewValueWithFallback","isPlaceholder","missingContext","Error","PaneRouterContext","createContext","index","groupIndex","siblingIndex","payload","params","hasGroupSiblings","groupLength","routerPanesState","BackLink","ChildLink","ReferenceChildLink","handleEditReference","ParameterizedLink","replaceCurrent","closeCurrentAndAfter","closeCurrent","duplicateCurrent","setView","setParams","setPayload","navigateIntent","createPathWithParams","forwardRef","ref","useContext","panes","slice","state","StateLink","PaneLayoutContext","usePaneLayout","pane","childId","childPayload","childParameters","documentType","parentRefPath","template","type","pathToString","currentPanes","nextParams","useUnique","nextPayload","nextState","currentGroup","currentSibling","nextSibling","nextGroup","nextPanes","usePaneRouter","EMPTY_ARRAY","ReferencePreviewLink","onClick","documentPresence","useDocumentPresence","useDocumentPreviewStore","Link","useCallback","LinkComponent","linkProps","name","PreviewCard","__unstable_focusRing","as","radius","_a","_b","_c","_d","_e","ChevronWrapper","styled","Box","__template","CrossDatasetReferencesDetails","default","details","CrossDatasetReferencesSummary","summary","Table","table","_ref7","theme","rem","sanity","space","_ref8","_ref9","DocumentIdFlex","OtherReferenceCount","difference","padding","jsxs","Inline","Text","size","muted","count","Tooltip","portal","placement","content","InfoOutlineIcon","ConfirmDeleteDialogBody","_ref10","documentTitle","action","onReferenceLinkClick","toast","useToast","renderPreviewItem","item","UnknownIcon","subtitle","Translate","i18nKey","components","DocumentTitle","normalizedDatasetNames","datasetSubtitle","datasets","join","direction","Card","tone","flex","WarningOutlineIcon","marginLeft","values","shadow","Stack","marginBottom","borderTop","marginTop","paddingY","paddingX","DocumentsIcon","textOverflow","documentCount","ChevronDownIcon","overflow","paddingTop","minWidth","weight","reference","_ref11","justify","CopyToClipboard","text","onCopy","push","Button","mode","CopyIcon","tooltipProps","DialogBody","LoadingContainer","attrs","ConfirmDeleteDialog","_ref12","onCancel","onConfirm","dialogId","useId","showConfirmButton","Dialog","width","header","footer","cancelButton","confirmButton","onClose","onClickOutside","LoadingBlock","showText","ConfirmDeleteDialogContainer","setError","handleRetry","ErrorBoundary","onCatch","MENU_GROUP_POPOVER_PROPS","constrainSize","PaneMenuButtonItem","disabled","isAfterGroup","node","getI18nText","useGetI18nText","MenuDivider","expanded","child","childIndex","key","MenuGroup","popover","PaneContextMenuItemResolver","intent","PaneContextIntentMenuItem","PaneContextMenuItem","tooltipContent","useI18nText","TooltipOfDisabled","MenuItem","hotkeys","hotkey","split","iconRight","selected","CheckmarkIcon","onAction","pressed","intentLink","useIntentLink","handleClick","event","href","CONTEXT_MENU_POPOVER_PROPS","nodesHasTone","nodes","PaneContextMenuButton","hasCritical","hasCaution","MenuButton","button","ContextMenuButton","menu","Menu","nodeIndex","PANE_DEBUG","PANE_COLLAPSED_WIDTH","PANE_DEFAULT_MIN_WIDTH","PaneContext","Root","Layer","PaneDivider","_ref13","element","resize","dragging","setDragging","handleMouseDown","preventDefault","startX","pageX","handleMouseMove","deltaX","handleMouseUp","window","removeEventListener","addEventListener","onMouseDown","Pane","currentMinWidth","currentMinWidthProp","currentMaxWidth","currentMaxWidthProp","flexProp","minWidthProp","maxWidth","maxWidthProp","restProps","rootElement","setRootElement","collapse","collapsed","layoutCollapsed","expand","expandedElement","mount","find","p","paneIndex","indexOf","nextPane","isLast","nextCollapsed","forwardedRef","useForwardedRef","setRef","refValue","current","handleCollapse","handleExpand","contextValue","hidden","divider","LegacyLayerProvider","zOffset","Infinity","Provider","BoundaryElementProvider","height","usePane","displayName","PaneContent","forwardedAs","RootCard","PaneFooter","_f","_ref14","$border","css","Layout","TitleCard","_ref15","fg","bg","card","enabled","TitleTextSkeleton","TextSkeleton","TitleText","TabsBox","_ref16","rgba","base","PaneHeader","backButton","border","contentAfter","loading","subActions","tabs","tabIndex","paneElement","paneRect","useElementRect","layoutStyle","innerHeight","handleTitleClick","handleLayoutClick","showTabsOrSubActions","LayerProvider","paddingBottom","sizing","paddingLeft","animated","marginRight","getDisabledReason","disabledReason","ariaLabel","isDisabled","PaneHeaderActionButton","PaneHeaderMenuItemActionButton","PaneHeaderMenuGroupActionButton","console","warn","PaneHeaderActionIntentButton","StatusButton","label","idx","_calcPaneResize","cache","left","right","sum","leftMinWidth","rightMinWidth","leftMaxWidth","Math","min","rightMaxWidth","minDeltaX","rightMinDeltaX","maxDeltaX","leftMaxDeltaX","_deltaX","max","leftW","rightW","leftFlex","rightFlex","_getDOMPath","el","path","parentElement","childNodes","unshift","EMPTY_PATH","_sortElements","elements","WeakMap","set","_sortByElementPath","a","b","len","i","aIndex","bIndex","createPaneLayoutController","observers","optionsMap","userCollapsedElementSet","rootWidth","resizeDataMap","Map","resizing","add","_notifyObservers","delete","options","original","splice","leftElement","leftIndex","leftOptions","rightElement","rightOptions","offsetWidth","leftResizeData","rightResizeData","nextRootElement","setRootWidth","nextRootWidth","subscribe","observer","_elements","dataMap","lastElement","collapsedWidth","remaingWidth","userCollapsed","has","sizeCollapsed","resizeData","data","PaneLayout","onCollapse","onExpand","controller","rootRect","setState","paneLayout","isMenuNodeButton","renderAsButton","isNotMenuNodeButton","negate","resolveMenuNodes","fieldActions","menuItems","menuItemGroups","keyOffset","mapFieldActionToPaneMenuNode","groups","itemGroup","group","g","i18n","ungroupedItems","shortcut","actionHandler","showAsAction","childIdx","IntentButton","Link2","linkRef","IntentLink","role","InsufficientPermissionsMessageTooltip","_ref17","reveal","currentUser","useCurrentUser","InsufficientPermissionsMessage","POPOVER_PROPS","getIntent","templates","typeName","templateId","baseParams","initialDocumentId","parameters","PaneHeaderCreateButton","_ref18","templateItems","useTemplates","templatePermissions","isTemplatePermissionsLoading","useTemplatePermissions","nothingGranted","every","permission","granted","permissionsById","reduce","acc","AddIcon","firstItem","permissions","itemIndex","isNonNullable","hashObject","sortObject","v","isArray","Object","entries","_ref19","_ref20","keyA","keyB","localeCompare","normalize","JSON","parse","stringify","PaneHeaderActions","memo","initialValueTemplateItems","initialValueTemplateItemsFromStructure","actionHandlers","EMPTY_OBJECT","handleAction","handler","menuNodes","actionNodes","contextMenuNodes","initialValueTemplateItemFromMenuItems","menuItemIndex","intentParams","templateParams","_ref21","initialValueTemplateItem","description","combinedInitialValueTemplates","uniqBy","MissingSchemaType","Code","media","getIconWithFallback","defaultIcon","PaneItem","margin","hasSchemaType","clicked","setClicked","preview","isSanityDocument","DocumentIcon","opacity","ChevronRightIcon","FolderIcon","metaKey","DocumentPaneContext","useDocumentPane","documentPane","DISABLED_REASON_TITLE_KEY","NOTHING_TO_DELETE","NOT_READY","DeleteAction","_ref22","onComplete","setIsDeleting","paneSetIsDeleting","deleteOp","useDocumentOperation","isDeleting","isConfirmDialogOpen","setConfirmDialogOpen","handleCancel","handleConfirm","execute","handle","isPermissionsLoading","useDocumentPairPermissions","TrashIcon","onHandle","dialog","component","DISABLED_REASON_KEY","NO_CHANGES","NOT_PUBLISHED","DiscardChangesAction","_ref23","liveEdit","discardChanges","ResetIcon","NOTHING_TO_DUPLICATE","DuplicateAction","_ref24","duplicate","useRouter","isDuplicating","setDuplicating","dupeId","uuid","duplicateSuccess","firstValueFrom","pair","operationEvents","op","HistoryRestoreAction","_ref25","revision","restore","useDocumentOperationEvent","prevEvent","useRef","isRevisionInitialVersion","isRevisionLatestVersion","RestoreIcon","DocumentPublished","defineEvent","version","LIVE_EDIT_ENABLED","ALREADY_PUBLISHED","publishedAt","AlreadyPublished","_ref26","timeSincePublished","useRelativeTime","PublishAction","publishState","setPublishState","publish","validationStatus","useValidationStatus","syncState","useSyncState","changesOpen","onHistoryOpen","editState","useEditState","_rev","hasValidationErrors","validation","isValidationErrorMarker","publishScheduled","setPublishScheduled","isSyncing","isValidating","_updatedAt","hasDraft","doPublish","validationComplete","didPublish","delay","telemetry","useTelemetry","log","publishedImmediately","_createdAt","previouslyPublished","PublishIcon","transactionSyncLock","UnpublishAction","_ref27","unpublish","UnpublishIcon","LiveEditBadge","_DEBUG","EMPTY_PARAMS","LOADING_PANE","Symbol","DOCUMENT_PANEL_PORTAL_ELEMENT","activePanes","setActivePanes","getIntentState","routerState","editDocumentId","isTemplate","canHandleIntent","call","schemaTypeName","paneParams","legacyEditParamsToState","decodeURIComponent","err","encodePanesSegment","encodeChunks","encodeURIComponent","legacyEditParamsToPath","toState","pathSegment","parsePanesSegment","toPath","router","route","create","intents","transform","panePattern","isParam","str","test","isPayloadLike","exclusiveParams","isTruthy","parseChunks","chunks","initial","sibling","chunk","tryParseBase64Payload","firstSibling","paneIsFirstSibling","sameAsFirst","encodedPayload","encodeJsonParams","encodedParams","entry","valueFromFirstSibling","includes","_ref28","flat","parseOldPanesSegment","restOfSiblings","segment","omit","buffer","match","payloadChunk","tryParsePayload","decodeJsonParams","commentsLocaleNamespace","commentsUsEnglishLocaleBundle","DOCUMENT_PANEL_MIN_WIDTH","DOCUMENT_PANEL_INITIAL_MIN_WIDTH","DOCUMENT_INSPECTOR_MIN_WIDTH","DOCUMENT_INSPECTOR_MAX_WIDTH","INSPECT_ACTION_PREFIX","DEFAULT_MENU_ITEM_GROUPS","HISTORY_INSPECTOR_NAME","VALIDATION_INSPECTOR_NAME","COMMENTS_INSPECTOR_NAME","StyledAvatar","Avatar","SYMBOLS","WHITESPACE","RegExp","nameToInitials","fullName","namesArray","replace","charAt","toUpperCase","CommentsAvatar","user","userProp","initials","src","imageUrl","AVATAR_HEIGHT","INLINE_STYLE","SpacerAvatar","Span","span","_ref29","regular","fonts","weights","hovered","selectable","caution","MentionInlineBlock","userId","useUser","NormalText","NormalBlock","PortableTextWrap","block","normal","_ref30","h1","_ref31","h2","_ref32","h3","_ref33","h4","_ref34","h5","_ref35","h6","_ref36","blockquote","_ref37","code","_ref38","list","bullet","_ref39","number","_ref40","checkmarks","_ref41","listItem","_ref42","_ref43","_ref44","marks","strong","_ref45","em","_ref46","_ref47","underline","_ref48","strikeThrough","_ref49","link","_ref50","types","mention","CommentMessageSerializer","blocks","PortableText","mentionObject","defineField","fields","blockType","annotations","styles","lists","portableTextType","defineArrayMember","Schema","compile","editorSchemaType","SendIcon","Icon","fill","viewBox","xmlns","clipRule","d","stroke","strokeWidth","strokeLinejoin","MentionIcon","cx","cy","r","AddCommentIcon","CommentIcon","ReactionIcon","strokeLinecap","fillRule","useCommentHasChanged","prevMessage","isEqual","hasCommentMessageValue","isPortableTextTextBlock","c","isPortableTextSpan","CommentInputContext","React","CommentInputProvider","expandOnFocus","focused","focusOnMount","mentionOptions","onMentionMenuOpenChange","readOnly","editor","usePortableTextEditor","mentionsMenuOpen","setMentionsMenuOpen","mentionsSearchTerm","setMentionsSearchTerm","selectionAtMentionInsert","setSelectionAtMentionInsert","canSubmit","hasChanges","focusEditor","PortableTextEditor","focus","closeMentions","openMentions","getSelection","onBeforeInput","selection","cursorOffset","offset","focusChild","focusSpan","isInsertText","inputType","isDeleteText","isInsertingAtChar","lastIndexOfAt","substring","lastIndexOf","isWhitespaceCharBeforeCursorPosition","filterStartsWithSpaceChar","term","insertAtChar","insertChild","schemaTypes","useDidUpdate","insertMention","mentionSchemaType","inlineObjects","spanPath","findByPath","anchor","ctxValue","useCommentInput","ctx","InnerFlex","SKELETON_INLINE_STYLE","MentionsMenuItem","onSelect","loadedUser","avatar","canBeMentioned","handleSelect","Badge","fontSize","ITEM_HEIGHT","LIST_PADDING","MAX_ITEMS","FlexWrap","maxHeight","MentionsMenu","inputElement","searchTerm","setSearchTerm","commandListRef","useImperativeHandle","renderItem","itemProps","getItemDisabled","filteredOptions","deburredSearchTerm","deburr","toLocaleLowerCase","deburredOptions","option","filtered","matchA","startsWith","matchB","_inputElement","CommandList","activeItemDataAttr","fixedHeight","itemHeight","items","renderBlock","blockProps","renderChild","childProps","isMention","EVENT_LISTENER_OPTIONS","passive","useCursorElement","opts","cursorRect","setCursorRect","cursorElement","getBoundingClientRect","handleSelectionChange","sel","isCollapsed","rangeCount","range","getRangeAt","isWithinRoot","contains","commonAncestorContainer","rect","POPOVER_FALLBACK_PLACEMENTS","outline","PlaceholderWrapper","StyledPopover","Popover","_ref51","Editable","focusLock","placeholder","onFocus","onBlur","onKeyDown","onSubmit","popoverElement","setPopoverElement","rootElementRef","editableRef","mentionsMenuRef","usePortableTextEditorSelection","renderPlaceholder","handleClickOutside","useClickOutside","handleKeyDown","shiftKey","stopPropagation","initialSelectionAtEndOfContent","lastBlock","lastChild","point","_key","popoverContent","arrow","fallbackPlacements","open","referenceElement","PortableTextEditable","EditableWrap","ButtonDivider","_ref52","radii","CommentInputInner","withAvatar","handleMentionButtonClicked","Z_OFFSET","CommentInputDiscardDialog","handleCancelClick","handleConfirmClick","ThemeColorProvider","DialogProvider","SCROLL_INTO_VIEW_OPTIONS","behavior","inline","CommentInput","CommentInput2","onChange","onDiscardCancel","onDiscardConfirm","setFocused","editorRef","editorContainerRef","showDiscardDialog","setShowDiscardDialog","preDivRef","postDivRef","innerRef","editorInstanceKey","setEditorInstanceKey","keyGenerator","requestFocus","requestAnimationFrame","resetEditorInstance","handleChange","change","editorStateValue","getValue","scrollToEditor","scrollIntoView","handleSubmit","handleDiscardConfirm","discardDialogController","close","blur","scrollTo","reset","handleFocus","target","innerEl","focusLastDescendant","focusFirstDescendant","FLEX_GAP","COMMENT_REACTION_OPTIONS","shortName","COMMENT_REACTION_EMOJIS","EmojiText","GRID_COLUMNS","CommentReactionsMenu","focusableElements","setFocusableElements","focusedIndex","setFocusedIndex","handleRootKeyDown","focusableLen","prev","handleOptionClick","currentTarget","buttons","querySelectorAll","Grid","columns","o","emoji","UIButton","reaction","CommentReactionsMenuButton","onMenuClose","onMenuOpen","renderMenuButton","buttonElement","setButtonElement","setOpen","next","handleClose","btn","cloneElement","TEXT_SIZE","ContentStack","InlineText","TextBox","UserDisplayName","currentUserId","isFirst","separator","isCurrentUser","you","CommentReactionsUsersTooltip","CommentReactionsUsersTooltipContent","reactionName","userIds","showAnd","Content","_ref53","ReactionName","_ref54","TransparentCard","groupReactionsByName","reactions","grouped","sorted","_ref55","_ref56","nameA","nameB","indexA","findIndex","indexB","_ref57","animate","CommentReactionsBar","currentUserReactionNames","groupedReactions","_ref58","sortOrder","keys","fromEntries","sortedReactions","_ref59","_ref60","_ref61","wrap","_ref62","reactionsList","hasReacted","_ref63","FloatingCard","CommentsListItemContextMenu","canDelete","canEdit","isParent","onCopyLink","onDeleteStart","onEditStart","onReactionSelect","onStatusChange","showMenuButton","display","CheckmarkCircleIcon","UndoIcon","onOpen","EditIcon","LinkIcon","ContextMenuBox","TimeText","_ref64","isDark","dark","hues","gray","hex","InnerStack","ErrorFlex","RetryCardButton","RootStack","_ref65","TIME_AGO_OPTS","agoSuffix","CommentsListItemLayout","comment","hasError","isRetrying","onCreateRetry","onDelete","onEdit","onInputKeyDown","authorId","lastEditedAt","setValue","isEditing","setIsEditing","startMessage","menuOpen","setMenuOpen","hasValue","_optimisticState","hasReactions","commentInputRef","createdDate","Date","createdTimeAgo","useTimeAgo","formattedCreatedAt","format","formattedLastEditAt","displayError","handleMenuOpen","handleMenuClose","handleCopyLink","handleCreateRetry","handleDelete","cancelEdit","startDiscard","handleInputKeyDown","isDefaultPrevented","cancelDiscard","confirmDiscard","handleReactionSelect","handleEditSubmit","handleOpenStatusChange","toggleEdit","handleCloseMenu","ThreadCard","_ref66","MAX_COLLAPSED_REPLIES","StyledThreadCard","_ref67","bleed","bg2","ExpandButton","_ref68","medium","GhostButton","CommentsListItem","canReply","isSelected","onPathSelect","onReply","parentComment","replies","setCollapsed","didExpand","replyInputRef","isTopLayer","useLayer","mouseOver","setMouseOver","handleMouseEnter","handleMouseLeave","handleReplySubmit","nextComment","fieldPath","field","parentCommentId","threadId","handleThreadRootClick","origin","splicedReplies","showCollapseButton","expandButtonText","renderedReplies","reply","_state","onMouseEnter","onMouseLeave","CommentBreadcrumbs","titlePath","maxLength","beforeLength","ceil","afterLength","floor","showSeparator","CreateNewThreadInput","fieldName","onNewThreadCreate","commentInputHandle","Strong","HeaderFlex","BreadcrumbsButton","_ref69","CommentThreadLayout","breadcrumbs","canCreateNewThread","handleNewThreadCreate","handleBreadcrumbsClick","handleNewThreadClick","detail","crumbsTitlePath","lastCrumb","paddingRight","getEmptyStateMessages","resolved","CommentsListStatus","hasNoComments","emptyStateMessages","Container","groupThreads","comments","CommentsListInner","CommentsListInner2","selectedPath","boundaryElement","setBoundaryElement","scrollToComment","commentElement","querySelector","groupedThreads","showComments","_ref70","firstThreadId","newThreadSelected","reverse","threadIsSelected","CommentsList","getDialogCopy","thread","body","confirmButtonText","CommentDeleteDialog","commentId","dialogCopy","TextWithTone","fadeInKeyFrame","keyframes","CommentsOnboardingPopover","onDismiss","CommentsContext","INITIAL_STATE","cachedSystemGroups","useMentionOptions","projectStore","useProjectStore","userStore","useUserStore","client","list$","members$","res","members","m","isRobot","users$","ids","_ref71","users","getUsers","cached","systemGroup$","grants$","forkJoin","mergeMap","_ref72","grantPromises","grants","flattenedGrants","grantsPermissionOn","usersWithPermission","all","$alphabetical","sortBy","initial$","state$","sub","unsubscribe","useNotificationTarget","workspaceTitle","useWorkspace","previewState","handleGetNotificationValue","_ref73","inspect","location","getNotificationValue","createReactionKey","reactOperation","getComment","onUpdate","currentUserReactions","currentReaction","patch","unset","commit","reactionItem","addedAt","toISOString","optimisticReactionItem","setIfMissing","append","updateOperation","editOperation","editedComment","removeOperation","onRemove","createOperation","activeTool","getThreadLength","onCreate","onCreateError","runSetup","workspace","currentThreadLength","notification","tool","_dataset","_projectId","_weak","useCommentOperations","activeToolName","useRouterState","tools","handleCreate","handleRemove","handleEdit","handleUpdate","handleReact","operation","edit","react","remove","update","useComments","useCommentsSetup","CommentsSetupContext","CommentsEnabledContext","CommentsEnabledProvider","isEnabled","useResolveCommentsEnabled","useCommentsEnabled","CommentsOnboardingContext","VERSION","LOCAL_STORAGE_KEY","setLocalStorage","localStorage","setItem","_","getLocalStorage","getItem","CommentsOnboardingProvider","dismissed","setDismissed","handleDismiss","isDismissed","useCommentsOnboarding","useCommentsSelectedPath","CommentsSelectedPathContext","featureEnabled","useFeatureEnabled","useSource","unstable_comments","enabledFromConfig","getSchemaField","paths","PathUtils","fromString","firstPath","isObjectSchemaType","f","nextPath","toString","findArrayItemIndex","array","buildCommentBreadcrumbs","fieldPaths","currentSchemaType","forEach","seg","currentPath","previousPath","isKeySegment","hasOwnProperty","parentValue","getValueAtPath","currentValue","conditionalContext","parent","arrayItemIndex","invalid","isArrayItem","Number","resolveConditionalProperty","getSchemaTypeTitle","isArraySchemaType","arrayValue","objectType","objectField","currentField","allCurrentFields","anonymousField","currentTitle","objectFieldHidden","currentFieldHidden","isHidden","mergeCommentReactions","reactionsA","reactionsB","mergedReactions","result","createCommentsSet","commentsById","commentsReducer","nextCommentResult","nextCommentValue","restComments","updatedComment","optimisticReactions","incomingReactions","nextReactions","LISTEN_OPTIONS","events","includeResult","visibility","SORT_FIELD","SORT_ORDER","QUERY_FILTERS","QUERY_PROJECTION","QUERY_SORT_ORDER","QUERY","useCommentsStore","dispatch","useReducer","setLoading","initialFetch","handleListenerEvent","transition","listener$","events$","commentsAsArray","buildCommentThreadItems","parentComments","crumbs","hasInvalidBreadcrumb","bc","commentsCount","EMPTY_COMMENTS_DATA","CommentsProvider","isCommentsOpen","onCommentsOpen","setStatus","isRunningSetup","workspaceName","threadItemsByStatus","orderBy","handleOnCreate","handleOnUpdate","handleOnEdit","handleOnCreateError","API_VERSION","CommentsSetupProvider","originalClient","addonDatasetClient","setAddonDatasetClient","setIsRunningSetup","getAddonDatasetName","withConfig","apiVersion","handleCreateClient","addonDatasetName","requestTagPrefix","useCdn","withCredentials","handleRunSetup","method","CommentsSelectedPathProvider","setSelectedPath","handleSelectPath","position","zIndex","lineHeight","CommentsInspectorHeader","onViewChange","view","handleSetOpenView","handleSetResolvedView","BetaBadge","DoubleChevronRightIcon","FEEDBACK_FORM_LINK","FooterCard","CommentsInspectorFeedbackFooter","rel","LaunchIcon","RootLayer","CommentsInspector","CommentsInspectorInner","showDeleteDialog","setShowDeleteDialog","commentToDelete","setCommentToDelete","deleteLoading","setDeleteLoading","deleteError","setDeleteError","commentsListHandleRef","rootRef","uniqueParams","commentIdParamRef","didScrollToCommentFromParam","pushToast","onPathOpen","currentComments","handleChangeView","nextView","handleCloseInspector","navigator","clipboard","writeText","closable","catch","closeDeleteDialog","handlePathSelect","handleReply","handleDeleteConfirm","handleScrollToComment","handleStatusChange","nextStatus","handleDeselectPath","commentToScrollTo","useMenuItem","useMenuItem$1","commentsInspector","defineDocumentInspector","CommentsFieldButton","fieldTitle","onCommentAdd","onDiscard","addCommentButtonElement","setAddCommentButtonElement","hasComments","closePopover","handleDiscardCancel","handlePopoverKeyDown","SanityUIButton","HIGHLIGHT_BLOCK_VARIANTS","exit","CommentsField","renderDefault","CommentFieldInner","HighlightDiv","motion","div","_ref74","yellow","FieldStack","threadIdToScrollTo","setThreadIdToScrollTo","useBoundaryElement","stringPath","val","handleSetThreadToScrollTo","scrollToThreadId","handleCommentAdd","newThreadId","handleDiscard","scrollIntoViewIfNeededOpts","boundary","scrollMode","scrollIntoViewIfNeeded","internalComments","isAddingComment","__internal_comments","AnimatePresence","variants","CommentsDocumentLayout","CommentsDocumentLayoutInner","commentsEnabled","openInspector","inspector","handleOpenCommentsInspector","CommentsStudioLayout","definePlugin","inspectors","unstable_layout","form","studio","bundles","StructureToolContext","useStructureTool","structureTool","TIMELINE_ICON_COMPONENTS","AddCircleIcon","discardDraft","CloseIcon","editDraft","editLive","getTimelineEventIconComponent","UserAvatarStack","_ref75","AvatarStack","UserAvatar","withTooltip","IconWrapper","_ref76","borderColor","skeleton","_ref77","$selected","$disabled","IconBox","TimestampBox","_ref78","TIMELINE_ITEM_I18N_KEY_MAPPING","TIMELINE_ITEM_EVENT_TONE","withinSelection","TimelineItem","_ref79","isLatest","timestamp","iconComponent","authorUserIds","authors","isSelectable","dateFormat","useDateTimeFormat","dateStyle","timeStyle","formattedTimestamp","parsedDate","formattedDate","evt","createElement","dateTime","StackWrapper","ListWrapper","_ref80","$visible","Timeline","_ref81","disabledBeforeFirstChunk","hasMoreChunks","lastChunk","onLoadMore","firstChunk","mounted","setMounted","filteredChunks","selectedIndex","_ref82","activeIndex","endTimestamp","autoFocus","initialIndex","initialScrollAlign","onEndReached","onEndReachedIndexOffset","overscan","wrapAround","TimelineError","ErrorOutlineIcon","TimelineMenu","_ref83","setTimelineRange","setTimelineMode","timelineError","timelineStore","setButton","setPopover","useTimelineSelector","realRevChunk","sinceTime","handleOpen","handleGlobalKeyDown","useGlobalKeyDown","selectRev","revChunk","sinceId","revId","findRangeForRev","selectSince","sinceChunk","findRangeForSince","handleLoadMore","loadMore","formatParams","revLabel","sinceLabel","buttonLabel","DocumentInspectorHeader","closeButtonLabel","Resizer","onResize","onResizeStart","mouseXRef","Resizable","setElement","elementWidthRef","targetWidth","setTargetWidth","handleResizeStart","handleResize","w","DocumentInspectorPanel","closeInspector","features","resizablePanes","collectLatestAuthorAnnotations","diff","authorMap","visitDiff","annotation","author","previous","Scroller","ScrollContainer","ChangesInspector","scrollRef","onOlderRevision","selectionState","isComparingCurrent","documentContext","FieldWrapper","ChangeFieldWrapper","rootDiff","changeAnnotations","DiffTooltip","_ref84","Content$1","_ref85","NoChanges","DocumentChangeContext","ChangeList","changesInspector","reviewChanges","_ref86","since","_ref87","getPathTitles","s","jsonType","itemType","ofType","MARKER_ICON","warning","info","MARKER_TONE","ValidationInspector","marker","ValidationCard","errorInfo","setErrorInfo","level","DocumentNodePathBreadcrumbs","pathTitles","fontWeight","validationMarkers","hasErrors","isValidationError","hasWarnings","isValidationWarning","validationInspector","documentActions","documentBadges","MasterDetailIcon","prevActions","prevBadges","prevInspectors","plugins","lazy","canHandleCreateIntent","canHandleEditIntent","controlsDocumentTitle","SerializeError","constructor","parentPath","hint","withHelpUrl","helpId","HELP_URL","IMPLICIT_FIELDS","joinReferences","head","tail","schemaField","refTypes","to","refType","tailFields","tailWrapper","getExtendedProjection","ordering","ORDER_BY_UPDATED_AT","ns","by","ORDER_BY_CREATED_AT","DEFAULT_SELECTED_ORDERING_OPTION","DEFAULT_ORDERING_OPTIONS","maybeSerializeMenuItem","MenuItemBuilder","serialize","_context","spec","clone","getAction","getTitle","getI18n","getGroup","getIcon","getParams","getShowAsAction","arguments","undefined","TITLE_REQUIRED","ACTION_OR_INTENT_REQUIRED","ACTION_AND_INTENT_MUTUALLY_EXCLUSIVE","withSpec","builder","getOrderingMenuItem","_ref88","extendedProjection","SortIcon","getOrderingMenuItemsForSchemaType","orderings","maybeSerializeMenuItemGroup","MenuItemGroupBuilder","_title","_i18n","getId","ID_REQUIRED","disallowedPattern","validateId","disallowedChar","getStructureNodeId","camelCased","camelCase","getSlug","ComponentBuilder","getChild","getComponent","getOptions","getMenuItems","getMenuItemGroups","componentOptions","resolveTypeForDocument","getClient","GenericViewBuilder","kebabCase","isSerializable","maybeSerializeView","isComponentSpec","ComponentViewBuilder","componentOrSpec","userComponent","COMPONENT_REQUIRED","FormViewBuilder","createDocumentChildResolver","_ref89","resolveDocumentNode","itemId","_ref90","currentSegment","DocumentBuilder","paneId","getDocumentId","getSchemaType","initialValueTemplate","templateParameters","getInitialValueTemplate","getInitialValueTemplateParameters","views","getViews","urlId","DOCUMENT_ID_REQUIRED","viewIds","dupes","uniq","viewId","getDocumentOptions","documentFromEditor","documentFromEditorWithInitialValue","_ref91","layoutOptions","DEFAULT_INTENT_HANDLER","defaultIntentChecker","intentName","_ref92","isEdit","isCreate","typedSpec","paneFilter","typeNames","getTypeNamesFromFilter","initialValueTemplates","tpl","identity","InitialValueTemplateItemBuilder","getDescription","getTemplateId","getParameters","defaultInitialValueTemplateItems","getStructureBuilder","getTypeNames","ordered","maybeSerializeInitialValueTemplateItem","menuItemsFromInitialValueTemplateItems","noChildResolver","shallowIntentChecker","_ref93","GenericListBuilder","initialValueTemplatesSpecified","defaultLayout","getDefaultLayout","getCanHandleIntent","showIcons","displayOptions","getShowIcons","getInitialValueTemplates","validateFilter","trim","QUERY_PROVIDED_FOR_FILTER","createDocumentChildResolverForItem","parentItem","DocumentListBuilder","getApiVersion","getFilter","defaultOrdering","getDefaultOrdering","FILTER_REQUIRED","hasSimpleFilter","generateHelpUrl","API_VERSION_REQUIRED_FOR_CUSTOM_FILTER","inferInitialValueTemplates","inferTypeName","getSpec","flatMap","resolveNewDocumentOptions","getTypeNamesFromEqualityFilter","getTypeNamesFromInTypesFilter","pattern","matches","exec","candidate","normalized","getArgType","thing","ListBuilder","isPromise","isListItem","defaultCanHandleIntent","isDocumentListItem","resolveChildForItem","maybeSerializeListItem","ListItemBuilder","gotWhat","helpText","INVALID_LIST_ITEM","getItems","LIST_ITEMS_MUST_BE_ARRAY","serializedItems","dupeIds","dupeDesc","LIST_ITEM_IDS_MUST_BE_UNIQUE","showIcon","getShowIcon","titleIsOptional","SCHEMA_TYPE_NOT_FOUND","serializeOptions","listChild","originalChild","childOptions","createDefaultChildResolver","DocumentListItemBuilder","SCHEMA_TYPE_REQUIRED","DocumentTypeListBuilder","cloneWithoutDefaultIntentHandler","shouldOverride","override","shouldShowIcon","prepare","select","BUNDLED_DOC_TYPES","isBundledDocType","isDocumentType","isList","collection","getDocumentTypes","_ref94","n","getDocumentTypeListItems","getDocumentTypeListItem","startCase","childContext","getDocumentTypeList","typeNameOrSpec","StackCompactIcon","StackIcon","hasIcon","getDefaultStructure","createStructureBuilder","_ref95","defaultDocumentNode","source","configContext","getConfigContextFromSource","structureBuilder","defaults","documentTypeList","_len","_key2","documentTypeListItem","_len2","_key3","documentTypeListItems","_len3","_key4","_len4","_key5","documentWithInitialValueTemplate","_len5","_key6","defaultDocument","_len6","_key7","_len7","_key8","menuItem","_len8","_key9","menuItemGroup","_len9","_key10","_len10","_key11","documentList","_len11","_key12","documentListItem","_len12","_key13","orderingMenuItem","_len13","_key14","orderingMenuItemsForType","_len14","_key15","_len15","_key16","_len16","_key17","isValidElementType","uniqueId","StructureToolProvider","_ref96","structure","resolveStructure","setLayoutCollapsed","useConfigContextFromSource","S","rootPaneNode","splitPanes","splitViews","structureContext","ErrorPane","paneKey","getWaitMessages","thresholds","messageKey","isDev","merge","threshold","mapTo","DEFAULT_MESSAGE_KEY","LoadingPane","messageProp","resolvedMessage","currentMessage","setCurrentMessage","contentElement","setContentElement","_raf2","usePreviewUrl","previewUrl","setPreviewUrl","resolveProductionUrl","value$","useAsObservable","debounceTime","getInitialValueTemplateOpts","panePayload","structureNodeTemplate","templateName","urlTemplate","typeTemplates","DocumentPaneProvider","onFocusPath","unstable_fieldActions","fieldActionsResolver","unstable_languageFilter","languageFilterResolver","inspectorsResolver","presenceStore","usePresenceStore","paneRouter","setPaneParams","viewsProp","paneOptions","documentIdRaw","initialValueRaw","useInitialValue","initialValue","validationRaw","connectionState","useConnectionState","languageFilter","focusPath","setFocusPath","pathFromString","focusPathRef","activeViewId","timelineMode","setTimelineError","useTimelineStore","onError","rev","revTime","sinceAttributes","timelineDisplayed","timelineReady","isPristine","isDeleted","setPresence","subscription","nextPresence","inspectorName","setInspectorName","inspectParamRef","currentInspector","resolvedChangesInspector","inspectOpen","compareValue","displayed","newSince","newRev","nextFocusPath","setLocation","lastActiveAt","handleBlur","blurredPath","disableBlurRef","patchRef","toMutationPatches","patches","closeInspectorName","nextInspectorName","nextInspector","currentParams","closeResult","handleHistoryClose","handleHistoryOpen","handlePaneClose","handlePaneSplit","toggleLegacyInspect","toggle","handleMenuAction","handleLegacyInspectClose","openPath","onSetOpenPath","fieldGroupState","onSetFieldGroupState","collapsedPaths","onSetCollapsedPath","collapsedFieldSets","onSetCollapsedFieldSets","handleOnSetCollapsedPath","prevState","setAtPath","handleOnSetCollapsedFieldSet","handleSetActiveFieldGroup","groupName","requiredPermission","docId","docPermissionsInput","useDocumentValuePermissions","isNonExistent","hasNoPermission","updateActionDisabled","isActionEnabled","createActionDisabled","reconnecting","isLocked","formState","useFormState","comparisonValue","formStateRef","setOpenPath","ops","getExpandOperations","onHistoryClose","onInspectClose","onMenuAction","onPaneClose","onPaneSplit","onSetActiveFieldGroup","onSetCollapsedFieldSet","restParams","pathFromUrl","resolveKeyedPath","timeout","IGNORE_OPS","DocumentOperationResults","DocumentOperationResults2","cleanupId","duration","useStructureToolSetting","defaultValue","settingsStore","useSettingsStore","structureToolSettings","forNamespace","settings","forKey","newValue","VIEW_MODE_PARSED","VIEW_MODE_RAW","VIEW_MODES","lru","HLRU","isExpanded","keyPath","toggleExpanded","selectElement","createRange","removeAllRanges","selectNodeContents","addRange","maybeSelectAll","selectAll","keyCode","ctrlKey","isDocumentLike","JSONInspectorWrapper","_ref97","family","sizes","syntax","property","constant","string","boolean","Search","TextInput","SearchIcon","InspectDialog","dialogIdPrefix","viewModeId","onViewModeChange","viewMode","setParsedViewMode","setRawViewMode","bodyHeight","bottom","TabList","Tab","TabPanel","JSONInspector","search","language","onDoubleClick","SpacerButton","_ref98","pointerEvents","Banner","borderBottom","DeletedDocumentBanner","_ref99","revisionId","handleRestore","ReadOnlyIcon","DeprecatedDocumentTypeBanner","isDeprecatedSchemaType","deprecated","PermissionCheckBanner","_ref100","listFormat","useListFormat","roleTitles","roles","formatToParts","part","Roles","ReferenceChangedBanner","_g","routerReferenceId","parentGroup","parentSibling","parentId","hasHistoryOpen","referenceInfo","parentRefPathSegment","keyedSegmentIndex","unstable_observePathsDocumentPair","_ref101","availability","pathGet","snapshot","handleReloadReference","shouldHide","available","SyncIcon","useDocumentTitle","subscribed","usePrevious","LONG_ENOUGH_BUT_NOT_TOO_LONG","useConditionalToast","wasEnabled","TitleContainer","_ref102","heading","FormHeader","_ref103","isSingleton","__experimental_formPreviewTitle","Heading","ev","FormView","margins","patchChannel","createPatchChannel","documentEvents","tap","prepareMutationEvent","prepareRebaseEvent","hasRev","formRef","setFormRef","PresenceOverlay","FormBuilder","__internal_fieldActions","__internal_patchChannel","changed","onFieldGroupSelect","onPathBlur","onPathFocus","onSetFieldSetCollapsed","onSetPathCollapsed","Spinner","mutations","mut","fromMutationPatches","remotePatches","remoteMutations","localPatches","localMutations","DocumentBox","_ref104","DocumentPanel","footerHeight","headerHeight","isInspectOpen","setDocumentPanelPortalElement","parentPortal","usePortal","portalRef","documentScrollElement","setDocumentScrollElement","formContainerElement","activeView","portalElement","formViewHidden","activeViewNode","historical","lastNonDeletedRevId","inspectDialog","showInspector","PortalProvider","__unstable_elements","VirtualizerScrollInstanceProvider","scrollElement","containerElement","DIALOG_WIDTH_TO_UI_WIDTH","small","large","full","ConfirmDialog","ConfirmDialogContent","preventOverflow","cancelButtonIcon","cancelButtonText","confirmButtonIcon","ModalDialog","__unstable_hideCloseButton","showCloseButton","PopoverDialog","PopoverDialogContent","DocumentActionPortalProvider","ActionStateDialog","modalId","unknownModal","ActionMenuButton","actionStates","idPrefix","actionIndex","setActionIndex","setReferenceElement","popoverProps","currentAction","actionState","ActionMenuListItem","String","DocumentStatusBarActionsInner","showMenu","states","firstActionState","menuActionStates","Hotkeys","toLowerCase","DocumentStatusBarActions","DocumentStatusBarActions2","_ref105","HistoryStatusBarActions","HistoryStatusBarActions2","historyActions","_ref106","useResizeObserver","_ref107","useLayoutEffect","resizeObserver","observe","unobserve","BADGE_TONES","primary","success","danger","DocumentBadgesInner","_ref108","badge","whiteSpace","DocumentBadges","_ref109","StyledMotionPath","Circle","circle","Arrows","Checkmark","rotateAnimation","RotateGroup","root","syncing","scale","saved","changes","strokeDasharray","strokeDashoffset","arrows","checkmark","pathLength","AnimatedStatusIcon","STATUS_DICTIONARY","DocumentStatusPulse","currentStatus","SYNCING_TIMEOUT","SAVED_TIMEOUT","DocumentStatusLine","_ref110","singleLine","lastUpdated","timerId","absoluteDate","CONTAINER_BREAKPOINT","DocumentStatusBar","actionsBoxRef","showingRevision","contentRect","shouldRender","flexShrink","KeyboardShortcutResponder","actionsBoxElement","onActionStart","activeAction","matchingStates","isHotkey","matchingState","DocumentActionShortcuts","setActiveIndex","_ref111","DocumentHeaderTabs","tabPanelId","DocumentHeaderTab","isActive","DocumentHeaderTitle","DocumentPanelHeader","DocumentPanelHeader2","_props","useFieldActions","menuButtonNodes","showTabs","showSplitPaneButton","showSplitPaneCloseButton","showPaneGroupCloseButton","ArrowLeftIcon","languageFilterComponent","SplitVerticalIcon","InspectorMenuItem","setMenuItem","DocumentInspectorMenuItemsResolver","onMenuItems","lenRef","setMenuItems","menuItemsRef","newFieldActions","inspectorIndex","getInspectorItems","_ref112","inspectorMenuItems","getInspectItem","_ref113","JsonIcon","getProductionPreviewItem","_ref114","EarthAmericasIcon","inspectorItems","DocumentLayoutError","DIALOG_PROVIDER_POSITION","StyledChangeConnectorRoot","ChangeConnectorRoot","DocumentLayout","zOffsets","useZIndex","footerElement","setFooterElement","headerElement","setHeaderElement","setActionsBoxElement","documentPanelPortalElement","setInspectorMenuItems","rootFieldActionNodes","setRootFieldActionNodes","footerRect","headerRect","handleKeyUp","onConnectorSetFocus","FieldActionsResolver","onActions","FieldActionsProvider","onKeyUp","isReviewChangesOpen","onOpenReviewChanges","onSetFocus","pick","plugin","useDocumentLayoutComponent","useMiddlewareComponents","defaultComponent","DocumentPane","parentSourceName","SourceProvider","DocumentPaneInner","usePaneOptions","isLoaded","isDocumentLoaded","useDocumentType","providerProps","mergeDocumentType","childParams","routerPanesStateLength","activePath","ReferenceInputOptionsProvider","EditReferenceLinkComponent","onEditReference","PARTIAL_PAGE_LIMIT","FULL_LIST_LIMIT","DEFAULT_ORDERING","EMPTY_RECORD","removePublishedWithDrafts","documents","collate","hasPublished","RE_TYPE_NAME_IN_FILTER","getTypeNameFromSingleTypeFilter","k","isSimpleTypeFilter","applyOrderingFunctions","order","mapWith","fieldType","tryResolveSchemaTypeForPath","fieldExtendsType","baseType","pathSegments","getFieldTypeByName","isArrayAccessor","isIndexSegment","memberType","otherType","isReferenceSchemaType","otherRefType","RootBox","CommandListBox","SKELETON_ITEMS","LoadingView","num","DocumentListPaneContent","childItemId","filterIsSimpleTypeConstraint","hasMaxItems","hasSearchQuery","isLazyLoading","loadingVariant","onListChange","onRetry","paneTitle","searchInputElement","setShouldRender","handleEndReached","_ref115","isLastItem","showSpinner","showMaxItemsMessage","marginY","limit","noDocumentsContent","mainContent","_ref116","canReceiveFocus","onlyShowSelectionWhenActive","DocumentListPaneHeader","_ref117","setLayout","setSortOrder","_ref118","listenSearchQuery","searchQuery","staticTypeNames","maxFieldDepth","defer","throwError","share","welcome$","mutationAndReconnect$","partition","take","asyncScheduler","leading","trailing","exhaustMapWithTrailing","typeNames$","getSearchTypesWithMaxDepth","getSearchableTypes","searchTerms","searchOptions","__unstable_extendedProjection","createdQuery","createdParams","createSearchQuery","doFetch","INITIAL_QUERY_RESULTS","useDocumentList","paramsProp","useSearchMaxFieldDepth","resultState","setResult","setIsLazyLoading","hasFullList","setHasFullList","shouldFetchFullList","setShouldFetchFullList","typeNameFromFilter","handleSetResult","documentsLength","isLoadingMoreItems","queryResults$","onRetry$","Subject","_onRetry","results","ProgressEvent","caught$","scan","isSearchReady","rotate","AnimatedSpinnerIcon","SpinnerIcon","useShallowUnique","valueRef","shallowEquals","addSelectedStateToMenuItems","sortOrderRaw","DocumentListPane","sourceName","setSearchQuery","searchInputValue","setSearchInputValue","setSearchInputElement","showSearchLoadingRef","defaultSortOrder","sortWithOrderingFn","menuItemsWithSelectedState","handleQueryChange","useObservableCallback","event$","debounce","handleClearSearch","handleSearchKeyDown","searchInput","autoComplete","clearButton","onClear","spellCheck"],"mappings":"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"}
|