{"version":3,"file":"index.mjs","sources":["../src/core/components/react-track-elements/hooks.ts","../src/core/changeIndicators/tracker.tsx","../src/core/changeIndicators/ChangeFieldWrapper.tsx","../src/core/util/createHookFromObservableFactory.ts","../src/core/util/isNonNullable.ts","../src/core/util/draftUtils.ts","../src/core/util/empty.ts","../src/core/util/formatRelativeLocale.ts","../src/core/util/getDocumentVariantType.ts","../src/core/util/globalScope.ts","../src/core/util/isArray.ts","../src/core/util/isRecord.ts","../src/core/util/isString.ts","../src/core/util/isTruthy.ts","../src/core/util/resizeObserver.ts","../src/core/util/rxSwr.ts","../src/core/util/schemaUtils.ts","../src/core/util/searchUtils.ts","../src/core/util/supportsTouch.ts","../src/core/util/uncaughtErrorHandler.ts","../src/core/util/unicodeString.ts","../src/core/util/useLoadable.ts","../src/core/util/userHasRole.ts","../src/core/util/useThrottledCallback.ts","../src/core/util/useUnique.ts","../src/core/i18n/debug.ts","../src/core/i18n/hooks/useTranslation.ts","../src/core/changeIndicators/ElementWithChangeBar.styled.tsx","../src/core/changeIndicators/ElementWithChangeBar.tsx","../src/core/changeIndicators/ChangeIndicator.tsx","../src/core/components/scroll/hooks.ts","../src/core/components/scroll/scrollContainer.tsx","../src/core/changeIndicators/constants.ts","../src/core/changeIndicators/helpers/findMostSpecificTarget.ts","../src/core/changeIndicators/helpers/scrollUtils.ts","../src/core/changeIndicators/helpers/getOffsetsTo.ts","../src/core/changeIndicators/helpers/isChangeBar.ts","../src/core/changeIndicators/helpers/scrollIntoView.ts","../src/core/changeIndicators/overlay/ClampedRect.tsx","../src/core/changeIndicators/overlay/Connector.styled.tsx","../src/core/changeIndicators/overlay/connectorPath.ts","../src/core/changeIndicators/overlay/mapConnectorToLine.ts","../src/core/changeIndicators/overlay/Connector.tsx","../src/core/changeIndicators/overlay/ConnectorsOverlay.styled.tsx","../src/core/changeIndicators/overlay/useResizeObserver.ts","../src/core/changeIndicators/overlay/ConnectorsOverlay.tsx","../src/core/changeIndicators/overlay/ChangeConnectorRoot.tsx","../src/core/comments/components/CommentBreadcrumbs.tsx","../src/core/components/BetaBadge.tsx","../src/core/form/components/formField/styles.ts","../src/core/components/commandList/CommandList.tsx","../src/core/components/contextMenuButton/ContextMenuButton.tsx","../src/core/components/Favicons.tsx","../src/core/components/globalErrorHandler/GlobalErrorHandler.tsx","../src/core/components/NoJavascript.tsx","../src/core/components/DefaultDocument.tsx","../src/core/studio/workspaces/helpers.ts","../src/core/studio/workspaces/useWorkspaces.ts","../src/core/studio/workspaces/WorkspaceValidationError.ts","../src/core/studio/workspaces/validateWorkspaces.ts","../src/core/components/loadingBlock/LoadingBlock.tsx","../src/core/i18n/helpers.ts","../src/core/i18n/localeNamespaces.ts","../src/core/i18n/bundles/copy-paste.ts","../src/core/i18n/bundles/studio.ts","../src/core/i18n/bundles/validation.ts","../src/core/i18n/locales.ts","../src/core/util/supportsLocalStorage.ts","../src/core/i18n/localeStore.ts","../src/core/i18n/components/LocaleProvider.tsx","../src/core/i18n/hooks/useGetI18nText.ts","../src/core/i18n/hooks/useI18nText.ts","../src/core/i18n/hooks/useLocale.ts","../src/core/i18n/intlCache.ts","../src/core/hooks/useListFormat.ts","../src/core/i18n/simpleParser.ts","../src/core/i18n/Translate.tsx","../src/core/environment/index.ts","../src/core/form/studio/assetSourceMediaLibrary/constants.ts","../src/core/form/studio/assetSourceMediaLibrary/hooks/useToken.ts","../src/core/form/studio/assetSourceMediaLibrary/hooks/useAuthType.ts","../src/core/form/studio/assetSourceMediaLibrary/hooks/usePluginPostMessage.ts","../src/core/form/studio/assetSourceMediaLibrary/hooks/useSanityMediaLibraryConfig.ts","../src/core/form/studio/assetSourceMediaLibrary/shared/Dialog.tsx","../src/core/form/studio/assetSourceMediaLibrary/shared/Iframe.tsx","../src/core/form/studio/assetSourceMediaLibrary/shared/SelectAssetsDialog.tsx","../src/core/form/studio/assetSourceMediaLibrary/shared/MediaLibrarySource.tsx","../src/core/form/studio/assetSourceMediaLibrary/createAssetSource.tsx","../src/core/config/components/useMiddlewareComponents.tsx","../src/core/config/ConfigPropertyError.ts","../src/core/config/ConfigResolutionError.ts","../src/core/config/createDefaultIcon.tsx","../src/core/config/defineConfig.ts","../src/core/config/definePlugin.ts","../src/core/config/document/fieldActions/define.ts","../src/core/field/paths/helpers.ts","../src/core/field/diff/annotations/helpers.ts","../src/core/user-color/hooks.ts","../src/core/user-color/manager.ts","../src/core/user-color/provider.tsx","../src/core/field/diff/annotations/hooks.ts","../src/core/store/key-value/storage/memoryStorage.ts","../src/core/store/key-value/storage/localStoreStorage.ts","../src/core/store/key-value/localStorageSWR.ts","../src/core/studioClient.ts","../src/core/store/key-value/storage/serverStorage.ts","../src/core/store/key-value/serverKeyValueStore.ts","../src/core/store/key-value/keyValueStore.ts","../src/core/store/_legacy/cors/CorsOriginError.ts","../src/core/store/_legacy/authStore/storage.ts","../src/core/store/_legacy/authStore/createBroadcastChannel.ts","../src/core/store/_legacy/authStore/providerLogos.tsx","../src/core/store/_legacy/authStore/createLoginComponent.tsx","../src/core/store/_legacy/authStore/sessionId.ts","../src/core/store/_legacy/authStore/utils/asserters.ts","../src/core/store/_legacy/authStore/createAuthStore.ts","../src/core/store/_legacy/authStore/createMockAuthStore.ts","../src/core/store/_legacy/authStore/providerTitle.ts","../src/core/store/_legacy/connection-status/utils/catchWithCount.ts","../src/core/store/_legacy/connection-status/connection-status-store.ts","../src/core/form/inputs/PortableText/_helpers.ts","../src/core/form/store/utils/isEmptyItem.ts","../src/core/form/store/utils/immutableReconcile.ts","../src/core/form/studio/contexts/Presence.tsx","../src/core/form/useFormBuilder.ts","../src/core/form/inputs/PortableText/_legacyDefaultParts/Markers.tsx","../src/core/form/studio/contexts/Validation.tsx","../src/core/form/inputs/PortableText/hooks/useMemberValidation.tsx","../src/core/form/inputs/PortableText/hooks/usePortableTextMarkers.tsx","../src/core/presence/DocumentPreviewPresence.tsx","../src/core/components/userAvatar/UserAvatar.tsx","../src/core/presence/constants.ts","../src/core/presence/FieldPresence.styled.tsx","../src/core/presence/overlay/tracker.tsx","../src/core/presence/PresenceTooltip.tsx","../src/core/presence/utils.ts","../src/core/presence/FieldPresence.tsx","../src/core/presence/overlay/intersectionObserver.ts","../src/core/presence/overlay/WithIntersection.tsx","../src/core/presence/overlay/RegionsWithIntersections.styled.tsx","../src/core/presence/overlay/RegionsWithIntersections.tsx","../src/core/presence/overlay/StickyOverlay.tsx","../src/core/presence/overlay/PresenceOverlay.tsx","../src/core/presence/PresenceScope.tsx","../src/core/form/inputs/arrays/ArrayOfObjectsInput/List/VirtualizerScrollInstanceProvider.tsx","../src/core/form/components/EditPortal.tsx","../src/core/form/field/actions/FieldActionMenuGroup.tsx","../src/core/form/field/actions/FieldActionMenuItem.tsx","../src/core/form/field/actions/FieldActionMenuNode.tsx","../src/core/form/field/actions/FieldActionMenu.tsx","../src/core/form/field/useHoveredField.ts","../src/core/form/field/actions/FieldActionsProvider.tsx","../src/core/form/field/actions/helpers.ts","../src/core/form/field/actions/FieldActionsResolver.tsx","../src/core/form/field/actions/useFieldActions.ts","../src/core/form/field/HoveredFieldProvider.tsx","../src/core/form/components/formField/FormFieldBaseHeader.tsx","../src/core/form/members/common/createDescriptionId.ts","../src/core/form/components/formField/FormFieldValidationStatus.tsx","../src/core/form/components/formField/FormFieldHeaderText.tsx","../src/core/form/components/formField/FormField.tsx","../src/core/form/components/formField/FormFieldSetLegend.tsx","../src/core/form/components/formField/FormFieldSet.tsx","../src/core/form/components/formField/FormFieldStatus.tsx","../src/core/form/hooks/useDidUpdate.ts","../src/core/form/patch/patch.ts","../src/core/form/patch/PatchChannel.ts","../src/core/form/patch/PatchEvent.ts","../src/core/form/studio/contexts/FormCallbacks.tsx","../src/core/form/utils/createProtoValue.ts","../src/core/form/utils/randomKey.ts","../src/core/form/utils/ensureKey.ts","../src/core/form/members/common/resolveInitialArrayValues.ts","../src/core/form/members/array/items/ArrayOfObjectsItem.tsx","../src/core/form/members/array/IncompatibleItemType.tsx","../src/core/form/members/array/MemberItemError.tsx","../src/core/form/members/array/ArrayOfObjectsInputMember.tsx","../src/core/form/members/array/ArrayOfObjectsInputMembers.tsx","../src/core/form/inputs/arrays/ArrayOfPrimitivesInput/getEmptyValue.ts","../src/core/form/members/common/resolveNativeNumberInputValue.ts","../src/core/form/members/array/items/ArrayOfPrimitivesItem.tsx","../src/core/form/inputs/arrays/ArrayOfObjectsInput/createProtoArrayValue.ts","../src/core/form/patch/arrayInsert.ts","../src/core/form/patch/array.ts","../src/core/form/patch/object.ts","../src/core/form/patch/primitive.ts","../src/core/form/patch/string.ts","../src/core/form/patch/applyPatch.ts","../src/core/form/studio/contexts/DocumentFieldActions.tsx","../src/core/form/utils/is.ts","../src/core/form/studio/uploads/accepts.ts","../src/core/form/studio/utils/withMaxConcurrency.ts","../src/core/form/studio/inputs/client-adapters/assets.ts","../src/core/form/studio/uploads/constants.ts","../src/core/form/studio/uploads/utils.ts","../src/core/form/studio/uploads/uploadFile.ts","../src/core/form/studio/uploads/image/orient.ts","../src/core/form/studio/uploads/image/readExif.ts","../src/core/form/studio/uploads/image/rotateImage.ts","../src/core/form/studio/uploads/uploadImage.ts","../src/core/form/studio/uploads/uploaders.ts","../src/core/form/studio/uploads/resolveUploader.ts","../src/core/form/members/object/fields/ArrayOfObjectsField.tsx","../src/core/form/studio/uploads/file/readAsText.ts","../src/core/form/members/object/fields/ArrayOfPrimitivesField.tsx","../src/core/form/members/object/fields/asserters.ts","../src/core/form/members/object/fields/ObjectField.tsx","../src/core/form/members/object/fields/PrimitiveField.tsx","../src/core/form/members/object/MemberField.tsx","../src/core/form/components/Alert.tsx","../src/core/form/components/Details.tsx","../src/core/form/inputs/InvalidValueInput/converters.ts","../src/core/form/inputs/InvalidValueInput/UntypedValueInput.tsx","../src/core/form/inputs/InvalidValueInput/InvalidValueInput.tsx","../src/core/form/members/object/errors/DuplicateKeysAlert.tsx","../src/core/form/members/object/errors/MissingKeysAlert.tsx","../src/core/form/members/object/errors/MixedArrayAlert.tsx","../src/core/form/members/object/MemberFieldError.tsx","../src/core/form/members/object/MemberFieldset.tsx","../src/core/form/members/object/ObjectInputMember.tsx","../src/core/form/members/object/ObjectInputMembers.tsx","../src/core/form/utils/asserters.ts","../src/core/form/components/FormInput.tsx","../src/core/form/inputs/PortableText/hooks/usePortableTextMembers.tsx","../src/core/form/inputs/PortableText/object/Annotation.styles.ts","../src/core/form/inputs/PortableText/object/AnnotationToolbarPopover.tsx","../src/core/form/inputs/PortableText/object/Annotation.tsx","../src/core/form/studio/contexts/ReferenceInputOptions.tsx","../src/core/form/studio/contexts/reviewChanges/useReviewChanges.ts","../src/core/form/contexts/DocumentIdProvider.tsx","../src/core/perspective/usePerspective.ts","../src/core/form/hooks/useScrollIntoViewOnFocusWithin.ts","../src/core/releases/__telemetry__/releases.telemetry.ts","../src/core/releases/util/releasesClient.ts","../src/core/releases/hooks/useDocumentVersions.tsx","../src/core/releases/store/constants.ts","../src/core/releases/util/getReleaseIdFromReleaseDocumentId.ts","../src/core/releases/hooks/utils.ts","../src/core/releases/util/const.ts","../src/core/releases/store/createReleaseMetadataAggregator.ts","../src/core/releases/store/reducer.ts","../src/core/releases/store/createReleaseStore.ts","../src/core/releases/store/useReleasesStore.ts","../src/core/releases/store/useActiveReleases.ts","../src/core/releases/hooks/useDocumentVersionTypeSortedList.ts","../src/core/releases/store/types.ts","../src/core/releases/util/createReleaseId.ts","../src/core/releases/util/util.ts","../src/core/releases/hooks/useIsReleaseActive.ts","../src/core/releases/hooks/useOnlyHasVersions.tsx","../src/core/perspective/useSetPerspective.tsx","../src/core/releases/contexts/upsell/useReleasesUpsell.ts","../src/core/releases/util/prepareVersionReferences.ts","../src/core/error/types/isErrorWithDetails.ts","../src/core/releases/store/isReleaseLimitError.ts","../src/core/releases/store/createReleaseOperationStore.ts","../src/core/releases/store/useReleaseOperations.ts","../src/core/releases/hooks/useVersionOperations.tsx","../src/core/releases/i18n/index.ts","../src/core/releases/components/dialog/DiscardVersionDialog.tsx","../../../node_modules/.pnpm/@vvo+tzdb@6.137.0/node_modules/@vvo/tzdb/lib/formatTimeZone.js","../../../node_modules/.pnpm/@vvo+tzdb@6.137.0/node_modules/@vvo/tzdb/lib/utils/timeZone.js","../../../node_modules/.pnpm/@vvo+tzdb@6.137.0/node_modules/@vvo/tzdb/lib/getTimeZones.js","../../../node_modules/.pnpm/date-fns-tz@2.0.1_date-fns@2.30.0/node_modules/date-fns-tz/esm/_lib/tzIntlTimeZoneName/index.js","../../../node_modules/.pnpm/date-fns-tz@2.0.1_date-fns@2.30.0/node_modules/date-fns-tz/esm/_lib/tzTokenizeDate/index.js","../../../node_modules/.pnpm/date-fns-tz@2.0.1_date-fns@2.30.0/node_modules/date-fns-tz/esm/_lib/newDateUTC/index.js","../../../node_modules/.pnpm/date-fns-tz@2.0.1_date-fns@2.30.0/node_modules/date-fns-tz/esm/_lib/tzParseTimezone/index.js","../../../node_modules/.pnpm/date-fns-tz@2.0.1_date-fns@2.30.0/node_modules/date-fns-tz/esm/format/formatters/index.js","../../../node_modules/.pnpm/date-fns-tz@2.0.1_date-fns@2.30.0/node_modules/date-fns-tz/esm/_lib/tzPattern/index.js","../../../node_modules/.pnpm/date-fns-tz@2.0.1_date-fns@2.30.0/node_modules/date-fns-tz/esm/toDate/index.js","../../../node_modules/.pnpm/date-fns-tz@2.0.1_date-fns@2.30.0/node_modules/date-fns-tz/esm/format/index.js","../../../node_modules/.pnpm/date-fns-tz@2.0.1_date-fns@2.30.0/node_modules/date-fns-tz/esm/utcToZonedTime/index.js","../../../node_modules/.pnpm/date-fns-tz@2.0.1_date-fns@2.30.0/node_modules/date-fns-tz/esm/formatInTimeZone/index.js","../../../node_modules/.pnpm/date-fns-tz@2.0.1_date-fns@2.30.0/node_modules/date-fns-tz/esm/zonedTimeToUtc/index.js","../src/core/scheduledPublishing/components/toastDescription/ToastDescription.tsx","../src/core/scheduledPublishing/constants.tsx","../src/core/scheduledPublishing/utils/debug.ts","../src/core/scheduledPublishing/utils/getErrorMessage.ts","../src/core/scheduledPublishing/hooks/useTimeZone.tsx","../src/core/releases/components/ReleaseAvatar.tsx","../src/core/scheduledPublishing/components/dialogs/DialogTimeZone.tsx","../src/core/scheduledPublishing/hooks/useDialogVisibile.ts","../src/core/scheduledPublishing/hooks/useDialogTimeZone.ts","../src/core/components/inputs/DateInputs/LazyTextInput.tsx","../src/core/components/inputs/DateInputs/TimeInput.tsx","../src/core/components/inputs/DateInputs/calendar/CalendarDay.tsx","../src/core/components/inputs/DateInputs/calendar/constants.ts","../src/core/components/inputs/DateInputs/calendar/utils.ts","../src/core/components/inputs/DateInputs/calendar/CalendarMonth.tsx","../src/core/components/inputs/DateInputs/calendar/features.ts","../src/core/components/inputs/DateInputs/calendar/YearInput.tsx","../src/core/components/inputs/DateInputs/calendar/Calendar.tsx","../src/core/components/inputs/DateInputs/DatePicker.tsx","../src/core/components/inputs/DateInputs/DateTimeInput.tsx","../src/core/form/inputs/DateInputs/CommonDateTimeInput.tsx","../src/core/form/inputs/DateInputs/utils.ts","../src/core/form/inputs/DateInputs/DateInput.tsx","../src/core/form/inputs/DateInputs/DateTimeInput.tsx","../src/core/releases/components/ScheduleDatePicker.tsx","../src/core/releases/components/dialog/TitleDescriptionForm.tsx","../src/core/releases/components/dialog/ReleaseForm.tsx","../src/core/store/_legacy/document/buffered-doc/createObservableBufferedDocument.ts","../src/core/store/_legacy/document/buffered-doc/createBufferedDocument.ts","../src/core/preview/utils/shareReplayLatest.ts","../src/core/store/_legacy/document/debug.ts","../src/core/store/_legacy/document/utils/eventChainUtils.ts","../src/core/store/_legacy/document/utils/sequentializeListenerEvents.ts","../src/core/store/_legacy/document/getPairListener.ts","../src/core/store/_legacy/document/document-pair/utils/actionsApiClient.ts","../src/core/store/_legacy/document/document-pair/utils/operationsApiClient.ts","../src/core/store/_legacy/document/document-pair/checkoutPair.ts","../src/core/store/_legacy/document/utils/createMemoizer.ts","../src/core/store/_legacy/document/document-pair/memoizeKeyGen.ts","../src/core/store/_legacy/document/document-pair/memoizedPair.ts","../src/core/store/_legacy/document/document-pair/snapshotPair.ts","../src/core/store/_legacy/document/document-pair/utils/isLiveEditEnabled.ts","../src/core/store/_legacy/document/document-pair/editState.ts","../src/core/store/_legacy/document/document-pair/consistencyStatus.ts","../src/core/store/_legacy/document/document-pair/operationArgs.ts","../src/core/store/_legacy/document/document-pair/operations/commit.ts","../src/core/store/_legacy/document/document-pair/operations/delete.ts","../src/core/store/_legacy/document/document-pair/operations/discardChanges.ts","../src/core/store/_legacy/document/document-pair/operations/duplicate.ts","../src/core/store/_legacy/document/document-pair/operations/patch.ts","../src/core/store/_legacy/document/document-pair/operations/publish.ts","../src/core/store/_legacy/document/document-pair/operations/restore.ts","../src/core/store/_legacy/document/document-pair/operations/unpublish.ts","../src/core/store/_legacy/document/document-pair/serverOperations/delete.ts","../src/core/store/_legacy/document/document-pair/serverOperations/discardChanges.ts","../src/core/store/_legacy/document/document-pair/serverOperations/patch.ts","../src/core/store/_legacy/document/document-pair/serverOperations/publish.ts","../src/core/store/_legacy/document/document-pair/serverOperations/restore.ts","../src/core/store/_legacy/document/document-pair/serverOperations/unpublish.ts","../src/core/store/_legacy/document/document-pair/operationEvents.ts","../src/core/store/_legacy/document/document-pair/remoteSnapshots.ts","../src/core/validation/util/pathToString.ts","../src/core/validation/util/convertToValidationMarker.ts","../src/core/validation/util/escapeRegex.ts","../src/core/validation/util/localizeMessage.ts","../src/core/validation/util/deepEqualsIgnoreKey.ts","../src/core/validation/util/typeString.ts","../src/core/validation/validators/genericValidator.ts","../src/core/validation/validators/arrayValidator.ts","../src/core/validation/validators/booleanValidator.ts","../src/core/validation/validators/dateValidator.ts","../src/core/validation/validators/numberValidator.ts","../src/core/validation/validators/objectValidator.ts","../src/core/validation/validators/stringValidator.ts","../src/core/validation/Rule.ts","../src/core/validation/validators/slugValidator.ts","../src/core/validation/util/normalizeValidationRules.ts","../src/core/validation/inferFromSchemaType.ts","../src/core/validation/inferFromSchema.ts","../src/core/i18n/fallback.ts","../src/core/validation/util/createBatchedGetDocumentExists.ts","../src/core/validation/util/requestIdleCallback.ts","../src/core/validation/validators/unknownFieldsValidator.ts","../src/core/validation/validateDocument.ts","../src/core/validation/validateDocumentWithReferences.ts","../src/core/store/_legacy/document/document-pair/validation.ts","../src/core/store/_legacy/document/document-pair/documentEvents.ts","../src/core/store/_legacy/document/document-pair/operations/helpers.ts","../src/core/store/_legacy/document/document-pair/editOperations.ts","../src/core/templates/util/isRecord.ts","../src/core/templates/util/deepAssign.ts","../src/core/templates/validate.ts","../src/core/templates/resolve.ts","../src/core/templates/prepare.ts","../src/core/store/_legacy/document/initialValue/initialValue.ts","../src/core/store/_legacy/document/listenQuery.ts","../src/core/store/_legacy/document/resolveTypeForDocument.ts","../src/core/store/_legacy/document/document-store.ts","../src/core/store/_legacy/document/hooks/useDocumentType.ts","../src/core/store/_legacy/document/hooks/useDocumentValues.ts","../src/core/store/user/hooks.ts","../src/core/store/_legacy/document/useInitialValue.ts","../src/core/store/_legacy/document/useResolveInitialValueForType.ts","../src/core/store/_legacy/document/document-pair/utils/fetchFeatureToggle.ts","../src/core/store/_legacy/grants/documentPairPermissions.ts","../src/core/hooks/useFeatureEnabled.ts","../src/core/store/_legacy/createMultiKeyWeakMap.ts","../src/core/store/_legacy/ResourceCacheProvider.tsx","../src/core/releases/store/createReleasePermissionsStore.ts","../src/core/releases/store/useReleasePermissions.ts","../src/core/releases/util/getReleaseTone.ts","../src/core/releases/components/documentHeader/contextMenu/VersionContextMenuItem.tsx","../src/core/releases/components/documentHeader/contextMenu/VersionContextMenu.tsx","../src/core/hooks/useSchema.ts","../src/core/releases/hooks/useCreateReleaseMetadata.ts","../src/core/releases/util/getIsScheduledDateInPast.ts","../src/core/releases/components/documentHeader/dialog/CopyToNewReleaseDialog.tsx","../src/core/releases/components/documentHeader/VersionChip.tsx","../src/core/releases/components/VersionInlineBadge.tsx","../src/core/releases/store/useAllReleases.ts","../src/core/releases/store/useArchivedReleases.ts","../src/core/store/_legacy/history/history/getJsonStream.ts","../src/core/releases/tool/detail/documentTable/useReleaseHistory.ts","../src/core/studio/workspace.tsx","../src/core/studio/source.tsx","../src/core/releases/util/getReleaseDocumentIdFromReleaseId.ts","../src/core/releases/tool/detail/events/getReleaseActivityEvents.ts","../src/core/store/translog/getTransactionsLogs.ts","../src/core/preview/utils/applyMendozaPatch.ts","../src/core/releases/tool/detail/events/buildReleaseEditEvents.ts","../src/core/releases/tool/detail/events/getReleaseEditEvents.ts","../src/core/releases/tool/detail/events/types.ts","../src/core/releases/tool/detail/events/getReleaseEvents.ts","../src/core/releases/tool/detail/events/useReleaseEvents.ts","../src/core/components/resizer/Resizer.tsx","../src/core/components/resizer/Resizable.tsx","../src/core/hooks/useRelativeTime.ts","../src/core/components/RelativeTime.tsx","../src/core/hooks/useDateTimeFormat.ts","../src/core/tasks/components/activity/helpers/groupChanges.ts","../src/core/tasks/components/activity/helpers/parseTransactions.ts","../src/core/tasks/constants/API_VERSION.ts","../src/core/tasks/constants/TaskStatus.tsx","../src/core/tasks/hooks/useActivityLog.ts","../src/core/tasks/hooks/useDocumentPreviewValues.ts","../src/core/tasks/hooks/useTaskOperations.ts","../src/core/tasks/hooks/useRemoveTask.ts","../src/core/preview/components/_previewComponents.ts","../src/core/preview/components/SanityDefaultPreview.tsx","../src/core/store/_legacy/presence/useDocumentPresence.tsx","../src/core/releases/tool/components/ReleaseDocumentPreview.tsx","../src/core/releases/tool/detail/ReleaseActivityListItem.tsx","../src/core/releases/tool/detail/ReleaseActivityList.tsx","../src/core/releases/tool/detail/ReleaseDashboardActivityPanel.tsx","../src/ui-components/toneIcon/ToneIcon.tsx","../src/core/components/textWithTone/TextWithTone.tsx","../src/core/hooks/useProjectSubscriptions.ts","../src/core/releases/tool/detail/ReleaseDetailsEditor.tsx","../src/core/releases/hooks/useReleaseTime.ts","../src/core/releases/tool/components/ReleaseTime.tsx","../src/core/releases/tool/detail/ReleaseTypePicker.tsx","../src/core/releases/tool/detail/ReleaseDashboardDetails.tsx","../src/core/releases/tool/components/releaseCTAButtons/ReleasePublishAllButton.tsx","../src/core/releases/contexts/upsell/fetchReleaseLimits.ts","../src/core/releases/store/useReleaseLimits.ts","../src/core/releases/hooks/useIsReleasesPlus.ts","../src/core/releases/tool/components/releaseCTAButtons/ReleaseRevertButton/useDocumentRevertStates.ts","../src/core/releases/tool/components/releaseCTAButtons/ReleaseRevertButton/usePostPublishTransactions.ts","../src/core/releases/tool/components/releaseCTAButtons/ReleaseRevertButton/ReleaseRevertButton.tsx","../src/core/releases/tool/components/releaseCTAButtons/ReleaseScheduleButton.tsx","../src/core/releases/tool/components/releaseCTAButtons/ReleaseUnscheduleButton.tsx","../src/core/releases/tool/components/ReleaseMenuButton/releaseActions.ts","../src/core/releases/store/useReleasesIds.ts","../src/core/releases/store/useDocumentVersionInfo.ts","../src/core/releases/tool/components/ReleaseMenuButton/ReleaseMenu.tsx","../src/core/releases/tool/components/ReleaseMenuButton/ReleasePreviewCard.tsx","../src/core/releases/tool/components/ReleaseMenuButton/ReleaseMenuButton.tsx","../src/core/releases/tool/components/StatusItem.tsx","../src/core/releases/tool/detail/ReleaseStatusItems.tsx","../src/core/releases/tool/detail/ReleaseDashboardFooter.tsx","../src/core/releases/tool/overview/queryParamUtils.ts","../src/core/releases/tool/detail/ReleaseDashboardHeader.tsx","../src/core/releases/tool/components/Table/TableProvider.tsx","../src/core/releases/tool/components/Table/TableHeader.tsx","../src/core/releases/tool/components/Table/Table.tsx","../src/core/studio/components/navbar/search/constants.ts","../src/core/studio/components/navbar/search/contexts/search/useSearchState.ts","../src/core/studio/components/navbar/search/utils/hasSearchableTerms.ts","../src/core/studio/components/navbar/search/hooks/useSearchHotkeys.ts","../src/core/studio/components/navbar/search/components/common/SearchWrapper.tsx","../src/core/studio/components/navbar/search/definitions/filters.ts","../src/core/studio/components/navbar/search/definitions/operators/index.ts","../src/core/studio/components/navbar/search/utils/filterUtils.ts","../src/core/studio/components/navbar/search/components/filters/common/FilterPopoverWrapper.tsx","../src/core/studio/components/navbar/search/components/common/CustomTextInputBox.tsx","../src/core/studio/components/navbar/search/components/common/CustomTextInput.tsx","../src/core/studio/components/navbar/search/components/filters/common/FilterPopoverContentHeader.tsx","../src/core/studio/components/navbar/search/components/filters/addFilter/createFilterMenuItems.ts","../src/core/studio/components/navbar/search/components/common/FilterTitle.tsx","../src/core/studio/components/navbar/search/components/filters/common/FilterIcon.tsx","../src/core/studio/components/navbar/search/components/filters/common/FilterDetails.tsx","../src/core/studio/components/navbar/search/utils/getSchemaField.ts","../src/core/studio/components/navbar/search/utils/sanitizeField.ts","../src/core/studio/components/navbar/search/components/filters/addFilter/items/FilterTooltip.tsx","../src/core/studio/components/navbar/search/components/filters/addFilter/items/MenuItemFilter.tsx","../src/core/studio/components/navbar/search/components/filters/addFilter/items/MenuItemHeader.tsx","../src/core/studio/components/navbar/search/components/filters/addFilter/AddFilterPopoverContent.tsx","../src/core/studio/components/navbar/search/components/filters/addFilter/AddFilterButton.tsx","../src/core/studio/components/navbar/search/utils/documentTypesTruncated.ts","../src/core/search/common/deriveSearchWeightsFromType.ts","../src/core/search/common/deriveSearchWeightsFromType2024.ts","../src/core/search/common/getSearchableTypes.ts","../src/core/search/common/isPerspectiveRaw.ts","../src/core/search/common/token.ts","../src/core/search/groq2024/createSearchQuery.ts","../src/core/search/groq2024/getNextCursor.ts","../src/core/search/groq2024/createGroq2024Search.ts","../src/core/search/weighted/applyWeights.ts","../src/core/search/constants.ts","../src/core/search/weighted/createSearchQuery.ts","../src/core/search/weighted/createWeightedSearch.ts","../src/core/search/search.ts","../src/core/studio/components/navbar/search/utils/selectors.ts","../src/core/studio/components/navbar/search/components/filters/documentTypes/items/DocumentTypeFilterItem.tsx","../src/core/studio/components/navbar/search/components/filters/documentTypes/DocumentTypesPopoverContent.tsx","../src/core/studio/components/navbar/search/components/filters/documentTypes/DocumentTypesButton.tsx","../src/core/studio/components/navbar/search/components/common/FilterLabel.tsx","../src/core/studio/components/navbar/search/components/filters/filter/FilterError.tsx","../src/core/studio/components/navbar/search/components/filters/filter/OperatorsMenuButton.tsx","../src/core/studio/components/navbar/search/components/filters/filter/FilterForm.tsx","../src/core/studio/components/navbar/search/components/filters/filter/FilterPopoverContent.tsx","../src/core/studio/components/navbar/search/components/filters/filter/FilterButton.tsx","../src/core/studio/components/navbar/search/components/filters/Filters.tsx","../src/core/studio/components/navbar/search/definitions/fields.ts","../src/core/studio/components/navbar/search/datastores/useStoredSearch.ts","../src/core/studio/components/navbar/search/datastores/recentSearches.ts","../src/core/studio/components/navbar/search/components/Instructions.tsx","../src/core/studio/components/navbar/search/components/common/DocumentTypesPill.tsx","../src/core/studio/components/navbar/search/components/common/FilterPill.tsx","../src/core/studio/components/navbar/search/components/recentSearches/item/RecentSearchItem.tsx","../src/core/studio/components/navbar/search/components/recentSearches/RecentSearches.tsx","../src/core/studio/components/navbar/search/components/SearchHeader.tsx","../src/core/studio/components/navbar/search/components/NoResults.tsx","../src/core/studio/components/navbar/search/components/SearchError.tsx","../src/core/studio/components/navbar/search/definitions/getOrderings.ts","../src/core/studio/components/navbar/search/components/SortMenu.tsx","../src/core/studio/components/navbar/search/components/searchResults/item/DebugOverlay.tsx","../src/core/preview/useValuePreview.ts","../src/core/studio/components/navbar/search/components/searchResults/item/SearchResultItemPreview.tsx","../src/core/studio/components/navbar/search/components/searchResults/item/SearchResultItem.tsx","../src/core/studio/components/navbar/search/components/searchResults/SearchResults.tsx","../src/core/studio/components/navbar/search/components/SearchPopover.tsx","../src/core/studio/components/navbar/search/hooks/useSearchMaxFieldDepth.ts","../src/core/studio/components/navbar/search/hooks/useSearch.ts","../src/core/studio/components/navbar/search/utils/isRecentSearchTerms.ts","../src/core/studio/components/navbar/search/utils/debug.ts","../src/core/studio/components/navbar/search/contexts/search/reducer.ts","../src/core/studio/components/navbar/search/contexts/search/SearchProvider.tsx","../src/core/releases/tool/detail/useBundleDocuments.ts","../src/core/releases/tool/detail/AddDocumentSearch.tsx","../src/core/releases/components/dialog/UnpublishVersionDialog.tsx","../src/core/releases/util/isGoingToUnpublish.ts","../src/core/releases/tool/detail/documentTable/DocumentActions.tsx","../src/core/releases/tool/detail/documentTable/DocumentTableColumnDefs.tsx","../src/core/releases/tool/detail/ReleaseSummary.tsx","../src/core/releases/tool/detail/ReleaseDetail.tsx","../src/core/components/inputs/DateFilters/calendar/CalendarDay.tsx","../src/core/components/inputs/DateFilters/calendar/CalendarMonth.tsx","../src/core/components/inputs/DateFilters/calendar/CalendarFilter.tsx","../src/core/releases/components/dialog/CreateReleaseDialog.tsx","../src/core/releases/contexts/ReleasesMetadataProvider.tsx","../src/core/releases/store/useReleasesMetadata.ts","../src/core/releases/tool/resources/ReleaseIllustration.tsx","../src/core/releases/tool/overview/CalendarPopover.tsx","../src/core/releases/tool/overview/useTimezoneAdjustedDateTimeRange.ts","../src/core/releases/tool/overview/ReleaseCalendarFilter.tsx","../src/core/releases/tool/overview/ReleaseMenuButtonWrapper.tsx","../src/core/releases/tool/overview/columnCells/ReleaseDocumentsCounter.tsx","../src/core/components/previews/constants.ts","../src/core/components/previews/general/DetailPreview.styled.ts","../src/core/releases/tool/overview/columnCells/ReleaseName.tsx","../src/core/releases/tool/overview/ReleasesOverviewColumnDefs.tsx","../src/core/releases/tool/overview/ReleasesOverview.tsx","../src/core/releases/tool/ReleasesTool.tsx","../src/core/components/InsufficientPermissionsMessage.tsx","../src/core/releases/plugin/documentActions/DiscardVersionAction.tsx","../src/core/releases/plugin/documentActions/UnpublishVersionAction.tsx","../src/core/releases/plugin/documentActions/index.ts","../src/core/studio/upsell/constants.ts","../src/core/studio/upsell/upsellDescriptionSerializer/helpers.ts","../src/core/studio/upsell/upsellDescriptionSerializer/UpsellDescriptionSerializer.tsx","../src/core/studio/upsell/UpsellDialog.tsx","../src/core/releases/store/useOrgActiveReleaseCount.ts","../src/core/releases/contexts/upsell/ReleasesUpsellProvider.tsx","../src/core/releases/util/releasesToolAvailable.ts","../src/core/releases/hooks/useReleasesToolAvailable.ts","../src/core/releases/plugin/ReleasesStudioLayout.tsx","../src/core/releases/plugin/index.ts","../src/core/components/documentStatusIndicator/DocumentStatusIndicator.tsx","../src/core/form/inputs/ReferenceInput/ReferencePreview.tsx","../src/core/form/inputs/ReferenceInput/PreviewReferenceValue.tsx","../src/core/form/components/AlertStrip.tsx","../src/core/form/inputs/ReferenceInput/ReferenceFinalizeAlertStrip.tsx","../src/core/form/inputs/ReferenceInput/ReferenceLinkCard.tsx","../src/core/form/inputs/ReferenceInput/ReferenceMetadataLoadFailure.tsx","../src/core/form/inputs/ReferenceInput/ReferenceStrengthMismatchAlertStrip.tsx","../src/core/form/inputs/ReferenceInput/useReferenceInfo.ts","../src/core/form/contexts/FormValue.tsx","../src/core/form/studio/inputs/client-adapters/reference.ts","../src/core/form/inputs/ReferenceInput/useReferenceInput.tsx","../src/core/form/inputs/ReferenceInput/ReferenceField.tsx","../src/core/form/studio/inputResolver/helpers.ts","../src/core/form/studio/inputResolver/fieldResolver.tsx","../src/core/form/inputs/ReferenceInput/AutocompleteContainer.tsx","../src/core/form/inputs/ReferenceInput/CreateButton.tsx","../src/core/form/inputs/ReferenceInput/OptionPreview.tsx","../src/core/form/inputs/ReferenceInput/ReferenceAutocomplete.tsx","../src/core/form/inputs/ReferenceInput/useReferenceItemRef.ts","../src/core/form/inputs/ReferenceInput/ReferenceInput.tsx","../src/core/form/studio/inputs/reference/resolveUserDefinedFilter.tsx","../src/core/form/studio/inputs/reference/StudioReferenceInput.tsx","../src/core/form/types/asserters.ts","../src/core/form/inputs/arrays/common/dndkit-modifier/restrictToParentElementWithMargins.ts","../src/core/form/inputs/arrays/common/list.tsx","../src/core/form/components/withFocusRing/helpers.ts","../src/core/form/components/withFocusRing/withFocusRing.ts","../src/core/form/inputs/common/fileTarget/utils/extractFiles.ts","../src/core/form/inputs/common/fileTarget/utils/imageUrlToBlob.ts","../src/core/form/inputs/common/fileTarget/fileTarget.tsx","../src/core/form/inputs/files/common/DropMessage.tsx","../src/core/form/inputs/arrays/common/uploadTarget/styles.ts","../src/core/form/inputs/arrays/common/uploadTarget/uploadTarget.tsx","../src/core/form/inputs/arrays/common/UploadTargetCard.tsx","../src/core/form/inputs/arrays/ArrayOfObjectsInput/InsertMenuPopover.tsx","../src/core/form/inputs/arrays/ArrayOfObjectsInput/ArrayOfObjectsFunctions.tsx","../src/core/form/inputs/arrays/common/DragHandle.tsx","../src/core/form/inputs/arrays/layouts/CellLayout.tsx","../src/core/form/inputs/arrays/ArrayOfObjectsInput/Grid/IncompatibleItemType.tsx","../src/core/form/inputs/arrays/ArrayOfObjectsInput/Grid/ErrorItem.tsx","../src/core/schema/types/assetSourceData.ts","../src/core/schema/types/fileAsset.ts","../src/core/schema/types/geopoint.ts","../src/core/schema/types/imageAsset.ts","../src/core/schema/types/imageCrop.ts","../src/core/schema/types/imageDimensions.ts","../src/core/schema/types/imageHotspot.ts","../src/core/schema/types/imageMetadata.ts","../src/core/schema/types/imagePalette.ts","../src/core/schema/types/imagePaletteSwatch.ts","../src/core/schema/types/slug.ts","../src/core/schema/createSchema.ts","../src/core/schema/helpers.ts","../src/core/form/studio/tree-editing/components/search/utils.ts","../src/core/form/studio/tree-editing/hooks/useSearchableList.ts","../src/core/form/studio/tree-editing/hooks/useValuePreviewWithFallback.ts","../src/core/form/studio/tree-editing/components/breadcrumbs/constants.ts","../src/core/form/studio/tree-editing/components/breadcrumbs/TreeEditingBreadcrumbsMenu.tsx","../src/core/form/studio/tree-editing/components/breadcrumbs/TreeEditingBreadcrumbsMenuButton.tsx","../src/core/form/studio/tree-editing/components/breadcrumbs/TreeEditingBreadcrumbs.tsx","../src/core/form/studio/tree-editing/components/layout/styles.ts","../src/core/form/studio/tree-editing/components/search/constants.ts","../src/core/form/studio/tree-editing/components/search/TreeEditingSearchMenu.tsx","../src/core/form/studio/tree-editing/components/search/TreeEditingSearch.tsx","../src/core/form/studio/tree-editing/utils/build-tree-editing-state/utils.ts","../src/core/form/studio/tree-editing/components/tree-menu/utils.ts","../src/core/form/studio/tree-editing/components/tree-menu/TreeEditingMenuItem.tsx","../src/core/form/studio/tree-editing/components/tree-menu/TreeEditingMenu.tsx","../src/core/form/studio/tree-editing/components/layout/TreeEditingLayoutSidebar.tsx","../src/core/form/studio/tree-editing/components/layout/TreeEditingLayout.tsx","../src/core/form/studio/tree-editing/utils/getRootPath.ts","../src/core/form/studio/tree-editing/utils/getSchemaField.ts","../src/core/form/store/utils/getItemType.ts","../src/core/form/studio/tree-editing/utils/findArrayTypePaths.ts","../src/core/form/studio/tree-editing/utils/build-tree-editing-state/buildBreadcrumbsState.ts","../src/core/form/studio/tree-editing/utils/build-tree-editing-state/buildArrayState.ts","../src/core/form/studio/tree-editing/utils/build-tree-editing-state/buildTreeEditingState.ts","../src/core/form/studio/tree-editing/components/TreeEditingDialog.tsx","../src/core/form/studio/tree-editing/context/enabled/useTreeEditingEnabled.ts","../src/core/form/studio/tree-editing/context/enabled/TreeEditingEnabledProvider.tsx","../src/core/form/inputs/arrays/ArrayOfObjectsInput/InsertMenuMenuItems.tsx","../src/core/form/inputs/arrays/ArrayOfObjectsInput/Grid/GridItem.tsx","../src/core/form/inputs/arrays/ArrayOfObjectsInput/Grid/GridArrayInput.tsx","../src/core/form/inputs/arrays/layouts/RowLayout.tsx","../src/core/form/inputs/arrays/ArrayOfObjectsInput/List/IncompatibleItemType.tsx","../src/core/form/inputs/arrays/ArrayOfObjectsInput/List/ErrorItem.tsx","../src/core/form/inputs/arrays/ArrayOfObjectsInput/List/useMemoCompare.ts","../src/core/form/inputs/arrays/ArrayOfObjectsInput/List/useVirtualizerScrollInstance.tsx","../src/core/form/inputs/arrays/ArrayOfObjectsInput/List/ListArrayInput.tsx","../src/core/form/inputs/arrays/ArrayOfObjectsInput/ArrayOfObjectsInput.tsx","../src/core/form/inputs/arrays/ArrayOfOptionsInput/ArrayOfObjectOptionsInput.tsx","../src/core/form/inputs/arrays/ArrayOfOptionsInput/ArrayOfPrimitiveOptionsInput.tsx","../src/core/form/inputs/arrays/ArrayOfOptionsInput/ArrayOfOptionsInput.tsx","../src/core/form/inputs/arrays/ArrayOfPrimitivesInput/ArrayOfPrimitivesFunctions.tsx","../src/core/form/inputs/arrays/ArrayOfObjectsInput/InsertMenuGroups.tsx","../src/core/form/inputs/arrays/ArrayOfPrimitivesInput/ItemRow.tsx","../src/core/form/inputs/arrays/ArrayOfPrimitivesInput/NoItemsPlaceholder.tsx","../src/core/form/inputs/arrays/ArrayOfPrimitivesInput/utils/nearestIndex.ts","../src/core/form/inputs/arrays/ArrayOfPrimitivesInput/ArrayOfPrimitivesInput.tsx","../src/core/form/inputs/arrays/UniversalArrayInput.tsx","../src/core/form/inputs/BooleanInput.tsx","../src/core/form/inputs/EmailInput.tsx","../src/core/form/utils/getValidationRule.ts","../src/core/form/inputs/NumberInput.tsx","../src/core/form/inputs/ObjectInput/fieldGroups/GroupTab.tsx","../src/core/form/inputs/ObjectInput/fieldGroups/FieldGroupTabs.tsx","../src/core/form/inputs/ObjectInput/ObjectInput.styled.tsx","../src/core/form/inputs/ObjectInput/UnknownFields.tsx","../src/core/form/inputs/ObjectInput/ObjectInput.tsx","../src/core/form/inputs/Slug/utils/slugify.ts","../src/core/form/inputs/Slug/utils/useAsync.tsx","../src/core/form/inputs/Slug/utils/useSlugContext.ts","../src/core/form/inputs/Slug/SlugInput.tsx","../src/core/form/inputs/StringInput.tsx","../src/core/form/inputs/TextInput.tsx","../src/core/form/inputs/UrlInput.tsx","../src/core/form/inputs/CrossDatasetReferenceInput/DisabledFeatureWarning.tsx","../src/core/form/inputs/CrossDatasetReferenceInput/CrossDatasetReferencePreview.styled.tsx","../src/core/form/inputs/CrossDatasetReferenceInput/CrossDatasetReferencePreview.tsx","../src/core/form/inputs/CrossDatasetReferenceInput/useReferenceInfo.ts","../src/core/form/inputs/CrossDatasetReferenceInput/utils/useProjectId.ts","../src/core/form/inputs/CrossDatasetReferenceInput/OptionPreview.tsx","../src/core/form/inputs/CrossDatasetReferenceInput/PreviewReferenceValue.tsx","../src/core/form/inputs/CrossDatasetReferenceInput/ReferenceAutocomplete.tsx","../src/core/form/inputs/CrossDatasetReferenceInput/CrossDatasetReferenceInput.tsx","../src/core/form/studio/inputs/crossDatasetReference/datastores/getReferenceInfo.ts","../src/core/form/studio/inputs/crossDatasetReference/datastores/search.ts","../src/core/form/studio/inputs/crossDatasetReference/StudioCrossDatasetReferenceInput.tsx","../src/core/form/inputs/GlobalDocumentReferenceInput/GlobalDocumentReferencePreview.styled.tsx","../src/core/form/inputs/GlobalDocumentReferenceInput/utils/resolveProjectDataset.ts","../src/core/form/inputs/GlobalDocumentReferenceInput/GlobalDocumentReferencePreview.tsx","../src/core/form/inputs/GlobalDocumentReferenceInput/useReferenceInfo.ts","../src/core/form/inputs/GlobalDocumentReferenceInput/OptionPreview.tsx","../src/core/form/inputs/GlobalDocumentReferenceInput/PreviewReferenceValue.tsx","../src/core/form/inputs/GlobalDocumentReferenceInput/ReferenceAutocomplete.tsx","../src/core/form/inputs/GlobalDocumentReferenceInput/GlobalDocumentReferenceInput.tsx","../src/core/form/studio/inputs/globalDocumentReference/constants.ts","../src/core/form/studio/inputs/globalDocumentReference/datastores/getReferenceClient.ts","../src/core/preview/utils/keysOf.ts","../src/core/preview/utils/props.ts","../src/core/preview/createPathObserver.ts","../src/core/form/studio/inputs/globalDocumentReference/datastores/getReferenceInfo.ts","../src/core/form/studio/inputs/globalDocumentReference/datastores/search.ts","../src/core/form/studio/inputs/globalDocumentReference/StudioGlobalDocumentReferenceInput.tsx","../src/core/form/utils/WithReferencedAsset.tsx","../src/core/form/inputs/files/common/FileInputMenuItem/FileInputMenuItem.styled.tsx","../src/core/form/inputs/files/common/FileInputMenuItem/FileInputMenuItem.tsx","../src/core/form/inputs/files/common/ActionsMenu.tsx","../src/core/form/inputs/files/ImageInput/utils/image.ts","../src/core/form/inputs/files/common/assetSource.ts","../src/core/form/inputs/files/common/PlaceholderText.tsx","../src/core/form/inputs/files/common/styles.ts","../src/core/form/inputs/files/common/FileInputButton/styles.ts","../src/core/form/inputs/files/common/FileInputButton/FileInputButton.tsx","../src/core/form/inputs/files/common/UploadPlaceholder.tsx","../src/core/form/inputs/files/constants.ts","../src/core/form/inputs/files/ImageInput/ImagePreview.styled.tsx","../src/core/form/inputs/files/common/UploadProgress.styled.tsx","../src/core/form/inputs/files/common/UploadProgress.tsx","../src/core/form/inputs/files/common/UploadWarning.tsx","../src/core/form/inputs/common/helper.ts","../src/core/form/inputs/files/FileInput/FileActionsMenu.tsx","../src/core/form/inputs/files/FileInput/FileSkeleton.tsx","../src/core/form/inputs/files/FileInput/InvalidFileWarning.tsx","../src/core/form/inputs/files/FileInput/styles.ts","../src/core/form/inputs/files/FileInput/FileInput.tsx","../src/core/form/studio/inputs/StudioFileInput.tsx","../src/core/form/inputs/files/ImageInput/usePreviewImageSource.ts","../src/core/form/inputs/files/ImageInput/ImageInputAsset.tsx","../src/core/form/inputs/files/ImageInput/ImageActionsMenu.tsx","../src/core/form/inputs/files/ImageInput/ImageInputAssetMenu.tsx","../src/core/form/inputs/files/ImageInput/ImageInputAssetSource.tsx","../src/core/form/inputs/files/ImageInput/ImageInputBrowser.tsx","../src/core/form/inputs/files/common/RatioBox.tsx","../src/core/form/inputs/files/ImageToolInput/imagetool/constants.ts","../src/core/form/inputs/files/ImageToolInput/imagetool/calculateStyles.ts","../src/core/form/inputs/files/ImageToolInput/imagetool/HotspotImage.styles.tsx","../src/core/form/inputs/files/ImageToolInput/imagetool/HotspotImage.tsx","../src/core/form/inputs/files/ImageToolInput/imagetool/ImageLoader.tsx","../src/core/form/inputs/files/ImageToolInput/imagetool/Resize.tsx","../src/core/form/inputs/files/ImageToolInput/imagetool/2d/shapes.ts","../src/core/form/inputs/files/ImageToolInput/imagetool/2d/utils.ts","../src/core/form/inputs/files/ImageToolInput/imagetool/cursors.ts","../src/core/form/inputs/files/ImageToolInput/imagetool/DragAwareCanvas.tsx","../src/core/form/inputs/files/ImageToolInput/imagetool/draw.ts","../src/core/form/inputs/files/ImageToolInput/imagetool/ToolCanvas.styles.tsx","../src/core/form/inputs/files/ImageToolInput/imagetool/useActualCanvasSizeObserver.ts","../src/core/form/inputs/files/ImageToolInput/imagetool/ToolCanvas.tsx","../src/core/form/inputs/files/ImageToolInput/imagetool/ImageTool.tsx","../src/core/form/inputs/files/ImageToolInput/useLoadImage.ts","../src/core/form/inputs/files/ImageToolInput/ImageToolInput.tsx","../src/core/form/inputs/files/ImageInput/ImageInputHotspotInput.tsx","../src/core/form/inputs/files/ImageInput/ImagePreview.tsx","../src/core/form/inputs/files/ImageInput/ImageInputPreview.tsx","../src/core/form/inputs/files/ImageInput/ImageInputUploadPlaceholder.tsx","../src/core/form/inputs/files/ImageInput/InvalidImageWarning.tsx","../src/core/form/inputs/files/ImageInput/ImageInput.tsx","../src/core/form/studio/inputs/StudioImageInput.tsx","../src/core/form/studio/inputResolver/defaultInputs.ts","../src/core/form/__telemetry__/form.telemetry.ts","../src/core/form/components/ActivateOnFocus/ActivateOnFocus.styles.tsx","../src/core/form/components/ActivateOnFocus/ActivateOnFocus.tsx","../src/core/form/inputs/PortableText/Compositor.styles.tsx","../src/core/form/inputs/PortableText/contexts/PortableTextMemberItemElementRefsProvider.tsx","../src/core/form/inputs/PortableText/text/constants.ts","../src/core/form/inputs/PortableText/text/Decorator.tsx","../src/core/form/inputs/PortableText/text/helpers.ts","../src/core/form/inputs/PortableText/_common/ReviewChangesHighlightBlock.tsx","../src/core/form/inputs/PortableText/_common/StyledChangeIndicatorWithProvidedFullPath.tsx","../src/core/form/inputs/PortableText/callbacks/insertCallback.ts","../src/core/form/inputs/PortableText/callbacks/setCallback.ts","../src/core/form/inputs/PortableText/callbacks/unsetCallback.ts","../src/core/form/inputs/PortableText/BlockActions.tsx","../src/core/form/inputs/PortableText/text/TextBlock.styles.ts","../src/core/form/inputs/PortableText/text/textStyles.tsx","../src/core/form/inputs/PortableText/text/TextBlock.tsx","../src/core/form/inputs/PortableText/Editor.styles.tsx","../src/core/form/inputs/PortableText/hooks/useScrollSelectionIntoView.tsx","../src/core/form/inputs/PortableText/hooks/useSpellCheck.tsx","../src/core/form/inputs/PortableText/text/ListItem.tsx","../src/core/form/inputs/PortableText/text/Style.tsx","../src/core/components/collapseMenu/CollapseMenuDivider.tsx","../src/core/components/collapseMenu/CollapseOverflowMenu.tsx","../src/core/components/collapseMenu/ObserveElement.tsx","../src/core/components/collapseMenu/CollapseMenu.tsx","../src/core/components/collapseMenu/CollapseMenuButton.tsx","../src/core/form/inputs/PortableText/toolbar/CustomIcon.tsx","../src/core/form/inputs/PortableText/toolbar/helpers.tsx","../src/core/form/inputs/PortableText/toolbar/hooks.ts","../src/core/form/inputs/PortableText/toolbar/ActionMenu.tsx","../src/core/form/inputs/PortableText/toolbar/BlockStyleSelect.tsx","../src/core/form/inputs/PortableText/toolbar/InsertMenu.tsx","../src/core/form/inputs/PortableText/toolbar/Toolbar.tsx","../src/core/form/inputs/PortableText/Editor.tsx","../src/core/form/inputs/PortableText/hooks/useHotKeys.tsx","../src/core/form/inputs/PortableText/hooks/useTrackFocusPath.tsx","../src/core/form/inputs/PortableText/object/InlineObject.styles.ts","../src/core/form/inputs/PortableText/object/InlineObjectToolbarPopover.tsx","../src/core/form/inputs/PortableText/object/helpers.ts","../src/core/form/inputs/PortableText/object/modals/DialogModal.tsx","../src/core/form/inputs/PortableText/object/modals/PopoverModal.styles.ts","../src/core/form/inputs/PortableText/object/modals/PopoverModal.tsx","../src/core/form/inputs/PortableText/object/modals/ObjectEditModal.tsx","../src/core/form/inputs/PortableText/object/InlineObject.tsx","../src/core/form/inputs/PortableText/object/modals/AnnotationObjectEditModal.tsx","../src/core/form/inputs/PortableText/Compositor.tsx","../src/core/form/inputs/PortableText/contexts/PortableTextMarkers.tsx","../src/core/form/inputs/PortableText/contexts/PortableTextMembers.tsx","../src/core/form/inputs/PortableText/InvalidValue.tsx","../src/core/form/inputs/PortableText/presence-cursors/UserPresenceCursor.tsx","../src/core/form/inputs/PortableText/presence-cursors/usePresenceCursorDecorations.tsx","../src/core/form/inputs/PortableText/upload/helpers.ts","../src/core/form/inputs/PortableText/usePatches.ts","../src/core/form/inputs/PortableText/PortableTextInput.tsx","../src/core/form/components/tagInput/styles.ts","../src/core/form/components/tagInput/tagInput.tsx","../src/core/form/inputs/TagsArrayInput.tsx","../src/core/form/studio/inputResolver/resolveArrayInput.ts","../src/core/form/inputs/SelectInput.tsx","../src/core/form/studio/inputResolver/resolveNumberInput.ts","../src/core/form/studio/inputResolver/resolveStringInput.ts","../src/core/form/studio/inputResolver/inputResolver.tsx","../src/core/form/inputs/arrays/ArrayOfObjectsInput/List/PreviewItem.tsx","../src/core/form/inputs/ReferenceInput/ReferenceItemRefProvider.tsx","../src/core/form/inputs/ReferenceInput/ReferenceItem.tsx","../src/core/form/studio/inputResolver/itemResolver.tsx","../src/core/form/studio/defaults.tsx","../src/core/form/studio/FormBuilderInputErrorBoundary.tsx","../src/core/preview/streams/orientationChange.ts","../src/core/preview/streams/resize.ts","../src/core/preview/streams/scroll.ts","../src/core/preview/streams/intersectionObservableFor.ts","../src/core/preview/streams/visibilityChange.ts","../src/core/preview/useVisibility.ts","../src/core/preview/components/_constants.ts","../src/core/preview/components/_extractUploadState.ts","../src/core/preview/components/PreviewLoader.tsx","../src/core/form/inputs/PortableText/_legacyDefaultParts/CustomMarkers.tsx","../src/core/form/FormBuilderProvider.tsx","../src/core/form/studio/FormProvider.tsx","../src/core/form/studio/FormBuilder.tsx","../src/core/form/inputs/PortableText/object/BlockObject.styles.ts","../src/core/form/inputs/PortableText/object/BlockObjectActionsMenu.tsx","../src/core/form/inputs/PortableText/object/BlockObject.tsx","../src/core/form/studio/inputResolver/blockResolver.tsx","../src/core/form/form-components-hooks/components.tsx","../src/core/form/form-components-hooks/picks.ts","../src/core/form/form-components-hooks/componentHooks.ts","../src/core/preview/components/Preview.tsx","../src/core/preview/constants.tsx","../src/core/preview/utils/debounceCollect.ts","../src/core/preview/availability.ts","../src/core/preview/createGlobalListener.ts","../src/core/preview/createObserveDocument.ts","../src/core/preview/utils/getPreviewPaths.ts","../src/core/preview/utils/portableText.ts","../src/core/preview/utils/prepareForPreview.ts","../src/core/preview/createPreviewObserver.ts","../src/core/preview/documentPair.ts","../src/core/preview/liveDocumentIdSet.ts","../src/core/preview/utils/hasEqualFields.ts","../src/core/preview/utils/isUniqueBy.ts","../src/core/preview/utils/optimizeQuery.ts","../src/core/preview/observeFields.ts","../src/core/preview/documentPreviewStore.ts","../src/core/preview/useObserveDocument.ts","../src/core/preview/utils/getPreviewStateObservable.ts","../src/core/preview/utils/getPreviewValueWithFallback.tsx","../src/core/store/renderingContext/types.ts","../src/core/store/renderingContext/coreUiRenderingContext.ts","../src/core/store/renderingContext/defaultRenderingContext.ts","../src/core/store/renderingContext/listCapabilities.ts","../src/core/store/renderingContext/createRenderingContextStore.ts","../src/core/store/_legacy/document/__telemetry__/documentOutOfSyncEvents.telemetry.ts","../src/core/store/_legacy/document/__telemetry__/listenerLatency.telemetry.ts","../src/core/store/_legacy/grants/documentValuePermissions.ts","../../../node_modules/.pnpm/rxjs-etc@10.6.2_rxjs@7.8.2/node_modules/rxjs-etc/dist/esm/operators/refCountDelay.js","../src/core/store/_legacy/debugParams/debugParams.ts","../src/core/store/_legacy/grants/debug/exampleGrants.ts","../src/core/store/_legacy/grants/debug/roleGrants.ts","../src/core/store/_legacy/grants/grantsStore.ts","../src/core/store/_legacy/grants/templatePermissions.ts","../src/core/store/_legacy/history/history/chunker.ts","../src/core/store/_legacy/history/history/utils.ts","../src/core/store/_legacy/history/history/diffValue.ts","../src/core/store/_legacy/history/history/TwoEndedArray.ts","../src/core/store/_legacy/history/history/Timeline.ts","../src/core/store/_legacy/history/history/Aligner.ts","../src/core/store/_legacy/history/history/Reconstruction.ts","../src/core/store/_legacy/history/history/TimelineController.ts","../src/core/store/_legacy/history/createHistoryStore.ts","../src/core/store/_legacy/history/useTimelineSelector.ts","../src/core/store/_legacy/history/useTimelineStore.ts","../src/core/store/_legacy/presence/message-transports/bifurTransport.ts","../src/core/store/_legacy/presence/mock-events.ts","../src/core/store/_legacy/presence/presence-store.ts","../src/core/store/_legacy/project/projectStore.ts","../src/core/store/_legacy/project/useProject.ts","../src/core/store/_legacy/project/useProjectDatasets.ts","../src/core/store/_legacy/user/userStore.ts","../src/core/store/_legacy/datastores.ts","../src/core/store/_legacy/presence/useGlobalPresence.tsx","../src/core/store/events/EventsProvider.tsx","../src/core/store/events/types.ts","../src/core/store/events/utils.ts","../src/core/store/events/createEventsObservable.ts","../src/core/store/events/getDocumentTransactions.ts","../src/core/store/events/getDocumentChanges.ts","../src/core/store/events/getEditEvents.ts","../src/core/store/events/getExpandEvents.ts","../src/core/store/events/getInitialFetchEvents.ts","../src/core/store/events/getRemoteTransactionsSubscription.ts","../src/core/store/events/createEventsStore.ts","../src/core/store/events/getDocumentAtRevision.ts","../src/core/store/events/useEventsStore.ts","../src/core/field/diff/components/constants.ts","../src/core/field/diff/components/Event.tsx","../src/core/field/diff/components/DiffTooltip.tsx","../src/core/field/diff/components/DiffCard.tsx","../src/core/field/diff/components/ChangeTitleSegment.tsx","../src/core/field/diff/components/ChangeBreadcrumb.tsx","../src/core/field/conditional-property/utils.tsx","../src/core/field/conditional-property/useConditionalProperty.tsx","../src/core/field/schema/helpers.ts","../src/core/field/types/portableText/diff/symbols.ts","../src/core/field/types/portableText/diff/helpers.ts","../src/core/util/getPrintableType.ts","../src/core/field/validation/index.ts","../src/core/field/diff/helpers.ts","../src/core/field/TODO.ts","../src/core/field/types/boolean/preview/BooleanPreview.tsx","../src/core/field/types/boolean/diff/BooleanFieldDiff.tsx","../src/core/field/types/datetime/preview/DatetimePreview.tsx","../src/core/field/types/datetime/diff/DatetimeFieldDiff.tsx","../src/core/field/diff/hooks/useDocumentChange.ts","../src/core/field/diff/hooks/useRefValue.ts","../src/core/field/types/file/diff/helpers.ts","../src/core/field/types/file/diff/FileFieldDiff.tsx","../src/core/field/types/image/diff/helpers.ts","../src/core/field/types/image/diff/HotspotCropSVG.tsx","../src/core/field/types/image/diff/ImagePreview.tsx","../src/core/field/types/image/diff/ImageFieldDiff.tsx","../src/core/field/types/number/preview/NumberPreview.tsx","../src/core/field/types/number/diff/NumberFieldDiff.tsx","../src/core/field/types/portableText/diff/components/styledComponents.tsx","../src/core/field/types/portableText/diff/components/Annotation.tsx","../src/core/field/types/portableText/diff/components/Blockquote.tsx","../src/core/field/types/portableText/diff/components/Header.tsx","../src/core/field/types/portableText/diff/components/Paragraph.tsx","../src/core/field/types/portableText/diff/components/Block.tsx","../src/core/field/types/portableText/diff/components/Decorator.tsx","../src/core/field/types/portableText/diff/components/InlineObject.tsx","../src/core/field/types/portableText/diff/components/Text.tsx","../src/core/field/types/portableText/diff/components/PortableText.tsx","../src/core/field/types/portableText/diff/PTDiff.tsx","../src/core/field/types/reference/preview/ReferencePreview.tsx","../src/core/field/types/reference/diff/ReferenceFieldDiff.tsx","../src/core/field/types/string/preview/StringPreview.tsx","../src/core/field/types/string/diff/StringFieldDiff.tsx","../src/core/field/diff/resolve/defaultComponents.ts","../src/core/field/diff/resolve/resolveDiffComponent.ts","../src/core/field/diff/changes/buildChangeList.ts","../src/core/field/diff/changes/helpers.ts","../src/core/field/diff/changes/undoChange.ts","../src/core/field/diff/components/ChangeList.styled.tsx","../src/core/field/diff/components/DiffErrorBoundary.tsx","../src/core/field/diff/components/FromToArrow.tsx","../src/core/field/diff/components/DiffInspectWrapper.tsx","../src/core/field/diff/hooks/useChangeVerb.ts","../src/core/field/diff/components/FromTo.tsx","../src/core/field/diff/components/DiffFromTo.tsx","../src/core/field/diff/components/FallbackDiff.tsx","../src/core/field/diff/components/FieldChange.styled.tsx","../src/core/field/diff/components/RevertChangesButton.tsx","../src/core/field/diff/components/ValueError.tsx","../src/core/field/diff/components/FieldChange.tsx","../src/core/field/utils/useHover.ts","../src/core/field/diff/components/GroupChange.styled.tsx","../src/core/field/diff/components/GroupChange.tsx","../src/core/field/diff/components/ChangeResolver.tsx","../src/core/field/diff/components/NoChanges.tsx","../src/core/field/diff/components/ChangeList.tsx","../src/core/field/diff/components/ChangesError.tsx","../src/core/field/diff/components/DiffString.tsx","../src/core/field/diff/components/MetaInfo.tsx","../src/core/field/types/array/util/arrayUtils.ts","../src/core/field/types/array/diff/ArrayOfOptionsFieldDiff.tsx","../src/core/field/types/slug/preview/SlugPreview.tsx","../src/core/field/types/slug/diff/SlugFieldDiff.tsx","../src/core/field/types/url/diff/UrlFieldDiff.tsx","../src/core/field/diff/resolve/diffResolver.ts","../src/core/form/contexts/GetFormValue.tsx","../src/core/form/field/actions/copyAction.ts","../src/core/form/field/actions/pasteAction.ts","../src/core/config/document/fieldActions/reducer.ts","../src/core/config/document/fieldActions/index.ts","../src/core/config/document/inspector.ts","../src/core/deprecatedPlugins/DeprecatedScheduledPublishing.tsx","../src/core/config/flattenConfig.ts","../src/core/hooks/useReferringDocuments.ts","../src/core/form/studio/assetSourceDefault/shared/AssetUsageList.tsx","../src/core/form/studio/assetSourceDefault/shared/ConfirmMessage.tsx","../src/core/form/studio/assetSourceDefault/shared/AssetDeleteDialog.tsx","../src/core/form/studio/assetSourceDefault/shared/AssetMenu.tsx","../src/core/form/studio/assetSourceDefault/shared/AssetUsageDialog.tsx","../src/core/form/studio/assetSourceDefault/utils/mimeType.ts","../src/core/form/studio/assetSourceDefault/file/AssetRow.tsx","../src/core/form/studio/assetSourceDefault/file/FileListView.tsx","../src/core/form/studio/assetSourceDefault/image/AssetThumb.tsx","../src/core/form/studio/assetSourceDefault/image/ImageListView.tsx","../src/core/form/studio/assetSourceDefault/shared/DefaultSource.tsx","../src/core/form/studio/assetSourceDefault/FileAssetSource.ts","../src/core/form/studio/assetSourceDefault/ImageAssetSource.tsx","../src/core/config/configPropertyReducers.ts","../src/core/config/resolveConfigProperty.ts","../src/core/i18n/backend.ts","../src/core/i18n/i18nConfig.ts","../src/core/studio/components/navbar/search/definitions/defaultFilters.ts","../src/core/hooks/useUnitFormatter.ts","../src/core/studio/components/navbar/search/components/filters/common/ReferencePreviewTitle.tsx","../src/core/studio/components/navbar/search/components/filters/common/ButtonValue.tsx","../src/core/studio/components/navbar/search/components/filters/filter/inputs/number/Number.tsx","../src/core/studio/components/navbar/search/components/filters/filter/inputs/number/NumberRange.tsx","../src/core/studio/components/navbar/search/components/filters/filter/inputs/reference/ReferenceAutocomplete.tsx","../src/core/studio/components/navbar/search/components/filters/filter/inputs/reference/Reference.tsx","../src/core/studio/components/navbar/search/components/filters/filter/inputs/string/StringList.tsx","../src/core/studio/components/navbar/search/components/filters/icons/GteIcon.tsx","../src/core/studio/components/navbar/search/components/filters/icons/GtIcon.tsx","../src/core/studio/components/navbar/search/components/filters/icons/LteIcon.tsx","../src/core/studio/components/navbar/search/components/filters/icons/LtIcon.tsx","../src/core/studio/components/navbar/search/definitions/operators/operatorTypes.ts","../src/core/studio/components/navbar/search/definitions/operators/operatorUtils.ts","../src/core/studio/components/navbar/search/definitions/operators/arrayOperators.ts","../src/core/studio/components/navbar/search/components/filters/filter/inputs/asset/AssetSourceError.tsx","../src/core/studio/components/navbar/search/components/filters/filter/inputs/asset/preview/FileReferencePreview.tsx","../src/core/studio/components/navbar/search/components/filters/filter/inputs/asset/preview/ImageReferencePreview.tsx","../src/core/studio/components/navbar/search/components/filters/filter/inputs/asset/preview/AssetPreview.tsx","../src/core/studio/components/navbar/search/components/filters/filter/inputs/asset/Asset.tsx","../src/core/studio/components/navbar/search/definitions/operators/assetOperators.ts","../src/core/studio/components/navbar/search/components/filters/filter/inputs/boolean/Boolean.tsx","../src/core/studio/components/navbar/search/definitions/operators/booleanOperators.ts","../src/core/studio/components/navbar/search/components/filters/filter/inputs/date/dateIncludeTimeFooter/DateIncludeTimeFooter.tsx","../src/core/studio/components/navbar/search/components/filters/filter/inputs/date/datePicker/calendar/contexts/useDatePicker.ts","../src/core/studio/components/navbar/search/components/filters/filter/inputs/date/datePicker/calendar/CalendarHeader.tsx","../src/core/studio/components/navbar/search/components/filters/filter/inputs/date/datePicker/calendar/CalendarDay.tsx","../src/core/studio/components/navbar/search/components/filters/filter/inputs/date/datePicker/calendar/constants.ts","../src/core/studio/components/navbar/search/components/filters/filter/inputs/date/datePicker/calendar/utils.ts","../src/core/studio/components/navbar/search/components/filters/filter/inputs/date/datePicker/calendar/CalendarMonth.tsx","../src/core/studio/components/navbar/search/components/filters/filter/inputs/date/datePicker/calendar/Calendar.tsx","../src/core/studio/components/navbar/search/components/filters/filter/inputs/date/datePicker/DatePicker.tsx","../src/core/studio/components/navbar/search/components/filters/filter/inputs/date/utils/getDateISOString.ts","../src/core/studio/components/navbar/search/components/filters/filter/inputs/date/ParsedDateTextInput.tsx","../src/core/studio/components/navbar/search/components/filters/filter/inputs/date/CommonDateDirection.tsx","../src/core/studio/components/navbar/search/components/filters/filter/inputs/date/DateAfter.tsx","../src/core/studio/components/navbar/search/components/filters/filter/inputs/date/DateBefore.tsx","../src/core/studio/components/navbar/search/components/filters/filter/inputs/date/CommonDateEqual.tsx","../src/core/studio/components/navbar/search/components/filters/filter/inputs/date/DateEqual.tsx","../src/core/studio/components/navbar/search/components/filters/filter/inputs/date/DateLast.tsx","../src/core/studio/components/navbar/search/components/filters/filter/inputs/date/CommonDateRange.tsx","../src/core/studio/components/navbar/search/components/filters/filter/inputs/date/DateRange.tsx","../src/core/studio/components/navbar/search/components/filters/filter/inputs/date/DateTimeAfter.tsx","../src/core/studio/components/navbar/search/components/filters/filter/inputs/date/DateTimeBefore.tsx","../src/core/studio/components/navbar/search/components/filters/filter/inputs/date/DateTimeEqual.tsx","../src/core/studio/components/navbar/search/components/filters/filter/inputs/date/DateTimeRange.tsx","../src/core/studio/components/navbar/search/definitions/operators/dateOperators.ts","../src/core/studio/components/navbar/search/definitions/operators/definedOperators.ts","../src/core/studio/components/navbar/search/definitions/operators/numberOperators.ts","../src/core/studio/components/navbar/search/components/filters/filter/inputs/string/String.tsx","../src/core/studio/components/navbar/search/definitions/operators/portableTextOperators.ts","../src/core/studio/components/navbar/search/definitions/operators/referenceOperators.ts","../src/core/studio/components/navbar/search/definitions/operators/slugOperators.ts","../src/core/studio/components/navbar/search/definitions/operators/stringOperators.ts","../src/core/studio/components/navbar/search/definitions/operators/defaultOperators.ts","../src/core/comments/i18n/index.ts","../src/core/comments/context/authoring-path/CommentsAuthoringPathProvider.tsx","../src/core/comments/hooks/useCommentsIntent.ts","../src/core/comments/hooks/useNotificationTarget.ts","../src/core/form/inputs/TelephoneInput.tsx","../src/core/form/store/conditional-property/resolveConditionalProperty.ts","../src/core/form/store/stateTreeHelper.ts","../src/core/form/store/constants.ts","../src/core/form/store/utils/getId.ts","../src/core/form/store/conditional-property/createCallbackResolver.ts","../src/core/form/store/utils/createMemoizer.ts","../src/core/form/store/utils/getCollapsibleOptions.ts","../src/core/form/store/formState.ts","../src/core/form/store/useFormState.ts","../src/core/form/store/types/asserters.ts","../src/core/form/store/utils/getExpandOperations.ts","../src/core/create/createUtils.ts","../src/core/hooks/useConnectionState.ts","../src/core/hooks/useDocumentOperation.ts","../src/core/hooks/useEditState.ts","../src/core/hooks/useValidationStatus.ts","../src/core/perspective/getSelectedPerspective.ts","../src/core/form/useDocumentForm.ts","../src/core/form/utils/path.ts","../src/core/form/utils/mutationPatch.ts","../src/core/form/utils/TransformPatches.tsx","../src/core/comments/utils/buildCommentBreadcrumbs.ts","../src/core/comments/helpers.ts","../src/core/comments/utils/buildCommentThreadItems.ts","../src/core/comments/utils/inline-comments/buildRangeDecorationSelectionsFromComments.ts","../src/core/comments/utils/inline-comments/buildCommentRangeDecorations.tsx","../src/core/comments/utils/inline-comments/buildTextSelectionFromFragment.ts","../src/core/comments/utils/mergeCommentReactions.ts","../src/core/comments/utils/transform-children/linkMiddleware.tsx","../src/core/comments/utils/transform-children/index.ts","../src/core/comments/utils/weakenReferencesInContentSnapshot.ts","../src/core/comments/hooks/use-comment-operations/createOperation.ts","../src/core/comments/hooks/use-comment-operations/reactOperation.ts","../src/core/comments/hooks/use-comment-operations/removeOperation.ts","../src/core/comments/hooks/use-comment-operations/updateOperation.ts","../src/core/comments/hooks/use-comment-operations/useCommentOperations.ts","../src/core/comments/hooks/useComments.ts","../src/core/comments/hooks/useCommentsAuthoringPath.ts","../src/core/comments/hooks/useCommentsEnabled.ts","../src/core/comments/hooks/useCommentsOnboarding.ts","../src/core/comments/hooks/useCommentsScroll.ts","../src/core/comments/hooks/useCommentsSelectedPath.ts","../src/core/comments/__telemetry__/comments.telemetry.ts","../src/core/comments/hooks/useCommentsTelemetry.ts","../src/core/comments/hooks/useCommentsUpsell.ts","../src/core/comments/hooks/useResolveCommentsEnabled.ts","../src/core/comments/store/reducer.ts","../src/core/comments/store/useCommentsStore.ts","../src/core/comments/context/comments/CommentsProvider.tsx","../src/core/comments/context/enabled/CommentsEnabledProvider.tsx","../src/core/comments/context/intent/CommentsIntentProvider.tsx","../src/core/comments/context/onboarding/CommentsOnboardingProvider.tsx","../src/core/comments/context/selected-path/CommentsSelectedPathProvider.tsx","../src/core/comments/context/upsell/CommentsUpsellProvider.tsx","../src/core/comments/plugin/document-layout/CommentsDocumentLayout.tsx","../src/core/comments/constants.ts","../src/core/comments/plugin/field/CommentsFieldButton.tsx","../src/core/comments/plugin/field/CommentsField.tsx","../src/core/comments/plugin/input/helpers.ts","../src/core/comments/plugin/input/components/FloatingButtonPopover.tsx","../src/core/comments/plugin/input/components/InlineCommentInputPopover.tsx","../src/core/comments/plugin/input/components/CommentsPortableTextInput.tsx","../src/core/comments/plugin/input/CommentsInput.tsx","../src/core/comments/plugin/inspector/CommentsInspectorFeedbackFooter.tsx","../src/core/comments/plugin/inspector/CommentsInspectorHeader.tsx","../src/core/comments/plugin/inspector/CommentsInspector.tsx","../src/core/comments/plugin/inspector/index.ts","../src/core/comments/plugin/studio-layout/CommentsStudioLayout.tsx","../src/core/comments/plugin/index.ts","../src/core/create/createDocumentUrls.ts","../src/core/create/i18n/index.ts","../src/core/create/__telemetry__/create.telemetry.ts","../src/core/create/useSanityCreateTelemetry.ts","../src/core/create/components/CreateUnlinkConfirmDialog.tsx","../src/core/create/components/DialogPortalProvider.tsx","../src/core/create/components/CreateLinkedActions.tsx","../src/core/create/components/constants.ts","../src/core/create/components/CreateLearnMoreButton.tsx","../src/core/create/components/media/CreateSvg.tsx","../src/core/create/components/CreateLinkedDocumentBannerContent.tsx","../src/core/create/context/useSanityCreateConfig.ts","../src/core/create/start-in-create/CreateLinkingDialog.tsx","../src/core/create/studio-app/checkStudioManifestExists.ts","../src/core/create/studio-app/fetchCreateCompatibleAppId.ts","../src/core/create/studio-app/useStudioAppIdStore.ts","../src/core/create/components/StartInCreateDevInfoButton.tsx","../src/core/create/components/StartInCreateBanner.tsx","../src/core/create/studio-app/appIdCache.ts","../src/core/create/context/SanityCreateConfigProvider.tsx","../src/core/create/components/CreateIntegrationWrapper.tsx","../src/core/create/createIntegrationPlugin.ts","../src/core/scheduledPublishing/components/errorCallout/ErrorCallout.tsx","../src/core/scheduledPublishing/components/infoCallout/InfoCallout.tsx","../src/core/scheduledPublishing/components/timeZoneButton/TimeZoneButton.tsx","../src/core/scheduledPublishing/components/timeZoneButton/TimeZoneButtonElementQuery.tsx","../src/core/scheduledPublishing/components/warningBanner/WarningBanner.tsx","../../../node_modules/.pnpm/swr@2.2.5_react@18.3.1/node_modules/swr/dist/_internal/index.mjs","../../../node_modules/.pnpm/swr@2.2.5_react@18.3.1/node_modules/swr/dist/core/index.mjs","../src/core/scheduledPublishing/tool/contexts/useHasUsedScheduledPublishing.ts","../src/core/scheduledPublishing/tool/contexts/ScheduledPublishingEnabledProvider.tsx","../src/core/scheduledPublishing/utils/scheduleUtils.ts","../src/core/scheduledPublishing/utils/sortByExecuteDate.ts","../src/core/scheduledPublishing/hooks/useScheduleApi.ts","../src/core/scheduledPublishing/hooks/useScheduleOperation.tsx","../src/core/scheduledPublishing/hooks/usePollSchedules.ts","../src/core/scheduledPublishing/tool/contexts/schedules.tsx","../src/core/scheduledPublishing/hooks/useFilteredSchedules.ts","../src/core/scheduledPublishing/tool/scheduleFilters/ScheduleFilter.tsx","../src/core/scheduledPublishing/tool/scheduleFilters/ScheduleFilters.tsx","../src/core/studio/upsell/UpsellPanel.tsx","../src/core/hooks/useProjectId.ts","../src/core/studio/upsell/__telemetry__/upsell.telemetry.ts","../src/core/scheduledPublishing/tool/contexts/SchedulePublishingUpsellProvider.tsx","../src/core/scheduledPublishing/tool/schedules/BigIconComingSoon.tsx","../src/core/scheduledPublishing/tool/schedules/BigIconScreen.tsx","../src/core/scheduledPublishing/tool/schedules/BigIconSuccess.tsx","../src/core/scheduledPublishing/tool/schedules/EmptySchedules.tsx","../src/core/scheduledPublishing/utils/paneItemHelpers.tsx","../src/core/scheduledPublishing/hooks/usePreviewState.ts","../src/core/scheduledPublishing/hooks/useSchemaType.ts","../src/core/scheduledPublishing/components/scheduleItem/dateWithTooltip/DateWithTooltipElementQuery.tsx","../src/core/scheduledPublishing/contexts/documentActionProps.tsx","../src/core/scheduledPublishing/hooks/useScheduleForm.ts","../src/core/scheduledPublishing/components/dateInputs/base/calendar/CalendarDay.tsx","../src/core/scheduledPublishing/components/dateInputs/base/calendar/constants.ts","../src/core/scheduledPublishing/components/dateInputs/base/calendar/utils.ts","../src/core/scheduledPublishing/components/dateInputs/base/calendar/CalendarMonth.tsx","../src/core/scheduledPublishing/components/dateInputs/base/calendar/features.ts","../src/core/scheduledPublishing/components/dateInputs/base/calendar/YearInput.tsx","../src/core/scheduledPublishing/components/dateInputs/base/calendar/Calendar.tsx","../src/core/scheduledPublishing/components/dateInputs/base/DatePicker.tsx","../src/core/scheduledPublishing/components/dateInputs/base/DateTimeInput.tsx","../src/core/scheduledPublishing/components/dateInputs/CommonDateTimeInput.tsx","../src/core/scheduledPublishing/components/dateInputs/utils.ts","../src/core/scheduledPublishing/components/dateInputs/DateTimeInput.tsx","../src/core/scheduledPublishing/components/editScheduleForm/ScheduleForm.tsx","../src/core/scheduledPublishing/components/editScheduleForm/EditScheduleForm.tsx","../src/core/scheduledPublishing/components/dialogs/DialogHeader.tsx","../src/core/scheduledPublishing/components/dialogs/DialogScheduleEdit.tsx","../src/core/scheduledPublishing/hooks/useDialogScheduleEdit.ts","../src/core/scheduledPublishing/components/scheduleContextMenu/MenuItemWithPermissionsTooltip.tsx","../src/core/scheduledPublishing/components/scheduleContextMenu/ContextMenuItems.tsx","../src/core/scheduledPublishing/components/scheduleContextMenu/ScheduleContextMenu.tsx","../src/core/scheduledPublishing/utils/validationUtils.ts","../src/core/scheduledPublishing/components/validation/SchedulesValidation.tsx","../src/core/scheduledPublishing/hooks/usePublishedId.ts","../src/core/scheduledPublishing/components/validation/ValidationListItem.tsx","../src/core/scheduledPublishing/components/validation/ValidationList.tsx","../src/core/scheduledPublishing/components/validation/ValidationInfo.tsx","../src/core/scheduledPublishing/components/scheduleItem/dateWithTooltip/DateWithTooltip.tsx","../src/core/scheduledPublishing/components/scheduleItem/StateReasonFailedInfo.tsx","../src/core/scheduledPublishing/components/scheduleItem/User.tsx","../src/core/scheduledPublishing/components/scheduleItem/PreviewWrapper.tsx","../src/core/scheduledPublishing/components/scheduleItem/DocumentPreview.tsx","../src/core/scheduledPublishing/components/scheduleContextMenu/FallbackContextMenu.tsx","../src/core/scheduledPublishing/components/scheduleItem/NoSchemaItem.tsx","../src/core/scheduledPublishing/components/scheduleItem/ToolPreview.tsx","../src/core/scheduledPublishing/components/scheduleItem/ScheduleItem.tsx","../src/core/scheduledPublishing/tool/schedules/VirtualListItem.tsx","../src/core/scheduledPublishing/tool/schedules/VirtualList.tsx","../src/core/scheduledPublishing/tool/schedules/Schedules.tsx","../src/core/scheduledPublishing/tool/schedulesContextMenu/SchedulesContextMenu.tsx","../src/core/scheduledPublishing/tool/toolCalendar/Pip.tsx","../src/core/scheduledPublishing/tool/toolCalendar/CalendarDay.tsx","../src/core/scheduledPublishing/tool/toolCalendar/ToolCalendar.tsx","../src/core/scheduledPublishing/tool/Tool.tsx","../src/core/scheduledPublishing/components/dialogs/DialogFooter.tsx","../src/core/scheduledPublishing/plugin/documentActions/schedule/NewScheduleInfo.tsx","../src/core/scheduledPublishing/plugin/documentActions/schedule/Schedules.tsx","../src/core/scheduledPublishing/plugin/documentActions/schedule/ScheduleAction.tsx","../src/core/scheduledPublishing/plugin/documentActions/schedule/index.ts","../src/core/scheduledPublishing/plugin/documentBadges/scheduled/ScheduledBadge.tsx","../src/core/scheduledPublishing/plugin/documentBadges/scheduled/index.ts","../src/core/scheduledPublishing/components/documentWrapper/ScheduleBanner.tsx","../src/core/scheduledPublishing/components/documentWrapper/ScheduledDocumentInput.tsx","../src/core/scheduledPublishing/plugin/inputResolver.tsx","../src/core/scheduledPublishing/plugin/SchedulePublishingStudioLayout.tsx","../src/core/scheduledPublishing/plugin/index.ts","../src/core/tasks/i18n/index.ts","../src/core/tasks/context/enabled/TasksEnabledProvider.tsx","../src/core/tasks/context/enabled/useTasksEnabled.ts","../src/core/tasks/context/isLastPane/IsLastPaneProvider.tsx","../src/core/tasks/context/isLastPane/useIsLastPane.ts","../src/core/tasks/context/mentionUser/MentionUserProvider.tsx","../src/core/tasks/context/mentionUser/useMentionUser.ts","../src/core/tasks/__telemetry__/tasks.telemetry.ts","../src/core/tasks/context/navigation/TasksNavigationProvider.tsx","../src/core/tasks/context/navigation/useTasksNavigation.ts","../src/core/tasks/store/reducer.ts","../src/core/tasks/store/useTasksStore.ts","../src/core/tasks/context/tasks/TasksProvider.tsx","../src/core/tasks/context/tasks/useTasks.ts","../src/core/tasks/context/upsell/TasksUpsellProvider.tsx","../src/core/tasks/context/upsell/useTasksUpsell.ts","../src/core/tasks/plugin/TaskCreateAction.tsx","../src/core/tasks/plugin/structure/SetActiveDocument.tsx","../src/core/tasks/plugin/TasksDocumentInputLayout.tsx","../src/core/tasks/plugin/TasksFooterOpenTasks.tsx","../src/core/tasks/components/form/utils.ts","../src/core/tasks/components/activity/helpers/index.tsx","../src/core/tasks/components/activity/TaskActivityEditedAt.tsx","../src/core/tasks/components/TasksUserAvatar.tsx","../src/core/tasks/components/activity/TasksActivityItem.tsx","../src/core/tasks/components/activity/TasksActivityCommentInput.tsx","../src/core/tasks/components/activity/TasksActivityCommentItem.tsx","../src/core/tasks/components/activity/TasksActivityCreatedAt.tsx","../src/core/tasks/components/activity/TasksSubscribers.tsx","../src/core/tasks/components/activity/TasksActivityLog.tsx","../src/core/tasks/components/form/fields/assignee/AssigneeSelectionMenu.tsx","../src/core/tasks/components/form/fields/assignee/AssigneeCreateFormField.tsx","../src/core/tasks/components/form/fields/assignee/AssigneeEditFormField.tsx","../src/core/tasks/components/form/fields/DateEditFormField.tsx","../src/core/tasks/components/form/fields/descriptionInput/blocks/DescriptionInputBlock.tsx","../src/core/tasks/components/form/fields/descriptionInput/render/renderBlock.tsx","../src/core/tasks/components/form/fields/descriptionInput/DescriptionInput.tsx","../src/core/tasks/components/form/fields/FieldWrapper.tsx","../src/core/tasks/components/form/fields/StatusSelector.tsx","../src/core/tasks/components/form/CurrentWorkspaceProvider.tsx","../src/core/tasks/components/form/fields/TargetField.tsx","../src/core/tasks/components/form/fields/TitleField.tsx","../src/core/tasks/components/form/tasksFormBuilder/FormCreate.tsx","../src/core/tasks/components/form/RemoveTaskDialog.tsx","../src/core/tasks/components/form/tasksFormBuilder/FormEdit.tsx","../src/core/tasks/components/form/tasksFormBuilder/TasksNotificationTarget.tsx","../src/core/tasks/components/form/addonWorkspace/taskSchema.tsx","../src/core/tasks/components/form/addonWorkspace/TasksAddOnWorkspaceProvider.tsx","../src/core/tasks/components/form/tasksFormBuilder/TasksFormBuilder.tsx","../src/core/tasks/components/list/EmptyStates.tsx","../src/core/tasks/components/list/DocumentPreview.tsx","../src/core/tasks/components/list/TasksStatus.tsx","../src/core/tasks/components/list/TasksListItem.tsx","../src/core/tasks/components/list/TasksList.tsx","../src/core/tasks/components/upsell/TasksUpsellPanel.tsx","../src/core/tasks/components/sidebar/TaskListFeedbackFooter.tsx","../src/core/tasks/components/sidebar/TasksListTabs.tsx","../src/core/tasks/components/sidebar/TasksActiveTabNavigation.tsx","../src/core/tasks/components/sidebar/TasksHeaderDraftsMenu.tsx","../src/core/tasks/components/sidebar/TasksSidebarHeader.tsx","../src/core/tasks/components/sidebar/TasksSidebar.tsx","../src/core/tasks/plugin/TasksStudioActiveToolLayout.tsx","../src/core/tasks/plugin/TasksStudioLayout.tsx","../src/core/tasks/plugin/TasksStudioNavbar.tsx","../src/core/tasks/plugin/index.tsx","../src/core/config/resolveDefaultPlugins.ts","../src/core/config/resolveSchemaTypes.ts","../src/core/config/SchemaError.ts","../src/core/config/prepareConfig.tsx","../src/core/config/resolveConfig.ts","../src/core/config/useConfigContextFromSource.ts","../src/core/studio/workspaces/WorkspacesProvider.tsx","../src/core/studio/router/RouterHistoryContext.tsx","../src/core/studio/activeWorkspaceMatcher/ActiveWorkspaceMatcherProvider.tsx","../src/core/studio/activeWorkspaceMatcher/createCommonBasePathRegex.ts","../src/core/studio/activeWorkspaceMatcher/matchWorkspace.ts","../src/core/studio/activeWorkspaceMatcher/useNormalizedWorkspaces.ts","../src/core/studio/activeWorkspaceMatcher/useSyncPathnameWithWorkspace.ts","../src/core/studio/activeWorkspaceMatcher/ActiveWorkspaceMatcher.tsx","../src/core/studio/activeWorkspaceMatcher/useActiveWorkspace.ts","../src/core/studio/addonDataset/AddonDatasetProvider.tsx","../src/core/studio/addonDataset/useAddonDataset.ts","../src/core/studio/colorSchemeStore.ts","../src/core/studio/colorScheme.tsx","../src/core/studio/components/navbar/search/SearchButton.tsx","../src/core/studio/components/navbar/search/SearchDialog.tsx","../src/core/studio/components/navbar/StudioLogo.tsx","../src/core/components/CapabilityGate.tsx","../src/core/studio/components/navbar/tools/ToolLink.tsx","../src/core/perspective/styles.ts","../src/core/perspective/ReleasesToolLink.tsx","../src/core/perspective/navbar/currentGlobalPerspectiveLabel.tsx","../src/core/perspective/useExcludedPerspective.tsx","../src/core/perspective/navbar/PerspectiveLayerIndicator.tsx","../src/core/perspective/navbar/GlobalPerspectiveMenuItem.tsx","../src/core/perspective/navbar/ReleaseTypeMenuSection.tsx","../src/core/perspective/navbar/ReleasesList.tsx","../src/core/perspective/navbar/useScrollIndicatorVisibility.ts","../src/core/perspective/navbar/GlobalPerspectiveMenu.tsx","../src/core/perspective/navbar/ReleasesNav.tsx","../src/core/studio/components/navbar/StudioActiveToolLayout.tsx","../src/core/studio/screens/NoToolsScreen.tsx","../src/core/studio/screens/RedirectingScreen.tsx","../src/core/studio/screens/ToolNotFoundScreen.tsx","../src/core/components/errorActions/strings.ts","../src/core/components/errorActions/useCopyErrorDetails.ts","../src/core/components/errorActions/ErrorActions.tsx","../src/core/environment/hasSanityPackageInImportMap.ts","../src/core/error/sentry/makeBufferedTransport.ts","../src/core/error/sentry/sentryErrorReporter.ts","../src/core/error/errorReporter.ts","../src/core/studio/components/navbar/workspace/constants.ts","../src/core/studio/components/navbar/workspace/hooks/useWorkspaceAuthStates.ts","../src/core/studio/components/navbar/workspace/WorkspacePreview.tsx","../src/core/studio/components/navbar/workspace/WorkspaceAuth/Layout.tsx","../src/core/studio/components/navbar/workspace/WorkspaceAuth/WorkspaceAuth.tsx","../src/core/studio/components/navbar/workspace/WorkspaceMenuButton.tsx","../src/core/studio/screens/AuthenticateScreen.tsx","../src/core/studio/screens/ConfigErrorsScreen.tsx","../src/core/studio/screens/CorsOriginErrorScreen.tsx","../src/core/studio/screens/NotAuthenticatedScreen.tsx","../src/core/studio/screens/NotFoundScreen.tsx","../src/core/studio/screens/RequestAccessScreen.tsx","../src/core/studio/screens/schemaErrors/utils.ts","../src/core/studio/screens/schemaErrors/reportWarnings.ts","../src/core/studio/screens/schemaErrors/SchemaProblemGroups.tsx","../src/core/studio/screens/schemaErrors/SchemaErrorsScreen.tsx","../src/core/studio/StudioErrorBoundary.tsx","../src/core/studio/StudioLayout.tsx","../src/core/studio/studio-components-hooks/picks.ts","../src/core/studio/studio-components-hooks/componentHooks.ts","../src/core/studio/components/navbar/configIssues/ConfigIssuesButton.tsx","../src/core/studio/components/navbar/free-trial/__telemetry__/trialDialogEvents.telemetry.ts","../src/core/studio/components/navbar/free-trial/DialogContent.tsx","../src/core/studio/components/navbar/free-trial/FreeTrialButton.tsx","../src/core/studio/components/navbar/free-trial/FreeTrialContext.tsx","../src/core/studio/components/navbar/free-trial/PopoverContent.tsx","../src/core/studio/components/navbar/free-trial/FreeTrial.tsx","../src/core/studio/components/navbar/free-trial/FreeTrialProvider.tsx","../src/core/studio/components/navbar/SanityLogo.tsx","../src/core/studio/components/navbar/home/HomeButton.tsx","../src/core/studio/components/navbar/navDrawer/ApperanceMenu.tsx","../src/core/studio/components/navbar/navDrawer/LocaleMenu.tsx","../src/core/studio/components/navbar/navDrawer/ManageMenu.tsx","../src/core/studio/components/navbar/navDrawer/NavDrawer.tsx","../src/core/studio/components/navbar/new-document/filter.ts","../src/core/studio/components/navbar/new-document/NewDocumentButton.style.ts","../src/core/studio/components/navbar/new-document/NewDocumentListOption.tsx","../src/core/studio/components/navbar/new-document/NewDocumentList.tsx","../src/core/studio/components/navbar/new-document/NewDocumentButton.tsx","../src/core/studio/components/navbar/new-document/useNewDocumentOptions.ts","../src/core/studio/components/navbar/presence/PresenceMenuItem.tsx","../src/core/studio/components/navbar/presence/PresenceMenu.tsx","../src/core/studio/components/navbar/resources/helper-functions/helpResources.ts","../src/core/studio/components/navbar/resources/helper-functions/hooks.ts","../src/core/studio/studioAnnouncements/__telemetry__/studioAnnouncements.telemetry.ts","../src/core/studio/studioAnnouncements/useStudioAnnouncements.tsx","../src/core/studio/studioAnnouncements/StudioAnnouncementsMenuItem.tsx","../src/core/studio/components/navbar/resources/ResourcesMenuItems.tsx","../src/core/studio/components/navbar/resources/ResourcesButton.tsx","../src/core/studio/components/navbar/userMenu/LocaleMenu.tsx","../src/core/studio/components/navbar/userMenu/ApperanceMenu.tsx","../src/core/studio/components/navbar/userMenu/LoginProviderLogo.tsx","../src/core/studio/components/navbar/userMenu/ManageMenu.tsx","../src/core/studio/components/navbar/userMenu/UserMenu.tsx","../src/core/studio/components/navbar/StudioNavbar.tsx","../src/core/components/collapseTabList/CollapseTabList.tsx","../src/core/studio/components/navbar/tools/ToolCollapseMenu.tsx","../src/core/studio/components/navbar/tools/ToolVerticalMenu.tsx","../src/core/studio/components/navbar/tools/StudioToolMenu.tsx","../src/core/studio/copyPaste/__telemetry__/copyPaste.telemetry.ts","../src/core/studio/copyPaste/resolveSchemaTypeForPath.ts","../src/core/studio/copyPaste/utils.ts","../src/core/studio/copyPaste/documentMatchesGroqFilter.ts","../src/core/studio/copyPaste/transferValue.ts","../src/core/studio/copyPaste/CopyPasteProvider.tsx","../src/core/studio/GlobalStyle.tsx","../src/core/error/ErrorLogger.tsx","../src/core/perspective/PerspectiveProvider.tsx","../src/core/perspective/GlobalPerspectiveProvider.tsx","../src/core/studio/AuthBoundary.tsx","../src/core/studio/constants.ts","../src/core/studio/MaybeEnableErrorReporting.ts","../src/core/studio/packageVersionStatus/checkForLatestVersions.ts","../src/core/studio/packageVersionStatus/PackageVersionStatusProvider.tsx","../src/core/studio/studioAnnouncements/StudioAnnouncementsCard.tsx","../src/core/studio/studioAnnouncements/Divider.tsx","../src/core/studio/studioAnnouncements/StudioAnnouncementsDialog.tsx","../src/core/studio/studioAnnouncements/useSeenAnnouncements.ts","../src/core/studio/studioAnnouncements/types.ts","../src/core/studio/studioAnnouncements/utils.ts","../src/core/studio/studioAnnouncements/StudioAnnouncementsProvider.tsx","../src/core/theme/_legacy/helpers.ts","../src/core/theme/_legacy/color.ts","../src/core/theme/_legacy/fonts.ts","../src/core/theme/_legacy/palette.ts","../src/core/theme/_legacy/tones.ts","../src/core/theme/_legacy/theme.ts","../src/core/theme/index.ts","../src/core/studio/StudioThemeProvider.tsx","../src/core/studio/__telemetry__/performance.telemetry.ts","../src/core/studio/telemetry/useMeasurePerformanceTelemetry.ts","../src/core/studio/telemetry/PerformanceTelemetry.ts","../src/core/studio/telemetry/StudioTelemetryProvider.tsx","../src/core/studio/workspaceLoader/ErrorMessage.tsx","../src/core/studio/router/router.ts","../src/core/studio/router/util/getOrderedTools.ts","../src/core/studio/router/helpers.ts","../src/core/studio/workspaceLoader/WorkspaceRouterProvider.tsx","../src/core/studio/workspaceLoader/WorkspaceLoader.tsx","../src/core/studio/StudioProvider.tsx","../src/core/studio/Studio.tsx","../src/core/studio/renderStudio.tsx","../src/core/hooks/useClient.ts","../src/core/hooks/useDataset.ts","../src/core/hooks/useDocumentOperationEvent.ts","../src/core/hooks/useFormattedDuration.ts","../src/core/hooks/useGlobalCopyPasteElementHandler.ts","../src/core/hooks/useNumberFormat.ts","../src/core/hooks/useSyncState.ts","../src/core/hooks/useTemplates.ts","../src/core/hooks/useTimeAgo.ts","../src/core/hooks/useTools.ts","../src/core/hooks/useUserListWithPermissions.ts","../src/core/components/documentStatus/DocumentStatus.tsx","../src/core/components/hookCollection/actionId.ts","../src/core/components/hookCollection/defineHookStateComponent.tsx","../src/core/components/hookCollection/HookCollectionState.tsx","../src/core/components/hookCollection/useHookCollectionKeys.tsx","../src/core/components/hookCollection/requestIdleCallback.ts","../src/core/components/hookCollection/useHookCollectionStates.tsx","../src/core/components/hookCollection/GetHookCollectionState.tsx","../src/core/components/IntentButton.tsx","../src/core/components/popoverDialog/PopoverContainer.tsx","../src/core/components/popoverDialog/PopoverDialog.tsx","../src/core/components/previewCard/PreviewCard.tsx","../src/core/components/previews/_common/Media.styled.ts","../src/core/components/previews/_common/Media.tsx","../src/core/components/previews/helpers.tsx","../src/core/components/previews/general/CompactPreview.tsx","../src/core/components/previews/general/DefaultPreview.tsx","../src/core/components/previews/general/DetailPreview.tsx","../src/core/components/progress/CircularProgress.tsx","../src/core/components/progress/LinearProgress.tsx","../src/core/components/previews/general/MediaPreview.styled.ts","../src/core/components/previews/general/MediaPreview.tsx","../src/core/components/previews/portableText/BlockImagePreview.styled.tsx","../src/core/components/previews/portableText/BlockImagePreview.tsx","../src/core/components/previews/portableText/BlockPreview.tsx","../src/core/components/previews/portableText/InlinePreview.styled.tsx","../src/core/components/previews/portableText/InlinePreview.tsx","../src/core/components/previews/template/TemplatePreview.tsx","../src/core/components/rovingFocus/useRovingFocus.ts","../src/core/components/StatusButton.tsx","../src/core/components/TooltipOfDisabled.tsx","../src/core/components/transitional/ImperativeToast.ts","../src/core/components/zOffsets/useZIndex.ts","../src/core/components/transitional/LegacyLayerProvider.tsx","../src/core/components/WithReferringDocuments.tsx","../src/core/components/zOffsets/ZIndexProvider.tsx","../src/core/comments/components/CommentDeleteDialog.tsx","../src/core/comments/components/icons/CommentDisabledIcon.tsx","../src/core/comments/components/icons/CommentIcon.tsx","../src/core/comments/components/icons/MentionIcon.tsx","../src/core/comments/components/icons/ReactionIcon.tsx","../src/core/comments/components/icons/SendIcon.tsx","../src/core/comments/components/avatars/CommentsAvatar.tsx","../src/core/comments/components/avatars/SpacerAvatar.tsx","../src/core/comments/components/pte/config.ts","../src/core/comments/components/pte/blocks/MentionInlineBlock.tsx","../src/core/comments/components/pte/blocks/NormalBlock.tsx","../src/core/comments/components/pte/render/renderBlock.tsx","../src/core/comments/components/pte/render/renderChild.tsx","../src/core/comments/components/pte/comment-input/CommentInputDiscardDialog.tsx","../src/core/comments/components/mentions/MentionsMenuItem.tsx","../src/core/comments/components/mentions/MentionsMenu.tsx","../src/core/comments/components/pte/comment-input/useCommentInput.ts","../src/core/comments/components/pte/comment-input/useCursorElement.ts","../src/core/comments/components/pte/comment-input/Editable.tsx","../src/core/comments/components/pte/comment-input/CommentInputInner.tsx","../src/core/comments/components/pte/comment-input/CommentInputProvider.tsx","../src/core/comments/components/pte/comment-input/CommentInput.tsx","../src/core/comments/components/pte/CommentInlineHighlightSpan.tsx","../src/core/comments/components/pte/CommentMessageSerializer.tsx","../src/core/comments/components/constants.ts","../src/core/comments/components/reactions/EmojiText.styled.ts","../src/core/comments/components/reactions/CommentReactionsMenu.tsx","../src/core/comments/components/reactions/CommentReactionsMenuButton.tsx","../src/core/comments/components/reactions/CommentReactionsUsersTooltip.tsx","../src/core/comments/components/reactions/TransparentCard.styled.ts","../src/core/comments/components/reactions/CommentReactionsBar.tsx","../src/core/comments/components/list/CommentsListItemContextMenu.tsx","../src/core/comments/components/list/CommentsListItemReferencedValue.tsx","../src/core/comments/components/list/CommentsListItemLayout.tsx","../src/core/comments/components/list/styles.ts","../src/core/comments/components/list/CommentsListItem.tsx","../src/core/comments/components/list/CommentsListStatus.tsx","../src/core/comments/components/list/CreateNewThreadInput.tsx","../src/core/comments/components/list/CommentThreadLayout.tsx","../src/core/comments/components/list/CommentsList.tsx","../src/core/comments/components/onboarding/CommentsOnboardingPopover.tsx","../src/core/comments/components/upsell/CommentsUpsellPanel.tsx"],"sourcesContent":["import {debounce} from 'lodash'\nimport {useLayoutEffect, useMemo, useReducer, useRef, useState} from 'react'\n\nimport {type IsEqualFunction} from './types'\n\n/** @internal */\nexport interface TrackerContextStore<Value> {\n  add: (id: string, value: Value) => void\n  update: (id: string, value: Value) => void\n  remove: (id: string) => void\n}\n\nfunction createStore<Value>(reportedValues: Map<string, Value>, publish: () => void) {\n  /**\n   * This implementation is over 4 years old, and is part of tackling a hard problem:\n   * tracking the position of DOM nodes efficiently, so that Presence Sticky Overlays can render correctly and respond to scroll,\n   * and so that Change Indicator connectors can draw paths that traces a document change to its form input field no matter how they layout shifts.\n   * 4 years ago we didn't have a lot of options when solving this problem.\n   * But today we have great success with using `@floating-ui/react` in `@sanity/ui` with a very similar problem: positioning tooltips and popovers correctly no matter how the page scrolls or the layout shifts.\n   * We should consider migrating to `@floating-ui/react` for this problem as well.\n   */\n  function add(id: string, value: Value) {\n    if (reportedValues.has(id)) {\n      // eslint-disable-next-line no-console\n      // console.error(\n      //   new Error(\n      //     `Invalid call to useReporter(${id}): A component reporting on \"${id}\" is already mounted in the subtree. Make sure that all reporters within the same <Tracker> subtree have unique ids.`\n      //   )\n      // )\n    }\n    reportedValues.set(id, value)\n    publish()\n  }\n\n  function update(id: string, value: Value) {\n    if (!reportedValues.has(id)) {\n      // throw new Error(`A reporter with id \"${id}\" is not known.`)\n    }\n    reportedValues.set(id, value)\n    publish()\n  }\n\n  function remove(id: string) {\n    if (!reportedValues.has(id)) {\n      // throw new Error(`A reporter with id \"${id}\" is not known`)\n    }\n    reportedValues.delete(id)\n    publish()\n  }\n\n  return {\n    add,\n    remove,\n    update,\n  }\n}\n\n/** @internal */\nexport type TrackerContextGetSnapshot<Value> = [string, Value][]\n\n/** @internal */\nexport function useTrackerStore<Value>(): {\n  store: TrackerContextStore<Value>\n  snapshot: TrackerContextGetSnapshot<Value>\n} {\n  const [reportedValues] = useState(() => new Map<string, Value>())\n  const [snapshot, updateSnapshot] = useReducer(() => Array.from(reportedValues.entries()), [])\n  const debouncedUpdateSnapshot = useMemo(() => debounce(updateSnapshot, 10, {trailing: true}), [])\n  const store = useMemo(\n    () => createStore(reportedValues, debouncedUpdateSnapshot),\n    [debouncedUpdateSnapshot, reportedValues],\n  )\n\n  return {store, snapshot}\n}\n\n/** @internal */\nexport function useTrackerStoreReporter<Value>(\n  store: TrackerContextStore<Value> | null,\n  id: string | null,\n  value: () => Value,\n  isEqual: IsEqualFunction<Value> = Object.is,\n): void {\n  const idRef = useRef<string | null>(null)\n  const previousRef = useRef<Value | null>(null)\n\n  useLayoutEffect(() => {\n    /**\n     * Setup and teardown, only runs if `id`, `store` or the `value` getter changes\n     */\n    if (id === null || store === null) {\n      return undefined\n    }\n    const nextValue = value()\n    store.add(id, nextValue)\n    idRef.current = id\n    previousRef.current = nextValue\n    return () => {\n      store.remove(id)\n      idRef.current = null\n      previousRef.current = null\n    }\n  }, [id, store, value])\n\n  useLayoutEffect(() => {\n    /**\n     * Runs after every render in case the result of calling `value` has changes that\n     * the `isEqual` function picks up on.\n     * @TODO This is a bit expensive, and we should migrate to using a library like `@floating-ui/react` instead of rolling our own solution.\n     */\n    if (id === null || idRef.current === null || store === null || id !== idRef.current) {\n      return undefined\n    }\n    const nextValue = value()\n    if (isEqual(previousRef.current, nextValue)) {\n      return undefined\n    }\n\n    store.update(id, nextValue)\n    previousRef.current = nextValue\n\n    return undefined\n  })\n}\n","import {memo, useContext} from 'react'\nimport {\n  ChangeIndicatorTrackerContextGetSnapshot,\n  ChangeIndicatorTrackerContextStore,\n} from 'sanity/_singletons'\n\nimport {\n  type Reported,\n  type ReporterHook,\n  type TrackerContextGetSnapshot,\n  useTrackerStore,\n  useTrackerStoreReporter,\n} from '../components/react-track-elements'\nimport {type ChangeIndicatorTrackerContextValue} from './types'\n\nexport * from './types'\n\nfunction ChangeIndicatorsTrackerComponent(props: {children: React.ReactNode}) {\n  const {children} = props\n  const {store, snapshot} = useTrackerStore<ChangeIndicatorTrackerContextValue>()\n\n  return (\n    <ChangeIndicatorTrackerContextStore.Provider value={store}>\n      <ChangeIndicatorTrackerContextGetSnapshot.Provider value={snapshot}>\n        {children}\n      </ChangeIndicatorTrackerContextGetSnapshot.Provider>\n    </ChangeIndicatorTrackerContextStore.Provider>\n  )\n}\n\n/**\n * @internal\n */\nexport const ChangeIndicatorsTracker = memo(ChangeIndicatorsTrackerComponent)\n\nconst EMPTY_ARRAY: Reported<ChangeIndicatorTrackerContextValue>[] = []\n\n/**\n * @internal\n */\nexport function useChangeIndicatorsReportedValues(): TrackerContextGetSnapshot<ChangeIndicatorTrackerContextValue> {\n  const snapshot = useContext(ChangeIndicatorTrackerContextGetSnapshot)\n\n  if (snapshot === null) {\n    // eslint-disable-next-line no-console\n    console.warn(\n      new Error(\n        'No context provided for reporter. Make sure that the component calling \"useChangeIndicatorsReportedValues()\", is wrapped inside a <ChangeIndicatorsTracker> element',\n      ),\n    )\n    return EMPTY_ARRAY\n  }\n\n  return snapshot\n}\n\n/**\n * @internal\n */\nexport const useChangeIndicatorsReporter: ReporterHook<ChangeIndicatorTrackerContextValue> = (\n  id,\n  value,\n  isEqual?,\n) => {\n  const store = useContext(ChangeIndicatorTrackerContextStore)\n\n  if (store === null) {\n    // eslint-disable-next-line no-console\n    console.warn(\n      new Error(\n        'No context provided for reporter. Make sure that the component calling \"useChangeIndicatorsReporter()\", is wrapped inside a <ChangeIndicatorsTracker> element',\n      ),\n    )\n  }\n\n  useTrackerStoreReporter<ChangeIndicatorTrackerContextValue>(store, id, value, isEqual)\n}\n","import {type Path} from '@sanity/types'\nimport * as PathUtils from '@sanity/util/paths'\nimport {\n  type ReactNode,\n  type SyntheticEvent,\n  useCallback,\n  useContext,\n  useMemo,\n  useState,\n} from 'react'\nimport deepCompare from 'react-fast-compare'\nimport {ConnectorContext} from 'sanity/_singletons'\n\nimport {useChangeIndicatorsReporter} from './tracker'\n\n/**\n * This is used to draw the bar that wraps the diff components in the changes panel\n *\n * @internal\n */\nexport const ChangeFieldWrapper = (props: {path: Path; children: ReactNode; hasHover: boolean}) => {\n  const {path, hasHover} = props\n  const {onSetFocus} = useContext(ConnectorContext)\n  const [isHover, setHover] = useState(false)\n\n  const onMouseEnter = useCallback(() => {\n    setHover(true)\n  }, [])\n\n  const onMouseLeave = useCallback(() => {\n    setHover(false)\n  }, [])\n\n  const [element, setElement] = useState<HTMLDivElement | null>(null)\n  const reporterId = useMemo(\n    () => (element ? `change-${PathUtils.toString(path)}` : null),\n    [element, path],\n  )\n  const reporterGetSnapshot = useCallback(\n    () => ({\n      element,\n      path,\n      isChanged: true,\n      hasFocus: false,\n      hasHover: isHover,\n      hasRevertHover: hasHover,\n    }),\n    [element, isHover, hasHover, path],\n  )\n  useChangeIndicatorsReporter(\n    reporterId,\n    reporterGetSnapshot,\n    // note: deepCompare should be ok here since we're not comparing deep values\n    deepCompare,\n  )\n\n  const handleClick = useCallback(\n    (event: SyntheticEvent) => {\n      setFocusWithStopPropagation(event, onSetFocus, path)\n    },\n    [onSetFocus, path],\n  )\n\n  return (\n    <div\n      ref={setElement}\n      onClick={handleClick}\n      onMouseLeave={onMouseLeave}\n      onMouseEnter={onMouseEnter}\n    >\n      {props.children}\n    </div>\n  )\n}\n\n// Stop the propagation here, or it will trigger the parent diff component's onClick.\nfunction setFocusWithStopPropagation(\n  event: SyntheticEvent,\n  onSetFocus: (toPath: Path) => void,\n  path: Path,\n): void {\n  event.stopPropagation()\n  onSetFocus(path)\n}\n","import {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {concat, type Observable, of} from 'rxjs'\nimport {catchError, distinctUntilChanged, map, scan, switchMap} from 'rxjs/operators'\n\n/** @internal */\nexport type LoadingTuple<T> = [T, boolean]\n\n/** @internal */\nexport type ReactHook<TArgs, TResult> = (args: TArgs) => TResult\n\n/** @internal */\n// overloads to handle types where an initial value is passed\nexport function createHookFromObservableFactory<T, TArg = void>(\n  observableFactory: (arg: TArg) => Observable<T>,\n  initialValue: T,\n): ReactHook<TArg, LoadingTuple<T>>\n/** @internal */\nexport function createHookFromObservableFactory<T, TArg = void>(\n  observableFactory: (arg: TArg) => Observable<T>,\n  initialValue?: T,\n): ReactHook<TArg, LoadingTuple<T | undefined>>\n\n/**\n * A function that will create a hook from a function that returns an\n * observable. The parameters of the hook will be the parameters of the function\n * and the return of the hook will be a loading tuple with the value of the\n * observable at the first index and a boolean with the loading state as the\n * second index.\n *\n * The loading state will become true as soon as new incoming args are given and\n * will flip to false when the observable from the function emits the next\n * value.\n *\n * @internal\n */\nexport function createHookFromObservableFactory<T, TArg = void>(\n  observableFactory: (arg: TArg) => Observable<T>,\n  initialValue?: T,\n): ReactHook<TArg, LoadingTuple<T | undefined>> {\n  const initialLoadingTuple: LoadingTuple<T | undefined> = [initialValue, true]\n  const initialResult = {type: 'tuple', tuple: initialLoadingTuple} as const\n\n  return function useLoadableFromCreateLoadable(arg: TArg) {\n    const observable = useMemo(\n      () =>\n        of(arg).pipe(\n          switchMap((_arg) =>\n            concat(\n              of({type: 'loading'} as const),\n              observableFactory(_arg).pipe(map((value) => ({type: 'value', value}) as const)),\n            ),\n          ),\n          scan(([prevValue], next): LoadingTuple<T | undefined> => {\n            if (next.type === 'loading') return [prevValue, true]\n            return [next.value, false]\n          }, initialLoadingTuple),\n          distinctUntilChanged(([prevValue, prevIsLoading], [nextValue, nextIsLoading]) => {\n            if (prevValue !== nextValue) return false\n            if (prevIsLoading !== nextIsLoading) return false\n            return true\n          }),\n          map((tuple) => ({type: 'tuple', tuple}) as const),\n          catchError((error) => of({type: 'error', error} as const)),\n        ),\n      [arg],\n    )\n    const result = useObservable(observable, initialResult)\n\n    if (result.type === 'error') throw result.error\n\n    return result.tuple\n  }\n}\n","/**\n * @internal\n */\nexport function isNonNullable<T>(value: T): value is NonNullable<T> {\n  return value !== null && value !== undefined\n}\n","import {type StackablePerspective} from '@sanity/client'\nimport {type SanityDocument, type SanityDocumentLike} from '@sanity/types'\n\nimport {isNonNullable} from './isNonNullable'\n\n/** @internal */\n// nominal/opaque type hack\nexport type Opaque<T, K> = T & {__opaqueId__: K}\n\n/** @internal */\nexport type DraftId = Opaque<string, 'draftId'>\n\n/** @internal */\nexport type PublishedId = Opaque<string, 'publishedId'>\n\n/** @internal */\nexport const DRAFTS_FOLDER = 'drafts'\n/** @internal */\nexport const VERSION_FOLDER = 'versions'\nconst PATH_SEPARATOR = '.'\nconst DRAFTS_PREFIX = `${DRAFTS_FOLDER}${PATH_SEPARATOR}`\nconst VERSION_PREFIX = `${VERSION_FOLDER}${PATH_SEPARATOR}`\n\n/**\n *\n * Checks if the document ID `documentId` has the same ID as `equalsDocumentId`,\n * ignoring the draft prefix.\n *\n * @public\n *\n * @param documentId - The document ID to check\n * @param equalsDocumentId - The document ID to check against\n *\n * @example\n * Draft vs published document ID, but representing the same document:\n * ```\n * // Prints \"true\":\n * console.log(documentIdEquals('drafts.agot', 'agot'));\n * ```\n * @example\n * Different documents:\n * ```\n * // Prints \"false\":\n * console.log(documentIdEquals('hp-tcos', 'hp-hbp'));\n * ```\n *\n * @returns `true` if the document IDs are equal, `false` otherwise\n */\nexport function documentIdEquals(documentId: string, equalsDocumentId: string): boolean {\n  return getPublishedId(documentId) === getPublishedId(equalsDocumentId)\n}\n\n/** @internal */\nexport function isDraft(document: SanityDocumentLike): boolean {\n  return isDraftId(document._id)\n}\n\n/** @internal */\nexport function isDraftId(id: string): id is DraftId {\n  return id.startsWith(DRAFTS_PREFIX)\n}\n\n/** @internal */\nexport function isVersionId(id: string): boolean {\n  return id.startsWith(VERSION_PREFIX)\n}\n\n/**\n * TODO: Improve return type based on presence of `version` option.\n *\n * @internal\n */\nexport function getIdPair(\n  id: string,\n  {version}: {version?: string} = {},\n): {\n  draftId: DraftId\n  publishedId: PublishedId\n  versionId?: string\n} {\n  if (version === 'drafts' || version === 'published') {\n    throw new Error('Version can not be \"published\" or \"drafts\"')\n  }\n  return {\n    publishedId: getPublishedId(id),\n    draftId: getDraftId(id),\n    ...(version\n      ? {\n          versionId: getVersionId(id, version),\n        }\n      : {}),\n  }\n}\n\n/** @internal */\nexport function isPublishedId(id: string): id is PublishedId {\n  return !isDraftId(id) && !isVersionId(id)\n}\n\n/** @internal */\nexport function getDraftId(id: string): DraftId {\n  if (isVersionId(id)) {\n    const publishedId = getPublishedId(id)\n    return (DRAFTS_PREFIX + publishedId) as DraftId\n  }\n\n  return isDraftId(id) ? id : ((DRAFTS_PREFIX + id) as DraftId)\n}\n\n/** @internal */\nexport const systemBundles = ['drafts', 'published'] as const\n\n/** @internal */\nexport type SystemBundle = (typeof systemBundles)[number]\n\n/** @internal */\nexport function isSystemBundle(maybeSystemBundle: unknown): maybeSystemBundle is SystemBundle {\n  return systemBundles.includes(maybeSystemBundle as SystemBundle)\n}\n\n/** @internal */\nconst systemBundleNames = ['draft', 'published'] as const\n\n/** @internal */\ntype SystemBundleName = (typeof systemBundleNames)[number]\n\n/**\n * `isSystemBundle` should be preferred, but some parts of the codebase currently use the singular\n * \"draft\" name instead of the plural \"drafts\".\n *\n * @internal\n */\nexport function isSystemBundleName(\n  maybeSystemBundleName: unknown,\n): maybeSystemBundleName is SystemBundleName {\n  return systemBundleNames.includes(maybeSystemBundleName as SystemBundleName)\n}\n\n/**  @internal */\nexport function getVersionId(id: string, version: string): string {\n  if (isSystemBundle(version)) {\n    throw new Error('Version can not be \"published\" or \"drafts\"')\n  }\n\n  return `${VERSION_PREFIX}${version}${PATH_SEPARATOR}${getPublishedId(id)}`\n}\n\n/**\n *  @internal\n *  Given a perspective stack and a document id, returns true if the document id matches any of the provided perspectives\n *  e.g. `idMatchesPerspective('['summer'], 'versions.summer.foo') === true`\n *  e.g. `idMatchesPerspective('['drafts', 'summer'], 'versions.summer.foo') === true`\n *  e.g. `idMatchesPerspective('['drafts'], 'versions.summer.foo') === false`\n *  e.g. `idMatchesPerspective('['drafts', 'summer'], 'versions.winter.foo') === false`\n *\n * Note: a published id will match any perspective\n *   e.g. `idMatchesPerspective('['drafts', 'summer'], 'foo') === true`\n */\nexport function idMatchesPerspective(\n  perspectiveStack: StackablePerspective[],\n  documentId: string,\n): boolean {\n  if (isPublishedId(documentId)) {\n    return true\n  }\n  return perspectiveStack.some((perspective) => {\n    if (perspective === 'drafts') {\n      return isDraftId(documentId)\n    }\n    return getVersionFromId(documentId) === perspective\n  })\n}\n\n/**\n *  @internal\n *  Given an id, returns the versionId if it exists.\n *  e.g. `versions.summer-drop.foo` = `summer-drop`\n *  e.g. `drafts.foo` = `undefined`\n *  e.g. `foo` = `undefined`\n */\nexport function getVersionFromId(id: string): string | undefined {\n  if (!isVersionId(id)) return undefined\n  const [_versionPrefix, versionId, ..._publishedId] = id.split(PATH_SEPARATOR)\n\n  return versionId\n}\n\n/** @internal */\nexport function getPublishedId(id: string): PublishedId {\n  if (isVersionId(id)) {\n    // make sure to only remove the versions prefix and the bundle name\n    return id.split(PATH_SEPARATOR).slice(2).join(PATH_SEPARATOR) as PublishedId as PublishedId\n  }\n\n  if (isDraftId(id)) {\n    return id.slice(DRAFTS_PREFIX.length) as PublishedId\n  }\n\n  return id as PublishedId\n}\n\n/** @internal */\nexport function createDraftFrom(document: SanityDocument): SanityDocument {\n  return {\n    ...document,\n    _id: getDraftId(document._id),\n  }\n}\n\n/** @internal */\nexport function newDraftFrom(document: SanityDocument): SanityDocument {\n  return {\n    ...document,\n    _id: DRAFTS_PREFIX,\n  }\n}\n\n/** @internal */\nexport function createPublishedFrom(document: SanityDocument): SanityDocument {\n  return {\n    ...document,\n    _id: getPublishedId(document._id),\n  }\n}\n\n/**\n * Takes a list of documents and collates draft/published pairs into single entries\n * `{id: <published id>, draft?: <draft document>, published?: <published document>}`\n *\n * Note: because Map is ordered by insertion key the resulting array will be ordered by whichever\n * version appeared first\n *\n * @internal\n */\nexport interface CollatedHit<T extends {_id: string} = {_id: string}> {\n  id: string\n  type: string\n  draft?: T\n  published?: T\n  versions: T[]\n}\n\n/** @internal */\nexport function collate<T extends {_id: string; _type: string}>(documents: T[]): CollatedHit<T>[] {\n  const byId = documents.reduce((res, doc) => {\n    const publishedId = getPublishedId(doc._id)\n    let entry = res.get(publishedId)\n    if (!entry) {\n      entry = {\n        id: publishedId,\n        type: doc._type,\n        published: undefined,\n        draft: undefined,\n        versions: [],\n      }\n      res.set(publishedId, entry)\n    }\n\n    if (isPublishedId(doc._id)) {\n      entry.published = doc\n    }\n\n    if (isDraftId(doc._id)) {\n      entry.draft = doc\n    }\n\n    if (isVersionId(doc._id)) {\n      entry.versions.push(doc)\n    }\n\n    return res\n  }, new Map())\n\n  return Array.from(byId.values())\n}\n\n/** @internal */\n// Removes published documents that also has a draft\nexport function removeDupes(documents: SanityDocumentLike[]): SanityDocumentLike[] {\n  return collate(documents)\n    .map((entry) => entry.draft || entry.published || entry.versions[0])\n    .filter(isNonNullable)\n}\n","/** @internal */\nexport const EMPTY_OBJECT: Record<string, unknown> = Object.freeze({})\n\n/** @internal */\nexport const EMPTY_ARRAY: never[] = Object.freeze([]) as never[]\n","import {formatRelative, isValid, parse} from 'date-fns'\n\n/**\n * date-fns `formatRelative` defaults to formatting as `mm/dd/yyyy` if the date is more/less than\n * a week away. `formatRelativeLocale` will adjust formatting in these cases to match the correct\n * locale format.\n * @internal\n */\nexport const formatRelativeLocale = (...args: Parameters<typeof formatRelative>) => {\n  const dateFnsRelative = formatRelative(...args)\n\n  // if date is of format mm/dd/yyyy, format as a locale string instead\n  if (isValid(parse(dateFnsRelative, 'MM/dd/yyyy', new Date()))) {\n    const [dateTime] = args\n    return new Date(dateTime).toLocaleDateString()\n  }\n  return dateFnsRelative\n}\n","import {isDraftId, isVersionId} from './draftUtils'\n\n/**\n * Indicates the type of document variant, either `draft`, `version` or `published`.\n * Draft documents are prefixed with `drafts.`.\n * Version documents are prefixed with `versions.<versionName>`\n * The rest are considered published documents.\n * @public\n */\nexport type DocumentVariantType = 'draft' | 'version' | 'published'\n\n/**\n * Takes a document id and returns the variant type for that document\n * If it's a document that starts with `version.` it's a `version` document.\n * If it's a document that starts with `drafts.` it's a `draft` document.\n * Otherwise, it's a `published` document.\n * @public\n * */\nexport function getDocumentVariantType(documentId: string): DocumentVariantType {\n  if (isDraftId(documentId)) return 'draft'\n  if (isVersionId(documentId)) return 'version'\n  return 'published'\n}\n","import {type GlobalErrorChannel} from '../components/globalErrorHandler'\n\n/**\n * Gets the global scope instance in a given environment.\n *\n * The strategy is to return the most modern, and if not, the most common:\n * - The `globalThis` variable is the modern approach to accessing the global scope\n * - The `window` variable is the global scope in a web browser\n * - The `self` variable is the global scope in workers and others\n * - The `global` variable is the global scope in Node.js\n */\nfunction getGlobalScope(): typeof globalThis & {__sanityErrorChannel?: GlobalErrorChannel} {\n  if (typeof globalThis !== 'undefined') return globalThis\n  if (typeof window !== 'undefined') return window\n  if (typeof self !== 'undefined') return self\n  if (typeof global !== 'undefined') return global\n\n  throw new Error('@sanity/ui: could not locate global scope')\n}\n\n/** @internal */\nexport const globalScope = getGlobalScope()\n","/** @internal */\nexport function isArray(value: unknown): value is unknown[] {\n  return Array.isArray(value)\n}\n","/**\n * @internal\n */\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n","/** @internal */\nexport function isString(value: unknown): value is string {\n  return typeof value === 'string'\n}\n","/** @internal */\nexport function isTruthy<T>(value: T | false): value is T {\n  return Boolean(value)\n}\n","import {ResizeObserver as Polyfill, type ResizeObserverEntry} from '@juggle/resize-observer'\nimport createPubSub, {type Subscriber} from 'nano-pubsub'\n\nconst ResizeObserver: typeof Polyfill =\n  typeof document === 'object' && typeof window === 'object' && window.ResizeObserver\n    ? window.ResizeObserver\n    : Polyfill\n\n/** @internal */\nexport interface SharedResizeObserver {\n  observe: (\n    element: Element,\n    observer: Subscriber<ResizeObserverEntry>,\n    options?: ResizeObserverOptions,\n  ) => () => void\n  unobserve: (element: Element) => void\n}\n\n/** @internal */\nexport const createSharedResizeObserver = (): SharedResizeObserver => {\n  const event = createPubSub<ResizeObserverEntry[]>()\n\n  const resizeObserver = new ResizeObserver((entries: ResizeObserverEntry[]) =>\n    event.publish(entries),\n  )\n\n  return {\n    observe: (\n      element: Element,\n      observer: Subscriber<ResizeObserverEntry>,\n      options?: ResizeObserverOptions,\n    ) => {\n      const unsubscribe = event.subscribe((entries) => {\n        const entry = entries.find((e) => e.target === element)\n        if (entry) {\n          observer(entry)\n        }\n      })\n\n      resizeObserver.observe(element, options)\n\n      return () => {\n        unsubscribe()\n        resizeObserver.unobserve(element)\n      }\n    },\n    unobserve: (element: Element) => resizeObserver.unobserve(element),\n  }\n}\n\n/** @internal */\nexport const resizeObserver = createSharedResizeObserver()\n","import QuickLRU from 'quick-lru'\nimport {concat, defer, EMPTY, map, type Observable, of, type OperatorFunction} from 'rxjs'\nimport {tap} from 'rxjs/operators'\n\n/**\n * The interface that any caching layer must implement\n * @internal\n */\ninterface SWRCache<T> {\n  /**\n   * Note: This will throw if key does not exist. Always check for existence with `has` before calling\n   */\n  get(key: string): T\n  has(key: string): boolean\n  set(key: string, value: T): void\n  delete(key: string): void\n}\n\nconst createSWRCache = createLRUCache\n\n/**\n *\n * Create an SWR (Stale While Revalidate) rxjs operator that will store the latest value in a cache and emit the last know value upon observable subscription\n * @param options - Options\n * @internal\n */\nexport function createSWR<T>(options: {maxSize: number}) {\n  const cache = createSWRCache<T>(options)\n  return function rxSwr(key: string): OperatorFunction<T, {fromCache: boolean; value: T}> {\n    return (input$: Observable<T>) => {\n      return concat(\n        defer(() => (cache.has(key) ? of({fromCache: true, value: cache.get(key)}) : EMPTY)),\n        input$.pipe(\n          tap((result) => cache.set(key, result)),\n          map((value) => ({\n            fromCache: false,\n            value: value,\n          })),\n        ),\n      )\n    }\n  }\n}\n\n/**\n * For now, the only cache layer implemented is an in-memory LRU.\n * @param options - LRU options\n * @internal\n */\nfunction createLRUCache<T>(options: {maxSize: number}): SWRCache<T> {\n  const lru = new QuickLRU<string, {value: T}>(options)\n  return {\n    get(key: string) {\n      const entry = lru.get(key)\n      if (!entry) {\n        throw new Error(`Key not found in LRU cache: ${key}`)\n      }\n      return entry.value\n    },\n    set(key: string, value: T) {\n      lru.set(key, {value})\n    },\n    delete(key: string) {\n      lru.delete(key)\n    },\n    has(key: string) {\n      return lru.has(key)\n    },\n  }\n}\n","import {type SchemaTypeDefinition} from '@sanity/types'\n\nconst BUNDLED_DOC_TYPES = ['sanity.imageAsset', 'sanity.fileAsset']\n\n/**\n * @internal\n */\nexport function _isSanityDocumentTypeDefinition(\n  def: SchemaTypeDefinition,\n): def is SchemaTypeDefinition<'document'> {\n  return def.type === 'document' && BUNDLED_DOC_TYPES.includes(def.name)\n}\n\n/**\n * @internal\n */\nexport function _isCustomDocumentTypeDefinition(\n  def: SchemaTypeDefinition,\n): def is SchemaTypeDefinition<'document'> {\n  return def.type === 'document' && !_isSanityDocumentTypeDefinition(def)\n}\n","type SearchPathSegment = string | number | []\n\nconst GROQ_KEYWORDS = ['match', 'in', 'asc', 'desc', 'true', 'false', 'null']\nconst VALID_FIELD = /^[a-zA-Z_][a-zA-Z0-9_]*$/\n\n/** @internal */\nexport const fieldNeedsEscape = (fieldName: string): boolean =>\n  !VALID_FIELD.test(fieldName) || GROQ_KEYWORDS.includes(fieldName)\n\n/** @internal */\nexport const escapeField = (fieldName: string): string => `[\"${fieldName}\"]`\n\nconst escapeFirst = (fieldName: string): string => `@${escapeField(fieldName)}`\n\nconst isEmptyArray = (value: unknown): value is [] => Array.isArray(value) && value.length === 0\n\n/** @internal */\nexport const joinPath = (pathArray: SearchPathSegment[]): string => {\n  let path = ''\n  for (let i = 0; i < pathArray.length; i++) {\n    const pathSegment = pathArray[i]\n    if (isEmptyArray(pathSegment)) {\n      path += `[]`\n      continue\n    }\n\n    if (typeof pathSegment === 'number') {\n      path += `[${pathSegment}]`\n      continue\n    }\n\n    const isFirst = i === 0\n    const needsEscape = fieldNeedsEscape(pathSegment)\n\n    if (needsEscape) {\n      path = isFirst ? escapeFirst(pathSegment) : `${path}${escapeField(pathSegment)}`\n    } else {\n      path = isFirst ? pathSegment : `${path}.${pathSegment}`\n    }\n  }\n\n  return path\n}\n","/** @internal */\nexport const supportsTouch = isTouchDevice()\n\nfunction isTouchDevice() {\n  if (typeof window === 'undefined') return false\n\n  return (\n    'ontouchstart' in window ||\n    navigator.maxTouchPoints > 0 ||\n    (navigator as any).msMaxTouchPoints > 0\n  )\n}\n","const FONT_SANS_SERIF = `-apple-system, BlinkMacSystemFont, \\\\'Segoe UI\\\\', Roboto, \\\\'Helvetica Neue\\\\', Helvetica, Arial, system-ui, sans-serif`\nconst FONT_MONOSPACE = `-apple-system-ui-monospace, \\\\'SF Mono\\\\', Menlo, Monaco, Consolas, monospace`\n\n/** @internal */\nexport const uncaughtErrorHandler = (): string =>\n  // prettier-ignore\n  [\n    `window.onerror = function(m,u,l,c,e) {`,\n      `var p=window.location.port;`,\n      `var h=window.location.protocol+'//'+window.location.hostname+(p?':'+p:'');`,\n      `var r=document.getElementById('sanity');`,\n      `while(r.firstChild){r.removeChild(r.firstChild);}`,\n      `var s=document.createElement('style');`,\n      `s.appendChild(document.createTextNode('`,\n        `html,body,#sanityBody,#sanity,#sanityError{height:100%;}`,\n        `body{-webkit-font-smoothing:antialiased;margin:0;}`,\n        `#sanityError{position:fixed;top:0;left:0;width:100%;height:100%;overflow:auto;background-color:#fff;color:#121923;font-family:${FONT_SANS_SERIF};font-size:16px;line-height:21px;min-height:100%;}`,\n        `#sanityError>div{background-color:#fff;max-width:960px;margin:0 auto;padding:47px 32px 52px;}`,\n        `@media(min-width:512px){`,\n          `#sanityError>div{`,\n            `padding:47px 84px;`,\n          `}`,\n        `}`,\n        `#sanityError button{-webkit-font-smoothing:inherit;font:inherit;font-weight:500;background-color:#2276FC;color:#fff;padding:7px 12px;border-radius:3px;border:0;}`,\n        `#sanityError button:hover{background-color:#1E63D0;}`,\n        `#sanityError button:active{background-color:#1B50A5;}`,\n      `'));`,\n      `document.head.appendChild(s);`,\n      `var f=document.createElement('div');`,\n      `f.id='sanityError';`,\n      `f.innerHTML='`,\n        `<div>`,\n          `<h1 style=\"font-size:21px;line-height:27px;margin: 0 0 10px;\">Unhandled error</h1>`,\n          `<p style=\"color:#66758D;margin:10px 0 14px;\">Encountered an unhandled error in this Studio.</p>`,\n          `<button class=\"sanity-error-handler__reload-btn\" type=\"button\">Reload page</button>`,\n          `<pre style=\"background-color:#FDEBEA;color:#C3362C;font-size:13px;line-height:17px;padding:8px 12px;border-radius:3px;margin:32px 0 0;overflow:auto;\">`,\n            `<code style=\"font-family:${FONT_MONOSPACE};\">`,\n              `'+e.stack.replaceAll(h,'')+'`,\n            `</code>`,\n          `</pre>`,\n        `</div>`,\n      `';`,\n      `var b=f.querySelector('.sanity-error-handler__reload-btn');`,\n      `if(b){`,\n        `b.onclick=function() {`,\n          `window.location.reload();`,\n        `}`,\n      `};`,\n      `r.appendChild(f);`,\n    `};`,\n  ].join('')\n","const segmenter = typeof Intl === 'object' && 'Segmenter' in Intl ? new Intl.Segmenter() : undefined\n\n/**\n * Truncates a string to a given length, taking into account surrogate pairs and grapheme clusters\n * (using zero-width joiners). This means the resulting string may be longer in number of bytes,\n * but will be shorter in number of \"characters\". Should only be used for display purposes -\n * not for truncating strings for storage or similar.\n *\n * Examples of differences between `String.prototype.slice` and this function:\n *\n * - '👨‍👨‍👧‍👧'.slice(0, 1) === '�'  vs sliceString('👨‍👨‍👧‍👧', 0, 1) === '👨‍👨‍👧‍👧'\n * - '👨‍👨‍👧‍👧'.slice(0, 2) === '👨' vs sliceString('👨‍👨‍👧‍👧', 0, 2) === '👨‍👨‍👧‍👧'\n *\n * @param str - String to slice\n * @param start - Start index\n * @param end - End index (exclusive)\n * @returns The sliced string\n * @internal\n */\nexport function sliceString(str: string, start: number, end: number): string {\n  if (end < start) {\n    throw new Error(\n      'End must be greater than start, use `String.prototype.slice()` for negative values',\n    )\n  }\n\n  if (!segmenter) {\n    return str.slice(start, end)\n  }\n\n  let i = 0\n  let sliced = ''\n  for (const value of segmenter.segment(str)) {\n    if (i === end) {\n      return sliced\n    }\n\n    sliced += value.segment\n    i++\n  }\n\n  return sliced\n}\n\n/**\n * Truncates a string to a given length, taking into account surrogate pairs and grapheme clusters\n * (using zero-width joiners). This means the resulting string may be longer in number of bytes,\n * but will be shorter in number of \"characters\". Should only be used for display purposes -\n * not for truncating strings for storage or similar.\n *\n * @param str - String to truncate\n * @param maxLength - Maximum length in \"characters\"\n * @returns The truncated string\n * @internal\n */\nexport function truncateString(str: string, maxLength: number): string {\n  const truncated = sliceString(str, 0, maxLength)\n  return truncated === str ? truncated : `${truncated}…`\n}\n","import {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {type Observable, of, type OperatorFunction} from 'rxjs'\nimport {catchError, map} from 'rxjs/operators'\n\n/** @internal */\nexport type LoadableState<T> = LoadingState | LoadedState<T> | ErrorState\n\n/** @internal */\nexport interface LoadingState {\n  value: undefined\n  error: null\n  isLoading: true\n}\n\n/** @internal */\nexport interface LoadedState<T> {\n  value: T\n  error: null\n  isLoading: false\n}\n\n/** @internal */\nexport interface ErrorState {\n  value: undefined\n  error: Error\n  isLoading: false\n}\n\nconst LOADING_STATE: LoadingState = {\n  isLoading: true,\n  value: undefined,\n  error: null,\n}\n\n/** @internal */\nexport function useLoadable<T>(value$: Observable<T>): LoadableState<T | undefined>\n/** @internal */\nexport function useLoadable<T>(value$: Observable<T>, initialValue: T): LoadableState<T>\n/** @internal */\nexport function useLoadable<T>(\n  value$: Observable<T>,\n  initialValue?: T,\n): LoadableState<T | undefined> {\n  const initial: LoadableState<T> =\n    typeof initialValue === 'undefined'\n      ? LOADING_STATE\n      : {isLoading: false, value: initialValue, error: null}\n\n  const loadableObservable = useMemo(() => value$.pipe(asLoadable()), [value$])\n  return useObservable(loadableObservable, initial)\n}\n\n/** @internal */\nexport function asLoadable<T>(): OperatorFunction<T, LoadableState<T>> {\n  return (value$: Observable<T>) =>\n    value$.pipe(\n      map((value) => ({isLoading: false, value, error: null}) as const),\n      catchError(\n        (error): Observable<ErrorState> => of({isLoading: false, value: undefined, error}),\n      ),\n    )\n}\n","import {type CurrentUser} from '@sanity/types'\n\n/**\n * Checks whether or not the given user has the role with the given ID\n *\n * @param user - The user to check (currently only the current user is supported)\n *   If `null` is passed, this function always returns `false`.\n * @param roleId - The ID of the role to check for\n *\n * @returns true if the user has the role, false otherwise\n *\n * @example\n * Fetch the current user and check if they have the role \"administrator\":\n * ```ts\n * import {userHasRole, useCurrentUser} from 'sanity'\n *\n * export function MyComponent() {\n *   const user = useCurrentUser()\n *   const hasAdminRole = userHasRole(user, 'administrator')\n *   return <div>Is administrator: {hasAdminRole ? 'Yes' : 'No'}</div>\n * }\n * ```\n * @public\n */\nexport function userHasRole(\n  user: (Omit<CurrentUser, 'role'> & {role?: string}) | null,\n  roleId: string,\n): boolean {\n  return user !== null && user.roles.some((role) => role.name === roleId)\n}\n","import {throttle, type ThrottleSettings} from 'lodash'\nimport {useMemo} from 'react'\n\n/**\n * @internal\n *\n * @example\n * ```tsx\n * // First create a callback using React’s `useCallback` hook\n * const myCallback = useCallback(() => {\n *   // this is not throttled\n * }, [])\n *\n * // Then make a throttled version using the `useThrottledCallback` hook\n * const myThrottledCallback = useThrottledCallback(myCallback, 100)\n *\n * // Call the throttled callback\n * <Button onClick={myThrottledCallback} />\n * ```\n */\nexport function useThrottledCallback(\n  callback: (...args: any[]) => any,\n  wait: number,\n  options: ThrottleSettings,\n): (...args: any[]) => any {\n  const throttledCallback = useMemo(\n    () => throttle(callback, wait, options),\n    [callback, options, wait],\n  )\n\n  return throttledCallback\n}\n","import {isEqual} from 'lodash'\nimport {useState} from 'react'\n\n/**\n * This React hook should be considered an escape hatch – to make sure that a value is the same\n * on every render. SHOULD NOT BE USED IN MOST CASES.\n * @deprecated please use `useMemo` and `useCallback` strategies instead to make deps stable, this hook runs comparisons on every single render and while each comparison can be fast, it quickly adds up\n *\n * @internal\n */\nexport function useUnique<ValueType>(value: ValueType): ValueType {\n  const [previous, setPrevious] = useState(value)\n\n  if (!isEqual(previous, value)) {\n    setPrevious(value)\n    return value\n  }\n\n  return previous\n}\n","/* eslint-disable no-process-env */\nimport {type TFunction} from 'i18next'\n\n/**\n * Mode to use for debugging. `reverse`, `triangles` or `log`.\n */\nconst DEBUG_MODE = typeof process === 'undefined' ? false : process?.env?.SANITY_STUDIO_DEBUG_I18N\n\n/**\n * Whether or not the debug mode for i18n should be enabled\n *\n * @internal\n * @hidden\n */\nexport const DEBUG_I18N = Boolean(DEBUG_MODE)\n\n/**\n * Wrapper function use for debugging. The \"reverse\" approach is less disruptive to the layout, but\n * may be hard to use since it is hard to read labels. The \"triangles\" approach is easy to spot.\n */\nconst debugWrappers = {\n  reverse: (str: string) => `‮${str}`,\n  triangles: (str: string) => `◤ ${str} ◢`,\n}\n\n/**\n * If in debug mode, wrap the given `t` function in a function that adds a prefix and suffix to the\n * translated string. If not, return the original `t` function as-is.\n *\n * @param t - The `t` function to wrap\n * @returns The wrapped `t` function, or the original `t` function if not in debug mode\n * @internal\n * @hidden\n */\nexport function maybeWrapT(t: TFunction): TFunction {\n  const wrapper =\n    DEBUG_MODE === 'reverse' || DEBUG_MODE === 'triangles' ? debugWrappers[DEBUG_MODE] : null\n\n  return wrapper ? (((...args: any) => wrapper(t(...args)) as any) as TFunction) : t\n}\n","import {type FlatNamespace, type KeyPrefix, type Namespace, type TFunction} from 'i18next'\nimport {type FallbackNs, useTranslation as useOriginalTranslation} from 'react-i18next'\n// @ts-expect-error types are missing\nimport {type $Tuple} from 'react-i18next/helpers'\n\nimport {maybeWrapT} from '../debug'\n\n/**\n * Return value from the `useTranslate` hook\n *\n * @public\n */\nexport type UseTranslationResponse<Ns extends Namespace, KPrefix> = {\n  /**\n   * The translate function for the given namespace(s)\n   */\n  t: TFunction<Ns, KPrefix>\n}\n\n/**\n * Options for the `useTranslate` hook\n *\n * @public\n */\nexport interface UseTranslationOptions<KPrefix> {\n  /**\n   * @deprecated Avoid using this, it may be\n   */\n  keyPrefix?: KPrefix\n  lng?: string\n}\n\nconst translationOptionOverrides = {\n  // We're manually forcing a re-render with the locale key in the LocaleProvider,\n  // so we don't need to bind to the i18n instance for language change events.\n  bindI18n: false as const,\n}\n\n/**\n * Returns a `t` translator function for the given namespace.\n *\n * If the given namespace is not loaded, it will trigger a suspense, and the component will resume\n * rendering once the namespace is loaded.\n *\n * @public\n */\nexport function useTranslation<\n  Ns extends FlatNamespace | $Tuple<FlatNamespace> | undefined = undefined,\n  KPrefix extends KeyPrefix<FallbackNs<Ns>> = undefined,\n>(\n  ns?: Ns,\n  options?: UseTranslationOptions<KPrefix>,\n): UseTranslationResponse<FallbackNs<Ns>, KPrefix> {\n  const {t} = useOriginalTranslation(\n    ns,\n    options\n      ? {keyPrefix: options.keyPrefix, lng: options.lng, ...translationOptionOverrides}\n      : translationOptionOverrides,\n  )\n\n  return {t: maybeWrapT(t)}\n}\n","/* eslint-disable camelcase */\n\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {css, styled} from 'styled-components'\n\ninterface RootProps {\n  $changed?: boolean\n  $disabled?: boolean\n  $hasFocus?: boolean\n  $isReviewChangeOpen: boolean\n  $withHoverEffect?: boolean\n}\n\nconst animationSpeed = 250\n\nexport const ChangeBarWrapper = styled.div<RootProps>(\n  ({$changed, $disabled, $hasFocus, $isReviewChangeOpen}) => {\n    if ($disabled)\n      return css`\n        ${ChangeBarMarker}:after {\n          display: none;\n        }\n      `\n\n    return css`\n      --change-bar-offset: 4px;\n\n      display: flex;\n      position: relative;\n\n      ${ChangeBarMarker}:after {\n        opacity: 0.5;\n      }\n\n      @media (hover: hover) {\n        &:hover {\n          z-index: 10;\n          ${ChangeBarMarker}:after {\n            opacity: 1;\n          }\n        }\n      }\n\n      /* hide when field is not changed */\n      ${$hasFocus &&\n      css`\n        ${ChangeBarMarker}:after {\n          opacity: 1;\n        }\n      `}\n\n      /* hide when field is not changed */\n      ${!$changed &&\n      css`\n        ${ChangeBarMarker}:after {\n          opacity: 0;\n          pointer-events: none;\n        }\n      `}\n\n      /* hide hover effect when review changes is open */\n      ${$isReviewChangeOpen &&\n      css`\n        ${ChangeBarButton} {\n          opacity: 0;\n        }\n      `}\n    `\n  },\n)\n\nexport const FieldWrapper = styled.div`\n  flex-grow: 1;\n  min-width: 0;\n`\n\nexport const ChangeBar = styled.div<{$zIndex: number}>`\n  position: relative;\n  opacity: 1;\n  transition: opacity 100ms;\n  z-index: ${({$zIndex}) => $zIndex};\n`\n\nexport const ChangeBarMarker = styled.div((props) => {\n  const {media} = getTheme_v2(props.theme)\n\n  return css`\n    position: absolute;\n    top: -1px;\n    left: var(--change-bar-offset);\n    width: 1px;\n    bottom: -1px;\n    background-color: var(--card-bg-color);\n\n    @media (min-width: ${media[0]}px) {\n      display: unset;\n    }\n\n    &:after {\n      content: '';\n      display: block;\n      position: absolute;\n      top: 1px;\n      left: 0;\n      width: 1px;\n      bottom: 1px;\n      background-color: var(--card-badge-caution-dot-color);\n      border-radius: 0.5px;\n    }\n  `\n})\n\nexport const ChangeBarButton = styled.button<{\n  $withHoverEffect?: boolean\n  $isInteractive?: boolean\n}>((props) => {\n  const {$withHoverEffect, $isInteractive} = props\n\n  return css`\n    appearance: none;\n    border: 0;\n    outline: 0;\n    display: block;\n    padding: 0;\n    background: transparent;\n    opacity: 0;\n    position: absolute;\n    height: 100%;\n\n    ${$isInteractive &&\n    css`\n      cursor: pointer;\n      pointer-events: all;\n    `}\n\n    left: calc(-0.25rem + var(--change-bar-offset));\n    width: calc(1rem - 1px);\n    transition: opacity ${animationSpeed}ms;\n\n    &:focus {\n      border: 0;\n      outline: 0;\n    }\n\n    &:focus {\n      border: 0;\n      outline: 0;\n    }\n\n    ${$withHoverEffect &&\n    css`\n      @media (hover: hover) {\n        &:hover {\n          opacity: 0.2;\n        }\n      }\n    `}\n  `\n})\n","import {useLayer} from '@sanity/ui'\nimport {type ReactNode, useContext, useMemo} from 'react'\nimport {ConnectorContext} from 'sanity/_singletons'\n\nimport {Tooltip} from '../../ui-components'\nimport {useTranslation} from '../i18n/hooks/useTranslation'\nimport {\n  ChangeBar,\n  ChangeBarButton,\n  ChangeBarMarker,\n  ChangeBarWrapper,\n  FieldWrapper,\n} from './ElementWithChangeBar.styled'\n\nexport function ElementWithChangeBar(props: {\n  children: ReactNode\n  disabled?: boolean\n  hasFocus?: boolean\n  isChanged?: boolean\n  withHoverEffect?: boolean\n  isInteractive?: boolean\n}) {\n  const {\n    children,\n    disabled,\n    hasFocus,\n    isChanged,\n    withHoverEffect = true,\n    isInteractive = true,\n  } = props\n\n  const {onOpenReviewChanges, isReviewChangesOpen} = useContext(ConnectorContext)\n  const {zIndex} = useLayer()\n  const {t} = useTranslation()\n\n  const changeBar = useMemo(\n    () =>\n      disabled || !isChanged ? null : (\n        <ChangeBar data-testid=\"change-bar\" $zIndex={zIndex}>\n          <ChangeBarMarker data-testid=\"change-bar__marker\" />\n          <Tooltip content={t('changes.change-bar.aria-label')} portal disabled={!isInteractive}>\n            <ChangeBarButton\n              aria-label={t('changes.change-bar.aria-label')}\n              data-testid=\"change-bar__button\"\n              onClick={isReviewChangesOpen ? undefined : onOpenReviewChanges}\n              tabIndex={-1}\n              type=\"button\"\n              $withHoverEffect={withHoverEffect}\n              $isInteractive={isInteractive}\n            />\n          </Tooltip>\n        </ChangeBar>\n      ),\n    [\n      disabled,\n      isChanged,\n      isInteractive,\n      isReviewChangesOpen,\n      onOpenReviewChanges,\n      t,\n      withHoverEffect,\n      zIndex,\n    ],\n  )\n\n  return (\n    <ChangeBarWrapper\n      data-testid=\"change-bar-wrapper\"\n      $changed={isChanged}\n      $disabled={disabled}\n      $hasFocus={hasFocus}\n      $isReviewChangeOpen={isReviewChangesOpen}\n    >\n      <FieldWrapper data-testid=\"change-bar__field-wrapper\">{children}</FieldWrapper>\n      {changeBar}\n    </ChangeBarWrapper>\n  )\n}\n","import {type Path} from '@sanity/types'\nimport {useLayer} from '@sanity/ui'\nimport * as PathUtils from '@sanity/util/paths'\nimport {\n  type ComponentProps,\n  type HTMLProps,\n  memo,\n  type MouseEvent,\n  useCallback,\n  useContext,\n  useMemo,\n  useState,\n} from 'react'\nimport deepCompare from 'react-fast-compare'\nimport {ConnectorContext} from 'sanity/_singletons'\n\nimport {EMPTY_ARRAY} from '../util'\nimport {ElementWithChangeBar} from './ElementWithChangeBar'\nimport {useChangeIndicatorsReporter} from './tracker'\n\nconst ChangeBarWrapper = memo(function ChangeBarWrapper(\n  props: Omit<ComponentProps<'div'>, 'onChange'> & {\n    disabled?: boolean\n    path: Path\n    hasFocus: boolean\n    isChanged?: boolean\n    withHoverEffect?: boolean\n    isInteractive?: boolean\n  },\n) {\n  const {\n    children,\n    disabled,\n    hasFocus,\n    isChanged,\n    onMouseEnter: onMouseEnterProp,\n    onMouseLeave: onMouseLeaveProp,\n    path = EMPTY_ARRAY,\n    withHoverEffect,\n    isInteractive,\n    ...restProps\n  } = props\n  const layer = useLayer()\n  const [hasHover, setHover] = useState(false)\n  const onMouseEnter = useCallback(\n    (event: MouseEvent<HTMLDivElement>) => {\n      onMouseEnterProp?.(event)\n      setHover(true)\n    },\n    [onMouseEnterProp],\n  )\n  const onMouseLeave = useCallback(\n    (event: MouseEvent<HTMLDivElement>) => {\n      onMouseLeaveProp?.(event)\n      setHover(false)\n    },\n    [onMouseLeaveProp],\n  )\n\n  const [element, setElement] = useState<HTMLDivElement | null>(null)\n  const reporterId = useMemo(\n    () => (disabled || !element ? null : `field-${PathUtils.toString(path)}`),\n    [disabled, element, path],\n  )\n  const reporterGetSnapshot = useCallback(\n    () => ({\n      element,\n      path: path,\n      isChanged: isChanged,\n      hasFocus: hasFocus,\n      hasHover: hasHover,\n      zIndex: layer.zIndex,\n    }),\n    [element, hasFocus, hasHover, isChanged, layer.zIndex, path],\n  )\n  useChangeIndicatorsReporter(\n    reporterId,\n    reporterGetSnapshot,\n    deepCompare, // note: deepCompare should be ok here since we're not comparing deep values\n  )\n\n  return (\n    <div {...restProps} ref={setElement} onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave}>\n      <ElementWithChangeBar\n        hasFocus={hasFocus}\n        isChanged={isChanged}\n        disabled={disabled}\n        withHoverEffect={withHoverEffect}\n        isInteractive={isInteractive}\n      >\n        {children}\n      </ElementWithChangeBar>\n    </div>\n  )\n})\n\n/** @internal */\nexport interface ChangeIndicatorProps {\n  path: Path\n  hasFocus: boolean\n  isChanged: boolean\n  withHoverEffect?: boolean\n}\n\n/** @internal */\nexport function ChangeIndicator(\n  props: ChangeIndicatorProps & Omit<HTMLProps<HTMLDivElement>, 'as'>,\n) {\n  const {children, hasFocus, isChanged, path, withHoverEffect, ...restProps} = props\n  const {isInteractive} = useContext(ConnectorContext)\n\n  return (\n    <ChangeBarWrapper\n      {...restProps}\n      path={path}\n      hasFocus={hasFocus}\n      isChanged={isChanged}\n      withHoverEffect={withHoverEffect}\n      isInteractive={isInteractive}\n    >\n      {children}\n    </ChangeBarWrapper>\n  )\n}\n","import {type Subscriber} from 'nano-pubsub'\nimport {useContext, useEffect} from 'react'\nimport {ScrollContext} from 'sanity/_singletons'\n\n/** @internal */\nexport function useOnScroll(callback: Subscriber<Event>) {\n  const parentContext = useContext(ScrollContext)\n  useEffect(() => {\n    return parentContext?.subscribe(callback)\n  }, [callback, parentContext])\n}\n","import createPubSub from 'nano-pubsub'\nimport {\n  type ElementType,\n  type ForwardedRef,\n  forwardRef,\n  type HTMLProps,\n  memo,\n  useContext,\n  useEffect,\n  useImperativeHandle,\n  useRef,\n  useState,\n} from 'react'\nimport {ScrollContext} from 'sanity/_singletons'\n\n/** @internal */\nexport interface ScrollContainerProps<T extends ElementType>\n  extends Omit<HTMLProps<T>, 'as' | 'onScroll'> {\n  as?: ElementType | keyof React.JSX.IntrinsicElements\n  onScroll?: (event: Event) => () => void\n}\n\nconst ScrollContainerComponent = forwardRef(function ScrollContainerComponent<\n  T extends ElementType = 'div',\n>(props: ScrollContainerProps<T>, forwardedRef: ForwardedRef<HTMLDivElement>) {\n  const {as: As = 'div', onScroll, ...rest} = props\n  const ref = useRef<HTMLDivElement | null>(null)\n\n  useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(forwardedRef, () => ref.current)\n\n  const parentContext = useContext(ScrollContext)\n  const [childContext] = useState(() => createPubSub<Event>())\n\n  useEffect(() => {\n    if (!onScroll) return undefined\n    // emit scroll events from children\n    return childContext.subscribe(onScroll)\n  }, [childContext, onScroll])\n\n  useEffect(() => {\n    if (!parentContext) return undefined\n    // let events bubble up\n    return childContext.subscribe(parentContext.publish)\n  }, [parentContext, childContext])\n\n  useEffect(() => {\n    const handleScroll = (event: Event) => {\n      childContext.publish(event)\n    }\n\n    const el = ref.current\n\n    if (!el) {\n      return undefined\n    }\n\n    el.addEventListener('scroll', handleScroll, {\n      passive: true,\n      capture: true,\n    })\n\n    return () => {\n      el.removeEventListener('scroll', handleScroll)\n    }\n  }, [childContext, ref])\n\n  return (\n    <ScrollContext.Provider value={childContext}>\n      <As data-testid=\"scroll-container\" {...rest} ref={ref} />\n    </ScrollContext.Provider>\n  )\n})\n\n/**\n * This provides a utility function for use within Sanity Studios to create scrollable containers\n * It also provides a way for components inside a scrollable container to track onScroll on their first parent scroll container\n * NOTE: this is used by different studio utilities to track positions of elements on screen\n * NOTE: It will call any given `onScroll` callback with a Native DOM Event, and not a React Synthetic event\n * NOTE: It will not make sure the element is actually scrollable, this still needs to be done with css as usual\n *\n * @internal\n */\nexport const ScrollContainer = memo(ScrollContainerComponent)\nScrollContainer.displayName = 'Memo(Forwardref(ScrollContainer))'\n","export const CORNER_RADIUS = 4\n\nexport const INTERACTIVE_STROKE_WIDTH = 16\n\nexport const CONNECTOR_MARGIN = 8\nexport const ARROW_MARGIN_X = 8\nexport const ARROW_MARGIN_Y = 2\nexport const ARROW_SIZE = 4\nexport const ARROW_THRESHOLD = 12\nexport const STROKE_WIDTH = 1\n\nexport const DEBUG = false\nexport const DEBUG_LAYER_BOUNDS = DEBUG || false\n","import {isKeyedObject} from '@sanity/types'\nimport * as PathUtils from '@sanity/util/paths'\n\nimport {type TrackedArea, type TrackedChange} from '../tracker'\n\nexport function findMostSpecificTarget(\n  targetType: 'change' | 'field',\n  id: string,\n  values: Map<string, TrackedChange | TrackedArea>,\n): TrackedChange | undefined {\n  const pathString = id.slice(id.indexOf('-') + 1) || '[]'\n  const path = PathUtils.fromString(pathString)\n  const exactId = `${targetType}-${PathUtils.toString(path)}`\n  if (values.has(exactId)) {\n    return values.get(exactId) as TrackedChange\n  }\n\n  let mostSpecific: TrackedChange | undefined\n  for (const [targetId, target] of values) {\n    if (!('path' in target) || !targetId.startsWith(targetType)) {\n      continue\n    }\n\n    const numEqual = PathUtils.numEqualSegments(path, target.path)\n    const lastPathSegment = target.path[target.path.length - 1]\n    const pathOnlyDiffersByKey =\n      numEqual === target.path.length - 1 && isKeyedObject(lastPathSegment)\n\n    if (numEqual === 0) {\n      continue\n    } else if (numEqual !== target.path.length && !pathOnlyDiffersByKey) {\n      /*\n       * We only allow matching to shorter paths if the last element in the path is a keyed object.\n       * `foo.bar.portableTextField[_key=abc123]` should resolve to `foo.bar.portableTextField`.\n       *\n       * Otherwise we'll only get a connector line when you add new elements to a portable text\n       * field and not when you alter an existing part.\n       */\n      continue\n    }\n\n    mostSpecific = target\n\n    if (numEqual === path.length) {\n      // On exact match, return early\n      break\n    }\n  }\n\n  // if (!mostSpecific) {\n  //   throw new Error(`target not found: \"${id}\"`)\n  // }\n\n  return mostSpecific\n}\n","export function hasOverflowScroll(el: HTMLElement): boolean {\n  const overflow = getComputedStyle(el).overflow\n\n  return overflow.includes('auto') || overflow.includes('scroll')\n}\n\n// Check whether an element is currently scrollable (meaning it must both have overflow scroll *and* content overflowing)\nexport function isScrollable(el: HTMLElement): boolean {\n  const scrollableContent = el.scrollHeight !== el.offsetHeight || el.scrollWidth !== el.offsetWidth\n\n  return scrollableContent && hasOverflowScroll(el)\n}\n","import {type Rect} from '../overlay/types'\nimport {hasOverflowScroll} from './scrollUtils'\n\nexport const getOffsetsTo = (\n  source: HTMLElement,\n  target: HTMLElement,\n): {rect: Rect; bounds: Rect} => {\n  const bounds: Rect = {\n    top: 0,\n    left: 0,\n    height: target.offsetHeight,\n    width: target.offsetWidth,\n  }\n\n  const rect: Rect = {\n    top: 0,\n    left: 0,\n    height: source.offsetHeight,\n    width: source.offsetWidth,\n  }\n\n  let foundScrollContainer = false\n  let el: HTMLElement | null = source\n\n  while (el && el !== target && target.contains(el)) {\n    if (foundScrollContainer) {\n      bounds.top += el.offsetTop\n      bounds.left += el.offsetLeft\n    }\n\n    if (hasOverflowScroll(el)) {\n      bounds.top = el.offsetTop\n      bounds.height = el.offsetHeight\n      bounds.left = el.offsetLeft\n      bounds.width = el.offsetWidth\n\n      foundScrollContainer = true\n    }\n\n    rect.top += el.offsetTop - el.scrollTop\n    rect.left += el.offsetLeft - el.scrollLeft\n\n    el = el.offsetParent as HTMLElement\n  }\n\n  return {rect, bounds}\n}\n","import {type Reported} from '../../components/react-track-elements'\nimport {type TrackedArea, type TrackedChange} from '../tracker'\n\nexport function isChangeBar(\n  v: Reported<TrackedArea | TrackedChange>,\n): v is Reported<TrackedChange> {\n  return v[0] !== 'changePanel'\n}\n","import {type Rect} from '../overlay/types'\nimport {isScrollable} from './scrollUtils'\n\nconst SCROLL_INTO_VIEW_TOP_PADDING = -15\n\n// @TODO refactor this to use `compute-scroll-into-view`\nexport function scrollIntoView(field: {\n  element: HTMLElement | null\n  rect: Rect\n  bounds: Rect\n}): void {\n  const element = field.element\n  if (!element) return\n\n  /*\n   * Start at current element and check the parent for a scroll\n   * bar until a scrollable element has been found.\n   */\n  let parentElementWithScroll: HTMLElement | null = element\n\n  while (!isScrollable(parentElementWithScroll)) {\n    parentElementWithScroll = parentElementWithScroll.parentElement\n\n    /*\n     * If the parent element is null it means we are at the root\n     * element, which has no parent. Since no scroll bar has\n     * been found so far it does not make sense to scroll.\n     */\n    if (!parentElementWithScroll) {\n      return\n    }\n  }\n\n  parentElementWithScroll.scroll({\n    top:\n      parentElementWithScroll.scrollTop +\n      field.rect.top -\n      field.bounds.top +\n      SCROLL_INTO_VIEW_TOP_PADDING,\n    left: 0,\n    behavior: 'smooth',\n  })\n}\n","import {type ComponentProps} from 'react'\n\nimport {type Rect} from './types'\n\nexport function ClampedRect(\n  props: {top: number; left: number; height: number; width: number; bounds: Rect} & Omit<\n    ComponentProps<'rect'>,\n    'top' | 'left' | 'height' | 'width'\n  >,\n) {\n  const {bounds, ...rest} = props\n  const x = Math.max(bounds.left, props.left)\n  const y = Math.max(props.top, bounds.top)\n  const height = Math.max(0, props.height - (y - props.top))\n  const width = Math.max(0, props.width - (x - props.left))\n\n  return <rect {...rest} x={x} y={y} height={height} width={width} />\n}\n","/* eslint-disable camelcase */\n\nimport {styled} from 'styled-components'\n\nimport {ClampedRect} from './ClampedRect'\n\nexport const DebugRect = styled.rect`\n  stroke: #ccc;\n  fill: none;\n  pointer-events: none;\n  stroke-linecap: round;\n`\n\nexport const ConnectorPath = styled.path`\n  fill: none;\n  pointer-events: none;\n  stroke-linejoin: round;\n  stroke: var(--card-badge-caution-dot-color);\n`\n\nexport const InteractivePath = styled.path`\n  fill: none;\n  pointer-events: stroke;\n  stroke: transparent;\n  cursor: pointer;\n  stroke-linecap: round;\n  stroke-linejoin: round;\n  opacity: 0;\n\n  &:hover {\n    opacity: 0.2;\n  }\n`\n\nexport const RightBarWrapper = styled(ClampedRect)`\n  stroke: none;\n  pointer-events: none;\n  fill: var(--card-badge-caution-dot-color);\n`\n","import {\n  ARROW_MARGIN_X,\n  ARROW_MARGIN_Y,\n  ARROW_SIZE,\n  ARROW_THRESHOLD,\n  CORNER_RADIUS,\n} from '../constants'\nimport {type ConnectorLine} from './types'\n\nexport function arrowPath(x: number, y: number, dir: number): string {\n  return [\n    `M ${x - ARROW_SIZE} ${y - ARROW_SIZE * dir} `,\n    `L ${x} ${y}`,\n    `L ${x + ARROW_SIZE} ${y - ARROW_SIZE * dir}`,\n  ].join('')\n}\n\nfunction moveTo(x: number, y: number) {\n  return `M${x} ${y}`\n}\n\nfunction lineTo(x: number, y: number) {\n  return `L${x} ${y}`\n}\n\nfunction join(strings: string[], delim = '') {\n  return strings.join(delim)\n}\n\nfunction quadCurve(x1: number, y1: number, x: number, y: number) {\n  return `Q${x1} ${y1} ${x} ${y}`\n}\n\nexport function generateConnectorPath(line: ConnectorLine): string {\n  const {from, to} = line\n  const {left: fromX, top: fromY} = from\n  const {left: toX, top: toY} = to\n\n  const cmds: string[] = []\n\n  // Calculate maximum corner radius\n  const r1 = Math.min(CORNER_RADIUS, Math.abs(fromY - toY) / 2)\n\n  // FROM\n  if (from.isAbove) {\n    cmds.push(\n      moveTo(fromX + ARROW_MARGIN_X, fromY - ARROW_THRESHOLD + ARROW_MARGIN_Y),\n      lineTo(fromX + ARROW_MARGIN_X, fromY - CORNER_RADIUS),\n      quadCurve(fromX + ARROW_MARGIN_X, fromY, fromX + ARROW_MARGIN_X + CORNER_RADIUS, fromY),\n    )\n  } else if (from.isBelow) {\n    cmds.push(\n      moveTo(fromX + ARROW_MARGIN_X, fromY + ARROW_THRESHOLD - ARROW_MARGIN_Y),\n      lineTo(fromX + ARROW_MARGIN_X, fromY + CORNER_RADIUS),\n      quadCurve(fromX + ARROW_MARGIN_X, fromY, fromX + ARROW_MARGIN_X + CORNER_RADIUS, fromY),\n    )\n  } else {\n    cmds.push(moveTo(fromX, fromY))\n  }\n\n  // TO\n  if (to.isAbove) {\n    if (fromY < to.bounds.top) {\n      cmds.push(\n        lineTo(to.bounds.left - 8 - r1, fromY),\n        quadCurve(to.bounds.left - 8, fromY, to.bounds.left - 8, fromY + r1),\n        lineTo(to.bounds.left - 8, toY - r1),\n        quadCurve(to.bounds.left - 8, toY, to.bounds.left - 8 + r1, toY),\n        lineTo(to.bounds.left + ARROW_MARGIN_X - CORNER_RADIUS, toY),\n        quadCurve(\n          to.bounds.left + ARROW_MARGIN_X,\n          toY,\n          to.bounds.left + ARROW_MARGIN_X,\n          toY - CORNER_RADIUS,\n        ),\n        lineTo(to.bounds.left + ARROW_MARGIN_X, toY - ARROW_THRESHOLD + ARROW_MARGIN_Y),\n      )\n    } else {\n      cmds.push(\n        lineTo(to.bounds.left + ARROW_MARGIN_X - CORNER_RADIUS, fromY),\n        quadCurve(\n          to.bounds.left + ARROW_MARGIN_X,\n          fromY,\n          to.bounds.left + ARROW_MARGIN_X,\n          fromY - CORNER_RADIUS,\n        ),\n        lineTo(to.bounds.left + ARROW_MARGIN_X, toY - ARROW_THRESHOLD + ARROW_MARGIN_Y),\n      )\n    }\n  } else if (to.isBelow) {\n    if (fromY > to.bounds.top + to.bounds.height) {\n      // curl around\n      cmds.push(\n        lineTo(to.bounds.left - ARROW_MARGIN_X - r1, fromY),\n        quadCurve(\n          to.bounds.left - ARROW_MARGIN_X,\n          fromY,\n          to.bounds.left - ARROW_MARGIN_X,\n          fromY - r1,\n        ),\n        lineTo(to.bounds.left - ARROW_MARGIN_X, toY + r1),\n        quadCurve(to.bounds.left - ARROW_MARGIN_X, toY, to.bounds.left - ARROW_MARGIN_X + r1, toY),\n        lineTo(to.bounds.left + ARROW_MARGIN_X - CORNER_RADIUS, toY),\n        quadCurve(\n          to.bounds.left + ARROW_MARGIN_X,\n          toY,\n          to.bounds.left + ARROW_MARGIN_X,\n          toY + CORNER_RADIUS,\n        ),\n        lineTo(to.bounds.left + ARROW_MARGIN_X, toY + ARROW_THRESHOLD - ARROW_MARGIN_Y),\n      )\n    } else {\n      cmds.push(\n        lineTo(to.bounds.left + ARROW_MARGIN_X - CORNER_RADIUS, fromY),\n        quadCurve(\n          to.bounds.left + ARROW_MARGIN_X,\n          fromY,\n          to.bounds.left + ARROW_MARGIN_X,\n          fromY + CORNER_RADIUS,\n        ),\n        lineTo(to.bounds.left + ARROW_MARGIN_X, toY + ARROW_THRESHOLD - ARROW_MARGIN_Y),\n      )\n    }\n  } else if (fromY < toY) {\n    cmds.push(\n      lineTo(to.bounds.left + ARROW_MARGIN_X - r1, fromY),\n      quadCurve(\n        to.bounds.left + ARROW_MARGIN_X,\n        fromY,\n        to.bounds.left + ARROW_MARGIN_X,\n        fromY + r1,\n      ),\n      lineTo(to.bounds.left + ARROW_MARGIN_X, toY - r1),\n      quadCurve(to.bounds.left + ARROW_MARGIN_X, toY, to.bounds.left + ARROW_MARGIN_X + r1, toY),\n      lineTo(toX, toY),\n    )\n  } else {\n    cmds.push(\n      lineTo(to.bounds.left + ARROW_MARGIN_X - r1, fromY),\n      quadCurve(\n        to.bounds.left + ARROW_MARGIN_X,\n        fromY,\n        to.bounds.left + ARROW_MARGIN_X,\n        fromY - r1,\n      ),\n      lineTo(to.bounds.left + ARROW_MARGIN_X, toY + r1),\n      quadCurve(to.bounds.left + ARROW_MARGIN_X, toY, to.bounds.left + ARROW_MARGIN_X + r1, toY),\n      lineTo(toX, toY),\n    )\n  }\n\n  return join(cmds)\n}\n","import {ARROW_MARGIN_Y, ARROW_THRESHOLD, CONNECTOR_MARGIN} from '../constants'\nimport {type ConnectorLinePoint, type Rect} from './types'\n\nfunction getConnectorLinePoint(rect: Rect, bounds: Rect): ConnectorLinePoint {\n  const centerY = rect.top + rect.height / 2\n  const isAbove = rect.top + rect.height < bounds.top + ARROW_MARGIN_Y\n  const isBelow = rect.top > bounds.top + bounds.height - ARROW_MARGIN_Y\n\n  return {\n    bounds: bounds,\n    left: rect.left,\n    top: centerY,\n    centerY,\n    startY: rect.top + CONNECTOR_MARGIN,\n    endY: rect.top + rect.height - CONNECTOR_MARGIN,\n    isAbove,\n    isBelow,\n    outOfBounds: isAbove || isBelow,\n  }\n}\n\ninterface Connector {\n  from: {rect: Rect; bounds: Rect}\n  to: {rect: Rect; bounds: Rect}\n}\n\nexport function mapConnectorToLine(connector: Connector): {\n  from: ConnectorLinePoint\n  to: ConnectorLinePoint\n} {\n  const fromBounds = {\n    top: connector.from.bounds.top + ARROW_THRESHOLD,\n    bottom: connector.from.bounds.top + connector.from.bounds.height - ARROW_THRESHOLD,\n    left: connector.from.bounds.left,\n    right: connector.from.bounds.left + connector.from.bounds.width,\n    width: connector.from.bounds.width,\n    height: connector.from.bounds.height - ARROW_THRESHOLD * 2,\n  }\n\n  const from = getConnectorLinePoint(connector.from.rect, fromBounds)\n  from.left = connector.from.rect.left + connector.from.rect.width + 1\n\n  const toBounds = {\n    top: connector.to.bounds.top + ARROW_THRESHOLD,\n    bottom: connector.to.bounds.top + connector.to.bounds.height - ARROW_THRESHOLD,\n    left: connector.to.bounds.left,\n    right: connector.to.bounds.left + connector.to.bounds.width,\n    width: connector.to.bounds.width,\n    height: connector.to.bounds.height - ARROW_THRESHOLD * 2,\n  }\n\n  const to = getConnectorLinePoint(connector.to.rect, toBounds)\n\n  const maxStartY = Math.max(to.startY, from.startY)\n\n  // Align from <-> to vertically\n  from.top = Math.min(maxStartY, from.endY)\n  if (from.top < toBounds.top) {\n    from.top = Math.min(toBounds.top, from.endY)\n  } else if (from.top > toBounds.bottom) {\n    from.top = Math.max(toBounds.bottom, from.startY)\n  }\n  to.top = Math.min(maxStartY, to.endY)\n  if (to.top < fromBounds.top) {\n    to.top = Math.min(fromBounds.top, to.endY)\n  } else if (to.top > fromBounds.bottom) {\n    to.top = Math.max(fromBounds.bottom, to.startY)\n  }\n\n  // Keep within bounds\n  from.top = Math.min(Math.max(from.top, fromBounds.top), fromBounds.bottom)\n  to.top = Math.min(Math.max(to.top, toBounds.top), toBounds.bottom)\n\n  return {from, to}\n}\n","import {memo} from 'react'\n\nimport {\n  ARROW_MARGIN_X,\n  ARROW_MARGIN_Y,\n  ARROW_THRESHOLD,\n  DEBUG,\n  INTERACTIVE_STROKE_WIDTH,\n  STROKE_WIDTH,\n} from '../constants'\nimport {ConnectorPath, DebugRect, InteractivePath, RightBarWrapper} from './Connector.styled'\nimport {arrowPath, generateConnectorPath} from './connectorPath'\nimport {mapConnectorToLine} from './mapConnectorToLine'\nimport {type Rect} from './types'\n\ninterface Props {\n  from: {rect: Rect; bounds: Rect}\n  to: {rect: Rect; bounds: Rect}\n}\n\nexport const Connector = memo(function Connector({from, to}: Props) {\n  const line = mapConnectorToLine({from, to})\n\n  // If both ends of the connector are out of bounds, then do not render\n  if (line.from.outOfBounds && line.to.outOfBounds) {\n    return null\n  }\n\n  const linePathDescription = generateConnectorPath(line)\n\n  return (\n    <>\n      <InteractivePath d={linePathDescription} strokeWidth={INTERACTIVE_STROKE_WIDTH} />\n\n      <ConnectorPath d={linePathDescription} strokeWidth={STROKE_WIDTH} />\n\n      <RightBarWrapper\n        top={to.rect.top}\n        left={to.rect.left - 0.5}\n        height={to.rect.height}\n        width={STROKE_WIDTH}\n        bounds={to.bounds}\n      />\n\n      {line.from.isAbove && (\n        <ConnectorPath\n          d={arrowPath(\n            line.from.left + ARROW_MARGIN_X,\n            line.from.bounds.top - ARROW_THRESHOLD + ARROW_MARGIN_Y,\n            -1,\n          )}\n          strokeWidth={STROKE_WIDTH}\n        />\n      )}\n\n      {line.from.isBelow && (\n        <ConnectorPath\n          d={arrowPath(\n            line.from.left + ARROW_MARGIN_X,\n            line.from.bounds.top + line.from.bounds.height + ARROW_THRESHOLD - ARROW_MARGIN_Y,\n            1,\n          )}\n          strokeWidth={STROKE_WIDTH}\n        />\n      )}\n\n      {line.to.isAbove && (\n        <ConnectorPath\n          d={arrowPath(\n            line.to.bounds.left + ARROW_MARGIN_X,\n            line.to.bounds.top - ARROW_THRESHOLD + ARROW_MARGIN_Y,\n            -1,\n          )}\n          strokeWidth={STROKE_WIDTH}\n        />\n      )}\n\n      {line.to.isBelow && (\n        <ConnectorPath\n          d={arrowPath(\n            line.to.bounds.left + ARROW_MARGIN_X,\n            line.to.bounds.top + line.to.bounds.height + ARROW_THRESHOLD - ARROW_MARGIN_Y,\n            1,\n          )}\n          strokeWidth={STROKE_WIDTH}\n        />\n      )}\n\n      {DEBUG && (\n        <>\n          <DebugRect\n            x={line.from.bounds.left}\n            y={line.from.bounds.top}\n            width={line.from.bounds.width}\n            height={line.from.bounds.height}\n            stroke=\"green\"\n          />\n\n          <DebugRect\n            x={line.to.bounds.left}\n            y={line.to.bounds.top}\n            width={line.to.bounds.width}\n            height={line.to.bounds.height}\n            stroke=\"yellow\"\n          />\n\n          {!line.from.outOfBounds && (\n            <g transform={`translate(${line.from.bounds.left} ${line.from.bounds.top})`}>\n              <DebugRect\n                width={line.from.bounds.width}\n                height={line.from.bounds.height}\n                strokeWidth={STROKE_WIDTH}\n                stroke=\"green\"\n              />\n            </g>\n          )}\n\n          {!line.to.outOfBounds && (\n            <g transform={`translate(${line.to.bounds.left} ${line.to.bounds.top})`}>\n              <DebugRect\n                width={line.to.bounds.width}\n                height={line.to.bounds.height}\n                strokeWidth={STROKE_WIDTH}\n                stroke=\"red\"\n              />\n            </g>\n          )}\n        </>\n      )}\n    </>\n  )\n})\n","import {styled} from 'styled-components'\n\nexport const SvgWrapper = styled.svg`\n  pointer-events: none;\n  position: absolute;\n  left: 0;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  width: 100%;\n  height: 100%;\n`\n","import {useEffect} from 'react'\n\nimport {resizeObserver} from '../../util'\n\nexport function useResizeObserver(\n  element: HTMLDivElement,\n  onResize: (event: ResizeObserverEntry) => void,\n): void {\n  useEffect(() => resizeObserver.observe(element, onResize), [element, onResize])\n}\n","import {type Path} from '@sanity/types'\nimport {sortBy} from 'lodash'\nimport {useCallback, useMemo, useState} from 'react'\n\nimport {type Reported} from '../../components/react-track-elements'\nimport {useOnScroll} from '../../components/scroll'\nimport {DEBUG_LAYER_BOUNDS} from '../constants'\nimport {findMostSpecificTarget} from '../helpers/findMostSpecificTarget'\nimport {getOffsetsTo} from '../helpers/getOffsetsTo'\nimport {isChangeBar} from '../helpers/isChangeBar'\nimport {scrollIntoView} from '../helpers/scrollIntoView'\nimport {type TrackedArea, type TrackedChange, useChangeIndicatorsReportedValues} from '../tracker'\nimport {Connector} from './Connector'\nimport {SvgWrapper} from './ConnectorsOverlay.styled'\nimport {DebugLayers} from './DebugLayers'\nimport {useResizeObserver} from './useResizeObserver'\n\nexport interface Rect {\n  height: number\n  width: number\n  top: number\n  left: number\n}\n\ninterface State {\n  connectors: {\n    field: TrackedChange & {id: string; rect: Rect; bounds: Rect}\n    change: TrackedChange & {id: string; rect: Rect; bounds: Rect}\n    hasFocus: boolean\n    hasHover: boolean\n    hasRevertHover: boolean\n  }[]\n  isHoverConnector: boolean\n}\n\ninterface ConnectorsOverlayProps {\n  rootElement: HTMLDivElement\n  onSetFocus: (nextFocusPath: Path) => void\n}\n\nfunction getState(\n  allReportedValues: Reported<TrackedChange | TrackedArea>[],\n  hovered: string | null,\n  byId: Map<string, TrackedChange | TrackedArea>,\n  rootElement: HTMLElement,\n): State {\n  const changeBarsWithHover: Reported<TrackedChange>[] = []\n  const changeBarsWithFocus: Reported<TrackedChange>[] = []\n\n  for (const value of allReportedValues) {\n    if (!isChangeBar(value) || !value[1].isChanged) {\n      continue\n    }\n\n    const [id, reportedChangeBar] = value\n\n    if (id === hovered) {\n      changeBarsWithHover.push(value)\n      continue\n    }\n\n    if (reportedChangeBar.hasHover) {\n      changeBarsWithHover.push(value)\n      continue\n    }\n\n    if (reportedChangeBar.hasFocus) {\n      changeBarsWithFocus.push(value)\n      continue\n    }\n  }\n\n  const isHoverConnector = changeBarsWithHover.length > 0\n\n  const changeBars = isHoverConnector ? changeBarsWithHover : changeBarsWithFocus\n\n  const connectors = changeBars\n    .map(([id]) => {\n      const field = findMostSpecificTarget('field', id, byId)\n      const change = findMostSpecificTarget('change', id, byId)\n\n      if (!field || !change) return null\n\n      return {field: {id, ...field}, change: {id, ...change}}\n    })\n    .filter(\n      (value): value is NonNullable<typeof value> =>\n        Boolean(value?.field.element) && Boolean(value?.change.element),\n    )\n    .map(({field, change}) => ({\n      hasHover: field.hasHover || change.hasHover,\n      hasFocus: field.hasFocus,\n      hasRevertHover: change.hasRevertHover,\n      field: {...field, ...getOffsetsTo(field.element!, rootElement)},\n      change: {...change, ...getOffsetsTo(change.element!, rootElement)},\n    }))\n\n  return {connectors, isHoverConnector}\n}\n\nexport function ConnectorsOverlay(props: ConnectorsOverlayProps) {\n  const {rootElement, onSetFocus} = props\n  const [hovered, setHovered] = useState<string | null>(null)\n  const allReportedValues = useChangeIndicatorsReportedValues()\n  const byId: Map<string, TrackedChange | TrackedArea> = useMemo(\n    () => new Map(allReportedValues),\n    [allReportedValues],\n  )\n\n  const [{connectors}, setState] = useState<State>(() =>\n    getState(allReportedValues, hovered, byId, rootElement),\n  )\n\n  const visibleConnectors = useMemo(\n    () => sortBy(connectors, (c) => 0 - c.field.path.length).slice(0, 1),\n    [connectors],\n  )\n\n  const handleScrollOrResize = useCallback(() => {\n    setState(getState(allReportedValues, hovered, byId, rootElement))\n  }, [byId, allReportedValues, hovered, rootElement])\n\n  useResizeObserver(rootElement, handleScrollOrResize)\n  useOnScroll(handleScrollOrResize)\n\n  return (\n    <SvgWrapper style={{zIndex: visibleConnectors[0] && visibleConnectors[0].field.zIndex}}>\n      {visibleConnectors.map(({field, change}) => {\n        if (!change) {\n          return null\n        }\n\n        return (\n          <ConnectorGroup\n            field={field}\n            change={change}\n            key={field.id}\n            onSetFocus={onSetFocus}\n            setHovered={setHovered}\n          />\n        )\n      })}\n    </SvgWrapper>\n  )\n}\n\ninterface ConnectorGroupProps {\n  field: TrackedChange & {id: string; rect: Rect; bounds: Rect}\n  change: TrackedChange & {id: string; rect: Rect; bounds: Rect}\n  setHovered: (id: string | null) => void\n  onSetFocus: (path: Path) => void\n}\n\nfunction ConnectorGroup(props: ConnectorGroupProps) {\n  const {change, field, onSetFocus, setHovered} = props\n\n  const onConnectorClick = useCallback(() => {\n    scrollIntoView(field)\n    scrollIntoView(change)\n    onSetFocus(field.path)\n  }, [field, change, onSetFocus])\n\n  const handleMouseEnter = useCallback(() => setHovered(field.id), [field, setHovered])\n  const handleMouseLeave = useCallback(() => setHovered(null), [setHovered])\n\n  const from = useMemo(\n    () => ({\n      rect: {\n        ...field.rect,\n        left: field.rect.left + 3,\n      },\n      bounds: field.bounds,\n    }),\n    [field.bounds, field.rect],\n  )\n\n  const to = useMemo(\n    () => ({\n      rect: {\n        ...change.rect,\n        left: change.rect.left + 1,\n      },\n      bounds: change.bounds,\n    }),\n    [change.bounds, change.rect],\n  )\n\n  return (\n    <>\n      <g onClick={onConnectorClick} onMouseEnter={handleMouseEnter} onMouseLeave={handleMouseLeave}>\n        <Connector from={from} to={to} />\n      </g>\n\n      {DEBUG_LAYER_BOUNDS && <DebugLayers field={field} change={change} />}\n    </>\n  )\n}\n","import {type Path} from '@sanity/types'\nimport {type ReactNode, useMemo, useState} from 'react'\nimport {ConnectorContext} from 'sanity/_singletons'\n\nimport {ScrollContainer} from '../../components/scroll'\nimport {ChangeIndicatorsTracker} from '../tracker'\nimport {ConnectorsOverlay} from './ConnectorsOverlay'\n\n/** @internal */\nexport interface ChangeConnectorRootProps {\n  children: ReactNode\n  className?: string\n  isReviewChangesOpen: boolean\n  onOpenReviewChanges: () => void\n  onSetFocus: (path: Path) => void\n}\n\n/** @internal */\nexport function ChangeConnectorRoot({\n  children,\n  className,\n  isReviewChangesOpen,\n  onOpenReviewChanges,\n  onSetFocus,\n  ...restProps\n}: ChangeConnectorRootProps) {\n  const [rootElement, setRootElement] = useState<HTMLDivElement | null>()\n\n  const contextValue = useMemo(\n    () => ({\n      isReviewChangesOpen,\n      onOpenReviewChanges,\n      onSetFocus,\n    }),\n    [isReviewChangesOpen, onOpenReviewChanges, onSetFocus],\n  )\n\n  return (\n    <ConnectorContext.Provider value={contextValue}>\n      <ChangeIndicatorsTracker>\n        <ScrollContainer {...restProps} ref={setRootElement} className={className}>\n          {children}\n          {rootElement && <ConnectorsOverlay rootElement={rootElement} onSetFocus={onSetFocus} />}\n        </ScrollContainer>\n      </ChangeIndicatorsTracker>\n    </ConnectorContext.Provider>\n  )\n}\n","import {ChevronRightIcon} from '@sanity/icons'\nimport {Box, Flex, Stack, Text} from '@sanity/ui'\nimport {Fragment, useMemo} from 'react'\n\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 {Badge, type BadgeProps} from '@sanity/ui'\nimport {type HTMLProps} from 'react'\n\n/** @internal */\nexport type BetaBadgeProps = Omit<BadgeProps, 'mode' | 'tone'>\n\n/** @internal */\nexport function BetaBadge(props: BetaBadgeProps & Omit<HTMLProps<HTMLDivElement>, 'ref'>) {\n  const {fontSize = 1, children = 'Beta', ...rest} = props\n\n  return (\n    <Badge {...rest} fontSize={fontSize} radius={2} tone=\"primary\">\n      {children}\n    </Badge>\n  )\n}\n","import {Grid} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nfunction focusRingBorderStyle(border: {color: string; width: number}): string {\n  return `inset 0 0 0 ${border.width}px ${border.color}`\n}\n\nexport const AlignedBottomGrid = styled(Grid)`\n  align-items: flex-end;\n`\n\nexport function focusRingStyle(opts: {\n  base?: {bg: string}\n  border?: {color: string; width: number}\n  focusRing: {offset: number; width: number}\n}): string {\n  const {base, border, focusRing} = opts\n  const focusRingOutsetWidth = focusRing.offset + focusRing.width\n  const focusRingInsetWidth = 0 - focusRing.offset\n  const bgColor = base ? base.bg : 'var(--card-bg-color)'\n\n  return [\n    focusRingInsetWidth > 0 && `inset 0 0 0 ${focusRingInsetWidth}px var(--card-focus-ring-color)`,\n    border && focusRingBorderStyle(border),\n    focusRingInsetWidth < 0 && `0 0 0 ${0 - focusRingInsetWidth}px ${bgColor}`,\n    focusRingOutsetWidth > 0 && `0 0 0 ${focusRingOutsetWidth}px var(--card-focus-ring-color)`,\n  ]\n    .filter(Boolean)\n    .join(',')\n}\n","'use no memo'\n// The `use no memo` directive is due to a known issue with react-virtual and react compiler: https://github.com/TanStack/virtual/issues/736\n\nimport {Box, rem, Stack} from '@sanity/ui'\nimport {type ScrollToOptions, useVirtualizer, type Virtualizer} from '@tanstack/react-virtual'\nimport {throttle} from 'lodash'\nimport {\n  cloneElement,\n  forwardRef,\n  Fragment,\n  isValidElement,\n  memo,\n  useCallback,\n  useEffect,\n  useId,\n  useImperativeHandle,\n  useMemo,\n  useRef,\n  useState,\n} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {focusRingStyle} from '../../form/components/formField/styles'\nimport {type CommandListElementType, type CommandListHandle, type CommandListProps} from './types'\n\n// Data attribute to assign to the current active virtual list element\nconst LIST_ITEM_DATA_ATTR_ACTIVE = 'data-active'\n// Selector to find the first interactive element in the virtual list element\nconst LIST_ITEM_INTERACTIVE_SELECTOR = 'a,button'\n\n/**\n * Conditionally render a focus ring overlay over the command list, with adjustable offset\n */\nconst FocusOverlayDiv = styled.div<{offset: number}>(({theme, offset}) => {\n  return css`\n    bottom: ${-offset}px;\n    border-radius: ${rem(theme.sanity.radius[1])};\n    left: ${-offset}px;\n    pointer-events: none;\n    position: absolute;\n    right: ${-offset}px;\n    top: ${-offset}px;\n    z-index: 2;\n\n    ${VirtualListBox}:focus-visible & {\n      box-shadow: ${focusRingStyle({\n        base: theme.sanity.color.base,\n        focusRing: theme.sanity.focusRing,\n      })};\n    }\n  `\n})\n\n/*\n * Conditionally appears over command list items to cancel existing :hover states for all child elements.\n * It should only appear if hover capabilities are available (not on touch devices)\n */\nconst PointerOverlayDiv = styled.div`\n  bottom: 0;\n  display: none;\n  left: 0;\n  position: absolute;\n  right: 0;\n  top: 0;\n  z-index: 1;\n\n  @media (hover: hover) {\n    &[data-enabled='true'] {\n      display: block;\n    }\n  }\n`\n\nconst VirtualListBox = styled(Box)`\n  height: 100%;\n  outline: none;\n  overflow-x: hidden;\n  overflow-y: auto;\n  overscroll-behavior: contain;\n  width: 100%;\n`\n\ntype VirtualListChildBoxProps = {\n  $height: number\n}\nconst VirtualListChildBox = styled(Box) //\n  .attrs<VirtualListChildBoxProps>(({$height}) => ({\n    style: {height: `${$height}px`},\n  }))<VirtualListChildBoxProps>`\n  position: relative;\n  width: 100%;\n`\n\nconst CommandListComponent = forwardRef<CommandListHandle, CommandListProps>(function CommandList(\n  {\n    activeItemDataAttr = LIST_ITEM_DATA_ATTR_ACTIVE,\n    ariaLabel,\n    ariaMultiselectable = false,\n    autoFocus,\n    canReceiveFocus,\n    fixedHeight,\n    focusRingOffset = 0,\n    getItemDisabled,\n    getItemKey,\n    getItemSelected,\n    initialIndex,\n    initialScrollAlign = 'start',\n    inputElement,\n    itemHeight,\n    items,\n    onEndReached,\n    onEndReachedIndexOffset = 0,\n    onlyShowSelectionWhenActive,\n    overscan,\n    renderItem,\n    testId,\n    wrapAround = true,\n    ...responsivePaddingProps\n  },\n  ref,\n) {\n  const isMountedRef = useRef(false)\n  const [commandListId] = useState(useId())\n  const activeIndexRef = useRef(initialIndex ?? 0)\n\n  const [childContainerElement, setChildContainerElement] = useState<HTMLElement | null>(null)\n  const [hovered, setHovered] = useState(false)\n  const [pointerOverlayElement, setPointerOverlayElement] = useState<HTMLDivElement | null>(null)\n  const [virtualListElement, setVirtualListElement] = useState<HTMLElement | null>(null)\n\n  const handleChange = useCallback(\n    (v: Virtualizer<HTMLElement, Element>) => {\n      if (!onEndReached) return\n\n      const [lastItem] = [...v.getVirtualItems()].reverse()\n\n      if (!lastItem) return\n\n      const reachedEnd = lastItem.index >= items.length - onEndReachedIndexOffset - 1\n\n      // Make sure we only trigger `onEndReached` after initial mount\n      if (reachedEnd && isMountedRef.current) {\n        onEndReached()\n      }\n    },\n    [onEndReached, items.length, onEndReachedIndexOffset],\n  )\n\n  // This will trigger a re-render whenever its internal state changes\n  const virtualizer = useVirtualizer({\n    count: items.length,\n    getItemKey,\n    getScrollElement: () => virtualListElement,\n    estimateSize: () => itemHeight,\n    onChange: handleChange,\n    overscan,\n  })\n\n  /**\n   * Return an array of values with `activeIndex`, `disabled` and `selected` defined, applying custom\n   * mapping functions (`getItemDisabled`, `getItemSelected`) if provided. E.g.:\n   *\n   * ```\n   * [\n   *  { activeIndex: 0  disabled: false, selected: false },\n   *  { activeIndex: null, disabled: true, selected: false },\n   *  { activeIndex: 1, disabled: false, selected: true }\n   * ]\n   * ```\n   *\n   * Disabled virtual list items are ignored when creating aria attributes.\n   */\n  const itemIndices = useMemo(() => {\n    let i = -1\n    return items.reduce<\n      {\n        activeIndex: number | null\n        selected: boolean\n        disabled: boolean\n      }[]\n    >((acc, _, index) => {\n      const disabled = getItemDisabled?.(index) ?? false\n      const selected = getItemSelected?.(index) ?? false\n      if (!disabled) {\n        i += 1\n      }\n      acc[index] = {\n        activeIndex: disabled ? null : i,\n        disabled,\n        selected,\n      }\n      return acc\n    }, [])\n  }, [getItemDisabled, getItemSelected, items])\n\n  const activeItemCount = useMemo(\n    () => itemIndices.filter((v) => !v.disabled).length,\n    [itemIndices],\n  )\n\n  /**\n   * Toggle pointer overlay element which will kill existing hover states\n   */\n  const enableChildContainerPointerEvents = useCallback(\n    (enabled: boolean) =>\n      pointerOverlayElement?.setAttribute('data-enabled', (!enabled).toString()),\n    [pointerOverlayElement],\n  )\n\n  const getChildDescendantId = useCallback(\n    (index: number) => `${commandListId}-item-${index}`,\n    [commandListId],\n  )\n\n  const getCommandListChildrenId = useCallback(() => `${commandListId}-children`, [commandListId])\n\n  /**\n   * Iterate through all virtual list children and apply the active data-attribute on the selected index.\n   * Don't apply styles when `hideSelectionOnMouseLeave` is true and the command list is neither focused or hovered.\n   */\n  const showChildrenActiveState = useCallback(() => {\n    const hasFocus = [inputElement, virtualListElement].some((el) => document.activeElement === el)\n    if (onlyShowSelectionWhenActive && !hasFocus && !hovered) {\n      return\n    }\n\n    const childElements = Array.from(childContainerElement?.children || []) as HTMLElement[]\n    childElements?.forEach((child) => {\n      const virtualIndex = Number(child.dataset?.index)\n      const targetIndex = itemIndices[virtualIndex]?.activeIndex\n      child\n        .querySelector(LIST_ITEM_INTERACTIVE_SELECTOR)\n        ?.toggleAttribute(activeItemDataAttr, targetIndex === activeIndexRef.current)\n    })\n  }, [\n    activeItemDataAttr,\n    childContainerElement?.children,\n    hovered,\n    inputElement,\n    itemIndices,\n    onlyShowSelectionWhenActive,\n    virtualListElement,\n  ])\n\n  /**\n   * Iterate through all virtual list children and clear the active data-attribute.\n   */\n  const hideChildrenActiveState = useCallback(() => {\n    const childElements = Array.from(childContainerElement?.children || [])\n    childElements?.forEach((child) => {\n      child\n        .querySelector(LIST_ITEM_INTERACTIVE_SELECTOR)\n        ?.toggleAttribute(activeItemDataAttr, false)\n    })\n  }, [activeItemDataAttr, childContainerElement?.children])\n\n  /**\n   * Throttled version of `showChildrenActiveState`, used when DOM mutations are detected in virtual lists\n   */\n  const refreshChildrenActiveStateThrottled = useMemo(() => {\n    return throttle(showChildrenActiveState, 200)\n  }, [showChildrenActiveState])\n\n  /**\n   * Assign active descendant on input element (if present)\n   */\n  const handleUpdateActiveDescendant = useCallback(() => {\n    const activeIndex = activeIndexRef?.current\n    if (items.length > 0) {\n      inputElement?.setAttribute('aria-activedescendant', getChildDescendantId(activeIndex))\n      virtualListElement?.setAttribute('aria-activedescendant', getChildDescendantId(activeIndex))\n    } else {\n      inputElement?.removeAttribute('aria-activedescendant')\n      virtualListElement?.removeAttribute('aria-activedescendant')\n    }\n  }, [getChildDescendantId, inputElement, items.length, virtualListElement])\n\n  /**\n   * Obtain index of the top most visible element\n   */\n  const handleGetTopIndex = useCallback(() => {\n    const childContainerParentElement = childContainerElement?.parentElement\n    if (childContainerElement && childContainerParentElement) {\n      const offset =\n        childContainerParentElement.getBoundingClientRect().top -\n        childContainerElement.getBoundingClientRect().top\n      return virtualizer.getVirtualItemForOffset(offset)?.index ?? -1\n    }\n    return -1\n  }, [childContainerElement, virtualizer])\n\n  /**\n   * Mark an index as active, re-assign aria attrs on all children and optionally scroll into view\n   */\n  const setActiveIndex = useCallback(\n    ({\n      index,\n      scrollAlign,\n      scrollIntoView = true,\n    }: {\n      index: number\n      scrollAlign?: ScrollToOptions['align']\n      scrollIntoView?: boolean\n    }) => {\n      activeIndexRef.current = index\n      handleUpdateActiveDescendant()\n      showChildrenActiveState()\n\n      if (scrollIntoView) {\n        const virtualListIndex = itemIndices.findIndex((i) => i.activeIndex === index)\n        if (virtualListIndex > -1) {\n          virtualizer.scrollToIndex(virtualListIndex, scrollAlign ? {align: scrollAlign} : {})\n        }\n      }\n    },\n    [handleUpdateActiveDescendant, itemIndices, showChildrenActiveState, virtualizer],\n  )\n\n  /**\n   * Select adjacent virtual item index and scroll into view with `react-virtual`\n   */\n  const selectAdjacentItemIndex = useCallback(\n    (direction: 'previous' | 'next') => {\n      let nextIndex = -1\n      const lastIndex = activeItemCount - 1\n\n      if (direction === 'next') {\n        const wrapAroundIndex = wrapAround ? 0 : lastIndex\n        nextIndex =\n          activeIndexRef.current < activeItemCount - 1\n            ? activeIndexRef.current + 1\n            : wrapAroundIndex\n      }\n      if (direction === 'previous') {\n        const wrapAroundIndex = wrapAround ? lastIndex : 0\n        nextIndex = activeIndexRef.current > 0 ? activeIndexRef.current - 1 : wrapAroundIndex\n      }\n      setActiveIndex({index: nextIndex, scrollIntoView: true})\n      enableChildContainerPointerEvents(false)\n    },\n    [activeItemCount, enableChildContainerPointerEvents, setActiveIndex, wrapAround],\n  )\n\n  const focusElement = useCallback(\n    (type: CommandListElementType) => {\n      switch (type) {\n        case 'input':\n          inputElement?.focus()\n          break\n        case 'list':\n          virtualListElement?.focus()\n          break\n        default:\n          break\n      }\n    },\n    [inputElement, virtualListElement],\n  )\n\n  const focusInputElement = useCallback(() => {\n    inputElement?.focus()\n  }, [inputElement])\n\n  const focusListElement = useCallback(() => {\n    virtualListElement?.focus()\n  }, [virtualListElement])\n\n  /**\n   * Mark hovered child item as active\n   */\n  const handleChildMouseEnter = useCallback(\n    (index: number) => () => {\n      setActiveIndex({index, scrollIntoView: false})\n    },\n    [setActiveIndex],\n  )\n\n  const handleFocus = useCallback(() => {\n    showChildrenActiveState()\n  }, [showChildrenActiveState])\n\n  /**\n   * Handle keyboard events:\n   * - Up/down arrow: scroll to adjacent items\n   * - Enter: trigger click events on the current active element\n   */\n  const handleKeyDown = useCallback(\n    (type: CommandListElementType) => (event: KeyboardEvent) => {\n      const childElements = Array.from(childContainerElement?.children || []) as HTMLElement[]\n      if (!childElements.length) {\n        return\n      }\n\n      if (event.key === 'ArrowDown') {\n        event.preventDefault()\n        focusElement(type)\n        selectAdjacentItemIndex('next')\n      }\n      if (event.key === 'ArrowUp') {\n        event.preventDefault()\n        focusElement(type)\n        selectAdjacentItemIndex('previous')\n      }\n\n      if (event.key === 'Enter') {\n        event.preventDefault()\n        focusElement(type)\n        const currentElement = childElements.find(\n          (el) =>\n            Number(el.dataset.index) ===\n            itemIndices.findIndex((i) => i.activeIndex === activeIndexRef.current),\n        )\n\n        if (currentElement) {\n          const clickableElement = currentElement?.querySelector<HTMLElement>(\n            LIST_ITEM_INTERACTIVE_SELECTOR,\n          )\n          clickableElement?.click()\n        }\n      }\n    },\n    [childContainerElement?.children, focusElement, itemIndices, selectAdjacentItemIndex],\n  )\n  const handleKeyDownInput = useCallback(\n    (event: KeyboardEvent) => handleKeyDown('input')(event),\n    [handleKeyDown],\n  )\n  const handleKeyDownList = useCallback(\n    (event: KeyboardEvent) => handleKeyDown('list')(event),\n    [handleKeyDown],\n  )\n\n  const handleVirtualListMouseEnter = useCallback(() => {\n    if (onlyShowSelectionWhenActive) {\n      showChildrenActiveState()\n      setHovered(true)\n    }\n  }, [onlyShowSelectionWhenActive, showChildrenActiveState])\n  const handleVirtualListMouseLeave = useCallback(() => {\n    if (onlyShowSelectionWhenActive) {\n      hideChildrenActiveState()\n      setHovered(false)\n    }\n  }, [hideChildrenActiveState, onlyShowSelectionWhenActive])\n\n  useImperativeHandle(ref, () => {\n    return {\n      focusInputElement() {\n        focusInputElement()\n      },\n      focusListElement() {\n        focusListElement()\n      },\n      getTopIndex() {\n        return handleGetTopIndex()\n      },\n      scrollToIndex(index: number) {\n        setActiveIndex({index})\n        enableChildContainerPointerEvents(true)\n      },\n    }\n  }, [\n    enableChildContainerPointerEvents,\n    focusInputElement,\n    focusListElement,\n    handleGetTopIndex,\n    setActiveIndex,\n  ])\n\n  /**\n   * Optionally set active index (and align) on mount only\n   */\n  useEffect(() => {\n    if (typeof initialIndex !== 'undefined' && !isMountedRef.current) {\n      setActiveIndex({\n        index: initialIndex,\n        scrollAlign: initialScrollAlign,\n        scrollIntoView: true,\n      })\n    }\n    isMountedRef.current = true\n  }, [initialIndex, initialScrollAlign, onlyShowSelectionWhenActive, setActiveIndex])\n\n  /**\n   * Re-enable child pointer events on any mousemove / wheel event\n   */\n  useEffect(() => {\n    function handleMouseEvent() {\n      enableChildContainerPointerEvents(true)\n    }\n    virtualListElement?.addEventListener('mousemove', handleMouseEvent)\n    virtualListElement?.addEventListener('wheel', handleMouseEvent, {passive: true})\n    return () => {\n      virtualListElement?.removeEventListener('mousemove', handleMouseEvent)\n      virtualListElement?.removeEventListener('wheel', handleMouseEvent)\n    }\n  }, [enableChildContainerPointerEvents, virtualListElement])\n\n  /**\n   * Listen to keyboard / blur / focus events on both input element (if present) and the virtual list element.\n   */\n  useEffect(() => {\n    inputElement?.addEventListener('focus', handleFocus)\n    inputElement?.addEventListener('keydown', handleKeyDownInput)\n    virtualListElement?.addEventListener('focus', handleFocus)\n    virtualListElement?.addEventListener('keydown', handleKeyDownList)\n    return () => {\n      inputElement?.removeEventListener('focus', handleFocus)\n      inputElement?.removeEventListener('keydown', handleKeyDownInput)\n      virtualListElement?.removeEventListener('focus', handleFocus)\n      virtualListElement?.removeEventListener('keydown', handleKeyDownList)\n    }\n  }, [\n    canReceiveFocus,\n    handleFocus,\n    handleKeyDown,\n    handleKeyDownInput,\n    handleKeyDownList,\n    hideChildrenActiveState,\n    inputElement,\n    showChildrenActiveState,\n    virtualListElement,\n  ])\n\n  /**\n   * Refresh selected state when item values change (as a result of filtering).\n   * This is to ensure that we correctly clear aria-activedescendant attrs if the filtered array is empty.\n   */\n  useEffect(() => {\n    handleUpdateActiveDescendant()\n  }, [handleUpdateActiveDescendant, items])\n\n  /**\n   * On DOM mutations, re-assign active descendant on input element (if present) and update active state on all children.\n   *\n   * Useful since virtual lists will constantly mutate the DOM on scroll, and we want to ensure that\n   * new elements coming into view are rendered with the correct selected state.\n   *\n   * An alternative to using MutationObserver is hooking into the `onChange` callback that `react-virtual` provides, though\n   * this changes on _every_ internal state change.\n   */\n  useEffect(() => {\n    const mutationObserver = new MutationObserver(refreshChildrenActiveStateThrottled)\n\n    if (childContainerElement) {\n      mutationObserver.observe(childContainerElement, {\n        childList: true,\n        subtree: true,\n      })\n    }\n\n    return () => {\n      mutationObserver.disconnect()\n    }\n  }, [childContainerElement, refreshChildrenActiveStateThrottled])\n\n  /**\n   * Apply input aria attributes\n   */\n  useEffect(() => {\n    inputElement?.setAttribute('aria-autocomplete', 'list')\n    inputElement?.setAttribute('aria-expanded', 'true')\n    inputElement?.setAttribute('aria-controls', getCommandListChildrenId())\n    inputElement?.setAttribute('role', 'combobox')\n  }, [getCommandListChildrenId, inputElement])\n\n  /**\n   * Focus input / virtual list element on mount\n   */\n  useEffect(() => {\n    if (autoFocus) {\n      focusElement(autoFocus)\n    }\n  }, [autoFocus, canReceiveFocus, focusListElement, focusInputElement, focusElement])\n\n  const rootTabIndex = canReceiveFocus ? 0 : -1\n\n  return (\n    <VirtualListBox\n      id={getCommandListChildrenId()}\n      onMouseEnter={handleVirtualListMouseEnter}\n      onMouseLeave={handleVirtualListMouseLeave}\n      ref={setVirtualListElement}\n      sizing=\"border\"\n      tabIndex={rootTabIndex}\n      data-testid={testId}\n      {...responsivePaddingProps}\n    >\n      {canReceiveFocus && <FocusOverlayDiv offset={focusRingOffset} />}\n      <PointerOverlayDiv aria-hidden=\"true\" data-enabled ref={setPointerOverlayElement} />\n      {virtualizer && (\n        <VirtualListChildBox\n          forwardedAs=\"ul\"\n          $height={virtualizer.getTotalSize()}\n          aria-label={ariaLabel}\n          aria-multiselectable={ariaMultiselectable}\n          flex={1}\n          ref={setChildContainerElement}\n          role=\"listbox\"\n        >\n          {virtualizer.getVirtualItems().map((virtualRow) => {\n            const virtualIndex = virtualRow.index // visible index in the DOM\n            const {activeIndex, disabled, selected} = itemIndices[virtualIndex]\n\n            const itemToRender = renderItem(items[virtualIndex], {\n              activeIndex,\n              disabled,\n              selected,\n              virtualIndex,\n            }) as React.JSX.Element\n\n            // @TODO can we avoid using cloneElement here?\n            const clonedItem =\n              isValidElement(itemToRender) && itemToRender.type != Fragment\n                ? cloneElement(itemToRender, {\n                    // @ts-expect-error @TODO shift the responsibility of setting tabIndex to the consumer, so we can remove the need to clone\n                    tabIndex: -1,\n                  })\n                : itemToRender\n\n            return (\n              <CommandListItem\n                key={virtualRow.key}\n                ref={fixedHeight ? undefined : virtualizer.measureElement}\n                activeIndex={activeIndex}\n                activeItemCount={activeItemCount}\n                ariaMultiselectable={ariaMultiselectable}\n                disabled={disabled}\n                fixedHeight={fixedHeight ? `${virtualRow.size}px` : undefined}\n                getChildDescendantId={getChildDescendantId}\n                handleChildMouseEnter={handleChildMouseEnter}\n                selected={selected}\n                virtualIndex={virtualIndex}\n                virtualRowStart={virtualRow.start}\n              >\n                {clonedItem}\n              </CommandListItem>\n            )\n          })}\n        </VirtualListChildBox>\n      )}\n    </VirtualListBox>\n  )\n})\n\n/**\n * Renders a Command List with support for the following:\n *\n * - Keyboard navigation (↑ / ↓ / ENTER) to children with a specified container (`childContainerRef`)\n * - Focus redirection when clicking child elements\n * - Pointer blocking when navigating with arrow keys (to ensure that only one active state is visible at any given time)\n * - ARIA attributes to define a `combobox` input that controls a separate `listbox`\n *\n * @internal\n */\nexport const CommandList = memo(CommandListComponent)\nCommandList.displayName = 'Memo(ForwardRef(CommandList))'\n\nconst CommandListItemComponent = forwardRef(function CommandListItem(\n  props: {\n    children: React.ReactNode\n    activeIndex: number | null\n    activeItemCount: number\n    ariaMultiselectable: boolean\n    disabled: boolean\n    fixedHeight: `${number}px` | undefined\n    getChildDescendantId: (index: number) => string\n    handleChildMouseEnter: (index: number) => () => void\n    selected: boolean\n    virtualIndex: number\n    virtualRowStart: number\n  },\n  forwardedRef: React.ForwardedRef<HTMLDivElement>,\n) {\n  const {\n    children,\n    activeIndex,\n    activeItemCount,\n    ariaMultiselectable,\n    disabled,\n    fixedHeight,\n    getChildDescendantId,\n    handleChildMouseEnter,\n    selected,\n    virtualIndex,\n    virtualRowStart,\n  } = props\n\n  const onMouseEnter = useMemo(\n    () =>\n      typeof activeIndex === 'number' && !disabled ? handleChildMouseEnter(activeIndex) : undefined,\n    [activeIndex, disabled, handleChildMouseEnter],\n  )\n  const activeAriaAttributes = useMemo(\n    () =>\n      typeof activeIndex === 'number' && !disabled\n        ? {\n            'aria-posinset': activeIndex + 1,\n            ...(ariaMultiselectable ? {'aria-selected': selected.toString()} : {}),\n            'aria-setsize': activeItemCount,\n            'id': getChildDescendantId(activeIndex),\n            'role': 'option',\n          }\n        : {},\n    [activeIndex, activeItemCount, ariaMultiselectable, disabled, getChildDescendantId, selected],\n  )\n\n  const style = useMemo(\n    () => ({\n      flex: 1,\n      height: fixedHeight,\n      left: 0,\n      position: 'absolute' as const,\n      top: 0,\n      transform: `translateY(${virtualRowStart}px)`,\n      width: '100%',\n    }),\n    [fixedHeight, virtualRowStart],\n  )\n\n  return (\n    <Stack\n      as=\"li\"\n      data-index={virtualIndex}\n      ref={forwardedRef}\n      style={style}\n      tabIndex={-1}\n      {...activeAriaAttributes}\n      onMouseEnter={onMouseEnter}\n    >\n      {children}\n    </Stack>\n  )\n})\n\nconst CommandListItem = memo(CommandListItemComponent)\nCommandListItem.displayName = 'Memo(ForwardRef(CommandListItem))'\n","import {EllipsisHorizontalIcon} from '@sanity/icons'\nimport {type ForwardedRef, forwardRef, type HTMLProps} from 'react'\n\nimport {Button, type ButtonProps} from '../../../ui-components'\nimport {useTranslation} from '../..'\n\ntype ContextMenuButtonProps = Pick<\n  ButtonProps,\n  'mode' | 'selected' | 'size' | 'tone' | 'tooltipProps'\n>\n\n/**\n * Simple context menu button (with horizontal ellipsis icon) with shared localization.\n *\n * @internal\n */\nexport const ContextMenuButton = forwardRef(function ContextMenuButton(\n  props: ContextMenuButtonProps &\n    Pick<HTMLProps<HTMLButtonElement>, 'disabled' | 'hidden' | 'onClick'>,\n  ref: ForwardedRef<HTMLButtonElement>,\n) {\n  const {mode = 'bleed', tooltipProps, tone, ...rest} = props\n\n  const {t} = useTranslation()\n\n  return (\n    <Button\n      {...rest}\n      icon={EllipsisHorizontalIcon}\n      mode={mode}\n      ref={ref}\n      tone={tone}\n      tooltipProps={{\n        ...tooltipProps,\n        content: tooltipProps?.content || t('common.context-menu-button.tooltip'),\n      }}\n    />\n  )\n})\n","export interface FaviconProps {\n  /** @deprecated No longer needed/used - will be added by Vite automatically */\n  basePath?: string\n}\n\nexport function Favicons(_props: FaviconProps) {\n  const base = '/static'\n  return (\n    <>\n      <link rel=\"icon\" href={`${base}/favicon.ico`} sizes=\"any\" />\n      <link rel=\"icon\" href={`${base}/favicon.svg`} type=\"image/svg+xml\" />\n      <link rel=\"apple-touch-icon\" href={`${base}/apple-touch-icon.png`} />\n      <link rel=\"manifest\" href={`${base}/manifest.webmanifest`} />\n    </>\n  )\n}\n","const errorHandlerScript = `\n;(function () {\n  var _caughtErrors = []\n\n  var errorChannel = (function () {\n    var subscribers = []\n\n    function publish(msg) {\n      for (var i = 0; i < subscribers.length; i += 1) {\n        subscribers[i](msg)\n      }\n    }\n\n    function subscribe(subscriber) {\n      subscribers.push(subscriber)\n\n      return function () {\n        var idx = subscribers.indexOf(subscriber)\n\n        if (idx > -1) {\n          subscribers.splice(idx, 1)\n        }\n      }\n    }\n\n    return {publish, subscribe, subscribers}\n  })()\n\n  // NOTE: Store the error channel instance in the global scope so that the Studio application can\n  // access it and subscribe to errors.\n  window.__sanityErrorChannel = {\n    subscribe: errorChannel.subscribe,\n  }\n\n  function _nextTick(callback) {\n    setTimeout(callback, 0)\n  }\n\n  function _handleError(error, params) {\n    _nextTick(function () {\n      // - If there are error channel subscribers, then we notify them (no console error).\n      // - If there are no subscribers, then we log the error to the console and render the error overlay.\n      if (errorChannel.subscribers.length) {\n        errorChannel.publish({error, params})\n      } else {\n        console.error(error)\n\n        _renderErrorOverlay(error, params)\n      }\n    })\n  }\n\n  var ERROR_BOX_STYLE = [\n    'background: #fff',\n    'border-radius: 6px',\n    'box-sizing: border-box',\n    'color: #121923',\n    'flex: 1',\n    \"font-family: -apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue','Liberation Sans',Helvetica,Arial,system-ui,sans-serif\",\n    'font-size: 16px',\n    'line-height: 21px',\n    'margin: 0 auto',\n    'max-width: 960px',\n    'overflow: auto',\n    'padding: 20px',\n    'width: 100%',\n  ].join(';')\n\n  var ERROR_CODE_STYLE = [\n    'color: #972E2A',\n    \"font-family: -apple-system-ui-monospace, 'SF Mono', Menlo, Monaco, Consolas, monospace\",\n    'font-size: 13px',\n    'line-height: 17px',\n    'margin: 0',\n  ].join(';')\n\n  function _renderErrorOverlay(error, params) {\n    var errorElement = document.querySelector('#__sanityError') || document.createElement('div')\n    var colno = params.event.colno\n    var lineno = params.event.lineno\n    var filename = params.event.filename\n\n    errorElement.id = '__sanityError'\n    errorElement.innerHTML = [\n      '<div style=\"' + ERROR_BOX_STYLE + '\">',\n      '<div style=\"font-weight: 700;\">Uncaught error: ' + error.message + '</div>',\n      '<div style=\"color: #515E72; font-size: 13px; line-height: 17px; margin: 10px 0;\">' +\n        filename +\n        ':' +\n        lineno +\n        ':' +\n        colno +\n        '</div>',\n      '<pre style=\"' + ERROR_CODE_STYLE + '\">' + error.stack + '</pre>',\n      '</div>',\n    ].join('')\n\n    errorElement.style.position = 'fixed'\n    errorElement.style.zIndex = 1000000\n    errorElement.style.top = 0\n    errorElement.style.left = 0\n    errorElement.style.right = 0\n    errorElement.style.bottom = 0\n    errorElement.style.padding = '20px'\n    errorElement.style.background = 'rgba(16,17,18,0.66)'\n    errorElement.style.display = 'flex'\n    errorElement.style.alignItems = 'center'\n    errorElement.style.justifyContent = 'center'\n\n    document.body.appendChild(errorElement)\n  }\n\n  // NOTE:\n  // Yes – we're attaching 2 error listeners below 👀\n  // This is because React makes the same error throw twice (in development mode).\n  // See: https://github.com/facebook/react/issues/10384\n\n  // Error listener #1\n  window.onerror = function (event, source, lineno, colno, error) {\n    _nextTick(function () {\n      if (_caughtErrors.indexOf(error) !== -1) return\n\n      _caughtErrors.push(error)\n\n      _handleError(error, {\n        event,\n        lineno,\n        colno,\n        source,\n      })\n\n      _nextTick(function () {\n        var idx = _caughtErrors.indexOf(error)\n\n        if (idx > -1) _caughtErrors.splice(idx, 1)\n      })\n    })\n\n    // IMPORTANT: this callback must return \\`true\\` to prevent the error from being rendered in\n    // the browser’s console.\n    return true\n  }\n\n  // Error listener #2\n  window.addEventListener('error', function (event) {\n    if (_caughtErrors.indexOf(event.error) !== -1) return true\n\n    _caughtErrors.push(event.error)\n\n    _handleError(event.error, {\n      event,\n      lineno: event.lineno,\n      colno: event.colno,\n    })\n\n    _nextTick(function () {\n      _nextTick(function () {\n        var idx = _caughtErrors.indexOf(event.error)\n\n        if (idx > -1) _caughtErrors.splice(idx, 1)\n      })\n    })\n\n    return true\n  })\n})()\n`\n\n/** @internal */\nexport function GlobalErrorHandler() {\n  // eslint-disable-next-line react/no-danger\n  return <script dangerouslySetInnerHTML={{__html: errorHandlerScript}} />\n}\n","/* eslint-disable i18next/no-literal-string,@sanity/i18n/no-attribute-string-literals */\nconst NoJsStyles = `\n.sanity-app-no-js__root {\n  position: absolute;\n  top: 0;\n  right: 0;\n  left: 0;\n  bottom: 0;\n  background: #fff;\n}\n\n.sanity-app-no-js__content {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  text-align: center;\n  font-family: helvetica, arial, sans-serif;\n}\n`\n\n/** @internal */\nexport function NoJavascript() {\n  return (\n    <noscript>\n      <div className=\"sanity-app-no-js__root\">\n        <div className=\"sanity-app-no-js__content\">\n          <style type=\"text/css\">{NoJsStyles}</style>\n          <h1>JavaScript disabled</h1>\n          <p>\n            Please <a href=\"https://www.enable-javascript.com/\">enable JavaScript</a> in your\n            browser and reload the page to proceed.\n          </p>\n        </div>\n      </div>\n    </noscript>\n  )\n}\n","/* eslint-disable i18next/no-literal-string */\n\nimport {Favicons} from './Favicons'\nimport {GlobalErrorHandler} from './globalErrorHandler'\nimport {NoJavascript} from './NoJavascript'\n\nconst globalStyles = `\n  @font-face {\n    font-family: Inter;\n    font-style: normal;\n    font-weight: 400;\n    font-display: swap;\n    src: url(\"https://studio-static.sanity.io/Inter-Regular.woff2\") format(\"woff2\");\n  }\n  @font-face {\n    font-family: Inter;\n    font-style: italic;\n    font-weight: 400;\n    font-display: swap;\n    src: url(\"https://studio-static.sanity.io/Inter-Italic.woff2\") format(\"woff2\");\n  }\n  @font-face {\n    font-family: Inter;\n    font-style: normal;\n    font-weight: 500;\n    font-display: swap;\n    src: url(\"https://studio-static.sanity.io/Inter-Medium.woff2\") format(\"woff2\");\n  }\n  @font-face {\n    font-family: Inter;\n    font-style: italic;\n    font-weight: 500;\n    font-display: swap;\n    src: url(\"https://studio-static.sanity.io/Inter-MediumItalic.woff2\") format(\"woff2\");\n  }\n  @font-face {\n    font-family: Inter;\n    font-style: normal;\n    font-weight: 600;\n    font-display: swap;\n    src: url(\"https://studio-static.sanity.io/Inter-SemiBold.woff2\") format(\"woff2\");\n  }\n  @font-face {\n    font-family: Inter;\n    font-style: italic;\n    font-weight: 600;\n    font-display: swap;\n    src: url(\"https://studio-static.sanity.io/Inter-SemiBoldItalic.woff2\") format(\"woff2\");\n  }\n  @font-face {\n    font-family: Inter;\n    font-style: normal;\n    font-weight: 700;\n    font-display: swap;\n    src: url(\"https://studio-static.sanity.io/Inter-Bold.woff2\") format(\"woff2\");\n  }\n  @font-face {\n    font-family: Inter;\n    font-style: italic;\n    font-weight: 700;\n    font-display: swap;\n    src: url(\"https://studio-static.sanity.io/Inter-BoldItalic.woff2\") format(\"woff2\");\n  }\n  @font-face {\n    font-family: Inter;\n    font-style: normal;\n    font-weight: 800;\n    font-display: swap;\n    src: url(\"https://studio-static.sanity.io/Inter-ExtraBold.woff2\") format(\"woff2\");\n  }\n  @font-face {\n    font-family: Inter;\n    font-style: italic;\n    font-weight: 800;\n    font-display: swap;\n    src: url(\"https://studio-static.sanity.io/Inter-ExtraBoldItalic.woff2\") format(\"woff2\");\n  }\n  @font-face {\n    font-family: Inter;\n    font-style: normal;\n    font-weight: 900;\n    font-display: swap;\n    src: url(\"https://studio-static.sanity.io/Inter-Black.woff2\") format(\"woff2\");\n  }\n  @font-face {\n    font-family: Inter;\n    font-style: italic;\n    font-weight: 900;\n    font-display: swap;\n    src: url(\"https://studio-static.sanity.io/Inter-BlackItalic.woff2\") format(\"woff2\");\n  }\n  html {\n    background-color: #f1f3f6;\n  }\n  html,\n  body,\n  #sanity {\n    height: 100%;\n  }\n  body {\n    margin: 0;\n    -webkit-font-smoothing: antialiased;\n  }\n`\n\n/**\n * @hidden\n * @beta\n */\nexport interface DefaultDocumentProps {\n  entryPath: string\n  css?: string[]\n\n  // Currently unused, but kept for potential future use\n  // eslint-disable-next-line react/no-unused-prop-types\n  basePath?: string\n}\n\nconst EMPTY_ARRAY: never[] = []\n\n/**\n * @hidden\n * @beta\n *\n * @deprecated Moved to `_internal` package\n */\nexport function DefaultDocument(props: DefaultDocumentProps): React.JSX.Element {\n  const {entryPath, css = EMPTY_ARRAY} = props\n\n  return (\n    <html lang=\"en\">\n      <head>\n        <meta charSet=\"utf-8\" />\n        <meta\n          name=\"viewport\"\n          content=\"width=device-width, initial-scale=1, maximum-scale=1, viewport-fit=cover\"\n        />\n        <meta name=\"robots\" content=\"noindex\" />\n        <meta name=\"referrer\" content=\"same-origin\" />\n\n        <Favicons />\n\n        <title>Sanity Studio</title>\n\n        <GlobalErrorHandler />\n\n        {css.map((href) => (\n          <link key={href} rel=\"stylesheet\" href={href} />\n        ))}\n        {/* eslint-disable-next-line react/no-danger */}\n        <style dangerouslySetInnerHTML={{__html: globalStyles}} />\n      </head>\n      <body>\n        <div id=\"sanity\" />\n        <script type=\"module\" src={entryPath} />\n        <NoJavascript />\n      </body>\n    </html>\n  )\n}\n","import {type WorkspaceLike} from './types'\n\n/**\n * Gets a printable identifer for the workspace - either the name, or the index\n * and any potential title set for it\n *\n * @param workspace - The workspace to get the indentifier for\n * @param index - The index at which the workspace appeared in the source array\n * @returns Printable string (eg `intranet`, or `at index 5 (titled \"Intranet\")`)\n * @internal\n */\nexport function getWorkspaceIdentifier({name, title}: WorkspaceLike, index: number): string {\n  if (typeof name === 'string' && name.trim().length > 0) {\n    return name\n  }\n\n  return getNamelessWorkspaceIdentifier(title, index)\n}\n\n/** @internal */\nexport function getNamelessWorkspaceIdentifier(title: string | undefined, index: number): string {\n  const withTitle =\n    typeof title === 'string' && title.trim().length > 0 ? ` (titled \"${title}\")` : ''\n  return `at index ${index}${withTitle}`\n}\n","import {useContext} from 'react'\nimport {WorkspacesContext} from 'sanity/_singletons'\n\nimport {type WorkspaceSummary} from '../../config'\n\n/** @internal */\nexport function useWorkspaces(): WorkspaceSummary[] {\n  const workspaces = useContext(WorkspacesContext)\n  if (!workspaces) throw new Error('Could not find `workspaces` context')\n  return workspaces\n}\n","import {getWorkspaceIdentifier} from './helpers'\nimport {type WorkspaceLike} from './types'\n\nexport interface WorkspaceValidationErrorOptions {\n  workspace: WorkspaceLike\n  index: number\n}\n\n/**\n * Thrown on workspace validation errors. Includes an identifier that is either the name of\n * the workspace, or in the case of a missing or invalid name, an index and a potential title\n */\nexport class WorkspaceValidationError extends Error {\n  index?: number\n  identifier?: string\n\n  constructor(message: string, options?: WorkspaceValidationErrorOptions) {\n    super(message)\n    this.name = 'WorkspaceValidationError'\n    this.index = options?.index\n    this.identifier = options?.workspace && getWorkspaceIdentifier(options.workspace, options.index)\n  }\n}\n","import {getNamelessWorkspaceIdentifier, getWorkspaceIdentifier} from './helpers'\nimport {type WorkspaceLike} from './types'\nimport {WorkspaceValidationError} from './WorkspaceValidationError'\n\n/** @internal */\nexport interface ValidateWorkspaceOptions {\n  workspaces: WorkspaceLike[]\n}\n\n/**\n * Validates workspace configuration, throwing if:\n *\n * - Workspaces do not all have base paths and names (if multiple given)\n * - Base paths or names are invalid\n * - Base paths or names are not unique\n *\n * @internal\n */\nexport function validateWorkspaces({workspaces}: ValidateWorkspaceOptions): void {\n  if (workspaces.length === 0) {\n    throw new WorkspaceValidationError('At least one workspace is required.')\n  }\n\n  validateNames(workspaces)\n  validateBasePaths(workspaces)\n}\n\n/**\n * Validates the workspace names of every workspace\n * Only exported for testing purposes\n *\n * @param workspaces - An array of workspaces\n * @internal\n */\nexport function validateNames(workspaces: WorkspaceLike[]): void {\n  const isSingleWorkspace = workspaces.length === 1\n  const names = new Map<string, {index: number; workspace: WorkspaceLike}>()\n  workspaces.forEach((workspace, index) => {\n    const {name: rawName, title} = workspace\n    const thisIdentifier = getNamelessWorkspaceIdentifier(title, index)\n\n    if (!rawName && !isSingleWorkspace) {\n      throw new WorkspaceValidationError(\n        'All workspaces must have a `name`, unless only a single workspace is defined. ' +\n          `Workspace ${thisIdentifier} did not define a \\`name\\`.`,\n        {workspace, index},\n      )\n    }\n\n    const name = isSingleWorkspace && typeof rawName === 'undefined' ? 'default' : rawName\n\n    if (typeof name !== 'string') {\n      throw new WorkspaceValidationError(\n        `Workspace at index ${index} defined an invalid \\`name\\` - must be a string.`,\n        {workspace, index},\n      )\n    }\n\n    const normalized = name.toLowerCase()\n    const existingWorkspace = names.get(normalized)\n\n    if (existingWorkspace) {\n      const prevIdentifier = getNamelessWorkspaceIdentifier(\n        existingWorkspace.workspace.title,\n        existingWorkspace.index,\n      )\n      throw new WorkspaceValidationError(\n        `\\`name\\`s must be unique. Workspace ${prevIdentifier} and ` +\n          `workspace ${thisIdentifier} both have the \\`name\\` \\`${name}\\``,\n        {workspace, index},\n      )\n    }\n\n    names.set(normalized, {index, workspace})\n\n    if (!/^[a-z0-9][a-z0-9_-]*$/i.test(name)) {\n      throw new WorkspaceValidationError(\n        `All workspace \\`name\\`s must consist of only a-z, 0-9, underscore and dashes, ` +\n          `and cannot begin with an underscore or dash. ` +\n          `Workspace ${thisIdentifier} has the invalid name \\`${name}\\``,\n        {workspace, index},\n      )\n    }\n  })\n}\n\n/**\n * Validates the base paths of every workspace\n * Only exported for testing purposes\n *\n * @param workspaces - An array of workspaces\n * @internal\n */\nexport function validateBasePaths(workspaces: WorkspaceLike[]): void {\n  // If we have more than a single workspace, every workspace needs a basepath\n  if (workspaces.length > 1) {\n    workspaces.every(hasBasePath) // Throws on missing basePath\n  }\n\n  workspaces.every(validateBasePath)\n\n  const [firstWorkspace, ...restOfWorkspaces] = workspaces\n  const firstWorkspaceSegmentCount = (firstWorkspace.basePath || '/')\n    // remove starting slash before splitting\n    .slice(1)\n    .split('/')\n    .filter(Boolean).length\n\n  restOfWorkspaces.forEach((workspace, index) => {\n    const workspaceSegmentCount = (workspace.basePath || '/')\n      // remove starting slash before splitting\n      .slice(1)\n      .split('/').length\n\n    if (firstWorkspaceSegmentCount !== workspaceSegmentCount) {\n      throw new WorkspaceValidationError(\n        `All workspace \\`basePath\\`s must have the same amount of segments. Workspace \\`${getWorkspaceIdentifier(\n          firstWorkspace,\n          index,\n        )}\\` had ${firstWorkspaceSegmentCount} segment${\n          firstWorkspaceSegmentCount === 1 ? '' : 's'\n        } \\`${firstWorkspace.basePath}\\` but workspace \\`${getWorkspaceIdentifier(\n          workspace,\n          index,\n        )}\\` had ${workspaceSegmentCount} segment${workspaceSegmentCount === 1 ? '' : 's'} \\`${\n          workspace.basePath\n        }\\``,\n        {workspace, index},\n      )\n    }\n  })\n\n  const basePaths = new Map<string, string>()\n  workspaces.forEach((workspace, index) => {\n    const basePath = (workspace.basePath || '').toLowerCase()\n\n    const existingWorkspace = basePaths.get(basePath)\n    if (existingWorkspace) {\n      throw new WorkspaceValidationError(\n        `\\`basePath\\`s must be unique. Workspaces \\`${existingWorkspace}\\` and ` +\n          `\\`${getWorkspaceIdentifier(\n            workspace,\n            index,\n          )}\\` both have the \\`basePath\\` \\`${basePath}\\``,\n        {workspace, index},\n      )\n    }\n\n    basePaths.set(basePath, getWorkspaceIdentifier(workspace, index))\n  })\n}\n\nfunction hasBasePath(workspace: WorkspaceLike, index: number) {\n  const {name, basePath} = workspace\n  if (basePath && typeof basePath === 'string') {\n    return true\n  }\n\n  if (typeof basePath === 'undefined') {\n    throw new WorkspaceValidationError(\n      `If more than one workspace is defined, every workspace must have a \\`basePath\\` defined. ` +\n        `Workspace \\`${name}\\` is missing a \\`basePath\\``,\n      {workspace, index},\n    )\n  }\n\n  throw new WorkspaceValidationError(\n    `If more than one workspace is defined, every workspace must have a \\`basePath\\` defined. ` +\n      `Workspace \\`${name}\\` has an invalid \\`basePath\\` (must be a non-empty string)`,\n    {workspace, index},\n  )\n}\n\nfunction validateBasePath(workspace: WorkspaceLike, index: number) {\n  const {name, basePath} = workspace\n\n  // Empty base paths are okay (we're validating uniqueness and presence on more\n  // than a single workspace in `validateBasePaths`)\n  if (!basePath || basePath === '/') {\n    return\n  }\n\n  if (!/^\\/[a-z0-9/_-]*[a-z0-9_-]+$/i.test(basePath)) {\n    throw new WorkspaceValidationError(\n      `All workspace \\`basePath\\`s must start with a leading \\`/\\`, ` +\n        `consist of only URL safe characters, ` +\n        `and cannot end with a trailing \\`/\\`. ` +\n        `Workspace \\`${name}\\`'s basePath is \\`${basePath}\\``,\n      {workspace, index},\n    )\n  }\n}\n","import {Card, Layer, Spinner, Text} from '@sanity/ui'\nimport {css, styled} from 'styled-components'\n\nimport {useTranslation} from '../..'\n\n// Enable to force debug background\nconst DEBUG_MODE = false\n\n// Duration to wait before initial spinner appears\nconst SPINNER_DELAY = 750 // ms\n\n// Duration to wait before text appears (if enabled)\nconst TEXT_DELAY = 2000 // ms\n\ninterface LoadingTestProps {\n  /** Absolutely positions this component when `true`. */\n  fill?: boolean\n  /** Optionally show loading title. If `true`, both text and spinner will appear and animate after an initial delay */\n  showText?: boolean\n  /**\n   * Text to display underneath the spinner.  If omitted, will default to `'Loading'`.\n   * If providing a value, avoid using trailing ellipses.\n   *\n   * @defaultValue `'Loading'`\n   */\n  title?: string | null\n}\n\nconst StyledCard = styled(Card)<{$fill?: boolean}>(({$fill}) => {\n  return css`\n    align-items: center;\n    box-sizing: border-box;\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n\n    ${$fill\n      ? css`\n          bottom: 0;\n          height: 100%;\n          left: 0;\n          position: absolute;\n          right: 0;\n          top: 0;\n          width: 100%;\n        `\n      : css`\n          min-height: 75px;\n          height: stretch;\n          height: -webkit-fill-available;\n          width: stretch;\n          width: -webkit-fill-available;\n        `}\n\n    ${DEBUG_MODE &&\n    css`\n      background: linear-gradient(#5555ca, #daf9f9);\n      border: 2px solid black;\n      > * {\n        mix-blend-mode: multiply;\n      }\n    `}\n\n    > * {\n      position: absolute;\n    }\n  `\n})\n\nconst StyledSpinner = styled(Spinner)<{$animatePosition: boolean}>(({$animatePosition = true}) => {\n  return css`\n    @keyframes fadeIn {\n      from {\n        opacity: 0;\n      }\n      to {\n        opacity: 1;\n      }\n    }\n    @keyframes slideUp {\n      from {\n        transform: translateY(0);\n      }\n      to {\n        transform: translateY(-15px);\n      }\n    }\n    animation: ${$animatePosition\n      ? `500ms ease-out ${SPINNER_DELAY}ms 1 normal both running fadeIn, 750ms ease-out ${TEXT_DELAY}ms 1 normal both running slideUp`\n      : `500ms ease-out ${SPINNER_DELAY}ms 1 normal both running fadeIn`};\n  `\n})\n\nconst StyledText = styled(Text)`\n  @keyframes fadeIn {\n    from {\n      opacity: 0;\n    }\n    to {\n      opacity: 1;\n    }\n  }\n  @keyframes slideDown {\n    from {\n      transform: translateY(0);\n    }\n    to {\n      transform: translateY(15px);\n    }\n  }\n  animation:\n    1500ms ease-out ${TEXT_DELAY}ms 1 normal both running fadeIn,\n    750ms ease-out ${TEXT_DELAY}ms 1 normal both running slideDown;\n`\n\n/**\n * A generic loading container which displays a spinner and text.\n * The spinner won't initially be visible and fades in after a short delay.\n *\n * @internal\n */\nexport function LoadingBlock({fill, showText, title}: LoadingTestProps) {\n  return (\n    <StyledCard $fill={fill} as={fill ? Layer : 'div'} data-testid=\"loading-block\">\n      <StyledSpinner $animatePosition={!!showText} muted />\n      {showText && <LoadingText title={title} />}\n    </StyledCard>\n  )\n}\n\nfunction LoadingText({title}: {title?: string | null}) {\n  const {t} = useTranslation()\n\n  return (\n    <StyledText muted size={1}>\n      {title || t('common.loading')}\n    </StyledText>\n  )\n}\n","import {\n  type ImplicitLocaleResourceBundle,\n  type LocaleDefinition,\n  type LocaleResourceBundle,\n  type StaticLocaleResourceBundle,\n} from './types'\n\n/**\n * Defines a resource bundle for a given locale and namespace.\n *\n * @param bundle - The bundle of resources to define\n * @returns The bundle that was passed, as-is (this is an \"identity function\")\n * @public\n */\nexport function defineLocaleResourceBundle(bundle: LocaleResourceBundle): LocaleResourceBundle {\n  return bundle\n}\n\n/**\n * Defines a locale and makes it available for use in the studio.\n *\n * @param locale - The locale to define\n * @returns The locale that was passed, as-is (this is an \"identity function\")\n * @public\n */\nexport function defineLocale(locale: LocaleDefinition): LocaleDefinition {\n  return locale\n}\n\n/**\n * Checks whether or not the given resource bundle has static resources, eg is not lazy loaded.\n *\n * @param bundle - Bundle to check\n * @returns `true` if the bundle has static resources, `false` otherwise\n * @internal\n * @hidden\n */\nexport function isStaticResourceBundle(\n  bundle: LocaleResourceBundle | StaticLocaleResourceBundle | ImplicitLocaleResourceBundle,\n): bundle is StaticLocaleResourceBundle {\n  return !('then' in bundle.resources && typeof bundle.resources.then === 'function')\n}\n\n/**\n * Internal helper for definining resources for a given namespace.\n *\n * Used for automation (finding the officially defined namespaces and keys), and potentially in\n * the future for type safety/helpers.\n *\n * @param resources - Resources to define\n * @returns The resources that was passed, as-is (this is an \"identity function\")\n * @deprecated Sanity-internal helper, don't use in external code\n * @internal\n * @hidden\n */\nexport function defineLocalesResources<R extends Record<string, string>>(\n  namespace: string,\n  resources: R,\n): R {\n  return resources\n}\n\n/**\n * Removes any values that are undefined from the given object.\n *\n * This is used to remove any placeholders from the generated files, while being able to leave them\n * in place to ease spotting the missing translations.\n *\n * @param resources - The resources to remove undefined values from\n * @returns The resources without any undefined values\n * @public\n * @hidden\n */\nexport function removeUndefinedLocaleResources<T extends {[key: string]: string | undefined}>(\n  resources: T,\n): {[K in keyof T]: Exclude<T[K], undefined>} {\n  const result: Partial<T> = {}\n\n  for (const key in resources) {\n    if (typeof resources[key] !== 'undefined') {\n      result[key] = resources[key]\n    }\n  }\n\n  return result as {[K in keyof T]: Exclude<T[K], undefined>}\n}\n","/**\n * The locale namespace for the studio core.\n *\n * @internal\n * @hidden\n */\nexport const studioLocaleNamespace = 'studio' as const\n\n/**\n * The namespace for validation messages.\n *\n * @internal\n * @hidden\n */\nexport const validationLocaleNamespace = 'validation' as const\n\n/**\n * The namespace for copy/paste messages.\n *\n * @internal\n * @hidden\n */\nexport const copyPasteLocalNamespace = 'copy-paste' as const\n","import {defineLocalesResources} from '../helpers'\nimport {copyPasteLocalNamespace} from '../localeNamespaces'\nimport {type LocaleResourceBundle} from '../types'\n\n/**\n * The string resources for copy-paste.\n *\n * @internal\n * @hidden\n */\nconst copyPasteLocaleStrings = defineLocalesResources('copy-paste', {\n  /** Text on the field action button to copy a document */\n  'copy-paste.field-action-copy-button.document.title': 'Copy document',\n  /** Text on the field action button to copy a field */\n  'copy-paste.field-action-copy-button.field.title': 'Copy field',\n  /** Text on the field action button to paste a document */\n  'copy-paste.field-action-paste-button.document.title': 'Paste document',\n  /** Text on the field action button to paste a field */\n  'copy-paste.field-action-paste-button.field.title': 'Paste field',\n\n  /** --- On paste --- */\n\n  /** The validation message that is shown when pasting a value into a read-only target */\n  'copy-paste.on-paste.validation.read-only-target.description': 'The target is read-only',\n  /** The validation message that is shown when the source and target schema types are incompatible */\n  'copy-paste.on-paste.validation.schema-type-incompatible.description':\n    'Source and target schema types are not compatible',\n  /** The validation message that is shown when reference types are incompatible */\n  'copy-paste.on-paste.validation.reference-type-incompatible.description':\n    'References of type \"{{sourceReferenceType}}\" is not allowed in reference field that accepts types \"{{targetReferenceTypes}}\"',\n  /** The validation message that is shown when reference is incompatible with filter */\n  'copy-paste.on-paste.validation.reference-filter-incompatible.description':\n    'Reference is not allowed in reference field according to filter',\n  /** The validation message that is shown when reference does not exist */\n  'copy-paste.on-paste.validation.reference-validation-failed.description':\n    'The referenced document \"{{ref}}\" does not exist',\n  /** The validation message that is shown when image files are incompatible */\n  'copy-paste.on-paste.validation.image-file-incompatible.description':\n    'A \"{{sourceSchemaType}}\" is not allowed in a \"{{targetSchemaType}}\"',\n  /** The validation message that is shown when array types are incompatible */\n  'copy-paste.on-paste.validation.array-type-incompatible.description':\n    'Value of type \"{{type}}\" is not allowed in this array field',\n  /** The validation message that is shown when array values are incompatible */\n  'copy-paste.on-paste.validation.array-value-incompatible.description':\n    'Value of type \"{{type}}\" is not allowed in this array field',\n  /** The validation message that is shown when string values are incompatible */\n  'copy-paste.on-paste.validation.string-value-incompatible.description':\n    'Value \"{{value}}\" is not allowed in \"{{allowedStrings}}\"',\n  /** The validation message that is shown when primitive types are incompatible */\n  'copy-paste.on-paste.validation.primitive-type-incompatible.description':\n    'Value of type \"{{type}}\" is not allowed in this field',\n\n  /** The validation message that is shown when the clipboard is empty */\n  'copy-paste.on-paste.validation.clipboard-empty.title': 'Nothing to paste',\n  /** The validation message that is shown when the clipboard item is invalid */\n  'copy-paste.on-paste.validation.clipboard-invalid.title': 'Invalid clipboard item',\n  /** The validation message that is shown when schema types are incompatible */\n  'copy-paste.on-paste.validation.schema-type-incompatible.title':\n    'Could not resolve schema type for path: {{path}}',\n  /** The warning message that is shown when not all values can be pasted */\n  'copy-paste.on-paste.validation.partial-warning.title': 'Could not paste all values',\n\n  /** The error message that is shown when the MIME type is not accepted */\n  'copy-paste.on-paste.validation.mime-type-incompatible.description':\n    'MIME type \"{{mimeType}}\" is not accepted for this field',\n\n  /** The error message that is shown when the MIME type validation fails */\n  'copy-paste.on-paste.validation.mime-type-validation-failed.description':\n    'MIME type validation failed',\n\n  /** --- On copy --- */\n\n  /** The error message that is shown when schema types are incompatible */\n  'copy-paste.on-copy.validation.schema-type-incompatible.title':\n    'Could not resolve schema type for path: {{path}}',\n  /** The error message that is shown when there is no value to copy */\n  'copy-paste.on-copy.validation.no-value.title': 'Empty value, nothing to copy',\n  /** The error message that is shown when the clipboard is not supported */\n  'copy-paste.on-copy.validation.clipboard-not-supported.title':\n    'Your browser does not support this action',\n})\n\n/**\n * Locale resources for the copy/paste namespace, eg US English locale resources.\n *\n * @beta\n * @hidden\n */\nexport const copyPasteLocaleResources: LocaleResourceBundle = {\n  locale: 'en-US',\n  namespace: copyPasteLocalNamespace,\n  resources: copyPasteLocaleStrings,\n}\n","/* eslint sort-keys: \"error\" */\nimport {defineLocalesResources} from '../helpers'\nimport {studioLocaleNamespace} from '../localeNamespaces'\nimport {type LocaleResourceBundle} from '../types'\n\n/**\n * The string resources for the studio core.\n *\n * @internal\n * @hidden\n */\nexport const studioLocaleStrings = defineLocalesResources('studio', {\n  /** The text used in the tooltip shown in the dialog close button */\n  'announcement.dialog.close': 'Close',\n  /** Aria label to be used in the dialog close button */\n  'announcement.dialog.close-label': 'Close dialog',\n  /**Text to be used in the tooltip in the button in the studio announcement card */\n  'announcement.floating-button.dismiss': 'Close',\n  /**Aria label to be used in the floating button in the studio announcement card, to dismiss the card */\n  'announcement.floating-button.dismiss-label': 'Dismiss announcements',\n  /**Aria label to be used in the floating button in the studio announcement card */\n  'announcement.floating-button.open-label': 'Open announcements',\n  /** Menu item for deleting the asset */\n  'asset-source.asset-list.menu.delete': 'Delete',\n  /** Menu item for showing where a particular asset is used */\n  'asset-source.asset-list.menu.show-usage': 'Show usage',\n  /** Header in usage dialog for file assets */\n  'asset-source.asset-usage-dialog.header_file': 'Documents using file',\n  /** Header in usage dialog for image assets */\n  'asset-source.asset-usage-dialog.header_image': 'Documents using image',\n  /** Text shown in usage dialog when loading documents using the selected asset */\n  'asset-source.asset-usage-dialog.loading': 'Loading…',\n  /** Text for cancel action in delete-asset dialog */\n  'asset-source.delete-dialog.action.cancel': 'Cancel',\n  /** Text for \"confirm delete\" action in delete-asset dialog */\n  'asset-source.delete-dialog.action.delete': 'Delete',\n  /** Dialog header for delete-asset dialog when deleting a file */\n  'asset-source.delete-dialog.header_file': 'Delete file',\n  /** Dialog header for delete-asset dialog when deleting an image */\n  'asset-source.delete-dialog.header_image': 'Delete image',\n  /** Text shown in delete dialog when loading documents using the selected asset */\n  'asset-source.delete-dialog.loading': 'Loading…',\n  /** Message confirming to delete *named* file */\n  'asset-source.delete-dialog.usage-list.confirm-delete-file_named':\n    'You are about to delete the file <strong>{{filename}}</strong> and its metadata. Are you sure?',\n  /** Message confirming to delete *unnamed* file */\n  'asset-source.delete-dialog.usage-list.confirm-delete-file_unnamed':\n    'You are about to delete the file and its metadata. Are you sure?',\n  /** Message confirming to delete *named* image */\n  'asset-source.delete-dialog.usage-list.confirm-delete-image_named':\n    'You are about to delete the image <strong>{{filename}}</strong> and its metadata. Are you sure?',\n  /** Message confirming to delete *unnamed* image */\n  'asset-source.delete-dialog.usage-list.confirm-delete-image_unnamed':\n    'You are about to delete the image and its metadata. Are you sure?',\n  /** Alt text showing on image preview in delete asset dialog  */\n  'asset-source.delete-dialog.usage-list.image-preview-alt': 'Preview of image',\n  /** Warning message showing when *named* file can't be deleted because it is in use */\n  'asset-source.delete-dialog.usage-list.warning-file-is-in-use_named':\n    \"{{filename}} cannot be deleted because it's being used. In order to delete this file, you first need to remove all uses of it.\",\n  /** Warning message showing when *unnamed* file can't be deleted because it is in use */\n  'asset-source.delete-dialog.usage-list.warning-file-is-in-use_unnamed':\n    \"This file cannot be deleted because it's being used. In order to delete it, you first need to remove all uses of it.\",\n  /** Warning message showing when *named* image can't be deleted because it is in use */\n  'asset-source.delete-dialog.usage-list.warning-image-is-in-use_named':\n    \"{{filename}} cannot be deleted because it's being used. In order to delete this image, you first need to remove all uses of it.\",\n  /** Warning message showing when *unnamed* image can't be deleted because it is in use */\n  'asset-source.delete-dialog.usage-list.warning-image-is-in-use_unnamed':\n    \"This image cannot be deleted because it's being used. In order to delete it, you first need to remove all uses of it.\",\n  /** Text shown when the list of assets only include a specific set of types */\n  'asset-source.dialog.accept-message':\n    'Only showing assets of accepted types: <strong>{{acceptTypes}}</strong>',\n  /** Select asset dialog cancel-button */\n  'asset-source.dialog.button.cancel': 'Cancel',\n  /** Select asset dialog select-button */\n  'asset-source.dialog.button.select': 'Select',\n  /** Keys shared between both image asset source and file asset source */\n  /** Select asset dialog title for files */\n  'asset-source.dialog.default-title_file': 'Select file',\n  /** Select asset dialog title for images */\n  'asset-source.dialog.default-title_image': 'Select image',\n  /** Insert asset error */\n  'asset-source.dialog.insert-asset-error':\n    'Error inserting asset. See the console for more information.',\n  /** Select asset dialog load more items */\n  'asset-source.dialog.load-more': 'Load more',\n  /** Text shown when selecting a file but there's no files to select from */\n  'asset-source.dialog.no-assets_file': 'No files',\n  /** Text shown when selecting an image but there's no images to select from */\n  'asset-source.dialog.no-assets_image': 'No images',\n  'asset-source.file.asset-list.action.delete.disabled-cannot-delete-current-file':\n    'Cannot delete currently selected file',\n  'asset-source.file.asset-list.action.delete.text': 'Delete',\n  'asset-source.file.asset-list.action.delete.title': 'Delete file',\n  'asset-source.file.asset-list.action.select-file.title': 'Select the file {{filename}}',\n  'asset-source.file.asset-list.action.show-usage.title': 'Show usage',\n  'asset-source.file.asset-list.delete-failed': 'File could not be deleted',\n  'asset-source.file.asset-list.delete-successful': 'File was deleted',\n  'asset-source.file.asset-list.header.date-added': 'Date added',\n  /** File asset source */\n  'asset-source.file.asset-list.header.filename': 'Filename',\n  'asset-source.file.asset-list.header.size': 'Size',\n  'asset-source.file.asset-list.header.type': 'Type',\n  /** Text displayed on button or menu invoking the file asset source */\n  'asset-source.file.title': 'Uploaded files',\n  'asset-source.image.asset-list.delete-failed': 'Image could not be deleted',\n  /** Image asset source */\n  'asset-source.image.asset-list.delete-successful': 'Image was deleted',\n  /** Text displayed on button or menu invoking the image asset source */\n  'asset-source.image.title': 'Uploaded images',\n  /** Menu Items for Media Library */\n  'asset-source.media-library.file.title': 'Media Library',\n  'asset-source.media-library.image.title': 'Media Library',\n  'asset-source.usage-list.documents-using-file_named_one':\n    'One document is using file <code>{{filename}}</code>',\n  'asset-source.usage-list.documents-using-file_named_other':\n    '{{count}} documents are using file <code>{{filename}}</code>',\n  /** Text shown in usage dialog for a file asset when there are zero, one or more documents using the *named* file **/\n  'asset-source.usage-list.documents-using-file_named_zero':\n    'No documents are using file <code>{{filename}}</code>',\n  'asset-source.usage-list.documents-using-file_unnamed_one': 'One document is using this file',\n  'asset-source.usage-list.documents-using-file_unnamed_other':\n    '{{count}} documents are using this file',\n  /** Text shown in usage dialog for a file asset when there are zero, one or more documents using the *unnamed* file **/\n  'asset-source.usage-list.documents-using-file_unnamed_zero': 'No documents are using this file',\n  'asset-source.usage-list.documents-using-image_named_one':\n    'One document is using image <code>{{filename}}</code>',\n  'asset-source.usage-list.documents-using-image_named_other':\n    '{{count}} documents are using image <code>{{filename}}</code>',\n  /** Text shown in usage dialog for an image asset when there are zero, one or more documents using the *named* image **/\n  'asset-source.usage-list.documents-using-image_named_zero':\n    'No documents are using image <code>{{filename}}</code>',\n  'asset-source.usage-list.documents-using-image_unnamed_one': 'One document is using this image',\n  'asset-source.usage-list.documents-using-image_unnamed_other':\n    '{{count}} documents are using this image',\n  /** Text shown in usage dialog for an image asset when there are zero, one or more documents using the *unnamed* image **/\n  'asset-source.usage-list.documents-using-image_unnamed_zero': 'No documents are using this image',\n\n  /** Label when a release has been deleted by a different user */\n  'banners.deleted-bundle-banner.text':\n    \"The '<strong>{{title}}</strong>' release has been deleted.\",\n\n  /** Action message for navigating to next month */\n  'calendar.action.go-to-next-month': 'Go to next month',\n  /** Action message for navigating to next year */\n  'calendar.action.go-to-next-year': 'Go to next year',\n  /** Action message for navigating to previous month */\n  'calendar.action.go-to-previous-month': 'Go to previous month',\n  /** Action message for navigating to previous year */\n  'calendar.action.go-to-previous-year': 'Go to previous year',\n  /* Label for navigating the calendar to \"today\", without _selecting_ today. Short form, eg `Today`, not `Go to today` */\n  'calendar.action.go-to-today': 'Today',\n  /* Accessibility label for navigating the calendar to \"today\", without _selecting_ today */\n  'calendar.action.go-to-today-aria-label': 'Go to today',\n  /* Label for navigating the calendar to \"tomorrow\", without _selecting_ tomorrow. Short form, eg `Tomorrow`, not `Go to tomorrow` */\n  'calendar.action.go-to-tomorrow': 'Tomorrow',\n  /* Label for navigating the calendar to \"yesterday\", without _selecting_ yesterday. Short form, eg `Yesterday`, not `Go to yesterday` */\n  'calendar.action.go-to-yesterday': 'Yesterday',\n  /** Label for switch that controls whether or not to include time in given timestamp */\n  'calendar.action.include-time-label': 'Include time',\n  /** Action message for selecting the time */\n  'calendar.action.select-time': 'Select time',\n  /** Action message for setting to the current time */\n  'calendar.action.set-to-current-time': 'Set to current time',\n  /** Label for selecting an hour preset. Receives a `time` param as a string on hh:mm format and a `date` param as a Date instance denoting the preset date */\n  'calendar.action.set-to-time-preset': '{{time}} on {{date, datetime}}',\n  /** Aria label for button to open date picker */\n  'calendar.button.aria-label': 'Open calendar',\n  /** Tooltip content for button to open datetime input */\n  'calendar.button.tooltip-text': 'Select date',\n  /** Error message displayed in calendar when entered date is not the correct format */\n  'calendar.error.must-be-in-format': 'Must be in the format: {{exampleDate}}',\n  /** Month name for April */\n  'calendar.month-names.april': 'April',\n  /** Month name for August */\n  'calendar.month-names.august': 'August',\n  /** Month name for December */\n  'calendar.month-names.december': 'December',\n  /** Month name for February */\n  'calendar.month-names.february': 'February',\n  /** Month name for January */\n  'calendar.month-names.january': 'January',\n  /** Month name for July */\n  'calendar.month-names.july': 'July',\n  /** Month name for June */\n  'calendar.month-names.june': 'June',\n  /** Month name for March */\n  'calendar.month-names.march': 'March',\n  /** Month name for May */\n  'calendar.month-names.may': 'May',\n  /** Month name for November */\n  'calendar.month-names.november': 'November',\n  /** Month name for October */\n  'calendar.month-names.october': 'October',\n  /** Month name for September */\n  'calendar.month-names.september': 'September',\n  /** Short weekday name for Friday */\n  'calendar.weekday-names.short.friday': 'Fri',\n  /** Short weekday name for Monday */\n  'calendar.weekday-names.short.monday': 'Mon',\n  /** Short weekday name for Saturdayday */\n  'calendar.weekday-names.short.saturday': 'Sat',\n  /** Short weekday name for Sunday */\n  'calendar.weekday-names.short.sunday': 'Sun',\n  /** Short weekday name for Thursday */\n  'calendar.weekday-names.short.thursday': 'Thu',\n  /** Short weekday name for Tuesday */\n  'calendar.weekday-names.short.tuesday': 'Tue',\n  /** Short weekday name for Wednesday */\n  'calendar.weekday-names.short.wednesday': 'Wed',\n\n  /** Label for the close button label in Review Changes pane */\n  'changes.action.close-label': 'Close history',\n  /** Cancel label for revert button prompt action */\n  'changes.action.revert-all-cancel': 'Cancel',\n  /** Revert all confirm label for revert button action - used on prompt button + review changes pane */\n  'changes.action.revert-all-confirm': 'Revert all',\n  /** Prompt for reverting all changes in document in Review Changes pane. Includes a count of changes. */\n  'changes.action.revert-all-description': 'Are you sure you want to revert all {{count}} changes?',\n  /** Prompt for confirming revert change (singular) label for field change action */\n  'changes.action.revert-changes-confirm-change_one': 'Revert change',\n  /** Revert for confirming revert (plural) label for field change action */\n  'changes.action.revert-changes-confirm-change_other': 'Revert changes',\n  /** Prompt for reverting changes for a field change */\n  'changes.action.revert-changes-description': 'Are you sure you want to revert the changes?',\n  /** Prompt for reverting changes for a group change, eg multiple changes */\n  'changes.action.revert-changes-description_one': 'Are you sure you want to revert the change?',\n  /** Label for when the action of the change was to set something that was previously empty, eg a field was given a value, an array item was added, an asset was selected or similar */\n  'changes.added-label': 'Added',\n  /** Array diff: An item was added in a given position (`{{position}}`) */\n  'changes.array.item-added-in-position': 'Added in position {{position}}',\n  'changes.array.item-moved_down_one': 'Moved {{count}} position down',\n  'changes.array.item-moved_down_other': 'Moved {{count}} positions down',\n  /**\n   * Array diff: An item was moved within the array.\n   * Receives `{{count}}` representing number of positions it moved.\n   * Context is the direction of the move, either `up` or `down`.\n   */\n  'changes.array.item-moved_up_one': 'Moved {{count}} position up',\n  'changes.array.item-moved_up_other': 'Moved {{count}} positions up',\n  /** Array diff: An item was removed from a given position (`{{position}}`) */\n  'changes.array.item-removed-from-position': 'Removed from position {{position}}',\n  /** Accessibility label for the \"change bar\" shown when there are edits on a field-level */\n  'changes.change-bar.aria-label': 'Review changes',\n  /** Label for when the action of the change was _not_ an add/remove, eg a text field changed value, an image was changed from one asset to another or similar */\n  'changes.changed-label': 'Changed',\n  /** Label and text for tooltip that indicates the authors of the changes */\n  'changes.changes-by-author': 'Changes by',\n  /** Additional text shown in development mode when a diff component crashes during rendering */\n  'changes.error-boundary.developer-info': 'Check the developer console for more information',\n  /** Text shown when a diff component crashes during rendering, triggering the error boundary */\n  'changes.error-boundary.title': 'Rendering the changes to this field caused an error',\n  /* Error description when changes could not be loaded */\n  'changes.error-description': \"We're unable to load the changes for this document.\",\n  /** Error title when changes could not be loaded */\n  'changes.error-title': 'Something went wrong',\n  /** Error message shown when the value of a field is not the expected one */\n  'changes.error.incorrect-type-message':\n    'Value error: Value is of type \"<code>{{actualType}}</code>\", expected \"<code>{{expectedType}}</code>\"',\n  /** File diff: Fallback title for the meta info section when there is no original filename to use  */\n  'changes.file.meta-info-fallback-title': 'Untitled',\n  /** Image diff: Text shown in tooltip when hovering hotspot that has changed in diff view */\n  'changes.image.crop-changed': 'Crop changed',\n  /** Image diff: Text shown if the previous image asset was deleted (shouldn't theoretically happen) */\n  'changes.image.deleted': 'Image deleted',\n  /** Image diff: Text shown if the image failed to be loaded when previewing it */\n  'changes.image.error-loading-image': 'Error loading image',\n  /** Image diff: Text shown in tooltip when hovering hotspot that has changed in diff view */\n  'changes.image.hotspot-changed': 'Hotspot changed',\n  /** Image diff: Fallback title for the meta info section when there is no original filename to use  */\n  'changes.image.meta-info-fallback-title': 'Untitled',\n  /** Image diff: Text shown if no asset has been set for the field (but has metadata changes) */\n  'changes.image.no-asset-set': 'Image not set',\n  /** Image diff: Text shown when the from/to state has/had no image */\n  'changes.image.no-image-placeholder': '(no image)',\n  /** Label for the \"from\" value in the change inspector */\n  'changes.inspector.from-label': 'From',\n  /** Label for the \"meta\" (field path, action etc) information in the change inspector */\n  'changes.inspector.meta-label': 'Meta',\n  /** Label for the \"to\" value in the change inspector */\n  'changes.inspector.to-label': 'To',\n  /** Loading author of change in the differences tooltip in the review changes pane */\n  'changes.loading-author': 'Loading…',\n  /** Loading changes in Review Changes Pane */\n  'changes.loading-changes': 'Loading changes…',\n  /** No Changes description in the Review Changes pane */\n  'changes.no-changes-description':\n    'Edit the document or select an older version in the timeline to see a list of changes appear in this panel.',\n  /** No Changes title in the Review Changes pane */\n  'changes.no-changes-title': 'There are no changes',\n  /* Label for the tooltip that shows when an action is not selectable*/\n  'changes.not-selectable': 'It is not possible to select this event',\n  /** Portable Text diff: An annotation was added */\n  'changes.portable-text.annotation_added': 'Added annotation',\n  /** Portable Text diff: An annotation was changed */\n  'changes.portable-text.annotation_changed': 'Changed annotation',\n  /** Portable Text diff: An annotation was removed */\n  'changes.portable-text.annotation_removed': 'Removed annotation',\n  /** Portable Text diff: An annotation was left unchanged */\n  'changes.portable-text.annotation_unchanged': 'Unchanged annotation',\n  /** Portable Text diff: A block changed from one style to another (eg `normal` to `h1` or similar) */\n  'changes.portable-text.block-style-changed':\n    'Changed block style from \"{{fromStyle}}\" to \"{{toStyle}}\"',\n  /** Portable Text diff: Change formatting of text (setting/unsetting marks, eg bold/italic etc) */\n  'changes.portable-text.changed-formatting': 'Changed formatting',\n  /** Portable Text diff: An empty inline object is part of a change */\n  'changes.portable-text.empty-inline-object': 'Empty {{inlineObjectType}}',\n  /** Portable Text diff: An empty object is the result of adding/removing an annotation */\n  'changes.portable-text.empty-object-annotation': 'Empty {{annotationType}}',\n  /** Portable Text diff: Added a block containing no text (eg empty block) */\n  'changes.portable-text.empty-text_added': 'Added empty text',\n  /** Portable Text diff: Changed a block that contained no text (eg empty block) */\n  'changes.portable-text.empty-text_changed': 'Changed empty text',\n  /** Portable Text diff: Removed a block containing no text (eg empty block) */\n  'changes.portable-text.empty-text_removed': 'Removed empty text',\n  /** Portable Text diff: An inline object was added */\n  'changes.portable-text.inline-object_added': 'Added inline object',\n  /** Portable Text diff: An inline object was changed */\n  'changes.portable-text.inline-object_changed': 'Changed inline object',\n  /** Portable Text diff: An inline object was removed */\n  'changes.portable-text.inline-object_removed': 'Removed inline object',\n  /** Portable Text diff: An inline object was left unchanged */\n  'changes.portable-text.inline-object_unchanged': 'Unchanged inline object',\n  /** Portable Text diff: Added a chunk of text */\n  'changes.portable-text.text_added': 'Added text',\n  /** Portable Text diff: Removed a chunk of text */\n  'changes.portable-text.text_removed': 'Removed text',\n  /** Portable Text diff: Annotation has an unknown schema type */\n  'changes.portable-text.unknown-annotation-schema-type': 'Unknown schema type',\n  /** Portable Text diff: Inline object has an unknown schema type */\n  'changes.portable-text.unknown-inline-object-schema-type': 'Unknown schema type',\n  /** Label for when the action of the change was a removal, eg a field was cleared, an array item was removed, an asset was deselected or similar */\n  'changes.removed-label': 'Removed',\n  /** Title for the Review Changes pane */\n  'changes.title': 'History',\n  /**The title that will be shown in the badge inside the events when the item is a draft */\n  'changes.versions.draft': 'Draft',\n\n  /** --- Common components --- */\n  /** Tooltip text for context menu buttons */\n  'common.context-menu-button.tooltip': 'Show more',\n\n  /** Default text for dialog cancel button */\n  'common.dialog.cancel-button.text': 'Cancel',\n\n  /** Default text for dialog confirm button */\n  'common.dialog.confirm-button.text': 'Confirm',\n\n  /** Default text in shared loader text / spinner lockup */\n  'common.loading': 'Loading',\n\n  /** --- Configuration issues --- */\n\n  /** Default label text on configuration issues button */\n  'configuration-issues.button.label': 'Configuration issues',\n  /** Tooltip displayed on configuration issues button */\n  'configuration-issues.button.tooltip': 'Found configuration issues',\n\n  /** The fallback title for an ordering menu item if no localized titles are provided. */\n  'default-menu-item.fallback-title': 'Sort by {{title}}',\n\n  /** Title for the default ordering/SortOrder if no orderings are provided and the caption field is found */\n  'default-orderings.caption': 'Sort by Caption',\n  /** Title for the default ordering/SortOrder if no orderings are provided and the description field is found */\n  'default-orderings.description': 'Sort by Description',\n  /** Title for the default ordering/SortOrder if no orderings are provided and the header field is found */\n  'default-orderings.header': 'Sort by Header',\n  /** Title for the default ordering/SortOrder if no orderings are provided and the heading field is found */\n  'default-orderings.heading': 'Sort by Heading',\n  /** Title for the default ordering/SortOrder if no orderings are provided and the label field is found */\n  'default-orderings.label': 'Sort by Label',\n  /** Title for the default ordering/SortOrder if no orderings are provided and the name field is found */\n  'default-orderings.name': 'Sort by Name',\n  /** Title for the default ordering/SortOrder if no orderings are provided and the title field is found */\n  'default-orderings.title': 'Sort by Title',\n\n  /** Label to show in the document footer indicating the creation date of the document */\n  'document-status.created': 'Created {{date}}',\n\n  /** Label to show in the document status indicating the date of the status */\n  'document-status.date': '{{date}}',\n  /** Label to show in the document footer indicating the last edited date of the document */\n  'document-status.edited': 'Edited {{date}}',\n  /** Label to show in the document footer indicating the document is not published*/\n  'document-status.not-published': 'Not published',\n  /** Label to show in the document footer indicating the published date of the document */\n  'document-status.published': 'Published {{date}}',\n  /** Label to show in the document footer indicating the revision from date of the document */\n  'document-status.revision-from': 'Revision from <em>{{date}}</em>',\n\n  /** Label to indicate that a document type was not found */\n  'document.type.not-found': 'Document type \"{{type}}\" not found',\n\n  /** The value of the <code>_key</code> property must be a unique string. */\n  'form.error.duplicate-keys-alert.details.additional-description':\n    'The value of the <code>_key</code> property must be a unique string.',\n  /** This usually happens when items are created using an API client, and the <code>_key</code> property of each elements has been generated non-uniquely. */\n  'form.error.duplicate-keys-alert.details.description':\n    'This usually happens when items are created using an API client, and the <code>_key</code> property of each elements has been generated non-uniquely.',\n  /** Developer info */\n  'form.error.duplicate-keys-alert.details.title': 'Developer info',\n  /** Generate unique keys */\n  'form.error.duplicate-keys-alert.generate-button.text': 'Generate unique keys',\n  /** Several items in this list share the same identifier (key). Every item must have an unique identifier. */\n  'form.error.duplicate-keys-alert.summary':\n    'Several items in this list share the same identifier (key). Every item must have an unique identifier.',\n  /** Non-unique keys */\n  'form.error.duplicate-keys-alert.title': 'Non-unique keys',\n  /** Error text shown when a field with a given name cannot be found in the schema or is conditionally hidden but explicitly told to render  */\n  'form.error.field-not-found':\n    'Field \"{{fieldName}}\" not found among members – verify that it is defined in the schema and that it has not been conditionally hidden.',\n  /** Add missing keys */\n  'form.error.missing-keys-alert.add-button.text': 'Add missing keys',\n  /** The value of the <code>_key</code> property must be a unique string. */\n  'form.error.missing-keys-alert.details.additional-description':\n    'The value of the <code>_key</code> property must be a unique string.',\n  /** This usually happens when items are created using an API client, and the <code>_key</code> property has not been included. */\n  'form.error.missing-keys-alert.details.description':\n    'This usually happens when items are created using an API client, and the <code>_key</code> property has not been included.',\n  /** Developer info */\n  'form.error.missing-keys-alert.details.title': 'Developer info',\n  /** Some items in the list are missing their keys. This must be fixed in order to edit the list. */\n  'form.error.missing-keys-alert.summary':\n    'Some items in the list are missing their keys. This must be fixed in order to edit the list.',\n  /** Missing keys */\n  'form.error.missing-keys-alert.title': 'Missing keys',\n  /** This usually happens when items are created using an API client, or when a custom input component has added invalid data to the list. */\n  'form.error.mixed-array-alert.details.description':\n    'This usually happens when items are created using an API client, or when a custom input component has added invalid data to the list.',\n  /** Developer info */\n  'form.error.mixed-array-alert.details.title': 'Developer info',\n  /**  Remove non-object values */\n  'form.error.mixed-array-alert.remove-button.text': 'Remove non-object values',\n  /** Some items in this list are not objects. This must be fixed in order to edit the list. */\n  'form.error.mixed-array-alert.summary':\n    'Some items in this list are not objects. This must be fixed in order to edit the list.',\n  /** Invalid list values */\n  'form.error.mixed-array-alert.title': 'Invalid list values',\n  /** Error text shown when form is unable to find an array item at a given indexed path */\n  'form.error.no-array-item-at-index':\n    'No array item at index <code>{{index}}</code> found at path <code>{{path}}</code>',\n  /** Error text shown when form is unable to find an array item at a given keyed path */\n  'form.error.no-array-item-at-key':\n    'No array item with `_key` <code>\"{{key}}\"</code> found at path <code>{{path}}</code>',\n  /** The title above the error call stack output related to the crash */\n  'form.error.unhandled-runtime-error.call-stack.title': 'Call Stack:',\n  /** The title above the error component stack provided by React's underlying ErrorBoundary component */\n  'form.error.unhandled-runtime-error.component-stack.title': 'Component Stack:',\n  /** The error message for the unhandled error that crashed the Input component during render */\n  'form.error.unhandled-runtime-error.error-message': 'Error: {{message}}',\n  /** The title for the error card rendered inside a field in place of a crashing input */\n  'form.error.unhandled-runtime-error.title': 'Unhandled Runtime Error',\n  /** Form field deprecated label */\n  'form.field.deprecated-label': 'deprecated',\n  /** Fallback title shown above field if it has no defined title */\n  'form.field.untitled-field-label': 'Untitled',\n  /** The title of the reconnecting toast */\n  'form.reconnecting.toast.title': 'Connection lost. Reconnecting…',\n  /** Accessibility label for the icon that indicates the field has a validation error */\n  'form.validation.has-error-aria-label': 'Has error',\n  /** Accessibility label for the icon that indicates the field has validation information */\n  'form.validation.has-info-aria-label': 'Has information',\n  /** Accessibility label for the icon that indicates the field has a validation warning */\n  'form.validation.has-warning-aria-label': 'Has warning',\n  /** Text shown when summarizing validation information, when the field has one or more errors */\n  'form.validation.summary.errors-count_one': '{{count}} error',\n  'form.validation.summary.errors-count_other': '{{count}} errors',\n  /** Text shown when summarizing validation information, when the field has one or more warnings */\n  'form.validation.summary.warnings-count_one': '{{count}} warning',\n  'form.validation.summary.warnings-count_other': '{{count}} warnings',\n\n  /** Tooltip for free trial navbar button indicating remaining days */\n  'free-trial.tooltip.days-count_one': '{{count}} day left in trial',\n  'free-trial.tooltip.days-count_other': '{{count}} days left in trial',\n  /** Tooltip for free trial navbar button, once trial has ended */\n  'free-trial.tooltip.trial-finished': 'Upgrade your project',\n\n  /**\n   * Label for \"contact sales\" call to action\n   * These are titles for fallback links in the event the help & resources endpoint isn't able to be fetched\n   */\n  'help-resources.action.contact-sales': 'Contact sales',\n  /**\n   * Label for \"help and support\" call to action\n   * These are titles for fallback links in the event the help & resources endpoint isn't able to be fetched\n   */\n  'help-resources.action.help-and-support': 'Help and support',\n  /**\n   * Label for \"join our community\" call to action\n   * These are titles for fallback links in the event the help & resources endpoint isn't able to be fetched\n   */\n  'help-resources.action.join-our-community': 'Join our community',\n  /** Information for what the latest sanity version is */\n  'help-resources.latest-sanity-version': 'Latest version is {{latestVersion}}',\n  /** Information for what studio version the current studio is running */\n  'help-resources.studio-version': 'Sanity Studio version {{studioVersion}}',\n  /** Title for help and resources menus */\n  'help-resources.title': 'Help and resources',\n\n  /** Text for button to cancel an ongoing upload */\n  'input.files.common.cancel-upload': 'Cancel',\n  /** Text for file input button in upload placeholder */\n  'input.files.common.upload-placeholder.file-input-button.text': 'Upload',\n  /** Uploading <FileName/> */\n  'input.files.common.upload-progress': 'Uploading <FileName/>',\n  /** The referenced document cannot be opened, because the URL failed to be resolved */\n  'input.reference.document-cannot-be-opened.failed-to-resolve-url':\n    'This document cannot be opened (unable to resolve URL to Studio)',\n  /** Label for adding item after a specific array item */\n  'inputs.array.action.add-after': 'Add item after',\n  /** Label for adding item before a specific array item */\n  'inputs.array.action.add-before': 'Add item before',\n  /** Label for adding array item action when the schema allows for only one schema type */\n  'inputs.array.action.add-item': 'Add item',\n  /**\n   * Label for adding one array item action when the schema allows for multiple schema types,\n   * eg. will prompt the user to select a type once triggered\n   */\n  'inputs.array.action.add-item-select-type': 'Add item...',\n  /** Label for copying an array item  */\n  'inputs.array.action.copy': 'Copy',\n  /** Array drag handle button tooltip */\n  'inputs.array.action.drag.tooltip': 'Drag to re-order',\n  /** Label for duplicating an array item  */\n  'inputs.array.action.duplicate': 'Duplicate',\n  /** Label for editing the item of a specific type, eg \"Edit Person\" */\n  'inputs.array.action.edit': 'Edit {{itemTypeTitle}}',\n  /** Label for removing an array item action  */\n  'inputs.array.action.remove': 'Remove',\n  /** Label for removing action when an array item has an error  */\n  'inputs.array.action.remove-invalid-item': 'Remove',\n  /** Label for viewing the item of a specific type, eg \"View Person\" */\n  'inputs.array.action.view': 'View {{itemTypeTitle}}',\n  /** Error description for the array item tooltip that explains that the current item can still be moved or deleted but not edited since the schema definition is not found */\n  'inputs.array.error.can-delete-but-no-edit-description':\n    'You can still move or delete this item, but it cannot be edited since the schema definition for its type is nowhere to be found.',\n  /** Error label for toast when array could not resolve the initial value */\n  'inputs.array.error.cannot-resolve-initial-value-title':\n    'Unable to resolve initial value for type: {{schemaTypeTitle}}: {{errorMessage}}.',\n  /** Error label for toast when trying to upload one array item of a type that cannot be converted to array */\n  'inputs.array.error.cannot-upload-unable-to-convert_one':\n    \"The following item can't be uploaded because there's no known conversion from content type to array item:\",\n  /** Error label for toast when trying to upload multiple array items of a type that cannot be converted to array */\n  'inputs.array.error.cannot-upload-unable-to-convert_other':\n    \"The following items can't be uploaded because there's no known conversion from content types to array item:\",\n  /** Error description for the array item tooltip that explains that the current type item is not valid for the list  */\n  'inputs.array.error.current-schema-not-declare-description':\n    'The current schema does not declare items of type <code>{{typeName}}</code> as valid for this list. This could mean that the type has been removed as a valid item type, or that someone else has added it to their own local schema that is not yet deployed.',\n  /** Error description to show how the item is being represented in the json format */\n  'inputs.array.error.json-representation-description': 'JSON representation of this item:',\n  /** Error description for the array item tooltip that explains what the error means with more context */\n  'inputs.array.error.type-is-incompatible-prompt':\n    'Item of type <code>{{typeName}}</code> not valid for this list',\n  /** Error title for when an item type within an array input is incompatible, used in the tooltip */\n  'inputs.array.error.type-is-incompatible-title': 'Why is this happening?',\n  /** Error label for unexpected errors in the Array Input */\n  'inputs.array.error.unexpected-error': 'Unexpected Error: {{error}}',\n  /** Label for the array insert menu all items filter  */\n  'inputs.array.insert-menu.filter.all-items': 'All',\n  /** Label for when the array insert menu search shows no items */\n  'inputs.array.insert-menu.search.no-results': 'No items found',\n  /** Placeholder for the array insert menu search field */\n  'inputs.array.insert-menu.search.placeholder': 'Search',\n  /** Tooltip for the array insert menu grid view toggle */\n  'inputs.array.insert-menu.toggle-grid-view.tooltip': 'Toggle grid view',\n  /** Tooltip for the array insert menu list view toggle */\n  'inputs.array.insert-menu.toggle-list-view.tooltip': 'Toggle list view',\n  /** Label for when the array input doesn't have any items */\n  'inputs.array.no-items-label': 'No items',\n  /** Label for read only array fields */\n  'inputs.array.read-only-label': 'This field is read-only',\n  /** Label for when the array input is resolving the initial value for the item */\n  'inputs.array.resolving-initial-value': 'Resolving initial value…',\n  /** Tooltip content when boolean input is disabled */\n  'inputs.boolean.disabled': 'Disabled',\n  /** Warning label when selected datetime is in the past */\n  'inputs.dateTime.past-date-warning': 'Select a date in the future.',\n  /** Placeholder value for datetime input */\n  'inputs.datetime.placeholder': 'e.g. {{example}}',\n  /** Acessibility label for button to open file options menu */\n  'inputs.file.actions-menu.file-options.aria-label': 'Open file options menu',\n  /** Browse */\n  'inputs.file.browse-button.text': 'Browse',\n  /** Select file */\n  'inputs.file.dialog.title': 'Select file',\n  /** Unknown member kind: `{{kind}}` */\n  'inputs.file.error.unknown-member-kind': 'Unknown member kind: {{kind}}',\n  /** The value of this field is not a valid file. Resetting this field will let you choose a new file. */\n  'inputs.file.invalid-file-warning.description':\n    'The value of this field is not a valid file. Resetting this field will let you choose a new file.',\n  /** Reset value */\n  'inputs.file.invalid-file-warning.reset-button.text': 'Reset value',\n  /** Invalid file value */\n  'inputs.file.invalid-file-warning.title': 'Invalid file value',\n  /** Select */\n  'inputs.file.multi-browse-button.text': 'Select',\n  /** The upload could not be completed at this time. */\n  'inputs.file.upload-failed.description': 'The upload could not be completed at this time.',\n  /** Upload failed */\n  'inputs.file.upload-failed.title': 'Upload failed',\n  /** Clear field */\n  'inputs.files.common.actions-menu.clear-field.label': 'Clear field',\n  /** Copy URL */\n  'inputs.files.common.actions-menu.copy-url.label': 'Copy URL',\n  /** Download */\n  'inputs.files.common.actions-menu.download.label': 'Download',\n  /** The URL is copied to the clipboard */\n  'inputs.files.common.actions-menu.notification.url-copied': 'The URL is copied to the clipboard',\n  /** Replace */\n  'inputs.files.common.actions-menu.replace.label': 'Replace',\n  /** Upload */\n  'inputs.files.common.actions-menu.upload.label': 'Upload',\n  /** Drop to upload */\n  'inputs.files.common.drop-message.drop-to-upload': 'Drop to upload',\n  /** Drop to upload `{{count}}` file */\n  'inputs.files.common.drop-message.drop-to-upload-multi_one': 'Drop to upload {{count}} file',\n  /** Drop to upload `{{count}}` files */\n  'inputs.files.common.drop-message.drop-to-upload-multi_other': 'Drop to upload {{count}} files',\n  /** Can't upload this file here */\n  'inputs.files.common.drop-message.drop-to-upload.no-accepted-file-message_one':\n    \"Can't upload this file here\",\n  /** Can't upload any of these files here */\n  'inputs.files.common.drop-message.drop-to-upload.no-accepted-file-message_other':\n    \"Can't upload any of these files here\",\n  /** `{{count}}` file can't be uploaded here */\n  'inputs.files.common.drop-message.drop-to-upload.rejected-file-message_one':\n    \"{{count}} file can't be uploaded here\",\n  /** `{{count}}` files can't be uploaded here */\n  'inputs.files.common.drop-message.drop-to-upload.rejected-file-message_other':\n    \"{{count}} files can't be uploaded here\",\n  /** Cannot upload `{{count}}` files */\n  'inputs.files.common.placeholder.cannot-upload-some-files_one': 'Cannot upload file',\n  'inputs.files.common.placeholder.cannot-upload-some-files_other': 'Cannot upload {{count}} files',\n  /** Drag or paste type here */\n  'inputs.files.common.placeholder.drag-or-paste-to-upload_file': 'Drag or paste file here',\n  /** Drag or paste image here */\n  'inputs.files.common.placeholder.drag-or-paste-to-upload_image': 'Drag or paste image here',\n  /** Drop to upload file */\n  'inputs.files.common.placeholder.drop-to-upload_file': 'Drop to upload file',\n  /** Drop to upload image */\n  'inputs.files.common.placeholder.drop-to-upload_image': 'Drop to upload image',\n  /** Read only */\n  'inputs.files.common.placeholder.read-only': 'Read only',\n  /** Can't upload files here */\n  'inputs.files.common.placeholder.upload-not-supported': \"Can't upload files here\",\n  /** Clear upload */\n  'inputs.files.common.stale-upload-warning.clear': 'Clear upload',\n  /** An upload has made no progress for at least `{{staleThresholdMinutes}}` minutes and likely got interrupted. You can safely clear the incomplete upload and try uploading again. */\n  'inputs.files.common.stale-upload-warning.description':\n    'An upload has made no progress for at least {{staleThresholdMinutes}} minutes and likely got interrupted. You can safely clear the incomplete upload and try uploading again.',\n  /** Incomplete upload */\n  'inputs.files.common.stale-upload-warning.title': 'Incomplete upload',\n  /** Tooltip text for action to crop image */\n  'inputs.image.actions-menu.crop-image-tooltip': 'Crop image',\n  /** Accessibility label for button to open image edit dialog */\n  'inputs.image.actions-menu.edit-details.aria-label': 'Open image edit dialog',\n  /** Accessibility label for button to open image options menu */\n  'inputs.image.actions-menu.options.aria-label': 'Open image options menu',\n  /** Select */\n  'inputs.image.browse-menu.text': 'Select',\n  /** Cannot upload this file here */\n  'inputs.image.drag-overlay.cannot-upload-here': 'Cannot upload this file here',\n  /** Drop image to upload */\n  'inputs.image.drag-overlay.drop-to-upload-image': 'Drop image to upload',\n  /** This field is read only */\n  'inputs.image.drag-overlay.this-field-is-read-only': 'This field is read only',\n  /** Unknown member kind: `{{kind}}` */\n  'inputs.image.error.unknown-member-kind': 'Unknown member kind: {{kind}}',\n  /** Edit hotspot and crop */\n  'inputs.image.hotspot-dialog.title': 'Edit hotspot and crop',\n  /** The value of this field is not a valid image. Resetting this field will let you choose a new image. */\n  'inputs.image.invalid-image-warning.description':\n    'The value of this field is not a valid image. Resetting this field will let you choose a new image.',\n  /** Reset value */\n  'inputs.image.invalid-image-warning.reset-button.text': 'Reset value',\n  /** Invalid image value */\n  'inputs.image.invalid-image-warning.title': 'Invalid image value',\n  /** Preview of uploaded image */\n  'inputs.image.preview-uploaded-image': 'Preview of uploaded image',\n  /** The upload could not be completed at this time. */\n  'inputs.image.upload-error.description': 'The upload could not be completed at this time.',\n  /** Upload failed */\n  'inputs.image.upload-error.title': 'Upload failed',\n  /** Adjust the rectangle to crop image. Adjust the circle to specify the area that should always be visible. */\n  'inputs.imagetool.description':\n    'Adjust the rectangle to crop image. Adjust the circle to specify the area that should always be visible.',\n  /** Error: `{{errorMessage}}` */\n  'inputs.imagetool.load-error': 'Error: {{errorMessage}}',\n  /** Hotspot & Crop */\n  'inputs.imagetool.title': 'Hotspot & Crop',\n  /** Warnings displayed to developers when using the crop/hotspot tool on vector images, notifying them that crops/hotspot are not respected when serving the image in vector format. For the crop/hotspot to apply, images must be served in a raster format such as JPG or PNG, by appending eg `fm=jpg` to the image url, or calling `format('jpg')` if using `@sanity/image-url` */\n  'inputs.imagetool.vector-warning.developer-info': `The Asset Pipeline does not support hotspot and crop for vector formats. To enable hotspot & crop, output this image to any of the supported raster formats. For example: <code>fm=jpg</code> to the <ImageUrlDocumentationLink>image URL</ImageUrlDocumentationLink> or call <code>.format('png')</code> with <ImageUrlPackageDocumentationLink>@sanity/image-url</ImageUrlPackageDocumentationLink>.`,\n  /** See developer info */\n  'inputs.imagetool.vector-warning.expand-developer-info': 'See developer info',\n  /** Gotcha: Serving vector images with hotspot and crop from the Sanity Image API */\n  'inputs.imagetool.vector-warning.title':\n    \"Warning: Hotspot and crop might not be applied to this image where it's presented.\",\n  /** Convert to `{{targetType}}` */\n  'inputs.invalid-value.convert-button.text': 'Convert to {{targetType}}',\n  /** The current value (<code>`{{actualType}}`</code>) */\n  'inputs.invalid-value.current-type': 'The current value (<code>{{actualType}}</code>)',\n  /** The property value is stored as a value type that does not match the expected type. */\n  'inputs.invalid-value.description':\n    'The property value is stored as a value type that does not match the expected type.',\n  /** The value of this property must be of type <code>`{{validType}}`</code> according to the schema. */\n  'inputs.invalid-value.details.description':\n    'The value of this property must be of type <code>{{validType}}</code> according to the schema.',\n  /** Only the following types are valid here according to schema: */\n  'inputs.invalid-value.details.multi-type-description':\n    'Only the following types are valid here according to schema:',\n  /** Mismatching value types typically occur when the schema has recently been changed. */\n  'inputs.invalid-value.details.possible-reason':\n    'Mismatching value types typically occur when the schema has recently been changed.',\n  /** Developer info */\n  'inputs.invalid-value.details.title': 'Developer info',\n  /** -- Invalid Value Input -- */\n  /** Reset value */\n  'inputs.invalid-value.reset-button.text': 'Reset value',\n  /** Invalid property value */\n  'inputs.invalid-value.title': 'Invalid property value',\n  /** Title for the \"All fields\" field group */\n  'inputs.object.field-group-tabs.all-fields-title': 'All fields',\n  /** Aria label for the \"Field groups\" select control on smaller screens */\n  'inputs.object.field-group-tabs.aria-label': 'Field groups',\n  /** Read-only field description */\n  'inputs.object.unknown-fields.read-only.description':\n    'This field is <strong>read only</strong> according to the document’s schema and cannot be unset. If you want to be able to unset this in Studio, make sure you remove the <code>readOnly</code> field from the enclosing type in the schema.',\n  /** Remove field */\n  'inputs.object.unknown-fields.remove-field-button.text': 'Remove field',\n  /** Encountered `{{count}}` fields that are not defined in the schema. */\n  'inputs.object.unknown-fields.warning.description_one':\n    'Encountered a field that is not defined in the schema.',\n  'inputs.object.unknown-fields.warning.description_other':\n    'Encountered {{count}} fields that are not defined in the schema.',\n  /** Detailed description of unknown field warning */\n  'inputs.object.unknown-fields.warning.details.description_one':\n    'This field is not defined in the schema, which could mean that the field definition has been removed or that someone else has added it to their own local project and have not deployed their changes yet.',\n  'inputs.object.unknown-fields.warning.details.description_other':\n    'These fields are not defined in the document’s schema, which could mean that the field definitions have been removed or that someone else has added them to their own local project and have not deployed their changes yet.',\n  /** Developer info */\n  'inputs.object.unknown-fields.warning.details.title': 'Developer info',\n  /** Unknown field found */\n  'inputs.object.unknown-fields.warning.title_one': 'Unknown field found',\n  'inputs.object.unknown-fields.warning.title_other': 'Unknown fields found',\n  /** Collapse the editor to save screen space  */\n  'inputs.portable-text.action.collapse-editor': 'Collapse editor',\n  /** Aria label for action to edit an existing annotation */\n  'inputs.portable-text.action.edit-annotation-aria-label': 'Edit annotation',\n  /** Expand the editor to give more editing space */\n  'inputs.portable-text.action.expand-editor': 'Expand editor',\n  /** Label label for action to insert a block of a given type (`{{typeName}}`) */\n  'inputs.portable-text.action.insert-block': 'Insert {{typeName}}',\n  /** Accessibility label for action to insert a block of a given type (`{{typeName}}`) */\n  'inputs.portable-text.action.insert-block-aria-label': 'Insert {{typeName}} (block)',\n  /** Label for action to insert an inline object of a given type (`{{typeName}}`) */\n  'inputs.portable-text.action.insert-inline-object': 'Insert {{typeName}}',\n  /** Accessibility label for action to insert an inline object of a given type (`{{typeName}}`) */\n  'inputs.portable-text.action.insert-inline-object-aria-label': 'Insert {{typeName}} (inline)',\n  /** Aria label for action to remove an annotation */\n  'inputs.portable-text.action.remove-annotation-aria-label': 'Remove annotation',\n  /** Label for activate on focus with context of click and not focused */\n  'inputs.portable-text.activate-on-focus-message_click': 'Click to activate',\n  /** Label for activate on focus with context of click and focused */\n  'inputs.portable-text.activate-on-focus-message_click-focused':\n    'Click or press space to activate',\n  /** Label for activate on focus with context of tap and not focused */\n  'inputs.portable-text.activate-on-focus-message_tap': 'Tap to activate',\n  /** Aria label for the annotation object */\n  'inputs.portable-text.annotation-aria-label': 'Annotation object',\n  /** Title for dialog that allows editing an annotation */\n  'inputs.portable-text.annotation-editor.title': 'Edit {{schemaType}}',\n  /** Title of the default \"link\" annotation */\n  'inputs.portable-text.annotation.link': 'Link',\n  /** Aria label for the block object */\n  'inputs.portable-text.block.aria-label': 'Block object',\n  /** Label for action to edit a block item, in the case where it is editable */\n  'inputs.portable-text.block.edit': 'Edit',\n  /** Accessibility label for the button that opens the actions menu on blocks */\n  'inputs.portable-text.block.open-menu-aria-label': 'Open menu',\n  /** Label for action to open a reference, in the case of block-level reference types */\n  'inputs.portable-text.block.open-reference': 'Open reference',\n  /** Label for action to remove a block item */\n  'inputs.portable-text.block.remove': 'Remove',\n  /** Label for action to view a block item, in the case where it is read-only and thus cannot be edited */\n  'inputs.portable-text.block.view': 'View',\n  /** Title of the \"code\" decorator */\n  'inputs.portable-text.decorator.code': 'Code',\n  /** Title of the \"em\" (emphasis) decorator */\n  'inputs.portable-text.decorator.emphasis': 'Italic',\n  /** Title of the \"strike-through\" decorator */\n  'inputs.portable-text.decorator.strike-through': 'Strike',\n  /** Title of the \"strong\" decorator */\n  'inputs.portable-text.decorator.strong': 'Strong',\n  /** Title of the \"underline\" decorator */\n  'inputs.portable-text.decorator.underline': 'Underline',\n  /** Placeholder text for when the editor is empty */\n  'inputs.portable-text.empty-placeholder': 'Empty',\n  /** Aria label for the block object */\n  'inputs.portable-text.inline-block.aria-label': 'Inline object',\n  /** Label for action to edit an inline object item */\n  'inputs.portable-text.inline-object.edit': 'Edit object',\n  /** Aria label for icon for action to edit an inline object item */\n  'inputs.portable-text.inline-object.edit-aria-label': 'Edit object',\n  /** Label for action to remove an inline object item */\n  'inputs.portable-text.inline-object.remove': 'Remove object',\n  /** Aria label for icon for action to remove an inline object item */\n  'inputs.portable-text.inline-object.remove-aria-label': 'Remove object',\n  /** Disclaimer text shown on invalid Portable Text value, when an action is available to unblock the user, but it is not guaranteed to be safe */\n  'inputs.portable-text.invalid-value.action-disclaimer':\n    'NOTE: It’s generally safe to perform the action above, but if you are in doubt, get in touch with those responsible for configuring your studio.',\n  /** Action presented when the Portable Text field value is invalid, when block with key `{{key}}` has a child with key `{{childKey}}` of type `{{childType}}` which is not allowed by the schema definition */\n  'inputs.portable-text.invalid-value.disallowed-child-type.action': 'Remove the object',\n  /** Text explaining that the Portable Text field value is invalid, when block with key `{{key}}` has a child with key `{{childKey}}` of type `{{childType}}` which is not allowed by the schema definition */\n  'inputs.portable-text.invalid-value.disallowed-child-type.description':\n    'Child with key {{childKey}} of block with key <code>{{key}}</code> is of type <code>{{childType}}</code>, which is not allowed by the schema.',\n  /** Action presented when the Portable Text field value is invalid, when child with key `{{key}}` has a type (`{{typeName}}`) that is not an allowed block type for this field */\n  'inputs.portable-text.invalid-value.disallowed-type.action': 'Remove the block',\n  /** Text explaining that the Portable Text field value is invalid, when child with key `{{key}}` has a type (`{{typeName}}`) that is not an allowed block type for this field */\n  'inputs.portable-text.invalid-value.disallowed-type.description':\n    'Block with key <code>{{key}}</code> is of type <code>{{typeName}}</code>, which is not allowed by the schema.',\n  /** Action presented when the Portable Text field value is invalid, when block with key `{{key}}` contains no children */\n  'inputs.portable-text.invalid-value.empty-children.action': 'Insert empty text span',\n  /** Text explaining that the Portable Text field value is invalid, when block with key `{{key}}` contains no children */\n  'inputs.portable-text.invalid-value.empty-children.description':\n    'Text block with key <code>{{key}}</code> has no text spans.',\n  /** Label for the button to ignore invalid values in the Portable Text editor */\n  'inputs.portable-text.invalid-value.ignore-button.text': 'Ignore',\n  /** Action presented when the Portable Text field value is invalid, when child with key `{{key}}` has a `_type` property that is set to `block`, but the block type defined in schema has a different name (`{{expectedTypeName}}`) */\n  'inputs.portable-text.invalid-value.incorrect-block-type.action':\n    'Use type <code>{{expectedTypeName}}</code>',\n  /** Text explaining that the Portable Text field value is invalid, when child with key `{{key}}` has a `_type` property that is set to `block`, but the block type defined in schema has a different name (`{{expectedTypeName}}`) */\n  'inputs.portable-text.invalid-value.incorrect-block-type.description':\n    'Block with key <code>{{key}}</code> has an invalid type name. According to the schema, it should be <code>{{expectedTypeName}}</code>.',\n  /** Action presented when the Portable Text field value is invalid, when block with key `{{key}}` has a span with key `{{childKey}}` that has a missing or invalid `text` property */\n  'inputs.portable-text.invalid-value.invalid-span-text.action': 'Set empty text value',\n  /** Text explaining that the Portable Text field value is invalid, when block with key `{{key}}` has a span with key `{{childKey}}` that has a missing or invalid `text` property */\n  'inputs.portable-text.invalid-value.invalid-span-text.description':\n    'Span with key {{childKey}} of block with key <code>{{key}}</code> has a missing or invalid <code>text</code> property.',\n  /** Action presented when the Portable Text field value is invalid, when child with key `{{key}}` is missing a `_type` property, but seems to be a block of type `{{expectedTypeName}}` */\n  'inputs.portable-text.invalid-value.missing-block-type.action':\n    'Use type <code>{{expectedTypeName}}</code>',\n  /** Text explaining that the Portable Text field value is invalid, when child with key `{{key}}` is missing a `_type` property, but seems to be a block of type `{{expectedTypeName}}` */\n  'inputs.portable-text.invalid-value.missing-block-type.description':\n    'Block with key <code>{{key}}</code> is missing a type name. According to the schema, it should be <code>{{expectedTypeName}}</code>.',\n  /** Action presented when the Portable Text field value is invalid, when block with key `{{key}}` has a child at `{{index}}` which is missing `_key` property */\n  'inputs.portable-text.invalid-value.missing-child-key.action': 'Assign random key',\n  /** Text explaining that the Portable Text field value is invalid, when block with key `{{key}}` has a child at `{{index}}` which is missing `_key` property */\n  'inputs.portable-text.invalid-value.missing-child-key.description':\n    'Child at index <code>{{index}}</code> of block with key <code>{{key}}</code> is missing <code>_key</code> property.',\n  /** Action presented when the Portable Text field value is invalid, when block with key `{{key}}` has a child with key `{{childKey}}` which is missing a `_type` property */\n  'inputs.portable-text.invalid-value.missing-child-type.action': 'Remove the object',\n  /** Text explaining that the Portable Text field value is invalid, when block with key `{{key}}` has a child with key `{{childKey}}` which is missing a `_type` property */\n  'inputs.portable-text.invalid-value.missing-child-type.description':\n    'Child with key {{childKey}} of block with key <code>{{key}}</code> is missing <code>_type</code> property.',\n  /** Action presented when the Portable Text field value is invalid, when child at `{{index}}` is missing the required `_key` property */\n  'inputs.portable-text.invalid-value.missing-key.action': 'Assign random key',\n  /** Text explaining that the Portable Text field value is invalid, when child at `{{index}}` is missing the required `_key` property */\n  'inputs.portable-text.invalid-value.missing-key.description':\n    'Block at index <code>{{index}}</code> is missing required <code>_key</code> property.',\n  /** Action presented when the Portable Text field value is invalid, when child with key `{{key}}` has a missing or invalid `children` property */\n  'inputs.portable-text.invalid-value.missing-or-invalid-children.action': 'Remove the block',\n  /** Text explaining that the Portable Text field value is invalid, when child with key `{{key}}` has a missing or invalid `children` property */\n  'inputs.portable-text.invalid-value.missing-or-invalid-children.description':\n    'Text block with key <code>{{key}}</code> has an invalid or missing `children` property.',\n  /** Action presented when the Portable Text field value is invalid, when child with key `{{key}}` has a missing or invalid `markDefs` property */\n  'inputs.portable-text.invalid-value.missing-or-invalid-markdefs.action': 'Add property',\n  /** Text explaining that the Portable Text field value is invalid, when child with key `{{key}}` has a missing or invalid `markDefs` property */\n  'inputs.portable-text.invalid-value.missing-or-invalid-markdefs.description':\n    'Text block with key <code>{{key}}</code> has an invalid or missing `markDefs` property.',\n  /** Action presented when the Portable Text field value is invalid, when child with key `{{key}}` is missing a `_type` property  */\n  'inputs.portable-text.invalid-value.missing-type.action': 'Remove the block',\n  /** Text explaining that the Portable Text field value is invalid, when child with key `{{key}}` is missing a `_type` property  */\n  'inputs.portable-text.invalid-value.missing-type.description':\n    'Block with key <code>{{key}}</code> is missing a type name.',\n  /** Action presented when the Portable Text field value is invalid, when block with key `{{key}}` contains a non-object child at index `{{index}}` */\n  'inputs.portable-text.invalid-value.non-object-child.action': 'Remove the item',\n  /** Text explaining that the Portable Text field value is invalid, when block with key `{{key}}` contains a non-object child at index `{{index}}` */\n  'inputs.portable-text.invalid-value.non-object-child.description':\n    'Child at index <code>{{index}}</code> of block with key <code>{{key}}</code> is not an object.',\n  /** Action presented when the Portable Text field value is invalid, when the Portable Text field is not an array, or the array is empty */\n  'inputs.portable-text.invalid-value.not-an-array.action': 'Unset the value',\n  /** Text explaining that the Portable Text field value is invalid, when the Portable Text field is not an array, or the array is empty */\n  'inputs.portable-text.invalid-value.not-an-array.description':\n    'Value must be an array of Portable Text blocks, or undefined.',\n  /** Action presented when the Portable Text field value is invalid, when child at `{{index}}` is not an object */\n  'inputs.portable-text.invalid-value.not-an-object.action': 'Remove item',\n  /** Text explaining that the Portable Text field value is invalid, when child at `{{index}}` is not an object */\n  'inputs.portable-text.invalid-value.not-an-object.description':\n    'Item at <code>{{index}}</code> is not an object,.',\n  /** Action presented when the Portable Text field value is invalid, when block with key `{{key}}` contains marks (`{{orphanedMarks}}`) that are not supported by the current schema */\n  'inputs.portable-text.invalid-value.orphaned-marks.action': 'Remove disallowed marks',\n  /** Text explaining that the Portable Text field value is invalid, when block with key `{{key}}` contains marks (`{{orphanedMarks}}`) that are not supported by the current schema */\n  'inputs.portable-text.invalid-value.orphaned-marks.description':\n    'Text block with key <code>{{key}}</code> contains marks <code>({{orphanedMarks, list}})</code> that are not allowed by the schema.',\n  /** Title for the alert indicating that the Portable Text field has an invalid value */\n  'inputs.portable-text.invalid-value.title': 'Invalid Portable Text value',\n  /** Title of \"bulleted\" list type */\n  'inputs.portable-text.list-type.bullet': 'Bulleted list',\n  /** Title of numbered list type */\n  'inputs.portable-text.list-type.number': 'Numbered list',\n  /** Title of the \"h1\" block style */\n  'inputs.portable-text.style.h1': 'Heading 1',\n  /** Title of the \"h2\" block style */\n  'inputs.portable-text.style.h2': 'Heading 2',\n  /** Title of the \"h3\" block style */\n  'inputs.portable-text.style.h3': 'Heading 3',\n  /** Title of the \"h4\" block style */\n  'inputs.portable-text.style.h4': 'Heading 4',\n  /** Title of the \"h5\" block style */\n  'inputs.portable-text.style.h5': 'Heading 5',\n  /** Title of the \"h6\" block style */\n  'inputs.portable-text.style.h6': 'Heading 6',\n  /** Title shown when multiple blocks of varying styles is selected */\n  'inputs.portable-text.style.multiple': 'Multiple',\n  /** Title of fallback when no style is given for a block */\n  'inputs.portable-text.style.none': 'No style',\n  /** Title of the \"normal\" block style */\n  'inputs.portable-text.style.normal': 'Normal',\n  /** Title of the \"quote\" block style */\n  'inputs.portable-text.style.quote': 'Quote',\n  /** Label for action to clear the current value of the reference field */\n  'inputs.reference.action.clear': 'Clear',\n  /** Label for action to copy the current item (used within arrays) */\n  'inputs.reference.action.copy': 'Copy',\n  /** Label for action to create a new document from the reference input */\n  'inputs.reference.action.create-new-document': 'Create',\n  /** Label for action to create a new document from the reference input, when there are multiple templates or document types to choose from */\n  'inputs.reference.action.create-new-document-select': 'Create…',\n  /** Label for action to duplicate the current item to a new item (used within arrays) */\n  'inputs.reference.action.duplicate': 'Duplicate',\n  /** Label for action that opens the referenced document in a new tab */\n  'inputs.reference.action.open-in-new-tab': 'Open in new tab',\n  /** Label for action to remove the reference from an array */\n  'inputs.reference.action.remove': 'Remove',\n  /** Label for action to replace the current value of the field */\n  'inputs.reference.action.replace': 'Replace',\n  /** Label for action to cancel a previously initiated replace action  */\n  'inputs.reference.action.replace-cancel': 'Cancel replace',\n  /** The cross-dataset reference field currently has a reference, but the feature has been disabled since it was created. This explains what can/cannot be done in its current state. */\n  'inputs.reference.cross-dataset.feature-disabled-actions':\n    \"You can still clear this field's existing reference, but it cannot be changed to a different document as long as the feature is disabled.\",\n  /** A cross-dataset reference field exists but the feature has been disabled. A <DocumentationLink> component is available. */\n  'inputs.reference.cross-dataset.feature-disabled-description':\n    'This feature has been disabled. Read how to enable it in <DocumentationLink>the documentation</DocumentationLink>.',\n  /** Title for a warning telling the user that the current project does not have the \"cross dataset references\" feature */\n  'inputs.reference.cross-dataset.feature-unavailable-title':\n    'Unavailable feature: Cross dataset reference',\n  /** The cross-dataset reference points to a document with an invalid type  */\n  'inputs.reference.cross-dataset.invalid-type':\n    'The referenced document is of invalid type ({{typeName}}) <JsonValue/>',\n  /** The referenced document will open in a new tab (due to external studio) */\n  'inputs.reference.document-opens-in-new-tab': 'This document opens in a new tab',\n  /** Error title for when the document is unavailable (for any possible reason) */\n  'inputs.reference.error.document-unavailable-title': 'Document unavailable',\n  /** Error title for when the referenced document failed to be loaded */\n  'inputs.reference.error.failed-to-load-document-title': 'Failed to load referenced document',\n  /** Error title for when the reference search returned a document that is not an allowed type for the field */\n  'inputs.reference.error.invalid-search-result-type-title':\n    'Search returned a type that\\'s not valid for this reference: \"{{returnedType}}\"',\n  /** Error description for when the document referenced is not one of the types declared as allowed target types in schema */\n  'inputs.reference.error.invalid-type-description':\n    'Referenced document (<code>{{documentId}}</code>) is of type <code>{{actualType}}</code>. According to the schema, referenced documents can only be of type <AllowedTypes/>.',\n  /** Error title for when the document referenced is not one of the types declared as allowed target types in schema */\n  'inputs.reference.error.invalid-type-title': 'Document of invalid type',\n  /** Error description for when the user does not have permissions to read the referenced document */\n  'inputs.reference.error.missing-read-permissions-description':\n    'The referenced document could not be accessed due to insufficient permissions',\n  /** Error title for when the user does not have permissions to read the referenced document */\n  'inputs.reference.error.missing-read-permissions-title': 'Insufficient permissions',\n  /** Error description for when the current reference value points to a document that does not exist (on weak references) */\n  'inputs.reference.error.nonexistent-document-description':\n    'The referenced document does not exist (ID: <code>{{documentId}}</code>). You can either remove the reference or replace it with another document.',\n  /** Error title for when the current reference value points to a document that does not exist (on weak references) */\n  'inputs.reference.error.nonexistent-document-title': 'Not found',\n  /** Label for button that clears the reference when it points to a document that does not exist (on weak references) */\n  'inputs.reference.error.nonexistent-document.clear-button-label': 'Clear',\n  /** Error title for when the search for a reference failed. Note that the message sent by the backend may not be localized. */\n  'inputs.reference.error.search-failed-title': 'Reference search failed',\n  /** Label for when the GDR points to an invalid type  */\n  'inputs.reference.global.invalid-type':\n    'The referenced document is of invalid type ({{typeName}})',\n  /** Alternative text for the image shown in cross-dataset reference input */\n  'inputs.reference.image-preview-alt-text': 'Image preview of referenced document',\n  /** Description for alert shown when a reference in a live-edit document is marked as being weak, the referenced document exists, AND the reference is supposed to be have been strengthened on publish */\n  'inputs.reference.incomplete-reference.finalize-action-description':\n    '<strong>{{referencedDocument}}</strong> is published and this reference should now be finalized.',\n  /** Title for alert shown when a reference in a live-edit document is marked as being weak, the referenced document exists, AND the reference is supposed to be have been strengthened on publish */\n  'inputs.reference.incomplete-reference.finalize-action-title': 'Finalize reference',\n  /** Description for alert shown when a reference in a live-edit document points to a document that exists and has been published, but the reference is still marked as weak */\n  'inputs.reference.incomplete-reference.strengthen-action-description':\n    '<strong>{{referencedDocument}}</strong> is published and this reference should now be converted to a strong reference.',\n  /** Title for alert shown when a reference in a live-edit document points to a document that exists and has been published, but the reference is still marked as weak */\n  'inputs.reference.incomplete-reference.strengthen-action-title': 'Convert to strong reference',\n  /** Label for button that triggers the action that strengthen a reference */\n  'inputs.reference.incomplete-reference.strengthen-button-label': 'Convert to strong reference',\n  /** Label for button that triggers a retry attempt for reference metadata  */\n  'inputs.reference.metadata-error.retry-button-label': 'Retry',\n  /** Title for alert shown when reference metadata fails to be loaded */\n  'inputs.reference.metadata-error.title': 'Unable to load reference metadata',\n  /** Message shown when no documents were found that matched the given search string */\n  'inputs.reference.no-results-for-query': 'No results for <strong>“{{searchTerm}}”</strong>',\n  /** Text for tooltip showing when a document was edited, using relative time (eg \"how long ago was it edited?\") */\n  'inputs.reference.preview.edited-at-time': 'Edited <RelativeTime/>',\n  /** Accessibility label for icon indicating that document does _not_ have any unpublished changes */\n  'inputs.reference.preview.has-no-unpublished-changes-aria-label': 'No unpublished edits',\n  /** Accessibility label for icon indicating that document has unpublished changes */\n  'inputs.reference.preview.has-unpublished-changes-aria-label': 'Edited',\n  /** Accessibility label for icon indicating that document does _not_ have a published version */\n  'inputs.reference.preview.is-not-published-aria-label': 'Not published',\n  /** Accessibility label for icon indicating that document has a published version */\n  'inputs.reference.preview.is-published-aria-label': 'Published',\n  /** Text for tooltip indicating that a document has no unpublished edits */\n  'inputs.reference.preview.no-unpublished-edits': 'No unpublished edits',\n  /** Text for tooltip indicating that a document has not yet been published */\n  'inputs.reference.preview.not-published': 'Not published',\n  /** Text for tooltip showing when a document was published, using relative time (eg \"how long ago was it published?\") */\n  'inputs.reference.preview.published-at-time': 'Published <RelativeTime/>',\n  /** The referenced document no longer exist and might have been deleted (for weak references) */\n  'inputs.reference.referenced-document-does-not-exist':\n    'The referenced document no longer exist and might have been deleted (document ID: <code>{{documentId}}</code>).',\n  /** The referenced document could not be displayed to the user because of insufficient permissions */\n  'inputs.reference.referenced-document-insufficient-permissions':\n    'The referenced document could not be accessed due to insufficient permissions',\n  /** Label for when the reference input is resolving the initial value for an item */\n  'inputs.reference.resolving-initial-value': 'Resolving initial value…',\n  /** Placeholder shown in a reference input with no current value */\n  'inputs.reference.search-placeholder': 'Type to search',\n  /** Explanation of the consequences of leaving the reference as strong instead of weak */\n  'inputs.reference.strength-mismatch.is-strong-consquences':\n    'It will not be possible to delete the reference document without first removing this reference or converting it to weak.',\n  /** Description for alert shown when a reference is supposed to be weak, but the actual value is strong */\n  'inputs.reference.strength-mismatch.is-strong-description':\n    'This reference is <em>strong</em>, but according to the current schema it should be <em>weak</em>.',\n  /** Explanation of the consequences of leaving the reference as weak instead of strong */\n  'inputs.reference.strength-mismatch.is-weak-consquences':\n    'This makes it possible to delete the referenced document without first deleting this reference, leaving this field referencing a nonexisting document.',\n  /** Description for alert shown when a reference is supposed to be strong, but the actual value is weak */\n  'inputs.reference.strength-mismatch.is-weak-description':\n    'This reference is <em>weak</em>, but according to the current schema it should be <em>strong</em>.',\n  /** Label for button that triggers the action that strengthens a reference on strength mismatch */\n  'inputs.reference.strength-mismatch.strengthen-button-label': 'Convert to strong reference',\n  /** Title for alert shown when a reference is supposed to be weak/strong, but the actual value is the opposite of what it is supposed to be */\n  'inputs.reference.strength-mismatch.title': 'Reference strength mismatch',\n  /** Label for button that triggers the action that weakens a reference on strength mismatch */\n  'inputs.reference.strength-mismatch.weaken-button-label': 'Convert to weak reference',\n  /** Action message for generating the slug */\n  'inputs.slug.action.generate': 'Generate',\n  /** Loading message for when the input is actively generating a slug */\n  'inputs.slug.action.generating': 'Generating…',\n  /** Error message for when the source to generate a slug from is missing */\n  'inputs.slug.error.missing-source':\n    'Source is missing. Check source on type {{schemaType}} in schema',\n  /** Placeholder for an empty tag input */\n  'inputs.tags.placeholder': 'Enter tag and press ENTER…',\n  /** Placeholder for an empty tag input on touch devices */\n  'inputs.tags.placeholder_touch': 'Enter tag…',\n  /** Convert to `{{targetType}}` */\n  'inputs.untyped-value.convert-button.text': 'Convert to {{targetType}}',\n  /** Encountered an object value without a <code>_type</code> property. */\n  'inputs.untyped-value.description':\n    'Encountered an object value without a <code>_type</code> property.',\n  /** Either remove the <code>name</code> property of the object declaration, or set <code>_type</code> property on items. */\n  'inputs.untyped-value.details.description':\n    'Either remove the <code>name</code> property of the object declaration, or set <code>_type</code> property on items.',\n  /** Current value (<code>object</code>): */\n  'inputs.untyped-value.details.json-dump-prefix': 'Current value (<code>object</code>):',\n  /** The following types are valid here according to schema: */\n  'inputs.untyped-value.details.multi-type-description':\n    'The following types are valid here according to schema:',\n  /** Developer info */\n  'inputs.untyped-value.details.title': 'Developer info',\n  /** Property value missing <code>_type</code> */\n  'inputs.untyped-value.title': 'Property value missing <code>_type</code>',\n  /** Unset value */\n  'inputs.untyped-value.unset-item-button.text': 'Unset value',\n\n  /** The fallback explanation if no context is provided */\n  'insufficient-permissions-message.not-authorized-explanation':\n    'You do not have permission to access this feature.',\n  /** The explanation when unable to create any document at all */\n  'insufficient-permissions-message.not-authorized-explanation_create-any-document':\n    'You do not have permission to create a document.',\n  /** The explanation when unable to create a particular document */\n  'insufficient-permissions-message.not-authorized-explanation_create-document':\n    'You do not have permission to create this document.',\n  /** The explanation when unable to create a particular type of document */\n  'insufficient-permissions-message.not-authorized-explanation_create-document-type':\n    'You do not have permission to create this kind of document.',\n  /** The explanation when unable to create a new reference in a document */\n  'insufficient-permissions-message.not-authorized-explanation_create-new-reference':\n    'You do not have permission to create a new reference.',\n\n  /** The explanation when unable to delete a particular document */\n  'insufficient-permissions-message.not-authorized-explanation_delete-document':\n    'You do not have permission to delete this document.',\n  /** The explanation when unable to delete a schedule on scheduled publishing */\n  'insufficient-permissions-message.not-authorized-explanation_delete-schedules':\n    'You do not have permission to delete schedules.',\n\n  /** The explanation when unable to discard changes in a particular document */\n  'insufficient-permissions-message.not-authorized-explanation_discard-changes':\n    'You do not have permission to discard changes in this document.',\n  /** The explanation when unable to duplicate a particular document */\n  'insufficient-permissions-message.not-authorized-explanation_duplicate-document':\n    'You do not have permission to duplicate this document.',\n  /** The explanation when unable to edit a schedule on scheduled publishing */\n  'insufficient-permissions-message.not-authorized-explanation_edit-schedules':\n    'You do not have permission to edit schedules.',\n\n  /** The explanation when unable to execute a schedule on scheduled publishing */\n  'insufficient-permissions-message.not-authorized-explanation_execute-schedules':\n    'You do not have permission to execute schedules.',\n  /** The explanation when unable to publish a particular document */\n  'insufficient-permissions-message.not-authorized-explanation_publish-document':\n    'You do not have permission to publish this document.',\n  /** The explanation when unable to unpublish a particular document */\n  'insufficient-permissions-message.not-authorized-explanation_unpublish-document':\n    'You do not have permission to unpublish this document.',\n  /** Appears after the not-authorized message. Lists the current roles. */\n  'insufficient-permissions-message.roles': 'Your roles: <Roles/>',\n  /** The title for the insufficient permissions message component */\n  'insufficient-permissions-message.title': 'Insufficient permissions',\n\n  /** Unexpected error: `{{error}}` */\n  'member-field-error.unexpected-error': 'Unexpected error: {{error}}',\n\n  /** Button label for \"Create new document\" button */\n  'new-document.button': 'Create',\n  /**\n   * Tooltip message displayed when hovering/activating the \"Create new document\" action,\n   * when there are templates/types available for creation\n   */\n  'new-document.create-new-document-label': 'New document…',\n  /** Tooltip message for add document button when the selected perspective is published  */\n  'new-document.disabled-published.tooltip': 'You cannot create new published documents',\n  /** Tooltip message for add document button when the selected perspective is for inactive release */\n  'new-document.disabled-release.tooltip': 'You cannot add documents to this release',\n  /** Placeholder for the \"filter\" input within the new document menu */\n  'new-document.filter-placeholder': 'Search document types',\n  /** Loading indicator text within the new document menu */\n  'new-document.loading': 'Loading…',\n  /** Accessibility label for the list displaying options in the new document menu */\n  'new-document.new-document-aria-label': 'New document',\n  /** Message for when there are no document type options in the new document menu */\n  'new-document.no-document-types-found': 'No document types found',\n  /**\n   * Tooltip message displayed when hovering/activating the \"Create new document\" action,\n   * when there are no templates/types to create from\n   */\n  'new-document.no-document-types-label': 'No document types',\n  /** Message for when no results are found for a specific search query in the new document menu */\n  'new-document.no-results': 'No results for <strong>{{searchQuery}}</strong>',\n  /** Aria label for the button that opens the \"Create new document\" popover/dialog */\n  'new-document.open-dialog-aria-label': 'Create new document',\n  /** Title for \"Create new document\" dialog */\n  'new-document.title': 'Create new document',\n  /** Label for button that will make the browser reload when users' studio version is out-of-date */\n  'package-version.new-package-available.reload-button': 'Push to reload',\n  /** Title of the alert for studio users when packages in their studio are out-of-date */\n  'package-version.new-package-available.title': 'Sanity Studio is ready to update!',\n  /** Label for action to invite members to the current studio project */\n  'presence.action.manage-members': 'Invite members',\n  /** Accessibility label for presence menu button */\n  'presence.aria-label': 'Global presence',\n  /** Message description for when no one else is currently present */\n  'presence.no-one-else-description': 'Invite people to the project to see their online status.',\n  /** Message title for when no one else is currently present */\n  'presence.no-one-else-title': 'No one else is here',\n  /** Message for when a user is not in a document (displayed in the global presence menu) */\n  'presence.not-in-a-document': 'Not in a document',\n  /** Tooltip content text for presence menu button */\n  'presence.tooltip-content': 'Who is here',\n\n  /** Fallback title shown when a preview does not provide a title */\n  'preview.default.title-fallback': 'Untitled',\n  /** Fallback preview value for types that have \"no value\" (eg null, undefined) */\n  'preview.fallback.no-value': '(no value)',\n  /** Alternative text for image being shown while image is being uploaded, in previews */\n  'preview.image.file-is-being-uploaded.alt-text': 'The image currently being uploaded',\n\n  /* Relative time, just now */\n  'relative-time.just-now': 'just now',\n\n  /** Action message to add document to new release */\n  'release.action.add-to-new-release': 'Add to release',\n  /** Action message to add document to release */\n  'release.action.add-to-release': 'Add to {{title}}',\n  /** Action message for when document is already in release  */\n  'release.action.already-in-release': 'Already in release {{title}}',\n  /** Action message for when you click to view all versions you can copy the current document to */\n  'release.action.copy-to': 'Copy version to',\n  /** Action message for creating new releases */\n  'release.action.create-new': 'New release',\n  /** Action message for when document is already in release  */\n  'release.action.discard-version': 'Discard version',\n  /** Description for toast when version discarding failed */\n  'release.action.discard-version.failure': 'Failed to discard version',\n  /** Action message for when a new release is created off an existing version, draft or published document */\n  'release.action.new-release': 'New Release',\n  /** Tooltip message for not having permissions for creating new releases */\n  'release.action.permission.error': 'You do not have permission to perform this action',\n  /** Error message for when a version is set to be unpublished */\n  'release.action.unpublish-version.failure': 'Failed to set version to be unpublished on release',\n  /** Action message for when a version is set to be unpublished successfully */\n  'release.action.unpublish-version.success':\n    'Successfully set <strong>{{title}}</strong> to be unpublished on release',\n  /** Action message for when the view release is pressed */\n  'release.action.view-release': 'View release',\n  /** Label for banner when release is scheduled */\n  'release.banner.scheduled-for-publishing-on': 'Scheduled to be published on {{date}}',\n  /** Label for Draft chip in document header */\n  'release.chip.draft': 'Draft',\n  /** Label for Draft chip in global header */\n  'release.chip.global.drafts': 'Drafts',\n  /** Label for Published chip in document header */\n  'release.chip.published': 'Published',\n  /** Label for tooltip in chip when document is in an archived release */\n  'release.chip.tooltip.archived': 'This release is archived and cannot be edited.',\n  /** Label for tooltip in chip with the created date */\n  'release.chip.tooltip.created-date': 'Created {{date}}',\n  /** Label for tooltip in draft chip when it's a live edit document */\n  'release.chip.tooltip.draft-disabled.live-edit':\n    'This document is in live edit mode, drafts are disabled',\n  /** Label for tooltip in chip with the lasted edited date */\n  'release.chip.tooltip.edited-date': 'Edited {{date}}',\n  /** Label for tooltip in chip when document is intended for a future release that hasn't been scheduled */\n  'release.chip.tooltip.intended-for-date': 'Intended for {{date}}',\n  /** Label for tooltip in chip when there is no recent draft edits */\n  'release.chip.tooltip.no-edits': 'No edits',\n  /** Label for tooltip in chip when document isn't published */\n  'release.chip.tooltip.not-published': 'Not published',\n  /** Label for tooltip in chip with the published date */\n  'release.chip.tooltip.published-date': 'Published {{date}}',\n  /** Label for tooltip in chip when document is in a release that has been scheduled */\n  'release.chip.tooltip.scheduled-for-date': 'Scheduled for {{date}}',\n  /** Label for tooltip in scheduled chip without a known date */\n  'release.chip.tooltip.unknown-date': 'Unknown date',\n  /** Label for tooltip on deleted release */\n  'release.deleted-tooltip': 'This release has been deleted',\n  /** Title for copying version to a new release dialog */\n  'release.dialog.copy-to-release.title': 'Copy version to new release',\n  /** Title for action create a release */\n  'release.dialog.create.confirm': 'Create release',\n  /** Title for creating releases dialog */\n  'release.dialog.create.title': 'New release',\n  /** Label for description in tooltip to explain release types */\n  'release.dialog.tooltip.description':\n    'The intended release time is used to create better previews and hints about whether documents conflict.',\n  /** Label for noting that a release time is not final */\n  'release.dialog.tooltip.note': 'You can always change it later.',\n  /** Title for tooltip to explain release time */\n  'release.dialog.tooltip.title': 'Approximate time of release',\n  /** The placeholder text when the release doesn't have a description */\n  'release.form.placeholder-describe-release': 'Describe the release…',\n  /** Tooltip for button to hide release visibility */\n  'release.layer.hide': 'Hide release',\n  /** Label for draft perspective in navbar */\n  'release.navbar.drafts': 'Drafts',\n  /** Label for published releases in navbar */\n  'release.navbar.published': 'Published',\n  /** Tooltip for releases navigation in navbar */\n  'release.navbar.tooltip': 'Releases',\n  /** The placeholder text when the release doesn't have a title */\n  'release.placeholder-untitled-release': 'Untitled release',\n  /** The toast title that will be shown when the user has a release perspective which is now archived */\n  'release.toast.archived-release.title': \"The '{{title}}' release was archived\",\n  /** The toast tiele that will be shown the creating a release fails */\n  'release.toast.create-release-error.title': 'Failed to create release',\n  /**The toast title that will be shown when the user has a release perspective which is now deleted */\n  'release.toast.not-found-release.title': \"The '{{title}}' release could not be found\",\n  /** Label for when a version of a document has already been added to the release */\n  'release.tooltip.already-added': 'A version of this document has already been added',\n  /** Label for when a release is scheduled / scheduling and a user can't add a document version to it */\n  'release.tooltip.locked':\n    'This release has been scheduled. Unsechedule it to add more documents.',\n  /** Label for the release type 'as soon as possible' */\n  'release.type.asap': 'ASAP',\n  /** Label for the release type 'at time', meaning it's a release with a scheduled date */\n  'release.type.scheduled': 'At time',\n  /** Label for the release type 'undecided' */\n  'release.type.undecided': 'Undecided',\n  /** Tooltip for the dropdown to show all versions of document */\n  'release.version-list.tooltip': 'See all document versions',\n\n  /** Accessibility label to open search action when the search would go fullscreen (eg on narrower screens) */\n  'search.action-open-aria-label': 'Open search',\n  /** Action label for adding a search filter */\n  'search.action.add-filter': 'Add filter',\n  /** Action label for clearing search filters */\n  'search.action.clear-filters': 'Clear filters',\n  /** Label for action to clear recent searches */\n  'search.action.clear-recent-searches': 'Clear recent searches',\n  /** Accessibility label for action to clear all currently applied document type filters */\n  'search.action.clear-type-filters-aria-label': 'Clear checked filters',\n  /** Label for action to clear all currently applied document type filters */\n  'search.action.clear-type-filters-label': 'Clear',\n  /** Accessibility label for when the search is full screen (on narrow screens) and you want to close the search */\n  'search.action.close-search-aria-label': 'Close search',\n  /** Accessibility label for filtering by document type */\n  'search.action.filter-by-document-type-aria-label': 'Filter by document type',\n  /** Accessibility action label for removing an already applied search filter */\n  'search.action.remove-filter-aria-label': 'Remove filter',\n  /**\n   * Text displayed when either no document type(s) have been selected, or we need a fallback,\n   * eg \"Search for all types\".\n   */\n  'search.action.search-all-types': 'Search all documents',\n  /**\n   * Text displayed when we are able to determine one or more document types that will be used for\n   * searching, and can fit within the space assigned by the design.\n   */\n  'search.action.search-specific-types': 'Search for {{types, list}}',\n  /**\n   * Text displayed when we are able to determine one or more document types that will be used for\n   * searching, but cannot list them all within the space assigned by the design, so we need an\n   * additional \"and X more\" suffix. Allows using pluralization suffixes, eg `_one`, `_other` etc.\n   */\n  'search.action.search-specific-types-truncated': 'Search for {{types, list}} +{{count}} more',\n  /** Dialog title for action to select an asset of unknown type */\n  'search.action.select-asset': 'Select asset',\n  /** Dialog title for action to select a file asset */\n  'search.action.select-asset_file': 'Select file',\n  /** Dialog title for action to select an image asset */\n  'search.action.select-asset_image': 'Select image',\n  /** Accessibility label for when the search is full screen (on narrow screens) and you want to hide filters */\n  'search.action.toggle-filters-aria-label_hide': 'Hide filters',\n  /** Accessibility label for when the search is full screen (on narrow screens) and you want to show filters */\n  'search.action.toggle-filters-aria-label_show': 'Show filters',\n  /** Label for when the search is full screen (on narrow screens) and you want to hide filters */\n  'search.action.toggle-filters-label_hide': 'Hide filters',\n  /** Label for when the search is full screen (on narrow screens) and you want to show filters */\n  'search.action.toggle-filters-label_show': 'Show filters',\n\n  /** Tooltip text for the global search button */\n  'search.button.tooltip': 'Search',\n\n  /**\n   * A list of provided types (use `list` formatter preferably).\n   */\n  'search.document-type-list': '{{types, list}}',\n  /**\n   * In the context of a list of document types - no filtering selection has been done,\n   * thus the default is \"all types\".\n   */\n  'search.document-type-list-all-types': 'All types',\n  /**\n   * A list of provided types that has been truncated - more types are included but not displayed,\n   * thus we need to indicate that there are more. Allows using pluralization suffixes,\n   * eg `_one`, `_other` etc.\n   */\n  'search.document-type-list-truncated': '{{types, list}} +{{count}} more',\n  /** Accessibility label for list displaying the available document types */\n  'search.document-types-aria-label': 'Document types',\n  /** Label for when no document types matching the filter are found */\n  'search.document-types-no-matches-found': 'No matches for {{filter}}',\n  /** Description for error when a filter cannot be displayed, describes that you should check the schema */\n  'search.error.display-filter-description':\n    'This may indicate invalid options defined in your schema.',\n  /** Title for error when a filter cannot be displayed (mainly a developer-oriented error) */\n  'search.error.display-filter-title': 'An error occurred whilst displaying this filter.',\n  /** Description for error when no valid asset source is found, describes that you should check the the current studio config */\n  'search.error.no-valid-asset-source-check-config-description':\n    \"Please ensure it's enabled in your studio configuration file.\",\n  /** Description for error when no valid asset source is found, describes that only the default asset is supported */\n  'search.error.no-valid-asset-source-only-default-description':\n    'Currently, only the default asset source is supported.',\n  /** Title for error when no valid asset sources found */\n  'search.error.no-valid-asset-source-title': 'No valid asset sources found.',\n  /** Helpful description for when search returned an error that we are not able to describe in detail */\n  'search.error.unspecified-error-help-description': 'Please try again or check your connection',\n  /** Title label for when search returned an error that we are not able to describe in detail */\n  'search.error.unspecified-error-title': 'Something went wrong while searching',\n  /**\n   * Label for \"All fields\", a label that appears above the list of available fields when filtering.\n   * If one or more document type has been chosen as filter, this label is replaced with a group of\n   * fields per selected document type\n   */\n  'search.filter-all-fields-header': 'All fields',\n  /** Label for the action of changing from one file to a different file in asset search filter */\n  'search.filter-asset-change_file': 'Change file',\n  /** Label for the action of changing from one image to a different image in asset search filter */\n  'search.filter-asset-change_image': 'Change image',\n  /** Label for the action of clearing the currently selected asset in an image/file filter */\n  'search.filter-asset-clear': 'Clear',\n  /** Label for the action of selecting a file in asset search filter */\n  'search.filter-asset-select_file': 'Select file',\n  /** Label for the action of selecting an image in asset search filter */\n  'search.filter-asset-select_image': 'Select image',\n  /** Label for boolean filter - false */\n  'search.filter-boolean-false': 'False',\n  /** Label for boolean filter - true */\n  'search.filter-boolean-true': 'True',\n  /** Accessibility label for list that lets you filter fields by title, when adding a new filter in search */\n  'search.filter-by-title-aria-label': 'Filter by title',\n  /** Accessibility label for date filter input */\n  'search.filter-date-aria-label': 'Date',\n  /** Accessibility label for selecting end date on the date range search filter */\n  'search.filter-date-range-end-date-aria-label': 'End date',\n  /** Accessibility label for selecting start date on the date range search filter */\n  'search.filter-date-range-start-date-aria-label': 'Start date',\n  /** Accessibility label for selecting the unit (day/month/year) when adding \"X days ago\" search filter */\n  'search.filter-date-unit-aria-label': 'Select unit',\n  /**\n   * Label for \"Days\"/\"Months\"/\"Years\" when selecting it as unit in \"X days ago\" search filter.\n   * Capitalized, as it would be listed in a dropdown.\n   */\n  'search.filter-date-unit_days': 'Days',\n  'search.filter-date-unit_months': 'Months',\n  'search.filter-date-unit_years': 'Years',\n  /** Accessibility label for the input value (days/months/years) when adding \"X days ago\" search filter */\n  'search.filter-date-value-aria-label': 'Unit value',\n  /** Label for \"field description\" shown in tooltip when navigating list of possible fields to filter */\n  'search.filter-field-tooltip-description': 'Field description',\n  /** Label for \"field name\" shown in tooltip when navigating list of possible fields to filter */\n  'search.filter-field-tooltip-name': 'Field name',\n  /** Label for \"Used in document types\", a list of the document types a field appears in. Shown in tooltip when navigating list of possible fields to filter */\n  'search.filter-field-tooltip-used-in-document-types': 'Used in document types',\n  /** Label for when no fields/filters are found for the given term */\n  'search.filter-no-matches-found': 'No matches for {{filter}}',\n  /** Placeholder value for maximum numeric value filter */\n  'search.filter-number-max-value-placeholder': 'Max value',\n  /** Placeholder value for minimum numeric value filter */\n  'search.filter-number-min-value-placeholder': 'Min value',\n  /** Placeholder value for the number filter */\n  'search.filter-number-value-placeholder': 'Value',\n  /** Placeholder for the \"Filter\" input, when narrowing possible fields/filters */\n  'search.filter-placeholder': 'Filter',\n  /** Label for the action of clearing the currently selected document in a reference filter */\n  'search.filter-reference-clear': 'Clear',\n  /**\n   * Label for \"shared fields\", a label that appears above a list of fields that all filtered types\n   * have in common, when adding a new filter. For instance, if \"book\" and \"employee\" both have a\n   * \"title\" field, this field would be listed under \"shared fields\".\n   * */\n  'search.filter-shared-fields-header': 'Shared fields',\n  /** Placeholder value for the string filter */\n  'search.filter-string-value-placeholder': 'Value',\n  /** Label/placeholder prompting user to select one of the predefined, allowed values for a string field */\n  'search.filter-string-value-select-predefined-value': 'Select…',\n  /** Accessibility label for the \"Filters\" list, that is shown when using \"Add filter\" in search (singular) */\n  'search.filters-aria-label_one': 'Filter',\n  /** Accessibility label for the \"Filters\" list, that is shown when using \"Add filter\" in search (plural) */\n  'search.filters-aria-label_other': 'Filters',\n  /** Label for instructions on how to use the search - displayed when no recent searches are available */\n  'search.instructions': 'Use <ControlsIcon/> to refine your search',\n  /** Helpful description for when no search results are found */\n  'search.no-results-help-description': 'Try another keyword or adjust your filters',\n  /** Title label for when no search results are found */\n  'search.no-results-title': 'No results found',\n  /**\n   * Individual search operators.\n   *\n   * The `name` variant is the form we use when the user is building a query, and selecting from a\n   * list of available operators for a field. Keep in mind that since the user knows what the field\n   * represents, we do not need to contextualize too much, and that the user may not be a developer\n   * eg prefer \"quantity is\" over \"array has length\". Additionally, (if applicable in language) use\n   * lowercased names.\n   *\n   * The `description` variant is the form shown once the filter has enough information to apply,\n   * and is shown in the list of applied filters. It is passed components that _should_ be used to\n   * compose the filter string, and to format them correctly:\n   *\n   * `<Field/>` - eg \"Bird species\", \"Category\", \"Date of birth\"\n   * `<Operator>operator text</Operator>` - eg \"has ≤\", \"includes\", \"is\"\n   * `<Value>{{value}}</Value>` - eg \"Hawk\", \"Sparrow\", \"Eagle\"\n   *\n   * Where applicable, a `count` is passed, allowing you to pluralize where needed, by using\n   * suffixes such as `_zero`, `_one`, `_other` etc.\n   *\n   * Prefer (reasonable) brevity since many filters may be applied. For instance:\n   * `<Field/> has ≤ <Value/>` may be better than\n   * `<Field/> has less than or equal to <Value/>`\n   **/\n  /* Array should have a count the given filter value */\n  'search.operator.array-count-equal.description_one':\n    '<Field/> <Operator>has</Operator> <Value>{{count}} item</Value>',\n  'search.operator.array-count-equal.description_other':\n    '<Field/> <Operator>has</Operator> <Value>{{count}} items</Value>',\n  'search.operator.array-count-equal.name': 'quantity is',\n  /* Array should have a count greater than given filter value */\n  'search.operator.array-count-gt.description_one':\n    '<Field/> <Operator>has ></Operator> <Value>{{count}} item</Value>',\n  'search.operator.array-count-gt.description_other':\n    '<Field/> <Operator>has ></Operator> <Value>{{count}} items</Value>',\n  'search.operator.array-count-gt.name': 'quantity greater than',\n  /* Array should have a count greater than or equal to the given filter value */\n  'search.operator.array-count-gte.description_one':\n    '<Field/> <Operator>has ≥</Operator> <Value>{{count}} item</Value>',\n  'search.operator.array-count-gte.description_other':\n    '<Field/> <Operator>has ≥</Operator> <Value>{{count}} items</Value>',\n  'search.operator.array-count-gte.name': 'quantity greater than or equal to',\n  /* Array should have a count less than given filter value */\n  'search.operator.array-count-lt.description_one':\n    '<Field/> <Operator>has <</Operator> <Value>{{count}} item</Value>',\n  'search.operator.array-count-lt.description_other':\n    '<Field/> <Operator>has <</Operator> <Value>{{count}} items</Value>',\n  'search.operator.array-count-lt.name': 'quantity less than',\n  /* Array should have a count less than or equal to the given filter value */\n  'search.operator.array-count-lte.description_one':\n    '<Field/> <Operator>has ≤</Operator> <Value>{{count}} item</Value>',\n  'search.operator.array-count-lte.description_other':\n    '<Field/> <Operator>has ≤</Operator> <Value>{{count}} items</Value>',\n  'search.operator.array-count-lte.name': 'quantity less than or equal to',\n  /* Array should have a count that is not equal to the given filter value */\n  'search.operator.array-count-not-equal.description_one':\n    '<Field/> <Operator>does not have</Operator> <Value>{{count}} item</Value>',\n  'search.operator.array-count-not-equal.description_other':\n    '<Field/> <Operator>does not have</Operator> <Value>{{count}} items</Value>',\n  'search.operator.array-count-not-equal.name': 'quantity is not',\n  /**\n   * Array should have a count within the range of given filter values.\n   * Gets passed `{{from}}` and `{{to}}` values.\n   **/\n  'search.operator.array-count-range.description':\n    '<Field/> <Operator>has between</Operator> <Value>{{from}} → {{to}} items</Value>',\n  'search.operator.array-count-range.name': 'quantity is between',\n  /* Array should include the given value */\n  'search.operator.array-list-includes.description':\n    '<Field/> <Operator>includes</Operator> <Value>{{value}}</Value>',\n  'search.operator.array-list-includes.name': 'includes',\n  /* Array should not include the given value */\n  'search.operator.array-list-not-includes.description':\n    '<Field/> <Operator>does not include</Operator> <Value>{{value}}</Value>',\n  'search.operator.array-list-not-includes.name': 'does not include',\n  /* Array should include the given reference */\n  'search.operator.array-reference-includes.description':\n    '<Field/> <Operator>includes</Operator> <Value>{{value}}</Value>',\n  'search.operator.array-reference-includes.name': 'includes',\n  /* Array should not include the given reference */\n  'search.operator.array-reference-not-includes.description':\n    '<Field/> <Operator>does not include</Operator> <Value>{{value}}</Value>',\n  'search.operator.array-reference-not-includes.name': 'does not include',\n  /* Asset (file) should be the selected asset */\n  'search.operator.asset-file-equal.description':\n    '<Field/> <Operator>is</Operator> <Value>{{value}}</Value>',\n  'search.operator.asset-file-equal.name': 'is',\n  /* Asset (file) should not be the selected asset */\n  'search.operator.asset-file-not-equal.description':\n    '<Field/> <Operator>is not</Operator> <Value>{{value}}</Value>',\n  'search.operator.asset-file-not-equal.name': 'is not',\n  /* Asset (image) should be the selected asset */\n  'search.operator.asset-image-equal.description':\n    '<Field/> <Operator>is</Operator> <Value>{{value}}</Value>',\n  'search.operator.asset-image-equal.name': 'is',\n  /* Asset (image) should not be the selected asset */\n  'search.operator.asset-image-not-equal.description':\n    '<Field/> <Operator>is not</Operator> <Value>{{value}}</Value>',\n  'search.operator.asset-image-not-equal.name': 'is not',\n  /**\n   * Boolean value should be the given filter value (true/false).\n   * Context passed is `true` and `false`, allowing for more specific translations:\n   * - `search.operator.boolean-equal.description_true`\n   * - `search.operator.boolean-equal.description_false`\n   */\n  'search.operator.boolean-equal.description':\n    '<Field/> <Operator>is</Operator> <Value>{{value}}</Value>',\n  'search.operator.boolean-equal.name': 'is',\n  /* Date should be after (later than) given filter value */\n  'search.operator.date-after.description':\n    '<Field/> <Operator>is after</Operator> <Value>{{value}}</Value>',\n  'search.operator.date-after.name': 'after',\n  /* Date should be before (earlier than) given filter value */\n  'search.operator.date-before.description':\n    '<Field/> <Operator>is before</Operator> <Value>{{value}}</Value>',\n  'search.operator.date-before.name': 'before',\n  /* Date should be the given filter value */\n  'search.operator.date-equal.description':\n    '<Field/> <Operator>is</Operator> <Value>{{value}}</Value>',\n  'search.operator.date-equal.name': 'is',\n  /* Date should be within the given filter value range (eg \"within the last X days\") */\n  'search.operator.date-last.description':\n    '<Field/> <Operator>is in the last</Operator> <Value>{{value}}</Value>',\n  'search.operator.date-last.name': 'last',\n  /* Date should not be the given filter value */\n  'search.operator.date-not-equal.description':\n    '<Field/> <Operator>is not</Operator> <Value>{{value}}</Value>',\n  'search.operator.date-not-equal.name': 'is not',\n  /* Date should be within the range of given filter values */\n  'search.operator.date-range.description': '<Field/> <Operator>is between</Operator> <Value/>',\n  'search.operator.date-range.name': 'is between',\n  /* Date and time should be after (later than) given filter value */\n  'search.operator.date-time-after.description':\n    '<Field/> <Operator>is after</Operator> <Value>{{value}}</Value>',\n  'search.operator.date-time-after.name': 'after',\n  /* Date and time should be before (earlier than) given filter value */\n  'search.operator.date-time-before.description':\n    '<Field/> <Operator>is before</Operator> <Value>{{value}}</Value>',\n  'search.operator.date-time-before.name': 'before',\n  /* Date and time should be the given filter value */\n  'search.operator.date-time-equal.description':\n    '<Field/> <Operator>is</Operator> <Value>{{value}}</Value>',\n  'search.operator.date-time-equal.name': 'is',\n  /* Date and time should be within the given filter value range (eg \"within the last X days\") */\n  'search.operator.date-time-last.description':\n    '<Field/> <Operator>is in the last</Operator> <Value>{{value}}</Value>',\n  'search.operator.date-time-last.name': 'last',\n  /* Date and time should not be the given filter value */\n  'search.operator.date-time-not-equal.description':\n    '<Field/> <Operator>is not</Operator> <Value>{{value}}</Value>',\n  'search.operator.date-time-not-equal.name': 'is not',\n  /* Date and time should be within the range of given filter values */\n  'search.operator.date-time-range.description':\n    '<Field/> <Operator>is between</Operator> <Value/>',\n  'search.operator.date-time-range.name': 'is between',\n  /* Value should be defined */\n  'search.operator.defined.description':\n    '<Field/> <Operator>is</Operator> <Value>not empty</Value>',\n  'search.operator.defined.name': 'not empty',\n  /* Value should not be defined */\n  'search.operator.not-defined.description':\n    '<Field/> <Operator>is</Operator> <Value>empty</Value>',\n  'search.operator.not-defined.name': 'empty',\n  /* Number should be the given filter value */\n  'search.operator.number-equal.description':\n    '<Field/> <Operator>is</Operator> <Value>{{value}}</Value>',\n  'search.operator.number-equal.name': 'is',\n  /* Number should be greater than given filter value */\n  'search.operator.number-gt.description':\n    '<Field/> <Operator>></Operator> <Value>{{value}}</Value>',\n  'search.operator.number-gt.name': 'greater than',\n  /* Number should be greater than or the given filter value */\n  'search.operator.number-gte.description':\n    '<Field/> <Operator>≥</Operator> <Value>{{value}}</Value>',\n  'search.operator.number-gte.name': 'greater than or equal to',\n  /* Number should be less than given filter value */\n  'search.operator.number-lt.description':\n    '<Field/> <Operator><</Operator> <Value>{{value}}</Value>',\n  'search.operator.number-lt.name': 'less than',\n  /* Number should be less than or the given filter value */\n  'search.operator.number-lte.description':\n    '<Field/> <Operator>≤</Operator> <Value>{{value}}</Value>',\n  'search.operator.number-lte.name': 'less than or equal to',\n  /* Number should not be the given filter value */\n  'search.operator.number-not-equal.description':\n    '<Field/> <Operator>is not</Operator> <Value>{{value}}</Value>',\n  'search.operator.number-not-equal.name': 'is not',\n  /* Number should be within the range of given filter values */\n  'search.operator.number-range.description':\n    '<Field/> <Operator>is between</Operator> <Value>{{from}} → {{to}}</Value>',\n  'search.operator.number-range.name': 'is between',\n  /* Portable Text should contain the given filter value */\n  'search.operator.portable-text-contains.description':\n    '<Field/> <Operator>contains</Operator> <Value>{{value}}</Value>',\n  'search.operator.portable-text-contains.name': 'contains',\n  /* Portable Text should be the given filter value */\n  'search.operator.portable-text-equal.description':\n    '<Field/> <Operator>is</Operator> <Value>{{value}}</Value>',\n  'search.operator.portable-text-equal.name': 'is',\n  /* Portable Text should not contain the given filter value */\n  'search.operator.portable-text-not-contains.description':\n    '<Field/> <Operator>does not contain</Operator> <Value>{{value}}</Value>',\n  'search.operator.portable-text-not-contains.name': 'does not contain',\n  /* Portable Text should not be the given filter value */\n  'search.operator.portable-text-not-equal.description':\n    '<Field/> <Operator>is not</Operator> <Value>{{value}}</Value>',\n  'search.operator.portable-text-not-equal.name': 'is not',\n  /* References the given asset (file) */\n  'search.operator.reference-asset-file.description':\n    '<Field/> <Operator>→</Operator> <Value>{{value}}</Value>',\n  'search.operator.reference-asset-file.name': 'file',\n  /* References the given asset (image) */\n  'search.operator.reference-asset-image.description':\n    '<Field/> <Operator>→</Operator> <Value>{{value}}</Value>',\n  'search.operator.reference-asset-image.name': 'image',\n  /* References the given document */\n  'search.operator.reference-document.description':\n    '<Field/> <Operator>→</Operator> <Value>{{value}}</Value>',\n  'search.operator.reference-document.name': 'document',\n  /* Reference should be the given document */\n  'search.operator.reference-equal.description':\n    '<Field/> <Operator>is</Operator> <Value>{{value}}</Value>',\n  'search.operator.reference-equal.name': 'is',\n  /* Reference should not be the given document */\n  'search.operator.reference-not-equal.description':\n    '<Field/> <Operator>is not</Operator> <Value>{{value}}</Value>',\n  'search.operator.reference-not-equal.name': 'is not',\n  /* Slug contains the given value */\n  'search.operator.slug-contains.description':\n    '<Field/> <Operator>contains</Operator> <Value>{{value}}</Value>',\n  'search.operator.slug-contains.name': 'contains',\n  /* Slug equals the given filter value */\n  'search.operator.slug-equal.description':\n    '<Field/> <Operator>is</Operator> <Value>{{value}}</Value>',\n  'search.operator.slug-equal.name': 'is',\n  /* Slug does not contain the given value */\n  'search.operator.slug-not-contains.description':\n    '<Field/> <Operator>does not contain</Operator> <Value>{{value}}</Value>',\n  'search.operator.slug-not-contains.name': 'does not contain',\n  /* Slug does not equal the given filter value */\n  'search.operator.slug-not-equal.description':\n    '<Field/> <Operator>is not</Operator> <Value>{{value}}</Value>',\n  'search.operator.slug-not-equal.name': 'is not',\n  /* String contains the given filter value */\n  'search.operator.string-contains.description':\n    '<Field/> <Operator>contains</Operator> <Value>{{value}}</Value>',\n  'search.operator.string-contains.name': 'contains',\n  /* String equals the given filter value */\n  'search.operator.string-equal.description':\n    '<Field/> <Operator>is</Operator> <Value>{{value}}</Value>',\n  'search.operator.string-equal.name': 'is',\n  /* String equals one of the predefined allowed values */\n  'search.operator.string-list-equal.description':\n    '<Field/> <Operator>is</Operator> <Value>{{value}}</Value>',\n  'search.operator.string-list-equal.name': 'is',\n  /* String does not equal one of the predefined allowed values */\n  'search.operator.string-list-not-equal.description':\n    '<Field/> <Operator>is not</Operator> <Value>{{value}}</Value>',\n  'search.operator.string-list-not-equal.name': 'is not',\n  /* String does not contain the given filter value */\n  'search.operator.string-not-contains.description':\n    '<Field/> <Operator>does not contain</Operator> <Value>{{value}}</Value>',\n  'search.operator.string-not-contains.name': 'does not contain',\n  /* String does not equal the given filter value */\n  'search.operator.string-not-equal.description':\n    '<Field/> <Operator>is not</Operator> <Value>{{value}}</Value>',\n  'search.operator.string-not-equal.name': 'is not',\n  /** Label for the \"Best match\" search ordering type */\n  'search.ordering.best-match-label': 'Best match',\n  /** Label for the \"Created: Oldest first\" search ordering type */\n  'search.ordering.created-ascending-label': 'Created: Oldest first',\n  /** Label for the \"Created: Newest first\" search ordering type */\n  'search.ordering.created-descending-label': 'Created: Newest first',\n  /** Label for the \"Updated: Oldest first\" search ordering type */\n  'search.ordering.updated-ascending-label': 'Updated: Oldest first',\n  /** Label for the \"Updated: Newest first\" search ordering type */\n  'search.ordering.updated-descending-label': 'Updated: Newest first',\n  /** Placeholder text for the global search input field */\n  'search.placeholder': 'Search',\n  /** Accessibility label for the recent searches section, shown when no valid search terms has been given */\n  'search.recent-searches-aria-label': 'Recent searches',\n  /** Label/heading shown for the recent searches section */\n  'search.recent-searches-label': 'Recent searches',\n  /** Accessibility label for the search results section, shown when the user has typed valid terms */\n  'search.search-results-aria-label': 'Search results',\n  /** Label for the edit columns button to change field visibility in sheet list */\n  'sheet-list.edit-columns': 'Edit columns',\n  /** Label for the header menu option to hide a field from the sheet list */\n  'sheet-list.hide-field': 'Remove from table',\n  /** Label for reset column visibilities button */\n  'sheet-list.reset-columns': 'Reset columns',\n  /** Title for the edit columns menu */\n  'sheet-list.select-fields': 'Select up to 5 field types',\n  /** Accessibility label for the navbar status button */\n  'status-button.aria-label': 'Configuration status',\n  /** Title for the changes tooltip in the history inspector*/\n  'timeline.changes.title': 'Changes by',\n  /** Description for error when the timeline for the given document can't be loaded */\n  'timeline.error.load-document-changes-description':\n    'Document history transactions have not been affected.',\n  /** Title for error when the timeline for the given document can't be loaded */\n  'timeline.error.load-document-changes-title':\n    'An error occurred whilst retrieving document changes.',\n  /** Description for error when the timeline for the given document can't be loaded */\n  'timeline.error.load-document-changes-version-description':\n    'Enable the events API through the Studio config to view document history.',\n  /** Title for error when the timeline for the given version document can't be loaded */\n  'timeline.error.load-document-changes-version-title':\n    'Version documents history is only available through the Events API.',\n  /** Error description for when the document doesn't have history */\n  'timeline.error.no-document-history-description':\n    'When changing the content of the document, the document versions will appear in this menu.',\n  /** Error title for when the document doesn't have history */\n  'timeline.error.no-document-history-title': 'No document history',\n  /** Error prompt when revision cannot be loaded */\n  'timeline.error.unable-to-load-revision': 'Unable to load revision',\n  /** Label for when the timeline item is the latest in the history */\n  'timeline.latest': 'Latest',\n\n  /** Label for latest revision for timeline menu dropdown */\n  'timeline.latest-revision': 'Latest revision',\n  /**\n   * Label for latest revision for timeline menu dropdown\n   * @deprecated as of `v3.47.0` `timeline.latest-revision` should be used instead. Note: _usage_ of this key is deprecated, but Studios on `< v3.47.0` still require this key to be _defined_\n   * */\n  'timeline.latest-version': 'Latest revision',\n  /** The aria-label for the list of revisions in the timeline */\n  'timeline.list.aria-label': 'Document revisions',\n  /** Label for loading history */\n  'timeline.loading-history': 'Loading history…',\n  /* Label for when no previous since events are available*/\n  'timeline.no-previous-events': 'No previous events',\n  /** Label shown in review changes timeline when a document has been created */\n  'timeline.operation.created': 'Created',\n  /** Label shown in review changes timeline when a document was initially created */\n  'timeline.operation.created-initial': 'Created',\n  /** Label shown in review changes timeline when a document was initially created, with a timestamp */\n  'timeline.operation.created-initial_timestamp': 'Created: {{timestamp, datetime}}',\n  /** Label shown in review changes timeline when a document has been created, with a timestamp */\n  'timeline.operation.created_timestamp': 'Created: {{timestamp, datetime}}',\n  /** Label shown in review changes timeline when a document has been deleted */\n  'timeline.operation.deleted': 'Deleted',\n  /** Label shown in review changes timeline when a document has been deleted, with a timestamp */\n  'timeline.operation.deleted_timestamp': 'Deleted: {{timestamp, datetime}}',\n  /** Label shown in review changes timeline when a draft has been discarded */\n  'timeline.operation.draft-discarded': 'Discarded draft',\n  /** Label shown in review changes timeline when a draft has been discarded, with a timestamp */\n  'timeline.operation.draft-discarded_timestamp': 'Discarded draft: {{timestamp, datetime}}',\n  /** Label shown in review changes timeline when a draft has been edited */\n  'timeline.operation.edited-draft': 'Edited',\n  /** Label shown in review changes timeline when a draft has been edited, with a timestamp */\n  'timeline.operation.edited-draft_timestamp': 'Edited: {{timestamp, datetime}}',\n  /** Label shown in review changes timeline when a document has been edited live */\n  'timeline.operation.edited-live': 'Live edited',\n  /** Label shown in review changes timeline when a document has been edited live, with a timestamp */\n  'timeline.operation.edited-live_timestamp': 'Live edited: {{timestamp, datetime}}',\n  /** Label shown in review changes timeline when a document was published */\n  'timeline.operation.published': 'Published',\n  /** Label shown in review changes timeline when a document was published, with a timestamp */\n  'timeline.operation.published_timestamp': 'Published: {{timestamp, datetime}}',\n  /** Label shown in review changes timeline when a document was unpublished */\n  'timeline.operation.unpublished': 'Unpublished',\n  /** Label shown in review changes timeline when a document was unpublished, with a timestamp */\n  'timeline.operation.unpublished_timestamp': 'Unpublished: {{timestamp, datetime}}',\n  /**\n   * Label for determining since which version the changes for timeline menu dropdown are showing.\n   * Receives the time label as a parameter (`timestamp`).\n   */\n  'timeline.since': '{{timestamp, datetime}}',\n  /** Label for missing change version for timeline menu dropdown are showing */\n  'timeline.since-version-missing': 'Since: unknown version',\n  /** Aria label for the action buttons in the PTE toolbar */\n  'toolbar.portable-text.action-button-aria-label': '{{action}}',\n  /** Accessibility label for the breadcrumb menu */\n  'tree-editing-dialog.breadcrumbs.menu': 'Breadcrumb menu',\n  /** Title placeholder for search input in array of objects */\n  'tree-editing-dialog.search-placeholder': 'Search',\n  /** Menu aria label for the search menu */\n  'tree-editing-dialog.search.menu-label': 'Search menu',\n  /** Title label for when no search results are found on the tree of objects */\n  'tree-editing-dialog.search.no-results-title': 'No results found',\n  /** Label to close the sidebar */\n  'tree-editing-dialog.sidebar.action.close': 'Close sidebar',\n  /** Collapse label the menu item in the sidebar  */\n  'tree-editing-dialog.sidebar.action.collapse': 'Collapse',\n  /** Label to close the dialog */\n  'tree-editing-dialog.sidebar.action.done': 'Done',\n  /** Exapnd label the menu item in the sidebar  */\n  'tree-editing-dialog.sidebar.action.expand': 'Expand',\n  /** Label to open the sidebar */\n  'tree-editing-dialog.sidebar.action.open': 'Open sidebar',\n  /** Label for the button showed after trial ended */\n  'user-menu.action.free-trial-finished': 'Upgrade from free',\n  /** Label for button showing the free trial days left */\n  'user-menu.action.free-trial_one': '{{count}} day left in trial',\n  'user-menu.action.free-trial_other': '{{count}} days left in trial',\n  /** Label for action to invite members to the current sanity project */\n  'user-menu.action.invite-members': 'Invite members',\n  /** Accessibility label for action to invite members to the current sanity project */\n  'user-menu.action.invite-members-aria-label': 'Invite members',\n  /** Label for action to manage the current sanity project */\n  'user-menu.action.manage-project': 'Manage project',\n  /** Accessibility label for the action to manage the current project */\n  'user-menu.action.manage-project-aria-label': 'Manage project',\n  /** Tooltip helper text when portable text annotation is disabled for empty block*/\n  'user-menu.action.portable-text.annotation-disabled_empty-block':\n    'Cannot apply {{name}} to empty block',\n  /** Tooltip helper text when portable text annotation is disabled for multiple blocks */\n  'user-menu.action.portable-text.annotation-disabled_multiple-blocks':\n    'Cannot apply {{name}} to multiple blocks',\n  /** Label for action to sign out of the current sanity project */\n  'user-menu.action.sign-out': 'Sign out',\n  /** Title for appearance section for the current studio (dark / light / system scheme) */\n  'user-menu.appearance-title': 'Appearance',\n  /** Label for close menu button for user menu */\n  'user-menu.close-menu': 'Close menu',\n  /** Description for using the \"dark theme\" in the appearance user menu */\n  'user-menu.color-scheme.dark-description': 'Use dark appearance',\n  /** Title for using the \"dark theme\" in the appearance user menu */\n  'user-menu.color-scheme.dark-title': 'Dark',\n  /** Description for using the \"light theme\" in the appearance user menu */\n  'user-menu.color-scheme.light-description': 'Use light appearance',\n  /** Title for using the \"light theme\" in the appearance user menu */\n  'user-menu.color-scheme.light-title': 'Light',\n  /** Description for using \"system apparence\" in the appearance user menu */\n  'user-menu.color-scheme.system-description': 'Use system appearance',\n  /** Title for using system apparence in the appearance user menu */\n  'user-menu.color-scheme.system-title': 'System',\n  /** Title for locale section for the current studio */\n  'user-menu.locale-title': 'Language',\n  /** Label for tooltip to show which provider the currently logged in user is using */\n  'user-menu.login-provider': 'Signed in with {{providerTitle}}',\n  /** Label for open menu button for user menu */\n  'user-menu.open-menu': 'Open menu',\n  /**\n   * Label for action to add a workspace (currently a developer-oriented action, as this will\n   * lead to the documentation on workspace configuration)\n   */\n  'workspaces.action.add-workspace': 'Add workspace',\n  /**\n   * Label for action to choose a different workspace, in the case where you are not logged in,\n   * have selected a workspace, and are faced with the authentication options for the selected\n   * workspace. In other words, label for the action shown when you have reconsidered which\n   * workspace to authenticate in.\n   */\n  'workspaces.action.choose-another-workspace': 'Choose another workspace',\n  /** Label for heading that indicates that you can choose your workspace */\n  'workspaces.choose-your-workspace-label': 'Choose your workspace',\n  /** Label for the workspace menu */\n  'workspaces.select-workspace-aria-label': 'Select workspace',\n  /** Button label for opening the workspace switcher */\n  'workspaces.select-workspace-label': 'Select workspace',\n  /** Tooltip for the workspace menu */\n  'workspaces.select-workspace-tooltip': 'Select workspace',\n  /** Title for Workplaces dropdown menu */\n  'workspaces.title': 'Workspaces',\n})\n\n/**\n * The i18n resource keys for the studio.\n *\n * @alpha\n * @hidden\n */\nexport type StudioLocaleResourceKeys = keyof typeof studioLocaleStrings\n\n/**\n * Locale resources for the core studio namespace, eg US English locale resources.\n *\n * @beta\n * @hidden\n */\nexport const studioDefaultLocaleResources: LocaleResourceBundle = {\n  locale: 'en-US',\n  namespace: studioLocaleNamespace,\n  resources: studioLocaleStrings,\n}\n","/* eslint sort-keys: \"error\" */\nimport {defineLocalesResources} from '../helpers'\nimport {validationLocaleNamespace} from '../localeNamespaces'\nimport {type LocaleResourceBundle} from '../types'\n\n/**\n * The string resources for validation.\n *\n * @internal\n * @hidden\n */\nconst validationLocaleStrings = defineLocalesResources('validation', {\n  /** Array must have exactly \"$wantedLength\" items, but has more/less */\n  'array.exact-length': 'Must have exactly {{wantedLength}} items',\n  /** Portable Text array must have exactly \"$wantedLength\" blocks, but has more/less */\n  'array.exact-length_blocks': 'Must have exactly {{wantedLength}} blocks',\n  /** Array item is a duplicate, but array wants only unique items */\n  'array.item-duplicate': \"Can't be a duplicate\",\n  /** Array has more than the maximum of \"$maxLength\" items */\n  'array.maximum-length': 'Must have at most {{maxLength}} items',\n  /** Portable Text array has more than the maximum of \"$maxLength\" items */\n  'array.maximum-length_blocks': 'Must have at most {{maxLength}} blocks',\n  /** Array has less than the minimum of \"$minLength\" items */\n  'array.minimum-length': 'Must have at least {{minLength}} items',\n  /** Portable Text array has less than the minimum of \"$minLength\" blocks */\n  'array.minimum-length_blocks': 'Must have at least {{minLength}} blocks',\n  /** Date is not valid or not in the correct format (ISO-8601) */\n  'date.invalid-format': 'Must be a valid ISO-8601 formatted date string',\n  /** Date is later than the given maximum date \"$maxDate\" */\n  'date.maximum': 'Must be at or before {{maxDate}}',\n  /** Date is earlier than the given minimum date \"$minDate\" */\n  'date.minimum': 'Must be at or after {{minDate}}',\n  /** A value of incorrect type is found, eg found `number` instead of `string` */\n  'generic.incorrect-type': 'Expected type \"{{expectedType}}\", got \"{{actualType}}\"',\n  /** Value is not one of the values specifically allowed */\n  'generic.not-allowed': 'Value did not match any allowed values',\n  /** Value \"$givenValue\" is not one of the values specifically allowed */\n  'generic.not-allowed_hint': 'Value \"{{hint}}\" did not match any allowed values',\n  /** A value is expected, but none is provided */\n  'generic.required': 'Required',\n  /** Number is less than the given minimum threshold value \"$threshold\" */\n  'number.greater-than': 'Must be greater than {{threshold}}',\n  /** Number is greater than the given maximum threshold value \"$threshold\" */\n  'number.less-than': 'Must be less than {{threshold}}',\n  /** Number is higher than the given maximum value \"$maxNumber\" */\n  'number.maximum': 'Must be lower than or equal to {{maxNumber}}',\n  /** Number has more precision (decimals) than the allowed \"$limit\" */\n  'number.maximum-precision': 'Max precision is {{limit}}',\n  /** Number is lower than the given minimum value \"$minNumber\" */\n  'number.minimum': 'Must be greater than or equal to {{minNumber}}',\n  /** Number is not an integer (\"whole number\") */\n  'number.non-integer': 'Must be an integer',\n  /** Object is missing a reference to an asset document in its `asset` field */\n  'object.asset-required': 'Asset is required',\n  /** Object is missing a reference to a file asset document in its `asset` field */\n  'object.asset-required_file': 'File is required',\n  /** Object is missing a reference to an image asset document in its `asset` field */\n  'object.asset-required_image': 'Image is required',\n  /** Object is not a reference to a document (eg `{_ref: 'documentId'}`) */\n  'object.not-reference': 'Must be a reference to a document',\n  /** Object references a document which is not published */\n  'object.reference-not-published': 'Referenced document must be published',\n  /** Accessibility label for closing the validation panel */\n  'panel.close-button-aria-label': 'Close validation',\n  /** Message shown when the validation panel is opened but there are no errors/warnings */\n  'panel.no-errors-message': 'No validation errors',\n  /** Title for the actual \"Validation\" panel/feature */\n  'panel.title': 'Validation',\n  /** Slug is an object, but is missing a `current` string property */\n  'slug.missing-current': 'Slug must have a value',\n  /** Slug is not an object (eg `{current: 'some-slug'}`) */\n  'slug.not-object': 'Slug must be an object',\n  /** Slug is already in use somewhere else, but needs to be unique */\n  'slug.not-unique': 'Slug is already in use',\n  /** String is not a valid email address */\n  'string.email': 'Must be a valid email address',\n  /** String has a different character length than the exact number \"$wantedLength\" */\n  'string.exact-length': 'Must be exactly {{wantedLength}} characters long',\n  /** String contains characters that are not in lowercase  */\n  'string.lowercase': 'Must be all lowercase characters',\n  /** String is longer than the limit of \"$maxLength\" characters */\n  'string.maximum-length': 'Must be at most {{maxLength}} characters long',\n  /** String is shorter than the limit of \"$minLength\" characters */\n  'string.minimum-length': 'Must be at least {{minLength}} characters long',\n  /** String does not match the given regular expression, but should */\n  'string.regex-does-not-match': 'Does not match \"{{name}}\"-pattern',\n  /** String matches the given regular expression, but should not */\n  'string.regex-match': 'Should not match \"{{name}}\"-pattern',\n  /** String contains characters that are not in uppercase */\n  'string.uppercase': 'Must be all uppercase characters',\n  /** String contains a protocol/scheme that is not allowed, eg (`ftp`, `mailto`…) */\n  'string.url.disallowed-scheme': 'Does not match allowed protocols/schemes',\n  /** String contains a URL with a username or password specified before the host */\n  'string.url.includes-credentials': 'Username/password not allowed',\n  /** String is not a valid URL */\n  'string.url.invalid': 'Not a valid URL',\n  /** String is not an absolute URL (eg it is missing a protocol/host) */\n  'string.url.not-absolute': 'Relative URLs are not allowed',\n  /** String is not a relative URL (eg it contains a protocol/host) */\n  'string.url.not-relative': 'Only relative URLs are allowed',\n} as const)\n\n/**\n * The i18n resource keys for the validation.\n *\n * @alpha\n * @hidden\n */\nexport type ValidationLocaleResourceKeys = keyof typeof validationLocaleStrings\n\n/**\n * Locale resources for the validation namespace, eg US English locale resources.\n *\n * @beta\n * @hidden\n */\nexport const validationLocaleResources: LocaleResourceBundle = {\n  locale: 'en-US',\n  namespace: validationLocaleNamespace,\n  resources: validationLocaleStrings,\n}\n","import {copyPasteLocaleResources} from './bundles/copy-paste'\nimport {studioDefaultLocaleResources} from './bundles/studio'\nimport {validationLocaleResources} from './bundles/validation'\nimport {defineLocale} from './helpers'\n\n/**\n * The default US English locale for the studio.\n *\n * @internal\n * @hidden\n */\nexport const usEnglishLocale = defineLocale({\n  id: 'en-US',\n  title: 'English (US)',\n  bundles: [studioDefaultLocaleResources, validationLocaleResources, copyPasteLocaleResources],\n\n  weekInfo: {\n    firstDay: 7, // Sunday\n    weekend: [6, 7], // Saturday, Sunday\n    minimalDays: 1,\n  },\n})\n\n/**\n * The default locale for the studio.\n *\n * @internal\n * @hidden\n */\nexport const defaultLocale = usEnglishLocale\n","/**\n * Whether or not the current environment supports localStorage.\n * Checks that values can actually be set/removed, to trigger any privacy settings.\n *\n * @internal\n */\nexport const supportsLocalStorage = (() => {\n  const key = '__tmp_supports_local_storage'\n\n  try {\n    if (typeof localStorage === 'undefined') {\n      return false\n    }\n\n    localStorage.setItem(key, '---')\n    localStorage.removeItem(key)\n    return true\n  } catch (err) {\n    return false\n  }\n})()\n","import {supportsLocalStorage} from '../util/supportsLocalStorage'\n\n/**\n * @todo Rework to use settings store\n */\n\nconst LOCAL_STORAGE_PREFIX = 'sanity-locale'\n\n/**\n * Get the users' preferred locale, if any\n *\n * @param projectId - Project ID to segment on\n * @param sourceId - Source ID to segment on\n * @returns Locale identifier, or `undefined`\n * @internal\n * @hidden\n */\nexport function getPreferredLocale(projectId: string, sourceId: string): string | undefined {\n  if (!supportsLocalStorage) {\n    return undefined\n  }\n  const locale = localStorage.getItem(getItemKey(projectId, sourceId))\n  return locale ?? undefined\n}\n\n/**\n * Store the users' preferred locale\n *\n * @param projectId - Project ID to segment on\n * @param sourceId - Source ID to segment on\n * @param locale - Locale to store\n * @returns\n * @internal\n * @hidden\n */\nexport function storePreferredLocale(projectId: string, sourceId: string, locale: string): void {\n  if (!supportsLocalStorage) {\n    return\n  }\n  localStorage.setItem(getItemKey(projectId, sourceId), locale)\n}\n\n/**\n * Get the key used to store the setting in localStorage\n *\n * @param projectId - Project ID to segment on\n * @param sourceId - Source ID to segment on\n * @returns Storage key\n * @internal\n */\nfunction getItemKey(projectId: string, sourceId: string) {\n  return [LOCAL_STORAGE_PREFIX, projectId, sourceId].join(':')\n}\n","import {type i18n} from 'i18next'\nimport {type PropsWithChildren, Suspense, useCallback, useMemo, useSyncExternalStore} from 'react'\nimport {I18nextProvider} from 'react-i18next'\nimport {LocaleContext, type LocaleContextValue} from 'sanity/_singletons'\n\nimport {LoadingBlock} from '../../components/loadingBlock'\nimport {useSource} from '../../studio'\nimport {defaultLocale} from '../locales'\nimport {storePreferredLocale} from '../localeStore'\nimport {type Locale} from '../types'\n\n/**\n * @internal\n * @hidden\n */\nexport function LocaleProvider(props: PropsWithChildren) {\n  const {\n    projectId,\n    name: sourceId,\n\n    i18n: {locales},\n    __internal: {i18next},\n  } = useSource()\n\n  return (\n    <LocaleProviderBase\n      {...props}\n      projectId={projectId}\n      sourceId={sourceId}\n      locales={locales}\n      i18next={i18next}\n    />\n  )\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function LocaleProviderBase({\n  projectId,\n  sourceId,\n  locales,\n  i18next,\n  children,\n}: PropsWithChildren<{\n  projectId: string\n  sourceId: string\n  locales: Locale[]\n  i18next: i18n\n}>) {\n  const subscribe = useCallback(\n    (callback: () => void) => {\n      i18next.on('languageChanged', callback)\n      return () => i18next.off('languageChanged', callback)\n    },\n    [i18next],\n  )\n  const currentLocale = useSyncExternalStore(\n    subscribe,\n    () => locales.find((candidate) => i18next.language === candidate.id) || defaultLocale,\n  )\n\n  const context = useMemo<LocaleContextValue>(\n    () => ({\n      locales,\n      currentLocale,\n      __internal: {i18next},\n      changeLocale: async (newLocale: string) => {\n        storePreferredLocale(projectId, sourceId, newLocale)\n        await i18next.changeLanguage(newLocale)\n      },\n    }),\n    [currentLocale, i18next, locales, projectId, sourceId],\n  )\n\n  return (\n    <Suspense fallback={<LoadingBlock />}>\n      <I18nextProvider i18n={i18next}>\n        {/* Use locale as key to force re-render, updating non-reactive parts */}\n        <LocaleContext.Provider value={context} key={currentLocale.id}>\n          {children}\n        </LocaleContext.Provider>\n      </I18nextProvider>\n    </Suspense>\n  )\n}\n","import {useCallback, useMemo} from 'react'\n\nimport {isNonNullable} from '../../util'\nimport {type I18nNode} from './useI18nText'\nimport {useTranslation} from './useTranslation'\n\n/**\n * Similar to `useI18nText` except returns a function that can be called\n * conditionally.\n * @internal\n */\nexport function useGetI18nText<TNode extends I18nNode<TNode>>(\n  input: TNode | undefined | Array<TNode | undefined>,\n): (node: TNode) => TNode {\n  const items = Array.isArray(input) ? input : [input]\n  const stableNamespaces = JSON.stringify(\n    items\n      .flatMap((item) => (item?.i18n ? Object.values(item.i18n).map(({ns}) => ns) : []))\n      .filter(isNonNullable)\n      .sort(),\n  )\n  const namespaces = useMemo(() => JSON.parse(stableNamespaces), [stableNamespaces])\n  const {t} = useTranslation(namespaces)\n\n  return useCallback(\n    function getI18nText(node: TNode) {\n      const {i18n} = node\n      if (!i18n) return node\n\n      return new Proxy(node, {\n        get: (target, property) => {\n          const defaultValue = target[property as keyof TNode]\n\n          if (typeof property === 'string' && property in i18n) {\n            const {key, ns} = i18n[property as keyof TNode['i18n']]\n            return t(key, {\n              ns,\n              // `defaultValue` is a special key in the i18next `t` API that\n              // allows us to provide a fallback value if no translation is found\n              // using the given key and namespace. if the value on the node\n              // is a string, then we'll use that as the fallback value\n              ...(typeof defaultValue === 'string' && {defaultValue}),\n            })\n          }\n\n          return defaultValue\n        },\n      })\n    },\n    [t],\n  )\n}\n","import {useMemo} from 'react'\n\nimport {useTranslation} from './useTranslation'\n\n/**\n * Enforces the shape of an object allowed to be passed into `useI18nText`.\n * @internal\n */\nexport type I18nNode<TNode extends {i18n?: {[TProp in string]: {key: string; ns: string}}}> = {\n  i18n?: {[K in keyof TNode['i18n']]: {key: string; ns: string}}\n} & {\n  [K in keyof TNode['i18n']]: string\n}\n\n/**\n * A React hook for localizing strings in a given object (`node`) using the\n * `useTranslation` hook.\n *\n * This hook expects an object (`node`) with top-level keys associated with\n * string values. If an `i18n` property is present within the object, it should\n * contain localization configurations for each top-level key. Each\n * configuration must include a `key` and `ns` (namespace) used for the\n * translation of the corresponding string value.\n *\n * The hook uses a proxy to intercept access to properties of the `node`. For\n * properties defined in the `i18n` object, it returns the translated string\n * using the `t` function. If no translation is found, the original string value\n * is used as a fallback. For properties not defined in the `i18n` object, their\n * original values are returned.\n *\n * @param node - The object containing strings to be localized along with\n *  optional i18n configurations.\n * @returns A proxy of the original `node` object where each property access\n *  returns localized strings.\n * @internal\n */\nexport function useI18nText<TNode extends I18nNode<TNode>>(node: TNode): TNode {\n  const namespaces = useMemo(() => {\n    if (!node.i18n) return []\n    return Array.from(new Set(Object.values(node.i18n).map(({ns}) => ns))).sort()\n  }, [node.i18n])\n\n  const {t} = useTranslation(namespaces)\n\n  return useMemo(() => {\n    const {i18n} = node\n    if (!i18n) return node\n\n    return new Proxy(node, {\n      get: (target, property) => {\n        const defaultValue = target[property as keyof TNode]\n\n        if (typeof property === 'string' && property in i18n) {\n          const {key, ns} = i18n[property as keyof TNode['i18n']]\n          return t(key, {\n            ns,\n            // `defaultValue` is a special key in the i18next `t` API that\n            // allows us to provide a fallback value if no translation is found\n            // using the given key and namespace. if the value on the node\n            // is a string, then we'll use that as the fallback value\n            ...(typeof defaultValue === 'string' && {defaultValue}),\n          })\n        }\n\n        return defaultValue\n      },\n    })\n  }, [node, t])\n}\n","import {useContext} from 'react'\nimport {LocaleContext, type LocaleContextValue} from 'sanity/_singletons'\n\nimport {type Locale} from '../types'\n\n/**\n * Returns the currently active locale\n *\n * @public\n */\nexport function useCurrentLocale(): Locale {\n  return useLocale().currentLocale\n}\n\n/**\n * @hidden\n * @internal\n */\nexport function useLocale(): LocaleContextValue {\n  const context = useContext(LocaleContext)\n  if (!context) {\n    throw new Error(\n      'Sanity LocaleContext value missing. Is this hook being used outside LocaleContext.Provider?',\n    )\n  }\n\n  return context\n}\n","type AnyIntlOptions = Intl.DateTimeFormat | Intl.ListFormatOptions | Intl.NumberFormatOptions\n\n/**\n * Cache of Intl.* instances. These can be costly to instantiate, but often needed,\n * thus this serves as an in-memory cache, and takes into account the options passed.\n *\n * @internal\n * @hidden\n */\nexport const intlCache = (() => {\n  const caches = {\n    dateTimeFormat: createCache<Intl.DateTimeFormat>(),\n    listFormat: createCache<Intl.ListFormat>(),\n    numberFormat: createCache<Intl.NumberFormat>(),\n    relativeTimeFormat: createCache<Intl.RelativeTimeFormat>(),\n  }\n\n  function dateTimeFormat(locale: string, options: Intl.DateTimeFormatOptions) {\n    const key = getCacheId(locale, options)\n    let instance = caches.dateTimeFormat[key]\n    if (instance) {\n      return instance\n    }\n\n    instance = new Intl.DateTimeFormat(locale, options)\n    caches.dateTimeFormat[key] = instance\n    return instance\n  }\n\n  function listFormat(locale: string, options: Intl.ListFormatOptions) {\n    const key = getCacheId(locale, options)\n    let instance = caches.listFormat[key]\n    if (instance) {\n      return instance\n    }\n\n    instance = new Intl.ListFormat(locale, options)\n    caches.listFormat[key] = instance\n    return instance\n  }\n\n  function numberFormat(locale: string, options: Intl.NumberFormatOptions) {\n    const key = getCacheId(locale, options)\n    let instance = caches.numberFormat[key]\n    if (instance) {\n      return instance\n    }\n\n    instance = new Intl.NumberFormat(locale, options)\n    caches.numberFormat[key] = instance\n    return instance\n  }\n\n  function relativeTimeFormat(locale: string, options: Intl.RelativeTimeFormatOptions) {\n    const key = getCacheId(locale, options)\n    let instance = caches.relativeTimeFormat[key]\n    if (instance) {\n      return instance\n    }\n\n    instance = new Intl.RelativeTimeFormat(locale, options)\n    caches.relativeTimeFormat[key] = instance\n    return instance\n  }\n\n  return {\n    dateTimeFormat,\n    listFormat,\n    numberFormat,\n    relativeTimeFormat,\n  }\n})()\n\nfunction createCache<T>(): Record<string, T | undefined> {\n  return Object.create(null)\n}\n\nfunction getCacheId(locale: string, options: AnyIntlOptions) {\n  return `${locale}-${JSON.stringify(orderedProps(options))}`\n}\n\nfunction orderedProps(obj: AnyIntlOptions) {\n  const segments: string[] = []\n  for (const [key, value] of Object.entries(obj)) {\n    segments.push(`${key}=${JSON.stringify(value)}`)\n  }\n  return segments.sort().join('\\n')\n}\n","import {useContext} from 'react'\nimport {LocaleContext} from 'sanity/_singletons'\n\nimport {intlCache} from '../i18n/intlCache'\n\n/**\n * Options for the `useListFormat` hook\n *\n * @public\n */\nexport interface UseListFormatOptions {\n  /**\n   * The format of output message.\n   * - `conjunction` (read: \"and\") - default\n   * - `disjunction` (read: \"or\")\n   * - `unit` (just a list)\n   */\n  type?: Intl.ListFormatType | undefined\n\n  /**\n   * The length of the internationalized message.\n   * This obviously varies based on language, but in US English this maps to:\n   * - `long`: \"a, b and c\" - default\n   * - `short`: \"a, b & c\"\n   * - `narrow`: `a, b, c`\n   */\n  style?: Intl.ListFormatStyle | undefined\n}\n\n/**\n * Returns an instance of `Intl.ListFormat` that uses the currently selected locale,\n * and enables language-sensitive list formatting.\n *\n * @param options - Optional options for the list formatter\n * @returns Instance of `Intl.ListFormat`\n * @public\n */\nexport function useListFormat(options: UseListFormatOptions = {}): Intl.ListFormat {\n  /*\n   * Certain components using this hook (such as the <Translate/> in toasts)\n   * may not have access to the LocaleProvider that lets us use useCurrentLocale.\n   * In that case, we fall back to a default, unobstrusive list format.\n   */\n  const currentLocale = useContext(LocaleContext)?.currentLocale.id\n  return currentLocale\n    ? intlCache.listFormat(currentLocale, options)\n    : intlCache.listFormat('en-US', {...options, style: 'narrow'})\n}\n","/**\n * @internal\n * @hidden\n */\nexport type OpenTagToken = {\n  type: 'tagOpen'\n  name: string\n  selfClosing?: boolean\n}\n\n/**\n * @internal\n * @hidden\n */\nexport type CloseTagToken = {\n  type: 'tagClose'\n  name: string\n}\n\n/**\n * @internal\n * @hidden\n */\nexport type TextToken = {\n  type: 'text'\n  text: string\n}\n\n/**\n * @internal\n * @hidden\n */\nexport type InterpolationToken = {\n  type: 'interpolation'\n  variable: string\n  formatters?: string[]\n}\n\n/**\n * @internal\n * @hidden\n */\nexport type Token = OpenTagToken | CloseTagToken | TextToken | InterpolationToken\n\nconst OPEN_TAG_RE = /^<(?<tag>[^\\s\\d<][^/?><]+)\\/?>/\nconst CLOSE_TAG_RE = /<\\/(?<tag>[^>]+)>/\nconst SELF_CLOSING_RE = /<[^>]+\\/>/\nconst VALID_COMPONENT_NAME_RE = /^[A-Z][A-Za-z0-9]+$/\nconst VALID_HTML_TAG_NAME_RE = /^[a-z]+$/\nconst TEMPLATE_RE = /{{\\s*?([^}]+)\\s*?}}/g\n\n/**\n * Parses a string for simple tags\n *\n * @param input - input string to parse\n * @returns An array of tokens\n * @internal\n * @hidden\n */\nexport function simpleParser(input: string): Token[] {\n  const tokens: Token[] = []\n  let text = ''\n  let openTag = ''\n  let remainder = input\n  while (remainder.length > 0) {\n    if (!openTag && remainder[0] === '<') {\n      const match = matchOpenTag(remainder)\n      if (match) {\n        const tagName = match.groups!.tag\n        validateTagName(tagName)\n        if (text) {\n          tokens.push(...textTokenWithInterpolation(text))\n          text = ''\n        }\n        if (isSelfClosing(match[0])) {\n          tokens.push({type: 'tagOpen', selfClosing: true, name: tagName})\n        } else {\n          tokens.push({type: 'tagOpen', name: tagName})\n          openTag = tagName\n        }\n        remainder = remainder.slice(match[0].length)\n      } else {\n        // move on to next char\n        text += remainder[0]\n        remainder = remainder.slice(1)\n      }\n    } else if (openTag && remainder[0] === '<' && remainder[1] !== '<') {\n      const match = matchCloseTag(remainder)\n      if (match) {\n        const tagName = match.groups!.tag\n        if (remainder[1] !== '/') {\n          throw new Error(\n            `Expected closing tag for <${openTag}>, but found new opening tag <${tagName}>. Nested tags is not supported.`,\n          )\n        }\n        if (tagName !== openTag) {\n          throw new Error(\n            `Expected closing tag for <${openTag}>, but found closing tag </${tagName}> instead. Make sure each opening tag has a matching closing tag.`,\n          )\n        }\n        if (text) {\n          tokens.push(...textTokenWithInterpolation(text))\n          text = ''\n        }\n        tokens.push({type: 'tagClose', name: tagName})\n        openTag = ''\n        remainder = remainder.slice(match[0].length)\n      } else {\n        // move on to next char\n        text += remainder[0]\n        remainder = remainder.slice(1)\n      }\n    } else {\n      // move on to next char\n      text += remainder[0]\n      remainder = remainder.slice(1)\n    }\n  }\n  if (openTag) {\n    throw new Error(\n      `No matching closing tag for <${openTag}> found. Either make it self closing (e.g. \"<${openTag}/>\") or close it (e.g \"<${openTag}>...</${openTag}>\").`,\n    )\n  }\n  if (text) {\n    tokens.push(...textTokenWithInterpolation(text))\n  }\n  return tokens\n}\n\nfunction textTokenWithInterpolation(text: string): Token[] {\n  const tokens: Token[] = []\n\n  const interpolations = text.matchAll(TEMPLATE_RE)\n  let lastIndex = 0\n  for (const match of interpolations) {\n    if (typeof match.index === 'undefined') {\n      continue\n    }\n\n    const pre = text.slice(lastIndex, match.index)\n    if (pre.length > 0) {\n      tokens.push({type: 'text', text: pre})\n    }\n\n    tokens.push(parseInterpolation(match[0]))\n\n    lastIndex += pre.length + match[0].length\n  }\n\n  if (lastIndex < text.length) {\n    tokens.push({type: 'text', text: text.slice(lastIndex)})\n  }\n\n  return tokens\n}\n\nfunction parseInterpolation(interpolation: string): InterpolationToken {\n  const [variable, ...formatters] = interpolation\n    .replace(/^\\{\\{|\\}\\}$/g, '')\n    .trim()\n    .split(/\\s*,\\s*/)\n\n  // To save us from reimplementing all of i18next's formatter logic, we only curently support the\n  // `list` formatter, and only without any arguments. This may change in the future, but deeming\n  // this good enough for now.\n  if (formatters.length === 1 && formatters[0] === 'list') {\n    return {type: 'interpolation', variable, formatters}\n  }\n\n  if (formatters.length > 0) {\n    throw new Error(\n      `Interpolations with formatters are not supported when using <Translate>. Found \"${interpolation}\". Utilize \"useTranslation\" instead, or format the values passed to <Translate> ahead of time.`,\n    )\n  }\n\n  return {type: 'interpolation', variable}\n}\n\nfunction isSelfClosing(tag: string) {\n  return SELF_CLOSING_RE.test(tag)\n}\nfunction matchOpenTag(input: string) {\n  return input.match(OPEN_TAG_RE)\n}\nfunction matchCloseTag(input: string) {\n  return input.match(CLOSE_TAG_RE)\n}\n\nfunction validateTagName(tagName: string) {\n  const isValidComponentName = VALID_COMPONENT_NAME_RE.test(tagName)\n  if (isValidComponentName) {\n    return\n  }\n\n  const isValidHtmlTagName = VALID_HTML_TAG_NAME_RE.test(tagName)\n  if (isValidHtmlTagName) {\n    return\n  }\n\n  throw new Error(\n    tagName.trim() === tagName\n      ? `Invalid tag \"<${tagName}>\". Tag names must be lowercase HTML tags or start with an uppercase letter and can only include letters and numbers.`\n      : `Invalid tag \"<${tagName}>\". No whitespace allowed in tags.`,\n  )\n}\n","import {type TFunction} from 'i18next'\nimport {type ComponentType, type ReactNode, useMemo} from 'react'\n\nimport {useListFormat} from '../hooks/useListFormat'\nimport {type CloseTagToken, simpleParser, type TextToken, type Token} from './simpleParser'\n\nconst COMPONENT_NAME_RE = /^[A-Z]/\nconst RECOGNIZED_HTML_TAGS = [\n  'abbr',\n  'address',\n  'cite',\n  'code',\n  'del',\n  'em',\n  'ins',\n  'kbd',\n  'q',\n  'samp',\n  'strong',\n  'sub',\n  'sup',\n]\n\ntype FormatterFns = {list: (value: Iterable<string>) => string}\n\n/**\n * A map of component names to React components. The component names are the names used within the\n * locale resources, eg a key of `SearchTerm` should be rendered as `<SearchTerm/>` or\n * `<SearchTerm>{{term}}</SearchTerm>` (no whitespace in tag, nor attributes).\n *\n * The components receives `children`, but no other props.\n *\n * @public\n */\nexport type TranslateComponentMap = Record<\n  string,\n  ComponentType<{children?: ReactNode}> | keyof React.JSX.IntrinsicElements\n>\n\n/**\n * Props for the `Translate` component.\n *\n * @public\n */\nexport interface TranslationProps {\n  /**\n   * The `t` function to use, from the `useTranslation` hook\n   */\n  t: TFunction\n\n  /**\n   * The i18n resource key to translate\n   */\n  i18nKey: string\n\n  /**\n   * A map of component names to React components, used to render more complex content\n   */\n  components?: TranslateComponentMap\n\n  /**\n   * A string representing the \"context\" of the resource key.\n   *\n   * For an i18nKey of `greeter.greet-entity`, passing `context: 'human'` will look for a key of\n   * `greeter.greet-entity_human` in the locale resources. If not found, it will fall back to the\n   * base key (`greeter.greet-entity`).\n   */\n  context?: string\n\n  /**\n   * A map of values to interpolate into the translated string. The resources should use the\n   * double curly bracket annotation to use them, eg `{{petName}}`. Will be escaped by React,\n   * so no need to escape HTML.\n   */\n  values?: Record<string, string | string[] | number | undefined>\n}\n\n/**\n * Component for translating i18n resources.\n *\n * Note that this component is more expensive to render than using the `t` function from\n * `useTranslate` directly, so prefer that if possible. Generally, the only valid use case\n * for this component is when the translation needs to render a React component as part of\n * the message.\n *\n * @public\n */\nexport function Translate(props: TranslationProps) {\n  /**\n   * The i18next API is kinda weird - the second parameter to `t` is a mixture of options and\n   * replacement values. All of the following properties are options for the `t` function, at\n   * the time of writing:\n   *\n   * 'defaultValue', 'ordinal', 'context', 'replace', 'lng', 'lngs', 'fallbackLng', 'ns',\n   * 'keySeparator', 'nsSeparator', 'returnObjects', 'returnDetails', 'joinArrays',\n   * 'postProcess', 'interpolation'.\n   *\n   * Because we are explicitly receiving the interpolation values we want through `values`,\n   * it is safer to explicitly pass these to the `replace` parameter, in order to avoid unexpected\n   * behavior with built-in options.\n   */\n  const translated = props.t(props.i18nKey, {\n    context: props.context,\n    skipInterpolation: true,\n    count:\n      props.values && 'count' in props.values && typeof props.values.count === 'number'\n        ? props.values.count\n        : undefined,\n  })\n\n  const tokens = useMemo(() => simpleParser(translated), [translated])\n  const listFormat = useListFormat()\n  const formatters: FormatterFns = {\n    list: (listValues) => listFormat.format(listValues),\n  }\n  return <>{render(tokens, props.values, props.components || {}, formatters)}</>\n}\n\nfunction render(\n  tokens: Token[],\n  values: TranslationProps['values'],\n  componentMap: TranslateComponentMap,\n  formatters: FormatterFns,\n): ReactNode {\n  const [head, ...tail] = tokens\n  if (!head) {\n    return null\n  }\n  if (head.type === 'interpolation') {\n    const value = values ? values[head.variable] : undefined\n    if (typeof value === 'undefined') {\n      return `{{${head.variable}}}`\n    }\n\n    const formattedValue = applyFormatters(value, head.formatters || [], formatters)\n\n    return (\n      <>\n        {formattedValue}\n        {render(tail, values, componentMap, formatters)}\n      </>\n    )\n  }\n  if (head.type === 'text') {\n    return (\n      <>\n        {head.text}\n        {render(tail, values, componentMap, formatters)}\n      </>\n    )\n  }\n  if (head.type === 'tagOpen' && head.selfClosing) {\n    const Component = componentMap[head.name]\n\n    if (!Component) {\n      throw new Error(`Component not found: ${head.name}`)\n    }\n    return (\n      <>\n        <Component />\n        {render(tail, values, componentMap, formatters)}\n      </>\n    )\n  }\n  if (head.type === 'tagOpen' && !head.selfClosing) {\n    const nextCloseIdx = tail.findIndex((token) => token.type === 'tagClose')\n    const nextClose = tail[nextCloseIdx]\n    if (nextClose) {\n      if (head.name !== (nextClose as CloseTagToken).name) {\n        throw new Error('Nested tags is not allowed')\n      }\n    }\n    const Component = componentMap[head.name]\n    if (!Component && COMPONENT_NAME_RE.test(head.name)) {\n      throw new Error(`Component not defined: ${head.name}`)\n    }\n\n    if (!Component && !RECOGNIZED_HTML_TAGS.includes(head.name)) {\n      throw new Error(`HTML tag \"${head.name}\" is not allowed`)\n    }\n\n    const children = tail.slice(0, nextCloseIdx) as TextToken[]\n    const remaining = tail.slice(nextCloseIdx + 1)\n\n    const As = Component ? Component : head.name\n    return (\n      <>\n        <As>{render(children, values, componentMap, formatters)}</As>\n        {render(remaining, values, componentMap, formatters)}\n      </>\n    )\n  }\n  return null\n}\n\nfunction applyFormatters(\n  value: Required<TranslationProps>['values'][string],\n  formatters: string[],\n  formatterFns: FormatterFns,\n): string {\n  let formattedValue = value\n  for (const formatter of formatters) {\n    if (formatter === 'list') {\n      if (Array.isArray(value)) {\n        formattedValue = formatterFns.list(value)\n      } else {\n        throw new Error('List formatter used on non-array value')\n      }\n    }\n  }\n  return `${formattedValue}`\n}\n","/** @internal */\n// eslint-disable-next-line no-process-env\nexport const isDev = process.env.NODE_ENV !== 'production'\n\n/** @internal */\nexport const isProd = !isDev\n","import {isDev} from '../../../environment'\n\n// TODO: change this to what the official GDR release version is\nexport const DEFAULT_API_VERSION = 'vX'\n\n// Staging\nexport const DEPLOYED_FRONTEND_HOST_STAGING = 'https://media.sanity.work'\nexport const CDN_HOST_STAGING = 'https://sanity-cdn.work'\nexport const API_HOST_STAGING = 'https://api.sanity.work'\n\n// Production\nexport const DEPLOYED_FRONTEND_HOST_PRODUCTION = 'https://media.sanity.io'\nexport const CDN_HOST_PRODUCTION = 'https://sanity-cdn.com'\nexport const API_HOST_PRODUCTION = 'https://api.sanity.io'\n\n// Local dev Media Library server\nexport const IS_LOCAL_DEV = false && isDev // Set boolean to true to work against local Media Library dev server (but keep isDev check to avoid accidentally committing it)\nexport const LOCAL_DEV_FRONTEND_HOST = 'http://localhost:3001'\n","import {useClient} from '../../../../hooks'\nimport {DEFAULT_API_VERSION} from '../constants'\n\nexport function useToken(): string | undefined {\n  const client = useClient({apiVersion: DEFAULT_API_VERSION})\n  const {token} = client.config()\n  return token\n}\n","import {useToken} from './useToken'\n\nexport function useAuthType(): 'token' | 'cookie' {\n  const token = useToken()\n  return token ? 'token' : 'cookie'\n}\n","import {useCallback, useEffect, useRef} from 'react'\n\nimport {type PluginPostMessage} from '../types'\nimport {useToken} from './useToken'\n\nexport const usePluginPostMessage = (\n  origin: string,\n  handleMessage?: (\n    message: PluginPostMessage,\n    postMessage: (msg: PluginPostMessage) => void,\n  ) => void,\n): {\n  postMessage: (message: PluginPostMessage) => void\n  setIframe: (iframe: HTMLIFrameElement) => void\n} => {\n  const token = useToken()\n  const iframeRef = useRef<HTMLIFrameElement | null>(null)\n\n  const postFn = useCallback(\n    (message: PluginPostMessage) => {\n      if (iframeRef.current?.contentWindow) {\n        iframeRef.current.contentWindow?.postMessage(message, origin)\n      }\n    },\n    [origin],\n  )\n\n  useEffect(() => {\n    const handler = (event: MessageEvent) => {\n      if (event.data.type === 'tokenRequest') {\n        postFn({\n          type: 'tokenResponse',\n          token: token || null,\n        })\n      }\n      if (handleMessage) {\n        handleMessage(event.data, postFn)\n      }\n    }\n    window.addEventListener('message', handler, false)\n    return () => {\n      if (iframeRef.current?.contentWindow) {\n        window.removeEventListener('message', handler, false)\n      }\n    }\n  }, [handleMessage, iframeRef, postFn, token])\n\n  return {postMessage: postFn, setIframe: (iframe) => (iframeRef.current = iframe)}\n}\n","import {useClient} from '../../../../hooks'\nimport {\n  API_HOST_PRODUCTION,\n  API_HOST_STAGING,\n  CDN_HOST_PRODUCTION,\n  CDN_HOST_STAGING,\n  DEFAULT_API_VERSION,\n  DEPLOYED_FRONTEND_HOST_PRODUCTION,\n  DEPLOYED_FRONTEND_HOST_STAGING,\n  IS_LOCAL_DEV,\n  LOCAL_DEV_FRONTEND_HOST,\n} from '../constants'\nimport {type SanityMediaLibraryConfig} from '../types'\n\nexport function useSanityMediaLibraryConfig(): SanityMediaLibraryConfig {\n  const isLocalDev = IS_LOCAL_DEV\n  const client = useClient({apiVersion: DEFAULT_API_VERSION})\n  const host = client.config().apiHost\n  const isStaging = host.endsWith('sanity.work')\n  const deployedFrontendHost = isStaging\n    ? DEPLOYED_FRONTEND_HOST_STAGING\n    : DEPLOYED_FRONTEND_HOST_PRODUCTION\n  const appHost = isLocalDev ? LOCAL_DEV_FRONTEND_HOST : deployedFrontendHost\n  const env: 'staging' | 'production' = isStaging ? 'staging' : 'production'\n\n  const internalConfig = {\n    apiVersion: DEFAULT_API_VERSION,\n    appBasePath: '',\n    pluginApiVersion: 'v1',\n    hosts: {\n      cdn: isStaging ? CDN_HOST_STAGING : CDN_HOST_PRODUCTION,\n      app: appHost,\n      api: isStaging ? API_HOST_STAGING : API_HOST_PRODUCTION,\n    },\n    isLocalDev,\n    env,\n  }\n\n  return {\n    __internal: internalConfig,\n  }\n}\n","// eslint-disable-next-line no-restricted-imports -- This has some special implementation needed from @sanity/ui\nimport {Dialog} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const AppDialog = styled(Dialog)`\n  [data-ui='Card']:first-child {\n    flex: 1;\n  }\n`\n","import {Card} from '@sanity/ui'\nimport {forwardRef, type Ref} from 'react'\n\nexport interface IframeProps {\n  src: string\n}\n\nexport const Iframe = forwardRef(function Iframe(\n  props: IframeProps,\n  forwardedRef: Ref<HTMLIFrameElement>,\n) {\n  const {src} = props\n  return (\n    <Card\n      style={{\n        display: 'flex',\n        width: '100%',\n        height: '100%',\n        flexDirection: 'column',\n        overflow: 'hidden',\n      }}\n    >\n      <iframe\n        ref={forwardedRef}\n        src={src}\n        style={{\n          overflow: 'hidden',\n          flexGrow: 1,\n          border: 'none',\n          margin: 0,\n          padding: 0,\n          height: '100%',\n          width: '100%',\n        }}\n      />\n    </Card>\n  )\n})\n","import {Flex, Stack, useTheme} from '@sanity/ui'\nimport {type ReactNode, useCallback, useState} from 'react'\nimport {useTranslation} from 'react-i18next'\n\nimport {Button} from '../../../../../ui-components'\nimport {useAuthType} from '../hooks/useAuthType'\nimport {usePluginPostMessage} from '../hooks/usePluginPostMessage'\nimport {useSanityMediaLibraryConfig} from '../hooks/useSanityMediaLibraryConfig'\nimport {type AssetSelectionItem, type AssetType, type PluginPostMessage} from '../types'\nimport {AppDialog} from './Dialog'\nimport {Iframe} from './Iframe'\n\nexport interface SelectAssetsDialogProps {\n  dialogHeaderTitle?: ReactNode\n  libraryId: string\n  onClose: () => void\n  onSelect: (selection: AssetSelectionItem[]) => Promise<void>\n  ref: React.Ref<HTMLDivElement>\n  selectAssetType?: AssetType\n  selection: AssetSelectionItem[]\n  selectionType?: 'single' | 'multiple'\n}\n\nexport function SelectAssetsDialog(props: SelectAssetsDialogProps): ReactNode {\n  const theme = useTheme()\n  const {t} = useTranslation()\n  const {dark} = theme.sanity.color\n\n  const mediaLibraryConfig = useSanityMediaLibraryConfig()\n\n  const appHost = mediaLibraryConfig.__internal.hosts.app\n\n  const authType = useAuthType()\n\n  const {\n    dialogHeaderTitle,\n    libraryId,\n    onClose,\n    onSelect,\n    selectionType = 'single',\n    ref,\n    selectAssetType,\n  } = props\n\n  const [assetSelection, setAssetSelection] = useState<AssetSelectionItem[]>(props.selection)\n  const [didSelect, setDidSelect] = useState(false)\n\n  const pluginApiVersion = mediaLibraryConfig.__internal.pluginApiVersion\n  const appBasePath = mediaLibraryConfig.__internal.appBasePath\n  const iframeUrl =\n    `${appHost}${appBasePath}/plugin/${pluginApiVersion}/library/${libraryId}/assets?selectionType=${selectionType}` +\n    `&selectAssetTypes=${selectAssetType}&scheme=${dark ? 'dark' : 'light'}&auth=${authType}`\n\n  const handleClose = useCallback(() => {\n    onClose()\n  }, [onClose])\n\n  const handleSelect = useCallback(async () => {\n    try {\n      setDidSelect(true)\n      await onSelect(assetSelection)\n    } catch (error) {\n      console.error('Error selecting assets:', error)\n      setDidSelect(false)\n    }\n  }, [onSelect, assetSelection])\n\n  const handlePluginMessage = useCallback((message: PluginPostMessage) => {\n    if (message.type === 'assetSelection') {\n      setAssetSelection(message.selection)\n    }\n  }, [])\n\n  const {setIframe} = usePluginPostMessage(appHost, handlePluginMessage)\n\n  return (\n    <AppDialog\n      animate\n      header={dialogHeaderTitle}\n      id=\"sanity-media-library-plugin-dialog-select-assets\"\n      onClose={handleClose}\n      open\n      ref={ref}\n      width={3}\n      footer={\n        <Flex width=\"full\" gap={3} justify=\"flex-end\" padding={2}>\n          <Stack space={3}>\n            <Flex width=\"full\" gap={3} justify=\"flex-end\" padding={3}>\n              <Button\n                mode=\"ghost\"\n                onClick={handleClose}\n                text={t('asset-source.dialog.button.cancel')}\n                size=\"large\"\n              />\n              <Button\n                onClick={handleSelect}\n                loading={didSelect}\n                disabled={assetSelection.length === 0}\n                text={t('asset-source.dialog.button.select')}\n                size=\"large\"\n              />\n            </Flex>\n          </Stack>\n        </Flex>\n      }\n    >\n      <Iframe ref={setIframe} src={iframeUrl} />\n    </AppDialog>\n  )\n}\n","import {\n  type AssetFromSource,\n  type AssetSourceComponentProps,\n  type SanityDocument,\n} from '@sanity/types'\nimport {useToast} from '@sanity/ui'\nimport {type ForwardedRef, forwardRef, memo, useCallback, useEffect, useState} from 'react'\n\nimport {useClient} from '../../../../hooks'\nimport {useTranslation} from '../../../../i18n'\nimport {DEFAULT_API_VERSION} from '../constants'\nimport {SelectAssetsDialog, type SelectAssetsDialogProps} from './SelectAssetsDialog'\n\n// Cache for fetched Media Library ID when 'libraryId' is not specified in the config.\nconst fetchedLibraryIdCache: Map<string, string> = new Map()\n\nconst MediaLibraryAssetSource = function MediaLibraryAssetSource(\n  props: AssetSourceComponentProps & {libraryId: string | null},\n  ref: ForwardedRef<HTMLDivElement>,\n) {\n  const {\n    accept,\n    assetType = 'image',\n    dialogHeaderTitle,\n    libraryId: libraryIdProp,\n    onClose,\n    onSelect,\n    selectedAssets,\n  } = props\n\n  const {t} = useTranslation()\n  const toast = useToast()\n  const client = useClient({apiVersion: DEFAULT_API_VERSION})\n\n  const projectId = client.config().projectId\n\n  const cachedFetchedLibraryId = (projectId && fetchedLibraryIdCache.get(projectId)) || undefined\n  const [fetchedLibraryId, setFetchedLibraryId] = useState<string | null>(\n    cachedFetchedLibraryId || null,\n  )\n\n  useEffect(() => {\n    if (libraryIdProp || fetchedLibraryId) {\n      return\n    }\n    if (!projectId) {\n      throw new Error('projectId is required to fetch Media Library ID')\n    }\n    client.request({uri: `/media-libraries`, query: {projectId}}).then((result) => {\n      const libraryIdFromResult = result.data[0]?.id\n      if (libraryIdFromResult) {\n        // Add to cache for this project (organization)\n        fetchedLibraryIdCache.set(projectId, libraryIdFromResult)\n        setFetchedLibraryId(libraryIdFromResult)\n      }\n    })\n  }, [client, fetchedLibraryId, libraryIdProp, projectId])\n\n  const resolvedLibraryId = libraryIdProp || fetchedLibraryId\n\n  const handleSelect: SelectAssetsDialogProps['onSelect'] = useCallback(\n    async (selection) => {\n      if (!resolvedLibraryId) {\n        return\n      }\n      const asset = selection[0]\n      // Link asset from media library to current dataset\n      try {\n        const result = await client.request({\n          method: 'POST',\n          url: `/assets/media-library-link/${client.config().dataset}`,\n          withCredentials: true,\n          body: {\n            mediaLibraryId: resolvedLibraryId,\n            assetInstanceId: asset.assetInstanceId,\n            assetId: asset.assetId,\n          },\n        })\n        const assetDocument: SanityDocument = result.document\n        const assetsFromSource: AssetFromSource[] = [\n          {\n            kind: 'assetDocumentId',\n            value: assetDocument._id,\n            mediaLibraryProps: {\n              mediaLibraryId: resolvedLibraryId,\n              assetId: asset.assetId,\n              assetInstanceId: asset.assetInstanceId,\n            },\n          },\n        ]\n        onSelect(assetsFromSource)\n        onClose()\n      } catch (error) {\n        toast.push({\n          closable: true,\n          status: 'error',\n          title: t('asset-source.dialog.insert-asset-error'),\n        })\n        console.error(error)\n        throw error\n      }\n    },\n    [client, onClose, onSelect, resolvedLibraryId, t, toast],\n  )\n\n  if (!resolvedLibraryId) {\n    return null\n  }\n\n  return (\n    <SelectAssetsDialog\n      dialogHeaderTitle={\n        dialogHeaderTitle ||\n        t('asset-source.dialog.default-title', {\n          context: assetType,\n        })\n      }\n      ref={ref}\n      onClose={onClose}\n      onSelect={handleSelect}\n      selection={[]}\n      libraryId={resolvedLibraryId}\n      selectAssetType={assetType}\n    />\n  )\n}\n\nexport const MediaLibrarySource = memo(forwardRef(MediaLibraryAssetSource))\n","import {DocumentIcon, ImageIcon} from '@sanity/icons'\nimport {type AssetSource, type AssetSourceComponentProps} from '@sanity/types'\n\nimport {MediaLibrarySource} from './shared/MediaLibrarySource'\n\nexport interface CreateSanityMediaLibrarySourceProps {\n  i18nKey?: string\n  icon?: React.ComponentType\n  libraryId: string | null\n  name: string\n}\n\n/**\n * Create a new image asset source for the Media Library\n *\n * @beta\n */\nexport function createSanityMediaLibraryImageSource(\n  props: CreateSanityMediaLibrarySourceProps,\n): AssetSource {\n  return {\n    name: props.name,\n    i18nKey: props.i18nKey || 'asset-source.media-library.image.title',\n    component: (sourceProps: AssetSourceComponentProps) => (\n      <MediaLibrarySource {...sourceProps} libraryId={props.libraryId} />\n    ),\n    icon: props.icon || ImageIcon,\n  }\n}\n\n/**\n * Create a new file asset source for the Media Library\n *\n * @beta\n */\nexport function createSanityMediaLibraryFileSource(\n  props: CreateSanityMediaLibrarySourceProps,\n): AssetSource {\n  return {\n    name: props.name,\n    i18nKey: props.i18nKey || 'asset-source.media-library.file.title',\n    component: (sourceProps: AssetSourceComponentProps) => (\n      <MediaLibrarySource {...sourceProps} libraryId={props.libraryId} />\n    ),\n    icon: props.icon || DocumentIcon,\n  }\n}\n","/* eslint-disable @typescript-eslint/ban-types */\nimport {type ComponentType, Fragment, useMemo} from 'react'\n\nimport {useSource} from '../../studio'\nimport {flattenConfig} from '..'\nimport {type PluginOptions} from '../types'\n\nconst emptyRender = () => <Fragment />\n\nfunction _createMiddlewareComponent<T extends {}>(\n  DefaultComponent: ComponentType<T>,\n  middlewareComponents: ComponentType<T>[],\n): ComponentType<T> {\n  return (outerProps: T) => {\n    // This is the inner \"layer\" of the middleware chain\n    // Here we render the _default_ component (typically Sanity's component)\n    let next = (props: T) => <DefaultComponent {...props} />\n\n    for (const Middleware of middlewareComponents) {\n      // As we progress through the chain, the meaning of \"renderDefault\" changes.\n      // At a given layer in the chain, the _next_ layer is the \"default\".\n      const renderDefault = next\n\n      // Here we replace `next` so that the _previous_ layer may use this as its _next_.\n      next = (props) => <Middleware {...props} renderDefault={renderDefault} />\n    }\n\n    return next({\n      ...outerProps,\n      // NOTE: it's safe to pass the empty render function, since it'll be overwritten in the next step (above).\n      // NOTE: it's important that the default component does not use `renderDefault`, since it will\n      // get the `emptyRender` callback will be passed when the middleware stack is empty.\n      renderDefault: emptyRender,\n    })\n  }\n}\n\n/**\n * @internal\n * This hook returns a component based on the Components API middleware chain.\n *\n * - The `pick` function is used to select a component from the provided plugin options in the configuration.\n * - The `defaultComponent` is the default component that gets rendered with `renderDefault`.\n *   The `renderDefault` function is added to the props of the middleware components so that they can render the default\n *   component and continue the middleware chain.\n *\n * @example\n * Example usage of:\n *\n * ```ts\n *  const StudioLayout = useMiddlewareComponents({\n *   pick: (plugin) => plugin.studio?.components?.layout,\n *   defaultComponent: StudioLayout,\n *  })\n *\n * return <StudioLayout />\n *```\n */\nexport function useMiddlewareComponents<T extends {}>(props: {\n  pick: (plugin: PluginOptions) => ComponentType<T>\n  defaultComponent: ComponentType<T>\n}): ComponentType<T> {\n  const {options} = useSource().__internal\n  const {defaultComponent, pick} = props\n\n  return useMemo(() => {\n    // Flatten the config tree into a list of configs\n    const flattened = [...flattenConfig(options, [])]\n\n    // Since the middleware chain is executed backwards, we need to reverse the list of configs here.\n    // This is important because we want the order of the Components API to be consistent with the order of the other APIs.\n    flattened.reverse()\n\n    // Pick the middleware components from the configs\n    const pickedComponents = flattened.map(({config}) => pick(config))\n\n    // Since we try to pick the components in all configs, some results may be undefined.\n    // Therefore, we filter these values out before passing the result to the middleware creator.\n    const result = pickedComponents.filter(Boolean)\n\n    // Create the middleware component\n    return _createMiddlewareComponent(defaultComponent, result)\n  }, [defaultComponent, options, pick])\n}\n","import {isRecord} from '../util'\n\n/** @internal */\nexport interface ConfigPropertyErrorOptions {\n  propertyName: string\n  path: string[]\n  cause: unknown\n}\n\n/** @internal */\nexport class ConfigPropertyError extends Error {\n  propertyName: string\n  path: string[]\n  cause: unknown\n\n  constructor({propertyName, path, cause}: ConfigPropertyErrorOptions) {\n    const message =\n      isRecord(cause) && typeof cause?.message === 'string' ? `: ${cause.message}` : ''\n\n    super(\n      `An error occurred while resolving \\`${propertyName}\\` from ${path.join(' > ')}${message}`,\n    )\n\n    this.name = 'ConfigPropertyError'\n    this.propertyName = propertyName\n    this.cause = cause\n    this.path = path\n  }\n}\n","import {isRecord} from '../util'\n\n/** @internal */\nexport interface ConfigResolutionErrorOptions {\n  name: string\n  type: string\n  causes: Array<ConfigResolutionError | Error | unknown>\n}\n\n/** @internal */\nexport class ConfigResolutionError extends Error {\n  name: string\n  type: string\n  causes: unknown[]\n\n  constructor({causes, name, type}: ConfigResolutionErrorOptions) {\n    const messages = causes\n      .filter(Boolean)\n      .map((cause) =>\n        isRecord(cause) && typeof cause?.message === 'string' ? cause.message : String(cause),\n      )\n\n    super(\n      `Could not resolve ${type}${name ? ` \\`${name}\\`` : ''}:\\n${messages\n        .map((message) => `\\t- ${message}`)\n        .join('\\n')}\\n\\n`,\n    )\n\n    // eslint-disable-next-line unicorn/custom-error-definition\n    this.name = name\n    this.causes = causes\n    this.type = type\n  }\n}\n","import {COLOR_HUES, hues} from '@sanity/color'\nimport {darken, hasBadContrast, lighten, readableColor} from 'color2k'\nimport {styled} from 'styled-components'\n\nfunction pseudoRandomNumber(seed: string) {\n  const hashCode = seed\n    .split('')\n    // eslint-disable-next-line no-bitwise\n    .reduce((prevHash, currVal) => ((prevHash << 5) - prevHash + currVal.charCodeAt(0)) | 0, 0)\n  return Math.abs((hashCode * 16807) % 2147483647) / 2147483647\n}\n\nconst SvgText = styled.text`\n  font-family: ${({theme}) => theme.sanity.fonts.text.family};\n  font-weight: ${({theme}) => theme.sanity.fonts.text.weights.medium};\n  font-size: ${({theme}) => theme.sanity.fonts.text.sizes[1].fontSize}px;\n  transform: translateY(1px);\n`\n\n/**\n * Creates an icon element based on the input title\n * @internal\n */\nexport function createDefaultIcon(title: string, subtitle: string) {\n  const rng1 = pseudoRandomNumber(`${title} ${subtitle}`)\n\n  const huesWithoutGray = COLOR_HUES.filter((hue) => hue !== 'gray')\n  const colorHue = huesWithoutGray[Math.floor(rng1 * huesWithoutGray.length)]\n  const possibleTints = ['300', '400', '500', '600', '700'] as const\n  const rng2 = pseudoRandomNumber(rng1.toString())\n  const tint = possibleTints[Math.floor(rng2 * possibleTints.length)]\n  const color = hues[colorHue][tint].hex\n\n  const letters = title\n    // split by whitespace\n    .split(/\\s/g)\n    // replace all non-word characters with empty string\n    .map((word) => word.replace(/\\\\W/g, ''))\n    // remove empty strings\n    .filter(Boolean)\n    // take the first two words\n    .slice(0, 2)\n    // grab the first letter and make it upper case\n    .map((i) => i.charAt(0).toUpperCase())\n\n  const darkened = darken(color, 0.4)\n  const lightened = lighten(color, 0.4)\n\n  /* eslint-disable no-negated-condition */\n  // eslint-disable-next-line no-nested-ternary\n  const textColor = !hasBadContrast(color, 'readable', darkened)\n    ? darkened\n    : !hasBadContrast(color, 'readable', lightened)\n      ? lightened\n      : readableColor(color)\n  /* eslint-enable no-negated-condition */\n\n  return (\n    <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 32 32\">\n      <rect width={32} height={32} rx={2} fill={color} />\n      <SvgText\n        x=\"50%\"\n        y=\"50%\"\n        textAnchor=\"middle\"\n        alignmentBaseline=\"middle\"\n        dominantBaseline=\"middle\"\n        fill={textColor}\n      >\n        {letters}\n      </SvgText>\n    </svg>\n  )\n}\n","import {type Config} from './types'\n\n/**\n * @hidden\n * @beta */\nexport function defineConfig<T extends Config>(config: T): T {\n  return config\n}\n\n/**\n * @deprecated Use `defineConfig` instead\n *\n * @hidden\n * @beta\n */\nexport function createConfig<T extends Config>(config: T): T {\n  return defineConfig(config)\n}\n","import {isString} from 'lodash'\n\nimport {type Plugin, type PluginOptions} from './types'\n\n/**\n * @hidden\n * @beta */\nexport type PluginFactory<TOptions> = (options: TOptions) => PluginOptions\n\nfunction validatePlugin(pluginResult: PluginOptions) {\n  // TODO: name is required etc\n  const messages = [\n    'projectId' in pluginResult && '`projectId` not allowed in plugin configuration',\n    'dataset' in pluginResult && '`dataset` not allowed in plugin configuration',\n  ].filter(isString)\n\n  if (messages.length)\n    throw new Error(\n      `Invalid plugin configuration:\\n${messages.map((message) => `\\t${message}`).join('\\n')}`,\n    )\n}\n\n/**\n * @hidden\n * @beta */\nexport function definePlugin<TOptions = void>(\n  arg: PluginFactory<TOptions> | PluginOptions,\n): Plugin<TOptions> {\n  if (typeof arg === 'function') {\n    const pluginFactory = arg\n\n    return (options: TOptions) => {\n      // TODO: there's a possiblity of passing default arguments to users'\n      // plugin factories or reading from default options in `TOptions`\n      const result = pluginFactory(options)\n\n      validatePlugin(result)\n      return result\n    }\n  }\n\n  validatePlugin(arg)\n  return () => arg\n}\n\n/**\n * @deprecated Use `definePlugin` instead\n *\n * @hidden\n * @beta\n */\nexport function createPlugin<TOptions = void>(\n  arg: PluginFactory<TOptions> | PluginOptions,\n): Plugin<TOptions> {\n  return definePlugin(arg)\n}\n","import {type DocumentFieldAction} from './types'\n\n/** @internal */\nexport function defineDocumentFieldAction(fieldAction: DocumentFieldAction): DocumentFieldAction {\n  return fieldAction\n}\n","import {\n  type IndexTuple,\n  isIndexSegment,\n  isIndexTuple,\n  isKeyedObject,\n  isKeySegment,\n  type KeyedSegment,\n  type Path,\n  type PathSegment,\n} from '@sanity/types'\n\nimport {isRecord} from '../../util'\n\nconst rePropName =\n  /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g\nconst reKeySegment = /_key\\s*==\\s*['\"](.*)['\"]/\n\n/** @internal */\nexport function pathToString(path: Path): string {\n  if (!Array.isArray(path)) {\n    throw new Error('Path is not an array')\n  }\n\n  return path.reduce<string>((target, segment, i) => {\n    if (isIndexSegment(segment)) {\n      return `${target}[${segment}]`\n    }\n\n    if (isKeySegment(segment) && segment._key) {\n      return `${target}[_key==\"${segment._key}\"]`\n    }\n\n    if (isIndexTuple(segment)) {\n      const [from, to] = segment\n      return `${target}[${from}:${to}]`\n    }\n\n    if (typeof segment === 'string') {\n      const separator = i === 0 ? '' : '.'\n      return `${target}${separator}${segment}`\n    }\n\n    throw new Error(`Unsupported path segment \\`${JSON.stringify(segment)}\\``)\n  }, '')\n}\n\n/** @internal */\nexport function getValueAtPath(rootValue: unknown, path: Path): unknown {\n  const segment = path[0]\n  if (typeof segment === 'undefined') {\n    return rootValue\n  }\n\n  const tail = path.slice(1)\n  if (isIndexSegment(segment)) {\n    return getValueAtPath(Array.isArray(rootValue) ? rootValue[segment] : undefined, tail)\n  }\n\n  if (isKeySegment(segment)) {\n    return getValueAtPath(\n      Array.isArray(rootValue) ? rootValue.find((item) => item._key === segment._key) : undefined,\n      tail,\n    )\n  }\n\n  if (typeof segment === 'string') {\n    return getValueAtPath(isRecord(rootValue) ? rootValue[segment] : undefined, tail)\n  }\n\n  throw new Error(`Unknown segment type ${JSON.stringify(segment)}`)\n}\n\n/** @internal */\nexport function findIndex(array: unknown[], segment: PathSegment): number {\n  if (typeof segment !== 'number' && !isKeySegment(segment)) {\n    return -1\n  }\n\n  return typeof segment === 'number'\n    ? segment\n    : array.findIndex((item) => isKeyedObject(item) && item._key === segment._key)\n}\n\n/** @internal */\nexport function stringToPath(path: string): Path {\n  const segments = path.match(rePropName)\n  if (!segments) {\n    throw new Error('Invalid path string')\n  }\n\n  return segments.map(normalizePathSegment)\n}\n\n/** @internal */\nexport function normalizePathSegment(segment: string): PathSegment {\n  if (isIndexSegment(segment)) {\n    return normalizeIndexSegment(segment)\n  }\n\n  if (isKeySegment(segment)) {\n    return normalizeKeySegment(segment)\n  }\n\n  if (isIndexTuple(segment)) {\n    return normalizeIndexTupleSegment(segment)\n  }\n\n  return segment\n}\n\n/** @internal */\nexport function normalizeIndexSegment(segment: string): PathSegment {\n  return Number(segment.replace(/[^\\d]/g, ''))\n}\n\n/** @internal */\nexport function normalizeKeySegment(segment: string): KeyedSegment {\n  const segments = segment.match(reKeySegment)\n  if (!segments) {\n    throw new Error('Invalid key segment')\n  }\n\n  return {_key: segments[1]}\n}\n\n/** @internal */\nexport function normalizeIndexTupleSegment(segment: string): IndexTuple {\n  const [from, to] = segment.split(':').map((seg) => (seg === '' ? seg : Number(seg)))\n  return [from, to]\n}\n\n/** @internal */\nexport function pathsAreEqual(pathA: Path, pathB: Path): boolean {\n  if (pathA.length !== pathB.length) {\n    return false\n  }\n\n  return pathA.every((segmentA, index) => {\n    const segmentB = pathB[index]\n    if (isKeySegment(segmentA) && isKeySegment(segmentB)) {\n      return segmentA._key === segmentB._key\n    }\n\n    if (isIndexSegment(segmentA)) {\n      return Number(segmentA) === Number(segmentB)\n    }\n\n    if (isIndexTuple(segmentA) && isIndexTuple(segmentB)) {\n      return segmentA[0] === segmentB[0] && segmentA[1] === segmentB[1]\n    }\n\n    return segmentA === segmentB\n  })\n}\n\n/** @internal */\nexport function getItemKey(arrayItem: unknown): string | undefined {\n  return isKeyedObject(arrayItem) ? arrayItem._key : undefined\n}\n\n/** @internal */\nexport function getItemKeySegment(arrayItem: unknown): KeyedSegment | undefined {\n  const key = getItemKey(arrayItem)\n  return key ? {_key: key} : undefined\n}\n\n/** @internal */\nexport function isEmptyObject(item: unknown): boolean {\n  return typeof item === 'object' && item !== null && Object.keys(item).length <= 0\n}\n","import {\n  isIndexSegment,\n  isIndexTuple,\n  isKeySegment,\n  type KeyedSegment,\n  type Path,\n} from '@sanity/types'\n\nimport {type UserColor, type UserColorManager} from '../../../user-color'\nimport {pathToString, stringToPath} from '../../paths/helpers'\nimport {\n  type Annotation,\n  type ArrayDiff,\n  type Diff,\n  type ItemDiff,\n  type ObjectDiff,\n  type StringDiff,\n  type StringDiffSegment,\n} from '../../types'\n\n/** @internal */\nexport function getAnnotationColor(\n  colorManager: UserColorManager,\n  annotation?: Annotation | null,\n): UserColor {\n  return colorManager.get(annotation?.author || null)\n}\n\n/** @internal */\nexport function getAnnotationAtPath(diff: Diff, diffPath: string | Path): Annotation | undefined {\n  const path: Path = Array.isArray(diffPath) ? diffPath : stringToPath(diffPath)\n\n  return getAnnotationAt(diff, path)\n}\n\n/** @internal */\nexport function getDiffAtPath(diff: Diff, diffPath: string | Path): Diff | undefined {\n  const path: Path = Array.isArray(diffPath) ? diffPath : stringToPath(diffPath)\n  return getDiffAt(diff, path)\n}\n\nfunction getAnnotationAt(diff: Diff, path: Path): Annotation | undefined {\n  const diffAt = getDiffAt(diff, path)\n  if (!diffAt) {\n    return undefined\n  }\n\n  if (diffAt.action === 'unchanged') {\n    return undefined\n  }\n\n  return diffAt.annotation || undefined\n}\n\n// eslint-disable-next-line complexity\nfunction getDiffAt(diff: Diff, path: Path, parentPath: Path = []): Diff | undefined {\n  if (path.length === 0) {\n    return diff\n  }\n\n  const segment = path[0]\n  const tail = path.slice(1)\n\n  if (isIndexTuple(segment)) {\n    throw new Error('Index tuples are not supported in diff paths')\n  }\n\n  if (isIndexSegment(segment) || isKeySegment(segment)) {\n    const location = isIndexSegment(segment) ? `at index ${segment}` : `with key ${segment._key}`\n    if (diff.type !== 'array') {\n      warn(`Failed to get item ${location} at path ${pathToString(parentPath)} (not an array)`)\n      return undefined\n    }\n\n    const itemDiff = diff.items.find(\n      isIndexSegment(segment)\n        ? (item) => item.toIndex === segment\n        : (item) => itemMatchesKey(item, segment),\n    )\n\n    if (!itemDiff) {\n      warn(`Failed to get item ${location} at path ${pathToString(parentPath)} (item missing)`)\n      return undefined\n    }\n\n    return getDiffAt(itemDiff.diff, tail, parentPath.concat(segment))\n  }\n\n  if (diff.type !== 'object') {\n    warn(`Failed to get property ${segment} at path ${pathToString(parentPath)} (not an object)`)\n    return undefined\n  }\n\n  const fieldDiff = diff.fields[segment]\n  if (typeof fieldDiff === 'undefined') {\n    warn(\n      `Failed to get property ${segment} at path ${pathToString(parentPath)} (field did not exist)`,\n    )\n    return undefined\n  }\n\n  return getDiffAt(fieldDiff, tail, parentPath.concat(segment))\n}\n\n/* eslint-disable no-console, @typescript-eslint/no-unused-vars */\nfunction warn(msg: string) {\n  //console.warn(msg)\n}\n/* eslint-enable no-console, @typescript-eslint/no-unused-vars */\n\nfunction itemMatchesKey(item: ItemDiff, key: KeyedSegment) {\n  const itemDiff = item.diff\n  return itemDiff.type !== 'object' || !itemDiff.toValue ? false : itemDiff.toValue._key === key\n}\n\n/** @internal */\nexport type DiffVisitor = (diff: Diff | StringDiffSegment, path: Path) => boolean\n\n/**\n * Visit all diffs in tree, until visitor returns false\n *\n * @param diff - Diff to visit\n * @param visitor - Visitor function, return false to stop from going deeper\n *\n * @internal\n */\nexport function visitDiff(\n  diff: Diff | StringDiffSegment,\n  visitor: DiffVisitor,\n  path: Path = [],\n): void {\n  if (!visitor(diff, path)) {\n    return\n  }\n\n  if (diff.type === 'array') {\n    visitArrayDiff(diff, visitor, path)\n    return\n  }\n\n  if (diff.type === 'object') {\n    visitObjectDiff(diff, visitor, path)\n    return\n  }\n\n  if (diff.type === 'string') {\n    visitStringDiff(diff, visitor, path)\n  }\n}\n\nfunction visitArrayDiff(diff: ArrayDiff, visitor: DiffVisitor, path: Path) {\n  if (diff.action === 'unchanged') {\n    return\n  }\n\n  diff.items.forEach((itemDiff) => {\n    const _key = itemDiff.diff.type === 'object' && (itemDiff.diff.toValue?._key as string)\n    const segment = _key ? {_key} : getItemDiffIndex(itemDiff)\n    visitDiff(itemDiff.diff, visitor, path.concat(segment))\n  })\n}\n\nfunction visitObjectDiff(diff: ObjectDiff, visitor: DiffVisitor, path: Path) {\n  if (diff.action === 'unchanged') {\n    return\n  }\n\n  Object.keys(diff.fields).forEach((fieldName) => {\n    const fieldDiff = diff.fields[fieldName]\n    visitDiff(fieldDiff, visitor, path.concat(fieldName))\n  })\n}\n\nfunction visitStringDiff(diff: StringDiff, visitor: DiffVisitor, path: Path) {\n  if (diff.action === 'unchanged') {\n    return\n  }\n\n  diff.segments.forEach((segment) => {\n    visitDiff(segment, visitor, path)\n  })\n}\n\nfunction getItemDiffIndex(itemDiff: ItemDiff): number {\n  return typeof itemDiff.toIndex === 'undefined' ? itemDiff.fromIndex || 0 : itemDiff.toIndex\n}\n","import {useContext, useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {EMPTY} from 'rxjs'\nimport {UserColorManagerContext} from 'sanity/_singletons'\n\nimport {type UserColor, type UserColorManager} from './types'\n\n/** @internal */\nexport function useUserColorManager(): UserColorManager {\n  const userColorManager = useContext(UserColorManagerContext)\n\n  if (!userColorManager) {\n    throw new Error('UserColorManager: missing context value')\n  }\n\n  return userColorManager\n}\n\n/** @internal */\nexport function useUserColor(userId: string | null): UserColor {\n  const manager = useUserColorManager()\n\n  const observable = useMemo(() => (userId ? manager.listen(userId) : EMPTY), [manager, userId])\n  return useObservable(observable, manager.get(null))\n}\n","import {COLOR_HUES, type ColorHueKey, type ColorTintKey, hues} from '@sanity/color'\nimport {type ThemeColorSchemeKey} from '@sanity/ui'\nimport {Observable} from 'rxjs'\nimport {shareReplay} from 'rxjs/operators'\n\nimport {type UserColor, type UserColorHue, type UserColorManager, type UserId} from './types'\n\n/** @internal */\nexport interface UserColorManagerOptions {\n  anonymousColor?: UserColor\n  userStore?: {me: Observable<{id: string} | null>}\n  colors?: Record<UserColorHue, UserColor>\n  currentUserColor?: UserColorHue\n  scheme: ThemeColorSchemeKey\n}\n\nconst DEFAULT_CURRENT_USER_HUE: ColorHueKey = 'purple'\n\n// Exclude green and red because they can be confused with \"add\" and \"remove\"\n// Exclude gray because it looks like \"color not found\"\nconst USER_COLOR_EXCLUDE_HUES = ['green', 'red', 'gray']\n\nconst defaultHues: ColorHueKey[] = COLOR_HUES.filter(\n  (hue) => !USER_COLOR_EXCLUDE_HUES.includes(hue),\n)\n\nconst getTints = (scheme: ThemeColorSchemeKey): Record<string, ColorTintKey> => {\n  const isDarkScheme = scheme === 'dark'\n\n  return {\n    background: isDarkScheme ? '900' : '100',\n    border: isDarkScheme ? '700' : '300',\n    text: isDarkScheme ? '200' : '700',\n  }\n}\n\nconst getDefaultColors = (scheme: ThemeColorSchemeKey): Record<string, UserColor> => {\n  const {background, border, text} = getTints(scheme)\n\n  return defaultHues.reduce(\n    (colors, hue) => {\n      colors[hue] = {\n        name: hue,\n        background: hues[hue][background].hex,\n        border: hues[hue][border].hex,\n        text: hues[hue][text].hex,\n        tints: hues[hue],\n      }\n      return colors\n    },\n    {} as Record<ColorHueKey, UserColor>,\n  )\n}\n\nconst getAnonymousColor = (scheme: ThemeColorSchemeKey): UserColor => {\n  const {background, border, text} = getTints(scheme)\n\n  return {\n    name: 'gray',\n    background: hues.gray[background].hex,\n    border: hues.gray[border].hex,\n    text: hues.gray[text].hex,\n    tints: hues.gray,\n  }\n}\n\n/** @internal */\nexport function createUserColorManager(options: UserColorManagerOptions): UserColorManager {\n  const {\n    anonymousColor: anonymousColorProp,\n    colors,\n    currentUserColor: currentUserColorProp,\n    scheme,\n  } = options\n\n  const userColors = colors || getDefaultColors(scheme)\n  const anonymousColor = anonymousColorProp || getAnonymousColor(scheme)\n  const currentUserColor = currentUserColorProp || DEFAULT_CURRENT_USER_HUE\n\n  if (!userColors.hasOwnProperty(currentUserColor)) {\n    throw new Error(`'colors' must contain 'currentUserColor' (${currentUserColor})`)\n  }\n\n  const userColorKeys: UserColorHue[] = Object.keys(userColors)\n  const subscriptions = new Map<UserId, Observable<UserColor>>()\n  const previouslyAssigned = new Map<UserId, UserColorHue>()\n  const assignedCounts: Record<UserColorHue, number> = userColorKeys.reduce(\n    (counts, color) => {\n      counts[color] = 0\n      return counts\n    },\n    {} as Record<UserColorHue, number>,\n  )\n\n  // This isn't really needed because we're reusing subscriptions,\n  // but is useful for debugging and poses a minimal overhead\n  const assigned = new Map<UserId, UserColorHue>()\n\n  let currentUserId: UserId | null\n\n  if (options?.userStore) {\n    options.userStore.me.subscribe((user) => setCurrentUser(user ? user.id : null))\n  }\n\n  return {get, listen}\n\n  function get(userId: UserId | null): UserColor {\n    if (!userId) {\n      return anonymousColor\n    }\n\n    return userColors[getUserHue(userId)]\n  }\n\n  function getUserHue(userId: UserId): UserColorHue {\n    if (userId === currentUserId) {\n      return currentUserColor\n    }\n\n    const assignedHue = assigned.get(userId)\n    if (assignedHue) {\n      return assignedHue\n    }\n\n    // Prefer to reuse the color previously assigned, BUT:\n    // ONLY if it's unused -or- there are no other unused colors\n    const prevHue = previouslyAssigned.get(userId)\n    if (prevHue && (assignedCounts[prevHue] === 0 || !hasUnusedColor())) {\n      return assignHue(userId, prevHue)\n    }\n\n    // Prefer \"static\" color based on user ID if unused\n    const preferredHue = getPreferredHue(userId)\n    if (assignedCounts[preferredHue] === 0) {\n      return assignHue(userId, preferredHue)\n    }\n\n    // Fall back to least used color, with a preference on the previous\n    // used color if there are ties for least used\n    return assignHue(userId, getLeastUsedHue(prevHue))\n  }\n\n  function listen(userId: string): Observable<UserColor> {\n    let subscription = subscriptions.get(userId)\n    if (subscription) {\n      return subscription\n    }\n\n    const hue = getUserHue(userId)\n    subscription = getObservableColor(userId, hue)\n    subscriptions.set(userId, subscription)\n    return subscription\n  }\n\n  function assignHue(userId: string, hue: UserColorHue): UserColorHue {\n    assigned.set(userId, hue)\n    previouslyAssigned.set(userId, hue)\n    assignedCounts[hue]++\n    return hue\n  }\n\n  function unassignHue(userId: string, hue: UserColorHue) {\n    assigned.delete(userId)\n    assignedCounts[hue]--\n  }\n\n  function getUnusedColor(): UserColorHue | undefined {\n    return userColorKeys.find((colorHue) => assignedCounts[colorHue] === 0)\n  }\n\n  function hasUnusedColor(): boolean {\n    return Boolean(getUnusedColor())\n  }\n\n  function getLeastUsedHue(tieBreakerPreference?: UserColorHue): UserColorHue {\n    let leastUses = +Infinity\n    let leastUsed: UserColorHue[] = []\n\n    userColorKeys.forEach((colorHue) => {\n      const uses = assignedCounts[colorHue]\n      if (uses === leastUses) {\n        leastUsed.push(colorHue)\n      } else if (uses < leastUses) {\n        leastUses = uses\n        leastUsed = [colorHue]\n      }\n    })\n\n    return tieBreakerPreference && leastUsed.includes(tieBreakerPreference)\n      ? tieBreakerPreference\n      : leastUsed[0]\n  }\n\n  function getObservableColor(userId: string, hue: UserColorHue): Observable<UserColor> {\n    return new Observable<UserColor>((subscriber) => {\n      const userColor = userColors[hue]\n      subscriber.next(userColor)\n      return () => {\n        subscriptions.delete(userId)\n        unassignHue(userId, hue)\n      }\n    }).pipe(shareReplay({refCount: true}))\n  }\n\n  function setCurrentUser(userId: string | null) {\n    currentUserId = userId\n    assignedCounts[currentUserColor] += userId ? 1 : -1\n  }\n\n  function getPreferredHue(userId: string): UserColorHue {\n    let hash = 0\n    for (let i = 0; i < userId.length; i++) {\n      // eslint-disable-next-line no-bitwise\n      hash = ((hash << 5) - hash + userId.charCodeAt(i)) | 0\n    }\n    return userColorKeys[Math.abs(hash) % userColorKeys.length]\n  }\n}\n","import {type ReactNode, useMemo} from 'react'\nimport {UserColorManagerContext} from 'sanity/_singletons'\n\nimport {useColorSchemeValue} from '../studio'\nimport {createUserColorManager} from './manager'\nimport {type UserColorManager} from './types'\n\n/** @internal */\nexport interface UserColorManagerProviderProps {\n  children: ReactNode\n  manager?: UserColorManager\n}\n\n/** @internal */\nexport function UserColorManagerProvider({\n  children,\n  manager: managerFromProps,\n}: UserColorManagerProviderProps): React.JSX.Element {\n  const scheme = useColorSchemeValue()\n\n  const manager = useMemo(() => {\n    return managerFromProps || createUserColorManager({scheme})\n  }, [managerFromProps, scheme])\n\n  return (\n    <UserColorManagerContext.Provider value={manager}>{children}</UserColorManagerContext.Provider>\n  )\n}\n","import {type Path} from '@sanity/types'\nimport {useMemo} from 'react'\n\nimport {type UserColor, useUserColorManager} from '../../../user-color'\nimport {type Annotation, type Diff} from '../../types'\nimport {getAnnotationAtPath, getAnnotationColor} from './helpers'\n\n/** @internal */\nexport function useAnnotationColor(annotation?: Annotation | null): UserColor {\n  const userColorManager = useUserColorManager()\n\n  return getAnnotationColor(userColorManager, annotation)\n}\n\n/** @internal */\nexport function useDiffAnnotationColor(diff: Diff, path: string | Path = []): UserColor {\n  const userColorManager = useUserColorManager()\n  const annotation = useMemo(() => getAnnotationAtPath(diff, path), [diff, path])\n\n  return useMemo(\n    () => getAnnotationColor(userColorManager, annotation),\n    [annotation, userColorManager],\n  )\n}\n","import {type KeyValueStoreValue} from '../types'\n\nexport function createMemoryStorage() {\n  const DB = Object.create(null)\n  return {\n    getKey(key: string): KeyValueStoreValue | null {\n      return DB[key] || null\n    },\n    setKey(key: string, value: KeyValueStoreValue) {\n      DB[key] = value\n    },\n  }\n}\n","import {supportsLocalStorage} from '../../../util/supportsLocalStorage'\nimport {type KeyValueStoreValue} from '../types'\nimport {createMemoryStorage} from './memoryStorage'\n\nfunction tryParse(val: string) {\n  try {\n    return JSON.parse(val)\n  } catch (err) {\n    // eslint-disable-next-line no-console\n    console.warn(`Failed to parse settings: ${err.message}`)\n    return null\n  }\n}\n\nfunction createLocalStoreStorage() {\n  if (!supportsLocalStorage) {\n    return createMemoryStorage()\n  }\n\n  function getKey(key: string): KeyValueStoreValue | null {\n    const val = localStorage.getItem(key)\n\n    return val === null ? null : tryParse(val)\n  }\n\n  const setKey = function (key: string, nextValue: KeyValueStoreValue) {\n    // Can't stringify undefined, and nulls are what\n    // `getItem` returns when key does not exist\n    if (typeof nextValue === 'undefined' || nextValue === null) {\n      localStorage.removeItem(key)\n    } else {\n      localStorage.setItem(key, JSON.stringify(nextValue))\n    }\n  }\n  return {getKey, setKey}\n}\n\nexport const localStoreStorage = createLocalStoreStorage()\n","import {isEqual} from 'lodash'\nimport {merge, of} from 'rxjs'\nimport {distinctUntilChanged, tap} from 'rxjs/operators'\n\nimport {localStoreStorage} from './storage/localStoreStorage'\nimport {type KeyValueStore, type KeyValueStoreValue} from './types'\n\n/**\n * Wraps a KeyValueStore and adds Stale-While-Revalidate (SWR) behavior to it\n */\nexport function withLocalStorageSWR(wrappedStore: KeyValueStore): KeyValueStore {\n  function getKey(key: string) {\n    return merge(\n      of(localStoreStorage.getKey(key)),\n      wrappedStore.getKey(key).pipe(\n        tap((wrappedStoreValue) => {\n          localStoreStorage.setKey(key, wrappedStoreValue)\n        }),\n      ),\n    ).pipe(distinctUntilChanged(isEqual))\n  }\n  function setKey(key: string, nextValue: KeyValueStoreValue) {\n    localStoreStorage.setKey(key, nextValue)\n    return wrappedStore.setKey(key, nextValue)\n  }\n  return {\n    getKey,\n    setKey,\n  }\n}\n","import {type SanityClient} from '@sanity/client'\n\nimport {type SourceClientOptions} from './config'\n\n/**\n * Unless otherwise specified, this is the API version we use for controlled\n * requests on internal studio APIs. The user should always ask for a specific\n * API version when using the client - this way we can upgrade which version we\n * use internally without having the users code break unexpectedly. It also\n * means the user can easily upgrade to newer versions of GROQ when it arrives.\n *\n * @internal\n */\nexport const DEFAULT_STUDIO_CLIENT_OPTIONS: SourceClientOptions = {\n  apiVersion: '2025-02-19',\n}\n\nexport const versionedClient = (client: SanityClient, apiVersion?: string): SanityClient => {\n  if (apiVersion) {\n    return client.withConfig({apiVersion})\n  }\n  return client\n}\n","import {type SanityClient} from '@sanity/client'\nimport DataLoader from 'dataloader'\n\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../../studioClient'\nimport {type KeyValueStoreValue} from '../types'\nimport {type KeyValuePair} from './types'\n\n/** @internal */\nexport interface ServerStorageOptions {\n  client: SanityClient\n}\n\nexport interface ServerStorage {\n  getKey: (key: string) => Promise<KeyValueStoreValue | null>\n  setKey: (key: string, nextValue: unknown) => Promise<KeyValueStoreValue>\n}\n\n/**\n * Backend uses the Sanity client to store and retrieve key-value pairs from the /users/me/keyvalue endpoint.\n * @internal\n */\nexport function createServerStorage({client: _client}: ServerStorageOptions): ServerStorage {\n  const client = _client.withConfig(DEFAULT_STUDIO_CLIENT_OPTIONS)\n\n  const keyValueLoader = new DataLoader<string, KeyValueStoreValue | null>(async (keys) => {\n    const value = await client\n      .request<KeyValuePair[]>({\n        uri: `/users/me/keyvalue/${keys.join(',')}`,\n      })\n      .catch((error) => {\n        console.error('Error fetching data:', error)\n        return Array(keys.length).fill(null)\n      })\n\n    const keyValuePairs = value.reduce(\n      (acc, next) => {\n        if (next?.key) {\n          acc[next.key] = next.value\n        }\n        return acc\n      },\n      {} as Record<string, KeyValueStoreValue | null>,\n    )\n\n    return keys.map((key) => keyValuePairs[key] || null)\n  })\n\n  const getKey = (key: string) => {\n    return keyValueLoader.load(key)\n  }\n\n  const setKey = (key: string, nextValue: unknown) => {\n    return client\n      .request<KeyValuePair[]>({\n        method: 'PUT',\n        uri: `/users/me/keyvalue`,\n        body: [{key, value: nextValue}],\n      })\n      .then(\n        (response) => {\n          const pair = response[0]\n          keyValueLoader.clear(pair.key)\n          keyValueLoader.prime(pair.key, pair.value)\n          return pair.value\n        },\n        (error) => {\n          console.error('Error setting data:', error)\n          return null\n        },\n      )\n  }\n\n  return {\n    getKey,\n    setKey,\n  }\n}\n","import {type SanityClient} from '@sanity/client'\nimport {isEqual} from 'lodash'\nimport {concat, type Observable, Subject} from 'rxjs'\nimport {distinctUntilChanged, filter, map} from 'rxjs/operators'\n\nimport {createServerStorage} from './storage/serverStorage'\nimport {type KeyValueStore, type KeyValueStoreValue} from './types'\n\nexport function createServerKeyValueStore({client}: {client: SanityClient}): KeyValueStore {\n  const serverStorage = createServerStorage({client})\n\n  const events$ = new Subject<{\n    type: 'optimistic' | 'commit'\n    key: string\n    value: KeyValueStoreValue\n  }>()\n\n  function getKey(key: string) {\n    return serverStorage.getKey(key)\n  }\n\n  function setKey(key: string, value: KeyValueStoreValue) {\n    events$.next({type: 'optimistic', key, value})\n\n    /*\n     * The backend returns the result of the set operation, so we can just pass that along.\n     * Most utils do not use it (they will take advantage of local state first) but it reflects the\n     * backend function and could be useful for debugging.\n     */\n    return serverStorage.setKey(key, value).then((storedValue) => {\n      events$.next({type: 'commit', key, value: storedValue})\n      return storedValue\n    })\n  }\n\n  return {\n    getKey(key: string): Observable<KeyValueStoreValue | null> {\n      return concat(\n        getKey(key),\n        events$.pipe(\n          filter((event) => event.key === key),\n          map((event) => event.value),\n          distinctUntilChanged(isEqual),\n        ),\n      )\n    },\n    setKey,\n  }\n}\n","import {type SanityClient} from '@sanity/client'\n\nimport {withLocalStorageSWR} from './localStorageSWR'\nimport {createServerKeyValueStore} from './serverKeyValueStore'\n\n/** @internal */\nexport function createKeyValueStore(options: {client: SanityClient}) {\n  return withLocalStorageSWR(createServerKeyValueStore(options))\n}\n","/** @internal */\nexport interface CorsOriginErrorOptions {\n  projectId?: string\n}\n\n/** @internal */\nexport class CorsOriginError extends Error {\n  projectId?: string\n\n  constructor({projectId}: CorsOriginErrorOptions) {\n    super('CorsOriginError')\n    this.name = 'CorsOriginError'\n    this.projectId = projectId\n  }\n}\n","import {supportsLocalStorage} from '../../../util/supportsLocalStorage'\n\nconst memStore: Record<string, string> = {}\n\nexport function setItem(key: string, value: string): void {\n  if (supportsLocalStorage) {\n    localStorage[key] = value\n  } else {\n    memStore[key] = value\n  }\n}\n\nexport function getItem(key: string): string | undefined {\n  return supportsLocalStorage ? localStorage[key] : memStore[key]\n}\n\nexport function removeItem(key: string): void {\n  if (supportsLocalStorage) {\n    localStorage.removeItem(key)\n  } else {\n    delete memStore[key]\n  }\n}\n","import {fromEvent, merge, type Observable, of, Subject} from 'rxjs'\nimport {filter, map, shareReplay} from 'rxjs/operators'\n\nimport {isNonNullable} from '../../../util'\nimport * as storage from './storage'\n\nexport interface BroadcastChannel<T> {\n  messages: Observable<T>\n  broadcast: (message: T) => void\n}\n\nexport function createBroadcastChannel<T>(namespace: string): BroadcastChannel<T> {\n  const storageEvents$ =\n    typeof window === 'undefined'\n      ? of<StorageEvent>() // No storage events in non-browser environments\n      : fromEvent<StorageEvent>(window, 'storage')\n\n  const storageKey = `__studio_local_storage_messaging_${namespace}`\n\n  // note: the the `storageEvents$` stream does not emit for the current\n  // window/tab. this subject is used to re-broadcast messages broadcast outward\n  // to itself\n  const broadcastedMessages$ = new Subject<T>()\n\n  const messages$ = merge(\n    broadcastedMessages$,\n    storageEvents$.pipe(\n      filter((event) => event.key === storageKey),\n      map((event) => event.newValue),\n      filter(isNonNullable),\n      map((newValue) => JSON.parse(newValue)),\n    ),\n  ).pipe(\n    // this is important to ensure all new subscribers get a message on subscribe\n    shareReplay(1),\n  )\n\n  function broadcast(message: T) {\n    try {\n      storage.setItem(storageKey, JSON.stringify(message))\n      // clear the value afterwards so that next message will still emit a\n      // new event even if it's identical to the previous one\n      storage.removeItem(storageKey)\n\n      broadcastedMessages$.next(message)\n    } catch (err) {\n      // intentional noop\n    }\n  }\n\n  return {messages: messages$, broadcast}\n}\n","import {type Theme} from '@sanity/ui'\nimport {type ComponentType} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {type AuthProvider} from '../../../config'\n\nconst GithubRootSvg = styled.svg(({theme}: {theme: Theme}) => {\n  const {fg} = theme.sanity.color.base\n\n  return css`\n    fill: ${fg};\n  `\n})\n\nconst CustomImage = styled.img`\n  height: 19px;\n  width: 19px;\n  object-fit: contain;\n`\n\nconst GithubLogo = () => (\n  <GithubRootSvg\n    // data-sanity-icon=\"google-logo\"\n    width=\"1em\"\n    height=\"1em\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    viewBox=\"0 0 438.55 438.55\"\n  >\n    <path d=\"M409.13 114.57a218.32 218.32 0 0 0-79.8-79.8Q278.94 5.36 219.27 5.36T109.21 34.77a218.29 218.29 0 0 0-79.8 79.8Q0 165 0 224.63q0 71.67 41.83 128.91t108.06 79.23q7.71 1.43 11.42-2a11.17 11.17 0 0 0 3.69-8.57q0-.86-.14-15.42t-.14-25.41l-6.57 1.14a83.77 83.77 0 0 1-15.85 1 120.73 120.73 0 0 1-19.84-2 44.34 44.34 0 0 1-19.11-8.51 36.23 36.23 0 0 1-12.56-17.6l-2.86-6.57a71.34 71.34 0 0 0-9-14.56q-6.14-8-12.42-10.85l-2-1.43a21 21 0 0 1-3.71-3.43 15.66 15.66 0 0 1-2.57-4q-.86-2 1.43-3.29C61.2 310.42 64 310 68 310l5.71.85q5.71 1.14 14.13 6.85a46.08 46.08 0 0 1 13.85 14.84q6.57 11.71 15.85 17.85t18.7 6.14a81.19 81.19 0 0 0 16.27-1.42 56.78 56.78 0 0 0 12.85-4.29q2.57-19.14 14-29.41a195.49 195.49 0 0 1-29.36-5.13 116.52 116.52 0 0 1-26.83-11.14 76.86 76.86 0 0 1-23-19.13q-9.14-11.42-15-30t-5.8-42.81q0-34.55 22.56-58.82-10.57-26 2-58.24 8.28-2.57 24.55 3.85t23.84 11q7.57 4.56 12.13 7.71a206.2 206.2 0 0 1 109.64 0l10.85-6.85a153.65 153.65 0 0 1 26.26-12.56q15.13-5.71 23.13-3.14 12.84 32.26 2.28 58.24 22.55 24.27 22.56 58.82 0 24.27-5.85 43t-15.12 30a79.82 79.82 0 0 1-23.13 19 116.74 116.74 0 0 1-26.84 11.14 195.29 195.29 0 0 1-29.23 5.07q14.8 12.84 14.81 40.58v60.2a11.37 11.37 0 0 0 3.57 8.56q3.57 3.42 11.28 2 66.24-22 108.07-79.23t41.83-128.91q-.03-59.62-29.43-110.05z\" />\n  </GithubRootSvg>\n)\n\nconst GoogleLogo = () => (\n  <svg\n    // data-sanity-icon=\"google-logo\"\n    width=\"1em\"\n    height=\"1em\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    viewBox=\"0 0 48 48\"\n  >\n    <path\n      d=\"M11 24a13 13 0 0 1 .66-4.08l-7.4-5.66a22.18 22.18 0 0 0 0 19.49l7.4-5.67A13 13 0 0 1 11 24z\"\n      fill=\"#fbbc05\"\n    />\n    <path\n      d=\"M24 11a12.72 12.72 0 0 1 8.1 2.9l6.4-6.4a22 22 0 0 0-34.24 6.75l7.4 5.66A13 13 0 0 1 24 11z\"\n      fill=\"#ea4335\"\n    />\n    <path\n      d=\"M24 37a13 13 0 0 1-12.34-8.92l-7.4 5.66A21.93 21.93 0 0 0 24 46a21 21 0 0 0 14.33-5.48l-7-5.44A13.59 13.59 0 0 1 24 37zm-12.35-8.93l-7.4 5.67 7.4-5.66z\"\n      fill=\"#34a853\"\n    />\n    <path\n      d=\"M44.5 20H24v8.5h11.8a9.91 9.91 0 0 1-4.49 6.58l7 5.44C42.37 36.76 45 31.17 45 24a18.25 18.25 0 0 0-.5-4z\"\n      fill=\"#4285f4\"\n    />\n  </svg>\n)\n\nexport function CustomLogo(props: {provider: AuthProvider}) {\n  const {provider} = props\n\n  return provider.logo ? (\n    <CustomImage src={provider.logo} alt={`Logo for ${provider.name}`} />\n  ) : undefined\n}\n\nexport const providerLogos: Record<string, ComponentType<{provider: AuthProvider}>> = {\n  google: GoogleLogo,\n  github: GithubLogo,\n  // sanity: () => <SanityMonogram data-sanity-icon=\"\" />,\n}\n","/* eslint-disable i18next/no-literal-string */\nimport {type AuthProvider, type AuthProviderResponse, type SanityClient} from '@sanity/client'\nimport {Heading, Stack} from '@sanity/ui'\nimport {useEffect, useState} from 'react'\nimport {type Observable} from 'rxjs'\n\nimport {Button} from '../../../../ui-components'\nimport {LoadingBlock} from '../../../components/loadingBlock'\nimport {type AuthConfig} from '../../../config'\nimport {createHookFromObservableFactory} from '../../../util'\nimport {CustomLogo, providerLogos} from './providerLogos'\nimport {type LoginComponentProps} from './types'\n\ninterface GetProvidersOptions extends AuthConfig {\n  client: SanityClient\n}\n\nasync function getProviders({\n  client,\n  mode,\n  providers: customProviders = [],\n}: GetProvidersOptions): Promise<AuthProvider[]> {\n  // Short-circuit if we're in replace mode without needing the default providers\n  if (mode === 'replace' && Array.isArray(customProviders)) {\n    return customProviders\n  }\n\n  const {providers} = await client.request<AuthProviderResponse>({\n    uri: '/auth/providers',\n  })\n\n  // If a custom reducer function is passed, allow it to modify the default list of providers\n  // any way it wants - eg replace, append, remove etc.\n  if (typeof customProviders === 'function') {\n    return customProviders(providers)\n  }\n\n  // If no providers are specified, use the default list\n  if (customProviders.length === 0) {\n    return providers\n  }\n\n  // -- Note: Deprecated flow below: we now prefer the reducer pattern above --\n  // Replace mode: use the provided list as-is\n  if (mode === 'replace') {\n    return customProviders\n  }\n\n  // Append mode (default):\n  // Append to the list of official providers, but replace any provider that has\n  // the same URL with the custom one (allows customizing the title, name)\n  return providers\n    .filter((official) => customProviders.some((provider) => provider.url !== official.url))\n    .concat(customProviders)\n}\n\ninterface CreateLoginComponentOptions extends AuthConfig {\n  getClient: () => Observable<SanityClient>\n}\n\ninterface CreateHrefForProviderOptions {\n  redirectPath: string\n  loginMethod: AuthConfig['loginMethod']\n  projectId: string\n  url: string\n}\n\nfunction createHrefForProvider({\n  loginMethod = 'dual',\n  projectId,\n  url,\n  redirectPath,\n}: CreateHrefForProviderOptions) {\n  const params = new URLSearchParams()\n  params.set('origin', `${window.location.origin}${redirectPath}`)\n  params.set('projectId', projectId)\n\n  // Setting `type=token` will return the sid as part of the _query_, which may end up in\n  // server access logs and similar. Instead, use `withSid=true` to return the sid as part\n  // of the _hash_ instead, which is only accessible to the client. Other auth types will\n  // use the `type` parameter - `dual` will automatically use the hash, so do not need the\n  // additional parameter.\n  if (loginMethod === 'token') {\n    params.set('withSid', 'true')\n  } else {\n    params.set('type', loginMethod)\n  }\n  return `${url}?${params}`\n}\n\nexport function createLoginComponent({\n  getClient,\n  loginMethod,\n  redirectOnSingle,\n  ...providerOptions\n}: CreateLoginComponentOptions) {\n  const useClient = createHookFromObservableFactory(getClient)\n\n  function LoginComponent({projectId, ...props}: LoginComponentProps) {\n    const redirectPath = props.redirectPath || props.basePath || '/'\n\n    const [providers, setProviders] = useState<AuthProvider[] | null>(null)\n    const [error, setError] = useState<unknown>(null)\n    if (error) throw error\n\n    const [client] = useClient()\n\n    useEffect(() => {\n      if (!client) return\n\n      getProviders({client, ...providerOptions})\n        .then(setProviders)\n        .catch(setError)\n    }, [client])\n\n    // only create a direct URL if `redirectOnSingle` is true and there is only\n    // one provider available\n    const redirectUrlForRedirectOnSingle =\n      redirectOnSingle &&\n      providers?.length === 1 &&\n      providers?.[0] &&\n      createHrefForProvider({\n        loginMethod,\n        projectId,\n        url: providers[0].url,\n        redirectPath,\n      })\n\n    const loading = !providers || redirectUrlForRedirectOnSingle\n\n    useEffect(() => {\n      if (redirectUrlForRedirectOnSingle) {\n        window.location.href = redirectUrlForRedirectOnSingle\n      }\n    }, [redirectUrlForRedirectOnSingle])\n\n    if (loading) {\n      return <LoadingBlock showText />\n    }\n\n    return (\n      <Stack space={4}>\n        <Heading align=\"center\" size={1}>\n          Choose login provider\n        </Heading>\n\n        <Stack space={2}>\n          {providers.map((provider, index) => (\n            <Button\n              // eslint-disable-next-line react/no-array-index-key\n              key={`${provider.url}_${index}`}\n              as=\"a\"\n              icon={providerLogos[provider.name] || <CustomLogo provider={provider} />}\n              href={createHrefForProvider({\n                loginMethod,\n                projectId,\n                url: provider.url,\n                redirectPath,\n              })}\n              mode=\"ghost\"\n              size=\"large\"\n              text={provider.title}\n            />\n          ))}\n        </Stack>\n      </Stack>\n    )\n  }\n\n  return LoginComponent\n}\n","// Trailing '&' included so we can replace `#sid=foo&bar=baz` with `#bar=baz`\nconst sidPattern = /sid=([^&]{20,})&?/\n\nfunction consumeSessionId(): string | null {\n  // Are we in a browser-like environment?\n  if (typeof window === 'undefined' || typeof window.location !== 'object') {\n    return null\n  }\n\n  // Does the hash contain a valid session ID?\n  const hash = window.location.hash\n\n  // The first element will be the entire match, including `sid=` - we only care about\n  // the first _group_, being the actual _value_ of the parameter, thus the leading comma\n  const [, sidParam] = hash.match(sidPattern) || []\n  if (!sidParam) {\n    return null\n  }\n\n  // Remove the parameter from the URL\n  const newHash = hash.replace(sidPattern, '')\n  const newUrl = new URL(window.location.href)\n  newUrl.hash = newHash.length > 1 ? newHash : ''\n  history.replaceState(null, '', newUrl)\n\n  return sidParam\n}\n\n// this module consumes the session ID as a side-effect as soon as its loaded\n// to remove the session ID from the history (vs waiting to remove the sid hash\n// until react mounts). Once it is consumed and loaded once, we don't want to\n// keep it in-memory here, so we clear it out.\nlet sessionId = consumeSessionId()\nexport const getSessionId = (): string | null => {\n  const id = sessionId\n  if (id) {\n    sessionId = null\n  }\n  return id\n}\n","import {type CookielessCompatibleLoginMethod, type LoginMethod} from '../../../../config'\nimport {isRecord} from '../../../../util'\nimport {type AuthStore} from '../types'\n\n/**\n * Duck-type check for whether or not this looks like an auth store\n *\n * @param maybeStore - Item to check if matches the AuthStore interface\n * @returns True if auth store, false otherwise\n * @internal\n */\nexport function isAuthStore(maybeStore: unknown): maybeStore is AuthStore {\n  return (\n    isRecord(maybeStore) &&\n    'state' in maybeStore &&\n    isRecord(maybeStore.state) &&\n    'subscribe' in maybeStore.state &&\n    typeof maybeStore.state.subscribe === 'function'\n  )\n}\n\n/**\n * Check whether the provided login method is compatible with cookieless auth, e.g. whether any\n * authentication token found in localStorage should be acknowledged.\n *\n * @internal\n */\nexport function isCookielessCompatibleLoginMethod(\n  loginMethod: LoginMethod,\n): loginMethod is CookielessCompatibleLoginMethod {\n  const cookielessCompatibleLoginMethods = ['dual', 'token']\n  return cookielessCompatibleLoginMethods.includes(loginMethod as CookielessCompatibleLoginMethod)\n}\n","import {\n  type ClientConfig as SanityClientConfig,\n  createClient as createSanityClient,\n  type SanityClient,\n} from '@sanity/client'\nimport {isEqual, memoize} from 'lodash'\nimport {defer} from 'rxjs'\nimport {distinctUntilChanged, map, shareReplay, startWith, switchMap} from 'rxjs/operators'\n\nimport {type AuthConfig} from '../../../config'\nimport {CorsOriginError} from '../cors'\nimport {createBroadcastChannel} from './createBroadcastChannel'\nimport {createLoginComponent} from './createLoginComponent'\nimport {getSessionId} from './sessionId'\nimport * as storage from './storage'\nimport {type AuthState, type AuthStore} from './types'\nimport {isCookielessCompatibleLoginMethod} from './utils/asserters'\n\n/** @internal */\nexport interface AuthStoreOptions extends AuthConfig {\n  clientFactory?: (options: SanityClientConfig) => SanityClient\n  projectId: string\n  dataset: string\n}\n\nconst getStorageKey = (projectId: string) => {\n  // Project ID is part of the localStorage key so that different projects can\n  // store their separate tokens, and it's easier to do book keeping.\n  if (!projectId) throw new Error('Invalid project id')\n  return `__studio_auth_token_${projectId}`\n}\n\nconst getToken = (projectId: string): string | null => {\n  try {\n    const item = storage.getItem(getStorageKey(projectId))\n    if (item) {\n      const {token} = JSON.parse(item) as {token: string}\n      if (token && typeof token === 'string') {\n        return token\n      }\n    }\n  } catch (err) {\n    console.error(err)\n  }\n  return null\n}\n\nconst clearToken = (projectId: string): void => {\n  try {\n    storage.removeItem(getStorageKey(projectId))\n  } catch (err) {\n    console.error(err)\n  }\n}\n\nconst saveToken = ({token, projectId}: {token: string; projectId: string}): void => {\n  try {\n    storage.setItem(\n      getStorageKey(projectId),\n      JSON.stringify({token, time: new Date().toISOString()}),\n    )\n  } catch (err) {\n    console.error(err)\n  }\n}\n\nconst getCurrentUser = async (\n  client: SanityClient,\n  broadcastToken: (token: string | null) => void,\n) => {\n  try {\n    const user = await client.request({\n      uri: '/users/me',\n      tag: 'users.get-current',\n    })\n\n    // if the user came back with an id, assume it's a full CurrentUser\n    return typeof user?.id === 'string' ? user : null\n  } catch (err) {\n    // 401 means the user had some kind of credentials, but failed to authenticate,\n    // we should clear any local token in this case and treat it as if the used was\n    // logged out\n    if (err.statusCode === 401) {\n      clearToken(client.config().projectId || '')\n      broadcastToken(null)\n      return null\n    }\n\n    // Request failed for a non-auth reason, see if this was a CORS-error by\n    // checking the `/ping` endpoint, which allows all origins\n    const invalidCorsConfig = await client\n      .request({uri: '/ping', withCredentials: false, tag: 'cors-check'})\n      .then(\n        () => true, // Request succeeded, so likely the CORS origin is disallowed\n        () => false, // Request failed, so likely a network error of some kind\n      )\n\n    if (invalidCorsConfig) {\n      // Throw a specific error on CORS-errors, to allow us to show a customized dialog\n      throw new CorsOriginError({projectId: client.config()?.projectId})\n    }\n\n    // Some non-CORS error - is it one of those undefinable network errors?\n    if (err.isNetworkError && !err.message && err.request && err.request.url) {\n      const host = new URL(err.request.url).host\n      throw new Error(`Unknown network error attempting to reach ${host}`)\n    }\n\n    // Some other error, just throw it\n    throw err\n  }\n}\n\n/**\n * @internal\n */\nexport function _createAuthStore({\n  clientFactory: clientFactoryOption,\n  projectId,\n  dataset,\n  apiHost,\n  loginMethod = 'dual',\n  ...providerOptions\n}: AuthStoreOptions): AuthStore {\n  // this broadcast channel receives either a token as a `string` or `null`.\n  // a new client will be created from it, otherwise, it'll only trigger a retry\n  // for cookie-based auth\n  const {broadcast, messages} = createBroadcastChannel<string | null>(`dual_mode_auth_${projectId}`)\n\n  const clientFactory = clientFactoryOption ?? createSanityClient\n\n  // // TODO: there is currently a bug where the AuthBoundary flashes the\n  // // `NotAuthenticatedComponent` on the first load after a login with\n  // // cookieless mode. A potential solution to fix this bug is to delay\n  // // emitting `state$` until the session ID has been converted to a token\n  // const firstMessage = messages.pipe(first())\n\n  const token$ = messages.pipe(\n    startWith(isCookielessCompatibleLoginMethod(loginMethod) ? getToken(projectId) : null),\n  )\n\n  // Allow configuration of `apiHost` through source configuration\n  const hostOptions: {apiHost?: string} = {}\n  if (apiHost) {\n    hostOptions.apiHost = apiHost\n    // @ts-expect-error: __SANITY_STAGING__ is a global env variable set by the vite config\n  } else if (typeof __SANITY_STAGING__ !== 'undefined' && __SANITY_STAGING__ === true) {\n    /* __SANITY_STAGING__ is a global variable set by the vite config */\n    hostOptions.apiHost = 'https://api.sanity.work'\n  }\n\n  const state$ = token$.pipe(\n    // // see above\n    // debounce(() => firstMessage),\n    map((token) =>\n      clientFactory({\n        projectId,\n        dataset,\n        apiVersion: '2021-06-07',\n        useCdn: false,\n        ...(token ? {token} : {withCredentials: true}),\n        perspective: 'raw',\n        requestTagPrefix: 'sanity.studio',\n        ignoreBrowserTokenWarning: true,\n        allowReconfigure: false,\n        ...hostOptions,\n      }),\n    ),\n    switchMap((client) =>\n      defer(async (): Promise<AuthState> => {\n        const currentUser = await getCurrentUser(client, broadcast)\n\n        return {\n          currentUser,\n          client,\n          authenticated: !!currentUser,\n        }\n      }),\n    ),\n    distinctUntilChanged((prev, next) =>\n      // Only notify subscribers if the the currentUser object has changed.\n      // Using isEqual is OK since the currentUser object being a small data structure.\n      isEqual(prev.currentUser, next.currentUser),\n    ),\n    shareReplay(1),\n  )\n\n  async function handleCallbackUrl() {\n    const sessionId = getSessionId()\n\n    if (!sessionId) {\n      broadcast(loginMethod === 'cookie' ? null : getToken(projectId))\n      return\n    }\n\n    const requestClient = clientFactory({\n      projectId,\n      dataset,\n      useCdn: true,\n      withCredentials: true,\n      apiVersion: '2021-06-07',\n      requestTagPrefix: 'sanity.studio',\n      ...hostOptions,\n    })\n\n    let currentUser\n    if (loginMethod === 'dual' || loginMethod === 'cookie') {\n      // try to get the current user by using the cookie credentials\n      currentUser = await getCurrentUser(requestClient, broadcast)\n    }\n\n    // If we have a user, or token authentication is explicitly disallowed (`cookie` mode),\n    // then we don't need/want to fetch a token\n    if (currentUser || loginMethod === 'cookie') {\n      // if that worked, then we don't need to fetch a token\n      broadcast(null)\n      return\n    }\n\n    // If we allow using token authentication, we should try to trade the session ID\n    // for a token and store it locally for subsequent use\n    const token = await tradeSessionForToken(requestClient, sessionId)\n    broadcast(token ?? null)\n  }\n\n  async function tradeSessionForToken(client: SanityClient, sessionId: string): Promise<string> {\n    const {token} = await client.request<{token: string}>({\n      method: 'GET',\n      uri: `/auth/fetch`,\n      query: {sid: sessionId},\n      tag: 'auth.fetch-token',\n    })\n\n    saveToken({token, projectId})\n    return token\n  }\n\n  async function logout() {\n    const token = getToken(projectId)\n    const requestClient = clientFactory({\n      projectId,\n      dataset,\n      useCdn: true,\n      ...(token ? {token} : {withCredentials: true}),\n      apiVersion: '2021-06-07',\n      requestTagPrefix: 'sanity.studio',\n      ...hostOptions,\n    })\n\n    clearToken(projectId)\n    await requestClient.request<void>({uri: '/auth/logout', method: 'POST'})\n    broadcast(null)\n  }\n\n  const LoginComponent = createLoginComponent({\n    ...providerOptions,\n    getClient: () => state$.pipe(map((state) => state.client)),\n    loginMethod,\n  })\n\n  return {\n    handleCallbackUrl,\n    token: token$,\n    state: state$,\n    LoginComponent,\n    logout,\n  }\n}\n\nfunction hash(value: unknown): string {\n  if (typeof value !== 'object' || value === null) return `${value}`\n\n  // note: this code path works for arrays as well as objects\n  return JSON.stringify(\n    Object.fromEntries(\n      Object.entries(value)\n        .sort(([a], [b]) => a.localeCompare(b, 'en'))\n        .map(([k, v]) => [k, hash(v)]),\n    ),\n  )\n}\n\n/**\n * @internal\n */\nexport const createAuthStore = memoize(_createAuthStore, hash)\n","import {type SanityClient} from '@sanity/client'\nimport {type CurrentUser} from '@sanity/types'\nimport {of} from 'rxjs'\n\nimport {type AuthStore} from './types'\n\n/** @internal */\nexport interface MockAuthStoreOptions {\n  currentUser: CurrentUser | null\n  client: SanityClient\n}\n\n/**\n * Creates a mock `AuthStore` (for testing) that emits an `AuthState` derived\n * from the `client` and `currentUser` given.\n *\n * @internal\n */\nexport function createMockAuthStore({client, currentUser = null}: MockAuthStoreOptions): AuthStore {\n  return {\n    state: of({authenticated: true, client, currentUser}),\n  }\n}\n","/** @internal */\nexport function getProviderTitle(provider?: string): string | undefined {\n  if (provider === 'google') {\n    return 'Google'\n  }\n\n  if (provider === 'github') {\n    return 'GitHub'\n  }\n\n  if (provider === 'sanity') {\n    return 'Sanity'\n  }\n\n  if (provider?.startsWith('saml-')) {\n    return 'SAML/SSO'\n  }\n\n  return undefined\n}\n","import {type Observable, type OperatorFunction} from 'rxjs'\nimport {catchError, tap} from 'rxjs/operators'\n\ntype Selector<T, K> = (error: any, attemptNo: number, caught: Observable<T>) => Observable<K>\n\nexport function catchWithCount<T, K = T>(selector: Selector<T, K>): OperatorFunction<T, K>\n\nexport function catchWithCount<T, K = T>(selector: Selector<T, K>) {\n  return (input$: Observable<T>) => {\n    let errors: any[] = []\n\n    const errorOp: OperatorFunction<any, any> = catchError((err, caught: Observable<T>) => {\n      errors.push(err)\n      return selector(err, errors.length, caught).pipe(errorOp)\n    })\n    return input$.pipe(\n      tap(() => {\n        errors = []\n      }),\n      errorOp,\n    )\n  }\n}\n","import {type BifurClient} from '@sanity/bifur-client'\nimport {observableCallback} from 'observable-callback'\nimport {concat, fromEvent, merge, NEVER, type Observable, of, throwError, timer} from 'rxjs'\nimport {map, mergeMapTo, startWith, take, takeUntil} from 'rxjs/operators'\n\nimport {catchWithCount} from './utils/catchWithCount'\n\n/** @internal */\nexport interface ConnectionStatusStore {\n  connectionStatus$: Observable<ConnectionStatus>\n}\n\nconst onOnline$ = typeof window === 'undefined' ? of({}) : fromEvent(window, 'online')\nconst onOffline$ = typeof window === 'undefined' ? of({}) : fromEvent(window, 'offline')\n\nconst expBackoff = (retryCount: number) => Math.pow(2, retryCount) * 100\n\n/** @internal */\nexport type ConnectingStatus = {\n  type: 'connecting'\n}\n\n/** @internal */\nexport type ErrorStatus = {\n  type: 'error'\n  error: Error\n  attemptNo: number\n  isOffline: boolean\n  retryAt: Date\n}\n\n/** @internal */\nexport type RetryingStatus = {\n  type: 'retrying'\n}\n\n/** @internal */\nexport type ConnectedStatus = {type: 'connected'; lastHeartbeat: Date}\n\n/** @internal */\nexport const CONNECTING: ConnectingStatus = {type: 'connecting'}\n\n/** @internal */\nexport type ConnectionStatus = ConnectingStatus | ErrorStatus | ConnectedStatus | RetryingStatus\n\nconst _callback = observableCallback()\n\nconst onRetry$ = _callback[0]\n\n/** @internal */\nexport const onRetry = _callback[1]\n\nconst createErrorStatus = ({\n  error,\n  isOffline,\n  attemptNo,\n  retryAt,\n}: {\n  error: Error\n  isOffline: boolean\n  attemptNo: number\n  retryAt: Date\n}): ErrorStatus => ({\n  type: 'error',\n  error,\n  attemptNo,\n  isOffline,\n  retryAt,\n})\n\n/** @internal */\nexport interface ConnectionStatusStoreOptions {\n  bifur: BifurClient\n}\n\n/**\n * This is the beginning of what should be the data store tracking connection status in the Sanity studio.\n *\n * @internal\n */\nexport function createConnectionStatusStore({\n  bifur,\n}: ConnectionStatusStoreOptions): ConnectionStatusStore {\n  const connectionStatus$: Observable<ConnectionStatus> = merge(\n    bifur.heartbeats,\n    onOffline$.pipe(mergeMapTo(throwError(new Error('The browser went offline')))),\n  ).pipe(\n    map((ts): ConnectionStatus => ({type: 'connected', lastHeartbeat: ts})),\n    catchWithCount((error, successiveErrorsCount, caught) => {\n      const timeUntilRetry = Math.min(1000 * 240, expBackoff(successiveErrorsCount))\n      const retryAt = new Date(new Date().getTime() + timeUntilRetry)\n      const expiry$ = timer(retryAt)\n      const isOffline = !navigator.onLine\n      const initialErrorStatus = createErrorStatus({\n        error,\n        retryAt,\n        isOffline,\n        attemptNo: successiveErrorsCount,\n      })\n\n      const triggerRetry$ = NEVER.pipe(\n        takeUntil(isOffline ? onOnline$ : merge(expiry$, onOnline$, onRetry$)),\n      )\n\n      return concat(of(initialErrorStatus), triggerRetry$.pipe(take(1)), caught)\n    }),\n    startWith(CONNECTING),\n  )\n\n  return {connectionStatus$}\n}\n","import {type SchemaType} from '@sanity/types'\n\nimport {type ArrayOfObjectsFormNode, type FieldMember, type ObjectMember} from '../../store'\n\n/**\n * @internal\n */\nexport function isBlockType(type: SchemaType): boolean {\n  if (type.type) {\n    return isBlockType(type.type)\n  }\n\n  return type.name === 'block'\n}\n\n/**\n * @internal\n */\nexport function isObjectFieldMember(\n  member: ObjectMember,\n): member is FieldMember<ArrayOfObjectsFormNode> {\n  return member.kind === 'field' && member.field.schemaType.jsonType === 'object'\n}\n\n/**\n * @internal\n */\nexport function isArrayOfObjectsFieldMember(\n  member: ObjectMember,\n): member is FieldMember<ArrayOfObjectsFormNode> {\n  return member.kind === 'field' && member.field.schemaType.jsonType === 'array'\n}\n","const IGNORE_KEYS = ['_key', '_type', '_weak']\n\nexport function isEmptyItem(value: Record<string, unknown>): value is Record<never, never> {\n  return Object.keys(value).every((key) => IGNORE_KEYS.includes(key))\n}\n","import {type SchemaType} from '@sanity/types'\n\nfunction isPlainObject(obj: unknown): boolean {\n  return obj !== null && typeof obj === 'object' && obj.constructor === Object\n}\n\nfunction isSchemaType(obj: unknown): obj is SchemaType {\n  if (typeof obj !== 'object') return false\n  if (!obj) return false\n  if (!('jsonType' in obj) || typeof obj.jsonType !== 'string') return false\n  if (!('name' in obj) || typeof obj.name !== 'string') return false\n  return true\n}\n\ninterface ImmutableReconcile<T> {\n  (prev: T | null, curr: T): T\n}\n\nexport interface CreateImmutableReconcileOptions {\n  decorator?: <T>(fn: ImmutableReconcile<T>) => ImmutableReconcile<T>\n}\n\nfunction identity<T>(t: T) {\n  return t\n}\n\nexport function createImmutableReconcile({\n  decorator = identity,\n}: CreateImmutableReconcileOptions = {}): <T>(prev: T | null, curr: T) => T {\n  const immutableReconcile = decorator(function _immutableReconcile<T>(prev: T | null, curr: T): T {\n    if (prev === curr) return curr\n    if (prev === null) return curr\n    if (typeof prev !== 'object' || typeof curr !== 'object') return curr\n\n    if (Array.isArray(prev) && Array.isArray(curr)) {\n      if (prev.length !== curr.length) return curr\n\n      const reconciled = curr.map((item, index) => immutableReconcile(prev[index], item))\n      if (reconciled.every((item, index) => item === prev[index])) return prev\n      return reconciled as T\n    }\n\n    // skip these, they're recursive structures and will cause stack overflows\n    // they're stable anyway\n    if (isSchemaType(prev) || isSchemaType(curr)) return curr\n\n    // skip these as well\n    if (!isPlainObject(prev) || !isPlainObject(curr)) return curr\n\n    const prevObj = prev as Record<string, unknown>\n    const currObj = curr as Record<string, unknown>\n\n    const reconciled: Record<string, unknown> = {}\n    let changed = false\n\n    const enumerableKeys = new Set(Object.keys(currObj))\n\n    for (const key of Object.getOwnPropertyNames(currObj)) {\n      if (key in prevObj) {\n        const reconciledValue = immutableReconcile(prevObj[key], currObj[key])\n        if (enumerableKeys.has(key)) {\n          reconciled[key] = reconciledValue\n        } else {\n          Object.defineProperty(reconciled, key, {\n            value: reconciledValue,\n            enumerable: false,\n          })\n        }\n        changed = changed || reconciledValue !== prevObj[key]\n      } else {\n        if (enumerableKeys.has(key)) {\n          reconciled[key] = currObj[key]\n        } else {\n          Object.defineProperty(reconciled, key, {\n            value: currObj[key],\n            enumerable: false,\n          })\n        }\n        changed = true\n      }\n    }\n\n    // Check if any keys were removed\n    for (const key of Object.getOwnPropertyNames(prevObj)) {\n      if (!(key in currObj)) {\n        changed = true\n        break\n      }\n    }\n\n    return changed ? (reconciled as T) : prev\n  })\n\n  return immutableReconcile\n}\n\nexport const immutableReconcile = createImmutableReconcile()\n","/* eslint-disable react/no-unused-prop-types */\n\nimport {type Path} from '@sanity/types'\nimport {isEqual, startsWith} from '@sanity/util/paths'\nimport {type ReactNode, useContext, useRef} from 'react'\nimport {PresenceContext} from 'sanity/_singletons'\n\nimport {type FormNodePresence} from '../../../presence'\nimport {immutableReconcile} from '../../store/utils/immutableReconcile'\n\nexport function PresenceProvider(props: {presence: FormNodePresence[]; children: ReactNode}) {\n  return (\n    <PresenceContext.Provider value={props.presence}>{props.children}</PresenceContext.Provider>\n  )\n}\nPresenceProvider.displayName = 'PresenceProvider'\n\nexport function useFormFieldPresence(): FormNodePresence[] {\n  const ctx = useContext(PresenceContext)\n  if (!ctx) {\n    throw new Error('Form context not provided')\n  }\n  return ctx\n}\n\n/**\n * @alpha\n * @param path - the path to return child presence for\n * @param inclusive - whether to include presence for the current path (default false)\n */\nexport function useChildPresence(path: Path, inclusive?: boolean): FormNodePresence[] {\n  const presence = useFormFieldPresence()\n  const prev = useRef(presence)\n  const next = immutableReconcile(\n    prev.current,\n    presence.filter(\n      (item) => startsWith(path, item.path) && (inclusive || !isEqual(path, item.path)),\n    ),\n  )\n  prev.current = next\n  return next\n}\n","import {useContext} from 'react'\nimport {FormBuilderContext} from 'sanity/_singletons'\n\nimport {type FormBuilderContextValue} from './FormBuilderContext'\n\n/**\n *\n * @hidden\n * @beta\n */\nexport function useFormBuilder(): FormBuilderContextValue {\n  const formBuilder = useContext(FormBuilderContext)\n\n  if (!formBuilder) {\n    throw new Error('FormBuilder: missing context value')\n  }\n\n  return formBuilder\n}\n","import {ErrorOutlineIcon, InfoOutlineIcon, WarningOutlineIcon} from '@sanity/icons'\nimport {type FormNodeValidation} from '@sanity/types'\nimport {Box, Flex, Stack, Text, type Theme} from '@sanity/ui'\nimport {css, styled} from 'styled-components'\n\nimport {type PortableTextMarker, type RenderCustomMarkers} from '../../../types'\nimport {useFormBuilder} from '../../../useFormBuilder'\n\nexport interface MarkersProps {\n  markers: PortableTextMarker[]\n  validation: FormNodeValidation[]\n  renderCustomMarkers?: RenderCustomMarkers\n}\n\nconst getIcon = (level: 'error' | 'warning' | 'info') => {\n  if (level === 'error') {\n    return <ErrorOutlineIcon />\n  }\n\n  if (level === 'warning') {\n    return <WarningOutlineIcon />\n  }\n\n  return <InfoOutlineIcon />\n}\n\nconst IconText = styled(Text)(({theme}: {theme: Theme}) => {\n  return css`\n    &[data-info] {\n      color: ${theme.sanity.color.muted.primary.enabled.fg};\n    }\n\n    &[data-warning] {\n      color: ${theme.sanity.color.muted.caution.enabled.fg};\n    }\n\n    &[data-error] {\n      color: ${theme.sanity.color.muted.critical.enabled.fg};\n    }\n  `\n})\n\nexport function DefaultMarkers(props: MarkersProps) {\n  const {markers, validation, renderCustomMarkers} = props\n  const {CustomMarkers} = useFormBuilder().__internal.components\n\n  if (markers.length === 0 && validation.length === 0) {\n    return null\n  }\n\n  return (\n    <Stack space={1}>\n      {validation.length > 0 &&\n        validation.map(({message, level}, index) => (\n          // eslint-disable-next-line react/no-array-index-key\n          <Flex key={`validationItem-${index}`}>\n            <Box marginRight={2} marginBottom={index + 1 === validation.length ? 0 : 2}>\n              <IconText\n                size={1}\n                data-error={level === 'error' ? '' : undefined}\n                data-warning={level === 'warning' ? '' : undefined}\n                data-info={level === 'info' ? '' : undefined}\n              >\n                {getIcon(level)}\n              </IconText>\n            </Box>\n            <Box>\n              <Text size={1}>{message || 'Error'}</Text>\n            </Box>\n          </Flex>\n        ))}\n\n      {markers.length > 0 && (\n        <Box marginTop={validation.length > 0 ? 3 : 0}>\n          {renderCustomMarkers && renderCustomMarkers(markers)}\n          {!renderCustomMarkers && <CustomMarkers markers={markers} />}\n        </Box>\n      )}\n    </Stack>\n  )\n}\n","/* eslint-disable react/no-unused-prop-types */\n\nimport {type FormNodeValidation, type Path, type ValidationMarker} from '@sanity/types'\nimport {isEqual, startsWith} from '@sanity/util/paths'\nimport {type ReactNode, useContext, useMemo} from 'react'\nimport {ValidationContext} from 'sanity/_singletons'\n\nexport function ValidationProvider(props: {validation: ValidationMarker[]; children: ReactNode}) {\n  return (\n    <ValidationContext.Provider value={props.validation}>\n      {props.children}\n    </ValidationContext.Provider>\n  )\n}\n\nexport function useValidationMarkers(): ValidationMarker[] {\n  const ctx = useContext(ValidationContext)\n  if (!ctx) {\n    throw new Error('Form context not provided')\n  }\n  return ctx\n}\n\n/**\n * @alpha\n * @param path - the path to return child validation for\n * @param inclusive - whether to include validation for the current path (default false)\n */\nexport function useChildValidation(path: Path, inclusive = false): FormNodeValidation[] {\n  const validation = useValidationMarkers()\n  return useMemo(\n    () =>\n      validation\n        .filter((item) => startsWith(path, item.path) && (inclusive || !isEqual(path, item.path)))\n        .map((marker) => ({\n          message: marker.message,\n          level: marker.level,\n          path: marker.path,\n        })) as FormNodeValidation[],\n    [inclusive, path, validation],\n  )\n}\n","import {type FormNodeValidation} from '@sanity/types'\nimport {useMemo, useRef} from 'react'\n\nimport {EMPTY_ARRAY} from '../../../../util'\nimport {type BaseFormNode} from '../../../store'\nimport {immutableReconcile} from '../../../store/utils/immutableReconcile'\nimport {useChildValidation} from '../../../studio/contexts/Validation'\nimport {isBlockType} from '../_helpers'\n\nconst NONEXISTENT_PATH = ['@@_NONEXISTENT_PATH_@@']\n\n/** @internal */\nexport function useMemberValidation(member: BaseFormNode | undefined) {\n  const prev = useRef<FormNodeValidation[] | null>(null)\n  const memberValidation =\n    member?.validation && member.validation.length > 0 ? member.validation : EMPTY_ARRAY\n  const childValidation = useChildValidation(member?.path || NONEXISTENT_PATH)\n\n  const validation = useMemo(\n    () =>\n      member?.schemaType && isBlockType(member?.schemaType)\n        ? memberValidation\n        : memberValidation.concat(childValidation),\n    [childValidation, member, memberValidation],\n  )\n\n  const [hasError, hasWarning, hasInfo] = useMemo(\n    () => [\n      validation.filter((v) => v.level === 'error').length > 0,\n      validation.filter((v) => v.level === 'warning').length > 0,\n      validation.filter((v) => v.level === 'info').length > 0,\n    ],\n    [validation],\n  )\n\n  const reconciled = immutableReconcile(prev.current, validation)\n  prev.current = reconciled\n\n  return useMemo(() => {\n    return {\n      validation: reconciled,\n      hasError,\n      hasWarning,\n      hasInfo,\n    }\n  }, [reconciled, hasError, hasWarning, hasInfo])\n}\n","import {type Path} from '@sanity/types'\nimport {isEqual} from '@sanity/util/paths'\nimport {useContext, useMemo} from 'react'\nimport {PortableTextMarkersContext} from 'sanity/_singletons'\n\nimport {type PortableTextMarker} from '../../../types'\n\nexport function usePortableTextMarkers(path: Path): PortableTextMarker[] {\n  const ctx = useContext(PortableTextMarkersContext)\n  if (!ctx) {\n    throw new Error('Form context not provided')\n  }\n  const markers = useMemo(() => ctx.filter((m) => isEqual(m.path, path)), [ctx, path])\n  return markers\n}\n","/* eslint-disable camelcase */\n\nimport {AvatarStack} from '@sanity/ui'\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {useMemo} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {Tooltip, type TooltipProps} from '../../ui-components'\nimport {UserAvatar} from '../components'\nimport {type DocumentPresence} from '../store'\nimport {isNonNullable} from '../util'\n\n/** @internal */\nexport interface DocumentPreviewPresenceProps {\n  presence: Omit<DocumentPresence, 'path'>[]\n}\n\nconst PRESENCE_MENU_POPOVER_PROPS: TooltipProps = {\n  portal: true,\n}\n\nconst AvatarStackBox = styled.div((props) => {\n  const {space} = getTheme_v2(props.theme)\n\n  return css`\n    margin: ${0 - space[1]}px;\n  `\n})\n\nconst getTooltipText = (presence: Omit<DocumentPresence, 'path'>[]) => {\n  if (presence.length === 1) {\n    return `${presence[0].user.displayName} is editing this document`\n  }\n\n  if (presence.length > 1) {\n    return `${presence.length} people are editing this document right now`\n  }\n\n  return undefined\n}\n\n/** @internal */\nexport function DocumentPreviewPresence(props: DocumentPreviewPresenceProps) {\n  const {presence} = props\n\n  const uniqueUsers = useMemo(\n    () =>\n      Array.from(new Set(presence.map((a) => a.user.id)))\n        .map((id) => {\n          return presence.find((a) => a.user.id === id)\n        })\n        .filter(isNonNullable),\n    [presence],\n  )\n\n  const tooltipContent = useMemo(() => getTooltipText(uniqueUsers), [uniqueUsers])\n\n  return (\n    <Tooltip content={tooltipContent} {...PRESENCE_MENU_POPOVER_PROPS}>\n      <AvatarStackBox>\n        <AvatarStack maxLength={2} aria-label={getTooltipText(uniqueUsers)} size={0}>\n          {uniqueUsers.map((item) => (\n            <UserAvatar key={item.user.id} size={0} user={item.user} />\n          ))}\n        </AvatarStack>\n      </AvatarStackBox>\n    </Tooltip>\n  )\n}\n","import {type User} from '@sanity/types'\nimport {\n  Avatar,\n  type AvatarPosition,\n  type AvatarProps,\n  type AvatarSize,\n  type AvatarStatus,\n  Skeleton,\n} from '@sanity/ui'\n// eslint-disable-next-line camelcase\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {type ForwardedRef, forwardRef, useState} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {Tooltip} from '../../../ui-components'\nimport {useUser} from '../../store'\nimport {useUserColor} from '../../user-color'\nimport {isRecord} from '../../util'\n\ninterface AvatarSkeletonProps {\n  $size?: AvatarSize\n}\n\n/**\n * A loading skeleton element representing a user avatar\n * @beta\n */\nexport const AvatarSkeleton = styled(Skeleton)<AvatarSkeletonProps>((props) => {\n  const theme = getTheme_v2(props.theme)\n  const size = props.$size ?? 1\n  return css`\n    border-radius: 50%;\n    width: ${theme.avatar.sizes[size].size}px;\n    height: ${theme.avatar.sizes[size].size}px;\n  `\n})\n\n/**\n * @hidden\n * @beta */\nexport interface UserAvatarProps {\n  __unstable_hideInnerStroke?: AvatarProps['__unstable_hideInnerStroke']\n  animateArrowFrom?: AvatarPosition\n  position?: AvatarPosition\n  size?: AvatarSize\n  status?: AvatarStatus\n  tone?: 'navbar'\n  user: User | string\n  withTooltip?: boolean\n}\n\nconst symbols = /[^\\p{Alpha}\\p{White_Space}]/gu\nconst whitespace = /\\p{White_Space}+/u\n\nconst LEGACY_TO_UI_AVATAR_SIZES: {[key: string]: AvatarSize | undefined} = {\n  small: 0,\n  medium: 1,\n  large: 2,\n}\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\n/**\n * @hidden\n * @beta */\nexport function UserAvatar(props: UserAvatarProps) {\n  const {user, withTooltip, ...restProps} = props\n\n  if (isRecord(user)) {\n    if (withTooltip) {\n      return <TooltipUserAvatar {...restProps} user={user as User} />\n    }\n\n    return <StaticUserAvatar {...restProps} user={user as User} />\n  }\n\n  return <UserAvatarLoader {...props} user={user as string} />\n}\n\nfunction TooltipUserAvatar(props: Omit<UserAvatarProps, 'user'> & {user: User}) {\n  const {\n    user: {displayName},\n  } = props\n\n  return (\n    <Tooltip content={displayName} placement=\"top\" portal>\n      <div style={{display: 'inline-block'}}>\n        <StaticUserAvatar {...props} />\n      </div>\n    </Tooltip>\n  )\n}\n\nconst StaticUserAvatar = forwardRef(function StaticUserAvatar(\n  props: Omit<UserAvatarProps, 'user'> & {user: User},\n  ref: ForwardedRef<HTMLDivElement>,\n) {\n  const {user, animateArrowFrom, position, size, status, tone, ...restProps} = props\n  const [imageLoadError, setImageLoadError] = useState<null | Error>(null)\n  const userColor = useUserColor(user.id)\n  const imageUrl = imageLoadError ? undefined : user?.imageUrl\n\n  return (\n    <Avatar\n      __unstable_hideInnerStroke\n      animateArrowFrom={animateArrowFrom}\n      arrowPosition={position}\n      color={userColor.name}\n      data-legacy-tone={tone}\n      initials={user?.displayName && nameToInitials(user.displayName)}\n      src={imageUrl}\n      onImageLoadError={setImageLoadError}\n      ref={ref}\n      size={typeof size === 'string' ? LEGACY_TO_UI_AVATAR_SIZES[size] : size}\n      status={status}\n      title={user?.displayName}\n      {...restProps}\n    />\n  )\n})\n\nfunction UserAvatarLoader({user, ...loadedProps}: Omit<UserAvatarProps, 'user'> & {user: string}) {\n  const [value, loading] = useUser(user)\n\n  if (loading) {\n    return <AvatarSkeleton $size={loadedProps.size} animated />\n  }\n  if (!value) {\n    return <AvatarSkeleton $size={loadedProps.size} animated={false} />\n  }\n\n  return <UserAvatar {...loadedProps} user={value} />\n}\n","// number of avatars to display on each fields (will be stacked and have a counter if more than 3 users in a field)\nexport const MAX_AVATARS_DOCK = 3\nexport const MAX_AVATARS_GLOBAL = 3\nexport const DEFAULT_MAX_AVATARS_FIELDS = 3\n\n// distance between avatars in pixels (negative number means overlap)\nexport const AVATAR_DISTANCE = -4\n\n// height/width of the avatars in pixels\nexport const AVATAR_SIZE = 25\n\nexport const AVATAR_ARROW_HEIGHT = 4\n\n// these are the thresholds in which the intersection observers will notify about regions going in/out of viewport\n// these will affect the thresholds below, so make sure to coordinate edits\nexport const INTERSECTION_THRESHOLDS = [0, 0.25, 0.75, 1]\n\n// The elements that reports intersection changes are padded top+bottom in order to detect when entering leaving\nexport const INTERSECTION_ELEMENT_PADDING = 23\n\n// Make the avatars snap to the top dock when they are closer than this from the top\nexport const SNAP_TO_DOCK_DISTANCE_TOP = 8\n\n// Make the avatars snap to the bottom dock when they are closer than this from the bottom\nexport const SNAP_TO_DOCK_DISTANCE_BOTTOM = 8\n\n// The avatar will move to the right when this close (in pixels) to the top\nexport const SLIDE_RIGHT_THRESHOLD_TOP = 20\n\n// The avatar will move to the right when this close (in pixels) to the bottom\nexport const SLIDE_RIGHT_THRESHOLD_BOTTOM = 20\n\n// Switch on debug mode (will display regions)\nexport const DEBUG = false\n","import {Flex} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {AVATAR_SIZE} from './constants'\n\nexport const FlexWrapper = styled(Flex)`\n  & > div:first-child {\n    flex: 1;\n    min-width: 0;\n  }\n`\n\nexport const InnerBox = styled(Flex)`\n  height: ${AVATAR_SIZE}px;\n  min-width: 23px;\n  vertical-align: top;\n`\n","import {memo, useContext} from 'react'\nimport {PresenceTrackerContextGetSnapshot, PresenceTrackerContextStore} from 'sanity/_singletons'\n\nimport {\n  type Reported,\n  type ReporterHook,\n  type TrackerContextGetSnapshot,\n  useTrackerStore,\n  useTrackerStoreReporter,\n} from '../../components/react-track-elements'\nimport {type FieldPresenceData} from '../types'\n\nexport type ReportedPresenceData = Reported<FieldPresenceData>\n\nfunction PresenceTrackerComponent(props: {children: React.ReactNode}) {\n  const {children} = props\n  const {store, snapshot} = useTrackerStore<FieldPresenceData>()\n\n  return (\n    <PresenceTrackerContextStore.Provider value={store}>\n      <PresenceTrackerContextGetSnapshot.Provider value={snapshot}>\n        {children}\n      </PresenceTrackerContextGetSnapshot.Provider>\n    </PresenceTrackerContextStore.Provider>\n  )\n}\n\n/**\n * @internal\n */\nexport const PresenceTracker = memo(PresenceTrackerComponent)\n\nconst EMPTY_ARRAY: Reported<FieldPresenceData>[] = []\n\n/**\n * @internal\n */\nexport function usePresenceReportedValues(): TrackerContextGetSnapshot<FieldPresenceData> {\n  const snapshot = useContext(PresenceTrackerContextGetSnapshot)\n\n  if (snapshot === null) {\n    // eslint-disable-next-line no-console\n    console.warn(\n      new Error(\n        'No context provided for reporter. Make sure that the component calling \"usePresenceReportedValues()\", is wrapped inside a <PresenceTracker> element',\n      ),\n    )\n    return EMPTY_ARRAY\n  }\n\n  return snapshot\n}\n\n/**\n * @internal\n */\nexport const usePresenceReporter: ReporterHook<FieldPresenceData> = (id, value, isEqual?) => {\n  const store = useContext(PresenceTrackerContextStore)\n\n  if (store === null) {\n    // eslint-disable-next-line no-console\n    console.warn(\n      new Error(\n        'No context provided for reporter. Make sure that the component calling \"usePresenceReporter()\", is wrapped inside a <PresenceTracker> element',\n      ),\n    )\n  }\n\n  useTrackerStoreReporter<FieldPresenceData>(store, id, value, isEqual)\n}\n","import {Flex, Stack, Text} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nimport {Tooltip} from '../../ui-components'\nimport {UserAvatar} from '../components/userAvatar'\nimport {type FormNodePresence} from './types'\n\ninterface PresenceTooltipProps {\n  children?: React.JSX.Element\n  items: FormNodePresence[]\n}\n\n/**\n * The \"documentScrollElement\" is being passed to the PortalProvider in DocumentPanel.\n * The default portal element provided by the PortalProvider causes some layout issues with the Tooltip.\n * Therefore, another portal element (i.e. the \"documentScrollElement\") is being used to solve this.\n */\n\nexport function PresenceTooltip(props: PresenceTooltipProps) {\n  const {children, items} = props\n\n  const content = useMemo(\n    () => (\n      <Stack sizing=\"border\">\n        {items.map((item) => (\n          <Flex align=\"center\" gap={2} key={item.user.id}>\n            <div>\n              <UserAvatar user={item.user} status=\"online\" />\n            </div>\n\n            <Text size={1}>{item.user.displayName}</Text>\n          </Flex>\n        ))}\n      </Stack>\n    ),\n    [items],\n  )\n\n  return (\n    <Tooltip content={content} placement=\"top\" portal=\"documentScrollElement\">\n      {children}\n    </Tooltip>\n  )\n}\n","import {AVATAR_DISTANCE, AVATAR_SIZE} from './constants'\n\nexport const splitRight = <T>(array: T[], max: number): [T[], T[]] => {\n  const indexFromMax = array.length > max ? max - 1 : max\n  const idx = Math.max(0, array.length - indexFromMax)\n  return [array.slice(0, idx), array.slice(idx)]\n}\n\n// export const splitRight = <T>(array: T[], index: number): [T[], T[]] => {\n//   const idx = Math.max(0, array.length - index)\n//   return [array.slice(0, idx), array.slice(idx)]\n// }\n//\nexport const split = <T>(array: T[], index: number): [T[], T[]] => {\n  const idx = Math.max(0, index)\n  return [array.slice(0, idx), array.slice(idx)]\n}\n\n/** @internal */\nexport function calcAvatarStackWidth(len: number): number {\n  return -AVATAR_DISTANCE + (AVATAR_SIZE + AVATAR_DISTANCE) * len\n}\n","import {AvatarCounter, type AvatarPosition} from '@sanity/ui'\nimport {sortBy, uniqBy} from 'lodash'\nimport {memo, useCallback, useContext, useId, useMemo, useState} from 'react'\nimport {FormFieldPresenceContext} from 'sanity/_singletons'\n\nimport {UserAvatar} from '../components/userAvatar'\nimport {AVATAR_DISTANCE, AVATAR_SIZE, DEFAULT_MAX_AVATARS_FIELDS} from './constants'\nimport {FlexWrapper, InnerBox} from './FieldPresence.styled'\nimport {usePresenceReporter} from './overlay/tracker'\nimport {PresenceTooltip} from './PresenceTooltip'\nimport {type FormNodePresence} from './types'\nimport {splitRight} from './utils'\n\n/** @internal */\nexport interface FieldPresenceInnerProps {\n  maxAvatars?: number\n  presence: FormNodePresence[]\n  stack?: boolean\n  position?: AvatarPosition\n  animateArrowFrom?: AvatarPosition\n}\n\n/** @internal */\nexport const FieldPresenceInner = memo(function FieldPresenceInner({\n  presence,\n  position = 'inside',\n  animateArrowFrom = 'inside',\n  maxAvatars = DEFAULT_MAX_AVATARS_FIELDS,\n  stack = true,\n}: FieldPresenceInnerProps) {\n  const uniquePresence = uniqBy(presence || [], (item) => item.user.id)\n  const sorted = sortBy(uniquePresence, (_presence) => _presence.lastActiveAt)\n  const [hidden, visible] = stack ? splitRight(sorted, maxAvatars) : [[], sorted]\n\n  const avatars = [\n    ...visible.reverse().map((_visible) => ({\n      key: _visible.user.id,\n      element: (\n        <UserAvatar\n          animateArrowFrom={animateArrowFrom}\n          position={position}\n          status=\"online\"\n          user={_visible.user}\n        />\n      ),\n    })),\n    hidden.length >= 2\n      ? {\n          key: 'counter',\n          element: <AvatarCounter count={hidden.length} />,\n        }\n      : null,\n  ].filter(Boolean)\n\n  return (\n    <FlexWrapper>\n      <div />\n\n      <InnerBox direction=\"row-reverse\">\n        {avatars.map(\n          (av, i) =>\n            av && (\n              <div\n                key={av.key}\n                style={{\n                  position: 'absolute',\n                  transform: `translate3d(${-i * (AVATAR_SIZE + AVATAR_DISTANCE)}px, 0px, 0px)`,\n                  transitionProperty: 'transform',\n                  transitionDuration: '200ms',\n                  transitionTimingFunction: 'cubic-bezier(0.85, 0, 0.15, 1)',\n                  zIndex: 100 - i,\n                }}\n              >\n                {av.element}\n              </div>\n            ),\n        )}\n      </InnerBox>\n    </FlexWrapper>\n  )\n})\n\n/** @internal */\nexport interface FieldPresenceProps {\n  presence: FormNodePresence[]\n  maxAvatars: number\n}\n\n/** @internal */\nexport function FieldPresence(props: FieldPresenceProps) {\n  const contextPresence = useContext(FormFieldPresenceContext)\n  const {presence = contextPresence, maxAvatars = DEFAULT_MAX_AVATARS_FIELDS} = props\n  const [element, setElement] = useState<HTMLDivElement | null>(null)\n\n  const reporterId = useId()\n  const reporterGetSnapshot = useCallback(\n    () => ({presence, element, maxAvatars}),\n    [element, maxAvatars, presence],\n  )\n  usePresenceReporter(element ? reporterId : null, reporterGetSnapshot)\n\n  const uniquePresence = useMemo(() => uniqBy(presence || [], (item) => item.user.id), [presence])\n\n  return (\n    <PresenceTooltip items={uniquePresence}>\n      <FlexWrapper ref={setElement} style={{minHeight: AVATAR_SIZE, minWidth: AVATAR_SIZE}} />\n    </PresenceTooltip>\n  )\n}\n\n/**\n * @internal\n * @hidden\n * @deprecated Use `FieldPresence` instead\n */\nexport const FieldPresenceWithOverlay = FieldPresence\n","import {Observable, Subject} from 'rxjs'\nimport {filter} from 'rxjs/operators'\n\nexport interface ObservableIntersectionObserver {\n  observe: (element: Element) => Observable<IntersectionObserverEntry>\n}\n\nexport const createIntersectionObserver = (\n  options?: IntersectionObserverInit,\n): ObservableIntersectionObserver => {\n  const entries$ = new Subject<IntersectionObserverEntry>()\n  const intersectionObserver = new IntersectionObserver((entries) => {\n    entries.forEach((entry) => {\n      entries$.next(entry)\n    })\n  }, options)\n  return {\n    observe: (element: Element) => {\n      return new Observable<IntersectionObserverEntry>((subscriber) => {\n        const subscription = entries$\n          .pipe(filter((entry) => entry.target === element))\n          .subscribe(subscriber)\n        intersectionObserver.observe(element)\n        return () => {\n          subscription.unsubscribe()\n          intersectionObserver.unobserve(element)\n        }\n      })\n    },\n  }\n}\n","import {type HTMLProps, useEffect, useRef} from 'react'\nimport {tap} from 'rxjs/operators'\n\nimport {type ObservableIntersectionObserver} from './intersectionObserver'\n\nexport interface WithIntersectionProps {\n  onIntersection: (id: string, entry: IntersectionObserverEntry) => void\n  io: ObservableIntersectionObserver\n  id: string\n}\n\nexport const WithIntersection = (props: WithIntersectionProps & HTMLProps<HTMLDivElement>) => {\n  const {onIntersection, io, id, ...rest} = props\n  const element = useRef<HTMLDivElement | null>(null)\n  useEffect(() => {\n    const el = element.current\n    if (!el) return undefined\n    const subscription = io\n      .observe(el)\n      .pipe(tap((entry) => onIntersection(id, entry)))\n      .subscribe()\n    return () => subscription.unsubscribe()\n  }, [io, id, onIntersection])\n  return <div {...rest} ref={element} />\n}\n","import {css, styled} from 'styled-components'\n\nimport {WithIntersection} from './WithIntersection'\n\ninterface StyleProps {\n  $debug: boolean\n  margins?: [number, number, number, number]\n}\n\nexport const RootWrapper = styled.div`\n  position: relative;\n`\n\nexport const OverlayWrapper = styled.div`\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  pointer-events: none;\n  z-index: 13;\n`\n\nexport const RegionWrapper = css`\n  overflow: hidden;\n  overflow: clip;\n  pointer-events: none;\n  position: absolute;\n`\n\nexport const TopRegionWrapper = styled(WithIntersection)<StyleProps>(({$debug, margins}) => {\n  return css`\n    ${RegionWrapper}\n\n    z-index: 100;\n    position: sticky;\n    height: 1px;\n    top: ${margins ? `${margins[0] - 1}px` : undefined};\n    background-color: ${$debug ? 'red' : 'none'};\n  `\n})\n\nexport const MiddleRegionWrapper = styled(WithIntersection)<StyleProps>(({$debug}) => {\n  return css`\n    ${RegionWrapper}\n\n    visibility: none;\n\n    ${$debug &&\n    css`\n      background: rgba(255, 0, 0, 0.25);\n      outline: 1px solid #00b;\n      visibility: visible;\n    `}\n  `\n})\n\nexport const BottomRegionWrapper = styled(WithIntersection)<StyleProps>(({$debug}) => {\n  return css`\n    ${RegionWrapper}\n\n    position: sticky;\n    bottom: -1px;\n    height: 1px;\n    background-color: ${$debug ? 'blue' : 'transparent'};\n  `\n})\n","import {\n  type ForwardedRef,\n  forwardRef,\n  type ReactNode,\n  useCallback,\n  useLayoutEffect,\n  useMemo,\n  useRef,\n  useState,\n} from 'react'\n\nimport {resizeObserver} from '../../util/resizeObserver'\nimport {\n  DEBUG,\n  INTERSECTION_ELEMENT_PADDING,\n  INTERSECTION_THRESHOLDS,\n  SNAP_TO_DOCK_DISTANCE_BOTTOM,\n  SNAP_TO_DOCK_DISTANCE_TOP,\n} from '../constants'\nimport {\n  type FieldPresenceData,\n  type RegionWithIntersectionDetails,\n  type ReportedRegionWithRect,\n} from '../types'\nimport {createIntersectionObserver} from './intersectionObserver'\nimport {\n  BottomRegionWrapper,\n  MiddleRegionWrapper,\n  OverlayWrapper,\n  RootWrapper,\n  TopRegionWrapper,\n} from './RegionsWithIntersections.styled'\n\ninterface RegionsWithIntersectionsProps {\n  regions: ReportedRegionWithRect<FieldPresenceData>[]\n  render: (\n    regionsWithIntersectionDetails: RegionWithIntersectionDetails[],\n    containerWidth: number,\n  ) => ReactNode | null\n  children: ReactNode\n  margins: [number, number, number, number]\n}\n\nconst toPx = (num: number) => `${num}px`\nconst negate = (num: number) => 0 - num\n\nexport const RegionsWithIntersections = forwardRef(function RegionsWithIntersections(\n  props: RegionsWithIntersectionsProps,\n  ref: ForwardedRef<HTMLDivElement>,\n) {\n  const {\n    regions,\n    render,\n    children,\n    margins: [mt, mr, mb, ml],\n  } = props\n\n  const overlayRef = useRef<HTMLDivElement | null>(null)\n\n  // Make sure `margins` is memoized\n  const margins = useMemo<[number, number, number, number]>(\n    () => [mt, mr, mb, ml],\n    [mt, mr, mb, ml],\n  )\n\n  const io = useMemo(\n    () =>\n      createIntersectionObserver({\n        rootMargin: margins.map(negate).map(toPx).join(' '),\n        threshold: INTERSECTION_THRESHOLDS,\n      }),\n    [margins],\n  )\n\n  const [intersections, setIntersections] = useState<\n    Record<\n      string,\n      | {\n          boundingClientRect: {top: number; bottom: number}\n          isIntersecting: boolean\n          intersectionRect: {top: number; bottom: number}\n        }\n      | undefined\n    >\n  >({})\n\n  const onIntersection = useCallback((id: any, entry: any) => {\n    setIntersections((current) => ({...current, [id]: entry}))\n  }, [])\n\n  const [overlayWidth, setOverlayWidth] = useState(0)\n  useLayoutEffect(() => {\n    if (!overlayRef.current) return undefined\n\n    setOverlayWidth(overlayRef.current.offsetWidth)\n\n    return resizeObserver.observe(overlayRef.current, (event) => {\n      setOverlayWidth(event.contentRect.width)\n    })\n  }, [])\n\n  const top = intersections['::top']\n  const bottom = intersections['::bottom']\n  const regionsWithIntersectionDetails: RegionWithIntersectionDetails[] = useMemo(\n    () =>\n      (top && bottom\n        ? regions\n            .filter((region) => region.presence?.length > 0)\n            .map((region): RegionWithIntersectionDetails | null => {\n              const intersection = intersections[region.id]\n\n              if (!intersection) {\n                return null\n              }\n\n              const {bottom: boundsBottom, top: boundsTop} = intersection.boundingClientRect\n\n              const aboveTop = intersection.boundingClientRect.top < top.boundingClientRect.bottom\n              const belowBottom =\n                intersection.boundingClientRect.top < bottom.boundingClientRect.top\n\n              // eslint-disable-next-line no-nested-ternary\n              const distanceTop = intersection.isIntersecting\n                ? boundsTop - (intersection.intersectionRect.top - INTERSECTION_ELEMENT_PADDING)\n                : aboveTop\n                  ? -top.boundingClientRect.bottom\n                  : bottom.boundingClientRect.top\n\n              // eslint-disable-next-line no-nested-ternary\n              const distanceBottom = intersection.isIntersecting\n                ? -(\n                    boundsBottom -\n                    (intersection.intersectionRect.bottom + INTERSECTION_ELEMENT_PADDING)\n                  )\n                : belowBottom\n                  ? bottom.boundingClientRect.top\n                  : -top.boundingClientRect.bottom\n\n              const position =\n                // eslint-disable-next-line no-nested-ternary\n                distanceTop <= SNAP_TO_DOCK_DISTANCE_TOP\n                  ? 'top'\n                  : distanceBottom <= SNAP_TO_DOCK_DISTANCE_BOTTOM\n                    ? 'bottom'\n                    : 'inside'\n\n              return {\n                distanceTop,\n                distanceBottom,\n                region,\n                position,\n              }\n            })\n            .filter(Boolean)\n        : []) as RegionWithIntersectionDetails[],\n    [bottom, intersections, regions, top],\n  )\n\n  return (\n    <RootWrapper ref={ref}>\n      <TopRegionWrapper\n        $debug={DEBUG}\n        io={io}\n        id=\"::top\"\n        onIntersection={onIntersection}\n        margins={margins}\n      />\n      <div>{children}</div>\n      <OverlayWrapper ref={overlayRef}>\n        {overlayWidth && render(regionsWithIntersectionDetails, overlayWidth)}\n      </OverlayWrapper>\n      {regions.map((region) => {\n        const forceWidth = region.rect.width === 0\n        return (\n          <MiddleRegionWrapper\n            $debug={DEBUG}\n            io={io}\n            onIntersection={onIntersection}\n            key={region.id}\n            id={region.id}\n            style={{\n              width: forceWidth ? 1 : region.rect.width,\n              left: region.rect.left - (forceWidth ? 1 : 0),\n              top: region.rect.top - INTERSECTION_ELEMENT_PADDING,\n              height: region.rect.height + INTERSECTION_ELEMENT_PADDING * 2,\n            }}\n          />\n        )\n      })}\n      <BottomRegionWrapper $debug={DEBUG} id=\"::bottom\" io={io} onIntersection={onIntersection} />\n    </RootWrapper>\n  )\n})\n","/* eslint-disable @typescript-eslint/no-use-before-define */\n\nimport {flatten, groupBy, orderBy, sortBy} from 'lodash'\nimport {\n  type CSSProperties,\n  Fragment,\n  memo,\n  type ReactNode,\n  useCallback,\n  useMemo,\n  useState,\n} from 'react'\n\nimport {\n  AVATAR_ARROW_HEIGHT,\n  AVATAR_DISTANCE,\n  AVATAR_SIZE,\n  DEBUG,\n  MAX_AVATARS_DOCK,\n  SLIDE_RIGHT_THRESHOLD_BOTTOM,\n  SLIDE_RIGHT_THRESHOLD_TOP,\n} from '../constants'\nimport {FieldPresenceInner} from '../FieldPresence'\nimport {\n  type FieldPresenceData,\n  type Rect,\n  type RegionWithIntersectionDetails,\n  type ReportedRegionWithRect,\n} from '../types'\nimport {RegionsWithIntersections} from './RegionsWithIntersections'\nimport {type ReportedPresenceData, usePresenceReportedValues} from './tracker'\n\nconst ITEM_TRANSITION: CSSProperties = {\n  transitionProperty: 'transform',\n  transitionDuration: '200ms',\n  transitionTimingFunction: 'cubic-bezier(0.85, 0, 0.15, 1)',\n}\n\nconst bottom = (rect: {top: number; height: number}) => rect.top + rect.height\n\ntype RegionWithSpacerHeight = RegionWithIntersectionDetails & {\n  spacerHeight: number\n}\n\nfunction withSpacerHeight(\n  regionsWithIntersectionDetails: RegionWithIntersectionDetails[],\n): RegionWithSpacerHeight[] {\n  return regionsWithIntersectionDetails.map(\n    (withIntersection, idx, _regionsWithIntersectionDetails) => {\n      const prevRect = _regionsWithIntersectionDetails[idx - 1]?.region.rect\n      const prevBottom = prevRect ? bottom(prevRect) : 0\n      return {...withIntersection, spacerHeight: withIntersection.region.rect.top - prevBottom}\n    },\n  )\n}\n\nconst orderByTop = (regionsWithIntersectionDetails: RegionWithIntersectionDetails[]) =>\n  orderBy(regionsWithIntersectionDetails, (withIntersection) => withIntersection.region.rect.top)\n\nconst plus = (a: number, b: number) => a + b\nconst sum = (array: number[]) => array.reduce(plus, 0)\n\ntype Margins = [number, number, number, number]\ntype RegionWithSpacerHeightAndIndent = RegionWithSpacerHeight & {indent: number}\n\nfunction group(regionsWithIntersectionDetails: RegionWithIntersectionDetails[]): {\n  top: RegionWithSpacerHeightAndIndent[]\n  inside: RegionWithSpacerHeightAndIndent[]\n  bottom: RegionWithSpacerHeightAndIndent[]\n} {\n  const regionsWithSpacerHeight = withSpacerHeight(orderByTop(regionsWithIntersectionDetails))\n  const grouped: {\n    top: RegionWithSpacerHeight[]\n    inside: RegionWithSpacerHeight[]\n    bottom: RegionWithSpacerHeight[]\n  } = {\n    top: [],\n    inside: [],\n    bottom: [],\n    ...groupBy(regionsWithSpacerHeight, (_withSpacerHeight) => _withSpacerHeight.position),\n  }\n\n  return {\n    top: orderByTop(grouped.top).map(\n      (withIntersection, i, grp): RegionWithSpacerHeightAndIndent => ({\n        ...(withIntersection as RegionWithSpacerHeight),\n        indent: grp\n          .slice(i + 1)\n          .reduce((w, _withIntersection) => w + _withIntersection.region.rect.width, 0),\n      }),\n    ),\n    inside: orderByTop(grouped.inside).map(\n      (withIntersection): RegionWithSpacerHeightAndIndent => ({\n        ...(withIntersection as RegionWithSpacerHeight),\n        indent: 0,\n      }),\n    ),\n    bottom: orderByTop(grouped.bottom).map(\n      (withIntersection, i, grp): RegionWithSpacerHeightAndIndent => ({\n        ...(withIntersection as RegionWithSpacerHeight),\n        indent: grp\n          .slice(0, i)\n          .reduce((w, _withIntersection) => w + _withIntersection.region.rect.width, 0),\n      }),\n    ),\n  }\n}\n\nconst Spacer = ({height, ...rest}: {height: number; style?: CSSProperties}) => (\n  <div style={{height: Math.max(0, height), ...rest?.style}} />\n)\n\nconst DEFAULT_MARGINS: Margins = [0, 0, 0, 0]\n\nconst getOffsetsTo = (source: HTMLElement, target: HTMLElement) => {\n  let el: HTMLElement | null = source\n  let top = -el.scrollTop\n  let left = 0\n  while (el && el !== target) {\n    top += el.offsetTop - el.scrollTop\n    left += el.offsetLeft\n    el = el.offsetParent instanceof HTMLElement ? el.offsetParent : null\n  }\n  return {top, left}\n}\n\nfunction getRelativeRect(element: HTMLElement, parent: HTMLElement): Rect {\n  return {\n    ...getOffsetsTo(element, parent),\n    width: element.offsetWidth,\n    height: element.offsetHeight,\n  }\n}\n\nfunction regionsWithComputedRects(\n  regions: ReportedPresenceData[],\n  parent: HTMLElement,\n): ReportedRegionWithRect<FieldPresenceData>[] {\n  return regions\n    .map(([id, region]) =>\n      region.element\n        ? {\n            ...region,\n            id,\n            rect: getRelativeRect(region.element, parent),\n          }\n        : null,\n    )\n    .filter(Boolean) as ReportedRegionWithRect<FieldPresenceData>[]\n}\n\ntype Props = {margins: Margins; children: ReactNode}\nexport function StickyOverlay(props: Props) {\n  const {children, margins = DEFAULT_MARGINS} = props\n  const reportedValues = usePresenceReportedValues()\n  const [element, setElement] = useState<HTMLDivElement | null>(null)\n  const regions = useMemo(\n    () => (element ? regionsWithComputedRects(reportedValues, element) : EMPTY_ARRAY),\n    [element, reportedValues],\n  )\n\n  const renderCallback = useCallback(\n    (regionsWithIntersectionDetails: RegionWithIntersectionDetails[], containerWidth: any) => {\n      const grouped = group(\n        regionsWithIntersectionDetails.filter((item) => item.region.presence.length > 0),\n      )\n      const topSpacing = sum(grouped.top.map((n) => n.region.rect.height + n.spacerHeight))\n      const bottomSpacing = sum(\n        [...grouped.inside, ...grouped.bottom].map((n) => n.region.rect.height + n.spacerHeight),\n      )\n\n      // todo: this needs cleaning up, should process all the needed layout data in one go\n      const counts = grouped.inside.reduce(\n        (_counts, withIntersection) => {\n          const {distanceTop, distanceBottom} = withIntersection\n\n          const nearTop = distanceTop <= SLIDE_RIGHT_THRESHOLD_TOP\n          const nearBottom = distanceBottom <= SLIDE_RIGHT_THRESHOLD_BOTTOM\n          return {\n            nearTop: _counts.nearTop + (nearTop ? withIntersection.region.presence.length : 0),\n            nearBottom:\n              _counts.nearBottom + (nearBottom ? withIntersection.region.presence.length : 0),\n          }\n        },\n        {nearTop: 0, nearBottom: 0},\n      )\n\n      return (\n        <>\n          <PresenceDock\n            closeCount={counts.nearTop}\n            margins={margins}\n            position=\"top\"\n            regionsWithIntersectionDetails={grouped.top}\n          />\n          <Spacer height={topSpacing} />\n          <PresenceInside\n            containerWidth={containerWidth}\n            regionsWithIntersectionDetails={grouped.inside}\n          />\n          <Spacer height={bottomSpacing} />\n          <PresenceDock\n            closeCount={counts.nearBottom}\n            margins={margins}\n            position=\"bottom\"\n            regionsWithIntersectionDetails={grouped.bottom}\n          />\n        </>\n      )\n    },\n    [margins],\n  )\n\n  return (\n    <RegionsWithIntersections\n      ref={setElement}\n      margins={margins}\n      regions={regions}\n      render={renderCallback}\n    >\n      {children}\n    </RegionsWithIntersections>\n  )\n}\n\nconst EMPTY_ARRAY: never[] = []\n\nconst PresenceDock = memo(function PresenceDock(props: {\n  closeCount: number\n  margins: Margins\n  position: 'top' | 'bottom'\n  regionsWithIntersectionDetails: RegionWithIntersectionDetails[]\n}) {\n  const {closeCount, margins, position, regionsWithIntersectionDetails} = props\n  const dir = position === 'top' ? 1 : -1\n  const allPresenceItems = useMemo(() => {\n    if (!regionsWithIntersectionDetails.length) {\n      return EMPTY_ARRAY\n    }\n\n    return flatten(\n      sortBy(regionsWithIntersectionDetails, (r) => r.region.rect.top * dir).map(\n        (withIntersection) => withIntersection.region.presence || EMPTY_ARRAY,\n      ),\n    )\n  }, [dir, regionsWithIntersectionDetails])\n  const [topMargin, rightMargin, bottomMargin, leftMargin] = margins\n  const leftOffset =\n    (leftMargin || 0) +\n    (allPresenceItems.length > 0 ? -closeCount * (AVATAR_SIZE + AVATAR_DISTANCE) : 0) -\n    rightMargin\n\n  const margin = position === 'top' ? topMargin : bottomMargin\n\n  const style: CSSProperties = useMemo(\n    () => ({\n      zIndex: 2,\n      position: 'sticky',\n      display: 'flex',\n      flexDirection: 'column',\n      alignItems: 'flex-end',\n      ...ITEM_TRANSITION,\n      transform: `translate3d(${leftOffset}px, 0px, 0px)`,\n      top: AVATAR_ARROW_HEIGHT + 1 + margin,\n      bottom: AVATAR_ARROW_HEIGHT + 1 + margin,\n    }),\n    [leftOffset, margin],\n  )\n\n  return (\n    <div data-dock={position} key={`sticky-${position}`} style={style}>\n      <FieldPresenceInner\n        position={position}\n        maxAvatars={MAX_AVATARS_DOCK}\n        presence={allPresenceItems}\n      />\n    </div>\n  )\n})\n\nfunction PresenceInside(props: {\n  containerWidth: number\n  regionsWithIntersectionDetails: RegionWithSpacerHeight[]\n}) {\n  const {regionsWithIntersectionDetails, containerWidth} = props\n\n  return (\n    <>\n      {regionsWithIntersectionDetails.map((withIntersection) => {\n        const originalLeft = withIntersection.region.rect.left\n        const {distanceTop, distanceBottom} = withIntersection\n\n        const nearTop = distanceTop <= SLIDE_RIGHT_THRESHOLD_TOP\n        const nearBottom = distanceBottom <= SLIDE_RIGHT_THRESHOLD_BOTTOM\n\n        const diffRight = containerWidth - originalLeft - withIntersection.region.rect.width\n\n        const {presence, maxAvatars} = withIntersection.region\n        return (\n          <Fragment key={withIntersection.region.id}>\n            <div\n              style={{\n                zIndex: 2,\n                position: 'absolute',\n                ...ITEM_TRANSITION,\n                left: originalLeft,\n                transform: `translate3d(${nearTop || nearBottom ? diffRight : 0}px, 0px, 0px)`,\n                height: withIntersection.region.rect.height,\n                top: withIntersection.region.rect.top,\n              }}\n            >\n              <DebugValue value={() => `⤒${distanceTop} | ${distanceBottom}⤓`}>\n                <FieldPresenceInner\n                  stack={!nearTop && !nearBottom}\n                  // eslint-disable-next-line no-nested-ternary\n                  position={nearTop ? 'top' : nearBottom ? 'bottom' : 'inside'}\n                  maxAvatars={maxAvatars}\n                  presence={presence}\n                />\n              </DebugValue>\n            </div>\n          </Fragment>\n        )\n      })}\n    </>\n  )\n}\n\nconst PassThrough = (props: {children: React.JSX.Element; [prop: string]: any}) => props.children\n\nconst DebugValue = DEBUG\n  ? function DebugValue(props: any) {\n      return (\n        <div style={{position: 'absolute'}}>\n          {props.children}\n          <span\n            style={{\n              top: 0,\n              left: -15,\n              fontSize: 11,\n              right: -15,\n              textAlign: 'center',\n              height: AVATAR_SIZE,\n              color: 'white',\n              backgroundColor: 'rgba(0, 0, 0, 0.8)',\n              position: 'absolute',\n              zIndex: 1000,\n            }}\n          >\n            {props.value()}\n          </span>\n        </div>\n      )\n    }\n  : PassThrough\n","import {type ReactNode} from 'react'\n\nimport {StickyOverlay} from './StickyOverlay'\nimport {PresenceTracker} from './tracker'\n\n/** @internal */\nexport interface PresenceOverlayProps {\n  children: ReactNode\n  margins?: [number, number, number, number]\n}\n\nconst DEFAULT_MARGINS: [number, number, number, number] = [0, 0, 0, 0]\n\n/** @internal */\nexport function PresenceOverlay({children, margins}: PresenceOverlayProps) {\n  return (\n    <PresenceTracker>\n      <StickyOverlay margins={margins || DEFAULT_MARGINS}>{children}</StickyOverlay>\n    </PresenceTracker>\n  )\n}\n","import {type Path} from '@sanity/types'\nimport * as PathUtils from '@sanity/util/paths'\nimport {type ReactNode, useContext, useMemo} from 'react'\nimport {FormFieldPresenceContext} from 'sanity/_singletons'\n\nconst EMPTY_ARRAY: never[] = []\n\nfunction trimChildPath(path: Path, childPath: Path) {\n  return PathUtils.startsWith(path, childPath) ? PathUtils.trimLeft(path, childPath) : EMPTY_ARRAY\n}\n\n/** @internal */\nexport interface PresenceScopeProps {\n  readOnly?: boolean\n  path: Path\n  children: ReactNode\n}\n\n/** @internal */\nexport function PresenceScope(props: PresenceScopeProps) {\n  const {readOnly, path, children} = props\n  const contextPresence = useContext(FormFieldPresenceContext)\n\n  const childPresence = useMemo(() => {\n    return readOnly\n      ? EMPTY_ARRAY\n      : (contextPresence || EMPTY_ARRAY)\n          .filter((presence) => {\n            return PathUtils.startsWith(path, presence.path)\n          })\n          .map((presence) => ({\n            ...presence,\n            path: trimChildPath(path, presence.path),\n          }))\n  }, [contextPresence, path, readOnly])\n\n  return (\n    <FormFieldPresenceContext.Provider value={childPresence}>\n      {children}\n    </FormFieldPresenceContext.Provider>\n  )\n}\n","import {type ReactNode, useMemo} from 'react'\nimport {VirtualizerScrollInstanceContext} from 'sanity/_singletons'\n\nimport {type VirtualizerScrollInstance} from './useVirtualizerScrollInstance'\n\n/**\n * @internal\n */\ninterface VirtualizerScrollInstanceProviderProps extends VirtualizerScrollInstance {\n  children: ReactNode\n}\n\n/**\n *\n * @internal\n */\nexport function VirtualizerScrollInstanceProvider(props: VirtualizerScrollInstanceProviderProps) {\n  const {scrollElement, containerElement} = props\n\n  const value = useMemo(\n    () => ({scrollElement, containerElement: containerElement}),\n    [containerElement, scrollElement],\n  )\n\n  return (\n    <VirtualizerScrollInstanceContext.Provider value={value}>\n      {props.children}\n    </VirtualizerScrollInstanceContext.Provider>\n  )\n}\n","import {Box, type ResponsiveWidthProps} from '@sanity/ui'\nimport {type DragEvent, type ReactNode, useRef, useState} from 'react'\n\nimport {Dialog} from '../../../ui-components'\nimport {PopoverDialog} from '../../components'\nimport {PresenceOverlay} from '../../presence'\nimport {VirtualizerScrollInstanceProvider} from '../inputs/arrays/ArrayOfObjectsInput/List/VirtualizerScrollInstanceProvider'\n\nconst PRESENCE_MARGINS: [number, number, number, number] = [0, 0, 1, 0]\n\ninterface SharedProps {\n  children?: ReactNode\n  header: string\n  width: ResponsiveWidthProps['width']\n}\ninterface DialogProps extends SharedProps {\n  type: 'dialog'\n  id?: string\n  autofocus?: boolean\n  onClose?: () => void\n}\n\ninterface PopoverProps extends SharedProps {\n  type: 'popover'\n  // eslint-disable-next-line camelcase\n  legacy_referenceElement: HTMLElement | null\n  onClose: () => void\n}\n\nfunction onDragEnter(event: DragEvent<HTMLDivElement>) {\n  return event.stopPropagation()\n}\n\nfunction onDrop(event: DragEvent<HTMLDivElement>) {\n  return event.stopPropagation()\n}\n\n/**\n * @beta\n * Creates a dialog or a popover for editing content.\n * Handles presence and virtual scrolling.\n */\nexport function EditPortal(props: PopoverProps | DialogProps): React.JSX.Element {\n  const {children, header, onClose, type, width} = props\n  const [documentScrollElement, setDocumentScrollElement] = useState<HTMLDivElement | null>(null)\n  const containerElement = useRef<HTMLDivElement | null>(null)\n\n  const contents = (\n    <PresenceOverlay margins={PRESENCE_MARGINS}>\n      <Box ref={containerElement}>{children}</Box>\n    </PresenceOverlay>\n  )\n\n  if (type === 'dialog') {\n    return (\n      <VirtualizerScrollInstanceProvider\n        scrollElement={documentScrollElement}\n        containerElement={containerElement}\n      >\n        <Dialog\n          __unstable_autoFocus={props.autofocus}\n          contentRef={setDocumentScrollElement}\n          data-testid=\"edit-portal-dialog\"\n          header={header}\n          id={props.id || ''}\n          onClickOutside={onClose}\n          onClose={onClose}\n          onDragEnter={onDragEnter}\n          onDrop={onDrop}\n          width={width}\n        >\n          {contents}\n        </Dialog>\n      </VirtualizerScrollInstanceProvider>\n    )\n  }\n\n  return (\n    <PopoverDialog\n      header={header}\n      onClose={onClose}\n      referenceElement={props.legacy_referenceElement}\n      width={width}\n      containerRef={setDocumentScrollElement}\n    >\n      <VirtualizerScrollInstanceProvider\n        scrollElement={documentScrollElement}\n        containerElement={containerElement}\n      >\n        {contents}\n      </VirtualizerScrollInstanceProvider>\n    </PopoverDialog>\n  )\n}\n","import {Box, Text} from '@sanity/ui'\n\nimport {MenuGroup, type MenuGroupProps} from '../../../../ui-components'\nimport {type DocumentFieldActionGroup} from '../../../config'\nimport {useI18nText} from '../../../i18n'\nimport {FieldActionMenuNode} from './FieldActionMenuNode'\n\nconst POPOVER_PROPS: MenuGroupProps['popover'] = {\n  placement: 'right',\n  fallbackPlacements: ['top', 'bottom'],\n}\n\nexport function FieldActionMenuGroup(props: {group: DocumentFieldActionGroup}) {\n  const {group} = props\n  const {title} = useI18nText(group)\n\n  if (group.expanded) {\n    return (\n      <>\n        <Box padding={2} paddingTop={3}>\n          <Text muted size={1} weight=\"medium\">\n            {title}\n          </Text>\n        </Box>\n\n        {group.children.map((item, idx) => (\n          <FieldActionMenuNode\n            action={item}\n            isFirst={idx === 0}\n            // eslint-disable-next-line react/no-array-index-key\n            key={idx}\n            prevIsGroup={group.children[idx - 1]?.type === 'group'}\n          />\n        ))}\n      </>\n    )\n  }\n\n  return (\n    <MenuGroup icon={group.icon} popover={POPOVER_PROPS} text={title} tone={group.tone}>\n      {group.children.map((item, idx) => (\n        <FieldActionMenuNode\n          action={item}\n          isFirst={idx === 0}\n          // eslint-disable-next-line react/no-array-index-key\n          key={idx}\n          prevIsGroup={group.children[idx - 1]?.type === 'group'}\n        />\n      ))}\n    </MenuGroup>\n  )\n}\n","import {CheckmarkIcon} from '@sanity/icons'\nimport {Text} from '@sanity/ui'\nimport {useCallback} from 'react'\n\nimport {MenuItem} from '../../../../ui-components'\nimport {TooltipOfDisabled} from '../../../components'\nimport {type DocumentFieldActionItem} from '../../../config'\nimport {useI18nText} from '../../../i18n'\n\nexport function FieldActionMenuItem(props: {action: DocumentFieldActionItem}) {\n  const {action} = props\n\n  const {title} = useI18nText(action)\n\n  const handleClick = useCallback(() => {\n    action.onAction()\n  }, [action])\n\n  const disabledTooltipContent = typeof action.disabled === 'object' && (\n    <Text size={1}>{action.disabled.reason}</Text>\n  )\n\n  return (\n    <TooltipOfDisabled content={disabledTooltipContent} placement=\"left\">\n      <MenuItem\n        disabled={Boolean(action.disabled)}\n        icon={action.icon}\n        iconRight={action.iconRight || (action.selected ? CheckmarkIcon : undefined)}\n        onClick={handleClick}\n        pressed={action.selected}\n        text={title}\n        tone={action.tone}\n      />\n    </TooltipOfDisabled>\n  )\n}\n","import {MenuDivider} from '@sanity/ui'\n\nimport {type DocumentFieldActionNode} from '../../../config'\nimport {FieldActionMenuGroup} from './FieldActionMenuGroup'\nimport {FieldActionMenuItem} from './FieldActionMenuItem'\n\ninterface FieldActionMenuNodeProps {\n  action: DocumentFieldActionNode\n  isFirst: boolean\n  prevIsGroup: boolean\n}\n\nexport function FieldActionMenuNode(props: FieldActionMenuNodeProps) {\n  const {action, isFirst, prevIsGroup} = props\n\n  if (action.type === 'divider') {\n    return <MenuDivider />\n  }\n\n  if (action.type === 'group') {\n    return (\n      <>\n        {!isFirst && <MenuDivider />}\n        <FieldActionMenuGroup group={action} />\n      </>\n    )\n  }\n\n  return (\n    <>\n      {prevIsGroup && <MenuDivider />}\n      <FieldActionMenuItem action={action} />\n    </>\n  )\n}\n","/* eslint-disable react/jsx-handler-names */\n\nimport {EllipsisHorizontalIcon} from '@sanity/icons'\nimport {Card, Menu} from '@sanity/ui'\nimport {memo, useCallback, useId, useMemo, useState} from 'react'\n\nimport {Button, type ButtonProps, MenuButton, type MenuButtonProps} from '../../../../ui-components'\nimport {type DocumentFieldActionGroup, type DocumentFieldActionNode} from '../../../config'\nimport {useI18nText} from '../../../i18n'\nimport {FieldActionMenuNode} from './FieldActionMenuNode'\n\n/** @internal */\nexport interface FieldActionMenuProps {\n  nodes: DocumentFieldActionNode[]\n  onMenuOpenChange: (open: boolean) => void\n}\n\nconst STATUS_BUTTON_TOOLTIP_PROPS: ButtonProps['tooltipProps'] = {\n  placement: 'top',\n}\n\nfunction renderAsButton(node: DocumentFieldActionNode) {\n  return 'renderAsButton' in node && node.renderAsButton\n}\n\n/** @internal */\nexport const FieldActionMenu = memo(function FieldActionMenu(props: FieldActionMenuProps) {\n  const {nodes, onMenuOpenChange} = props\n  const [open, setOpen] = useState(false)\n\n  const handleOpen = useCallback(() => {\n    onMenuOpenChange(true)\n    setOpen(true)\n  }, [onMenuOpenChange])\n  const handleClose = useCallback(() => {\n    onMenuOpenChange(false)\n    setOpen(false)\n  }, [onMenuOpenChange])\n\n  const buttonNodes = useMemo(() => nodes.filter(renderAsButton), [nodes])\n  const menuNodesProp = useMemo(() => nodes.filter((node) => !renderAsButton(node)), [nodes])\n\n  // If there is only one menu node, and it is a `group`, expand it by default\n  const menuNodes = useMemo(() => {\n    const len = menuNodesProp.length\n\n    if (len === 0 || len > 1) return menuNodesProp\n\n    const node = menuNodesProp[0]\n\n    if (node.type === 'group') {\n      return [{...node, expanded: true}]\n    }\n\n    return menuNodesProp\n  }, [menuNodesProp])\n\n  const rootNodes: DocumentFieldActionNode[] = useMemo(\n    () => [\n      ...(menuNodes.length\n        ? ([\n            {\n              type: 'group',\n              children: menuNodes,\n              icon: EllipsisHorizontalIcon,\n              title: 'Field actions',\n            },\n          ] satisfies DocumentFieldActionNode[])\n        : []),\n      ...buttonNodes,\n    ],\n    [buttonNodes, menuNodes],\n  )\n\n  return (\n    <>\n      {rootNodes.map((node, idx) => (\n        <RootFieldActionMenuNode\n          // eslint-disable-next-line react/no-array-index-key\n          key={idx}\n          node={node}\n          onOpen={handleOpen}\n          onClose={handleClose}\n          open={open}\n        />\n      ))}\n    </>\n  )\n})\n\nconst RootFieldActionMenuNode = memo(function RootFieldActionMenuNode(props: {\n  node: DocumentFieldActionNode\n  onOpen: () => void\n  onClose: () => void\n  open: boolean\n}) {\n  const {node, onOpen, onClose, open} = props\n\n  if (node.type === 'divider') {\n    return <Card borderLeft flex=\"none\" />\n  }\n\n  if (node.type === 'action') {\n    return (\n      <Button\n        icon={node.icon}\n        mode=\"bleed\"\n        onClick={node.onAction}\n        tooltipProps={{\n          ...STATUS_BUTTON_TOOLTIP_PROPS,\n          content: node.title,\n        }}\n      />\n    )\n  }\n\n  return <RootFieldActionMenuGroup node={node} onOpen={onOpen} onClose={onClose} open={open} />\n})\n\nconst ROOT_MENU_BUTTON_POPOVER_PROPS: MenuButtonProps['popover'] = {\n  constrainSize: true,\n  placement: 'right',\n  portal: true,\n  fallbackPlacements: ['top', 'bottom'],\n}\n\nfunction RootFieldActionMenuGroup(props: {\n  node: DocumentFieldActionGroup\n  onOpen: () => void\n  onClose: () => void\n  open: boolean\n}) {\n  const {node, onOpen, onClose, open} = props\n  const {title} = useI18nText(node)\n\n  return (\n    <MenuButton\n      button={\n        <Button\n          aria-label={open ? undefined : title}\n          data-testid=\"field-actions-trigger\"\n          icon={node.icon}\n          mode=\"bleed\"\n          tabIndex={0}\n          tooltipProps={{\n            ...STATUS_BUTTON_TOOLTIP_PROPS,\n            content: node.title,\n          }}\n        />\n      }\n      id={useId()}\n      menu={\n        <Menu>\n          {node.children.map((action, idx) => {\n            return (\n              <FieldActionMenuNode\n                action={action}\n                isFirst={idx === 0}\n                // eslint-disable-next-line react/no-array-index-key\n                key={idx}\n                prevIsGroup={node.children[idx - 1]?.type === 'group'}\n              />\n            )\n          })}\n        </Menu>\n      }\n      onOpen={onOpen}\n      onClose={onClose}\n      popover={ROOT_MENU_BUTTON_POPOVER_PROPS}\n    />\n  )\n}\n","import {useContext} from 'react'\nimport {HoveredFieldContext, type HoveredFieldContextValue} from 'sanity/_singletons'\n\n/** @internal */\nexport function useHoveredField(): HoveredFieldContextValue {\n  return useContext(HoveredFieldContext)\n}\n","import {type Path} from '@sanity/types'\nimport {memo, type PropsWithChildren, useCallback, useMemo, useSyncExternalStore} from 'react'\nimport {FieldActionsContext, type FieldActionsContextValue} from 'sanity/_singletons'\n\nimport {type DocumentFieldActionNode} from '../../../config'\nimport {pathToString} from '../../../field'\nimport {supportsTouch} from '../../../util'\nimport {useHoveredField} from '../useHoveredField'\n\ntype FieldActionsProviderProps = PropsWithChildren<{\n  actions: DocumentFieldActionNode[]\n  focused?: boolean\n  path: Path\n}>\n\n/** @internal */\nexport const FieldActionsProvider = memo(function FieldActionsProvider(\n  props: FieldActionsProviderProps,\n) {\n  const {actions, children, path, focused} = props\n  const {\n    onMouseEnter: onFieldMouseEnter,\n    onMouseLeave: onFieldMouseLeave,\n    store: hoveredStore,\n  } = useHoveredField()\n  /**\n   * The `useSyncExternalStore` has a super power: if the value returned by the snapshot hasn't changed since last time, React won't re-render the component.\n   * This is why we can subscribe to the state of what's currently being hovered, but the component won't re-render unless the hovered state changes between `true` and `false`.\n   */\n  const hovered = useSyncExternalStore(hoveredStore.subscribe, () => {\n    const [hoveredPath] = hoveredStore.getSnapshot()\n    return supportsTouch || (hoveredPath ? pathToString(path) === hoveredPath : false)\n  })\n\n  const handleMouseEnter = useCallback(() => {\n    onFieldMouseEnter(path)\n  }, [onFieldMouseEnter, path])\n\n  const handleMouseLeave = useCallback(() => {\n    onFieldMouseLeave(path)\n  }, [onFieldMouseLeave, path])\n\n  const context: FieldActionsContextValue = useMemo(\n    () => ({\n      actions,\n      focused,\n      hovered,\n      onMouseEnter: handleMouseEnter,\n      onMouseLeave: handleMouseLeave,\n    }),\n    [actions, focused, handleMouseEnter, handleMouseLeave, hovered],\n  )\n\n  return <FieldActionsContext.Provider value={context}>{children}</FieldActionsContext.Provider>\n})\nFieldActionsProvider.displayName = 'Memo(FieldActionsProvider)'\n","import {type DocumentFieldActionNode} from '../../../config'\n\nexport function filterActions(actions: DocumentFieldActionNode[]): DocumentFieldActionNode[] {\n  return actions\n    .filter(Boolean)\n    .filter((node) => {\n      if ('hidden' in node) return node.hidden !== true\n      return true\n    })\n    .map((node) => {\n      if (node.type === 'group') {\n        return {\n          ...node,\n          children: filterActions(node.children),\n        }\n      }\n\n      return node\n    })\n}\n","import {type Path, type SchemaType} from '@sanity/types'\nimport {memo, useCallback, useEffect, useMemo, useRef, useState} from 'react'\n\nimport {type DocumentFieldAction, type DocumentFieldActionNode} from '../../../config'\nimport {useUnique} from '../../../util'\nimport {filterActions} from './helpers'\n\n/** @internal */\nexport interface FieldActionsProps {\n  actions: DocumentFieldAction[]\n  documentId: string\n  documentType: string\n  onActions: (actions: DocumentFieldActionNode[]) => void\n  path: Path\n  schemaType: SchemaType\n}\n\n/**\n *\n * The `FieldActionsResolver` component is responsible for resolving the actions for a given field.\n *\n * Since each field action is a React hook, they need to be rendered in a component that returns\n * `null` to allow for the hook's return value to be resolved.\n *\n * The way this works:\n *\n * - The parent component (`FieldProvider`) renders the `FieldActionsResolver` component.\n * - The `FieldActionsResolver` component renders each field action as a child component.\n * - Each field action is a React hook that returns a node, and calls `setFieldAction` with its\n *   index and value.\n * - The `FieldActionsResolver` keeps a state with the array of hook values, making sure the array\n *   has the same length as the number of actions.\n * - The `FieldActionsResolver` calls `onActions` with the array of hook values.\n *\n * @internal\n */\nexport const FieldActionsResolver = memo(function FieldActionsResolver(props: FieldActionsProps) {\n  const {actions, documentId, documentType, onActions, path, schemaType} = props\n\n  const len = actions.length\n  const lenRef = useRef(len)\n\n  const [fieldActions, setFieldActions] = useState<DocumentFieldActionNode[]>(() =>\n    Array.from(new Array(len)),\n  )\n\n  const fieldActionsRef = useRef(fieldActions)\n\n  const setFieldAction = useCallback((index: number, node: DocumentFieldActionNode) => {\n    setFieldActions((prev) => {\n      const next = [...prev]\n      next[index] = node\n      return next\n    })\n  }, [])\n\n  useEffect(() => {\n    if (fieldActionsRef.current !== fieldActions) {\n      fieldActionsRef.current = fieldActions\n      onActions(filterActions(fieldActions))\n    }\n  }, [fieldActions, onActions])\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] = fieldActionsRef.current[i]\n      }\n\n      lenRef.current = len\n\n      setFieldActions(newFieldActions)\n      fieldActionsRef.current = newFieldActions\n    }\n  }, [len])\n\n  const FieldActions = useMemo(() => {\n    return actions.map((action, index) => {\n      return defineFieldActionComponent({\n        action,\n        documentId,\n        documentType,\n        index,\n        path,\n        schemaType,\n        setFieldAction,\n      })\n    })\n  }, [actions, documentId, documentType, path, schemaType, setFieldAction])\n\n  return (\n    <>\n      {FieldActions.map((FieldAction, key) => (\n        <FieldAction\n          // eslint-disable-next-line react/no-array-index-key\n          key={key}\n        />\n      ))}\n    </>\n  )\n})\n\nfunction defineFieldActionComponent({\n  action,\n  documentId,\n  documentType,\n  index,\n  path,\n  schemaType,\n  setFieldAction,\n}: {\n  action: DocumentFieldAction\n  documentId: string\n  documentType: string\n  index: number\n  path: Path\n  schemaType: SchemaType\n  setFieldAction: (index: number, node: DocumentFieldActionNode) => void\n}) {\n  const {useAction} = action\n  return memo(function FieldAction() {\n    const _action = useAction({\n      documentId,\n      documentType,\n      path,\n      schemaType,\n    })\n    const node = useUnique(_action)\n\n    useEffect(() => {\n      setFieldAction(index, node)\n    }, [node])\n\n    return null\n  })\n}\n","import {useContext} from 'react'\nimport {FieldActionsContext, type FieldActionsContextValue} from 'sanity/_singletons'\n\n/** @internal */\nexport function useFieldActions(): FieldActionsContextValue {\n  return useContext(FieldActionsContext)\n}\n","import {type Path} from '@sanity/types'\nimport {memo, type PropsWithChildren, useCallback, useMemo, useRef, useState} from 'react'\nimport {HoveredFieldContext, type HoveredFieldContextValue} from 'sanity/_singletons'\n\nimport {pathToString} from '../../field'\n\n/** @internal */\nexport const HoveredFieldProvider = memo(function HoveredFieldProvider(props: PropsWithChildren) {\n  const {children} = props\n  const [listeners] = useState(() => new Set<() => void>())\n  const hoveredStackRef = useRef<string[]>([])\n\n  const handleMouseEnter = useCallback(\n    (path: Path) => {\n      const pathString = pathToString(path)\n\n      if (!hoveredStackRef.current.includes(pathString)) {\n        hoveredStackRef.current = [pathString, ...hoveredStackRef.current]\n        for (const listener of listeners) {\n          listener()\n        }\n      }\n    },\n    [listeners],\n  )\n\n  const handleMouseLeave = useCallback(\n    (path: Path) => {\n      const pathString = pathToString(path)\n\n      if (hoveredStackRef.current.includes(pathString)) {\n        hoveredStackRef.current = hoveredStackRef.current.filter((item) => item !== pathString)\n        for (const listener of listeners) {\n          listener()\n        }\n      }\n    },\n    [listeners],\n  )\n\n  const store = useMemo(\n    () => ({\n      subscribe: (onStoreChange: () => void) => {\n        listeners.add(onStoreChange)\n        return () => {\n          listeners.delete(onStoreChange)\n        }\n      },\n      getSnapshot: () => hoveredStackRef.current,\n    }),\n    [listeners],\n  )\n\n  const context: HoveredFieldContextValue = useMemo(\n    () => ({\n      store,\n      onMouseEnter: handleMouseEnter,\n      onMouseLeave: handleMouseLeave,\n    }),\n    [handleMouseEnter, handleMouseLeave, store],\n  )\n\n  return <HoveredFieldContext.Provider value={context}>{children}</HoveredFieldContext.Provider>\n})\n","import {Box, Card, Flex} from '@sanity/ui'\nimport {type ReactNode, useCallback, useEffect, useMemo, useState} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {TooltipDelayGroupProvider} from '../../../../ui-components'\nimport {type DocumentFieldActionNode} from '../../../config'\nimport {FieldPresence, type FormNodePresence} from '../../../presence'\nimport {calcAvatarStackWidth} from '../../../presence/utils'\nimport {FieldActionMenu} from '../../field'\nimport {type FieldCommentsProps} from '../../types'\n\nconst Root = styled(Flex)<{\n  $floatingCardWidth: number\n  $slotWidth: number\n  $floatingCardVisible: boolean\n}>(({theme, $floatingCardWidth, $slotWidth, $floatingCardVisible}) => {\n  const {space} = theme.sanity\n  return css`\n    /* Prevent buttons from taking up extra vertical space */\n    line-height: 1;\n    width: 100%;\n    /* For floating actions menu */\n    position: relative;\n\n    [data-ui='PresenceBox'] {\n      position: absolute;\n      bottom: 0;\n      right: ${$slotWidth + $floatingCardWidth + space[1]}px;\n    }\n    @media (hover: hover) {\n      // If hover is supported, we hide the floating card by default, so only add space for it when it's visible.\n      [data-ui='PresenceBox'] {\n        position: absolute;\n        bottom: 0;\n        right: ${$slotWidth + ($floatingCardVisible ? $floatingCardWidth : 0) + space[1]}px;\n      }\n    }\n  `\n})\n\nconst ContentBox = styled(Box)<{\n  $presenceMaxWidth: number\n}>(({theme, $presenceMaxWidth}) => {\n  const {space} = theme.sanity\n  return css`\n    max-width: calc(100% - ${$presenceMaxWidth + space[1]}px);\n    min-width: 75%;\n  `\n})\n\nconst SlotBox = styled(Box)<{\n  $right: number\n  $fieldActionsVisible: boolean\n}>(({theme, $right, $fieldActionsVisible}) => {\n  const {space} = theme.sanity\n  const right = $fieldActionsVisible ? $right + space[1] : $right\n  return css`\n    position: absolute;\n    bottom: 0;\n    right: ${right}px;\n  `\n})\n\nconst FieldActionsFloatingCard = styled(Card)`\n  align-items: center;\n  bottom: 0;\n  position: absolute;\n  right: 0;\n  transition: opacity 150ms ease;\n  line-height: 1;\n\n  @media (hover: hover) {\n    // If hover is supported, we hide the floating card by default\n    // and only show it when it has focus within or when the field is hovered or focused.\n    opacity: 0;\n    pointer-events: none;\n\n    [data-ui='FieldActionsFlex'] {\n      opacity: 0;\n    }\n\n    &[data-actions-visible='false']:not(:focus-within) {\n      // Remove the shadow when the field actions are not visible\n      box-shadow: none;\n\n      // Since the field actions always will be present in the DOM (to make them focusable) –\n      // they will always affect the width of the floating card, even when they are not visible.\n      // Therefore, we remove the background of the floating card when the field actions are not visible.\n      background: transparent;\n    }\n\n    // Remove the shadow when the field has comments but no actions\n    &[data-has-comments='true']:not([data-has-actions='true']) {\n      box-shadow: none;\n    }\n\n    // Show the floating card when it has focus within (ie when field actions are focused).\n    &:focus-within {\n      opacity: 1;\n      pointer-events: auto;\n      width: max-content;\n\n      [data-ui='FieldActionsFlex'] {\n        opacity: 1;\n        pointer-events: auto;\n        width: max-content;\n      }\n    }\n  }\n\n  &[data-visible='true'] {\n    opacity: 1;\n    pointer-events: auto;\n    width: max-content;\n  }\n\n  &[data-actions-visible='true'] {\n    [data-ui='FieldActionsFlex'] {\n      opacity: 1;\n      pointer-events: auto;\n      width: max-content;\n    }\n  }\n`\n\nconst FieldActionsFlex = styled(Flex)`\n  gap: inherit;\n  transition: opacity 150ms ease;\n`\n\nconst MAX_AVATARS = 4\n\ninterface FormFieldBaseHeaderProps {\n  __internal_comments?: FieldCommentsProps // DO NOT USE\n  __internal_slot?: ReactNode // ONLY USED BY AI ASSIST PLUGIN\n  actions?: DocumentFieldActionNode[]\n  content: ReactNode\n  fieldFocused: boolean\n  inputId?: string\n  fieldHovered: boolean\n  presence?: FormNodePresence[]\n}\n\nexport function FormFieldBaseHeader(props: FormFieldBaseHeaderProps) {\n  const {\n    __internal_comments: comments,\n    __internal_slot: slot,\n    actions,\n    content,\n    fieldFocused,\n    fieldHovered,\n    presence,\n    inputId,\n  } = props\n  const [focused, setFocused] = useState<boolean>(false)\n  // State for if an actions menu is open\n  const [menuOpen, setMenuOpen] = useState<boolean>(false)\n\n  // States for floating card element and its width\n  const [floatingCardElement, setFloatingCardElement] = useState<HTMLDivElement | null>(null)\n  const [floatingCardWidth, setFloatingCardWidth] = useState<number>(0)\n\n  // States for slot element and its width\n  const [slotElement, setSlotElement] = useState<HTMLDivElement | null>(null)\n  const [slotWidth, setSlotWidth] = useState<number>(0)\n\n  // Extract comment related data with default values\n  const {\n    hasComments = false,\n    button: commentButton = null,\n    isAddingComment = false,\n  } = comments || {}\n  // Determine if actions exist and if field actions should be shown\n  const hasActions = actions && actions.length > 0\n  const showFieldActions = fieldFocused || fieldHovered || menuOpen || isAddingComment\n\n  // Determine if there's a comment button or actions to show.\n  // We check for `comments.button` since that's the visual element that should be\n  // used for comments. If no button is provided, we don't have anything to show for comments.\n  const hasCommentsButtonOrActions = comments?.button || hasActions\n\n  // Determine if floating card with actions should be shown\n  const shouldShowFloatingCard = focused || showFieldActions || hasComments\n\n  const handleSetFloatingCardElementWidth = useCallback(() => {\n    if (floatingCardElement) {\n      const {width} = floatingCardElement.getBoundingClientRect()\n      setFloatingCardWidth(width || 0)\n    }\n  }, [floatingCardElement])\n\n  // When a focus or blur event occurs on the floating card, we need to recalculate its width.\n  // This is because presence should be positioned relative to the floating card.\n  // We need this because we don't conditionally render the floating card and rely on CSS to\n  // show/hide it, and therefore the width calculation won't be triggered when the card is shown or hidden.\n  const handleFocusCapture = useCallback(() => {\n    handleSetFloatingCardElementWidth()\n    setFocused(true)\n  }, [handleSetFloatingCardElementWidth])\n\n  const handleBlurCapture = useCallback(() => {\n    handleSetFloatingCardElementWidth()\n    setFocused(false)\n  }, [handleSetFloatingCardElementWidth])\n\n  // Calculate floating card's width\n  useEffect(() => {\n    handleSetFloatingCardElementWidth()\n  }, [handleSetFloatingCardElementWidth, showFieldActions])\n\n  // Calculate slot element's width\n  useEffect(() => {\n    if (slotElement) {\n      const {width} = slotElement.getBoundingClientRect()\n      setSlotWidth(width || 0)\n    }\n  }, [slotElement])\n\n  // Construct the slot element if slot is provided\n  const slotEl = useMemo(() => {\n    if (!slot) return null\n\n    return (\n      <SlotBox\n        $fieldActionsVisible={Boolean(showFieldActions)}\n        $right={floatingCardWidth}\n        ref={setSlotElement}\n      >\n        {slot}\n      </SlotBox>\n    )\n  }, [floatingCardWidth, showFieldActions, slot])\n\n  return (\n    <Root\n      align=\"flex-end\"\n      justify=\"space-between\"\n      $floatingCardVisible={shouldShowFloatingCard}\n      $floatingCardWidth={floatingCardWidth}\n      $slotWidth={slotWidth}\n    >\n      <ContentBox\n        data-ui=\"fieldHeaderContentBox\"\n        flex={1}\n        paddingY={2}\n        $presenceMaxWidth={calcAvatarStackWidth(MAX_AVATARS)}\n      >\n        {content}\n      </ContentBox>\n\n      {presence && presence.length > 0 && (\n        <Box data-ui=\"PresenceBox\" flex=\"none\">\n          <FieldPresence maxAvatars={MAX_AVATARS} presence={presence} />\n        </Box>\n      )}\n\n      {slotEl}\n\n      {(hasCommentsButtonOrActions || hasComments) && (\n        <TooltipDelayGroupProvider>\n          <FieldActionsFloatingCard\n            data-actions-visible={showFieldActions ? 'true' : 'false'}\n            data-has-actions={hasActions ? 'true' : 'false'}\n            data-has-comments={hasComments ? 'true' : 'false'}\n            data-visible={shouldShowFloatingCard ? 'true' : 'false'}\n            display=\"flex\"\n            onBlurCapture={handleBlurCapture}\n            onFocusCapture={handleFocusCapture}\n            ref={setFloatingCardElement}\n            sizing=\"border\"\n          >\n            {hasActions && (\n              <FieldActionsFlex\n                align=\"center\"\n                data-ui=\"FieldActionsFlex\"\n                data-testid={inputId ? `field-actions-menu-${inputId}` : `field-actions-menu`}\n              >\n                <FieldActionMenu nodes={actions} onMenuOpenChange={setMenuOpen} />\n              </FieldActionsFlex>\n            )}\n\n            {commentButton}\n          </FieldActionsFloatingCard>\n        </TooltipDelayGroupProvider>\n      )}\n    </Root>\n  )\n}\n","import {type ReactNode} from 'react'\n\n/**\n * Creates a description id from a field id, for use with aria-describedby in the field,\n * and added to the descriptive element id.\n * @internal\n */\nexport function createDescriptionId(\n  id: string | undefined,\n  description: ReactNode | undefined,\n): string | undefined {\n  if (!description || !id) return undefined\n  return `desc_${id}`\n}\n","import {ErrorOutlineIcon, InfoOutlineIcon, WarningOutlineIcon} from '@sanity/icons'\nimport {type FormNodeValidation} from '@sanity/types'\nimport {Box, Flex, type Placement, Stack, Text} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {Tooltip} from '../../../../ui-components'\nimport {useListFormat} from '../../../hooks'\nimport {useTranslation} from '../../../i18n'\n\nconst StatusIconWrapper = styled.div`\n  left: 8px;\n  position: relative;\n  width: 25px;\n`\n\n/** @internal */\nexport interface FormFieldValidationStatusProps {\n  /**\n   *\n   * @hidden\n   * @beta\n   */\n  validation?: FormNodeValidation[]\n  /**\n   *\n   * @hidden\n   * @beta\n   */\n  __unstable_showSummary?: boolean\n  fontSize?: number | number\n  placement?: Placement\n}\n\nconst EMPTY_ARRAY: never[] = []\n\nconst VALIDATION_ICONS = {\n  error: ValidationErrorIcon,\n  warning: ValidationWarningIcon,\n  info: ValidationInfoIcon,\n}\n\nconst StyledStack = styled(Stack)`\n  max-width: 200px;\n`\n\nconst StatusText = styled(Text)<{$status: 'error' | 'warning' | 'info'}>(({$status}) => {\n  if ($status === 'error') {\n    return {'--card-icon-color': 'var(--card-badge-critical-icon-color)'}\n  }\n\n  if ($status === 'warning') {\n    return {'--card-icon-color': 'var(--card-badge-caution-icon-color)'}\n  }\n\n  if ($status === 'info') {\n    return {'--card-icon-color': 'var(--card-badge-primary-icon-color)'}\n  }\n\n  return {}\n})\n\n/** @internal */\nexport function FormFieldValidationStatus(props: FormFieldValidationStatusProps) {\n  const {validation = EMPTY_ARRAY, __unstable_showSummary: showSummary, fontSize, placement} = props\n\n  const hasErrors = validation.some((v) => v.level === 'error')\n  const hasWarnings = validation.some((v) => v.level === 'warning')\n\n  // eslint-disable-next-line no-nested-ternary\n  const status = hasErrors ? 'error' : hasWarnings ? 'warning' : 'info'\n  const StatusIcon = VALIDATION_ICONS[status]\n\n  return (\n    <Tooltip\n      content={\n        <StyledStack space={3}>\n          {showSummary && <FormFieldValidationSummary validation={validation} />}\n\n          {!showSummary && (\n            <>\n              {validation.map((item, itemIndex) => (\n                // eslint-disable-next-line react/no-array-index-key\n                <FormFieldValidationStatusItem validation={item} key={itemIndex} />\n              ))}\n            </>\n          )}\n        </StyledStack>\n      }\n      portal\n      placement={placement}\n      fallbackPlacements={['bottom', 'right', 'left']}\n    >\n      <StatusIconWrapper>\n        <StatusText $status={status} size={fontSize} weight=\"medium\">\n          {StatusIcon && <StatusIcon />}\n        </StatusText>\n      </StatusIconWrapper>\n    </Tooltip>\n  )\n}\n\nfunction FormFieldValidationStatusItem(props: {validation: FormNodeValidation}) {\n  const {validation} = props\n\n  const StatusIcon = VALIDATION_ICONS[validation.level]\n\n  return (\n    <Flex>\n      <Box marginRight={2}>\n        <StatusText $status={validation.level} size={1}>\n          {StatusIcon && <StatusIcon />}\n        </StatusText>\n      </Box>\n      <Box flex={1}>\n        <Text size={1}>{validation.message}</Text>\n      </Box>\n    </Flex>\n  )\n}\n\nfunction FormFieldValidationSummary({validation}: {validation: FormNodeValidation[]}) {\n  const {t} = useTranslation()\n  const listFormatter = useListFormat()\n\n  const errorCount = validation.reduce(\n    (count, item) => (item.level === 'error' ? count + 1 : count),\n    0,\n  )\n  const warningCount = validation.reduce(\n    (count, item) => (item.level === 'warning' ? count + 1 : count),\n    0,\n  )\n\n  const hasErrors = errorCount > 0\n  const hasWarnings = warningCount > 0\n\n  if (!hasErrors && !hasWarnings) {\n    return null\n  }\n\n  const errorText = hasErrors && t('form.validation.summary.errors-count', {count: errorCount})\n  const warningText =\n    hasWarnings && t('form.validation.summary.warnings-count', {count: warningCount})\n\n  return errorText && warningText ? (\n    <Text size={1}>{listFormatter.format([errorText, warningText])}</Text>\n  ) : (\n    <Text size={1}>{errorText || warningText}</Text>\n  )\n}\n\nfunction ValidationErrorIcon() {\n  const {t} = useTranslation()\n  return (\n    <ErrorOutlineIcon\n      data-testid=\"input-validation-icon-error\"\n      aria-label={t('form.validation.has-error-aria-label')}\n      aria-hidden\n      role=\"presentation\"\n    />\n  )\n}\n\nfunction ValidationWarningIcon() {\n  const {t} = useTranslation()\n  return (\n    <WarningOutlineIcon\n      data-testid=\"input-validation-icon-warning\"\n      aria-label={t('form.validation.has-warning-aria-label')}\n      aria-hidden\n      role=\"presentation\"\n    />\n  )\n}\n\nfunction ValidationInfoIcon() {\n  const {t} = useTranslation()\n  return (\n    <InfoOutlineIcon\n      data-testid=\"input-validation-icon-info\"\n      aria-label={t('form.validation.has-info-aria-label')}\n      aria-hidden\n      role=\"presentation\"\n    />\n  )\n}\n","import {type DeprecatedProperty, type FormNodeValidation} from '@sanity/types'\nimport {Badge, Box, Flex, Stack, Text} from '@sanity/ui'\nimport {memo, type ReactNode} from 'react'\nimport {styled} from 'styled-components'\n\nimport {TextWithTone} from '../../../components'\nimport {useTranslation} from '../../../i18n'\nimport {createDescriptionId} from '../../members/common/createDescriptionId'\nimport {FormFieldValidationStatus} from './FormFieldValidationStatus'\n\nconst LabelSuffix = styled(Flex)`\n  /*\n   * Prevent the block size of appended elements (such as the deprecated field badge) affecting\n   * the intrinsic block size of the label.\n   */\n  contain: size;\n`\n\n/** @internal */\nexport interface FormFieldHeaderTextProps {\n  /**\n   *\n   * @hidden\n   * @beta\n   */\n  validation?: FormNodeValidation[]\n  description?: ReactNode\n  /**\n   * The unique ID used to target the actual input element\n   */\n  inputId?: string\n  title?: ReactNode\n  deprecated?: DeprecatedProperty\n}\n\nconst EMPTY_ARRAY: never[] = []\n\n/** @internal */\nexport const FormFieldHeaderText = memo(function FormFieldHeaderText(\n  props: FormFieldHeaderTextProps,\n) {\n  const {description, inputId, title, deprecated, validation = EMPTY_ARRAY} = props\n  const {t} = useTranslation()\n  const hasValidations = validation.length > 0\n  const hasLabelSuffix = deprecated || hasValidations\n\n  return (\n    <Stack space={3}>\n      <Flex align=\"center\" paddingY={1}>\n        <Text as=\"label\" htmlFor={inputId} weight=\"medium\" size={1}>\n          {title || (\n            <span style={{color: 'var(--card-muted-fg-color)'}}>\n              {t('form.field.untitled-field-label')}\n            </span>\n          )}\n        </Text>\n\n        {hasLabelSuffix && (\n          <LabelSuffix align=\"center\" flex={1}>\n            {deprecated && (\n              <Box marginLeft={2}>\n                <Badge data-testid={`deprecated-badge-${title}`} tone=\"caution\">\n                  {t('form.field.deprecated-label')}\n                </Badge>\n              </Box>\n            )}\n\n            {hasValidations && (\n              <Box marginLeft={2}>\n                <FormFieldValidationStatus fontSize={1} placement=\"top\" validation={validation} />\n              </Box>\n            )}\n          </LabelSuffix>\n        )}\n      </Flex>\n\n      {deprecated && (\n        <TextWithTone data-testid={`deprecated-message-${title}`} tone=\"caution\" size={1}>\n          {deprecated.reason}\n        </TextWithTone>\n      )}\n\n      {description && (\n        <Text muted size={1} id={createDescriptionId(inputId, description)}>\n          {description}\n        </Text>\n      )}\n    </Stack>\n  )\n})\n","import {type DeprecatedProperty, type FormNodeValidation} from '@sanity/types'\nimport {Stack} from '@sanity/ui'\nimport {type HTMLProps, memo, type ReactNode} from 'react'\n\nimport {type DocumentFieldActionNode} from '../../../config'\nimport {type FormNodePresence} from '../../../presence'\nimport {useFieldActions} from '../../field'\nimport {type FieldCommentsProps} from '../../types'\nimport {FormFieldBaseHeader} from './FormFieldBaseHeader'\nimport {FormFieldHeaderText} from './FormFieldHeaderText'\n\nconst EMPTY_ARRAY: never[] = []\n\n/** @internal */\nexport interface FormFieldProps {\n  /**\n   * @hidden\n   * @beta\n   */\n  __unstable_headerActions?: DocumentFieldActionNode[]\n  /**\n   * @hidden\n   * @beta\n   */\n  __unstable_presence?: FormNodePresence[]\n  /** @internal @deprecated DO NOT USE */\n  __internal_comments?: FieldCommentsProps\n  /** @internal @deprecated ONLY USED BY AI ASSIST PLUGIN */\n  __internal_slot?: ReactNode\n  children: ReactNode\n  description?: ReactNode\n  /**\n   * The unique ID used to target the actual input element\n   */\n  inputId?: string\n  /**\n   * The nesting level of the form field\n   */\n  level?: number\n  title?: ReactNode\n  /**\n   * @beta\n   */\n  validation?: FormNodeValidation[]\n  deprecated?: DeprecatedProperty\n}\n\n/** @internal */\nexport const FormField = memo(function FormField(\n  props: FormFieldProps & Omit<HTMLProps<HTMLDivElement>, 'as' | 'height' | 'ref'>,\n) {\n  const {\n    __unstable_headerActions: actions = EMPTY_ARRAY,\n    __unstable_presence: presence = EMPTY_ARRAY,\n    __internal_slot: slot = null,\n    __internal_comments: comments,\n    children,\n    description,\n    inputId,\n    level,\n    title,\n    validation,\n    deprecated,\n    ...restProps\n  } = props\n  const {focused, hovered, onMouseEnter, onMouseLeave} = useFieldActions()\n\n  return (\n    <Stack\n      {...restProps}\n      data-level={level}\n      onMouseEnter={onMouseEnter}\n      onMouseLeave={onMouseLeave}\n      space={2}\n    >\n      {/*\n        NOTE: It’s not ideal to hide validation, presence and description when there's no `title`.\n        So we might want to separate the concerns of input vs formfield components later on.\n      */}\n      {title && (\n        <FormFieldBaseHeader\n          __internal_comments={comments}\n          __internal_slot={slot}\n          actions={actions}\n          fieldFocused={Boolean(focused)}\n          fieldHovered={hovered}\n          presence={presence}\n          inputId={inputId}\n          content={\n            <FormFieldHeaderText\n              description={description}\n              inputId={inputId}\n              title={title}\n              validation={validation}\n              deprecated={deprecated}\n            />\n          }\n        />\n      )}\n      <div>{children}</div>\n    </Stack>\n  )\n})\n","import {ToggleArrowRightIcon} from '@sanity/icons'\nimport {Box, Flex, rem, Text, type Theme} from '@sanity/ui'\nimport {memo, type ReactNode} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {focusRingStyle} from './styles'\n\nexport interface FormFieldSetLegendProps {\n  collapsed: boolean\n  collapsible?: boolean\n  onClick?: () => void\n  title: ReactNode\n}\n\nconst Root = styled.legend`\n  /* See: https://thatemil.com/blog/2015/01/03/reset-your-fieldset/ */\n  padding: 0;\n  display: table;\n`\n\nconst ToggleButton = styled(Flex).attrs({forwardedAs: 'button'})((props: {theme: Theme}) => {\n  const {theme} = props\n  const {focusRing, radius} = theme.sanity\n  const {base} = theme.sanity.color\n\n  return css`\n    appearance: none;\n    border: 0;\n    background: none;\n    color: inherit;\n    -webkit-font-smoothing: inherit;\n    font: inherit;\n    outline: none;\n    border-radius: ${rem(radius[2])};\n    position: relative;\n\n    &:not([hidden]) {\n      display: flex;\n    }\n\n    &:focus {\n      box-shadow: ${focusRingStyle({base, focusRing})};\n    }\n\n    &:focus:not(:focus-visible) {\n      box-shadow: none;\n    }\n\n    /* Added to increase the hit area of the collapsible fieldset */\n    &::after {\n      content: '';\n      position: absolute;\n      top: -10px;\n      right: -10px;\n      bottom: -10px;\n      left: -10px;\n    }\n  `\n})\n\nconst ToggleIconBox = styled(Box)`\n  width: 9px;\n  height: 9px;\n  margin-right: 3px;\n\n  & svg {\n    transition: transform 100ms;\n  }\n`\n\nexport const FormFieldSetLegend = memo(function FormFieldSetLegend(props: FormFieldSetLegendProps) {\n  const {collapsed, collapsible, onClick, title} = props\n\n  const text = (\n    <Text weight=\"medium\" size={1}>\n      {title}\n    </Text>\n  )\n\n  if (!collapsible) {\n    return <Root>{text}</Root>\n  }\n\n  return (\n    <Root>\n      <ToggleButton type=\"button\" onClick={onClick}>\n        <ToggleIconBox>\n          <Text muted size={1}>\n            <ToggleArrowRightIcon\n              style={{\n                transform: `rotate(${collapsed ? '0' : '90deg'}) translate3d(0, 0, 0)`,\n              }}\n            />\n          </Text>\n        </ToggleIconBox>\n\n        {text}\n      </ToggleButton>\n    </Root>\n  )\n})\n","/* eslint-disable camelcase */\nimport {type DeprecatedProperty, type FormNodeValidation} from '@sanity/types'\nimport {Badge, Box, Flex, Stack, Text, type Theme} from '@sanity/ui'\nimport {\n  type FocusEvent,\n  type ForwardedRef,\n  forwardRef,\n  type HTMLProps,\n  type ReactNode,\n  useCallback,\n  useImperativeHandle,\n  useMemo,\n  useRef,\n} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {TextWithTone} from '../../../components'\nimport {type DocumentFieldActionNode} from '../../../config'\nimport {useTranslation} from '../../../i18n'\nimport {type FormNodePresence} from '../../../presence'\nimport {useFieldActions} from '../../field'\nimport {createDescriptionId} from '../../members/common/createDescriptionId'\nimport {type FieldCommentsProps} from '../../types'\nimport {FormFieldBaseHeader} from './FormFieldBaseHeader'\nimport {FormFieldSetLegend} from './FormFieldSetLegend'\nimport {FormFieldValidationStatus} from './FormFieldValidationStatus'\nimport {AlignedBottomGrid, focusRingStyle} from './styles'\n\n/** @internal */\nexport interface FormFieldSetProps {\n  /**\n   *\n   * @hidden\n   * @beta\n   */\n  __unstable_headerActions?: DocumentFieldActionNode[]\n  /**\n   * @beta\n   */\n  __unstable_presence?: FormNodePresence[]\n  /** @internal @deprecated DO NOT USE */\n  __internal_comments?: FieldCommentsProps\n  /** @internal @deprecated ONLY USED BY AI ASSIST PLUGIN */\n  __internal_slot?: ReactNode\n  children: ReactNode | (() => ReactNode)\n  collapsed?: boolean\n  collapsible?: boolean\n  columns?: number | number[]\n  description?: ReactNode\n  /**\n   * The nesting level of the form field set\n   */\n  level?: number\n  onCollapse?: () => void\n  onExpand?: () => void\n  title?: ReactNode\n  /**\n   *\n   * @hidden\n   * @beta\n   */\n  validation?: FormNodeValidation[]\n  inputId: string\n  deprecated?: DeprecatedProperty\n}\n\nfunction getChildren(children: ReactNode | (() => ReactNode)): ReactNode {\n  return typeof children === 'function' ? children() : children\n}\n\nconst Root = styled(Stack).attrs({forwardedAs: 'fieldset'})`\n  border: none;\n\n  /* See: https://thatemil.com/blog/2015/01/03/reset-your-fieldset/ */\n  body:not(:-moz-handler-blocked) & {\n    display: table-cell;\n  }\n`\n\nconst Content = styled(Box)<{\n  /*\n   * @note: The dollar sign ($) prefix is a `styled-components` convention for\n   * denoting transient props. See:\n   * https://styled-components.com/docs/api#transient-props\n   */\n  $borderLeft: boolean\n  $focused?: boolean\n  theme: Theme\n}>((props) => {\n  const {$borderLeft, $focused, theme} = props\n  const {focusRing} = theme.sanity\n  const {base} = theme.sanity.color\n\n  return css`\n    outline: none;\n    border-left: ${$borderLeft ? '1px solid var(--card-border-color)' : undefined};\n    transition:\n      border-color 0.2s ease-in-out,\n      box-shadow 0.2s ease-in-out;\n\n    ${$borderLeft &&\n    $focused &&\n    `border-left: 1px solid var(--card-focus-ring-color);\n    box-shadow: inset 1px 0 0 var(--card-focus-ring-color);`}\n\n    ${$borderLeft &&\n    !$focused &&\n    `\n      box-shadow: inset 0 0 0 transparent;\n    `}\n\n    &:focus {\n      box-shadow: ${focusRingStyle({base, focusRing: {...focusRing, offset: 2}})};\n    }\n\n    &:focus:not(:focus-visible) {\n      box-shadow: none;\n    }\n  `\n})\n\nconst EMPTY_ARRAY: never[] = []\n\n/** @internal */\nexport const FormFieldSet = forwardRef(function FormFieldSet(\n  props: FormFieldSetProps & Omit<HTMLProps<HTMLDivElement>, 'as' | 'height' | 'ref'>,\n  forwardedRef: ForwardedRef<HTMLDivElement>,\n) {\n  const {\n    __internal_comments: comments,\n    __internal_slot: slot = null,\n    __unstable_headerActions: actions = EMPTY_ARRAY,\n    __unstable_presence: presence = EMPTY_ARRAY,\n    children,\n    collapsed,\n    collapsible,\n    columns,\n    description,\n    level = 0,\n    onCollapse,\n    onExpand,\n    onFocus,\n    tabIndex,\n    title,\n    validation = EMPTY_ARRAY,\n    inputId,\n    deprecated,\n    ...restProps\n  } = props\n\n  const {focused, hovered, onMouseEnter, onMouseLeave} = useFieldActions()\n\n  const hasValidationMarkers = validation.length > 0\n  const ref = useRef<HTMLDivElement | null>(null)\n  const {t} = useTranslation()\n\n  useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(forwardedRef, () => ref.current)\n\n  const handleFocus = useCallback(\n    (event: FocusEvent<HTMLDivElement>) => {\n      const element = ref.current\n\n      if (element === event.target) {\n        if (onFocus) onFocus(event)\n      }\n    },\n    [onFocus],\n  )\n\n  const handleToggle = useCallback(\n    () => (collapsed ? onExpand?.() : onCollapse?.()),\n    [collapsed, onCollapse, onExpand],\n  )\n\n  const content = useMemo(() => {\n    if (collapsed) {\n      return null\n    }\n    return (\n      <AlignedBottomGrid columns={columns} gapX={4} gapY={5}>\n        {getChildren(children)}\n      </AlignedBottomGrid>\n    )\n  }, [children, collapsed, columns])\n\n  return (\n    <Root\n      data-level={level}\n      {...restProps}\n      onMouseEnter={onMouseEnter}\n      onMouseLeave={onMouseLeave}\n      space={2}\n    >\n      <FormFieldBaseHeader\n        __internal_comments={comments}\n        __internal_slot={slot}\n        actions={actions}\n        fieldFocused={Boolean(focused)}\n        fieldHovered={hovered}\n        presence={presence}\n        inputId={inputId}\n        content={\n          <Stack space={3}>\n            <Flex align=\"center\">\n              {title && (\n                <FormFieldSetLegend\n                  collapsed={Boolean(collapsed)}\n                  collapsible={collapsible}\n                  onClick={collapsible ? handleToggle : undefined}\n                  title={title}\n                />\n              )}\n              {deprecated && (\n                <Box marginLeft={2}>\n                  <Badge data-testid={`deprecated-badge-${title}`} tone=\"caution\">\n                    {t('form.field.deprecated-label')}\n                  </Badge>\n                </Box>\n              )}\n              {hasValidationMarkers && (\n                <Box marginLeft={2}>\n                  <FormFieldValidationStatus fontSize={1} placement=\"top\" validation={validation} />\n                </Box>\n              )}\n            </Flex>\n\n            {deprecated && (\n              <TextWithTone data-testid={`deprecated-message-${title}`} tone=\"caution\" size={1}>\n                {deprecated.reason}\n              </TextWithTone>\n            )}\n\n            {description && (\n              <Text muted size={1} id={createDescriptionId(inputId, description)}>\n                {description}\n              </Text>\n            )}\n          </Stack>\n        }\n      />\n\n      <Content\n        $borderLeft={level > 0}\n        $focused={Boolean(focused)}\n        hidden={collapsed}\n        paddingLeft={level === 0 ? 0 : 3}\n        onFocus={typeof tabIndex === 'number' && tabIndex > -1 ? handleFocus : undefined}\n        ref={ref}\n        tabIndex={tabIndex}\n      >\n        {!collapsed && content}\n      </Content>\n    </Root>\n  )\n})\n","import {type ReactNode} from 'react'\nimport {styled} from 'styled-components'\n\n/** @internal */\nexport interface FieldStatusProps {\n  children?: ReactNode\n  maxAvatars?: number\n  position?: 'top' | 'bottom'\n}\n\nconst Root = styled.div`\n  display: flex;\n  justify-content: flex-end;\n  box-sizing: border-box;\n  min-height: var(--avatar-height);\n  width: 77px;\n  margin-left: var(--small-padding);\n\n  &[data-max-avatars='1'] {\n    max-width: 23px;\n  }\n\n  &[data-position='top'] {\n    align-self: flex-start;\n  }\n\n  &[data-position='bottom'] {\n    align-self: flex-end;\n  }\n`\n\n/** @internal */\nexport function FormFieldStatus({children, maxAvatars, position = 'bottom'}: FieldStatusProps) {\n  return (\n    <Root data-max-avatars={maxAvatars} data-position={position}>\n      {children}\n    </Root>\n  )\n}\n","import {useEffect, useRef} from 'react'\nimport shallowEquals from 'shallow-equals'\n\n/**\n * A hook for doing side effects as a response to a change in a hook value between renders\n *\n * @example\n * ```ts\n * useDidUpdate(hasFocus, (hadFocus, hasFocus) => {\n *  if (hasFocus) {\n *    scrollIntoView(elementRef.current)\n *   }\n * })\n * ```\n *\n * @beta\n * @hidden\n */\nexport function useDidUpdate<T>(\n  /** The value you want to respond to changes in. */\n  current: T,\n  /** Callback to run when the value changes. */\n  didUpdate: (previous: T | undefined, current: T) => void,\n  compare?: (previous: T | undefined, current: T) => boolean,\n): void\nexport function useDidUpdate<T>(\n  current: T,\n  didUpdate: (previous: T | undefined, current: T | undefined) => void,\n  compare: (previous: T | undefined, current: T) => boolean = shallowEquals,\n): void {\n  const previous = useRef<T | undefined>(undefined)\n  useEffect(() => {\n    if (!compare(previous.current, current)) {\n      didUpdate(previous.current, current)\n      previous.current = current\n    }\n  }, [compare, current, didUpdate])\n}\n","import {type Path, type PathSegment} from '@sanity/types'\n\nimport {\n  type FormDecPatch,\n  type FormDiffMatchPatch,\n  type FormIncPatch,\n  type FormInsertPatch,\n  type FormInsertPatchPosition,\n  type FormSetIfMissingPatch,\n  type FormSetPatch,\n  type FormUnsetPatch,\n} from './types'\n\n/** @internal */\nexport const SANITY_PATCH_TYPE = Symbol.for('sanity.patch')\n\n/**\n * @hidden\n * @beta */\nexport function setIfMissing(value: any, path: Path = []): FormSetIfMissingPatch {\n  return {\n    patchType: SANITY_PATCH_TYPE,\n    type: 'setIfMissing',\n    path,\n    value,\n  }\n}\n\n/**\n * @hidden\n * @beta */\nexport function insert(\n  items: any[],\n  position: FormInsertPatchPosition,\n  path: Path = [],\n): FormInsertPatch {\n  return {\n    patchType: SANITY_PATCH_TYPE,\n    type: 'insert',\n    path,\n    position,\n    items,\n  }\n}\n\n/**\n * @hidden\n * @beta */\nexport function set(value: any, path: Path = []): FormSetPatch {\n  return {patchType: SANITY_PATCH_TYPE, type: 'set', path, value}\n}\n\n/**\n * @hidden\n * @beta */\nexport function unset(path: Path = []): FormUnsetPatch {\n  return {patchType: SANITY_PATCH_TYPE, type: 'unset', path}\n}\n\n/**\n * @hidden\n * @beta */\nexport function diffMatchPatch(value: string, path: Path = []): FormDiffMatchPatch {\n  return {patchType: SANITY_PATCH_TYPE, type: 'diffMatchPatch', path, value}\n}\n\n/**\n * @hidden\n * @beta */\nexport function inc(amount = 1, path: Path = []): FormIncPatch {\n  return {patchType: SANITY_PATCH_TYPE, type: 'inc', path, value: amount}\n}\n\n/**\n * @hidden\n * @beta */\nexport function dec(amount = 1, path: Path = []): FormDecPatch {\n  return {patchType: SANITY_PATCH_TYPE, type: 'dec', path, value: amount}\n}\n\n/** @internal */\nexport function prefixPath<T extends {path: Path}>(patch: T, segment: PathSegment): T {\n  return {\n    ...patch,\n    path: [segment, ...patch.path],\n  }\n}\n","import {type FormPatch} from './types'\n\n/**\n *\n * @hidden\n * @beta\n */\nexport interface MutationPatchMsg {\n  type: 'mutation'\n  patches: FormPatch[]\n  snapshot: unknown\n}\n\n/**\n *\n * @hidden\n * @beta\n */\nexport interface RebasePatchMsg {\n  type: 'rebase'\n  patches: FormPatch[]\n  snapshot: unknown\n}\n\n/**\n *\n * @hidden\n * @beta\n */\nexport type PatchMsg = MutationPatchMsg | RebasePatchMsg\n\n/**\n *\n * @hidden\n * @beta\n */\nexport interface PatchMsgSubscriber {\n  (msg: PatchMsg): void\n}\n\n/**\n *\n * @hidden\n * @beta\n */\nexport interface PatchChannel {\n  publish: (msg: PatchMsg) => void\n  subscribe: (subscriber: PatchMsgSubscriber) => () => void\n}\n\n/**\n * @internal\n */\nexport function createPatchChannel(): PatchChannel {\n  const _subscribers: PatchMsgSubscriber[] = []\n\n  return {\n    publish(msg: PatchMsg) {\n      for (const subscriber of _subscribers) {\n        subscriber(msg)\n      }\n    },\n\n    subscribe(subscriber) {\n      _subscribers.push(subscriber)\n\n      return () => {\n        const idx = _subscribers.indexOf(subscriber)\n\n        if (idx > -1) {\n          _subscribers.splice(idx, 1)\n        }\n      }\n    },\n  }\n}\n","import {type PathSegment} from '@sanity/types'\nimport {flatten} from 'lodash'\n\nimport {prefixPath} from './patch'\nimport {type FormPatch, type PatchArg} from './types'\n\n/**\n *\n * @hidden\n * @beta\n */\nexport class PatchEvent {\n  static from(input: PatchArg | PatchEvent): PatchEvent {\n    if (input instanceof PatchEvent) {\n      return input\n    }\n    return new PatchEvent(Array.isArray(input) ? flatten(input) : [input])\n  }\n\n  patches: Array<FormPatch>\n\n  constructor(patches: Array<FormPatch>) {\n    this.patches = patches\n  }\n\n  prepend(...patches: PatchArg[]): PatchEvent {\n    return PatchEvent.from([...flatten(patches), ...this.patches])\n  }\n\n  append(...patches: PatchArg[]): PatchEvent {\n    return PatchEvent.from([...this.patches, ...flatten(patches)])\n  }\n\n  prefixAll(segment: PathSegment): PatchEvent {\n    return PatchEvent.from(this.patches.map((patch) => prefixPath(patch, segment)))\n  }\n}\n","/* eslint-disable react/no-unused-prop-types */\nimport {type Path} from '@sanity/types'\nimport {memo, type ReactNode, useCallback, useContext, useEffect, useMemo, useRef} from 'react'\nimport {FormCallbacksContext} from 'sanity/_singletons'\n\nimport {type OnPathFocusPayload} from '../..'\nimport {type FormPatch, type PatchEvent} from '../../patch'\n\n/** @internal */\nexport interface FormCallbacksValue {\n  transformPatches?: (patches: FormPatch[]) => FormPatch[]\n  onChange: (patchEvent: PatchEvent) => void\n  onPathFocus: (path: Path, payload?: OnPathFocusPayload) => void\n  onPathBlur: (path: Path) => void\n  onPathOpen: (path: Path) => void\n  onSetPathCollapsed: (path: Path, collapsed: boolean) => void\n  onSetFieldSetCollapsed: (path: Path, collapsed: boolean) => void\n  onFieldGroupSelect: (path: Path, fieldGroupName: string) => void\n}\n\n/** @internal */\nexport const FormCallbacksProvider = memo(function FormCallbacksProvider(\n  props: FormCallbacksValue & {children: ReactNode},\n) {\n  const ref = useRef<FormCallbacksValue>(props)\n  useEffect(() => {\n    ref.current = props\n  }, [props])\n\n  const transformPatches = useCallback(\n    (patches: FormPatch[]) => {\n      return ref.current?.transformPatches?.(patches) ?? []\n    },\n    [ref],\n  )\n\n  const onChange = useCallback((patchEvent: PatchEvent) => {\n    ref.current.onChange(patchEvent)\n  }, [])\n\n  const onPathFocus = useCallback((path: Path, payload?: OnPathFocusPayload) => {\n    ref.current.onPathFocus(path, payload)\n  }, [])\n  const onPathBlur = useCallback((path: Path) => {\n    ref.current.onPathBlur(path)\n  }, [])\n  const onPathOpen = useCallback((path: Path) => {\n    ref.current.onPathOpen(path)\n  }, [])\n  const onSetPathCollapsed = useCallback((path: Path, collapsed: boolean) => {\n    ref.current.onSetPathCollapsed(path, collapsed)\n  }, [])\n  const onSetFieldSetCollapsed = useCallback((path: Path, collapsed: boolean) => {\n    ref.current.onSetFieldSetCollapsed(path, collapsed)\n  }, [])\n  const onFieldGroupSelect = useCallback((path: Path, fieldGroupName: string) => {\n    ref.current.onFieldGroupSelect(path, fieldGroupName)\n  }, [])\n\n  const contextValue: FormCallbacksValue = useMemo(\n    () => ({\n      transformPatches,\n      onChange,\n      onPathFocus,\n      onPathBlur,\n      onPathOpen,\n      onSetPathCollapsed,\n      onSetFieldSetCollapsed,\n      onFieldGroupSelect,\n    }),\n    [\n      onChange,\n      onFieldGroupSelect,\n      onPathBlur,\n      onPathFocus,\n      onPathOpen,\n      onSetFieldSetCollapsed,\n      onSetPathCollapsed,\n      transformPatches,\n    ],\n  )\n\n  return (\n    <FormCallbacksContext.Provider value={contextValue}>\n      {props.children}\n    </FormCallbacksContext.Provider>\n  )\n})\n\n/** @internal */\nexport function useFormCallbacks(): FormCallbacksValue {\n  const ctx = useContext(FormCallbacksContext)\n  if (!ctx) {\n    throw new Error('Form context not provided')\n  }\n  return ctx\n}\n","import {isArraySchemaType, isObjectSchemaType, type SchemaType} from '@sanity/types'\n\nexport function createProtoValue(type: SchemaType): any {\n  if (isObjectSchemaType(type)) {\n    return type.name === 'object' ? {} : {_type: type.name}\n  }\n  if (isArraySchemaType(type)) {\n    return []\n  }\n  if (type.jsonType === 'string') {\n    return ''\n  }\n  if (type.jsonType === 'number') {\n    return 0\n  }\n  if (type.jsonType === 'boolean') {\n    return false\n  }\n  return undefined\n}\n","import getRandomValues from 'get-random-values-esm'\n\n// WHATWG crypto RNG - https://w3c.github.io/webcrypto/Overview.html\nfunction whatwgRNG(length = 16) {\n  const rnds8 = new Uint8Array(length)\n  getRandomValues(rnds8)\n  return rnds8\n}\n\nconst getByteHexTable = (() => {\n  let table: string[]\n  return () => {\n    if (table) {\n      return table\n    }\n    table = []\n    for (let i = 0; i < 256; ++i) {\n      table[i] = (i + 0x100).toString(16).slice(1)\n    }\n    return table\n  }\n})()\n\nexport function randomKey(length?: number) {\n  const table = getByteHexTable()\n  return whatwgRNG(length)\n    .reduce((str, n) => str + table[n], '')\n    .slice(0, length)\n}\n","import {randomKey} from './randomKey'\n\nfunction hasKey<T extends {_key?: string}>(item: T): item is T & {_key: string} {\n  return item._key !== undefined\n}\n\nexport function ensureKey<T extends {_key?: string}>(item: T): T & {_key: string} {\n  return hasKey(item) ? item : {...item, _key: randomKey(12)}\n}\n","import {type ArraySchemaType, type Path, type SchemaType} from '@sanity/types'\nimport {resolveTypeName} from '@sanity/util/content'\nimport {concat, defer, EMPTY, from, type Observable, of} from 'rxjs'\nimport {catchError, filter, map, mergeMap} from 'rxjs/operators'\n\nimport {isNonNullable} from '../../../util'\nimport {type FormPatch, set, unset} from '../../patch'\nimport {isEmptyItem} from '../../store/utils/isEmptyItem'\nimport {type ObjectItem} from '../../types'\n\nconst getMemberTypeOfItem = (schemaType: ArraySchemaType, item: any): SchemaType | undefined => {\n  const itemTypeName = resolveTypeName(item)\n  return schemaType.of.find((memberType) => memberType.name === itemTypeName)\n}\n\n/**\n * Create patches that shallow merges keys from the given value\n * Used by initial value resolver to retain any properties already added on the item when initial value is done resolving\n * */\nfunction assign(values: Record<string, unknown>, path: Path) {\n  return Object.entries(values).map(([key, value]) => set(value, [...path, key]))\n}\n\nexport function resolveInitialArrayValues<T extends ObjectItem>(\n  items: T[],\n  schemaType: ArraySchemaType,\n  resolver: (type: SchemaType, params: Record<string, unknown>) => Promise<T>,\n): Observable<\n  | {type: 'patch'; patches: FormPatch[]}\n  | {type: 'error'; error: Error; item: T; schemaType: SchemaType}\n> {\n  return from(items).pipe(\n    mergeMap((item) => {\n      const itemPathSegment = {_key: item._key}\n      return of(getMemberTypeOfItem(schemaType, item)).pipe(\n        mergeMap((memberType) => (memberType ? of(memberType) : EMPTY)),\n        mergeMap((memberType) => {\n          if (!isEmptyItem(item) || !resolver) {\n            return EMPTY\n          }\n          return concat(\n            of({\n              type: 'patch' as const,\n              patches: [set(true, [itemPathSegment, '_resolvingInitialValue'])],\n            }),\n            defer(() => resolver(memberType, item)).pipe(\n              filter(isNonNullable),\n              map((initial) => ({\n                type: 'patch' as const,\n                patches: assign(initial, [itemPathSegment]),\n              })),\n              catchError((error) =>\n                of({type: 'error' as const, error, item, schemaType: memberType}),\n              ),\n            ),\n            of({\n              type: 'patch' as const,\n              patches: [unset([itemPathSegment, '_resolvingInitialValue'])],\n            }),\n          )\n        }),\n      )\n    }),\n  )\n}\n","import {type Path} from '@sanity/types'\nimport {useToast} from '@sanity/ui'\nimport {useCallback, useMemo, useRef} from 'react'\nimport {tap} from 'rxjs/operators'\n\nimport {useTranslation} from '../../../../i18n'\nimport {useResolveInitialValueForType} from '../../../../store'\nimport {useCopyPaste} from '../../../../studio'\nimport {useGetFormValue} from '../../../contexts/GetFormValue'\nimport {useDidUpdate} from '../../../hooks/useDidUpdate'\nimport {insert, type PatchArg, PatchEvent, setIfMissing, unset} from '../../../patch'\nimport {type ArrayOfObjectsItemMember} from '../../../store'\nimport {isEmptyItem} from '../../../store/utils/isEmptyItem'\nimport {FormCallbacksProvider, useFormCallbacks} from '../../../studio/contexts/FormCallbacks'\nimport {\n  type ArrayInputCopyEvent,\n  type ArrayInputInsertEvent,\n  type FormDocumentValue,\n  type ObjectInputProps,\n  type ObjectItem,\n  type ObjectItemProps,\n  type RenderAnnotationCallback,\n  type RenderArrayOfObjectsItemCallback,\n  type RenderBlockCallback,\n  type RenderFieldCallback,\n  type RenderInputCallback,\n  type RenderPreviewCallback,\n} from '../../../types'\nimport {createProtoValue} from '../../../utils/createProtoValue'\nimport {ensureKey} from '../../../utils/ensureKey'\nimport {createDescriptionId} from '../../common/createDescriptionId'\nimport {resolveInitialArrayValues} from '../../common/resolveInitialArrayValues'\n\n/**\n *\n * @hidden\n * @beta\n */\nexport interface MemberItemProps {\n  member: ArrayOfObjectsItemMember\n  renderAnnotation?: RenderAnnotationCallback\n  renderBlock?: RenderBlockCallback\n  renderInlineBlock?: RenderBlockCallback\n  renderItem: RenderArrayOfObjectsItemCallback\n  renderField: RenderFieldCallback\n  renderInput: RenderInputCallback\n  renderPreview: RenderPreviewCallback\n}\n\n/**\n *\n * @hidden\n * @beta\n */\nexport function ArrayOfObjectsItem(props: MemberItemProps) {\n  const focusRef = useRef<{focus: () => void}>(undefined)\n  const {\n    member,\n    renderAnnotation,\n    renderBlock,\n    renderField,\n    renderInlineBlock,\n    renderInput,\n    renderItem,\n    renderPreview,\n  } = props\n  const {t} = useTranslation()\n\n  const {\n    onPathBlur,\n    onPathFocus,\n    onChange,\n    onPathOpen,\n    onSetPathCollapsed,\n    onSetFieldSetCollapsed,\n    onFieldGroupSelect,\n  } = useFormCallbacks()\n  const resolveInitialValue = useResolveInitialValueForType()\n  const getFormValue = useGetFormValue()\n  const {onCopy} = useCopyPaste()\n\n  useDidUpdate(member.item.focused, (hadFocus, hasFocus) => {\n    if (!hadFocus && hasFocus) {\n      focusRef.current?.focus()\n    }\n  })\n\n  const onRemove = useCallback(() => {\n    onChange(PatchEvent.from([unset([{_key: member.key}])]))\n  }, [member.key, onChange])\n\n  const handleOpenItem = useCallback(\n    (path: Path) => {\n      onPathOpen(path)\n      onSetPathCollapsed(path, false)\n    },\n    [onPathOpen, onSetPathCollapsed],\n  )\n  const toast = useToast()\n\n  // Note: this handles inserting *siblings*\n  const handleInsert = useCallback(\n    (event: Omit<ArrayInputInsertEvent<ObjectItem>, 'referenceItem'>) => {\n      if (event.items.length === 0) {\n        throw new Error('Insert event should include at least one item')\n      }\n      const itemsWithKeys = event.items.map((item) => ensureKey(item))\n\n      onChange(PatchEvent.from([insert(itemsWithKeys, event.position, [{_key: member.key}])]))\n\n      const focusItemKey = itemsWithKeys[0]._key\n      const parentPath = member.item.path.slice(0, -1)\n      const itemPath = [...parentPath, {_key: focusItemKey}]\n\n      // Set focus at the first item (todo: verify that this is the expected/better behavior when adding multiple items)\n      onPathFocus(itemPath)\n\n      const shouldOpen = event.open !== false\n      if (event.skipInitialValue) {\n        if (shouldOpen) {\n          handleOpenItem(itemPath)\n        }\n      } else {\n        resolveInitialArrayValues(itemsWithKeys, member.parentSchemaType, resolveInitialValue)\n          .pipe(\n            tap((result) => {\n              if (result.type === 'patch') {\n                onChange(PatchEvent.from(result.patches))\n              } else {\n                toast.push({\n                  title: t('inputs.array.error.cannot-resolve-initial-value-title'),\n                  description: t('inputs.array.error.cannot-resolve-initial-value-description', {\n                    schemaTypeTitle: result.schemaType.title,\n                    errorMessage: result.error.message,\n                  }),\n                  status: 'error',\n                })\n              }\n            }),\n          )\n          .subscribe({\n            complete: () => {\n              if (shouldOpen) {\n                handleOpenItem(itemPath)\n              }\n            },\n          })\n      }\n    },\n    [\n      handleOpenItem,\n      member.item.path,\n      member.key,\n      member.parentSchemaType,\n      onChange,\n      onPathFocus,\n      resolveInitialValue,\n      toast,\n      t,\n    ],\n  )\n\n  const handleCopy = useCallback(\n    (_: Omit<ArrayInputCopyEvent<ObjectItem>, 'referenceItem'>) => {\n      const documentValue = getFormValue([]) as FormDocumentValue\n      onCopy(member.item.path, documentValue, {\n        context: {source: 'arrayItem'},\n        patchType: 'append',\n      })\n    },\n    [getFormValue, onCopy, member.item.path],\n  )\n\n  const handleBlur = useCallback(() => {\n    onPathBlur(member.item.path)\n  }, [member.item.path, onPathBlur])\n\n  const handleFocus = useCallback(() => {\n    onPathFocus(member.item.path)\n  }, [member.item.path, onPathFocus])\n\n  const handleFocusChildPath = useCallback(\n    (path: Path) => {\n      onPathFocus(member.item.path.concat(path))\n    },\n    [member.item.path, onPathFocus],\n  )\n\n  const handleChange = useCallback(\n    (event: PatchEvent | PatchArg) => {\n      onChange(\n        PatchEvent.from(event)\n          .prepend(setIfMissing(createProtoValue(member.item.schemaType)))\n          .prefixAll({_key: member.key}),\n      )\n    },\n    [onChange, member.item.schemaType, member.key],\n  )\n  const handleCollapse = useCallback(() => {\n    onSetPathCollapsed(member.item.path, true)\n  }, [onSetPathCollapsed, member.item.path])\n\n  const handleExpand = useCallback(() => {\n    onSetPathCollapsed(member.item.path, false)\n  }, [onSetPathCollapsed, member.item.path])\n\n  const handleCollapseField = useCallback(\n    (fieldName: string) => {\n      onSetPathCollapsed(member.item.path.concat(fieldName), true)\n    },\n    [onSetPathCollapsed, member.item.path],\n  )\n  const handleExpandField = useCallback(\n    (fieldName: string) => {\n      onSetPathCollapsed(member.item.path.concat(fieldName), false)\n    },\n    [onSetPathCollapsed, member.item.path],\n  )\n  const handleCloseField = useCallback(() => {\n    onPathOpen(member.item.path)\n  }, [onPathOpen, member.item.path])\n  const handleOpenField = useCallback(\n    (fieldName: string) => {\n      onPathOpen(member.item.path.concat(fieldName))\n    },\n    [onPathOpen, member.item.path],\n  )\n  const handleExpandFieldSet = useCallback(\n    (fieldsetName: string) => {\n      onSetFieldSetCollapsed(member.item.path.concat(fieldsetName), false)\n    },\n    [onSetFieldSetCollapsed, member.item.path],\n  )\n  const handleCollapseFieldSet = useCallback(\n    (fieldsetName: string) => {\n      onSetFieldSetCollapsed(member.item.path.concat(fieldsetName), true)\n    },\n    [onSetFieldSetCollapsed, member.item.path],\n  )\n\n  const handleOpen = useCallback(() => {\n    onPathOpen(member.item.path)\n  }, [onPathOpen, member.item.path])\n\n  const isEmptyValue = !member.item.value || isEmptyItem(member.item.value)\n  const handleClose = useCallback(() => {\n    if (isEmptyValue) {\n      onRemove()\n    }\n\n    const parentPath = member.item.path.slice(0, -1)\n    onPathOpen(parentPath)\n    // @todo fix issue where the focus is on the item and not the parent\n    onPathFocus(parentPath)\n  }, [isEmptyValue, onPathOpen, member.item.path, onPathFocus, onRemove])\n\n  const handleSelectFieldGroup = useCallback(\n    (groupName: string) => {\n      onFieldGroupSelect(member.item.path, groupName)\n    },\n    [onFieldGroupSelect, member.item.path],\n  )\n\n  const elementProps = useMemo(\n    (): ObjectInputProps['elementProps'] => ({\n      'onBlur': handleBlur,\n      'onFocus': handleFocus,\n      'id': member.item.id,\n      'ref': focusRef,\n      'aria-describedby': createDescriptionId(member.item.id, member.item.schemaType.description),\n    }),\n    [handleBlur, handleFocus, member.item.id, member.item.schemaType.description],\n  )\n\n  const inputProps = useMemo((): Omit<ObjectInputProps, 'renderDefault'> => {\n    return {\n      changed: member.item.changed,\n      focusPath: member.item.focusPath,\n      focused: member.item.focused,\n      groups: member.item.groups,\n      id: member.item.id,\n      level: member.item.level,\n      members: member.item.members,\n      onChange: handleChange,\n      onFieldClose: handleCloseField,\n      onFieldCollapse: handleCollapseField,\n      onFieldSetCollapse: handleCollapseFieldSet,\n      onFieldExpand: handleExpandField,\n      onFieldSetExpand: handleExpandFieldSet,\n      onFieldGroupSelect: handleSelectFieldGroup,\n      onPathFocus: handleFocusChildPath,\n      onFieldOpen: handleOpenField,\n      path: member.item.path,\n      presence: member.item.presence,\n      readOnly: member.item.readOnly,\n      renderAnnotation,\n      renderBlock,\n      renderField,\n      renderInlineBlock,\n      renderInput,\n      renderItem,\n      renderPreview,\n      schemaType: member.item.schemaType,\n      validation: member.item.validation,\n      value: member.item.value,\n      elementProps: elementProps,\n    }\n  }, [\n    elementProps,\n    handleChange,\n    handleCloseField,\n    handleCollapseField,\n    handleCollapseFieldSet,\n    handleExpandField,\n    handleExpandFieldSet,\n    handleFocusChildPath,\n    handleOpenField,\n    handleSelectFieldGroup,\n    member.item.changed,\n    member.item.focusPath,\n    member.item.focused,\n    member.item.groups,\n    member.item.id,\n    member.item.level,\n    member.item.members,\n    member.item.path,\n    member.item.presence,\n    member.item.readOnly,\n    member.item.schemaType,\n    member.item.validation,\n    member.item.value,\n    renderAnnotation,\n    renderBlock,\n    renderField,\n    renderInlineBlock,\n    renderInput,\n    renderItem,\n    renderPreview,\n  ])\n\n  const renderedInput = useMemo(() => renderInput(inputProps), [inputProps, renderInput])\n\n  const itemProps = useMemo((): Omit<ObjectItemProps, 'renderDefault'> => {\n    return {\n      key: member.key,\n      index: member.index,\n      level: member.item.level,\n      value: member.item.value,\n      title: member.item.schemaType.title,\n      description: member.item.schemaType.description,\n      collapsible: member.collapsible,\n      collapsed: member.collapsed,\n      schemaType: member.item.schemaType,\n      parentSchemaType: member.parentSchemaType,\n      onInsert: handleInsert,\n      onCopy: handleCopy,\n      onRemove,\n      presence: member.item.presence,\n      validation: member.item.validation,\n      open: member.open,\n      onOpen: handleOpen,\n      onClose: handleClose,\n      onExpand: handleExpand,\n      onCollapse: handleCollapse,\n      readOnly: member.item.readOnly,\n      focused: member.item.focused,\n      onFocus: handleFocus,\n      onBlur: handleBlur,\n      inputId: member.item.id,\n      path: member.item.path,\n      children: renderedInput,\n      changed: member.item.changed,\n      inputProps,\n    }\n  }, [\n    member.key,\n    member.index,\n    member.item.level,\n    member.item.value,\n    member.item.schemaType,\n    member.item.presence,\n    member.item.validation,\n    member.item.readOnly,\n    member.item.focused,\n    member.item.id,\n    member.item.path,\n    member.item.changed,\n    member.collapsible,\n    member.collapsed,\n    member.parentSchemaType,\n    member.open,\n    handleInsert,\n    handleCopy,\n    onRemove,\n    handleOpen,\n    handleClose,\n    handleExpand,\n    handleCollapse,\n    handleFocus,\n    handleBlur,\n    renderedInput,\n    inputProps,\n  ])\n\n  return (\n    <FormCallbacksProvider\n      onFieldGroupSelect={onFieldGroupSelect}\n      onChange={handleChange}\n      onPathOpen={onPathOpen}\n      onSetFieldSetCollapsed={onSetFieldSetCollapsed}\n      onSetPathCollapsed={onSetPathCollapsed}\n      onPathBlur={onPathBlur}\n      onPathFocus={onPathFocus}\n    >\n      {useMemo(() => renderItem(itemProps), [itemProps, renderItem])}\n    </FormCallbacksProvider>\n  )\n}\n","import {BulbOutlineIcon, UnknownIcon} from '@sanity/icons'\nimport {Box, Card, Code, Flex, Stack, Text, type Theme, useClickOutsideEvent} from '@sanity/ui'\nimport {resolveTypeName} from '@sanity/util/content'\nimport {type FocusEvent, useCallback, useRef, useState} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Popover} from '../../../../ui-components'\nimport {Translate, useTranslation} from '../../../i18n'\n\nconst PopoverCard = styled(Card)`\n  max-width: ${({theme}: {theme: Theme}) => theme.sanity.container[1]}px;\n`\n\ninterface Props {\n  value: unknown\n  onFocus?: (event: FocusEvent) => void\n  vertical?: boolean\n}\n\nexport function IncompatibleItemType(props: Props) {\n  const {value, onFocus, vertical, ...rest} = props\n  const [showDetails, setShowDetails] = useState(false)\n  const popoverRef = useRef<HTMLDivElement | null>(null)\n\n  const {t} = useTranslation()\n\n  useClickOutsideEvent(\n    () => setShowDetails(false),\n    () => [popoverRef.current],\n  )\n\n  const handleKeyDown = useCallback((e: any) => {\n    if (e.key === 'Escape' || e.key === 'Tab') {\n      setShowDetails(false)\n    }\n  }, [])\n\n  const handleShowDetails = useCallback(() => {\n    setShowDetails((v) => !v)\n  }, [])\n\n  const typeName = resolveTypeName(value)\n  return (\n    <Popover\n      open={showDetails}\n      ref={popoverRef}\n      onKeyDown={handleKeyDown}\n      portal\n      constrainSize\n      tone=\"default\"\n      content={\n        <PopoverCard margin={1} padding={3} onKeyDown={handleKeyDown} tabIndex={0} overflow=\"auto\">\n          <Stack space={4}>\n            <Text weight=\"medium\">\n              <Translate\n                t={t}\n                i18nKey=\"inputs.array.error.type-is-incompatible-prompt\"\n                values={{typeName}}\n              />\n            </Text>\n            <Text size={1} weight=\"medium\">\n              {t('inputs.array.error.type-is-incompatible-title')}\n            </Text>\n            <Text size={1}>\n              <Translate\n                t={t}\n                i18nKey=\"inputs.array.error.current-schema-not-declare-description\"\n                values={{typeName}}\n              />\n            </Text>\n            <Box>\n              <Text size={1}>\n                <BulbOutlineIcon /> {t('inputs.array.error.can-delete-but-no-edit-description')}\n              </Text>\n            </Box>\n            <Stack space={2}>\n              <Text size={1} weight=\"medium\">\n                {t('inputs.array.error.json-representation-description')}\n              </Text>\n              <Card padding={2} overflow=\"auto\" border>\n                <Code size={1} as=\"pre\" language=\"json\">\n                  {JSON.stringify(value, null, 2)}\n                </Code>\n              </Card>\n            </Stack>\n          </Stack>\n        </PopoverCard>\n      }\n    >\n      <Card\n        as=\"button\"\n        type=\"button\"\n        radius={2}\n        tone=\"inherit\"\n        paddingX={2}\n        paddingY={3}\n        flex={1}\n        onFocus={onFocus}\n        onClick={handleShowDetails}\n        onKeyDown={handleKeyDown}\n        __unstable_focusRing\n        {...rest}\n      >\n        <Flex align=\"center\">\n          <Box marginRight={3}>\n            <Text>\n              <UnknownIcon />\n            </Text>\n          </Box>\n\n          <Box flex={1}>\n            <Text size={1} textOverflow=\"ellipsis\">\n              <Translate\n                t={t}\n                i18nKey=\"inputs.array.error.type-is-incompatible-prompt\"\n                values={{typeName: typeName}}\n              />\n            </Text>\n          </Box>\n        </Flex>\n      </Card>\n    </Popover>\n  )\n}\n","import {useTranslation} from '../../../i18n'\nimport {type ArrayItemError} from '../../store/types/memberErrors'\nimport {IncompatibleItemType} from './IncompatibleItemType'\n\n/** @internal */\nexport function MemberItemError(props: {member: ArrayItemError}) {\n  const {member} = props\n  const {t} = useTranslation()\n\n  if (member.error.type === 'INVALID_ITEM_TYPE') {\n    return <IncompatibleItemType value={member.error.value} />\n  }\n  return <div>{t('inputs.array.error.unexpected-error', {error: member.error.type})}</div>\n}\n","import {type ArrayOfObjectsMember} from '../../store'\nimport {\n  type RenderAnnotationCallback,\n  type RenderArrayOfObjectsItemCallback,\n  type RenderBlockCallback,\n  type RenderFieldCallback,\n  type RenderInputCallback,\n  type RenderPreviewCallback,\n} from '../../types'\nimport {ArrayOfObjectsItem} from './items/ArrayOfObjectsItem'\nimport {MemberItemError} from './MemberItemError'\n\n/** @internal */\nexport interface ArrayOfObjectsMemberProps {\n  member: ArrayOfObjectsMember\n  renderAnnotation?: RenderAnnotationCallback\n  renderBlock?: RenderBlockCallback\n  renderField: RenderFieldCallback\n  renderInlineBlock?: RenderBlockCallback\n  renderInput: RenderInputCallback\n  renderItem: RenderArrayOfObjectsItemCallback\n  renderPreview: RenderPreviewCallback\n}\n\n/**\n * Convenience component for rendering an \"array of objects\"-item\n * @internal\n */\nexport function ArrayOfObjectsInputMember(props: ArrayOfObjectsMemberProps) {\n  const {\n    member,\n    renderAnnotation,\n    renderBlock,\n    renderField,\n    renderInlineBlock,\n    renderInput,\n    renderItem,\n    renderPreview,\n  } = props\n  if (member.kind === 'item') {\n    return (\n      <ArrayOfObjectsItem\n        key={member.key}\n        member={member}\n        renderAnnotation={renderAnnotation}\n        renderBlock={renderBlock}\n        renderField={renderField}\n        renderInlineBlock={renderInlineBlock}\n        renderInput={renderInput}\n        renderItem={renderItem}\n        renderPreview={renderPreview}\n      />\n    )\n  }\n  if (member.kind === 'error') {\n    return <MemberItemError key={member.key} member={member} />\n  }\n\n  //@ts-expect-error The branching above should cover all possible cases\n  console.warn(new Error(`Unhandled member kind ${member.kind}`))\n  return null\n}\n","import {type ArrayOfObjectsMember} from '../../store'\nimport {\n  type RenderAnnotationCallback,\n  type RenderArrayOfObjectsItemCallback,\n  type RenderBlockCallback,\n  type RenderFieldCallback,\n  type RenderInputCallback,\n  type RenderPreviewCallback,\n} from '../../types'\nimport {ArrayOfObjectsInputMember} from './ArrayOfObjectsInputMember'\n\n/** @internal */\nexport interface ArrayOfObjectsInputMembersProps {\n  members: ArrayOfObjectsMember[]\n  renderAnnotation?: RenderAnnotationCallback\n  renderBlock?: RenderBlockCallback\n  renderInlineBlock?: RenderBlockCallback\n  renderInput: RenderInputCallback\n  renderField: RenderFieldCallback\n  renderItem: RenderArrayOfObjectsItemCallback\n  renderPreview: RenderPreviewCallback\n}\n\n/**\n * Convenience component for wrapping an array of objects\n * @internal\n */\nexport function ArrayOfObjectsInputMembers(props: ArrayOfObjectsInputMembersProps) {\n  const {members, ...rest} = props\n  return (\n    <>\n      {members.map((member) => (\n        <ArrayOfObjectsInputMember key={member.key} member={member} {...rest} />\n      ))}\n    </>\n  )\n}\n","import {type SchemaType} from '@sanity/types'\n\nexport function getEmptyValue(type: SchemaType): number | string | boolean {\n  switch (type.jsonType) {\n    case 'string': {\n      return ''\n    }\n    case 'number': {\n      return -0\n    }\n    case 'boolean': {\n      return false\n    }\n    default:\n      throw new Error(`Unable to create value from type \"${type.jsonType}\"`)\n  }\n}\n","import {isNumberSchemaType, type SchemaType} from '@sanity/types'\n\nexport function resolveNativeNumberInputValue(\n  schemaType: SchemaType,\n  value: unknown,\n  localValue: string | undefined,\n): string {\n  if (\n    isNumberSchemaType(schemaType) &&\n    typeof localValue === 'string' &&\n    Number(localValue) === value\n  ) {\n    return localValue\n  }\n  return String(value ?? '')\n}\n","import {isBooleanSchemaType, isNumberSchemaType, type SchemaType} from '@sanity/types'\nimport {type ChangeEvent, type FocusEvent, useCallback, useMemo, useRef, useState} from 'react'\n\nimport {type FIXME} from '../../../../FIXME'\nimport {useCopyPaste} from '../../../../studio'\nimport {useGetFormValue} from '../../../contexts/GetFormValue'\nimport {useDidUpdate} from '../../../hooks/useDidUpdate'\nimport {getEmptyValue} from '../../../inputs/arrays/ArrayOfPrimitivesInput/getEmptyValue'\nimport {insert, type PatchArg, PatchEvent, set, unset} from '../../../patch'\nimport {type ArrayOfPrimitivesItemMember} from '../../../store'\nimport {useFormCallbacks} from '../../../studio/contexts/FormCallbacks'\nimport {\n  type ArrayInputCopyEvent,\n  type FormDocumentValue,\n  type PrimitiveInputProps,\n  type PrimitiveItemProps,\n  type RenderArrayOfPrimitivesItemCallback,\n  type RenderInputCallback,\n} from '../../../types'\nimport {createDescriptionId} from '../../common/createDescriptionId'\nimport {resolveNativeNumberInputValue} from '../../common/resolveNativeNumberInputValue'\n\n/**\n *\n * @hidden\n * @beta\n */\nexport interface PrimitiveMemberItemProps {\n  member: ArrayOfPrimitivesItemMember\n  renderItem: RenderArrayOfPrimitivesItemCallback\n  renderInput: RenderInputCallback\n}\n\n/**\n *\n * @hidden\n * @beta\n */\nexport function ArrayOfPrimitivesItem(props: PrimitiveMemberItemProps) {\n  const focusRef = useRef<{focus: () => void}>(undefined)\n  const {member, renderItem, renderInput} = props\n\n  const [localValue, setLocalValue] = useState<undefined | string>()\n\n  const {onPathBlur, onPathFocus, onChange} = useFormCallbacks()\n  const getFormValue = useGetFormValue()\n  const {onCopy} = useCopyPaste()\n\n  useDidUpdate(member.item.focused, (hadFocus, hasFocus) => {\n    if (!hadFocus && hasFocus) {\n      focusRef.current?.focus()\n    }\n  })\n\n  const handleBlur = useCallback(\n    (event: FocusEvent) => {\n      onPathBlur(member.item.path)\n    },\n    [member.item.path, onPathBlur],\n  )\n\n  const handleFocus = useCallback(\n    (event: FocusEvent) => {\n      onPathFocus(member.item.path)\n    },\n    [member.item.path, onPathFocus],\n  )\n\n  const handleChange = useCallback(\n    (event: PatchEvent | PatchArg) => {\n      onChange(PatchEvent.from(event).prefixAll(member.index))\n    },\n    [onChange, member.index],\n  )\n  const handleNativeChange = useCallback(\n    (event: ChangeEvent<HTMLInputElement>) => {\n      let inputValue: number | string | boolean = event.currentTarget.value\n      if (isNumberSchemaType(member.item.schemaType)) {\n        inputValue = event.currentTarget.valueAsNumber\n        if (inputValue > Number.MAX_SAFE_INTEGER || inputValue < Number.MIN_SAFE_INTEGER) {\n          return\n        }\n      } else if (isBooleanSchemaType(member.item.schemaType)) {\n        inputValue = event.currentTarget.checked\n      }\n\n      // `valueAsNumber` returns `NaN` on empty input\n      const hasEmptyValue =\n        inputValue === '' || (typeof inputValue === 'number' && isNaN(inputValue))\n\n      if (isNumberSchemaType(member.item.schemaType)) {\n        // Store the local value for number inputs in order to support intermediate values\n        // that includes more information than the numeric value\n        // E.g. if typing `0.0` the numeric value will be 0, but we still want to show `0.0` in the input to allow typing\n        // more digits\n        setLocalValue(hasEmptyValue ? undefined : event.currentTarget.value)\n      }\n\n      handleChange(\n        set(\n          hasEmptyValue\n            ? // Map direct unset patches to empty value instead in order to not *remove* elements as the user clears out the value\n              // note: this creates the rather curious case where the input renders ´0´ when you try to clear it.\n              getEmptyValue(member.item.schemaType)\n            : inputValue,\n        ),\n      )\n    },\n    [handleChange, member.item.schemaType],\n  )\n\n  const elementProps = useMemo(\n    (): PrimitiveInputProps['elementProps'] => ({\n      'onBlur': handleBlur,\n      'onFocus': handleFocus,\n      'id': member.item.id,\n      'ref': focusRef,\n      'onChange': handleNativeChange,\n      'value': resolveNativeInputValue(member.item.schemaType, member.item.value, localValue),\n      'readOnly': Boolean(member.item.readOnly),\n      'placeholder': member.item.schemaType.placeholder,\n      'aria-describedby': createDescriptionId(member.item.id, member.item.schemaType.description),\n    }),\n    [\n      handleBlur,\n      handleFocus,\n      handleNativeChange,\n      member.item.id,\n      member.item.readOnly,\n      member.item.schemaType,\n      member.item.value,\n      localValue,\n    ],\n  )\n  const inputProps = useMemo((): Omit<PrimitiveInputProps, 'renderDefault'> => {\n    return {\n      changed: member.item.changed,\n      level: member.item.level,\n      value: member.item.value as FIXME,\n      readOnly: member.item.readOnly,\n      schemaType: member.item.schemaType as FIXME,\n      id: member.item.id,\n      path: member.item.path,\n      focused: member.item.focused,\n      onChange: handleChange,\n      validation: member.item.validation,\n      presence: member.item.presence,\n      elementProps,\n    }\n  }, [\n    member.item.changed,\n    member.item.level,\n    member.item.value,\n    member.item.readOnly,\n    member.item.schemaType,\n    member.item.id,\n    member.item.path,\n    member.item.focused,\n    member.item.validation,\n    member.item.presence,\n    handleChange,\n    elementProps,\n  ])\n\n  const renderedInput = useMemo(() => renderInput(inputProps), [inputProps, renderInput])\n\n  const onRemove = useCallback(() => {\n    onChange(PatchEvent.from([unset([member.index])]))\n  }, [member.index, onChange])\n\n  const onInsert = useCallback(\n    (event: {items: unknown[]; position: 'before' | 'after'}) => {\n      onChange(PatchEvent.from([insert(event.items, event.position, [member.index])]))\n    },\n    [member.index, onChange],\n  )\n\n  const handleCopy = useCallback(\n    (_: ArrayInputCopyEvent<unknown>) => {\n      const documentValue = getFormValue([]) as FormDocumentValue\n      onCopy(member.item.path, documentValue, {\n        context: {source: 'arrayItem'},\n        patchType: 'append',\n      })\n    },\n    [getFormValue, member.item.path, onCopy],\n  )\n\n  const itemProps = useMemo((): Omit<PrimitiveItemProps, 'renderDefault'> => {\n    return {\n      key: member.key,\n      index: member.index,\n      level: member.item.level,\n      value: member.item.value as FIXME,\n      title: member.item.schemaType.title,\n      description: member.item.schemaType.description,\n      schemaType: member.item.schemaType as FIXME,\n      parentSchemaType: member.parentSchemaType,\n      onInsert,\n      onCopy: handleCopy,\n      onRemove,\n      presence: member.item.presence,\n      validation: member.item.validation,\n      readOnly: member.item.readOnly,\n      focused: member.item.focused,\n      onFocus: handleFocus,\n      onBlur: handleBlur,\n      inputId: member.item.id,\n      path: member.item.path,\n      children: renderedInput,\n    }\n  }, [\n    member.key,\n    member.index,\n    member.item.level,\n    member.item.value,\n    member.item.schemaType,\n    member.item.presence,\n    member.item.validation,\n    member.item.readOnly,\n    member.item.focused,\n    member.item.id,\n    member.item.path,\n    member.parentSchemaType,\n    onInsert,\n    handleCopy,\n    onRemove,\n    handleFocus,\n    handleBlur,\n    renderedInput,\n  ])\n\n  return <>{useMemo(() => renderItem(itemProps as PrimitiveItemProps), [itemProps, renderItem])}</>\n}\n\nfunction resolveNativeInputValue(\n  schemaType: SchemaType,\n  value: unknown,\n  localValue: string | undefined,\n): string {\n  // this is a trick to retain type information while displaying an \"empty\" input\n  // if this input is used to edit items in an array of numbers, the value can't really be set to empty without\n  // either removing the item or losing type information (i.e. it can't be an empty string, because that's… a string)\n  // so the array of numbers then use the special value `-0` to represent an empty value\n  if (Object.is(value, -0)) {\n    return ''\n  }\n  return resolveNativeNumberInputValue(schemaType, value, localValue)\n}\n","import {isObjectSchemaType, type SchemaType} from '@sanity/types'\nimport {randomKey} from '@sanity/util/content'\n\nimport {type ObjectItem} from '../../../types'\nimport {createProtoValue} from '../../../utils/createProtoValue'\n\nexport function createProtoArrayValue<Item extends ObjectItem>(type: SchemaType): Item {\n  if (!isObjectSchemaType(type)) {\n    throw new Error(\n      `Invalid item type: \"${type.type}\". Default array input can only contain objects (for now)`,\n    )\n  }\n\n  return {...createProtoValue(type), _key: randomKey(12)} as Item\n}\n","export const BEFORE = 'before'\nexport const AFTER = 'after'\n\nexport function arrayInsert(\n  array: unknown[],\n  position: 'after' | 'before',\n  index: number,\n  ...args: unknown[][]\n) {\n  if (position !== BEFORE && position !== AFTER) {\n    throw new Error(`Invalid position \"${position}\", must be either ${BEFORE} or ${AFTER}`)\n  }\n\n  const items = flatten(...args)\n\n  if (array.length === 0) {\n    return items\n  }\n\n  const len = array.length\n  const idx = Math.abs((len + index) % len) % len\n\n  const normalizedIdx = position === 'after' ? idx + 1 : idx\n\n  const copy = array.slice()\n  copy.splice(normalizedIdx, 0, ...flatten(items))\n  return copy\n}\n\nfunction flatten(...values: unknown[][]) {\n  return values.reduce((prev, item) => prev.concat(item), [])\n}\n","import {findIndex} from 'lodash'\n\nimport {type FIXME} from '../../FIXME'\nimport {applyPatch} from './applyPatch'\nimport {arrayInsert} from './arrayInsert'\n\nconst hasOwn = (obj: Record<string, unknown>, property: string) =>\n  Object.prototype.hasOwnProperty.call(obj, property)\n\nfunction move(arr: unknown[], from: number, to: number) {\n  const nextValue = arr.slice()\n  const val = nextValue[from]\n  nextValue.splice(from, 1)\n  nextValue.splice(to, 0, val)\n  return nextValue\n}\n\nfunction findTargetIndex(array: unknown[], pathSegment: FIXME) {\n  if (typeof pathSegment === 'number') {\n    return pathSegment\n  }\n  const index = findIndex(array, pathSegment)\n  return index === -1 ? false : index\n}\n\nexport function _arrayApply(value: FIXME, patch: FIXME) {\n  const nextValue = value.slice() // make a copy for internal mutation\n\n  if (patch.path.length === 0) {\n    // its directed to me\n    if (patch.type === 'setIfMissing') {\n      if (!Array.isArray(patch.value)) {\n        // eslint-disable-line max-depth\n        throw new Error('Cannot set value of an array to a non-array')\n      }\n      return value === undefined ? patch.value : value\n    } else if (patch.type === 'set') {\n      if (!Array.isArray(patch.value)) {\n        // eslint-disable-line max-depth\n        throw new Error('Cannot set value of an array to a non-array')\n      }\n      return patch.value\n    } else if (patch.type === 'unset') {\n      return undefined\n    } else if (patch.type === 'move') {\n      if (!patch.value || !hasOwn(patch.value, 'from') || !hasOwn(patch.value, 'to')) {\n        // eslint-disable-line max-depth\n        throw new Error(\n          `Invalid value of 'move' patch. Expected a value with \"from\" and \"to\" indexes, instead got: ${JSON.stringify(\n            patch.value,\n          )}`,\n        )\n      }\n      return move(nextValue, patch.value.from, patch.value.to)\n    }\n    throw new Error(`Invalid array operation: ${patch.type}`)\n  }\n\n  const [head, ...tail] = patch.path\n\n  const index = findTargetIndex(value, head)\n\n  // If the given selector could not be found, return as-is\n  if (index === false) {\n    return nextValue\n  }\n\n  if (tail.length === 0) {\n    if (patch.type === 'insert') {\n      const {position, items} = patch\n      return arrayInsert(value, position, index, items)\n    } else if (patch.type === 'unset') {\n      if (typeof index !== 'number') {\n        throw new Error(`Expected array index to be a number, instead got \"${index}\"`)\n      }\n      nextValue.splice(index, 1)\n      return nextValue\n    }\n  }\n\n  // The patch is not directed to me\n  nextValue[index] = applyPatch(nextValue[index], {\n    ...patch,\n    path: tail,\n  })\n  return nextValue\n}\n","import {clone, isObject, omit} from 'lodash'\n\nimport {type FIXME} from '../../FIXME'\nimport {applyPatch} from './applyPatch'\n\nexport function _objectApply(value: FIXME, patch: FIXME) {\n  const nextValue = clone(value)\n  if (patch.path.length === 0) {\n    // its directed to me\n    if (patch.type === 'set') {\n      if (!isObject(patch.value)) {\n        // eslint-disable-line max-depth\n        throw new Error('Cannot set value of an object to a non-object')\n      }\n      return patch.value\n    } else if (patch.type === 'unset') {\n      return undefined\n    } else if (patch.type === 'setIfMissing') {\n      // console.log('IS IT missing?', value)\n      return value === undefined ? patch.value : value\n    }\n    throw new Error(`Invalid object operation: ${patch.type}`)\n  }\n\n  // The patch is not directed to me\n  const [head, ...tail] = patch.path\n  if (typeof head !== 'string') {\n    throw new Error(`Expected field name to be a string, instad got: ${head}`)\n  }\n\n  if (tail.length === 0 && patch.type === 'unset') {\n    return omit(nextValue, head)\n  }\n\n  nextValue[head] = applyPatch(nextValue[head], {\n    ...patch,\n    path: tail,\n  })\n  return nextValue\n}\n","import {type FIXME} from '../../FIXME'\n\nconst OPERATIONS = {\n  replace(currentValue: FIXME, nextValue: FIXME) {\n    return nextValue\n  },\n  set(currentValue: FIXME, nextValue: FIXME) {\n    return nextValue\n  },\n  setIfMissing(currentValue: FIXME, nextValue: FIXME) {\n    return currentValue === undefined ? nextValue : currentValue\n  },\n  unset(currentValue: FIXME, nextValue: FIXME) {\n    return undefined\n  },\n  inc(currentValue: FIXME, nextValue: FIXME) {\n    return currentValue + nextValue\n  },\n  dec(currentValue: FIXME, nextValue: FIXME) {\n    return currentValue - nextValue\n  },\n}\n\nconst SUPPORTED_PATCH_TYPES = Object.keys(OPERATIONS)\n\nexport function _primitiveApply(value: FIXME, patch: FIXME) {\n  if (!SUPPORTED_PATCH_TYPES.includes(patch.type)) {\n    throw new Error(\n      `Received patch of unsupported type \"${patch.type}\" for primitives. This is most likely a bug.`,\n    )\n  }\n\n  if (patch.path.length > 0) {\n    throw new Error(\n      `Cannot apply deep operations on primitive values. Received patch with type \"${\n        patch.type\n      }\" and path \"${patch.path\n        .map((path: FIXME) => JSON.stringify(path))\n        .join('.')} that targeted the value \"${JSON.stringify(value)}\"`,\n    )\n  }\n\n  return (OPERATIONS as FIXME)[patch.type](value, patch.value)\n}\n","import {applyPatches, parsePatch} from '@sanity/diff-match-patch'\n\nimport {type FIXME} from '../../FIXME'\nimport {type FormPatch} from '../patch'\n\nconst OPERATIONS = {\n  replace(currentValue: unknown, nextValue: unknown) {\n    return nextValue\n  },\n  set(currentValue: unknown, nextValue: unknown) {\n    return nextValue\n  },\n  setIfMissing(currentValue: unknown, nextValue: unknown) {\n    return currentValue === undefined ? nextValue : currentValue\n  },\n  unset(currentValue: unknown, nextValue: unknown) {\n    return undefined\n  },\n  diffMatchPatch(currentValue: string, dmpPatch: string) {\n    const [result] = applyPatches(parsePatch(dmpPatch), currentValue, {allowExceedingIndices: true})\n    return result\n  },\n}\n\nconst SUPPORTED_PATCH_TYPES = Object.keys(OPERATIONS)\n\nexport function _stringApply(value: unknown, patch: FormPatch) {\n  if (!SUPPORTED_PATCH_TYPES.includes(patch.type)) {\n    throw new Error(\n      `Received patch of unsupported type: \"${JSON.stringify(\n        patch.type,\n      )}\" for string. This is most likely a bug.`,\n    )\n  }\n\n  if (patch.path.length > 0) {\n    throw new Error(\n      `Cannot apply deep operations on string values. Received patch with type \"${\n        patch.type\n      }\" and path \"${patch.path.join('.')} that targeted the value \"${JSON.stringify(value)}\"`,\n    )\n  }\n\n  return (OPERATIONS as FIXME)[patch.type](value, (patch as FIXME).value)\n}\n","import {isObject, isString} from 'lodash'\n\nimport {type FIXME} from '../../FIXME'\nimport {_arrayApply} from './array'\nimport {_objectApply} from './object'\nimport {_primitiveApply} from './primitive'\nimport {_stringApply} from './string'\nimport {type PatchArg} from './types'\n\nexport function applyAll(value: FIXME, patches: PatchArg[]) {\n  return patches.reduce(applyPatch, value)\n}\n\nfunction _applyPatch(value: FIXME, patch: FIXME) {\n  if (Array.isArray(value)) {\n    return _arrayApply(value, patch)\n  }\n  if (isString(value)) {\n    return _stringApply(value, patch)\n  }\n  if (isObject(value)) {\n    return _objectApply(value, patch)\n  }\n  return _primitiveApply(value, patch)\n}\n\nexport function applyPatch(value: FIXME, patch: FIXME) {\n  const res = _applyPatch(value, patch)\n  // console.log('applyPatch(%o, %o) : %o (noop? %o)', value, patch, res, value === res)\n  return res\n}\n","import {type ReactNode, useContext, useMemo} from 'react'\nimport {DocumentFieldActionsContext} from 'sanity/_singletons'\n\nimport {type DocumentFieldAction} from '../../../config'\nimport {EMPTY_ARRAY} from '../../../util'\n\nexport function DocumentFieldActionsProvider(props: {\n  actions: DocumentFieldAction[] | undefined\n  children: ReactNode\n}) {\n  const value = useMemo(() => ({actions: props.actions || EMPTY_ARRAY}), [props.actions])\n  return (\n    <DocumentFieldActionsContext.Provider value={value}>\n      {props.children}\n    </DocumentFieldActionsContext.Provider>\n  )\n}\n\nexport function useDocumentFieldActions() {\n  const context = useContext(DocumentFieldActionsContext)\n  if (!context) {\n    throw new Error('useDocumentFieldActions must be used within a DocumentFieldActionsProvider')\n  }\n  return context.actions\n}\n","import {type SchemaType} from '@sanity/types'\n\nconst PRIMITIVES = ['string', 'number', 'boolean']\n\nexport function is(typeName: string, type: SchemaType): boolean {\n  return type.name === typeName || Boolean(type.type && is(typeName, type.type))\n}\n\nexport {is as type}\n\nexport function primitive(type: SchemaType) {\n  return PRIMITIVES.some((typeName) => is(typeName, type))\n}\n","import {type FileLike} from './types'\n\n/**\n * Check if the provided file type should be accepted by the input with accept attribute.\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input#attr-accept\n *\n * Inspired by https://github.com/enyo/dropzone (MIT) (c) 2021 Matias Meno\n * Based on https://github.com/react-dropzone/attr-accept (MIT) (c) 2015 Andrey Okonetchnikov\n *\n * @param file - https://developer.mozilla.org/en-US/docs/Web/API/File\n * @param acceptedFiles - List of accepted mime types (comma-separated string or array)\n * @returns True if file is accepted, false otherwise\n */\nexport function accepts(file: FileLike, acceptedFiles: string | string[]): boolean {\n  if (!file || !acceptedFiles) {\n    return true\n  }\n\n  const acceptedFilesArray = Array.isArray(acceptedFiles)\n    ? acceptedFiles // eg `['image/png', 'image/jpeg']`\n    : acceptedFiles.split(',') // eg `image/png,image/jpeg`\n\n  const fileName = file.name || ''\n  const mimeType = (file.type || '').toLowerCase()\n  const baseMimeType = mimeType.replace(/\\/.*$/, '')\n\n  return acceptedFilesArray.some((type) => {\n    const validType = type.trim().toLowerCase()\n\n    if (validType.charAt(0) === '.') {\n      if (fileName) {\n        return fileName.toLowerCase().endsWith(validType)\n      }\n      // If we do not have a valid fileName and validType is an extension, we\n      // should fail open. This happens because when hovering a file, the browser\n      // does not pass the name of the file but it will pass the file name when the\n      // file is dropped on the file upload input\n      return true\n    }\n\n    if (validType.endsWith('/*')) {\n      // This is something like a image/* mime type\n      return baseMimeType === validType.replace(/\\/.*$/, '')\n    }\n\n    return mimeType === validType\n  })\n}\n","// Takes a observable-returning function and returns a new function that limits on the number of\n// concurrent observables.\nimport {from as observableFrom, Observable, Subject, type Subscription} from 'rxjs'\nimport {first, mergeMap} from 'rxjs/operators'\n\nimport {type FIXME} from '../../../FIXME'\n\nconst DEFAULT_CONCURRENCY = 4\n\nfunction remove<T>(array: Array<T>, item: T): Array<T> {\n  const index = array.indexOf(item)\n  if (index > -1) {\n    array.splice(index, 1)\n  }\n  return array\n}\n\nexport function withMaxConcurrency<Args extends any[], Ret>(\n  func: (...args: Args) => Observable<Ret>,\n  concurrency: number = DEFAULT_CONCURRENCY,\n) {\n  const throttler = createThrottler(concurrency)\n  return (...args: Args) => observableFrom(throttler(func(...args))) as Observable<Ret>\n}\n\nexport function createThrottler(concurrency: number = DEFAULT_CONCURRENCY) {\n  const currentSubscriptions: Array<Subscription> = []\n  const pendingObservables: Array<Observable<any>> = []\n  const ready$ = new Subject()\n\n  return request\n\n  function request(observable: Observable<unknown>): Observable<unknown> {\n    return new Observable((observer) => {\n      if (currentSubscriptions.length >= concurrency) {\n        return scheduleAndWait(observable)\n          .pipe(mergeMap(request) as FIXME)\n          .subscribe(observer)\n      }\n      const subscription = observable.subscribe(observer)\n      currentSubscriptions.push(subscription)\n      return () => {\n        remove(currentSubscriptions, subscription)\n        remove(pendingObservables, observable)\n        subscription.unsubscribe()\n        check()\n      }\n    })\n  }\n\n  function scheduleAndWait(observable: Observable<unknown>) {\n    pendingObservables.push(observable)\n    return ready$.asObservable().pipe(first((obs) => obs === observable))\n  }\n\n  function check() {\n    while (pendingObservables.length > 0 && currentSubscriptions.length < concurrency) {\n      ready$.next(pendingObservables.shift())\n    }\n  }\n}\n","import {type ProgressEvent, type SanityAssetDocument, type SanityClient} from '@sanity/client'\nimport {type FileAsset, type ImageAsset} from '@sanity/types'\nimport {Observable, of as observableOf} from 'rxjs'\nimport {catchError, map, mergeMap} from 'rxjs/operators'\n\nimport {type DocumentPreviewStore} from '../../../../preview'\nimport {type UploadOptions} from '../../uploads/types'\nimport {withMaxConcurrency} from '../../utils'\n\nconst MAX_CONCURRENT_UPLOADS = 4\n\ntype UploadEvent = ProgressEvent | {type: 'complete'; id: string; asset: SanityAssetDocument}\n\nfunction uploadSanityAsset(\n  client: SanityClient,\n  assetType: 'file' | 'image',\n  file: File | Blob,\n  options: UploadOptions = {},\n): Observable<UploadEvent> {\n  const extract = options.metadata\n  const preserveFilename = options.storeOriginalFilename\n  const {label, title, description, creditLine, source} = options\n  return hashFile(file).pipe(\n    catchError(() =>\n      // ignore if hashing fails for some reason\n      observableOf(null),\n    ),\n\n    mergeMap((hash) =>\n      // note: the sanity api will still dedupe unique files, but this saves us from uploading the asset file entirely\n      hash ? fetchExisting(client, `sanity.${assetType}Asset`, hash) : observableOf(null),\n    ),\n\n    mergeMap((existing: SanityAssetDocument | null) => {\n      if (existing) {\n        return observableOf({\n          // complete with the existing asset document\n          type: 'complete' as const,\n          id: existing._id,\n          asset: existing,\n        })\n      }\n      return client.observable.assets\n        .upload(assetType, file, {\n          tag: 'asset.upload',\n          extract,\n          preserveFilename,\n          label,\n          title,\n          description,\n          creditLine,\n          source,\n        })\n        .pipe(\n          map((event) =>\n            event.type === 'response'\n              ? {\n                  // rewrite to a 'complete' event\n                  type: 'complete' as const,\n                  id: event.body.document._id,\n                  asset: event.body.document,\n                }\n              : event,\n          ),\n        )\n    }),\n  )\n}\n\nconst uploadAsset = withMaxConcurrency(uploadSanityAsset, MAX_CONCURRENT_UPLOADS)\n\nexport const uploadImageAsset = (\n  client: SanityClient,\n  file: File | Blob,\n  options?: UploadOptions,\n) => uploadAsset(client, 'image', file, options)\n\nexport const uploadFileAsset = (client: SanityClient, file: File | Blob, options?: UploadOptions) =>\n  uploadAsset(client, 'file', file, options)\n\n/**\n *\n *\n */\n// note: there's currently 100% overlap between the ImageAsset document and the FileAsset documents as per interface required by the image and file input\nfunction observeAssetDoc(documentPreviewStore: DocumentPreviewStore, id: string) {\n  return documentPreviewStore.observePaths({_type: 'reference', _ref: id}, [\n    'originalFilename',\n    'url',\n    'metadata',\n    'label',\n    'title',\n    'description',\n    'creditLine',\n    'source',\n    'size',\n  ])\n}\n\nexport function observeImageAsset(documentPreviewStore: DocumentPreviewStore, id: string) {\n  return observeAssetDoc(documentPreviewStore, id) as Observable<ImageAsset>\n}\n\nexport function observeFileAsset(documentPreviewStore: DocumentPreviewStore, id: string) {\n  return observeAssetDoc(documentPreviewStore, id) as Observable<FileAsset>\n}\n\nfunction fetchExisting(\n  client: SanityClient,\n  type: string,\n  hash: string,\n): Observable<ImageAsset | FileAsset | null> {\n  return client.observable.fetch(\n    '*[_type == $documentType && sha1hash == $hash][0]',\n    {documentType: type, hash},\n    {tag: 'asset.find-duplicate'},\n  )\n}\n\nfunction readFile(file: Blob | File): Observable<ArrayBuffer> {\n  return new Observable((subscriber) => {\n    const reader = new FileReader()\n    reader.onload = () => {\n      subscriber.next(reader.result as ArrayBuffer)\n      subscriber.complete()\n    }\n    reader.onerror = (err) => {\n      subscriber.error(err)\n    }\n    reader.readAsArrayBuffer(file)\n    return () => {\n      reader.abort()\n    }\n  })\n}\n\nfunction hashFile(file: File | Blob): Observable<string | null> {\n  if (!window.crypto || !window.crypto.subtle || !window.FileReader) {\n    return observableOf(null)\n  }\n  return readFile(file).pipe(\n    mergeMap((arrayBuffer) => crypto.subtle.digest('SHA-1', arrayBuffer)),\n    map(hexFromBuffer),\n  )\n}\n\nfunction hexFromBuffer(buffer: ArrayBuffer): string {\n  return Array.prototype.map\n    .call(new Uint8Array(buffer), (x) => `00${x.toString(16)}`.slice(-2))\n    .join('')\n}\n","export const UPLOAD_STATUS_KEY = '_upload'\n","import {type FormPatch, set, unset} from '../../patch'\nimport {UPLOAD_STATUS_KEY} from './constants'\nimport {type UploadProgressEvent} from './types'\n\nconst UNSET_UPLOAD_PATCH = unset([UPLOAD_STATUS_KEY])\n\nexport function createUploadEvent(patches: FormPatch[] = []): UploadProgressEvent {\n  return {\n    type: 'uploadProgress',\n    patches,\n  }\n}\n\nexport const CLEANUP_EVENT = createUploadEvent([UNSET_UPLOAD_PATCH])\n\nexport function createInitialUploadEvent(file: File) {\n  const now = new Date().toISOString()\n  const value = {\n    progress: 2,\n    createdAt: now,\n    updatedAt: now,\n    file: {name: file.name, type: file.type},\n  }\n\n  return createUploadEvent([set(value, [UPLOAD_STATUS_KEY])])\n}\n","import {type SanityClient} from '@sanity/client'\nimport {concat, type Observable, of} from 'rxjs'\nimport {map} from 'rxjs/operators'\n\nimport {set} from '../../patch'\nimport {uploadFileAsset} from '../inputs/client-adapters/assets'\nimport {UPLOAD_STATUS_KEY} from './constants'\nimport {type UploadOptions, type UploadProgressEvent} from './types'\nimport {CLEANUP_EVENT, createInitialUploadEvent, createUploadEvent} from './utils'\n\nexport function uploadFile(\n  client: SanityClient,\n  file: File,\n  options?: UploadOptions,\n): Observable<UploadProgressEvent> {\n  const upload$ = uploadFileAsset(client, file, options).pipe(\n    map((event) => {\n      if (event.type === 'complete') {\n        return createUploadEvent([\n          set({_type: 'reference', _ref: event.asset._id}, ['asset']),\n          set(100, [UPLOAD_STATUS_KEY, 'progress']),\n          set(new Date().toISOString(), [UPLOAD_STATUS_KEY, 'updated']),\n        ])\n      }\n      return createUploadEvent([\n        set(event.percent, [UPLOAD_STATUS_KEY, 'progress']),\n        set(new Date().toISOString(), [UPLOAD_STATUS_KEY, 'updated']),\n      ])\n    }),\n  )\n\n  return concat(of(createInitialUploadEvent(file)), upload$, of(CLEANUP_EVENT))\n}\n","import {Observable} from 'rxjs'\n\n/* eslint-disable */\n\n/**\n * Check if we need to change dims.\n */\nfunction rotated(n: number) {\n  return [5, 6, 7, 8].indexOf(n) > -1\n}\n\ntype RotateOpts = {\n  degrees?: number\n  x: number\n  y: number\n}\n\n// Based on github.com/component/rotate\nfunction rotate(ctx: CanvasRenderingContext2D | null, options: RotateOpts) {\n  const x = options.x\n  const y = options.y\n\n  const radians = (options.degrees || 0) * (Math.PI / 180)\n\n  ctx?.translate(x, y)\n  ctx?.rotate(radians)\n  ctx?.translate(-x, -y)\n}\n\n// Based on github.com/component/flip\nfunction flip(canvas: HTMLCanvasElement, x: boolean, y: boolean) {\n  const ctx = canvas.getContext('2d')\n  ctx?.translate(x ? canvas.width : 0, y ? canvas.height : 0)\n  ctx?.scale(x ? -1 : 1, y ? -1 : 1)\n}\n\nconst ORIENTATION_OPS = [\n  {op: 'none', degrees: 0},\n  {op: 'flip-x', degrees: 0},\n  {\n    op: 'none',\n    degrees: 180,\n  },\n  {op: 'flip-y', degrees: 0},\n  {op: 'flip-x', degrees: 90},\n  {op: 'none', degrees: 90},\n  {\n    op: 'flip-x',\n    degrees: -90,\n  },\n  {op: 'none', degrees: -90},\n]\n\nexport type Orientation =\n  | 'top-left'\n  | 'top-right'\n  | 'bottom-right'\n  | 'bottom-left'\n  | 'left-top'\n  | 'right-top'\n  | 'right-bottom'\n  | 'left-bottom'\n\nconst ORIENTATIONS: Array<Orientation> = [\n  'top-left',\n  'top-right',\n  'bottom-right',\n  'bottom-left',\n  'left-top',\n  'right-top',\n  'right-bottom',\n  'left-bottom',\n]\n\nexport const DEFAULT_ORIENTATION: Orientation = 'top-left'\n\nconst THUMB_SIZE = 120\n\n// Based on github.com/component/exif-rotate\nfunction _orient(img: HTMLImageElement, orientationNumber: number): HTMLCanvasElement {\n  const orientation = ORIENTATION_OPS[orientationNumber - 1]\n\n  const ratio = img.height / img.width\n  img.width = THUMB_SIZE / ratio\n  img.height = img.width * ratio\n\n  // canvas\n  const canvas = document.createElement('canvas')\n  const ctx = canvas.getContext('2d')\n\n  // dims\n  if (rotated(orientationNumber)) {\n    canvas.height = img.width\n    canvas.width = img.height\n  } else {\n    canvas.width = img.width\n    canvas.height = img.height\n  }\n\n  // flip\n  if (orientation.op === 'flip-x') {\n    flip(canvas, true, false)\n  }\n  if (orientation.op === 'flip-y') {\n    flip(canvas, false, true)\n  }\n\n  // rotate\n  if (orientation.degrees) {\n    rotate(ctx, {\n      degrees: orientation.degrees,\n      x: canvas.width / 2,\n      y: canvas.height / 2,\n    })\n\n    if (rotated(orientationNumber)) {\n      const d = canvas.width - canvas.height\n      ctx?.translate(d / 2, -d / 2)\n    }\n  }\n\n  ctx?.drawImage(img, 0, 0, img.width, img.height)\n  return canvas\n}\n\n/* eslint-enable */\nexport function orient(image: HTMLImageElement, orientationId: Orientation) {\n  return new Observable((observer) => {\n    // console.time('canvas to blob')\n    const orientation = ORIENTATIONS.indexOf(orientationId) + 1\n    const canvas = _orient(image, orientation)\n    observer.next(canvas.toDataURL('image/jpeg', 0.1))\n    observer.complete()\n  })\n}\n","import exif from 'exif-component'\nimport {from as observableFrom, Observable, of as observableOf} from 'rxjs'\nimport {catchError, map} from 'rxjs/operators'\n\nfunction readFileAsArrayBuffer(\n  file: File,\n  length: number,\n): Observable<string | ArrayBuffer | null> {\n  return new Observable((observer) => {\n    const reader = new window.FileReader()\n    reader.onerror = (err) => observer.error(err)\n    reader.onload = () => {\n      observer.next(reader.result)\n      observer.complete()\n    }\n    reader.readAsArrayBuffer(length === undefined ? file : file.slice(0, length))\n    return () => reader.abort()\n  })\n}\n\nconst SKIP_EXIF_ERROR_RE = /(invalid image format)|(No exif data)/i\n\n// 128k should be enough for exif data according to https://github.com/mattiasw/ExifReader#tips\nconst EXIF_BUFFER_LENGTH = 128000\n\nexport function readExif(file: File) {\n  return observableFrom(readFileAsArrayBuffer(file, EXIF_BUFFER_LENGTH)).pipe(\n    map((buf) => exif(buf)),\n    catchError((error) => {\n      if (!SKIP_EXIF_ERROR_RE.test(error.message)) {\n        // Exif read failed, we do not want to fail hard\n        console.warn(`Exif read failed, continuing anyway: ${error.message}`) // eslint-disable-line no-console\n      }\n      return observableOf({})\n    }),\n  )\n}\n","import {Observable} from 'rxjs'\nimport {mergeMap} from 'rxjs/operators'\n\nimport {orient, type Orientation} from './orient'\n\nfunction loadImage(url: string): Observable<HTMLImageElement> {\n  return new Observable((observer) => {\n    const image = new window.Image()\n    //console.time(\"read image\");\n    image.onerror = () => {\n      observer.error(\n        new Error(`Could not load image from url \"${url}\". Image may be of an unsupported format`),\n      )\n    }\n    image.onload = () => {\n      //console.timeEnd(\"read image\");\n      observer.next(image)\n      observer.complete()\n    }\n    image.src = url\n    return () => {\n      // todo: cancel loading (if possible?)\n    }\n  })\n}\n\nexport function rotateImage(file: File, orientation: Orientation) {\n  return loadImage(window.URL.createObjectURL(file)).pipe(\n    mergeMap((image) => orient(image, orientation)),\n  )\n}\n","import {type SanityClient} from '@sanity/client'\nimport {concat, merge, type Observable, of} from 'rxjs'\nimport {catchError, filter, map, mergeMap} from 'rxjs/operators'\n\nimport {set} from '../../patch'\nimport {uploadImageAsset} from '../inputs/client-adapters/assets'\nimport {UPLOAD_STATUS_KEY} from './constants'\nimport {DEFAULT_ORIENTATION, type Orientation} from './image/orient'\nimport {readExif} from './image/readExif'\nimport {rotateImage} from './image/rotateImage'\nimport {type UploadOptions, type UploadProgressEvent} from './types'\nimport {CLEANUP_EVENT, createInitialUploadEvent, createUploadEvent} from './utils'\n\ntype Exif = {\n  orientation: Orientation\n}\n\nexport function uploadImage(\n  client: SanityClient,\n  file: File,\n  options?: UploadOptions,\n): Observable<UploadProgressEvent> {\n  const upload$ = uploadImageAsset(client, file, options).pipe(\n    filter((event: any) => event.stage !== 'download'),\n    map((event) => ({\n      ...event,\n      progress: 2 + (event.percent / 100) * 98,\n    })),\n\n    map((event) => {\n      if (event.type === 'complete') {\n        return createUploadEvent([\n          set({_type: 'reference', _ref: event.asset._id}, ['asset']),\n          set(100, [UPLOAD_STATUS_KEY, 'progress']),\n          set(new Date().toISOString(), [UPLOAD_STATUS_KEY, 'updatedAt']),\n        ])\n      }\n      return createUploadEvent([\n        set(event.percent, [UPLOAD_STATUS_KEY, 'progress']),\n        set(new Date().toISOString(), [UPLOAD_STATUS_KEY, 'updatedAt']),\n      ])\n    }),\n  )\n\n  const setPreviewUrl$ = readExif(file).pipe(\n    mergeMap((exifData: unknown) =>\n      rotateImage(file, (exifData as Exif).orientation || DEFAULT_ORIENTATION),\n    ),\n    catchError((error) => {\n      // eslint-disable-next-line no-console\n      console.warn(\n        'Image preprocessing failed for \"%s\" with the error: %s',\n        file.name,\n        error.message,\n      )\n\n      // something went wrong, but continue still\n      return of(null)\n    }),\n    filter(Boolean),\n    map((imageUrl) => createUploadEvent([set(imageUrl, [UPLOAD_STATUS_KEY, 'previewImage'])])),\n  )\n\n  return concat(\n    of(createInitialUploadEvent(file)),\n    merge(upload$, setPreviewUrl$),\n    of(CLEANUP_EVENT),\n  )\n}\n","import {type SanityClient} from '@sanity/client'\nimport {type SchemaType} from '@sanity/types'\nimport {map} from 'rxjs/operators'\n\nimport {set} from '../../patch'\nimport {type Uploader, type UploaderDef, type UploadOptions} from './types'\nimport {uploadFile} from './uploadFile'\nimport {uploadImage} from './uploadImage'\n\nconst UPLOAD_IMAGE: UploaderDef = {\n  type: 'image',\n  accepts: 'image/*',\n  upload: (client: SanityClient, file: File, type?: SchemaType, options?: UploadOptions) =>\n    uploadImage(client, file, options),\n}\n\nconst UPLOAD_FILE: UploaderDef = {\n  type: 'file',\n  accepts: '',\n  upload: (client: SanityClient, file: File, type: SchemaType, options?: UploadOptions) =>\n    uploadFile(client, file, options),\n}\n\nconst UPLOAD_TEXT: UploaderDef = {\n  type: 'string',\n  accepts: 'text/*',\n  upload: (client: SanityClient, file: File, type: SchemaType, options?: UploadOptions) =>\n    uploadFile(client, file, options).pipe(\n      map((content) => ({\n        type: 'uploadProgress',\n        patches: [set(content)],\n      })),\n    ),\n\n  // Todo: promote this to a \"first-class\" form-builder abstraction\n  // and make it possible to register custom uploaders\n}\n\nexport const uploaders: Array<Uploader> = [UPLOAD_IMAGE, UPLOAD_TEXT, UPLOAD_FILE].map(\n  (uploader, i) => ({\n    ...uploader,\n    priority: i,\n  }),\n)\n","import {type SchemaType} from '@sanity/types'\n\nimport {type FIXME} from '../../../FIXME'\nimport * as is from '../../utils/is'\nimport {accepts} from './accepts'\nimport {type FileLike, type Uploader} from './types'\nimport {uploaders} from './uploaders'\n\nexport function resolveUploader(type: SchemaType, file: FileLike): Uploader | null {\n  return (\n    uploaders.find((uploader) => {\n      return (\n        is.type(uploader.type, type) &&\n        accepts(file, uploader.accepts) &&\n        accepts(file, (type.options as FIXME)?.accept || '')\n      )\n    }) || null\n  )\n}\n","import {type Path, type SchemaType} from '@sanity/types'\nimport {useToast} from '@sanity/ui'\nimport {get} from 'lodash'\nimport {type FocusEvent, useCallback, useEffect, useMemo, useRef} from 'react'\nimport {type Subscription} from 'rxjs'\nimport {map, tap} from 'rxjs/operators'\n\nimport {useClient} from '../../../../hooks'\nimport {useResolveInitialValueForType} from '../../../../store'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../../../studioClient'\nimport {useDidUpdate} from '../../../hooks/useDidUpdate'\nimport {createProtoArrayValue} from '../../../inputs/arrays/ArrayOfObjectsInput/createProtoArrayValue'\nimport {insert, type PatchArg, PatchEvent, setIfMissing, unset} from '../../../patch'\nimport {applyAll} from '../../../patch/applyPatch'\nimport {type ArrayOfObjectsFormNode, type FieldMember} from '../../../store'\nimport {useDocumentFieldActions} from '../../../studio/contexts/DocumentFieldActions'\nimport {FormCallbacksProvider, useFormCallbacks} from '../../../studio/contexts/FormCallbacks'\nimport {resolveUploader as defaultResolveUploader} from '../../../studio/uploads/resolveUploader'\nimport {type FileLike, type UploadProgressEvent} from '../../../studio/uploads/types'\nimport {\n  type ArrayFieldProps,\n  type ArrayInputInsertEvent,\n  type ArrayInputMoveItemEvent,\n  type ArrayOfObjectsInputProps,\n  type ObjectItem,\n  type OnPathFocusPayload,\n  type RenderAnnotationCallback,\n  type RenderArrayOfObjectsItemCallback,\n  type RenderBlockCallback,\n  type RenderFieldCallback,\n  type RenderInputCallback,\n  type RenderPreviewCallback,\n  type UploadEvent,\n} from '../../../types'\nimport {useFormBuilder} from '../../../useFormBuilder'\nimport {ensureKey} from '../../../utils/ensureKey'\nimport * as is from '../../../utils/is'\nimport {createDescriptionId} from '../../common/createDescriptionId'\nimport {resolveInitialArrayValues} from '../../common/resolveInitialArrayValues'\n\n/**\n * Responsible for creating inputProps and fieldProps to pass to ´renderInput´ and ´renderField´ for an array input\n * Note: \"ArrayField\" in this context means an object field of an array type\n * @param props - Component props\n */\nexport function ArrayOfObjectsField(props: {\n  member: FieldMember<ArrayOfObjectsFormNode>\n  renderAnnotation?: RenderAnnotationCallback\n  renderBlock?: RenderBlockCallback\n  renderField: RenderFieldCallback\n  renderInlineBlock?: RenderBlockCallback\n  renderInput: RenderInputCallback\n  renderItem: RenderArrayOfObjectsItemCallback\n  renderPreview: RenderPreviewCallback\n}) {\n  const {\n    onPathBlur,\n    onPathFocus,\n    onChange,\n    onSetPathCollapsed,\n    onSetFieldSetCollapsed,\n    onPathOpen,\n    onFieldGroupSelect,\n  } = useFormCallbacks()\n\n  const {\n    member,\n    renderAnnotation,\n    renderBlock,\n    renderField,\n    renderInlineBlock,\n    renderInput,\n    renderItem,\n    renderPreview,\n  } = props\n\n  const fieldActions = useDocumentFieldActions()\n\n  const focusRef = useRef<Element & {focus: () => void}>(undefined)\n  const uploadSubscriptions = useRef<Record<string, Subscription>>({})\n\n  useDidUpdate(member.field.focused, (hadFocus, hasFocus) => {\n    if (!hadFocus && hasFocus) {\n      focusRef.current?.focus()\n    }\n  })\n\n  const handleFocus = useCallback(\n    (event: FocusEvent) => {\n      // We want to handle focus when the array input *itself* element receives\n      // focus, not when a child element receives focus, but React has decided\n      // to let focus bubble, so this workaround is needed\n      // Background: https://github.com/facebook/react/issues/6410#issuecomment-671915381\n      if (event.currentTarget === event.target && event.currentTarget === focusRef.current) {\n        onPathFocus(member.field.path)\n      }\n    },\n    [member.field.path, onPathFocus],\n  )\n\n  const handleBlur = useCallback(\n    (event: FocusEvent) => {\n      // We want to handle blur when the array input *itself* element receives\n      // blur, not when a child element receives blur, but React has decided\n      // to let focus events bubble, so this workaround is needed\n      // Background: https://github.com/facebook/react/issues/6410#issuecomment-671915381\n      if (event.currentTarget === event.target && event.currentTarget === focusRef.current) {\n        onPathBlur(member.field.path)\n      }\n    },\n    [member.field.path, onPathBlur],\n  )\n\n  const valueRef = useRef(member.field.value)\n  useEffect(() => {\n    valueRef.current = member.field.value\n  }, [member.field.value])\n\n  const handleChange = useCallback(\n    (event: PatchEvent | PatchArg) => {\n      const patches = PatchEvent.from(event).patches\n      // if the patch is an unset patch that targets an item in the array (as opposed to unsetting a field somewhere deeper)\n      const isRemovingLastItem = patches.some(\n        (patch) => patch.type === 'unset' && patch.path.length === 1,\n      )\n\n      if (isRemovingLastItem) {\n        // apply the patch to the current value\n        valueRef.current = applyAll(valueRef.current || [], patches)\n\n        // if the result is an empty array\n        if (Array.isArray(valueRef.current) && !valueRef.current.length) {\n          // then unset the array field\n          onChange(PatchEvent.from(unset([member.name])))\n          return\n        }\n      }\n      // otherwise apply the patch\n      onChange(PatchEvent.from(event).prepend(setIfMissing([])).prefixAll(member.name))\n    },\n    [onChange, member.name, valueRef],\n  )\n  const resolveInitialValue = useResolveInitialValueForType()\n\n  const toast = useToast()\n\n  const handleCollapse = useCallback(() => {\n    onSetPathCollapsed(member.field.path, true)\n  }, [onSetPathCollapsed, member.field.path])\n\n  const handleExpand = useCallback(() => {\n    onSetPathCollapsed(member.field.path, false)\n  }, [onSetPathCollapsed, member.field.path])\n\n  const handleCollapseItem = useCallback(\n    (itemKey: string) => {\n      onSetPathCollapsed(member.field.path.concat({_key: itemKey}), true)\n    },\n    [onSetPathCollapsed, member.field.path],\n  )\n\n  const handleExpandItem = useCallback(\n    (itemKey: string) => {\n      onSetPathCollapsed(member.field.path.concat({_key: itemKey}), false)\n    },\n    [onSetPathCollapsed, member.field.path],\n  )\n\n  const handleOpenItem = useCallback(\n    (path: Path) => {\n      onPathOpen(path)\n      onSetPathCollapsed(path, false)\n    },\n    [onPathOpen, onSetPathCollapsed],\n  )\n\n  const handleCloseItem = useCallback(() => {\n    onPathOpen(member.field.path)\n    onSetPathCollapsed(member.field.path, true)\n  }, [onPathOpen, member.field.path, onSetPathCollapsed])\n\n  const handleInsert = useCallback(\n    (event: ArrayInputInsertEvent<ObjectItem>) => {\n      if (event.items.length === 0) {\n        throw new Error('Insert event should include at least one item')\n      }\n      const itemsWithKeys = event.items.map((item) => ensureKey(item))\n\n      handleChange(PatchEvent.from([insert(itemsWithKeys, event.position, [event.referenceItem])]))\n\n      const focusItemKey = itemsWithKeys[0]._key\n      const itemPath = [...member.field.path, {_key: focusItemKey}]\n      // Set focus at the first item (todo: verify that this is the expected/better behavior when adding multiple items)\n      onPathFocus(itemPath)\n\n      const shouldOpen = event.open !== false\n\n      if (event.skipInitialValue) {\n        if (shouldOpen) {\n          handleOpenItem(itemPath)\n        }\n      } else {\n        resolveInitialArrayValues(itemsWithKeys, member.field.schemaType, resolveInitialValue)\n          .pipe(\n            tap((result) => {\n              if (result.type === 'patch') {\n                handleChange(result.patches)\n              } else {\n                toast.push({\n                  title: `Could not resolve initial value`,\n                  description: `Unable to resolve initial value for type: ${result.schemaType.title}: ${result.error.message}.`,\n                  status: 'error',\n                })\n              }\n            }),\n          )\n          .subscribe({\n            complete: () => {\n              if (shouldOpen) {\n                handleOpenItem(itemPath)\n              }\n            },\n          })\n      }\n    },\n    [\n      handleChange,\n      handleOpenItem,\n      member.field.path,\n      member.field.schemaType,\n      onPathFocus,\n      resolveInitialValue,\n      toast,\n    ],\n  )\n\n  const handleMoveItem = useCallback(\n    (event: ArrayInputMoveItemEvent) => {\n      const value = member.field.value\n      const item = value?.[event.fromIndex] as any\n      const refItem = value?.[event.toIndex] as any\n      if (event.fromIndex === event.toIndex) {\n        return\n      }\n\n      if (!(item as any)?._key || !(refItem as any)?._key) {\n        // eslint-disable-next-line no-console\n        console.error(\n          'Neither the item you are moving nor the item you are moving to have a key. Cannot continue.',\n        )\n\n        return\n      }\n\n      handleChange([\n        unset([{_key: item._key}]),\n        insert([item], event.fromIndex > event.toIndex ? 'before' : 'after', [\n          {_key: refItem._key},\n        ]),\n      ])\n    },\n    [handleChange, member.field.value],\n  )\n\n  const handleItemPrepend = useCallback(\n    (item: ObjectItem) => {\n      handleInsert({\n        items: [item],\n        position: 'before',\n        referenceItem: 0,\n      })\n    },\n    [handleInsert],\n  )\n\n  const handleItemAppend = useCallback(\n    (item: ObjectItem) => {\n      handleInsert({\n        items: [item],\n        position: 'after',\n        referenceItem: -1,\n      })\n    },\n    [handleInsert],\n  )\n\n  const handleRemoveItem = useCallback(\n    (itemKey: string) => {\n      if (uploadSubscriptions.current[itemKey]) {\n        uploadSubscriptions.current[itemKey].unsubscribe()\n        delete uploadSubscriptions.current[itemKey]\n      }\n      handleChange([unset([{_key: itemKey}])])\n    },\n    [handleChange],\n  )\n\n  const handleFocusChildPath = useCallback(\n    (path: Path, payload?: OnPathFocusPayload) => {\n      onPathFocus(member.field.path.concat(path), payload)\n    },\n    [member.field.path, onPathFocus],\n  )\n\n  const elementProps = useMemo(\n    (): ArrayOfObjectsInputProps['elementProps'] => ({\n      'onBlur': handleBlur,\n      'onFocus': handleFocus,\n      'id': member.field.id,\n      'ref': focusRef,\n      'aria-describedby': createDescriptionId(member.field.id, member.field.schemaType.description),\n    }),\n    [handleBlur, handleFocus, member.field.id, member.field.schemaType.description],\n  )\n\n  const client = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n  const formBuilder = useFormBuilder()\n\n  const supportsImageUploads = formBuilder.__internal.image.directUploads\n  const supportsFileUploads = formBuilder.__internal.file.directUploads\n\n  const resolveUploader = useCallback(\n    (type: SchemaType, file: FileLike) => {\n      if (is.type('image', type) && !supportsImageUploads) {\n        return null\n      }\n      if (is.type('file', type) && !supportsFileUploads) {\n        return null\n      }\n\n      return defaultResolveUploader(type, file)\n    },\n    [supportsFileUploads, supportsImageUploads],\n  )\n\n  const handleUpload = useCallback(\n    ({file, schemaType, uploader}: UploadEvent) => {\n      const item = createProtoArrayValue(schemaType)\n      const key = item._key\n\n      handleInsert({\n        items: [item],\n        position: 'after',\n        referenceItem: -1,\n        open: false,\n      })\n\n      const options = {\n        metadata: get(schemaType, 'options.metadata'),\n        storeOriginalFilename: get(schemaType, 'options.storeOriginalFilename'),\n      }\n\n      const events$ = uploader.upload(client, file, schemaType, options).pipe(\n        map((uploadProgressEvent: UploadProgressEvent) =>\n          PatchEvent.from(uploadProgressEvent.patches || []).prefixAll({_key: key}),\n        ),\n        tap((event) => handleChange(event.patches)),\n      )\n\n      uploadSubscriptions.current = {\n        ...uploadSubscriptions.current,\n        [key]: events$.subscribe(),\n      }\n    },\n    [client, handleChange, handleInsert],\n  )\n\n  const inputProps = useMemo((): Omit<ArrayOfObjectsInputProps, 'renderDefault'> => {\n    return {\n      level: member.field.level,\n      members: member.field.members,\n      value: member.field.value as any,\n      readOnly: member.field.readOnly,\n      schemaType: member.field.schemaType,\n      changed: member.field.changed,\n      id: member.field.id,\n      onItemExpand: handleExpandItem,\n      onItemCollapse: handleCollapseItem,\n      onItemClose: handleCloseItem,\n      onItemOpen: handleOpenItem,\n\n      focusPath: member.field.focusPath,\n      focused: member.field.focused,\n\n      path: member.field.path,\n\n      onChange: handleChange,\n      onInsert: handleInsert,\n      onItemMove: handleMoveItem,\n      onItemRemove: handleRemoveItem,\n      onItemAppend: handleItemAppend,\n      onItemPrepend: handleItemPrepend,\n      onPathFocus: handleFocusChildPath,\n      resolveInitialValue,\n      onUpload: handleUpload,\n      resolveUploader: resolveUploader,\n      validation: member.field.validation,\n      presence: member.field.presence,\n      renderAnnotation,\n      renderBlock,\n      renderInlineBlock,\n      renderInput,\n      renderField,\n      renderItem,\n      renderPreview,\n      elementProps,\n    }\n  }, [\n    member.field.level,\n    member.field.members,\n    member.field.value,\n    member.field.readOnly,\n    member.field.schemaType,\n    member.field.changed,\n    member.field.id,\n    member.field.focusPath,\n    member.field.focused,\n    member.field.path,\n    member.field.validation,\n    member.field.presence,\n    handleExpandItem,\n    handleCollapseItem,\n    handleCloseItem,\n    handleOpenItem,\n    handleChange,\n    handleInsert,\n    handleMoveItem,\n    handleRemoveItem,\n    handleItemAppend,\n    handleItemPrepend,\n    handleFocusChildPath,\n    resolveInitialValue,\n    handleUpload,\n    resolveUploader,\n    renderAnnotation,\n    renderBlock,\n    renderInlineBlock,\n    renderInput,\n    renderField,\n    renderItem,\n    renderPreview,\n    elementProps,\n  ])\n\n  const renderedInput = useMemo(() => renderInput(inputProps), [inputProps, renderInput])\n\n  const fieldProps = useMemo((): Omit<ArrayFieldProps, 'renderDefault'> => {\n    return {\n      actions: fieldActions,\n      name: member.name,\n      index: member.index,\n      level: member.field.level,\n      value: member.field.value,\n      title: member.field.schemaType.title,\n      description: member.field.schemaType.description,\n      collapsible: member.collapsible,\n      collapsed: member.collapsed,\n      changed: member.field.changed,\n      onCollapse: handleCollapse,\n      onExpand: handleExpand,\n      schemaType: member.field.schemaType,\n      inputId: member.field.id,\n      path: member.field.path,\n      presence: member.field.presence,\n      validation: member.field.validation,\n      children: renderedInput,\n      inputProps: inputProps as ArrayOfObjectsInputProps,\n    }\n  }, [\n    fieldActions,\n    member.name,\n    member.index,\n    member.field.level,\n    member.field.value,\n    member.field.schemaType,\n    member.field.changed,\n    member.field.id,\n    member.field.path,\n    member.field.presence,\n    member.field.validation,\n    member.collapsible,\n    member.collapsed,\n    handleCollapse,\n    handleExpand,\n    renderedInput,\n    inputProps,\n  ])\n\n  return (\n    <FormCallbacksProvider\n      onFieldGroupSelect={onFieldGroupSelect}\n      onChange={handleChange}\n      onSetFieldSetCollapsed={onSetFieldSetCollapsed}\n      onSetPathCollapsed={onSetPathCollapsed}\n      onPathOpen={onPathOpen}\n      onPathBlur={onPathBlur}\n      onPathFocus={onPathFocus}\n    >\n      {useMemo(() => renderField(fieldProps), [fieldProps, renderField])}\n    </FormCallbacksProvider>\n  )\n}\n","import {Observable} from 'rxjs'\n\nexport function readAsText(file: File, encoding?: string) {\n  return new Observable<string | null>((observer) => {\n    const reader = new FileReader()\n    reader.onerror = (error) => observer.error(error)\n    reader.onload = () => {\n      observer.next(reader.result as string | null)\n      observer.complete()\n    }\n    reader.readAsText(file, encoding)\n    return () => {\n      reader.abort()\n    }\n  })\n}\n","import {\n  type BooleanSchemaType,\n  isBooleanSchemaType,\n  isNumberSchemaType,\n  isStringSchemaType,\n  type NumberSchemaType,\n  type SchemaType,\n  type StringSchemaType,\n} from '@sanity/types'\nimport {type FocusEvent, useCallback, useMemo, useRef} from 'react'\nimport {type Subscription} from 'rxjs'\nimport {filter, map, tap} from 'rxjs/operators'\n\nimport {type FIXME} from '../../../../FIXME'\nimport {useClient} from '../../../../hooks'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../../../studioClient'\nimport {useDidUpdate} from '../../../hooks/useDidUpdate'\nimport {type PrimitiveValue} from '../../../inputs/arrays/ArrayOfPrimitivesInput/types'\nimport {insert, type PatchArg, PatchEvent, set, setIfMissing, unset} from '../../../patch'\nimport {applyAll} from '../../../patch/applyPatch'\nimport {type ArrayOfPrimitivesFormNode, type FieldMember} from '../../../store'\nimport {type Uploader, type UploaderResolver, type UploadProgressEvent} from '../../../studio'\nimport {useDocumentFieldActions} from '../../../studio/contexts/DocumentFieldActions'\nimport {FormCallbacksProvider, useFormCallbacks} from '../../../studio/contexts/FormCallbacks'\nimport {accepts} from '../../../studio/uploads/accepts'\nimport {readAsText} from '../../../studio/uploads/file/readAsText'\nimport {\n  type ArrayInputMoveItemEvent,\n  type ArrayOfObjectsInputProps,\n  type ArrayOfPrimitivesFieldProps,\n  type ArrayOfPrimitivesInputProps,\n  type RenderAnnotationCallback,\n  type RenderArrayOfPrimitivesItemCallback,\n  type RenderBlockCallback,\n  type RenderFieldCallback,\n  type RenderInputCallback,\n  type RenderPreviewCallback,\n  type UploadEvent,\n} from '../../../types'\nimport {createDescriptionId} from '../../common/createDescriptionId'\n\nfunction move<T>(arr: T[], from: number, to: number): T[] {\n  const copy = arr.slice()\n  const val = copy[from]\n  copy.splice(from, 1)\n  copy.splice(to, 0, val)\n  return copy\n}\n\n/**\n * @example\n * Inserts \"hello\" at the beginning\n * ```ts\n * insertAfter(-1, [\"one\", \"two\"], \"hello\")\n * // => [\"hello\", \"one\", \"two\"]\n * ```\n */\nfunction insertAfter<T>(\n  /**\n   * index to insert item after. An index of -1 will prepend the item\n   */\n  index: number,\n  /**\n   * the array to insert the item into\n   */\n  arr: T[],\n  /**\n   * the item to insert\n   */\n  items: T[],\n): T[] {\n  const copy = arr.slice()\n  copy.splice(index + 1, 0, ...items)\n  return copy\n}\nfunction isStringNumeric(input: string) {\n  return /^\\d+$/.test(input)\n}\n\ntype PrimitiveSchemaType = NumberSchemaType | BooleanSchemaType | StringSchemaType\n\nfunction convertToSchemaType(line: string, candidates: SchemaType[]) {\n  let acceptsBooleans = false\n  let acceptsNumbers = false\n  let acceptsStrings = false\n  candidates.forEach((candidate) => {\n    if (isBooleanSchemaType(candidate)) {\n      acceptsBooleans = true\n    }\n    if (isStringSchemaType(candidate)) {\n      acceptsStrings = true\n    }\n    if (isNumberSchemaType(candidate)) {\n      acceptsNumbers = true\n    }\n  })\n\n  if (acceptsBooleans && (line === 'true' || line === 'false')) return line === 'true'\n  if (acceptsNumbers && isStringNumeric(line)) return Number(line)\n  return acceptsStrings ? line : undefined\n}\n\nfunction createPlainTextUploader(itemTypes: PrimitiveSchemaType[]): Uploader<PrimitiveSchemaType> {\n  return {\n    priority: 0,\n    accepts: 'text/*',\n    type: 'string',\n    upload(client, file) {\n      return readAsText(file, 'utf-8').pipe(\n        map((textContent) =>\n          textContent\n            ?.split(/[\\n\\r]/)\n            .map((value) => convertToSchemaType(value, itemTypes))\n            .filter((v) => v !== undefined),\n        ),\n        filter((v: unknown[] | undefined): v is unknown[] => Array.isArray(v)),\n        map((lines: unknown[]) => ({\n          type: 'uploadProgress',\n          patches: [insert(lines, 'after', [-1])],\n        })),\n      )\n    },\n  }\n}\n\n/**\n * Responsible for creating inputProps and fieldProps to pass to ´renderInput´ and ´renderField´ for an array input\n * Note: \"ArrayField\" in this context means an object field of an array type\n * @param props - Component props\n */\nexport function ArrayOfPrimitivesField(props: {\n  member: FieldMember<ArrayOfPrimitivesFormNode>\n  renderAnnotation?: RenderAnnotationCallback\n  renderBlock?: RenderBlockCallback\n  renderField: RenderFieldCallback\n  renderInlineBlock?: RenderBlockCallback\n  renderInput: RenderInputCallback\n  renderItem: RenderArrayOfPrimitivesItemCallback\n  renderPreview: RenderPreviewCallback\n}) {\n  const {\n    onPathBlur,\n    onPathFocus,\n    onChange,\n    onPathOpen,\n    onSetPathCollapsed,\n    onSetFieldSetCollapsed,\n    onFieldGroupSelect,\n  } = useFormCallbacks()\n  const {\n    member,\n    renderAnnotation,\n    renderBlock,\n    renderField,\n    renderInlineBlock,\n    renderInput,\n    renderItem,\n    renderPreview,\n  } = props\n  const fieldActions = useDocumentFieldActions()\n\n  const focusRef = useRef<Element & {focus: () => void}>(undefined)\n  const uploadSubscriptions = useRef<Subscription>(undefined)\n  const client = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n\n  useDidUpdate(member.field.focused, (hadFocus, hasFocus) => {\n    if (!hadFocus && hasFocus) {\n      focusRef.current?.focus()\n    }\n  })\n\n  const handleFocus = useCallback(\n    (event: FocusEvent) => {\n      // We want to handle focus when the array input *itself* element receives\n      // focus, not when a child element receives focus, but React has decided\n      // to let focus bubble, so this workaround is needed\n      // Background: https://github.com/facebook/react/issues/6410#issuecomment-671915381\n      if (event.currentTarget === event.target && event.currentTarget === focusRef.current) {\n        onPathFocus(member.field.path)\n      }\n    },\n    [member.field.path, onPathFocus],\n  )\n\n  const handleBlur = useCallback(\n    (event: FocusEvent) => {\n      // We want to handle blur when the array input *itself* element receives\n      // blur, not when a child element receives blur, but React has decided\n      // to let focus events bubble, so this workaround is needed\n      // Background: https://github.com/facebook/react/issues/6410#issuecomment-671915381\n      if (event.currentTarget === event.target && event.currentTarget === focusRef.current) {\n        onPathBlur(member.field.path)\n      }\n    },\n    [member.field.path, onPathBlur],\n  )\n\n  const handleChange = useCallback(\n    (event: PatchEvent | PatchArg) => {\n      const patches = PatchEvent.from(event).patches\n      // if the patch is an unset patch that targets an item in the array (as opposed to unsetting a field somewhere deeper)\n      const isRemovingLastItem = patches.some(\n        (patch) => patch.type === 'unset' && patch.path.length === 1,\n      )\n\n      if (isRemovingLastItem) {\n        // apply the patch to the current value\n        const result = applyAll(member.field.value || [], patches)\n\n        // if the result is an empty array\n        if (Array.isArray(result) && !result.length) {\n          // then unset the array field\n          onChange(PatchEvent.from(unset([member.name])))\n          return\n        }\n      }\n      // otherwise apply the patch\n      onChange(PatchEvent.from(event).prepend(setIfMissing([])).prefixAll(member.name))\n    },\n    [onChange, member.name, member.field.value],\n  )\n\n  const handleSetCollapsed = useCallback(\n    (collapsed: boolean) => {\n      onSetPathCollapsed(member.field.path, collapsed)\n    },\n    [onSetPathCollapsed, member.field.path],\n  )\n\n  const handleCollapse = useCallback(() => {\n    onSetPathCollapsed(member.field.path, true)\n  }, [onSetPathCollapsed, member.field.path])\n  const handleExpand = useCallback(() => {\n    onSetPathCollapsed(member.field.path, false)\n  }, [onSetPathCollapsed, member.field.path])\n\n  const setValue = useCallback(\n    (nextValue: PrimitiveValue[]) => {\n      handleChange(nextValue.length === 0 ? unset() : set(nextValue))\n    },\n    [handleChange],\n  )\n\n  const handleMoveItem = useCallback(\n    (event: ArrayInputMoveItemEvent) => {\n      const {value = []} = member.field\n      if (event.fromIndex === event.toIndex) {\n        return\n      }\n\n      setValue(move(value, event.fromIndex, event.toIndex))\n    },\n    [member.field, setValue],\n  )\n\n  const handleAppend = useCallback(\n    (itemValue: PrimitiveValue) => {\n      const {value = []} = member.field\n      setValue(value.concat(itemValue))\n    },\n    [member.field, setValue],\n  )\n\n  const handlePrepend = useCallback(\n    (itemValue: PrimitiveValue) => {\n      const {value = []} = member.field\n      setValue([itemValue].concat(value || []))\n    },\n    [member.field, setValue],\n  )\n\n  const handleInsert = useCallback(\n    (event: {items: PrimitiveValue[]; position: 'before' | 'after'; referenceIndex: number}) => {\n      const {value = []} = member.field\n\n      const insertIndex = event.referenceIndex + (event.position === 'before' ? -1 : 0)\n      setValue(insertAfter(insertIndex, value, event.items))\n    },\n    [member.field, setValue],\n  )\n\n  const handleRemoveItem = useCallback(\n    (index: number) => {\n      handleChange(unset([index]))\n    },\n    [handleChange],\n  )\n\n  const handleFocusIndex = useCallback(\n    (index: number) => {\n      onPathFocus(member.field.path.concat([index]))\n    },\n    [member.field.path, onPathFocus],\n  )\n\n  const elementProps = useMemo(\n    (): ArrayOfObjectsInputProps['elementProps'] => ({\n      'onBlur': handleBlur,\n      'onFocus': handleFocus,\n      'id': member.field.id,\n      'ref': focusRef,\n      'aria-describedby': createDescriptionId(member.field.id, member.field.schemaType.description),\n    }),\n    [handleBlur, handleFocus, member.field.id, member.field.schemaType.description],\n  )\n\n  const plainTextUploader = useMemo(\n    () => createPlainTextUploader(member.field.schemaType.of as PrimitiveSchemaType[]),\n    [member.field.schemaType.of],\n  )\n\n  const resolveUploader: UploaderResolver<PrimitiveSchemaType> = useCallback(\n    (schemaType, file) => (accepts(file, 'text/*') ? plainTextUploader : null),\n    [plainTextUploader],\n  )\n\n  const handleUpload = useCallback(\n    ({file, schemaType, uploader}: UploadEvent) => {\n      const events$ = uploader.upload(client, file, schemaType).pipe(\n        map((uploadProgressEvent: UploadProgressEvent) =>\n          PatchEvent.from(uploadProgressEvent.patches || []),\n        ),\n        tap((event) => handleChange(event.patches)),\n      )\n\n      if (uploadSubscriptions.current) {\n        uploadSubscriptions.current.unsubscribe()\n      }\n      uploadSubscriptions.current = events$.subscribe()\n    },\n    [client, handleChange],\n  )\n\n  const inputProps = useMemo((): Omit<ArrayOfPrimitivesInputProps, 'renderDefault'> => {\n    return {\n      level: member.field.level,\n      members: member.field.members,\n      value: member.field.value as any,\n      readOnly: member.field.readOnly,\n      onSetCollapsed: handleSetCollapsed,\n      schemaType: member.field.schemaType,\n      changed: member.field.changed,\n      id: member.field.id,\n      elementProps,\n      path: member.field.path,\n      focusPath: member.field.focusPath,\n      focused: member.field.focused,\n      onChange: handleChange,\n      onInsert: handleInsert,\n      onMoveItem: handleMoveItem,\n      onItemRemove: handleRemoveItem,\n      onItemAppend: handleAppend,\n      onItemPrepend: handlePrepend,\n      validation: member.field.validation,\n      presence: member.field.presence,\n      resolveUploader,\n      onUpload: handleUpload,\n      renderAnnotation,\n      renderBlock,\n      renderInlineBlock,\n      renderInput,\n      renderItem,\n      onIndexFocus: handleFocusIndex,\n      renderPreview,\n    }\n  }, [\n    member.field.level,\n    member.field.members,\n    member.field.value,\n    member.field.readOnly,\n    member.field.schemaType,\n    member.field.changed,\n    member.field.id,\n    member.field.path,\n    member.field.focusPath,\n    member.field.focused,\n    member.field.validation,\n    member.field.presence,\n    handleSetCollapsed,\n    elementProps,\n    handleChange,\n    handleInsert,\n    handleMoveItem,\n    handleRemoveItem,\n    handleAppend,\n    handlePrepend,\n    resolveUploader,\n    handleUpload,\n    renderAnnotation,\n    renderBlock,\n    renderInlineBlock,\n    renderInput,\n    renderItem,\n    handleFocusIndex,\n    renderPreview,\n  ])\n\n  const renderedInput = useMemo(() => renderInput(inputProps), [inputProps, renderInput])\n\n  const fieldProps: Omit<ArrayOfPrimitivesFieldProps, 'renderDefault'> = useMemo(() => {\n    return {\n      actions: fieldActions,\n      name: member.name,\n      index: member.index,\n      level: member.field.level,\n      value: member.field.value,\n      title: member.field.schemaType.title,\n      description: member.field.schemaType.description,\n      collapsible: member.collapsible,\n      collapsed: member.collapsed,\n      onExpand: handleExpand,\n      changed: member.field.changed,\n      onCollapse: handleCollapse,\n      schemaType: member.field.schemaType,\n      inputId: member.field.id,\n      path: member.field.path,\n      presence: member.field.presence,\n      validation: member.field.validation,\n      children: renderedInput,\n      inputProps: inputProps as ArrayOfPrimitivesInputProps,\n    }\n  }, [\n    fieldActions,\n    member.name,\n    member.index,\n    member.field.level,\n    member.field.value,\n    member.field.schemaType,\n    member.field.changed,\n    member.field.id,\n    member.field.path,\n    member.field.presence,\n    member.field.validation,\n    member.collapsible,\n    member.collapsed,\n    handleExpand,\n    handleCollapse,\n    renderedInput,\n    inputProps,\n  ])\n\n  return (\n    <FormCallbacksProvider\n      onFieldGroupSelect={onFieldGroupSelect}\n      onChange={handleChange}\n      onPathOpen={onPathOpen}\n      onSetFieldSetCollapsed={onSetFieldSetCollapsed}\n      onSetPathCollapsed={onSetPathCollapsed}\n      onPathBlur={onPathBlur}\n      onPathFocus={onPathFocus}\n    >\n      {useMemo(() => renderField(fieldProps as FIXME), [fieldProps, renderField])}\n    </FormCallbacksProvider>\n  )\n}\n","import {isArraySchemaType, isObjectSchemaType, isPrimitiveSchemaType} from '@sanity/types'\n\nimport {\n  type ArrayOfObjectsFormNode,\n  type ArrayOfPrimitivesFormNode,\n  type FieldMember,\n  type ObjectFormNode,\n} from '../../../store'\n\nexport function isMemberObject(member: FieldMember): member is FieldMember<ObjectFormNode> {\n  return isObjectSchemaType(member.field.schemaType)\n}\n\nexport function isMemberArrayOfPrimitives(\n  member: FieldMember,\n): member is FieldMember<ArrayOfPrimitivesFormNode> {\n  return (\n    isArraySchemaType(member.field.schemaType) &&\n    member.field.schemaType.of.every((ofType) => isPrimitiveSchemaType(ofType))\n  )\n}\n\nexport function isMemberArrayOfObjects(\n  member: FieldMember,\n): member is FieldMember<ArrayOfObjectsFormNode> {\n  return (\n    isArraySchemaType(member.field.schemaType) &&\n    member.field.schemaType.of.every((ofType) => isObjectSchemaType(ofType))\n  )\n}\n","import {type Path} from '@sanity/types'\nimport {isShallowEmptyObject} from '@sanity/util/content'\nimport {useCallback, useEffect, useMemo, useRef} from 'react'\n\nimport {useDidUpdate} from '../../../hooks/useDidUpdate'\nimport {type PatchArg, PatchEvent, setIfMissing, unset} from '../../../patch'\nimport {applyAll} from '../../../patch/applyPatch'\nimport {type FieldMember, type ObjectFormNode} from '../../../store'\nimport {useDocumentFieldActions} from '../../../studio/contexts/DocumentFieldActions'\nimport {FormCallbacksProvider, useFormCallbacks} from '../../../studio/contexts/FormCallbacks'\nimport {\n  type ArrayOfObjectsInputProps,\n  type ObjectFieldProps,\n  type ObjectInputProps,\n  type RenderAnnotationCallback,\n  type RenderArrayOfObjectsItemCallback,\n  type RenderBlockCallback,\n  type RenderFieldCallback,\n  type RenderInputCallback,\n  type RenderPreviewCallback,\n} from '../../../types'\nimport {createProtoValue} from '../../../utils/createProtoValue'\nimport {createDescriptionId} from '../../common/createDescriptionId'\n\n/**\n * Responsible for creating inputProps and fieldProps to pass to ´renderInput´ and ´renderField´ for an object input\n * Note: \"ObjectField\" in this context means an object field of an object type (not \"a field of an object\")\n * @param props - Component props\n */\nexport const ObjectField = function ObjectField(props: {\n  member: FieldMember<ObjectFormNode>\n  renderAnnotation?: RenderAnnotationCallback\n  renderBlock?: RenderBlockCallback\n  renderField: RenderFieldCallback\n  renderInlineBlock?: RenderBlockCallback\n  renderInput: RenderInputCallback\n  renderItem: RenderArrayOfObjectsItemCallback\n  renderPreview: RenderPreviewCallback\n}) {\n  const {\n    onPathBlur,\n    onPathFocus,\n    onChange,\n    onPathOpen,\n    onSetPathCollapsed,\n    onSetFieldSetCollapsed,\n    onFieldGroupSelect,\n  } = useFormCallbacks()\n\n  const {\n    member,\n    renderAnnotation,\n    renderBlock,\n    renderField,\n    renderInlineBlock,\n    renderInput,\n    renderItem,\n    renderPreview,\n  } = props\n  const fieldActions = useDocumentFieldActions()\n  const focusRef = useRef<{focus: () => void}>(undefined)\n  // Keep a local reference to the most recent value. See comment in `handleChange` below for more details\n  const pendingValue = useRef(member.field.value)\n\n  useEffect(() => {\n    // if the props value has changed, then we should update the pending value\n    pendingValue.current = member.field.value\n  }, [member.field.value])\n\n  useDidUpdate(member.field.focused, (hadFocus, hasFocus) => {\n    if (!hadFocus && hasFocus) {\n      focusRef.current?.focus()\n    }\n  })\n\n  const handleBlur = useCallback(() => {\n    onPathBlur(member.field.path)\n  }, [member.field.path, onPathBlur])\n\n  const handleFocus = useCallback(() => {\n    onPathFocus(member.field.path)\n  }, [member.field.path, onPathFocus])\n\n  const handleFocusChildPath = useCallback(\n    (path: Path) => {\n      onPathFocus(member.field.path.concat(path))\n    },\n    [member.field.path, onPathFocus],\n  )\n\n  const handleChange = useCallback(\n    (event: PatchEvent | PatchArg) => {\n      const isRoot = member.field.path.length === 0\n\n      // this handle touches on more than just object fields, documents included\n      // if we're at a \"document\" level, then we want to have a way to skip the following logic\n      if (!isRoot) {\n        const patches = PatchEvent.from(event).patches\n        // Apply the patch to a local cache of the last received field value from props.\n        // We might receive several calls to `handleChange` synchronously within the same update cycle before React\n        // passes the updated value back through props member.field.value, so we want to check if it's become empty, we can't do that by looking at the stale `props.member.field.value`\n        // Instead we keep updating the local ref/value as we receive the patches\n        pendingValue.current = applyAll(pendingValue.current || {}, patches)\n\n        // if the result after applying the patches is empty, then we should unset the field\n        if (pendingValue.current && isShallowEmptyObject(pendingValue.current)) {\n          onChange(PatchEvent.from(unset([member.name])))\n          return\n        }\n      }\n      // otherwise apply the patch\n      onChange(\n        PatchEvent.from(event)\n          .prepend(setIfMissing(createProtoValue(member.field.schemaType)))\n          .prefixAll(member.name),\n      )\n    },\n    [onChange, member, pendingValue],\n  )\n\n  const handleCollapse = useCallback(() => {\n    onSetPathCollapsed(member.field.path, true)\n  }, [onSetPathCollapsed, member.field.path])\n\n  const handleExpand = useCallback(() => {\n    onSetPathCollapsed(member.field.path, false)\n  }, [onSetPathCollapsed, member.field.path])\n\n  const handleCollapseField = useCallback(\n    (fieldName: string) => {\n      onSetPathCollapsed(member.field.path.concat(fieldName), true)\n    },\n    [onSetPathCollapsed, member.field.path],\n  )\n  const handleExpandField = useCallback(\n    (fieldName: string) => {\n      onSetPathCollapsed(member.field.path.concat(fieldName), false)\n    },\n    [onSetPathCollapsed, member.field.path],\n  )\n  const handleOpenField = useCallback(\n    (fieldName: string) => {\n      onPathOpen(member.field.path.concat(fieldName))\n    },\n    [onPathOpen, member.field.path],\n  )\n  const handleCloseField = useCallback(() => {\n    onPathOpen(member.field.path)\n  }, [onPathOpen, member.field.path])\n  const handleExpandFieldSet = useCallback(\n    (fieldsetName: string) => {\n      onSetFieldSetCollapsed(member.field.path.concat(fieldsetName), false)\n    },\n    [onSetFieldSetCollapsed, member.field.path],\n  )\n  const handleCollapseFieldSet = useCallback(\n    (fieldsetName: string) => {\n      onSetFieldSetCollapsed(member.field.path.concat(fieldsetName), true)\n    },\n    [onSetFieldSetCollapsed, member.field.path],\n  )\n\n  const handleOpen = useCallback(() => {\n    onPathOpen(member.field.path)\n  }, [onPathOpen, member.field.path])\n\n  const handleClose = useCallback(() => {\n    onPathOpen(member.field.path.slice(0, -1))\n  }, [onPathOpen, member.field.path])\n\n  const handleSelectFieldGroup = useCallback(\n    (groupName: string) => {\n      onFieldGroupSelect(member.field.path, groupName)\n    },\n    [onFieldGroupSelect, member.field.path],\n  )\n\n  const elementProps = useMemo(\n    (): ArrayOfObjectsInputProps['elementProps'] => ({\n      'onBlur': handleBlur,\n      'onFocus': handleFocus,\n      'id': member.field.id,\n      'ref': focusRef,\n      'aria-describedby': createDescriptionId(member.field.id, member.field.schemaType.description),\n    }),\n    [handleBlur, handleFocus, member.field.id, member.field.schemaType.description],\n  )\n\n  const inputProps = useMemo((): Omit<ObjectInputProps, 'renderDefault'> => {\n    return {\n      elementProps,\n      level: member.field.level,\n      members: member.field.members,\n      value: member.field.value,\n      readOnly: member.field.readOnly,\n      validation: member.field.validation,\n      presence: member.field.presence,\n      schemaType: member.field.schemaType,\n      changed: member.field.changed,\n      id: member.field.id,\n      onFieldGroupSelect: handleSelectFieldGroup,\n      onFieldOpen: handleOpenField,\n      onFieldClose: handleCloseField,\n      onFieldCollapse: handleCollapseField,\n      onFieldExpand: handleExpandField,\n      onFieldSetExpand: handleExpandFieldSet,\n      onFieldSetCollapse: handleCollapseFieldSet,\n      onPathFocus: handleFocusChildPath,\n      path: member.field.path,\n      focusPath: member.field.focusPath,\n      focused: member.field.focused,\n      groups: member.field.groups,\n      onChange: handleChange,\n      renderAnnotation,\n      renderBlock,\n      renderField,\n      renderInlineBlock,\n      renderInput,\n      renderItem,\n      renderPreview,\n    }\n  }, [\n    elementProps,\n    member.field.level,\n    member.field.members,\n    member.field.value,\n    member.field.readOnly,\n    member.field.validation,\n    member.field.presence,\n    member.field.schemaType,\n    member.field.changed,\n    member.field.id,\n    member.field.path,\n    member.field.focusPath,\n    member.field.focused,\n    member.field.groups,\n    handleSelectFieldGroup,\n    handleOpenField,\n    handleCloseField,\n    handleCollapseField,\n    handleExpandField,\n    handleExpandFieldSet,\n    handleCollapseFieldSet,\n    handleFocusChildPath,\n    handleChange,\n    renderAnnotation,\n    renderBlock,\n    renderField,\n    renderInlineBlock,\n    renderInput,\n    renderItem,\n    renderPreview,\n  ])\n\n  const renderedInput = useMemo(() => renderInput(inputProps), [inputProps, renderInput])\n\n  const fieldProps = useMemo((): Omit<ObjectFieldProps, 'renderDefault'> => {\n    return {\n      actions: fieldActions,\n      name: member.name,\n      index: member.index,\n      level: member.field.level,\n      value: member.field.value,\n      validation: member.field.validation,\n      presence: member.field.presence,\n      title: member.field.schemaType.title,\n      description: member.field.schemaType.description,\n\n      collapsible: member.collapsible,\n      collapsed: member.collapsed,\n      onCollapse: handleCollapse,\n      onExpand: handleExpand,\n\n      open: member.open,\n      changed: member.field.changed,\n\n      onOpen: handleOpen,\n      onClose: handleClose,\n\n      schemaType: member.field.schemaType,\n      inputId: member.field.id,\n      path: member.field.path,\n      children: renderedInput,\n      inputProps: inputProps as ObjectInputProps,\n    }\n  }, [\n    fieldActions,\n    member.name,\n    member.index,\n    member.field.level,\n    member.field.value,\n    member.field.validation,\n    member.field.presence,\n    member.field.schemaType,\n    member.field.changed,\n    member.field.id,\n    member.field.path,\n    member.collapsible,\n    member.collapsed,\n    member.open,\n    handleCollapse,\n    handleExpand,\n    handleOpen,\n    handleClose,\n    renderedInput,\n    inputProps,\n  ])\n\n  return (\n    <FormCallbacksProvider\n      onFieldGroupSelect={onFieldGroupSelect}\n      onChange={handleChange}\n      onSetFieldSetCollapsed={onSetFieldSetCollapsed}\n      onPathOpen={onPathOpen}\n      onSetPathCollapsed={onSetPathCollapsed}\n      onPathBlur={onPathBlur}\n      onPathFocus={onPathFocus}\n    >\n      {useMemo(() => renderField(fieldProps), [fieldProps, renderField])}\n    </FormCallbacksProvider>\n  )\n}\n","import {isBooleanSchemaType, isNumberSchemaType} from '@sanity/types'\nimport {type ChangeEvent, useCallback, useEffect, useMemo, useRef, useState} from 'react'\n\nimport {type FormPatch, PatchEvent, set, unset} from '../../../patch'\nimport {type FieldMember} from '../../../store'\nimport {useDocumentFieldActions} from '../../../studio/contexts/DocumentFieldActions'\nimport {useFormCallbacks} from '../../../studio/contexts/FormCallbacks'\nimport {\n  type PrimitiveFieldProps,\n  type PrimitiveInputProps,\n  type RenderFieldCallback,\n  type RenderInputCallback,\n} from '../../../types'\nimport {createDescriptionId} from '../../common/createDescriptionId'\nimport {resolveNativeNumberInputValue} from '../../common/resolveNativeNumberInputValue'\n\n/**\n * Responsible for creating inputProps and fieldProps to pass to ´renderInput´ and ´renderField´ for a primitive field/input\n * @param props - Component props\n *\n * @internal\n */\nexport function PrimitiveField(props: {\n  member: FieldMember\n  renderInput: RenderInputCallback<PrimitiveInputProps>\n  renderField: RenderFieldCallback<PrimitiveFieldProps>\n}) {\n  const {member, renderInput, renderField} = props\n\n  const fieldActions = useDocumentFieldActions()\n\n  const focusRef = useRef<{focus: () => void}>(undefined)\n\n  const [localValue, setLocalValue] = useState<string | undefined>()\n\n  const {onPathBlur, onPathFocus, onChange} = useFormCallbacks()\n\n  useEffect(() => {\n    if (member.field.focused) {\n      focusRef.current?.focus()\n    }\n  }, [member.field.focused])\n\n  const handleBlur = useCallback(() => {\n    onPathBlur(member.field.path)\n  }, [member.field.path, onPathBlur])\n\n  const handleFocus = useCallback(() => {\n    onPathFocus(member.field.path)\n  }, [member.field.path, onPathFocus])\n\n  const handleChange = useCallback(\n    (event: FormPatch | FormPatch[] | PatchEvent) => {\n      onChange(PatchEvent.from(event).prefixAll(member.name))\n    },\n    [onChange, member.name],\n  )\n\n  const handleNativeChange = useCallback(\n    (event: ChangeEvent<HTMLInputElement>) => {\n      let inputValue: number | string | boolean = event.currentTarget.value\n      if (isNumberSchemaType(member.field.schemaType)) {\n        inputValue = event.currentTarget.valueAsNumber\n        if (inputValue > Number.MAX_SAFE_INTEGER || inputValue < Number.MIN_SAFE_INTEGER) {\n          return\n        }\n      } else if (isBooleanSchemaType(member.field.schemaType)) {\n        inputValue = event.currentTarget.checked\n      }\n\n      // `valueAsNumber` returns `NaN` on empty input\n      const hasEmptyValue =\n        inputValue === '' || (typeof inputValue === 'number' && isNaN(inputValue))\n\n      if (isNumberSchemaType(member.field.schemaType)) {\n        // Store the local value for number inputs in order to support intermediate values\n        // that includes more information than the numeric value\n        // E.g. if typing `0.0` the numeric value will be 0, but we still want to show `0.0` in the input to allow typing\n        // more digits\n        setLocalValue(hasEmptyValue ? undefined : event.currentTarget.value)\n      }\n\n      onChange(PatchEvent.from(hasEmptyValue ? unset() : set(inputValue)).prefixAll(member.name))\n    },\n    [member.name, member.field.schemaType, onChange],\n  )\n\n  const validationError =\n    useMemo(\n      () =>\n        member.field.validation\n          .filter((item) => item.level === 'error')\n          .map((item) => item.message)\n          .join('\\n'),\n      [member.field.validation],\n    ) || undefined\n\n  const elementProps = useMemo(\n    (): PrimitiveInputProps['elementProps'] => ({\n      'onBlur': handleBlur,\n      'onFocus': handleFocus,\n      'id': member.field.id,\n      'ref': focusRef,\n      'onChange': handleNativeChange,\n      'value': resolveNativeNumberInputValue(\n        member.field.schemaType,\n        member.field.value,\n        localValue,\n      ),\n      'readOnly': Boolean(member.field.readOnly),\n      'placeholder': member.field.schemaType.placeholder,\n      'aria-describedby': createDescriptionId(member.field.id, member.field.schemaType.description),\n    }),\n    [\n      handleBlur,\n      handleFocus,\n      handleNativeChange,\n      member.field.id,\n      member.field.readOnly,\n      member.field.schemaType,\n      member.field.value,\n      localValue,\n    ],\n  )\n\n  const inputProps = useMemo((): Omit<PrimitiveInputProps, 'renderDefault'> => {\n    return {\n      value: member.field.value as any,\n      readOnly: member.field.readOnly,\n      schemaType: member.field.schemaType as any,\n      changed: member.field.changed,\n      id: member.field.id,\n      path: member.field.path,\n      focused: member.field.focused,\n      level: member.field.level,\n      onChange: handleChange,\n      validation: member.field.validation,\n      presence: member.field.presence,\n      validationError,\n      elementProps,\n    }\n  }, [\n    member.field.value,\n    member.field.readOnly,\n    member.field.schemaType,\n    member.field.changed,\n    member.field.id,\n    member.field.path,\n    member.field.focused,\n    member.field.level,\n    member.field.validation,\n    member.field.presence,\n    handleChange,\n    validationError,\n    elementProps,\n  ])\n\n  const renderedInput = useMemo(() => renderInput(inputProps), [inputProps, renderInput])\n\n  const fieldProps = useMemo((): Omit<PrimitiveFieldProps, 'renderDefault'> => {\n    return {\n      actions: fieldActions,\n      changed: member.field.changed,\n      children: renderedInput,\n      description: member.field.schemaType.description,\n      index: member.index,\n      inputId: member.field.id,\n      inputProps: inputProps as any,\n      level: member.field.level,\n      name: member.name,\n      path: member.field.path,\n      presence: member.field.presence,\n      schemaType: member.field.schemaType as any,\n      title: member.field.schemaType.title,\n      validation: member.field.validation,\n      value: member.field.value as any,\n    }\n  }, [\n    fieldActions,\n    member.field.level,\n    member.field.value,\n    member.field.schemaType,\n    member.field.id,\n    member.field.path,\n    member.field.validation,\n    member.field.presence,\n    member.field.changed,\n    member.name,\n    member.index,\n    renderedInput,\n    inputProps,\n  ])\n\n  return <>{renderField(fieldProps)}</>\n}\n","import {memo} from 'react'\n\nimport {type FIXME} from '../../../FIXME'\nimport {type FieldMember} from '../../store'\nimport {\n  type RenderAnnotationCallback,\n  type RenderArrayOfObjectsItemCallback,\n  type RenderBlockCallback,\n  type RenderFieldCallback,\n  type RenderInputCallback,\n  type RenderPreviewCallback,\n} from '../../types'\nimport {ArrayOfObjectsField} from './fields/ArrayOfObjectsField'\nimport {ArrayOfPrimitivesField} from './fields/ArrayOfPrimitivesField'\nimport {isMemberArrayOfObjects, isMemberArrayOfPrimitives, isMemberObject} from './fields/asserters'\nimport {ObjectField} from './fields/ObjectField'\nimport {PrimitiveField} from './fields/PrimitiveField'\n\n/** @internal */\nexport interface MemberFieldProps {\n  member: FieldMember\n  renderAnnotation?: RenderAnnotationCallback\n  renderBlock?: RenderBlockCallback\n  renderField: RenderFieldCallback\n  renderInlineBlock?: RenderBlockCallback\n  renderInput: RenderInputCallback\n  renderItem: RenderArrayOfObjectsItemCallback\n  renderPreview: RenderPreviewCallback\n}\n\n/** @internal */\nexport const MemberField = memo(function MemberField(props: MemberFieldProps) {\n  const {\n    member,\n    renderAnnotation,\n    renderBlock,\n    renderField,\n    renderInlineBlock,\n    renderInput,\n    renderItem,\n    renderPreview,\n  } = props\n\n  if (isMemberObject(member)) {\n    // this field is of an object type\n    return (\n      <ObjectField\n        member={member}\n        renderAnnotation={renderAnnotation}\n        renderBlock={renderBlock}\n        renderField={renderField}\n        renderInlineBlock={renderInlineBlock}\n        renderInput={renderInput}\n        renderItem={renderItem}\n        renderPreview={renderPreview}\n      />\n    )\n  }\n\n  if (isMemberArrayOfPrimitives(member)) {\n    return (\n      <ArrayOfPrimitivesField\n        member={member}\n        renderAnnotation={renderAnnotation}\n        renderBlock={renderBlock}\n        renderField={renderField}\n        renderInput={renderInput}\n        renderInlineBlock={renderInlineBlock}\n        // todo: these have different signatures, so renderItem for a primitive input should not be the same as renderItem in array of object inputs\n        renderItem={renderItem as FIXME}\n        renderPreview={renderPreview}\n      />\n    )\n  }\n\n  if (isMemberArrayOfObjects(member)) {\n    return (\n      <ArrayOfObjectsField\n        member={member}\n        renderAnnotation={renderAnnotation}\n        renderBlock={renderBlock}\n        renderField={renderField}\n        renderInlineBlock={renderInlineBlock}\n        renderInput={renderInput}\n        renderItem={renderItem}\n        renderPreview={renderPreview}\n      />\n    )\n  }\n\n  return <PrimitiveField member={member} renderField={renderField} renderInput={renderInput} />\n})\n","import {ErrorOutlineIcon, WarningOutlineIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Text} from '@sanity/ui'\nimport {type ComponentProps, type ReactNode} from 'react'\nimport {styled} from 'styled-components'\n\ninterface AlertProps extends Omit<ComponentProps<typeof Card>, 'title'> {\n  title: ReactNode\n  status?: 'warning' | 'error'\n  suffix?: ReactNode\n}\n\nconst STATUS_TONES = {\n  warning: 'caution',\n  error: 'critical',\n} as const\n\nconst SuffixBox = styled(Box)`\n  border-top: 1px solid var(--card-border-color);\n`\n\nexport function Alert(props: AlertProps) {\n  const {children, status = 'warning', suffix, title, ...rest} = props\n\n  return (\n    <Card radius={2} tone={STATUS_TONES[status]} {...rest} data-ui=\"Alert\">\n      <Flex padding={4}>\n        <Box>\n          <Text size={1}>\n            {status === 'warning' && <WarningOutlineIcon />}\n            {status === 'error' && <ErrorOutlineIcon />}\n          </Text>\n        </Box>\n\n        <Box flex={1} marginLeft={3}>\n          <Text size={1} weight=\"medium\">\n            {title}\n          </Text>\n\n          {children && <Box marginTop={3}>{children}</Box>}\n        </Box>\n      </Flex>\n\n      {suffix && <SuffixBox>{suffix}</SuffixBox>}\n    </Card>\n  )\n}\n","import {ToggleArrowRightIcon} from '@sanity/icons'\nimport {Box, Flex, Text} from '@sanity/ui'\nimport {type ReactNode, useCallback, useEffect, useState} from 'react'\nimport {styled} from 'styled-components'\n\ninterface DetailsProps {\n  children?: ReactNode\n  margin?: number | number[]\n  marginX?: number | number[]\n  marginY?: number | number[]\n  marginTop?: number | number[]\n  marginRight?: number | number[]\n  marginBottom?: number | number[]\n  marginLeft?: number | number[]\n  open?: boolean\n  icon?: ReactNode\n  title?: ReactNode\n}\n\nconst HeaderButton = styled.button`\n  display: block;\n  -webkit-font-smoothing: inherit;\n  appearance: none;\n  font: inherit;\n  background: none;\n  width: 100%;\n  text-align: left;\n  border: 0;\n  margin: 0;\n  padding: 0;\n  outline: none;\n`\n\nconst ToggleArrow = styled(ToggleArrowRightIcon)<{open: boolean}>`\n  transform: ${(props) => (props.open ? 'rotate(90deg)' : '')};\n`\n\nconst Header = styled(Flex)`\n  cursor: default;\n  line-height: 0;\n`\n\nconst IconBox = styled(Flex)`\n  & > div > svg {\n    transform: rotate(0);\n    transition: transform 100ms;\n  }\n\n  &[data-open] > div > svg {\n    transform: rotate(90deg);\n  }\n`\n\nexport function Details(props: DetailsProps) {\n  const {children, open: openProp, icon, title = 'Details', ...restProps} = props\n  const [open, setOpen] = useState(openProp || false)\n\n  const handleToggle = useCallback(() => setOpen((v) => !v), [])\n\n  useEffect(() => setOpen(openProp || false), [openProp])\n\n  return (\n    <Box {...restProps}>\n      <HeaderButton type=\"button\" onClick={handleToggle}>\n        <Header>\n          <Flex align=\"center\">\n            <IconBox data-open={open ? '' : undefined}>\n              <Text size={1}>\n                <ToggleArrow open={open} />\n              </Text>\n            </IconBox>\n            {icon && <Box marginLeft={1}>{icon}</Box>}\n            <Box flex={1} marginLeft={1}>\n              <Text textOverflow=\"ellipsis\" size={1} weight=\"medium\">\n                {title}\n              </Text>\n            </Box>\n          </Flex>\n        </Header>\n      </HeaderButton>\n\n      <Box hidden={!open} marginTop={3}>\n        {children}\n      </Box>\n    </Box>\n  )\n}\n","import {isValid as isValidDate} from 'date-fns'\n\nconst TRUTHY_STRINGS = ['yes', 'true', '1']\nconst FALSEY_STRINGS = ['false', 'no', 'false', '0', 'null']\nconst BOOL_STRINGS = TRUTHY_STRINGS.concat(FALSEY_STRINGS)\n\nconst TRUE = (): true => true\n\nconst has = (prop: string) => (val?: Record<string, any>) => val && val[prop]\nconst is = (typeName: string) => (val?: Record<string, any>) => (val && val._type) === typeName\n\nfunction toLocalDate(input: Date) {\n  const newDate = new Date(input.getTime() + input.getTimezoneOffset() * 60 * 1000)\n  const offset = input.getTimezoneOffset() / 60\n  const hours = input.getHours()\n  newDate.setHours(hours - offset)\n  return newDate\n}\n\nfunction getTZName() {\n  try {\n    return Intl.DateTimeFormat().resolvedOptions().timeZone\n  } catch (e) {} // eslint-disable-line no-empty\n  return null\n}\n\nexport interface ValueConverter {\n  test: NumberConstructor | ((value: any) => boolean)\n  convert:\n    | NumberConstructor\n    | StringConstructor\n    | ((value: any) => boolean | Record<string, any> | string)\n}\n\nexport const converters: {[fromType: string]: {[toType: string]: ValueConverter}} = {\n  string: {\n    number: {\n      test: Number,\n      convert: Number,\n    },\n    boolean: {\n      test: (value: any) => BOOL_STRINGS.includes(value.toLowerCase()),\n      convert: (value: any) =>\n        TRUTHY_STRINGS.includes(value.toLowerCase()) ||\n        !FALSEY_STRINGS.includes(value.toLowerCase()),\n    },\n    richDate: {\n      test: (value: any) => isValidDate(value),\n      convert: (value: any): Record<string, any> => {\n        return {\n          _type: 'richDate',\n          local: toLocalDate(new Date(value)).toJSON(),\n          utc: new Date(value).toJSON(),\n          timezone: getTZName(),\n          offset: new Date().getTimezoneOffset(),\n        }\n      },\n    },\n  },\n  date: {\n    richDate: {\n      test: is('date'),\n      convert: (value: any) => Object.assign({}, value, {_type: 'richDate'}),\n    },\n  },\n  richDate: {\n    datetime: {\n      test: has('utc'),\n      convert: (value: any) => value.utc,\n    },\n  },\n  number: {\n    string: {\n      test: TRUE,\n      convert: String,\n    },\n    boolean: {\n      test: TRUE,\n      convert: Number,\n    },\n  },\n  boolean: {\n    string: {\n      test: TRUE,\n      convert: (value: any) => (value ? 'Yes' : 'No'),\n    },\n    number: {\n      test: TRUE,\n      convert: Number,\n    },\n  },\n}\n","import {Card, Code, Grid, Stack, Text} from '@sanity/ui'\nimport {useCallback, useMemo} from 'react'\n\nimport {Button} from '../../../../ui-components'\nimport {isDev} from '../../../environment'\nimport {useSchema} from '../../../hooks'\nimport {Translate, useTranslation} from '../../../i18n'\nimport {Alert} from '../../components/Alert'\nimport {Details} from '../../components/Details'\nimport {PatchEvent, setIfMissing, unset} from '../../patch'\n\ninterface UntypedValueInputProps {\n  validTypes: string[]\n  value: Record<string, unknown>\n  onChange: (event: PatchEvent, value?: Record<string, unknown>) => void\n}\n\nfunction SetMissingTypeButton({\n  value,\n  targetType,\n  onChange,\n}: {\n  value: Record<string, unknown>\n  targetType: string\n  onChange: UntypedValueInputProps['onChange']\n}) {\n  const itemValue = useMemo(() => ({...value, _type: targetType}), [targetType, value])\n\n  const handleClick = useCallback(\n    () => onChange(PatchEvent.from(setIfMissing(targetType, ['_type'])), itemValue),\n    [itemValue, onChange, targetType],\n  )\n\n  const {t} = useTranslation()\n\n  return (\n    <Button\n      onClick={handleClick}\n      text={t('inputs.untyped-value.convert-button.text', {\n        targetType: targetType,\n      })}\n    />\n  )\n}\n\nfunction UnsetItemButton({\n  value,\n  onChange,\n  validTypes,\n}: {\n  value: Record<string, unknown>\n  validTypes: string[]\n  onChange: UntypedValueInputProps['onChange']\n}) {\n  // Doesn't matter which `_type` we use as long as it's allowed by the array\n  const itemValue = useMemo(() => ({...value, _type: validTypes[0]}), [validTypes, value])\n\n  const handleClick = useCallback(\n    () => onChange(PatchEvent.from(unset()), itemValue),\n    [itemValue, onChange],\n  )\n\n  const {t} = useTranslation()\n\n  return (\n    <Button\n      onClick={handleClick}\n      tone=\"critical\"\n      text={t('inputs.untyped-value.unset-item-button.text')}\n    />\n  )\n}\n\n/**\n * When the value does not have an `_type` property,\n * but the schema has a named type\n */\nexport function UntypedValueInput({validTypes, value, onChange}: UntypedValueInputProps) {\n  const schema = useSchema()\n  const isSingleValidType = validTypes.length === 1\n  const isHoistedType = schema.has(validTypes[0])\n\n  const {t} = useTranslation()\n\n  return (\n    <Alert\n      status=\"warning\"\n      title={\n        <>\n          <Translate t={t} i18nKey=\"inputs.untyped-value.title\" />\n        </>\n      }\n    >\n      <Details open={isDev} title={t('inputs.untyped-value.details.title')}>\n        <Stack space={3}>\n          <Text as=\"p\" muted size={1}>\n            <Translate t={t} i18nKey=\"inputs.untyped-value.description\" />\n          </Text>\n\n          {isSingleValidType && !isHoistedType && (\n            <Text as=\"p\" muted size={1}>\n              <Translate t={t} i18nKey=\"inputs.untyped-value.details.description\" />\n            </Text>\n          )}\n\n          {!isSingleValidType && (\n            <Text as=\"p\" muted size={1}>\n              {t('inputs.untyped-value.details.multi-type-description')}\n            </Text>\n          )}\n\n          {!isSingleValidType && (\n            <Stack as=\"ul\" space={2}>\n              {validTypes.map((validType) => (\n                <Text as=\"li\" key={validType} muted size={1}>\n                  <code>{validType}</code>\n                </Text>\n              ))}\n            </Stack>\n          )}\n\n          <Stack space={2}>\n            <Text as=\"h4\" weight=\"medium\" size={1}>\n              {t('inputs.untyped-value.details.json-dump-prefix')}\n            </Text>\n\n            <Card border overflow=\"auto\" padding={2} radius={2} tone=\"inherit\">\n              <Code language=\"json\">{JSON.stringify(value, null, 2)}</Code>\n            </Card>\n          </Stack>\n\n          <Grid columns={[1, 2, 2]} gap={1}>\n            {isSingleValidType && (\n              <SetMissingTypeButton onChange={onChange} targetType={validTypes[0]} value={value} />\n            )}\n\n            <UnsetItemButton onChange={onChange} validTypes={validTypes} value={value} />\n          </Grid>\n        </Stack>\n      </Details>\n    </Alert>\n  )\n}\n","import {Card, Code, Stack, Text} from '@sanity/ui'\nimport {isPlainObject} from 'lodash'\nimport {forwardRef, type Ref, useCallback, useImperativeHandle, useMemo} from 'react'\n\nimport {Button} from '../../../../ui-components'\nimport {isDev} from '../../../environment'\nimport {Translate, useTranslation} from '../../../i18n'\nimport {Alert} from '../../components/Alert'\nimport {Details} from '../../components/Details'\nimport {PatchEvent, set, unset} from '../../patch'\nimport {converters as CONVERTERS, type ValueConverter} from './converters'\nimport {UntypedValueInput} from './UntypedValueInput'\n\ninterface Converter extends ValueConverter {\n  from: string\n  to: string\n}\n\nfunction getConverters(value: unknown, actualType: string, validTypes: string[]): Converter[] {\n  if (!(actualType in CONVERTERS)) {\n    return []\n  }\n\n  return Object.keys(CONVERTERS[actualType])\n    .filter((targetType) => validTypes.includes(targetType))\n    .map((targetType) => ({\n      from: actualType,\n      to: targetType,\n      ...CONVERTERS[actualType][targetType],\n    }))\n    .filter((converter) => converter.test(value))\n}\n\ninterface InvalidValueProps {\n  actualType: string\n  validTypes: string[]\n  value?: unknown\n  onChange: (event: PatchEvent) => void\n}\n\nexport const InvalidValueInput = forwardRef(\n  (props: InvalidValueProps, ref: Ref<{focus: () => void}>) => {\n    const {value, actualType, validTypes, onChange} = props\n\n    useImperativeHandle(ref, () => ({\n      // @todo\n      focus: () => undefined,\n    }))\n\n    const handleClearClick = useCallback(() => {\n      onChange(PatchEvent.from(unset()))\n    }, [onChange])\n\n    const handleConvertTo = useCallback(\n      (converted: any) => {\n        onChange(PatchEvent.from(set(converted)))\n      },\n      [onChange],\n    )\n\n    const converters = useMemo(\n      () => getConverters(value, actualType, validTypes),\n      [value, actualType, validTypes],\n    )\n\n    const {t} = useTranslation()\n\n    if (isPlainObject(value) && !('_type' in (value as object))) {\n      return (\n        <UntypedValueInput\n          value={value as Record<string, unknown>}\n          validTypes={validTypes}\n          onChange={onChange}\n        />\n      )\n    }\n\n    const suffix = (\n      <Stack padding={2}>\n        <Button\n          onClick={handleClearClick}\n          tone=\"critical\"\n          text={t('inputs.invalid-value.reset-button.text')}\n        />\n      </Stack>\n    )\n\n    return (\n      <Alert status=\"error\" suffix={suffix} title={t('inputs.invalid-value.title')}>\n        <Text as=\"p\" muted size={1}>\n          {t('inputs.invalid-value.description')}\n        </Text>\n\n        <Details marginTop={4} open={isDev} title={t('inputs.invalid-value.details.title')}>\n          <Stack space={3}>\n            {validTypes.length === 1 && (\n              <Text as=\"p\" muted size={1}>\n                <Translate\n                  t={t}\n                  i18nKey=\"inputs.invalid-value.details.description\"\n                  values={{\n                    validType: validTypes[0],\n                  }}\n                />\n              </Text>\n            )}\n\n            {validTypes.length === 1 && (\n              <Text as=\"p\" muted size={1}>\n                {t('inputs.invalid-value.details.possible-reason')}\n              </Text>\n            )}\n\n            {validTypes.length !== 1 && (\n              <Text as=\"p\" muted size={1}>\n                {t('inputs.invalid-value.details.multi-type-description')}\n              </Text>\n            )}\n\n            {validTypes.length !== 1 && (\n              <Stack as=\"ul\" space={2}>\n                {validTypes.map((validType) => (\n                  <Text as=\"li\" key={validType}>\n                    <code>{validType}</code>\n                  </Text>\n                ))}\n              </Stack>\n            )}\n\n            <Stack marginTop={2} space={2}>\n              <Text size={1} weight=\"medium\">\n                <Translate\n                  t={t}\n                  i18nKey=\"inputs.invalid-value.current-type\"\n                  values={{\n                    actualType: actualType,\n                  }}\n                />\n              </Text>\n\n              <Card border padding={2} radius={2} tone=\"inherit\">\n                <Code language=\"json\" size={1}>\n                  {JSON.stringify(value, null, 2)}\n                </Code>\n              </Card>\n            </Stack>\n\n            {converters.length > 0 && (\n              <Stack space={1}>\n                {converters.map((converter) => (\n                  <ConvertButton\n                    converter={converter}\n                    key={`${converter.from}-${converter.to}`}\n                    onConvert={handleConvertTo}\n                    value={value}\n                  />\n                ))}\n              </Stack>\n            )}\n          </Stack>\n        </Details>\n      </Alert>\n    )\n  },\n)\n\nInvalidValueInput.displayName = 'ForwardRef(InvalidValueInput)'\n\nfunction ConvertButton({\n  converter,\n  onConvert,\n  value,\n}: {\n  converter: Converter\n  onConvert: (v: string | number | boolean | Record<string, unknown>) => void\n  value: unknown\n}) {\n  const handleClick = useCallback(\n    () => onConvert(converter.convert(value)),\n    [converter, onConvert, value],\n  )\n\n  const {t} = useTranslation()\n\n  return (\n    <Button\n      onClick={handleClick}\n      text={t('inputs.invalid-value.convert-button.text', {targetType: converter.to})}\n    />\n  )\n}\n","import {Stack, Text} from '@sanity/ui'\nimport {useCallback} from 'react'\n\nimport {Button} from '../../../../../ui-components'\nimport {isDev} from '../../../../environment'\nimport {Translate, useTranslation} from '../../../../i18n'\nimport {Alert} from '../../../components/Alert'\nimport {Details} from '../../../components/Details'\nimport {FormField} from '../../../components/formField'\nimport {PatchEvent, set} from '../../../patch'\nimport {type DuplicateKeysError} from '../../../store/types/memberErrors'\n\ninterface Props {\n  error: DuplicateKeysError\n  onChange: (patchEvent: PatchEvent) => void\n}\n\nexport function DuplicateKeysAlert(props: Props) {\n  const {error, onChange} = props\n\n  const handleFixDuplicateKeys = useCallback(() => {\n    onChange(\n      PatchEvent.from(\n        (error.duplicates || []).map(([index, key]) =>\n          set(`${key}_deduped_${index}`, [index, '_key']),\n        ),\n      ),\n    )\n  }, [error.duplicates, onChange])\n\n  const {t} = useTranslation()\n\n  return (\n    <FormField title={error.schemaType.title} description={error.schemaType.description}>\n      <Alert\n        status=\"warning\"\n        suffix={\n          <Stack padding={2}>\n            <Button\n              onClick={handleFixDuplicateKeys}\n              text={t('form.error.duplicate-keys-alert.generate-button.text')}\n              tone=\"caution\"\n            />\n          </Stack>\n        }\n        title={t('form.error.duplicate-keys-alert.title')}\n      >\n        <Text as=\"p\" muted size={1}>\n          {t('form.error.duplicate-keys-alert.summary')}\n        </Text>\n\n        <Details\n          marginTop={4}\n          open={isDev}\n          title={t('form.error.duplicate-keys-alert.details.title')}\n        >\n          <Stack space={3}>\n            <Text as=\"p\" muted size={1}>\n              <Translate t={t} i18nKey=\"form.error.duplicate-keys-alert.details.description\" />\n            </Text>\n\n            <Text as=\"p\" muted size={1}>\n              <Translate\n                t={t}\n                i18nKey=\"form.error.duplicate-keys-alert.details.additional-description\"\n              />\n            </Text>\n          </Stack>\n          {/* TODO: render array items and highlight the items with duplicate keys (sc-26255) */}\n        </Details>\n      </Alert>\n    </FormField>\n  )\n}\n","import {Stack, Text} from '@sanity/ui'\nimport {randomKey} from '@sanity/util/content'\nimport {useCallback} from 'react'\n\nimport {Button} from '../../../../../ui-components'\nimport {isDev} from '../../../../environment'\nimport {Translate, useTranslation} from '../../../../i18n'\nimport {Alert} from '../../../components/Alert'\nimport {Details} from '../../../components/Details'\nimport {FormField} from '../../../components/formField'\nimport {PatchEvent, setIfMissing} from '../../../patch'\nimport {type MissingKeysError} from '../../../store/types/memberErrors'\n\ninterface Props {\n  error: MissingKeysError\n  onChange: (patchEvent: PatchEvent) => void\n}\n\nexport function MissingKeysAlert(props: Props) {\n  const {error, onChange} = props\n  const handleFixMissingKeys = useCallback(() => {\n    onChange(\n      PatchEvent.from((error.value || []).map((val, i) => setIfMissing(randomKey(), [i, '_key']))),\n    )\n  }, [error.value, onChange])\n\n  const {t} = useTranslation()\n\n  return (\n    <FormField title={error.schemaType.title} description={error.schemaType.description}>\n      <Alert\n        status=\"warning\"\n        suffix={\n          <Stack padding={2}>\n            <Button\n              onClick={handleFixMissingKeys}\n              text={t('form.error.missing-keys-alert.add-button.text')}\n              tone=\"caution\"\n            />\n          </Stack>\n        }\n        title={t('form.error.missing-keys-alert.title')}\n      >\n        <Text as=\"p\" muted size={1}>\n          {t('form.error.missing-keys-alert.summary')}\n        </Text>\n\n        <Details\n          marginTop={4}\n          open={isDev}\n          title={t('form.error.missing-keys-alert.details.title')}\n        >\n          <Stack space={3}>\n            <Text as=\"p\" muted size={1}>\n              <Translate t={t} i18nKey=\"form.error.missing-keys-alert.details.description\" />\n            </Text>\n\n            <Text as=\"p\" muted size={1}>\n              <Translate\n                t={t}\n                i18nKey=\"form.error.missing-keys-alert.details.additional-description\"\n              />\n            </Text>\n          </Stack>\n        </Details>\n        {/* TODO: render array items and highlight the items with missing key */}\n      </Alert>\n    </FormField>\n  )\n}\n","import {Stack, Text} from '@sanity/ui'\nimport {isPlainObject} from 'lodash'\n\nimport {Button} from '../../../../../ui-components'\nimport {isDev} from '../../../../environment'\nimport {useTranslation} from '../../../../i18n'\nimport {Alert} from '../../../components/Alert'\nimport {Details} from '../../../components/Details'\nimport {FormField} from '../../../components/formField'\nimport {PatchEvent, unset} from '../../../patch'\nimport {type MixedArrayError} from '../../../store'\n\ninterface Props {\n  error: MixedArrayError\n  onChange: (patchEvent: PatchEvent) => void\n}\nexport function MixedArrayAlert(props: Props) {\n  const {error, onChange} = props\n\n  const handleRemoveNonObjectValues = () => {\n    const nonObjectIndices = (error.value || [])\n      .flatMap((item, index) => (isPlainObject(item) ? [] : [index]))\n      .reverse()\n\n    const patches = nonObjectIndices.map((index) => unset([index]))\n\n    onChange(PatchEvent.from(patches))\n  }\n\n  const {t} = useTranslation()\n\n  return (\n    <FormField title={error.schemaType.title} description={error.schemaType.description}>\n      <Alert\n        status=\"error\"\n        suffix={\n          <Stack padding={2}>\n            <Button\n              onClick={handleRemoveNonObjectValues}\n              text={t('form.error.mixed-array-alert.remove-button.text')}\n              tone=\"critical\"\n            />\n          </Stack>\n        }\n        title={t('form.error.mixed-array-alert.title')}\n      >\n        <Text as=\"p\" muted size={1}>\n          {t('form.error.mixed-array-alert.summary')}\n        </Text>\n\n        <Details marginTop={4} open={isDev} title={t('form.error.mixed-array-alert.details.title')}>\n          <Stack space={3}>\n            <Text as=\"p\" muted size={1}>\n              {t('form.error.mixed-array-alert.details.description')}\n            </Text>\n          </Stack>\n          {/* TODO: render array items and highlight the wrong items (sc-26255) */}\n        </Details>\n      </Alert>\n    </FormField>\n  )\n}\n","import {Box} from '@sanity/ui'\nimport {useCallback} from 'react'\n\nimport {useTranslation} from '../../../i18n'\nimport {InvalidValueInput} from '../../inputs/InvalidValueInput'\nimport {PatchEvent} from '../../patch'\nimport {type FieldError} from '../../store/types/memberErrors'\nimport {useFormCallbacks} from '../../studio/contexts/FormCallbacks'\nimport {DuplicateKeysAlert} from './errors/DuplicateKeysAlert'\nimport {MissingKeysAlert} from './errors/MissingKeysAlert'\nimport {MixedArrayAlert} from './errors/MixedArrayAlert'\n\n/** @internal */\nexport function MemberFieldError(props: {member: FieldError}) {\n  const {member} = props\n  const {onChange} = useFormCallbacks()\n\n  const handleChange = useCallback(\n    (event: PatchEvent) => {\n      onChange(PatchEvent.from(event).prefixAll(member.fieldName))\n    },\n    [onChange, member.fieldName],\n  )\n\n  const {t} = useTranslation()\n\n  if (member.error.type === 'INCOMPATIBLE_TYPE') {\n    return (\n      <InvalidValueInput\n        value={member.error.value}\n        onChange={handleChange}\n        actualType={member.error.resolvedValueType}\n        validTypes={[member.error.expectedSchemaType.name]}\n      />\n    )\n  }\n  if (member.error.type === 'MISSING_KEYS') {\n    return <MissingKeysAlert error={member.error} onChange={handleChange} />\n  }\n  if (member.error.type === 'DUPLICATE_KEYS') {\n    return <DuplicateKeysAlert error={member.error} onChange={handleChange} />\n  }\n  if (member.error.type === 'MIXED_ARRAY') {\n    return <MixedArrayAlert onChange={handleChange} error={member.error} />\n  }\n  return <Box>{t('member-field-error.unexpected-error', {error: props.member.error.type})}</Box>\n}\n","import {capitalize} from 'lodash'\nimport {memo, useCallback} from 'react'\n\nimport {FormFieldSet} from '../../components/formField'\nimport {type FieldSetMember} from '../../store'\nimport {useFormCallbacks} from '../../studio/contexts/FormCallbacks'\nimport {\n  type RenderAnnotationCallback,\n  type RenderArrayOfObjectsItemCallback,\n  type RenderBlockCallback,\n  type RenderFieldCallback,\n  type RenderInputCallback,\n  type RenderPreviewCallback,\n} from '../../types'\nimport {MemberField} from './MemberField'\nimport {MemberFieldError} from './MemberFieldError'\n\n/** @internal */\nexport const MemberFieldSet = memo(function MemberFieldSet(props: {\n  member: FieldSetMember\n  renderAnnotation?: RenderAnnotationCallback\n  renderBlock?: RenderBlockCallback\n  renderField: RenderFieldCallback\n  renderInlineBlock?: RenderBlockCallback\n  renderInput: RenderInputCallback\n  renderItem: RenderArrayOfObjectsItemCallback\n  renderPreview: RenderPreviewCallback\n}) {\n  const {\n    member,\n    renderAnnotation,\n    renderBlock,\n    renderField,\n    renderInlineBlock,\n    renderInput,\n    renderItem,\n    renderPreview,\n  } = props\n\n  const {onSetFieldSetCollapsed} = useFormCallbacks()\n\n  const handleCollapse = useCallback(() => {\n    onSetFieldSetCollapsed(member.fieldSet.path, true)\n  }, [member.fieldSet.path, onSetFieldSetCollapsed])\n\n  const handleExpand = useCallback(() => {\n    onSetFieldSetCollapsed(member.fieldSet.path, false)\n  }, [member.fieldSet.path, onSetFieldSetCollapsed])\n\n  return (\n    <FormFieldSet\n      title={member.fieldSet.title || capitalize(member.fieldSet.name)}\n      description={member.fieldSet.description}\n      level={member.fieldSet.level}\n      collapsible={member.fieldSet.collapsible}\n      collapsed={member.fieldSet.collapsed}\n      onCollapse={handleCollapse}\n      onExpand={handleExpand}\n      columns={member?.fieldSet?.columns}\n      data-testid={`fieldset-${member.fieldSet.name}`}\n      inputId={member.fieldSet.name}\n    >\n      {member.fieldSet.members.map((fieldsetMember) => {\n        if (fieldsetMember.kind === 'error') {\n          return <MemberFieldError key={member.key} member={fieldsetMember} />\n        }\n        return (\n          <MemberField\n            member={fieldsetMember}\n            renderAnnotation={renderAnnotation}\n            renderBlock={renderBlock}\n            renderField={renderField}\n            renderInlineBlock={renderInlineBlock}\n            renderInput={renderInput}\n            renderItem={renderItem}\n            renderPreview={renderPreview}\n            key={fieldsetMember.key}\n          />\n        )\n      })}\n    </FormFieldSet>\n  )\n})\n","import {memo} from 'react'\n\nimport {type ObjectMember} from '../../store'\nimport {\n  type RenderAnnotationCallback,\n  type RenderArrayOfObjectsItemCallback,\n  type RenderBlockCallback,\n  type RenderFieldCallback,\n  type RenderInputCallback,\n  type RenderPreviewCallback,\n} from '../../types'\nimport {MemberField} from './MemberField'\nimport {MemberFieldError} from './MemberFieldError'\nimport {MemberFieldSet} from './MemberFieldset'\n\n/** @internal */\nexport interface ObjectInputMemberProps {\n  member: ObjectMember\n  renderAnnotation?: RenderAnnotationCallback\n  renderBlock?: RenderBlockCallback\n  renderField: RenderFieldCallback\n  renderInlineBlock?: RenderBlockCallback\n  renderInput: RenderInputCallback\n  renderItem: RenderArrayOfObjectsItemCallback\n  renderPreview: RenderPreviewCallback\n}\n\n/** @internal */\nexport const ObjectInputMember = memo(function ObjectInputMember(props: ObjectInputMemberProps) {\n  const {\n    member,\n    renderAnnotation,\n    renderBlock,\n    renderInput,\n    renderInlineBlock,\n    renderField,\n    renderItem,\n    renderPreview,\n  } = props\n\n  if (member.kind === 'field') {\n    return (\n      <MemberField\n        key={member.key}\n        member={member}\n        renderAnnotation={renderAnnotation}\n        renderBlock={renderBlock}\n        renderInlineBlock={renderInlineBlock}\n        renderInput={renderInput}\n        renderField={renderField}\n        renderItem={renderItem}\n        renderPreview={renderPreview}\n      />\n    )\n  }\n  if (member.kind === 'error') {\n    return <MemberFieldError key={member.key} member={member} />\n  }\n  if (member.kind === 'fieldSet') {\n    return (\n      <MemberFieldSet\n        key={member.key}\n        member={member}\n        renderAnnotation={renderAnnotation}\n        renderBlock={renderBlock}\n        renderInlineBlock={renderInlineBlock}\n        renderInput={renderInput}\n        renderField={renderField}\n        renderItem={renderItem}\n        renderPreview={renderPreview}\n      />\n    )\n  }\n  //@ts-expect-error The branching above should cover all possible cases\n  console.warn(new Error(`Unhandled member kind ${member.kind}`))\n  return null\n})\n","import {useMemo} from 'react'\n\nimport {type ObjectMember} from '../../store'\nimport {\n  type RenderAnnotationCallback,\n  type RenderArrayOfObjectsItemCallback,\n  type RenderBlockCallback,\n  type RenderFieldCallback,\n  type RenderInputCallback,\n  type RenderPreviewCallback,\n} from '../../types'\nimport {ObjectInputMember} from './ObjectInputMember'\n\n/** @internal */\nexport interface ObjectMembersProps {\n  members: ObjectMember[]\n  renderAnnotation?: RenderAnnotationCallback\n  renderBlock?: RenderBlockCallback\n  renderInlineBlock?: RenderBlockCallback\n  renderInput: RenderInputCallback\n  renderField: RenderFieldCallback\n  renderItem: RenderArrayOfObjectsItemCallback\n  renderPreview: RenderPreviewCallback\n}\n\n/**\n * Convenience component for wrapping an object input\n * @internal\n */\nexport function ObjectInputMembers(props: ObjectMembersProps) {\n  const {\n    members,\n    renderAnnotation,\n    renderBlock,\n    renderInput,\n    renderInlineBlock,\n    renderField,\n    renderItem,\n    renderPreview,\n  } = props\n\n  const renderMembers = useMemo(\n    () =>\n      members.map((member) => (\n        <ObjectInputMember\n          key={member.key}\n          member={member}\n          renderAnnotation={renderAnnotation}\n          renderBlock={renderBlock}\n          renderField={renderField}\n          renderInlineBlock={renderInlineBlock}\n          renderInput={renderInput}\n          renderItem={renderItem}\n          renderPreview={renderPreview}\n        />\n      )),\n    [\n      members,\n      renderAnnotation,\n      renderBlock,\n      renderField,\n      renderInlineBlock,\n      renderInput,\n      renderItem,\n      renderPreview,\n    ],\n  )\n\n  return <>{renderMembers}</>\n}\n\n/**\n * @deprecated Use ObjectInputMembers instead\n * @internal\n */\nexport const ObjectMembers = ObjectInputMembers\n","// eslint-disable-next-line no-empty-function,@typescript-eslint/no-empty-function\n\nimport {isArraySchemaType, isBooleanSchemaType, isObjectSchemaType} from '@sanity/types'\n\nimport {type ArrayOfObjectsInputProps, type InputProps, type ObjectInputProps} from '../types'\nimport {\n  type BooleanFieldProps,\n  type FieldProps,\n  type ObjectFieldProps,\n  type PrimitiveFieldProps,\n} from '../types/fieldProps'\n\nexport function assertType<T>(v: unknown): asserts v is T {\n  // intentionally empty\n}\n\nexport function isObjectInputProps(\n  inputProps: InputProps | Omit<InputProps, 'renderDefault'>,\n): inputProps is ObjectInputProps {\n  return isObjectSchemaType(inputProps.schemaType)\n}\n\nexport function isArrayInputProps(\n  inputProps: InputProps | Omit<InputProps, 'renderDefault'>,\n): inputProps is ArrayOfObjectsInputProps {\n  return isArraySchemaType(inputProps.schemaType)\n}\n\nexport function isPrimitiveField(\n  fieldProps: FieldProps | Omit<FieldProps, 'renderDefault'>,\n): fieldProps is PrimitiveFieldProps {\n  return !isObjectSchemaType(fieldProps.schemaType) && !isArraySchemaType(fieldProps.schemaType)\n}\n\nexport function isBooleanField(\n  fieldProps: FieldProps | Omit<FieldProps, 'renderDefault'>,\n): fieldProps is BooleanFieldProps {\n  return isBooleanSchemaType(fieldProps.schemaType)\n}\n\nexport function isObjectField(\n  fieldProps: FieldProps | Omit<FieldProps, 'renderDefault'>,\n): fieldProps is ObjectFieldProps {\n  return isObjectSchemaType(fieldProps.schemaType)\n}\n","import {isIndexSegment, isKeySegment, type Path} from '@sanity/types'\nimport {isEqual, startsWith, trimLeft} from '@sanity/util/paths'\nimport {memo, type ReactNode, useCallback, useMemo} from 'react'\n\nimport {pathToString} from '../../field'\nimport {Translate, useTranslation} from '../../i18n'\nimport {ArrayOfObjectsItem, MemberField, MemberItemError} from '../members'\nimport {type FieldMember} from '../store'\nimport {\n  type ArrayOfObjectsInputProps,\n  type ObjectInputProps,\n  type RenderAnnotationCallback,\n  type RenderArrayOfObjectsItemCallback,\n  type RenderBlockCallback,\n  type RenderFieldCallback,\n  type RenderInputCallback,\n  type RenderPreviewCallback,\n} from '../types'\nimport {isArrayInputProps, isObjectInputProps} from '../utils/asserters'\n\nconst pass = ({children}: {children: ReactNode}) => children\n\n/** @internal */\nexport type FormInputAbsolutePathArg = {absolutePath: Path}\n\n/** @internal */\nexport type FormInputRelativePathArg = {relativePath: Path}\n\nfunction hasAbsolutePath(\n  a: FormInputAbsolutePathArg | FormInputRelativePathArg,\n): a is FormInputAbsolutePathArg {\n  return 'absolutePath' in a\n}\n\n/** @internal */\nexport const FormInput = memo(function FormInput(\n  props: (ArrayOfObjectsInputProps | ObjectInputProps) &\n    (FormInputRelativePathArg | FormInputAbsolutePathArg) & {\n      /**\n       * Whether to include the field around the input. Defaults to false\n       */\n      includeField?: boolean\n      includeItem?: boolean\n    },\n) {\n  const absolutePath = useMemo(() => {\n    return hasAbsolutePath(props) ? props.absolutePath : props.path.concat(props.relativePath)\n  }, [props])\n\n  // TODO: Refactor this at some point in Studio v4\n  //\n  // renderBlock, renderInlineBlock and renderAnnotation\n  // was introduced as optional InputProps after the initial\n  // release of v3, in order to not introduce breaking changes.\n  // They are still required in this inner internal component.\n  // Ignoring string literal because it is a developer error\n  // eslint-disable-next-line i18next/no-literal-string\n  const nullRender = useCallback(() => <>Missing destination render function</>, [])\n\n  return (\n    <FormInputInner\n      {...props}\n      absolutePath={absolutePath}\n      destinationRenderAnnotation={props.renderAnnotation || nullRender}\n      destinationRenderBlock={props.renderBlock || nullRender}\n      destinationRenderField={props.renderField}\n      destinationRenderInlineBlock={props.renderInlineBlock || nullRender}\n      destinationRenderInput={props.renderInput}\n      destinationRenderItem={props.renderItem}\n      destinationRenderPreview={props.renderPreview}\n    />\n  )\n})\n\n/**\n * An input that takes input props for object or array and renders an input for a given sub-path\n */\nconst FormInputInner = memo(function FormInputInner(\n  props: (ArrayOfObjectsInputProps | ObjectInputProps) & {\n    absolutePath: Path\n    includeField?: boolean\n    includeItem?: boolean\n    destinationRenderAnnotation: RenderAnnotationCallback\n    destinationRenderBlock: RenderBlockCallback\n    destinationRenderField: RenderFieldCallback\n    destinationRenderInlineBlock: RenderBlockCallback\n    destinationRenderInput: RenderInputCallback\n    destinationRenderItem: RenderArrayOfObjectsItemCallback\n    destinationRenderPreview: RenderPreviewCallback\n  },\n) {\n  const {\n    absolutePath,\n    destinationRenderAnnotation,\n    destinationRenderBlock,\n    destinationRenderField,\n    destinationRenderInlineBlock,\n    destinationRenderInput,\n    destinationRenderItem,\n    destinationRenderPreview,\n  } = props\n\n  const {t} = useTranslation()\n\n  const renderField: RenderFieldCallback = useCallback(\n    (fieldProps) => {\n      // we want to render the field around the input if either of these are true:\n      // 1. we have reached the destination path and the `includeField`-prop is passed as true\n      // 2. we are currently at a node somewhere below/inside the destination path\n      const atDestination = isEqual(absolutePath, fieldProps.path)\n      const shouldRenderField = atDestination\n        ? props.includeField\n        : startsWith(absolutePath, fieldProps.path)\n      return shouldRenderField ? destinationRenderField(fieldProps) : pass(fieldProps)\n    },\n    [absolutePath, destinationRenderField, props.includeField],\n  )\n\n  const renderItem: RenderArrayOfObjectsItemCallback = useCallback(\n    (itemProps) => {\n      // we want to render the item around the input if either of these are true:\n      // 1. we have reached the destination path and the `includeItem`-prop is passed as true\n      // 2. we are currently at a node somewhere below/inside the destination path\n      const atDestination = isEqual(absolutePath, itemProps.path)\n      const shouldRenderItem = atDestination\n        ? props.includeItem\n        : startsWith(absolutePath, itemProps.path)\n      return shouldRenderItem ? destinationRenderItem(itemProps) : pass(itemProps)\n    },\n    [absolutePath, destinationRenderItem, props.includeItem],\n  )\n\n  const renderInput: RenderInputCallback = useCallback(\n    (inputProps) => {\n      const isDestinationReached =\n        isEqual(inputProps.path, absolutePath) || startsWith(absolutePath, inputProps.path)\n      if (isDestinationReached) {\n        // we have reached the destination node and can now render with the passed renderInput\n        return destinationRenderInput(inputProps)\n      }\n      if (!isObjectInputProps(inputProps) && !isArrayInputProps(inputProps)) {\n        throw new Error(\n          `Expected either object input props or array input props for: ${JSON.stringify(\n            inputProps.path,\n          )}`,\n        )\n      }\n      // we have not yet reached the destination path, so we'll continue recurse until we get there\n      return (\n        <FormInputInner\n          {...inputProps}\n          includeField={props.includeField}\n          includeItem={props.includeItem}\n          absolutePath={absolutePath}\n          destinationRenderAnnotation={destinationRenderAnnotation}\n          destinationRenderBlock={destinationRenderBlock}\n          destinationRenderInput={destinationRenderInput}\n          destinationRenderItem={destinationRenderItem}\n          destinationRenderField={destinationRenderField}\n          destinationRenderInlineBlock={destinationRenderInlineBlock}\n          destinationRenderPreview={destinationRenderPreview}\n        />\n      )\n    },\n    [\n      absolutePath,\n      destinationRenderAnnotation,\n      destinationRenderBlock,\n      destinationRenderField,\n      destinationRenderInlineBlock,\n      destinationRenderInput,\n      destinationRenderItem,\n      destinationRenderPreview,\n      props.includeField,\n      props.includeItem,\n    ],\n  )\n\n  const renderBlock: RenderBlockCallback = useCallback(\n    (blockProps) => {\n      const shouldRenderBlock =\n        startsWith(absolutePath, blockProps.path) &&\n        (props.includeItem || !isEqual(absolutePath, blockProps.path))\n      return shouldRenderBlock ? destinationRenderBlock(blockProps) : pass(blockProps)\n    },\n    [absolutePath, destinationRenderBlock, props.includeItem],\n  )\n\n  const renderInlineBlock: RenderBlockCallback = useCallback(\n    (blockProps) => {\n      const shouldRenderInlineBlock =\n        startsWith(absolutePath, blockProps.path) &&\n        (props.includeItem || !isEqual(absolutePath, blockProps.path))\n      return shouldRenderInlineBlock ? destinationRenderInlineBlock(blockProps) : pass(blockProps)\n    },\n    [absolutePath, destinationRenderInlineBlock, props.includeItem],\n  )\n\n  const renderAnnotation: RenderAnnotationCallback = useCallback(\n    (annotationProps) => {\n      const shouldRenderAnnotation =\n        startsWith(absolutePath, annotationProps.path) &&\n        (props.includeItem || !isEqual(absolutePath, annotationProps.path))\n      return shouldRenderAnnotation\n        ? destinationRenderAnnotation(annotationProps)\n        : pass(annotationProps)\n    },\n    [absolutePath, destinationRenderAnnotation, props.includeItem],\n  )\n\n  if (isArrayInputProps(props)) {\n    const childPath = trimLeft(props.path, absolutePath)\n\n    const itemMember = props.members.find(\n      (member) =>\n        member.kind == 'item' && isKeySegment(childPath[0]) && member.key === childPath[0]._key,\n    )\n\n    if (!itemMember) {\n      const path = pathToString(props.path)\n      const relativePath = trimLeft(props.path, absolutePath)\n      if (isKeySegment(relativePath[0])) {\n        const key = relativePath[0]._key\n        return (\n          <div>\n            <Translate t={t} i18nKey=\"form.error.no-array-item-at-key\" values={{key, path}} />\n          </div>\n        )\n      }\n\n      const index = isIndexSegment(relativePath[0]) ? relativePath[0] : relativePath[0][0]\n      return (\n        <div>\n          <Translate t={t} i18nKey=\"form.error.no-array-item-at-index\" values={{index, path}} />\n        </div>\n      )\n    }\n\n    if (itemMember.kind === 'error') {\n      return <MemberItemError member={itemMember} />\n    }\n\n    return (\n      <ArrayOfObjectsItem\n        member={itemMember}\n        renderAnnotation={renderAnnotation}\n        renderBlock={renderBlock}\n        renderInput={renderInput}\n        renderField={renderField}\n        renderInlineBlock={renderInlineBlock}\n        renderItem={renderItem}\n        renderPreview={destinationRenderPreview}\n      />\n    )\n  }\n\n  if (isObjectInputProps(props)) {\n    const childPath = trimLeft(props.path, absolutePath)\n\n    const fieldMember = props.members.find(\n      (member): member is FieldMember => member.kind == 'field' && childPath[0] === member.name,\n    )\n\n    const fieldSetMember = props.members\n      .filter((member) => member.kind === 'fieldSet')\n      .flatMap((member) => (member.kind === 'fieldSet' && member.fieldSet?.members) || [])\n      .find((m): m is FieldMember => m.kind === 'field' && m.name === childPath[0])\n\n    const member = fieldMember || fieldSetMember\n\n    if (!member) {\n      const fieldName =\n        typeof childPath[0] === 'string' ? childPath[0] : JSON.stringify(childPath[0])\n\n      return <div>{t('form.error.field-not-found', {fieldName})}</div>\n    }\n\n    return (\n      <MemberField\n        member={member}\n        renderAnnotation={renderAnnotation}\n        renderBlock={renderBlock}\n        renderInput={renderInput}\n        renderInlineBlock={renderInlineBlock}\n        renderField={renderField}\n        renderItem={renderItem}\n        renderPreview={destinationRenderPreview}\n      />\n    )\n  }\n\n  throw new Error('FormInput can only be used with arrays or objects')\n})\n","import {type Path} from '@sanity/types'\nimport {isEqual, pathFor} from '@sanity/util/paths'\nimport {type MutableRefObject, type ReactNode, useContext, useMemo, useRef} from 'react'\nimport {PortableTextMemberItemsContext} from 'sanity/_singletons'\n\nimport {pathToString} from '../../../../field'\nimport {type FIXME} from '../../../../FIXME'\nimport {FormInput} from '../../../components'\nimport {isMemberArrayOfObjects} from '../../../members/object/fields/asserters'\nimport {set} from '../../../patch/patch'\nimport {type FormPatch} from '../../../patch/types'\nimport {type ArrayOfObjectsItemMember, type ObjectFormNode} from '../../../store'\nimport {type ObjectInputProps, type PortableTextInputProps} from '../../../types'\nimport {isArrayOfObjectsFieldMember, isBlockType} from '../_helpers'\nimport {type PortableTextMemberItem} from '../PortableTextInput'\n\nexport function usePortableTextMemberItem(key: string): PortableTextMemberItem | undefined {\n  const ctx = useContext(PortableTextMemberItemsContext)\n  if (!ctx) {\n    throw new Error('Form context not provided')\n  }\n  return ctx.find((m) => m.key === key)\n}\n\nexport function usePortableTextMemberItems(): PortableTextMemberItem[] {\n  const ctx = useContext(PortableTextMemberItemsContext)\n  if (!ctx) {\n    throw new Error('Form context not provided')\n  }\n  return ctx\n}\n\n/**\n * Returns a flat structure of all the form member items\n * included in this Portable Text Input.\n *\n * @internal\n */\nexport function usePortableTextMemberItemsFromProps(\n  props: PortableTextInputProps,\n): PortableTextMemberItem[] {\n  const {\n    members,\n    path,\n    schemaType,\n    renderAnnotation,\n    renderField,\n    renderBlock,\n    renderInput,\n    renderItem,\n    renderInlineBlock,\n    renderPreview,\n    onPathFocus,\n  } = props\n\n  const portableTextMemberItemsRef: MutableRefObject<PortableTextMemberItem[]> = useRef([])\n  return useMemo(() => {\n    const result: {\n      kind: PortableTextMemberItem['kind']\n      member: ArrayOfObjectsItemMember\n      node: ObjectFormNode\n    }[] = []\n\n    for (const member of members) {\n      if (member.kind === 'item') {\n        const isObjectBlock = !isBlockType(member.item.schemaType)\n        if (isObjectBlock) {\n          result.push({kind: 'objectBlock', member, node: member.item})\n        } else {\n          // Also include regular text blocks with validation, presence, changes or that are open or focused.\n          // This is a performance optimization to avoid accounting for blocks that\n          // doesn't need to be re-rendered (which usually is most of the blocks).\n          if (\n            member.item.validation.length > 0 ||\n            member.item.changed ||\n            member.item.presence?.length ||\n            member.open ||\n            member.item.focusPath.length ||\n            member.item.focused\n          ) {\n            result.push({kind: 'textBlock', member, node: member.item})\n          }\n          // Inline objects\n          const childrenField = member.item.members.find(\n            (f) => f.kind === 'field' && f.name === 'children',\n          )\n          if (\n            childrenField &&\n            childrenField.kind === 'field' &&\n            isMemberArrayOfObjects(childrenField)\n          ) {\n            // eslint-disable-next-line max-depth\n            for (const child of childrenField.field.members) {\n              // eslint-disable-next-line max-depth\n              if (child.kind === 'item' && child.item.schemaType.name !== 'span') {\n                result.push({kind: 'inlineObject', member: child, node: child.item})\n              }\n            }\n          }\n          // Markdefs\n          const markDefArrayMember = member.item.members\n            .filter(isArrayOfObjectsFieldMember)\n            .find((f) => f.name === 'markDefs')\n          if (markDefArrayMember) {\n            // eslint-disable-next-line max-depth\n            for (const child of markDefArrayMember.field.members) {\n              // eslint-disable-next-line max-depth\n              if (child.kind === 'item' && child.item.schemaType.jsonType === 'object') {\n                result.push({\n                  kind: 'annotation',\n                  member: child,\n                  node: child.item,\n                })\n              }\n            }\n          }\n        }\n      }\n    }\n\n    const items: PortableTextMemberItem[] = result.map((item) => {\n      const key = pathToString(item.node.path)\n      const existingItem = portableTextMemberItemsRef.current.find((refItem) => refItem.key === key)\n      const isObject = item.kind !== 'textBlock'\n      let input: ReactNode = null\n\n      if ((isObject && item.member !== existingItem?.member) || item.node !== existingItem?.node) {\n        // No-op when calling elementProps.onFocus or calling onPathFocus with an empty focusPath\n        // This is to avoid closing the editing modal as it will focus the editor element itself.\n        const _elementProps = (renderInputProps: ObjectInputProps) => ({\n          ...renderInputProps.elementProps,\n          onFocus: () => {\n            // no-op\n          },\n        })\n        const _onPathFocus = (focusPath: Path) => {\n          const fullPath = item.member.item.path.concat(focusPath)\n          if (focusPath.length === 0) {\n            // no-op\n            return\n          }\n          onPathFocus(fullPath.slice(path.length, fullPath.length))\n        }\n\n        // When an Input is trying to remove itself (unset([])), we want instead to clear the values from the object,\n        // but keep the object itself. This is to avoid the array input to remove the array entirely when unsetting the last item (for instance with markDefs)\n        // We also want the (empty) object there in order to be able to control the closing of the object modal properly, cleaning up, normalizing through the editor etc.\n        const _onChangeDisableRemoveSelf = (objectFormRenderInputProps: ObjectInputProps) => {\n          return (patch: FormPatch) => {\n            // Special handling for unset([]) change\n            if (patch.type === 'unset' && patch.path.length === 0) {\n              objectFormRenderInputProps.onChange(\n                set({_type: item.member.item.schemaType.name, _key: item.member.key}, patch.path),\n              )\n              return\n            }\n            // Original onChange\n            objectFormRenderInputProps.onChange(patch)\n          }\n        }\n\n        // Render object Input with no-ops for setting root focus, and unsetting the object.\n        const _renderInput = (renderInputProps: ObjectInputProps) => {\n          const isObjectInputPath = isEqual(renderInputProps.path, item.member.item.path)\n          if (isObjectInputPath) {\n            return renderInput({\n              ...renderInputProps,\n              onChange: _onChangeDisableRemoveSelf(renderInputProps),\n              onPathFocus: _onPathFocus,\n              elementProps: _elementProps(renderInputProps),\n            } as ObjectInputProps)\n          }\n          return renderInput(renderInputProps)\n        }\n        const inputProps = {\n          absolutePath: pathFor(item.node.path),\n          includeField: false,\n          members,\n          path: pathFor(path),\n          renderAnnotation,\n          renderBlock,\n          renderField,\n          renderInlineBlock,\n          renderInput: _renderInput,\n          renderItem,\n          renderPreview,\n          schemaType,\n        }\n        input = <FormInput {...(inputProps as FIXME)} />\n      }\n\n      // Update existing item\n      if (existingItem) {\n        existingItem.member = item.member\n        existingItem.node = item.node\n        existingItem.input = input || existingItem.input\n        return existingItem\n      }\n\n      return {\n        kind: item.kind,\n        key,\n        member: item.member,\n        node: item.node,\n        input,\n      }\n    })\n\n    portableTextMemberItemsRef.current = items\n\n    return items\n  }, [\n    members,\n    onPathFocus,\n    path,\n    renderAnnotation,\n    renderBlock,\n    renderField,\n    renderInlineBlock,\n    renderInput,\n    renderItem,\n    renderPreview,\n    schemaType,\n  ])\n}\n","import {hues} from '@sanity/color'\nimport {Box, type Theme, type ThemeColorToneKey} from '@sanity/ui'\nimport {css, styled} from 'styled-components'\n\nexport const Root = styled.span<{$toneKey?: Exclude<ThemeColorToneKey, 'transparent'>}>(\n  (props: {$toneKey?: Exclude<ThemeColorToneKey, 'transparent'>; theme: Theme}) => {\n    const {$toneKey = 'default', theme} = props\n\n    return css`\n      text-decoration: none;\n      display: inline;\n      background-color: ${theme.sanity.color.selectable?.[$toneKey].enabled.bg};\n      border-bottom: 1px dashed ${theme.sanity.color.selectable?.[$toneKey].enabled.fg};\n      color: ${theme.sanity.color.selectable?.[$toneKey].enabled.fg};\n\n      &[data-link] {\n        border-bottom: 1px solid ${theme.sanity.color.selectable?.[$toneKey].enabled.fg};\n      }\n\n      &[data-custom-markers] {\n        background-color: ${theme.sanity.color.dark ? hues.purple[950].hex : hues.purple[50].hex};\n      }\n\n      &[data-warning] {\n        background-color: ${theme.sanity.color.muted.caution.hovered.bg};\n      }\n\n      &[data-error] {\n        background-color: ${theme.sanity.color.muted.critical.hovered.bg};\n      }\n    `\n  },\n)\n\nexport const TooltipBox = styled(Box).attrs({forwardedAs: 'span'})`\n  max-width: 250px;\n`\n","import {PortableTextEditor, usePortableTextEditor} from '@portabletext/editor'\nimport {EditIcon, TrashIcon} from '@sanity/icons'\nimport {Box, Flex, Text, useGlobalKeyDown, useTheme} from '@sanity/ui'\nimport {type ReactNode, useCallback, useEffect, useMemo, useRef, useState} from 'react'\n\nimport {Button, Popover, type PopoverProps} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n'\n\nconst POPOVER_FALLBACK_PLACEMENTS: PopoverProps['fallbackPlacements'] = ['top', 'bottom']\n\ninterface AnnotationToolbarPopoverProps {\n  annotationOpen: boolean\n  annotationTextSelected: boolean\n  floatingBoundary: HTMLElement | null\n  onOpenAnnotation: () => void\n  onRemoveAnnotation: () => void\n  referenceBoundary: HTMLElement | null\n  referenceElement: HTMLElement | null\n  title: string\n}\n\nexport function AnnotationToolbarPopover(props: AnnotationToolbarPopoverProps): ReactNode {\n  const {\n    annotationOpen,\n    annotationTextSelected,\n    floatingBoundary,\n    onOpenAnnotation,\n    onRemoveAnnotation,\n    referenceBoundary,\n    referenceElement,\n    title,\n  } = props\n  const [popoverOpen, setPopoverOpen] = useState<boolean>(false)\n  const [cursorRect, setCursorRect] = useState<DOMRect | null>(null)\n  const rangeRef = useRef<Range | null>(null)\n  const {sanity} = useTheme()\n  const {t} = useTranslation()\n  const editButtonRef = useRef<HTMLButtonElement | null>(null)\n  const deleteButtonRef = useRef<HTMLButtonElement | null>(null)\n  const focusTrappedRef = useRef<HTMLButtonElement | null>(null)\n  const popoverScheme = sanity.color.dark ? 'light' : 'dark'\n  const editor = usePortableTextEditor()\n\n  // This is a \"virtual element\" (supported by Popper.js)\n  const cursorElement = useMemo(() => {\n    if (!cursorRect) {\n      return null\n    }\n    return {\n      getBoundingClientRect: () => {\n        return cursorRect\n      },\n    }\n  }, [cursorRect]) as HTMLElement\n\n  const handleClosePopover = useCallback(() => {\n    PortableTextEditor.focus(editor)\n    setPopoverOpen(false)\n    focusTrappedRef.current = null\n  }, [editor])\n\n  // Tab to edit button on tab\n  // Close floating toolbar on Escape\n  useGlobalKeyDown(\n    useCallback(\n      (event) => {\n        if (!popoverOpen) {\n          return\n        }\n        if (event.key === 'Tab') {\n          if (\n            annotationTextSelected &&\n            event.target instanceof HTMLElement &&\n            event.target.contentEditable &&\n            focusTrappedRef.current === null\n          ) {\n            event.preventDefault()\n            editButtonRef.current?.focus()\n            focusTrappedRef.current = editButtonRef.current\n            return\n          }\n          if (event.target === deleteButtonRef.current) {\n            event.preventDefault()\n            event.stopPropagation()\n            focusTrappedRef.current = null\n            PortableTextEditor.focus(editor)\n            return\n          }\n        }\n        if (event.key === 'Escape') {\n          handleClosePopover()\n        }\n      },\n      [editor, handleClosePopover, popoverOpen, annotationTextSelected],\n    ),\n  )\n\n  // Open popover when selection is within the annotation text\n  const handleSelectionChange = useCallback(() => {\n    if (annotationOpen) {\n      setPopoverOpen(false)\n      setCursorRect(null)\n      return\n    }\n\n    const sel = window.getSelection()\n\n    if (!sel || sel.rangeCount === 0) return\n\n    focusTrappedRef.current = null\n    const range = sel.getRangeAt(0)\n    const isWithinRoot = referenceElement?.contains(range.commonAncestorContainer)\n\n    if (!isWithinRoot) {\n      setPopoverOpen(false)\n      setCursorRect(null)\n      return\n    }\n    const rect = range?.getBoundingClientRect()\n    if (rect) {\n      setCursorRect(rect)\n      setPopoverOpen(true)\n    }\n  }, [annotationOpen, referenceElement, setPopoverOpen])\n\n  // Detect selection changes\n  useEffect(() => {\n    document.addEventListener('selectionchange', handleSelectionChange, {passive: true})\n    return () => {\n      document.removeEventListener('selectionchange', handleSelectionChange)\n    }\n  }, [handleSelectionChange])\n\n  const handleEditButtonClicked = useCallback(() => {\n    setPopoverOpen(false)\n    onOpenAnnotation()\n  }, [onOpenAnnotation])\n\n  const handleRemoveButtonClicked = useCallback(() => {\n    setPopoverOpen(false)\n    onRemoveAnnotation()\n  }, [onRemoveAnnotation])\n\n  const handleScroll = useCallback(() => {\n    if (rangeRef.current) {\n      setCursorRect(rangeRef.current.getBoundingClientRect())\n    }\n  }, [])\n\n  useEffect(() => {\n    const sel = window.getSelection()\n    if (sel && sel.rangeCount > 0) {\n      rangeRef.current = sel.getRangeAt(0)\n    }\n  }, [popoverOpen])\n\n  useEffect(() => {\n    // Listen for scroll events on the floating boundary and the reference boundary\n    // and move the popover accordingly\n    if (popoverOpen) {\n      floatingBoundary?.addEventListener('scroll', handleScroll)\n      referenceBoundary?.addEventListener('scroll', handleScroll)\n    }\n    return () => {\n      floatingBoundary?.removeEventListener('scroll', handleScroll)\n      referenceBoundary?.removeEventListener('scroll', handleScroll)\n    }\n  }, [popoverOpen, referenceBoundary, floatingBoundary, handleScroll])\n\n  return (\n    <Popover\n      open={popoverOpen}\n      floatingBoundary={floatingBoundary}\n      constrainSize\n      content={\n        <Box padding={1} data-testid=\"annotation-toolbar-popover\">\n          <Flex gap={1}>\n            <Box padding={2}>\n              <Text weight=\"medium\" size={1}>\n                {title}\n              </Text>\n            </Box>\n            <Button\n              aria-label={t('inputs.portable-text.action.edit-annotation-aria-label')}\n              data-testid=\"edit-annotation-button\"\n              icon={EditIcon}\n              mode=\"bleed\"\n              onClick={handleEditButtonClicked}\n              ref={editButtonRef}\n              tabIndex={0}\n              tooltipProps={null}\n            />\n            <Button\n              aria-label={t('inputs.portable-text.action.remove-annotation-aria-label')}\n              data-testid=\"remove-annotation-button\"\n              icon={TrashIcon}\n              mode=\"bleed\"\n              onClick={handleRemoveButtonClicked}\n              ref={deleteButtonRef}\n              tabIndex={0}\n              tone=\"critical\"\n              tooltipProps={null}\n            />\n          </Flex>\n        </Box>\n      }\n      fallbackPlacements={POPOVER_FALLBACK_PLACEMENTS}\n      placement=\"top\"\n      portal\n      preventOverflow\n      referenceBoundary={referenceBoundary}\n      referenceElement={cursorElement}\n      scheme={popoverScheme}\n    />\n  )\n}\n","import {PortableTextEditor, usePortableTextEditor} from '@portabletext/editor'\nimport {type ObjectSchemaType, type Path, type PortableTextObject} from '@sanity/types'\nimport {isEqual} from '@sanity/util/paths'\nimport {type ComponentType, useCallback, useMemo, useState} from 'react'\n\nimport {Tooltip} from '../../../../../ui-components'\nimport {pathToString} from '../../../../field'\nimport {useTranslation} from '../../../../i18n'\nimport {EMPTY_ARRAY} from '../../../../util'\nimport {isEmptyItem} from '../../../store/utils/isEmptyItem'\nimport {useChildPresence} from '../../../studio/contexts/Presence'\nimport {\n  type BlockAnnotationProps,\n  type RenderAnnotationCallback,\n  type RenderArrayOfObjectsItemCallback,\n  type RenderBlockCallback,\n  type RenderCustomMarkers,\n  type RenderFieldCallback,\n  type RenderInputCallback,\n  type RenderPreviewCallback,\n} from '../../../types'\nimport {useFormBuilder} from '../../../useFormBuilder'\nimport {DefaultMarkers} from '../_legacyDefaultParts/Markers'\nimport {type SetPortableTextMemberItemElementRef} from '../contexts/PortableTextMemberItemElementRefsProvider'\nimport {debugRender} from '../debugRender'\nimport {useMemberValidation} from '../hooks/useMemberValidation'\nimport {usePortableTextMarkers} from '../hooks/usePortableTextMarkers'\nimport {usePortableTextMemberItem} from '../hooks/usePortableTextMembers'\nimport {Root, TooltipBox} from './Annotation.styles'\nimport {AnnotationToolbarPopover} from './AnnotationToolbarPopover'\n\ninterface AnnotationProps {\n  children: React.JSX.Element\n  editorNodeFocused: boolean\n  floatingBoundary: HTMLElement | null\n  focused: boolean\n  onItemClose: () => void\n  onItemOpen: (path: Path) => void\n  onPathFocus: (path: Path) => void\n  path: Path\n  readOnly?: boolean\n  referenceBoundary: HTMLElement | null\n  renderAnnotation?: RenderAnnotationCallback\n  renderBlock?: RenderBlockCallback\n  renderCustomMarkers?: RenderCustomMarkers\n  renderField: RenderFieldCallback\n  renderInlineBlock?: RenderBlockCallback\n  renderInput: RenderInputCallback\n  renderItem: RenderArrayOfObjectsItemCallback\n  renderPreview: RenderPreviewCallback\n  selected: boolean\n  setElementRef: SetPortableTextMemberItemElementRef\n  schemaType: ObjectSchemaType\n  value: PortableTextObject\n}\n\nexport function Annotation(props: AnnotationProps): React.JSX.Element {\n  const {\n    children,\n    editorNodeFocused,\n    floatingBoundary,\n    focused,\n    onItemClose,\n    onItemOpen,\n    onPathFocus,\n    path,\n    readOnly,\n    referenceBoundary,\n    renderAnnotation,\n    renderBlock,\n    renderCustomMarkers,\n    renderField,\n    renderInlineBlock,\n    renderInput,\n    renderItem,\n    renderPreview,\n    schemaType,\n    selected,\n    setElementRef,\n    value,\n  } = props\n  const {Markers = DefaultMarkers} = useFormBuilder().__internal.components\n  const editor = usePortableTextEditor()\n  const markDefPath: Path = useMemo(\n    () => path.slice(0, path.length - 2).concat(['markDefs', {_key: value._key}]),\n    [path, value._key],\n  )\n  const [spanElement, setSpanElement] = useState<HTMLSpanElement | null>(null)\n  const memberItem = usePortableTextMemberItem(pathToString(markDefPath))\n  const {validation} = useMemberValidation(memberItem?.node)\n  const markers = usePortableTextMarkers(path)\n\n  const text = useMemo(() => <span data-annotation=\"\">{children}</span>, [children])\n\n  const onOpen = useCallback(() => {\n    if (memberItem) {\n      // Take focus away from the editor so it doesn't accidentally propagate a new focusPath\n      // for the text node that the annotation is attached to.\n      PortableTextEditor.blur(editor)\n      // Open the annotation item (markDef object)\n      onItemOpen(memberItem.node.path)\n    }\n  }, [editor, memberItem, onItemOpen])\n\n  const onClose = useCallback(() => {\n    onItemClose()\n    if (isEmptyItem(value)) {\n      PortableTextEditor.removeAnnotation(editor, schemaType)\n    }\n    PortableTextEditor.focus(editor)\n  }, [editor, onItemClose, schemaType, value])\n\n  const onRemove = useCallback(() => {\n    PortableTextEditor.removeAnnotation(editor, schemaType)\n    PortableTextEditor.focus(editor)\n  }, [editor, schemaType])\n\n  const markersToolTip = useMemo(\n    () =>\n      validation.length > 0 || markers.length > 0 ? (\n        <Tooltip\n          placement=\"bottom\"\n          portal=\"default\"\n          content={\n            <TooltipBox>\n              <Markers\n                markers={markers}\n                renderCustomMarkers={renderCustomMarkers}\n                validation={validation}\n              />\n            </TooltipBox>\n          }\n        >\n          {text}\n        </Tooltip>\n      ) : undefined,\n    [Markers, markers, renderCustomMarkers, text, validation],\n  )\n\n  const presence = useChildPresence(path, true)\n  const rootPresence = useMemo(\n    () => presence.filter((p) => isEqual(p.path, path)),\n    [path, presence],\n  )\n\n  const isOpen = Boolean(memberItem?.member.open)\n  const input = memberItem?.input\n  const nodePath = memberItem?.node.path || EMPTY_ARRAY\n  const referenceElement = spanElement\n\n  const componentProps = useMemo(\n    (): BlockAnnotationProps => ({\n      __unstable_floatingBoundary: floatingBoundary,\n      __unstable_referenceBoundary: referenceBoundary,\n      __unstable_referenceElement: referenceElement,\n      __unstable_textElementFocus: editorNodeFocused, // Is there focus on the related text element for this object?\n      children: input,\n      focused,\n      markers,\n      onClose,\n      onOpen,\n      onPathFocus,\n      onRemove,\n      open: isOpen,\n      parentSchemaType: editor.schemaTypes.block,\n      path: nodePath,\n      presence: rootPresence,\n      readOnly: Boolean(readOnly),\n      renderAnnotation,\n      renderBlock,\n      renderField,\n      renderInlineBlock,\n      renderInput,\n      renderPreview,\n      renderItem,\n      renderDefault: DefaultAnnotationComponent,\n      schemaType,\n      selected,\n      textElement: markersToolTip || text,\n      validation,\n      value,\n    }),\n    [\n      editor.schemaTypes.block,\n      editorNodeFocused,\n      floatingBoundary,\n      focused,\n      input,\n      isOpen,\n      markers,\n      markersToolTip,\n      nodePath,\n      onClose,\n      onOpen,\n      onPathFocus,\n      onRemove,\n      readOnly,\n      referenceBoundary,\n      referenceElement,\n      renderAnnotation,\n      renderBlock,\n      renderField,\n      renderInlineBlock,\n      renderInput,\n      renderItem,\n      renderPreview,\n      rootPresence,\n      schemaType,\n      selected,\n      text,\n      validation,\n      value,\n    ],\n  )\n\n  const CustomComponent = schemaType.components?.annotation as\n    | ComponentType<BlockAnnotationProps>\n    | undefined\n\n  const setRef = useCallback(\n    (elm: HTMLSpanElement) => {\n      if (memberItem) {\n        setElementRef({key: memberItem.member.key, elementRef: elm})\n      }\n      setSpanElement(elm) // update state here so the reference element is available on first render\n    },\n    [memberItem, setElementRef, setSpanElement],\n  )\n\n  return useMemo(\n    () => (\n      <span ref={setRef} style={debugRender()}>\n        {CustomComponent ? (\n          <CustomComponent {...componentProps} />\n        ) : (\n          <DefaultAnnotationComponent {...componentProps} />\n        )}\n      </span>\n    ),\n    [CustomComponent, componentProps, setRef],\n  )\n}\n\nexport const DefaultAnnotationComponent = (props: BlockAnnotationProps): React.JSX.Element => {\n  const {\n    __unstable_floatingBoundary: floatingBoundary,\n    __unstable_referenceBoundary: referenceBoundary,\n    __unstable_referenceElement: referenceElement,\n    children,\n    markers,\n    onOpen,\n    onRemove,\n    open,\n    readOnly,\n    schemaType,\n    selected,\n    textElement,\n    validation,\n  } = props\n  const isLink = schemaType.name === 'link'\n  const hasError = validation.some((v) => v.level === 'error')\n  const hasWarning = validation.some((v) => v.level === 'warning')\n  const hasMarkers = markers.length > 0\n  const isReady = Boolean(children)\n\n  const {t} = useTranslation()\n\n  const toneKey = useMemo(() => {\n    if (hasError) {\n      return 'critical'\n    }\n\n    if (hasWarning) {\n      return 'caution'\n    }\n\n    if (isLink) {\n      return 'primary'\n    }\n    return 'default'\n  }, [isLink, hasError, hasWarning])\n\n  return (\n    <Root\n      $toneKey={toneKey}\n      aria-label={t('inputs.portable-text.annotation-aria-label')}\n      data-link={isLink ? '' : undefined}\n      data-error={hasError ? '' : undefined}\n      data-warning={hasWarning ? '' : undefined}\n      data-markers={hasMarkers || undefined}\n      onClick={readOnly ? onOpen : undefined}\n    >\n      {textElement}\n      {isReady && (\n        <AnnotationToolbarPopover\n          annotationOpen={open}\n          floatingBoundary={floatingBoundary}\n          onOpenAnnotation={onOpen}\n          onRemoveAnnotation={onRemove}\n          referenceBoundary={referenceBoundary}\n          referenceElement={referenceElement}\n          annotationTextSelected={selected}\n          title={\n            schemaType.i18nTitleKey\n              ? t(schemaType.i18nTitleKey)\n              : schemaType.title || schemaType.name\n          }\n        />\n      )}\n    </Root>\n  )\n}\n","import {type Path} from '@sanity/types'\nimport {type ComponentType, type HTMLProps, type ReactNode, useContext, useMemo} from 'react'\nimport {ReferenceInputOptionsContext} from 'sanity/_singletons'\n\nimport {type ReleaseId} from '../../../perspective/types'\nimport {type TemplatePermissionsResult} from '../../../store'\n\n/** @internal */\nexport interface TemplateOption {\n  id: string\n  params?: Record<string, string | number | boolean>\n}\n\n/**\n * @internal\n */\nexport interface EditReferenceOptions {\n  id: string\n  type: string\n  parentRefPath: Path\n  template: TemplateOption\n  version?: ReleaseId\n}\n\n/** @internal */\nexport interface EditReferenceLinkComponentProps {\n  documentId: string\n  documentType: string\n  parentRefPath: Path\n  template?: TemplateOption\n  children: ReactNode\n}\n\n/**\n * @internal\n */\nexport interface ReferenceInputOptions {\n  /**\n   * Represents the highlighted path if ths current document has a related open\n   * child (e.g. reference in place).\n   */\n  activePath?: {path: Path; state: 'selected' | 'pressed' | 'none'}\n  /**\n   * A specialized `EditReferenceLinkComponent` component that takes in the needed props to open a\n   * referenced document to the right\n   */\n  EditReferenceLinkComponent?: ComponentType<\n    Omit<HTMLProps<'a'>, 'children'> & EditReferenceLinkComponentProps\n  >\n\n  initialValueTemplateItems?: TemplatePermissionsResult[]\n\n  /**\n   * Similar to `EditReferenceChildLink` expect without the wrapping component\n   */\n  onEditReference?: (options: EditReferenceOptions) => void\n\n  /**\n   * Prevent creation of documents from reference fields.\n   */\n  disableNew?: boolean\n}\n\n/**\n * @internal\n */\nexport function useReferenceInputOptions() {\n  return useContext(ReferenceInputOptionsContext)\n}\n\n/**\n * @internal\n */\nexport function ReferenceInputOptionsProvider(\n  props: ReferenceInputOptions & {children: ReactNode},\n) {\n  const {\n    children,\n    activePath,\n    EditReferenceLinkComponent,\n    onEditReference,\n    initialValueTemplateItems,\n    disableNew,\n  } = props\n\n  const contextValue = useMemo(\n    () => ({\n      activePath,\n      EditReferenceLinkComponent,\n      onEditReference,\n      initialValueTemplateItems,\n      disableNew,\n    }),\n    [\n      activePath,\n      EditReferenceLinkComponent,\n      onEditReference,\n      initialValueTemplateItems,\n      disableNew,\n    ],\n  )\n\n  return (\n    <ReferenceInputOptionsContext.Provider value={contextValue}>\n      {children}\n    </ReferenceInputOptionsContext.Provider>\n  )\n}\n","import {useContext} from 'react'\nimport {ReviewChangesContext} from 'sanity/_singletons'\n\nimport {type ReviewChangesContextValue} from './types'\n\n/**\n * @internal\n */\nexport function useReviewChanges(): ReviewChangesContextValue {\n  const reviewChanges = useContext(ReviewChangesContext)\n\n  if (!reviewChanges) {\n    throw new Error('Review changes: missing context value')\n  }\n\n  return reviewChanges\n}\n","import {type ReactNode, useContext, useMemo} from 'react'\nimport {DocumentIdContext} from 'sanity/_singletons'\n\nimport {getDraftId, getPublishedId} from '../../util'\n\nexport function DocumentIdProvider(props: {id: string; children: ReactNode}) {\n  const value = useMemo(() => ({id: props.id}), [props.id])\n  return <DocumentIdContext.Provider value={value}>{props.children}</DocumentIdContext.Provider>\n}\n\nfunction useGivenDocumentId(): string {\n  const ctx = useContext(DocumentIdContext)\n  if (!ctx) {\n    throw new Error('useDocumentId must be used within a DocumentIdProvider')\n  }\n  return ctx.id\n}\n\n/**\n * @internal\n */\nexport function useDocumentIds() {\n  return {draft: useDraftId(), published: usePublishedId()}\n}\n\n/**\n * @deprecated Use `usePublishedId` instead\n */\nexport function useFormPublishedId(): string | undefined {\n  return usePublishedId()\n}\n\n/**\n * @internal\n */\nexport function usePublishedId(): string | undefined {\n  return getPublishedId(useGivenDocumentId())\n}\n\n/**\n * @internal\n */\nexport function useDraftId(): string | undefined {\n  return getDraftId(useGivenDocumentId())\n}\n","import {useContext} from 'react'\nimport {PerspectiveContext} from 'sanity/_singletons'\n\nimport {type PerspectiveContextValue} from './types'\n\n/**\n * @beta\n *\n * React hook that returns the current studio perspective and perspective stack.\n *\n * @returns See {@link PerspectiveContextValue}\n * @example Reading the current perspective stack\n * ```ts\n * function MyComponent() {\n *  const {perspectiveStack} = usePerspective()\n *  // ... do something with the perspective stack , like passing it to the client perspective.\n * }\n * ```\n */\nexport function usePerspective(): PerspectiveContextValue {\n  const context = useContext(PerspectiveContext)\n  if (!context) {\n    throw new Error('usePerspective must be used within a PerspectiveProvider')\n  }\n  return context\n}\n","import {useCallback} from 'react'\nimport scrollIntoView from 'scroll-into-view-if-needed'\n\nimport {useDidUpdate} from './useDidUpdate'\n\n/**\n * A hook to help make sure the parent element of a value edited in a dialog (or \"out of band\") stays\n visible in the background\n * @param elementRef - The element to scroll into view when the proivided focusWithin changes from true to false\n * @param hasFocusWithin - A boolean indicating whether we have has focus within the currently edited value\n */\nexport function useScrollIntoViewOnFocusWithin(\n  elementRef: {current: HTMLElement | null},\n  hasFocusWithin: boolean,\n): void {\n  return useDidUpdate(\n    hasFocusWithin,\n    useCallback(\n      (hadFocus, hasFocus) => {\n        if (elementRef.current && !hadFocus && hasFocus) {\n          scrollIntoView(elementRef.current, {scrollMode: 'always'})\n        }\n      },\n      [elementRef],\n    ),\n  )\n}\n","import {defineEvent} from '@sanity/telemetry'\n\nimport {type DocumentVariantType} from '../../util/getDocumentVariantType'\n\ninterface VersionInfo {\n  /**\n   * document type that was added\n   */\n\n  /**\n   * the origin of the version created (from a draft or from a version)\n   */\n  documentOrigin: DocumentVariantType\n}\n\nexport interface OriginInfo {\n  /**\n   * determines where the release was created, either from the structure view or the release plugin\n   */\n  origin: 'structure' | 'release-plugin'\n}\n\nexport interface RevertInfo {\n  /**\n   * determined whether reverting a release created a new staged release, or immediately reverted\n   */\n  revertType: 'immediate' | 'staged'\n}\n\n/**\n * When a document (version) is successfully added to a release\n */\nexport const AddedVersion = defineEvent<VersionInfo>({\n  name: 'Version Document Added to Release ',\n  version: 1,\n  description: 'User added a document to a release',\n})\n\n/** When a release is successfully created */\nexport const CreatedRelease = defineEvent<OriginInfo>({\n  name: 'Release Created',\n  version: 1,\n  description: 'User created a release',\n})\n\n/** When a release is successfully updated */\nexport const UpdatedRelease = defineEvent({\n  name: 'Release Updated',\n  version: 1,\n  description: 'User updated a release',\n})\n\n/** When a release is successfully deleted */\nexport const DeletedRelease = defineEvent({\n  name: 'Release Deleted',\n  version: 1,\n  description: 'User deleted a release',\n})\n\n/** When a release is successfully published */\nexport const PublishedRelease = defineEvent({\n  name: 'Release Published',\n  version: 1,\n  description: 'User published a release',\n})\n\n/** When a release is successfully scheduled*/\nexport const ScheduledRelease = defineEvent({\n  name: 'Release Scheduled',\n  version: 1,\n  description: 'User scheduled a release',\n})\n\n/** When a release is successfully scheduled */\nexport const UnscheduledRelease = defineEvent({\n  name: 'Release Unscheduled',\n  version: 1,\n  description: 'User unscheduled a release',\n})\n\n/** When a release is successfully archived*/\nexport const ArchivedRelease = defineEvent({\n  name: 'Release Archived',\n  version: 1,\n  description: 'User archived a release',\n})\n\n/** When a release is successfully unarchived */\nexport const UnarchivedRelease = defineEvent({\n  name: 'Release Unarchived',\n  version: 1,\n  description: 'User unarchived a release',\n})\n\n/** When a release is successfully reverted */\nexport const RevertRelease = defineEvent<RevertInfo>({\n  name: 'Release Reverted',\n  version: 1,\n  description: 'User reverted a release',\n})\n","import {type ClientPerspective} from '@sanity/client'\n\nimport {type SourceClientOptions} from '../../config/types'\n\n/**\n * @internal This is the client options used for the releases studio client, using the `X` API version for now\n * Will change to a specific version soon.\n * TODO: Remove after API version is stable and support releases\n */\nexport const RELEASES_STUDIO_CLIENT_OPTIONS: SourceClientOptions = {\n  apiVersion: 'v2025-02-19',\n}\n\n/**\n * @internal Checks if the perspective is a release perspective\n * TODO: Remove after API version is stable and support releases\n */\nexport const isReleasePerspective = (\n  perspective: ClientPerspective | undefined | string | string[],\n): boolean => {\n  if (Array.isArray(perspective)) {\n    return true\n  }\n  return false\n}\n","import {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {map, of} from 'rxjs'\nimport {catchError} from 'rxjs/operators'\n\nimport {useDocumentPreviewStore} from '../../store'\nimport {getPublishedId} from '../../util/draftUtils'\nimport {createSWR} from '../../util/rxSwr'\nimport {RELEASES_STUDIO_CLIENT_OPTIONS} from '../util/releasesClient'\n\nexport interface DocumentPerspectiveProps {\n  documentId: string\n}\n\nexport interface DocumentPerspectiveState {\n  data: string[]\n  error?: unknown\n  loading: boolean\n}\n\nconst swr = createSWR<{documentIds: string[]}>({maxSize: 100})\n\n/**\n * Fetches the document versions for a given document\n * @param props - document Id of the document (might include release id)\n * @returns - data: document versions, loading, errors\n * @hidden\n * @beta\n */\nexport function useDocumentVersions(props: DocumentPerspectiveProps): DocumentPerspectiveState {\n  const {documentId} = props\n\n  const publishedId = getPublishedId(documentId)\n\n  const documentPreviewStore = useDocumentPreviewStore()\n\n  const observable = useMemo(() => {\n    return documentPreviewStore\n      .unstable_observeDocumentIdSet(`sanity::versionOf(\"${publishedId}\")`, undefined, {\n        apiVersion: RELEASES_STUDIO_CLIENT_OPTIONS.apiVersion,\n      })\n      .pipe(\n        swr(`${publishedId}`),\n        map(({value}) => ({\n          data: value.documentIds,\n          loading: false,\n          error: null,\n        })),\n        catchError((error) => {\n          return of({error, data: [] as string[], loading: false})\n        }),\n      )\n  }, [documentPreviewStore, publishedId])\n\n  const result = useObservable(observable, {data: [], error: null, loading: true})\n\n  return result\n}\n","// api extractor take issues with 'as const' for literals\n// eslint-disable-next-line @typescript-eslint/prefer-as-const\nexport const RELEASE_DOCUMENT_TYPE: 'system.release' = 'system.release'\nexport const RELEASE_DOCUMENTS_PATH = '_.releases'\n","import {type ReleaseId} from '../../perspective/types'\nimport {RELEASE_DOCUMENTS_PATH} from '../store/constants'\n\nconst PATH_ID_PREFIX = `${RELEASE_DOCUMENTS_PATH}.`\n\n/**\n * @internal\n * @param releaseDocumentId - the document id of the release\n */\nexport function getReleaseIdFromReleaseDocumentId(releaseDocumentId: string): ReleaseId {\n  if (!releaseDocumentId.startsWith(PATH_ID_PREFIX)) {\n    throw new Error(\n      `Release document ID was ${releaseDocumentId} but should start with ${RELEASE_DOCUMENTS_PATH}`,\n    )\n  }\n  const releaseId = releaseDocumentId.slice(PATH_ID_PREFIX.length)\n  return releaseId as ReleaseId\n}\n","import {type ClientPerspective} from '@sanity/client'\n\nimport {type PerspectiveStack, type ReleaseId} from '../../perspective/types'\nimport {DRAFTS_FOLDER} from '../../util/draftUtils'\nimport {type ReleaseDocument} from '../store/types'\nimport {getReleaseIdFromReleaseDocumentId} from '../util/getReleaseIdFromReleaseDocumentId'\n\nexport function sortReleases(releases: ReleaseDocument[] = []): ReleaseDocument[] {\n  // The order should always be:\n  // [undecided (sortByCreatedAt), scheduled(sortBy publishAt || metadata.intendedPublishAt), asap(sortByCreatedAt)]\n  return [...releases].sort((a, b) => {\n    // undecided are always first, then by createdAt descending\n    if (a.metadata.releaseType === 'undecided' && b.metadata.releaseType !== 'undecided') {\n      return -1\n    }\n    if (a.metadata.releaseType !== 'undecided' && b.metadata.releaseType === 'undecided') {\n      return 1\n    }\n    if (a.metadata.releaseType === 'undecided' && b.metadata.releaseType === 'undecided') {\n      // Sort by createdAt\n      return new Date(b._createdAt).getTime() - new Date(a._createdAt).getTime()\n    }\n\n    // Scheduled are always at the middle, then by publishAt descending\n    if (a.metadata.releaseType === 'scheduled' && b.metadata.releaseType === 'scheduled') {\n      const aPublishAt = a.publishAt || a.metadata.intendedPublishAt\n      if (!aPublishAt) {\n        return 1\n      }\n      const bPublishAt = b.publishAt || b.metadata.intendedPublishAt\n      if (!bPublishAt) {\n        return -1\n      }\n      return new Date(bPublishAt).getTime() - new Date(aPublishAt).getTime()\n    }\n\n    // ASAP are always last, then by createdAt descending\n    if (a.metadata.releaseType === 'asap' && b.metadata.releaseType !== 'asap') {\n      return 1\n    }\n    if (a.metadata.releaseType !== 'asap' && b.metadata.releaseType === 'asap') {\n      return -1\n    }\n    if (a.metadata.releaseType === 'asap' && b.metadata.releaseType === 'asap') {\n      // Sort by createdAt\n      return new Date(b._createdAt).getTime() - new Date(a._createdAt).getTime()\n    }\n\n    return 0\n  })\n}\n\nexport function getReleasesPerspectiveStack({\n  selectedPerspectiveName,\n  releases,\n  excludedPerspectives,\n}: {\n  selectedPerspectiveName: ReleaseId | undefined | 'published'\n  releases: ReleaseDocument[]\n  excludedPerspectives: string[]\n}): PerspectiveStack {\n  if (!selectedPerspectiveName) {\n    return ['drafts']\n  }\n  if (selectedPerspectiveName === 'published') {\n    return ['published']\n  }\n  const sorted: ClientPerspective = sortReleases(releases).map((release) =>\n    getReleaseIdFromReleaseDocumentId(release._id),\n  )\n  const selectedIndex = sorted.indexOf(selectedPerspectiveName)\n  if (selectedIndex === -1) {\n    return []\n  }\n  return sorted\n    .slice(selectedIndex)\n    .concat(DRAFTS_FOLDER)\n    .filter((name) => !excludedPerspectives.includes(name))\n}\n","import {type BadgeTone} from '@sanity/ui'\n\nimport {type ReleaseType} from '../store/types'\n\n/**\n * @internal\n */\nexport const LATEST = 'drafts' as const\n\nexport const PUBLISHED = 'published' as const\n/**\n * @internal\n */\nexport const DEFAULT_RELEASE_TYPE = 'asap'\n\nexport const ARCHIVED_RELEASE_STATES = ['archived', 'published']\n\nexport const RELEASE_TYPES_TONES: Record<ReleaseType, {tone: BadgeTone}> = {\n  asap: {\n    tone: 'caution',\n  },\n  scheduled: {\n    tone: 'suggest',\n  },\n  undecided: {\n    tone: 'neutral',\n  },\n}\n","import {type SanityClient} from '@sanity/client'\nimport {\n  bufferTime,\n  catchError,\n  EMPTY,\n  filter,\n  iif,\n  merge,\n  type Observable,\n  of,\n  startWith,\n  switchMap,\n} from 'rxjs'\n\nimport {getReleaseIdFromReleaseDocumentId} from '../util/getReleaseIdFromReleaseDocumentId'\nimport {type ReleasesMetadata} from './useReleasesMetadata'\n\nexport type ReleasesMetadataMap = Record<string, ReleasesMetadata>\n\nexport type MetadataWrapper = {data: ReleasesMetadataMap | null; error: null; loading: boolean}\n\nconst getFetchQuery = (releaseIds: string[]) => {\n  // projection key must be string - cover the case that a bundle has a number as first char\n  const getSafeKey = (id: string) => `release_${id.replaceAll('-', '_')}`\n\n  return releaseIds.reduce(\n    ({subquery: accSubquery, projection: accProjection}, releaseId) => {\n      const bundleId = getReleaseIdFromReleaseDocumentId(releaseId)\n      // get a version of the id that is safe to use as key in objects\n      const safeId = getSafeKey(bundleId)\n\n      const subquery = `${accSubquery}\"${safeId}\": *[_id in path(\"versions.${bundleId}.*\")]{_updatedAt, \"docId\": string::split(_id, \".\")[2] } | order(_updatedAt desc),`\n\n      const projection = `${accProjection}\"${releaseId}\": {\n              \"updatedAt\": ${safeId}[0]._updatedAt,\n              \"documentIds\": ${safeId}[].docId,\n            },`\n\n      return {subquery, projection}\n    },\n    {subquery: '', projection: ''},\n  )\n}\n\n/**\n * @internal\n *\n * An initial fetch is made. This fetch is polled whenever a listener even is emitted\n * Only releases that have been mutated are re-fetched\n *\n * @returns an Observable that accepts a list of release slugs and returns a stream of metadata\n */\nexport const createReleaseMetadataAggregator = (client: SanityClient | null) => {\n  const aggregatorFetch$ = (\n    releaseIds: string[],\n    isInitialLoad: boolean = false,\n  ): Observable<MetadataWrapper> => {\n    if (!releaseIds?.length || !client) return of({data: null, error: null, loading: false})\n\n    const {subquery: queryAllDocumentsInReleases, projection: projectionToBundleMetadata} =\n      getFetchQuery(releaseIds)\n\n    const fetchData$ = client.observable\n      .fetch<\n        Record<\n          string,\n          Omit<ReleasesMetadata, 'existingDocumentCount'> & {\n            documentIds: string[]\n          }\n        >\n      >(\n        `{${queryAllDocumentsInReleases}}{${projectionToBundleMetadata}}`,\n        {},\n        {tag: 'release-docs.fetch'},\n      )\n      .pipe(\n        switchMap((releaseDocumentIdResponse) =>\n          of({\n            data: Object.entries(releaseDocumentIdResponse).reduce((existing, el) => {\n              const [releaseId, metadata] = el\n              return {\n                ...existing,\n                [releaseId]: {...metadata, documentCount: metadata.documentIds?.length || 0},\n              }\n            }, {}),\n            error: null,\n            loading: false,\n          }),\n        ),\n        catchError((error) => {\n          console.error('Failed to fetch release metadata', error)\n          return of({data: null, error, loading: false})\n        }),\n      )\n\n    // initially emit loading empty state if first fetch\n    return iif(\n      () => isInitialLoad,\n      fetchData$.pipe(startWith({loading: true, data: null, error: null})),\n      fetchData$,\n    )\n  }\n\n  const aggregatorListener$ = (releaseIds: string[]) => {\n    if (!releaseIds?.length || !client) return EMPTY\n\n    return client.observable\n      .listen(\n        `*[(${releaseIds.reduce(\n          (accQuery, releaseId, index) =>\n            `${accQuery}${index === 0 ? '' : ' ||'} _id in path(\"versions.${releaseId}.**\")`,\n          '',\n        )})]`,\n        {},\n        {\n          includeResult: true,\n          includeAllVersions: true,\n          visibility: 'query',\n          events: ['mutation'],\n          tag: 'release-docs.listen',\n        },\n      )\n      .pipe(\n        catchError((error) => {\n          console.error('Failed to listen for release metadata', error)\n          return EMPTY\n        }),\n        bufferTime(1_000),\n        filter((entriesArray) => entriesArray.length > 0),\n        switchMap((entriesArray) => {\n          const mutatedReleaseIds = entriesArray.reduce<string[]>((accReleaseIds, event) => {\n            if ('type' in event && event.type === 'mutation') {\n              const releaseId = event.documentId.split('.')[1]\n              // de-dup mutated bundle slugs\n              if (accReleaseIds.includes(releaseId)) return accReleaseIds\n\n              return [...accReleaseIds, releaseId]\n            }\n            return accReleaseIds\n          }, [])\n\n          if (mutatedReleaseIds.length) {\n            return aggregatorFetch$(mutatedReleaseIds)\n          }\n\n          return EMPTY\n        }),\n      )\n  }\n\n  return (releaseIds: string[]) =>\n    merge(aggregatorFetch$(releaseIds, true), aggregatorListener$(releaseIds))\n}\n","import {type ReleaseDocument} from './types'\n\ninterface BundleDeletedAction {\n  id: string\n  currentUserId?: string\n  deletedByUserId: string\n  type: 'BUNDLE_DELETED'\n}\n\ninterface ReleasesSetAction {\n  payload: ReleaseDocument[] | null\n  type: 'RELEASES_SET'\n}\n\ninterface LoadingStateChangedAction {\n  payload: {\n    loading: boolean\n    error: Error | undefined\n  }\n  type: 'LOADING_STATE_CHANGED'\n}\n\nexport type ReleasesReducerAction =\n  | BundleDeletedAction\n  | ReleasesSetAction\n  | LoadingStateChangedAction\n\nexport interface ReleasesReducerState {\n  releases: Map<string, ReleaseDocument>\n  state: 'initialising' | 'loading' | 'loaded' | 'error'\n  error?: Error\n}\n\nfunction createReleasesSet(releases: ReleaseDocument[] | null) {\n  return (releases ?? []).reduce((acc, bundle) => {\n    acc.set(bundle._id, bundle)\n    return acc\n  }, new Map<string, ReleaseDocument>())\n}\n\nexport function releasesReducer(\n  state: ReleasesReducerState,\n  action: ReleasesReducerAction,\n): ReleasesReducerState {\n  switch (action.type) {\n    case 'LOADING_STATE_CHANGED': {\n      return {\n        ...state,\n        state: action.payload.loading ? 'loading' : 'loaded',\n        error: action.payload.error,\n      }\n    }\n\n    case 'RELEASES_SET': {\n      // Create an object with the BUNDLE id as key\n      const releasesById = createReleasesSet(action.payload)\n\n      return {\n        ...state,\n        releases: releasesById,\n      }\n    }\n\n    default:\n      return state\n  }\n}\n","import {type SanityClient} from '@sanity/client'\nimport {\n  BehaviorSubject,\n  catchError,\n  concat,\n  concatWith,\n  count,\n  filter,\n  from,\n  merge,\n  type Observable,\n  of,\n  type OperatorFunction,\n  pipe,\n  scan,\n  shareReplay,\n  Subject,\n  switchMap,\n  tap,\n} from 'rxjs'\nimport {distinctUntilChanged, map, startWith} from 'rxjs/operators'\n\nimport {type DocumentPreviewStore} from '../../preview'\nimport {listenQuery} from '../../store/_legacy'\nimport {RELEASE_DOCUMENT_TYPE, RELEASE_DOCUMENTS_PATH} from './constants'\nimport {createReleaseMetadataAggregator} from './createReleaseMetadataAggregator'\nimport {releasesReducer, type ReleasesReducerAction, type ReleasesReducerState} from './reducer'\nimport {type ReleaseDocument, type ReleaseStore, type ReleaseType} from './types'\n\ntype ActionWrapper = {action: ReleasesReducerAction}\ntype ResponseWrapper = {response: ReleaseDocument[]}\n\nexport const SORT_FIELD = '_createdAt'\nexport const SORT_ORDER = 'desc'\n\nconst QUERY_FILTER = `_type==\"${RELEASE_DOCUMENT_TYPE}\" && _id in path(\"${RELEASE_DOCUMENTS_PATH}.*\")`\n\nconst DEFAULT_RELEASE_TYPE: ReleaseType = 'undecided'\nconst QUERY_PROJECTION = `{\n  _id,\n  _type,\n  _rev,\n  _createdAt,\n  _updatedAt,\n  state,\n  finalDocumentStates,\n  publishAt,\n  publishedAt,\n  \"metadata\": coalesce(metadata, {\n    \"title\": \"\",\n    \"releaseType\": \"${DEFAULT_RELEASE_TYPE}\",\n  }),\n  // Content Lake initially encoded non-error states as {error: {message: \"\"}}. This projection\n  // ensures the error field only appears if the document has a non-empty error message.\n  ...select(\n    length(error.message) > 0 => { error },\n    {}\n  ),\n}`\n\n// Newest releases first\nconst QUERY_SORT_ORDER = `order(${SORT_FIELD} ${SORT_ORDER})`\n\nconst QUERY = `*[${QUERY_FILTER}] ${QUERY_PROJECTION} | ${QUERY_SORT_ORDER}`\n\nconst INITIAL_STATE: ReleasesReducerState = {\n  releases: new Map(),\n  state: 'initialising' as const,\n}\n\n/**\n * The releases store is initialised lazily when first subscribed to. Upon subscription, it will\n * fetch a list of releases and create a listener to keep the locally held state fresh.\n *\n * The store is not disposed of when all subscriptions are closed. After it has been initialised,\n * it will keep listening for the duration of the app's lifecycle. Subsequent subscriptions will be\n * given the latest state upon subscription.\n */\nexport function createReleaseStore(context: {\n  previewStore: DocumentPreviewStore\n  client: SanityClient\n}): ReleaseStore {\n  const {client} = context\n\n  const dispatch$ = new Subject<ReleasesReducerAction>()\n  const fetchPending$ = new BehaviorSubject<boolean>(false)\n\n  function dispatch(action: ReleasesReducerAction): void {\n    dispatch$.next(action)\n  }\n\n  const listFetch$ = of<ActionWrapper>({\n    action: {\n      type: 'LOADING_STATE_CHANGED',\n      payload: {\n        loading: true,\n        error: undefined,\n      },\n    },\n  }).pipe(\n    // Ignore invocations while the list fetch is pending.\n    filter(() => !fetchPending$.value),\n    tap(() => fetchPending$.next(true)),\n    concatWith(\n      listenQuery(client, QUERY, {}, {tag: 'releases.listen'}).pipe(\n        tap(() => fetchPending$.next(false)),\n        map((releases) => ({response: releases})),\n      ),\n    ),\n\n    catchError((error) =>\n      of<ActionWrapper>({\n        action: {\n          type: 'LOADING_STATE_CHANGED',\n          payload: {\n            loading: false,\n            error,\n          },\n        },\n      }),\n    ),\n    switchMap<ActionWrapper | ResponseWrapper, Observable<ReleasesReducerAction | undefined>>(\n      (entry) => {\n        if ('action' in entry) {\n          return of<ReleasesReducerAction>(entry.action)\n        }\n\n        return of<ReleasesReducerAction[]>(\n          {type: 'RELEASES_SET', payload: entry.response},\n          {\n            type: 'LOADING_STATE_CHANGED',\n            payload: {\n              loading: false,\n              error: undefined,\n            },\n          },\n        )\n      },\n    ),\n  )\n\n  const state$ = concat(merge(listFetch$, dispatch$)).pipe(\n    filter((action): action is ReleasesReducerAction => typeof action !== 'undefined'),\n    scan((state, action) => releasesReducer(state, action), INITIAL_STATE),\n    startWith(INITIAL_STATE),\n    shareReplay(1),\n  )\n\n  const errorCount$ = state$.pipe(releaseStoreErrorCount(), shareReplay(1))\n\n  const getMetadataStateForSlugs$ = createReleaseMetadataAggregator(client)\n\n  return {\n    state$,\n    errorCount$,\n    getMetadataStateForSlugs$,\n    dispatch,\n  }\n}\n\n/**\n * @internal\n */\nexport function releaseStoreErrorCount(): OperatorFunction<ReleasesReducerState, number> {\n  return pipe(\n    switchMap(({releases}) =>\n      from(releases.values()).pipe(\n        filter((release) => release.state === 'active'),\n        filter((release) => typeof release.error !== 'undefined'),\n        count(),\n      ),\n    ),\n    distinctUntilChanged(),\n  )\n}\n","import {useMemo} from 'react'\n\nimport {useClient} from '../../hooks'\nimport {useDocumentPreviewStore, useResourceCache} from '../../store'\nimport {useWorkspace} from '../../studio'\nimport {RELEASES_STUDIO_CLIENT_OPTIONS} from '../util/releasesClient'\nimport {createReleaseStore} from './createReleaseStore'\nimport {type ReleaseStore} from './types'\n\n/** @internal */\nexport function useReleasesStore(): ReleaseStore {\n  const resourceCache = useResourceCache()\n  const workspace = useWorkspace()\n  const previewStore = useDocumentPreviewStore()\n  const studioClient = useClient(RELEASES_STUDIO_CLIENT_OPTIONS)\n\n  return useMemo(() => {\n    const releaseStore =\n      resourceCache.get<ReleaseStore>({\n        dependencies: [workspace, previewStore],\n        namespace: 'ReleasesStore',\n      }) ||\n      createReleaseStore({\n        client: studioClient,\n        previewStore,\n      })\n\n    resourceCache.set({\n      dependencies: [workspace, previewStore],\n      namespace: 'ReleasesStore',\n      value: releaseStore,\n    })\n\n    return releaseStore\n  }, [resourceCache, workspace, studioClient, previewStore])\n}\n","import {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\n\nimport {sortReleases} from '../hooks/utils'\nimport {ARCHIVED_RELEASE_STATES} from '../util/const'\nimport {type ReleasesReducerAction} from './reducer'\nimport {type ReleaseDocument} from './types'\nimport {useReleasesStore} from './useReleasesStore'\n\ninterface ReleasesState {\n  /**\n   * Sorted array of releases, excluding archived releases\n   */\n  data: ReleaseDocument[]\n  error?: Error\n  loading: boolean\n  dispatch: (event: ReleasesReducerAction) => void\n}\n\n/**\n * Hook to get the (non archived, non published) active releases\n * @internal\n */\nexport function useActiveReleases(): ReleasesState {\n  const {state$, dispatch} = useReleasesStore()\n  const state = useObservable(state$)!\n  const releasesAsArray = useMemo(\n    () =>\n      sortReleases(\n        Array.from(state.releases.values()).filter(\n          (release) => !ARCHIVED_RELEASE_STATES.includes(release.state),\n        ),\n      ).reverse(),\n    [state.releases],\n  )\n\n  return useMemo(\n    () => ({\n      data: releasesAsArray,\n      dispatch,\n      error: state.error,\n      loading: ['loading', 'initialising'].includes(state.state),\n    }),\n    [releasesAsArray, state.error, state.state, dispatch],\n  )\n}\n","import {useMemo} from 'react'\n\nimport {getVersionFromId} from '../../util/draftUtils'\nimport {type ReleaseDocument, type ReleaseType} from '../store/types'\nimport {useActiveReleases} from '../store/useActiveReleases'\nimport {getReleaseIdFromReleaseDocumentId} from '../util/getReleaseIdFromReleaseDocumentId'\nimport {useDocumentVersions} from './useDocumentVersions'\n\nconst orderedReleaseTypes: ReleaseType[] = ['asap', 'scheduled', 'undecided']\n\nexport interface useDocumentVersionTypeSortedListState {\n  sortedDocumentList: ReleaseDocument[]\n}\n\n/**\n * Fetches the document versions for a given document and sorts them by release type\n *\n * @param documentId - document id related to the document version list\n * @returns object with sortedDocumentList\n *\n * @beta\n */\nexport const useDocumentVersionTypeSortedList = ({\n  documentId,\n}: {\n  documentId: string\n}): useDocumentVersionTypeSortedListState => {\n  const {data: releases} = useActiveReleases()\n  const {data: documentVersions} = useDocumentVersions({documentId})\n\n  const sortedDocumentList = releases\n    .filter(({_id}) => {\n      return documentVersions.some(\n        (id) => getVersionFromId(id) === getReleaseIdFromReleaseDocumentId(_id),\n      )\n    })\n    /**  sort the document lists that exist for a specific document Id based on the order of the release types\n     * it will first put the \"asap\" releases then \"scheduled\" and finally \"undecided\"\n     * orderedReleaseTypes is the order of the release types\n     * */\n    .sort((releasesList, compareReleasesList) => {\n      // reverse order of published at / intended to publish at\n      if (\n        releasesList.metadata.releaseType === 'scheduled' &&\n        compareReleasesList.metadata.releaseType === 'scheduled'\n      ) {\n        const aPublishAt = releasesList.publishAt || releasesList.metadata.intendedPublishAt\n        if (!aPublishAt) {\n          return -1\n        }\n        const bPublishAt =\n          compareReleasesList.publishAt || compareReleasesList.metadata.intendedPublishAt\n        if (!bPublishAt) {\n          return 1\n        }\n        return new Date(aPublishAt).getTime() - new Date(bPublishAt).getTime()\n      }\n\n      return (\n        orderedReleaseTypes.indexOf(releasesList.metadata.releaseType) -\n        orderedReleaseTypes.indexOf(compareReleasesList.metadata.releaseType)\n      )\n    })\n\n  return useMemo(\n    () => ({\n      /**\n       * Sorted document list by existing document versions and release type\n       */\n      sortedDocumentList: sortedDocumentList,\n    }),\n    [sortedDocumentList],\n  )\n}\n","import {type SanityDocument} from '@sanity/types'\nimport {type Dispatch} from 'react'\nimport {type Observable} from 'rxjs'\n\nimport {type PartialExcept} from '../../util'\nimport {RELEASE_DOCUMENT_TYPE} from './constants'\nimport {type MetadataWrapper} from './createReleaseMetadataAggregator'\nimport {type ReleasesReducerAction, type ReleasesReducerState} from './reducer'\n\n/**\n * @beta\n */\nexport const releaseTypes = ['asap', 'scheduled', 'undecided'] as const\n\n/**\n * @beta\n */\nexport type ReleaseType = (typeof releaseTypes)[number]\n\n/**\n * @beta\n */\nexport function isReleaseType(maybeReleaseType: unknown): maybeReleaseType is ReleaseType {\n  return (\n    typeof maybeReleaseType === 'string' && releaseTypes.includes(maybeReleaseType as ReleaseType)\n  )\n}\n\n/**\n * @beta\n */\nexport type ReleaseState =\n  | 'active'\n  | 'archiving'\n  | 'unarchiving'\n  | 'archived'\n  | 'published'\n  | 'publishing'\n  | 'scheduled'\n  | 'scheduling'\n\n/**\n * @beta\n */\nexport type ReleaseFinalDocumentState = {\n  /** Document ID */\n  id: string\n}\n\n/**\n * @beta\n */\nexport interface ReleaseDocument extends SanityDocument {\n  /**\n   * typically\n   * `_.releases.<name>`\n   */\n  _id: string\n  _type: typeof RELEASE_DOCUMENT_TYPE\n  _createdAt: string\n  _updatedAt: string\n  _rev: string\n  state: ReleaseState\n  error?: {\n    message: string\n  }\n  finalDocumentStates?: ReleaseFinalDocumentState[]\n  /**\n   * If defined, it takes precedence over the intendedPublishAt, the state should be 'scheduled'\n   */\n  publishAt?: string\n  /**\n   * If defined, it provides the time the release was actually published\n   */\n  publishedAt?: string\n  metadata: {\n    title: string\n    description?: string\n\n    intendedPublishAt?: string\n    // todo: the below properties should probably live at the system document\n    releaseType: ReleaseType\n  }\n}\n\n/**\n * @internal\n */\nexport type EditableReleaseDocument = Omit<\n  PartialExcept<ReleaseDocument, '_id'>,\n  'metadata' | '_type'\n> & {\n  _id: string\n  metadata: Partial<ReleaseDocument['metadata']>\n}\n\n/**\n * @internal\n */\nexport function isReleaseDocument(doc: unknown): doc is ReleaseDocument {\n  return (\n    typeof doc === 'object' && doc !== null && '_type' in doc && doc._type === RELEASE_DOCUMENT_TYPE\n  )\n}\n\n/**\n * @internal\n */\nexport interface ReleaseStore {\n  state$: Observable<ReleasesReducerState>\n  /**\n   * Counts all loaded release documents that are in an active state and have an error recorded.\n   * This is determined by the presence of the `error` field in the release document.\n   */\n  errorCount$: Observable<number>\n  getMetadataStateForSlugs$: (slugs: string[]) => Observable<MetadataWrapper>\n  dispatch: Dispatch<ReleasesReducerAction>\n}\n\n/**\n * @internal\n */\nexport interface VersionInfoDocumentStub {\n  _id: string\n  _rev: string\n  _createdAt: string\n  _updatedAt: string\n}\n","import {customAlphabet} from 'nanoid'\n\nimport {RELEASE_DOCUMENTS_PATH} from '../store/constants'\n\n/**\n * ~24 years (or 7.54e+8 seconds) needed, in order to have a 1% probability of at least one collision if 10 ID's are generated every hour.\n */\nconst createBundleId = customAlphabet(\n  'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',\n  8,\n)\n\n/**\n * Create a unique release id. This is used as the release id for documents included in the release.\n * @internal\n */\nexport function createReleaseId() {\n  return `${RELEASE_DOCUMENTS_PATH}.r${createBundleId()}`\n}\n","import {type SelectedPerspective} from '../../perspective/types'\nimport {formatRelativeLocale, getVersionFromId, isVersionId} from '../../util'\nimport {type EditableReleaseDocument, type ReleaseDocument, type ReleaseState} from '../store/types'\nimport {DEFAULT_RELEASE_TYPE, LATEST} from './const'\nimport {createReleaseId} from './createReleaseId'\n\n/** @internal */\nexport type NotArchivedRelease = ReleaseDocument & {state: Exclude<ReleaseState, 'archived'>}\n\n/**\n * @beta\n * @param documentId - The document id, e.g. `my-document-id` or `drafts.my-document-id` or `summer.my-document-id`\n * @param perspective - The current perspective, e.g. `release.summer` or undefined, it can be obtained from `useRouter().stickyParams.perspective`\n * @returns boolean - `true` if the document is in the current perspective.\n * e.g:\n * - document: `summer.my-document-id`, perspective: `release.summer` : **true**\n * - document: `my-document-id`, perspective: `release.summer` : **false**\n * - document: `summer.my-document-id`perspective: `release.winter` : **false**\n * - document: `summer.my-document-id`, perspective: `undefined` : **false**\n * - document: `my-document-id`, perspective: `undefined` : **true**\n * - document: `drafts.my-document-id`, perspective: `undefined` : **true**\n */\nexport function getDocumentIsInPerspective(\n  documentId: string,\n  perspective: string | undefined,\n): boolean {\n  const releaseId = getVersionFromId(documentId)\n\n  if (!perspective) return !isVersionId(documentId)\n\n  if (typeof perspective === 'undefined') return false\n  // perspective is `release.${releaseId}`\n\n  if (releaseId === 'Published') return false\n  return releaseId === perspective\n}\n\nexport function isDraftOrPublished(versionName: string): boolean {\n  return versionName === 'drafts' || versionName === 'published'\n}\n\n/** @internal */\nexport function getPublishDateFromRelease(release: ReleaseDocument): Date | null {\n  const dateString = release.publishedAt || release.publishAt || release.metadata.intendedPublishAt\n\n  if (!dateString) return null\n\n  return new Date(dateString)\n}\n\n/** @internal */\nexport function formatRelativeLocalePublishDate(release: ReleaseDocument): string {\n  const publishDate = getPublishDateFromRelease(release)\n\n  if (!publishDate) return ''\n  return formatRelativeLocale(publishDate, new Date())\n}\n\n/** @internal */\nexport function isPublishedPerspective(\n  perspective: SelectedPerspective | string,\n): perspective is 'published' {\n  return perspective === 'published'\n}\n\n/** @internal */\nexport function isDraftPerspective(\n  perspective: SelectedPerspective | string,\n): perspective is 'drafts' {\n  return perspective === LATEST\n}\n\n/** @internal */\nexport function isReleaseScheduledOrScheduling(release: ReleaseDocument): boolean {\n  return (\n    release.metadata.releaseType === 'scheduled' &&\n    (release.state === 'scheduled' || release.state === 'scheduling')\n  )\n}\n\n/** @internal */\nexport const getReleaseDefaults: () => EditableReleaseDocument = () => ({\n  _id: createReleaseId(),\n  metadata: {\n    title: '',\n    description: '',\n    releaseType: DEFAULT_RELEASE_TYPE,\n  },\n})\n\n/**\n * Check if the release is archived\n *\n * @internal */\nexport function isNotArchivedRelease(release: ReleaseDocument): release is NotArchivedRelease {\n  return release.state !== 'archived'\n}\n","import {usePerspective} from '../../perspective/usePerspective'\nimport {isReleaseDocument} from '../store/types'\nimport {isDraftPerspective, isPublishedPerspective} from '../util/util'\n\n/** @internal */\nexport const useIsReleaseActive = () => {\n  const {selectedPerspective} = usePerspective()\n\n  return (\n    !isPublishedPerspective(selectedPerspective) &&\n    (isDraftPerspective(selectedPerspective) ||\n      (isReleaseDocument(selectedPerspective) && selectedPerspective.state === 'active'))\n  )\n}\n","import {isVersionId} from '../../util/draftUtils'\nimport {useDocumentVersions} from './useDocumentVersions'\n\n/**\n * Returns a boolean if the document has only versions\n *\n * @param documentId - document id related to the document version list\n * @returns if the document has only versions\n *\n * @beta\n */\nexport const useOnlyHasVersions = ({documentId}: {documentId: string}): boolean => {\n  const {data: documentVersions} = useDocumentVersions({documentId})\n\n  const onlyHasVersions =\n    documentVersions &&\n    documentVersions.length > 0 &&\n    !documentVersions.some((version) => !isVersionId(version))\n\n  return onlyHasVersions\n}\n","import {useCallback} from 'react'\nimport {useRouter} from 'sanity/router'\n\nimport {type ReleaseId} from './types'\n\n/**\n * @internal\n */\nexport function useSetPerspective() {\n  const router = useRouter()\n  const setPerspective = useCallback(\n    (releaseId: 'published' | 'drafts' | ReleaseId | undefined) => {\n      router.navigate({\n        stickyParams: {\n          excludedPerspectives: null,\n          perspective: releaseId === 'drafts' ? '' : releaseId,\n        },\n      })\n    },\n    [router],\n  )\n  return setPerspective\n}\n","import {useContext} from 'react'\nimport {ReleasesUpsellContext} from 'sanity/_singletons'\n\nimport {type ReleasesUpsellContextValue} from './types'\n\n/**\n * @beta\n * @hidden\n */\nexport function useReleasesUpsell(): ReleasesUpsellContextValue {\n  const value = useContext(ReleasesUpsellContext)\n\n  if (!value) return FALLBACK_CONTEXT_VALUE\n\n  return value\n}\n\nconst FALLBACK_CONTEXT_VALUE = {\n  upsellDialogOpen: false,\n  mode: 'default' as const,\n  onReleaseLimitReached: () => null,\n  guardWithReleaseLimitUpsell: async () => undefined,\n  telemetryLogs: {\n    dialogSecondaryClicked: () => null,\n    dialogPrimaryClicked: () => null,\n    panelViewed: () => null,\n    panelDismissed: () => null,\n    panelPrimaryClicked: () => null,\n    panelSecondaryClicked: () => null,\n  },\n} satisfies ReleasesUpsellContextValue\n","import {isReference} from '@sanity/types'\nimport {omit} from 'lodash'\n\n/**\n * This is almost identical to the existing `strengthenOnPublish` function, but it omits only the\n * `_weak` property.\n *\n * The strengthen-on-publish process is not necessary for documents inside a release, and in fact\n * must be skipped in order for release preflight checks to function. Therefore, when creating a\n * version of a document, the `_weak` property must be removed from any existing reference that is\n * set to strengthen on publish.\n *\n * The `_strengthenOnPublish` field itself is always set, regardless of whether the\n * strengthen-on-publish process should be used. This is because the field is used to store details\n * such as the non-existing document's type, which Studio uses to render reference previews.\n *\n * Content Lake will only strengthen the reference if **both** `_strengthenOnPublish` and `_weak`\n * are truthy.\n *\n * Yes, this is confusing.\n */\nexport function prepareVersionReferences<T = any>(obj: T): T {\n  if (isReference(obj)) {\n    const isStrengthenOnPublish = typeof obj._strengthenOnPublish !== 'undefined'\n    const isSchemaMandatedWeakReference = obj._strengthenOnPublish?.weak === true\n\n    if (isStrengthenOnPublish && !isSchemaMandatedWeakReference) {\n      return omit(obj, ['_weak']) as T\n    }\n\n    return obj\n  }\n  if (typeof obj !== 'object' || !obj) return obj\n  if (Array.isArray(obj)) return obj.map(prepareVersionReferences) as T\n  return Object.fromEntries(\n    Object.entries(obj).map(([key, value]) => [key, prepareVersionReferences(value)] as const),\n  ) as T\n}\n","type ErrorWithDetails = {details?: {type?: string}}\n\nexport const isErrorWithDetails = (error: unknown): error is ErrorWithDetails =>\n  typeof error === 'object' &&\n  error !== null &&\n  'details' in error &&\n  typeof (error as {details: unknown}).details === 'object'\n","import {isErrorWithDetails} from '../../error/types/isErrorWithDetails'\n\ntype ReleaseLimitError = {details: {type: 'releaseLimitExceededError'; limit: number}}\n\nexport const isReleaseLimitError = (error: unknown): error is ReleaseLimitError =>\n  isErrorWithDetails(error) && error.details?.type === 'releaseLimitExceededError'\n","import {\n  type Action,\n  type EditAction,\n  type IdentifiedSanityDocumentStub,\n  type SanityClient,\n} from '@sanity/client'\n\nimport {getPublishedId, getVersionId} from '../../util'\nimport {type ReleasesUpsellContextValue} from '../contexts/upsell/types'\nimport {getReleaseIdFromReleaseDocumentId, type ReleaseDocument} from '../index'\nimport {type RevertDocument} from '../tool/components/releaseCTAButtons/ReleaseRevertButton/useDocumentRevertStates'\nimport {prepareVersionReferences} from '../util/prepareVersionReferences'\nimport {isReleaseLimitError} from './isReleaseLimitError'\nimport {type EditableReleaseDocument} from './types'\n\ninterface operationsOptions {\n  dryRun?: boolean\n  skipCrossDatasetValidation?: boolean\n}\nexport interface ReleaseOperationsStore {\n  publishRelease: (releaseId: string, opts?: operationsOptions) => Promise<void>\n  schedule: (releaseId: string, date: Date, opts?: operationsOptions) => Promise<void>\n  //todo: reschedule: (releaseId: string, newDate: Date) => Promise<void>\n  unschedule: (releaseId: string, opts?: operationsOptions) => Promise<void>\n  archive: (releaseId: string, opts?: operationsOptions) => Promise<void>\n  unarchive: (releaseId: string, opts?: operationsOptions) => Promise<void>\n  updateRelease: (release: EditableReleaseDocument, opts?: operationsOptions) => Promise<void>\n  createRelease: (release: EditableReleaseDocument, opts?: operationsOptions) => Promise<void>\n  deleteRelease: (releaseId: string, opts?: operationsOptions) => Promise<void>\n  revertRelease: (\n    revertReleaseId: string,\n    documents: RevertDocument[],\n    releaseMetadata: ReleaseDocument['metadata'],\n    revertType: 'staged' | 'immediate',\n    opts?: operationsOptions,\n  ) => Promise<void>\n  createVersion: (\n    releaseId: string,\n    documentId: string,\n    initialvalue?: Record<string, unknown>,\n    opts?: operationsOptions,\n  ) => Promise<void>\n  discardVersion: (releaseId: string, documentId: string, opts?: operationsOptions) => Promise<void>\n  unpublishVersion: (documentId: string, opts?: operationsOptions) => Promise<void>\n}\n\nconst METADATA_PROPERTY_NAME = 'metadata'\n\nexport function createReleaseOperationsStore(options: {\n  client: SanityClient\n  onReleaseLimitReached: ReleasesUpsellContextValue['onReleaseLimitReached']\n}): ReleaseOperationsStore {\n  const {client} = options\n  const requestAction = createRequestAction(options.onReleaseLimitReached)\n\n  const handleCreateRelease = (release: EditableReleaseDocument, opts?: operationsOptions) =>\n    requestAction(\n      client,\n      {\n        actionType: 'sanity.action.release.create',\n        releaseId: getReleaseIdFromReleaseDocumentId(release._id),\n        [METADATA_PROPERTY_NAME]: release.metadata,\n      },\n      opts,\n    )\n\n  const handleUpdateRelease = async (\n    release: EditableReleaseDocument,\n    opts?: operationsOptions,\n  ) => {\n    const bundleId = getReleaseIdFromReleaseDocumentId(release._id)\n\n    const unsetKeys = Object.entries(release)\n      .filter(([_, value]) => value === undefined)\n      .map(([key]) => `${METADATA_PROPERTY_NAME}.${key}`)\n\n    await requestAction(\n      client,\n      {\n        actionType: 'sanity.action.release.edit',\n        releaseId: bundleId,\n        patch: {\n          // todo: consider more granular updates here\n          set: {[METADATA_PROPERTY_NAME]: release.metadata},\n          unset: unsetKeys,\n        },\n      },\n      opts,\n    )\n  }\n\n  const handlePublishRelease = (releaseId: string, opts?: operationsOptions) =>\n    requestAction(\n      client,\n      [\n        {\n          actionType: 'sanity.action.release.publish',\n          releaseId: getReleaseIdFromReleaseDocumentId(releaseId),\n        },\n      ],\n      opts,\n    )\n\n  const handleScheduleRelease = (releaseId: string, publishAt: Date, opts?: operationsOptions) =>\n    requestAction(\n      client,\n      [\n        {\n          actionType: 'sanity.action.release.schedule',\n          releaseId: getReleaseIdFromReleaseDocumentId(releaseId),\n          publishAt: publishAt.toISOString(),\n        },\n      ],\n      opts,\n    )\n\n  const handleUnscheduleRelease = (releaseId: string, opts?: operationsOptions) =>\n    requestAction(\n      client,\n      [\n        {\n          actionType: 'sanity.action.release.unschedule',\n          releaseId: getReleaseIdFromReleaseDocumentId(releaseId),\n        },\n      ],\n      opts,\n    )\n\n  const handleArchiveRelease = (releaseId: string, opts?: operationsOptions) =>\n    requestAction(\n      client,\n      [\n        {\n          actionType: 'sanity.action.release.archive',\n          releaseId: getReleaseIdFromReleaseDocumentId(releaseId),\n        },\n      ],\n      opts,\n    )\n\n  const handleUnarchiveRelease = (releaseId: string, opts?: operationsOptions) =>\n    requestAction(\n      client,\n      [\n        {\n          actionType: 'sanity.action.release.unarchive',\n          releaseId: getReleaseIdFromReleaseDocumentId(releaseId),\n        },\n      ],\n      opts,\n    )\n\n  const handleDeleteRelease = (releaseId: string, opts?: operationsOptions) =>\n    requestAction(\n      client,\n      [\n        {\n          actionType: 'sanity.action.release.delete',\n          releaseId: getReleaseIdFromReleaseDocumentId(releaseId),\n        },\n      ],\n      opts,\n    )\n\n  const handleCreateVersion = async (\n    releaseId: string,\n    documentId: string,\n    initialValue?: Record<string, unknown>,\n    opts?: operationsOptions,\n  ) => {\n    // the documentId will show you where the document is coming from and which\n    // document should it copy from\n\n    // fetch original document\n    const document = await client.getDocument(documentId)\n\n    if (!document && !initialValue) {\n      throw new Error(`Document with id ${documentId} not found and no initial value provided`)\n    }\n\n    const versionDocument = prepareVersionReferences({\n      ...(document || {}),\n      ...(initialValue || {}),\n      _id: getVersionId(documentId, releaseId),\n    }) as IdentifiedSanityDocumentStub\n\n    await requestAction(\n      client,\n      [\n        {\n          actionType: 'sanity.action.document.version.create',\n          publishedId: getPublishedId(documentId),\n          document: versionDocument,\n        },\n      ],\n      opts,\n    )\n  }\n\n  const handleDiscardVersion = (releaseId: string, documentId: string, opts?: operationsOptions) =>\n    requestAction(\n      client,\n      [\n        {\n          actionType: 'sanity.action.document.version.discard',\n          versionId: getVersionId(documentId, releaseId),\n          purge: false, // keep document history\n        },\n      ],\n      opts,\n    )\n\n  const handleUnpublishVersion = (documentId: string) =>\n    requestAction(client, [\n      {\n        actionType: 'sanity.action.document.version.unpublish',\n        versionId: documentId,\n        publishedId: getPublishedId(documentId),\n      },\n    ])\n\n  const handleRevertRelease = async (\n    revertReleaseId: string,\n    releaseDocuments: RevertDocument[],\n    releaseMetadata: ReleaseDocument['metadata'],\n    revertType: 'staged' | 'immediate',\n  ) => {\n    await handleCreateRelease({\n      _id: revertReleaseId,\n      metadata: {\n        title: releaseMetadata.title,\n        description: releaseMetadata.description,\n        releaseType: 'asap',\n      },\n    })\n    await Promise.allSettled(\n      releaseDocuments.map((document) =>\n        handleCreateVersion(\n          getReleaseIdFromReleaseDocumentId(revertReleaseId),\n          document._id,\n          document,\n        ),\n      ),\n    )\n\n    if (revertType === 'immediate') {\n      await handlePublishRelease(revertReleaseId)\n    }\n  }\n\n  return {\n    archive: handleArchiveRelease,\n    unarchive: handleUnarchiveRelease,\n    schedule: handleScheduleRelease,\n    unschedule: handleUnscheduleRelease,\n    createRelease: handleCreateRelease,\n    updateRelease: handleUpdateRelease,\n    publishRelease: handlePublishRelease,\n    deleteRelease: handleDeleteRelease,\n    revertRelease: handleRevertRelease,\n    createVersion: handleCreateVersion,\n    discardVersion: handleDiscardVersion,\n    unpublishVersion: handleUnpublishVersion,\n  }\n}\n\ninterface ScheduleApiAction {\n  actionType: 'sanity.action.release.schedule'\n  releaseId: string\n  publishAt: string\n  dryRun?: boolean\n  skipCrossDatasetValidation?: boolean\n}\n\ninterface PublishApiAction {\n  actionType: 'sanity.action.release.publish'\n  releaseId: string\n}\n\ninterface ArchiveApiAction {\n  actionType: 'sanity.action.release.archive'\n  releaseId: string\n}\n\ninterface UnarchiveApiAction {\n  actionType: 'sanity.action.release.unarchive'\n  releaseId: string\n}\n\ninterface UnscheduleApiAction {\n  actionType: 'sanity.action.release.unschedule'\n  releaseId: string\n}\n\ninterface CreateReleaseApiAction {\n  actionType: 'sanity.action.release.create'\n  releaseId: string\n  [METADATA_PROPERTY_NAME]?: Partial<ReleaseDocument['metadata']>\n}\n\ninterface CreateVersionReleaseApiAction {\n  actionType: 'sanity.action.document.version.create'\n  publishedId: string\n  document: IdentifiedSanityDocumentStub\n}\n\ninterface UnpublishVersionReleaseApiAction {\n  actionType: 'sanity.action.document.version.unpublish'\n  versionId: string\n  publishedId: string\n}\n\ninterface DiscardVersionReleaseApiAction {\n  actionType: 'sanity.action.document.version.discard'\n  versionId: string\n  purge?: boolean\n}\n\ninterface EditReleaseApiAction {\n  actionType: 'sanity.action.release.edit'\n  releaseId: string\n  patch: EditAction['patch']\n}\n\ninterface DeleteApiAction {\n  actionType: 'sanity.action.release.delete'\n  releaseId: string\n}\n\ntype ReleaseAction =\n  | Action\n  | ScheduleApiAction\n  | PublishApiAction\n  | CreateReleaseApiAction\n  | EditReleaseApiAction\n  | UnscheduleApiAction\n  | ArchiveApiAction\n  | UnarchiveApiAction\n  | DeleteApiAction\n  | CreateVersionReleaseApiAction\n  | UnpublishVersionReleaseApiAction\n  | DiscardVersionReleaseApiAction\n\nexport function createRequestAction(\n  onReleaseLimitReached: ReleasesUpsellContextValue['onReleaseLimitReached'],\n) {\n  return async function requestAction(\n    client: SanityClient,\n    actions: ReleaseAction | ReleaseAction[],\n    options?: operationsOptions,\n  ): Promise<void> {\n    const {dataset} = client.config()\n    try {\n      return await client.request({\n        uri: `/data/actions/${dataset}`,\n        method: 'POST',\n        body: {\n          ...options,\n          actions: Array.isArray(actions) ? actions : [actions],\n        },\n      })\n    } catch (e) {\n      // if dryRunning then essentially this is a silent request\n      // so don't want to create disruptive upsell because of limit\n      if (!options?.dryRun && isReleaseLimitError(e)) {\n        // free accounts do not return limit, 0 is implied\n        onReleaseLimitReached(e.details.limit || 0)\n      }\n\n      throw e\n    }\n  }\n}\n","import {useMemo} from 'react'\n\nimport {useClient} from '../../hooks'\nimport {useReleasesUpsell} from '../contexts/upsell/useReleasesUpsell'\nimport {RELEASES_STUDIO_CLIENT_OPTIONS} from '../util/releasesClient'\nimport {createReleaseOperationsStore} from './createReleaseOperationStore'\n\n/**\n * @internal\n */\nexport function useReleaseOperations() {\n  const studioClient = useClient(RELEASES_STUDIO_CLIENT_OPTIONS)\n  const {onReleaseLimitReached} = useReleasesUpsell()\n  return useMemo(\n    () =>\n      createReleaseOperationsStore({\n        client: studioClient,\n        onReleaseLimitReached,\n      }),\n    [onReleaseLimitReached, studioClient],\n  )\n}\n","import {useTelemetry} from '@sanity/telemetry/react'\n\nimport {type ReleaseId} from '../../perspective/types'\nimport {useSetPerspective} from '../../perspective/useSetPerspective'\nimport {getDocumentVariantType} from '../../util/getDocumentVariantType'\nimport {AddedVersion} from '../__telemetry__/releases.telemetry'\nimport {useReleaseOperations} from '../store/useReleaseOperations'\n\nexport interface VersionOperationsValue {\n  createVersion: (\n    releaseId: ReleaseId,\n    documentId: string,\n    initialValue?: Record<string, unknown>,\n  ) => Promise<void>\n  discardVersion: (releaseId: string, documentId: string) => Promise<void>\n  unpublishVersion: (documentId: string) => Promise<void>\n}\n\n/** @internal */\nexport function useVersionOperations(): VersionOperationsValue {\n  const telemetry = useTelemetry()\n  const {createVersion, discardVersion, unpublishVersion} = useReleaseOperations()\n\n  const setPerspective = useSetPerspective()\n\n  const handleCreateVersion = async (\n    releaseId: ReleaseId,\n    documentId: string,\n    initialValue?: Record<string, unknown>,\n  ) => {\n    const origin = getDocumentVariantType(documentId)\n    await createVersion(releaseId, documentId, initialValue)\n    setPerspective(releaseId)\n    telemetry.log(AddedVersion, {\n      documentOrigin: origin,\n    })\n  }\n\n  const handleDiscardVersion = async (releaseId: string, documentId: string) =>\n    discardVersion(releaseId, documentId)\n\n  const handleUnpublishVersion = async (documentId: string) => unpublishVersion(documentId)\n\n  return {\n    createVersion: handleCreateVersion,\n    discardVersion: handleDiscardVersion,\n    unpublishVersion: handleUnpublishVersion,\n  }\n}\n","import {type LocaleResourceBundle} from '../../i18n'\n\n/**\n * The locale namespace for the releases tool\n *\n * @public\n */\n// api extractor take issues with 'as const' for literals\n// eslint-disable-next-line @typescript-eslint/prefer-as-const\nexport const releasesLocaleNamespace: 'releases' = 'releases'\n\n/**\n * The default locale release for the releases tool, which is US English.\n *\n * @internal\n */\nexport const releasesUsEnglishLocaleBundle: LocaleResourceBundle = {\n  locale: 'en-US',\n  namespace: releasesLocaleNamespace,\n  resources: () => import('./resources'),\n}\n\n/**\n * The locale resource keys for the releases tool.\n *\n * @alpha\n * @hidden\n */\nexport type {ReleasesLocaleResourceKeys} from './resources'\n","import {Box, Stack, Text, useToast} from '@sanity/ui'\nimport {useCallback, useState} from 'react'\n\nimport {Dialog} from '../../../../ui-components'\nimport {LoadingBlock} from '../../../components'\nimport {useDocumentOperation, useSchema} from '../../../hooks'\nimport {Translate, useTranslation} from '../../../i18n'\nimport {type SelectedPerspective} from '../../../perspective/types'\nimport {usePerspective} from '../../../perspective/usePerspective'\nimport {Preview} from '../../../preview'\nimport {getPublishedId, getVersionFromId, isDraftId, isVersionId} from '../../../util/draftUtils'\nimport {useVersionOperations} from '../../hooks'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {type ReleaseDocument} from '../../store'\nimport {getReleaseIdFromReleaseDocumentId} from '../../util/getReleaseIdFromReleaseDocumentId'\n\n/**\n * @internal\n */\nexport function DiscardVersionDialog(props: {\n  onClose: () => void\n  documentId: string\n  documentType: string\n  fromPerspective: string | SelectedPerspective\n}): React.JSX.Element {\n  const {onClose, documentId, documentType, fromPerspective} = props\n  const {t} = useTranslation(releasesLocaleNamespace)\n  const {t: coreT} = useTranslation()\n  const {discardChanges} = useDocumentOperation(getPublishedId(documentId), documentType)\n  const {selectedPerspective} = usePerspective()\n  const {discardVersion} = useVersionOperations()\n  const schema = useSchema()\n  const toast = useToast()\n  const [isDiscarding, setIsDiscarding] = useState(false)\n  const discardType = isDraftId(documentId) ? 'draft' : 'release'\n  const releaseName =\n    typeof fromPerspective === 'string' ? fromPerspective : fromPerspective.metadata.title\n\n  const schemaType = schema.get(documentType)\n\n  const handleDiscardVersion = useCallback(async () => {\n    setIsDiscarding(true)\n\n    if (isVersionId(documentId)) {\n      try {\n        await discardVersion(\n          getVersionFromId(documentId) ||\n            getReleaseIdFromReleaseDocumentId((selectedPerspective as ReleaseDocument)._id),\n          documentId,\n        )\n      } catch (err) {\n        toast.push({\n          closable: true,\n          status: 'error',\n          title: coreT('release.action.discard-version.failure'),\n          description: err.message,\n        })\n      }\n    } else {\n      // on the document header you can also discard the draft\n      discardChanges.execute()\n    }\n\n    setIsDiscarding(false)\n\n    onClose()\n  }, [documentId, onClose, discardVersion, selectedPerspective, toast, coreT, discardChanges])\n\n  return (\n    <Dialog\n      id={'discard-version-dialog'}\n      header={\n        <Translate\n          t={t}\n          i18nKey={`discard-version-dialog.header-${discardType}`}\n          values={{releaseTitle: releaseName}}\n        />\n      }\n      onClose={onClose}\n      width={0}\n      padding={false}\n      footer={{\n        cancelButton: {\n          disabled: isDiscarding,\n          onClick: onClose,\n        },\n        confirmButton: {\n          text: t(`discard-version-dialog.title-${discardType}`),\n          onClick: handleDiscardVersion,\n          disabled: isDiscarding,\n        },\n      }}\n    >\n      <Stack space={3} paddingX={3} marginBottom={2}>\n        {schemaType ? (\n          <Preview value={{_id: documentId}} schemaType={schemaType} />\n        ) : (\n          <LoadingBlock />\n        )}\n        <Box paddingX={2}>\n          <Text size={1} muted>\n            <Translate\n              t={t}\n              i18nKey={`discard-version-dialog.description-${discardType}`}\n              values={{releaseTitle: releaseName}}\n            />\n          </Text>\n        </Box>\n      </Stack>\n    </Dialog>\n  )\n}\n","export default function format(\n  {\n    alternativeName,\n    mainCities,\n    rawOffsetInMinutes,\n    currentTimeOffsetInMinutes,\n  },\n  { useCurrentOffset = false } = {},\n) {\n  const offsetInHours = useCurrentOffset\n    ? getOffsetString(currentTimeOffsetInMinutes)\n    : getOffsetString(rawOffsetInMinutes);\n\n  return `${offsetInHours.padStart(\n    6,\n    \"+\",\n  )} ${alternativeName} - ${mainCities.join(\", \")}`;\n}\n\nfunction getOffsetString(offsetInMinutes) {\n  const absOffsetInMinutes = Math.abs(offsetInMinutes);\n  const [hours, minutes] = [\n    Math.floor(absOffsetInMinutes / 60),\n    absOffsetInMinutes % 60,\n  ].map((v) => {\n    return v.toString().padStart(2, \"0\");\n  });\n  const durationInHoursMinutes = `${hours}:${minutes}`;\n\n  return `${offsetInMinutes >= 0 ? \"+\" : \"-\"}${durationInHoursMinutes}`;\n}\n","// Most of the code here is from Luxon\n// Copyright 2019 JS Foundation and other contributors\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nconst ianaRegex =\n  /^[A-Za-z_+-]{1,256}(:?\\/[A-Za-z_+-]{1,256}(\\/[A-Za-z_+-]{1,256})?)?$/;\n\nconst typeToPos = {\n  year: 0,\n  month: 1,\n  day: 2,\n  hour: 3,\n  minute: 4,\n  second: 5,\n};\n\nfunction isValidIanaSpecifier(s) {\n  return !!(s && s.match(ianaRegex));\n}\n\nfunction hackyOffset(dtf, date) {\n  const formatted = dtf.format(date).replace(/\\u200E/g, \"\");\n  const parsed = /(\\d+)\\/(\\d+)\\/(\\d+),? (\\d+):(\\d+):(\\d+)/.exec(formatted);\n  const [, fMonth, fDay, fYear, fHour, fMinute, fSecond] = parsed;\n  return [fYear, fMonth, fDay, fHour, fMinute, fSecond];\n}\n\nfunction partsOffset(dtf, date) {\n  const formatted = dtf.formatToParts(date);\n  const filled = [];\n  for (let i = 0; i < formatted.length; i++) {\n    const { type, value } = formatted[i];\n    const pos = typeToPos[type];\n\n    if (typeof pos !== \"undefined\") {\n      filled[pos] = parseInt(value, 10);\n    }\n  }\n  return filled;\n}\n\nfunction makeDTF(zone) {\n  return new Intl.DateTimeFormat(\"en-US\", {\n    hourCycle: \"h23\",\n    timeZone: zone,\n    year: \"numeric\",\n    month: \"2-digit\",\n    day: \"2-digit\",\n    hour: \"2-digit\",\n    minute: \"2-digit\",\n    second: \"2-digit\",\n  });\n}\n\n// covert a calendar object to a local timestamp (epoch, but with the offset baked in)\nfunction objToLocalTS(obj) {\n  let d = Date.UTC(\n    obj.year,\n    obj.month - 1,\n    obj.day,\n    obj.hour,\n    obj.minute,\n    obj.second,\n    obj.millisecond,\n  );\n\n  // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that\n  if (obj.year < 100 && obj.year >= 0) {\n    d = new Date(d);\n    d.setUTCFullYear(d.getUTCFullYear() - 1900);\n  }\n  return +d;\n}\n\nexport function getZoneOffset(timeZoneName) {\n  if (!isValidIanaSpecifier(timeZoneName)) {\n    return false;\n  }\n\n  const date = new Date(Date.now());\n\n  let dtf;\n\n  try {\n    dtf = makeDTF(timeZoneName);\n  } catch (_) {\n    return false;\n  }\n\n  const [year, month, day, hour, minute, second] = dtf.formatToParts\n    ? partsOffset(dtf, date)\n    : hackyOffset(dtf, date);\n\n  const asUTC = objToLocalTS({\n    year,\n    month,\n    day,\n    hour,\n    minute,\n    second,\n    millisecond: 0,\n  });\n\n  let asTS = +date;\n  const over = asTS % 1000;\n  asTS -= over >= 0 ? over : 1000 + over;\n  return (asUTC - asTS) / (60 * 1000);\n}\n","import rawTimeZones from \"../raw-time-zones.json\";\n\nimport formatTimeZone from \"./formatTimeZone.js\";\nimport { getZoneOffset } from \"./utils/timeZone.js\";\n\nexport default function getTimeZones(opts) {\n  const includeUtc = !!opts && opts.includeUtc;\n  return rawTimeZones\n    .reduce(\n      function (acc, timeZone) {\n        const timeZoneName = timeZone.name;\n        const currentOffset = getZoneOffset(timeZoneName);\n\n        // We build on the latest Node.js version, Node.js embed IANA databases\n        // it might happen that the environment that will execute getTimeZones() will not know about some\n        // timezones. So we ignore the timezone at runtim\n        // See https://github.com/vvo/tzdb/issues/43\n        if (currentOffset === false) {\n          return acc;\n        }\n\n        const timeZoneWithCurrentTimeData = {\n          ...timeZone,\n          currentTimeOffsetInMinutes: currentOffset,\n        };\n\n        acc.push({\n          ...timeZoneWithCurrentTimeData,\n          currentTimeFormat: formatTimeZone(timeZoneWithCurrentTimeData, {\n            useCurrentOffset: true,\n          }),\n        });\n\n        return acc;\n      },\n      includeUtc ? [utcTimezone] : [],\n    )\n    .sort((a, b) => {\n      return (\n        compareNumbers(a, b) ||\n        compareStrings(a.alternativeName, b.alternativeName) ||\n        compareStrings(a.mainCities[0], b.mainCities[0])\n      );\n    });\n}\n\nfunction compareNumbers(x, y) {\n  return x.currentTimeOffsetInMinutes - y.currentTimeOffsetInMinutes;\n}\n\nfunction compareStrings(x, y) {\n  if (typeof x === \"string\" && typeof y === \"string\") {\n    return x.localeCompare(y);\n  }\n  return 0;\n}\n\nconst utcTimezone = {\n  name: \"Etc/UTC\",\n  alternativeName: \"Coordinated Universal Time (UTC)\",\n  abbreviation: \"UTC\",\n  group: [\"Etc/UTC\", \"Etc/UCT\", \"UCT\", \"UTC\", \"Universal\", \"Zulu\"],\n  countryName: \"\",\n  continentCode: \"\",\n  continentName: \"\",\n  mainCities: [\"\"],\n  rawOffsetInMinutes: 0,\n  rawFormat: \"+00:00 Coordinated Universal Time (UTC)\",\n  currentTimeOffsetInMinutes: 0,\n  currentTimeFormat: \"+00:00 Coordinated Universal Time (UTC)\",\n};\n","/**\n * Returns the formatted time zone name of the provided `timeZone` or the current\n * system time zone if omitted, accounting for DST according to the UTC value of\n * the date.\n */\nexport default function tzIntlTimeZoneName(length, date, options) {\n  var dtf = getDTF(length, options.timeZone, options.locale)\n  return dtf.formatToParts ? partsTimeZone(dtf, date) : hackyTimeZone(dtf, date)\n}\n\nfunction partsTimeZone(dtf, date) {\n  var formatted = dtf.formatToParts(date)\n\n  for (var i = formatted.length - 1; i >= 0; --i) {\n    if (formatted[i].type === 'timeZoneName') {\n      return formatted[i].value\n    }\n  }\n}\n\nfunction hackyTimeZone(dtf, date) {\n  var formatted = dtf.format(date).replace(/\\u200E/g, '')\n  var tzNameMatch = / [\\w-+ ]+$/.exec(formatted)\n  return tzNameMatch ? tzNameMatch[0].substr(1) : ''\n}\n\n// If a locale has been provided `en-US` is used as a fallback in case it is an\n// invalid locale, otherwise the locale is left undefined to use the system locale.\nfunction getDTF(length, timeZone, locale) {\n  if (locale && !locale.code) {\n    throw new Error(\n      \"date-fns-tz error: Please set a language code on the locale object imported from date-fns, e.g. `locale.code = 'en-US'`\"\n    )\n  }\n  return new Intl.DateTimeFormat(locale ? [locale.code, 'en-US'] : undefined, {\n    timeZone: timeZone,\n    timeZoneName: length,\n  })\n}\n","/**\r\n * Returns the [year, month, day, hour, minute, seconds] tokens of the provided\r\n * `date` as it will be rendered in the `timeZone`.\r\n */\r\nexport default function tzTokenizeDate(date, timeZone) {\r\n  var dtf = getDateTimeFormat(timeZone)\r\n  return dtf.formatToParts ? partsOffset(dtf, date) : hackyOffset(dtf, date)\r\n}\r\n\r\nvar typeToPos = {\r\n  year: 0,\r\n  month: 1,\r\n  day: 2,\r\n  hour: 3,\r\n  minute: 4,\r\n  second: 5,\r\n}\r\n\r\nfunction partsOffset(dtf, date) {\r\n  try {\r\n    var formatted = dtf.formatToParts(date)\r\n    var filled = []\r\n    for (var i = 0; i < formatted.length; i++) {\r\n      var pos = typeToPos[formatted[i].type]\r\n\r\n      if (pos >= 0) {\r\n        filled[pos] = parseInt(formatted[i].value, 10)\r\n      }\r\n    }\r\n    return filled\r\n  } catch (error) {\r\n    if (error instanceof RangeError) {\r\n      return [NaN]\r\n    }\r\n    throw error\r\n  }\r\n}\r\n\r\nfunction hackyOffset(dtf, date) {\r\n  var formatted = dtf.format(date)\r\n  var parsed = /(\\d+)\\/(\\d+)\\/(\\d+),? (\\d+):(\\d+):(\\d+)/.exec(formatted)\r\n  // var [, fMonth, fDay, fYear, fHour, fMinute, fSecond] = parsed\r\n  // return [fYear, fMonth, fDay, fHour, fMinute, fSecond]\r\n  return [parsed[3], parsed[1], parsed[2], parsed[4], parsed[5], parsed[6]]\r\n}\r\n\r\n// Get a cached Intl.DateTimeFormat instance for the IANA `timeZone`. This can be used\r\n// to get deterministic local date/time output according to the `en-US` locale which\r\n// can be used to extract local time parts as necessary.\r\nvar dtfCache = {}\r\nfunction getDateTimeFormat(timeZone) {\r\n  if (!dtfCache[timeZone]) {\r\n    // New browsers use `hourCycle`, IE and Chrome <73 does not support it and uses `hour12`\r\n    var testDateFormatted = new Intl.DateTimeFormat('en-US', {\r\n      hourCycle: 'h23',\r\n      timeZone: 'America/New_York',\r\n      year: 'numeric',\r\n      month: '2-digit',\r\n      day: '2-digit',\r\n      hour: '2-digit',\r\n      minute: '2-digit',\r\n      second: '2-digit',\r\n    }).format(new Date('2014-06-25T04:00:00.123Z'))\r\n    var hourCycleSupported =\r\n      testDateFormatted === '06/25/2014, 00:00:00' ||\r\n      testDateFormatted === '‎06‎/‎25‎/‎2014‎ ‎00‎:‎00‎:‎00'\r\n\r\n    dtfCache[timeZone] = hourCycleSupported\r\n      ? new Intl.DateTimeFormat('en-US', {\r\n          hourCycle: 'h23',\r\n          timeZone: timeZone,\r\n          year: 'numeric',\r\n          month: 'numeric',\r\n          day: '2-digit',\r\n          hour: '2-digit',\r\n          minute: '2-digit',\r\n          second: '2-digit',\r\n        })\r\n      : new Intl.DateTimeFormat('en-US', {\r\n          hour12: false,\r\n          timeZone: timeZone,\r\n          year: 'numeric',\r\n          month: 'numeric',\r\n          day: '2-digit',\r\n          hour: '2-digit',\r\n          minute: '2-digit',\r\n          second: '2-digit',\r\n        })\r\n  }\r\n  return dtfCache[timeZone]\r\n}\r\n","/**\n * Use instead of `new Date(Date.UTC(...))` to support years below 100 which doesn't work\n * otherwise due to the nature of the\n * [`Date` constructor](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#interpretation_of_two-digit_years.\n *\n * For `Date.UTC(...)`, use `newDateUTC(...).getTime()`.\n */\nexport default function newDateUTC(fullYear, month, day, hour, minute, second, millisecond) {\n  var utcDate = new Date(0)\n  utcDate.setUTCFullYear(fullYear, month, day)\n  utcDate.setUTCHours(hour, minute, second, millisecond)\n  return utcDate\n}\n","import tzTokenizeDate from '../tzTokenizeDate/index.js'\r\nimport newDateUTC from '../newDateUTC/index.js'\r\n\r\nvar MILLISECONDS_IN_HOUR = 3600000\r\nvar MILLISECONDS_IN_MINUTE = 60000\r\n\r\nvar patterns = {\r\n  timezone: /([Z+-].*)$/,\r\n  timezoneZ: /^(Z)$/,\r\n  timezoneHH: /^([+-]\\d{2})$/,\r\n  timezoneHHMM: /^([+-])(\\d{2}):?(\\d{2})$/,\r\n}\r\n\r\n// Parse various time zone offset formats to an offset in milliseconds\r\nexport default function tzParseTimezone(timezoneString, date, isUtcDate) {\r\n  var token\r\n  var absoluteOffset\r\n\r\n  // Empty string\r\n  if (!timezoneString) {\r\n    return 0\r\n  }\r\n\r\n  // Z\r\n  token = patterns.timezoneZ.exec(timezoneString)\r\n  if (token) {\r\n    return 0\r\n  }\r\n\r\n  var hours\r\n\r\n  // ±hh\r\n  token = patterns.timezoneHH.exec(timezoneString)\r\n  if (token) {\r\n    hours = parseInt(token[1], 10)\r\n\r\n    if (!validateTimezone(hours)) {\r\n      return NaN\r\n    }\r\n\r\n    return -(hours * MILLISECONDS_IN_HOUR)\r\n  }\r\n\r\n  // ±hh:mm or ±hhmm\r\n  token = patterns.timezoneHHMM.exec(timezoneString)\r\n  if (token) {\r\n    hours = parseInt(token[2], 10)\r\n    var minutes = parseInt(token[3], 10)\r\n\r\n    if (!validateTimezone(hours, minutes)) {\r\n      return NaN\r\n    }\r\n\r\n    absoluteOffset = Math.abs(hours) * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE\r\n    return token[1] === '+' ? -absoluteOffset : absoluteOffset\r\n  }\r\n\r\n  // IANA time zone\r\n  if (isValidTimezoneIANAString(timezoneString)) {\r\n    date = new Date(date || Date.now())\r\n    var utcDate = isUtcDate ? date : toUtcDate(date)\r\n\r\n    var offset = calcOffset(utcDate, timezoneString)\r\n\r\n    var fixedOffset = isUtcDate ? offset : fixOffset(date, offset, timezoneString)\r\n\r\n    return -fixedOffset\r\n  }\r\n\r\n  return NaN\r\n}\r\n\r\nfunction toUtcDate(date) {\r\n  return newDateUTC(\r\n    date.getFullYear(),\r\n    date.getMonth(),\r\n    date.getDate(),\r\n    date.getHours(),\r\n    date.getMinutes(),\r\n    date.getSeconds(),\r\n    date.getMilliseconds()\r\n  )\r\n}\r\n\r\nfunction calcOffset(date, timezoneString) {\r\n  var tokens = tzTokenizeDate(date, timezoneString)\r\n\r\n  // ms dropped because it's not provided by tzTokenizeDate\r\n  var asUTC = newDateUTC(\r\n    tokens[0],\r\n    tokens[1] - 1,\r\n    tokens[2],\r\n    tokens[3] % 24,\r\n    tokens[4],\r\n    tokens[5],\r\n    0\r\n  ).getTime()\r\n\r\n  var asTS = date.getTime()\r\n  var over = asTS % 1000\r\n  asTS -= over >= 0 ? over : 1000 + over\r\n  return asUTC - asTS\r\n}\r\n\r\nfunction fixOffset(date, offset, timezoneString) {\r\n  var localTS = date.getTime()\r\n\r\n  // Our UTC time is just a guess because our offset is just a guess\r\n  var utcGuess = localTS - offset\r\n\r\n  // Test whether the zone matches the offset for this ts\r\n  var o2 = calcOffset(new Date(utcGuess), timezoneString)\r\n\r\n  // If so, offset didn't change, and we're done\r\n  if (offset === o2) {\r\n    return offset\r\n  }\r\n\r\n  // If not, change the ts by the difference in the offset\r\n  utcGuess -= o2 - offset\r\n\r\n  // If that gives us the local time we want, we're done\r\n  var o3 = calcOffset(new Date(utcGuess), timezoneString)\r\n  if (o2 === o3) {\r\n    return o2\r\n  }\r\n\r\n  // If it's different, we're in a hole time. The offset has changed, but we don't adjust the time\r\n  return Math.max(o2, o3)\r\n}\r\n\r\nfunction validateTimezone(hours, minutes) {\r\n  return -23 <= hours && hours <= 23 && (minutes == null || (0 <= minutes && minutes <= 59))\r\n}\r\n\r\nvar validIANATimezoneCache = {}\r\nfunction isValidTimezoneIANAString(timeZoneString) {\r\n  if (validIANATimezoneCache[timeZoneString]) return true\r\n  try {\r\n    new Intl.DateTimeFormat(undefined, { timeZone: timeZoneString })\r\n    validIANATimezoneCache[timeZoneString] = true\r\n    return true\r\n  } catch (error) {\r\n    return false\r\n  }\r\n}\r\n","import tzIntlTimeZoneName from '../../_lib/tzIntlTimeZoneName/index.js'\nimport tzParseTimezone from '../../_lib/tzParseTimezone/index.js'\n\nvar MILLISECONDS_IN_MINUTE = 60 * 1000\n\nvar formatters = {\n  // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n  X: function (date, token, localize, options) {\n    var timezoneOffset = getTimeZoneOffset(options.timeZone, date)\n\n    if (timezoneOffset === 0) {\n      return 'Z'\n    }\n\n    switch (token) {\n      // Hours and optional minutes\n      case 'X':\n        return formatTimezoneWithOptionalMinutes(timezoneOffset)\n\n      // Hours, minutes and optional seconds without `:` delimeter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `XX`\n      case 'XXXX':\n      case 'XX': // Hours and minutes without `:` delimeter\n        return formatTimezone(timezoneOffset)\n\n      // Hours, minutes and optional seconds with `:` delimeter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `XXX`\n      case 'XXXXX':\n      case 'XXX': // Hours and minutes with `:` delimeter\n      default:\n        return formatTimezone(timezoneOffset, ':')\n    }\n  },\n\n  // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n  x: function (date, token, localize, options) {\n    var timezoneOffset = getTimeZoneOffset(options.timeZone, date)\n\n    switch (token) {\n      // Hours and optional minutes\n      case 'x':\n        return formatTimezoneWithOptionalMinutes(timezoneOffset)\n\n      // Hours, minutes and optional seconds without `:` delimeter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `xx`\n      case 'xxxx':\n      case 'xx': // Hours and minutes without `:` delimeter\n        return formatTimezone(timezoneOffset)\n\n      // Hours, minutes and optional seconds with `:` delimeter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `xxx`\n      case 'xxxxx':\n      case 'xxx': // Hours and minutes with `:` delimeter\n      default:\n        return formatTimezone(timezoneOffset, ':')\n    }\n  },\n\n  // Timezone (GMT)\n  O: function (date, token, localize, options) {\n    var timezoneOffset = getTimeZoneOffset(options.timeZone, date)\n\n    switch (token) {\n      // Short\n      case 'O':\n      case 'OO':\n      case 'OOO':\n        return 'GMT' + formatTimezoneShort(timezoneOffset, ':')\n      // Long\n      case 'OOOO':\n      default:\n        return 'GMT' + formatTimezone(timezoneOffset, ':')\n    }\n  },\n\n  // Timezone (specific non-location)\n  z: function (date, token, localize, options) {\n    switch (token) {\n      // Short\n      case 'z':\n      case 'zz':\n      case 'zzz':\n        return tzIntlTimeZoneName('short', date, options)\n      // Long\n      case 'zzzz':\n      default:\n        return tzIntlTimeZoneName('long', date, options)\n    }\n  },\n}\n\nfunction getTimeZoneOffset(timeZone, originalDate) {\n  var timeZoneOffset = timeZone\n    ? tzParseTimezone(timeZone, originalDate, true) / MILLISECONDS_IN_MINUTE\n    : originalDate.getTimezoneOffset()\n  if (Number.isNaN(timeZoneOffset)) {\n    throw new RangeError('Invalid time zone specified: ' + timeZone)\n  }\n  return timeZoneOffset\n}\n\nfunction addLeadingZeros(number, targetLength) {\n  var sign = number < 0 ? '-' : ''\n  var output = Math.abs(number).toString()\n  while (output.length < targetLength) {\n    output = '0' + output\n  }\n  return sign + output\n}\n\nfunction formatTimezone(offset, dirtyDelimeter) {\n  var delimeter = dirtyDelimeter || ''\n  var sign = offset > 0 ? '-' : '+'\n  var absOffset = Math.abs(offset)\n  var hours = addLeadingZeros(Math.floor(absOffset / 60), 2)\n  var minutes = addLeadingZeros(Math.floor(absOffset % 60), 2)\n  return sign + hours + delimeter + minutes\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, dirtyDelimeter) {\n  if (offset % 60 === 0) {\n    var sign = offset > 0 ? '-' : '+'\n    return sign + addLeadingZeros(Math.abs(offset) / 60, 2)\n  }\n  return formatTimezone(offset, dirtyDelimeter)\n}\n\nfunction formatTimezoneShort(offset, dirtyDelimiter) {\n  var sign = offset > 0 ? '-' : '+'\n  var absOffset = Math.abs(offset)\n  var hours = Math.floor(absOffset / 60)\n  var minutes = absOffset % 60\n  if (minutes === 0) {\n    return sign + String(hours)\n  }\n  var delimiter = dirtyDelimiter || ''\n  return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2)\n}\n\nexport default formatters\n","/** Regex to identify the presence of a time zone specifier in a date string */\nvar tzPattern = /(Z|[+-]\\d{2}(?::?\\d{2})?| UTC| [a-zA-Z]+\\/[a-zA-Z_]+(?:\\/[a-zA-Z_]+)?)$/\n\nexport default tzPattern\n","import toInteger from 'date-fns/_lib/toInteger/index.js'\nimport getTimezoneOffsetInMilliseconds from 'date-fns/_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport tzParseTimezone from '../_lib/tzParseTimezone/index.js'\nimport tzPattern from '../_lib/tzPattern/index.js'\n\nvar MILLISECONDS_IN_HOUR = 3600000\nvar MILLISECONDS_IN_MINUTE = 60000\nvar DEFAULT_ADDITIONAL_DIGITS = 2\n\nvar patterns = {\n  dateTimePattern: /^([0-9W+-]+)(T| )(.*)/,\n  datePattern: /^([0-9W+-]+)(.*)/,\n  plainTime: /:/,\n\n  // year tokens\n  YY: /^(\\d{2})$/,\n  YYY: [\n    /^([+-]\\d{2})$/, // 0 additional digits\n    /^([+-]\\d{3})$/, // 1 additional digit\n    /^([+-]\\d{4})$/, // 2 additional digits\n  ],\n  YYYY: /^(\\d{4})/,\n  YYYYY: [\n    /^([+-]\\d{4})/, // 0 additional digits\n    /^([+-]\\d{5})/, // 1 additional digit\n    /^([+-]\\d{6})/, // 2 additional digits\n  ],\n\n  // date tokens\n  MM: /^-(\\d{2})$/,\n  DDD: /^-?(\\d{3})$/,\n  MMDD: /^-?(\\d{2})-?(\\d{2})$/,\n  Www: /^-?W(\\d{2})$/,\n  WwwD: /^-?W(\\d{2})-?(\\d{1})$/,\n\n  HH: /^(\\d{2}([.,]\\d*)?)$/,\n  HHMM: /^(\\d{2}):?(\\d{2}([.,]\\d*)?)$/,\n  HHMMSS: /^(\\d{2}):?(\\d{2}):?(\\d{2}([.,]\\d*)?)$/,\n\n  // time zone tokens (to identify the presence of a tz)\n  timeZone: tzPattern,\n}\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If an argument is a string, the function tries to parse it.\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n * If the function cannot parse the string or the values are invalid, it returns Invalid Date.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n * All *date-fns* functions will throw `RangeError` if `options.additionalDigits` is not 0, 1, 2 or undefined.\n *\n * @param {Date|String|Number} argument - the value to convert\n * @param {OptionsWithTZ} [options] - the object with options. See [Options]{@link https://date-fns.org/docs/Options}\n * @param {0|1|2} [options.additionalDigits=2] - the additional number of digits in the extended year format\n * @param {String} [options.timeZone=''] - used to specify the IANA time zone offset of a date String.\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * var result = toDate('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * var result = toDate('+02014101', {additionalDigits: 1})\n * //=> Fri Apr 11 2014 00:00:00\n */\nexport default function toDate(argument, dirtyOptions) {\n  if (arguments.length < 1) {\n    throw new TypeError('1 argument required, but only ' + arguments.length + ' present')\n  }\n\n  if (argument === null) {\n    return new Date(NaN)\n  }\n\n  var options = dirtyOptions || {}\n\n  var additionalDigits =\n    options.additionalDigits == null\n      ? DEFAULT_ADDITIONAL_DIGITS\n      : toInteger(options.additionalDigits)\n  if (additionalDigits !== 2 && additionalDigits !== 1 && additionalDigits !== 0) {\n    throw new RangeError('additionalDigits must be 0, 1 or 2')\n  }\n\n  // Clone the date\n  if (\n    argument instanceof Date ||\n    (typeof argument === 'object' && Object.prototype.toString.call(argument) === '[object Date]')\n  ) {\n    // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n    return new Date(argument.getTime())\n  } else if (\n    typeof argument === 'number' ||\n    Object.prototype.toString.call(argument) === '[object Number]'\n  ) {\n    return new Date(argument)\n  } else if (\n    !(\n      typeof argument === 'string' || Object.prototype.toString.call(argument) === '[object String]'\n    )\n  ) {\n    return new Date(NaN)\n  }\n\n  var dateStrings = splitDateString(argument)\n\n  var parseYearResult = parseYear(dateStrings.date, additionalDigits)\n  var year = parseYearResult.year\n  var restDateString = parseYearResult.restDateString\n\n  var date = parseDate(restDateString, year)\n\n  if (isNaN(date)) {\n    return new Date(NaN)\n  }\n\n  if (date) {\n    var timestamp = date.getTime()\n    var time = 0\n    var offset\n\n    if (dateStrings.time) {\n      time = parseTime(dateStrings.time)\n\n      if (isNaN(time)) {\n        return new Date(NaN)\n      }\n    }\n\n    if (dateStrings.timeZone || options.timeZone) {\n      offset = tzParseTimezone(dateStrings.timeZone || options.timeZone, new Date(timestamp + time))\n      if (isNaN(offset)) {\n        return new Date(NaN)\n      }\n    } else {\n      // get offset accurate to hour in time zones that change offset\n      offset = getTimezoneOffsetInMilliseconds(new Date(timestamp + time))\n      offset = getTimezoneOffsetInMilliseconds(new Date(timestamp + time + offset))\n    }\n\n    return new Date(timestamp + time + offset)\n  } else {\n    return new Date(NaN)\n  }\n}\n\nfunction splitDateString(dateString) {\n  var dateStrings = {}\n  var parts = patterns.dateTimePattern.exec(dateString)\n  var timeString\n\n  if (!parts) {\n    parts = patterns.datePattern.exec(dateString)\n    if (parts) {\n      dateStrings.date = parts[1]\n      timeString = parts[2]\n    } else {\n      dateStrings.date = null\n      timeString = dateString\n    }\n  } else {\n    dateStrings.date = parts[1]\n    timeString = parts[3]\n  }\n\n  if (timeString) {\n    var token = patterns.timeZone.exec(timeString)\n    if (token) {\n      dateStrings.time = timeString.replace(token[1], '')\n      dateStrings.timeZone = token[1].trim()\n    } else {\n      dateStrings.time = timeString\n    }\n  }\n\n  return dateStrings\n}\n\nfunction parseYear(dateString, additionalDigits) {\n  var patternYYY = patterns.YYY[additionalDigits]\n  var patternYYYYY = patterns.YYYYY[additionalDigits]\n\n  var token\n\n  // YYYY or ±YYYYY\n  token = patterns.YYYY.exec(dateString) || patternYYYYY.exec(dateString)\n  if (token) {\n    var yearString = token[1]\n    return {\n      year: parseInt(yearString, 10),\n      restDateString: dateString.slice(yearString.length),\n    }\n  }\n\n  // YY or ±YYY\n  token = patterns.YY.exec(dateString) || patternYYY.exec(dateString)\n  if (token) {\n    var centuryString = token[1]\n    return {\n      year: parseInt(centuryString, 10) * 100,\n      restDateString: dateString.slice(centuryString.length),\n    }\n  }\n\n  // Invalid ISO-formatted year\n  return {\n    year: null,\n  }\n}\n\nfunction parseDate(dateString, year) {\n  // Invalid ISO-formatted year\n  if (year === null) {\n    return null\n  }\n\n  var token\n  var date\n  var month\n  var week\n\n  // YYYY\n  if (dateString.length === 0) {\n    date = new Date(0)\n    date.setUTCFullYear(year)\n    return date\n  }\n\n  // YYYY-MM\n  token = patterns.MM.exec(dateString)\n  if (token) {\n    date = new Date(0)\n    month = parseInt(token[1], 10) - 1\n\n    if (!validateDate(year, month)) {\n      return new Date(NaN)\n    }\n\n    date.setUTCFullYear(year, month)\n    return date\n  }\n\n  // YYYY-DDD or YYYYDDD\n  token = patterns.DDD.exec(dateString)\n  if (token) {\n    date = new Date(0)\n    var dayOfYear = parseInt(token[1], 10)\n\n    if (!validateDayOfYearDate(year, dayOfYear)) {\n      return new Date(NaN)\n    }\n\n    date.setUTCFullYear(year, 0, dayOfYear)\n    return date\n  }\n\n  // yyyy-MM-dd or YYYYMMDD\n  token = patterns.MMDD.exec(dateString)\n  if (token) {\n    date = new Date(0)\n    month = parseInt(token[1], 10) - 1\n    var day = parseInt(token[2], 10)\n\n    if (!validateDate(year, month, day)) {\n      return new Date(NaN)\n    }\n\n    date.setUTCFullYear(year, month, day)\n    return date\n  }\n\n  // YYYY-Www or YYYYWww\n  token = patterns.Www.exec(dateString)\n  if (token) {\n    week = parseInt(token[1], 10) - 1\n\n    if (!validateWeekDate(year, week)) {\n      return new Date(NaN)\n    }\n\n    return dayOfISOWeekYear(year, week)\n  }\n\n  // YYYY-Www-D or YYYYWwwD\n  token = patterns.WwwD.exec(dateString)\n  if (token) {\n    week = parseInt(token[1], 10) - 1\n    var dayOfWeek = parseInt(token[2], 10) - 1\n\n    if (!validateWeekDate(year, week, dayOfWeek)) {\n      return new Date(NaN)\n    }\n\n    return dayOfISOWeekYear(year, week, dayOfWeek)\n  }\n\n  // Invalid ISO-formatted date\n  return null\n}\n\nfunction parseTime(timeString) {\n  var token\n  var hours\n  var minutes\n\n  // hh\n  token = patterns.HH.exec(timeString)\n  if (token) {\n    hours = parseFloat(token[1].replace(',', '.'))\n\n    if (!validateTime(hours)) {\n      return NaN\n    }\n\n    return (hours % 24) * MILLISECONDS_IN_HOUR\n  }\n\n  // hh:mm or hhmm\n  token = patterns.HHMM.exec(timeString)\n  if (token) {\n    hours = parseInt(token[1], 10)\n    minutes = parseFloat(token[2].replace(',', '.'))\n\n    if (!validateTime(hours, minutes)) {\n      return NaN\n    }\n\n    return (hours % 24) * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE\n  }\n\n  // hh:mm:ss or hhmmss\n  token = patterns.HHMMSS.exec(timeString)\n  if (token) {\n    hours = parseInt(token[1], 10)\n    minutes = parseInt(token[2], 10)\n    var seconds = parseFloat(token[3].replace(',', '.'))\n\n    if (!validateTime(hours, minutes, seconds)) {\n      return NaN\n    }\n\n    return (hours % 24) * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE + seconds * 1000\n  }\n\n  // Invalid ISO-formatted time\n  return null\n}\n\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n  week = week || 0\n  day = day || 0\n  var date = new Date(0)\n  date.setUTCFullYear(isoWeekYear, 0, 4)\n  var fourthOfJanuaryDay = date.getUTCDay() || 7\n  var diff = week * 7 + day + 1 - fourthOfJanuaryDay\n  date.setUTCDate(date.getUTCDate() + diff)\n  return date\n}\n\n// Validation functions\n\nvar DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\nvar DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n\nfunction isLeapYearIndex(year) {\n  return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0)\n}\n\nfunction validateDate(year, month, date) {\n  if (month < 0 || month > 11) {\n    return false\n  }\n\n  if (date != null) {\n    if (date < 1) {\n      return false\n    }\n\n    var isLeapYear = isLeapYearIndex(year)\n    if (isLeapYear && date > DAYS_IN_MONTH_LEAP_YEAR[month]) {\n      return false\n    }\n    if (!isLeapYear && date > DAYS_IN_MONTH[month]) {\n      return false\n    }\n  }\n\n  return true\n}\n\nfunction validateDayOfYearDate(year, dayOfYear) {\n  if (dayOfYear < 1) {\n    return false\n  }\n\n  var isLeapYear = isLeapYearIndex(year)\n  if (isLeapYear && dayOfYear > 366) {\n    return false\n  }\n  if (!isLeapYear && dayOfYear > 365) {\n    return false\n  }\n\n  return true\n}\n\nfunction validateWeekDate(year, week, day) {\n  if (week < 0 || week > 52) {\n    return false\n  }\n\n  if (day != null && (day < 0 || day > 6)) {\n    return false\n  }\n\n  return true\n}\n\nfunction validateTime(hours, minutes, seconds) {\n  if (hours != null && (hours < 0 || hours >= 25)) {\n    return false\n  }\n\n  if (minutes != null && (minutes < 0 || minutes >= 60)) {\n    return false\n  }\n\n  if (seconds != null && (seconds < 0 || seconds >= 60)) {\n    return false\n  }\n\n  return true\n}\n","import dateFnsFormat from 'date-fns/format/index.js'\nimport formatters from './formatters/index.js'\nimport toDate from '../toDate/index.js'\n\nvar tzFormattingTokensRegExp = /([xXOz]+)|''|'(''|[^'])+('|$)/g\n\n/**\n * @name format\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://git.io/fxCyr\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit                            | Pattern | Result examples                   | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era                             | G..GGG  | AD, BC                            |       |\n * |                                 | GGGG    | Anno Domini, Before Christ        | 2     |\n * |                                 | GGGGG   | A, B                              |       |\n * | Calendar year                   | y       | 44, 1, 1900, 2017                 | 5     |\n * |                                 | yo      | 44th, 1st, 0th, 17th              | 5,7   |\n * |                                 | yy      | 44, 01, 00, 17                    | 5     |\n * |                                 | yyy     | 044, 001, 1900, 2017              | 5     |\n * |                                 | yyyy    | 0044, 0001, 1900, 2017            | 5     |\n * |                                 | yyyyy   | ...                               | 3,5   |\n * | Local week-numbering year       | Y       | 44, 1, 1900, 2017                 | 5     |\n * |                                 | Yo      | 44th, 1st, 1900th, 2017th         | 5,7   |\n * |                                 | YY      | 44, 01, 00, 17                    | 5,8   |\n * |                                 | YYY     | 044, 001, 1900, 2017              | 5     |\n * |                                 | YYYY    | 0044, 0001, 1900, 2017            | 5,8   |\n * |                                 | YYYYY   | ...                               | 3,5   |\n * | ISO week-numbering year         | R       | -43, 0, 1, 1900, 2017             | 5,7   |\n * |                                 | RR      | -43, 00, 01, 1900, 2017           | 5,7   |\n * |                                 | RRR     | -043, 000, 001, 1900, 2017        | 5,7   |\n * |                                 | RRRR    | -0043, 0000, 0001, 1900, 2017     | 5,7   |\n * |                                 | RRRRR   | ...                               | 3,5,7 |\n * | Extended year                   | u       | -43, 0, 1, 1900, 2017             | 5     |\n * |                                 | uu      | -43, 01, 1900, 2017               | 5     |\n * |                                 | uuu     | -043, 001, 1900, 2017             | 5     |\n * |                                 | uuuu    | -0043, 0001, 1900, 2017           | 5     |\n * |                                 | uuuuu   | ...                               | 3,5   |\n * | Quarter (formatting)            | Q       | 1, 2, 3, 4                        |       |\n * |                                 | Qo      | 1st, 2nd, 3rd, 4th                | 7     |\n * |                                 | QQ      | 01, 02, 03, 04                    |       |\n * |                                 | QQQ     | Q1, Q2, Q3, Q4                    |       |\n * |                                 | QQQQ    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 | QQQQQ   | 1, 2, 3, 4                        | 4     |\n * | Quarter (stand-alone)           | q       | 1, 2, 3, 4                        |       |\n * |                                 | qo      | 1st, 2nd, 3rd, 4th                | 7     |\n * |                                 | qq      | 01, 02, 03, 04                    |       |\n * |                                 | qqq     | Q1, Q2, Q3, Q4                    |       |\n * |                                 | qqqq    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 | qqqqq   | 1, 2, 3, 4                        | 4     |\n * | Month (formatting)              | M       | 1, 2, ..., 12                     |       |\n * |                                 | Mo      | 1st, 2nd, ..., 12th               | 7     |\n * |                                 | MM      | 01, 02, ..., 12                   |       |\n * |                                 | MMM     | Jan, Feb, ..., Dec                |       |\n * |                                 | MMMM    | January, February, ..., December  | 2     |\n * |                                 | MMMMM   | J, F, ..., D                      |       |\n * | Month (stand-alone)             | L       | 1, 2, ..., 12                     |       |\n * |                                 | Lo      | 1st, 2nd, ..., 12th               | 7     |\n * |                                 | LL      | 01, 02, ..., 12                   |       |\n * |                                 | LLL     | Jan, Feb, ..., Dec                |       |\n * |                                 | LLLL    | January, February, ..., December  | 2     |\n * |                                 | LLLLL   | J, F, ..., D                      |       |\n * | Local week of year              | w       | 1, 2, ..., 53                     |       |\n * |                                 | wo      | 1st, 2nd, ..., 53th               | 7     |\n * |                                 | ww      | 01, 02, ..., 53                   |       |\n * | ISO week of year                | I       | 1, 2, ..., 53                     | 7     |\n * |                                 | Io      | 1st, 2nd, ..., 53th               | 7     |\n * |                                 | II      | 01, 02, ..., 53                   | 7     |\n * | Day of month                    | d       | 1, 2, ..., 31                     |       |\n * |                                 | do      | 1st, 2nd, ..., 31st               | 7     |\n * |                                 | dd      | 01, 02, ..., 31                   |       |\n * | Day of year                     | D       | 1, 2, ..., 365, 366               | 8     |\n * |                                 | Do      | 1st, 2nd, ..., 365th, 366th       | 7     |\n * |                                 | DD      | 01, 02, ..., 365, 366             | 8     |\n * |                                 | DDD     | 001, 002, ..., 365, 366           |       |\n * |                                 | DDDD    | ...                               | 3     |\n * | Day of week (formatting)        | E..EEE  | Mon, Tue, Wed, ..., Su            |       |\n * |                                 | EEEE    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | EEEEE   | M, T, W, T, F, S, S               |       |\n * |                                 | EEEEEE  | Mo, Tu, We, Th, Fr, Su, Sa        |       |\n * | ISO day of week (formatting)    | i       | 1, 2, 3, ..., 7                   | 7     |\n * |                                 | io      | 1st, 2nd, ..., 7th                | 7     |\n * |                                 | ii      | 01, 02, ..., 07                   | 7     |\n * |                                 | iii     | Mon, Tue, Wed, ..., Su            | 7     |\n * |                                 | iiii    | Monday, Tuesday, ..., Sunday      | 2,7   |\n * |                                 | iiiii   | M, T, W, T, F, S, S               | 7     |\n * |                                 | iiiiii  | Mo, Tu, We, Th, Fr, Su, Sa        | 7     |\n * | Local day of week (formatting)  | e       | 2, 3, 4, ..., 1                   |       |\n * |                                 | eo      | 2nd, 3rd, ..., 1st                | 7     |\n * |                                 | ee      | 02, 03, ..., 01                   |       |\n * |                                 | eee     | Mon, Tue, Wed, ..., Su            |       |\n * |                                 | eeee    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | eeeee   | M, T, W, T, F, S, S               |       |\n * |                                 | eeeeee  | Mo, Tu, We, Th, Fr, Su, Sa        |       |\n * | Local day of week (stand-alone) | c       | 2, 3, 4, ..., 1                   |       |\n * |                                 | co      | 2nd, 3rd, ..., 1st                | 7     |\n * |                                 | cc      | 02, 03, ..., 01                   |       |\n * |                                 | ccc     | Mon, Tue, Wed, ..., Su            |       |\n * |                                 | cccc    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | ccccc   | M, T, W, T, F, S, S               |       |\n * |                                 | cccccc  | Mo, Tu, We, Th, Fr, Su, Sa        |       |\n * | AM, PM                          | a..aaa  | AM, PM                            |       |\n * |                                 | aaaa    | a.m., p.m.                        | 2     |\n * |                                 | aaaaa   | a, p                              |       |\n * | AM, PM, noon, midnight          | b..bbb  | AM, PM, noon, midnight            |       |\n * |                                 | bbbb    | a.m., p.m., noon, midnight        | 2     |\n * |                                 | bbbbb   | a, p, n, mi                       |       |\n * | Flexible day period             | B..BBB  | at night, in the morning, ...     |       |\n * |                                 | BBBB    | at night, in the morning, ...     | 2     |\n * |                                 | BBBBB   | at night, in the morning, ...     |       |\n * | Hour [1-12]                     | h       | 1, 2, ..., 11, 12                 |       |\n * |                                 | ho      | 1st, 2nd, ..., 11th, 12th         | 7     |\n * |                                 | hh      | 01, 02, ..., 11, 12               |       |\n * | Hour [0-23]                     | H       | 0, 1, 2, ..., 23                  |       |\n * |                                 | Ho      | 0th, 1st, 2nd, ..., 23rd          | 7     |\n * |                                 | HH      | 00, 01, 02, ..., 23               |       |\n * | Hour [0-11]                     | K       | 1, 2, ..., 11, 0                  |       |\n * |                                 | Ko      | 1st, 2nd, ..., 11th, 0th          | 7     |\n * |                                 | KK      | 1, 2, ..., 11, 0                  |       |\n * | Hour [1-24]                     | k       | 24, 1, 2, ..., 23                 |       |\n * |                                 | ko      | 24th, 1st, 2nd, ..., 23rd         | 7     |\n * |                                 | kk      | 24, 01, 02, ..., 23               |       |\n * | Minute                          | m       | 0, 1, ..., 59                     |       |\n * |                                 | mo      | 0th, 1st, ..., 59th               | 7     |\n * |                                 | mm      | 00, 01, ..., 59                   |       |\n * | Second                          | s       | 0, 1, ..., 59                     |       |\n * |                                 | so      | 0th, 1st, ..., 59th               | 7     |\n * |                                 | ss      | 00, 01, ..., 59                   |       |\n * | Fraction of second              | S       | 0, 1, ..., 9                      |       |\n * |                                 | SS      | 00, 01, ..., 99                   |       |\n * |                                 | SSS     | 000, 0001, ..., 999               |       |\n * |                                 | SSSS    | ...                               | 3     |\n * | Timezone (ISO-8601 w/ Z)        | X       | -08, +0530, Z                     |       |\n * |                                 | XX      | -0800, +0530, Z                   |       |\n * |                                 | XXX     | -08:00, +05:30, Z                 |       |\n * |                                 | XXXX    | -0800, +0530, Z, +123456          | 2     |\n * |                                 | XXXXX   | -08:00, +05:30, Z, +12:34:56      |       |\n * | Timezone (ISO-8601 w/o Z)       | x       | -08, +0530, +00                   |       |\n * |                                 | xx      | -0800, +0530, +0000               |       |\n * |                                 | xxx     | -08:00, +05:30, +00:00            | 2     |\n * |                                 | xxxx    | -0800, +0530, +0000, +123456      |       |\n * |                                 | xxxxx   | -08:00, +05:30, +00:00, +12:34:56 |       |\n * | Timezone (GMT)                  | O...OOO | GMT-8, GMT+5:30, GMT+0            |       |\n * |                                 | OOOO    | GMT-08:00, GMT+05:30, GMT+00:00   | 2     |\n * | Timezone (specific non-locat.)  | z...zzz | PDT, EST, CEST                    | 6     |\n * |                                 | zzzz    | Pacific Daylight Time             | 2,6   |\n * | Seconds timestamp               | t       | 512969520                         | 7     |\n * |                                 | tt      | ...                               | 3,7   |\n * | Milliseconds timestamp          | T       | 512969520900                      | 7     |\n * |                                 | TT      | ...                               | 3,7   |\n * | Long localized date             | P       | 05/29/1453                        | 7     |\n * |                                 | PP      | May 29, 1453                      | 7     |\n * |                                 | PPP     | May 29th, 1453                    | 7     |\n * |                                 | PPPP    | Sunday, May 29th, 1453            | 2,7   |\n * | Long localized time             | p       | 12:00 AM                          | 7     |\n * |                                 | pp      | 12:00:00 AM                       | 7     |\n * |                                 | ppp     | 12:00:00 AM GMT+2                 | 7     |\n * |                                 | pppp    | 12:00:00 AM GMT+02:00             | 2,7   |\n * | Combination of date and time    | Pp      | 05/29/1453, 12:00 AM              | 7     |\n * |                                 | PPpp    | May 29, 1453, 12:00:00 AM         | 7     |\n * |                                 | PPPppp  | May 29th, 1453 at ...             | 7     |\n * |                                 | PPPPpppp| Sunday, May 29th, 1453 at ...     | 2,7   |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n *    are the same as \"stand-alone\" units, but are different in some languages.\n *    \"Formatting\" units are declined according to the rules of the language\n *    in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n *    `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n *    `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n *    the single quote characters (see below).\n *    If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n *    the output will be the same as default pattern for this unit, usually\n *    the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n *    are marked with \"2\" in the last column of the table.\n *\n *    `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n *    The output will be padded with zeros to match the length of the pattern.\n *\n *    `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n *    These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n *    | Year | `y` | `u` |\n *    |------|-----|-----|\n *    | AC 1 |   1 |   1 |\n *    | BC 1 |   1 |   0 |\n *    | BC 2 |   2 |  -1 |\n *\n *    Also `yy` always returns the last two digits of a year,\n *    while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n *    | Year | `yy` | `uu` |\n *    |------|------|------|\n *    | 1    |   01 |   01 |\n *    | 14   |   14 |   14 |\n *    | 376  |   76 |  376 |\n *    | 1453 |   53 | 1453 |\n *\n *    The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n *    except local week-numbering years are dependent on `options.weekStartsOn`\n *    and `options.firstWeekContainsDate` (compare [getISOWeekYear]{@link https://date-fns.org/docs/getISOWeekYear}\n *    and [getWeekYear]{@link https://date-fns.org/docs/getWeekYear}).\n *\n * 6. Specific non-location timezones are created using the Intl browser API. The output is determined by the\n *    preferred standard of the current locale (en-US by default) which may not always give the expected result.\n *    For this reason it is recommended to supply a `locale` in the format options when formatting a time zone name.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n *    - `i`: ISO day of week\n *    - `I`: ISO week of year\n *    - `R`: ISO week-numbering year\n *    - `t`: seconds timestamp\n *    - `T`: milliseconds timestamp\n *    - `o`: ordinal number modifier\n *    - `P`: long localized date\n *    - `p`: long localized time\n *\n * 8. These tokens are often confused with others. See: https://git.io/fxCyr\n *\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole\n *   library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The second argument is now required for the sake of explicitness.\n *\n *   ```javascript\n *   // Before v2.0.0\n *   format(new Date(2016, 0, 1))\n *\n *   // v2.0.0 onward\n *   format(new Date(2016, 0, 1), \"yyyy-MM-dd'T'HH:mm:ss.SSSxxx\")\n *   ```\n *\n * - New format string API for `format` function\n *   which is based on [Unicode Technical Standard\n *   #35](https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table). See [this\n *   post](https://blog.date-fns.org/post/unicode-tokens-in-date-fns-v2-sreatyki91jg) for more details.\n *\n * - Characters are now escaped using single quote symbols (`'`) instead of square brackets.\n *\n * @param {Date|Number} date - the original date\n * @param {String} format - the string of tokens\n * @param {OptionsWithTZ} [options] - the object with options. See [Options]{@link https://date-fns.org/docs/Options}\n * @param {0|1|2} [options.additionalDigits=2] - passed to `toDate`. See [toDate]{@link\n *   https://date-fns.org/docs/toDate}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See\n *   [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {Boolean} [options.awareOfUnicodeTokens=false] - if true, allows usage of Unicode tokens causes confusion:\n *   - Some of the day of year tokens (`D`, `DD`) that are confused with the day of month tokens (`d`, `dd`).\n *   - Some of the local week-numbering year tokens (`YY`, `YYYY`) that are confused with the calendar year tokens\n *   (`yy`, `yyyy`). See: https://git.io/fxCyr\n * @param {String} [options.timeZone=''] - used to specify the IANA time zone offset of a date String.\n * @param {Date|Number} [options.originalDate] - can be used to pass the original unmodified date to `format` to\n *   improve correctness of the replaced timezone token close to the DST threshold.\n * @returns {String} the formatted date string\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n * @throws {RangeError} `options.locale` must contain `localize` property\n * @throws {RangeError} `options.locale` must contain `formatLong` property\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} `options.awareOfUnicodeTokens` must be set to `true` to use `XX` token; see:\n *   https://git.io/fxCyr\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * var result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * var result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n *   locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * var result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\nexport default function format(dirtyDate, dirtyFormatStr, dirtyOptions) {\n  var formatStr = String(dirtyFormatStr)\n  var options = dirtyOptions || {}\n\n  var matches = formatStr.match(tzFormattingTokensRegExp)\n  if (matches) {\n    var date = toDate(options.originalDate || dirtyDate, options)\n    // Work through each match and replace the tz token in the format string with the quoted\n    // formatted time zone so the remaining tokens can be filled in by date-fns#format.\n    formatStr = matches.reduce(function (result, token) {\n      if (token[0] === \"'\") {\n        return result // This is a quoted portion, matched only to ensure we don't match inside it\n      }\n      var pos = result.indexOf(token)\n      var precededByQuotedSection = result[pos - 1] === \"'\"\n      var replaced = result.replace(\n        token,\n        \"'\" + formatters[token[0]](date, token, null, options) + \"'\"\n      )\n      // If the replacement results in two adjoining quoted strings, the back to back quotes\n      // are removed, so it doesn't look like an escaped quote.\n      return precededByQuotedSection\n        ? replaced.substring(0, pos - 1) + replaced.substring(pos + 1)\n        : replaced\n    }, formatStr)\n  }\n\n  return dateFnsFormat(dirtyDate, formatStr, options)\n}\n","import tzParseTimezone from '../_lib/tzParseTimezone/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name utcToZonedTime\n * @category Time Zone Helpers\n * @summary Get a date/time representing local time in a given time zone from the UTC date\n *\n * @description\n * Returns a date instance with values representing the local time in the time zone\n * specified of the UTC time from the date provided. In other words, when the new date\n * is formatted it will show the equivalent hours in the target time zone regardless\n * of the current system time zone.\n *\n * @param {Date|String|Number} date - the date with the relevant UTC time\n * @param {String} timeZone - the time zone to get local time for, can be an offset or IANA time zone\n * @param {OptionsWithTZ} [options] - the object with options. See [Options]{@link https://date-fns.org/docs/Options}\n * @param {0|1|2} [options.additionalDigits=2] - passed to `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * @returns {Date} the new date with the equivalent time in the time zone\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // In June 10am UTC is 6am in New York (-04:00)\n * const result = utcToZonedTime('2014-06-25T10:00:00.000Z', 'America/New_York')\n * //=> Jun 25 2014 06:00:00\n */\nexport default function utcToZonedTime(dirtyDate, timeZone, options) {\n  var date = toDate(dirtyDate, options)\n\n  var offsetMilliseconds = tzParseTimezone(timeZone, date, true)\n\n  var d = new Date(date.getTime() - offsetMilliseconds)\n\n  var resultDate = new Date(0)\n\n  resultDate.setFullYear(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate())\n\n  resultDate.setHours(d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds())\n\n  return resultDate\n}\n","import cloneObject from 'date-fns/_lib/cloneObject/index.js'\r\nimport format from '../format/index.js'\r\nimport utcToZonedTime from '../utcToZonedTime/index.js'\r\n\r\n/**\r\n * @name formatInTimeZone\r\n * @category Time Zone Helpers\r\n * @summary Gets the offset in milliseconds between the time zone and Universal Coordinated Time (UTC)\r\n *\r\n * @param {Date|String|Number} date - the date representing the local time / real UTC time\r\n * @param {String} timeZone - the time zone this date should be formatted for; can be an offset or IANA time zone\r\n * @param {String} formatStr - the string of tokens\r\n * @param {OptionsWithTZ} [options] - the object with options. See [Options]{@link https://date-fns.org/docs/Options}\r\n * @param {0|1|2} [options.additionalDigits=2] - passed to `toDate`. See [toDate]{@link\r\n *   https://date-fns.org/docs/toDate}\r\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\r\n * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is\r\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See\r\n *   [Locale]{@link https://date-fns.org/docs/Locale}\r\n * @param {Boolean} [options.awareOfUnicodeTokens=false] - if true, allows usage of Unicode tokens causes confusion:\r\n *   - Some of the day of year tokens (`D`, `DD`) that are confused with the day of month tokens (`d`, `dd`).\r\n *   - Some of the local week-numbering year tokens (`YY`, `YYYY`) that are confused with the calendar year tokens\r\n *   (`yy`, `yyyy`). See: https://git.io/fxCyr\r\n * @param {String} [options.timeZone=''] - used to specify the IANA time zone offset of a date String.\r\n * @returns {String} the formatted date string\r\n */\r\nexport default function formatInTimeZone(date, timeZone, formatStr, options) {\r\n  var extendedOptions = cloneObject(options)\r\n  extendedOptions.timeZone = timeZone\r\n  extendedOptions.originalDate = date\r\n  return format(utcToZonedTime(date, timeZone), formatStr, extendedOptions)\r\n}\r\n","import cloneObject from 'date-fns/_lib/cloneObject/index.js'\nimport toDate from '../toDate/index.js'\nimport tzPattern from '../_lib/tzPattern/index.js'\nimport tzParseTimezone from '../_lib/tzParseTimezone/index.js'\nimport newDateUTC from '../_lib/newDateUTC/index.js'\n\n/**\n * @name zonedTimeToUtc\n * @category Time Zone Helpers\n * @summary Get the UTC date/time from a date representing local time in a given time zone\n *\n * @description\n * Returns a date instance with the UTC time of the provided date of which the values\n * represented the local time in the time zone specified. In other words, if the input\n * date represented local time in time time zone, the timestamp of the output date will\n * give the equivalent UTC of that local time regardless of the current system time zone.\n *\n * @param {Date|String|Number} date - the date with values representing the local time\n * @param {String} timeZone - the time zone of this local time, can be an offset or IANA time zone\n * @param {OptionsWithTZ} [options] - the object with options. See [Options]{@link https://date-fns.org/docs/Options}\n * @param {0|1|2} [options.additionalDigits=2] - passed to `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * @returns {Date} the new date with the equivalent time in the time zone\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // In June 10am in Los Angeles is 5pm UTC\n * const result = zonedTimeToUtc(new Date(2014, 5, 25, 10, 0, 0), 'America/Los_Angeles')\n * //=> 2014-06-25T17:00:00.000Z\n */\nexport default function zonedTimeToUtc(date, timeZone, options) {\n  if (typeof date === 'string' && !date.match(tzPattern)) {\n    var extendedOptions = cloneObject(options)\n    extendedOptions.timeZone = timeZone\n    return toDate(date, extendedOptions)\n  }\n\n  var d = toDate(date, options)\n\n  var utc = newDateUTC(\n    d.getFullYear(),\n    d.getMonth(),\n    d.getDate(),\n    d.getHours(),\n    d.getMinutes(),\n    d.getSeconds(),\n    d.getMilliseconds()\n  ).getTime()\n\n  var offsetMilliseconds = tzParseTimezone(timeZone, new Date(utc))\n\n  return new Date(utc + offsetMilliseconds)\n}\n","import {CalendarIcon} from '@sanity/icons'\nimport {Inline, Stack, Text} from '@sanity/ui'\n\ninterface Props {\n  body?: string\n  title: string\n}\n\nconst ToastDescription = (props: Props) => {\n  const {body, title} = props\n  return (\n    <Stack paddingY={1} space={3}>\n      <Inline space={2}>\n        <CalendarIcon />\n        {title && (\n          <Text size={2} weight=\"semibold\">\n            {title}\n          </Text>\n        )}\n      </Inline>\n      {body && <Text size={1}>{body}</Text>}\n    </Stack>\n  )\n}\n\nexport default ToastDescription\n","import {type BadgeTone} from '@sanity/ui'\n\nimport {\n  type ScheduleAction,\n  type ScheduledPublishingPluginOptions,\n  type ScheduleState,\n} from './types'\n\nexport const LOCAL_STORAGE_TZ_KEY = 'scheduled-publishing::time-zone'\n\nexport const SCHEDULE_ACTION_DICTIONARY: Record<\n  ScheduleAction,\n  {\n    actionName: string\n    badgeColor?: 'primary' | 'success' | 'warning' | 'danger' // Document badge specific\n    badgeTone: BadgeTone\n  }\n> = {\n  publish: {\n    actionName: 'Publishing',\n    badgeColor: 'primary',\n    badgeTone: 'positive',\n  },\n  unpublish: {\n    actionName: 'Unpublishing',\n    badgeColor: 'danger',\n    badgeTone: 'critical',\n  },\n}\n\nexport const SCHEDULE_STATE_DICTIONARY: Record<\n  ScheduleState,\n  {\n    title: string\n  }\n> = {\n  scheduled: {\n    title: 'Upcoming',\n  },\n  succeeded: {\n    title: 'Completed',\n  },\n  cancelled: {\n    title: 'Failed',\n  },\n}\n\n// Tool: denotes order of filter tags as well as accessible routes\nexport const SCHEDULE_FILTERS: ScheduleState[] = Object.keys(SCHEDULE_STATE_DICTIONARY).filter(\n  (f): f is ScheduleState => !!f,\n)\n\nexport const TOOL_HEADER_HEIGHT = 55 // px\n\nexport const DOCUMENT_HAS_WARNINGS_TEXT = 'This document has validation warnings.'\nexport const DOCUMENT_HAS_ERRORS_TEXT =\n  'This document has validation errors that should be resolved before its publish date.'\n\nexport const FEATURE_NOT_SUPPORTED_TEXT = (\n  <>\n    Scheduled Publishing is only available on{' '}\n    <a href=\"https://sanity.io/pricing\">Growth or higher plans</a>. Please upgrade to enable access.\n  </>\n)\n\nexport const SCHEDULE_FAILED_TEXT = 'This schedule failed to run.'\n\n// Text displayed in toasts on any 403 Forbidden request\n// (usually if a project doesn't have access to the Scheduled Publishing feature)\nexport const FORBIDDEN_RESPONSE_TEXT =\n  'Forbidden. Please check that your project has access to Scheduled Publishing.'\n\n// date-fns compatible date formats\n// https://date-fns.org/v2.28.0/docs/format\nexport const DATE_FORMAT = {\n  // 1 Oct 22, 10:00 PM\n  SMALL: `d MMM yy',' p`,\n  // 1 October 2022, 10:00 PM\n  MEDIUM: `d MMMM yyyy',' p`,\n  // Saturday, 1 October 2022, 10:00 PM\n  LARGE: `iiii',' d MMMM yyyy',' p`,\n}\n\nexport const DEFAULT_SCHEDULED_PUBLISH_PLUGIN_OPTIONS: Required<\n  Omit<ScheduledPublishingPluginOptions, '__internal__workspaceEnabled'>\n> = {\n  enabled: true,\n  // 25/12/2022 22:00\n  inputDateTimeFormat: 'dd/MM/yyyy HH:mm',\n  showReleasesBanner: true,\n}\n\nexport const SCHEDULED_PUBLISHING_TOOL_NAME = 'schedules'\n\nexport const TOOL_TITLE = 'Schedules'\n\nexport const RELEASES_DOCS_URL = 'https://www.sanity.io/blog/introducing-content-releases'\n","import debug from 'debug'\n\nconst rootName = 'scheduled-publishing:'\n\nexport default debug(rootName)\nexport function debugWithName(name: string): debug.Debugger {\n  const namespace = `${rootName}${name}`\n  if (debug && debug.enabled(namespace)) {\n    return debug(namespace)\n  }\n  return debug(rootName)\n}\n","import {type ClientError} from '@sanity/client'\n\nimport {FORBIDDEN_RESPONSE_TEXT} from '../constants'\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\nexport default function getErrorMessage(err: unknown): string {\n  let message\n\n  if (isClientError(err)) {\n    // The request was made and the server responded with a status code\n    if (err.response.statusCode === 403) {\n      message = FORBIDDEN_RESPONSE_TEXT\n    } else {\n      message = err.message\n    }\n  } else {\n    if (err instanceof Error) {\n      message = err.message\n    }\n    message = String(err)\n  }\n\n  return message\n}\n","import {useToast} from '@sanity/ui'\nimport {getTimeZones} from '@vvo/tzdb'\nimport {formatInTimeZone, utcToZonedTime, zonedTimeToUtc} from 'date-fns-tz'\nimport {useCallback, useEffect, useState} from 'react'\n\nimport ToastDescription from '../components/toastDescription/ToastDescription'\nimport {DATE_FORMAT, LOCAL_STORAGE_TZ_KEY} from '../constants'\nimport {type NormalizedTimeZone} from '../types'\nimport {debugWithName} from '../utils/debug'\nimport getErrorMessage from '../utils/getErrorMessage'\n\nenum TimeZoneEvents {\n  update = 'timeZoneEventUpdate',\n}\n\nconst debug = debugWithName('useScheduleOperation')\n\n// Map through only the values we care about\nexport const allTimeZones: NormalizedTimeZone[] = getTimeZones().map((tz) => {\n  return {\n    abbreviation: tz.abbreviation,\n    alternativeName: tz.alternativeName,\n    mainCities: tz.mainCities.join(', '),\n    // Main time zone name 'Africa/Dar_es_Salaam'\n    name: tz.name,\n    // Time zone name with underscores removed\n    namePretty: tz.name.replaceAll('_', ' '),\n    offset: tz.currentTimeFormat.split(' ')[0],\n    // all searchable text - this is transformed before being rendered in `<AutoComplete>`\n    value: `${tz.currentTimeFormat} ${tz.abbreviation} ${tz.name}`,\n  } as NormalizedTimeZone\n})\n\nexport function getLocalTimeZone(): NormalizedTimeZone {\n  return (\n    allTimeZones.find((tz) => tz.name === Intl.DateTimeFormat().resolvedOptions().timeZone) ||\n    // Default to GMT-0 if no user timeZone is found\n    allTimeZones.find((timeZone) => timeZone.abbreviation === 'GMT') ||\n    // Return the first time zone as a fallback\n    allTimeZones[0]\n  )\n}\n\nfunction getStoredTimeZone(): NormalizedTimeZone {\n  const storedTimeZone = localStorage.getItem(LOCAL_STORAGE_TZ_KEY)\n  try {\n    if (storedTimeZone) {\n      return JSON.parse(storedTimeZone)\n    }\n  } catch (error) {\n    // invalid value (non-JSON) - fallback to local timeZone\n  }\n\n  return getLocalTimeZone()\n}\n\nconst useTimeZone = () => {\n  const [timeZone, setTimeZone] = useState<NormalizedTimeZone>(() => getStoredTimeZone())\n  const toast = useToast()\n\n  useEffect(() => {\n    const handler = () => {\n      // When updated in another hook instance, just fetch from localStorage\n      setTimeZone(getStoredTimeZone())\n    }\n\n    window.addEventListener(TimeZoneEvents.update, handler)\n    return () => {\n      window.removeEventListener(TimeZoneEvents.update, handler)\n    }\n  }, [])\n\n  /**\n   * Return time-zone adjusted date in a date-fns supported format\n   */\n  const formatDateTz = useCallback(\n    ({\n      date,\n      format = DATE_FORMAT.LARGE,\n      includeTimeZone,\n      prefix,\n    }: {\n      date: Date\n      format?: string\n      includeTimeZone?: boolean\n      prefix?: string\n    }) => {\n      let dateFormat = format\n      if (prefix) {\n        dateFormat = `'${prefix}'${format}`\n      }\n      if (includeTimeZone) {\n        dateFormat = `${format} (zzzz)`\n      }\n      return formatInTimeZone(date, timeZone.name, dateFormat)\n    },\n    [timeZone.name],\n  )\n\n  const getCurrentZoneDate = useCallback(\n    () => utcToZonedTime(new Date(), timeZone.name),\n    [timeZone.name],\n  )\n\n  const handleNewValue = useCallback(\n    (tz: NormalizedTimeZone) => {\n      debug('handleNewValue:', tz)\n\n      setTimeZone((prevTz) => {\n        try {\n          // If different from current state, update localStorage & notify other instances\n          if (prevTz.name !== tz.name) {\n            localStorage.setItem(LOCAL_STORAGE_TZ_KEY, JSON.stringify(tz))\n            window.dispatchEvent(new Event(TimeZoneEvents.update))\n          }\n        } catch (err) {\n          console.error(err)\n\n          toast.push({\n            closable: true,\n            description: (\n              <ToastDescription body={getErrorMessage(err)} title=\"Unable to update time zone\" />\n            ),\n            status: 'error',\n          })\n        }\n\n        return tz\n      })\n    },\n    [toast],\n  )\n\n  const utcToCurrentZoneDate = useCallback(\n    (date: Date) => utcToZonedTime(date, timeZone.name),\n    [timeZone.name],\n  )\n\n  const zoneDateToUtc = useCallback(\n    (date: Date) => zonedTimeToUtc(date, timeZone.name),\n    [timeZone.name],\n  )\n\n  return {\n    formatDateTz,\n    getCurrentZoneDate,\n    setTimeZone: handleNewValue,\n    timeZone,\n    utcToCurrentZoneDate,\n    zoneDateToUtc,\n  }\n}\n\nexport default useTimeZone\n","import {DotIcon} from '@sanity/icons'\nimport {type BadgeTone, Box, Text} from '@sanity/ui'\nimport {type CSSProperties} from 'react'\n\nexport const ReleaseAvatarIcon = ({tone}: {tone: BadgeTone}) => {\n  return (\n    <DotIcon\n      data-testid={`release-avatar-${tone}`}\n      style={\n        {\n          '--card-icon-color': `var(--card-badge-${tone}-icon-color)`,\n        } as CSSProperties\n      }\n    />\n  )\n}\n\n/** @internal */\nexport function ReleaseAvatar({\n  fontSize = 1,\n  padding = 3,\n  tone,\n}: {\n  fontSize?: number\n  padding?: number\n  tone: BadgeTone\n}): React.JSX.Element {\n  return (\n    <Box flex=\"none\" padding={padding} style={{borderRadius: 3}}>\n      <Text size={fontSize}>\n        <ReleaseAvatarIcon tone={tone} />\n      </Text>\n    </Box>\n  )\n}\n","import {SearchIcon} from '@sanity/icons'\nimport {Autocomplete, Card, Flex, Inline, Stack, Text, type Theme} from '@sanity/ui'\nimport {useCallback, useMemo, useState} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {Dialog} from '../../../../ui-components'\nimport useTimeZone, {allTimeZones, getLocalTimeZone} from '../../hooks/useTimeZone'\nimport {type NormalizedTimeZone} from '../../types'\n\nexport interface DialogTimeZoneProps {\n  onClose?: () => void\n}\n\nconst TimeZoneAlternativeNameSpan = styled.span(({theme}: {theme: Theme}) => {\n  return css`\n    color: ${theme.sanity.color.base.fg};\n    font-weight: 500;\n    margin-left: 1em;\n  `\n})\n\nconst TimeZoneMainCitiesSpan = styled.span(({theme}: {theme: Theme}) => {\n  return css`\n    color: ${theme.sanity.color.input.default.readOnly.fg};\n    margin-left: 1em;\n  `\n})\n\nconst DialogTimeZone = (props: DialogTimeZoneProps) => {\n  const {onClose} = props\n\n  const {setTimeZone, timeZone} = useTimeZone()\n  const [selectedTz, setSelectedTz] = useState<NormalizedTimeZone | undefined>(timeZone)\n\n  // Callbacks\n  const handleTimeZoneChange = useCallback((value: string) => {\n    const tz = allTimeZones.find((v) => v.value === value)\n    setSelectedTz(tz)\n  }, [])\n\n  const handleTimeZoneSelectLocal = useCallback(() => {\n    setSelectedTz(getLocalTimeZone())\n  }, [])\n\n  const handleTimeZoneUpdate = useCallback(() => {\n    if (selectedTz) {\n      setTimeZone(selectedTz)\n    }\n    onClose?.()\n  }, [onClose, selectedTz, setTimeZone])\n\n  const isDirty = selectedTz?.name !== timeZone.name\n  const isLocalTzSelected = useMemo(() => {\n    return selectedTz?.name === getLocalTimeZone().name\n  }, [selectedTz])\n\n  const renderOption = useCallback((option: NormalizedTimeZone) => {\n    return (\n      <Card as=\"button\" padding={3}>\n        <Text size={1} textOverflow=\"ellipsis\">\n          <span>GMT{option.offset}</span>\n          <TimeZoneAlternativeNameSpan>{option.alternativeName}</TimeZoneAlternativeNameSpan>\n          <TimeZoneMainCitiesSpan>{option.mainCities}</TimeZoneMainCitiesSpan>\n        </Text>\n      </Card>\n    )\n  }, [])\n  const renderValue = useCallback((_value: string, option?: NormalizedTimeZone) => {\n    if (!option) return ''\n    return `${option.alternativeName} (${option.namePretty})`\n  }, [])\n\n  return (\n    <Dialog\n      footer={{\n        confirmButton: {\n          text: 'Update time zone',\n          disabled: !isDirty || !selectedTz,\n          onClick: handleTimeZoneUpdate,\n          tone: 'primary',\n        },\n      }}\n      header=\"Select time zone\"\n      id=\"time-zone\"\n      onClose={onClose}\n      width={1}\n    >\n      <Stack padding={4} space={5}>\n        <Text size={1}>\n          The selected time zone will change how dates are represented in schedules.\n        </Text>\n\n        <Stack space={3}>\n          <Flex align=\"center\" justify=\"space-between\">\n            <Inline space={2}>\n              <Text size={1} weight=\"semibold\">\n                Time zone\n              </Text>\n              {isLocalTzSelected && (\n                <Text muted size={1}>\n                  local time\n                </Text>\n              )}\n            </Inline>\n            {!isLocalTzSelected && (\n              <Text size={1} weight=\"medium\">\n                <a onClick={handleTimeZoneSelectLocal} style={{cursor: 'pointer'}}>\n                  Select local time zone\n                </a>\n              </Text>\n            )}\n          </Flex>\n\n          <Autocomplete\n            fontSize={2}\n            icon={SearchIcon}\n            id=\"timezone\"\n            onChange={handleTimeZoneChange}\n            openButton\n            options={allTimeZones}\n            padding={4}\n            placeholder=\"Search for a city or time zone\"\n            popover={{\n              boundaryElement: document.querySelector('body'),\n              constrainSize: true,\n              placement: 'bottom-start',\n            }}\n            renderOption={renderOption}\n            renderValue={renderValue}\n            tabIndex={-1}\n            value={selectedTz?.value}\n          />\n        </Stack>\n      </Stack>\n    </Dialog>\n  )\n}\n\nexport default DialogTimeZone\n","import {useCallback, useState} from 'react'\n\ninterface DialogControls {\n  show: () => void\n  hide: () => void\n  visible: boolean\n}\n\nexport function useDialogVisible(): DialogControls {\n  const [dialogVisible, setDialogVisible] = useState(false)\n\n  const hide = useCallback(() => {\n    setDialogVisible(false)\n  }, [])\n  const show = useCallback(() => {\n    setDialogVisible(true)\n  }, [])\n\n  return {\n    visible: dialogVisible,\n    show,\n    hide,\n  }\n}\n","import DialogTimeZone from '../components/dialogs/DialogTimeZone'\nimport {useDialogVisible} from './useDialogVisibile'\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nfunction useDialogTimeZone() {\n  const {visible, show, hide} = useDialogVisible()\n\n  const dialogProps = {\n    onClose: hide,\n    visible,\n  }\n\n  return {\n    DialogTimeZone: visible ? DialogTimeZone : null,\n    dialogProps,\n    dialogTimeZoneShow: show,\n    hide,\n  }\n}\n\nexport default useDialogTimeZone\n","import {TextInput, type TextInputProps} from '@sanity/ui'\nimport {\n  type ChangeEvent,\n  type FocusEvent,\n  type ForwardedRef,\n  forwardRef,\n  type HTMLProps,\n  type KeyboardEvent,\n  type SyntheticEvent,\n  useCallback,\n  useState,\n} from 'react'\n\n/**\n * A TextInput that only emit onChange when it has to\n * By default it will only emit onChange when: 1) user hits enter or 2) user leaves the\n * field (e.g. onBlur) and the input value at this time is different from the given `value` prop\n */\nexport const LazyTextInput = forwardRef(function LazyTextInput(\n  {onChange, onBlur, onKeyPress, value, ...rest}: TextInputProps & HTMLProps<HTMLInputElement>,\n  forwardedRef: ForwardedRef<HTMLInputElement>,\n) {\n  const [inputValue, setInputValue] = useState<string>()\n\n  const handleChange = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n    setInputValue(event.currentTarget.value)\n  }, [])\n\n  const checkEvent = useCallback(\n    (event: SyntheticEvent<HTMLInputElement>) => {\n      const currentValue = event.currentTarget.value\n      if (currentValue !== `${value}`) {\n        if (onChange) {\n          onChange(event)\n        }\n      }\n      setInputValue(undefined)\n    },\n    [onChange, value],\n  )\n\n  const handleBlur = useCallback(\n    (e: FocusEvent<HTMLInputElement>) => {\n      checkEvent(e)\n      if (onBlur) {\n        onBlur(e)\n      }\n    },\n    [checkEvent, onBlur],\n  )\n\n  const handleKeyPress = useCallback(\n    (e: KeyboardEvent<HTMLInputElement>) => {\n      if (e.key === 'Enter') {\n        checkEvent(e)\n      }\n      if (onKeyPress) {\n        onKeyPress(e)\n      }\n    },\n    [checkEvent, onKeyPress],\n  )\n\n  return (\n    <TextInput\n      {...rest}\n      ref={forwardedRef}\n      value={inputValue === undefined ? value : inputValue}\n      onChange={handleChange}\n      onBlur={handleBlur}\n      onKeyPress={handleKeyPress}\n    />\n  )\n})\n","import {styled} from 'styled-components'\n\nimport {LazyTextInput} from './LazyTextInput'\n\nexport const TimeInput = styled(LazyTextInput).attrs(() => ({\n  type: 'time',\n}))`\n  line-height: 1;\n`\n","import {Card, Text} from '@sanity/ui'\nimport {isPast} from 'date-fns'\nimport {useCallback} from 'react'\n\ninterface CalendarDayProps {\n  date: Date\n  focused?: boolean\n  onSelect: (date: Date) => void\n  isCurrentMonth?: boolean\n  isToday: boolean\n  selected?: boolean\n  isPastDisabled?: boolean\n}\n\nexport function CalendarDay(props: CalendarDayProps) {\n  const {date, focused, isCurrentMonth, isToday, onSelect, selected, isPastDisabled} = props\n\n  const handleClick = useCallback(() => {\n    onSelect(date)\n  }, [date, onSelect])\n\n  return (\n    <div aria-selected={selected} data-ui=\"CalendarDay\">\n      <Card\n        aria-label={date.toDateString()}\n        aria-pressed={selected}\n        as=\"button\"\n        __unstable_focusRing\n        data-weekday\n        data-focused={focused ? 'true' : ''}\n        role=\"button\"\n        tabIndex={-1}\n        disabled={isPastDisabled && !isToday && isPast(date)}\n        onClick={handleClick}\n        padding={2}\n        radius={2}\n        selected={selected}\n        tone={isToday || selected ? 'primary' : 'default'}\n      >\n        <Text\n          muted={!selected && !isCurrentMonth}\n          size={1}\n          style={{textAlign: 'center'}}\n          weight={isCurrentMonth ? 'medium' : 'regular'}\n        >\n          {date.getDate()}\n        </Text>\n      </Card>\n    </div>\n  )\n}\n","export const DEFAULT_MONTH_NAMES = [\n  'January',\n  'February',\n  'March',\n  'April',\n  'May',\n  'June',\n  'July',\n  'August',\n  'September',\n  'October',\n  'November',\n  'December',\n]\n\nexport const DEFAULT_WEEK_DAY_NAMES = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']\n\nexport const ARROW_KEYS = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight']\n\nexport const DEFAULT_TIME_PRESETS = [\n  [0, 0],\n  [6, 0],\n  [12, 0],\n  [18, 0],\n  [23, 59],\n]\n\n// all weekdays except first\nexport const TAIL_WEEKDAYS = [1, 2, 3, 4, 5, 6]\n","import {addDays, eachWeekOfInterval, getWeek, lastDayOfMonth, startOfMonth} from 'date-fns'\n\nimport {useCurrentLocale} from '../../../../i18n/hooks/useLocale'\nimport {TAIL_WEEKDAYS} from './constants'\n\n/**\n * NOTE: `weekStartsOn` uses 1 for Monday, 7 for Sunday. date-fns wants 0 for Sunday, 6 for Saturday.\n */\nconst getWeekStartsOfMonth = (date: Date, weekStartsOn: 1 | 2 | 3 | 4 | 5 | 6 | 7): Date[] => {\n  const firstDay = startOfMonth(date)\n  return eachWeekOfInterval(\n    {\n      start: firstDay,\n      end: lastDayOfMonth(firstDay),\n    },\n    {\n      weekStartsOn: weekStartsOn === 7 ? 0 : weekStartsOn,\n    },\n  )\n}\n\nconst getWeekDaysFromWeekStarts = (weekStarts: Date[]): Date[][] => {\n  return weekStarts.map((weekStart) => [\n    weekStart,\n    ...TAIL_WEEKDAYS.map((d) => addDays(weekStart, d)),\n  ])\n}\n\ntype Week = {\n  number: number\n  days: Date[]\n}\n\nexport const useWeeksOfMonth = (date: Date): Week[] => {\n  const {weekInfo} = useCurrentLocale()\n  return getWeekDaysFromWeekStarts(getWeekStartsOfMonth(date, weekInfo.firstDay)).map(\n    (days): Week => ({\n      number: getWeek(days[0]),\n      days,\n    }),\n  )\n}\n\nexport const formatTime = (hours: number, minutes: number): string =>\n  `${`${hours}`.padStart(2, '0')}:${`${minutes}`.padStart(2, '0')}`\n","import {Box, Grid, Text} from '@sanity/ui'\nimport {isSameDay, isSameMonth} from 'date-fns'\n\nimport {useCurrentLocale} from '../../../../i18n/hooks/useLocale'\nimport {CalendarDay} from './CalendarDay'\nimport {useWeeksOfMonth} from './utils'\n\ninterface CalendarMonthProps {\n  date: Date\n  focused?: Date\n  selected?: Date\n  onSelect: (date: Date) => void\n  hidden?: boolean\n  isPastDisabled?: boolean\n  weekDayNames: [\n    mon: string,\n    tue: string,\n    wed: string,\n    thu: string,\n    fri: string,\n    sat: string,\n    sun: string,\n  ]\n}\n\nexport function CalendarMonth(props: CalendarMonthProps) {\n  const {\n    weekInfo: {firstDay: weekStartDay},\n  } = useCurrentLocale()\n\n  let weekDayNames: Array<string> = props.weekDayNames\n  if (weekStartDay === 7) {\n    weekDayNames = [props.weekDayNames[6], ...props.weekDayNames.slice(0, 6)]\n  } else if (weekStartDay === 6) {\n    weekDayNames = [...props.weekDayNames.slice(5), ...props.weekDayNames.slice(0, 5)]\n  }\n\n  return (\n    <Box aria-hidden={props.hidden || false} data-ui=\"CalendarMonth\">\n      <Grid gap={1} style={{gridTemplateColumns: 'repeat(7, minmax(44px, 46px))'}}>\n        {weekDayNames.map((weekday) => (\n          <Box key={weekday} paddingY={2}>\n            <Text size={1} weight=\"medium\" style={{textAlign: 'center'}}>\n              {weekday}\n            </Text>\n          </Box>\n        ))}\n\n        {useWeeksOfMonth(props.date).map((week, weekIdx) =>\n          week.days.map((date, dayIdx) => {\n            const focused = props.focused && isSameDay(date, props.focused)\n            const selected = props.selected && isSameDay(date, props.selected)\n            const isToday = isSameDay(date, new Date())\n            const isCurrentMonth = props.focused && isSameMonth(date, props.focused)\n\n            return (\n              <CalendarDay\n                date={date}\n                focused={focused}\n                isCurrentMonth={isCurrentMonth}\n                isToday={isToday}\n                // eslint-disable-next-line react/no-array-index-key\n                key={`${weekIdx}-${dayIdx}`}\n                onSelect={props.onSelect}\n                selected={selected}\n                isPastDisabled={props.isPastDisabled}\n              />\n            )\n          }),\n        )}\n      </Grid>\n    </Box>\n  )\n}\n","export const features = {\n  dayPresets: false,\n  timePresets: false,\n}\n","import {type TextInputProps} from '@sanity/ui'\nimport {type ChangeEvent, type HTMLProps, useCallback} from 'react'\n\nimport {LazyTextInput} from '../LazyTextInput'\n\nexport const YearInput = (\n  props: {onChange: (year: number) => void} & TextInputProps &\n    Omit<HTMLProps<HTMLInputElement>, 'onChange' | 'ref'>,\n) => {\n  const {onChange, ...restProps} = props\n\n  const handleChange = useCallback(\n    (event: ChangeEvent<HTMLInputElement>) => {\n      const numericValue = parseInt(event.currentTarget.value, 10)\n      if (!isNaN(numericValue)) {\n        onChange(numericValue)\n      }\n    },\n    [onChange],\n  )\n\n  return (\n    <LazyTextInput\n      data-testid=\"date-input\"\n      {...restProps}\n      fontSize={1}\n      onChange={handleChange}\n      inputMode=\"numeric\"\n      padding={2}\n      radius={2}\n    />\n  )\n}\n","import {ChevronLeftIcon, ChevronRightIcon, EarthGlobeIcon} from '@sanity/icons'\nimport {Box, Flex, Grid, Select, Text} from '@sanity/ui'\nimport {\n  addDays,\n  addMonths,\n  format,\n  parse,\n  setDate,\n  setHours,\n  setMinutes,\n  setMonth,\n  setYear,\n} from 'date-fns'\nimport {\n  type ComponentProps,\n  type FormEvent,\n  type ForwardedRef,\n  forwardRef,\n  type KeyboardEvent,\n  useCallback,\n  useEffect,\n  useImperativeHandle,\n  useMemo,\n  useRef,\n} from 'react'\n\nimport {Button} from '../../../../../ui-components/button/Button'\nimport {TooltipDelayGroupProvider} from '../../../../../ui-components/tooltipDelayGroupProvider/TooltipDelayGroupProvider'\nimport useDialogTimeZone from '../../../../scheduledPublishing/hooks/useDialogTimeZone'\nimport useTimeZone from '../../../../scheduledPublishing/hooks/useTimeZone'\nimport {TimeInput} from '../TimeInput'\nimport {CalendarMonth} from './CalendarMonth'\nimport {ARROW_KEYS, DEFAULT_TIME_PRESETS} from './constants'\nimport {features} from './features'\nimport {type CalendarLabels, type MonthNames} from './types'\nimport {formatTime} from './utils'\nimport {YearInput} from './YearInput'\n\nexport const MONTH_PICKER_VARIANT = {\n  select: 'select',\n  carousel: 'carousel',\n} as const\n\nexport type CalendarProps = Omit<ComponentProps<'div'>, 'onSelect'> & {\n  selectTime?: boolean\n  selectedDate?: Date\n  timeStep?: number\n  onSelect: (date: Date) => void\n  focusedDate: Date\n  onFocusedDateChange: (index: Date) => void\n  labels: CalendarLabels\n  monthPickerVariant?: (typeof MONTH_PICKER_VARIANT)[keyof typeof MONTH_PICKER_VARIANT]\n  padding?: number\n  showTimezone?: boolean\n  isPastDisabled?: boolean\n}\n\n// This is used to maintain focus on a child element of the calendar-grid between re-renders\n// When using arrow keys to move focus from a day in one month to another we are setting focus at the button for the day\n// after it has changed but *only* if we *already* had focus inside the calendar grid (e.g not if focus was on the \"next\n// year\" button, or any of the other controls)\n// When moving from the last day of a month that displays 6 weeks in the grid to a month that displays 5 weeks, current\n// focus gets lost on render, so this provides us with a stable element to help us preserve focus on a child element of\n// the calendar grid between re-renders\nconst PRESERVE_FOCUS_ELEMENT = (\n  <span\n    data-preserve-focus\n    style={{overflow: 'hidden', position: 'absolute', outline: 'none'}}\n    tabIndex={-1}\n  />\n)\n\n// This buttons use a specific styling, given they are intended to be aligned with the select elements.\nconst CALENDAR_ICON_BUTTON_PROPS = {\n  padding: 2,\n}\n\nexport const Calendar = forwardRef(function Calendar(\n  props: CalendarProps,\n  forwardedRef: ForwardedRef<HTMLDivElement>,\n) {\n  const {\n    selectTime,\n    onFocusedDateChange,\n    selectedDate = new Date(),\n    focusedDate = selectedDate,\n    timeStep = 1,\n    onSelect,\n    labels,\n    isPastDisabled,\n    monthPickerVariant = 'select',\n    padding = 2,\n    showTimezone = false,\n    ...restProps\n  } = props\n\n  const {timeZone} = useTimeZone()\n  const {DialogTimeZone, dialogProps, dialogTimeZoneShow} = useDialogTimeZone()\n\n  const setFocusedDate = useCallback(\n    (date: Date) => onFocusedDateChange(date),\n    [onFocusedDateChange],\n  )\n\n  const setFocusedDateMonth = useCallback(\n    (month: number) => setFocusedDate(setDate(setMonth(focusedDate, month), 1)),\n    [focusedDate, setFocusedDate],\n  )\n\n  const handleFocusedMonthChange = useCallback(\n    (e: FormEvent<HTMLSelectElement>) => setFocusedDateMonth(Number(e.currentTarget.value)),\n    [setFocusedDateMonth],\n  )\n\n  const moveFocusedDate = useCallback(\n    (by: number) => setFocusedDate(addMonths(focusedDate, by)),\n    [focusedDate, setFocusedDate],\n  )\n\n  const setFocusedDateYear = useCallback(\n    (year: number) => setFocusedDate(setYear(focusedDate, year)),\n    [focusedDate, setFocusedDate],\n  )\n\n  const handleDateChange = useCallback(\n    (date: Date) => {\n      onSelect(setMinutes(setHours(date, selectedDate.getHours()), selectedDate.getMinutes()))\n    },\n    [onSelect, selectedDate],\n  )\n\n  const handleTimeChange = useCallback(\n    (hours: number, mins: number) => {\n      onSelect(setHours(setMinutes(selectedDate, mins), hours))\n    },\n    [onSelect, selectedDate],\n  )\n\n  const handleTimeChangeInputChange = useCallback(\n    (event: FormEvent<HTMLInputElement>) => {\n      const date = parse(event.currentTarget.value, 'HH:mm', new Date())\n      handleTimeChange(date.getHours(), date.getMinutes())\n    },\n    [handleTimeChange],\n  )\n\n  const ref = useRef<HTMLDivElement | null>(null)\n\n  useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(forwardedRef, () => ref.current)\n\n  const focusCurrentWeekDay = useCallback(() => {\n    ref.current?.querySelector<HTMLElement>(`[data-focused=\"true\"]`)?.focus()\n  }, [ref])\n\n  const handleKeyDown = useCallback(\n    (event: KeyboardEvent<HTMLDivElement>) => {\n      if (!ARROW_KEYS.includes(event.key)) {\n        return\n      }\n      const target = event.currentTarget\n      event.preventDefault()\n      if (target.hasAttribute('data-calendar-grid')) {\n        focusCurrentWeekDay()\n        return\n      }\n      if (event.key === 'ArrowUp') {\n        onFocusedDateChange(addDays(focusedDate, -7))\n      }\n      if (event.key === 'ArrowDown') {\n        onFocusedDateChange(addDays(focusedDate, 7))\n      }\n      if (event.key === 'ArrowLeft') {\n        onFocusedDateChange(addDays(focusedDate, -1))\n      }\n      if (event.key === 'ArrowRight') {\n        onFocusedDateChange(addDays(focusedDate, 1))\n      }\n      // set focus temporarily on this element to make sure focus is still inside the calendar-grid after re-render\n      ref.current?.querySelector<HTMLElement>('[data-preserve-focus]')?.focus()\n    },\n    [ref, focusCurrentWeekDay, onFocusedDateChange, focusedDate],\n  )\n\n  useEffect(() => {\n    focusCurrentWeekDay()\n  }, [focusCurrentWeekDay])\n\n  useEffect(() => {\n    const currentFocusInCalendarGrid = document.activeElement?.matches(\n      '[data-calendar-grid], [data-calendar-grid] [data-preserve-focus]',\n    )\n    if (\n      // Only move focus if it's currently in the calendar grid\n      currentFocusInCalendarGrid\n    ) {\n      focusCurrentWeekDay()\n    }\n  }, [ref, focusCurrentWeekDay, focusedDate])\n\n  const handleYesterdayClick = useCallback(\n    () => handleDateChange(addDays(new Date(), -1)),\n    [handleDateChange],\n  )\n\n  const handleTodayClick = useCallback(() => handleDateChange(new Date()), [handleDateChange])\n\n  const handleTomorrowClick = useCallback(\n    () => handleDateChange(addDays(new Date(), 1)),\n    [handleDateChange],\n  )\n\n  const monthPicker = useMemo(() => {\n    if (monthPickerVariant === 'carousel') {\n      return (\n        <Flex\n          align=\"center\"\n          paddingLeft={4}\n          style={{\n            borderBottom: '1px solid var(--card-border-color)',\n            minHeight: `55px`,\n            position: 'sticky',\n            top: 0,\n          }}\n        >\n          <Flex align=\"center\" flex={1} justify=\"space-between\">\n            <Flex align=\"center\" flex={1}>\n              <Text weight=\"medium\" size={1}>\n                {labels.monthNames[(focusedDate || new Date())?.getMonth()]}{' '}\n                {(focusedDate || new Date())?.getFullYear()}\n              </Text>\n            </Flex>\n\n            <Flex paddingRight={3} gap={2}>\n              <TooltipDelayGroupProvider>\n                <Button\n                  icon={ChevronLeftIcon}\n                  mode=\"bleed\"\n                  onClick={() => moveFocusedDate(-1)}\n                  data-testid=\"calendar-prev-month\"\n                  tooltipProps={{content: 'Previous month'}}\n                />\n                <Button\n                  icon={ChevronRightIcon}\n                  mode=\"bleed\"\n                  onClick={() => moveFocusedDate(1)}\n                  data-testid=\"calendar-next-month\"\n                  tooltipProps={{content: 'Next month'}}\n                />\n              </TooltipDelayGroupProvider>\n            </Flex>\n          </Flex>\n        </Flex>\n      )\n    }\n\n    return (\n      <Flex>\n        <Box flex={1}>\n          <CalendarMonthSelect\n            onChange={handleFocusedMonthChange}\n            monthNames={labels.monthNames}\n            value={focusedDate?.getMonth()}\n          />\n        </Box>\n        <Box marginLeft={2}>\n          <CalendarYearSelect\n            moveFocusedDate={moveFocusedDate}\n            labels={{\n              goToNextYear: labels.goToNextYear,\n              goToPreviousYear: labels.goToPreviousYear,\n            }}\n            onChange={setFocusedDateYear}\n            value={focusedDate.getFullYear()}\n          />\n        </Box>\n      </Flex>\n    )\n  }, [\n    focusedDate,\n    handleFocusedMonthChange,\n    labels.goToNextYear,\n    labels.goToPreviousYear,\n    labels.monthNames,\n    monthPickerVariant,\n    moveFocusedDate,\n    setFocusedDateYear,\n  ])\n\n  const handleNowClick = useCallback(() => onSelect(new Date()), [onSelect])\n\n  return (\n    <Box data-ui=\"Calendar\" {...restProps} ref={ref}>\n      {/* Select date */}\n      <Box padding={padding}>\n        {/* Day presets */}\n        {features.dayPresets && (\n          <Grid columns={3} data-ui=\"CalendaryDayPresets\" gap={1}>\n            <Button text={labels.goToYesterday} mode=\"bleed\" onClick={handleYesterdayClick} />\n            <Button text={labels.goToToday} mode=\"bleed\" onClick={handleTodayClick} />\n            <Button text={labels.goToTomorrow} mode=\"bleed\" onClick={handleTomorrowClick} />\n          </Grid>\n        )}\n\n        {/* Select month and year */}\n        {monthPicker}\n\n        {/* Selected month (grid of days) */}\n        <Box\n          data-calendar-grid\n          onKeyDown={handleKeyDown}\n          marginY={2}\n          overflow=\"hidden\"\n          tabIndex={0}\n        >\n          <CalendarMonth\n            weekDayNames={labels.weekDayNamesShort}\n            date={focusedDate}\n            focused={focusedDate}\n            onSelect={handleDateChange}\n            selected={selectedDate}\n            isPastDisabled={isPastDisabled}\n          />\n          {PRESERVE_FOCUS_ELEMENT}\n        </Box>\n      </Box>\n\n      <Box padding={2} style={{borderTop: '1px solid var(--card-border-color)'}}>\n        <Flex align=\"center\" justify=\"space-between\">\n          {/* Select time */}\n          {selectTime && (\n            <>\n              <Flex align=\"center\">\n                <TimeInput\n                  aria-label={labels.selectTime}\n                  value={format(selectedDate, 'HH:mm')}\n                  onChange={handleTimeChangeInputChange}\n                />\n                <Box marginLeft={2}>\n                  <Button text={labels.setToCurrentTime} mode=\"bleed\" onClick={handleNowClick} />\n                </Box>\n              </Flex>\n\n              {showTimezone && (\n                <Button\n                  icon={EarthGlobeIcon}\n                  mode=\"bleed\"\n                  size=\"default\"\n                  text={`${timeZone.abbreviation}`}\n                  onClick={dialogTimeZoneShow}\n                />\n              )}\n\n              {features.timePresets && (\n                <Flex direction=\"row\" justify=\"center\" align=\"center\" style={{marginTop: 5}}>\n                  {DEFAULT_TIME_PRESETS.map(([hours, minutes]) => {\n                    const text = formatTime(hours, minutes)\n                    return (\n                      <CalendarTimePresetButton\n                        key={`${hours}-${minutes}`}\n                        hours={hours}\n                        minutes={minutes}\n                        onTimeChange={handleTimeChange}\n                        text={text}\n                        aria-label={labels.setToTimePreset(text, selectedDate)}\n                      />\n                    )\n                  })}\n                </Flex>\n              )}\n            </>\n          )}\n\n          {showTimezone && DialogTimeZone && <DialogTimeZone {...dialogProps} />}\n        </Flex>\n      </Box>\n    </Box>\n  )\n})\n\nfunction CalendarTimePresetButton(props: {\n  'hours': number\n  'minutes': number\n  'onTimeChange': (hours: number, minutes: number) => void\n  'aria-label': string\n  'text': string\n}) {\n  const {hours, minutes, text, onTimeChange} = props\n\n  const handleClick = useCallback(() => {\n    onTimeChange(hours, minutes)\n  }, [hours, minutes, onTimeChange])\n\n  return <Button text={text} aria-label={props['aria-label']} mode=\"bleed\" onClick={handleClick} />\n}\n\nfunction CalendarMonthSelect(props: {\n  onChange: (e: FormEvent<HTMLSelectElement>) => void\n  value?: number\n  monthNames: MonthNames\n}) {\n  const {onChange, value, monthNames} = props\n\n  return (\n    <Flex flex={1} gap={1}>\n      <Box flex={1}>\n        <Select fontSize={1} radius={2} value={value} onChange={onChange} padding={2}>\n          {monthNames.map((monthName, i) => (\n            // eslint-disable-next-line react/no-array-index-key\n            <option key={i} value={i}>\n              {monthName}\n            </option>\n          ))}\n        </Select>\n      </Box>\n    </Flex>\n  )\n}\n\nfunction CalendarYearSelect(props: {\n  moveFocusedDate: (by: number) => void\n  onChange: (year: number) => void\n  value?: number\n  labels: {goToNextYear: string; goToPreviousYear: string}\n}) {\n  const {moveFocusedDate, onChange, value, labels} = props\n\n  const handlePrevYearClick = useCallback(() => moveFocusedDate(-12), [moveFocusedDate])\n\n  const handleNextYearClick = useCallback(() => moveFocusedDate(12), [moveFocusedDate])\n\n  return (\n    <Flex gap={1}>\n      <Button\n        aria-label={labels.goToPreviousYear}\n        onClick={handlePrevYearClick}\n        mode=\"bleed\"\n        icon={ChevronLeftIcon}\n        tooltipProps={{content: 'Previous year'}}\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore - Button with specific styling requirements\n        {...CALENDAR_ICON_BUTTON_PROPS}\n      />\n      <YearInput value={value} onChange={onChange} radius={0} style={{width: 48}} />\n      <Button\n        aria-label={labels.goToNextYear}\n        onClick={handleNextYearClick}\n        mode=\"bleed\"\n        icon={ChevronRightIcon}\n        tooltipProps={{content: 'Next year'}}\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore - Button with specific styling requirements\n        {...CALENDAR_ICON_BUTTON_PROPS}\n      />\n    </Flex>\n  )\n}\n","import {type ComponentProps, type ForwardedRef, forwardRef, useCallback, useState} from 'react'\n\nimport {Calendar, type CalendarProps} from './calendar/Calendar'\nimport {type CalendarLabels} from './calendar/types'\n\nexport const DatePicker = forwardRef(function DatePicker(\n  props: Omit<ComponentProps<'div'>, 'onChange'> & {\n    value?: Date\n    onChange: (nextDate: Date) => void\n    selectTime?: boolean\n    timeStep?: number\n    calendarLabels: CalendarLabels\n    monthPickerVariant?: CalendarProps['monthPickerVariant']\n    padding?: number\n    showTimezone?: boolean\n    isPastDisabled?: boolean\n  },\n  ref: ForwardedRef<HTMLDivElement>,\n) {\n  const {\n    value = new Date(),\n    onChange,\n    calendarLabels,\n    padding = 2,\n    showTimezone = false,\n    ...rest\n  } = props\n  const [focusedDate, setFocusedDay] = useState<Date>()\n\n  const handleSelect = useCallback(\n    (nextDate: Date) => {\n      onChange(nextDate)\n      setFocusedDay(undefined)\n    },\n    [onChange],\n  )\n\n  return (\n    <Calendar\n      {...rest}\n      labels={calendarLabels}\n      ref={ref}\n      selectedDate={value}\n      onSelect={handleSelect}\n      focusedDate={focusedDate || value}\n      onFocusedDateChange={setFocusedDay}\n      padding={padding}\n      showTimezone={showTimezone}\n    />\n  )\n})\n","import {CalendarIcon} from '@sanity/icons'\nimport {Box, Card, Flex, LayerProvider, Text, useClickOutsideEvent} from '@sanity/ui'\nimport {isPast} from 'date-fns'\nimport {\n  type FocusEvent,\n  type ForwardedRef,\n  forwardRef,\n  type KeyboardEvent,\n  useCallback,\n  useEffect,\n  useImperativeHandle,\n  useMemo,\n  useRef,\n  useState,\n} from 'react'\nimport FocusLock from 'react-focus-lock'\n\nimport {Button} from '../../../../ui-components/button/Button'\nimport {Popover} from '../../../../ui-components/popover/Popover'\nimport {useTranslation} from '../../../i18n'\nimport useTimeZone from '../../../scheduledPublishing/hooks/useTimeZone'\nimport {type CalendarProps} from './calendar/Calendar'\nimport {type CalendarLabels} from './calendar/types'\nimport {DatePicker} from './DatePicker'\nimport {LazyTextInput} from './LazyTextInput'\n\nexport interface DateTimeInputProps {\n  customValidity?: string\n  id?: string\n  inputValue?: string\n  onChange: (date: Date | null) => void\n  onInputChange?: (event: FocusEvent<HTMLInputElement>) => void\n  placeholder?: string\n  readOnly?: boolean\n  selectTime?: boolean\n  timeStep?: number\n  value?: Date\n  calendarLabels: CalendarLabels\n  constrainSize?: boolean\n  monthPickerVariant?: CalendarProps['monthPickerVariant']\n  padding?: number\n  disableInput?: boolean\n  isPastDisabled?: boolean\n}\n\nexport const DateTimeInput = forwardRef(function DateTimeInput(\n  props: DateTimeInputProps,\n  forwardedRef: ForwardedRef<HTMLInputElement>,\n) {\n  const {\n    value,\n    inputValue,\n    onInputChange,\n    onChange,\n    selectTime,\n    timeStep,\n    calendarLabels,\n    readOnly,\n    constrainSize = true,\n    monthPickerVariant,\n    padding,\n    disableInput,\n    isPastDisabled,\n    ...rest\n  } = props\n  const {t} = useTranslation()\n  const popoverRef = useRef<HTMLDivElement | null>(null)\n  const ref = useRef<HTMLInputElement | null>(null)\n  const buttonRef = useRef(null)\n  const {zoneDateToUtc} = useTimeZone()\n\n  const [referenceElement, setReferenceElement] = useState<HTMLInputElement | null>(null)\n\n  useImperativeHandle<HTMLInputElement | null, HTMLInputElement | null>(\n    forwardedRef,\n    () => ref.current,\n  )\n\n  /**\n   * Setting referenceElement in effect makes sure it's up to date after the initial render\n   * cycle - avoiding referenceElement used byPopover from being out of sync with render state\n   */\n  useEffect(() => setReferenceElement(ref.current), [])\n\n  const [isPickerOpen, setPickerOpen] = useState(false)\n\n  useClickOutsideEvent(\n    () => setPickerOpen(false),\n    () => [popoverRef.current],\n  )\n\n  const handleDeactivation = useCallback(() => {\n    ref.current?.focus()\n    ref.current?.select()\n  }, [])\n\n  const handleKeyUp = useCallback((e: KeyboardEvent<HTMLDivElement>) => {\n    if (e.key === 'Escape') {\n      setPickerOpen(false)\n    }\n  }, [])\n\n  const handleClick = useCallback(() => setPickerOpen(true), [])\n\n  const isDateInPastWarningShown = useMemo(\n    () => inputValue && isPastDisabled && isPast(zoneDateToUtc(new Date(inputValue))),\n    [inputValue, isPastDisabled, zoneDateToUtc],\n  )\n\n  const suffix = readOnly ? null : (\n    <Flex style={{padding: '5px'}}>\n      <Button\n        disabled={readOnly}\n        aria-label={calendarLabels.ariaLabel}\n        ref={buttonRef}\n        icon={CalendarIcon}\n        mode=\"bleed\"\n        onClick={handleClick}\n        style={{display: 'block'}}\n        data-testid=\"select-date-button\"\n        tooltipProps={{content: calendarLabels.tooltipText}}\n      />\n    </Flex>\n  )\n\n  return (\n    <LazyTextInput\n      ref={ref}\n      data-testid=\"date-input\"\n      {...rest}\n      readOnly={disableInput || readOnly}\n      value={inputValue}\n      onChange={onInputChange}\n      suffix={\n        isPickerOpen ? (\n          // Note: we're conditionally inserting the popover here due to an\n          // issue with popovers rendering incorrectly on subsequent renders\n          // see https://github.com/sanity-io/design/issues/519\n          <LayerProvider zOffset={1000}>\n            <Popover\n              constrainSize={constrainSize}\n              data-testid=\"date-input-dialog\"\n              referenceElement={referenceElement}\n              portal\n              content={\n                <Box overflow=\"auto\">\n                  <FocusLock onDeactivation={handleDeactivation}>\n                    {isDateInPastWarningShown && (\n                      <Card margin={1} padding={2} radius={2} shadow={1} tone=\"critical\">\n                        <Text size={1}>{t('inputs.dateTime.past-date-warning')}</Text>\n                      </Card>\n                    )}\n                    <DatePicker\n                      monthPickerVariant={monthPickerVariant}\n                      calendarLabels={calendarLabels}\n                      selectTime={selectTime}\n                      timeStep={timeStep}\n                      onKeyUp={handleKeyUp}\n                      value={value}\n                      isPastDisabled={isPastDisabled}\n                      onChange={onChange}\n                      padding={padding}\n                    />\n                  </FocusLock>\n                </Box>\n              }\n              open\n              placement=\"bottom\"\n              ref={popoverRef}\n            >\n              <>{suffix}</>\n            </Popover>\n          </LayerProvider>\n        ) : (\n          suffix\n        )\n      }\n    />\n  )\n})\n","/* eslint-disable no-nested-ternary */\n\nimport {\n  type FocusEvent,\n  type ForwardedRef,\n  forwardRef,\n  useCallback,\n  useEffect,\n  useImperativeHandle,\n  useRef,\n  useState,\n} from 'react'\n\nimport {type CalendarLabels} from '../../../components/inputs/DateInputs/calendar/types'\nimport {DateTimeInput} from '../../../components/inputs/DateInputs/DateTimeInput'\nimport {useTranslation} from '../../../i18n/hooks/useTranslation'\nimport {type ParseResult} from './types'\n\nexport interface CommonDateTimeInputProps {\n  id: string\n  deserialize: (value: string) => ParseResult\n  formatInputValue: (date: Date) => string\n  onChange: (nextDate: string | null) => void\n  parseInputValue: (inputValue: string) => ParseResult\n  placeholder?: string\n  readOnly: boolean | undefined\n  selectTime?: boolean\n  serialize: (date: Date) => string\n  timeStep?: number\n  value: string | undefined\n  calendarLabels: CalendarLabels\n}\n\nconst DEFAULT_PLACEHOLDER_TIME = new Date()\n\nexport const CommonDateTimeInput = forwardRef(function CommonDateTimeInput(\n  props: CommonDateTimeInputProps,\n  forwardedRef: ForwardedRef<HTMLInputElement>,\n) {\n  const {\n    id,\n    deserialize,\n    formatInputValue,\n    onChange,\n    parseInputValue,\n    placeholder,\n    readOnly,\n    selectTime,\n    serialize,\n    timeStep,\n    value,\n    ...restProps\n  } = props\n\n  const [localValue, setLocalValue] = useState<string | null>(null)\n\n  const {t} = useTranslation()\n\n  useEffect(() => {\n    setLocalValue(null)\n  }, [value])\n\n  const handleDatePickerInputChange = useCallback(\n    (event: FocusEvent<HTMLInputElement>) => {\n      const nextInputValue = event.currentTarget.value\n      const result = nextInputValue === '' ? null : parseInputValue(nextInputValue)\n\n      if (result === null) {\n        onChange(null)\n\n        // If the field value is undefined and we are clearing the invalid value\n        // the above useEffect won't trigger, so we do some extra clean up here\n        if (typeof value === 'undefined' && localValue) {\n          setLocalValue(null)\n        }\n      } else if (result.isValid) {\n        onChange(serialize(result.date))\n      } else {\n        setLocalValue(nextInputValue)\n      }\n    },\n    [parseInputValue, onChange, value, localValue, serialize],\n  )\n\n  const handleDatePickerChange = useCallback(\n    (nextDate: Date | null) => {\n      onChange(nextDate ? serialize(nextDate) : null)\n    },\n    [serialize, onChange],\n  )\n\n  const ref = useRef<HTMLInputElement | null>(null)\n\n  useImperativeHandle<HTMLInputElement | null, HTMLInputElement | null>(\n    forwardedRef,\n    () => ref.current,\n  )\n\n  const parseResult = localValue ? parseInputValue(localValue) : value ? deserialize(value) : null\n\n  const inputValue = localValue\n    ? localValue\n    : parseResult?.isValid\n      ? formatInputValue(parseResult.date)\n      : value\n\n  return (\n    <DateTimeInput\n      {...restProps}\n      calendarLabels={props.calendarLabels}\n      id={id}\n      selectTime={selectTime}\n      timeStep={timeStep}\n      placeholder={\n        placeholder ||\n        t('inputs.datetime.placeholder', {\n          example: formatInputValue(DEFAULT_PLACEHOLDER_TIME),\n        })\n      }\n      ref={ref}\n      value={parseResult?.date}\n      inputValue={inputValue || ''}\n      readOnly={Boolean(readOnly)}\n      onInputChange={handleDatePickerInputChange}\n      onChange={handleDatePickerChange}\n      customValidity={parseResult?.error}\n    />\n  )\n})\n","import {type CalendarLabels} from '../../../components/inputs/DateInputs/calendar/types'\n\nexport function isValidDate(date: Date): boolean {\n  return date instanceof Date && !isNaN(date.valueOf())\n}\n\n/**\n * @internal\n */\nexport function getCalendarLabels(\n  t: (key: string, values?: Record<string, unknown>) => string,\n): CalendarLabels {\n  return {\n    ariaLabel: t('calendar.button.aria-label'),\n    goToTomorrow: t('calendar.action.go-to-tomorrow'),\n    goToToday: t('calendar.action.go-to-today'),\n    goToYesterday: t('calendar.action.go-to-yesterday'),\n    goToNextMonth: t('calendar.action.go-to-next-month'),\n    goToPreviousMonth: t('calendar.action.go-to-previous-month'),\n    goToNextYear: t('calendar.action.go-to-next-year'),\n    goToPreviousYear: t('calendar.action.go-to-previous-year'),\n    setToCurrentTime: t('calendar.action.set-to-current-time'),\n    selectTime: t('calendar.action.select-time'),\n    tooltipText: t('calendar.button.tooltip-text'),\n    monthNames: [\n      t('calendar.month-names.january'),\n      t('calendar.month-names.february'),\n      t('calendar.month-names.march'),\n      t('calendar.month-names.april'),\n      t('calendar.month-names.may'),\n      t('calendar.month-names.june'),\n      t('calendar.month-names.july'),\n      t('calendar.month-names.august'),\n      t('calendar.month-names.september'),\n      t('calendar.month-names.october'),\n      t('calendar.month-names.november'),\n      t('calendar.month-names.december'),\n    ],\n    weekDayNamesShort: [\n      t('calendar.weekday-names.short.monday'),\n      t('calendar.weekday-names.short.tuesday'),\n      t('calendar.weekday-names.short.wednesday'),\n      t('calendar.weekday-names.short.thursday'),\n      t('calendar.weekday-names.short.friday'),\n      t('calendar.weekday-names.short.saturday'),\n      t('calendar.weekday-names.short.sunday'),\n    ],\n    setToTimePreset: (time, date) => t('calendar.action.set-to-time-preset', {time, date}),\n  }\n}\n","import {DEFAULT_DATE_FORMAT, format, parse} from '@sanity/util/legacyDateFormat'\nimport {useCallback, useMemo} from 'react'\n\nimport {type CalendarLabels} from '../../../components/inputs/DateInputs/calendar/types'\nimport {useTranslation} from '../../../i18n'\nimport {set, unset} from '../../patch'\nimport {type StringInputProps} from '../../types'\nimport {CommonDateTimeInput} from './CommonDateTimeInput'\nimport {getCalendarLabels} from './utils'\n\n/**\n * @hidden\n * @beta */\nexport type DateInputProps = StringInputProps\n\nconst deserialize = (value: string) => parse(value, DEFAULT_DATE_FORMAT)\nconst serialize = (date: Date) => format(date, DEFAULT_DATE_FORMAT)\n\n/**\n * @hidden\n * @beta */\nexport function DateInput(props: DateInputProps) {\n  const {readOnly, onChange, schemaType, elementProps, value} = props\n  const dateFormat = schemaType.options?.dateFormat || DEFAULT_DATE_FORMAT\n  const {t} = useTranslation()\n\n  const handleChange = useCallback(\n    (nextDate: string | null) => {\n      onChange(nextDate === null ? unset() : set(nextDate))\n    },\n    [onChange],\n  )\n\n  const formatInputValue = useCallback((date: Date) => format(date, dateFormat), [dateFormat])\n\n  const parseInputValue = useCallback(\n    (inputValue: string) => parse(inputValue, dateFormat),\n    [dateFormat],\n  )\n\n  const calendarLabels: CalendarLabels = useMemo(() => getCalendarLabels(t), [t])\n  return (\n    <CommonDateTimeInput\n      {...elementProps}\n      deserialize={deserialize}\n      formatInputValue={formatInputValue}\n      onChange={handleChange}\n      parseInputValue={parseInputValue}\n      placeholder={schemaType.placeholder}\n      calendarLabels={calendarLabels}\n      readOnly={readOnly}\n      selectTime={false}\n      serialize={serialize}\n      value={value}\n    />\n  )\n}\n","import {\n  DEFAULT_DATE_FORMAT,\n  DEFAULT_TIME_FORMAT,\n  format,\n  parse,\n} from '@sanity/util/legacyDateFormat'\nimport {getMinutes, parseISO, setMinutes} from 'date-fns'\nimport {useCallback, useMemo} from 'react'\n\nimport {type CalendarLabels} from '../../../components/inputs/DateInputs/calendar/types'\nimport {useTranslation} from '../../../i18n'\nimport {set, unset} from '../../patch'\nimport {type StringInputProps} from '../../types'\nimport {CommonDateTimeInput} from './CommonDateTimeInput'\nimport {type ParseResult} from './types'\nimport {getCalendarLabels, isValidDate} from './utils'\n\ninterface ParsedOptions {\n  dateFormat: string\n  timeFormat: string\n  timeStep: number\n}\n\ninterface SchemaOptions {\n  dateFormat?: string\n  timeFormat?: string\n  timeStep?: number\n}\n\n/**\n * @hidden\n * @beta */\nexport type DateTimeInputProps = StringInputProps\n\nfunction parseOptions(options: SchemaOptions = {}): ParsedOptions {\n  return {\n    dateFormat: options.dateFormat || DEFAULT_DATE_FORMAT,\n    timeFormat: options.timeFormat || DEFAULT_TIME_FORMAT,\n    timeStep: ('timeStep' in options && Number(options.timeStep)) || 1,\n  }\n}\n\nfunction serialize(date: Date) {\n  return date.toISOString()\n}\nfunction deserialize(isoString: string): ParseResult {\n  const deserialized = new Date(isoString)\n  if (isValidDate(deserialized)) {\n    return {isValid: true, date: deserialized}\n  }\n  return {isValid: false, error: `Invalid date value: \"${isoString}\"`}\n}\n\n// enforceTimeStep takes a dateString and datetime schema options and enforces the time\n// to be within the configured timeStep\nfunction enforceTimeStep(dateString: string, timeStep: number) {\n  if (!timeStep || timeStep === 1) {\n    return dateString\n  }\n\n  const date = parseISO(dateString)\n  const minutes = getMinutes(date)\n  const leftOver = minutes % timeStep\n  if (leftOver !== 0) {\n    return serialize(setMinutes(date, minutes - leftOver))\n  }\n\n  return serialize(date)\n}\n\n/**\n * @hidden\n * @beta */\nexport function DateTimeInput(props: DateTimeInputProps) {\n  const {onChange, schemaType, value, elementProps} = props\n\n  const {dateFormat, timeFormat, timeStep} = parseOptions(schemaType.options)\n  const {t} = useTranslation()\n\n  const handleChange = useCallback(\n    (nextDate: string | null) => {\n      let date = nextDate\n      if (date !== null && timeStep > 1) {\n        date = enforceTimeStep(date, timeStep)\n      }\n\n      onChange(date === null ? unset() : set(date))\n    },\n    [onChange, timeStep],\n  )\n\n  const formatInputValue = useCallback(\n    (date: Date) => format(date, `${dateFormat} ${timeFormat}`),\n    [dateFormat, timeFormat],\n  )\n\n  const parseInputValue = useCallback(\n    (inputValue: string) => parse(inputValue, `${dateFormat} ${timeFormat}`),\n    [dateFormat, timeFormat],\n  )\n  const calendarLabels: CalendarLabels = useMemo(() => getCalendarLabels(t), [t])\n  return (\n    <CommonDateTimeInput\n      {...elementProps}\n      calendarLabels={calendarLabels}\n      onChange={handleChange}\n      deserialize={deserialize}\n      formatInputValue={formatInputValue}\n      parseInputValue={parseInputValue}\n      placeholder={schemaType.placeholder}\n      selectTime\n      serialize={serialize}\n      timeStep={timeStep}\n      value={value}\n    />\n  )\n}\n","import {EarthGlobeIcon} from '@sanity/icons'\nimport {Box, Flex} from '@sanity/ui'\nimport {format, isValid, parse} from 'date-fns'\nimport {useCallback, useMemo} from 'react'\n\nimport {Button} from '../../../ui-components/button'\nimport {MONTH_PICKER_VARIANT} from '../../components/inputs/DateInputs/calendar/Calendar'\nimport {type CalendarLabels} from '../../components/inputs/DateInputs/calendar/types'\nimport {DateTimeInput} from '../../components/inputs/DateInputs/DateTimeInput'\nimport {getCalendarLabels} from '../../form/inputs/DateInputs'\nimport {useTranslation} from '../../i18n/hooks/useTranslation'\nimport useDialogTimeZone from '../../scheduledPublishing/hooks/useDialogTimeZone'\nimport useTimeZone from '../../scheduledPublishing/hooks/useTimeZone'\n\ninterface ScheduleDatePickerProps {\n  initialValue: Date\n  onChange: (date: Date) => void\n}\n\nconst inputDateFormat = 'PP HH:mm'\n\nexport const ScheduleDatePicker = ({\n  initialValue: inputValue,\n  onChange,\n}: ScheduleDatePickerProps) => {\n  const {t} = useTranslation()\n  const {timeZone, utcToCurrentZoneDate, zoneDateToUtc} = useTimeZone()\n  const {dialogTimeZoneShow, DialogTimeZone, dialogProps} = useDialogTimeZone()\n\n  const timezoneAdjustedValue = utcToCurrentZoneDate(inputValue)\n\n  const handlePublishAtCalendarChange = (date: Date | null) => {\n    if (!date) return\n\n    onChange(zoneDateToUtc(date))\n  }\n\n  const handlePublishAtInputChange = useCallback(\n    (event: React.FocusEvent<HTMLInputElement>) => {\n      const date = event.currentTarget.value\n      const parsedDate = zoneDateToUtc(parse(date, inputDateFormat, new Date()))\n\n      if (isValid(parsedDate)) onChange(parsedDate)\n    },\n    [onChange, zoneDateToUtc],\n  )\n\n  const calendarLabels: CalendarLabels = useMemo(() => getCalendarLabels(t), [t])\n\n  return (\n    <Flex gap={3}>\n      <Box flex={1}>\n        <DateTimeInput\n          selectTime\n          monthPickerVariant={MONTH_PICKER_VARIANT.carousel}\n          onChange={handlePublishAtCalendarChange}\n          onInputChange={handlePublishAtInputChange}\n          calendarLabels={calendarLabels}\n          value={timezoneAdjustedValue}\n          inputValue={format(timezoneAdjustedValue, inputDateFormat)}\n          constrainSize={false}\n          padding={0}\n          isPastDisabled\n        />\n      </Box>\n      <Button\n        icon={EarthGlobeIcon}\n        mode=\"bleed\"\n        size=\"default\"\n        text={`${timeZone.abbreviation}`}\n        onClick={dialogTimeZoneShow}\n      />\n      {DialogTimeZone && <DialogTimeZone {...dialogProps} />}\n    </Flex>\n  )\n}\n","import {Stack} from '@sanity/ui'\n// eslint-disable-next-line camelcase\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {type ChangeEvent, useCallback, useEffect, useRef, useState} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {useTranslation} from '../../../i18n/hooks/useTranslation'\nimport {type EditableReleaseDocument} from '../../index'\n\nconst MAX_DESCRIPTION_HEIGHT = 200\n\nconst TitleInput = styled.input((props) => {\n  const {color, font} = getTheme_v2(props.theme)\n  return css`\n    resize: none;\n    overflow: hidden;\n    appearance: none;\n    background: none;\n    border: 0;\n    padding: 0;\n    border-radius: 0;\n    outline: none;\n    width: 100%;\n    box-sizing: border-box;\n    font-family: ${font.text.family};\n    font-weight: ${font.text.weights.bold};\n    font-size: ${font.text.sizes[4].fontSize}px;\n    line-height: ${font.text.sizes[4].lineHeight}px;\n    margin: 0;\n    position: relative;\n    z-index: 1;\n    display: block;\n    transition: height 500ms;\n    /* NOTE: This is a hack to disable Chrome’s autofill styles */\n    &:-webkit-autofill,\n    &:-webkit-autofill:hover,\n    &:-webkit-autofill:focus,\n    &:-webkit-autofill:active {\n      -webkit-text-fill-color: var(--input-fg-color) !important;\n      transition: background-color 5000s;\n      transition-delay: 86400s /* 24h */;\n    }\n\n    color: ${color.input.default.enabled.fg};\n\n    &::placeholder {\n      color: ${color.input.default.enabled.placeholder};\n    }\n  `\n})\n\nconst DescriptionTextArea = styled.textarea((props) => {\n  const {color, font} = getTheme_v2(props.theme)\n\n  return css`\n    resize: none;\n    overflow: hidden;\n    appearance: none;\n    background: none;\n    border: 0;\n    padding: 0;\n    border-radius: 0;\n    outline: none;\n    width: 100%;\n    box-sizing: border-box;\n    font-family: ${font.text.family};\n    font-weight: ${font.text.weights.regular};\n    font-size: ${font.text.sizes[2].fontSize}px;\n    height: auto;\n    line-height: ${font.text.sizes[2].lineHeight}px;\n    margin: 0;\n    max-width: 624px;\n    position: relative;\n    z-index: 1;\n    display: block;\n    color: ${color.input.default.enabled.fg};\n\n    &::placeholder {\n      color: ${color.input.default.enabled.placeholder};\n    }\n  `\n})\n\nexport const getIsReleaseOpen = (release: EditableReleaseDocument): boolean =>\n  release.state !== 'archived' && release.state !== 'published'\n\nexport function TitleDescriptionForm({\n  release,\n  onChange,\n  disabled,\n}: {\n  release: EditableReleaseDocument\n  onChange: (changedValue: EditableReleaseDocument) => void\n  disabled?: boolean\n}): React.JSX.Element {\n  const isReleaseOpen = getIsReleaseOpen(release)\n  const descriptionRef = useRef<HTMLTextAreaElement | null>(null)\n\n  const [scrollHeight, setScrollHeight] = useState(46)\n  const [value, setValue] = useState((): EditableReleaseDocument => {\n    return {\n      _id: release?._id,\n      metadata: {\n        title: release?.metadata.title,\n        description: release?.metadata.description,\n      },\n    } as const\n  })\n  const {t} = useTranslation()\n\n  useEffect(() => {\n    // make sure that the text area for the description has the right height initially\n    if (descriptionRef.current) {\n      setScrollHeight(descriptionRef.current.scrollHeight)\n    }\n  }, [])\n\n  const handleTitleChange = useCallback(\n    (event: ChangeEvent<HTMLInputElement>) => {\n      event.preventDefault()\n      const title = event.target.value\n      onChange({...value, metadata: {...release.metadata, title}})\n      // save the values to make input snappier while requests happen in the background\n      setValue({...value, metadata: {...release.metadata, title}})\n    },\n    [onChange, release.metadata, value],\n  )\n\n  const handleDescriptionChange = useCallback(\n    (event: ChangeEvent<HTMLTextAreaElement>) => {\n      event.preventDefault()\n      if (!isReleaseOpen) return\n\n      const description = event.target.value\n      onChange({...value, metadata: {...release.metadata, description}})\n      // save the values to make input snappier while requests happen in the background\n      setValue({...value, metadata: {...release.metadata, description}})\n\n      /** we must reset the height in order to make sure that if the text area shrinks,\n       * that the actual input will change height as well */\n      if (descriptionRef.current) {\n        descriptionRef.current.style.overflow = 'hidden'\n        descriptionRef.current.style.height = 'auto'\n        descriptionRef.current.style.height = `${descriptionRef.current.scrollHeight}px`\n\n        if (parseInt(descriptionRef.current.style.height, 10) > MAX_DESCRIPTION_HEIGHT) {\n          descriptionRef.current.style.overflow = 'auto'\n        }\n      }\n\n      setScrollHeight(event.currentTarget.scrollHeight)\n    },\n    [isReleaseOpen, onChange, release.metadata, value],\n  )\n\n  const shouldShowDescription = isReleaseOpen || value.metadata.description\n\n  return (\n    <Stack space={3}>\n      <TitleInput\n        onChange={handleTitleChange}\n        value={value.metadata.title}\n        placeholder={t('release.placeholder-untitled-release')}\n        data-testid=\"release-form-title\"\n        readOnly={!isReleaseOpen}\n        disabled={disabled}\n      />\n      {shouldShowDescription && (\n        <DescriptionTextArea\n          ref={descriptionRef}\n          autoFocus={!value}\n          value={value.metadata.description}\n          placeholder={t('release.form.placeholder-describe-release')}\n          onChange={handleDescriptionChange}\n          style={{\n            height: `${scrollHeight}px`,\n            maxHeight: MAX_DESCRIPTION_HEIGHT,\n          }}\n          data-testid=\"release-form-description\"\n          disabled={disabled}\n          readOnly={!isReleaseOpen}\n        />\n      )}\n    </Stack>\n  )\n}\n","import {ChevronDownIcon, InfoOutlineIcon} from '@sanity/icons'\nimport {\n  type BadgeTone,\n  // eslint-disable-next-line no-restricted-imports -- fine-grained control needed\n  Button,\n  Flex,\n  Menu,\n  // eslint-disable-next-line no-restricted-imports -- fine-grained control needed\n  MenuItem,\n  Stack,\n  TabPanel,\n  Text,\n} from '@sanity/ui'\nimport {addHours, isValid, startOfHour} from 'date-fns'\nimport {\n  type ComponentType,\n  type MouseEventHandler,\n  useCallback,\n  useEffect,\n  useId,\n  useState,\n} from 'react'\n\nimport {MenuButton, Tooltip} from '../../../../ui-components'\nimport {useTranslation} from '../../../i18n'\nimport useTimeZone from '../../../scheduledPublishing/hooks/useTimeZone'\nimport {type EditableReleaseDocument, isReleaseType, type ReleaseType} from '../../store/types'\nimport {RELEASE_TYPES_TONES} from '../../util/const'\nimport {ReleaseAvatar} from '../ReleaseAvatar'\nimport {ScheduleDatePicker} from '../ScheduleDatePicker'\nimport {TitleDescriptionForm} from './TitleDescriptionForm'\n\n/** @internal */\nexport function ReleaseForm(props: {\n  onChange: (params: EditableReleaseDocument) => void\n  value: EditableReleaseDocument\n}): React.JSX.Element {\n  const {onChange, value} = props\n  const {releaseType} = value.metadata || {}\n  const {t} = useTranslation()\n\n  const {timeZone, utcToCurrentZoneDate} = useTimeZone()\n  const [currentTimezone, setCurrentTimezone] = useState<string | null>(timeZone.name)\n\n  const [buttonReleaseType, setButtonReleaseType] = useState<ReleaseType>(releaseType ?? 'asap')\n\n  const [intendedPublishAt, setIntendedPublishAt] = useState<Date | undefined>()\n\n  const handleBundlePublishAtCalendarChange = useCallback(\n    (date: Date) => {\n      setIntendedPublishAt(date)\n      onChange({...value, metadata: {...value.metadata, intendedPublishAt: date.toISOString()}})\n    },\n    [onChange, value],\n  )\n\n  const handleButtonReleaseTypeChange = useCallback<MouseEventHandler<HTMLDivElement>>(\n    (event) => {\n      const pickedReleaseType = event.currentTarget.dataset.value\n\n      if (!isReleaseType(pickedReleaseType)) {\n        return\n      }\n\n      setButtonReleaseType(pickedReleaseType)\n\n      // select the start of the next hour\n      const nextInputValue = startOfHour(addHours(new Date(), 1))\n\n      if (pickedReleaseType === 'scheduled') {\n        setIntendedPublishAt(nextInputValue)\n      }\n\n      onChange({\n        ...value,\n        metadata: {\n          ...value.metadata,\n          releaseType: pickedReleaseType,\n          intendedPublishAt:\n            (pickedReleaseType === 'scheduled' && nextInputValue.toISOString()) || undefined,\n        },\n      })\n    },\n    [onChange, value],\n  )\n\n  const handleTitleDescriptionChange = useCallback(\n    (updatedRelease: EditableReleaseDocument) => {\n      onChange({\n        ...value,\n        metadata: {\n          ...value.metadata,\n          title: updatedRelease.metadata.title,\n          description: updatedRelease.metadata.description,\n        },\n      })\n    },\n    [onChange, value],\n  )\n\n  useEffect(() => {\n    /** makes sure to wait for the useTimezone has enough time to update\n     * and based on that it will update the input value to the current timezone\n     */\n    if (timeZone.name !== currentTimezone) {\n      setCurrentTimezone(timeZone.name)\n      if (intendedPublishAt && isValid(intendedPublishAt)) {\n        const currentZoneDate = utcToCurrentZoneDate(intendedPublishAt)\n        setIntendedPublishAt(currentZoneDate)\n      }\n    }\n  }, [currentTimezone, intendedPublishAt, timeZone, utcToCurrentZoneDate])\n\n  const menuButtonId = useId()\n  const [menuButton, setMenuButton] = useState<HTMLElement | null>(null)\n\n  return (\n    <Stack space={5}>\n      <Stack space={4}>\n        <Flex gap={2} align=\"center\">\n          <Text as=\"label\" htmlFor={menuButtonId}>\n            {t('release.dialog.tooltip.title')}\n          </Text>\n          <Text muted size={1}>\n            <Tooltip\n              content={\n                <Stack space={3} style={{maxWidth: 320 - 16}}>\n                  <Text size={1}>{t('release.dialog.tooltip.description')}</Text>\n                  <Text muted size={1}>\n                    {t('release.dialog.tooltip.note')}\n                  </Text>\n                </Stack>\n              }\n              delay={0}\n              placement=\"right-start\"\n              portal\n            >\n              <InfoOutlineIcon />\n            </Tooltip>\n          </Text>\n        </Flex>\n        <Stack space={3}>\n          <MenuButton\n            id={menuButtonId}\n            ref={setMenuButton}\n            button={\n              <Button mode=\"ghost\">\n                <Flex justify=\"space-between\" align=\"center\">\n                  <ReleaseTypeOption\n                    text={t(`release.type.${buttonReleaseType}`)}\n                    tone={RELEASE_TYPES_TONES[buttonReleaseType].tone}\n                  />\n                  <Text size={1}>\n                    <ChevronDownIcon />\n                  </Text>\n                </Flex>\n              </Button>\n            }\n            popover={{\n              placement: 'bottom',\n              matchReferenceWidth: true,\n              boundaryElement: menuButton,\n            }}\n            menu={\n              <Menu>\n                {Object.entries(RELEASE_TYPES_TONES).map(([type, {tone}]) => (\n                  <MenuItem key={type} data-value={type} onClick={handleButtonReleaseTypeChange}>\n                    <ReleaseTypeOption text={t(`release.type.${type}`)} tone={tone} />\n                  </MenuItem>\n                ))}\n              </Menu>\n            }\n          />\n          <Flex gap={1}>\n            {buttonReleaseType === 'scheduled' && (\n              <TabPanel\n                aria-labelledby=\"release-timing-at-time-tab\"\n                flex={1}\n                id=\"release-timing-at-time\"\n                style={{outline: 'none'}}\n                tabIndex={-1}\n              >\n                <ScheduleDatePicker\n                  initialValue={intendedPublishAt || new Date()}\n                  onChange={handleBundlePublishAtCalendarChange}\n                />\n              </TabPanel>\n            )}\n          </Flex>\n        </Stack>\n      </Stack>\n      <TitleDescriptionForm release={value} onChange={handleTitleDescriptionChange} />\n    </Stack>\n  )\n}\n\nconst ReleaseTypeOption: ComponentType<{text: string; tone: BadgeTone}> = ({tone, text}) => (\n  <Flex gap={3} align=\"center\">\n    <ReleaseAvatar padding={1} tone={tone} />\n    <Text>{text}</Text>\n  </Flex>\n)\n","import {BufferedDocument, Mutation} from '@sanity/mutator'\nimport {type SanityDocument} from '@sanity/types'\nimport {BehaviorSubject, EMPTY, merge, type Observable, Subject} from 'rxjs'\nimport {\n  distinctUntilChanged,\n  filter,\n  map,\n  mergeMapTo,\n  publishReplay,\n  refCount,\n  scan,\n  share,\n  take,\n  tap,\n  withLatestFrom,\n} from 'rxjs/operators'\n\nimport {type ListenerEvent} from '../getPairListener'\nimport {type MutationEvent} from '../types'\nimport {\n  type DocumentMutationEvent,\n  type DocumentRebaseEvent,\n  type DocumentRemoteMutationEvent,\n  type MutationPayload,\n  type RemoteSnapshotEvent,\n  type SnapshotEvent,\n} from './types'\n\ninterface MutationAction {\n  type: 'mutation'\n  mutations: MutationPayload[]\n}\n\ninterface CommitAction {\n  type: 'commit'\n}\n\ntype Action = MutationAction | CommitAction\n\n/**\n * Represents \"commit requests\" from the mutator.\n * These are emitted from the BufferedDocument instance's `requestHandler` callback\n *\n * @internal\n */\nexport interface CommitRequest {\n  mutation: Mutation\n  success: () => void\n  failure: (error: Error) => void\n  cancel: (error: Error) => void\n}\n\n// BufferedDocument.LOCAL never updates its revision due to its internal consistency checks\n// but we sometimes we need the most current _rev on the document in UI land, e.g.\n// in order to do optimistic locking on the edited document to make sure we publish the document the user\n// actually are looking at, and not the one currently at the server\n// Also - the mutator is not setting _updatedAt on patches applied optimistically or\n// when they are received from server\nconst getUpdatedSnapshot = (bufferedDocument: BufferedDocument) => {\n  const LOCAL = bufferedDocument.LOCAL\n  const HEAD = bufferedDocument.document.HEAD\n  if (!LOCAL) {\n    return LOCAL\n  }\n\n  return {\n    ...LOCAL,\n    _type: (HEAD || LOCAL)._type,\n    _rev: (HEAD || LOCAL)._rev,\n    _updatedAt: new Date().toISOString(),\n  }\n}\n\nconst toSnapshotEvent = (document: any): SnapshotEvent => ({type: 'snapshot', document})\nconst getDocument = <T extends {document: any}>(event: T): T['document'] => event.document\n\n/** @internal */\n// This is an observable interface for BufferedDocument in an attempt\n// to make it easier to work with the api provided by it\nexport const createObservableBufferedDocument = (listenerEvent$: Observable<ListenerEvent>) => {\n  // Incoming local actions (e.g. a request to mutate, a request to commit pending changes, etc.)\n  const actions$ = new Subject<Action>()\n\n  // Stream of commit requests. Must be handled by a commit handler\n  const consistency$ = new BehaviorSubject<boolean>(true)\n\n  // Stream of mutations for this document\n  // NOTE: this will *not* include remote mutations received over the listener\n  // that has *already* applied locally/optimistically\n  const mutations$ = new Subject<DocumentMutationEvent>()\n\n  // a stream of rebase events emitted from the mutator\n  const rebase$ = new Subject<DocumentRebaseEvent>()\n\n  // a stream of remote mutations with effetcs\n  const remoteMutations = new Subject<DocumentRemoteMutationEvent>()\n\n  const commitRequests = new Subject<CommitRequest>()\n\n  const createInitialBufferedDocument = (initialSnapshot: SanityDocument | null) => {\n    const bufferedDocument = new BufferedDocument(initialSnapshot)\n    bufferedDocument.onMutation = ({mutation, remote}: any) => {\n      // this is called after either when:\n      // 1) local mutations has been added, optimistically applied and queued for sending\n      // 2) remote mutations originating from another client has arrived and been applied\n      mutations$.next({\n        type: 'mutation',\n        document: getUpdatedSnapshot(bufferedDocument) as any,\n        mutations: mutation.mutations,\n        origin: remote ? 'remote' : 'local',\n      })\n    }\n    bufferedDocument.onRemoteMutation = (mutation: any) => {\n      remoteMutations.next({\n        type: 'remoteMutation',\n        head: bufferedDocument.document.HEAD as any,\n        transactionId: mutation.transactionId,\n        timestamp: mutation.timestamp,\n        author: mutation.identity,\n        effects: mutation.effects,\n      })\n    }\n\n    bufferedDocument.onRebase = (edge: any, nextRemoteMutations: any, localMutations: any) => {\n      rebase$.next({\n        type: 'rebase',\n        document: edge,\n        remoteMutations: nextRemoteMutations,\n        localMutations,\n      })\n    }\n\n    bufferedDocument.onConsistencyChanged = (isConsistent) => {\n      consistency$.next(isConsistent)\n    }\n\n    bufferedDocument.commitHandler = (commitArg: CommitRequest) => commitRequests.next(commitArg)\n\n    return bufferedDocument\n  }\n\n  const currentBufferedDocument$ = listenerEvent$.pipe(\n    scan((bufferedDocument: BufferedDocument | null, listenerEvent) => {\n      // consider renaming 'snapshot' to initial/welcome\n      if (listenerEvent.type === 'snapshot') {\n        if (bufferedDocument) {\n          // we received a new snapshot and already got an old one. When we receive a snapshot again\n          // it is usually because the connection has been down. Attempt to save pending changes (if any)\n          bufferedDocument.commit()\n        }\n        return createInitialBufferedDocument(listenerEvent.document || null)\n      }\n      if (bufferedDocument === null) {\n        // eslint-disable-next-line no-console\n        console.warn(\n          'Ignoring event of type \"%s\" since buffered document has not yet been set up with snapshot',\n          listenerEvent.type,\n        )\n        return null\n      }\n      return bufferedDocument\n    }, null),\n    filter(\n      <T>(bufferedDocument: T): bufferedDocument is NonNullable<T> => bufferedDocument !== null,\n    ),\n    distinctUntilChanged(),\n    publishReplay(1),\n    refCount(),\n  )\n\n  // this is a stream of document snapshots where each new snapshot are emitted after listener mutations\n  // has been applied. Since the optimistic patches is not emitted on the mutation$ stream, we need this\n  // in order to update the document with a new _rev (and _updatedAt)\n  const snapshotAfterSync$ = listenerEvent$.pipe(\n    filter((ev): ev is MutationEvent => ev.type === 'mutation'),\n    withLatestFrom(currentBufferedDocument$),\n    map(([mutationEvent, bufferedDocument]) => {\n      bufferedDocument!.arrive(new Mutation(mutationEvent))\n      return getUpdatedSnapshot(bufferedDocument!)\n    }),\n  )\n\n  // this is where the side effects mandated by local actions actually happens\n  const actionHandler$ = actions$.pipe(\n    withLatestFrom(currentBufferedDocument$),\n    tap(([action, bufferedDocument]: [Action, BufferedDocument]) => {\n      if (action.type === 'mutation') {\n        bufferedDocument!.add(new Mutation({mutations: action.mutations}))\n      }\n      if (action.type === 'commit') {\n        bufferedDocument!.commit()\n      }\n    }),\n    // We subscribe to this only for the side effects\n    mergeMapTo(EMPTY),\n    share(),\n  )\n\n  const emitAction = (action: any) => actions$.next(action)\n\n  const addMutations = (mutations: MutationPayload[]) => emitAction({type: 'mutation', mutations})\n  const addMutation = (mutation: MutationPayload) => addMutations([mutation])\n\n  const commit = () => {\n    currentBufferedDocument$\n      .pipe(\n        take(1),\n        tap((bufferedDocument) => bufferedDocument!.commit()),\n      )\n      .subscribe()\n  }\n\n  // A stream of this document's snapshot\n  const snapshot$ = merge(\n    currentBufferedDocument$.pipe(map((bufferedDocument) => bufferedDocument!.LOCAL)),\n    mutations$.pipe(map(getDocument)),\n    rebase$.pipe(map(getDocument)),\n    snapshotAfterSync$,\n  ).pipe(map(toSnapshotEvent), publishReplay(1), refCount())\n\n  const remoteSnapshot$: Observable<RemoteSnapshotEvent> = merge(\n    currentBufferedDocument$.pipe(\n      map((bufferedDocument) => bufferedDocument!.document.HEAD as any),\n      map(toSnapshotEvent),\n    ),\n    remoteMutations,\n  ).pipe(publishReplay(1), refCount())\n\n  return {\n    updates$: merge(snapshot$, actionHandler$, mutations$, rebase$),\n    consistency$: consistency$.pipe(distinctUntilChanged(), publishReplay(1), refCount()),\n    remoteSnapshot$,\n    commitRequest$: commitRequests,\n    addMutation,\n    addMutations,\n    commit,\n  }\n}\n","import {type SanityDocument} from '@sanity/types'\nimport {type Observable} from 'rxjs'\n\nimport {type ListenerEvent} from '../getPairListener'\nimport {\n  type CommitRequest,\n  createObservableBufferedDocument,\n} from './createObservableBufferedDocument'\nimport {\n  type CommittedEvent,\n  type DocumentMutationEvent,\n  type DocumentRebaseEvent,\n  type MutationPayload,\n  type RemoteSnapshotEvent,\n  type SnapshotEvent,\n} from './types'\n\n/**\n * @hidden\n * @beta */\nexport type BufferedDocumentEvent =\n  | SnapshotEvent\n  | DocumentRebaseEvent\n  | DocumentMutationEvent\n  | CommittedEvent\n\nconst prepare = (id: string) => (document: Partial<SanityDocument>) => {\n  const {_id, _rev, _updatedAt, ...rest} = document\n  return {_id: id, ...rest}\n}\n\n/** @internal */\nexport interface BufferedDocumentWrapper {\n  consistency$: Observable<boolean>\n  remoteSnapshot$: Observable<RemoteSnapshotEvent>\n  events: Observable<BufferedDocumentEvent>\n  commitRequest$: Observable<CommitRequest>\n  // helper functions\n  patch: (patches: any[]) => MutationPayload[]\n  create: (document: Partial<SanityDocument>) => MutationPayload\n  createIfNotExists: (document: SanityDocument) => MutationPayload\n  createOrReplace: (document: SanityDocument) => MutationPayload\n  delete: () => MutationPayload\n\n  mutate: (mutations: MutationPayload[]) => void\n  commit: () => void\n}\n\n/** @internal */\nexport const createBufferedDocument = (\n  documentId: string,\n  // consider naming it remoteEvent$\n  listenerEvent$: Observable<ListenerEvent>,\n): BufferedDocumentWrapper => {\n  const bufferedDocument = createObservableBufferedDocument(listenerEvent$)\n\n  const prepareDoc = prepare(documentId)\n\n  const DELETE = {delete: {id: documentId}}\n\n  return {\n    events: bufferedDocument.updates$,\n    consistency$: bufferedDocument.consistency$,\n    remoteSnapshot$: bufferedDocument.remoteSnapshot$,\n    commitRequest$: bufferedDocument.commitRequest$,\n\n    patch: (patches) => patches.map((patch) => ({patch: {...patch, id: documentId}})),\n    create: (document) => ({create: prepareDoc(document)}),\n    createIfNotExists: (document) => ({createIfNotExists: prepareDoc(document)}),\n    createOrReplace: (document) => ({createOrReplace: prepareDoc(document)}),\n    delete: () => DELETE,\n\n    mutate: (mutations: MutationPayload[]) => bufferedDocument.addMutations(mutations),\n    commit: () => bufferedDocument.commit(),\n  }\n}\n","import {\n  finalize,\n  merge,\n  type MonoTypeOperatorFunction,\n  Observable,\n  share,\n  type ShareConfig,\n  tap,\n} from 'rxjs'\n\nexport type ShareReplayLatestConfig<T> = ShareConfig<T> & {predicate: (value: T) => boolean}\n\n/**\n * A variant of share that takes a predicate function to determine which value to replay to new subscribers\n * @param predicate - Predicate function to determine which value to replay\n */\nexport function shareReplayLatest<T>(predicate: (value: T) => boolean): MonoTypeOperatorFunction<T>\n\n/**\n * A variant of share that takes a predicate function to determine which value to replay to new subscribers\n * @param config - ShareConfig with additional predicate function\n */\nexport function shareReplayLatest<T>(\n  config: ShareReplayLatestConfig<T>,\n): MonoTypeOperatorFunction<T>\n\n/**\n * A variant of share that takes a predicate function to determine which value to replay to new subscribers\n * @param configOrPredicate - Predicate function to determine which value to replay\n * @param config - Optional ShareConfig\n */\nexport function shareReplayLatest<T>(\n  configOrPredicate: ShareReplayLatestConfig<T> | ShareReplayLatestConfig<T>['predicate'],\n  config?: ShareConfig<T>,\n) {\n  return _shareReplayLatest(\n    typeof configOrPredicate === 'function'\n      ? {predicate: configOrPredicate, ...config}\n      : configOrPredicate,\n  )\n}\nfunction _shareReplayLatest<T>(config: ShareReplayLatestConfig<T>): MonoTypeOperatorFunction<T> {\n  return (source: Observable<T>) => {\n    let latest: T | undefined\n    let emitted = false\n\n    const {predicate, ...shareConfig} = config\n\n    const wrapped = source.pipe(\n      tap((value) => {\n        if (config.predicate(value)) {\n          emitted = true\n          latest = value\n        }\n      }),\n      finalize(() => {\n        emitted = false\n        latest = undefined\n      }),\n      share(shareConfig),\n    )\n    const emitLatest = new Observable<T>((subscriber) => {\n      if (emitted) {\n        subscriber.next(\n          // this cast is safe because of the emitted check which asserts that we got T from the source\n          latest as T,\n        )\n      }\n      subscriber.complete()\n    })\n    return merge(wrapped, emitLatest)\n  }\n}\n","import createDebug from 'debug'\n\nexport const debug = createDebug('sanity:document-store')\n","import {type MutationEvent} from '../types'\n\nexport function discardChainTo(chain: MutationEvent[], revision: string | undefined) {\n  const revisionIndex = chain.findIndex((event) => event.resultRev === revision)\n\n  return split(chain, revisionIndex + 1)\n}\n\nfunction split<T>(array: T[], index: number) {\n  if (index < 0) {\n    return [[], array]\n  }\n  return [array.slice(0, index), array.slice(index)]\n}\n\nexport function toOrderedChains<T extends {previousRev: string; resultRev: string}>(events: T[]) {\n  const parents: Record<string, T | undefined> = {}\n\n  events.forEach((event) => {\n    parents[event.resultRev] = events.find((other) => other.resultRev === event.previousRev)\n  })\n\n  // get entries without a parent (if there's more than one, we have a problem)\n  const orphans = Object.entries(parents).filter(([, parent]) => {\n    return !parent\n  })!\n\n  return orphans.map((orphan) => {\n    const [headRev] = orphan\n\n    let current = events.find((event) => event.resultRev === headRev)\n\n    const sortedList: T[] = []\n    while (current) {\n      sortedList.push(current)\n      // eslint-disable-next-line no-loop-func\n      current = events.find((event) => event.previousRev === current?.resultRev)\n    }\n    return sortedList\n  })\n}\n","import {partition} from 'lodash'\nimport {concat, type Observable, of, switchMap, throwError, timer} from 'rxjs'\nimport {mergeMap, scan} from 'rxjs/operators'\n\nimport {debug} from '../debug'\nimport {type ListenerEvent} from '../getPairListener'\nimport {type MutationEvent} from '../types'\nimport {discardChainTo, toOrderedChains} from './eventChainUtils'\n\ninterface ListenerSequenceState {\n  /**\n   * Tracks the latest revision from the server that can be applied locally\n   * Once we receive a mutation event that has a `previousRev` that equals `base.revision`\n   * we will move `base.revision` to the event's `resultRev`\n   * `base.revision` will be undefined if document doesn't exist.\n   * `base` is `undefined` until the snapshot event is received\n   */\n  base: {revision: string | undefined} | undefined\n  /**\n   * Array of events to pass on to the stream, e.g. when mutation applies to current head revision, or a chain is complete\n   */\n  emitEvents: ListenerEvent[]\n  /**\n   * Buffer to keep track of events that doesn't line up in a [previousRev, resultRev] -- [previousRev, resultRev] sequence\n   * This can happen if events arrive out of order, or if an event in the middle for some reason gets lost\n   */\n  buffer: MutationEvent[]\n}\n\nconst DEFAULT_MAX_BUFFER_SIZE = 20\nconst DEFAULT_DEADLINE_MS = 30000\n\nconst EMPTY_ARRAY: never[] = []\n\n/**\n * Takes an input observable of listener events that might arrive out of order, and emits them in sequence\n * If we receive mutation events that doesn't line up in [previousRev, resultRev] pairs we'll put them in a buffer and\n * check if we have an unbroken chain every time we receive a new event\n *\n * If the buffer grows beyond `maxBufferSize`, or if `resolveChainDeadline` milliseconds passes before the chain resolves\n * an OutOfSyncError will be thrown on the stream\n *\n * @internal\n */\nexport function sequentializeListenerEvents(options?: {\n  maxBufferSize?: number\n  resolveChainDeadline?: number\n}) {\n  const {resolveChainDeadline = DEFAULT_DEADLINE_MS, maxBufferSize = DEFAULT_MAX_BUFFER_SIZE} =\n    options || {}\n\n  return (input$: Observable<ListenerEvent>): Observable<ListenerEvent> => {\n    return input$.pipe(\n      scan(\n        (state: ListenerSequenceState, event: ListenerEvent): ListenerSequenceState => {\n          if (event.type === 'mutation' && !state.base) {\n            throw new Error('Invalid state. Cannot create a sequence without a base')\n          }\n          if (event.type === 'snapshot') {\n            // When receiving a new snapshot, we can safely discard the current orphaned and chainable buffers\n            return {\n              base: {revision: event.document?._rev},\n              buffer: EMPTY_ARRAY,\n              emitEvents: [event],\n            }\n          }\n\n          if (event.type === 'mutation') {\n            // Note: the buffer may have multiple holes in it (this is a worst case scenario, and probably not likely, but still),\n            // so we need to consider all possible chains\n            // `toOrderedChains` will return all detected chains and each of the returned chains will be orderered\n            // Once we have a list of chains, we can then discard any chain that leads up to the current revision\n            // since they are already applied on the document\n            const orderedChains = toOrderedChains(state.buffer.concat(event)).map((chain) => {\n              // in case the chain leads up to the current revision\n              const [discarded, rest] = discardChainTo(chain, state.base!.revision)\n              if (discarded.length > 0) {\n                debug('Discarded %d mutations already applied to document', discarded.length)\n              }\n              return rest\n            })\n\n            const [applicableChains, _nextBuffer] = partition(orderedChains, (chain) => {\n              // note: there can be at most one applicable chain\n              return state.base!.revision === chain[0]?.previousRev\n            })\n\n            const nextBuffer = _nextBuffer.flat()\n            if (applicableChains.length > 1) {\n              throw new Error('Expected at most one applicable chain')\n            }\n            if (applicableChains.length > 0 && applicableChains[0].length > 0) {\n              // we now have a continuous chain that can apply on the base revision\n              // Move current base revision to the last mutation event in the applicable chain\n              const lastMutation = applicableChains[0].at(-1)!\n              const nextBaseRevision =\n                // special case: if the mutation deletes the document it technically has  no revision, despite\n                // resultRev pointing at a transaction id.\n                lastMutation.transition === 'disappear' ? undefined : lastMutation?.resultRev\n              return {\n                base: {revision: nextBaseRevision},\n                emitEvents: applicableChains[0],\n                buffer: nextBuffer,\n              }\n            }\n\n            if (\n              nextBuffer.length >=\n              ((globalThis as any).__sanity_debug_maxBufferSize ?? maxBufferSize)\n            ) {\n              throw new MaxBufferExceededError(\n                `Too many unchainable mutation events: ${state.buffer.length}`,\n                state,\n              )\n            }\n            return {\n              ...state,\n              buffer: nextBuffer,\n              emitEvents: EMPTY_ARRAY,\n            }\n          }\n          // Any other event (e.g. 'reconnect' is passed on verbatim)\n          return {...state, emitEvents: [event]}\n        },\n        {\n          emitEvents: EMPTY_ARRAY,\n          base: undefined,\n          buffer: EMPTY_ARRAY,\n        },\n      ),\n      switchMap((state) => {\n        const deadline =\n          (globalThis as any).__sanity_debug_resolveChainDeadline ?? resolveChainDeadline\n\n        if (state.buffer.length > 0) {\n          debug(\n            \"Detected %d listener event(s) that can't be applied in sequence. This could be due to events arriving out of order. Will throw an error if chain can't be resolved within %dms\",\n            state.buffer.length,\n            deadline,\n          )\n          return concat(\n            of(state),\n            timer(deadline).pipe(\n              mergeMap(() =>\n                throwError(() => {\n                  return new DeadlineExceededError(\n                    `Did not resolve chain within a deadline of ${resolveChainDeadline}ms`,\n                    state,\n                  )\n                }),\n              ),\n            ),\n          )\n        }\n        return of(state)\n      }),\n      mergeMap((state) => {\n        // this will simply flatten the list of events into individual emissions\n        // if the flushEvents array is empty, nothing will be emitted\n        return state.emitEvents\n      }),\n    )\n  }\n}\n\nexport class OutOfSyncError extends Error {\n  /**\n   * Attach state to the error for debugging/reporting\n   */\n  state: ListenerSequenceState\n  constructor(message: string, state: ListenerSequenceState) {\n    super(message)\n    this.name = 'OutOfSyncError'\n    this.state = state\n  }\n}\n\nexport class DeadlineExceededError extends OutOfSyncError {\n  constructor(message: string, state: ListenerSequenceState) {\n    super(message, state)\n    this.name = 'DeadlineExceededError'\n  }\n}\nexport class MaxBufferExceededError extends OutOfSyncError {\n  constructor(message: string, state: ListenerSequenceState) {\n    super(message, state)\n    this.name = 'MaxBufferExceededError'\n  }\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport {type SanityClient} from '@sanity/client'\nimport {type SanityDocument} from '@sanity/types'\nimport {groupBy} from 'lodash'\nimport {defer, merge, type Observable, of, throwError} from 'rxjs'\nimport {catchError, concatMap, filter, map, mergeMap, scan, share} from 'rxjs/operators'\n\nimport {shareReplayLatest} from '../../../preview/utils/shareReplayLatest'\nimport {RELEASES_STUDIO_CLIENT_OPTIONS} from '../../../releases'\nimport {getVersionFromId} from '../../../util'\nimport {debug} from './debug'\nimport {\n  type IdPair,\n  type MutationEvent,\n  type PendingMutationsEvent,\n  type ReconnectEvent,\n  type WelcomeEvent,\n} from './types'\nimport {OutOfSyncError, sequentializeListenerEvents} from './utils/sequentializeListenerEvents'\n\ninterface Snapshots {\n  draft: SanityDocument | null\n  published: SanityDocument | null\n  version: SanityDocument | null\n}\n\n/** @internal */\nexport interface InitialSnapshotEvent {\n  type: 'snapshot'\n  documentId: string\n  document: SanityDocument | null\n}\n\n/**\n * @internal\n */\nexport interface LatencyReportEvent {\n  shard?: string\n  latencyMs: number\n  transactionId: string\n}\n\n/** @internal */\nexport interface DocumentStoreExtraOptions {\n  tag?: string\n\n  /**\n   * Called when we recover from sync error\n   * Meant for error tracking / telemetry purposes\n   * @param error - the {@link OutOfSyncError} recovered from\n   */\n  onSyncErrorRecovery?(error: OutOfSyncError): void\n  onReportLatency?: (event: LatencyReportEvent) => void\n}\n\n/** @internal */\nexport type ListenerEvent =\n  | MutationEvent\n  | ReconnectEvent\n  | InitialSnapshotEvent\n  | PendingMutationsEvent\n\nconst PENDING_START: PendingMutationsEvent = {type: 'pending', phase: 'begin'}\nconst PENDING_END: PendingMutationsEvent = {type: 'pending', phase: 'end'}\n\nfunction isMutationEvent(msg: ListenerEvent): msg is MutationEvent {\n  return msg.type === 'mutation'\n}\nfunction isMultiTransactionEvent(msg: MutationEvent) {\n  return msg.transactionTotalEvents > 1\n}\n\nfunction allPendingTransactionEventsReceived(listenerEvents: ListenerEvent[]) {\n  const groupedMutations = groupBy(\n    listenerEvents.filter((ev): ev is MutationEvent => ev.type === 'mutation'),\n    (e) => e.transactionId,\n  )\n  // Note: we can't assume that the events come in order, so instead of checking the counter attributes we check that we have actually received all\n  return Object.values(groupedMutations).every(\n    (mutations) => mutations.length === mutations[0].transactionTotalEvents,\n  )\n}\n\n/** @internal */\nexport function getPairListener(\n  _client: SanityClient,\n  idPair: IdPair,\n  options: DocumentStoreExtraOptions = {},\n): Observable<ListenerEvent> {\n  const {publishedId, draftId, versionId} = idPair\n  const client = idPair.versionId ? _client.withConfig(RELEASES_STUDIO_CLIENT_OPTIONS) : _client\n  if (\n    (idPair.versionId && getVersionFromId(idPair.versionId) === 'published') ||\n    (idPair.versionId && getVersionFromId(idPair.versionId) === 'drafts')\n  ) {\n    throw new Error('VersionId cannot be \"published\" or \"drafts\"')\n  }\n  const sharedEvents = defer(() =>\n    client.observable\n      .listen(\n        `*[_id in $ids]`,\n        {\n          ids: [publishedId, draftId, versionId].filter((id) => typeof id !== 'undefined'),\n        },\n        {\n          includeResult: false,\n          includeAllVersions: true,\n          events: ['welcome', 'mutation', 'reconnect'],\n          effectFormat: 'mendoza',\n          tag: options.tag || 'document.pair-listener',\n        },\n      )\n      .pipe(\n        //filter((event) => Math.random() < 0.99 || event.type !== 'mutation'),\n        shareReplayLatest({\n          predicate: (event) => event.type === 'welcome' || event.type === 'reconnect',\n        }),\n      ),\n  ) as Observable<WelcomeEvent | MutationEvent | ReconnectEvent>\n\n  const pairEvents$ = sharedEvents.pipe(\n    concatMap((event) => {\n      return event.type === 'welcome'\n        ? fetchInitialDocumentSnapshots().pipe(\n            mergeMap(({draft, published, version}) => [\n              createSnapshotEvent(draftId, draft),\n              createSnapshotEvent(publishedId, published),\n              ...(versionId ? [createSnapshotEvent(versionId, version)] : []),\n            ]),\n          )\n        : of(event)\n    }),\n    scan(\n      (\n        acc: {\n          next: (InitialSnapshotEvent | ListenerEvent)[]\n          buffer: (InitialSnapshotEvent | ListenerEvent)[]\n        },\n        msg,\n      ) => {\n        // we only care about mutation events\n        if (!isMutationEvent(msg)) {\n          return {next: [msg], buffer: []}\n        }\n\n        const isBuffering = acc.buffer.length > 0\n        const isMulti = isMultiTransactionEvent(msg)\n        if (!isMulti && !isBuffering) {\n          // simple case, we have no buffer, and the event is a single-transaction event, so just pass it on\n          return {next: [msg], buffer: []}\n        }\n\n        if (!isMulti) {\n          // we have received a single transaction event while waiting for the rest of events from a multi transaction\n          // put it in the buffer\n          return {next: [], buffer: acc.buffer.concat(msg)}\n        }\n\n        const nextBuffer = acc.buffer.concat(msg)\n        if (allPendingTransactionEventsReceived(nextBuffer)) {\n          // we have received all pending transactions, emit the buffer, and signal end of buffer\n          return {next: nextBuffer.concat(PENDING_END), buffer: []}\n        }\n        // if we get here, we are still waiting for more multi-transaction messages\n        // if nextBuffer only has one element, we know we just started buffering\n        return {next: nextBuffer.length === 1 ? [PENDING_START] : [], buffer: nextBuffer}\n      },\n      {next: [], buffer: []},\n    ),\n    // note: this flattens the array, and in the case of an empty array, no event will be pushed downstream\n    mergeMap((v) => v.next),\n    share(),\n  )\n\n  const draftEvents$ = pairEvents$.pipe(\n    filter((event) =>\n      event.type === 'mutation' || event.type === 'snapshot' ? event.documentId === draftId : true,\n    ),\n    sequentializeListenerEvents(),\n  )\n\n  const publishedEvents$ = pairEvents$.pipe(\n    filter((event) =>\n      event.type === 'mutation' || event.type === 'snapshot'\n        ? event.documentId === publishedId\n        : true,\n    ),\n    sequentializeListenerEvents(),\n  )\n\n  const versionEvents$ = pairEvents$.pipe(\n    filter((event) =>\n      event.type === 'mutation' || event.type === 'snapshot'\n        ? event.documentId === versionId\n        : true,\n    ),\n    sequentializeListenerEvents(),\n  )\n\n  return merge(draftEvents$, publishedEvents$, versionEvents$).pipe(\n    catchError((err, caught$) => {\n      if (err instanceof OutOfSyncError) {\n        debug('Recovering from OutOfSyncError: %s', OutOfSyncError.name)\n        if (typeof options?.onSyncErrorRecovery === 'function') {\n          options?.onSyncErrorRecovery(err)\n        } else {\n          console.error(err)\n        }\n        // this will retry immediately\n        return caught$\n      }\n      return throwError(() => err)\n    }),\n  )\n\n  function fetchInitialDocumentSnapshots(): Observable<Snapshots> {\n    return client.observable\n      .getDocuments<SanityDocument>(\n        [publishedId, draftId, versionId].filter((id): id is string => typeof id === 'string'),\n        {tag: 'document.snapshots'},\n      )\n      .pipe(\n        map(([published, draft, version]) => ({\n          draft,\n          published,\n          version,\n        })),\n      )\n  }\n}\n\nfunction createSnapshotEvent(\n  documentId: string,\n  document: null | SanityDocument,\n): InitialSnapshotEvent {\n  return {\n    type: 'snapshot',\n    documentId,\n    document,\n  }\n}\n","import {type SanityClient} from '@sanity/client'\n\nimport {RELEASES_STUDIO_CLIENT_OPTIONS} from '../../../../../releases/util/releasesClient'\nimport {type IdPair} from '../../types'\n\nconst ACTIONS_API_MINIMUM_VERSION = '2025-02-19'\n\nexport function actionsApiClient(client: SanityClient, idPair: IdPair): SanityClient {\n  if (idPair.versionId) {\n    // TODO: Remove after API version is stable and support releases\n    return client.withConfig(RELEASES_STUDIO_CLIENT_OPTIONS)\n  }\n  return client.withConfig({\n    apiVersion: ACTIONS_API_MINIMUM_VERSION,\n  })\n}\n","import {type SanityClient} from '@sanity/client'\n\nimport {RELEASES_STUDIO_CLIENT_OPTIONS} from '../../../../../releases/util/releasesClient'\nimport {type IdPair} from '../../types'\n\nexport function operationsApiClient(client: SanityClient, idPair: IdPair): SanityClient {\n  if (idPair.versionId) {\n    // TODO: Remove after API version is stable and support releases\n    return client.withConfig(RELEASES_STUDIO_CLIENT_OPTIONS)\n  }\n  return client\n}\n","import {\n  type Action,\n  type MultipleActionResult,\n  type SanityClient,\n  type SingleMutationResult,\n} from '@sanity/client'\nimport {type Mutation} from '@sanity/mutator'\nimport {type SanityDocument} from '@sanity/types'\nimport {omit} from 'lodash'\nimport {defer, EMPTY, from, merge, type Observable} from 'rxjs'\nimport {filter, map, mergeMap, scan, share, take, tap, withLatestFrom} from 'rxjs/operators'\n\nimport {type DocumentVariantType} from '../../../../util/getDocumentVariantType'\nimport {\n  type BufferedDocumentEvent,\n  type CommitRequest,\n  createBufferedDocument,\n  type MutationPayload,\n  type RemoteSnapshotEvent,\n} from '../buffered-doc'\nimport {\n  type DocumentStoreExtraOptions,\n  getPairListener,\n  type LatencyReportEvent,\n  type ListenerEvent,\n} from '../getPairListener'\nimport {type IdPair, type PendingMutationsEvent, type ReconnectEvent} from '../types'\nimport {actionsApiClient} from './utils/actionsApiClient'\nimport {operationsApiClient} from './utils/operationsApiClient'\n\n/** Timeout on request that fetches shard name before reporting latency */\nconst FETCH_SHARD_TIMEOUT = 20_000\n\nconst isMutationEventForDocId =\n  (id: string) =>\n  (\n    event: ListenerEvent,\n  ): event is Exclude<ListenerEvent, ReconnectEvent | PendingMutationsEvent> => {\n    return event.type !== 'reconnect' && event.type !== 'pending' && event.documentId === id\n  }\n\n/**\n * @hidden\n * @beta */\nexport type WithVersion<T> = T & {version: DocumentVariantType}\n\n/**\n * @hidden\n * @beta */\nexport type DocumentVersionEvent = WithVersion<ReconnectEvent | BufferedDocumentEvent>\n\n/**\n * @hidden\n * @beta */\nexport type RemoteSnapshotVersionEvent = WithVersion<RemoteSnapshotEvent>\n\n/**\n * @hidden\n * @beta\n * The SingleMutationResult type from `@sanity/client` doesn't reflect what we get back from POST /mutate\n */\nexport type MutationResult = Omit<SingleMutationResult, 'documentId'>\n\n/**\n * @hidden\n * @beta */\nexport interface DocumentVersion {\n  consistency$: Observable<boolean>\n  remoteSnapshot$: Observable<RemoteSnapshotVersionEvent>\n  events: Observable<DocumentVersionEvent>\n\n  patch: (patches: any[]) => MutationPayload[]\n  create: (document: Partial<SanityDocument>) => MutationPayload\n  createIfNotExists: (document: SanityDocument) => MutationPayload\n  createOrReplace: (document: SanityDocument) => MutationPayload\n  delete: () => MutationPayload\n\n  mutate: (mutations: MutationPayload[]) => void\n  commit: () => void\n}\n\n/**\n * @hidden\n * @beta */\nexport type Pair = {\n  /** @internal */\n  transactionsPendingEvents$: Observable<PendingMutationsEvent>\n  published: DocumentVersion\n  draft: DocumentVersion\n  version?: DocumentVersion\n}\n\nfunction setVersion<T>(version: 'draft' | 'published' | 'version') {\n  return (ev: T): T & {version: 'draft' | 'published' | 'version'} => ({...ev, version})\n}\n\nfunction requireId<T extends {_id?: string; _type: string}>(\n  value: T,\n): asserts value is T & {_id: string} {\n  if (!value._id) {\n    throw new Error('Expected document to have an _id')\n  }\n}\n\n//if we're patching a published document directly\n//then we're live editing and we should use raw mutations\n//rather than actions\nfunction isLiveEditMutation(mutationParams: Mutation['params'], publishedId: string) {\n  const {resultRev, ...mutation} = mutationParams\n  const patchTargets: string[] = mutation.mutations.flatMap((mut) => {\n    const mutationPayloads = Object.values(mut)\n    if (mutationPayloads.length > 1) {\n      throw new Error('Did not expect multiple mutations in the same payload')\n    }\n    return mutationPayloads[0].id || mutationPayloads[0]._id\n  })\n  return patchTargets.every((target) => target === publishedId)\n}\n\nfunction toActions(idPair: IdPair, mutationParams: Mutation['params']): Action[] {\n  const actions = mutationParams.mutations.flatMap<Action>((mutations) => {\n    // This action is not always interoperable with the equivalent mutation. It will fail if the\n    // published version of the document already exists.\n    if (mutations.createIfNotExists) {\n      // ignore all createIfNotExists, as these should be covered by the actions api and only be done locally\n      return []\n    }\n    if (mutations.create) {\n      // the actions API requires attributes._id to be set, while it's optional in the mutation API\n      requireId(mutations.create)\n      return {\n        actionType: 'sanity.action.document.create',\n        publishedId: idPair.publishedId,\n        attributes: mutations.create,\n        ifExists: 'fail',\n      }\n    }\n    if (mutations.patch) {\n      return {\n        actionType: 'sanity.action.document.edit',\n        draftId: idPair.versionId ?? idPair.draftId,\n        publishedId: idPair.publishedId,\n        patch: omit(mutations.patch, 'id'),\n      }\n    }\n    throw new Error('Cannot map mutation to action')\n  })\n\n  // Empty action invocations are a noop; although Content Lake accepts them, no transaction will\n  // be executed, causing Studio to become stuck in a pending state. To prevent this occurring, a\n  // fake unset mutation is added whenever an empty set of actions would otherwise be executed.\n  if (actions.length === 0) {\n    return [\n      {\n        actionType: 'sanity.action.document.edit',\n        draftId: idPair.draftId,\n        publishedId: idPair.publishedId,\n        patch: {\n          unset: ['_empty_action_guard_pseudo_field_'],\n        },\n      },\n    ]\n  }\n\n  return actions\n}\n\nfunction commitActions(client: SanityClient, idPair: IdPair, mutationParams: Mutation['params']) {\n  if (isLiveEditMutation(mutationParams, idPair.publishedId)) {\n    return commitMutations(client, idPair, mutationParams)\n  }\n\n  return actionsApiClient(client, idPair).observable.action(toActions(idPair, mutationParams), {\n    tag: 'document.commit',\n    transactionId: mutationParams.transactionId,\n  })\n}\n\nfunction commitMutations(\n  client: SanityClient,\n  idPair: IdPair,\n  mutationParams: Mutation['params'],\n): Promise<MutationResult> {\n  const {resultRev, ...mutation} = mutationParams\n  return operationsApiClient(client, idPair).dataRequest('mutate', mutation, {\n    visibility: 'async',\n    returnDocuments: false,\n    tag: 'document.commit',\n    // This makes sure the studio doesn't crash when a draft is crated\n    // because someone deleted a referenced document in the target dataset\n    skipCrossDatasetReferenceValidation: true,\n  })\n}\n\nfunction submitCommitRequest(\n  client: SanityClient,\n  idPair: IdPair,\n  request: CommitRequest,\n  serverActionsEnabled: boolean,\n): Observable<MultipleActionResult | MutationResult> {\n  return from(\n    serverActionsEnabled\n      ? commitActions(client, idPair, request.mutation.params)\n      : commitMutations(client, idPair, request.mutation.params),\n  ).pipe(\n    tap({\n      error: (error) => {\n        const isBadRequest =\n          'statusCode' in error &&\n          typeof error.statusCode === 'number' &&\n          error.statusCode >= 400 &&\n          error.statusCode <= 500\n        if (isBadRequest) {\n          request.cancel(error)\n        } else {\n          request.failure(error)\n        }\n      },\n      next: () => request.success(),\n    }),\n  )\n}\n\ntype LatencyTrackingEvent = {\n  transactionId: string\n  submittedAt: Date\n  receivedAt: Date\n  deltaMs: number\n}\n\ntype LatencyTrackingState = {\n  pending: {type: 'receive' | 'submit'; transactionId: string; timestamp: Date}[]\n  event: LatencyTrackingEvent | undefined\n}\n\n/** @internal */\nexport function checkoutPair(\n  client: SanityClient,\n  idPair: IdPair,\n  serverActionsEnabled: Observable<boolean>,\n  options: DocumentStoreExtraOptions = {},\n): Pair {\n  const {publishedId, draftId, versionId} = idPair\n\n  const {onReportLatency, onSyncErrorRecovery, tag} = options\n\n  const listenerEvents$ = getPairListener(client, idPair, {onSyncErrorRecovery, tag}).pipe(share())\n\n  const reconnect$ = listenerEvents$.pipe(\n    filter((ev) => ev.type === 'reconnect'),\n  ) as Observable<ReconnectEvent>\n\n  const draft = createBufferedDocument(\n    draftId,\n    listenerEvents$.pipe(filter(isMutationEventForDocId(draftId))),\n  )\n\n  const version =\n    typeof versionId === 'undefined'\n      ? undefined\n      : createBufferedDocument(\n          versionId,\n          listenerEvents$.pipe(filter(isMutationEventForDocId(versionId))),\n        )\n\n  const published = createBufferedDocument(\n    publishedId,\n    listenerEvents$.pipe(filter(isMutationEventForDocId(publishedId))),\n  )\n\n  // share commit handling between draft and published\n  const transactionsPendingEvents$ = listenerEvents$.pipe(\n    filter((ev): ev is PendingMutationsEvent => ev.type === 'pending'),\n  )\n\n  const commits$ = merge(\n    draft.commitRequest$,\n    published.commitRequest$,\n    version ? version.commitRequest$ : EMPTY,\n  ).pipe(\n    mergeMap((commitRequest) =>\n      serverActionsEnabled.pipe(\n        take(1),\n        mergeMap((canUseServerActions) =>\n          submitCommitRequest(client, idPair, commitRequest, canUseServerActions),\n        ),\n      ),\n    ),\n  )\n\n  // Note: we're only subscribing to this for the side-effect\n  const combinedEvents = defer(() =>\n    onReportLatency\n      ? reportLatency({\n          commits$: commits$,\n          listenerEvents$: listenerEvents$,\n          client,\n          onReportLatency,\n        })\n      : merge(commits$, listenerEvents$),\n  ).pipe(\n    mergeMap(() => EMPTY),\n    share(),\n  )\n\n  return {\n    transactionsPendingEvents$,\n    draft: {\n      ...draft,\n      events: merge(combinedEvents, reconnect$, draft.events).pipe(map(setVersion('draft'))),\n      remoteSnapshot$: draft.remoteSnapshot$.pipe(map(setVersion('draft'))),\n    },\n    ...(typeof version === 'undefined'\n      ? {}\n      : {\n          version: {\n            ...version,\n            events: merge(combinedEvents, reconnect$, version.events).pipe(\n              map(setVersion('version')),\n            ),\n            remoteSnapshot$: version.remoteSnapshot$.pipe(map(setVersion('version'))),\n          },\n        }),\n    published: {\n      ...published,\n      events: merge(combinedEvents, reconnect$, published.events).pipe(\n        map(setVersion('published')),\n      ),\n      remoteSnapshot$: published.remoteSnapshot$.pipe(map(setVersion('published'))),\n    },\n  }\n}\n\nfunction reportLatency(options: {\n  commits$: Observable<MultipleActionResult | MutationResult>\n  listenerEvents$: Observable<ListenerEvent>\n  client: SanityClient\n  onReportLatency: (event: LatencyReportEvent) => void\n}) {\n  const {client, commits$, listenerEvents$, onReportLatency} = options\n  // Note: this request happens once and the result is then cached indefinitely\n  const shardInfo = fetch(client.getUrl(client.getDataUrl('ping')), {\n    signal: AbortSignal.timeout(FETCH_SHARD_TIMEOUT),\n  })\n    .then((response) => response.headers.get('X-Sanity-Shard') || undefined)\n    .catch(() => undefined)\n\n  const submittedMutations = commits$.pipe(\n    map((ev) => ({\n      type: 'submit' as const,\n      transactionId: ev.transactionId,\n      timestamp: new Date(),\n    })),\n    share(),\n  )\n\n  const receivedMutations = listenerEvents$.pipe(\n    filter((ev) => ev.type === 'mutation'),\n    map((ev) => ({\n      type: 'receive' as const,\n      transactionId: ev.transactionId,\n      timestamp: new Date(),\n    })),\n    share(),\n  )\n\n  return merge(submittedMutations, receivedMutations).pipe(\n    scan(\n      (state: LatencyTrackingState, event): LatencyTrackingState => {\n        const matchingIndex = state.pending.findIndex(\n          (e) => e.transactionId === event.transactionId,\n        )\n        if (matchingIndex > -1) {\n          const matching = state.pending[matchingIndex]\n          const [submitEvent, receiveEvent] =\n            matching.type == 'submit' ? [matching, event] : [event, matching]\n          return {\n            event: {\n              transactionId: event.transactionId,\n              submittedAt: submitEvent.timestamp,\n              receivedAt: submitEvent.timestamp,\n              deltaMs: receiveEvent.timestamp.getTime() - submitEvent.timestamp.getTime(),\n            },\n            pending: state.pending.toSpliced(matchingIndex, 1),\n          }\n        }\n        return {event: undefined, pending: state.pending.concat(event)}\n      },\n      {event: undefined, pending: []},\n    ),\n    map((state) => state.event),\n    filter((event) => !!event),\n    withLatestFrom(shardInfo),\n    tap(([event, shard]) =>\n      onReportLatency?.({latencyMs: event.deltaMs, shard, transactionId: event.transactionId}),\n    ),\n  )\n}\n","import {type Observable} from 'rxjs'\n\nexport function memoize<TFunction extends (...args: any[]) => Observable<any>>(\n  fn: TFunction,\n  keyGen: (...args: Parameters<TFunction>) => string,\n): TFunction {\n  const MEMO: {[key: string]: Observable<unknown>} = Object.create(null)\n  const memoizedFn = (...args: Parameters<TFunction>): Observable<unknown> => {\n    const key = keyGen(...args)\n    if (!(key in MEMO)) {\n      MEMO[key] = fn(...args)\n    }\n    return MEMO[key]\n  }\n\n  return memoizedFn as TFunction\n}\n","import {type SanityClient} from '@sanity/client'\n\nimport {type IdPair} from '../types'\n\nexport function memoizeKeyGen(client: SanityClient, idPair: IdPair, typeName: string) {\n  const config = client.config()\n  return `${config.dataset ?? ''}-${config.projectId ?? ''}-${idPair.publishedId}-${idPair.versionId ?? ''}-${typeName}`\n}\n","import {type SanityClient} from '@sanity/client'\nimport {EMPTY, merge, Observable, of, ReplaySubject, share, timer} from 'rxjs'\nimport {mergeMap} from 'rxjs/operators'\n\nimport {type DocumentStoreExtraOptions} from '../getPairListener'\nimport {type IdPair} from '../types'\nimport {memoize} from '../utils/createMemoizer'\nimport {checkoutPair, type Pair} from './checkoutPair'\nimport {memoizeKeyGen} from './memoizeKeyGen'\n\n// How long to keep listener connected for after last unsubscribe\nconst LISTENER_RESET_DELAY = 10_000\n\nexport const memoizedPair: (\n  client: SanityClient,\n  idPair: IdPair,\n  typeName: string,\n  serverActionsEnabled: Observable<boolean>,\n  extraOptions?: DocumentStoreExtraOptions,\n) => Observable<Pair> = memoize(\n  (\n    client: SanityClient,\n    idPair: IdPair,\n    _typeName: string,\n    serverActionsEnabled: Observable<boolean>,\n    pairListenerOptions?: DocumentStoreExtraOptions,\n  ): Observable<Pair> => {\n    return new Observable<Pair>((subscriber) => {\n      const pair = checkoutPair(client, idPair, serverActionsEnabled, pairListenerOptions)\n      return merge(\n        of(pair),\n        // merge in draft, published, and version events to makes sure they receive\n        // the events they need for as long as the pair is subscribed to\n        pair.draft.events.pipe(mergeMap(() => EMPTY)),\n        pair.published.events.pipe(mergeMap(() => EMPTY)),\n        pair.version?.events.pipe(mergeMap(() => EMPTY)) ?? EMPTY,\n      ).subscribe(subscriber)\n    }).pipe(\n      share({\n        connector: () => new ReplaySubject(1),\n        resetOnComplete: true,\n        resetOnRefCountZero: () => timer(LISTENER_RESET_DELAY),\n      }),\n    )\n  },\n  memoizeKeyGen,\n)\n","import {type SanityClient} from '@sanity/client'\nimport {type SanityDocument} from '@sanity/types'\nimport {type Observable} from 'rxjs'\nimport {filter, map, publishReplay, refCount} from 'rxjs/operators'\n\nimport {type BufferedDocumentEvent, type MutationPayload, type SnapshotEvent} from '../buffered-doc'\nimport {type DocumentStoreExtraOptions} from '../getPairListener'\nimport {type IdPair, type PendingMutationsEvent, type ReconnectEvent} from '../types'\nimport {memoize} from '../utils/createMemoizer'\nimport {type DocumentVersion} from './checkoutPair'\nimport {memoizedPair} from './memoizedPair'\nimport {memoizeKeyGen} from './memoizeKeyGen'\n\n// return true if the event comes with a document snapshot\nfunction isSnapshotEvent(event: BufferedDocumentEvent | ReconnectEvent): event is SnapshotEvent & {\n  version: 'published' | 'draft'\n} {\n  return event.type === 'snapshot'\n}\n\nfunction withSnapshots(pair: DocumentVersion): DocumentVersionSnapshots {\n  return {\n    snapshots$: pair.events.pipe(\n      filter(isSnapshotEvent),\n      map((event) => event.document),\n      publishReplay(1),\n      refCount(),\n    ),\n\n    patch: pair.patch,\n    create: pair.create,\n    createIfNotExists: pair.createIfNotExists,\n    createOrReplace: pair.createOrReplace,\n    delete: pair.delete,\n\n    mutate: pair.mutate,\n    commit: pair.commit,\n  }\n}\n\n/** @internal */\nexport interface DocumentVersionSnapshots {\n  snapshots$: Observable<SanityDocument>\n\n  // helper functions\n  patch: (patches: any[]) => MutationPayload[]\n  create: (document: any) => MutationPayload\n  createIfNotExists: (document: any) => MutationPayload\n  createOrReplace: (document: any) => MutationPayload\n  delete: () => MutationPayload\n\n  mutate: (mutations: MutationPayload[]) => void\n  commit: () => void\n}\n\n/** @internal */\ninterface SnapshotPair {\n  transactionsPendingEvents$: Observable<PendingMutationsEvent>\n  draft: DocumentVersionSnapshots\n  published: DocumentVersionSnapshots\n  version?: DocumentVersionSnapshots\n}\n\n/** @internal */\nexport const snapshotPair = memoize(\n  (\n    client: SanityClient,\n    idPair: IdPair,\n    typeName: string,\n    serverActionsEnabled: Observable<boolean>,\n    pairListenerOptions?: DocumentStoreExtraOptions,\n  ): Observable<SnapshotPair> => {\n    return memoizedPair(client, idPair, typeName, serverActionsEnabled, pairListenerOptions).pipe(\n      map(({published, draft, version, transactionsPendingEvents$}): SnapshotPair => {\n        return {\n          transactionsPendingEvents$,\n          published: withSnapshots(published),\n          draft: withSnapshots(draft),\n          ...(version ? {version: withSnapshots(version)} : {}),\n        }\n      }),\n      publishReplay(1),\n      refCount(),\n    )\n  },\n  memoizeKeyGen,\n)\n","import {type Schema} from '@sanity/types'\n\nexport const isLiveEditEnabled = (schema: Schema, typeName: string): boolean =>\n  schema.get(typeName)?.liveEdit === true\n","import {type SanityClient} from '@sanity/client'\nimport {type SanityDocument, type Schema} from '@sanity/types'\nimport {combineLatest, type Observable, of} from 'rxjs'\nimport {map, publishReplay, refCount, startWith, switchMap} from 'rxjs/operators'\n\nimport {getVersionFromId} from '../../../../util'\nimport {createSWR} from '../../../../util/rxSwr'\nimport {type DocumentStoreExtraOptions} from '../getPairListener'\nimport {type IdPair, type PendingMutationsEvent} from '../types'\nimport {memoize} from '../utils/createMemoizer'\nimport {memoizeKeyGen} from './memoizeKeyGen'\nimport {snapshotPair} from './snapshotPair'\nimport {isLiveEditEnabled} from './utils/isLiveEditEnabled'\n\ninterface TransactionSyncLockState {\n  enabled: boolean\n}\n\nconst swr = createSWR<\n  [SanityDocument, SanityDocument, TransactionSyncLockState, SanityDocument | null]\n>({maxSize: 50})\n\n/**\n * @hidden\n * @beta */\nexport interface EditStateFor {\n  id: string\n  type: string\n  transactionSyncLock: TransactionSyncLockState | null\n  draft: SanityDocument | null\n  published: SanityDocument | null\n  version: SanityDocument | null\n  /**\n   * Whether live edit is enabled. This may be true for various reasons:\n   *\n   * - The schema type has live edit enabled.\n   * - A version of the document is checked out.\n   */\n  liveEdit: boolean\n  /**\n   * Whether the schema type has live edit enabled.\n   */\n  liveEditSchemaType: boolean\n  ready: boolean\n  /**\n   * When editing a version, the name of the release the document belongs to.\n   */\n  release: string | undefined\n}\nconst LOCKED: TransactionSyncLockState = {enabled: true}\nconst NOT_LOCKED: TransactionSyncLockState = {enabled: false}\n\n/** @internal */\nexport const editState = memoize(\n  (\n    ctx: {\n      client: SanityClient\n      schema: Schema\n      serverActionsEnabled: Observable<boolean>\n      extraOptions?: DocumentStoreExtraOptions\n    },\n    idPair: IdPair,\n    typeName: string,\n  ): Observable<EditStateFor> => {\n    const liveEditSchemaType = isLiveEditEnabled(ctx.schema, typeName)\n    const liveEdit = typeof idPair.versionId !== 'undefined' || liveEditSchemaType\n\n    return snapshotPair(\n      ctx.client,\n      idPair,\n      typeName,\n      ctx.serverActionsEnabled,\n      ctx.extraOptions,\n    ).pipe(\n      switchMap((versions) =>\n        combineLatest([\n          versions.draft.snapshots$,\n          versions.published.snapshots$,\n          versions.transactionsPendingEvents$.pipe(\n            map((ev: PendingMutationsEvent) => (ev.phase === 'begin' ? LOCKED : NOT_LOCKED)),\n            startWith(NOT_LOCKED),\n          ),\n          typeof versions.version === 'undefined' ? of(null) : versions.version.snapshots$,\n        ]),\n      ),\n      swr(`${idPair.publishedId}-${idPair.draftId}-${idPair.versionId}`),\n      map(\n        ({\n          value: [draftSnapshot, publishedSnapshot, transactionSyncLock, versionSnapshot],\n          fromCache,\n        }) => ({\n          id: idPair.publishedId,\n          type: typeName,\n          draft: draftSnapshot,\n          published: publishedSnapshot,\n          version: typeof idPair.versionId === 'undefined' ? null : versionSnapshot,\n          liveEdit,\n          liveEditSchemaType,\n          ready: !fromCache,\n          transactionSyncLock: fromCache ? null : transactionSyncLock,\n          release: idPair.versionId ? getVersionFromId(idPair.versionId) : undefined,\n        }),\n      ),\n      startWith({\n        id: idPair.publishedId,\n        type: typeName,\n        draft: null,\n        published: null,\n        version: null,\n        liveEdit,\n        liveEditSchemaType,\n        ready: false,\n        transactionSyncLock: null,\n        release: idPair.versionId ? getVersionFromId(idPair.versionId) : undefined,\n      }),\n      publishReplay(1),\n      refCount(),\n    )\n  },\n  (ctx, idPair, typeName) => memoizeKeyGen(ctx.client, idPair, typeName),\n)\n","import {type SanityClient} from '@sanity/client'\nimport {combineLatest, type Observable} from 'rxjs'\nimport {distinctUntilChanged, map, publishReplay, refCount, switchMap} from 'rxjs/operators'\n\nimport {type DocumentStoreExtraOptions} from '../getPairListener'\nimport {type IdPair} from '../types'\nimport {memoize} from '../utils/createMemoizer'\nimport {memoizedPair} from './memoizedPair'\nimport {memoizeKeyGen} from './memoizeKeyGen'\n\n// A stream of all events related to either published or draft, each event comes with a 'target'\n// that specifies which version (draft|published) the event is about\nexport const consistencyStatus: (\n  client: SanityClient,\n  idPair: IdPair,\n  typeName: string,\n  serverActionsEnabled: Observable<boolean>,\n  extraOptions?: DocumentStoreExtraOptions,\n) => Observable<boolean> = memoize(\n  (\n    client: SanityClient,\n    idPair: IdPair,\n    typeName: string,\n    serverActionsEnabled: Observable<boolean>,\n    extraOptions?: DocumentStoreExtraOptions,\n  ) => {\n    return memoizedPair(client, idPair, typeName, serverActionsEnabled, extraOptions).pipe(\n      switchMap(({draft, published}) =>\n        combineLatest([draft.consistency$, published.consistency$]),\n      ),\n      map(\n        ([draftIsConsistent, publishedIsConsistent]) => draftIsConsistent && publishedIsConsistent,\n      ),\n      distinctUntilChanged(),\n      publishReplay(1),\n      refCount(),\n    )\n  },\n  memoizeKeyGen,\n)\n","/* eslint-disable @typescript-eslint/no-use-before-define */\n/* eslint-disable max-nested-callbacks */\n\nimport {type SanityClient} from '@sanity/client'\nimport {type Schema} from '@sanity/types'\nimport {combineLatest, type Observable} from 'rxjs'\nimport {map, publishReplay, refCount, switchMap} from 'rxjs/operators'\n\nimport {type HistoryStore} from '../../history'\nimport {type DocumentStoreExtraOptions} from '../getPairListener'\nimport {type IdPair} from '../types'\nimport {memoize} from '../utils/createMemoizer'\nimport {memoizeKeyGen} from './memoizeKeyGen'\nimport {type OperationArgs} from './operations'\nimport {snapshotPair} from './snapshotPair'\n\nexport const operationArgs = memoize(\n  (\n    ctx: {\n      client: SanityClient\n      historyStore: HistoryStore\n      schema: Schema\n      serverActionsEnabled: Observable<boolean>\n      pairListenerOptions?: DocumentStoreExtraOptions\n    },\n    idPair: IdPair,\n    typeName: string,\n  ): Observable<OperationArgs> => {\n    return snapshotPair(\n      ctx.client,\n      idPair,\n      typeName,\n      ctx.serverActionsEnabled,\n      ctx.pairListenerOptions,\n    ).pipe(\n      switchMap((versions) =>\n        combineLatest([\n          versions.draft.snapshots$,\n          versions.published.snapshots$,\n          ctx.serverActionsEnabled,\n          ...(typeof versions.version === 'undefined' ? [] : [versions.version.snapshots$]),\n        ]).pipe(\n          map(\n            ([draft, published, canUseServerActions, version]): OperationArgs => ({\n              ...ctx,\n              serverActionsEnabled: canUseServerActions,\n              idPair,\n              typeName,\n              snapshots: {\n                published,\n                draft,\n                ...(version\n                  ? {\n                      version,\n                    }\n                  : {}),\n              },\n              ...(versions.version\n                ? {\n                    version: versions.version,\n                  }\n                : {}),\n              draft: versions.draft,\n              published: versions.published,\n            }),\n          ),\n        ),\n      ),\n      publishReplay(1),\n      refCount(),\n    )\n  },\n  (ctx, idPair, typeName) => {\n    return memoizeKeyGen(ctx.client, idPair, typeName)\n  },\n)\n","import {EMPTY} from 'rxjs'\n\nimport {type OperationImpl} from './types'\n\nexport const commit: OperationImpl = {\n  disabled: (): false => false,\n  execute: ({draft, published, version}) => {\n    version?.commit()\n    draft.commit()\n    published.commit()\n    // note: we might be able to connect with the outgoing commit request stream here\n    return EMPTY\n  },\n}\n","import {isLiveEditEnabled} from '../utils/isLiveEditEnabled'\nimport {operationsApiClient} from '../utils/operationsApiClient'\nimport {type OperationImpl} from './types'\n\nexport const del: OperationImpl<[], 'NOTHING_TO_DELETE'> = {\n  disabled: ({snapshots}) => (snapshots.draft || snapshots.published ? false : 'NOTHING_TO_DELETE'),\n  execute: ({client, schema, idPair, typeName}) => {\n    const tx = operationsApiClient(client, idPair)\n      .observable.transaction()\n      .delete(idPair.publishedId)\n\n    if (isLiveEditEnabled(schema, typeName)) {\n      return tx.commit({tag: 'document.delete'})\n    }\n\n    return tx.delete(idPair.draftId).commit({\n      tag: 'document.delete',\n      // this disables referential integrity for cross-dataset references. we\n      // have this set because we warn against deletes in the `ConfirmDeleteDialog`\n      // UI. This operation is run when \"delete anyway\" is clicked\n      skipCrossDatasetReferenceValidation: true,\n    })\n  },\n}\n","import {operationsApiClient} from '../utils/operationsApiClient'\nimport {type OperationImpl} from './types'\n\ntype DisabledReason = 'NO_CHANGES' | 'NOT_PUBLISHED'\n\nexport const discardChanges: OperationImpl<[], DisabledReason> = {\n  disabled: ({snapshots}) => {\n    if (!snapshots.draft) {\n      return 'NO_CHANGES'\n    }\n    if (!snapshots.published) {\n      return 'NOT_PUBLISHED'\n    }\n    return false\n  },\n  execute: ({client, idPair}) => {\n    return operationsApiClient(client, idPair)\n      .observable.transaction()\n      .delete(idPair.draftId)\n      .commit({tag: 'document.discard-changes'})\n  },\n}\n","import {type SanityDocument} from '@sanity/types'\nimport {omit} from 'lodash'\n\nimport {getDraftId, getVersionFromId, getVersionId} from '../../../../../util'\nimport {isLiveEditEnabled} from '../utils/isLiveEditEnabled'\nimport {operationsApiClient} from '../utils/operationsApiClient'\nimport {type OperationImpl} from './types'\n\nconst omitProps = ['_createdAt', '_updatedAt']\n\nconst getDocumentToDuplicateId = ({\n  versionSnapshot,\n  dupeId,\n  liveEdit,\n}: {\n  versionSnapshot?: SanityDocument | null | undefined\n  dupeId: string\n  liveEdit: boolean\n}) => {\n  if (versionSnapshot) {\n    // When duplicating a version document we need to create it with a version id.\n    // We get the version from the snapshot id and create a new version id for the duplicate.\n    const versionId = getVersionFromId(versionSnapshot._id)\n    if (versionId) return getVersionId(dupeId, versionId)\n  }\n\n  if (liveEdit) {\n    return dupeId\n  }\n\n  return getDraftId(dupeId)\n}\n\nexport const duplicate: OperationImpl<[baseDocumentId: string], 'NOTHING_TO_DUPLICATE'> = {\n  disabled: ({snapshots}) => {\n    return snapshots.published || snapshots.draft || snapshots.version\n      ? false\n      : 'NOTHING_TO_DUPLICATE'\n  },\n  execute: ({schema, client, snapshots, typeName, idPair}, dupeId) => {\n    const source = snapshots.version || snapshots.draft || snapshots.published\n\n    if (!source) {\n      throw new Error('cannot execute on empty document')\n    }\n\n    const _id = getDocumentToDuplicateId({\n      versionSnapshot: snapshots.version,\n      dupeId,\n      liveEdit: isLiveEditEnabled(schema, typeName),\n    })\n\n    return operationsApiClient(client, idPair).observable.create(\n      {\n        ...omit(source, omitProps),\n        _id,\n        _type: source._type,\n      },\n      {\n        tag: 'document.duplicate',\n      },\n    )\n  },\n}\n","import {isLiveEditEnabled} from '../utils/isLiveEditEnabled'\nimport {type OperationImpl} from './types'\n\n// todo: we could also consider exposing 'mutate' directly\nexport const patch: OperationImpl<[patches: any[], initialDocument?: Record<string, any>]> = {\n  disabled: (): false => false,\n  execute: (\n    {schema, snapshots, idPair, draft, published, version, typeName},\n    patches = [],\n    initialDocument,\n  ): void => {\n    if (version) {\n      // No drafting, so patch and commit the version document.\n      version.mutate([\n        version.createIfNotExists({\n          _type: typeName,\n          ...initialDocument,\n        }),\n        ...version.patch(patches),\n      ])\n      return\n    }\n\n    if (isLiveEditEnabled(schema, typeName)) {\n      // No drafting, so patch and commit the published document\n      published.mutate([\n        published.createIfNotExists({\n          _type: typeName,\n          ...initialDocument,\n        }),\n        ...published.patch(patches),\n      ])\n    } else {\n      draft.mutate([\n        draft.createIfNotExists({\n          ...initialDocument,\n          ...snapshots.published,\n          _id: idPair.draftId,\n          _type: typeName,\n        }),\n        ...draft.patch(patches),\n      ])\n    }\n  },\n}\n","import {isReference} from '@sanity/types'\nimport {omit} from 'lodash'\n\nimport {isLiveEditEnabled} from '../utils/isLiveEditEnabled'\nimport {operationsApiClient} from '../utils/operationsApiClient'\nimport {type OperationImpl} from './index'\n\nfunction strengthenOnPublish<T = any>(obj: T): T {\n  if (isReference(obj)) {\n    if (obj._strengthenOnPublish) {\n      return omit(\n        obj,\n        ['_strengthenOnPublish'].concat(obj._strengthenOnPublish.weak ? [] : ['_weak']),\n      ) as T\n    }\n    return obj\n  }\n  if (typeof obj !== 'object' || !obj) return obj\n  if (Array.isArray(obj)) return obj.map(strengthenOnPublish) as T\n  return Object.fromEntries(\n    Object.entries(obj).map(([key, value]) => [key, strengthenOnPublish(value)] as const),\n  ) as T\n}\n\ntype DisabledReason = 'LIVE_EDIT_ENABLED' | 'ALREADY_PUBLISHED' | 'NO_CHANGES'\n\nexport const publish: OperationImpl<[], DisabledReason> = {\n  disabled: ({schema, typeName, snapshots}) => {\n    if (isLiveEditEnabled(schema, typeName)) {\n      return 'LIVE_EDIT_ENABLED'\n    }\n    if (!snapshots.draft) {\n      return snapshots.published ? 'ALREADY_PUBLISHED' : 'NO_CHANGES'\n    }\n    return false\n  },\n  execute: ({client, idPair, snapshots}) => {\n    if (!snapshots.draft) {\n      throw new Error('cannot execute \"publish\" when draft is missing')\n    }\n    const value = strengthenOnPublish(omit(snapshots.draft, '_updatedAt'))\n    const tx = operationsApiClient(client, idPair).observable.transaction()\n    if (!snapshots.draft) {\n      throw new Error('cannot execute \"publish\" when draft is missing')\n    }\n\n    if (snapshots.published) {\n      // If it exists already, we only want to update it if the revision on the remote server\n      // matches what our local state thinks it's at\n      tx.patch(idPair.publishedId, {\n        // Hack until other mutations support revision locking\n        unset: ['_revision_lock_pseudo_field_'],\n        ifRevisionID: snapshots.published._rev,\n      })\n\n      tx.createOrReplace({\n        ...value,\n        _id: idPair.publishedId,\n        _type: snapshots.draft._type,\n      })\n    } else {\n      // If the document has not been published, we want to create it - if it suddenly exists\n      // before being created, we don't want to overwrite if, instead we want to yield an error\n      tx.create({\n        ...value,\n        _id: idPair.publishedId,\n        _type: snapshots.draft._type,\n      })\n    }\n\n    tx.delete(idPair.draftId)\n\n    return tx.commit({tag: 'document.publish', visibility: 'async'})\n  },\n}\n","import {isLiveEditEnabled} from '../utils/isLiveEditEnabled'\nimport {type OperationImpl} from './types'\n\nexport const restore: OperationImpl<[fromRevision: string]> = {\n  disabled: (): false => false,\n  execute: ({historyStore, schema, idPair, typeName}, fromRevision: string) => {\n    const targetId = isLiveEditEnabled(schema, typeName) ? idPair.publishedId : idPair.draftId\n    return historyStore.restore(idPair.publishedId, targetId, fromRevision)\n  },\n}\n","import {omit} from 'lodash'\n\nimport {isLiveEditEnabled} from '../utils/isLiveEditEnabled'\nimport {operationsApiClient} from '../utils/operationsApiClient'\nimport {type OperationImpl} from './types'\n\ntype DisabledReason = 'LIVE_EDIT_ENABLED' | 'NOT_PUBLISHED'\n\nexport const unpublish: OperationImpl<[], DisabledReason> = {\n  disabled: ({schema, snapshots, typeName}) => {\n    if (isLiveEditEnabled(schema, typeName)) {\n      return 'LIVE_EDIT_ENABLED'\n    }\n    return snapshots.published ? false : 'NOT_PUBLISHED'\n  },\n  execute: ({client, idPair, snapshots}) => {\n    let tx = operationsApiClient(client, idPair).observable.transaction().delete(idPair.publishedId)\n\n    if (snapshots.published) {\n      tx = tx.createIfNotExists({\n        ...omit(snapshots.published, '_updatedAt'),\n        _id: idPair.draftId,\n        _type: snapshots.published._type,\n      })\n    }\n\n    return tx.commit({\n      tag: 'document.unpublish',\n      visibility: 'async',\n      // this disables referential integrity for cross-dataset references. we\n      // have this set because we warn against unpublishes in the `ConfirmDeleteDialog`\n      // UI. This operation is run when \"unpublish anyway\" is clicked\n      skipCrossDatasetReferenceValidation: true,\n    })\n  },\n}\n","import {type OperationImpl} from '../operations/types'\nimport {actionsApiClient} from '../utils/actionsApiClient'\nimport {isLiveEditEnabled} from '../utils/isLiveEditEnabled'\n\nexport const del: OperationImpl<[], 'NOTHING_TO_DELETE'> = {\n  disabled: ({snapshots}) => (snapshots.draft || snapshots.published ? false : 'NOTHING_TO_DELETE'),\n  execute: ({client, schema, idPair, typeName, snapshots}) => {\n    if (isLiveEditEnabled(schema, typeName)) {\n      const tx = client.observable.transaction().delete(idPair.publishedId)\n      return tx.commit({tag: 'document.delete'})\n    }\n\n    //the delete action requires a published doc -- discard if not present\n    if (!snapshots.published) {\n      return actionsApiClient(client, idPair).observable.action(\n        {\n          actionType: 'sanity.action.document.discard',\n          draftId: idPair.draftId,\n        },\n        {tag: 'document.delete'},\n      )\n    }\n\n    return actionsApiClient(client, idPair).observable.action(\n      {\n        actionType: 'sanity.action.document.delete',\n        includeDrafts: snapshots.draft ? [idPair.draftId] : [],\n        publishedId: idPair.publishedId,\n      },\n      {\n        tag: 'document.delete',\n        // this disables referential integrity for cross-dataset references. we\n        // have this set because we warn against deletes in the `ConfirmDeleteDialog`\n        // UI. This operation is run when \"delete anyway\" is clicked\n        skipCrossDatasetReferenceValidation: true,\n      },\n    )\n  },\n}\n","import {type OperationImpl} from '../operations/types'\nimport {actionsApiClient} from '../utils/actionsApiClient'\n\ntype DisabledReason = 'NO_CHANGES' | 'NOT_PUBLISHED'\n\nexport const discardChanges: OperationImpl<[], DisabledReason> = {\n  disabled: ({snapshots}) => {\n    if (!snapshots.draft) {\n      return 'NO_CHANGES'\n    }\n    if (!snapshots.published) {\n      return 'NOT_PUBLISHED'\n    }\n    return false\n  },\n  execute: ({client, idPair}) => {\n    return actionsApiClient(client, idPair).observable.action(\n      {\n        actionType: 'sanity.action.document.discard',\n        draftId: idPair.draftId,\n      },\n      {tag: 'document.discard-changes'},\n    )\n  },\n}\n","import {type OperationImpl} from '../operations/types'\nimport {isLiveEditEnabled} from '../utils/isLiveEditEnabled'\n\nexport const patch: OperationImpl<[patches: any[], initialDocument?: Record<string, any>]> = {\n  disabled: (): false => false,\n  execute: (\n    {schema, snapshots, idPair, draft, published, version, typeName},\n    patches = [],\n    initialDocument,\n  ): void => {\n    if (version) {\n      // No drafting, so patch and commit the version document.\n      const patchMutation = version.patch(patches)\n      // Note: if the document doesn't exist on the server yet, we need to create it first. We only want to do this if we can't see it locally\n      // if it's been deleted on the server we want that to become a mutation error when submitting.\n      const ensureVersion = snapshots.version\n        ? version.patch([\n            {\n              unset: ['_empty_action_guard_pseudo_field_'],\n            },\n          ])\n        : [\n            version.create({\n              ...initialDocument,\n              _id: idPair.draftId,\n              _type: typeName,\n            }),\n          ]\n      // No drafting, so patch and commit the published document\n      version.mutate([...ensureVersion, ...patchMutation])\n\n      return\n    }\n\n    if (isLiveEditEnabled(schema, typeName)) {\n      // No drafting, so patch and commit the published document\n      const patchMutation = published.patch(patches)\n      // Note: if the document doesn't exist on the server yet, we need to create it first. We only want to do this if we can't see it locally\n      // if it's been deleted on the server we want that to become a mutation error when submitting.\n      const mutations = snapshots.published\n        ? patchMutation\n        : [\n            published.createIfNotExists({\n              _type: typeName,\n              ...initialDocument,\n            }),\n          ]\n      // No drafting, so patch and commit the published document\n      published.mutate(mutations)\n\n      return\n    }\n\n    const patchMutation = draft.patch(patches)\n\n    if (snapshots.published) {\n      draft.mutate([\n        // If there's no draft, the user's edits will be based on the published document in the form in front of them\n        // so before patching it we need to make sure it's created based on the current published version first.\n        draft.createIfNotExists({\n          ...initialDocument,\n          ...snapshots.published,\n          _id: idPair.draftId,\n          _type: typeName,\n        }),\n        ...patchMutation,\n      ])\n      return\n    }\n    const ensureDraft = snapshots.draft\n      ? draft.patch([\n          {\n            unset: ['_empty_action_guard_pseudo_field_'],\n          },\n        ])\n      : [\n          draft.create({\n            ...initialDocument,\n            _id: idPair.draftId,\n            _type: typeName,\n          }),\n        ]\n    draft.mutate([...ensureDraft, ...patchMutation])\n  },\n}\n","import {type OperationImpl} from '../operations/index'\nimport {actionsApiClient} from '../utils/actionsApiClient'\nimport {isLiveEditEnabled} from '../utils/isLiveEditEnabled'\n\ntype DisabledReason = 'LIVE_EDIT_ENABLED' | 'ALREADY_PUBLISHED' | 'NO_CHANGES'\n\nexport const publish: OperationImpl<[], DisabledReason> = {\n  disabled: ({schema, typeName, snapshots}) => {\n    if (isLiveEditEnabled(schema, typeName)) {\n      return 'LIVE_EDIT_ENABLED'\n    }\n    if (!snapshots.draft) {\n      return snapshots.published ? 'ALREADY_PUBLISHED' : 'NO_CHANGES'\n    }\n    return false\n  },\n  execute: ({client, idPair, snapshots}) => {\n    // The editor must be able to see the draft they are choosing to publish.\n    if (!snapshots.draft) {\n      throw new Error('cannot execute \"publish\" when draft is missing')\n    }\n\n    return actionsApiClient(client, idPair).observable.action(\n      {\n        actionType: 'sanity.action.document.publish',\n        draftId: idPair.draftId,\n        publishedId: idPair.publishedId,\n        // Optimistic locking using `ifPublishedRevisionId` ensures that concurrent publish action\n        // invocations do not override each other.\n        //\n        // Note: for custom publish actions, `snapshots.draft._rev` may be stale, which means the\n        // `ifDraftRevisionId` optimistic lock cannot currently be used.\n        ifPublishedRevisionId: snapshots.published?._rev,\n      },\n      {\n        tag: 'document.publish',\n      },\n    )\n  },\n}\n","import {type OperationImpl} from '../operations/types'\nimport {isLiveEditEnabled} from '../utils/isLiveEditEnabled'\n\nexport const restore: OperationImpl<[fromRevision: string]> = {\n  disabled: (): false => false,\n  execute: ({snapshots, historyStore, schema, idPair, typeName}, fromRevision: string) => {\n    const targetId = isLiveEditEnabled(schema, typeName) ? idPair.publishedId : idPair.draftId\n    return historyStore.restore(idPair.publishedId, targetId, fromRevision, {\n      fromDeleted: !snapshots.draft && !snapshots.published,\n      useServerDocumentActions: true,\n    })\n  },\n}\n","import {type OperationImpl} from '../operations/types'\nimport {actionsApiClient} from '../utils/actionsApiClient'\nimport {isLiveEditEnabled} from '../utils/isLiveEditEnabled'\n\ntype DisabledReason = 'LIVE_EDIT_ENABLED' | 'NOT_PUBLISHED'\n\nexport const unpublish: OperationImpl<[], DisabledReason> = {\n  disabled: ({schema, snapshots, typeName}) => {\n    if (isLiveEditEnabled(schema, typeName)) {\n      return 'LIVE_EDIT_ENABLED'\n    }\n    return snapshots.published ? false : 'NOT_PUBLISHED'\n  },\n  execute: ({client, idPair}) =>\n    actionsApiClient(client, idPair).observable.action(\n      {\n        // This operation is run when \"unpublish anyway\" is clicked\n        actionType: 'sanity.action.document.unpublish',\n        draftId: idPair.draftId,\n        publishedId: idPair.publishedId,\n      },\n      {\n        tag: 'document.unpublish',\n        // this disables referential integrity for cross-dataset references. we\n        // have this set because we warn against unpublishes in the `ConfirmDeleteDialog`\n        // UI.\n        skipCrossDatasetReferenceValidation: true,\n      },\n    ),\n}\n","/* eslint-disable max-nested-callbacks */\nimport {type SanityClient} from '@sanity/client'\nimport {type Schema} from '@sanity/types'\nimport {asyncScheduler, defer, EMPTY, merge, type Observable, of, Subject, timer} from 'rxjs'\nimport {\n  catchError,\n  concatMap,\n  filter,\n  groupBy,\n  last,\n  map,\n  mergeMap,\n  mergeMapTo,\n  share,\n  switchMap,\n  take,\n  tap,\n  throttleTime,\n} from 'rxjs/operators'\n\nimport {type HistoryStore} from '../../history'\nimport {type DocumentStoreExtraOptions} from '../getPairListener'\nimport {type IdPair} from '../types'\nimport {memoize} from '../utils/createMemoizer'\nimport {consistencyStatus} from './consistencyStatus'\nimport {operationArgs} from './operationArgs'\nimport {type OperationArgs, type OperationsAPI} from './operations'\nimport {commit} from './operations/commit'\nimport {del} from './operations/delete'\nimport {discardChanges} from './operations/discardChanges'\nimport {duplicate} from './operations/duplicate'\nimport {patch} from './operations/patch'\nimport {publish} from './operations/publish'\nimport {restore} from './operations/restore'\nimport {unpublish} from './operations/unpublish'\nimport {del as serverDel} from './serverOperations/delete'\nimport {discardChanges as serverDiscardChanges} from './serverOperations/discardChanges'\nimport {patch as serverPatch} from './serverOperations/patch'\nimport {publish as serverPublish} from './serverOperations/publish'\nimport {restore as serverRestore} from './serverOperations/restore'\nimport {unpublish as serverUnpublish} from './serverOperations/unpublish'\n\ninterface ExecuteArgs {\n  operationName: keyof OperationsAPI\n  idPair: IdPair\n  typeName: string\n  extraArgs: any[]\n}\n\nfunction maybeObservable(v: void | Observable<any>) {\n  return typeof v === 'undefined' ? of(null) : v\n}\n\nconst operationImpls = {\n  del: del,\n  delete: del,\n  publish,\n  patch,\n  commit,\n  discardChanges,\n  unpublish,\n  duplicate,\n  restore,\n} as const\n\n//as we add server operations one by one, we can add them here\n// Note: Any changes must also be made to `createOperationsAPI`, which is defined in `packages/sanity/src/core/store/_legacy/document/document-pair/operations/helpers.ts`.\nconst serverOperationImpls = {\n  ...operationImpls,\n  del: serverDel,\n  delete: serverDel,\n  discardChanges: serverDiscardChanges,\n  patch: serverPatch,\n  publish: serverPublish,\n  unpublish: serverUnpublish,\n  restore: serverRestore,\n}\n\nconst execute = (\n  operationName: keyof typeof operationImpls,\n  operationArguments: OperationArgs,\n  extraArgs: any[],\n  serverActionsEnabled: boolean,\n): Observable<any> => {\n  const operation = serverActionsEnabled\n    ? serverOperationImpls[operationName]\n    : operationImpls[operationName]\n  return defer(() =>\n    merge(of(null), maybeObservable(operation.execute(operationArguments, ...extraArgs))),\n  ).pipe(last())\n}\n\nconst operationCalls$ = new Subject<ExecuteArgs>()\n\n/** @internal */\nexport function emitOperation(\n  operationName: keyof OperationsAPI,\n  idPair: IdPair,\n  typeName: string,\n  extraArgs: any[],\n): void {\n  operationCalls$.next({operationName, idPair, typeName, extraArgs})\n}\n\n// These are the operations that cannot be performed while the document is in an inconsistent state\nconst REQUIRES_CONSISTENCY = ['publish', 'unpublish', 'discardChanges', 'delete']\n\n/**\n * @hidden\n * @beta */\nexport interface OperationError {\n  type: 'error'\n  /** @internal */\n  op: keyof OperationsAPI\n  id: string\n  error: Error\n}\n\n/**\n * @hidden\n * @beta */\nexport interface OperationSuccess {\n  type: 'success'\n  /** @internal */\n  op: keyof OperationsAPI\n  id: string\n}\n\ninterface IntermediarySuccess {\n  type: 'success'\n  args: ExecuteArgs\n}\n\ninterface IntermediaryError {\n  type: 'error'\n  args: ExecuteArgs\n  error: any\n}\n\n/** @internal */\nexport const operationEvents = memoize(\n  (ctx: {\n    client: SanityClient\n    historyStore: HistoryStore\n    schema: Schema\n    serverActionsEnabled: Observable<boolean>\n    extraOptions?: DocumentStoreExtraOptions\n  }) => {\n    const result$: Observable<IntermediarySuccess | IntermediaryError> = operationCalls$.pipe(\n      groupBy((op) => op.idPair.publishedId),\n      mergeMap((groups$) =>\n        groups$.pipe(\n          // although it might look like a bug, dropping pending async operations here is actually a feature\n          // E.g. if the user types `publish` which is async and then starts patching (sync) then the publish\n          // should be cancelled\n          switchMap((args) =>\n            operationArgs(ctx, args.idPair, args.typeName).pipe(\n              take(1),\n              switchMap((operationArguments) => {\n                const requiresConsistency = REQUIRES_CONSISTENCY.includes(args.operationName)\n                if (requiresConsistency) {\n                  operationArguments.published.commit()\n                  operationArguments.draft.commit()\n                }\n                const isConsistent$ = consistencyStatus(\n                  ctx.client,\n                  args.idPair,\n                  args.typeName,\n                  ctx.serverActionsEnabled,\n                  ctx.extraOptions,\n                ).pipe(filter(Boolean))\n                const ready$ = requiresConsistency ? isConsistent$.pipe(take(1)) : of(true)\n                return ready$.pipe(\n                  switchMap(() =>\n                    execute(\n                      args.operationName,\n                      operationArguments,\n                      args.extraArgs,\n                      operationArguments.serverActionsEnabled,\n                    ),\n                  ),\n                )\n              }),\n              map((): IntermediarySuccess => ({type: 'success', args})),\n              catchError(\n                (err): Observable<IntermediaryError> => of({type: 'error', args, error: err}),\n              ),\n            ),\n          ),\n        ),\n      ),\n      share(),\n    )\n\n    // this enables autocommit after patch operations\n    const AUTOCOMMIT_INTERVAL = 1000\n    const autoCommit$ = result$.pipe(\n      filter((result) => result.type === 'success' && result.args.operationName === 'patch'),\n      throttleTime(AUTOCOMMIT_INTERVAL, asyncScheduler, {leading: true, trailing: true}),\n      concatMap((result) =>\n        (window as any).SLOW ? timer(10000).pipe(map(() => result)) : of(result),\n      ),\n      tap((result) => {\n        emitOperation('commit', result.args.idPair, result.args.typeName, [])\n      }),\n    )\n\n    return merge(result$, autoCommit$.pipe(mergeMapTo(EMPTY)))\n  },\n  (ctx) => {\n    const config = ctx.client.config()\n    // we only want one of these per dataset+projectid\n    return `${config.dataset ?? ''}-${config.projectId ?? ''}${ctx.serverActionsEnabled ? '-serverActionsEnabled' : ''}`\n  },\n)\n","import {type SanityClient} from '@sanity/client'\nimport {EMPTY, merge, type Observable} from 'rxjs'\nimport {switchMap} from 'rxjs/operators'\n\nimport {type DocumentStoreExtraOptions} from '../getPairListener'\nimport {type IdPair} from '../types'\nimport {memoize} from '../utils/createMemoizer'\nimport {type RemoteSnapshotVersionEvent} from './checkoutPair'\nimport {memoizedPair} from './memoizedPair'\nimport {memoizeKeyGen} from './memoizeKeyGen'\n\n/** @internal */\nexport const remoteSnapshots = memoize(\n  (\n    client: SanityClient,\n    idPair: IdPair,\n    typeName: string,\n    serverActionsEnabled: Observable<boolean>,\n    pairListenerOptions?: DocumentStoreExtraOptions,\n  ): Observable<RemoteSnapshotVersionEvent> => {\n    return memoizedPair(client, idPair, typeName, serverActionsEnabled, pairListenerOptions).pipe(\n      switchMap(({published, draft, version}) =>\n        merge(published.remoteSnapshot$, draft.remoteSnapshot$, version?.remoteSnapshot$ ?? EMPTY),\n      ),\n    )\n  },\n  memoizeKeyGen,\n)\n","import {isKeyedObject, type Path} from '@sanity/types'\n\nexport function pathToString(path: Path | undefined = []): string {\n  return path.reduce<string>((target, segment, i) => {\n    const segmentType = typeof segment\n    if (segmentType === 'number') {\n      return `${target}[${segment}]`\n    }\n\n    if (segmentType === 'string') {\n      const separator = i === 0 ? '' : '.'\n      return `${target}${separator}${segment}`\n    }\n\n    if (isKeyedObject(segment)) {\n      return `${target}[_key==\"${segment._key}\"]`\n    }\n\n    throw new Error(`Unsupported path segment \"${segment}\"`)\n  }, '')\n}\n","import {type Path, type ValidationError, type ValidationMarker} from '@sanity/types'\n\nimport {type ValidationContext} from '../types'\nimport {pathToString} from '../util/pathToString'\n\nexport function isNonNullable<T>(t: T): t is NonNullable<T> {\n  return t !== null || t !== undefined\n}\n\nexport function convertToValidationMarker(\n  validatorResult: true | true[] | string | string[] | ValidationError | ValidationError[],\n  level: 'error' | 'warning' | 'info' | undefined,\n  context: ValidationContext,\n): ValidationMarker[] {\n  if (!context) {\n    throw new Error('missing context')\n  }\n\n  if (validatorResult === true) return []\n\n  if (Array.isArray(validatorResult)) {\n    return validatorResult\n      .flatMap((child) => convertToValidationMarker(child, level, context))\n      .filter(isNonNullable)\n  }\n\n  if (typeof validatorResult === 'string') {\n    return convertToValidationMarker({message: validatorResult}, level, context)\n  }\n\n  if (typeof validatorResult.message !== 'string') {\n    // in order to accept the `ValidationError`, it at least needs to have a\n    // `message` in the object\n    throw new Error(\n      `${pathToString(\n        context.path,\n      )}: Validator must return 'true' if valid or an error message as a string on errors`,\n    )\n  }\n\n  const {message} = validatorResult\n\n  const normalizedPaths: Path[] = []\n  if (validatorResult.path) {\n    normalizedPaths.push(validatorResult.path)\n  }\n\n  // legacy support for `paths`\n  for (const path of validatorResult.paths || []) {\n    normalizedPaths.push(path)\n  }\n\n  // the validator result does not include any item-level relative paths,\n  // then just return the top-level path with the validation result\n  if (!normalizedPaths.length) {\n    return [\n      {\n        level: level || 'error',\n        item: {message},\n        message,\n        path: context.path || [],\n      },\n    ]\n  }\n\n  // if the validator result did include item-level relative paths, then for\n  // each item-level relative path, create a validation marker that concatenates\n  // the relative path with the path from the validation context\n  return normalizedPaths.map((path) => ({\n    path: (context.path || []).concat(path),\n    level: level || 'error',\n    item: {message},\n    message,\n  }))\n}\n","/* eslint-disable no-useless-escape */\nexport function escapeRegex(string: string): string {\n  // Escape ^$.*+-?=!:|\\/()[]{},\n  return string.replace(/[\\^\\$\\.\\*\\+\\-\\?\\=\\!\\:\\|\\\\\\/\\(\\)\\[\\]\\{\\}\\,]/g, '\\\\$&')\n}\n","import {type CustomValidatorResult, type LocalizedValidationMessages} from '@sanity/types'\nimport {isPlainObject} from 'lodash'\n\nimport {type LocaleSource} from '../../i18n'\n\n/**\n * Extracts the correct localized validation message based on given locale source\n *\n * @param message - Localized messages to extract string from\n * @param i18n - Locale source, holding the current locale\n * @returns The localized string, or a fallback \"Unknown error\" if not found\n * @internal\n */\nexport function localizeMessage(message: LocalizedValidationMessages, i18n: LocaleSource): string {\n  const {currentLocale} = i18n\n  const locale = currentLocale.id\n\n  // Obviously, try direct match first (`no-NB`)\n  if (message[locale]) {\n    return message[locale]\n  }\n\n  // In the case of composed languages (`en-US`, `no-NB` etc), fall back to base language (`en`)\n  if (locale.includes('-')) {\n    const language = locale.split('-', 1)[0]\n    if (message[language]) {\n      return message[language]\n    }\n  }\n\n  // Try english as last resort\n  return (\n    message['en-US'] || message['en-GB'] || message.en || 'Unknown validation error (not localized)'\n  )\n}\n\n/**\n * Check if passed message/result is a localized message object\n *\n * @param message - Message to check\n * @returns True if message is a localized message object, false otherwise\n * @internal\n */\nexport function isLocalizedMessages(\n  message: CustomValidatorResult | undefined,\n): message is LocalizedValidationMessages {\n  return (\n    message !== true &&\n    typeof message !== 'undefined' &&\n    typeof message !== 'string' &&\n    isPlainObject(message) &&\n    !('message' in message)\n  )\n}\n","/**\n * Modified version of fast-deep-equal (https://github.com/epoberezkin/fast-deep-equal)\n * MIT-licensed, copyright (c) 2017 Evgeny Poberezkin\n **/\n\n// NOTE: when converting to typescript, some of the checks were inlined (vs\n// having them in a variable) because the type predicate type narrowing only\n// works when type predicate is called inline in the condition that starts the\n// control flow branch.\n// see here: https://www.typescriptlang.org/docs/handbook/2/narrowing.html\nexport function deepEqualsIgnoreKey(a: unknown, b: unknown): boolean {\n  if (a === b) {\n    return true\n  }\n\n  if (Array.isArray(a) && Array.isArray(b)) {\n    if (a.length != b.length) return false\n    for (let i = 0; i < a.length; i++) {\n      if (!deepEqualsIgnoreKey(a[i], b[i])) {\n        return false\n      }\n    }\n    return true\n  }\n\n  if (Array.isArray(a) != Array.isArray(b)) {\n    return false\n  }\n\n  if (a && b && typeof a === 'object' && typeof b === 'object') {\n    const keys = Object.keys(a)\n    if (keys.length !== Object.keys(b).length) {\n      return false\n    }\n\n    if (a instanceof Date && b instanceof Date) {\n      return a.getTime() === b.getTime()\n    }\n\n    if (a instanceof Date != b instanceof Date) {\n      return false\n    }\n\n    if (a instanceof RegExp && b instanceof RegExp) {\n      return a.toString() == b.toString()\n    }\n\n    if (a instanceof RegExp != b instanceof RegExp) {\n      return false\n    }\n\n    for (let i = 0; i < keys.length; i++) {\n      if (keys[i] === '_key') {\n        continue\n      }\n\n      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) {\n        return false\n      }\n    }\n\n    for (let i = 0; i < keys.length; i++) {\n      const key = keys[i] as keyof typeof a\n      if (key === '_key') {\n        continue\n      }\n\n      if (!deepEqualsIgnoreKey(a[key], b[key])) {\n        return false\n      }\n    }\n\n    return true\n  }\n\n  return false\n}\n","// this file was adapted from a previous dependency `type-of-is`\n// https://github.com/stephenhandley/type-of-is/blob/7138a7e79f5af7c286bf8123f60843a91aaebf38/index.js\nconst _toString = {}.toString\n\nconst builtIns = [Object, Function, Array, String, Boolean, Number, Date, RegExp, Error]\n\nfunction isBuiltIn(_constructor: unknown) {\n  for (let i = 0; i < builtIns.length; i++) {\n    if (builtIns[i] === _constructor) return true\n  }\n  return false\n}\n\nexport function typeString(obj: unknown): string {\n  // [object Blah] -> Blah\n  const stringType = _toString.call(obj).slice(8, -1)\n  if (obj === null || obj === undefined) return stringType.toLowerCase()\n\n  // eslint-disable-next-line @typescript-eslint/ban-types\n  const constructorType = (obj as object).constructor\n  if (constructorType && !isBuiltIn(constructorType)) return constructorType.name\n  return stringType\n}\n","import {type ValidationMarker, type Validators} from '@sanity/types'\n\nimport {type LocaleSource} from '../../i18n'\nimport {deepEqualsIgnoreKey} from '../util/deepEqualsIgnoreKey'\nimport {isLocalizedMessages, localizeMessage} from '../util/localizeMessage'\nimport {pathToString} from '../util/pathToString'\nimport {typeString} from '../util/typeString'\n\nconst SLOW_VALIDATOR_TIMEOUT = 5000\n\nconst formatValidationErrors = (options: {\n  message: string | undefined\n  results: ValidationMarker[]\n  operation: 'conjunction' | 'disjunction'\n  i18n: LocaleSource\n}) => {\n  if (options.message) return options.message\n  if (options.results.length === 1) return options.results[0]?.message\n\n  // Intentionally hard-coded to use locale conjunction/disjunctions\n  return options.i18n.t('{{messages, list}}', {\n    messages: options.results.map((err) => err.message || err.item?.message),\n    formatParams: {messages: {style: 'long', type: options.operation}},\n  })\n}\n\nexport const genericValidators: Validators = {\n  type: (expectedType, value, message, {i18n}) => {\n    const actualType = typeString(value)\n    if (actualType !== expectedType && actualType !== 'undefined') {\n      return message || i18n.t('validation:generic.incorrect-type', {actualType, expectedType})\n    }\n\n    return true\n  },\n\n  presence: (expected, value, message, {i18n}) => {\n    if (value === undefined && expected === 'required') {\n      return message || i18n.t('validation:generic.required')\n    }\n\n    return true\n  },\n\n  all: async (children, value, message, context) => {\n    const resolved = await Promise.all(children.map((child) => child.validate(value, context)))\n    const results = resolved.flat()\n\n    if (results.length === 0) {\n      return true\n    }\n\n    return formatValidationErrors({\n      message,\n      results,\n      operation: 'conjunction',\n      i18n: context.i18n,\n    })\n  },\n\n  either: async (children, value, message, context) => {\n    const resolved = await Promise.all(children.map((child) => child.validate(value, context)))\n    const results = resolved.flat()\n\n    // if one of the results is an empty array then at least one rule match\n    if (resolved.find((result) => !result.length)) {\n      return true\n    }\n\n    return formatValidationErrors({\n      message,\n      results,\n      operation: 'disjunction',\n      i18n: context.i18n,\n    })\n  },\n\n  valid: (allowedValues, actual, message, {i18n}) => {\n    const valueType = typeof actual\n    if (valueType === 'undefined') {\n      return true\n    }\n\n    const value = (valueType === 'number' || valueType === 'string') && `${actual}`\n    const strValue = value && value.length > 30 ? `${value.slice(0, 30)}…` : value\n\n    return allowedValues.some((expected) => deepEqualsIgnoreKey(expected, actual))\n      ? true\n      : message ||\n          i18n.t(\n            'validation:generic.not-allowed',\n            value ? {context: 'hint', replace: {hint: strValue}} : {},\n          )\n  },\n\n  custom: async (fn, value, message, context) => {\n    const slowTimer = setTimeout(() => {\n      // only show this warning in the studio\n      if (context.environment !== 'studio') return\n\n      // eslint-disable-next-line no-console\n      console.warn(\n        `Custom validator at ${pathToString(\n          context.path,\n        )} has taken more than ${SLOW_VALIDATOR_TIMEOUT}ms to respond`,\n      )\n    }, SLOW_VALIDATOR_TIMEOUT)\n\n    let result\n    try {\n      result = await fn(value, context)\n    } finally {\n      clearTimeout(slowTimer)\n    }\n\n    if (isLocalizedMessages(result)) {\n      return localizeMessage(result, context.i18n)\n    }\n\n    if (typeof result === 'string') {\n      return message || result\n    }\n\n    return result\n  },\n}\n","import {\n  isArrayOfBlocksSchemaType,\n  type Path,\n  type PathSegment,\n  type Validators,\n} from '@sanity/types'\n\nimport {deepEqualsIgnoreKey} from '../util/deepEqualsIgnoreKey'\nimport {genericValidators} from './genericValidator'\n\nexport const arrayValidators: Validators = {\n  ...genericValidators,\n\n  min: (minLength, value, message, {i18n, type}) => {\n    if (!value || value.length >= minLength) {\n      return true\n    }\n\n    const context = isArrayOfBlocksSchemaType(type) ? 'blocks' : undefined\n    return message || i18n.t('validation:array.minimum-length', {minLength, context})\n  },\n\n  max: (maxLength, value, message, {i18n, type}) => {\n    if (!value || value.length <= maxLength) {\n      return true\n    }\n\n    const context = isArrayOfBlocksSchemaType(type) ? 'blocks' : undefined\n    return message || i18n.t('validation:array.maximum-length', {maxLength, context})\n  },\n\n  length: (wantedLength, value, message, {i18n, type}) => {\n    if (!value || value.length === wantedLength) {\n      return true\n    }\n\n    const context = isArrayOfBlocksSchemaType(type) ? 'blocks' : undefined\n    return message || i18n.t('validation:array.exact-length', {wantedLength, context})\n  },\n\n  presence: (flag, value, message, {i18n}) => {\n    if (flag === 'required' && !value) {\n      return message || i18n.t('validation:generic.required', {context: 'array'})\n    }\n\n    return true\n  },\n\n  valid: (allowedValues, values, message, {i18n}) => {\n    const valueType = typeof values\n    if (valueType === 'undefined') {\n      return true\n    }\n\n    const paths: Path[] = []\n    for (let i = 0; i < values.length; i++) {\n      const value = values[i]\n      if (allowedValues.some((expected) => deepEqualsIgnoreKey(expected, value))) {\n        continue\n      }\n\n      const pathSegment: PathSegment = value && value._key ? {_key: value._key} : i\n      paths.push([pathSegment])\n    }\n\n    // we emit the same message for each path we find in this array\n    const sharedMessage = message || i18n.t('validation:generic.not-allowed')\n\n    return paths.map((path) => ({message: sharedMessage, path}))\n  },\n\n  unique: (_unused, value, message, {i18n}) => {\n    const dupeIndices = []\n    if (!value) {\n      return true\n    }\n\n    for (let x = 0; x < value.length; x++) {\n      for (let y = x + 1; y < value.length; y++) {\n        const itemA = value[x]\n        const itemB = value[y]\n\n        if (!deepEqualsIgnoreKey(itemA, itemB)) {\n          continue\n        }\n\n        if (dupeIndices.indexOf(x) === -1) {\n          dupeIndices.push(x)\n        }\n\n        if (dupeIndices.indexOf(y) === -1) {\n          dupeIndices.push(y)\n        }\n      }\n    }\n\n    const paths = dupeIndices.map((idx) => {\n      const item = value[idx]\n      const pathSegment = item && item._key ? {_key: item._key} : idx\n      return [pathSegment]\n    })\n\n    // we emit the same message for each path we find in this array\n    const sharedMessage = message || i18n.t('validation:array.item-duplicate')\n\n    return paths.map((path) => ({message: sharedMessage, path}))\n  },\n}\n","import {type Validators} from '@sanity/types'\n\nimport {genericValidators} from './genericValidator'\n\nexport const booleanValidators: Validators = {\n  ...genericValidators,\n\n  presence: (flag, value, message, {i18n}) => {\n    if (flag === 'required' && typeof value !== 'boolean') {\n      return message || i18n.t('validation:generic.required', {context: 'boolean'})\n    }\n\n    return true\n  },\n}\n","import {type Validators} from '@sanity/types'\nimport * as legacyDateFormat from '@sanity/util/legacyDateFormat'\n\nimport {genericValidators} from './genericValidator'\n\nfunction isRecord(obj: unknown): obj is Record<string, unknown> {\n  return typeof obj === 'object' && obj !== null && !Array.isArray(obj)\n}\n\nconst isoDate =\n  /^(?:[-+]\\d{2})?(?:\\d{4}(?!\\d{2}\\b))(?:(-?)(?:(?:0[1-9]|1[0-2])(?:\\1(?:[12]\\d|0[1-9]|3[01]))?|W(?:[0-4]\\d|5[0-2])(?:-?[1-7])?|(?:00[1-9]|0[1-9]\\d|[12]\\d{2}|3(?:[0-5]\\d|6[1-6])))(?![T]$|[T][\\d]+Z$)(?:[T\\s](?:(?:(?:[01]\\d|2[0-3])(?:(:?)[0-5]\\d)?|24:?00)(?:[.,]\\d+(?!:))?)(?:\\2[0-5]\\d(?:[.,]\\d+)?)?(?:[Z]|(?:[+-])(?:[01]\\d|2[0-3])(?::?[0-5]\\d)?)?)?)?$/\n\n// eslint-disable-next-line no-warning-comments\n// TODO (eventually): move these to schema type package\ninterface DateTimeOptions {\n  // @todo accept object representing `Intl.DateTimeFormatOptions`? how do we localize?\n  dateFormat?: string\n  timeFormat?: string\n}\n\nconst getFormattedDate = (type = '', value: Date, options?: DateTimeOptions) => {\n  const dateFormat = options?.dateFormat || legacyDateFormat.DEFAULT_DATE_FORMAT\n  const timeFormat = options?.timeFormat || legacyDateFormat.DEFAULT_TIME_FORMAT\n\n  // adding the time information in the date only case causes timezone information to be kept\n  // instead of it being assumed to be UTC. This was a problem because midnight UTC is the previous\n  // day in many other timezones resulting in the date displayed to be the previous day.\n  return legacyDateFormat.format(\n    value,\n    type === 'date' ? dateFormat : `${dateFormat} ${timeFormat}`,\n    type === 'date',\n  )\n}\n\nfunction parseDate(date: unknown): Date | null\nfunction parseDate(date: unknown, throwOnError: true): Date\nfunction parseDate(date: unknown, throwOnError = false): Date | null {\n  if (!date) return null\n  if (date === 'now') return new Date()\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const parsed = new Date(date as any)\n  const isInvalid = isNaN(parsed.getTime())\n  if (isInvalid && throwOnError) {\n    throw new Error(`Unable to parse \"${date}\" to a date`)\n  }\n\n  return isInvalid ? null : parsed\n}\n\nexport const dateValidators: Validators = {\n  ...genericValidators,\n\n  type: (_unused, value, message, {i18n}) => {\n    if (typeof value === 'undefined' || isoDate.test(`${value}`)) {\n      return true\n    }\n\n    return message || i18n.t('validation:date.invalid-format')\n  },\n\n  min: (minDate, value, message, {type, i18n}) => {\n    const dateVal = parseDate(value)\n    const minDateVal = parseDate(minDate, true)\n\n    if (!dateVal) {\n      return true // `type()` should catch parse errors\n    }\n\n    if (!value || dateVal >= minDateVal) {\n      return true\n    }\n\n    if (!type) {\n      throw new Error(`\\`type\\` was not provided in validation context.`)\n    }\n\n    const dateTimeOptions: DateTimeOptions = isRecord(type.options)\n      ? (type.options as DateTimeOptions)\n      : {}\n\n    return (\n      message ||\n      // Note that the `minDate` passed here is _formatted_, while the raw value provided to the\n      // validator is available as `providedMinDate`. This because the formatted date is likely\n      // what the developer wants to present to the user\n      i18n.t('validation:date.minimum', {\n        minDate: getFormattedDate(type.name, minDateVal, dateTimeOptions),\n        providedMinDate: minDate,\n      })\n    )\n  },\n\n  max: (maxDate, value, message, {type, i18n}) => {\n    const dateVal = parseDate(value)\n    const maxDateVal = parseDate(maxDate, true)\n\n    if (!dateVal) {\n      return true // `type()` should catch parse errors\n    }\n\n    if (!value || dateVal <= maxDateVal) {\n      return true\n    }\n\n    if (!type) {\n      throw new Error(`\\`type\\` was not provided in validation context.`)\n    }\n\n    const dateTimeOptions: DateTimeOptions = isRecord(type.options)\n      ? (type.options as DateTimeOptions)\n      : {}\n\n    return (\n      message ||\n      // Note that the `maxDate` passed here is _formatted_, while the raw value provided to the\n      // validator is available as `providedMaxDate`. This because the formatted date is likely\n      // what the developer wants to present to the user\n      i18n.t('validation:date.maximum', {\n        maxDate: getFormattedDate(type.name, maxDateVal, dateTimeOptions),\n        providedMaxDate: maxDate,\n      })\n    )\n  },\n}\n","import {type Validators} from '@sanity/types'\n\nimport {genericValidators} from './genericValidator'\n\nconst precisionRx = /(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/\n\nexport const numberValidators: Validators = {\n  ...genericValidators,\n\n  integer: (_unused, value, message, {i18n}) => {\n    if (!Number.isInteger(value)) {\n      return message || i18n.t('validation:number.non-integer')\n    }\n\n    return true\n  },\n\n  precision: (limit, value, message, {i18n}) => {\n    if (value === undefined) return true\n\n    const places = value.toString().match(precisionRx)\n    const decimals = Math.max(\n      (places[1] ? places[1].length : 0) - (places[2] ? parseInt(places[2], 10) : 0),\n      0,\n    )\n\n    if (decimals > limit) {\n      return message || i18n.t('validation:number.maximum-precision', {limit})\n    }\n\n    return true\n  },\n\n  min: (minNumber, value, message, {i18n}) => {\n    if (value >= minNumber) {\n      return true\n    }\n\n    return message || i18n.t('validation:number.minimum', {minNumber})\n  },\n\n  max: (maxNumber, value, message, {i18n}) => {\n    if (value <= maxNumber) {\n      return true\n    }\n\n    return message || i18n.t('validation:number.maximum', {maxNumber})\n  },\n\n  greaterThan: (threshold, value, message, {i18n}) => {\n    if (value > threshold) {\n      return true\n    }\n\n    return message || i18n.t('validation:number.greater-than', {threshold})\n  },\n\n  lessThan: (threshold, value, message, {i18n}) => {\n    if (value < threshold) {\n      return true\n    }\n\n    return message || i18n.t('validation:number.less-than', {threshold})\n  },\n}\n","import {isReference, type Validators} from '@sanity/types'\n\nimport {getPublishedId} from '../../util'\nimport {genericValidators} from './genericValidator'\n\nconst metaKeys = ['_key', '_type', '_weak']\n\nexport const objectValidators: Validators = {\n  ...genericValidators,\n\n  presence: (expected, value, message, {i18n}) => {\n    if (expected !== 'required') {\n      return true\n    }\n\n    const keys = value && Object.keys(value).filter((key) => !metaKeys.includes(key))\n\n    if (value === undefined || (keys && keys.length === 0)) {\n      return message || i18n.t('validation:generic.required', {context: 'object'})\n    }\n\n    return true\n  },\n\n  reference: async (_unused, value: unknown, message, context) => {\n    if (!value) {\n      return true\n    }\n\n    const {type, document, getDocumentExists, i18n} = context\n\n    if (!isReference(value)) {\n      return message || i18n.t('validation:object.not-reference')\n    }\n\n    if (!type) {\n      throw new Error(`\\`type\\` was not provided in validation context`)\n    }\n\n    if ('weak' in type && type.weak) {\n      return true\n    }\n\n    if (!getDocumentExists) {\n      throw new Error(`\\`getDocumentExists\\` was not provided in validation context`)\n    }\n\n    const documentId = document?._id\n    if (documentId && value._ref == getPublishedId(documentId)) {\n      // a document should be able to reference itself without first being published\n      return true\n    }\n    const exists = await getDocumentExists({id: value._ref})\n    if (!exists) {\n      return i18n.t('validation:object.reference-not-published', {documentId: value._ref})\n    }\n\n    return true\n  },\n\n  assetRequired: (flag, value, message, {i18n}) => {\n    if (!value || !value.asset || !value.asset._ref) {\n      return message || i18n.t('validation:object.asset-required', {context: flag.assetType || ''})\n    }\n\n    return true\n  },\n}\n","import {type Validators} from '@sanity/types'\n\nimport {genericValidators} from './genericValidator'\n\nconst DUMMY_ORIGIN = 'http://sanity'\nconst isRelativeUrl = (url: string) => /^\\.*\\//.test(url)\nconst emailRegex =\n  /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/\n\nexport const stringValidators: Validators = {\n  ...genericValidators,\n\n  min: (minLength, value, message, {i18n}) => {\n    if (!value || value.length >= minLength) {\n      return true\n    }\n\n    return message || i18n.t('validation:string.minimum-length', {minLength})\n  },\n\n  max: (maxLength, value, message, {i18n}) => {\n    if (!value || value.length <= maxLength) {\n      return true\n    }\n\n    return message || i18n.t('validation:string.maximum-length', {maxLength})\n  },\n\n  length: (wantedLength, value, message, {i18n}) => {\n    const strValue = value || ''\n    if (strValue.length === wantedLength) {\n      return true\n    }\n\n    return message || i18n.t('validation:string.exact-length', {wantedLength})\n  },\n\n  uri: (constraints, value, message, {i18n}) => {\n    const strValue = value || ''\n    if (!strValue) {\n      return true // `presence()` should catch empty values\n    }\n\n    const {options} = constraints\n    const {allowCredentials, relativeOnly} = options\n    const allowRelative = options.allowRelative || relativeOnly\n\n    let url\n    try {\n      // WARNING: Safari checks for a given `base` param by looking at the length of arguments passed\n      // to new URL(str, base), and will fail if invoked with new URL(strValue, undefined)\n      url = allowRelative ? new URL(strValue, DUMMY_ORIGIN) : new URL(strValue)\n    } catch (err) {\n      return message || i18n.t('validation:string.url.invalid')\n    }\n\n    if (relativeOnly && url.origin !== DUMMY_ORIGIN) {\n      return message || i18n.t('validation:string.url.not-relative')\n    }\n\n    if (!allowRelative && url.origin === DUMMY_ORIGIN && isRelativeUrl(strValue)) {\n      return message || i18n.t('validation:string.url.not-absolute')\n    }\n\n    if (!allowCredentials && (url.username || url.password)) {\n      return message || i18n.t('validation:string.url.includes-credentials')\n    }\n\n    const urlScheme = url.protocol.replace(/:$/, '')\n    const matchesAllowedScheme = options.scheme.some((scheme) => scheme.test(urlScheme))\n    if (!matchesAllowedScheme) {\n      return message || i18n.t('validation:string.url.disallowed-scheme', {scheme: urlScheme})\n    }\n\n    return true\n  },\n\n  stringCasing: (casing, value, message, {i18n}) => {\n    const strValue = value || ''\n    if (casing === 'uppercase' && strValue !== strValue.toLocaleUpperCase()) {\n      return message || i18n.t('validation:string.uppercase')\n    }\n\n    if (casing === 'lowercase' && strValue !== strValue.toLocaleLowerCase()) {\n      return message || i18n.t('validation:string.lowercase')\n    }\n\n    return true\n  },\n\n  presence: (flag, value, message, {i18n}) => {\n    if (flag === 'required' && !value) {\n      return message || i18n.t('validation:generic.required', {context: 'string'})\n    }\n\n    return true\n  },\n\n  regex: (options, value, message, {i18n}) => {\n    const {pattern, name, invert} = options\n    const regName = name || `${pattern.toString()}`\n    const strValue = value || ''\n    // Regexes with global or sticky flags are stateful (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/lastIndex).\n    // This resets the state stored from the previous check\n    pattern.lastIndex = 0\n    const matches = pattern.test(strValue)\n    if ((!invert && !matches) || (invert && matches)) {\n      if (message) {\n        return message\n      }\n\n      return invert\n        ? i18n.t('validation:string.regex-match', {name: regName})\n        : i18n.t('validation:string.regex-does-not-match', {name: regName})\n    }\n\n    return true\n  },\n\n  email: (_unused, value, message, {i18n}) => {\n    const strValue = `${value || ''}`.trim()\n    if (!strValue || emailRegex.test(strValue)) {\n      return true\n    }\n\n    return message || i18n.t('validation:string.email')\n  },\n}\n","import {\n  type CustomValidator,\n  type FieldRules,\n  type LocalizedValidationMessages,\n  type Rule as IRule,\n  type RuleClass,\n  type RuleSpec,\n  type RuleSpecConstraint,\n  type RuleTypeConstraint,\n  type SchemaType,\n  type ValidationMarker,\n  type Validator,\n} from '@sanity/types'\nimport {cloneDeep, get} from 'lodash'\n\nimport {convertToValidationMarker} from './util/convertToValidationMarker'\nimport {escapeRegex} from './util/escapeRegex'\nimport {isLocalizedMessages, localizeMessage} from './util/localizeMessage'\nimport {pathToString} from './util/pathToString'\nimport {arrayValidators} from './validators/arrayValidator'\nimport {booleanValidators} from './validators/booleanValidator'\nimport {dateValidators} from './validators/dateValidator'\nimport {genericValidators} from './validators/genericValidator'\nimport {numberValidators} from './validators/numberValidator'\nimport {objectValidators} from './validators/objectValidator'\nimport {stringValidators} from './validators/stringValidator'\n\nconst typeValidators = {\n  Boolean: booleanValidators,\n  Number: numberValidators,\n  String: stringValidators,\n  Array: arrayValidators,\n  Object: objectValidators,\n  Date: dateValidators,\n}\n\nconst getBaseType = (type: SchemaType | undefined): SchemaType | undefined => {\n  return type && type.type ? getBaseType(type.type) : type\n}\n\nconst isFieldRef = (constraint: unknown): constraint is {type: symbol; path: string | string[]} => {\n  if (typeof constraint !== 'object' || !constraint) return false\n  return (constraint as Record<string, unknown>).type === Rule.FIELD_REF\n}\n\nconst EMPTY_ARRAY: unknown[] = []\nconst FIELD_REF = Symbol('FIELD_REF')\nconst ruleConstraintTypes: RuleTypeConstraint[] = [\n  'Array',\n  'Boolean',\n  'Date',\n  'Number',\n  'Object',\n  'String',\n]\n\n/**\n * Note: `RuleClass` and `Rule` are split to fit the current `@sanity/types`\n * setup. Classes are a bit weird in the `@sanity/types` package because classes\n * create an actual javascript class while simultaneously creating a type\n * definition.\n *\n * This implicitly creates two types:\n * 1. the instance type — `Rule` and\n * 2. the static/class type - `RuleClass`\n *\n * The `RuleClass` type contains the static methods and the `Rule` instance\n * contains the instance methods.\n *\n * This package exports the RuleClass as a value without implicitly exporting\n * an instance definition. This should help reminder downstream users to import\n * from the `@sanity/types` package.\n *\n * @internal\n */\nexport const Rule: RuleClass = class Rule implements IRule {\n  static readonly FIELD_REF = FIELD_REF\n  static array = (def?: SchemaType): Rule => new Rule(def).type('Array')\n  static object = (def?: SchemaType): Rule => new Rule(def).type('Object')\n  static string = (def?: SchemaType): Rule => new Rule(def).type('String')\n  static number = (def?: SchemaType): Rule => new Rule(def).type('Number')\n  static boolean = (def?: SchemaType): Rule => new Rule(def).type('Boolean')\n  static dateTime = (def?: SchemaType): Rule => new Rule(def).type('Date')\n  static valueOfField = (path: string | string[]): {type: symbol; path: string | string[]} => ({\n    type: FIELD_REF,\n    path,\n  })\n\n  _type: RuleTypeConstraint | undefined = undefined\n  _level: 'error' | 'warning' | 'info' | undefined = undefined\n  _required: 'required' | 'optional' | undefined = undefined\n  _typeDef: SchemaType | undefined = undefined\n  _message: string | LocalizedValidationMessages | undefined = undefined\n  _rules: RuleSpec[] = []\n  _fieldRules: FieldRules | undefined = undefined\n\n  constructor(typeDef?: SchemaType) {\n    this._typeDef = typeDef\n    this.reset()\n  }\n\n  private _mergeRequired(next: Rule) {\n    if (this._required === 'required' || next._required === 'required') return 'required'\n    if (this._required === 'optional' || next._required === 'optional') return 'optional'\n    return undefined\n  }\n\n  // Alias to static method, since we often have access to an _instance_ of a rule but not the actual Rule class\n  valueOfField = Rule.valueOfField.bind(Rule)\n\n  error(message?: string | LocalizedValidationMessages): Rule {\n    const rule = this.clone()\n    rule._level = 'error'\n    rule._message = message || undefined\n    return rule\n  }\n\n  warning(message?: string | LocalizedValidationMessages): Rule {\n    const rule = this.clone()\n    rule._level = 'warning'\n    rule._message = message || undefined\n    return rule\n  }\n\n  info(message?: string | LocalizedValidationMessages): Rule {\n    const rule = this.clone()\n    rule._level = 'info'\n    rule._message = message || undefined\n    return rule\n  }\n\n  reset(): this {\n    this._type = this._type || undefined\n    this._rules = (this._rules || []).filter((rule) => rule.flag === 'type')\n    this._message = undefined\n    this._required = undefined\n    this._level = 'error'\n    this._fieldRules = undefined\n    return this\n  }\n\n  isRequired(): boolean {\n    return this._required === 'required'\n  }\n\n  clone(): Rule {\n    const rule = new Rule()\n    rule._type = this._type\n    rule._message = this._message\n    rule._required = this._required\n    rule._rules = cloneDeep(this._rules)\n    rule._level = this._level\n    rule._fieldRules = this._fieldRules\n    rule._typeDef = this._typeDef\n    return rule\n  }\n\n  cloneWithRules(rules: RuleSpec[]): Rule {\n    const rule = this.clone()\n    const newRules = new Set()\n    rules.forEach((curr) => {\n      if (curr.flag === 'type') {\n        rule._type = curr.constraint\n      }\n\n      newRules.add(curr.flag)\n    })\n\n    rule._rules = rule._rules\n      .filter((curr) => {\n        const disallowDuplicate = ['type', 'uri', 'email'].includes(curr.flag)\n        const isDuplicate = newRules.has(curr.flag)\n        return !(disallowDuplicate && isDuplicate)\n      })\n      .concat(rules)\n\n    return rule\n  }\n\n  merge(rule: Rule): Rule {\n    if (this._type && rule._type && this._type !== rule._type) {\n      throw new Error('merge() failed: conflicting types')\n    }\n\n    const newRule = this.cloneWithRules(rule._rules)\n    newRule._type = this._type || rule._type\n    newRule._message = this._message || rule._message\n    newRule._required = this._mergeRequired(rule)\n    newRule._level = this._level === 'error' ? rule._level : this._level\n    return newRule\n  }\n\n  // Validation flag setters\n  type(targetType: RuleTypeConstraint | Lowercase<RuleTypeConstraint>): Rule {\n    const type = `${targetType.slice(0, 1).toUpperCase()}${targetType.slice(1)}` as Capitalize<\n      typeof targetType\n    >\n\n    if (!ruleConstraintTypes.includes(type)) {\n      throw new Error(`Unknown type \"${targetType}\"`)\n    }\n\n    const rule = this.cloneWithRules([{flag: 'type', constraint: type}])\n    rule._type = type\n    return rule\n  }\n\n  all(children: Rule[]): Rule {\n    return this.cloneWithRules([{flag: 'all', constraint: children}])\n  }\n\n  either(children: Rule[]): Rule {\n    return this.cloneWithRules([{flag: 'either', constraint: children}])\n  }\n\n  // Shared rules\n  optional(): Rule {\n    const rule = this.cloneWithRules([{flag: 'presence', constraint: 'optional'}])\n    rule._required = 'optional'\n    return rule\n  }\n\n  required(): Rule {\n    const rule = this.cloneWithRules([{flag: 'presence', constraint: 'required'}])\n    rule._required = 'required'\n    return rule\n  }\n\n  custom<T = unknown>(\n    fn: CustomValidator<T>,\n    options: {bypassConcurrencyLimit?: boolean} = {},\n  ): Rule {\n    if (options.bypassConcurrencyLimit) {\n      Object.assign(fn, {bypassConcurrencyLimit: true})\n    }\n    return this.cloneWithRules([{flag: 'custom', constraint: fn as CustomValidator}])\n  }\n\n  min(len: number | string): Rule {\n    return this.cloneWithRules([{flag: 'min', constraint: len}])\n  }\n\n  max(len: number | string): Rule {\n    return this.cloneWithRules([{flag: 'max', constraint: len}])\n  }\n\n  length(len: number): Rule {\n    return this.cloneWithRules([{flag: 'length', constraint: len}])\n  }\n\n  valid(value: unknown | unknown[]): Rule {\n    const values = Array.isArray(value) ? value : [value]\n    return this.cloneWithRules([{flag: 'valid', constraint: values}])\n  }\n\n  // Numbers only\n  integer(): Rule {\n    return this.cloneWithRules([{flag: 'integer'}])\n  }\n\n  precision(limit: number): Rule {\n    return this.cloneWithRules([{flag: 'precision', constraint: limit}])\n  }\n\n  positive(): Rule {\n    return this.cloneWithRules([{flag: 'min', constraint: 0}])\n  }\n\n  negative(): Rule {\n    return this.cloneWithRules([{flag: 'lessThan', constraint: 0}])\n  }\n\n  greaterThan(num: number): Rule {\n    return this.cloneWithRules([{flag: 'greaterThan', constraint: num}])\n  }\n\n  lessThan(num: number): Rule {\n    return this.cloneWithRules([{flag: 'lessThan', constraint: num}])\n  }\n\n  // String only\n  uppercase(): Rule {\n    return this.cloneWithRules([{flag: 'stringCasing', constraint: 'uppercase'}])\n  }\n\n  lowercase(): Rule {\n    return this.cloneWithRules([{flag: 'stringCasing', constraint: 'lowercase'}])\n  }\n\n  regex(pattern: RegExp, name: string, options: {name?: string; invert?: boolean}): Rule\n  regex(pattern: RegExp, options: {name?: string; invert?: boolean}): Rule\n  regex(pattern: RegExp, name: string): Rule\n  regex(pattern: RegExp): Rule\n  regex(\n    pattern: RegExp,\n    a?: string | {name?: string; invert?: boolean},\n    b?: {name?: string; invert?: boolean},\n  ): Rule {\n    const name = typeof a === 'string' ? a : (a?.name ?? b?.name)\n    const invert = typeof a === 'string' ? false : (a?.invert ?? b?.invert)\n\n    const constraint: RuleSpecConstraint<'regex'> = {\n      pattern,\n      name,\n      invert: invert || false,\n    }\n\n    return this.cloneWithRules([{flag: 'regex', constraint}])\n  }\n\n  email(): Rule {\n    return this.cloneWithRules([{flag: 'email'}])\n  }\n\n  uri(opts?: {\n    scheme?: (string | RegExp) | Array<string | RegExp>\n    allowRelative?: boolean\n    relativeOnly?: boolean\n    allowCredentials?: boolean\n  }): Rule {\n    const optsScheme = opts?.scheme || ['http', 'https']\n    const schemes = Array.isArray(optsScheme) ? optsScheme : [optsScheme]\n\n    if (!schemes.length) {\n      throw new Error('scheme must have at least 1 scheme specified')\n    }\n\n    const constraint: RuleSpecConstraint<'uri'> = {\n      options: {\n        scheme: schemes.map((scheme) => {\n          if (!(scheme instanceof RegExp) && typeof scheme !== 'string') {\n            throw new Error('scheme must be a RegExp or a String')\n          }\n\n          return typeof scheme === 'string' ? new RegExp(`^${escapeRegex(scheme)}$`) : scheme\n        }),\n        allowRelative: opts?.allowRelative || false,\n        relativeOnly: opts?.relativeOnly || false,\n        allowCredentials: opts?.allowCredentials || false,\n      },\n    }\n\n    return this.cloneWithRules([{flag: 'uri', constraint}])\n  }\n\n  // Array only\n  unique(): Rule {\n    return this.cloneWithRules([{flag: 'unique'}])\n  }\n\n  // Objects only\n  reference(): Rule {\n    return this.cloneWithRules([{flag: 'reference'}])\n  }\n\n  fields(rules: FieldRules): Rule {\n    if (this._type !== 'Object') {\n      throw new Error('fields() can only be called on an object type')\n    }\n\n    const rule = this.cloneWithRules([])\n    rule._fieldRules = rules\n    return rule\n  }\n\n  assetRequired(): Rule {\n    const base = getBaseType(this._typeDef)\n    let assetType: 'asset' | 'image' | 'file'\n    if (base && ['image', 'file'].includes(base.name)) {\n      assetType = base.name === 'image' ? 'image' : 'file'\n    } else {\n      assetType = 'asset'\n    }\n\n    return this.cloneWithRules([{flag: 'assetRequired', constraint: {assetType}}])\n  }\n\n  async validate(\n    value: unknown,\n    {__internal = {}, ...context}: Parameters<IRule['validate']>[1],\n  ): Promise<ValidationMarker[]> {\n    const {customValidationConcurrencyLimiter} = __internal\n\n    const valueIsEmpty = value === null || value === undefined\n\n    // Short-circuit on optional, empty fields\n    if (valueIsEmpty && this._required === 'optional') {\n      return EMPTY_ARRAY as ValidationMarker[]\n    }\n\n    const rules =\n      // Run only the _custom_ functions if the rule is not set to required or optional\n      this._required === undefined && valueIsEmpty\n        ? this._rules.filter((curr) => curr.flag === 'custom')\n        : this._rules\n\n    const validators = (this._type && typeValidators[this._type]) || genericValidators\n\n    const results = await Promise.all(\n      rules.map(async (curr) => {\n        if (curr.flag === undefined) {\n          throw new Error('Invalid rule, did not contain \"flag\"-property')\n        }\n\n        const validator: Validator | undefined = validators[curr.flag]\n        if (!validator) {\n          const forType = this._type ? `type \"${this._type}\"` : 'rule without declared type'\n          throw new Error(`Validator for flag \"${curr.flag}\" not found for ${forType}`)\n        }\n\n        let specConstraint = 'constraint' in curr ? curr.constraint : null\n        if (isFieldRef(specConstraint)) {\n          specConstraint = get(context.parent, specConstraint.path)\n        }\n\n        if (\n          curr.flag === 'custom' &&\n          customValidationConcurrencyLimiter &&\n          !(specConstraint as CustomValidator)?.bypassConcurrencyLimit\n        ) {\n          const customValidator = specConstraint as CustomValidator\n          specConstraint = async (...args: Parameters<CustomValidator>) => {\n            await customValidationConcurrencyLimiter.ready()\n            try {\n              return await customValidator(...args)\n            } finally {\n              customValidationConcurrencyLimiter.release()\n            }\n          }\n        }\n\n        const message = isLocalizedMessages(this._message)\n          ? localizeMessage(this._message, context.i18n)\n          : this._message\n\n        try {\n          const result = await validator(specConstraint, value, message, context)\n          return convertToValidationMarker(result, this._level, context)\n        } catch (err) {\n          const errorMessage = `${pathToString(\n            context.path,\n          )}: Exception occurred while validating value: ${err.message}`\n\n          return convertToValidationMarker({message: errorMessage}, 'error', context)\n        }\n      }),\n    )\n\n    return results.flat()\n  }\n}\n","import {\n  type CustomValidator,\n  isKeyedObject,\n  isSlug,\n  type Path,\n  type SlugIsUniqueValidator,\n  type SlugParent,\n  type SlugSchemaType,\n  type SlugValidationContext,\n} from '@sanity/types'\nimport {memoize} from 'lodash'\n\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../studioClient'\nimport {getPublishedId} from '../../util/draftUtils'\n\nconst memoizedWarnOnArraySlug = memoize(warnOnArraySlug)\n\nfunction serializePath(path: Path): string {\n  return path.reduce<string>((target, part, i) => {\n    const isIndex = typeof part === 'number'\n    const isKey = isKeyedObject(part)\n    const separator = i === 0 ? '' : '.'\n    const add = isIndex || isKey ? '[]' : `${separator}${part}`\n    return `${target}${add}`\n  }, '')\n}\n\nconst defaultIsUnique: SlugIsUniqueValidator = (slug, context) => {\n  const {getClient, document, path, type} = context\n  const schemaOptions = type?.options\n\n  if (!document) {\n    throw new Error(`\\`document\\` was not provided in validation context.`)\n  }\n  if (!path) {\n    throw new Error(`\\`path\\` was not provided in validation context.`)\n  }\n\n  const disableArrayWarning = schemaOptions?.disableArrayWarning || false\n  const docType = document._type\n  const atPath = serializePath(path.concat('current'))\n\n  if (!disableArrayWarning && atPath.includes('[]') && context.environment === 'studio') {\n    memoizedWarnOnArraySlug(serializePath(path))\n  }\n\n  const constraints = [\n    '_type == $docType',\n    `!sanity::versionOf($published)`,\n    `${atPath} == $slug`,\n  ].join(' && ')\n\n  return getClient({apiVersion: DEFAULT_STUDIO_CLIENT_OPTIONS.apiVersion})\n    .withConfig({perspective: 'raw'})\n    .fetch<boolean>(\n      `!defined(*[${constraints}][0]._id)`,\n      {\n        docType,\n        published: getPublishedId(document._id),\n        slug,\n      },\n      {tag: 'validation.slug-is-unique'},\n    )\n}\n\nfunction warnOnArraySlug(serializedPath: string) {\n  /* eslint-disable no-console */\n  console.warn(\n    [\n      `Slug field at path ${serializedPath} is within an array and cannot be automatically checked for uniqueness`,\n      `If you need to check for uniqueness, provide your own \"isUnique\" method`,\n      `To disable this message, set \\`disableArrayWarning: true\\` on the slug \\`options\\` field`,\n    ].join('\\n'),\n  )\n  /* eslint-enable no-console */\n}\n\n/**\n * Validates slugs values by querying for uniqueness from the client.\n *\n * This is a custom rule implementation (e.g. `Rule.custom(slugValidator)`)\n * that's populated in `inferFromSchemaType` when the type name is `slug`\n */\nexport const slugValidator: CustomValidator = async (value, context) => {\n  if (!value) {\n    return true\n  }\n\n  const {i18n} = context\n\n  if (typeof value !== 'object' || Array.isArray(value)) {\n    return i18n.t('validation:slug.not-object')\n  }\n\n  if (!isSlug(value) || value.current.trim().length === 0) {\n    return i18n.t('validation:slug.missing-current')\n  }\n\n  const options = context?.type?.options as {isUnique?: SlugIsUniqueValidator} | undefined\n  const isUnique = options?.isUnique || defaultIsUnique\n\n  const slugContext: SlugValidationContext = {\n    ...context,\n    parent: context.parent as SlugParent,\n    type: context.type as SlugSchemaType,\n    defaultIsUnique,\n  }\n\n  const wasUnique = await isUnique(value.current, slugContext)\n  if (wasUnique) {\n    return true\n  }\n\n  return i18n.t('validation:slug.not-unique', {slug: value.current})\n}\n","import {type Rule, type RuleTypeConstraint, type SchemaType} from '@sanity/types'\n\nimport {Rule as RuleClass} from '../Rule'\nimport {slugValidator} from '../validators/slugValidator'\n\nconst ruleConstraintTypes: {[P in Lowercase<RuleTypeConstraint>]: true} = {\n  array: true,\n  boolean: true,\n  date: true,\n  number: true,\n  object: true,\n  string: true,\n}\n\nconst isRuleConstraint = (typeString: string): typeString is Lowercase<RuleTypeConstraint> =>\n  typeString in ruleConstraintTypes\n\nexport function getTypeChain(\n  type: SchemaType | undefined,\n  visited: Set<SchemaType> = new Set(),\n): SchemaType[] {\n  if (!type) return []\n  if (visited.has(type)) return []\n\n  visited.add(type)\n\n  const next = type.type ? getTypeChain(type.type, visited) : []\n  return [...next, type]\n}\n\nfunction baseRuleReducer(inputRule: Rule, type: SchemaType) {\n  let baseRule = inputRule\n\n  if (isRuleConstraint(type.jsonType)) {\n    baseRule = baseRule.type(type.jsonType)\n  }\n\n  const typeOptionsList =\n    // if type.options is truthy\n    type?.options &&\n    // and type.options is an object (non-null from the previous)\n    typeof type.options === 'object' &&\n    // and if `list` is in options\n    'list' in type.options &&\n    // then finally access the list\n    type.options.list\n\n  if (Array.isArray(typeOptionsList)) {\n    baseRule = baseRule.valid(\n      typeOptionsList.map((option) => extractValueFromListOption(option, type)),\n    )\n  }\n\n  if (type.name === 'datetime') return baseRule.type('Date')\n  if (type.name === 'date') return baseRule.type('Date')\n  if (type.name === 'url') return baseRule.uri()\n  if (type.name === 'slug') return baseRule.custom(slugValidator, {bypassConcurrencyLimit: true})\n  if (type.name === 'reference') return baseRule.reference()\n  if (type.name === 'email') return baseRule.email()\n  return baseRule\n}\n\nfunction hasValueField(typeDef: SchemaType | undefined): boolean {\n  if (!typeDef) return false\n  if (!('fields' in typeDef) && typeDef.type) return hasValueField(typeDef.type)\n  if (!('fields' in typeDef)) return false\n  if (!Array.isArray(typeDef.fields)) return false\n  return typeDef.fields.some((field) => field.name === 'value')\n}\n\nfunction extractValueFromListOption(option: unknown, typeDef: SchemaType): unknown {\n  // If you define a `list` option with object items, where the item has a `value` field,\n  // we don't want to treat that as the value but rather the surrounding object\n  // This differs from the case where you have a title/value pair setup for a string/number, for instance\n  if (typeDef.jsonType === 'object' && hasValueField(typeDef)) return option\n\n  return (option as Record<string, unknown>).value === undefined\n    ? option\n    : (option as Record<string, unknown>).value\n}\n\n/**\n * Takes in `SchemaValidationValue` and returns an array of `Rule` instances.\n */\nexport function normalizeValidationRules(typeDef: SchemaType | undefined): Rule[] {\n  if (!typeDef) {\n    return []\n  }\n\n  const validation = typeDef.validation\n\n  if (Array.isArray(validation)) {\n    return validation.flatMap((i) =>\n      normalizeValidationRules({\n        ...typeDef,\n        validation: i,\n      }),\n    )\n  }\n\n  if (validation && typeof validation === 'object') {\n    return [validation]\n  }\n\n  const baseRule =\n    // using an object + Object.values to de-dupe the type chain by type name\n    Object.values(\n      getTypeChain(typeDef).reduce<Record<string, SchemaType>>((acc, type) => {\n        acc[type.name] = type\n        return acc\n      }, {}),\n    ).reduce(baseRuleReducer, new RuleClass(typeDef))\n\n  if (!validation) {\n    return [baseRule]\n  }\n\n  return normalizeValidationRules({\n    ...typeDef,\n    validation: validation(baseRule),\n  })\n}\n","import {type Schema, type SchemaType} from '@sanity/types'\n\nimport {normalizeValidationRules} from './util/normalizeValidationRules'\n\n// NOTE: this overload is for TS API compatibility with a previous implementation\nexport function inferFromSchemaType(\n  typeDef: SchemaType,\n  // these are intentionally unused\n  _schema: Schema,\n  _visited?: Set<SchemaType>,\n): SchemaType\n// note: this seemingly redundant overload is required\nexport function inferFromSchemaType(typeDef: SchemaType): SchemaType\nexport function inferFromSchemaType(typeDef: SchemaType): SchemaType {\n  traverse(typeDef, new Set())\n  return typeDef\n}\n\nfunction traverse(typeDef: SchemaType, visited: Set<SchemaType>) {\n  if (visited.has(typeDef)) {\n    return\n  }\n\n  visited.add(typeDef)\n\n  typeDef.validation = normalizeValidationRules(typeDef)\n\n  if ('fields' in typeDef) {\n    for (const field of typeDef.fields) {\n      traverse(field.type, visited)\n    }\n  }\n\n  if ('of' in typeDef) {\n    for (const candidate of typeDef.of) {\n      traverse(candidate, visited)\n    }\n  }\n\n  // eslint-disable-next-line no-warning-comments\n  // @ts-expect-error TODO (eventually): `annotations` does not exist on the SchemaType yet\n  if (typeDef.annotations) {\n    // eslint-disable-next-line no-warning-comments\n    // @ts-expect-error TODO (eventually): `annotations` does not exist on the SchemaType yet\n    for (const annotation of typeDef.annotations) {\n      traverse(annotation, visited)\n    }\n  }\n}\n","import {type Schema} from '@sanity/types'\n\nimport {inferFromSchemaType} from './inferFromSchemaType'\n\n// Note: Mutates schema. Refactor when @sanity/schema supports middlewares\nexport function inferFromSchema(schema: Schema): Schema {\n  const typeNames = schema.getTypeNames()\n\n  typeNames.forEach((typeName) => {\n    const schemaType = schema.get(typeName)\n\n    if (schemaType) {\n      inferFromSchemaType(schemaType)\n    }\n  })\n\n  return schema\n}\n","import {createInstance, type Resource} from 'i18next'\nimport {memoize} from 'lodash'\n\nimport {isStaticResourceBundle} from './helpers'\nimport {studioLocaleNamespace} from './localeNamespaces'\nimport {defaultLocale, usEnglishLocale} from './locales'\nimport {type LocaleSource} from './types'\n\nconst shouldEscape = typeof window === 'undefined' || typeof document === 'undefined'\nconst fallbackLocales: LocaleSource['locales'] = [defaultLocale]\n\n/**\n * Returns a fallback source for internationalization that can be used in cases where you need\n * access to the \"framework\" of translation, but do not have access to an actual source.\n *\n * Memoized - only initializes the i18n instance once, and maintains the identity of the source.\n *\n * ⚠️ NOTE: This will only have the base studio strings defined - no custom bundles or plugins.\n *\n * @returns The fallback source\n * @internal\n * @hidden\n */\nexport const getFallbackLocaleSource: () => LocaleSource = memoize(\n  function getFallbackLocaleSource(): LocaleSource {\n    const i18n = getFallbackI18nInstance()\n    i18n.init()\n    return {\n      currentLocale: defaultLocale,\n      locales: fallbackLocales,\n      loadNamespaces: i18n.loadNamespaces,\n      t: i18n.t,\n    }\n  },\n)\n\nfunction getFallbackI18nInstance() {\n  // Find all core locale resource bundles we can load synchronously\n  const staticResources: Resource = {[defaultLocale.id]: {}}\n  const staticBundles = usEnglishLocale.bundles?.filter(isStaticResourceBundle) || []\n  const namespaces = new Set<string>()\n  for (const bundle of staticBundles) {\n    staticResources[defaultLocale.id][bundle.namespace] = bundle.resources\n    namespaces.add(bundle.namespace)\n  }\n\n  return createInstance({\n    ns: Array.from(namespaces),\n    defaultNS: studioLocaleNamespace,\n    initImmediate: true,\n    partialBundledLanguages: true,\n    fallbackLng: defaultLocale.id,\n    lng: defaultLocale.id,\n    supportedLngs: [defaultLocale.id],\n    debug: false,\n    load: 'currentOnly',\n    resources: staticResources,\n    interpolation: {\n      // If we're in a browser, assume this is running inside of the studio, eg a React app,\n      // and that values returned will be escaped by the framework (eg React) automatically.\n      escapeValue: shouldEscape,\n    },\n  })\n}\n","import {type SanityClient} from '@sanity/client'\nimport {ConcurrencyLimiter} from '@sanity/util/concurrency-limiter'\nimport {\n  bufferTime,\n  filter,\n  finalize,\n  firstValueFrom,\n  from,\n  map,\n  mergeMap,\n  share,\n  Subject,\n  switchMap,\n} from 'rxjs'\n\nimport {type AvailabilityResponse} from '../../preview'\n\n/**\n * The amount of time reserved for waiting for new IDs.\n */\nconst BUFFER_TIME = 250\n/**\n * The upper limit for IDs sent to the `doc` endpoint at once. From some manual\n * testing, 100 seems to be a safe amount.\n */\nexport const MAX_BUFFER_SIZE = 100\n/**\n * The max amount of inflight requests to the `doc` endpoint to check for\n * availability. Currently set to 1 because the endpoint is expensive\n *\n * From: https://www.sanity.io/docs/http-doc\n *\n * \"it is less scalable/performant than the other query-mechanisms, so should\n * be used sparingly*\n */\nexport const MAX_REQUEST_CONCURRENCY = 1\n\nexport function createBatchedGetDocumentExists(\n  client: SanityClient,\n): (options: {id: string}) => Promise<boolean> {\n  const id$ = new Subject<string>()\n  const limiter = new ConcurrencyLimiter(MAX_REQUEST_CONCURRENCY)\n\n  const existence$ = id$.pipe(\n    bufferTime(BUFFER_TIME, null, MAX_BUFFER_SIZE),\n    map((ids) => Array.from(new Set(ids))),\n    mergeMap((ids) =>\n      from(limiter.ready()).pipe(\n        switchMap(() =>\n          client.observable\n            .request<AvailabilityResponse>({\n              uri: client.getDataUrl('doc', ids.join(',')),\n              json: true,\n              query: {excludeContent: 'true'},\n              tag: 'documents-availability',\n            })\n            .pipe(map((availability) => ({availability, ids}))),\n        ),\n        finalize(limiter.release),\n      ),\n    ),\n    mergeMap(({availability, ids}) =>\n      ids.map((id) => {\n        const omittedIds = availability.omitted.reduce<Record<string, 'existence' | 'permission'>>(\n          (acc, next) => {\n            acc[next.id] = next.reason\n            return acc\n          },\n          {},\n        )\n\n        // if not in the `omitted`, then it exists\n        if (!omittedIds[id]) return {id, exists: true}\n        // if in the `omitted` due to existence, then it does not exist\n        if (omittedIds[id] === 'existence') return {id, exists: false}\n        // otherwise, it must exist\n        return {id, exists: true}\n      }),\n    ),\n    share(),\n  )\n\n  return async function getDocumentExists(options) {\n    // set up a promise/listener that waits for the result\n    const result = firstValueFrom(existence$.pipe(filter(({id}) => id === options.id)))\n    // send off the request to the stream for batching\n    id$.next(options.id)\n\n    const {exists} = await result\n    return exists\n  }\n}\n","/**\n * Simple requestIdleCallback polyfill\n * Can be removed when all browsers support requestIdleCallback: https://caniuse.com/requestidlecallback\n * @param callback -\n * @param options -\n */\nconst requestIdleCallbackShim: typeof window.requestIdleCallback = function requestIdleCallbackShim(\n  callback,\n  options?,\n): number {\n  const start = Date.now()\n  return window.setTimeout(() => {\n    callback({\n      didTimeout: false,\n      timeRemaining() {\n        return Math.max(0, Date.now() - start)\n      },\n    })\n  }, 0)\n}\n\nconst cancelIdleCallbackShim: typeof window.cancelIdleCallback = function cancelIdleCallbackShim(\n  handle: number,\n): void {\n  return window.clearTimeout(handle)\n}\n\nconst win = typeof window === 'undefined' ? undefined : window\n\nexport const requestIdleCallback = win?.requestIdleCallback || requestIdleCallbackShim\nexport const cancelIdleCallback = win?.cancelIdleCallback || cancelIdleCallbackShim\n","import {type CustomValidator, type ObjectSchemaType} from '@sanity/types'\n\n/**\n * Given a schema type, returns a custom validator used to warn users of unknown\n * fields found in an object.\n */\nexport const unknownFieldsValidator =\n  (type: ObjectSchemaType): CustomValidator =>\n  (value) => {\n    if (typeof value !== 'object') return true\n    if (!value) return true\n\n    const fieldNames = new Set(type.fields?.map((field) => field.name))\n\n    const unknownFields = Object.keys(value)\n      .filter((key) => !key.startsWith('_'))\n      .filter((key) => !fieldNames.has(key))\n\n    return unknownFields.map((unknownField) => ({\n      message: `Field '${unknownField}' does not exist on type '${type.name}'`,\n      path: [unknownField],\n    }))\n  }\n","import {type SanityClient} from '@sanity/client'\nimport {\n  isKeyedObject,\n  isTypedObject,\n  type Rule,\n  type SanityDocument,\n  type Schema,\n  type SchemaType,\n  type ValidationMarker,\n} from '@sanity/types'\nimport {createClientConcurrencyLimiter} from '@sanity/util/client'\nimport {ConcurrencyLimiter} from '@sanity/util/concurrency-limiter'\nimport {flatten, uniqBy} from 'lodash'\nimport {concat, defer, from, lastValueFrom, merge, Observable, of} from 'rxjs'\nimport {catchError, map, mergeAll, mergeMap, switchMap, toArray} from 'rxjs/operators'\n\nimport {type SourceClientOptions, type Workspace} from '../config'\nimport {getFallbackLocaleSource} from '../i18n/fallback'\nimport {type ValidationContext} from './types'\nimport {createBatchedGetDocumentExists} from './util/createBatchedGetDocumentExists'\nimport {getTypeChain, normalizeValidationRules} from './util/normalizeValidationRules'\nimport {cancelIdleCallback, requestIdleCallback} from './util/requestIdleCallback'\nimport {typeString} from './util/typeString'\nimport {unknownFieldsValidator} from './validators/unknownFieldsValidator'\n\n// this is the number of requests allowed inflight at once. this is done to prevent\n// the validation library from overwhelming our backend.\n// NOTE: this was upped from 10 to prevent issues where many concurrency\n// `client.fetch` requests would \"clog\" custom validators from finishing due to\n// not enough concurrent requests being fulfilled\n//\n// NOTE: ensure to update the TSDoc and CLI help test if this is changed\nconst DEFAULT_MAX_FETCH_CONCURRENCY = 25\n\n// NOTE: ensure to update the TSDoc and CLI help test if this is changed\nconst DEFAULT_MAX_CUSTOM_VALIDATION_CONCURRENCY = 5\n\nlet _limitConcurrency: ReturnType<typeof createClientConcurrencyLimiter> | undefined\nconst getConcurrencyLimiter = (maxConcurrency: number) => {\n  if (_limitConcurrency) return _limitConcurrency\n  _limitConcurrency = createClientConcurrencyLimiter(maxConcurrency)\n  return _limitConcurrency\n}\n\nconst isRecord = (maybeRecord: unknown): maybeRecord is Record<string, unknown> =>\n  typeof maybeRecord === 'object' && maybeRecord !== null && !Array.isArray(maybeRecord)\n\nconst isNonNullable = <T>(value: T): value is NonNullable<T> =>\n  value !== null && value !== undefined\n\n/**\n * @internal\n */\nexport function resolveTypeForArrayItem(\n  item: unknown,\n  candidates: SchemaType[],\n): SchemaType | undefined {\n  // if there is only one type available, assume that it's the correct one\n  if (candidates.length === 1) return candidates[0]\n\n  const itemType = isTypedObject(item) && item._type\n  const primitive =\n    item === undefined || item === null || (!itemType && typeString(item).toLowerCase())\n\n  if (primitive && primitive !== 'object') {\n    return candidates.find((candidate) => candidate.jsonType === primitive)\n  }\n\n  return (\n    candidates.find((candidate) => candidate.type?.name === itemType) ||\n    candidates.find((candidate) => candidate.name === itemType) ||\n    candidates.find((candidate) => candidate.name === 'object' && primitive === 'object')\n  )\n}\n\n/**\n * @beta\n */\nexport interface ValidateDocumentOptions {\n  /**\n   * The document to be validated\n   */\n  document: SanityDocument\n  /**\n   * The workspace instance (and associated schema) used to validate the given\n   * document against.\n   */\n  workspace: Workspace\n\n  /**\n   * Function used to check if referenced documents exists (and is published).\n   *\n   * If you're validating many documents in bulk, you may want to query for all\n   * document IDs first and provide your own implementation using those.\n   *\n   * If no function is provided a default one will be provided that will batch\n   * call the `doc` endpoint to check for document existence.\n   */\n  getDocumentExists?: (options: {id: string}) => Promise<boolean>\n\n  /**\n   * The factory function used to get a sanity client used in custom validators.\n   * If not provided, the one from the workspace will be used (preferred).\n   *\n   * @deprecated For internal use only\n   */\n  getClient?: (clientOptions: SourceClientOptions) => SanityClient\n\n  /**\n   * Specify the environment name. This will be passed down to the\n   * `ValidationContext` and made available to custom validators.\n   */\n  environment?: 'cli' | 'studio'\n\n  /**\n   * The maximum amount of custom validation functions to be running\n   * concurrently at once. This helps prevent custom validators from\n   * overwhelming backend services (e.g. called via fetch) used in async,\n   * user-defined validation functions. (i.e. `rule.custom(async() => {})`)\n   *\n   * Note that lowering this number may also help in cases where a custom\n   * validator could potentially exhaust the fetch concurrency. This is 5 by\n   * default.\n   */\n  maxCustomValidationConcurrency?: number\n\n  /**\n   * The amount of allowed inflight fetch requests at once. You may need to up\n   * this value if you have complex custom validations that require many\n   * `client.fetch` requests at once. It's possible for custom validator to\n   * stall if there are not enough concurrent fetch requests available to\n   * fullfil the custom validation. This is 25 by default.\n   */\n  maxFetchConcurrency?: number\n}\n\n/**\n * Validates a document against the schema in the given workspace. Returns an\n * array of validation markers with a path, message, and validation level.\n *\n * @beta\n */\nexport function validateDocument({\n  document,\n  workspace,\n  environment = 'studio',\n  maxFetchConcurrency,\n  ...options\n}: ValidateDocumentOptions): Promise<ValidationMarker[]> {\n  const getClient = options.getClient || workspace.getClient\n  const limitConcurrency = getConcurrencyLimiter(\n    maxFetchConcurrency ?? DEFAULT_MAX_FETCH_CONCURRENCY,\n  )\n  const getConcurrencyLimitedClient = (clientOptions: SourceClientOptions) =>\n    limitConcurrency(getClient(clientOptions))\n\n  return lastValueFrom(\n    validateDocumentObservable({\n      document,\n      getClient: getConcurrencyLimitedClient,\n      i18n: workspace.i18n,\n      schema: workspace.schema,\n      getDocumentExists:\n        options.getDocumentExists ||\n        createBatchedGetDocumentExists(getClient({apiVersion: 'v2021-03-25'})),\n      environment,\n    }),\n  )\n}\n\n/**\n * @internal\n */\nexport interface ValidateDocumentObservableOptions\n  extends Pick<ValidationContext, 'getDocumentExists' | 'i18n'> {\n  getClient: (options: {apiVersion: string}) => SanityClient\n  document: SanityDocument\n  schema: Schema\n  environment: 'cli' | 'studio'\n  maxCustomValidationConcurrency?: number\n}\n\nconst customValidationConcurrencyLimiters = new WeakMap<Schema, ConcurrencyLimiter>()\n\n/**\n * Validates a document against the given schema, returning an Observable\n * @internal\n */\nexport function validateDocumentObservable({\n  document,\n  getClient,\n  i18n = getFallbackLocaleSource(),\n  schema,\n  getDocumentExists,\n  environment,\n  maxCustomValidationConcurrency,\n}: ValidateDocumentObservableOptions): Observable<ValidationMarker[]> {\n  if (typeof document?._type !== 'string') {\n    throw new Error(`Tried to validated a value without a '_type'`)\n  }\n\n  const documentType = schema.get(document._type)\n\n  if (!documentType) {\n    if (environment === 'studio') {\n      console.warn(\n        'Schema type for object type \"%s\" not found, skipping validation',\n        document._type,\n      )\n      return of([])\n    }\n\n    return of([\n      {\n        level: 'warning',\n        message: `Could not find schema type for type '${document._type}', skipping validation`,\n        path: [],\n      },\n    ])\n  }\n\n  let customValidationConcurrencyLimiter = customValidationConcurrencyLimiters.get(schema)\n  if (!customValidationConcurrencyLimiter) {\n    customValidationConcurrencyLimiter = new ConcurrencyLimiter(\n      maxCustomValidationConcurrency ?? DEFAULT_MAX_CUSTOM_VALIDATION_CONCURRENCY,\n    )\n    customValidationConcurrencyLimiters.set(schema, customValidationConcurrencyLimiter)\n  }\n\n  const validationOptions: ValidateItemOptions = {\n    getClient,\n    schema,\n    parent: undefined,\n    value: document,\n    path: [],\n    document: document,\n    type: documentType,\n    i18n,\n    getDocumentExists,\n    environment,\n    customValidationConcurrencyLimiter,\n  }\n\n  return from(i18n.loadNamespaces(['validation'])).pipe(\n    switchMap(() => validateItemObservable(validationOptions)),\n    catchError((err) => {\n      console.error(err)\n\n      const message = err?.message || 'Unknown error'\n      const errorMarker: ValidationMarker = {\n        level: 'error',\n        message,\n        item: {message},\n        path: [],\n      }\n\n      return of([errorMarker])\n    }),\n  )\n}\n\n/**\n * this is used make optional properties required by replacing optionals with\n * `T[P] | undefined`. this is used to prevent errors in `validateItem` where\n * an option from a previous invocation would be incorrectly passed down.\n *\n * https://medium.com/terria/typescript-transforming-optional-properties-to-required-properties-that-may-be-undefined-7482cb4e1585\n */\ntype ExplicitUndefined<T> = {\n  [P in keyof Required<T>]: Pick<T, P> extends Required<Pick<T, P>> ? T[P] : T[P] | undefined\n}\n\ntype ValidateItemOptions = {\n  value: unknown\n  customValidationConcurrencyLimiter?: ConcurrencyLimiter\n} & ExplicitUndefined<ValidationContext>\n\nexport function validateItem(opts: ValidateItemOptions): Promise<ValidationMarker[]> {\n  return lastValueFrom(validateItemObservable(opts))\n}\n\nfunction validateItemObservable({\n  value,\n  type,\n  path = [],\n  parent,\n  customValidationConcurrencyLimiter,\n  environment,\n  ...restOfContext\n}: ValidateItemOptions): Observable<ValidationMarker[]> {\n  // Note: this validator is added here because it's conditional based on the\n  // environment.\n  const addUnknownFieldsValidator = (rule: Rule) => {\n    if (\n      // if the schema type is an object type\n      type?.jsonType === 'object' &&\n      // and if somewhere in it's type chain, it inherits from object or document\n      getTypeChain(type).find((t) => ['object', 'document', 'file', 'image'].includes(t.name)) &&\n      // and the environment is not the studio\n      environment !== 'studio'\n    ) {\n      // then add the validator for unknown fields\n      return rule.custom(unknownFieldsValidator(type), {bypassConcurrencyLimit: true}).warning()\n    }\n\n    // otherwise, leave it unchanged\n    return rule\n  }\n\n  const rules = normalizeValidationRules(type)\n  // run validation for the current value\n  const selfChecks = rules.map(addUnknownFieldsValidator).map((rule) =>\n    defer(() =>\n      rule.validate(value, {\n        ...restOfContext,\n        environment,\n        parent,\n        path,\n        type,\n        __internal: {customValidationConcurrencyLimiter},\n      }),\n    ),\n  )\n\n  // run validation for nested values (conditionally)\n  let nestedChecks: Array<Observable<ValidationMarker[]>> = []\n\n  const selfIsRequired = rules.some((rule) => rule.isRequired())\n  const shouldRunNestedObjectValidation =\n    // run nested validation for objects\n    type?.jsonType === 'object' &&\n    // if the value is truthy\n    (!!value || // or\n      // (the value is null or undefined) and the top-level value is required\n      ((value === null || value === undefined) && selfIsRequired))\n\n  if (shouldRunNestedObjectValidation) {\n    const fieldTypes = type.fields.reduce<Record<string, SchemaType>>((acc, field) => {\n      acc[field.name] = field.type\n      return acc\n    }, {})\n\n    // Validation for rules set at the object level with `Rule.fields({/* ... */})`\n    nestedChecks = nestedChecks.concat(\n      rules\n        .map((rule) => rule._fieldRules)\n        .filter(isNonNullable)\n        .flatMap((fieldResults) => Object.entries(fieldResults))\n        .flatMap(([name, validation]) => {\n          const fieldType = fieldTypes[name]\n          return normalizeValidationRules({...fieldType, validation})\n            .map(addUnknownFieldsValidator)\n            .map((subRule) => {\n              const nestedValue = isRecord(value) ? value[name] : undefined\n              return defer(() =>\n                subRule.validate(nestedValue, {\n                  ...restOfContext,\n                  parent: value,\n                  path: path.concat(name),\n                  type: fieldType,\n                  environment,\n                  __internal: {customValidationConcurrencyLimiter},\n                }),\n              )\n            })\n        }),\n    )\n\n    // Validation from each field's schema `validation: Rule => {/* ... */}` function\n    nestedChecks = nestedChecks.concat(\n      type.fields.map((field) =>\n        validateItemObservable({\n          ...restOfContext,\n          parent: value,\n          value: isRecord(value) ? value[field.name] : undefined,\n          path: path.concat(field.name),\n          type: field.type,\n          environment,\n          customValidationConcurrencyLimiter,\n        }),\n      ),\n    )\n  }\n\n  // note: unlike objects, arrays should not run nested validation for undefined\n  // values because we won't have a valid path to put a marker (i.e. missing the\n  // key or index in the path) and the downstream form builder won't have a\n  // valid target component\n  const shouldRunNestedValidationForArrays = type?.jsonType === 'array' && Array.isArray(value)\n\n  if (shouldRunNestedValidationForArrays) {\n    nestedChecks = nestedChecks.concat(\n      value.map((item, index) =>\n        validateItemObservable({\n          ...restOfContext,\n          parent: value,\n          value: item,\n          path: path.concat(isKeyedObject(item) ? {_key: item._key} : index),\n          type: resolveTypeForArrayItem(item, type.of),\n          environment,\n          customValidationConcurrencyLimiter,\n        }),\n      ),\n    )\n  }\n\n  return defer(() => merge([...selfChecks, ...nestedChecks])).pipe(\n    mergeMap((validateNode) => concat(idle(), validateNode), 40),\n    mergeAll(),\n    toArray(),\n    map(flatten),\n    map((results) => {\n      // run `uniqBy` if `_fieldRules` are present because they can\n      // cause repeat markers\n      if (rules.some((rule) => rule._fieldRules)) {\n        return uniqBy(results, (rule) => JSON.stringify(rule))\n      }\n      return results\n    }),\n  )\n}\n\nfunction idle(timeout?: number): Observable<never> {\n  return new Observable<never>((observer) => {\n    const handle = requestIdleCallback(\n      () => {\n        observer.complete()\n      },\n      timeout ? {timeout} : undefined,\n    )\n\n    return () => cancelIdleCallback(handle)\n  })\n}\n","import {type SanityClient} from '@sanity/client'\nimport {\n  isGlobalDocumentReference,\n  isReference,\n  type SanityDocument,\n  type Schema,\n  type ValidationContext,\n  type ValidationMarker,\n} from '@sanity/types'\nimport {reduce as reduceJSON} from 'json-reduce'\nimport {\n  asyncScheduler,\n  combineLatest,\n  concat,\n  defer,\n  from,\n  lastValueFrom,\n  type Observable,\n  of,\n  timer,\n} from 'rxjs'\nimport {\n  distinct,\n  distinctUntilChanged,\n  first,\n  groupBy,\n  map,\n  mergeMap,\n  scan,\n  shareReplay,\n  skip,\n  throttleTime,\n} from 'rxjs/operators'\nimport {exhaustMapWithTrailing} from 'rxjs-exhaustmap-with-trailing'\nimport shallowEquals from 'shallow-equals'\n\nimport {type SourceClientOptions} from '../config/types'\nimport {type LocaleSource} from '../i18n/types'\nimport {type DocumentPreviewStore} from '../preview/documentPreviewStore'\nimport {getVersionFromId} from '../util/draftUtils'\nimport {validateDocumentObservable} from './validateDocument'\n\n/**\n * @hidden\n * @beta */\nexport interface ValidationStatus {\n  isValidating: boolean\n  validation: ValidationMarker[]\n  revision?: string\n}\n\nconst INITIAL_VALIDATION_STATUS: ValidationStatus = {\n  isValidating: true,\n  validation: [],\n}\n\nfunction findReferenceIds(obj: any): Set<string> {\n  return reduceJSON(\n    obj,\n    (acc, node) => {\n      if (isReference(node) && !isGlobalDocumentReference(node)) {\n        acc.add(node._ref)\n      }\n      return acc\n    },\n    new Set<string>(),\n  )\n}\n\nconst EMPTY_VALIDATION: ValidationMarker[] = []\n\ntype GetDocumentExists = NonNullable<ValidationContext['getDocumentExists']>\n\nconst listenDocumentExists = (\n  observeDocumentAvailability: DocumentPreviewStore['unstable_observeDocumentPairAvailability'],\n  id: string,\n  versionId: string | undefined,\n): Observable<boolean> =>\n  observeDocumentAvailability(id, {version: versionId}).pipe(\n    map(({published, version}) => published.available || version?.available || false),\n  )\n\n// throttle delay for referenced document updates (i.e. time between responding to changes in referenced documents)\nconst REF_UPDATE_DELAY = 1000\n\nfunction shareLatestWithRefCount<T>() {\n  return shareReplay<T>({bufferSize: 1, refCount: true})\n}\n\n/**\n * @internal\n * Takes an observable of a document and validates it, including any references in the document.\n * */\nexport function validateDocumentWithReferences(\n  ctx: {\n    getClient: (options: SourceClientOptions) => SanityClient\n    observeDocumentPairAvailability: DocumentPreviewStore['unstable_observeDocumentPairAvailability']\n    schema: Schema\n    i18n: LocaleSource\n  },\n  document$: Observable<SanityDocument | null | undefined>,\n): Observable<ValidationStatus> {\n  const referenceIds$ = document$.pipe(\n    map((document) => findReferenceIds(document)),\n    mergeMap((ids) => from(ids)),\n  )\n\n  const versionId$ = document$.pipe(\n    map((doc) => ({versionId: getVersionFromId(doc?._id || '')})),\n    distinctUntilChanged(),\n  )\n\n  // Note: we only use this to trigger a re-run of validation when a referenced document is published/unpublished\n  const referenceExistence$ = combineLatest([versionId$, referenceIds$]).pipe(\n    groupBy(([_, id]) => id, {duration: () => timer(1000 * 60 * 30)}),\n    mergeMap((id$) =>\n      id$.pipe(\n        distinct(),\n        mergeMap(([{versionId}, id]) =>\n          listenDocumentExists(ctx.observeDocumentPairAvailability, id, versionId).pipe(\n            map(\n              // eslint-disable-next-line max-nested-callbacks\n              (result) => [id, result] as const,\n            ),\n          ),\n        ),\n      ),\n    ),\n    scan((acc: Record<string, boolean>, [id, result]): Record<string, boolean> => {\n      if (acc[id] === result) {\n        return acc\n      }\n      return {...acc, [id]: result}\n    }, {}),\n    distinctUntilChanged(shallowEquals),\n    shareLatestWithRefCount(),\n  )\n\n  // Provided to individual validation functions to support using existence of a weakly referenced document\n  // as part of the validation rule (used by references in place)\n  const getDocumentExists: GetDocumentExists = ({id}) =>\n    lastValueFrom(\n      referenceExistence$.pipe(\n        // If the id is not present as key in the `referenceExistence` map it means it's existence status\n        // isn't yet loaded, so we want to wait until it is\n        first((referenceExistence) => id in referenceExistence),\n        map((referenceExistence) => referenceExistence[id]),\n      ),\n    )\n\n  const referenceDocumentUpdates$ = referenceExistence$.pipe(\n    // we'll skip the first emission since the document already gets an initial validation pass\n    // we're only interested in updates in referenced documents after that\n    skip(1),\n    throttleTime(REF_UPDATE_DELAY, asyncScheduler, {leading: true, trailing: true}),\n  )\n\n  return combineLatest([document$, concat(of(null), referenceDocumentUpdates$)]).pipe(\n    map(([document]) => document),\n    exhaustMapWithTrailing((document) => {\n      return defer(() => {\n        if (!document?._type) {\n          return of({validation: EMPTY_VALIDATION, isValidating: false})\n        }\n        return concat(\n          of({isValidating: true, revision: document._rev}),\n          validateDocumentObservable({\n            document,\n            getClient: ctx.getClient,\n            getDocumentExists,\n            i18n: ctx.i18n,\n            schema: ctx.schema,\n            environment: 'studio',\n          }).pipe(\n            map((validationMarkers) => ({validation: validationMarkers, isValidating: false})),\n          ),\n        )\n      })\n    }),\n    scan((acc, next) => ({...acc, ...next}), INITIAL_VALIDATION_STATUS),\n    shareLatestWithRefCount(),\n  )\n}\n","import {type SanityClient} from '@sanity/client'\nimport {type Schema} from '@sanity/types'\nimport {omit} from 'lodash'\nimport {asyncScheduler, type Observable} from 'rxjs'\nimport {distinctUntilChanged, map, shareReplay, throttleTime} from 'rxjs/operators'\nimport shallowEquals from 'shallow-equals'\n\nimport {type SourceClientOptions} from '../../../../config'\nimport {type LocaleSource} from '../../../../i18n'\nimport {type DraftsModelDocumentAvailability} from '../../../../preview'\nimport {validateDocumentWithReferences, type ValidationStatus} from '../../../../validation'\nimport {type DocumentStoreExtraOptions} from '../getPairListener'\nimport {type IdPair} from '../types'\nimport {memoize} from '../utils/createMemoizer'\nimport {editState} from './editState'\nimport {memoizeKeyGen} from './memoizeKeyGen'\n\n// throttle delay for document updates (i.e. time between responding to changes in the current document)\nconst DOC_UPDATE_DELAY = 200\n\nfunction shareLatestWithRefCount<T>() {\n  return shareReplay<T>({bufferSize: 1, refCount: true})\n}\n\n/** @internal */\nexport const validation = memoize(\n  (\n    ctx: {\n      client: SanityClient\n      getClient: (options: SourceClientOptions) => SanityClient\n      observeDocumentPairAvailability: (id: string) => Observable<DraftsModelDocumentAvailability>\n      schema: Schema\n      i18n: LocaleSource\n      serverActionsEnabled: Observable<boolean>\n      pairListenerOptions?: DocumentStoreExtraOptions\n    },\n    {draftId, publishedId, versionId}: IdPair,\n    typeName: string,\n  ): Observable<ValidationStatus> => {\n    const document$ = editState(ctx, {draftId, publishedId, versionId}, typeName).pipe(\n      map(({version, draft, published}) => version || draft || published),\n      throttleTime(DOC_UPDATE_DELAY, asyncScheduler, {trailing: true}),\n      distinctUntilChanged((prev, next) => {\n        if (prev?._rev === next?._rev) {\n          return true\n        }\n        // _rev and _updatedAt may change without other fields changing (due to a limitation in mutator)\n        // so only pass on documents if _other_ attributes changes\n        return shallowEquals(omit(prev, '_rev', '_updatedAt'), omit(next, '_rev', '_updatedAt'))\n      }),\n      shareLatestWithRefCount(),\n    )\n\n    return validateDocumentWithReferences(ctx, document$)\n  },\n  (ctx, idPair, typeName) => {\n    return memoizeKeyGen(ctx.client, idPair, typeName)\n  },\n)\n","import {type SanityClient} from '@sanity/client'\nimport {merge, type Observable} from 'rxjs'\nimport {switchMap} from 'rxjs/operators'\n\nimport {type DocumentStoreExtraOptions} from '../getPairListener'\nimport {type IdPair} from '../types'\nimport {memoize} from '../utils/createMemoizer'\nimport {type DocumentVersionEvent} from './checkoutPair'\nimport {memoizedPair} from './memoizedPair'\nimport {memoizeKeyGen} from './memoizeKeyGen'\n\n// A stream of all events related to either published or draft, each event comes with a 'target'\n// that specifies which version (draft|published) the event is about\nexport const documentEvents = memoize(\n  (\n    client: SanityClient,\n    idPair: IdPair,\n    typeName: string,\n    serverActionsEnabled: Observable<boolean>,\n    pairListenerOptions?: DocumentStoreExtraOptions,\n  ): Observable<DocumentVersionEvent> => {\n    return memoizedPair(client, idPair, typeName, serverActionsEnabled, pairListenerOptions).pipe(\n      switchMap(({draft, published}) => merge(draft.events, published.events)),\n    )\n  },\n  memoizeKeyGen,\n)\n","import {type IdPair} from '../../types'\nimport {emitOperation} from '../operationEvents'\nimport {publish} from '../operations/publish'\nimport {del as serverDel} from '../serverOperations/delete'\nimport {discardChanges as serverDiscardChanges} from '../serverOperations/discardChanges'\nimport {patch as serverPatch} from '../serverOperations/patch'\nimport {publish as serverPublish} from '../serverOperations/publish'\nimport {restore as serverRestore} from '../serverOperations/restore'\nimport {unpublish as serverUnpublish} from '../serverOperations/unpublish'\nimport {commit} from './commit'\nimport {del} from './delete'\nimport {discardChanges} from './discardChanges'\nimport {duplicate} from './duplicate'\nimport {patch} from './patch'\nimport {restore} from './restore'\nimport {type Operation, type OperationArgs, type OperationImpl, type OperationsAPI} from './types'\nimport {unpublish} from './unpublish'\n\nfunction createOperationGuard(opName: string): Operation<any[], 'NOT_READY'> {\n  return {\n    disabled: 'NOT_READY',\n    execute: () => {\n      throw new Error(`Called ${opName} before it was ready.`)\n    },\n  }\n}\n\n// This creates a version of the operations api that will throw if called.\n// Most operations depend on having the \"current document state\" available locally and if an action gets called\n// before we have the state available, we throw an error to signal \"premature\" invocation before ready\nexport const GUARDED: OperationsAPI = {\n  commit: createOperationGuard('commit'),\n  delete: createOperationGuard('delete'),\n  del: createOperationGuard('del'),\n  publish: createOperationGuard('publish'),\n  patch: createOperationGuard('patch'),\n  discardChanges: createOperationGuard('discardChanges'),\n  unpublish: createOperationGuard('unpublish'),\n  duplicate: createOperationGuard('duplicate'),\n  restore: createOperationGuard('restore'),\n}\nconst createEmitter =\n  (operationName: keyof OperationsAPI, idPair: IdPair, typeName: string) =>\n  (...executeArgs: any[]) =>\n    emitOperation(operationName, idPair, typeName, executeArgs)\n\nfunction wrap<ExtraArgs extends any[], DisabledReason extends string>(\n  opName: keyof OperationsAPI,\n  op: OperationImpl<ExtraArgs, DisabledReason>,\n  operationArgs: OperationArgs,\n): Operation<ExtraArgs, DisabledReason> {\n  const disabled = op.disabled(operationArgs)\n  return {\n    disabled,\n    execute: createEmitter(opName, operationArgs.idPair, operationArgs.typeName),\n  }\n}\n\nexport function createOperationsAPI(args: OperationArgs): OperationsAPI {\n  const operationsAPI = {\n    commit: wrap('commit', commit, args),\n    delete: wrap('delete', del, args),\n    del: wrap('delete', del, args),\n    publish: wrap('publish', publish, args),\n    patch: wrap('patch', patch, args),\n    discardChanges: wrap('discardChanges', discardChanges, args),\n    unpublish: wrap('unpublish', unpublish, args),\n    duplicate: wrap('duplicate', duplicate, args),\n    restore: wrap('restore', restore, args),\n  }\n\n  //as we add server operations one by one, we can add them here\n  // Note: Any changes must also be made to `serverOperationImpls`, which is defined in `packages/sanity/src/core/store/_legacy/document/document-pair/operationEvents.ts`.\n  if (args.serverActionsEnabled) {\n    return {\n      ...operationsAPI,\n      delete: wrap('delete', serverDel, args),\n      del: wrap('delete', serverDel, args),\n      discardChanges: wrap('discardChanges', serverDiscardChanges, args),\n      patch: wrap('patch', serverPatch, args),\n      publish: wrap('publish', serverPublish, args),\n      unpublish: wrap('unpublish', serverUnpublish, args),\n      restore: wrap('restore', serverRestore, args),\n    }\n  }\n  return operationsAPI\n}\n","import {type SanityClient} from '@sanity/client'\nimport {type Schema} from '@sanity/types'\nimport {concat, EMPTY, merge, type Observable, of} from 'rxjs'\nimport {map, mergeMap, shareReplay} from 'rxjs/operators'\n\nimport {type HistoryStore} from '../../history'\nimport {type DocumentStoreExtraOptions} from '../getPairListener'\nimport {type IdPair} from '../types'\nimport {memoize} from '../utils/createMemoizer'\nimport {memoizeKeyGen} from './memoizeKeyGen'\nimport {operationArgs} from './operationArgs'\nimport {operationEvents} from './operationEvents'\nimport {type OperationsAPI} from './operations'\nimport {createOperationsAPI, GUARDED} from './operations/helpers'\n\nexport const editOperations = memoize(\n  (\n    ctx: {\n      client: SanityClient\n      historyStore: HistoryStore\n      schema: Schema\n      serverActionsEnabled: Observable<boolean>\n      pairListenerOptions?: DocumentStoreExtraOptions\n    },\n    idPair: IdPair,\n    typeName: string,\n  ): Observable<OperationsAPI> => {\n    const operationEvents$ = operationEvents(ctx)\n\n    const operationArgs$ = operationArgs(ctx, idPair, typeName)\n    const operations$ = operationArgs$.pipe(map(createOperationsAPI))\n\n    // To makes sure we connect the stream that actually performs the operations\n    return concat(\n      of(GUARDED),\n      merge(operationEvents$.pipe(mergeMap(() => EMPTY)), operations$),\n    ).pipe(shareReplay({refCount: true, bufferSize: 1}))\n  },\n  (ctx, idPair, typeName) => memoizeKeyGen(ctx.client, idPair, typeName),\n)\n","import {isPlainObject} from 'lodash'\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n  return isPlainObject(value)\n}\n","import {isRecord} from './isRecord'\n\n// deep object assign for objects\n// note: doesn't mutate target\nexport default function deepAssign(\n  target: Record<string, unknown>,\n  source: Record<string, unknown>,\n): Record<string, unknown> {\n  const result = {...target, ...source}\n\n  Object.keys(result).forEach((key) => {\n    const sourceVal = source[key]\n    const targetVal = target[key]\n    if (isRecord(sourceVal) && isRecord(targetVal)) {\n      result[key] = deepAssign(targetVal, sourceVal)\n    }\n  })\n  return result\n}\n","import {type Schema} from '@sanity/types'\nimport {randomKey} from '@sanity/util/content'\nimport {toString as pathToString} from '@sanity/util/paths'\n\nimport {type Template, type TemplateParameter} from './types'\nimport {isRecord} from './util/isRecord'\n\nconst ALLOWED_REF_PROPS = [\n  '_dataset',\n  '_projectId',\n  '_strengthenOnPublish',\n  '_key',\n  '_ref',\n  '_type',\n  '_weak',\n]\nconst REQUIRED_TEMPLATE_PROPS: (keyof Template)[] = ['id', 'title', 'schemaType', 'value']\n\nfunction templateId(template: Template, i: number) {\n  return quote(template.id || template.title) || (typeof i === 'number' && `at index ${i}`) || ''\n}\n\nfunction quote(str: string) {\n  return str && str.length > 0 ? `\"${str}\"` : str\n}\n\nexport function validateTemplates(schema: Schema, templates: Template[]): Template[] {\n  const idMap = new Map()\n\n  templates.forEach((template, i) => {\n    const id = templateId(template, i)\n\n    if (typeof (template as {[key: string]: any}).values !== 'undefined' && !template.value) {\n      throw new Error(`Template ${id} is missing \"value\" property, but contained \"values\". Typo?`)\n    }\n\n    const missing = REQUIRED_TEMPLATE_PROPS.filter((prop) => !template[prop])\n    if (missing.length > 0) {\n      throw new Error(`Template ${id} is missing required properties: ${missing.join(', ')}`)\n    }\n\n    if (typeof template.value !== 'function' && !isRecord(template.value)) {\n      throw new Error(\n        `Template ${id} has an invalid \"value\" property; should be a function or an object`,\n      )\n    }\n\n    if (typeof template.parameters !== 'undefined') {\n      if (Array.isArray(template.parameters)) {\n        template.parameters.forEach((param, j) => validateParameter(schema, param, template, j))\n      } else {\n        throw new Error(`Template ${id} has an invalid \"parameters\" property; must be an array`)\n      }\n    }\n\n    if (idMap.has(template.id)) {\n      const dupeIndex = idMap.get(template.id)\n      const dupe = `${quote(templates[dupeIndex].title)} at index ${dupeIndex}`\n      throw new Error(\n        `Template \"${template.title}\" at index ${i} has the same ID (\"${template.id}\") as template ${dupe}`,\n      )\n    }\n\n    idMap.set(template.id, i)\n  })\n\n  return templates\n}\n\nexport function validateInitialObjectValue<T extends Record<string, unknown>>(\n  value: T,\n  template: Template,\n): T {\n  const contextError = (msg: string) => `Template \"${template.id}\" initial value: ${msg}`\n\n  if (!isRecord(value)) {\n    throw new Error(contextError(`resolved to a non-object`))\n  }\n\n  if (value._type && template.schemaType !== value._type) {\n    throw new Error(\n      contextError(\n        `includes \"_type\"-property (${value._type}) that does not match template (${template.schemaType})`,\n      ),\n    )\n  }\n\n  try {\n    return validateValue(value)\n  } catch (err) {\n    err.message = contextError(err.message)\n    throw err\n  }\n}\n\nfunction validateValue(value: unknown, path: (string | number)[] = [], parentIsArray = false): any {\n  if (Array.isArray(value)) {\n    return value.map((item, i) => {\n      if (Array.isArray(item)) {\n        throw new Error(\n          `multidimensional arrays are not supported (at path \"${pathToString(path)}\")`,\n        )\n      }\n\n      return validateValue(item, path.concat(i), true)\n    })\n  }\n\n  if (!isRecord(value)) {\n    return value\n  }\n\n  // Apply missing keys is the parent is an array\n  const initial: {[key: string]: any} = parentIsArray && !value._key ? {_key: randomKey()} : {}\n\n  // Ensure non-root objects have _type\n  if (path.length > 0 && !value._type) {\n    if (value._ref) {\n      // In the case of references, we know what the type should be, so apply it\n      initial._type = 'reference'\n    } else {\n      // todo: consider if we need to re-instantiate this. It currently makes the valid case of having an initial object value for a field fail\n      // throw new Error(`missing \"_type\" property at path \"${pathToString(path)}\"`)\n    }\n  }\n\n  if (value._ref) {\n    validateReference(value, path)\n  }\n\n  // Validate deeply\n  return Object.keys(value).reduce((acc, key) => {\n    acc[key] = validateValue(value[key], path.concat([key]))\n    return acc\n  }, initial)\n}\n\nfunction validateParameter(\n  schema: Schema,\n  parameter: TemplateParameter,\n  template: Template,\n  index: number,\n) {\n  // const schema = getDefaultSchema()\n\n  if (!parameter.name) {\n    throw new Error(\n      `Template ${template.id} has a parameter at index ${index} that is missing its \"name\"-property`,\n    )\n  }\n\n  // I know, this is a weird one\n  if (parameter.name === 'template') {\n    throw new Error(\n      `Template parameters cannot be named \"template\", see parameter #${index} for template ${template.id}`,\n    )\n  }\n\n  if (!schema.get(parameter.type)) {\n    throw new Error(\n      `Template parameter \"${parameter.name}\" has an invalid/unknown type: \"${parameter.type}\"`,\n    )\n  }\n}\n\nfunction validateReference(\n  value: {_type?: unknown; type?: unknown},\n  path: (string | number)[] = [],\n) {\n  if (!value._type && value.type) {\n    throw new Error(\n      `Reference is missing \"_type\", but has a \"type\" property at path \"${pathToString(path)}\"`,\n    )\n  }\n\n  const disallowed = Object.keys(value).filter((key) => !ALLOWED_REF_PROPS.includes(key))\n  if (disallowed.length > 0) {\n    const plural = disallowed.length > 1 ? 'properties' : 'property'\n    throw new Error(\n      `Disallowed ${plural} found in reference: ${disallowed\n        .map(quote)\n        .join(', ')} at path \"${pathToString(path)}\"`,\n    )\n  }\n}\n","import {\n  type ArraySchemaType,\n  type InitialValueProperty,\n  type InitialValueResolver,\n  type InitialValueResolverContext,\n  isArraySchemaType,\n  isObjectSchemaType,\n  type ObjectSchemaType,\n  type Schema,\n  type SchemaType,\n} from '@sanity/types'\nimport {isDeepEmpty, randomKey, resolveTypeName} from '@sanity/util/content'\n\nimport {type Template} from './types'\nimport deepAssign from './util/deepAssign'\nimport {isRecord} from './util/isRecord'\nimport {validateInitialObjectValue} from './validate'\n\n/** @internal */\nexport type Serializeable<T> = {\n  serialize(): T\n}\n\ninterface Options {\n  useCache?: boolean\n}\n\n/** @internal */\nexport function isBuilder(template: unknown): template is Serializeable<Template> {\n  return isRecord(template) && typeof template.serialize === 'function'\n}\n\nconst cache = new WeakMap<\n  InitialValueResolver<unknown, unknown>,\n  Record<string, unknown | Promise<unknown>>\n>()\n\n/** @internal */\n// returns the \"resolved\" value from an initial value property (e.g. type.initialValue)\n// eslint-disable-next-line require-await\nexport async function resolveValue<Params, InitialValue>(\n  initialValueOpt: InitialValueProperty<Params, InitialValue>,\n  params: Params | undefined,\n  context: InitialValueResolverContext,\n  options?: Options,\n): Promise<InitialValue | undefined> {\n  const useCache = options?.useCache\n\n  if (typeof initialValueOpt === 'function') {\n    const cached = cache.get(initialValueOpt as InitialValueResolver<unknown, unknown>)\n\n    const key = JSON.stringify([\n      params,\n      context.projectId,\n      context.dataset,\n      context.currentUser?.id,\n    ])\n\n    if (useCache && cached?.[key]) {\n      return cached[key] as InitialValue | Promise<InitialValue>\n    }\n\n    const value = (initialValueOpt as InitialValueResolver<Params, InitialValue>)(params, context)\n\n    if (useCache) {\n      cache.set(initialValueOpt as InitialValueResolver<unknown, unknown>, {\n        ...cached,\n        [key]: value,\n      })\n    }\n\n    return value\n  }\n\n  return initialValueOpt\n}\n\n/** @internal */\nexport async function resolveInitialValue(\n  schema: Schema,\n  template: Template,\n  params: {[key: string]: any} = {},\n  context: InitialValueResolverContext,\n  options?: Options,\n): Promise<{[key: string]: any}> {\n  // Template builder?\n  if (isBuilder(template)) {\n    return resolveInitialValue(schema, template.serialize(), params, context, options)\n  }\n\n  const {id, schemaType: schemaTypeName, value} = template\n  if (!value) {\n    throw new Error(`Template \"${id}\" has invalid \"value\" property`)\n  }\n\n  let resolvedValue = await resolveValue(value, params, context, options)\n\n  if (!isRecord(resolvedValue)) {\n    throw new Error(\n      `Template \"${id}\" has invalid \"value\" property - must be a plain object or a resolver function returning a plain object`,\n    )\n  }\n\n  // Ensure _type is set on empty objects\n  if (isRecord(resolvedValue) && !Object.keys(resolvedValue).length) {\n    resolvedValue = {_type: schemaTypeName}\n  }\n\n  // validate default document initial values\n  resolvedValue = validateInitialObjectValue(resolvedValue, template)\n\n  // Get deep initial values from schema types (note: the initial value from template overrides the types)\n  const schemaType = schema.get(schemaTypeName)\n  if (!schemaType) {\n    throw new Error(`Could not find schema type with name \"${schemaTypeName}\".`)\n  }\n\n  const newValue = deepAssign(\n    (await resolveInitialValueForType(\n      schemaType,\n      params,\n      DEFAULT_MAX_RECURSION_DEPTH,\n      context,\n      options,\n    )) || {},\n    resolvedValue as Record<string, unknown>,\n  )\n\n  // revalidate and return new initial values\n  // todo: would be better to do validation as part of type resolution\n  return validateInitialObjectValue(newValue, template)\n}\n\n/** @internal */\nexport function getItemType(arrayType: ArraySchemaType, item: unknown): SchemaType | undefined {\n  const itemTypeName = resolveTypeName(item)\n\n  return itemTypeName === 'object' && arrayType.of.length === 1\n    ? arrayType.of[0]\n    : arrayType.of.find((memberType) => memberType.name === itemTypeName)\n}\n\n/** @internal */\nexport const DEFAULT_MAX_RECURSION_DEPTH = 10\n\ntype ResolveInitialValueForType = <TParams extends Record<string, unknown>>(\n  /**\n   * This is the name of the document.\n   */ type: SchemaType,\n  /**\n   * Params is a sanity context object passed to every initial value function.\n   */\n  params: TParams,\n  /**\n   * Maximum recursion depth (default 9).\n   */\n  maxDepth: number,\n  context: InitialValueResolverContext,\n  options?: Options,\n) => Promise<any>\n\nconst memoizeResolveInitialValueForType: (\n  fn: ResolveInitialValueForType,\n) => ResolveInitialValueForType = (fn) => {\n  const resolveInitialValueForTypeCache = new WeakMap<SchemaType, Map<string, Promise<any>>>()\n\n  const stableStringify = (obj: any): string => {\n    if (obj !== null && typeof obj === 'object') {\n      if (Array.isArray(obj)) {\n        return `[${obj.map(stableStringify).join(',')}]`\n      }\n      const keys = Object.keys(obj).sort()\n      return `{${keys\n        .map((key) => `${JSON.stringify(key)}:${stableStringify(obj[key])}`)\n        .join(',')}}`\n    }\n    return JSON.stringify(obj)\n  }\n\n  const hashParameters = (\n    params: Record<string, unknown>,\n    context: InitialValueResolverContext,\n  ): string => {\n    return stableStringify({\n      params,\n      context: {\n        schemaName: context.schema.name,\n        projectId: context.projectId,\n        dataset: context.dataset,\n        currentUser: context.currentUser?.id,\n      },\n    })\n  }\n\n  return async function resolveInitialValueForType(type, params, maxDepth, context, options) {\n    if (!options?.useCache) return fn(type, params, maxDepth, context, options)\n\n    let typeCache = resolveInitialValueForTypeCache.get(type)\n\n    if (!typeCache) {\n      typeCache = new Map<string, Promise<any>>()\n      resolveInitialValueForTypeCache.set(type, typeCache)\n    }\n\n    const hash = hashParameters(params, context)\n\n    const cachedResult = typeCache.get(hash)\n    if (cachedResult) return cachedResult\n\n    const result = await fn(type, params, maxDepth, context, options)\n\n    // double check after the await\n    if (!typeCache.has(hash)) {\n      typeCache.set(hash, result)\n    }\n    return result\n  }\n}\n\n/**\n * Resolve initial value for the given schema type (recursively)\n *\n * @internal\n */\nexport const resolveInitialValueForType = memoizeResolveInitialValueForType(\n  (type, params, maxDepth = DEFAULT_MAX_RECURSION_DEPTH, context, options): Promise<any> => {\n    if (maxDepth <= 0) {\n      return Promise.resolve(undefined)\n    }\n\n    if (isObjectSchemaType(type)) {\n      return postTask(() => resolveInitialObjectValue(type, params, maxDepth, context, options))\n    }\n\n    if (isArraySchemaType(type)) {\n      return postTask(() => resolveInitialArrayValue(type, params, maxDepth, context, options))\n    }\n\n    return resolveValue(type.initialValue, params, context, options)\n  },\n)\n\nasync function resolveInitialArrayValue<Params extends Record<string, unknown>>(\n  type: SchemaType,\n  params: Params,\n  maxDepth: number,\n  context: InitialValueResolverContext,\n  options?: Options,\n): Promise<any> {\n  const initialArray = await resolveValue(type.initialValue, undefined, context, options)\n\n  if (!Array.isArray(initialArray)) {\n    return undefined\n  }\n\n  return Promise.all(\n    initialArray.map(async (initialItem) => {\n      const itemType = getItemType(type as ArraySchemaType, initialItem)!\n      return isObjectSchemaType(itemType)\n        ? {\n            ...initialItem,\n            ...(await resolveInitialValueForType(itemType, params, maxDepth - 1, context, options)),\n            _key: randomKey(),\n          }\n        : initialItem\n    }),\n  )\n}\n\n/** @internal */\nexport async function resolveInitialObjectValue<Params extends Record<string, unknown>>(\n  type: ObjectSchemaType,\n  params: Params,\n  maxDepth: number,\n  context: InitialValueResolverContext,\n  options?: Options,\n): Promise<any> {\n  const initialObject: Record<string, unknown> = {\n    ...((await resolveValue(type.initialValue, params, context, options)) || {}),\n  }\n\n  const fieldValues: Record<string, any> = {}\n  await Promise.all(\n    type.fields.map(async (field) => {\n      const initialFieldValue = await resolveInitialValueForType(\n        field.type,\n        params,\n        maxDepth - 1,\n        context,\n        options,\n      )\n      if (initialFieldValue !== undefined && initialFieldValue !== null) {\n        fieldValues[field.name] = initialFieldValue\n      }\n    }),\n  )\n\n  const merged = deepAssign(fieldValues, initialObject)\n\n  if (isDeepEmpty(merged)) {\n    return undefined\n  }\n\n  if (type.name !== 'object') {\n    merged._type = type.name\n  }\n\n  return merged\n}\n\n/**\n * Schedule the provided callback using `scheduler.postTask`, if it's available.\n * Otherwise, call it immediately.\n */\nfunction postTask<Result>(\n  callback: () => Result,\n  options: PostTaskOptions = {},\n): Result | Promise<Result> {\n  if ('scheduler' in window && typeof window.scheduler?.postTask === 'function') {\n    return window.scheduler.postTask(callback, options)\n  }\n  return callback()\n}\n","import {type Schema, type SchemaType} from '@sanity/types'\n\nimport {isBuilder} from './resolve'\nimport {type Template} from './types'\nimport {validateTemplates} from './validate'\n\nfunction maybeSerialize(template: Template) {\n  return isBuilder(template) ? template.serialize() : template\n}\n\nfunction isNonNullable<T>(t: T): t is NonNullable<T> {\n  return !!t\n}\n\n/** @internal */\nexport function prepareTemplates(schema: Schema, initialValueTemplates: Template[]): Template[] {\n  const serialized = initialValueTemplates.map(maybeSerialize)\n  return validateTemplates(schema, serialized)\n}\n\n/** @internal */\nexport function defaultTemplateForType(schemaType: SchemaType): Template {\n  return {\n    id: schemaType.name,\n    schemaType: schemaType.name,\n    title: schemaType.title || schemaType.name,\n    icon: schemaType.icon,\n    value: schemaType.initialValue || {_type: schemaType.name},\n  }\n}\n\n/** @internal */\nexport function defaultTemplatesForSchema(schema: Schema): Template[] {\n  const schemaTypes = schema\n    .getTypeNames()\n    .filter((typeName) => !/^sanity\\./.test(typeName))\n    .map((typeName) => schema.get(typeName))\n    .filter(isNonNullable)\n    .filter((schemaType) => schemaType.type?.name === 'document')\n\n  return prepareTemplates(\n    schema,\n    schemaTypes.map((schemaType) => defaultTemplateForType(schemaType)),\n  )\n}\n","import {type InitialValueResolverContext, type Schema} from '@sanity/types'\nimport {from, merge, type Observable, of} from 'rxjs'\nimport {\n  catchError,\n  debounceTime,\n  distinctUntilChanged,\n  filter,\n  map,\n  scan,\n  startWith,\n  switchMap,\n} from 'rxjs/operators'\n\nimport {type DocumentPreviewStore} from '../../../../preview'\nimport {resolveInitialValue, type Template} from '../../../../templates'\nimport {getDraftId, getPublishedId} from '../../../../util'\nimport {\n  type InitialValueErrorMsg,\n  type InitialValueLoadingMsg,\n  type InitialValueMsg,\n  type InitialValueSuccessMsg,\n} from './types'\n\n/**\n * @hidden\n * @beta */\nexport interface InitialValueOptions {\n  documentId: string\n  documentType: string\n  templateName?: string\n  templateParams?: Record<string, any>\n}\n\nconst LOADING_MSG: InitialValueLoadingMsg = {type: 'loading'}\n\n/**\n * @internal\n */\nexport function getInitialValueStream(\n  schema: Schema,\n  initialValueTemplates: Template[],\n  documentPreviewStore: DocumentPreviewStore,\n  opts: InitialValueOptions,\n  context: InitialValueResolverContext,\n): Observable<InitialValueMsg> {\n  const draft$ = documentPreviewStore.observePaths(\n    {_type: 'reference', _ref: getDraftId(opts.documentId)},\n    ['_type'],\n  )\n\n  const published$ = documentPreviewStore.observePaths(\n    {_type: 'reference', _ref: getPublishedId(opts.documentId)},\n    ['_type'],\n  )\n\n  const value$ = merge(\n    draft$.pipe(map((draft) => ({draft}))),\n    published$.pipe(map((published) => ({published}))),\n  ).pipe(\n    scan((prev, res) => ({...prev, ...res}), {}),\n    // Wait until we know the state of both draft and published\n    filter((res) => 'draft' in res && 'published' in res),\n    map((res: any) => res.draft || res.published),\n    // Only update if we didn't previously have a document but we now do\n    distinctUntilChanged((prev, next) => Boolean(prev) !== Boolean(next)),\n    // Prevent rapid re-resolving when transitioning between different templates\n    debounceTime(25),\n  )\n\n  return value$.pipe(\n    switchMap((document) => {\n      // Already exists, so no initial value is needed\n      if (document) {\n        return of({type: 'success', value: null})\n      }\n\n      if (!opts.templateName) {\n        // @todo: Make sure this is the correct behavior\n        return of({isResolving: false, initialValue: undefined, type: 'success'})\n      }\n\n      const template = initialValueTemplates.find((t) => t.id === opts.templateName)\n\n      if (!template) {\n        // eslint-disable-next-line no-console\n        console.warn('Template \"%s\" not defined, using empty initial value', opts.templateName)\n        return of({isResolving: false, initialValue: undefined, type: 'success'})\n      }\n\n      const initialValueWithParams$ = from(\n        resolveInitialValue(schema, template, opts.templateParams, context),\n      )\n        .pipe(map((initialValue) => ({isResolving: false, initialValue})))\n        .pipe(\n          catchError((resolveError) => {\n            /* eslint-disable no-console */\n            console.group('Failed to resolve initial value')\n            console.error(resolveError)\n            console.error('Template ID: %s', opts.templateName)\n            console.error('Parameters: %o', opts.templateParams)\n            console.groupEnd()\n            /* eslint-enable no-console */\n\n            const msg: InitialValueErrorMsg = {type: 'error', error: resolveError}\n\n            return of(msg)\n          }),\n        )\n\n      return merge(of({isResolving: true}), initialValueWithParams$).pipe(\n        switchMap(({isResolving, initialValue, resolveError}: any) => {\n          if (resolveError) {\n            return of({type: 'error', message: 'Failed to resolve initial value'})\n          }\n\n          if (isResolving) {\n            return of(LOADING_MSG)\n          }\n\n          const msg: InitialValueSuccessMsg = {type: 'success', value: initialValue}\n\n          return of(msg)\n        }),\n      )\n    }),\n\n    startWith(LOADING_MSG),\n    distinctUntilChanged(),\n  ) as Observable<InitialValueMsg>\n}\n","import {type ClientPerspective, type SanityClient} from '@sanity/client'\nimport {asyncScheduler, defer, merge, type Observable, of, partition, throwError, timer} from 'rxjs'\nimport {filter, mergeMap, share, take, throttleTime} from 'rxjs/operators'\nimport {exhaustMapWithTrailing} from 'rxjs-exhaustmap-with-trailing'\n\nimport {type MutationEvent, type ReconnectEvent, type WelcomeEvent} from './types'\n\n/** @internal */\nexport type ListenQueryParams = Record<string, string | number | boolean | string[]>\n\n/**\n * @hidden\n * @beta */\nexport interface ListenQueryOptions {\n  tag?: string\n  apiVersion?: string\n  perspective?: ClientPerspective\n  throttleTime?: number\n  transitions?: ('update' | 'appear' | 'disappear')[]\n}\n\nconst fetch = (\n  client: SanityClient,\n  query: string,\n  params: ListenQueryParams,\n  options: ListenQueryOptions,\n) =>\n  defer(() =>\n    client.observable.fetch(query, params, {\n      tag: options.tag,\n      filterResponse: true,\n      perspective: options.perspective,\n    }),\n  )\n\nconst listen = (\n  client: SanityClient,\n  query: string,\n  params: ListenQueryParams,\n  options: ListenQueryOptions,\n) =>\n  defer(() =>\n    client.listen(query, params, {\n      events: ['welcome', 'mutation', 'reconnect'],\n      includeResult: false,\n      visibility: 'query',\n      includeAllVersions: true,\n      tag: options.tag,\n    }),\n  ) as Observable<ReconnectEvent | WelcomeEvent | MutationEvent>\n\nfunction isWelcomeEvent(\n  event: MutationEvent | ReconnectEvent | WelcomeEvent,\n): event is WelcomeEvent {\n  return event.type === 'welcome'\n}\n\n/** @internal */\nexport function listenQuery(\n  client: SanityClient,\n  query: string | {fetch: string; listen: string},\n  params: ListenQueryParams = {},\n  options: ListenQueryOptions = {},\n): Observable<any> {\n  const fetchQuery = typeof query === 'string' ? query : query.fetch\n  const listenerQuery = typeof query === 'string' ? query : query.listen\n\n  const events$ = listen(client, listenerQuery, params, options).pipe(\n    mergeMap((ev, i) => {\n      const isFirst = i === 0\n      if (isFirst && !isWelcomeEvent(ev)) {\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\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$, isWelcomeEvent)\n  const isRelevantEvent = (event: MutationEvent | ReconnectEvent | WelcomeEvent): boolean => {\n    if (!options.transitions || event.type !== 'mutation') {\n      return true\n    }\n\n    return options.transitions.includes(event.transition)\n  }\n\n  const doFetch = () => fetch(client, fetchQuery, params, options)\n\n  return merge(\n    welcome$.pipe(take(1)),\n    mutationAndReconnect$.pipe(\n      filter(isRelevantEvent),\n      throttleTime(options.throttleTime || 1000, asyncScheduler, {leading: true, trailing: true}),\n    ),\n  ).pipe(\n    exhaustMapWithTrailing((event) => {\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","import {type SanityClient} from '@sanity/client'\nimport {type Observable, of} from 'rxjs'\n\nimport {getPublishedId} from '../../../util'\n\nexport function resolveTypeForDocument(\n  client: SanityClient,\n  id: string,\n  specifiedType = '*',\n): Observable<string> {\n  // if is resolved document type\n  if (specifiedType && specifiedType !== '*') {\n    return of(specifiedType)\n  }\n\n  const query = '*[sanity::versionOf($publishedId)][0]._type'\n\n  return client.observable.fetch(\n    query,\n    {publishedId: getPublishedId(id)},\n    {\n      tag: 'document.resolve-type',\n    },\n  )\n}\n","import {type SanityClient} from '@sanity/client'\nimport {type InitialValueResolverContext, type Schema} from '@sanity/types'\nimport {type Observable} from 'rxjs'\nimport {filter, map} from 'rxjs/operators'\n\nimport {type SourceClientOptions} from '../../../config'\nimport {type LocaleSource} from '../../../i18n'\nimport {type DocumentPreviewStore} from '../../../preview'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../../studioClient'\nimport {type Template} from '../../../templates'\nimport {getIdPair, isDraftId, isVersionId} from '../../../util'\nimport {type ValidationStatus} from '../../../validation'\nimport {type HistoryStore} from '../history'\nimport {checkoutPair, type DocumentVersionEvent, type Pair} from './document-pair/checkoutPair'\nimport {consistencyStatus} from './document-pair/consistencyStatus'\nimport {documentEvents} from './document-pair/documentEvents'\nimport {editOperations} from './document-pair/editOperations'\nimport {editState, type EditStateFor} from './document-pair/editState'\nimport {\n  type OperationError,\n  operationEvents,\n  type OperationSuccess,\n} from './document-pair/operationEvents'\nimport {type OperationsAPI} from './document-pair/operations'\nimport {validation} from './document-pair/validation'\nimport {type DocumentStoreExtraOptions} from './getPairListener'\nimport {getInitialValueStream, type InitialValueMsg, type InitialValueOptions} from './initialValue'\nimport {listenQuery, type ListenQueryOptions} from './listenQuery'\nimport {resolveTypeForDocument} from './resolveTypeForDocument'\nimport {type IdPair} from './types'\n\n/**\n * @hidden\n * @beta */\nexport type QueryParams = Record<string, string | number | boolean | string[]>\n\nfunction getIdPairFromPublished(publishedId: string, version?: string): IdPair {\n  if (version === 'published' || version === 'drafts') {\n    throw new Error('Version Id cannot be \"published\" or \"drafts\"')\n  }\n  if (isVersionId(publishedId)) {\n    throw new Error('editOpsOf does not expect a version id.')\n  }\n  if (isDraftId(publishedId)) {\n    throw new Error('editOpsOf does not expect a draft id.')\n  }\n\n  return getIdPair(publishedId, {version})\n}\n\n/**\n * @hidden\n * @beta */\nexport interface DocumentStore {\n  /**\n   * Checks out a document (with its published and draft version) for real-time editing.\n   * Note that every call to this function will open a new listener to the server.\n   * It's recommended to use the helper functions on `pair` below which will re-use a single connection.\n   *\n   * @internal\n   **/\n  checkoutPair: (idPair: IdPair) => Pair\n  initialValue: (\n    opts: InitialValueOptions,\n    context: InitialValueResolverContext,\n  ) => Observable<InitialValueMsg>\n  listenQuery: (\n    query: string | {fetch: string; listen: string},\n    params: QueryParams,\n    options: ListenQueryOptions,\n  ) => Observable<any>\n  resolveTypeForDocument: (id: string, specifiedType?: string) => Observable<string>\n\n  pair: {\n    consistencyStatus: (publishedId: string, type: string, version?: string) => Observable<boolean>\n    /** @internal */\n    documentEvents: (\n      publishedId: string,\n      type: string,\n      version?: string,\n    ) => Observable<DocumentVersionEvent>\n    /** @internal */\n    editOperations: (\n      publishedId: string,\n      type: string,\n      version?: string,\n    ) => Observable<OperationsAPI>\n    editState: (publishedId: string, type: string, version?: string) => Observable<EditStateFor>\n    operationEvents: (\n      publishedId: string,\n      type: string,\n    ) => Observable<OperationSuccess | OperationError>\n    validation: (\n      publishedId: string,\n      type: string,\n      version?: string,\n    ) => Observable<ValidationStatus>\n  }\n}\n\n/** @internal */\nexport interface DocumentStoreOptions {\n  getClient: (options: SourceClientOptions) => SanityClient\n  documentPreviewStore: DocumentPreviewStore\n  historyStore: HistoryStore\n  schema: Schema\n  initialValueTemplates: Template[]\n  i18n: LocaleSource\n  serverActionsEnabled: Observable<boolean>\n  extraOptions?: DocumentStoreExtraOptions\n}\n\n/** @internal */\nexport function createDocumentStore({\n  getClient,\n  documentPreviewStore,\n  historyStore,\n  initialValueTemplates,\n  schema,\n  i18n,\n  serverActionsEnabled,\n  extraOptions = {},\n}: DocumentStoreOptions): DocumentStore {\n  const observeDocumentPairAvailability =\n    documentPreviewStore.unstable_observeDocumentPairAvailability\n\n  // Note that we're both passing a shared `client` here which is used by the\n  // internal operations, and a `getClient` method that we expose to user-land\n  // for things like validations\n  const client = getClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n\n  const {onReportLatency, onSyncErrorRecovery} = extraOptions\n  const ctx = {\n    client,\n    getClient,\n    observeDocumentPairAvailability,\n    historyStore,\n    schema,\n    i18n,\n    serverActionsEnabled,\n    extraOptions,\n  }\n\n  return {\n    // Public API\n    checkoutPair(idPair) {\n      return checkoutPair(client, idPair, serverActionsEnabled, {\n        onSyncErrorRecovery,\n        onReportLatency,\n      })\n    },\n    initialValue(opts, context) {\n      return getInitialValueStream(\n        schema,\n        initialValueTemplates,\n        documentPreviewStore,\n        opts,\n        context,\n      )\n    },\n    listenQuery(query, params, listenQueryOptions) {\n      return listenQuery(client, query, params, listenQueryOptions)\n    },\n    resolveTypeForDocument(id, specifiedType) {\n      return resolveTypeForDocument(client, id, specifiedType)\n    },\n    pair: {\n      consistencyStatus(publishedId, type, version) {\n        return consistencyStatus(\n          ctx.client,\n          getIdPairFromPublished(publishedId, version),\n          type,\n          serverActionsEnabled,\n          extraOptions,\n        )\n      },\n      documentEvents(publishedId, type, version) {\n        return documentEvents(\n          ctx.client,\n          getIdPairFromPublished(publishedId, version),\n          type,\n          serverActionsEnabled,\n          extraOptions,\n        )\n      },\n      editOperations(publishedId, type, version) {\n        return editOperations(ctx, getIdPairFromPublished(publishedId, version), type)\n      },\n      editState(publishedId, type, version) {\n        const idPair = getIdPairFromPublished(publishedId, version)\n\n        const edit = editState(ctx, idPair, type)\n        return edit\n      },\n      operationEvents(publishedId, type) {\n        return operationEvents({\n          client,\n          historyStore,\n          schema,\n          serverActionsEnabled,\n          extraOptions,\n        }).pipe(\n          filter(\n            (result) =>\n              result.args.idPair.publishedId === publishedId && result.args.typeName === type,\n          ),\n          map((result): OperationSuccess | OperationError => {\n            const {operationName, idPair: documentIds} = result.args\n            return result.type === 'success'\n              ? {type: 'success', op: operationName, id: documentIds.publishedId}\n              : {type: 'error', op: operationName, id: documentIds.publishedId, error: result.error}\n          }),\n        )\n      },\n      validation(publishedId, type, version) {\n        const idPair = getIdPairFromPublished(publishedId, version)\n        return validation(ctx, idPair, type)\n      },\n    },\n  }\n}\n","import {useEffect, useMemo, useState} from 'react'\n\nimport {getPublishedId} from '../../../../util'\nimport {useDocumentStore} from '../../datastores'\n\n/** @internal */\nexport interface DocumentTypeResolveState {\n  isLoaded: boolean\n  documentType: string | undefined\n}\n\nconst LOADING_STATE: DocumentTypeResolveState = {\n  isLoaded: false,\n  documentType: undefined,\n}\n\n/** @internal */\nexport function useDocumentType(documentId: string, specifiedType = '*'): DocumentTypeResolveState {\n  const documentStore = useDocumentStore()\n  const publishedId = getPublishedId(documentId)\n  const isResolved = Boolean(specifiedType && specifiedType !== '*')\n\n  // Memoize what a synchronously resolved state looks like (eg specified type is present),\n  // in order to return the same object each time. Note that this can be \"incorrect\", but\n  // that we won't be returning it in that case, eg: `{documentType: '*', isResolved: true}\n  const SYNC_RESOLVED_STATE = useMemo(\n    () => ({documentType: specifiedType, isLoaded: true}),\n    [specifiedType],\n  )\n\n  // Set up our state that we'll only use when we need to reach out to the API to find\n  // the document type for a given document. Otherwise we'll be using SYNC_RESOLVED_STATE.\n  // For consistency (between different document ids/types), we're setting the sync resolved\n  // state here as well, but it isn't strictly necessary for correct rendering.\n  const [resolvedState, setDocumentType] = useState<DocumentTypeResolveState>(\n    isResolved ? SYNC_RESOLVED_STATE : LOADING_STATE,\n  )\n\n  // Reset documentType when documentId changes. Note that we're using the referentially\n  // stable LOADING_STATE in order to prevent double rendering on initial load.\n  useEffect(() => setDocumentType(LOADING_STATE), [publishedId, specifiedType])\n\n  // Load the documentType from Content Lake, unless we're already in a resolved state\n  useEffect(() => {\n    if (isResolved) {\n      return undefined\n    }\n\n    const sub = documentStore\n      .resolveTypeForDocument(publishedId, specifiedType)\n      .subscribe((documentType: string) => setDocumentType({documentType, isLoaded: true}))\n\n    return () => sub.unsubscribe()\n  }, [documentStore, publishedId, specifiedType, isResolved])\n\n  return isResolved\n    ? // `isResolved` is only true when we're _synchronously_ resolved\n      SYNC_RESOLVED_STATE\n    : // Using the document type resolved from the API\n      resolvedState\n}\n","import {useMemo} from 'react'\nimport {type Observable, of} from 'rxjs'\n\nimport {type LoadableState, useLoadable} from '../../../../util'\nimport {useDocumentPreviewStore} from '../../datastores'\n\n/** @internal */\nexport function useDocumentValues<T = Record<string, unknown>>(\n  documentId: string,\n  paths: string[],\n): LoadableState<T | undefined> {\n  const documentPreviewStore = useDocumentPreviewStore()\n\n  const documentValues$ = useMemo(\n    () =>\n      documentId\n        ? (documentPreviewStore.observePaths(\n            {_type: 'reference', _ref: documentId},\n            paths,\n          ) as Observable<T>)\n        : of(undefined),\n    [documentId, documentPreviewStore, paths],\n  )\n\n  return useLoadable(documentValues$)\n}\n","import {type CurrentUser, type User} from '@sanity/types'\nimport {useMemo} from 'react'\nimport {from} from 'rxjs'\n\nimport {useSource} from '../../studio'\nimport {createHookFromObservableFactory, type LoadingTuple} from '../../util'\nimport {type UserStore, useUserStore} from '../_legacy'\n\nconst useUserViaUserStore = createHookFromObservableFactory(\n  ([userStore, userId]: [UserStore, string]) => {\n    return from(\n      userStore.getUser(userId).catch((err) => {\n        console.error(err)\n        return null\n      }),\n    )\n  },\n)\n\n/** @internal */\nexport function useUser(userId: string): LoadingTuple<User | null | undefined> {\n  const userStore = useUserStore()\n  return useUserViaUserStore(useMemo(() => [userStore, userId], [userId, userStore]))\n}\n\n/**\n * Retrieves information about the currently authenticated user.\n *\n * @returns The current user or null if not available.\n *\n * @public\n *\n * @example\n * ```ts\n * const currentUser = useCurrentUser()\n *\n * if (currentUser) {\n *  console.log('Logged in as', currentUser.name)\n * }\n * ```\n */\nexport function useCurrentUser(): CurrentUser | null {\n  const {currentUser} = useSource()\n  return currentUser\n}\n","import {type InitialValueResolverContext, type SanityDocumentLike} from '@sanity/types'\nimport {useEffect, useMemo, useState} from 'react'\n\nimport {useDataset, useProjectId, useSchema} from '../../../hooks'\nimport {useSource} from '../../../studio'\nimport {getVersionId, useUnique} from '../../../util'\nimport {useCurrentUser} from '../../user'\nimport {useDocumentStore} from '../datastores'\nimport {type InitialValueState} from './initialValue/types'\n\n/**\n * @internal\n */\nexport function useInitialValue(props: {\n  documentId: string\n  documentType: string\n  templateName?: string\n  templateParams?: Record<string, unknown>\n  version?: string\n}): InitialValueState {\n  const {documentId, documentType, templateName, templateParams: templateParamsRaw, version} = props\n  const templateParams = useUnique(templateParamsRaw)\n  const documentStore = useDocumentStore()\n  const context = useInitialValueResolverContext()\n\n  const defaultValue: SanityDocumentLike = useMemo(\n    () => ({\n      _id: version ? getVersionId(documentId, version) : documentId,\n      _type: documentType,\n    }),\n    [documentId, documentType, version],\n  )\n\n  const [state, setState] = useState<InitialValueState>({\n    loading: false,\n    error: null,\n    value: defaultValue,\n  })\n\n  useEffect(() => {\n    const initialValueOptions = {documentId, documentType, templateName, templateParams}\n    const initialValueMsg$ = documentStore.initialValue(initialValueOptions, context)\n\n    const sub = initialValueMsg$.subscribe((msg) => {\n      if (msg.type === 'loading') {\n        setState({loading: true, error: null, value: defaultValue})\n      }\n\n      if (msg.type === 'success') {\n        setState({\n          loading: false,\n          error: null,\n          value: msg.value ? {...defaultValue, ...msg.value} : defaultValue,\n        })\n      }\n\n      if (msg.type === 'error') {\n        setState({loading: false, error: msg.error, value: defaultValue})\n      }\n    })\n\n    setState({loading: true, error: null, value: defaultValue})\n\n    return () => sub.unsubscribe()\n  }, [defaultValue, documentId, documentStore, documentType, templateName, templateParams, context])\n\n  return state\n}\n\n/**\n * @internal\n */\nexport function useInitialValueResolverContext(): InitialValueResolverContext {\n  const source = useSource()\n  const schema = useSchema()\n  const currentUser = useCurrentUser()\n  const projectId = useProjectId()\n  const dataset = useDataset()\n  const getClient = source.getClient\n\n  return useMemo(() => {\n    return {\n      projectId,\n      dataset,\n      getClient,\n      schema,\n      currentUser,\n    }\n  }, [getClient, schema, currentUser, projectId, dataset])\n}\n","import {type SchemaType} from '@sanity/types'\nimport {useCallback} from 'react'\n\nimport {DEFAULT_MAX_RECURSION_DEPTH, resolveInitialValueForType} from '../../../templates'\nimport {useInitialValueResolverContext} from './useInitialValue'\n\n/** @internal */\nexport function useResolveInitialValueForType<Params extends Record<string, unknown>>(): (\n  /**\n   * This is the name of the document.\n   */\n  type: SchemaType,\n  /**\n   * Params is a sanity context object passed to every initial value function.\n   */\n  params: Params,\n) => Promise<any> {\n  const initialValueContext = useInitialValueResolverContext()\n\n  return useCallback(\n    (type: SchemaType, params: Params) => {\n      return resolveInitialValueForType(\n        type,\n        params,\n        DEFAULT_MAX_RECURSION_DEPTH,\n        initialValueContext,\n      )\n    },\n    [initialValueContext],\n  )\n}\n","import {type SanityClient} from '@sanity/client'\nimport {map, type Observable, of, type OperatorFunction, ReplaySubject, timeout, timer} from 'rxjs'\nimport {catchError, concatMap, share} from 'rxjs/operators'\nimport {satisfies} from 'semver'\n\nimport {SANITY_VERSION} from '../../../../../version'\n\nexport interface ActionsFeatureToggle {\n  enabled: boolean\n  compatibleStudioVersions: string\n}\n\nconst CACHE = new WeakMap<SanityClient, Observable<boolean>>()\n\n// How often to refresh the feature toggle\nconst REFRESH_INTERVAL = 1000 * 120\n\n// Timer used to reset the observable when it completes or it's refcount drops to zero\nconst RESET_TIMER = timer(REFRESH_INTERVAL)\n\nfunction createFeatureToggle(client: SanityClient) {\n  const {dataset} = client.config()\n\n  return timer(0, REFRESH_INTERVAL).pipe(\n    concatMap(() =>\n      client.observable\n        .request({\n          uri: `/data/actions/${dataset}`,\n        })\n        .pipe(\n          mapResponse(),\n          timeout({first: 2000, with: () => of(false)}),\n          catchError(() =>\n            // If we fail to fetch the feature toggle, we'll just assume it's disabled and fallback to legacy mutations\n            of(false),\n          ),\n        ),\n    ),\n    share({\n      // replay latest known state to new subscribers\n      connector: () => new ReplaySubject(1),\n      // this will typically be completed and unsubscribed from right after the answer is received, so we don't want to reset\n      resetOnComplete: () => RESET_TIMER,\n      // keep it alive for some time after the last subscriber unsubscribes\n      resetOnRefCountZero: () => RESET_TIMER,\n    }),\n  )\n}\n\nexport function mapResponse(): OperatorFunction<ActionsFeatureToggle, boolean> {\n  return map<ActionsFeatureToggle, boolean>(\n    (res) =>\n      res.enabled &&\n      satisfies(SANITY_VERSION, res.compatibleStudioVersions, {\n        includePrerelease: true,\n      }),\n  )\n}\n\nexport const fetchFeatureToggle = (client: SanityClient): Observable<boolean> => {\n  if (!CACHE.has(client)) {\n    CACHE.set(client, createFeatureToggle(client))\n  }\n  return CACHE.get(client)!\n}\n","import {type SanityClient} from '@sanity/client'\nimport {type SanityDocument, type Schema, type SchemaType} from '@sanity/types'\nimport {useMemo} from 'react'\nimport {combineLatest, type Observable, of} from 'rxjs'\nimport {map, switchMap} from 'rxjs/operators'\n\nimport {useClient, useSchema} from '../../../hooks'\nimport {useWorkspace} from '../../../studio'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../../studioClient'\nimport {\n  createHookFromObservableFactory,\n  getDraftId,\n  getIdPair,\n  getPublishedId,\n  type PartialExcept,\n} from '../../../util'\nimport {useGrantsStore} from '../datastores'\nimport {type DocumentStoreExtraOptions, snapshotPair} from '../document'\nimport {fetchFeatureToggle} from '../document/document-pair/utils/fetchFeatureToggle'\nimport {type GrantsStore, type PermissionCheckResult} from './types'\n\nfunction getSchemaType(schema: Schema, typeName: string): SchemaType {\n  const type = schema.get(typeName)\n\n  if (!type) {\n    throw new Error(`No such schema type: ${typeName}`)\n  }\n\n  return type\n}\n\ninterface PairPermissionsOptions {\n  grantsStore: GrantsStore\n  permission: DocumentPermission\n  draft: SanityDocument | null\n  version: SanityDocument | null\n  published: SanityDocument | null\n  liveEdit: boolean\n}\n\nfunction getPairPermissions({\n  grantsStore,\n  permission,\n  draft,\n  version,\n  published,\n  liveEdit,\n}: PairPermissionsOptions): Array<[string, Observable<PermissionCheckResult>]> {\n  // this was introduced because we ran into a bug where a user with publish\n  // access was marked as not allowed to duplicate a document unless it had a\n  // draft variant. this would happen in non-live edit cases where the document\n  // pair only had a published variant with the draft variant being null.\n  //\n  // note: this should _not_ be used if the draft and published versions should\n  // be considered separately/explicitly in the permissions.\n  const effectiveVersion = version || draft || published\n  const effectiveVersionType =\n    // eslint-disable-next-line no-nested-ternary\n    effectiveVersion === version ? version : effectiveVersion === draft ? 'draft' : 'published'\n\n  const {checkDocumentPermission} = grantsStore\n\n  switch (permission) {\n    case 'delete': {\n      if (liveEdit) {\n        return [\n          ['delete published document (live-edit)', checkDocumentPermission('update', published)],\n        ]\n      }\n\n      return [\n        ['delete draft document', checkDocumentPermission('update', draft)],\n        ['delete published document', checkDocumentPermission('update', published)],\n      ]\n    }\n\n    case 'discardDraft': {\n      if (liveEdit) return []\n\n      return [['delete draft document', checkDocumentPermission('update', draft)]]\n    }\n\n    case 'discardVersion': {\n      if (liveEdit) return []\n\n      return [['delete version', checkDocumentPermission('update', version || null)]]\n    }\n\n    case 'publish': {\n      if (liveEdit) return []\n\n      return [\n        // precondition\n        [\n          'update published document at its current state',\n          checkDocumentPermission('update', published),\n        ],\n\n        // post condition\n        ['delete draft document', checkDocumentPermission('update', draft)],\n        [\n          'create published document from draft',\n          checkDocumentPermission('create', draft && {...draft, _id: getPublishedId(draft._id)}),\n        ],\n      ]\n    }\n\n    case 'unpublish': {\n      if (liveEdit) return []\n\n      return [\n        // precondition\n        ['update draft document at its current state', checkDocumentPermission('create', draft)],\n\n        // post condition\n        ['delete published document', checkDocumentPermission('update', published)],\n        [\n          'create draft document from published version',\n          checkDocumentPermission(\n            'create',\n            published && {...published, _id: getDraftId(published._id)},\n          ),\n        ],\n      ]\n    }\n\n    case 'update': {\n      if (liveEdit) {\n        return [\n          ['update published document (live-edit)', checkDocumentPermission('update', published)],\n        ]\n      }\n\n      return [\n        [\n          `update ${effectiveVersionType} document`,\n          checkDocumentPermission('update', effectiveVersion),\n        ],\n      ]\n    }\n\n    case 'duplicate': {\n      if (liveEdit) {\n        return [\n          [\n            'create new published document from existing document (live-edit)',\n            checkDocumentPermission('create', {...published, _id: 'dummy-id'}),\n          ],\n        ]\n      }\n\n      return [\n        [\n          `create new draft document from existing ${effectiveVersionType} document`,\n          checkDocumentPermission('create', {...effectiveVersion, _id: getDraftId('dummy-id')}),\n        ],\n      ]\n    }\n\n    default: {\n      throw new Error(`Could not match permission: ${permission}`)\n    }\n  }\n}\n\n/** @internal */\nexport type DocumentPermission =\n  | 'delete'\n  | 'discardDraft'\n  | 'discardVersion'\n  | 'publish'\n  | 'unpublish'\n  | 'update'\n  | 'duplicate'\n\n/** @internal */\nexport interface DocumentPairPermissionsOptions {\n  client: SanityClient\n  schema: Schema\n  grantsStore: GrantsStore\n  id: string\n  type: string\n  version?: string\n  permission: DocumentPermission\n  serverActionsEnabled: Observable<boolean>\n  pairListenerOptions?: DocumentStoreExtraOptions\n}\n\n/**\n * The observable version of `useDocumentPairPermissions`\n *\n * @see useDocumentPairPermissions\n *\n * @internal\n */\nexport function getDocumentPairPermissions({\n  client,\n  grantsStore,\n  schema,\n  id,\n  permission,\n  type,\n  serverActionsEnabled,\n  version: v,\n  pairListenerOptions,\n}: DocumentPairPermissionsOptions): Observable<PermissionCheckResult> {\n  // this case was added to fix a crash that would occur if the `schemaType` was\n  // omitted from `S.documentList()`\n  //\n  // see `resolveTypeForDocument` which returns `'*'` if no type is provided\n  // https://github.com/sanity-io/sanity/blob/4d49b83a987d5097064d567f75d21b268a410cbf/packages/%40sanity/base/src/datastores/document/resolveTypeForDocument.ts#L7\n  if (type === '*') {\n    return of({granted: false, reason: 'Type specified was `*`'})\n  }\n\n  const liveEdit = Boolean(getSchemaType(schema, type).liveEdit)\n\n  return snapshotPair(\n    client,\n    getIdPair(id, {version: v}),\n    type,\n    serverActionsEnabled,\n    pairListenerOptions,\n  ).pipe(\n    switchMap((pair) =>\n      combineLatest([\n        pair.draft.snapshots$,\n        pair.published.snapshots$,\n        pair.version?.snapshots$ || of(null),\n      ]).pipe(map(([draft, published, version]) => ({draft, published, version}))),\n    ),\n    switchMap(({draft, published, version}) => {\n      const pairPermissions = getPairPermissions({\n        grantsStore,\n        permission,\n        draft,\n        version,\n        published,\n        liveEdit,\n      }).map(([label, observable]) =>\n        observable.pipe(\n          map(({granted, reason}) => ({\n            granted,\n            reason: granted ? '' : `not allowed to ${label}: ${reason}`,\n            label,\n            permission,\n          })),\n        ),\n      )\n\n      if (!pairPermissions.length) return of({granted: true, reason: ''})\n\n      return combineLatest(pairPermissions).pipe(\n        map((permissionResults) => {\n          const granted = permissionResults.every((permissionResult) => permissionResult.granted)\n          const reason = granted\n            ? ''\n            : `Unable to ${permission}:\\n\\t${permissionResults\n                .filter((permissionResult) => !permissionResult.granted)\n                .map((permissionResult) => permissionResult.reason)\n                .join('\\n\\t')}`\n\n          return {granted, reason}\n        }),\n      )\n    }),\n  )\n}\n\n/**\n * Gets document pair permissions based on a document ID and a type.\n *\n * This permissions API is a high-level permissions API that is draft-model\n * aware. In order to determine whether or not the user has the given\n * permission, both the draft and published documents are pulled and run through\n * all of the user's grants. If any pre or post conditions fail a permissions\n * checks, the operations will not be granted.\n *\n * The operations this hook accepts are only relevant to document pairs. E.g.\n * `'create'` is not included as an operation because it's not possible to tell\n * if a document can be created by only using the initial ID and type because an\n * initial template value may not have a matching grant (e.g. locked-document\n * pattern `!locked`). In contrast, the operation `'duplicate'` is supported\n * because the draft value of the document can be live queried and checked for\n * matching grants.\n *\n * Note: for live-edit documents, non-applicable operations (e.g. publish) will\n * return as true.\n *\n * @see useDocumentValuePermissions\n *\n * @internal\n */\nexport const useDocumentPairPermissionsFromHookFactory = createHookFromObservableFactory(\n  getDocumentPairPermissions,\n)\n\n/** @internal */\nexport function useDocumentPairPermissions({\n  id,\n  type,\n  version,\n  permission,\n  client: overrideClient,\n  schema: overrideSchema,\n  grantsStore: overrideGrantsStore,\n  pairListenerOptions,\n}: PartialExcept<DocumentPairPermissionsOptions, 'id' | 'type' | 'permission'>): ReturnType<\n  typeof useDocumentPairPermissionsFromHookFactory\n> {\n  const defaultClient = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n  const defaultSchema = useSchema()\n  const defaultGrantsStore = useGrantsStore()\n  const workspace = useWorkspace()\n\n  const client = useMemo(() => overrideClient || defaultClient, [defaultClient, overrideClient])\n  const schema = useMemo(() => overrideSchema || defaultSchema, [defaultSchema, overrideSchema])\n  const grantsStore = useMemo(\n    () => overrideGrantsStore || defaultGrantsStore,\n    [defaultGrantsStore, overrideGrantsStore],\n  )\n\n  const serverActionsEnabled = useMemo(() => {\n    const configFlag = workspace.__internal_serverDocumentActions?.enabled\n    // If it's explicitly set, let it override the feature toggle\n    return typeof configFlag === 'boolean' ? of(configFlag as boolean) : fetchFeatureToggle(client)\n  }, [client, workspace.__internal_serverDocumentActions?.enabled])\n\n  return useDocumentPairPermissionsFromHookFactory(\n    useMemo(\n      () => ({\n        client,\n        schema,\n        grantsStore,\n        id,\n        permission,\n        type,\n        serverActionsEnabled,\n        pairListenerOptions,\n        version,\n      }),\n      [\n        client,\n        schema,\n        grantsStore,\n        id,\n        permission,\n        type,\n        serverActionsEnabled,\n        pairListenerOptions,\n        version,\n      ],\n    ),\n  )\n}\n","import {type SanityClient} from '@sanity/client'\nimport {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {type Observable, of} from 'rxjs'\nimport {catchError, map, shareReplay, startWith} from 'rxjs/operators'\n\nimport {useSource} from '../studio'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../studioClient'\nimport {useClient} from './useClient'\n\nconst EMPTY_ARRAY: [] = []\n\ninterface Features {\n  enabled: boolean\n  error: Error | null\n  features: string[]\n  isLoading: boolean\n}\n\nconst INITIAL_LOADING_STATE: Features = {\n  enabled: true,\n  error: null,\n  features: EMPTY_ARRAY,\n  isLoading: true,\n}\n\n/**\n * fetches all the enabled features for this project\n */\nfunction fetchFeatures({versionedClient}: {versionedClient: SanityClient}): Observable<string[]> {\n  return versionedClient.observable.request<string[]>({\n    uri: `/features`,\n    tag: 'features',\n  })\n}\n\nconst cachedFeatureRequest = new Map<string, Observable<string[]>>()\n\n/** @internal */\nexport function useFeatureEnabled(featureKey: string): Features {\n  const versionedClient = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n  const {projectId} = useSource()\n\n  if (!cachedFeatureRequest.get(projectId)) {\n    const features = fetchFeatures({versionedClient}).pipe(shareReplay())\n    cachedFeatureRequest.set(projectId, features)\n  }\n\n  const featureInfoObservable = useMemo(\n    () =>\n      (cachedFeatureRequest.get(projectId) || of(EMPTY_ARRAY)).pipe(\n        map((features = []) => ({\n          isLoading: false,\n          enabled: Boolean(features?.includes(featureKey)),\n          features,\n          error: null,\n        })),\n        startWith(INITIAL_LOADING_STATE),\n        catchError((error: Error) => {\n          return of({isLoading: false, enabled: false, features: EMPTY_ARRAY, error})\n        }),\n      ),\n    [featureKey, projectId],\n  )\n  const featureInfo = useObservable(featureInfoObservable, INITIAL_LOADING_STATE)\n\n  return featureInfo\n}\n","interface MultiKeyWeakMapNode {\n  type: 'multi-key-weak-map-node'\n  value: unknown\n  next: WeakMap<object, MultiKeyWeakMapNode>\n}\n\nexport interface MultiKeyWeakMap {\n  get<T>(keys: object[]): T | undefined\n  get(keys: object[]): unknown\n\n  set(keys: object[], value: unknown): void\n}\n\nexport function createMultiKeyWeakMap(): MultiKeyWeakMap {\n  const rootMap = new WeakMap<object, MultiKeyWeakMapNode>()\n  const idCache = new WeakMap<object, string>()\n\n  function randomId() {\n    return Array.from({length: 10})\n      .map(() =>\n        Math.floor(Math.random() * 255)\n          .toString(16)\n          .padStart(2, '0'),\n      )\n      .join('')\n  }\n\n  function assignId(key: object) {\n    const cachedId = idCache.get(key)\n    if (cachedId) return cachedId\n    const id = randomId()\n    idCache.set(key, id)\n    return id\n  }\n\n  function arrangeKeys(keys: object[]) {\n    return Array.from(new Set(keys))\n      .map((key) => [assignId(key), key] as const)\n      .sort(([a], [b]) => a.localeCompare(b, 'en'))\n      .map(([, key]) => key)\n  }\n\n  function getDeep(keys: object[], map: WeakMap<object, MultiKeyWeakMapNode>): unknown {\n    if (!keys.length) return undefined\n    const [firstKey, ...restOfKeys] = keys\n    const node = map.get(firstKey)\n\n    if (!node) return undefined\n    if (!restOfKeys.length) return node.value\n    return getDeep(restOfKeys, node.next)\n  }\n\n  function setDeep(\n    keys: object[],\n    map: WeakMap<object, MultiKeyWeakMapNode>,\n    value: unknown,\n  ): void {\n    if (!keys.length) return\n\n    const [firstKey, ...restOfKeys] = keys\n    const node = map.get(firstKey) || {\n      type: 'multi-key-weak-map-node',\n      value: undefined,\n      next: new WeakMap(),\n    }\n    map.set(firstKey, node)\n\n    if (!restOfKeys.length) {\n      node.value = value\n      return\n    }\n\n    setDeep(restOfKeys, node.next, value)\n  }\n\n  function get<T>(keys: object[]): T | undefined\n  function get(keys: object[]) {\n    return getDeep(arrangeKeys(keys), rootMap)\n  }\n\n  function set(keys: object[], value: unknown) {\n    setDeep(arrangeKeys(keys), rootMap, value)\n  }\n\n  return {get, set}\n}\n","import {type ReactNode, useContext, useState} from 'react'\nimport {ResourceCacheContext} from 'sanity/_singletons'\n\nimport {createMultiKeyWeakMap, type MultiKeyWeakMap} from './createMultiKeyWeakMap'\n\n/** @internal */\nexport interface ResourceCache {\n  get<T = unknown>(options: {namespace: string; dependencies: (object | null)[]}): T | undefined\n  set(options: {namespace: string; dependencies: (object | null)[]; value: unknown}): void\n}\n\n/** @internal */\nexport interface ResourceCacheProviderProps {\n  children: ReactNode\n}\n\n/** @internal */\nexport function ResourceCacheProvider({children}: ResourceCacheProviderProps) {\n  const [resourceCache] = useState((): ResourceCache => {\n    const namespaces = new Map<string, MultiKeyWeakMap>()\n\n    // this is used to replace the `null` values in any `dependencies` so that\n    // they can be used in the `MultiKeyWeakMap` which doesn't accept null\n    const nullReplacer = {}\n    // this is used to replace `[]` dependencies to maintain the\n    // same referential integrity in the weak map lookup\n    const emptyDependenciesReplacer = [nullReplacer]\n\n    const removeNullDependencies = (dependencies: (object | null)[]) =>\n      dependencies.length\n        ? dependencies.map((dep) => (dep === null ? nullReplacer : dep))\n        : emptyDependenciesReplacer\n\n    return {\n      get: ({namespace, dependencies}) => {\n        const dependenciesWithoutNull = removeNullDependencies(dependencies)\n        const namespaceMap = namespaces.get(namespace)\n        return namespaceMap?.get(dependenciesWithoutNull)\n      },\n\n      set: ({namespace, dependencies, value}) => {\n        const namespaceMap = namespaces.get(namespace) || createMultiKeyWeakMap()\n        const dependenciesWithoutNull = removeNullDependencies(dependencies)\n        namespaces.set(namespace, namespaceMap)\n        namespaceMap.set(dependenciesWithoutNull, value)\n      },\n    }\n  })\n\n  return (\n    <ResourceCacheContext.Provider value={resourceCache}>{children}</ResourceCacheContext.Provider>\n  )\n}\n\n/** @internal */\nexport function useResourceCache(): ResourceCache {\n  const cache = useContext(ResourceCacheContext)\n  if (!cache) throw new Error('Could not find `cache` context')\n  return cache\n}\n","import {isErrorWithDetails} from '../../error/types/isErrorWithDetails'\nimport {type useReleasePermissionsValue} from './useReleasePermissions'\n\ntype ReleasePermissionError = {details: {type: 'insufficientPermissionsError'}}\n\n/**\n * Checks if the error is a permission error\n *\n * @param error - the error to check\n * @returns true if the error is a permission error\n */\nexport const isReleasePermissionError = (error: unknown): error is ReleasePermissionError =>\n  isErrorWithDetails(error) && error.details?.type === 'insufficientPermissionsError'\n\n/**\n * Store that contains if the user has permissions to perform a release action\n * And a guardrail to dry run requests to check if the user has permissions\n *\n * @returns an object with the following properties:\n * * checkWithPermissionGuard - a function that checks if the user has permissions to perform a release action by adding dryRun properties\n * * permissions - an object with the permissions for each action\n *\n * @internal\n */\nexport function createReleasePermissionsStore(\n  isContentReleasesEnabled: boolean,\n): useReleasePermissionsValue {\n  let permissions: {[key: string]: boolean} = {}\n\n  /**\n   * Checks if a release action can be performed by running a dry run of the given action\n   *\n   * @param action - any of the actions from the {@link ReleaseOperationStore}, e.g. publishRelease should send in also the needed props\n   * @param args - the arguments to pass to the action (release id, etc)\n   * @returns true or false depending if the user can perform the action\n   */\n  const checkWithPermissionGuard = async <T extends (...args: any[]) => Promise<void> | void>(\n    action: T,\n    ...args: Parameters<T>\n  ): Promise<boolean> => {\n    if (!isContentReleasesEnabled) {\n      /**\n       * When content releases feature flag is disabled\n       * assume allowed permissions to provide upsell\n       */\n      return true\n    }\n\n    if (permissions[action.name] === undefined) {\n      try {\n        await action(...args, {\n          dryRun: true,\n          skipCrossDatasetReferenceValidation: true,\n        })\n        permissions = {...permissions, [action.name]: true}\n\n        return true\n      } catch (e) {\n        permissions = {...permissions, [action.name]: false}\n\n        return !isReleasePermissionError(e)\n      }\n    } else {\n      return permissions[action.name]\n    }\n  }\n  return {\n    checkWithPermissionGuard: checkWithPermissionGuard,\n    permissions,\n  }\n}\n","import {useMemo} from 'react'\n\nimport {useFeatureEnabled} from '../../hooks/useFeatureEnabled'\nimport {useResourceCache} from '../../store/_legacy/ResourceCacheProvider'\nimport {createReleasePermissionsStore} from './createReleasePermissionsStore'\n\nconst RELEASE_PERMISSIONS_RESOURCE_CACHE_NAMESPACE = 'ReleasePermissions'\n\nexport interface useReleasePermissionsValue {\n  checkWithPermissionGuard: <T extends (...args: any[]) => Promise<void> | void>(\n    action: T,\n    ...args: Parameters<T>\n  ) => Promise<boolean>\n  permissions: {[key: string]: boolean}\n}\n\n/**\n * @internal\n */\nexport function useReleasePermissions(): useReleasePermissionsValue {\n  const resourceCache = useResourceCache()\n  const contentReleasesFeature = useFeatureEnabled('contentReleases')\n\n  return useMemo(() => {\n    const releasePermissionsStore =\n      resourceCache.get<useReleasePermissionsValue>({\n        dependencies: [contentReleasesFeature],\n        namespace: RELEASE_PERMISSIONS_RESOURCE_CACHE_NAMESPACE,\n      }) || createReleasePermissionsStore(contentReleasesFeature.enabled)\n\n    resourceCache.set({\n      namespace: RELEASE_PERMISSIONS_RESOURCE_CACHE_NAMESPACE,\n      value: releasePermissionsStore,\n      dependencies: [contentReleasesFeature],\n    })\n\n    return releasePermissionsStore\n  }, [contentReleasesFeature, resourceCache])\n}\n","import {type BadgeTone} from '@sanity/ui'\n\nimport {type SelectedPerspective} from '../../perspective/types'\nimport {isReleaseDocument} from '../store/types'\nimport {RELEASE_TYPES_TONES} from './const'\nimport {isDraftPerspective, isPublishedPerspective} from './util'\n\n/** @internal */\nexport function getReleaseTone(release: SelectedPerspective): BadgeTone {\n  if (isPublishedPerspective(release)) return 'positive'\n  if (isDraftPerspective(release)) return 'default'\n\n  if (isReleaseDocument(release)) {\n    if (release.state === 'archived') {\n      return 'default'\n    }\n\n    if (release?.metadata?.releaseType === 'asap') {\n      return RELEASE_TYPES_TONES.asap.tone\n    }\n\n    if (release?.metadata?.releaseType === 'undecided') {\n      return RELEASE_TYPES_TONES.undecided.tone\n    }\n\n    if (release?.metadata?.releaseType === 'scheduled') {\n      return RELEASE_TYPES_TONES.scheduled.tone\n    }\n  }\n\n  return 'default'\n}\n","import {LockIcon} from '@sanity/icons'\nimport {Flex, Stack, Text} from '@sanity/ui'\nimport {memo} from 'react'\n\nimport {useTranslation} from '../../../../i18n'\nimport {type ReleaseDocument} from '../../../store/types'\nimport {getReleaseTone} from '../../../util/getReleaseTone'\nimport {formatRelativeLocalePublishDate, isReleaseScheduledOrScheduling} from '../../../util/util'\nimport {ReleaseAvatar} from '../../ReleaseAvatar'\n\nexport const VersionContextMenuItem = memo(function VersionContextMenuItem(props: {\n  release: ReleaseDocument\n}) {\n  const {release} = props\n  const {t} = useTranslation()\n  const isScheduled = isReleaseScheduledOrScheduling(release)\n\n  return (\n    <Flex gap={3} justify=\"center\" align=\"center\">\n      <ReleaseAvatar padding={2} tone={getReleaseTone(release)} />\n      <Stack flex={1} space={2}>\n        <Text size={1} weight=\"medium\">\n          {release.metadata?.title || t('release.placeholder-untitled-release')}\n        </Text>\n        <Text muted size={1}>\n          {release.metadata.releaseType === 'asap' && <>{t('release.type.asap')}</>}\n          {release.metadata.releaseType === 'scheduled' &&\n            (release.metadata.intendedPublishAt ? (\n              <>{formatRelativeLocalePublishDate(release)}</>\n            ) : (\n              /** should not be allowed to do, but a fall back in case if somehow no date is added */\n              <>{t('release.chip.tooltip.unknown-date')}</>\n            ))}\n          {release.metadata.releaseType === 'undecided' && <>{t('release.type.undecided')}</>}\n        </Text>\n      </Stack>\n      {isScheduled && <LockIcon />}\n    </Flex>\n  )\n})\n","import {AddIcon, CalendarIcon, CopyIcon, TrashIcon} from '@sanity/icons'\nimport {Menu, MenuDivider, Spinner, Stack} from '@sanity/ui'\nimport {memo, useEffect, useRef, useState} from 'react'\nimport {IntentLink} from 'sanity/router'\nimport {styled} from 'styled-components'\n\nimport {MenuGroup} from '../../../../../ui-components/menuGroup/MenuGroup'\nimport {MenuItem} from '../../../../../ui-components/menuItem/MenuItem'\nimport {useTranslation} from '../../../../i18n/hooks/useTranslation'\nimport {useDocumentPairPermissions} from '../../../../store/_legacy/grants/documentPairPermissions'\nimport {getPublishedId, isPublishedId} from '../../../../util/draftUtils'\nimport {useReleasesUpsell} from '../../../contexts/upsell/useReleasesUpsell'\nimport {type ReleaseDocument} from '../../../store/types'\nimport {useReleaseOperations} from '../../../store/useReleaseOperations'\nimport {useReleasePermissions} from '../../../store/useReleasePermissions'\nimport {getReleaseDefaults, isReleaseScheduledOrScheduling} from '../../../util/util'\nimport {VersionContextMenuItem} from './VersionContextMenuItem'\n\nconst ReleasesList = styled(Stack)`\n  max-width: 300px;\n  max-height: 200px;\n  overflow-y: auto;\n`\n\nexport const VersionContextMenu = memo(function VersionContextMenu(props: {\n  documentId: string\n  releases: ReleaseDocument[]\n  releasesLoading: boolean\n  fromRelease: string\n  isVersion: boolean\n  onDiscard: () => void\n  onCreateRelease: () => void\n  onCreateVersion: (targetId: string) => void\n  disabled?: boolean\n  locked?: boolean\n  type: string\n}) {\n  const {\n    documentId,\n    releases,\n    releasesLoading,\n    fromRelease,\n    isVersion,\n    onDiscard,\n    onCreateRelease,\n    onCreateVersion,\n    disabled,\n    locked,\n    type,\n  } = props\n  const {t} = useTranslation()\n  const {mode} = useReleasesUpsell()\n  const isPublished = isPublishedId(documentId) && !isVersion\n  const optionsReleaseList = releases.filter((release) => !isReleaseScheduledOrScheduling(release))\n\n  const {checkWithPermissionGuard} = useReleasePermissions()\n  const {createRelease} = useReleaseOperations()\n  const [hasCreatePermission, setHasCreatePermission] = useState<boolean | null>(null)\n\n  const [permissions, isPermissionsLoading] = useDocumentPairPermissions({\n    id: getPublishedId(documentId),\n    type,\n    version: isVersion ? fromRelease : undefined,\n    // Note: the result of this discard permission check is disregarded for the published document\n    // version. Discarding is never available for the published document version. Therefore, the\n    // parameters provided here are not configured to handle published document versions.\n    permission: fromRelease === 'draft' ? 'discardDraft' : 'discardVersion',\n  })\n  const hasDiscardPermission = !isPermissionsLoading && permissions?.granted\n\n  const isMounted = useRef(false)\n  useEffect(() => {\n    isMounted.current = true\n\n    checkWithPermissionGuard(createRelease, getReleaseDefaults()).then((hasPermission) => {\n      if (isMounted.current) setHasCreatePermission(hasPermission)\n    })\n\n    return () => {\n      isMounted.current = false\n    }\n  }, [checkWithPermissionGuard, createRelease])\n\n  return (\n    <>\n      <Menu>\n        {isVersion && (\n          <IntentLink\n            intent=\"release\"\n            params={{id: fromRelease}}\n            rel=\"noopener noreferrer\"\n            style={{textDecoration: 'none'}}\n            disabled={disabled}\n          >\n            <MenuItem icon={CalendarIcon} text={t('release.action.view-release')} />\n          </IntentLink>\n        )}\n        {releasesLoading && <Spinner />}\n        <MenuGroup\n          icon={CopyIcon}\n          popover={{placement: 'right-start'}}\n          text={t('release.action.copy-to')}\n          disabled={disabled || !hasCreatePermission}\n          tooltipProps={{\n            disabled: hasCreatePermission === true,\n            content: t('release.action.permission.error'),\n          }}\n        >\n          <ReleasesList key={fromRelease} space={1}>\n            {optionsReleaseList.map((release) => {\n              return (\n                <MenuItem\n                  as=\"a\"\n                  key={release._id}\n                  onClick={() => onCreateVersion(release._id)}\n                  renderMenuItem={() => <VersionContextMenuItem release={release} />}\n                  disabled={disabled}\n                  tooltipProps={{\n                    content: t('release.tooltip.locked'),\n                  }}\n                />\n              )\n            })}\n          </ReleasesList>{' '}\n          {optionsReleaseList.length > 1 && <MenuDivider />}\n          <MenuItem\n            onClick={onCreateRelease}\n            text={t('release.action.new-release')}\n            icon={AddIcon}\n            disabled={mode === 'disabled'}\n          />\n        </MenuGroup>\n        {!isPublished && (\n          <>\n            <MenuDivider />\n            <MenuItem\n              icon={TrashIcon}\n              onClick={onDiscard}\n              text={t('release.action.discard-version')}\n              disabled={disabled || locked || !hasDiscardPermission}\n              tooltipProps={{\n                disabled: hasDiscardPermission === true,\n                content: t('release.action.permission.error'),\n              }}\n            />\n          </>\n        )}\n      </Menu>\n    </>\n  )\n})\n","import {type Schema} from '@sanity/types'\n\nimport {useSource} from '../studio'\n\n/**\n * React hook that returns the schema registry for the current project\n *\n * @public\n * @returns The schema registry for the current project\n * @example Using the `useSchema` hook\n * ```ts\n * function MyComponent() {\n *   const schema = useSchema()\n *   // ... do something with the schema ...\n * }\n * ```\n */\nexport function useSchema(): Schema {\n  return useSource().schema\n}\n","import {useCallback} from 'react'\n\nimport useTimeZone from '../../scheduledPublishing/hooks/useTimeZone'\nimport {type EditableReleaseDocument} from '../store'\n\nexport const useCreateReleaseMetadata = () => {\n  const {zoneDateToUtc} = useTimeZone()\n\n  const createReleaseMetadata = useCallback(\n    (release: EditableReleaseDocument) => {\n      const {metadata} = release\n      const intendedPublishAt = metadata.intendedPublishAt\n        ? zoneDateToUtc(new Date(metadata.intendedPublishAt)).toISOString()\n        : undefined\n\n      return {\n        ...release,\n        metadata: {\n          ...metadata,\n          intendedPublishAt,\n          title: metadata?.title?.trim(),\n        },\n      }\n    },\n    [zoneDateToUtc],\n  )\n\n  return createReleaseMetadata\n}\n","import {isPast} from 'date-fns'\n\nimport {type EditableReleaseDocument} from '../store/types'\n\n/** @internal */\nexport const getIsScheduledDateInPast = (value: EditableReleaseDocument) =>\n  Boolean(\n    value.metadata.releaseType === 'scheduled' &&\n      value.metadata.intendedPublishAt &&\n      isPast(new Date(value.metadata.intendedPublishAt)),\n  )\n","import {useTelemetry} from '@sanity/telemetry/react'\nimport {type BadgeTone, Box, Card, Flex, Text, useToast} from '@sanity/ui'\nimport {useCallback, useState} from 'react'\n\nimport {Dialog} from '../../../../../ui-components/dialog/Dialog'\nimport {LoadingBlock} from '../../../../components/loadingBlock/LoadingBlock'\nimport {useSchema} from '../../../../hooks/useSchema'\nimport {useTranslation} from '../../../../i18n/hooks/useTranslation'\nimport {Preview} from '../../../../preview/components/Preview'\nimport {CreatedRelease} from '../../../__telemetry__/releases.telemetry'\nimport {useCreateReleaseMetadata} from '../../../hooks/useCreateReleaseMetadata'\nimport {releasesLocaleNamespace} from '../../../i18n'\nimport {isReleaseLimitError} from '../../../store/isReleaseLimitError'\nimport {type EditableReleaseDocument} from '../../../store/types'\nimport {useReleaseOperations} from '../../../store/useReleaseOperations'\nimport {DEFAULT_RELEASE_TYPE} from '../../../util/const'\nimport {createReleaseId} from '../../../util/createReleaseId'\nimport {getIsScheduledDateInPast} from '../../../util/getIsScheduledDateInPast'\nimport {ReleaseForm} from '../../dialog/ReleaseForm'\nimport {ReleaseAvatar} from '../../ReleaseAvatar'\n\nexport function CopyToNewReleaseDialog(props: {\n  onClose: () => void\n  documentId: string\n  documentType: string\n  tone: BadgeTone\n  title: string\n  onCreateVersion: (releaseId: string) => void\n}): React.JSX.Element {\n  const {onClose, documentId, documentType, tone, title, onCreateVersion} = props\n  const {t} = useTranslation()\n  const {t: tRelease} = useTranslation(releasesLocaleNamespace)\n  const toast = useToast()\n  const createReleaseMetadata = useCreateReleaseMetadata()\n\n  const schema = useSchema()\n  const schemaType = schema.get(documentType)\n\n  const [newReleaseId] = useState(createReleaseId)\n\n  const [release, setRelease] = useState((): EditableReleaseDocument => {\n    return {\n      _id: newReleaseId,\n      metadata: {\n        title: '',\n        description: '',\n        releaseType: DEFAULT_RELEASE_TYPE,\n      },\n    } as const\n  })\n  const [isSubmitting, setIsSubmitting] = useState(false)\n  /**\n   * This state supports the scenario of:\n   * release.intendedPublishAt is set to a valid future date; but at time of submit it is in the past\n   * Without an update on this state, CopyToNewReleaseDialog would not rerender\n   * and so date in past warning ui elements wouldn't show\n   */\n  const [, setRerenderDialog] = useState(0)\n\n  const telemetry = useTelemetry()\n  const {createRelease} = useReleaseOperations()\n\n  const displayTitle = title || t('release.placeholder-untitled-release')\n\n  const isScheduledDateInPast = getIsScheduledDateInPast(release)\n\n  const handleOnChange = useCallback((releaseMetadata: EditableReleaseDocument) => {\n    setRelease(releaseMetadata)\n  }, [])\n\n  const handleAddVersion = useCallback(async () => {\n    onCreateVersion(newReleaseId)\n  }, [onCreateVersion, newReleaseId])\n\n  const handleCreateRelease = useCallback(async () => {\n    // re-evaluate if date is in past\n    // as dialog could have been left idle for a while\n    if (getIsScheduledDateInPast(release)) {\n      setRerenderDialog((cur) => cur + 1)\n      return // do not submit if date is in past\n    }\n\n    try {\n      setIsSubmitting(true)\n\n      const releaseValue = createReleaseMetadata(release)\n\n      await createRelease(releaseValue)\n\n      await handleAddVersion()\n      telemetry.log(CreatedRelease, {origin: 'document-panel'})\n    } catch (err) {\n      if (isReleaseLimitError(err)) {\n        onClose()\n      } else {\n        console.error(err)\n        toast.push({\n          closable: true,\n          status: 'error',\n          title: t('release.toast.create-release-error.title'),\n          description: err.message,\n        })\n      }\n    } finally {\n      setIsSubmitting(false)\n    }\n  }, [\n    release,\n    createReleaseMetadata,\n    createRelease,\n    handleAddVersion,\n    telemetry,\n    onClose,\n    toast,\n    t,\n  ])\n\n  return (\n    <Dialog\n      id={'create-release-dialog'}\n      header={t('release.dialog.copy-to-release.title')}\n      onClickOutside={onClose}\n      onClose={onClose}\n      padding={false}\n      width={1}\n      footer={{\n        cancelButton: {\n          disabled: isSubmitting,\n          onClick: onClose,\n        },\n        confirmButton: {\n          text: t('release.action.add-to-new-release'),\n          onClick: handleCreateRelease,\n          disabled: isSubmitting || isScheduledDateInPast,\n          tone: 'primary',\n        },\n      }}\n    >\n      <Box\n        paddingX={2}\n        marginBottom={2}\n        style={{borderBottom: '1px solid var(--card-border-color)'}}\n      >\n        <Flex align=\"center\" padding={4} paddingTop={1} justify=\"space-between\">\n          {schemaType ? (\n            <Preview value={{_id: documentId}} schemaType={schemaType} />\n          ) : (\n            <LoadingBlock />\n          )}\n\n          <Flex\n            align=\"center\"\n            gap={2}\n            padding={1}\n            paddingRight={2}\n            style={{\n              borderRadius: 999,\n              border: '1px solid var(--card-border-color)',\n              whiteSpace: 'nowrap',\n              overflow: 'hidden',\n              textOverflow: 'ellipsis',\n            }}\n          >\n            <ReleaseAvatar padding={1} tone={tone} />\n            <Text size={1} title={displayTitle}>\n              {displayTitle}\n            </Text>\n          </Flex>\n        </Flex>\n      </Box>\n\n      <Box paddingX={5} paddingY={3}>\n        {isScheduledDateInPast && (\n          <Card padding={3} marginBottom={3} radius={2} shadow={1} tone=\"critical\">\n            <Text size={1}>{tRelease('schedule-dialog.publish-date-in-past-warning')}</Text>\n          </Card>\n        )}\n        <ReleaseForm onChange={handleOnChange} value={release} />\n      </Box>\n    </Dialog>\n  )\n}\n","import {LockIcon} from '@sanity/icons'\nimport {\n  type BadgeTone,\n  Button, // eslint-disable-line no-restricted-imports\n  useClickOutsideEvent,\n  useGlobalKeyDown,\n  useToast,\n} from '@sanity/ui'\nimport {\n  memo,\n  type MouseEvent,\n  type ReactNode,\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Popover, Tooltip} from '../../../../ui-components'\nimport {useTranslation} from '../../../i18n/hooks/useTranslation'\nimport {getVersionId} from '../../../util/draftUtils'\nimport {useReleasesUpsell} from '../../contexts/upsell/useReleasesUpsell'\nimport {useVersionOperations} from '../../hooks/useVersionOperations'\nimport {type ReleaseDocument, type ReleaseState} from '../../store/types'\nimport {getReleaseIdFromReleaseDocumentId} from '../../util/getReleaseIdFromReleaseDocumentId'\nimport {DiscardVersionDialog} from '../dialog/DiscardVersionDialog'\nimport {ReleaseAvatarIcon} from '../ReleaseAvatar'\nimport {VersionContextMenu} from './contextMenu/VersionContextMenu'\nimport {CopyToNewReleaseDialog} from './dialog/CopyToNewReleaseDialog'\n\nconst ChipButtonContainer = styled.span`\n  display: inline-flex;\n  --border-color: var(--card-border-color);\n`\n\nconst ChipButton = styled(Button)`\n  flex: none;\n  transition: none;\n  cursor: pointer;\n  --card-border-color: var(--border-color);\n`\n\n/**\n * @internal\n */\nexport const VersionChip = memo(function VersionChip(props: {\n  disabled?: boolean\n  selected: boolean\n  tooltipContent: ReactNode\n  onClick: () => void\n  text: string\n  tone: BadgeTone\n  locked?: boolean\n  contextValues: {\n    documentId: string\n    releases: ReleaseDocument[]\n    releasesLoading: boolean\n    documentType: string\n    menuReleaseId: string\n    fromRelease: string\n    releaseState?: ReleaseState\n    isVersion: boolean\n    disabled?: boolean\n  }\n}) {\n  const {\n    disabled,\n    selected,\n    tooltipContent,\n    onClick,\n    text,\n    tone,\n    locked = false,\n    contextValues: {\n      documentId,\n      releases,\n      releasesLoading,\n      documentType,\n      menuReleaseId,\n      fromRelease,\n      releaseState,\n      isVersion,\n      disabled: contextMenuDisabled = false,\n    },\n  } = props\n\n  const [contextMenuPoint, setContextMenuPoint] = useState<{x: number; y: number} | undefined>(\n    undefined,\n  )\n  const popoverRef = useRef<HTMLDivElement | null>(null)\n  const [isDiscardDialogOpen, setIsDiscardDialogOpen] = useState(false)\n  const [isCreateReleaseDialogOpen, setIsCreateReleaseDialogOpen] = useState(false)\n  const {guardWithReleaseLimitUpsell} = useReleasesUpsell()\n\n  const chipRef = useRef<HTMLButtonElement | null>(null)\n\n  useEffect(() => {\n    if (selected) chipRef.current?.scrollIntoView({inline: 'center'})\n  }, [selected])\n\n  const docId = isVersion ? getVersionId(documentId, fromRelease) : documentId // operations recognises publish and draft as empty\n\n  const {createVersion} = useVersionOperations()\n  const toast = useToast()\n  const {t} = useTranslation()\n\n  const close = useCallback(() => setContextMenuPoint(undefined), [])\n\n  const handleContextMenu = useCallback((event: MouseEvent<HTMLButtonElement>) => {\n    event.preventDefault()\n\n    setContextMenuPoint({x: event.clientX, y: event.clientY})\n  }, [])\n\n  useClickOutsideEvent(\n    () => {\n      if (contextMenuPoint?.x && contextMenuPoint?.y) {\n        close()\n      }\n    },\n    () => [popoverRef.current],\n  )\n\n  useGlobalKeyDown(\n    useCallback(\n      (event) => {\n        if (event.key === 'Escape') {\n          close()\n        }\n      },\n      [close],\n    ),\n  )\n\n  const openDiscardDialog = useCallback(() => {\n    setIsDiscardDialogOpen(true)\n  }, [setIsDiscardDialogOpen])\n\n  const openCreateReleaseDialog = useCallback(\n    () => guardWithReleaseLimitUpsell(() => setIsCreateReleaseDialogOpen(true)),\n    [guardWithReleaseLimitUpsell],\n  )\n\n  const handleAddVersion = useCallback(\n    async (targetRelease: string) => {\n      try {\n        await createVersion(getReleaseIdFromReleaseDocumentId(targetRelease), docId)\n      } catch (err) {\n        toast.push({\n          closable: true,\n          status: 'error',\n          title: t('release.action.create-version.failure'),\n          description: err.message,\n        })\n      }\n\n      close()\n    },\n    [close, createVersion, docId, t, toast],\n  )\n\n  const referenceElement = useMemo(() => {\n    if (!contextMenuPoint) {\n      return null\n    }\n\n    return {\n      getBoundingClientRect() {\n        return {\n          x: contextMenuPoint.x,\n          y: contextMenuPoint.y,\n          left: contextMenuPoint.x,\n          top: contextMenuPoint.y,\n          right: contextMenuPoint.x,\n          bottom: contextMenuPoint.y,\n          width: 0,\n          height: 0,\n        }\n      },\n    } as HTMLElement\n  }, [contextMenuPoint])\n\n  const contextMenuHandler = disabled ? undefined : handleContextMenu\n\n  return (\n    <>\n      <Tooltip content={tooltipContent} fallbackPlacements={[]} portal placement=\"bottom\">\n        {/* This span is needed to make the tooltip work in disabled buttons */}\n        <ChipButtonContainer>\n          <ChipButton\n            data-testid={`document-header-${text.replaceAll(' ', '-')}-chip`}\n            ref={chipRef}\n            disabled={disabled}\n            mode={disabled ? 'ghost' : 'bleed'}\n            onClick={onClick}\n            selected={selected}\n            tone={tone}\n            onContextMenu={contextMenuHandler}\n            paddingY={2}\n            paddingLeft={2}\n            paddingRight={3}\n            space={2}\n            radius=\"full\"\n            icon={<ReleaseAvatarIcon tone={tone} />}\n            iconRight={locked && <LockIcon />}\n            text={text}\n          />\n        </ChipButtonContainer>\n      </Tooltip>\n\n      <Popover\n        content={\n          <VersionContextMenu\n            documentId={documentId}\n            releases={releases}\n            releasesLoading={releasesLoading}\n            fromRelease={fromRelease}\n            isVersion={isVersion}\n            onDiscard={openDiscardDialog}\n            onCreateRelease={openCreateReleaseDialog}\n            disabled={contextMenuDisabled}\n            onCreateVersion={handleAddVersion}\n            locked={locked}\n            type={documentType}\n          />\n        }\n        fallbackPlacements={[]}\n        open={Boolean(referenceElement)}\n        portal\n        placement=\"bottom-start\"\n        ref={popoverRef}\n        referenceElement={referenceElement}\n        zOffset={10}\n      />\n\n      {isDiscardDialogOpen && (\n        <DiscardVersionDialog\n          onClose={() => setIsDiscardDialogOpen(false)}\n          documentId={\n            isVersion\n              ? getVersionId(documentId, getReleaseIdFromReleaseDocumentId(menuReleaseId))\n              : documentId\n          }\n          fromPerspective={text}\n          documentType={documentType}\n        />\n      )}\n\n      {isCreateReleaseDialogOpen && (\n        <CopyToNewReleaseDialog\n          onClose={() => setIsCreateReleaseDialogOpen(false)}\n          onCreateVersion={handleAddVersion}\n          documentId={\n            isVersion\n              ? getVersionId(documentId, getReleaseIdFromReleaseDocumentId(menuReleaseId))\n              : documentId\n          }\n          documentType={documentType}\n          tone={tone}\n          title={text}\n        />\n      )}\n    </>\n  )\n})\n","import {type BadgeTone} from '@sanity/ui'\nimport {type FC, type PropsWithChildren} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {type ReleaseDocument} from '../store/types'\nimport {LATEST} from '../util/const'\nimport {getReleaseTone} from '../util/getReleaseTone'\n\nconst StyledVersionInlineBadge = styled.span<{$tone?: BadgeTone}>((props) => {\n  const {$tone} = props\n  return css`\n    color: var(--card-badge-${$tone ?? 'default'}-fg-color);\n    background-color: var(--card-badge-${$tone ?? 'default'}-bg-color);\n    border-radius: 3px;\n    text-decoration: none;\n    padding: 0px 2px;\n    font-weight: 500;\n  `\n})\n\n/**\n * @internal\n */\nexport const VersionInlineBadge = ({\n  children,\n  $tone,\n}: PropsWithChildren<{\n  $tone?: BadgeTone\n}>) => <StyledVersionInlineBadge $tone={$tone}>{children}</StyledVersionInlineBadge>\n\n/**\n * @internal\n */\nexport const getVersionInlineBadge = (release?: ReleaseDocument) => {\n  const tone = getReleaseTone(release ?? LATEST)\n\n  const ReturnComponent: FC<PropsWithChildren> = ({children}) => (\n    <VersionInlineBadge $tone={tone}>{children}</VersionInlineBadge>\n  )\n\n  return ReturnComponent\n}\n","import {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\n\nimport {sortReleases} from '../hooks/utils'\nimport {type ReleaseDocument} from './types'\nimport {useReleasesStore} from './useReleasesStore'\n\n/**\n * Gets all releases including archived and published releases\n * @internal\n */\nexport function useAllReleases(): {\n  data: ReleaseDocument[]\n  error?: Error\n  loading: boolean\n} {\n  const {state$} = useReleasesStore()\n  const {releases, error, state} = useObservable(state$)!\n\n  return useMemo(\n    () => ({\n      data: sortReleases(Array.from(releases.values())),\n      error: error,\n      loading: ['loading', 'initialising'].includes(state),\n    }),\n    [error, releases, state],\n  )\n}\n","import {useMemo} from 'react'\n\nimport {ARCHIVED_RELEASE_STATES} from '../util/const'\nimport {type ReleaseDocument} from './types'\nimport {useAllReleases} from './useAllReleases'\n\n/**\n * @internal\n */\nexport function useArchivedReleases(): {\n  data: ReleaseDocument[]\n  error?: Error\n  loading: boolean\n} {\n  const {data: releases, error, loading} = useAllReleases()\n\n  const archivedReleases = useMemo(\n    () =>\n      Array.from(releases.values()).filter((release) => {\n        return ARCHIVED_RELEASE_STATES.includes(release.state)\n      }),\n    [releases],\n  )\n\n  return useMemo(\n    () => ({data: archivedReleases, error, loading}),\n    [archivedReleases, error, loading],\n  )\n}\n","import {type TransactionLogEventWithEffects} from '@sanity/types'\n\ntype StreamResult = TransactionLogEventWithEffects | {error: {description?: string; type: string}}\n\nexport async function getJsonStream(\n  url: string,\n  token: string | undefined,\n): Promise<ReadableStream<StreamResult>> {\n  const options: RequestInit = token\n    ? {headers: {Authorization: `Bearer ${token}`}}\n    : {credentials: 'include'}\n  const response = await fetch(url, options)\n  return getStream(response)\n}\n\nfunction getStream(response: Response): ReadableStream<StreamResult> {\n  const body = response.body\n  if (!body) {\n    throw new Error('Failed to read body from response')\n  }\n\n  let reader: ReadableStreamDefaultReader<Uint8Array>\n  let cancelled = false\n\n  return new ReadableStream<TransactionLogEventWithEffects>({\n    start(controller): void | PromiseLike<void> {\n      reader = body.getReader()\n      const decoder = new TextDecoder()\n      let buffer = ''\n\n      reader\n        .read()\n        .then(function processResult(result): void | Promise<void> {\n          if (result.done) {\n            if (cancelled) {\n              return\n            }\n\n            buffer = buffer.trim()\n            if (buffer.length === 0) {\n              controller.close()\n              return\n            }\n\n            controller.enqueue(JSON.parse(buffer))\n            controller.close()\n            return\n          }\n\n          buffer += decoder.decode(result.value, {stream: true})\n          const lines = buffer.split('\\n')\n\n          for (let i = 0; i < lines.length - 1; ++i) {\n            const line = lines[i].trim()\n            if (line.length === 0) {\n              continue\n            }\n\n            try {\n              controller.enqueue(JSON.parse(line))\n            } catch (err) {\n              controller.error(err)\n              cancelled = true\n              reader.cancel()\n              return\n            }\n          }\n\n          buffer = lines[lines.length - 1]\n\n          // eslint-disable-next-line consistent-return\n          return reader\n            .read()\n            .then(processResult)\n            .catch((err) => controller.error(err))\n        })\n        .catch((err) => controller.error(err))\n    },\n\n    cancel(): void {\n      cancelled = true\n      reader.cancel()\n    },\n  })\n}\n","import {type TransactionLogEventWithEffects} from '@sanity/types'\nimport {useCallback, useEffect, useMemo, useState} from 'react'\n\nimport {useClient} from '../../../../hooks'\nimport {getJsonStream} from '../../../../store/_legacy/history/history/getJsonStream'\nimport {getVersionId} from '../../../../util'\nimport {RELEASES_STUDIO_CLIENT_OPTIONS} from '../../../util/releasesClient'\n\nexport type DocumentHistory = {\n  history: TransactionLogEventWithEffects[]\n  createdBy: string\n  lastEditedBy: string\n  editors: string[]\n}\n\n// TODO: Update this to contemplate the _revision change on any of the internal release documents, and fetch only the history of that document if changes.\nexport function useReleaseHistory(\n  releaseDocumentsIds: string[],\n  releaseId: string,\n): {\n  documentsHistory: Record<string, DocumentHistory>\n  collaborators: string[]\n  loading: boolean\n} {\n  const client = useClient(RELEASES_STUDIO_CLIENT_OPTIONS)\n  const {dataset, token} = client.config()\n  const [history, setHistory] = useState<TransactionLogEventWithEffects[]>([])\n  const queryParams = `tag=sanity.studio.tasks.history&effectFormat=mendoza&excludeContent=true&includeIdentifiedDocumentsOnly=true`\n  const versionIds = releaseDocumentsIds.map((id) => getVersionId(id, releaseId)).join(',')\n  const transactionsUrl = client.getUrl(\n    `/data/history/${dataset}/transactions/${versionIds}?${queryParams}`,\n  )\n\n  const fetchAndParseAll = useCallback(async () => {\n    if (!versionIds) return\n    if (!releaseId) return\n    const transactions: TransactionLogEventWithEffects[] = []\n    const stream = await getJsonStream(transactionsUrl, token)\n    const reader = stream.getReader()\n    let result\n    for (;;) {\n      result = await reader.read()\n      if (result.done) {\n        break\n      }\n      if ('error' in result.value) {\n        throw new Error(result.value.error.description || result.value.error.type)\n      }\n      transactions.push(result.value)\n    }\n    setHistory(transactions)\n  }, [versionIds, transactionsUrl, token, releaseId])\n\n  useEffect(() => {\n    fetchAndParseAll()\n    // When revision changes, update the history.\n  }, [fetchAndParseAll])\n\n  return useMemo(() => {\n    const collaborators: string[] = []\n    const documentsHistory: Record<string, DocumentHistory> = {}\n    if (!history.length) {\n      return {documentsHistory, collaborators, loading: true}\n    }\n    history.forEach((item) => {\n      const documentId = item.documentIDs[0]\n      let documentHistory = documentsHistory[documentId]\n      if (!collaborators.includes(item.author)) {\n        collaborators.push(item.author)\n      }\n      // eslint-disable-next-line no-negated-condition\n      if (!documentHistory) {\n        documentHistory = {\n          history: [item],\n          createdBy: item.author,\n          lastEditedBy: item.author,\n          editors: [item.author],\n        }\n        documentsHistory[documentId] = documentHistory\n      } else {\n        // @ts-expect-error TransactionLogEventWithEffects has no property 'mutations' but it's returned from the API\n        const isCreate = item.mutations.some((mutation) => 'create' in mutation)\n        if (isCreate) documentHistory.createdBy = item.author\n        if (!documentHistory.editors.includes(item.author)) {\n          documentHistory.editors.push(item.author)\n        }\n        // The last item in the history is the last edited by, transaction log is ordered by timestamp\n        documentHistory.lastEditedBy = item.author\n        // always add history item\n        documentHistory.history.push(item)\n      }\n    })\n\n    return {documentsHistory, collaborators, loading: false}\n  }, [history])\n}\n","import {useContext} from 'react'\nimport {WorkspaceContext} from 'sanity/_singletons'\n\nimport {type Workspace} from '../config'\n\n/** @internal */\nexport interface WorkspaceProviderProps {\n  workspace: Workspace\n  children: React.ReactNode\n}\n\n/** @internal */\nexport function WorkspaceProvider({\n  children,\n  workspace,\n}: WorkspaceProviderProps): React.JSX.Element {\n  return <WorkspaceContext.Provider value={workspace}>{children}</WorkspaceContext.Provider>\n}\n\n/**\n * @hidden\n * @beta */\nexport function useWorkspace(): Workspace {\n  const workspace = useContext(WorkspaceContext)\n\n  if (!workspace) throw new Error('Workspace: missing context value')\n\n  return workspace\n}\n","import {type ReactNode, useContext} from 'react'\nimport {SourceContext} from 'sanity/_singletons'\n\nimport {type Source} from '../config'\nimport {useWorkspace} from './workspace'\n\n/** @internal */\nexport type SourceProviderProps =\n  | {source: Source; children?: ReactNode}\n  | {name: string; children?: ReactNode}\n\n/** @internal */\nexport function SourceProvider({children, ...props}: SourceProviderProps) {\n  const parentSource = useContext(SourceContext)\n  const {unstable_sources: sources} = useWorkspace()\n\n  if ('source' in props) {\n    const {source} = props\n    return <SourceContext.Provider value={source}>{children}</SourceContext.Provider>\n  }\n\n  if ('name' in props) {\n    const {name} = props\n    const source = sources.find((s) => s.name === name)\n    if (!source) {\n      throw new Error(`Could not find source with name \\`${name}\\` in current workspace`)\n    }\n    if (parentSource === source) return <>{children}</>\n\n    return <SourceContext.Provider value={source}>{children}</SourceContext.Provider>\n  }\n\n  throw new Error(\n    'Invalid props passed into SourceProvider. A `name` or a `source` object is required.',\n  )\n}\n\n/**\n * @internal\n * @deprecated INTERNAL USE ONLY\n */\nexport function useSource(): Source {\n  const source = useContext(SourceContext)\n  if (!source) throw new Error('Could not find `source` context')\n  return source\n}\n","import {RELEASE_DOCUMENTS_PATH} from '../store/constants'\n\nexport function getReleaseDocumentIdFromReleaseId(name: string) {\n  return `${RELEASE_DOCUMENTS_PATH}.${name}`\n}\n","import {type SanityClient} from '@sanity/client'\nimport {BehaviorSubject, type Observable} from 'rxjs'\nimport {catchError, map, scan, shareReplay, startWith, switchMap, tap} from 'rxjs/operators'\n\nimport {getReleaseIdFromReleaseDocumentId} from '../../../util/getReleaseIdFromReleaseDocumentId'\nimport {type ReleaseEvent} from './types'\n\nexport interface ReleaseEventsObservableValue {\n  events: ReleaseEvent[]\n  nextCursor: string\n  loading: boolean\n  error: null | Error\n}\nexport const INITIAL_VALUE: ReleaseEventsObservableValue = {\n  events: [],\n  nextCursor: '',\n  loading: true,\n  error: null,\n}\n\nfunction removeDupes(prev: ReleaseEvent[], next: ReleaseEvent[]): ReleaseEvent[] {\n  const noDupes = [...prev, ...next].reduce((acc, event) => {\n    if (acc.has(event.id)) {\n      return acc\n    }\n    return acc.set(event.id, event)\n  }, new Map<string, ReleaseEvent>())\n  return Array.from(noDupes.values())\n}\n\nexport function addEventData(event: Omit<ReleaseEvent, 'id' | 'origin'>): ReleaseEvent {\n  return {...event, id: `${event.timestamp}-${event.type}`, origin: 'events'} as ReleaseEvent\n}\n\ninterface InitialFetchEventsOptions {\n  client: SanityClient\n  releaseId: string\n}\nexport function getReleaseActivityEvents({client, releaseId}: InitialFetchEventsOptions): {\n  events$: Observable<ReleaseEventsObservableValue>\n  reloadEvents: () => void\n  loadMore: () => void\n} {\n  const refetchEventsTrigger$ = new BehaviorSubject<{\n    cursor: string | null\n    origin: 'loadMore' | 'reload' | 'initial'\n  }>({\n    cursor: null,\n    origin: 'initial',\n  })\n\n  const fetchEvents = ({limit, nextCursor}: {limit: number; nextCursor: string | null}) => {\n    const params = new URLSearchParams({limit: limit.toString()})\n    if (nextCursor) {\n      params.append('nextCursor', nextCursor)\n    }\n    return client.observable\n      .request<{\n        events: Omit<ReleaseEvent, 'id' | 'origin'>[]\n        nextCursor: string\n      }>({\n        url: `/data/history/${client.config().dataset}/events/releases/${getReleaseIdFromReleaseDocumentId(releaseId)}?${params.toString()}`,\n        tag: 'get-release-events',\n      })\n      .pipe(\n        map((response) => {\n          return {\n            events: response.events.map(addEventData),\n            nextCursor: response.nextCursor,\n            loading: false,\n            error: null,\n          }\n        }),\n        catchError((error) => {\n          console.error(error)\n          return [{events: [], nextCursor: '', loading: false, error}]\n        }),\n      )\n  }\n\n  let nextCursor: string = ''\n  return {\n    events$: refetchEventsTrigger$.pipe(\n      switchMap(({cursor, origin}) => {\n        return fetchEvents({\n          nextCursor: cursor,\n          limit: origin === 'reload' ? 10 : 100,\n        }).pipe(\n          map((response) => {\n            return {...response, origin}\n          }),\n          startWith({events: [], nextCursor: '', loading: true, error: null, origin}),\n        )\n      }),\n      scan((prev, next) => {\n        const events = removeDupes(prev.events, next.events).sort(\n          (a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime(),\n        )\n        return {\n          events: events,\n          // If we are reloading, we should keep the cursor as it was before.\n          nextCursor: next.origin === 'reload' ? prev.nextCursor : next.nextCursor,\n          loading: next.loading,\n          error: next.error,\n        }\n      }, INITIAL_VALUE),\n      tap((response) => {\n        nextCursor = response.nextCursor\n      }),\n      shareReplay(1),\n    ),\n    /**\n     * Loads new events for the release, fetching the latest events from the API.\n     */\n    reloadEvents: () => refetchEventsTrigger$.next({cursor: null, origin: 'reload'}),\n    /**\n     * Loads more events for the release, fetching the next batch of events from the API.\n     */\n    loadMore: () => {\n      const lastCursorUsed = refetchEventsTrigger$.getValue().cursor\n      if (nextCursor && lastCursorUsed !== nextCursor) {\n        refetchEventsTrigger$.next({origin: 'loadMore', cursor: nextCursor})\n      }\n    },\n  }\n}\n","import {type SanityClient} from '@sanity/client'\nimport {type TransactionLogEventWithEffects} from '@sanity/types'\n\nimport {getJsonStream} from '../_legacy/history/history/getJsonStream'\n\n/**\n * Fetches transaction logs for the specified document IDs from the translog\n * It adds the default query parameters to the request and also reads the stream of transactions.\n * @internal\n */\nexport async function getTransactionsLogs(\n  client: SanityClient,\n  /**\n   * 1 or more document IDs to fetch transaction logs   */\n  documentIds: string | string[],\n  /**\n   * {@link https://www.sanity.io/docs/history-api#45ac5eece4ca}\n   */\n  params: {\n    /**\n     * The tag that will be use when fetching the transactions.\n     * (Default: sanity.studio.transactions-log)\n     */\n    tag?: `sanity.studio.${string}`\n    /**\n     * Exclude the document contents from the responses. (You are required to set excludeContent as true for now.)\n     * (Default: true)\n     */\n    excludeContent?: true\n    /**\n     * Limit the number of returned transactions. (Default: 50)\n     */\n    limit?: number\n\n    /**\n     * Only include the documents that are part of the document ids list\n     * (Default: true)\n     */\n    includeIdentifiedDocumentsOnly?: boolean\n\n    /**\n     * How the effects are formatted in the response.\n     * \"mendoza\": Super efficient format for expressing differences between JSON documents. {@link https://www.sanity.io/blog/mendoza}\n     */\n    effectFormat?: 'mendoza' | undefined\n    /**\n     * Return transactions in reverse order.\n     */\n    reverse?: boolean\n    /**\n     * Time from which the transactions are fetched.\n     */\n    fromTime?: string\n    /**\n     * Time until the transactions are fetched.\n     */\n    toTime?: string\n    /**\n     * Transaction ID (Or, Revision ID) from which the transactions are fetched.\n     */\n    fromTransaction?: string\n    /**\n     * Transaction ID (Or, Revision ID) until the transactions are fetched.\n     */\n    toTransaction?: string\n    /**\n     * Comma separated list of authors to filter the transactions by.\n     */\n    authors?: string\n  },\n): Promise<TransactionLogEventWithEffects[]> {\n  const clientConfig = client.config()\n  const dataset = clientConfig.dataset\n  const queryParams = new URLSearchParams({\n    // Default values\n    tag: 'sanity.studio.transactions-log',\n    excludeContent: 'true',\n    limit: '50',\n    includeIdentifiedDocumentsOnly: 'true',\n  })\n  Object.entries(params).forEach(([key, value]) => {\n    if (value !== undefined) {\n      queryParams.set(key, value.toString())\n    }\n  })\n\n  const transactionsUrl = client.getUrl(\n    `/data/history/${dataset}/transactions/${\n      Array.isArray(documentIds) ? documentIds.join(',') : documentIds\n    }?${queryParams.toString()}`,\n  )\n\n  const stream = await getJsonStream(transactionsUrl, clientConfig.token)\n  const transactions: TransactionLogEventWithEffects[] = []\n\n  const reader = stream.getReader()\n  for (;;) {\n    // eslint-disable-next-line no-await-in-loop\n    const result = await reader.read()\n    if (result.done) break\n\n    if ('error' in result.value) {\n      throw new Error(result.value.error.description || result.value.error.type)\n    }\n    transactions.push(result.value)\n  }\n  return transactions\n}\n","import {type SanityDocument} from '@sanity/types'\nimport {applyPatch, type RawPatch} from 'mendoza'\n\nfunction omitRev(document: SanityDocument | undefined) {\n  if (document === undefined) {\n    return undefined\n  }\n  const {_rev, ...doc} = document\n  return doc\n}\n\n/**\n *\n * @param document - The document to apply the patch to\n * @param patch - The mendoza patch to apply\n * @param baseRev - The revision of the document that the patch is calculated from. This is used to ensure that the patch is applied to the correct revision of the document\n */\nexport function applyMendozaPatch<T extends SanityDocument | undefined>(\n  document: T,\n  patch: RawPatch,\n  baseRev: string,\n): T | undefined {\n  if (baseRev !== document?._rev) {\n    throw new Error(\n      'Invalid document revision. The provided patch is calculated from a different revision than the current document',\n    )\n  }\n  const next = applyPatch(omitRev(document), patch)\n  return next === null ? undefined : next\n}\n\nexport function applyMutationEventEffects(\n  document: SanityDocument | undefined,\n  event: {effects: {apply: RawPatch}; previousRev: string; resultRev: string},\n) {\n  if (!event.effects) {\n    throw new Error(\n      'Mutation event is missing effects. Is the listener set up with effectFormat=mendoza?',\n    )\n  }\n  const next = applyMendozaPatch(document, event.effects.apply, event.previousRev)\n  // next will be undefined in case of deletion\n  return next ? {...next, _rev: event.resultRev} : undefined\n}\n","import {type TransactionLogEventWithEffects} from '@sanity/types'\n\nimport {applyMendozaPatch} from '../../../../preview/utils/applyMendozaPatch'\nimport {type ReleaseDocument, type ReleaseType} from '../../../store/types'\nimport {getReleaseIdFromReleaseDocumentId} from '../../../util/getReleaseIdFromReleaseDocumentId'\nimport {type ReleaseEvent} from './types'\n\nexport function buildReleaseEditEvents(\n  transactions: TransactionLogEventWithEffects[],\n  release: ReleaseDocument,\n): ReleaseEvent[] {\n  // Confirm we have all the events by checking the first transaction id and the release._rev, the should match.\n  if (release._rev !== transactions[0]?.id) {\n    console.error('Some transactions are missing, cannot calculate the edit events')\n    return []\n  }\n\n  const releaseEditEvents: ReleaseEvent[] = []\n  // We start from the last release document and apply changes in reverse order\n  // Compare for each transaction what changed, if metadata.releaseType or metadata.intendedPublishAt changed build an event.\n  let currentDocument = release\n  for (const transaction of transactions) {\n    const effect = transaction.effects[release._id]\n    if (!effect) continue\n    // This will apply the revert effect to the document, so we will get the document from before this change.\n    const before = applyMendozaPatch(currentDocument, effect.revert, currentDocument._rev)\n    const changed: {\n      releaseType?: ReleaseType\n      intendedPublishDate?: string\n    } = {}\n\n    if (before?.state !== currentDocument.state && currentDocument.state === 'archived') {\n      releaseEditEvents.push({\n        type: 'archiveRelease',\n        timestamp: transaction.timestamp,\n        author: transaction.author,\n        releaseName: getReleaseIdFromReleaseDocumentId(release._id),\n        id: transaction.id,\n        origin: 'translog',\n      })\n    }\n    if (before?.state !== currentDocument.state && currentDocument.state === 'published') {\n      releaseEditEvents.push({\n        type: 'publishRelease',\n        timestamp: transaction.timestamp,\n        author: transaction.author,\n        releaseName: getReleaseIdFromReleaseDocumentId(release._id),\n        id: transaction.id,\n        origin: 'translog',\n      })\n    }\n\n    if (before?.state === 'unarchiving' && currentDocument.state === 'active') {\n      releaseEditEvents.push({\n        type: 'unarchiveRelease',\n        timestamp: transaction.timestamp,\n        author: transaction.author,\n        releaseName: getReleaseIdFromReleaseDocumentId(release._id),\n        id: transaction.id,\n        origin: 'translog',\n      })\n    }\n    if (before?.metadata.releaseType !== currentDocument.metadata.releaseType) {\n      changed.releaseType = currentDocument.metadata.releaseType\n    }\n    if (before?.metadata.intendedPublishAt !== currentDocument.metadata.intendedPublishAt) {\n      changed.intendedPublishDate = currentDocument.metadata.intendedPublishAt\n    }\n    // If the \"changed\" object has more than one key identify it as a change event\n    if (Object.values(changed).length >= 1) {\n      releaseEditEvents.push({\n        type: before ? 'editRelease' : 'createRelease',\n        origin: 'translog',\n        author: transaction.author,\n        change: changed,\n        id: transaction.id,\n        timestamp: transaction.timestamp,\n        releaseName: getReleaseIdFromReleaseDocumentId(release._id),\n      })\n    }\n\n    if (before) {\n      currentDocument = before\n    }\n  }\n  return releaseEditEvents\n}\n","import {type SanityClient} from '@sanity/client'\nimport {type TransactionLogEventWithEffects} from '@sanity/types'\nimport {\n  catchError,\n  distinctUntilChanged,\n  expand,\n  filter,\n  from,\n  map,\n  type Observable,\n  of,\n  reduce,\n  scan,\n  shareReplay,\n  startWith,\n  switchMap,\n  tap,\n} from 'rxjs'\n\nimport {getTransactionsLogs} from '../../../../store/translog/getTransactionsLogs'\nimport {type ReleaseDocument} from '../../../store/types'\nimport {buildReleaseEditEvents} from './buildReleaseEditEvents'\nimport {type ReleaseEvent} from './types'\n\nconst TRANSLOG_ENTRY_LIMIT = 100\n\nconst documentTransactionsCache: Record<string, TransactionLogEventWithEffects[]> =\n  Object.create(null)\n\nfunction removeDupes(\n  newTransactions: TransactionLogEventWithEffects[],\n  oldTransactions: TransactionLogEventWithEffects[],\n) {\n  const seen = new Set()\n  return newTransactions.concat(oldTransactions).filter((transaction) => {\n    if (seen.has(transaction.id)) {\n      return false\n    }\n    seen.add(transaction.id)\n    return true\n  })\n}\n\n/**\n * This will fetch all the transactions for a given release.\n * I anticipate this would be a rather small number of transactions, given the release document is \"small\" and shouldn't change much.\n *\n * We need to fetch all of them to create the correct pagination of events in the activity feed, given we need to combine this with the\n * releaseActivityEvents that will be fetched from the events api.\n */\nfunction getReleaseTransactions({\n  documentId,\n  client,\n  toTransaction,\n}: {\n  documentId: string\n  client: SanityClient\n  toTransaction: string\n}): Observable<TransactionLogEventWithEffects[]> {\n  const cacheKey = `${documentId}`\n  const cachedTransactions = documentTransactionsCache[cacheKey] || []\n  if (cachedTransactions.length > 0 && cachedTransactions[0].id === toTransaction) {\n    return of(cachedTransactions)\n  }\n\n  function fetchLogs(options: {\n    fromTransaction?: string\n    toTransaction: string\n  }): Observable<TransactionLogEventWithEffects[]> {\n    return from(\n      getTransactionsLogs(client, documentId, {\n        tag: 'sanity.studio.release.history',\n        effectFormat: 'mendoza',\n        limit: TRANSLOG_ENTRY_LIMIT,\n        reverse: true,\n        fromTransaction: options.fromTransaction,\n        toTransaction: options.toTransaction,\n      }),\n    )\n  }\n\n  return fetchLogs({fromTransaction: cachedTransactions[0]?.id, toTransaction: toTransaction})\n    .pipe(\n      expand((response) => {\n        // Fetch more if the transactions length is equal to the limit\n        if (response.length === TRANSLOG_ENTRY_LIMIT) {\n          // Continue fetching if nextCursor exists, we use the last transaction received as the cursor.\n          return fetchLogs({\n            fromTransaction: undefined,\n            toTransaction: response[response.length - 1].id,\n          })\n        }\n        // End recursion by emitting an empty observable\n        return of()\n      }),\n      // Combine all batches of transactions into a single array\n      reduce(\n        (allTransactions, batch) => allTransactions.concat(batch),\n        [] as TransactionLogEventWithEffects[],\n      ),\n    )\n    .pipe(\n      map((transactions) => removeDupes(transactions, cachedTransactions)),\n      tap((transactions) => {\n        documentTransactionsCache[cacheKey] = transactions\n      }),\n    )\n}\n\ninterface EditEventsObservableValue {\n  editEvents: ReleaseEvent[]\n  loading: boolean\n  error: null | Error\n}\nexport const INITIAL_VALUE: EditEventsObservableValue = {\n  editEvents: [],\n  loading: true,\n  error: null,\n}\n\ninterface getReleaseActivityEventsOpts {\n  client: SanityClient\n  observeDocument$: Observable<ReleaseDocument | undefined>\n}\n\nexport function getReleaseEditEvents({\n  client,\n  observeDocument$,\n}: getReleaseActivityEventsOpts): Observable<EditEventsObservableValue> {\n  return observeDocument$.pipe(\n    filter(Boolean),\n    distinctUntilChanged((prev, next) => prev._rev === next._rev),\n    switchMap((release) => {\n      return getReleaseTransactions({\n        client,\n        documentId: release._id,\n        toTransaction: release._rev,\n      }).pipe(\n        map((transactions) => {\n          return {\n            editEvents: buildReleaseEditEvents(transactions, release),\n            loading: false,\n            error: null,\n          }\n        }),\n        catchError((error) => {\n          console.error(error)\n          return of({editEvents: [], loading: false, error})\n        }),\n      )\n    }),\n    startWith(INITIAL_VALUE),\n    scan((acc, current) => {\n      // Accumulate edit events from previous state\n      const editEvents = current.loading\n        ? acc.editEvents // Preserve previous events while loading\n        : current.editEvents // Update with new events when available\n\n      return {...current, editEvents}\n    }, INITIAL_VALUE),\n    shareReplay(1),\n  )\n}\n","import {type ReleaseType} from '../../../store'\n\nexport type ReleaseEvent =\n  | CreateReleaseEvent\n  | ScheduleReleaseEvent\n  | UnscheduleReleaseEvent\n  | PublishReleaseEvent\n  | ArchiveReleaseEvent\n  | UnarchiveReleaseEvent\n  | AddDocumentToReleaseEvent\n  | DiscardDocumentFromReleaseEvent\n  | EditReleaseEvent\n\nexport type EventType = ReleaseEvent['type']\n\nexport interface BaseEvent {\n  timestamp: string\n  author: string\n  releaseName: string\n  id: string // Added client side ${event.timestamp}-${event.type}\n  origin: 'translog' | 'events' // Added client side to identify from where the event was received\n}\n\nexport interface CreateReleaseEvent extends BaseEvent {\n  type: 'createRelease'\n  change?: Change\n}\n\nexport interface ScheduleReleaseEvent extends BaseEvent {\n  type: 'scheduleRelease'\n  publishAt: string\n}\n\nexport interface UnscheduleReleaseEvent extends BaseEvent {\n  type: 'unscheduleRelease'\n}\n\nexport interface PublishReleaseEvent extends BaseEvent {\n  type: 'publishRelease'\n}\n\nexport interface ArchiveReleaseEvent extends BaseEvent {\n  type: 'archiveRelease'\n}\n\nexport interface UnarchiveReleaseEvent extends BaseEvent {\n  type: 'unarchiveRelease'\n}\n\nexport interface AddDocumentToReleaseEvent extends BaseEvent {\n  type: 'addDocumentToRelease'\n  documentId: string\n  documentType: string\n  versionId: string\n  revisionId: string\n  versionRevisionId: string\n}\n\nexport interface DiscardDocumentFromReleaseEvent extends BaseEvent {\n  type: 'discardDocumentFromRelease'\n  documentId: string\n  documentType: string\n  versionId: string\n  versionRevisionId: string\n}\n\ninterface Change {\n  intendedPublishDate?: string\n  releaseType?: ReleaseType\n}\nexport interface EditReleaseEvent extends BaseEvent {\n  type: 'editRelease'\n  isCreationEvent?: boolean\n  change: Change\n}\n\n// Type guards\nexport const isCreateReleaseEvent = (event: ReleaseEvent): event is CreateReleaseEvent =>\n  event.type === 'createRelease'\nexport const isScheduleReleaseEvent = (event: ReleaseEvent): event is ScheduleReleaseEvent =>\n  event.type === 'scheduleRelease'\nexport const isUnscheduleReleaseEvent = (event: ReleaseEvent): event is UnscheduleReleaseEvent =>\n  event.type === 'unscheduleRelease'\nexport const isPublishReleaseEvent = (event: ReleaseEvent): event is PublishReleaseEvent =>\n  event.type === 'publishRelease'\nexport const isArchiveReleaseEvent = (event: ReleaseEvent): event is ArchiveReleaseEvent =>\n  event.type === 'archiveRelease'\nexport const isUnarchiveReleaseEvent = (event: ReleaseEvent): event is UnarchiveReleaseEvent =>\n  event.type === 'unarchiveRelease'\nexport const isAddDocumentToReleaseEvent = (\n  event: ReleaseEvent,\n): event is AddDocumentToReleaseEvent => event.type === 'addDocumentToRelease'\nexport const isDiscardDocumentFromReleaseEvent = (\n  event: ReleaseEvent,\n): event is DiscardDocumentFromReleaseEvent => event.type === 'discardDocumentFromRelease'\nexport const isEditReleaseEvent = (event: ReleaseEvent): event is EditReleaseEvent =>\n  event.type === 'editRelease'\n\nexport const isTranslogEvent = (\n  event: ReleaseEvent,\n): event is EditReleaseEvent | CreateReleaseEvent => event.origin === 'translog'\n\nexport const isEventsAPIEvent = (\n  event: ReleaseEvent,\n): event is Exclude<ReleaseEvent, EditReleaseEvent> => event.origin === 'events'\n","import {type SanityClient} from '@sanity/client'\nimport {\n  combineLatest,\n  distinctUntilChanged,\n  filter,\n  map,\n  merge,\n  type Observable,\n  of,\n  skip,\n  startWith,\n  tap,\n} from 'rxjs'\n\nimport {type DocumentPreviewStore} from '../../../../preview/documentPreviewStore'\nimport {type ReleasesReducerState} from '../../../store/reducer'\nimport {type ReleaseDocument} from '../../../store/types'\nimport {getReleaseIdFromReleaseDocumentId} from '../../../util/getReleaseIdFromReleaseDocumentId'\nimport {RELEASES_STUDIO_CLIENT_OPTIONS} from '../../../util/releasesClient'\nimport {getReleaseActivityEvents} from './getReleaseActivityEvents'\nimport {getReleaseEditEvents} from './getReleaseEditEvents'\nimport {isCreateReleaseEvent, isEventsAPIEvent, isTranslogEvent, type ReleaseEvent} from './types'\n\ninterface getReleaseEventsOpts {\n  client: SanityClient\n  releaseId: string\n  releasesState$: Observable<ReleasesReducerState>\n  documentPreviewStore: DocumentPreviewStore\n  eventsAPIEnabled: boolean\n}\n\nexport const EVENTS_INITIAL_VALUE = {\n  events: [],\n  hasMore: false,\n  error: null,\n  loading: true,\n}\n\nconst notEnabledActivityEvents: ReturnType<typeof getReleaseActivityEvents> = {\n  events$: of({\n    events: [],\n    nextCursor: '',\n    loading: false,\n    error: null,\n  }),\n  reloadEvents: () => {},\n  loadMore: () => {},\n}\n\n/**\n * Combines activity and edit events for a release, and adds side effects for reloading events when the release or the document changes.\n */\nexport function getReleaseEvents({\n  client,\n  releaseId,\n  releasesState$,\n  documentPreviewStore,\n  eventsAPIEnabled,\n}: getReleaseEventsOpts) {\n  const observeDocument$ = documentPreviewStore.unstable_observeDocument(releaseId, {\n    apiVersion: RELEASES_STUDIO_CLIENT_OPTIONS.apiVersion,\n  }) as Observable<ReleaseDocument | undefined>\n\n  const editEvents$ = getReleaseEditEvents({client, observeDocument$})\n\n  const releaseRev$ = releasesState$.pipe(\n    map((state) => state.releases.get(releaseId)?._rev),\n    filter(Boolean),\n    distinctUntilChanged(),\n    // Emit only when rev changes, after first non null value.\n    skip(1),\n  )\n\n  // Turn off activity events if eventsAPI is not enabled.\n  const activityEvents = eventsAPIEnabled\n    ? getReleaseActivityEvents({client, releaseId})\n    : notEnabledActivityEvents\n\n  const groqFilter = `_id in path(\"versions.${getReleaseIdFromReleaseDocumentId(releaseId)}.*\")`\n  // Turn off document counts listener if eventsAPI is not enabled.\n  const documentsCount$ = eventsAPIEnabled\n    ? of(0)\n    : documentPreviewStore\n        .unstable_observeDocumentIdSet(groqFilter, undefined, {\n          apiVersion: RELEASES_STUDIO_CLIENT_OPTIONS.apiVersion,\n        })\n        .pipe(\n          filter(({status}) => status === 'connected'),\n          map(({documentIds}) => documentIds.length),\n          distinctUntilChanged(),\n          // Emit only when count changes, after first non null value.\n          skip(1),\n        )\n\n  const sideEffects$ = merge(releaseRev$, documentsCount$).pipe(\n    tap(() => {\n      activityEvents.reloadEvents()\n    }),\n    startWith(null),\n  )\n\n  const events$ = combineLatest([activityEvents.events$, editEvents$, sideEffects$]).pipe(\n    map(([activity, edit]) => {\n      const events = [...activity.events, ...edit.editEvents]\n        .sort((a, b) => Date.parse(b.timestamp) - Date.parse(a.timestamp))\n        .reduce((acc: ReleaseEvent[], event) => {\n          if (isCreateReleaseEvent(event)) {\n            const creationEvent = acc.find(isCreateReleaseEvent)\n            if (!creationEvent) acc.push(event)\n            // Prefer the translog event for the creation given it has extra information.\n            else if (isEventsAPIEvent(creationEvent) && isTranslogEvent(event)) {\n              acc[acc.indexOf(creationEvent)] = event\n            }\n          } else acc.push(event)\n          return acc\n        }, [])\n\n      return {\n        events: deduplicateEvents(events),\n        hasMore: Boolean(activity.nextCursor),\n        error: activity.error || edit.error,\n        loading: activity.loading || edit.loading,\n      }\n    }),\n  )\n\n  return {\n    events$,\n    loadMore: activityEvents.loadMore,\n  }\n}\n\nconst deduplicateEvents = (events: ReleaseEvent[]) => {\n  // Events are sorted by timestamp, compare this event with the next one, if they are the same type and timestamp, remove it.\n  return events.filter((event, index) => {\n    const nextEvent = events[index + 1]\n    if (!nextEvent) return true\n    return !(event.type === nextEvent.type && areTheSameDate(event.timestamp, nextEvent.timestamp))\n  })\n}\n\n/**\n * Checks if two dates are the same date, without contemplating miliseconds.\n * The translog has miliseconds but the events api does not.\n */\nfunction areTheSameDate(date1: string, date2: string) {\n  const time1 = new Date(date1).getTime()\n  const time2 = new Date(date2).getTime()\n  return Math.abs(time1 - time2) <= 1000\n}\n","import {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\n\nimport {useClient} from '../../../../hooks/useClient'\nimport {useDocumentPreviewStore} from '../../../../store/_legacy/datastores'\nimport {useSource} from '../../../../studio/source'\nimport {useReleasesStore} from '../../../store/useReleasesStore'\nimport {getReleaseDocumentIdFromReleaseId} from '../../../util/getReleaseDocumentIdFromReleaseId'\nimport {RELEASES_STUDIO_CLIENT_OPTIONS} from '../../../util/releasesClient'\nimport {EVENTS_INITIAL_VALUE, getReleaseEvents} from './getReleaseEvents'\nimport {type ReleaseEvent} from './types'\n\nexport interface ReleaseEvents {\n  events: ReleaseEvent[]\n  loading: boolean\n  error: null | Error\n  loadMore: () => void\n  hasMore: boolean\n}\n\nexport function useReleaseEvents(releaseId: string): ReleaseEvents {\n  const client = useClient(RELEASES_STUDIO_CLIENT_OPTIONS)\n  const documentPreviewStore = useDocumentPreviewStore()\n  const {state$: releasesState$} = useReleasesStore()\n  const source = useSource()\n  const eventsAPIEnabled = Boolean(source.beta?.eventsAPI?.releases)\n\n  const releaseEvents = useMemo(\n    () =>\n      getReleaseEvents({\n        client,\n        releaseId: getReleaseDocumentIdFromReleaseId(releaseId),\n        releasesState$,\n        documentPreviewStore,\n        eventsAPIEnabled,\n      }),\n    [releaseId, client, releasesState$, documentPreviewStore, eventsAPIEnabled],\n  )\n  const events = useObservable(releaseEvents.events$, EVENTS_INITIAL_VALUE)\n\n  return {\n    events: events.events,\n    hasMore: events.hasMore,\n    loading: events.loading,\n    error: events.error,\n    loadMore: releaseEvents.loadMore,\n  }\n}\n","import {type MouseEvent, useCallback, useRef} from 'react'\nimport {css, styled} from 'styled-components'\n\ninterface PositionProps {\n  position: 'left' | 'right'\n}\n\nconst Root = styled.div<PositionProps>`\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  width: 9px;\n  z-index: 201;\n  cursor: ew-resize;\n\n  ${({position}) =>\n    position === 'right'\n      ? css`\n          right: -4px;\n        `\n      : css`\n          left: -4px;\n        `}\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    ${({position}) =>\n      position === 'right'\n        ? css`\n            right: 4px;\n          `\n        : css`\n            left: 4px;\n          `}\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    ${({position}) =>\n      position === 'right'\n        ? css`\n            right: 0px;\n          `\n        : css`\n            left: 0px;\n          `}\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: {\n  onResize: (delta: number) => void\n  onResizeStart: () => void\n  position: 'left' | 'right'\n}) {\n  const {onResize, onResizeStart, position} = props\n\n  const mouseXRef = useRef(0)\n\n  const handleMouseDown = useCallback(\n    (event: MouseEvent) => {\n      event.preventDefault()\n\n      mouseXRef.current = event.pageX\n\n      onResizeStart()\n\n      const handleMouseMove = (e: globalThis.MouseEvent) => {\n        e.preventDefault()\n        onResize(mouseXRef.current - e.pageX)\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} position={position}>\n      {/* Hover effect */}\n      <span />\n\n      {/* Border */}\n      <span />\n    </Root>\n  )\n}\n","import {Box, type BoxProps} from '@sanity/ui'\nimport {type HTMLProps, useCallback, useMemo, useRef, useState} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Resizer} from './Resizer'\n\ninterface ResizableProps {\n  minWidth: number\n  maxWidth: number\n  initialWidth?: number\n  resizerPosition?: 'left' | 'right'\n}\n\nconst Root = styled(Box)`\n  position: relative;\n  flex: 1;\n  padding-left: 1px;\n`\n\n/**\n * @internal\n * Provides a resizable container with a resizer handle.\n */\nexport function Resizable(\n  props: ResizableProps & BoxProps & Omit<HTMLProps<HTMLDivElement>, 'as'>,\n) {\n  const {\n    as: forwardedAs,\n    children,\n    minWidth,\n    maxWidth,\n    initialWidth,\n    resizerPosition = 'right',\n    ...restProps\n  } = props\n  const [element, setElement] = useState<HTMLDivElement | null>(null)\n  const elementWidthRef = useRef<number>(undefined)\n  const [targetWidth, setTargetWidth] = useState<number | undefined>(initialWidth)\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      if (!w) return\n      if (resizerPosition === 'right') {\n        setTargetWidth(Math.min(Math.max(w - deltaX, minWidth), maxWidth))\n      } else {\n        setTargetWidth(Math.min(Math.max(w + deltaX, minWidth), maxWidth))\n      }\n    },\n    [minWidth, maxWidth, resizerPosition],\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      {resizerPosition === 'left' && (\n        <Resizer onResize={handleResize} onResizeStart={handleResizeStart} position=\"left\" />\n      )}\n      {children}\n      {resizerPosition === 'right' && (\n        <Resizer onResize={handleResize} onResizeStart={handleResizeStart} position=\"right\" />\n      )}\n    </Root>\n  )\n}\n","import {\n  differenceInDays,\n  differenceInHours,\n  differenceInMinutes,\n  differenceInMonths,\n  differenceInSeconds,\n  differenceInWeeks,\n  differenceInYears,\n} from 'date-fns'\nimport {useCallback, useEffect, useReducer} from 'react'\n\nimport {useCurrentLocale, useTranslation} from '../i18n'\nimport {intlCache} from '../i18n/intlCache'\n\ninterface TimeSpec {\n  timestamp: string\n  refreshInterval: number | null\n}\n\nconst FIVE_SECONDS = 1000 * 5\nconst TWENTY_SECONDS = 1000 * 20\nconst ONE_MINUTE = 1000 * 60\nconst ONE_HOUR = ONE_MINUTE * 60\n\nconst NO_YEAR_DATE_ONLY_FORMAT: Intl.DateTimeFormatOptions = {\n  month: 'short',\n  day: 'numeric',\n}\n\nconst DATE_ONLY_FORMAT: Intl.DateTimeFormatOptions = {\n  ...NO_YEAR_DATE_ONLY_FORMAT,\n  year: 'numeric',\n}\n\nconst FULL_DATE_FORMAT: Intl.DateTimeFormatOptions = {\n  ...DATE_ONLY_FORMAT,\n  hour: 'numeric',\n  minute: 'numeric',\n}\n\n/** @internal */\nexport interface RelativeTimeOptions {\n  minimal?: boolean\n  useTemporalPhrase?: boolean\n  relativeTo?: Date\n  timeZone?: string\n}\n\n/** @internal */\nexport function useRelativeTime(time: Date | string, options: RelativeTimeOptions = {}): string {\n  const [now, updateNow] = useReducer(\n    // We don't care about the action input, every update should use the current time as the new state\n    () => Date.now(),\n    // Since we use the third argument of `useReducer`, this `null` doesn't end up anywhere\n    null,\n    // By using the lazy init we ensure that `Date.now()` is only called once during init, and then only when `updateNow` is called, instead of on every render\n    () => Date.now(),\n  )\n  const resolved = useFormatRelativeTime(time, options.relativeTo || now, options)\n\n  useEffect(() => {\n    let timerId: number | null\n\n    function tick(interval: number) {\n      timerId = window.setTimeout(() => {\n        updateNow()\n        // avoid pile-up of setInterval callbacks,\n        // e.g. schedule the next update at `refreshInterval` *after* the previous one finishes\n        timerId = window.setTimeout(() => tick(interval), interval)\n      }, interval)\n    }\n\n    if (resolved.refreshInterval !== null) {\n      tick(resolved.refreshInterval)\n    }\n\n    return () => {\n      if (timerId !== null) {\n        clearTimeout(timerId)\n      }\n    }\n  }, [resolved.refreshInterval])\n\n  return resolved.timestamp\n}\n\nfunction useFormatRelativeTime(\n  date: Date | string,\n  now: Date | number,\n  opts: Omit<RelativeTimeOptions, 'relativeTo'> = {},\n): TimeSpec {\n  const {t} = useTranslation()\n  const currentLocale = useCurrentLocale().id\n\n  const {timeZone, minimal} = opts\n  const parsedDate = date instanceof Date ? date : new Date(date)\n  const useTemporalPhrase = Boolean(opts.useTemporalPhrase)\n  const format = useCallback(\n    function formatWithUnit(count: number, unit: Intl.RelativeTimeFormatUnit): string {\n      const isNextOrPrevDay = unit === 'day' && Math.abs(count) === 1\n      const isNextOrPrevWeek = unit === 'week' && Math.abs(count) === 1\n\n      if (useTemporalPhrase || isNextOrPrevDay) {\n        return intlCache\n          .relativeTimeFormat(currentLocale, {\n            // Force 'long' formatting for dates within the next/previous week as `Intl.RelativeTimeFormat`\n            // will display these as `next wk.` or `last wk.` – which we don't want!\n            // Idiomatic dates should always be displayed in full. There may be a more elegant way to handle this.\n            style: minimal && !isNextOrPrevWeek ? 'short' : 'long',\n            numeric: 'auto',\n          })\n          .format(count, unit)\n      }\n\n      return intlCache\n        .numberFormat(currentLocale, {style: 'unit', unit, unitDisplay: minimal ? 'short' : 'long'})\n        .format(Math.abs(count))\n    },\n    [currentLocale, useTemporalPhrase, minimal],\n  )\n\n  // Invalid date? Return empty timestamp and `null` as refresh interval, to save us from\n  // continuously trying to format an invalid date. The `useEffect` calls in the hook will\n  // trigger a re-evaluation of the timestamp when the date changes, so this is safe.\n  if (!parsedDate.getTime()) {\n    return {\n      timestamp: '',\n      refreshInterval: null,\n    }\n  }\n\n  const diffMonths = differenceInMonths(now, parsedDate)\n  const diffYears = differenceInYears(now, parsedDate)\n\n  if (diffMonths || diffYears) {\n    if (minimal && diffYears === 0) {\n      // same year\n      return {\n        timestamp: intlCache\n          .dateTimeFormat(currentLocale, {...NO_YEAR_DATE_ONLY_FORMAT, timeZone})\n          .format(parsedDate),\n        refreshInterval: null,\n      }\n    }\n\n    if (minimal) {\n      return {\n        timestamp: intlCache\n          .dateTimeFormat(currentLocale, {...DATE_ONLY_FORMAT, timeZone})\n          .format(parsedDate),\n        refreshInterval: null,\n      }\n    }\n\n    return {\n      timestamp: intlCache\n        .dateTimeFormat(currentLocale, {...FULL_DATE_FORMAT, timeZone})\n        .format(parsedDate),\n      refreshInterval: null,\n    }\n  }\n\n  const diffWeeks = differenceInWeeks(parsedDate, now)\n  if (diffWeeks) {\n    return {\n      timestamp: format(diffWeeks, 'week'),\n      refreshInterval: ONE_HOUR,\n    }\n  }\n\n  const diffDays = differenceInDays(parsedDate, now)\n  if (diffDays) {\n    return {\n      timestamp: format(diffDays, 'day'),\n      refreshInterval: ONE_HOUR,\n    }\n  }\n\n  const diffHours = differenceInHours(parsedDate, now)\n  if (diffHours) {\n    return {\n      timestamp: format(diffHours, 'hour'),\n      refreshInterval: ONE_MINUTE,\n    }\n  }\n\n  const diffMins = differenceInMinutes(parsedDate, now)\n  if (diffMins) {\n    return {\n      timestamp: format(diffMins, 'minute'),\n      refreshInterval: TWENTY_SECONDS,\n    }\n  }\n\n  const diffSeconds = differenceInSeconds(parsedDate, now)\n  if (Math.abs(diffSeconds) > 10) {\n    return {\n      timestamp: format(diffSeconds, 'second'),\n      refreshInterval: FIVE_SECONDS,\n    }\n  }\n\n  return {timestamp: t('relative-time.just-now'), refreshInterval: FIVE_SECONDS}\n}\n","import {type RelativeTimeOptions, useRelativeTime} from '../hooks/useRelativeTime'\n\n/**\n * @internal\n */\nexport interface RelativeTimeProps extends RelativeTimeOptions {\n  time: string | Date\n}\n\n/**\n * @internal\n */\nexport function RelativeTime({time, ...options}: RelativeTimeProps) {\n  const timestamp = time instanceof Date ? time : new Date(time)\n  const timeAgo = useRelativeTime(timestamp, options)\n\n  return (\n    <time dateTime={timestamp.toISOString()} title={timeAgo}>\n      {timeAgo}\n    </time>\n  )\n}\n","import {useCurrentLocale} from '../i18n/hooks/useLocale'\nimport {intlCache} from '../i18n/intlCache'\n\n/**\n * Options for the `useDateTimeFormat` hook\n *\n * @public\n */\nexport type UseDateTimeFormatOptions = Omit<Intl.DateTimeFormatOptions, 'fractionalSecondDigits'>\n\n/**\n * Returns an instance of `Intl.DateTimeFormat` that uses the currently selected locale,\n * and enables locale and culture-sensitive date formatting.\n *\n * @param options - Optional options for the date/time formatter\n * @returns Instance of `Intl.DateTimeFormat`\n * @public\n */\nexport function useDateTimeFormat(options: UseDateTimeFormatOptions = {}): Intl.DateTimeFormat {\n  const currentLocale = useCurrentLocale().id\n  return intlCache.dateTimeFormat(currentLocale, options)\n}\n","import {type TaskDocument} from '../../../types'\nimport {type FieldChange} from './parseTransactions'\n\nconst FIELDS_TO_GROUP: (keyof TaskDocument)[] = [\n  'title',\n  'status',\n  'assignedTo',\n  'dueBy',\n  'target',\n  'description',\n]\nconst GROUP_TIME = 2 * 60 * 1000 // 2 minutes\nexport function groupChanges(changes: FieldChange[]): FieldChange[] {\n  // If we have two or more changes done by the same user in a similar timestamp +- X time, in any of the fields specified  we group them together.\n  const groupedChanges: FieldChange[] = []\n  for (const change of changes) {\n    const lastChangeProcessed = groupedChanges[groupedChanges.length - 1]\n    if (!lastChangeProcessed) {\n      groupedChanges.push(change)\n      continue\n    }\n    if (!FIELDS_TO_GROUP.includes(change.field)) {\n      groupedChanges.push(change)\n      continue\n    }\n    if (\n      lastChangeProcessed.author === change.author &&\n      lastChangeProcessed.field === change.field\n    ) {\n      // Check the timestamp difference\n      const lastChangeDate = new Date(lastChangeProcessed.timestamp)\n      const changeDate = new Date(change.timestamp)\n      const diff = Math.abs(lastChangeDate.getTime() - changeDate.getTime())\n      if (diff <= GROUP_TIME) {\n        // We keep the from value and update the to value, and the date.\n        lastChangeProcessed.to = change.to\n        lastChangeProcessed.timestamp = change.timestamp\n        continue\n      }\n    }\n    groupedChanges.push(change)\n  }\n\n  return groupedChanges\n}\n","import {type TransactionLogEventWithEffects} from '@sanity/types'\nimport {applyPatch} from 'mendoza'\n\nimport {type TaskDocument} from '../../../types'\nimport {groupChanges} from './groupChanges'\n\nexport interface FieldChange {\n  field: keyof TaskDocument\n  from: any\n  to: any\n  timestamp: string\n  author: string\n}\n\nfunction omitRev(document: TaskDocument) {\n  const {_rev, ...doc} = document\n  return doc\n}\n\n/**\n * Tracks changes to specified fields across document versions by applying patches in reverse.\n * @param newestDocument -  The latest state of the document.\n * @param transactions - An array of transactions containing patches.\n * @param fieldsToTrack - The fields to track for changes.\n * @returns An array of changes for the tracked fields.\n */\nexport function trackFieldChanges(\n  newestDocument: TaskDocument,\n  transactions: TransactionLogEventWithEffects[],\n  fieldsToTrack: (keyof Omit<TaskDocument, '_rev'>)[],\n): FieldChange[] {\n  let currentDocument: Omit<TaskDocument, '_rev'> = omitRev(newestDocument)\n  const changes: FieldChange[] = []\n  let previousDocument = currentDocument\n\n  for (const transaction of transactions) {\n    const {timestamp, effects} = transaction\n\n    // Assuming there's a single document being tracked in this transaction\n    const documentId = transaction.documentIDs[0]\n    const effect = effects[documentId]\n    if (!effect || !effect.revert) continue\n\n    previousDocument = applyPatch(currentDocument, effect.revert)\n\n    // Track changes for specified fields\n    // eslint-disable-next-line no-loop-func\n    fieldsToTrack.forEach((field) => {\n      if (previousDocument?.[field] !== currentDocument?.[field]) {\n        changes.push({\n          field,\n          from: previousDocument?.[field],\n          to: currentDocument?.[field],\n          timestamp,\n          author: transaction.author,\n        })\n      }\n    })\n\n    // Prepare for next iteration\n    currentDocument = previousDocument\n  }\n\n  const changesSortedByTimestamp = changes.sort((a, b) => a.timestamp.localeCompare(b.timestamp))\n  // Find the moment the task was created by the user.\n  const createdByUserIndex = changesSortedByTimestamp.findIndex(\n    (change) => change.field === 'createdByUser',\n  )\n\n  // Return changes sorted by timestamp in ascending order from the moment the task was created.\n  return groupChanges(changesSortedByTimestamp.slice(createdByUserIndex + 1))\n}\n","export const API_VERSION = '2024-03-05'\n","import {CheckmarkCircleIcon, CircleIcon} from '@sanity/icons'\n\nexport const TASK_STATUS = [\n  {value: 'open', title: 'To Do', icon: <CircleIcon />},\n  {value: 'closed', title: 'Done', icon: <CheckmarkCircleIcon />},\n]\n","import {useCallback, useEffect, useState} from 'react'\nimport {useEffectEvent} from 'use-effect-event'\n\nimport {useClient} from '../../hooks'\nimport {getTransactionsLogs} from '../../store/translog/getTransactionsLogs'\nimport {getPublishedId} from '../../util'\nimport {type FieldChange, trackFieldChanges} from '../components/activity/helpers/parseTransactions'\nimport {API_VERSION} from '../constants'\nimport {type TaskDocument} from '../types'\n\nexport function useActivityLog(task: TaskDocument): {\n  changes: FieldChange[]\n} {\n  const [changes, setChanges] = useState<FieldChange[]>([])\n  const client = useClient({apiVersion: API_VERSION})\n  const publishedId = getPublishedId(task?._id ?? '')\n\n  const fetchAndParse = useCallback(\n    async (newestTaskDocument: TaskDocument) => {\n      try {\n        if (!publishedId) return\n\n        const transactions = await getTransactionsLogs(client, publishedId, {\n          tag: 'sanity.studio.tasks.history',\n          effectFormat: 'mendoza',\n          reverse: true,\n        })\n\n        const fieldsToTrack: (keyof Omit<TaskDocument, '_rev'>)[] = [\n          'createdByUser',\n          'title',\n          'description',\n          'dueBy',\n          'assignedTo',\n          'status',\n          'target',\n        ]\n\n        const parsedChanges = await trackFieldChanges(\n          newestTaskDocument,\n          [...transactions],\n          fieldsToTrack,\n        )\n\n        setChanges(parsedChanges)\n      } catch (error) {\n        console.error('Failed to fetch and parse activity log', error)\n      }\n    },\n    [publishedId, client],\n  )\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars, unused-imports/no-unused-vars\n  const handleFetchAndParse = useEffectEvent((rev: string) => fetchAndParse(task))\n  useEffect(() => {\n    // Task is updated on every change, wait until the revision changes to update the activity log.\n    handleFetchAndParse(task._rev)\n  }, [task._rev])\n  return {changes}\n}\n","import {type PreviewValue} from '@sanity/types'\nimport {type ElementType, type ReactNode, useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {of} from 'rxjs'\n\nimport {useSchema} from '../../hooks'\nimport {getPreviewStateObservable} from '../../preview'\nimport {useDocumentPreviewStore} from '../../store'\n\ninterface PreviewHookOptions {\n  documentId: string\n  documentType: string\n}\n\ninterface PreviewHookValue {\n  isLoading: boolean\n  value: Partial<PreviewValue> | null\n}\n\n/** @internal */\nexport function useDocumentPreviewValues(options: PreviewHookOptions): PreviewHookValue {\n  const {documentId, documentType} = options || {}\n  const schemaType = useSchema().get(documentType)\n\n  const documentPreviewStore = useDocumentPreviewStore()\n\n  const previewStateObservable = useMemo(() => {\n    if (!documentId || !schemaType) return of(null)\n    return getPreviewStateObservable(documentPreviewStore, schemaType, documentId)\n  }, [documentId, documentPreviewStore, schemaType])\n  const previewState = useObservable(previewStateObservable)\n\n  const isLoading = previewState?.isLoading ?? true\n\n  const {snapshot} = previewState || {}\n  const documentTitle = snapshot?.title as string | undefined\n  const subtitle = snapshot?.subtitle as string | undefined\n  const description = snapshot?.description as string | undefined\n  const media = snapshot?.media as ReactNode | ElementType | undefined\n\n  return {\n    isLoading,\n    value: {\n      title: documentTitle,\n      subtitle,\n      media,\n      description,\n    },\n  }\n}\n","import {useCallback, useMemo} from 'react'\n\nimport {useCurrentUser} from '../../store'\nimport {useAddonDataset} from '../../studio'\nimport {type TaskCreatePayload, type TaskDocument, type TaskEditPayload} from '../types'\n\n/**\n * @beta\n * @hidden\n */\nexport interface TaskOperations {\n  create: (task: TaskCreatePayload) => Promise<TaskDocument>\n  edit: (id: string, task: TaskEditPayload) => Promise<TaskDocument>\n  remove: (id: string) => Promise<void>\n}\n\n/**\n * @beta\n * @hidden\n */\nexport function useTaskOperations(): TaskOperations {\n  const {client, createAddonDataset} = useAddonDataset()\n  const currentUser = useCurrentUser()\n\n  const handleCreate = useCallback(\n    async (payload: TaskCreatePayload): Promise<TaskDocument> => {\n      if (!currentUser) {\n        throw new Error('No current user found. Unable to create task.')\n      }\n\n      const task = {\n        ...payload,\n        authorId: currentUser.id,\n        _type: 'tasks.task',\n      } satisfies Partial<TaskDocument>\n\n      if (!client) {\n        try {\n          const newCreatedClient = await createAddonDataset()\n          if (!newCreatedClient) throw new Error('No addon client found. Unable to create task.')\n          const created = await newCreatedClient.create(task)\n          return created\n        } catch (err) {\n          // TODO: Handle error\n          throw err\n        }\n      }\n\n      try {\n        const created = await client.create(task)\n        return created\n      } catch (err) {\n        // TODO: Handle error\n        throw err\n      }\n    },\n    [client, createAddonDataset, currentUser],\n  )\n\n  const handleEdit = useCallback(\n    async (id: string, set: TaskEditPayload) => {\n      try {\n        if (!client) {\n          throw new Error('No client. Unable to create task.')\n        }\n        const edited = (await client.patch(id).set(set).commit()) as TaskDocument\n        return edited\n      } catch (e) {\n        // TODO: Handle error\n        throw e\n      }\n    },\n    [client],\n  )\n  const handleRemove = useCallback(\n    async (id: string) => {\n      try {\n        if (!client) {\n          throw new Error('No client. Unable to create task.')\n        }\n        await client.delete(id)\n      } catch (e) {\n        // TODO: Handle error\n        throw e\n      }\n    },\n    [client],\n  )\n\n  const operations: TaskOperations = useMemo(\n    () => ({\n      create: handleCreate,\n      edit: handleEdit,\n      remove: handleRemove,\n    }),\n    [handleCreate, handleEdit, handleRemove],\n  )\n  return operations\n}\n","import {useCallback, useState} from 'react'\n\nimport {useTaskOperations} from './useTaskOperations'\n\ninterface RemoveTaskOptions {\n  id: string\n  onError?: (message: string) => void\n  onRemoved?: () => void\n}\n\ninterface RemoveTasksHookValue {\n  removeStatus: 'idle' | 'loading' | 'error'\n  showDialog: boolean\n  error: string | null\n  handleRemove: () => void\n  handleOpenDialog: () => void\n  handleCloseDialog: () => void\n}\n\nexport function useRemoveTask({id, onError, onRemoved}: RemoveTaskOptions): RemoveTasksHookValue {\n  const [removeStatus, setRemoveStatus] = useState<'idle' | 'loading' | 'error'>('idle')\n  const [showDialog, setShowDialog] = useState(false)\n  const [error, setError] = useState<string | null>(null)\n  const operations = useTaskOperations()\n\n  const handleRemove = useCallback(async () => {\n    try {\n      setRemoveStatus('loading')\n      await operations.remove(id)\n      onRemoved?.()\n      setRemoveStatus('idle')\n      await new Promise((resolve) => setTimeout(resolve, 300))\n      setShowDialog(false)\n    } catch (e) {\n      onError?.(e.message)\n      setError(e.message)\n      setRemoveStatus('error')\n    } finally {\n      setRemoveStatus('idle')\n    }\n  }, [id, operations, onError, onRemoved])\n\n  const handleOpenDialog = useCallback(() => {\n    setShowDialog(true)\n  }, [setShowDialog])\n  const handleCloseDialog = useCallback(() => {\n    setShowDialog(false)\n  }, [setShowDialog])\n\n  return {\n    removeStatus,\n    showDialog,\n    error,\n    handleRemove,\n    handleOpenDialog,\n    handleCloseDialog,\n  }\n}\n","import {\n  BlockImagePreview,\n  BlockPreview,\n  CompactPreview,\n  DefaultPreview,\n  DetailPreview,\n  InlinePreview,\n  MediaPreview,\n} from '../../components'\n\nexport const _previewComponents = {\n  block: BlockPreview,\n  blockImage: BlockImagePreview,\n  compact: CompactPreview,\n  default: DefaultPreview,\n  detail: DetailPreview,\n  inline: InlinePreview,\n  media: MediaPreview,\n} as const\n","import {isImageSource} from '@sanity/asset-utils'\nimport {DocumentIcon} from '@sanity/icons'\nimport imageUrlBuilder from '@sanity/image-url'\nimport {type SanityImageSource} from '@sanity/image-url/lib/types/types'\nimport {type ImageUrlFitMode} from '@sanity/types'\nimport {\n  type ComponentType,\n  type ElementType,\n  isValidElement,\n  memo,\n  type ReactNode,\n  useCallback,\n  useMemo,\n} from 'react'\nimport {isValidElementType} from 'react-is'\n\nimport {Tooltip} from '../../../ui-components'\nimport {type PreviewProps} from '../../components/previews'\nimport {useClient} from '../../hooks'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../studioClient'\nimport {isString} from '../../util'\nimport {_previewComponents} from './_previewComponents'\n\nfunction FallbackIcon() {\n  return <DocumentIcon className=\"sanity-studio__preview-fallback-icon\" />\n}\n\n/** @internal */\nexport interface SanityDefaultPreviewProps extends Omit<PreviewProps, 'renderDefault'> {\n  error?: Error | null\n  icon?: ElementType | false\n  tooltip?: ReactNode\n}\n\n/**\n * Used in cases where no custom preview component is provided\n * @internal\n * */\nexport const SanityDefaultPreview = memo(function SanityDefaultPreview(\n  props: SanityDefaultPreviewProps,\n): React.JSX.Element {\n  const {icon: Icon, layout, media: mediaProp, imageUrl, title, tooltip, ...restProps} = props\n\n  const client = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n  const imageBuilder = useMemo(() => imageUrlBuilder(client), [client])\n\n  // NOTE: This function exists because the previews provides options\n  // for the rendering of the media (dimensions)\n  const renderMedia = useCallback(\n    (options: {\n      dimensions: {width?: number; height?: number; fit: ImageUrlFitMode; dpr?: number}\n    }) => {\n      const {dimensions} = options\n      const width = dimensions.width || 100\n      const height = dimensions.height || 100\n\n      // Handle sanity image\n      return (\n        <img\n          alt={isString(title) ? title : undefined}\n          referrerPolicy=\"strict-origin-when-cross-origin\"\n          src={\n            imageBuilder\n              .image(\n                mediaProp as SanityImageSource /*will only enter this code path if it's compatible*/,\n              )\n              .width(width)\n              .height(height)\n              .fit(dimensions.fit)\n              .dpr(dimensions.dpr || 1)\n              .url() || ''\n          }\n        />\n      )\n    },\n    [imageBuilder, mediaProp, title],\n  )\n\n  const renderIcon = useCallback(() => {\n    return Icon ? <Icon /> : <FallbackIcon />\n  }, [Icon])\n\n  const media = useMemo(() => {\n    if (Icon === false) {\n      // Explicitly disabled\n      return false\n    }\n\n    if (isValidElementType(mediaProp)) {\n      return mediaProp\n    }\n\n    if (isValidElement(mediaProp)) {\n      return mediaProp\n    }\n\n    if (isImageSource(mediaProp)) {\n      return renderMedia\n    }\n\n    // Handle image urls\n    if (isString(imageUrl)) {\n      return (\n        <img\n          src={imageUrl}\n          alt={isString(title) ? title : undefined}\n          referrerPolicy=\"strict-origin-when-cross-origin\"\n        />\n      )\n    }\n\n    // Render fallback icon\n    return renderIcon\n  }, [Icon, imageUrl, mediaProp, renderIcon, renderMedia, title])\n\n  const previewProps: Omit<PreviewProps, 'renderDefault'> = useMemo(\n    () => ({\n      ...restProps,\n      // @todo: fix `TS2769: No overload matches this call.`\n      media: media as any,\n      title,\n    }),\n    [media, restProps, title],\n  )\n\n  const LayoutComponent = _previewComponents[layout || 'default'] as ComponentType<\n    Omit<PreviewProps, 'renderDefault'>\n  >\n\n  const children = <LayoutComponent {...previewProps} />\n\n  if (tooltip) {\n    return (\n      <Tooltip\n        content={tooltip}\n        disabled={!tooltip}\n        fallbackPlacements={['top-end', 'bottom-end']}\n        placement=\"right\"\n      >\n        {/* Currently tooltips won't trigger without a wrapping element */}\n        <div>{children}</div>\n      </Tooltip>\n    )\n  }\n\n  return children\n})\nSanityDefaultPreview.displayName = 'Memo(SanityDefaultPreview)'\n","import {startTransition, useEffect, useReducer} from 'react'\nimport {useObservable} from 'react-rx'\nimport {of} from 'rxjs'\n\nimport {usePresenceStore} from '../datastores'\nimport {type DocumentPresence} from './types'\n\nconst initial: DocumentPresence[] = []\nconst fallback = of(initial)\n\n/** @internal */\nexport function useDocumentPresence(documentId: string): DocumentPresence[] {\n  const [mounted, mount] = useReducer(() => true, false)\n  // Using `startTransition` here ensures that rapid re-renders that affect the deps used by `usePresenceStore` delay the transition to `mounted=true`, thus avoiding creating websocket connections that will be closed immediately.\n  useEffect(() => startTransition(mount), [])\n\n  const presenceStore = usePresenceStore()\n  return useObservable(mounted ? presenceStore.documentPresence(documentId) : fallback, initial)\n}\n","import {type PreviewValue} from '@sanity/types'\nimport {Card} from '@sanity/ui'\nimport {type ForwardedRef, forwardRef, useMemo} from 'react'\nimport {IntentLink} from 'sanity/router'\n\nimport {type PreviewLayoutKey} from '../../../components/previews/types'\nimport {DocumentPreviewPresence} from '../../../presence'\nimport {SanityDefaultPreview} from '../../../preview/components/SanityDefaultPreview'\nimport {useDocumentPresence} from '../../../store/_legacy/presence/useDocumentPresence'\nimport {getPublishedId} from '../../../util/draftUtils'\nimport {type ReleaseState} from '../../store/types'\nimport {getReleaseIdFromReleaseDocumentId} from '../../util/getReleaseIdFromReleaseDocumentId'\n\ninterface ReleaseDocumentPreviewProps {\n  documentId: string\n  documentTypeName: string\n  releaseId: string\n  previewValues: PreviewValue | undefined | null\n  isLoading: boolean\n  releaseState?: ReleaseState\n  documentRevision?: string\n  hasValidationError?: boolean\n  layout?: PreviewLayoutKey\n}\n\nconst isArchivedRelease = (releaseState: ReleaseState | undefined) =>\n  releaseState === 'archived' || releaseState === 'archiving' || releaseState === 'unarchiving'\n\nexport function ReleaseDocumentPreview({\n  documentId,\n  documentTypeName,\n  releaseId,\n  previewValues,\n  isLoading,\n  releaseState,\n  documentRevision,\n  layout,\n}: ReleaseDocumentPreviewProps) {\n  const documentPresence = useDocumentPresence(documentId)\n\n  const intentParams = useMemo(() => {\n    if (releaseState === 'published') {\n      // We are inspecting this document through the published view of the doc.\n      return {\n        rev: `@release:${getReleaseIdFromReleaseDocumentId(releaseId)}`,\n        inspect: 'sanity/structure/history',\n      }\n    }\n\n    if (releaseState === 'archived') {\n      // We are \"faking\" the release as if it is still valid only to render the document\n      return {\n        rev: '@lastEdited',\n        inspect: 'sanity/structure/history',\n        historyEvent: documentRevision,\n        historyVersion: getReleaseIdFromReleaseDocumentId(releaseId),\n        archivedRelease: 'true',\n      }\n    }\n\n    return {}\n  }, [releaseState, releaseId, documentRevision])\n\n  const LinkComponent = useMemo(\n    () =>\n      // eslint-disable-next-line @typescript-eslint/no-shadow\n      forwardRef(function LinkComponent(linkProps, ref: ForwardedRef<HTMLAnchorElement>) {\n        return (\n          <IntentLink\n            {...linkProps}\n            intent=\"edit\"\n            params={{\n              id: getPublishedId(documentId),\n              type: documentTypeName,\n              ...intentParams,\n            }}\n            searchParams={\n              isArchivedRelease(releaseState)\n                ? undefined\n                : [\n                    [\n                      'perspective',\n                      releaseState === 'published'\n                        ? 'published'\n                        : getReleaseIdFromReleaseDocumentId(releaseId),\n                    ],\n                  ]\n            }\n            ref={ref}\n          />\n        )\n      }),\n    [documentId, documentTypeName, intentParams, releaseState, releaseId],\n  )\n\n  const previewPresence = useMemo(\n    () => documentPresence?.length > 0 && <DocumentPreviewPresence presence={documentPresence} />,\n    [documentPresence],\n  )\n\n  return (\n    <Card tone=\"inherit\" as={LinkComponent} radius={2} data-as=\"a\">\n      <SanityDefaultPreview\n        {...previewValues}\n        status={previewPresence}\n        isPlaceholder={isLoading}\n        layout={layout}\n      />\n    </Card>\n  )\n}\n","import {Card, Flex, Stack, Text} from '@sanity/ui'\nimport {motion} from 'framer-motion'\nimport {memo, type ReactNode, useMemo} from 'react'\nimport {styled} from 'styled-components'\n\nimport {RelativeTime} from '../../../components/RelativeTime'\nimport {UserAvatar} from '../../../components/userAvatar/UserAvatar'\nimport {useDateTimeFormat} from '../../../hooks/useDateTimeFormat'\nimport {Translate, useTranslation} from '../../../i18n'\nimport {useDocumentPreviewValues} from '../../../tasks/hooks'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {ReleaseDocumentPreview} from '../components/ReleaseDocumentPreview'\nimport {\n  type AddDocumentToReleaseEvent,\n  type DiscardDocumentFromReleaseEvent,\n  isAddDocumentToReleaseEvent,\n  isCreateReleaseEvent,\n  isDiscardDocumentFromReleaseEvent,\n  isEditReleaseEvent,\n  isScheduleReleaseEvent,\n  type ReleaseEvent,\n} from './events/types'\n\nconst StatusText = styled(Text)`\n  strong {\n    font-weight: 500;\n    color: var(--card-fg-color);\n  }\n  time {\n    white-space: nowrap;\n  }\n`\nconst ACTIVITY_TEXT_118N: Record<ReleaseEvent['type'], string> = {\n  addDocumentToRelease: 'activity.event.add-document',\n  archiveRelease: 'activity.event.archive',\n  createRelease: 'activity.event.create',\n  discardDocumentFromRelease: 'activity.event.discard-document',\n  publishRelease: 'activity.event.publish',\n  scheduleRelease: 'activity.event.schedule',\n  unarchiveRelease: 'activity.event.unarchive',\n  unscheduleRelease: 'activity.event.unschedule',\n  editRelease: 'activity.event.edit',\n}\n\nconst ReleaseEventDocumentPreview = ({\n  event,\n  releaseId,\n}: {\n  releaseId: string\n  event: AddDocumentToReleaseEvent | DiscardDocumentFromReleaseEvent\n}) => {\n  const {value, isLoading} = useDocumentPreviewValues({\n    documentId: event.documentId,\n    documentType: event.documentType,\n  })\n  return (\n    <Stack space={2}>\n      <ReleaseDocumentPreview\n        releaseId={releaseId}\n        documentId={event.documentId}\n        documentTypeName={event.documentType}\n        isLoading={isLoading}\n        previewValues={{...value, subtitle: ''}}\n        layout=\"block\"\n      />\n    </Stack>\n  )\n}\n\nconst ScheduleTarget = ({children, event}: {children: ReactNode; event: ReleaseEvent}) => {\n  const dateTimeFormat = useDateTimeFormat({dateStyle: 'full', timeStyle: 'medium'})\n  const {t} = useTranslation(releasesLocaleNamespace)\n\n  const formattedDate = useMemo(() => {\n    if (isEditReleaseEvent(event)) {\n      if (event.change.releaseType === 'asap') return t('activity.event.edit-time-asap')\n      if (event.change.releaseType === 'undecided') return t('activity.event.edit-time-undecided')\n    }\n\n    let dateString: string | undefined\n    if (isScheduleReleaseEvent(event)) {\n      dateString = event.publishAt\n    } else if (isCreateReleaseEvent(event)) {\n      dateString = event.change?.intendedPublishDate\n    } else if (isEditReleaseEvent(event)) {\n      dateString = event.change.intendedPublishDate\n    }\n\n    if (!dateString) return null\n    return dateTimeFormat.format(new Date(dateString))\n  }, [dateTimeFormat, event, t])\n\n  if (!formattedDate && isCreateReleaseEvent(event)) return null\n  return (\n    <span>\n      {children} <strong>{formattedDate || '---'}</strong>\n    </span>\n  )\n}\n\nconst FadeInCard = motion.create(Card)\nexport const ReleaseActivityListItem = memo(\n  ({\n    event,\n    releaseId,\n    releaseTitle,\n  }: {\n    event: ReleaseEvent\n    releaseId: string\n    releaseTitle: string\n  }) => {\n    const {t} = useTranslation(releasesLocaleNamespace)\n\n    return (\n      <FadeInCard\n        paddingX={1}\n        paddingTop={1}\n        paddingBottom={2}\n        overflow=\"hidden\"\n        // This card animates on entrance when a new event is added, not for every event that is rendered.\n        // So if the user is seeing the list and a new event lands, the list will animate the new event. (That is by the <AnimatePresence initial=false> component wrapping the list)\n        initial={{opacity: 0}}\n        animate={{opacity: 1}}\n        transition={{type: 'spring', bounce: 0, duration: 0.4}}\n      >\n        <Flex align=\"flex-start\" gap={2}>\n          <UserAvatar user={event.author} />\n          <Stack flex={1}>\n            <Flex gap={2} paddingY={2}>\n              <StatusText muted size={1}>\n                <Translate\n                  t={t}\n                  components={{\n                    ScheduleTarget: ({children}) => (\n                      <ScheduleTarget event={event}>{children}</ScheduleTarget>\n                    ),\n                  }}\n                  values={{releaseTitle}}\n                  i18nKey={ACTIVITY_TEXT_118N[event.type]}\n                />{' '}\n                &middot; <RelativeTime time={event.timestamp} useTemporalPhrase minimal />\n              </StatusText>\n            </Flex>\n            {isAddDocumentToReleaseEvent(event) || isDiscardDocumentFromReleaseEvent(event) ? (\n              <ReleaseEventDocumentPreview event={event} releaseId={releaseId} />\n            ) : null}\n          </Stack>\n        </Flex>\n      </FadeInCard>\n    )\n  },\n  (prevProps, nextProps) => {\n    return prevProps.event.id === nextProps.event.id && prevProps.releaseId === nextProps.releaseId\n  },\n)\n\nReleaseActivityListItem.displayName = 'ReleaseActivityListItem'\n","'use no memo'\n// The `use no memo` directive is due to a known issue with react-virtual and react compiler: https://github.com/TanStack/virtual/issues/736\n\nimport {Box} from '@sanity/ui'\nimport {useVirtualizer} from '@tanstack/react-virtual'\nimport {AnimatePresence} from 'framer-motion'\nimport {useEffect, useMemo, useRef} from 'react'\nimport {styled} from 'styled-components'\n\nimport {LoadingBlock} from '../../../components/loadingBlock/LoadingBlock'\nimport {\n  isAddDocumentToReleaseEvent,\n  isDiscardDocumentFromReleaseEvent,\n  isEventsAPIEvent,\n  isTranslogEvent,\n  type ReleaseEvent,\n} from './events/types'\nimport {ReleaseActivityListItem} from './ReleaseActivityListItem'\n\nconst estimateSize = (event: ReleaseEvent | undefined) => {\n  if (!event) {\n    return 40 // Is the loader row\n  }\n  if (isAddDocumentToReleaseEvent(event) || isDiscardDocumentFromReleaseEvent(event)) {\n    return 70\n  }\n  return 56\n}\nconst VirtualContainer = styled(Box)`\n  height: 100%;\n  overflow: scroll;\n`\n\ninterface ReleaseActivityListProps {\n  events: ReleaseEvent[]\n  releaseTitle: string\n  releaseId: string\n  hasMore: boolean\n  loadMore: () => void\n  isLoading: boolean\n}\nexport const ReleaseActivityList = ({\n  events,\n  releaseTitle,\n  releaseId,\n  hasMore,\n  loadMore,\n  isLoading,\n}: ReleaseActivityListProps) => {\n  const virtualizerContainerRef = useRef<HTMLDivElement | null>(null)\n\n  const listEvents: ReleaseEvent[] = useMemo(() => {\n    /**\n     * This list combines:\n     * - API events, which are loaded incrementally (paginated)\n     * - Translog events, which are fully available (non-paginated)\n     *\n     * We want to display all events up to the oldest API event and include any translog events\n     * that occurred before that API event. By doing so, as we load older batches of API events,\n     * they will show at the bottom of the list\n     */\n\n    // If all events are loaded (no more pages) and we’re not loading, just return all events.\n    if (!hasMore && !isLoading) return events\n\n    const lastEventFromEventsAPI = [...events].reverse().find(isEventsAPIEvent)\n    // If no API events are found (e.g., events api is not enabled) and we're not loading, return all translog events.\n    if (!lastEventFromEventsAPI && !isLoading) return events\n\n    // If we haven’t found any API events yet and are still loading, show nothing for now.\n    if (!lastEventFromEventsAPI) return []\n\n    // Include only those translog events that occur before the newest API event.\n    const lastEventDate = new Date(lastEventFromEventsAPI.timestamp)\n    return events.filter((event) => {\n      if (isTranslogEvent(event)) {\n        return new Date(event.timestamp) > lastEventDate\n      }\n      return true\n    })\n  }, [events, hasMore, isLoading])\n\n  const virtualizer = useVirtualizer({\n    // If we have more events, or the events are loading, we add a loader row at the end\n    count: hasMore || isLoading ? listEvents.length + 1 : listEvents.length,\n    getScrollElement: () => virtualizerContainerRef.current,\n    estimateSize: (i) => estimateSize(events[i]),\n    overscan: 10,\n    paddingEnd: 24,\n  })\n\n  const virtualItems = virtualizer.getVirtualItems()\n\n  useEffect(() => {\n    const lastItem = virtualItems.at(-1)\n    if (!lastItem) return\n    if (lastItem.index >= listEvents.length - 1 && hasMore) {\n      loadMore()\n    }\n  }, [listEvents.length, hasMore, loadMore, virtualItems])\n\n  return (\n    <VirtualContainer id=\"virtualizer-container\" ref={virtualizerContainerRef} paddingX={3}>\n      <div\n        style={{\n          height: `${virtualizer.getTotalSize()}px`,\n          width: '100%',\n          position: 'relative',\n        }}\n      >\n        <AnimatePresence initial={false}>\n          {virtualizer.getVirtualItems().map((virtualRow) => {\n            const event = listEvents[virtualRow.index]\n            const isLoaderRow = !event\n\n            return (\n              <div\n                key={virtualRow.key}\n                data-index={virtualRow.index}\n                ref={virtualizer.measureElement}\n                style={{\n                  position: 'absolute',\n                  top: 0,\n                  left: 0,\n                  width: '100%',\n                  transform: `translateY(${virtualRow.start}px)`,\n                }}\n              >\n                {isLoaderRow ? (\n                  <Box paddingY={4}>\n                    <LoadingBlock fill />\n                  </Box>\n                ) : (\n                  <ReleaseActivityListItem\n                    event={event}\n                    releaseId={releaseId}\n                    releaseTitle={releaseTitle}\n                  />\n                )}\n              </div>\n            )\n          })}\n        </AnimatePresence>\n      </div>\n    </VirtualContainer>\n  )\n}\n","'use no memo'\n// The `use no memo` directive is due to a known issue with react-virtual and react compiler: https://github.com/TanStack/virtual/issues/736\n\nimport {Box, Card, Flex, Text} from '@sanity/ui'\nimport {AnimatePresence, motion} from 'framer-motion'\nimport {styled} from 'styled-components'\n\nimport {LoadingBlock} from '../../../components/loadingBlock/LoadingBlock'\nimport {Resizable} from '../../../components/resizer/Resizable'\nimport {useTranslation} from '../../../i18n'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {type ReleaseDocument} from '../../store/types'\nimport {type ReleaseEvents} from './events/useReleaseEvents'\nimport {ReleaseActivityList} from './ReleaseActivityList'\n\ninterface ReleaseDashboardActivityPanelProps {\n  events: ReleaseEvents\n  release: ReleaseDocument\n  show: boolean\n}\nconst MotionFlex = motion.create(Flex)\nconst FillHeight = styled.div`\n  --card-border-color: transparent;\n  height: 100%;\n  display: flex;\n  flex-direction: column;\n`\nexport function ReleaseDashboardActivityPanel({\n  events,\n  release,\n  show,\n}: ReleaseDashboardActivityPanelProps) {\n  const {t} = useTranslation(releasesLocaleNamespace)\n  const {t: tCore} = useTranslation()\n  return (\n    <AnimatePresence>\n      {show && (\n        <>\n          <motion.div\n            animate={{width: 'auto', opacity: 1}}\n            initial={{width: 0, opacity: 0}}\n            exit={{width: 0, opacity: 0}}\n            transition={{type: 'spring', bounce: 0, duration: 0.2}}\n          >\n            <Resizable\n              as={FillHeight}\n              minWidth={320}\n              maxWidth={800}\n              initialWidth={320}\n              resizerPosition=\"left\"\n              style={{display: 'flex', flexDirection: 'column', flex: 'none', maxHeight: '100%'}}\n            >\n              <MotionFlex flex=\"none\" height=\"fill\" direction=\"column\">\n                <Box padding={4}>\n                  <Text size={1} weight=\"medium\">\n                    {t('activity.panel.title')}\n                  </Text>\n                </Box>\n                {events.error && !events.events.length && (\n                  <Card padding={3} tone=\"caution\">\n                    <Box padding={2}>\n                      <Text size={0}>{t('activity.panel.error')}</Text>\n                    </Box>\n                  </Card>\n                )}\n                {events.loading && !events.events.length && (\n                  <LoadingBlock title={t('activity.panel.loading')} />\n                )}\n                <ReleaseActivityList\n                  releaseTitle={\n                    release.metadata.title || tCore('release.placeholder-untitled-release')\n                  }\n                  releaseId={release._id}\n                  events={events.events}\n                  hasMore={events.hasMore}\n                  loadMore={events.loadMore}\n                  isLoading={events.loading}\n                />\n              </MotionFlex>\n            </Resizable>\n          </motion.div>\n        </>\n      )}\n    </AnimatePresence>\n  )\n}\n","import {type ThemeColorStateToneKey} from '@sanity/ui/theme'\nimport {type CSSProperties} from 'react'\n\ntype Tone = ThemeColorStateToneKey\n\nexport const ToneIcon = ({\n  tone,\n  icon: Icon,\n}: {\n  tone: Tone\n  icon: React.FC<React.SVGProps<SVGSVGElement>>\n}) => {\n  return (\n    <Icon\n      style={\n        {\n          '--card-icon-color': `var(--card-badge-${tone}-icon-color)`,\n        } as CSSProperties\n      }\n    />\n  )\n}\n","import {type ButtonTone, Text} from '@sanity/ui'\nimport {type ComponentProps, forwardRef, type Ref} from 'react'\nimport {styled} from 'styled-components'\n\n/** @internal */\nexport interface TextWithToneProps extends ComponentProps<typeof Text> {\n  tone: ButtonTone\n  dimmed?: boolean\n}\n\n/** @internal */\nconst TextWithToneStyle = styled(Text)`\n  &:not([data-muted]) {\n    &[data-tone='default'] {\n      --card-fg-color: var(--card-badge-default-fg-color);\n    }\n    &[data-tone='primary'] {\n      --card-fg-color: var(--card-badge-primary-fg-color);\n    }\n    &[data-tone='positive'] {\n      --card-fg-color: var(--card-badge-positive-fg-color);\n    }\n    &[data-tone='caution'] {\n      --card-fg-color: var(--card-badge-caution-fg-color);\n    }\n    &[data-tone='critical'] {\n      --card-fg-color: var(--card-badge-critical-fg-color);\n    }\n  }\n\n  &[data-dimmed] {\n    opacity: 0.3;\n  }\n`\n\n/** @internal */\nexport const TextWithTone = forwardRef(function TextWithTone(\n  props: TextWithToneProps,\n  ref: Ref<HTMLDivElement>,\n) {\n  const {tone, dimmed, muted, ...rest} = props\n\n  return (\n    <TextWithToneStyle\n      data-ui=\"TextWithTone\"\n      data-dimmed={dimmed ? '' : undefined}\n      data-muted={muted ? '' : undefined}\n      data-tone={tone}\n      muted={muted}\n      ref={ref}\n      {...rest}\n    />\n  )\n})\n","import {type SanityClient} from '@sanity/client'\nimport {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {type Observable, of} from 'rxjs'\nimport {catchError, map, shareReplay, startWith} from 'rxjs/operators'\n\nimport {useSource} from '../studio'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../studioClient'\nimport {useClient} from './useClient'\n\ntype FeatureAttributes = Record<string, string | number | boolean | null>\n\ninterface Feature {\n  id: string\n  variantId: string\n  name: string\n  price: number\n  included: boolean\n  attributes: FeatureAttributes\n}\n\ninterface FeatureType {\n  id: string\n  name: string\n  singular: boolean\n  features: Feature[]\n}\n\ninterface Resource {\n  id: string\n  name: string\n  unit: string\n  type: string\n  quota: number | null\n  custom: boolean\n  overageAllowed: boolean\n  overageChunkSize: number\n  overageChunkPrice: number\n  maxOverageQuota: number | null\n}\n\ninterface Plan {\n  id: string\n  planTypeId: string\n  variantId: string | null\n  productType: string\n  variantOfPlanId: string | null\n  name: string\n  variantName: string | null\n  price: number\n  trialDays: number\n  createdAt: string\n  supersededAt: string | null\n  default: boolean\n  public: boolean\n  orderable: boolean\n  isBasePlan: boolean\n  pricingModel: string\n  resources: Record<string, Resource>\n  featureTypes: Record<string, FeatureType>\n}\n\n/**\n * @internal\n */\nexport interface ProjectSubscriptionsResponse {\n  id: string\n  projectId: string\n  productType: string\n  productId: string\n  customerId: string | null\n  planId: string\n  previousSubscriptionId: string | null\n  status: string\n  startedAt: string\n  startedBy: string\n  endedAt: string\n  endedBy: string\n  trialUntil: string | null\n  plan: Plan\n  resources: Record<string, Resource>\n  featureTypes: Record<string, FeatureType>\n}\n\ninterface ProjectSubscriptions {\n  error: Error | null\n  projectSubscriptions: ProjectSubscriptionsResponse | null\n  isLoading: boolean\n}\n\nconst INITIAL_LOADING_STATE: ProjectSubscriptions = {\n  error: null,\n  projectSubscriptions: null,\n  isLoading: true,\n}\n\n/**\n * @internal\n * fetches subscriptions for this project\n */\nfunction fetchProjectSubscriptions({\n  versionedClient,\n}: {\n  versionedClient: SanityClient\n}): Observable<ProjectSubscriptionsResponse> {\n  return versionedClient.observable.request<ProjectSubscriptionsResponse>({\n    uri: `/subscriptions/project/${versionedClient.config().projectId}`,\n    tag: 'project-subscriptions',\n  })\n}\n\nconst cachedProjectSubscriptionsRequest = new Map<\n  string,\n  Observable<ProjectSubscriptionsResponse>\n>()\n\n/** @internal */\nexport function useProjectSubscriptions(): ProjectSubscriptions {\n  const versionedClient = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n  const {projectId} = useSource()\n\n  if (!cachedProjectSubscriptionsRequest.get(projectId)) {\n    const projectSubscriptions = fetchProjectSubscriptions({versionedClient}).pipe(shareReplay())\n    cachedProjectSubscriptionsRequest.set(projectId, projectSubscriptions)\n  }\n\n  const projectSubscriptionsObservable = useMemo(() => {\n    const projectSubscriptions$ = cachedProjectSubscriptionsRequest.get(projectId)\n\n    if (!projectSubscriptions$)\n      return of<ProjectSubscriptions>({\n        isLoading: false,\n        error: null,\n        projectSubscriptions: null,\n      })\n\n    return projectSubscriptions$.pipe(\n      map((cachedSubscriptions) => ({\n        isLoading: false,\n        projectSubscriptions: cachedSubscriptions,\n        error: null,\n      })),\n      startWith(INITIAL_LOADING_STATE),\n      catchError((error: Error) =>\n        of<ProjectSubscriptions>({\n          isLoading: false,\n          projectSubscriptions: null,\n          error,\n        }),\n      ),\n    )\n  }, [projectId])\n\n  return useObservable(projectSubscriptionsObservable, INITIAL_LOADING_STATE)\n}\n","import {useCallback, useEffect, useRef, useState} from 'react'\n\nimport {getIsReleaseOpen, TitleDescriptionForm} from '../../components/dialog/TitleDescriptionForm'\nimport {type EditableReleaseDocument, type ReleaseDocument, useReleaseOperations} from '../../index'\nimport {useReleasePermissions} from '../../store/useReleasePermissions'\n\nexport function ReleaseDetailsEditor({release}: {release: ReleaseDocument}): React.JSX.Element {\n  const {updateRelease} = useReleaseOperations()\n  const [timer, setTimer] = useState<NodeJS.Timeout | undefined>(undefined)\n\n  const {checkWithPermissionGuard} = useReleasePermissions()\n  const [hasUpdatePermission, setHasUpdatePermission] = useState<boolean | null>(null)\n\n  const handleOnChange = useCallback(\n    (changedValue: EditableReleaseDocument) => {\n      clearTimeout(timer)\n\n      /** @todo I wasn't able to get this working with the debouncer that we use in other parts */\n      const newTimer = setTimeout(() => {\n        if (hasUpdatePermission) {\n          updateRelease(changedValue)\n        }\n      }, 200)\n\n      setTimer(newTimer)\n    },\n    [hasUpdatePermission, timer, updateRelease],\n  )\n\n  const isMounted = useRef(false)\n  useEffect(() => {\n    isMounted.current = true\n\n    if (getIsReleaseOpen(release)) {\n      // title and description will be readOnly if release is not 'open'\n      // so only need to check permission to edit if release is 'open'\n      checkWithPermissionGuard(updateRelease, release).then((hasPermission) => {\n        if (isMounted.current) setHasUpdatePermission(hasPermission)\n      })\n    }\n\n    return () => {\n      isMounted.current = false\n    }\n  }, [checkWithPermissionGuard, release, release._id, updateRelease])\n\n  return (\n    <TitleDescriptionForm\n      key={release._id}\n      release={release}\n      onChange={handleOnChange}\n      disabled={Boolean(!hasUpdatePermission)}\n    />\n  )\n}\n","import {format} from 'date-fns'\nimport {useCallback} from 'react'\n\nimport useTimeZone, {getLocalTimeZone} from '../../scheduledPublishing/hooks/useTimeZone'\nimport {type TableRelease} from '../tool/overview/ReleasesOverview'\nimport {getPublishDateFromRelease} from '../util/util'\n\nexport const useReleaseTime = (): ((release: TableRelease) => string | null) => {\n  const {timeZone, utcToCurrentZoneDate} = useTimeZone()\n  const {abbreviation: localeTimeZoneAbbreviation} = getLocalTimeZone()\n\n  const getTimezoneAbbreviation = useCallback(\n    () =>\n      timeZone.abbreviation === localeTimeZoneAbbreviation ? '' : `(${timeZone.abbreviation})`,\n    [localeTimeZoneAbbreviation, timeZone.abbreviation],\n  )\n\n  return useCallback(\n    (release: TableRelease) => {\n      const publishDate = getPublishDateFromRelease(release)\n\n      return publishDate\n        ? `${format(utcToCurrentZoneDate(publishDate), 'PPpp')} ${getTimezoneAbbreviation()}`\n        : null\n    },\n    [getTimezoneAbbreviation, utcToCurrentZoneDate],\n  )\n}\n","import {useTranslation} from '../../../i18n'\nimport {useReleaseTime} from '../../hooks/useReleaseTime'\nimport {type TableRelease} from '../overview/ReleasesOverview'\n\nexport const ReleaseTime: React.FC<{release: TableRelease}> = ({release}) => {\n  const {t} = useTranslation()\n  const getReleaseTime = useReleaseTime()\n\n  const {metadata} = release\n\n  if (metadata.releaseType === 'asap') {\n    return t('release.type.asap')\n  }\n  if (metadata.releaseType === 'undecided') {\n    return t('release.type.undecided')\n  }\n\n  return getReleaseTime(release)\n}\n","import {LockIcon, PublishIcon} from '@sanity/icons'\nimport {Card, Flex, Spinner, Stack, TabList, Text, useClickOutsideEvent, useToast} from '@sanity/ui'\nimport {format, isBefore, isValid, parse, startOfMinute} from 'date-fns'\nimport {isEqual} from 'lodash'\nimport {useCallback, useMemo, useRef, useState} from 'react'\n\nimport {Button, Popover, Tab} from '../../../../ui-components'\nimport {MONTH_PICKER_VARIANT} from '../../../components/inputs/DateInputs/calendar/Calendar'\nimport {type CalendarLabels} from '../../../components/inputs/DateInputs/calendar/types'\nimport {DatePicker} from '../../../components/inputs/DateInputs/DatePicker'\nimport {LazyTextInput} from '../../../components/inputs/DateInputs/LazyTextInput'\nimport {getCalendarLabels} from '../../../form/inputs/DateInputs/utils'\nimport {useTranslation} from '../../../i18n/hooks/useTranslation'\nimport useTimeZone from '../../../scheduledPublishing/hooks/useTimeZone'\nimport {ReleaseAvatar} from '../../components/ReleaseAvatar'\nimport {useReleaseTime} from '../../hooks/useReleaseTime'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {type ReleaseType} from '../../store'\nimport {useReleaseOperations} from '../../store/useReleaseOperations'\nimport {getIsScheduledDateInPast} from '../../util/getIsScheduledDateInPast'\nimport {getReleaseTone} from '../../util/getReleaseTone'\nimport {\n  getPublishDateFromRelease,\n  isReleaseScheduledOrScheduling,\n  type NotArchivedRelease,\n} from '../../util/util'\nimport {ReleaseTime} from '../components/ReleaseTime'\n\nconst dateInputFormat = 'PP HH:mm'\n\nexport function ReleaseTypePicker(props: {release: NotArchivedRelease}): React.JSX.Element {\n  const {release} = props\n\n  const popoverRef = useRef<HTMLDivElement | null>(null)\n  const buttonRef = useRef<HTMLButtonElement | null>(null)\n  const inputRef = useRef<HTMLInputElement | null>(null)\n  const datePickerRef = useRef<HTMLDivElement | null>(null)\n\n  const {t: tRelease} = useTranslation(releasesLocaleNamespace)\n  const {t} = useTranslation()\n  const {updateRelease} = useReleaseOperations()\n  const toast = useToast()\n  const {utcToCurrentZoneDate, zoneDateToUtc} = useTimeZone()\n  const getReleaseTime = useReleaseTime()\n\n  const [open, setOpen] = useState(false)\n  const [releaseType, setReleaseType] = useState<ReleaseType>(release.metadata.releaseType)\n  const publishDate = useMemo(() => getPublishDateFromRelease(release), [release])\n  const [isUpdating, setIsUpdating] = useState(false)\n  const [isIntendedScheduleDateInPast, setIsIntendedScheduleDateInPast] = useState(\n    publishDate && isBefore(new Date(publishDate), new Date()),\n  )\n\n  const [intendedPublishAt, setIntendedPublishAt] = useState<Date | undefined>(\n    publishDate ? new Date(publishDate) : undefined,\n  )\n  const updatedDate = intendedPublishAt?.toISOString()\n  const intendedPublishAtTimezoneAdjusted = intendedPublishAt\n    ? utcToCurrentZoneDate(intendedPublishAt)\n    : intendedPublishAt\n\n  const calendarLabels: CalendarLabels = useMemo(() => getCalendarLabels(t), [t])\n\n  const close = useCallback(() => {\n    // a bit of a hack to make sure the timezone dialog is not immediately closed on out\n    // the dialog itself is in the Calendar component who is basically unrealted to this one\n    const dialog = document.querySelector('#time-zone')\n\n    if (open && !dialog) {\n      const newRelease = {\n        ...release,\n        metadata: {\n          ...release.metadata,\n          releaseType,\n          ...(typeof updatedDate === 'undefined' || releaseType !== 'scheduled'\n            ? {}\n            : {\n                intendedPublishAt: updatedDate,\n              }),\n        },\n      }\n\n      if (!isEqual(newRelease, release)) {\n        /**\n         * If in past, the reset type and intendedPublish to the actual release values\n         * and discard the changes made\n         */\n        if (getIsScheduledDateInPast(newRelease)) {\n          setReleaseType(release.metadata.releaseType)\n          setIntendedPublishAt(\n            release.metadata.intendedPublishAt\n              ? new Date(release.metadata.intendedPublishAt)\n              : undefined,\n          )\n\n          toast.push({\n            closable: true,\n            status: 'warning',\n            title: tRelease('schedule-dialog.publish-date-in-past-warning'),\n          })\n        } else {\n          setIsUpdating(true)\n          updateRelease(newRelease).finally(() => {\n            setIsUpdating(false)\n          })\n        }\n      }\n\n      setOpen(false)\n    }\n  }, [open, release, updatedDate, releaseType, toast, tRelease, updateRelease])\n\n  useClickOutsideEvent(close, () => [\n    popoverRef.current,\n    buttonRef.current,\n    inputRef.current,\n    datePickerRef.current,\n  ])\n\n  const isPublishDateInPast = !!publishDate && isBefore(new Date(publishDate), new Date())\n  const isReleaseScheduled = isReleaseScheduledOrScheduling(release)\n\n  const publishDateLabel = useMemo(() => {\n    if (release.state === 'published') {\n      if (isPublishDateInPast && publishDate)\n        return tRelease('dashboard.details.published-on', {\n          date: getReleaseTime(release),\n        })\n\n      return tRelease('dashboard.details.published-asap')\n    }\n\n    return <ReleaseTime release={release} />\n  }, [getReleaseTime, isPublishDateInPast, publishDate, release, tRelease])\n\n  const handleButtonReleaseTypeChange = useCallback(\n    (pickedReleaseType: ReleaseType) => {\n      setReleaseType(pickedReleaseType)\n      const nextPublishAt =\n        pickedReleaseType === 'scheduled'\n          ? (publishDate ?? startOfMinute(new Date()))\n          : (publishDate ?? undefined)\n      setIntendedPublishAt(nextPublishAt)\n      setIsIntendedScheduleDateInPast(true)\n    },\n    [publishDate],\n  )\n\n  const handlePublishAtCalendarChange = useCallback(\n    (date: Date | null) => {\n      if (!date) return\n\n      const cleanDate = zoneDateToUtc(startOfMinute(new Date(date)))\n      setIsIntendedScheduleDateInPast(isBefore(cleanDate, new Date()))\n      setIntendedPublishAt(cleanDate)\n    },\n    [zoneDateToUtc],\n  )\n\n  const handlePublishAtInputChange = useCallback(\n    (event: React.FocusEvent<HTMLInputElement>) => {\n      const parsedDate = zoneDateToUtc(\n        parse(event.currentTarget.value, dateInputFormat, new Date()),\n      )\n\n      if (isValid(parsedDate)) {\n        setIsIntendedScheduleDateInPast(isBefore(parsedDate, new Date()))\n\n        setIntendedPublishAt(startOfMinute(parsedDate))\n      }\n    },\n    [zoneDateToUtc],\n  )\n\n  const handleOnPickerClick = () => {\n    if (open) close()\n    else setOpen(true)\n  }\n\n  const PopoverContent = () => {\n    return (\n      <Stack space={1}>\n        <TabList space={0.5}>\n          <Tab\n            aria-controls=\"release-timing-asap\"\n            id=\"release-timing-asap-tab\"\n            onClick={() => handleButtonReleaseTypeChange('asap')}\n            label={t('release.type.asap')}\n            selected={releaseType === 'asap'}\n          />\n          <Tab\n            aria-controls=\"release-timing-at-time\"\n            id=\"release-timing-at-time-tab\"\n            onClick={() => handleButtonReleaseTypeChange('scheduled')}\n            selected={releaseType === 'scheduled'}\n            label={t('release.type.scheduled')}\n          />\n          <Tab\n            aria-controls=\"release-timing-undecided\"\n            id=\"release-timing-undecided-tab\"\n            onClick={() => handleButtonReleaseTypeChange('undecided')}\n            selected={releaseType === 'undecided'}\n            label={t('release.type.undecided')}\n          />\n        </TabList>\n        {releaseType === 'scheduled' && (\n          <>\n            {isIntendedScheduleDateInPast && (\n              <Card margin={1} padding={2} radius={2} shadow={1} tone=\"critical\">\n                <Text size={1}>{tRelease('schedule-dialog.publish-date-in-past-warning')}</Text>\n              </Card>\n            )}\n            <LazyTextInput\n              data-testid=\"date-input\"\n              value={\n                intendedPublishAtTimezoneAdjusted\n                  ? format(intendedPublishAtTimezoneAdjusted, dateInputFormat)\n                  : undefined\n              }\n              onChange={handlePublishAtInputChange}\n            />\n            <DatePicker\n              ref={datePickerRef}\n              monthPickerVariant={MONTH_PICKER_VARIANT.carousel}\n              calendarLabels={calendarLabels}\n              selectTime\n              padding={0}\n              value={intendedPublishAtTimezoneAdjusted}\n              onChange={handlePublishAtCalendarChange}\n              isPastDisabled\n              showTimezone\n            />\n          </>\n        )}\n      </Stack>\n    )\n  }\n\n  const tone = release.state === 'published' ? 'positive' : getReleaseTone(release)\n\n  const releaseTypeIcon = useMemo(() => {\n    if (isUpdating) return <Spinner size={1} data-testid=\"updating-release-spinner\" />\n    if (release.state === 'published') return <PublishIcon />\n\n    return <ReleaseAvatar tone={tone} padding={0} />\n  }, [isUpdating, release.state, tone])\n\n  const labelContent = useMemo(\n    () => (\n      <Flex flex={1} gap={2} align={'center'}>\n        {releaseTypeIcon}\n        <Text muted size={1} data-testid=\"release-type-label\" weight=\"medium\">\n          {publishDateLabel}\n        </Text>\n\n        {isReleaseScheduled && (\n          <Text size={1}>\n            <LockIcon />\n          </Text>\n        )}\n      </Flex>\n    ),\n    [isReleaseScheduled, publishDateLabel, releaseTypeIcon],\n  )\n\n  return (\n    <Popover\n      content={<PopoverContent />}\n      open={open}\n      padding={1}\n      placement=\"bottom-start\"\n      ref={popoverRef}\n    >\n      {release.state === 'published' ? (\n        <Card\n          tone=\"default\"\n          data-testid=\"published-release-type-label\"\n          padding={2}\n          style={{borderRadius: '999px'}}\n        >\n          {labelContent}\n        </Card>\n      ) : (\n        <Button\n          disabled={isReleaseScheduled}\n          mode=\"bleed\"\n          onClick={handleOnPickerClick}\n          ref={buttonRef}\n          tooltipProps={{\n            placement: 'bottom',\n            content: isReleaseScheduled && tRelease('type-picker.tooltip.scheduled'),\n          }}\n          selected={open}\n          tone={tone}\n          style={{borderRadius: '999px'}}\n          data-testid=\"release-type-picker\"\n        >\n          {labelContent}\n        </Button>\n      )}\n    </Popover>\n  )\n}\n","import {\n  ErrorOutlineIcon,\n  InfoOutlineIcon,\n  PinFilledIcon,\n  PinIcon,\n  WarningOutlineIcon,\n} from '@sanity/icons'\nimport {Box, Card, Container, Flex, Stack, Text} from '@sanity/ui'\nimport {useCallback, useEffect, useRef, useState} from 'react'\n\nimport {Button} from '../../../../ui-components/button/Button'\nimport {ToneIcon} from '../../../../ui-components/toneIcon/ToneIcon'\nimport {TextWithTone} from '../../../components/textWithTone/TextWithTone'\nimport {Details} from '../../../form/components/Details'\nimport {useProjectSubscriptions} from '../../../hooks/useProjectSubscriptions'\nimport {useTranslation} from '../../../i18n'\nimport {usePerspective} from '../../../perspective/usePerspective'\nimport {useSetPerspective} from '../../../perspective/useSetPerspective'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {type ReleaseDocument} from '../../store/types'\nimport {useReleaseOperations} from '../../store/useReleaseOperations'\nimport {useReleasePermissions} from '../../store/useReleasePermissions'\nimport {getReleaseIdFromReleaseDocumentId} from '../../util/getReleaseIdFromReleaseDocumentId'\nimport {isNotArchivedRelease} from '../../util/util'\nimport {ReleaseDetailsEditor} from './ReleaseDetailsEditor'\nimport {ReleaseTypePicker} from './ReleaseTypePicker'\n\nexport function ReleaseDashboardDetails({release}: {release: ReleaseDocument}) {\n  const {state} = release\n  const releaseId = getReleaseIdFromReleaseDocumentId(release._id)\n  const {checkWithPermissionGuard} = useReleasePermissions()\n  const {publishRelease, schedule} = useReleaseOperations()\n\n  const {t: tRelease} = useTranslation(releasesLocaleNamespace)\n  const {selectedReleaseId} = usePerspective()\n  const setPerspective = useSetPerspective()\n  const {projectSubscriptions} = useProjectSubscriptions()\n\n  const retentionDays =\n    projectSubscriptions?.featureTypes.retention.features[0].attributes.maxRetentionDays\n  const isSelected = releaseId === selectedReleaseId\n  const isAtTimeRelease = release?.metadata?.releaseType === 'scheduled'\n  const isReleaseOpen = state !== 'archived' && state !== 'published'\n  const isActive = release.state === 'active'\n  const shouldDisplayError = isActive && typeof release.error !== 'undefined'\n  const [shouldDisplayPermissionWarning, setShouldDisplayPermissionWarning] = useState(false)\n  const shouldDisplayWarnings = isActive && shouldDisplayPermissionWarning\n  const isMounted = useRef(false)\n  useEffect(() => {\n    isMounted.current = true\n\n    // only run if the release is active\n    if (isActive) {\n      checkWithPermissionGuard(publishRelease, release._id).then((hasPermission) => {\n        if (isMounted.current) setShouldDisplayPermissionWarning(!hasPermission)\n      })\n\n      // if it's a release that can be scheduled, check if it can be scheduled\n      if (release.metadata.intendedPublishAt && isAtTimeRelease) {\n        checkWithPermissionGuard(schedule, release._id, new Date()).then((hasPermission) => {\n          if (isMounted.current) setShouldDisplayPermissionWarning(!hasPermission)\n        })\n      }\n    }\n    return () => {\n      isMounted.current = false\n    }\n  }, [\n    checkWithPermissionGuard,\n    isActive,\n    isAtTimeRelease,\n    publishRelease,\n    release._id,\n    release.metadata.intendedPublishAt,\n    schedule,\n  ])\n\n  const handlePinRelease = useCallback(() => {\n    if (isSelected) {\n      setPerspective('drafts')\n    } else {\n      setPerspective(releaseId)\n    }\n  }, [isSelected, releaseId, setPerspective])\n\n  return (\n    <Container width={3}>\n      <Stack padding={3} paddingY={[3, 3, 4, 5]}>\n        <Flex gap={1} align=\"center\">\n          {isReleaseOpen && (\n            <Button\n              icon={isSelected ? PinFilledIcon : PinIcon}\n              tooltipProps={{\n                placement: 'top',\n                content: isSelected\n                  ? tRelease('dashboard.details.unpin-release')\n                  : tRelease('dashboard.details.pin-release'),\n              }}\n              mode=\"bleed\"\n              onClick={handlePinRelease}\n              radius=\"full\"\n              selected={isSelected}\n              aria-label={\n                isSelected\n                  ? `${tRelease('dashboard.details.unpin-release')}: \"${release.metadata.title}\"`\n                  : `${tRelease('dashboard.details.pin-release')}: \"${release.metadata.title}\"`\n              }\n              aria-live=\"assertive\"\n            />\n          )}\n          {isNotArchivedRelease(release) && <ReleaseTypePicker release={release} />}\n          {shouldDisplayError && (\n            <Flex gap={2} padding={2} data-testid=\"release-error-details\">\n              <Text size={1}>\n                <ToneIcon icon={ErrorOutlineIcon} tone=\"critical\" />\n              </Text>\n              <TextWithTone size={1} tone=\"critical\">\n                {isAtTimeRelease\n                  ? tRelease('failed-schedule-title')\n                  : tRelease('failed-publish-title')}\n              </TextWithTone>\n            </Flex>\n          )}\n          {shouldDisplayWarnings && (\n            <Flex gap={2} padding={2} data-testid=\"release-permission-error-details\">\n              <Text size={1}>\n                <ToneIcon icon={WarningOutlineIcon} tone=\"caution\" />\n              </Text>\n              <TextWithTone size={1} tone=\"caution\">\n                {tRelease('permission-missing-title')}\n              </TextWithTone>\n            </Flex>\n          )}\n        </Flex>\n        <Box padding={2}>\n          <ReleaseDetailsEditor release={release} />\n        </Box>\n        {shouldDisplayError && (\n          <Card padding={4} radius={4} tone=\"critical\">\n            <Flex gap={3}>\n              <Text size={1}>\n                <ErrorOutlineIcon />\n              </Text>\n              <Stack space={4}>\n                <Text size={1} weight=\"semibold\">\n                  {isAtTimeRelease\n                    ? tRelease('failed-schedule-title')\n                    : tRelease('failed-publish-title')}\n                </Text>\n                <Details title={tRelease('error-details-title')}>\n                  <Text size={1} accent>\n                    <code>{release.error?.message}</code>\n                  </Text>\n                </Details>\n              </Stack>\n            </Flex>\n          </Card>\n        )}\n\n        {shouldDisplayWarnings && (\n          <Card padding={4} radius={4} tone=\"caution\">\n            <Flex gap={3}>\n              <Text size={1}>\n                <WarningOutlineIcon />\n              </Text>\n              <Stack space={3}>\n                <Text size={1}>{tRelease('permission-missing-title')}</Text>\n                <Text size={1} muted>\n                  {tRelease('permission-missing-description')}\n                </Text>\n              </Stack>\n            </Flex>\n          </Card>\n        )}\n\n        {!isReleaseOpen && retentionDays && (\n          <Card padding={4} radius={4} tone=\"primary\" data-testid=\"retention-policy-card\">\n            <Flex gap={3}>\n              <Text size={1}>\n                <InfoOutlineIcon />\n              </Text>\n              <Stack space={4}>\n                <Text size={1} weight=\"semibold\">\n                  {state === 'archived'\n                    ? tRelease('archive-info.title')\n                    : tRelease('publish-info.title')}\n                </Text>\n                <Text size={1} accent>\n                  {tRelease('archive-info.description', {retentionDays})}\n                </Text>\n              </Stack>\n            </Flex>\n          </Card>\n        )}\n      </Stack>\n    </Container>\n  )\n}\n","import {ErrorOutlineIcon, PublishIcon} from '@sanity/icons'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {Flex, Text, useToast} from '@sanity/ui'\nimport {useCallback, useEffect, useMemo, useRef, useState} from 'react'\n\nimport {Button, Dialog, MenuItem, type TooltipProps} from '../../../../../ui-components'\nimport {ToneIcon} from '../../../../../ui-components/toneIcon/ToneIcon'\nimport {Translate, useTranslation} from '../../../../i18n'\nimport {usePerspective} from '../../../../perspective/usePerspective'\nimport {useSetPerspective} from '../../../../perspective/useSetPerspective'\nimport {PublishedRelease} from '../../../__telemetry__/releases.telemetry'\nimport {releasesLocaleNamespace} from '../../../i18n'\nimport {isReleaseDocument, type ReleaseDocument} from '../../../index'\nimport {useReleaseOperations} from '../../../store/useReleaseOperations'\nimport {useReleasePermissions} from '../../../store/useReleasePermissions'\nimport {type DocumentInRelease} from '../../detail/useBundleDocuments'\n\ninterface ReleasePublishAllButtonProps {\n  release: ReleaseDocument\n  documents: DocumentInRelease[]\n  disabled?: boolean\n  isMenuItem?: boolean\n  onConfirmDialogOpen?: () => void\n  onConfirmDialogClose?: () => void\n}\n\nexport const ReleasePublishAllButton = ({\n  release,\n  documents,\n  disabled,\n  isMenuItem = false,\n  onConfirmDialogOpen,\n  onConfirmDialogClose,\n}: ReleasePublishAllButtonProps) => {\n  const toast = useToast()\n  const {publishRelease} = useReleaseOperations()\n  const {checkWithPermissionGuard} = useReleasePermissions()\n  const {t} = useTranslation(releasesLocaleNamespace)\n  const {t: tCore} = useTranslation()\n  const perspective = usePerspective()\n  const setPerspective = useSetPerspective()\n  const telemetry = useTelemetry()\n\n  const [publishBundleStatus, setPublishBundleStatus] = useState<'idle' | 'confirm' | 'publishing'>(\n    'idle',\n  )\n\n  const [publishPermission, setPublishPermission] = useState<boolean>(false)\n\n  const isValidatingDocuments = documents.some(({validation}) => validation.isValidating)\n  const hasDocumentValidationErrors = documents.some(({validation}) => validation.hasError)\n\n  const isPublishButtonDisabled =\n    disabled || isValidatingDocuments || hasDocumentValidationErrors || !publishPermission\n\n  const isMounted = useRef(false)\n  useEffect(() => {\n    isMounted.current = true\n\n    checkWithPermissionGuard(publishRelease, release._id).then((hasPermission) => {\n      if (isMounted.current) setPublishPermission(hasPermission)\n    })\n\n    return () => {\n      isMounted.current = false\n    }\n  }, [checkWithPermissionGuard, publishRelease, release._id, release.metadata.intendedPublishAt])\n\n  const handleConfirmPublishAll = useCallback(async () => {\n    if (!release) return\n\n    try {\n      setPublishBundleStatus('publishing')\n      await publishRelease(release._id)\n      telemetry.log(PublishedRelease)\n      if (\n        isReleaseDocument(perspective.selectedPerspective) &&\n        perspective.selectedPerspective?._id === release._id\n      ) {\n        setPerspective('drafts')\n      }\n    } catch (publishingError) {\n      toast.push({\n        status: 'error',\n        title: (\n          <Text muted size={1}>\n            <Translate\n              t={t}\n              i18nKey=\"toast.publish.error\"\n              values={{\n                title: release.metadata.title || tCore('release.placeholder-untitled-release'),\n              }}\n            />\n          </Text>\n        ),\n      })\n      console.error(publishingError)\n    } finally {\n      onConfirmDialogClose?.()\n      setPublishBundleStatus('idle')\n    }\n  }, [\n    release,\n    publishRelease,\n    telemetry,\n    toast,\n    t,\n    tCore,\n    perspective.selectedPerspective,\n    setPerspective,\n    onConfirmDialogClose,\n  ])\n\n  const confirmPublishDialog = useMemo(() => {\n    if (publishBundleStatus === 'idle') return null\n\n    return (\n      <Dialog\n        id=\"confirm-publish-dialog\"\n        data-testid=\"confirm-publish-dialog\"\n        header={t('publish-dialog.confirm-publish.title')}\n        onClose={() => {\n          onConfirmDialogClose?.()\n          setPublishBundleStatus('idle')\n        }}\n        footer={{\n          confirmButton: {\n            text: t('action.publish-all-documents'),\n            tone: 'positive',\n            onClick: handleConfirmPublishAll,\n            loading: publishBundleStatus === 'publishing',\n            disabled: publishBundleStatus === 'publishing',\n          },\n        }}\n      >\n        <Text muted size={1}>\n          {\n            <Translate\n              t={t}\n              i18nKey=\"publish-dialog.confirm-publish-description\"\n              values={{\n                title: release.metadata.title || tCore('release.placeholder-untitled-release'),\n                releaseDocumentsLength: documents.length,\n                count: documents.length,\n              }}\n            />\n          }\n        </Text>\n      </Dialog>\n    )\n  }, [\n    publishBundleStatus,\n    t,\n    handleConfirmPublishAll,\n    release.metadata.title,\n    tCore,\n    documents.length,\n    onConfirmDialogClose,\n  ])\n\n  const publishTooltipContent = useMemo(() => {\n    if (!hasDocumentValidationErrors && !isValidatingDocuments && publishPermission) return null\n\n    const tooltipText = () => {\n      if (documents.length === 0) {\n        return t('publish-action.validation.no-documents')\n      }\n\n      if (!publishPermission) {\n        return t('publish-dialog.validation.no-permission')\n      }\n\n      if (isValidatingDocuments) {\n        return t('publish-dialog.validation.loading')\n      }\n\n      if (hasDocumentValidationErrors) {\n        return t('publish-dialog.validation.error')\n      }\n\n      return null\n    }\n\n    // TODO: this is a duplicate of logic in ReleaseScheduleButton\n    return (\n      <Text muted size={1}>\n        <Flex align=\"center\" gap={3} padding={1}>\n          <ToneIcon icon={ErrorOutlineIcon} tone={isValidatingDocuments ? 'default' : 'critical'} />\n          {tooltipText()}\n        </Flex>\n      </Text>\n    )\n  }, [documents.length, hasDocumentValidationErrors, isValidatingDocuments, publishPermission, t])\n\n  const handleInitialPublish = useCallback(() => {\n    setPublishBundleStatus('confirm')\n    onConfirmDialogOpen?.()\n  }, [onConfirmDialogOpen])\n\n  const sharedProps = useMemo(\n    () => ({\n      icon: PublishIcon,\n      disabled:\n        isPublishButtonDisabled || publishBundleStatus === 'publishing' || documents.length === 0,\n      text: t('action.publish-all-documents'),\n      handleOnClick: handleInitialPublish,\n      tooltipProps: {\n        disabled: !isPublishButtonDisabled,\n        content: publishTooltipContent,\n        placement: 'bottom',\n      } as Partial<TooltipProps>,\n    }),\n    [\n      documents.length,\n      handleInitialPublish,\n      isPublishButtonDisabled,\n      publishBundleStatus,\n      publishTooltipContent,\n      t,\n    ],\n  )\n\n  return (\n    <>\n      {isMenuItem ? (\n        <MenuItem\n          tooltipProps={sharedProps.tooltipProps}\n          icon={sharedProps.icon}\n          disabled={sharedProps.disabled}\n          text={sharedProps.text}\n          onClick={sharedProps.handleOnClick}\n          data-testid=\"publish-all-button-menu-item\"\n        />\n      ) : (\n        <Button\n          tooltipProps={sharedProps.tooltipProps}\n          icon={sharedProps.icon}\n          disabled={sharedProps.disabled}\n          text={sharedProps.text}\n          onClick={sharedProps.handleOnClick}\n          loading={publishBundleStatus === 'publishing'}\n          data-testid=\"publish-all-button\"\n          tone=\"positive\"\n        />\n      )}\n      {confirmPublishDialog}\n    </>\n  )\n}\n","import {type ClientError, type SanityClient} from '@sanity/client'\nimport {catchError, map, type Observable, of} from 'rxjs'\n\nexport interface ReleaseLimits {\n  orgActiveReleaseCount: number\n  defaultOrgActiveReleaseLimit: number\n  datasetReleaseLimit: number\n  // internal server error has no fallback number - it uses null\n  orgActiveReleaseLimit: number | null\n}\n\ninterface ReleaseLimitsResponse {\n  data: ReleaseLimits\n}\n\nfunction isErrorAtLimits(error: ClientError) {\n  return (\n    error.statusCode === 403 &&\n    typeof error.response.body !== 'string' &&\n    'data' in error.response.body\n  )\n}\n\n/**\n * @internal\n * fetches subscriptions for this project\n */\nexport function fetchReleaseLimits(\n  client: SanityClient,\n  storeOrigin: string,\n): Observable<ReleaseLimits> {\n  const {projectId} = client.config()\n\n  // This endpoint is prone to optimisation and further work\n  // it will never live within a versions API and will always be on vX\n  // until it goes away - there is graceful handling in `catchError`\n  // for when this endpoint is no longer available and limits are fetched\n  // some other way\n  const clientX = client.withConfig({apiVersion: 'vX'})\n\n  return clientX.observable\n    .request<ReleaseLimitsResponse>({\n      uri: `projects/${projectId}/new-content-release-allowed`,\n      /**\n       * In a particular case when both releaseLimits\n       * and orgActiveReleaseCount stores are empty, 2 fetch calls are made\n       * to guard the create/archive/revert actions - browsers behave differently.\n       *\n       * Chromium based browsers will stall the second network request until the first\n       * resolves by attaching the store name to the tag, this spoofs 2 unique requests\n       * allowing both the fire in parallel.\n       */\n      tag: `new-content-release-allowed-${storeOrigin}`,\n    })\n    .pipe(\n      catchError((error: ClientError) => {\n        console.error(error)\n\n        if (isErrorAtLimits(error)) {\n          // body will still contain the limits and current count (if available)\n          // so still want to return these and just silently log the error\n          return of(error.response.body as ReleaseLimitsResponse)\n        }\n\n        // for internal server errors, or as a fallback\n        // propagate up the error\n        throw error\n      }),\n      map(({data}) => data),\n    )\n}\n","import {type SanityClient} from '@sanity/client'\nimport {useMemo} from 'react'\nimport {catchError, map, type Observable, of, shareReplay} from 'rxjs'\n\nimport {useClient} from '../../hooks/useClient'\nimport {useResourceCache} from '../../store/_legacy/ResourceCacheProvider'\nimport {fetchReleaseLimits, type ReleaseLimits} from '../contexts/upsell/fetchReleaseLimits'\n\ninterface ReleaseLimitsStore {\n  releaseLimits$: Observable<Omit<ReleaseLimits, 'orgActiveReleaseCount'> | null>\n}\n\nconst RELEASE_LIMITS_RESOURCE_CACHE_NAMESPACE = 'ReleaseLimits'\n\nfunction createReleaseLimitsStore(client: SanityClient): ReleaseLimitsStore {\n  const releaseLimits$ = fetchReleaseLimits(client, 'releaseLimits').pipe(\n    map((data) => ({\n      defaultOrgActiveReleaseLimit: data.defaultOrgActiveReleaseLimit,\n      datasetReleaseLimit: data.datasetReleaseLimit,\n      orgActiveReleaseLimit: data.orgActiveReleaseLimit,\n    })),\n    shareReplay(1),\n    catchError((error) => {\n      console.error('Failed to fetch release limits', error)\n\n      return of(null)\n    }),\n  )\n\n  return {\n    releaseLimits$,\n  }\n}\n\n/**\n * @internal\n *\n * Returns a shared observable to a cache of the release limits for the current project.\n *\n * This cache is shared across all instances of this hook, and will only be fetched once.\n * It will never expire as the limits are not expected to change during the lifetime of the render cycle.\n *\n * @returns An Observable of the cached value for the release limits\n */\nexport const useReleaseLimits: () => ReleaseLimitsStore = () => {\n  const resourceCache = useResourceCache()\n  const client = useClient({apiVersion: 'v2025-02-19'})\n\n  return useMemo(() => {\n    const releaseLimitsStore =\n      resourceCache.get<ReleaseLimitsStore>({\n        dependencies: [client],\n        namespace: RELEASE_LIMITS_RESOURCE_CACHE_NAMESPACE,\n      }) || createReleaseLimitsStore(client)\n\n    resourceCache.set({\n      namespace: RELEASE_LIMITS_RESOURCE_CACHE_NAMESPACE,\n      value: releaseLimitsStore,\n      dependencies: [client],\n    })\n\n    return releaseLimitsStore\n  }, [client, resourceCache])\n}\n","import {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {of} from 'rxjs'\n\nimport {useFeatureEnabled} from '../../hooks/useFeatureEnabled'\nimport {useReleaseLimits} from '../store/useReleaseLimits'\n\n/**\n * @internal\n * @returns `boolean` Whether the current org is on a Releases+ plan\n */\nexport const useIsReleasesPlus = (): boolean => {\n  const {releaseLimits$} = useReleaseLimits()\n  const {enabled: isReleasesFeatureEnabled} = useFeatureEnabled('contentReleases')\n\n  /**\n   * Only provide observable to cache store if releases is feature enabled\n   */\n  const releasesLimitForPlus$ = useMemo(\n    () => (isReleasesFeatureEnabled ? releaseLimits$ : of(null)),\n    [isReleasesFeatureEnabled, releaseLimits$],\n  )\n\n  const releaseLimit = useObservable(releasesLimitForPlus$, null)\n\n  if (!isReleasesFeatureEnabled) return false\n\n  const {orgActiveReleaseLimit, defaultOrgActiveReleaseLimit = 0} = releaseLimit || {}\n\n  // presume not releases+ if null releaseLimit\n  // (because of internal server error or network error)\n  return !!orgActiveReleaseLimit && orgActiveReleaseLimit > defaultOrgActiveReleaseLimit\n}\n","import {type SanityDocument} from '@sanity/types'\nimport {useCallback, useEffect, useMemo, useRef} from 'react'\nimport {useObservable} from 'react-rx'\nimport {catchError, forkJoin, from, map, type Observable, of, switchMap} from 'rxjs'\n\nimport {useClient} from '../../../../../hooks/useClient'\nimport {getTransactionsLogs} from '../../../../../store/translog/getTransactionsLogs'\nimport {getPublishedId} from '../../../../../util/draftUtils'\nimport {RELEASES_STUDIO_CLIENT_OPTIONS} from '../../../../util/releasesClient'\nimport {type DocumentInRelease} from '../../../detail/useBundleDocuments'\n\nexport type RevertDocument = SanityDocument & {\n  _system?: {\n    delete: true\n  }\n}\n\ntype RevertDocuments = RevertDocument[]\n\ntype DocumentRevertStates = RevertDocuments | null | undefined\n\nexport const useDocumentRevertStates = (releaseDocuments: DocumentInRelease[]) => {\n  const client = useClient(RELEASES_STUDIO_CLIENT_OPTIONS)\n  const observableClient = client.observable\n  const transactionId = releaseDocuments[0]?.document._rev\n  const {dataset} = client.config()\n\n  const resultPromiseRef = useRef<Promise<DocumentRevertStates> | null>(null)\n  const resolvedDocumentRevertStatesPromiseRef = useRef<\n    ((value: DocumentRevertStates) => void) | null\n  >(null)\n  const resolvedDocumentRevertStatesResultRef = useRef<DocumentRevertStates | null>(null)\n\n  useEffect(() => {\n    if (!resultPromiseRef.current) {\n      const {promise, resolve} = Promise.withResolvers<DocumentRevertStates>()\n\n      resultPromiseRef.current = promise\n      resolvedDocumentRevertStatesPromiseRef.current = resolve\n    }\n  }, [])\n\n  const memoDocumentRevertStates = useMemo(() => {\n    if (!releaseDocuments.length) return of(undefined)\n\n    const publishedDocuments = releaseDocuments.map(({document}) => ({\n      ...document,\n      _id: getPublishedId(document._id),\n    }))\n\n    const documentRevertStates$: Observable<RevertDocuments | null | undefined> = from(\n      getTransactionsLogs(\n        client,\n        publishedDocuments.map((document) => document._id),\n        {\n          toTransaction: transactionId,\n          // reverse order so most recent publish before release is second element\n          // (first is the release publish itself)\n          reverse: true,\n        },\n      ),\n    ).pipe(\n      map((transactions) => {\n        if (transactions.length === 0) throw new Error('No transactions found.')\n\n        const getDocumentTransaction = (docId: string) =>\n          // second element is the transaction before the release\n          transactions.filter(({documentIDs}) => documentIDs.includes(docId))[1]?.id\n\n        return publishedDocuments.map((document) => ({\n          docId: document._id,\n          revisionId: getDocumentTransaction(document._id),\n        }))\n      }),\n      switchMap((docRevisionPairs) => {\n        if (!docRevisionPairs) return of(undefined)\n\n        return forkJoin(\n          docRevisionPairs.map(({docId, revisionId}) => {\n            if (!revisionId) {\n              const {publishedDocumentExists, ...unpublishDocument} =\n                publishedDocuments.find((document) => document._id === docId) || {}\n\n              return of({\n                ...unpublishDocument,\n                _system: {delete: true},\n              } as RevertDocument)\n            }\n\n            return observableClient\n              .request<{\n                documents: RevertDocuments\n              }>({\n                url: `/data/history/${dataset}/documents/${docId}?revision=${revisionId}`,\n              })\n              .pipe(\n                map(({documents: [revertDocument]}) => revertDocument),\n                catchError((err) => {\n                  console.error(`Error fetching document ${docId}:`, err)\n                  return of(undefined)\n                }),\n              )\n          }),\n        )\n      }),\n      map((results) => results?.filter((result) => result !== undefined)),\n      catchError((err) => {\n        console.error('Error in document revert states pipeline:', err)\n        return of(undefined)\n      }),\n    )\n\n    return documentRevertStates$\n  }, [client, releaseDocuments, transactionId, observableClient, dataset])\n\n  const documentRevertStatesResult = useObservable(memoDocumentRevertStates, null)\n\n  useEffect(() => {\n    if (documentRevertStatesResult !== null) {\n      resolvedDocumentRevertStatesResultRef.current = documentRevertStatesResult\n\n      // Resolve promise if it exists\n      if (resolvedDocumentRevertStatesPromiseRef.current) {\n        resolvedDocumentRevertStatesPromiseRef.current(documentRevertStatesResult)\n        resolvedDocumentRevertStatesPromiseRef.current = null\n        resultPromiseRef.current = null // Reset resultPromiseRef for future fetches\n      }\n    }\n  }, [documentRevertStatesResult])\n\n  return useCallback(() => {\n    if (resolvedDocumentRevertStatesResultRef.current) {\n      // Return resolved value immediately if available\n      return Promise.resolve(resolvedDocumentRevertStatesResultRef.current)\n    }\n\n    return resultPromiseRef.current\n  }, [])\n}\n","import {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {catchError, from, map, of} from 'rxjs'\n\nimport {useClient} from '../../../../../hooks/useClient'\nimport {getTransactionsLogs} from '../../../../../store/translog/getTransactionsLogs'\nimport {getPublishedId} from '../../../../../util/draftUtils'\nimport {RELEASES_STUDIO_CLIENT_OPTIONS} from '../../../../util/releasesClient'\nimport {type DocumentInRelease} from '../../../detail/useBundleDocuments'\n\nexport const usePostPublishTransactions = (documents: DocumentInRelease[]) => {\n  const client = useClient(RELEASES_STUDIO_CLIENT_OPTIONS)\n  const transactionId = documents[0]?.document._rev\n\n  const memoHasPostPublishTransactions = useMemo(() => {\n    if (!documents.length) return of(false)\n\n    return from(\n      getTransactionsLogs(\n        client,\n        documents.map(({document}) => getPublishedId(document._id)),\n        {\n          fromTransaction: transactionId,\n          // publish transaction + at least one post publish transaction\n          limit: 2,\n        },\n      ),\n    ).pipe(\n      // the transaction of published is also returned\n      // so post publish transactions will result in more than 1 transaction\n      map((transactions) => transactions.length > 1),\n      catchError(() => of(null)),\n    )\n  }, [client, documents, transactionId])\n\n  return useObservable(memoHasPostPublishTransactions, null)\n}\n","import {RestoreIcon} from '@sanity/icons'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {Box, Card, Checkbox, Flex, Text, useToast} from '@sanity/ui'\nimport {useCallback, useEffect, useRef, useState} from 'react'\nimport {useRouter} from 'sanity/router'\n\nimport {Button} from '../../../../../../ui-components/button/Button'\nimport {Dialog} from '../../../../../../ui-components/dialog'\nimport {Translate, useTranslation} from '../../../../../i18n'\nimport {RevertRelease} from '../../../../__telemetry__/releases.telemetry'\nimport {useReleasesUpsell} from '../../../../contexts/upsell/useReleasesUpsell'\nimport {useIsReleasesPlus} from '../../../../hooks/useIsReleasesPlus'\nimport {releasesLocaleNamespace} from '../../../../i18n'\nimport {isReleaseLimitError} from '../../../../store/isReleaseLimitError'\nimport {type ReleaseDocument} from '../../../../store/types'\nimport {useReleaseOperations} from '../../../../store/useReleaseOperations'\nimport {useReleasePermissions} from '../../../../store/useReleasePermissions'\nimport {createReleaseId} from '../../../../util/createReleaseId'\nimport {getReleaseIdFromReleaseDocumentId} from '../../../../util/getReleaseIdFromReleaseDocumentId'\nimport {getReleaseDefaults} from '../../../../util/util'\nimport {type DocumentInRelease} from '../../../detail/useBundleDocuments'\nimport {useDocumentRevertStates} from './useDocumentRevertStates'\nimport {usePostPublishTransactions} from './usePostPublishTransactions'\n\ninterface ReleasePublishAllButtonProps {\n  release: ReleaseDocument\n  documents: DocumentInRelease[]\n  disabled?: boolean\n}\n\ntype RevertReleaseStatus = 'idle' | 'confirm' | 'reverting'\n\nconst ConfirmReleaseDialog = ({\n  revertReleaseStatus,\n  documents,\n  setRevertReleaseStatus,\n  release,\n}: {\n  revertReleaseStatus: RevertReleaseStatus\n  documents: DocumentInRelease[]\n  setRevertReleaseStatus: (status: RevertReleaseStatus) => void\n  release: ReleaseDocument\n}) => {\n  const {t} = useTranslation(releasesLocaleNamespace)\n  const {t: tCore} = useTranslation()\n  const hasPostPublishTransactions = usePostPublishTransactions(documents)\n  const getDocumentRevertStates = useDocumentRevertStates(documents)\n  const [stageNewRevertRelease, setStageNewRevertRelease] = useState(true)\n  const toast = useToast()\n  const telemetry = useTelemetry()\n  const {revertRelease} = useReleaseOperations()\n  const router = useRouter()\n\n  const navigateToRevertRelease = useCallback(\n    (revertReleaseId: string) => () =>\n      router.navigate({releaseId: getReleaseIdFromReleaseDocumentId(revertReleaseId)}),\n    [router],\n  )\n\n  const handleRevertRelease = useCallback(async () => {\n    setRevertReleaseStatus('reverting')\n    const documentRevertStates = await getDocumentRevertStates()\n\n    const revertReleaseId = createReleaseId()\n\n    try {\n      if (!documentRevertStates) {\n        throw new Error('Unable to find documents to revert')\n      }\n\n      await revertRelease(\n        revertReleaseId,\n        documentRevertStates,\n        {\n          title: t('revert-release.title', {\n            title: release.metadata.title || tCore('release.placeholder-untitled-release'),\n          }),\n          description: t('revert-release.description', {\n            title: release.metadata.title || tCore('release.placeholder-untitled-release'),\n          }),\n          releaseType: 'asap',\n        },\n        stageNewRevertRelease ? 'staged' : 'immediate',\n      )\n\n      if (stageNewRevertRelease) {\n        telemetry.log(RevertRelease, {revertType: 'staged'})\n        toast.push({\n          closable: true,\n          status: 'success',\n          title: (\n            <Text muted size={1}>\n              <Translate\n                components={{\n                  Link: () => (\n                    <Text\n                      size={1}\n                      weight=\"medium\"\n                      data-as=\"a\"\n                      onClick={navigateToRevertRelease(revertReleaseId)}\n                      style={{\n                        cursor: 'pointer',\n                        marginBottom: '0.5rem',\n                        display: 'flex',\n                      }}\n                      data-testid=\"revert-stage-success-link\"\n                    >\n                      {t('toast.revert-stage.success-link')}\n                    </Text>\n                  ),\n                }}\n                t={t}\n                i18nKey=\"toast.revert-stage.success\"\n                values={{\n                  title: release.metadata.title || tCore('release.placeholder-untitled-release'),\n                }}\n              />\n            </Text>\n          ),\n        })\n      } else {\n        telemetry.log(RevertRelease, {revertType: 'immediate'})\n\n        toast.push({\n          closable: true,\n          status: 'success',\n          title: (\n            <Text muted size={1}>\n              <Translate\n                t={t}\n                i18nKey=\"toast.immediate-revert.success\"\n                values={{\n                  title: release.metadata.title || tCore('release.placeholder-untitled-release'),\n                }}\n              />\n            </Text>\n          ),\n        })\n      }\n    } catch (revertError) {\n      if (isReleaseLimitError(revertError)) return\n\n      toast.push({\n        status: 'error',\n        title: (\n          <Text muted size={1}>\n            <Translate t={t} i18nKey=\"toast.revert.error\" values={{error: revertError.message}} />\n          </Text>\n        ),\n      })\n      console.error(revertError)\n    } finally {\n      setRevertReleaseStatus('idle')\n    }\n  }, [\n    setRevertReleaseStatus,\n    getDocumentRevertStates,\n    revertRelease,\n    t,\n    tCore,\n    release.metadata.title,\n    stageNewRevertRelease,\n    telemetry,\n    toast,\n    navigateToRevertRelease,\n  ])\n\n  const description =\n    documents.length > 1\n      ? 'revert-dialog.confirm-revert-description_other'\n      : 'revert-dialog.confirm-revert-description_one'\n\n  return (\n    <Dialog\n      id=\"confirm-revert-dialog\"\n      header={t('revert-dialog.confirm-revert.title', {\n        title: release.metadata.title || tCore('release.placeholder-untitled-release'),\n      })}\n      onClose={() => setRevertReleaseStatus('idle')}\n      footer={{\n        confirmButton: {\n          text: t(\n            stageNewRevertRelease\n              ? 'action.create-revert-release'\n              : 'action.immediate-revert-release',\n          ),\n          tone: 'positive',\n          onClick: handleRevertRelease,\n          loading: revertReleaseStatus === 'reverting',\n          disabled: revertReleaseStatus === 'reverting',\n        },\n      }}\n    >\n      <Text muted size={1}>\n        {\n          <Translate\n            t={t}\n            i18nKey={description}\n            values={{\n              releaseDocumentsLength: documents.length,\n            }}\n          />\n        }\n      </Text>\n      <Flex align=\"center\" paddingTop={4}>\n        <Checkbox\n          onChange={() => setStageNewRevertRelease((current) => !current)}\n          id=\"stage-release\"\n          style={{display: 'block'}}\n          checked={stageNewRevertRelease}\n        />\n        <Box flex={1} paddingLeft={3}>\n          <Text muted size={1}>\n            <label htmlFor=\"stage-release\">\n              {t('revert-dialog.confirm-revert.stage-revert-checkbox-label')}\n            </label>\n          </Text>\n        </Box>\n      </Flex>\n      {hasPostPublishTransactions && !stageNewRevertRelease && (\n        <Card marginTop={4} padding={3} radius={2} shadow={1} tone=\"critical\">\n          <Text muted size={1}>\n            {t('revert-dialog.confirm-revert.warning-card')}\n          </Text>\n        </Card>\n      )}\n    </Dialog>\n  )\n}\n\nexport const ReleaseRevertButton = ({\n  release,\n  documents,\n  disabled,\n}: ReleasePublishAllButtonProps) => {\n  const {t} = useTranslation(releasesLocaleNamespace)\n  const {t: tCore} = useTranslation()\n  const {guardWithReleaseLimitUpsell, mode} = useReleasesUpsell()\n  const [revertReleaseStatus, setRevertReleaseStatus] = useState<RevertReleaseStatus>('idle')\n  const [isPendingGuardResponse, setIsPendingGuardResponse] = useState<boolean>(false)\n  const {createRelease} = useReleaseOperations()\n  const {checkWithPermissionGuard} = useReleasePermissions()\n  const [hasCreatePermission, setHasCreatePermission] = useState<boolean | null>(null)\n\n  const handleMoveToConfirmStatus = useCallback(async () => {\n    setIsPendingGuardResponse(true)\n    await guardWithReleaseLimitUpsell(() => setRevertReleaseStatus('confirm'))\n    setIsPendingGuardResponse(false)\n  }, [guardWithReleaseLimitUpsell])\n\n  const isReleasesPlus = useIsReleasesPlus()\n\n  const isMounted = useRef(false)\n  useEffect(() => {\n    isMounted.current = true\n    checkWithPermissionGuard(createRelease, getReleaseDefaults()).then((hasPermissions) => {\n      if (isMounted.current) setHasCreatePermission(hasPermissions)\n    })\n\n    return () => {\n      isMounted.current = false\n    }\n  }, [checkWithPermissionGuard, createRelease])\n\n  if (!isReleasesPlus) return null\n\n  return (\n    <>\n      <Button\n        icon={RestoreIcon}\n        onClick={handleMoveToConfirmStatus}\n        text={t('action.revert')}\n        tone=\"critical\"\n        tooltipProps={{\n          disabled: hasCreatePermission === true,\n          content: tCore('release.action.permission.error'),\n        }}\n        /**\n         * This is an immature assertion of permissions\n         * The permissions needed to revert are:\n         * Permissions to create a request (implemented)\n         * @todo Permissions to create each schema type within the release (not implemented)\n         */\n        disabled={isPendingGuardResponse || !hasCreatePermission || disabled || mode === 'disabled'}\n        data-testid=\"revert-button\"\n      />\n      {revertReleaseStatus !== 'idle' && (\n        <ConfirmReleaseDialog\n          release={release}\n          documents={documents}\n          revertReleaseStatus={revertReleaseStatus}\n          setRevertReleaseStatus={setRevertReleaseStatus}\n        />\n      )}\n    </>\n  )\n}\n","import {ClockIcon, ErrorOutlineIcon} from '@sanity/icons'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {Card, Flex, Stack, Text, useToast} from '@sanity/ui'\nimport {format, isBefore, isValid, parse, startOfMinute} from 'date-fns'\nimport {isEqual} from 'lodash'\nimport {useCallback, useEffect, useMemo, useRef, useState} from 'react'\n\nimport {Button, Dialog, MenuItem, type TooltipProps} from '../../../../../ui-components'\nimport {ToneIcon} from '../../../../../ui-components/toneIcon/ToneIcon'\nimport {MONTH_PICKER_VARIANT} from '../../../../components/inputs/DateInputs/calendar/Calendar'\nimport {type CalendarLabels} from '../../../../components/inputs/DateInputs/calendar/types'\nimport {DateTimeInput} from '../../../../components/inputs/DateInputs/DateTimeInput'\nimport {getCalendarLabels} from '../../../../form/inputs/DateInputs/utils'\nimport {Translate, useTranslation} from '../../../../i18n'\nimport useTimeZone from '../../../../scheduledPublishing/hooks/useTimeZone'\nimport {ScheduledRelease} from '../../../__telemetry__/releases.telemetry'\nimport {releasesLocaleNamespace} from '../../../i18n'\nimport {isReleaseScheduledOrScheduling, type ReleaseDocument} from '../../../index'\nimport {useReleaseOperations} from '../../../store/useReleaseOperations'\nimport {useReleasePermissions} from '../../../store/useReleasePermissions'\nimport {type DocumentInRelease} from '../../detail/useBundleDocuments'\n\ninterface ReleaseScheduleButtonProps {\n  release: ReleaseDocument\n  documents: DocumentInRelease[]\n  disabled?: boolean\n  isMenuItem?: boolean\n  onConfirmDialogOpen?: () => void\n  onConfirmDialogClose?: () => void\n}\n\nexport const ReleaseScheduleButton = ({\n  release,\n  disabled,\n  documents,\n  isMenuItem = false,\n  onConfirmDialogOpen,\n  onConfirmDialogClose,\n}: ReleaseScheduleButtonProps) => {\n  const toast = useToast()\n  const {schedule, updateRelease} = useReleaseOperations()\n  const {checkWithPermissionGuard} = useReleasePermissions()\n\n  const [schedulePermission, setSchedulePermission] = useState<boolean>(false)\n\n  const {t} = useTranslation(releasesLocaleNamespace)\n  const {t: tCore} = useTranslation()\n  const telemetry = useTelemetry()\n  const {utcToCurrentZoneDate, zoneDateToUtc} = useTimeZone()\n  const [status, setStatus] = useState<'idle' | 'confirm' | 'scheduling'>('idle')\n  const [publishAt, setPublishAt] = useState<Date | undefined>()\n  /**\n   * This state supports the scenario of:\n   * publishAt is set to a valid future date; but at time of submit it is in the past\n   * Without an update on this state, ReleaseScheduledButton would not rerender\n   * and so date in past warning ui elements wouldn't show\n   */\n  const [rerenderDialog, setRerenderDialog] = useState(0)\n\n  const timezoneAdjustedPublishAt = publishAt ? utcToCurrentZoneDate(publishAt) : undefined\n\n  const isValidatingDocuments = documents.some(({validation}) => validation.isValidating)\n  const hasDocumentValidationErrors = documents.some(({validation}) => validation.hasError)\n  const isScheduleButtonDisabled =\n    disabled || isValidatingDocuments || !schedulePermission || hasDocumentValidationErrors\n\n  const isMounted = useRef(false)\n  useEffect(() => {\n    isMounted.current = true\n\n    checkWithPermissionGuard(schedule, release._id, new Date()).then((hasPermission) => {\n      if (isMounted.current) setSchedulePermission(hasPermission)\n    })\n\n    return () => {\n      isMounted.current = false\n    }\n  }, [checkWithPermissionGuard, release._id, release.metadata.intendedPublishAt, schedule])\n\n  const isScheduledDateInPast = useCallback(() => {\n    return isBefore(zoneDateToUtc(publishAt || new Date()), new Date())\n  }, [publishAt, zoneDateToUtc])\n\n  const handleConfirmSchedule = useCallback(async () => {\n    if (!publishAt) return\n\n    // this means that it will linely need to change the releaseType to scheduled\n    if (isMenuItem) {\n      const newRelease = {\n        ...release,\n        metadata: {\n          ...release.metadata,\n          releaseType: 'scheduled' as const,\n          ...{\n            intendedPublishAt: publishAt.toISOString(),\n          },\n        },\n      }\n\n      if (!isEqual(newRelease, release)) {\n        updateRelease(newRelease)\n      }\n    }\n\n    if (isScheduledDateInPast()) {\n      // rerender dialog to recalculate isScheduledDateInPast\n      setRerenderDialog((cur) => cur + 1)\n      return\n    }\n\n    try {\n      setStatus('scheduling')\n      await schedule(release._id, publishAt)\n      telemetry.log(ScheduledRelease)\n      toast.push({\n        closable: true,\n        status: 'info',\n        title: (\n          <Text muted size={1}>\n            <Translate\n              t={t}\n              i18nKey=\"toast.schedule.success\"\n              values={{\n                title: release.metadata.title || tCore('release.placeholder-untitled-release'),\n              }}\n            />\n          </Text>\n        ),\n      })\n    } catch (schedulingError) {\n      toast.push({\n        status: 'error',\n        title: (\n          <Text muted size={1}>\n            <Translate\n              t={t}\n              i18nKey=\"toast.schedule.error\"\n              values={{\n                title: release.metadata.title || tCore('release.placeholder-untitled-release'),\n                error: schedulingError.message,\n              }}\n            />\n          </Text>\n        ),\n      })\n      console.error(schedulingError)\n    } finally {\n      onConfirmDialogClose?.()\n      setStatus('idle')\n    }\n  }, [\n    publishAt,\n    isMenuItem,\n    isScheduledDateInPast,\n    release,\n    updateRelease,\n    schedule,\n    telemetry,\n    toast,\n    t,\n    tCore,\n    onConfirmDialogClose,\n  ])\n\n  const calendarLabels: CalendarLabels = useMemo(() => getCalendarLabels(tCore), [tCore])\n\n  const handleBundlePublishAtCalendarChange = useCallback(\n    (date: Date | null) => {\n      if (!date) return\n\n      setPublishAt(zoneDateToUtc(startOfMinute(date)))\n    },\n    [zoneDateToUtc],\n  )\n\n  const handleBundleInputChange = useCallback(\n    (event: React.FocusEvent<HTMLInputElement>) => {\n      const date = event.currentTarget.value\n      const parsedDate = zoneDateToUtc(parse(date, 'PP HH:mm', new Date()))\n\n      if (isValid(parsedDate)) {\n        setPublishAt(parsedDate)\n      }\n    },\n    [zoneDateToUtc],\n  )\n\n  const handleOnDialogClose = useCallback(() => {\n    onConfirmDialogClose?.()\n    if (status !== 'scheduling') {\n      setStatus('idle')\n    }\n  }, [onConfirmDialogClose, status])\n\n  const confirmScheduleDialog = useMemo(() => {\n    if (status === 'idle') return null\n\n    const _isScheduledDateInPast = isScheduledDateInPast()\n\n    return (\n      <Dialog\n        id=\"confirm-schedule-dialog\"\n        data-testid=\"confirm-schedule-dialog\"\n        /**\n         * rerenderDialog should force this function to rerun\n         * since the selected scheduled date was in the future when selected\n         * but at time of submit it is in the past\n         */\n        key={rerenderDialog}\n        header={t('schedule-dialog.confirm-title', {\n          documentsLength: documents.length,\n          count: documents.length,\n        })}\n        onClose={handleOnDialogClose}\n        footer={{\n          confirmButton: {\n            text: t('schedule-dialog.confirm-button'),\n            tone: 'default',\n            onClick: handleConfirmSchedule,\n            loading: status === 'scheduling',\n            disabled: _isScheduledDateInPast || status === 'scheduling',\n          },\n          cancelButton: {\n            disabled: status === 'scheduling',\n          },\n        }}\n      >\n        <Stack space={3}>\n          {_isScheduledDateInPast && (\n            <Card marginBottom={1} padding={2} radius={2} shadow={1} tone=\"critical\">\n              <Text size={1}>{t('schedule-dialog.publish-date-in-past-warning')}</Text>\n            </Card>\n          )}\n          <label>\n            <Stack space={3}>\n              <Text size={1} weight=\"semibold\">\n                {t('schedule-dialog.select-publish-date-label')}\n              </Text>\n              <DateTimeInput\n                selectTime\n                monthPickerVariant={MONTH_PICKER_VARIANT.carousel}\n                onChange={handleBundlePublishAtCalendarChange}\n                onInputChange={handleBundleInputChange}\n                value={timezoneAdjustedPublishAt}\n                calendarLabels={calendarLabels}\n                inputValue={\n                  timezoneAdjustedPublishAt ? format(timezoneAdjustedPublishAt, 'PP HH:mm') : ''\n                }\n                constrainSize={false}\n                isPastDisabled\n              />\n            </Stack>\n          </label>\n          <Text muted size={1}>\n            <Translate\n              t={t}\n              i18nKey=\"schedule-dialog.confirm-description\"\n              values={{\n                title: release.metadata.title || tCore('release.placeholder-untitled-release'),\n                count: documents.length,\n              }}\n            />\n          </Text>\n        </Stack>\n      </Dialog>\n    )\n  }, [\n    status,\n    isScheduledDateInPast,\n    rerenderDialog,\n    t,\n    documents.length,\n    handleOnDialogClose,\n    handleConfirmSchedule,\n    handleBundlePublishAtCalendarChange,\n    handleBundleInputChange,\n    timezoneAdjustedPublishAt,\n    calendarLabels,\n    release.metadata.title,\n    tCore,\n  ])\n\n  const handleOnInitialSchedule = useCallback(() => {\n    setPublishAt(\n      release.metadata.intendedPublishAt\n        ? new Date(release.metadata.intendedPublishAt)\n        : new Date(),\n    )\n    setStatus('confirm')\n    onConfirmDialogOpen?.()\n  }, [onConfirmDialogOpen, release.metadata.intendedPublishAt])\n\n  const tooltipText = useMemo(() => {\n    if (documents.length === 0) {\n      return t('schedule-action.validation.no-documents')\n    }\n\n    if (!schedulePermission) {\n      return t('schedule-button-tooltip.validation.no-permission')\n    }\n\n    if (isValidatingDocuments) {\n      return t('schedule-button-tooltip.validation.loading')\n    }\n\n    if (hasDocumentValidationErrors) {\n      return t('schedule-button-tooltip.validation.error')\n    }\n\n    if (isReleaseScheduledOrScheduling(release)) {\n      return t('schedule-button-tooltip.already-scheduled')\n    }\n    return null\n  }, [\n    documents.length,\n    hasDocumentValidationErrors,\n    isValidatingDocuments,\n    release,\n    schedulePermission,\n    t,\n  ])\n\n  // TODO: this is a duplicate of logic in ReleasePublishAllButton\n  const scheduleTooltipContent = useMemo(() => {\n    return (\n      <Text muted size={1}>\n        <Flex align=\"center\" gap={3} padding={1}>\n          <ToneIcon icon={ErrorOutlineIcon} tone={isValidatingDocuments ? 'default' : 'critical'} />\n          {tooltipText}\n        </Flex>\n      </Text>\n    )\n  }, [isValidatingDocuments, tooltipText])\n\n  const sharedProps = useMemo(\n    () => ({\n      icon: ClockIcon,\n      disabled: isScheduleButtonDisabled || status === 'scheduling' || documents.length === 0,\n      text: t('action.schedule'),\n      handleOnClick: handleOnInitialSchedule,\n      tooltipProps: {\n        disabled: !tooltipText,\n        content: scheduleTooltipContent,\n        placement: 'bottom',\n      } as Partial<TooltipProps>,\n    }),\n    [\n      documents.length,\n      handleOnInitialSchedule,\n      isScheduleButtonDisabled,\n      scheduleTooltipContent,\n      status,\n      t,\n      tooltipText,\n    ],\n  )\n\n  return (\n    <>\n      {isMenuItem ? (\n        <MenuItem\n          tooltipProps={sharedProps.tooltipProps}\n          icon={sharedProps.icon}\n          disabled={sharedProps.disabled}\n          text={sharedProps.text}\n          onClick={sharedProps.handleOnClick}\n          data-testid=\"schedule-button-menu-item\"\n        />\n      ) : (\n        <Button\n          tooltipProps={sharedProps.tooltipProps}\n          tone=\"primary\"\n          icon={sharedProps.icon}\n          disabled={sharedProps.disabled}\n          text={sharedProps.text}\n          onClick={sharedProps.handleOnClick}\n          loading={status === 'scheduling'}\n          data-testid=\"schedule-button\"\n        />\n      )}\n      {confirmScheduleDialog}\n    </>\n  )\n}\n","import {CloseCircleIcon} from '@sanity/icons'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {Text, useToast} from '@sanity/ui'\nimport {useCallback, useMemo, useState} from 'react'\n\nimport {Button, Dialog} from '../../../../../ui-components'\nimport {Translate, useTranslation} from '../../../../i18n'\nimport {UnscheduledRelease} from '../../../__telemetry__/releases.telemetry'\nimport {releasesLocaleNamespace} from '../../../i18n'\nimport {type ReleaseDocument} from '../../../index'\nimport {useReleaseOperations} from '../../../store/useReleaseOperations'\nimport {type DocumentInRelease} from '../../detail/useBundleDocuments'\n\ninterface ReleaseScheduleButtonProps {\n  release: ReleaseDocument\n  documents: DocumentInRelease[]\n  disabled?: boolean\n}\n\nexport const ReleaseUnscheduleButton = ({\n  release,\n  disabled,\n  documents,\n}: ReleaseScheduleButtonProps) => {\n  const toast = useToast()\n  const {unschedule} = useReleaseOperations()\n  const {t} = useTranslation(releasesLocaleNamespace)\n  const {t: tCore} = useTranslation()\n  const telemetry = useTelemetry()\n  const [status, setStatus] = useState<'idle' | 'confirm' | 'unscheduling'>('idle')\n\n  const handleConfirmSchedule = useCallback(async () => {\n    try {\n      setStatus('unscheduling')\n      await unschedule(release._id)\n      telemetry.log(UnscheduledRelease)\n    } catch (schedulingError) {\n      toast.push({\n        status: 'error',\n        title: (\n          <Text muted size={1}>\n            <Translate\n              t={t}\n              i18nKey=\"toast.unschedule.error\"\n              values={{\n                title: release.metadata.title || tCore('release.placeholder-untitled-release'),\n                error: schedulingError.message,\n              }}\n            />\n          </Text>\n        ),\n      })\n      console.error(schedulingError)\n    } finally {\n      setStatus('idle')\n    }\n  }, [unschedule, release._id, release.metadata.title, telemetry, toast, t, tCore])\n\n  const confirmScheduleDialog = useMemo(() => {\n    if (status === 'idle') return null\n\n    return (\n      <Dialog\n        id=\"confirm-unschedule-dialog\"\n        header={t('unschedule-dialog.confirm-title')}\n        onClose={() => status !== 'unscheduling' && setStatus('idle')}\n        footer={{\n          confirmButton: {\n            text: t('action.unschedule'),\n            tone: 'default',\n            onClick: handleConfirmSchedule,\n            loading: status === 'unscheduling',\n            disabled: status === 'unscheduling',\n          },\n          cancelButton: {\n            disabled: status === 'unscheduling',\n          },\n        }}\n      >\n        <Text muted size={1}>\n          {\n            <Translate\n              t={t}\n              i18nKey=\"unschedule-dialog.confirm-description\"\n              values={{\n                title: release.metadata.title || tCore('release.placeholder-untitled-release'),\n                documentsLength: documents.length,\n                count: documents.length,\n              }}\n            />\n          }\n        </Text>\n      </Dialog>\n    )\n  }, [release.metadata.title, documents.length, handleConfirmSchedule, status, t, tCore])\n\n  return (\n    <>\n      <Button\n        icon={CloseCircleIcon}\n        disabled={disabled || status === 'unscheduling'}\n        text={t('action.unschedule')}\n        onClick={() => setStatus('confirm')}\n        loading={status === 'unscheduling'}\n        data-testid=\"schedule-button\"\n      />\n      {confirmScheduleDialog}\n    </>\n  )\n}\n","import {type DefinedTelemetryLog} from '@sanity/telemetry/react'\nimport {type ButtonTone} from '@sanity/ui'\n\nimport {\n  ArchivedRelease,\n  DeletedRelease,\n  UnarchivedRelease,\n  UnscheduledRelease,\n} from '../../../__telemetry__/releases.telemetry'\n\nexport type ReleaseAction =\n  | 'archive'\n  | 'unarchive'\n  | 'delete'\n  | 'unschedule'\n  | 'publish'\n  | 'schedule'\n\ninterface BaseReleaseActionsMap {\n  toastSuccessI18nKey?: string\n  toastFailureI18nKey?: string\n  telemetry: DefinedTelemetryLog<void>\n}\n\ninterface DialogActionsMap extends BaseReleaseActionsMap {\n  confirmDialog: {\n    dialogId: string\n    dialogHeaderI18nKey: string\n    dialogDescriptionI18nKey: string\n    dialogConfirmButtonI18nKey: string\n    confirmButtonTone: ButtonTone\n  }\n}\n\nexport const RELEASE_ACTION_MAP: Record<\n  Exclude<ReleaseAction, 'schedule' | 'publish'>,\n  DialogActionsMap | (BaseReleaseActionsMap & {confirmDialog: false})\n> = {\n  delete: {\n    confirmDialog: {\n      dialogId: 'confirm-delete-dialog',\n      dialogHeaderI18nKey: 'delete-dialog.confirm-delete.header',\n      dialogDescriptionI18nKey: 'delete-dialog.confirm-delete-description',\n      dialogConfirmButtonI18nKey: 'delete-dialog.confirm-delete-button',\n      confirmButtonTone: 'critical',\n    },\n    toastSuccessI18nKey: 'toast.delete.success',\n    toastFailureI18nKey: 'toast.delete.error',\n    telemetry: DeletedRelease,\n  },\n  archive: {\n    confirmDialog: {\n      dialogId: 'confirm-archive-dialog',\n      dialogHeaderI18nKey: 'archive-dialog.confirm-archive-header',\n      dialogDescriptionI18nKey: 'archive-dialog.confirm-archive-description',\n      dialogConfirmButtonI18nKey: 'archive-dialog.confirm-archive-button',\n      confirmButtonTone: 'critical',\n    },\n    toastFailureI18nKey: 'toast.archive.error',\n    telemetry: ArchivedRelease,\n  },\n  unarchive: {\n    confirmDialog: false,\n    toastFailureI18nKey: 'toast.unarchive.error',\n    telemetry: UnarchivedRelease,\n  },\n  unschedule: {\n    confirmDialog: false,\n    toastFailureI18nKey: 'toast.unschedule.error',\n    telemetry: UnscheduledRelease,\n  },\n}\n","import {useMemo} from 'react'\n\nimport {getReleaseIdFromReleaseDocumentId} from '../util/getReleaseIdFromReleaseDocumentId'\nimport {type ReleaseDocument} from './types'\n\n/**\n * Gets all the releases ids\n * @internal\n */\nexport function useReleasesIds(releases: ReleaseDocument[]): {\n  releasesIds: string[]\n} {\n  const releasesIds = useMemo(\n    () => releases.map((release) => getReleaseIdFromReleaseDocumentId(release._id)),\n    [releases],\n  )\n\n  return useMemo(() => ({releasesIds}), [releasesIds])\n}\n","import {getPublishedId} from '@sanity/client/csm'\nimport {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {combineLatest, of} from 'rxjs'\nimport {map} from 'rxjs/operators'\n\nimport {useDocumentPreviewStore} from '../../store'\nimport {getDraftId, getVersionId} from '../../util'\nimport {type VersionInfoDocumentStub} from './types'\nimport {useActiveReleases} from './useActiveReleases'\nimport {useReleasesIds} from './useReleasesIds'\n\nfunction exists(value: any) {\n  return value?._rev\n}\nconst DOCUMENT_STUB_PATHS = ['_id', '_type', '_rev', '_createdAt', '_updatedAt']\n\nconst NO_VERSIONS = {} as Record<string, VersionInfoDocumentStub | undefined>\n\n/**\n * Takes a document id, and returns information about what other versions of the document currently exists\n * @param documentId - The document id. Should be the published id\n * @internal\n */\nexport function useDocumentVersionInfo(documentId: string) {\n  const documentPreviewStore = useDocumentPreviewStore()\n  const releaseIds = useReleasesIds(useActiveReleases().data).releasesIds\n  const [draftId, publishedId] = [getDraftId(documentId), getPublishedId(documentId)]\n\n  const observable = useMemo(() => {\n    const releaseVersions =\n      releaseIds.length > 0\n        ? combineLatest(\n            Object.fromEntries(\n              releaseIds.map((releaseId) => [\n                releaseId,\n                documentPreviewStore\n                  .observePaths({_id: getVersionId(publishedId, releaseId)}, DOCUMENT_STUB_PATHS)\n                  .pipe(\n                    map((value) =>\n                      exists(value) ? (value as VersionInfoDocumentStub) : undefined,\n                    ),\n                  ),\n              ]),\n            ),\n          )\n        : of(NO_VERSIONS)\n\n    return combineLatest({\n      isLoading: of(false),\n      draft: documentPreviewStore\n        .observePaths({_id: draftId}, DOCUMENT_STUB_PATHS)\n        .pipe(map((value) => (exists(value) ? (value as VersionInfoDocumentStub) : undefined))),\n      published: documentPreviewStore\n        .observePaths({_id: publishedId}, DOCUMENT_STUB_PATHS)\n        .pipe(map((value) => (exists(value) ? (value as VersionInfoDocumentStub) : undefined))),\n      versions: releaseVersions,\n    })\n  }, [draftId, documentPreviewStore, publishedId, releaseIds])\n\n  return useObservable(observable, {\n    isLoading: true,\n    versions: NO_VERSIONS,\n    draft: undefined,\n    published: undefined,\n  })\n}\n","import {ArchiveIcon, CloseCircleIcon, TrashIcon, UnarchiveIcon} from '@sanity/icons'\nimport {\n  type Dispatch,\n  type MouseEventHandler,\n  type SetStateAction,\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from 'react'\n\nimport {MenuItem} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n'\nimport {useReleasesUpsell} from '../../../contexts/upsell/useReleasesUpsell'\nimport {releasesLocaleNamespace} from '../../../i18n'\nimport {useReleaseOperations} from '../../../store'\nimport {useReleasePermissions} from '../../../store/useReleasePermissions'\nimport {type DocumentInRelease} from '../../detail/useBundleDocuments'\nimport {ReleasePublishAllButton} from '../releaseCTAButtons/ReleasePublishAllButton'\nimport {ReleaseScheduleButton} from '../releaseCTAButtons/ReleaseScheduleButton'\nimport {type ReleaseAction} from './releaseActions'\nimport {type ReleaseMenuButtonProps} from './ReleaseMenuButton'\n\nexport type ReleaseMenuProps = Omit<ReleaseMenuButtonProps, 'documentsCount'> & {\n  disabled: boolean\n  setSelectedAction: Dispatch<SetStateAction<ReleaseAction | undefined>>\n  documents: DocumentInRelease[]\n}\n\nexport const ReleaseMenu = ({\n  ignoreCTA,\n  disabled,\n  release,\n  setSelectedAction,\n  documents,\n}: ReleaseMenuProps) => {\n  const releaseMenuDisabled = !release || disabled\n  const {t} = useTranslation(releasesLocaleNamespace)\n  const {mode} = useReleasesUpsell()\n  const {archive, unarchive, deleteRelease, publishRelease, schedule} = useReleaseOperations()\n  const {checkWithPermissionGuard} = useReleasePermissions()\n  const [hasArchivePermission, setHasArchivePermission] = useState<boolean | null>(null)\n  const [hasUnarchivePermission, setHasUnarchivePermission] = useState<boolean | null>(null)\n  const [hasDeletePermission, setHasDeletePermission] = useState<boolean | null>(null)\n  const [hasPublishPermission, setHasPublishPermission] = useState<boolean | null>(null)\n  const [hasSchedulePermission, setHasSchedulePermission] = useState<boolean | null>(null)\n\n  const isMounted = useRef(false)\n  useEffect(() => {\n    isMounted.current = true\n\n    if (!releaseMenuDisabled) {\n      if (release.state !== 'published') {\n        if (release.state === 'archived') {\n          checkWithPermissionGuard(unarchive, release._id).then((hasPermission) => {\n            if (isMounted.current) setHasUnarchivePermission(hasPermission)\n          })\n        } else {\n          checkWithPermissionGuard(archive, release._id).then((hasPermission) => {\n            if (isMounted.current) setHasArchivePermission(hasPermission)\n          })\n\n          checkWithPermissionGuard(publishRelease, release._id).then((hasPermission) => {\n            if (isMounted.current) setHasPublishPermission(hasPermission)\n          })\n          checkWithPermissionGuard(schedule, release._id, new Date()).then((hasPermission) => {\n            if (isMounted.current) setHasSchedulePermission(hasPermission)\n          })\n        }\n      }\n\n      if (release.state === 'archived' || release.state == 'published') {\n        checkWithPermissionGuard(deleteRelease, release._id).then((hasPermission) => {\n          if (isMounted.current) setHasDeletePermission(hasPermission)\n        })\n      }\n    }\n\n    return () => {\n      isMounted.current = false\n    }\n  }, [\n    release._id,\n    mode,\n    releaseMenuDisabled,\n    release.state,\n    checkWithPermissionGuard,\n    unarchive,\n    archive,\n    deleteRelease,\n    release.metadata.releaseType,\n    publishRelease,\n    schedule,\n  ])\n\n  const handleOnInitiateAction = useCallback<MouseEventHandler<HTMLDivElement>>(\n    (event) => {\n      const action = event.currentTarget.getAttribute('data-value') as ReleaseAction\n\n      setSelectedAction(action)\n    },\n    [setSelectedAction],\n  )\n\n  const archiveUnarchiveMenuItem = useMemo(() => {\n    if (release.state === 'published') return null\n\n    if (release.state === 'archived')\n      return (\n        <MenuItem\n          data-value=\"unarchive\"\n          disabled={mode === 'disabled' || !hasUnarchivePermission}\n          onClick={handleOnInitiateAction}\n          icon={UnarchiveIcon}\n          text={t('action.unarchive')}\n          data-testid=\"unarchive-release-menu-item\"\n          tooltipProps={{\n            content: !hasUnarchivePermission && t('permissions.error.unarchive'),\n          }}\n        />\n      )\n\n    return (\n      <MenuItem\n        tooltipProps={{\n          disabled: hasArchivePermission\n            ? !['scheduled', 'scheduling'].includes(release.state) || disabled\n            : false,\n          content: hasArchivePermission\n            ? t('action.archive.tooltip')\n            : t('permissions.error.archive'),\n        }}\n        data-value=\"archive\"\n        onClick={handleOnInitiateAction}\n        icon={ArchiveIcon}\n        text={t('action.archive')}\n        data-testid=\"archive-release-menu-item\"\n        disabled={['scheduled', 'scheduling'].includes(release.state) || !hasArchivePermission}\n      />\n    )\n  }, [\n    release.state,\n    mode,\n    hasUnarchivePermission,\n    handleOnInitiateAction,\n    t,\n    hasArchivePermission,\n    disabled,\n  ])\n\n  const deleteMenuItem = useMemo(() => {\n    if (release.state !== 'archived' && release.state !== 'published') return null\n\n    return (\n      <MenuItem\n        data-value=\"delete\"\n        onClick={handleOnInitiateAction}\n        disabled={releaseMenuDisabled || !hasDeletePermission}\n        icon={TrashIcon}\n        text={t('action.delete-release')}\n        data-testid=\"delete-release-menu-item\"\n        tooltipProps={{\n          content: !hasDeletePermission && t('permissions.error.delete'),\n        }}\n      />\n    )\n  }, [handleOnInitiateAction, hasDeletePermission, release.state, releaseMenuDisabled, t])\n\n  const unscheduleMenuItem = useMemo(() => {\n    if (ignoreCTA || (release.state !== 'scheduled' && release.state !== 'scheduling')) return null\n\n    return (\n      <MenuItem\n        data-value=\"unschedule\"\n        onClick={handleOnInitiateAction}\n        disabled={releaseMenuDisabled}\n        icon={CloseCircleIcon}\n        text={t('action.unschedule')}\n        data-testid=\"unschedule-release-menu-item\"\n      />\n    )\n  }, [handleOnInitiateAction, ignoreCTA, release.state, releaseMenuDisabled, t])\n\n  const scheduleMenuItem = useMemo(() => {\n    // will not return the action for scheduled releases since the main action is already schedule\n    if (release.state !== 'active' || (ignoreCTA && release.metadata.releaseType === 'scheduled'))\n      return null\n\n    return (\n      <ReleaseScheduleButton\n        disabled={releaseMenuDisabled || !hasSchedulePermission}\n        release={release}\n        documents={documents}\n        isMenuItem\n        onConfirmDialogClose={() => setSelectedAction(undefined)}\n        onConfirmDialogOpen={() => setSelectedAction('schedule')}\n      />\n    )\n  }, [documents, hasSchedulePermission, ignoreCTA, release, releaseMenuDisabled, setSelectedAction])\n\n  const publishMenuItem = useMemo(() => {\n    if (release.state !== 'active' || (ignoreCTA && release.metadata.releaseType !== 'scheduled'))\n      return null\n\n    return (\n      <ReleasePublishAllButton\n        release={release}\n        documents={documents}\n        disabled={releaseMenuDisabled || !hasPublishPermission}\n        isMenuItem\n        onConfirmDialogClose={() => setSelectedAction(undefined)}\n        onConfirmDialogOpen={() => setSelectedAction('publish')}\n      />\n    )\n  }, [documents, hasPublishPermission, ignoreCTA, release, releaseMenuDisabled, setSelectedAction])\n\n  const ActionsOrder = useMemo(() => {\n    if (release.metadata.releaseType === 'scheduled') {\n      return (\n        <>\n          {scheduleMenuItem}\n          {publishMenuItem}\n        </>\n      )\n    }\n\n    return (\n      <>\n        {publishMenuItem}\n        {scheduleMenuItem}\n      </>\n    )\n  }, [release.metadata.releaseType, publishMenuItem, scheduleMenuItem])\n\n  return (\n    <>\n      {unscheduleMenuItem}\n      {ActionsOrder}\n      {archiveUnarchiveMenuItem}\n      {deleteMenuItem}\n    </>\n  )\n}\n","import {Card, Flex, Stack, Text} from '@sanity/ui'\n\nimport {useTranslation} from '../../../../i18n/hooks/useTranslation'\nimport {ReleaseAvatar} from '../../../components'\nimport {type ReleaseDocument} from '../../../store/types'\nimport {getReleaseTone} from '../../../util/getReleaseTone'\nimport {ReleaseTime} from '../ReleaseTime'\n\nexport function ReleasePreviewCard({release}: {release: ReleaseDocument}) {\n  const {t} = useTranslation()\n  return (\n    <Card border padding={1} radius={2}>\n      <Flex gap={3} padding={3}>\n        <ReleaseAvatar tone={getReleaseTone(release)} padding={0} />\n        <Stack space={2}>\n          <Text weight=\"medium\" size={1}>\n            {release.metadata.title || t('release.placeholder-untitled-release')}\n          </Text>\n          <Text muted size={1}>\n            <ReleaseTime release={release} />\n          </Text>\n        </Stack>\n      </Flex>\n    </Card>\n  )\n}\n","import {EllipsisHorizontalIcon} from '@sanity/icons'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {Menu, Spinner, Stack, Text, useClickOutsideEvent, useToast} from '@sanity/ui'\nimport {type SetStateAction, useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {useRouter} from 'sanity/router'\n\nimport {Button, Dialog, Popover} from '../../../../../ui-components'\nimport {Translate, useTranslation} from '../../../../i18n'\nimport {usePerspective} from '../../../../perspective/usePerspective'\nimport {useSetPerspective} from '../../../../perspective/useSetPerspective'\nimport {useReleasesUpsell} from '../../../contexts/upsell/useReleasesUpsell'\nimport {releasesLocaleNamespace} from '../../../i18n'\nimport {isReleaseLimitError} from '../../../store/isReleaseLimitError'\nimport {type ReleaseDocument} from '../../../store/types'\nimport {useReleaseOperations} from '../../../store/useReleaseOperations'\nimport {getReleaseIdFromReleaseDocumentId} from '../../../util/getReleaseIdFromReleaseDocumentId'\nimport {type DocumentInRelease} from '../../detail/useBundleDocuments'\nimport {RELEASE_ACTION_MAP, type ReleaseAction} from './releaseActions'\nimport {ReleaseMenu} from './ReleaseMenu'\nimport {ReleasePreviewCard} from './ReleasePreviewCard'\n\nexport type ReleaseMenuButtonProps = {\n  /** defaults to false\n   * set true if release primary CTA options should not\n   * be shown in the menu eg. unschedule, publish\n   */\n  ignoreCTA?: boolean\n  release: ReleaseDocument\n  documentsCount: number\n  documents?: DocumentInRelease[]\n}\n\nexport const ReleaseMenuButton = ({\n  ignoreCTA,\n  release,\n  documentsCount,\n  documents,\n}: ReleaseMenuButtonProps) => {\n  const toast = useToast()\n  const router = useRouter()\n  const {archive, unarchive, deleteRelease, unschedule} = useReleaseOperations()\n\n  const [isPerformingOperation, setIsPerformingOperation] = useState(false)\n  const [selectedAction, setSelectedAction] = useState<ReleaseAction>()\n  const {selectedReleaseId} = usePerspective()\n  const setPerspective = useSetPerspective()\n\n  const popoverRef = useRef<HTMLDivElement | null>(null)\n  const releaseMenuRef = useRef<HTMLDivElement | null>(null)\n  const [openPopover, setOpenPopover] = useState(false)\n\n  const releaseMenuDisabled = !release\n  const {t} = useTranslation(releasesLocaleNamespace)\n  const {t: tCore} = useTranslation()\n  const telemetry = useTelemetry()\n  const {guardWithReleaseLimitUpsell} = useReleasesUpsell()\n  const releaseTitle = release.metadata.title || tCore('release.placeholder-untitled-release')\n  const isActionPublishOrSchedule = selectedAction === 'publish' || selectedAction === 'schedule'\n\n  const handleDelete = useCallback(async () => {\n    await deleteRelease(release._id)\n\n    // return to release overview list now that release is deleted\n    router.navigate({})\n  }, [deleteRelease, release._id, router])\n\n  const handleUnarchive = useCallback(async () => {\n    return guardWithReleaseLimitUpsell(() => unarchive(release._id), true)\n  }, [guardWithReleaseLimitUpsell, release._id, unarchive])\n\n  const handleAction = useCallback(\n    async (action: ReleaseAction) => {\n      if (action === 'publish' || action === 'schedule') return\n      if (releaseMenuDisabled) return\n\n      const actionLookup = {\n        delete: handleDelete,\n        archive,\n        unarchive: handleUnarchive,\n        unschedule,\n      }\n      const actionValues = RELEASE_ACTION_MAP[action]\n\n      try {\n        if (\n          (action === 'archive' || action === 'delete') &&\n          selectedReleaseId === getReleaseIdFromReleaseDocumentId(release._id)\n        ) {\n          // Reset the perspective to drafts when the release is archived or deleted\n          // To avoid showing the release archived / deleted toast.\n          setPerspective('drafts')\n        }\n        setIsPerformingOperation(true)\n        await actionLookup[action](release._id)\n\n        telemetry.log(actionValues.telemetry)\n\n        if (typeof actionValues.toastSuccessI18nKey !== 'undefined') {\n          toast.push({\n            closable: true,\n            status: 'success',\n            title: (\n              <Text muted size={1}>\n                <Translate\n                  t={t}\n                  i18nKey={actionValues.toastSuccessI18nKey}\n                  values={{title: releaseTitle}}\n                />\n              </Text>\n            ),\n          })\n        }\n      } catch (actionError) {\n        if (isReleaseLimitError(actionError)) return\n\n        if (typeof actionValues.toastFailureI18nKey !== 'undefined') {\n          toast.push({\n            status: 'error',\n            title: (\n              <Text muted size={1}>\n                <Translate\n                  t={t}\n                  i18nKey={actionValues.toastFailureI18nKey}\n                  values={{title: releaseTitle, error: actionError.toString()}}\n                />\n              </Text>\n            ),\n          })\n        }\n        console.error(actionError)\n      } finally {\n        setIsPerformingOperation(false)\n        setSelectedAction(undefined)\n      }\n    },\n    [\n      releaseMenuDisabled,\n      handleDelete,\n      archive,\n      handleUnarchive,\n      unschedule,\n      telemetry,\n      toast,\n      t,\n      releaseTitle,\n      selectedReleaseId,\n      setPerspective,\n      release._id,\n    ],\n  )\n\n  /** in some instanced, immediately execute the action without requiring confirmation */\n  useEffect(() => {\n    if (!selectedAction || isActionPublishOrSchedule) return\n\n    if (!RELEASE_ACTION_MAP[selectedAction].confirmDialog) handleAction(selectedAction)\n  }, [documentsCount, handleAction, isActionPublishOrSchedule, selectedAction])\n\n  const confirmActionDialog = useMemo(() => {\n    if (!selectedAction || isActionPublishOrSchedule) return null\n\n    const {confirmDialog} = RELEASE_ACTION_MAP[selectedAction]\n\n    if (!confirmDialog) return null\n\n    return (\n      <Dialog\n        id={confirmDialog.dialogId}\n        data-testid={confirmDialog.dialogId}\n        header={t(confirmDialog.dialogHeaderI18nKey)}\n        onClose={() => !isPerformingOperation && setSelectedAction(undefined)}\n        padding={false}\n        footer={{\n          confirmButton: {\n            text: t(confirmDialog.dialogConfirmButtonI18nKey),\n            tone: confirmDialog.confirmButtonTone,\n            onClick: () => handleAction(selectedAction),\n            loading: isPerformingOperation,\n            disabled: isPerformingOperation,\n          },\n          cancelButton: {\n            disabled: isPerformingOperation,\n          },\n        }}\n      >\n        <Stack space={4} paddingX={4} paddingBottom={4}>\n          <ReleasePreviewCard release={release} />\n          {!!documentsCount && (\n            <Text muted size={1}>\n              <Translate\n                t={t}\n                i18nKey={confirmDialog.dialogDescriptionI18nKey}\n                values={{\n                  count: documentsCount,\n                }}\n              />\n            </Text>\n          )}\n        </Stack>\n      </Dialog>\n    )\n  }, [\n    selectedAction,\n    isActionPublishOrSchedule,\n    t,\n    isPerformingOperation,\n    release,\n    documentsCount,\n    handleAction,\n  ])\n\n  const handleOnButtonClick = () => {\n    if (openPopover) closePopover()\n    else setOpenPopover(true)\n  }\n\n  const closePopover = () => {\n    setOpenPopover(false)\n  }\n\n  useClickOutsideEvent(\n    () => {\n      if (!isActionPublishOrSchedule) {\n        closePopover()\n      }\n    },\n    () => [popoverRef.current, releaseMenuRef.current],\n  )\n\n  const handleSetSelectedAction = useCallback(\n    (action: SetStateAction<ReleaseAction | undefined>) => {\n      if (!action) closePopover()\n      setSelectedAction(action)\n    },\n    [],\n  )\n\n  return (\n    <>\n      <Popover\n        content={\n          <Menu ref={releaseMenuRef}>\n            <ReleaseMenu\n              ignoreCTA={ignoreCTA}\n              release={release}\n              setSelectedAction={handleSetSelectedAction}\n              disabled={isPerformingOperation}\n              documents={documents ?? []}\n            />\n          </Menu>\n        }\n        open={openPopover}\n        ref={popoverRef}\n        constrainSize={false}\n        fallbackPlacements={['top-end']}\n        portal\n        tone=\"default\"\n        placement=\"bottom\"\n      >\n        <Button\n          disabled={releaseMenuDisabled || isPerformingOperation}\n          icon={isPerformingOperation ? Spinner : EllipsisHorizontalIcon}\n          mode=\"bleed\"\n          tooltipProps={{content: t('menu.tooltip')}}\n          aria-label={t('menu.label')}\n          data-testid=\"release-menu-button\"\n          onClick={handleOnButtonClick}\n        />\n      </Popover>\n      {confirmActionDialog}\n    </>\n  )\n}\n","import {Box, Card, Flex, Text} from '@sanity/ui'\nimport {type ReactNode} from 'react'\n\nexport function StatusItem(props: {avatar?: ReactNode; text: ReactNode; testId?: string}) {\n  const {avatar, text, testId} = props\n\n  return (\n    <Card data-testid={testId}>\n      <Flex>\n        {avatar && (\n          <Box padding={1}>\n            <div style={{margin: -1}}>{avatar}</div>\n          </Box>\n        )}\n        <Box padding={2} paddingLeft={avatar ? 1 : undefined}>\n          <Text muted size={1}>\n            {text}\n          </Text>\n        </Box>\n      </Flex>\n    </Card>\n  )\n}\n","import {Flex} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nimport {AvatarSkeleton, RelativeTime, UserAvatar} from '../../../components'\nimport {useTranslation} from '../../../i18n'\nimport {isNonNullable} from '../../../util/isNonNullable'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {type ReleaseDocument} from '../../store/types'\nimport {StatusItem} from '../components/StatusItem'\nimport {\n  isArchiveReleaseEvent,\n  isCreateReleaseEvent,\n  isPublishReleaseEvent,\n  isUnarchiveReleaseEvent,\n  type ReleaseEvent,\n} from './events/types'\n\nconst STATUS_TITLE_I18N = {\n  createRelease: 'footer.status.created',\n  publishRelease: 'footer.status.published',\n  archiveRelease: 'footer.status.archived',\n  unarchiveRelease: 'footer.status.unarchived',\n}\nexport function ReleaseStatusItems({\n  events,\n  release,\n}: {\n  events: ReleaseEvent[]\n  release: ReleaseDocument\n}) {\n  const {t} = useTranslation(releasesLocaleNamespace)\n  const footerEvents = useMemo(() => {\n    const createEvent = events.find(isCreateReleaseEvent)\n    const extraEvent = events.find(\n      (event) =>\n        isPublishReleaseEvent(event) ||\n        isArchiveReleaseEvent(event) ||\n        isUnarchiveReleaseEvent(event),\n    )\n    return [createEvent, extraEvent].filter(isNonNullable)\n  }, [events])\n\n  if (!footerEvents.length) {\n    return (\n      <Flex flex={1} gap={1}>\n        <StatusItem\n          avatar={<AvatarSkeleton $size={0} />}\n          text={\n            <>\n              {t(STATUS_TITLE_I18N.createRelease)}{' '}\n              <RelativeTime time={release._createdAt} useTemporalPhrase minimal />\n            </>\n          }\n        />\n      </Flex>\n    )\n  }\n  return (\n    <Flex flex={1} gap={1}>\n      {footerEvents.map((event) => (\n        <StatusItem\n          key={event.id}\n          testId={`status-${event.type}`}\n          avatar={event.author && <UserAvatar size={0} user={event.author} />}\n          text={\n            <>\n              {t(STATUS_TITLE_I18N[event.type])}{' '}\n              <RelativeTime time={event.timestamp} useTemporalPhrase minimal />\n            </>\n          }\n        />\n      ))}\n    </Flex>\n  )\n}\n","/* eslint-disable no-nested-ternary */\nimport {Card, Flex} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nimport {isReleaseScheduledOrScheduling, type ReleaseDocument} from '../../index'\nimport {ReleasePublishAllButton} from '../components/releaseCTAButtons/ReleasePublishAllButton'\nimport {ReleaseRevertButton} from '../components/releaseCTAButtons/ReleaseRevertButton/ReleaseRevertButton'\nimport {ReleaseScheduleButton} from '../components/releaseCTAButtons/ReleaseScheduleButton'\nimport {ReleaseUnscheduleButton} from '../components/releaseCTAButtons/ReleaseUnscheduleButton'\nimport {ReleaseMenuButton} from '../components/ReleaseMenuButton/ReleaseMenuButton'\nimport {type ReleaseEvent} from './events/types'\nimport {ReleaseStatusItems} from './ReleaseStatusItems'\nimport {type DocumentInRelease} from './useBundleDocuments'\n\nexport function ReleaseDashboardFooter(props: {\n  documents: DocumentInRelease[]\n  release: ReleaseDocument\n  events: ReleaseEvent[]\n}) {\n  const {documents, release, events} = props\n\n  const releaseActionButton = useMemo(() => {\n    if (release.state === 'archived') return null\n\n    if (isReleaseScheduledOrScheduling(release)) {\n      return (\n        <ReleaseUnscheduleButton\n          release={release}\n          documents={documents}\n          disabled={!documents.length}\n        />\n      )\n    }\n\n    if (release.state === 'active') {\n      if (release.metadata.releaseType === 'scheduled') {\n        return (\n          <ReleaseScheduleButton\n            release={release}\n            documents={documents}\n            disabled={!documents.length}\n          />\n        )\n      }\n\n      if (release.metadata.releaseType === 'asap') {\n        return (\n          <ReleasePublishAllButton\n            release={release}\n            documents={documents}\n            disabled={!documents.length}\n          />\n        )\n      }\n    }\n\n    if (release.state === 'published') {\n      return (\n        <ReleaseRevertButton release={release} documents={documents} disabled={!documents.length} />\n      )\n    }\n\n    return null\n  }, [documents, release])\n\n  return (\n    <Card flex=\"none\">\n      <Card borderTop marginX={2} style={{opacity: 0.6}} />\n\n      <Flex padding={3}>\n        <Flex flex={1} gap={1}>\n          <ReleaseStatusItems events={events} release={release} />\n        </Flex>\n\n        <Flex flex=\"none\" gap={1} data-testid=\"release-dashboard-footer-actions\">\n          {releaseActionButton}\n          <ReleaseMenuButton\n            release={release}\n            documentsCount={documents.length}\n            documents={documents}\n            ignoreCTA={release.metadata.releaseType !== 'undecided'}\n          />\n        </Flex>\n      </Flex>\n    </Card>\n  )\n}\n","import {type RouterContextValue} from 'sanity/router'\n\nexport type Mode = 'active' | 'archived'\n\nexport const DATE_SEARCH_PARAM_KEY = 'date'\nexport const GROUP_SEARCH_PARAM_KEY = 'group'\n\nexport const getInitialFilterDate = (router: RouterContextValue) => () => {\n  const activeFilterDate = new URLSearchParams(router.state._searchParams).get(\n    DATE_SEARCH_PARAM_KEY,\n  )\n\n  return activeFilterDate ? new Date(activeFilterDate) : undefined\n}\n\nexport const getInitialReleaseGroupMode = (router: RouterContextValue) => (): Mode => {\n  const activeGroupMode = new URLSearchParams(router.state._searchParams).get(\n    GROUP_SEARCH_PARAM_KEY,\n  )\n\n  return activeGroupMode === 'archived' ? 'archived' : 'active'\n}\n","import {ChevronRightIcon, RestoreIcon} from '@sanity/icons'\nimport {\n  Box,\n  Breadcrumbs,\n  // eslint-disable-next-line no-restricted-imports\n  Button, // Custom button with a different textWeight, consider adding textWeight to the shared\n  Flex,\n  Text,\n} from '@sanity/ui'\nimport {type Dispatch, type SetStateAction, useCallback} from 'react'\nimport {useRouter} from 'sanity/router'\n\nimport {useTranslation} from '../../../i18n'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {type ReleaseDocument} from '../../index'\nimport {GROUP_SEARCH_PARAM_KEY} from '../overview/queryParamUtils'\nimport {type ReleaseInspector} from './ReleaseDetail'\n\nexport function ReleaseDashboardHeader(props: {\n  inspector: ReleaseInspector | undefined\n  release: ReleaseDocument\n  setInspector: Dispatch<SetStateAction<ReleaseInspector | undefined>>\n}) {\n  const {inspector, release, setInspector} = props\n  const {t} = useTranslation(releasesLocaleNamespace)\n  const {t: tCore} = useTranslation()\n  const title = release.metadata.title || tCore('release.placeholder-untitled-release')\n  const router = useRouter()\n\n  const handleNavigateToReleasesList = useCallback(() => {\n    const isReleaseOpen = release.state !== 'archived' && release.state !== 'published'\n\n    router.navigate({\n      _searchParams: isReleaseOpen ? undefined : [[GROUP_SEARCH_PARAM_KEY, 'archived']],\n    })\n  }, [release.state, router])\n\n  const handleActivityClick = useCallback(() => {\n    setInspector((prev) => (prev === 'activity' ? undefined : 'activity'))\n  }, [setInspector])\n\n  return (\n    <Flex align=\"flex-start\">\n      <Flex flex={1} gap={1}>\n        <Breadcrumbs\n          space={0}\n          separator={\n            <Box paddingY={2}>\n              <Text size={1}>\n                <ChevronRightIcon />\n              </Text>\n            </Box>\n          }\n        >\n          <Button\n            mode=\"bleed\"\n            onClick={handleNavigateToReleasesList}\n            text={t('overview.title')}\n            textWeight=\"regular\"\n            padding={2}\n            data-testid=\"back-to-releases-button\"\n          />\n          <Button\n            mode=\"bleed\"\n            text={title || tCore('release.placeholder-untitled-release')}\n            textWeight=\"semibold\"\n            padding={2}\n            style={title ? undefined : {opacity: 0.5}}\n          />\n        </Breadcrumbs>\n      </Flex>\n\n      <Flex flex=\"none\" gap={2}>\n        <Button\n          icon={RestoreIcon}\n          mode=\"bleed\"\n          onClick={handleActivityClick}\n          padding={2}\n          selected={inspector === 'activity'}\n          space={2}\n          text={t('dashboard.details.activity')}\n        />\n      </Flex>\n    </Flex>\n  )\n}\n","import {type ComponentType, type PropsWithChildren, useCallback, useContext, useState} from 'react'\nimport {TableContext} from 'sanity/_singletons'\n\nimport {type SortDirection} from './types'\n\nexport interface TableSort {\n  column: string\n  direction: SortDirection\n}\n\n/**\n * @internal\n */\nexport interface TableContextValue {\n  searchTerm: string | null\n  setSearchTerm: (searchTerm: string) => void\n  sort: TableSort | null\n  setSortColumn: (column: string) => void\n}\n\n/**\n * @internal\n */\nexport const TableProvider: ComponentType<PropsWithChildren & {defaultSort?: TableSort}> = ({\n  children,\n  defaultSort,\n}) => {\n  const [searchTerm, setSearchTerm] = useState<string | null>(null)\n  const [sort, setSort] = useState<TableSort | null>(defaultSort || null)\n\n  const setSortColumn = useCallback((newColumn: string) => {\n    setSort((s) => {\n      if (s?.column === newColumn) {\n        return {...s, direction: s.direction === 'asc' ? 'desc' : 'asc'}\n      }\n\n      return {column: String(newColumn), direction: 'desc'}\n    })\n  }, [])\n\n  const contextValue = {searchTerm, setSearchTerm, sort, setSortColumn}\n\n  return <TableContext.Provider value={contextValue}>{children}</TableContext.Provider>\n}\n\n/**\n * @internal\n */\nexport const useTableContext = (): TableContextValue => {\n  const context = useContext(TableContext)\n  if (!context) {\n    throw new Error('useTableContext must be used within a TableProvider')\n  }\n  return context\n}\n","import {ArrowUpIcon, SearchIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Stack, Text, TextInput} from '@sanity/ui'\nimport {motion} from 'framer-motion'\nimport {useMemo} from 'react'\n\nimport {Button, type ButtonProps} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n/hooks/useTranslation'\nimport {useTableContext} from './TableProvider'\nimport {type HeaderProps, type TableHeaderProps} from './types'\n\nconst MotionIcon = motion.create(ArrowUpIcon)\n\nconst BasicHeader = ({text}: {text: string}) => (\n  <Box padding={2}>\n    <Text muted size={1} weight=\"medium\">\n      {text}\n    </Text>\n  </Box>\n)\n\nconst SortHeaderButton = ({\n  header,\n  text,\n}: Omit<ButtonProps, 'text'> &\n  HeaderProps & {\n    text: string\n  }) => {\n  const {sort, setSortColumn} = useTableContext()\n  const sortIcon = useMemo(\n    () => (\n      <MotionIcon\n        initial={false}\n        animate={{rotate: sort?.direction === 'asc' ? 0 : 180}}\n        transition={{duration: 0.25, ease: 'easeInOut'}}\n      />\n    ),\n    [sort?.direction],\n  )\n\n  return (\n    <Button\n      iconRight={header.sorting && sort?.column === header.id ? sortIcon : undefined}\n      onClick={() => setSortColumn(String(header.id))}\n      mode=\"bleed\"\n      size=\"default\"\n      text={text}\n    />\n  )\n}\n\nconst TableHeaderSearch = ({\n  headerProps,\n  searchDisabled,\n  placeholder,\n}: HeaderProps & {placeholder?: string}) => {\n  const {t} = useTranslation()\n  const {setSearchTerm, searchTerm} = useTableContext()\n\n  return (\n    <Stack {...headerProps} flex={1} paddingY={2} paddingRight={3} sizing=\"border\">\n      <TextInput\n        border={false}\n        fontSize={1}\n        icon={SearchIcon}\n        placeholder={placeholder || t('search.placeholder')}\n        radius={3}\n        value={searchTerm || ''}\n        disabled={searchDisabled}\n        onChange={(event) => setSearchTerm(event.currentTarget.value)}\n        onClear={() => setSearchTerm('')}\n        clearButton={!!searchTerm}\n      />\n    </Stack>\n  )\n}\n\n/**\n *\n * @internal\n */\nexport const TableHeader = ({headers, searchDisabled}: TableHeaderProps) => {\n  return (\n    <Card as=\"thead\" borderBottom>\n      <Flex\n        as=\"tr\"\n        style={{\n          paddingInline: `max(\n          calc((100% - var(--maxInlineSize)) / 2),\n          var(--paddingInline)\n        )`,\n        }}\n      >\n        {headers.map(\n          ({header: Header, style, width, id, sorting}) =>\n            !!Header && (\n              <Header\n                key={String(id)}\n                headerProps={{\n                  as: 'th',\n                  id: String(id),\n                  style: {...style, width: width || undefined},\n                }}\n                header={{id, sorting}}\n                searchDisabled={searchDisabled}\n              />\n            ),\n        )}\n      </Flex>\n    </Card>\n  )\n}\n\nexport const Headers = {\n  SortHeaderButton,\n  TableHeaderSearch,\n  BasicHeader,\n}\n","'use no memo'\n// The `use no memo` directive is due to a known issue with react-virtual and react compiler: https://github.com/TanStack/virtual/issues/736\n\nimport {Box, Card, type CardProps, Flex, rem, Stack, Text, useTheme} from '@sanity/ui'\nimport {\n  defaultRangeExtractor,\n  type Range,\n  useVirtualizer,\n  type VirtualItem,\n} from '@tanstack/react-virtual'\nimport {isValid} from 'date-fns'\nimport {get} from 'lodash'\nimport {\n  type CSSProperties,\n  Fragment,\n  type HTMLProps,\n  type MutableRefObject,\n  type RefAttributes,\n  type RefObject,\n  useMemo,\n  useRef,\n} from 'react'\n\nimport {TooltipDelayGroupProvider} from '../../../../../ui-components'\nimport {TableHeader} from './TableHeader'\nimport {TableProvider, type TableSort, useTableContext} from './TableProvider'\nimport {type Column} from './types'\n\ntype RowDatum<TableData, AdditionalRowTableData> = (AdditionalRowTableData extends undefined\n  ? TableData\n  : TableData & AdditionalRowTableData) & {isLoading?: boolean}\n\nexport type TableRowProps = Omit<\n  CardProps & Omit<HTMLProps<HTMLDivElement>, 'height' | 'as'>,\n  'ref'\n> &\n  RefAttributes<HTMLDivElement>\n\ntype VirtualDatum = {\n  virtualRow: VirtualItem\n  index: number\n  isFirst: boolean\n  isLast: boolean\n}\n\nexport interface TableProps<TableData, AdditionalRowTableData> {\n  columnDefs: Column<RowDatum<TableData, AdditionalRowTableData>>[]\n  searchFilter?: (data: TableData[], searchTerm: string) => TableData[]\n  data: TableData[]\n  emptyState: (() => React.JSX.Element) | string\n  loading?: boolean\n  /**\n   * Should be the dot separated path to the unique identifier of the row. e.g. document._id\n   */\n  rowId: string\n  rowActions?: ({\n    datum,\n  }: {\n    datum: RowDatum<TableData, AdditionalRowTableData> | unknown\n  }) => React.ReactNode\n  rowProps?: (datum: TableData) => Partial<TableRowProps>\n  scrollContainerRef: RefObject<HTMLDivElement | null>\n  hideTableInlinePadding?: boolean\n}\n\nconst ITEM_HEIGHT = 59\nconst LOADING_ROW_COUNT = 3\n\n/**\n * This function modifies the rangeExtractor to account for the offset of the virtualizer\n * in this case, the parent with overflow (the element over which the scroll happens) and the start of the virtualizer\n * don't match, because there are some elements rendered on top of the virtualizer.\n * This, will take care of adding more elements to the start of the virtualizer to account for the offset.\n */\nconst withVirtualizerOffset = ({\n  scrollContainerRef,\n  virtualizerContainerRef,\n  range,\n}: {\n  scrollContainerRef: MutableRefObject<HTMLDivElement | null>\n  virtualizerContainerRef: MutableRefObject<HTMLDivElement | null>\n  range: Range\n}) => {\n  const parentOffset = scrollContainerRef.current?.offsetTop ?? 0\n  const virtualizerOffset = virtualizerContainerRef.current?.offsetTop ?? 0\n  const virtualizerScrollMargin = virtualizerOffset - parentOffset\n  const topItemsOffset = Math.ceil(virtualizerScrollMargin / ITEM_HEIGHT)\n  const startIndexWithOffset = range.startIndex - topItemsOffset\n  const result = defaultRangeExtractor({\n    ...range,\n    // By modifying the startIndex, we are adding more elements to the start of the virtualizer\n    startIndex: startIndexWithOffset > 0 ? startIndexWithOffset : 0,\n  })\n  return result\n}\nconst TableInner = <TableData, AdditionalRowTableData>({\n  columnDefs,\n  data,\n  emptyState,\n  searchFilter,\n  rowId,\n  rowActions,\n  loading = false,\n  rowProps = () => ({}),\n  scrollContainerRef,\n  hideTableInlinePadding = false,\n}: TableProps<TableData, AdditionalRowTableData>) => {\n  const {searchTerm, sort} = useTableContext()\n  const virtualizerContainerRef = useRef<HTMLDivElement | null>(null)\n  const filteredData = useMemo(() => {\n    const filteredResult = searchTerm && searchFilter ? searchFilter(data, searchTerm) : data\n    if (!sort) return filteredResult\n\n    const sortColumn = columnDefs.find((column) => column.id === sort.column)\n    return [...filteredResult].sort((a, b) => {\n      let order: number\n\n      const [aValue, bValue]: (number | string)[] = [a, b].map(\n        (sortValue) =>\n          sortColumn?.sortTransform?.(\n            sortValue as RowDatum<TableData, AdditionalRowTableData>,\n            sort.direction,\n          ) ?? get(sortValue, sort.column),\n      )\n      if (\n        typeof aValue === 'string' &&\n        typeof bValue === 'string' &&\n        !isValid(aValue) &&\n        !isValid(bValue)\n      ) {\n        order = aValue.toLowerCase().localeCompare(bValue.toLowerCase())\n      } else {\n        const parseDate = (datum: number | string) => {\n          if (sortColumn?.sortTransform && typeof datum === 'number') return datum\n\n          return typeof datum === 'string' ? Date.parse(datum) : 0\n        }\n\n        const [aDate, bDate] = [aValue, bValue].map(parseDate)\n\n        order = aDate - bDate\n      }\n\n      if (sort.direction === 'asc') return order\n      return -order\n    })\n  }, [columnDefs, data, searchFilter, searchTerm, sort])\n\n  const rowVirtualizer = useVirtualizer({\n    count: filteredData.length,\n    getScrollElement: () => scrollContainerRef.current,\n    estimateSize: () => ITEM_HEIGHT,\n    overscan: 5,\n    rangeExtractor: (range) =>\n      withVirtualizerOffset({scrollContainerRef, virtualizerContainerRef, range}),\n  })\n\n  const rowActionColumnDef: Column = useMemo(\n    () => ({\n      id: 'actions',\n      sorting: false,\n      width: 50,\n      header: ({headerProps: {id}}) => (\n        <Flex as=\"th\" id={id} paddingY={3} paddingX={3} sizing=\"border\" style={{width: '50px'}}>\n          <Text muted size={1} weight=\"medium\">\n            &nbsp;\n          </Text>\n        </Flex>\n      ),\n      cell: ({datum, cellProps: {id}}) => (\n        <Flex as=\"td\" id={id} align=\"center\" flex=\"none\" padding={3} style={{width: '25px'}}>\n          {(!datum.isLoading && rowActions?.({datum})) || <Box style={{width: '25px'}} />}\n        </Flex>\n      ),\n    }),\n    [rowActions],\n  )\n\n  const amalgamatedColumnDefs = useMemo(\n    () =>\n      (rowActions ? [...columnDefs, rowActionColumnDef] : columnDefs).filter(\n        (column) => !column.hidden,\n      ),\n    [columnDefs, rowActionColumnDef, rowActions],\n  )\n\n  const renderRow = useMemo(\n    () =>\n      function TableRow(\n        datum: VirtualDatum &\n          (TableData | (TableData & AdditionalRowTableData) | {_id: string; isLoading: boolean}),\n      ) {\n        const cardRowProps = rowProps(datum as TableData)\n        const cardKey = loading ? `skeleton-${datum.index}` : String(get(datum, rowId))\n\n        return (\n          <Card\n            key={cardKey}\n            data-testid=\"table-row\"\n            as=\"tr\"\n            borderBottom\n            display=\"flex\"\n            style={{\n              height: `${datum.virtualRow.size}px`,\n              transform: `translateY(${datum.virtualRow.start - datum.index * datum.virtualRow.size}px)`,\n              paddingInline: `max(\n                calc((100% - var(--maxInlineSize)) / 2),\n                var(--paddingInline)\n              )`,\n            }}\n            {...cardRowProps}\n          >\n            {amalgamatedColumnDefs.map(({cell: Cell, style, width, id, sorting = false}) => (\n              <Fragment key={String(id)}>\n                <Cell\n                  datum={\n                    {...datum, isLoading: loading} as RowDatum<TableData, AdditionalRowTableData>\n                  }\n                  cellProps={{\n                    as: 'td',\n                    id: String(id),\n                    style: {...style, width: width || undefined},\n                  }}\n                  sorting={sorting}\n                />\n              </Fragment>\n            ))}\n          </Card>\n        )\n      },\n    [amalgamatedColumnDefs, loading, rowId, rowProps],\n  )\n\n  const emptyContent = useMemo(() => {\n    if (typeof emptyState === 'string') {\n      return (\n        <Card\n          as=\"tr\"\n          borderBottom\n          display=\"flex\"\n          padding={4}\n          style={{\n            justifyContent: 'center',\n          }}\n        >\n          <Text as=\"td\" muted size={1}>\n            {emptyState}\n          </Text>\n        </Card>\n      )\n    }\n    return emptyState()\n  }, [emptyState])\n\n  const headers = useMemo(\n    () =>\n      amalgamatedColumnDefs.map(({cell, sortTransform, ...header}) => ({\n        ...header,\n        id: String(header.id),\n      })),\n    [amalgamatedColumnDefs],\n  )\n\n  const theme = useTheme()\n\n  const maxInlineSize = (!hideTableInlinePadding && theme.sanity.v2?.container[3]) || 0\n\n  const renderLoadingRows = (\n    rowRenderer: (\n      datum: VirtualDatum &\n        ({_id: string; isLoading: boolean} | TableData | (TableData & AdditionalRowTableData)),\n    ) => React.ReactNode,\n  ) => {\n    return Array.from({length: LOADING_ROW_COUNT}).map((el, index) => {\n      const cardKey = `skeleton-${index}`\n      const virtualRow: VirtualItem = {\n        index,\n        start: index * ITEM_HEIGHT,\n        size: ITEM_HEIGHT,\n        lane: 0,\n        key: cardKey,\n        end: index * ITEM_HEIGHT + ITEM_HEIGHT,\n      }\n\n      return rowRenderer({\n        _id: cardKey,\n        isLoading: true,\n        virtualRow,\n        index,\n        isFirst: index === 0,\n        isLast: index === LOADING_ROW_COUNT - 1,\n      })\n    })\n  }\n\n  const tableContent = () => {\n    if (loading) {\n      return renderLoadingRows(renderRow)\n    }\n\n    if (filteredData.length === 0) {\n      return emptyContent\n    }\n\n    return rowVirtualizer.getVirtualItems().map((virtualRow, index) => {\n      const datum = filteredData[virtualRow.index]\n      return renderRow({\n        ...datum,\n        virtualRow,\n        index,\n        isFirst: virtualRow.index === 0,\n        isLast: virtualRow.index === filteredData.length - 1,\n      })\n    })\n  }\n\n  return (\n    <div ref={virtualizerContainerRef}>\n      <div\n        style={\n          {\n            'width': '100%',\n            'position': 'relative',\n            '--maxInlineSize': rem(maxInlineSize),\n            '--paddingInline': rem(theme.sanity.v2?.space[3] ?? 0),\n          } as CSSProperties\n        }\n      >\n        <Stack as=\"table\">\n          <TableHeader\n            headers={headers}\n            searchDisabled={loading || (!searchTerm && !data.length)}\n          />\n          <Stack as=\"tbody\">{tableContent()}</Stack>\n        </Stack>\n      </div>\n    </div>\n  )\n}\n\nexport const Table = <TableData, AdditionalRowTableData = undefined>({\n  defaultSort,\n  ...props\n}: TableProps<TableData, AdditionalRowTableData> & {defaultSort?: TableSort}) => {\n  return (\n    <TooltipDelayGroupProvider>\n      <TableProvider defaultSort={defaultSort}>\n        <TableInner<TableData, AdditionalRowTableData> {...props} />\n      </TableProvider>\n    </TooltipDelayGroupProvider>\n  )\n}\n","import {studioTheme} from '@sanity/ui'\n\nconst IS_MAC =\n  typeof window != 'undefined' && /Mac|iPod|iPhone|iPad/.test(window.navigator.platform)\n\n// Enable debug mode when the current URL contains the below fragment.\n// Must be prefixed with `_debug_`\nexport const DEBUG_FRAGMENT = '_debug_search_score'\n\n// Display debug filter information: shared document types and field values\nexport const DEBUG_MODE = false\n\n// Max number of records to fetch per search request - intentionally set high to workaround\n// current limitations with studio search config\nexport const SEARCH_LIMIT = 1000\n\nexport const GLOBAL_SEARCH_KEY = 'k'\nexport const GLOBAL_SEARCH_KEY_MODIFIER = IS_MAC ? 'Cmd' : 'Ctrl'\n\nexport const POPOVER_INPUT_PADDING = studioTheme.space[4] // px\nexport const POPOVER_MAX_HEIGHT = 735 // px\nexport const POPOVER_MAX_WIDTH = 800 // px\n\n// Custom space between buttons and popover content\nexport const POPOVER_VERTICAL_MARGIN = 5 // px\n\nexport const POPOVER_RADIUS = 3\n","import {useContext} from 'react'\nimport {SearchContext} from 'sanity/_singletons'\n\nimport {type SearchContextValue} from './SearchContext'\n\n/**\n * @internal\n */\nexport function useSearchState(): SearchContextValue {\n  const context = useContext(SearchContext)\n\n  if (context === undefined) {\n    throw new Error('useSearchState must be used within an SearchProvider')\n  }\n  return context\n}\n","import {type SearchTerms} from '../../../../../search'\n\n/**\n * Check if current search terms are valid.\n *\n * By default, completely empty search terms (no search query, types or filter) are considered invalid,\n * unless `allowEmptyQueries` is true.\n */\nexport function hasSearchableTerms({\n  allowEmptyQueries,\n  terms,\n}: {\n  allowEmptyQueries?: boolean\n  terms: SearchTerms\n}): boolean {\n  const hasQuery = allowEmptyQueries ? true : terms.query.length > 0\n  const hasFilter = !!terms.filter\n  const hasSelectedTypes = terms.types.length > 0\n\n  return hasQuery || hasFilter || hasSelectedTypes\n}\n","import {useGlobalKeyDown, useLayer} from '@sanity/ui'\nimport {isHotkey} from 'is-hotkey-esm'\nimport {useCallback} from 'react'\n\nimport {GLOBAL_SEARCH_KEY} from '../constants'\n\nconst isSearchHotKey = isHotkey(`mod+${GLOBAL_SEARCH_KEY}`)\nconst isEscape = isHotkey('escape')\n\n/**\n * This hook binds a global shortcut combination, as well as the ESC key, to open / close callbacks.\n *\n * It will prevent the ESC key from firing `onClose` callbacks if it's not the top most layer\n * (i.e. if a nested dialog is mounted).\n */\nexport function useSearchHotkeys({\n  open,\n  onClose,\n  onOpen,\n}: {\n  open: boolean\n  onClose?: () => void\n  onOpen?: () => void\n}): void {\n  const {isTopLayer} = useLayer()\n\n  const handleClose = useCallback(() => {\n    onClose?.()\n  }, [onClose])\n\n  const handleGlobalKeyDown = useCallback(\n    (event: KeyboardEvent) => {\n      if (isSearchHotKey(event)) {\n        event.preventDefault()\n        if (open) {\n          handleClose()\n        } else {\n          onOpen?.()\n        }\n      }\n      if (isEscape(event) && open && isTopLayer) {\n        handleClose()\n      }\n    },\n    [handleClose, isTopLayer, open, onOpen],\n  )\n\n  useGlobalKeyDown(handleGlobalKeyDown)\n}\n","import {type ReactNode, useCallback, useEffect, useRef} from 'react'\n\nimport {useSearchState} from '../../contexts/search/useSearchState'\nimport {useSearchHotkeys} from '../../hooks/useSearchHotkeys'\n\ninterface SearchWrapperProps {\n  children: ReactNode\n  hasValidTerms: boolean\n  onClose: () => void\n  onOpen?: () => void\n  open: boolean\n}\n\nexport function SearchWrapper({\n  children,\n  hasValidTerms,\n  onClose,\n  onOpen,\n  open,\n}: SearchWrapperProps) {\n  const isMountedRef = useRef(false)\n\n  const {\n    dispatch,\n    searchCommandList,\n    setOnClose,\n    state: {result},\n  } = useSearchState()\n\n  /**\n   * Store top-most search result scroll index on close\n   */\n  const handleClose = useCallback(() => {\n    dispatch({index: searchCommandList?.getTopIndex() ?? -1, type: 'LAST_ACTIVE_INDEX_SET'})\n    onClose()\n  }, [dispatch, onClose, searchCommandList])\n\n  /**\n   * Bind hotkeys to open action\n   */\n  useSearchHotkeys({onClose: handleClose, onOpen, open})\n\n  /**\n   * Set shared `onClose` in search context\n   */\n  useEffect(() => {\n    /**\n     * When using useState you have to use the function callback version of setState,\n     *  otherwise it'll call your function and set the state to whatever your function return.\n     */\n    setOnClose(() => handleClose)\n  }, [handleClose, setOnClose])\n\n  /**\n   * Reset last search index when new results are loaded, or visiting recent searches\n   */\n  // @todo Revise if/when we introduce pagination\n  useEffect(() => {\n    if ((!hasValidTerms || result.loaded) && isMountedRef.current) {\n      dispatch({index: 0, type: 'LAST_ACTIVE_INDEX_SET'})\n    }\n  }, [dispatch, hasValidTerms, result.loaded])\n\n  /**\n   * Reset ordering when is closed (without valid search terms)\n   */\n  useEffect(() => {\n    if (!hasValidTerms && isMountedRef.current && !open) {\n      dispatch({type: 'ORDERING_RESET'})\n    }\n  }, [dispatch, hasValidTerms, open])\n\n  /**\n   * Store mounted state\n   */\n  useEffect(() => {\n    if (!isMountedRef?.current) {\n      isMountedRef.current = true\n    }\n  }, [])\n\n  return children\n}\n","import {type IntrinsicTypeName} from '@sanity/types'\nimport {type ComponentType} from 'react'\n\nimport {type SearchOperatorType} from './operators/defaultOperators'\n\nexport type Operator<TOperators = string> = OperatorDivider | OperatorItem<TOperators>\n\nexport type OperatorDivider = {\n  type: 'divider'\n}\n\nexport type OperatorItem<TOperators = string> = {\n  name: TOperators\n  type: 'item'\n}\n\ninterface SearchFilterBaseDefinition<TOperators> {\n  description?: string\n  icon: ComponentType\n  name: string\n  operators: Operator<TOperators>[]\n}\n\nexport interface SearchFilterFieldDefinition<TOperators = string>\n  extends SearchFilterBaseDefinition<TOperators> {\n  fieldType: IntrinsicTypeName\n  type: 'field'\n}\n\nexport interface SearchFilterPinnedDefinition<TOperators = string>\n  extends SearchFilterBaseDefinition<TOperators> {\n  fieldPath?: string\n  group?: string\n  title: string\n  type: 'pinned'\n}\n\n/**\n * @beta\n */\nexport type SearchFilterDefinition<TOperators = string> =\n  | SearchFilterFieldDefinition<TOperators>\n  | SearchFilterPinnedDefinition<TOperators>\n\n/**\n * @internal\n */\nexport function createFilterDefinitionDictionary(\n  filterDefinitions: SearchFilterDefinition[],\n): SearchFilterDefinitionDictionary {\n  return filterDefinitions.reduce<SearchFilterDefinitionDictionary>((acc, val) => {\n    acc[val.name] = val\n    return acc\n  }, {})\n}\n\n/**\n * @alpha\n */\nexport function defineSearchFilter<TOperators = SearchOperatorType>(\n  filterDef: SearchFilterDefinition<TOperators>,\n): typeof filterDef {\n  return filterDef\n}\n\n/**\n * @alpha\n */\nexport function defineSearchFilterOperators<TOperators = SearchOperatorType>(\n  operators: Operator<TOperators>[],\n): typeof operators {\n  return operators\n}\n\nexport function getFilterDefinition(\n  definitions: SearchFilterDefinitionDictionary,\n  filterName: string,\n): SearchFilterDefinition | undefined {\n  return definitions[filterName]\n}\n\n// TODO: we'll need to add field type to pinned filters, in order to properly infer\n// supported field types in the event all field filters are disabled / override\nexport function getSupportedFieldTypes(filterDefs: SearchFilterDefinition[]): string[] {\n  return filterDefs.reduce<string[]>((acc, val) => {\n    if (val.type === 'field') {\n      acc.push(val.fieldType)\n    }\n    return acc\n  }, [])\n}\n\n/**\n * @internal\n */\nexport type SearchFilterDefinitionDictionary = Record<\n  SearchFilterDefinition['name'],\n  SearchFilterDefinition\n>\n","import {\n  type SearchOperatorBase,\n  type SearchOperatorButtonValue,\n  type SearchOperatorInput,\n  type SearchOperatorParams,\n} from './operatorTypes'\n\n/** @internal */\nexport interface SearchOperatorDefinition<TValue = any> extends SearchOperatorBase {\n  buttonValueComponent?: SearchOperatorButtonValue<TValue>\n  groqFilter: (params: SearchOperatorParams<TValue>) => string | null\n  initialValue?: TValue\n  inputComponent?: SearchOperatorInput<TValue>\n  type: string\n}\n\nexport function createOperatorDefinitionDictionary(\n  operatorDefinitions: SearchOperatorDefinition[],\n): SearchOperatorDefinitionDictionary {\n  return operatorDefinitions.reduce<SearchOperatorDefinitionDictionary>((acc, val) => {\n    acc[val.type] = val\n    return acc\n  }, {})\n}\n\nexport function getOperatorDefinition(\n  operators: SearchOperatorDefinitionDictionary,\n  operatorType?: string,\n): SearchOperatorDefinition | undefined {\n  return operatorType ? operators[operatorType] : undefined\n}\n\nexport function getOperatorInitialValue(\n  operators: SearchOperatorDefinitionDictionary,\n  operatorType: string,\n): SearchOperatorDefinition['initialValue'] | undefined {\n  return getOperatorDefinition(operators, operatorType)?.initialValue\n}\n\n/** @internal */\nexport type SearchOperatorDefinitionDictionary = Record<\n  SearchOperatorDefinition['type'],\n  SearchOperatorDefinition\n>\n","import {type SchemaType} from '@sanity/types'\nimport {intersection, isEmpty} from 'lodash'\n\nimport {isNonNullable} from '../../../../../util'\nimport {\n  type SearchFieldDefinition,\n  type SearchFieldDefinitionDictionary,\n} from '../definitions/fields'\nimport {\n  getFilterDefinition,\n  type OperatorItem,\n  type SearchFilterDefinition,\n  type SearchFilterDefinitionDictionary,\n} from '../definitions/filters'\nimport {\n  getOperatorDefinition,\n  type SearchOperatorDefinitionDictionary,\n} from '../definitions/operators'\nimport {type SearchFilter} from '../types'\n\nexport function buildSearchFilter(\n  filterDefinition: SearchFilterDefinition,\n  fieldId?: string,\n): SearchFilter {\n  return {\n    fieldId,\n    filterName: filterDefinition.name,\n    operatorType:\n      filterDefinition?.operators.find((operator): operator is OperatorItem => {\n        return operator.type === 'item'\n      })?.name || '',\n  }\n}\n\nexport function generateFilterQuery({\n  fieldDefinitions,\n  filterDefinitions,\n  filters,\n  operatorDefinitions,\n}: {\n  fieldDefinitions: SearchFieldDefinitionDictionary\n  filterDefinitions: SearchFilterDefinitionDictionary\n  filters: SearchFilter[]\n  operatorDefinitions: SearchOperatorDefinitionDictionary\n}): string {\n  return filters\n    .filter((filter) =>\n      validateFilter({\n        filter,\n        filterDefinitions,\n        fieldDefinitions,\n        operatorDefinitions,\n      }),\n    )\n    .map((filter) => {\n      return getOperatorDefinition(operatorDefinitions, filter.operatorType)?.groqFilter({\n        fieldPath: resolveFieldPath({filter, fieldDefinitions, filterDefinitions}),\n        value: filter?.value,\n      })\n    })\n    .filter((filter) => !isEmpty(filter))\n    .filter(isNonNullable)\n    .join(' && ')\n}\n\nexport function getFieldFromFilter(\n  fields: SearchFieldDefinitionDictionary,\n  filter: SearchFilter,\n): SearchFieldDefinition | undefined {\n  return filter?.fieldId ? fields[filter.fieldId] : undefined\n}\n\nexport function getFilterKey(filter: SearchFilter): string {\n  return [filter.filterName, ...(filter.fieldId ? [filter.fieldId] : [])].join('-')\n}\n\nexport function narrowDocumentTypes({\n  fieldDefinitions,\n  filters,\n  types,\n}: {\n  fieldDefinitions: SearchFieldDefinitionDictionary\n  filters: SearchFilter[]\n  types: SchemaType[]\n}): string[] {\n  // Get all 'manually' selected document types\n  const selectedDocumentTypes = types.map((type) => type.name)\n\n  const filteredDocumentTypes = Object.values(fieldDefinitions)\n    .filter((field) => filters.map((filter) => filter?.fieldId).includes(field.id))\n    .filter((field) => field.documentTypes.length > 0)\n    .map((field) => field.documentTypes)\n\n  // Get intersecting document types across all active filters (that have at least one document type).\n  // Filters that have no document types (i.e. `_updatedAt` which is available to all) are ignored.\n  const intersectingDocumentTypes = intersection(...filteredDocumentTypes)\n\n  const documentTypes: string[][] = []\n  if (selectedDocumentTypes.length > 0) {\n    documentTypes.push(selectedDocumentTypes)\n  }\n  if (intersectingDocumentTypes.length > 0) {\n    documentTypes.push(intersectingDocumentTypes)\n  }\n\n  return intersection(...documentTypes).sort()\n}\n\nfunction resolveFieldPath({\n  filter,\n  fieldDefinitions,\n  filterDefinitions,\n}: {\n  filter: SearchFilter\n  fieldDefinitions: SearchFieldDefinitionDictionary\n  filterDefinitions: SearchFilterDefinitionDictionary\n}): string | undefined {\n  const fieldDefinition = getFieldFromFilter(fieldDefinitions, filter)\n  const filterDefinition = getFilterDefinition(filterDefinitions, filter.filterName)\n\n  if (!filterDefinition) {\n    return undefined\n  }\n\n  switch (filterDefinition.type) {\n    case 'field':\n      return fieldDefinition?.fieldPath\n    case 'pinned':\n      return filterDefinition?.fieldPath\n    default:\n      return undefined\n  }\n}\n\n/**\n * Validate if the supplied filter:\n * - has a valid filter defintion\n * - has a valid field definition (if it references a fieldId)\n * - has a valid operator (if present)\n */\nexport function validateFilter({\n  filter,\n  filterDefinitions,\n  fieldDefinitions,\n  operatorDefinitions,\n}: {\n  filter: SearchFilter\n  filterDefinitions: SearchFilterDefinitionDictionary\n  fieldDefinitions: SearchFieldDefinitionDictionary\n  operatorDefinitions: SearchOperatorDefinitionDictionary\n}): boolean {\n  const filterDef = getFilterDefinition(filterDefinitions, filter.filterName)\n  const operatorDef = getOperatorDefinition(operatorDefinitions, filter.operatorType)\n  const fieldDef = getFieldFromFilter(fieldDefinitions, filter)\n\n  // Fail: No matching filter definition\n  if (!filterDef) {\n    return false\n  }\n\n  // Fail: No matching operator\n  if (!operatorDef) {\n    return false\n  }\n\n  // Fail: No matching field definition\n  if (filter.fieldId) {\n    if (!fieldDef) {\n      return false\n    }\n  }\n\n  // Field filters:\n  if (filterDef.type === 'field') {\n    // Fail: field definition has invalid path\n    if (!fieldDef?.fieldPath) {\n      return false\n    }\n    // Fail: no field ID\n    if (!filter.fieldId) {\n      return false\n    }\n    // Fail: no filter value\n    const hasFilterValue = operatorDef.groqFilter({\n      fieldPath: fieldDef.fieldPath,\n      value: filter.value,\n    })\n    if (!hasFilterValue) {\n      return false\n    }\n  }\n\n  // Pinned filters:\n  if (filterDef.type === 'pinned') {\n    // Fail: no filter value\n    const hasFilterValue = operatorDef.groqFilter({\n      fieldPath: filterDef.fieldPath,\n      value: filter.value,\n    })\n    if (!hasFilterValue) {\n      return false\n    }\n  }\n\n  return true\n}\n","import {Card, Flex, useGlobalKeyDown, useLayer} from '@sanity/ui'\nimport {isHotkey} from 'is-hotkey-esm'\nimport {type ReactNode, useCallback, useEffect, useState} from 'react'\nimport FocusLock from 'react-focus-lock'\nimport {styled} from 'styled-components'\n\nimport {POPOVER_INPUT_PADDING, POPOVER_RADIUS, POPOVER_VERTICAL_MARGIN} from '../../../constants'\n\ninterface FilterPopoverWrapperProps {\n  anchorElement?: HTMLElement | null\n  children?: ReactNode\n  onClose: () => void\n}\n\nconst isEscape = isHotkey('escape')\n\nconst MAX_HEIGHT = 500 // px\n\nconst HiddenOverlay = styled.div`\n  background: transparent;\n  height: 100%;\n  left: 0;\n  position: fixed;\n  top: 0;\n  width: 100%;\n  z-index: -1;\n`\n\nexport function FilterPopoverWrapper({\n  anchorElement,\n  children,\n  onClose,\n}: FilterPopoverWrapperProps) {\n  const {isTopLayer} = useLayer()\n\n  const handleGlobalKeyDown = useCallback(\n    (event: KeyboardEvent) => {\n      if (isEscape(event) && isTopLayer) {\n        onClose()\n      }\n    },\n    [isTopLayer, onClose],\n  )\n\n  useGlobalKeyDown(handleGlobalKeyDown)\n\n  const popoverOffset = usePopoverOffset(anchorElement || null)\n\n  return (\n    <>\n      <HiddenOverlay onClick={onClose} />\n      <FocusLock autoFocus={false} returnFocus>\n        <Card\n          display=\"flex\"\n          overflow=\"hidden\"\n          radius={POPOVER_RADIUS}\n          style={{\n            maxHeight: `min(calc(100vh - ${popoverOffset}px - ${POPOVER_VERTICAL_MARGIN}px - ${POPOVER_INPUT_PADDING}px), ${MAX_HEIGHT}px`,\n            zIndex: 1,\n          }}\n        >\n          <Flex>{children}</Flex>\n        </Card>\n      </FocusLock>\n    </>\n  )\n}\n\nfunction calcPopoverOffset(element: HTMLElement) {\n  const rect = element.getBoundingClientRect()\n  const offset = rect.y + rect.height + POPOVER_VERTICAL_MARGIN\n  return offset\n}\n\nfunction usePopoverOffset(element: HTMLElement | null) {\n  const [offset, setOffset] = useState<number | null>(element && calcPopoverOffset(element))\n\n  const handleWindowResize = useCallback(() => {\n    if (element) {\n      setOffset(calcPopoverOffset(element))\n    }\n  }, [element])\n\n  useEffect(() => {\n    if (element) {\n      setOffset(calcPopoverOffset(element))\n    }\n  }, [element])\n\n  useEffect(() => {\n    window.addEventListener('resize', handleWindowResize)\n    return () => window.removeEventListener('resize', handleWindowResize)\n  }, [handleWindowResize])\n\n  return offset\n}\n","import {Box} from '@sanity/ui'\nimport {css, styled} from 'styled-components'\n\nexport const CustomTextInputBox = styled(Box)<{\n  $background?: boolean\n  $smallClearButton?: boolean\n}>(({$background, $smallClearButton}) => {\n  return css`\n    width: 100%;\n\n    input + span {\n      background: ${({theme}) =>\n        $background ? theme.sanity.color.card.disabled.bg2 : 'transparent'};\n    }\n\n    [data-qa='clear-button'] {\n      background: none;\n      box-shadow: none;\n      display: flex; /* TODO: hack, currently used to vertically center <TextInput>'s clearButton */\n      transform: ${$smallClearButton ? 'scale(0.8)' : 'scale(1)'};\n      &:hover {\n        opacity: 0.5;\n      }\n    }\n  `\n})\n","import {TextInput} from '@sanity/ui'\nimport {type ComponentProps, forwardRef} from 'react'\n\nimport {CustomTextInputBox} from './CustomTextInputBox'\n\ninterface CustomTextInputProps extends ComponentProps<typeof TextInput> {\n  $background?: boolean\n  $smallClearButton?: boolean\n}\n\nexport const CustomTextInput = forwardRef<HTMLInputElement, CustomTextInputProps>(\n  function CustomTextInput(props, ref) {\n    const {$background, $smallClearButton, ...rest} = props\n\n    return (\n      <CustomTextInputBox $background={$background} $smallClearButton={$smallClearButton}>\n        <TextInput {...rest} ref={ref} />\n      </CustomTextInputBox>\n    )\n  },\n)\n","import {SearchIcon} from '@sanity/icons'\nimport {Box, Flex} from '@sanity/ui'\nimport {forwardRef, type KeyboardEvent} from 'react'\nimport {styled} from 'styled-components'\n\nimport {useTranslation} from '../../../../../../../i18n'\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {CustomTextInput} from '../../common/CustomTextInput'\n\ninterface FilterPopoverContentHeaderProps {\n  ariaInputLabel: string\n  onChange: (e: KeyboardEvent<HTMLInputElement>) => void\n  onClear: () => void\n  typeFilter: string\n}\n\nconst SearchHeaderBox = styled(Box)`\n  border-bottom: 1px solid ${({theme}) => theme.sanity.color.base.border};\n  flex-shrink: 0;\n`\n\nconst SearchHeaderContentFlex = styled(Flex)`\n  box-sizing: border-box;\n`\n\nexport const FilterPopoverContentHeader = forwardRef<\n  HTMLInputElement,\n  FilterPopoverContentHeaderProps\n>(function FilterPopoverContentHeader({ariaInputLabel, onChange, onClear, typeFilter}, ref) {\n  const {\n    state: {fullscreen},\n  } = useSearchState()\n  const {t} = useTranslation()\n\n  return (\n    <SearchHeaderBox>\n      <SearchHeaderContentFlex align=\"center\" flex={1} padding={1}>\n        <CustomTextInput\n          __unstable_disableFocusRing\n          $smallClearButton\n          aria-label={ariaInputLabel}\n          autoComplete=\"off\"\n          border={false}\n          clearButton={!!typeFilter}\n          fontSize={fullscreen ? 2 : 1}\n          icon={SearchIcon}\n          muted\n          onChange={onChange}\n          onClear={onClear}\n          placeholder={t('search.filter-placeholder')}\n          ref={ref}\n          spellCheck={false}\n          radius={2}\n          value={typeFilter}\n        />\n      </SearchHeaderContentFlex>\n    </SearchHeaderBox>\n  )\n})\n","import {type Schema, type SchemaType} from '@sanity/types'\nimport {type ButtonTone} from '@sanity/ui'\nimport {difference, startCase} from 'lodash'\n\nimport {type TFunction} from '../../../../../../../i18n'\nimport {isNonNullable} from '../../../../../../../util'\nimport {\n  type SearchFieldDefinition,\n  type SearchFieldDefinitionDictionary,\n} from '../../../definitions/fields'\nimport {\n  getFilterDefinition,\n  type SearchFilterDefinition,\n  type SearchFilterDefinitionDictionary,\n  type SearchFilterPinnedDefinition,\n} from '../../../definitions/filters'\nimport {\n  type FilterMenuItem,\n  type FilterMenuItemFilter,\n  type FilterMenuItemHeader,\n  type SearchFilter,\n} from '../../../types'\nimport {buildSearchFilter, getFieldFromFilter} from '../../../utils/filterUtils'\n\n/**\n * Creates a flat list of filter menu items based on the current filter text input.\n */\nexport function createFilterMenuItems({\n  documentTypesNarrowed,\n  fieldDefinitions,\n  filterDefinitions,\n  schema,\n  titleFilter,\n  types,\n  t,\n}: {\n  documentTypesNarrowed: string[]\n  fieldDefinitions: SearchFieldDefinitionDictionary\n  filterDefinitions: SearchFilterDefinitionDictionary\n  schema: Schema\n  titleFilter: string\n  types: SchemaType[]\n  t: TFunction<'studio', undefined>\n}): FilterMenuItem[] {\n  // Construct field filters based on available definitions and current title fitler\n  const fieldFilters = Object.values(fieldDefinitions)\n    .filter((fieldDef) => includesTitleInFieldDefinition(fieldDef, titleFilter))\n    .map((fieldDef) => {\n      const filterDef = getFilterDefinition(filterDefinitions, fieldDef.filterName)\n      if (filterDef) {\n        return buildSearchFilter(filterDef, fieldDef.id)\n      }\n      return null\n    })\n    .filter(isNonNullable)\n\n  const pinnedItems = buildPinnedMenuItems({\n    fieldDefinitions,\n    filterDefinitions,\n    titleFilter,\n  })\n\n  if (documentTypesNarrowed.length === 0) {\n    return [\n      ...pinnedItems,\n      // All fields\n      ...filterGroup({\n        fieldDefinitions,\n        filterDefinitions,\n        filters: fieldFilters,\n        headerTitle: t('search.filter-all-fields-header'),\n        id: 'field',\n      }),\n    ]\n  }\n\n  return [\n    ...pinnedItems,\n    // All shared / narrowed items\n    ...buildFieldMenuItemsNarrowed({\n      documentTypesNarrowed,\n      fieldDefinitions,\n      filterDefinitions,\n      filters: fieldFilters,\n      schema,\n      types,\n      t,\n    }),\n  ]\n}\n\nfunction filterGroup({\n  fieldDefinitions,\n  filterDefinitions,\n  filters,\n  id,\n  headerTitle,\n  tone,\n}: {\n  fieldDefinitions: SearchFieldDefinitionDictionary\n  filterDefinitions: SearchFilterDefinitionDictionary\n  filters: SearchFilter[]\n  id: string\n  headerTitle?: string\n  tone?: ButtonTone\n}): FilterMenuItem[] {\n  const header: FilterMenuItemHeader = {\n    title: headerTitle || '',\n    tone: tone || 'default',\n    type: 'header',\n  }\n  const filterItems = filters.map(\n    (filter) =>\n      ({\n        fieldDefinition: getFieldFromFilter(fieldDefinitions, filter),\n        filterDefinition: getFilterDefinition(filterDefinitions, filter.filterName),\n        filter,\n        group: id,\n        tone: tone || 'default',\n        type: 'filter',\n      }) as FilterMenuItemFilter,\n  )\n\n  return filterItems.length > 0\n    ? [\n        ...(headerTitle ? [header] : []), //\n        ...filterItems,\n      ]\n    : []\n}\n\n/**\n * Construct a flat list of narrowed field menu items, including shared fields.\n * Shared fields should always appear first.\n */\nfunction buildFieldMenuItemsNarrowed({\n  documentTypesNarrowed,\n  fieldDefinitions,\n  filterDefinitions,\n  filters,\n  schema,\n  types,\n  t,\n}: {\n  documentTypesNarrowed: string[]\n  fieldDefinitions: SearchFieldDefinitionDictionary\n  filterDefinitions: SearchFilterDefinitionDictionary\n  filters: SearchFilter[]\n  schema: Schema\n  types: SchemaType[]\n  t: TFunction<'studio', undefined>\n}) {\n  const sharedFilters = filters.filter((filter) => {\n    const fieldDefinition = getFieldFromFilter(fieldDefinitions, filter)\n    return sharesDocumentTypes(documentTypesNarrowed, fieldDefinition)\n  })\n\n  const sharedItems =\n    documentTypesNarrowed.length > 1 && types.length > 1\n      ? filterGroup({\n          fieldDefinitions,\n          filterDefinitions,\n          filters: sharedFilters,\n          headerTitle: t('search.filter-shared-fields-header'),\n          id: 'shared',\n          tone: 'primary',\n        })\n      : []\n\n  const groupedItems = documentTypesNarrowed\n    .map((documentType) => {\n      const docType = schema.get(documentType)\n      return {\n        // Note: it shouldn't be possible to select document types that do not exist in schema,\n        // and there is no way to inject it into state (eg not persisted in URL), thus we leave\n        // this fallback (`Unknown type`) only as a edge-case safety net and will not translate it.\n        title: docType?.title || startCase(docType?.name) || '(Unknown type)',\n        documentType,\n      }\n    })\n    // Sort groups by title\n    .sort((a, b) => a.title.localeCompare(b.title))\n    .map(({documentType, title}) => {\n      const groupFilters = filters.filter((filter) => {\n        const fieldDefinition = getFieldFromFilter(fieldDefinitions, filter)\n        return includesDocumentTypes([documentType], fieldDefinition)\n      })\n      return filterGroup({\n        fieldDefinitions,\n        filterDefinitions,\n        filters: groupFilters,\n        id: title,\n        headerTitle: title,\n      })\n    })\n    .flat()\n\n  return [...sharedItems, ...groupedItems]\n}\n\n/**\n * Construct a flat list of all pinned filter menu items (both ungrouped and grouped).\n * Un-grouped items should always appear first.\n */\nfunction buildPinnedMenuItems({\n  fieldDefinitions,\n  filterDefinitions,\n  titleFilter,\n}: {\n  fieldDefinitions: SearchFieldDefinitionDictionary\n  filterDefinitions: SearchFilterDefinitionDictionary\n  titleFilter: string\n}) {\n  // Extract all ungrouped pinned filters, these sit above all other items.\n  const ungroupedPinnedFilters = Object.values(filterDefinitions)\n    .filter(isPinnedFilterDefWithoutGroup)\n    .filter((filterDef) => includesTitleInPinnedFilterDefinition(filterDef, titleFilter))\n    .map((filterDef) => buildSearchFilter(filterDef))\n\n  // Extract grouped pinned filters\n  const groupedPinnedFilters = Object.values(filterDefinitions)\n    .filter(isPinnedFilterDefWithGroup)\n    .filter((filterDef) => includesTitleInPinnedFilterDefinition(filterDef, titleFilter))\n    .reduce<Record<string, SearchFilter[]>>((acc, val) => {\n      acc[val.group] = acc[val.group] || []\n      acc[val.group].push(buildSearchFilter(val))\n      return acc\n    }, {})\n\n  return [\n    // Ungrouped\n    ...filterGroup({\n      fieldDefinitions,\n      filterDefinitions,\n      filters: ungroupedPinnedFilters,\n      id: 'pinned-ungrouped',\n      tone: 'primary',\n    }),\n    // Grouped\n    ...Object.entries(groupedPinnedFilters).flatMap(([groupTitle, filters]) =>\n      filterGroup({\n        fieldDefinitions,\n        filterDefinitions,\n        filters,\n        headerTitle: groupTitle,\n        id: groupTitle,\n        tone: 'primary',\n      }),\n    ),\n  ]\n}\n\nfunction includesDocumentTypes(documentTypes: string[], fieldDefinition?: SearchFieldDefinition) {\n  return fieldDefinition?.documentTypes.some((type) => documentTypes.includes(type))\n}\n\nfunction includesTitleInFieldDefinition(field: SearchFieldDefinition, currentTitle: string) {\n  const fieldTitle = field.titlePath.join('/')\n  return fieldTitle.toLowerCase().includes(currentTitle.toLowerCase())\n}\n\nfunction includesTitleInPinnedFilterDefinition(\n  filter: SearchFilterPinnedDefinition,\n  currentTitle: string,\n) {\n  return filter.title.toLowerCase().includes(currentTitle.toLowerCase())\n}\n\nfunction isPinnedFilterDefWithGroup(\n  filterDef: SearchFilterDefinition,\n): filterDef is SearchFilterPinnedDefinition & {group: string} {\n  return filterDef.type === 'pinned' && typeof filterDef?.group !== 'undefined'\n}\n\nfunction isPinnedFilterDefWithoutGroup(\n  filterDef: SearchFilterDefinition,\n): filterDef is SearchFilterPinnedDefinition {\n  return filterDef.type === 'pinned' && typeof filterDef?.group === 'undefined'\n}\n\nfunction sharesDocumentTypes(documentTypes: string[], fieldDefinition?: SearchFieldDefinition) {\n  return difference(documentTypes, fieldDefinition?.documentTypes || []).length === 0\n}\n","import {useMemo} from 'react'\n\nimport {useSearchState} from '../../contexts/search/useSearchState'\nimport {getFilterDefinition} from '../../definitions/filters'\nimport {type SearchFilter} from '../../types'\nimport {getFieldFromFilter} from '../../utils/filterUtils'\n\ninterface FilterTitleProps {\n  filter: SearchFilter\n  maxLength?: number\n}\n\nexport function FilterTitle({filter, maxLength}: FilterTitleProps) {\n  const {\n    state: {definitions},\n  } = useSearchState()\n\n  const title = useMemo(() => {\n    const filterDef = getFilterDefinition(definitions.filters, filter.filterName)\n    switch (filterDef?.type) {\n      case 'field': {\n        const fieldDefinition = getFieldFromFilter(definitions.fields, filter)\n        if (fieldDefinition?.titlePath) {\n          return fieldDefinition.titlePath[fieldDefinition.titlePath.length - 1]\n        }\n        return null\n      }\n      case 'pinned':\n        return filterDef.title\n      default:\n        return null\n    }\n  }, [definitions, filter])\n\n  if (!title) {\n    return null\n  }\n\n  return maxLength && title.length > maxLength ? (\n    <span>{title.slice(0, maxLength)}…</span>\n  ) : (\n    <span>{title}</span>\n  )\n}\n","import {UnknownIcon} from '@sanity/icons'\n\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {getFilterDefinition} from '../../../definitions/filters'\nimport {type SearchFilter} from '../../../types'\n\ninterface FilterIconProps {\n  filter: SearchFilter\n}\n\nexport function FilterIcon({filter}: FilterIconProps) {\n  const {\n    state: {definitions},\n  } = useSearchState()\n\n  const Icon = getFilterDefinition(definitions.filters, filter.filterName)?.icon\n  if (Icon) {\n    return <Icon />\n  }\n  return <UnknownIcon />\n}\n","import {ChevronRightIcon} from '@sanity/icons'\nimport {Box, Flex, Stack, Text} from '@sanity/ui'\nimport {Fragment} from 'react'\n\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {type SearchFilter} from '../../../types'\nimport {getFieldFromFilter} from '../../../utils/filterUtils'\nimport {FilterTitle} from '../../common/FilterTitle'\nimport {FilterIcon} from './FilterIcon'\n\ninterface FilterDetailsProps {\n  filter: SearchFilter\n}\n\nexport function FilterDetails({filter}: FilterDetailsProps) {\n  const {\n    state: {definitions},\n  } = useSearchState()\n  const fieldDefinition = getFieldFromFilter(definitions.fields, filter)\n\n  return (\n    <Stack space={2}>\n      {/* Path */}\n      {fieldDefinition?.titlePath && fieldDefinition.titlePath?.length > 1 && (\n        <Box marginLeft={4}>\n          <Text muted size={0}>\n            {fieldDefinition.titlePath.slice(0, -1).map((pathTitle, index) => {\n              return (\n                <Fragment\n                  // eslint-disable-next-line react/no-array-index-key\n                  key={index}\n                >\n                  <span>{pathTitle}</span>\n                  {index !== fieldDefinition.titlePath.length - 2 && (\n                    <span\n                      style={{\n                        opacity: 0.75,\n                        paddingLeft: '0.25em',\n                        paddingRight: '0.25em',\n                      }}\n                    >\n                      <ChevronRightIcon />\n                    </span>\n                  )}\n                </Fragment>\n              )\n            })}\n          </Text>\n        </Box>\n      )}\n\n      <Flex align=\"flex-start\" gap={3}>\n        <Box style={{flexShrink: 0}}>\n          <Text size={1}>\n            <FilterIcon filter={filter} />\n          </Text>\n        </Box>\n        <Text size={1} weight=\"medium\">\n          <FilterTitle filter={filter} />\n        </Text>\n      </Flex>\n    </Stack>\n  )\n}\n","import {isObjectSchemaType, type ObjectField, type SchemaType} from '@sanity/types'\n\nexport function getSchemaField(\n  schemaType: SchemaType,\n  fieldPath: string,\n): ObjectField<SchemaType> | undefined {\n  const paths = fieldPath.split('.')\n  const firstPath = paths[0]\n  if (firstPath && isObjectSchemaType(schemaType)) {\n    const field = schemaType.fields.find((f) => f.name === firstPath)\n    if (field) {\n      const nextPath = paths.slice(1).join('.')\n      if (nextPath) {\n        return getSchemaField(field.type, nextPath)\n      }\n      return field\n    }\n  }\n  return undefined\n}\n","import {isValidElement} from 'react'\nimport {renderToString} from 'react-dom/server'\n\n/**\n * Convert a field value to a string (if it's a React element) and remove HTML tags.\n * If the field value is a string, pass through as-is.\n */\nexport function sanitizeFieldValue(name: string | React.JSX.Element): string {\n  if (isValidElement(name)) {\n    return stripHtmlTags(renderToString(name))\n  }\n\n  return typeof name === 'string' ? name : ''\n}\n\nfunction stripHtmlTags(str: string) {\n  return new DOMParser().parseFromString(str, 'text/html')?.body.textContent || ''\n}\n","import {Card, Flex, Stack, Text} from '@sanity/ui'\nimport {startCase, uniq} from 'lodash'\nimport {useMemo} from 'react'\n\nimport {Tooltip} from '../../../../../../../../../ui-components'\nimport {TextWithTone} from '../../../../../../../../components'\nimport {useSchema} from '../../../../../../../../hooks'\nimport {useTranslation} from '../../../../../../../../i18n'\nimport {isNonNullable, truncateString} from '../../../../../../../../util'\nimport {useSearchState} from '../../../../contexts/search/useSearchState'\nimport {type SearchFieldDefinition} from '../../../../definitions/fields'\nimport {type SearchFilterDefinition} from '../../../../definitions/filters'\nimport {getSchemaField} from '../../../../utils/getSchemaField'\nimport {sanitizeFieldValue} from '../../../../utils/sanitizeField'\n\ninterface FilterTooltipProps {\n  children: React.JSX.Element\n  fieldDefinition?: SearchFieldDefinition\n  filterDefinition: SearchFilterDefinition\n  visible?: boolean\n}\n\nconst MAX_VISIBLE_TYPES = 10\n\nexport function FilterTooltip({\n  children,\n  fieldDefinition,\n  filterDefinition,\n  visible,\n}: FilterTooltipProps) {\n  const {\n    state: {documentTypesNarrowed},\n  } = useSearchState()\n  const {t} = useTranslation()\n\n  const schema = useSchema()\n\n  const fieldDefinitionDocumentTypeTitles = useMemo(() => {\n    if (fieldDefinition?.documentTypes) {\n      return fieldDefinition.documentTypes\n        .map((d) => {\n          const defType = schema.get(d)\n          return defType?.title || startCase(defType?.name)\n        })\n        .filter(isNonNullable)\n        .sort()\n    }\n    return []\n  }, [fieldDefinition?.documentTypes, schema])\n\n  /**\n   * Obtain the shared field description for the current field definition.\n   * Return a description only if this field description is identical (and defined)\n   * across all ALL associated fields.\n   */\n  const fieldDefinitionDescription = useMemo(() => {\n    if (fieldDefinition?.documentTypes) {\n      const descriptions = fieldDefinition.documentTypes\n        .map((d) => {\n          const defType = schema.get(d)\n          if (defType) {\n            const field = getSchemaField(defType, fieldDefinition.fieldPath)\n            // Sanitize schema descriptions (which may either be a string or React element)\n            return field?.type.description && sanitizeFieldValue(field?.type.description)\n          }\n          return null\n        })\n        .filter(isNonNullable)\n        .sort()\n\n      const uniqueDescriptions = uniq(descriptions)\n      if (uniqueDescriptions.length === 1) {\n        return uniqueDescriptions[0]\n      }\n    }\n    return undefined\n  }, [fieldDefinition?.documentTypes, fieldDefinition?.fieldPath, schema])\n\n  return (\n    <Tooltip\n      content={\n        <Card tone=\"default\" radius={2} style={{maxWidth: '250px'}}>\n          <Stack space={4}>\n            {/* Field name */}\n            {fieldDefinition && (\n              <Stack space={3}>\n                <Text muted size={1} weight=\"medium\">\n                  {t('search.filter-field-tooltip-name')}\n                </Text>\n                <TextWithTone\n                  size={1}\n                  style={{fontFamily: 'monospace'}}\n                  tone=\"primary\"\n                  textOverflow=\"ellipsis\"\n                >\n                  {fieldDefinition?.name}\n                </TextWithTone>\n              </Stack>\n            )}\n\n            {/* Field description */}\n            {fieldDefinitionDescription && (\n              <Stack space={3}>\n                <Text muted size={1} weight=\"medium\">\n                  {t('search.filter-field-tooltip-description')}\n                </Text>\n                <Text muted size={1}>\n                  {truncateString(fieldDefinitionDescription, 256)}\n                </Text>\n              </Stack>\n            )}\n\n            {/* Filter description */}\n            {filterDefinition?.description && (\n              <Text muted size={1}>\n                {truncateString(filterDefinition.description, 256)}\n              </Text>\n            )}\n\n            {/* Field document titles */}\n            {!documentTypesNarrowed.length && fieldDefinitionDocumentTypeTitles.length > 0 && (\n              <Stack space={2}>\n                <Flex align=\"center\" gap={1}>\n                  <Text muted size={1} weight=\"medium\">\n                    {t('search.filter-field-tooltip-used-in-document-types')}\n                  </Text>\n                  <Card padding={1} radius={2} tone=\"transparent\">\n                    <Text size={1} muted>\n                      {fieldDefinitionDocumentTypeTitles.length}\n                    </Text>\n                  </Card>\n                </Flex>\n                <Text size={1} weight=\"regular\" muted>\n                  {fieldDefinitionDocumentTypeTitles.slice(0, MAX_VISIBLE_TYPES).join(', ')}\n                  {fieldDefinitionDocumentTypeTitles?.length > MAX_VISIBLE_TYPES\n                    ? ` +${fieldDefinitionDocumentTypeTitles.length - MAX_VISIBLE_TYPES} more`\n                    : ''}\n                </Text>\n              </Stack>\n            )}\n          </Stack>\n        </Card>\n      }\n      disabled={!visible}\n      fallbackPlacements={['left']}\n      placement=\"right\"\n      portal\n    >\n      {children}\n    </Tooltip>\n  )\n}\n","import {\n  Box,\n  // eslint-disable-next-line no-restricted-imports\n  Button, // Button with specific styling and children.\n  type ResponsiveMarginProps,\n  type ResponsivePaddingProps,\n} from '@sanity/ui'\nimport {memo, useCallback} from 'react'\n\nimport {useSearchState} from '../../../../contexts/search/useSearchState'\nimport {type FilterMenuItemFilter} from '../../../../types'\nimport {getFilterKey} from '../../../../utils/filterUtils'\nimport {FilterDetails} from '../../common/FilterDetails'\nimport {FilterTooltip} from './FilterTooltip'\n\ninterface FilterMenuItemProps extends ResponsiveMarginProps, ResponsivePaddingProps {\n  item: FilterMenuItemFilter\n  onClose: () => void\n}\n\nexport const MenuItemFilter = memo(function MenuItemFilter({\n  item,\n  onClose,\n  ...rest\n}: FilterMenuItemProps) {\n  const {\n    dispatch,\n    state: {filters},\n  } = useSearchState()\n\n  const handleClick = useCallback(() => {\n    dispatch({filter: item.filter, type: 'TERMS_FILTERS_ADD'})\n    onClose?.()\n  }, [dispatch, item.filter, onClose])\n\n  const isAlreadyActive = !!filters.find((f) => getFilterKey(f) === getFilterKey(item.filter))\n\n  // Only enable tooltips if an associated field definition exists, or the filter has a valid description\n  const tooltipEnabled = !!(item.fieldDefinition || item.filterDefinition.description)\n\n  return (\n    <Box {...rest}>\n      <Button\n        disabled={isAlreadyActive}\n        fontSize={1}\n        justify=\"flex-start\"\n        mode=\"bleed\"\n        onClick={isAlreadyActive ? undefined : handleClick}\n        padding={0}\n        style={{position: 'relative', whiteSpace: 'normal', width: '100%'}}\n        tabIndex={-1}\n        tone={item?.tone}\n      >\n        <FilterTooltip\n          fieldDefinition={item.fieldDefinition}\n          filterDefinition={item.filterDefinition}\n          visible={tooltipEnabled}\n        >\n          <Box padding={3}>\n            <FilterDetails filter={item.filter} />\n          </Box>\n        </FilterTooltip>\n      </Button>\n    </Box>\n  )\n})\n","import {Box, Card, Text} from '@sanity/ui'\nimport {memo} from 'react'\n\nimport {type FilterMenuItemHeader} from '../../../../types'\n\ninterface MenuItemHeaderFields {\n  item: FilterMenuItemHeader\n}\n\nexport const MenuItemHeader = memo(function MenuItemHeader({item}: MenuItemHeaderFields) {\n  return (\n    <Box paddingTop={1}>\n      <Card borderBottom paddingX={2} paddingY={3} tone={item?.tone}>\n        <Text muted size={1} textOverflow=\"ellipsis\" weight=\"medium\">\n          {item.title}\n        </Text>\n      </Card>\n    </Box>\n  )\n})\n","import {Box, Flex, Text} from '@sanity/ui'\nimport {type KeyboardEvent, useCallback, useMemo, useState} from 'react'\n\nimport {\n  CommandList,\n  type CommandListGetItemDisabledCallback,\n  type CommandListRenderItemCallback,\n} from '../../../../../../../components'\nimport {useSchema} from '../../../../../../../hooks'\nimport {useTranslation} from '../../../../../../../i18n'\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {type FilterMenuItem} from '../../../types'\nimport {getFilterKey} from '../../../utils/filterUtils'\nimport {FilterPopoverContentHeader} from '../common/FilterPopoverContentHeader'\nimport {createFilterMenuItems} from './createFilterMenuItems'\nimport {MenuItemFilter} from './items/MenuItemFilter'\nimport {MenuItemHeader} from './items/MenuItemHeader'\n\ninterface AddFilterPopoverContentProps {\n  onClose: () => void\n}\n\nconst POPOVER_STYLES = {width: '300px'}\n\nexport function AddFilterPopoverContent({onClose}: AddFilterPopoverContentProps) {\n  const [inputElement, setInputElement] = useState<HTMLInputElement | null>(null)\n  const [titleFilter, setTitleFilter] = useState('')\n  const {t} = useTranslation()\n\n  const handleFilterChange = useCallback(\n    (e: KeyboardEvent<HTMLInputElement>) => setTitleFilter(e.currentTarget.value),\n    [setTitleFilter],\n  )\n  const handleFilterClear = useCallback(() => setTitleFilter(''), [])\n\n  const schema = useSchema()\n\n  const {\n    state: {\n      documentTypesNarrowed,\n      definitions,\n      filters,\n      terms: {types},\n    },\n  } = useSearchState()\n\n  const filteredMenuItems = useMemo(\n    () =>\n      createFilterMenuItems({\n        documentTypesNarrowed,\n        fieldDefinitions: definitions.fields,\n        filterDefinitions: definitions.filters,\n        schema,\n        titleFilter,\n        types,\n        t,\n      }),\n    [documentTypesNarrowed, definitions.fields, definitions.filters, schema, titleFilter, types, t],\n  )\n\n  const renderItem = useCallback<CommandListRenderItemCallback<FilterMenuItem>>(\n    (item) => {\n      if (item.type === 'filter') {\n        return <MenuItemFilter item={item} onClose={onClose} paddingBottom={1} />\n      }\n      if (item.type === 'header') {\n        return <MenuItemHeader item={item} />\n      }\n      return null\n    },\n    [onClose],\n  )\n\n  const getItemDisabled = useCallback<CommandListGetItemDisabledCallback>(\n    (index) => {\n      const filterItem = filteredMenuItems[index]\n      return (\n        filterItem.type !== 'filter' ||\n        !!filters.find((f) => getFilterKey(f) === getFilterKey(filterItem.filter))\n      )\n    },\n    [filteredMenuItems, filters],\n  )\n\n  const getItemKey = useCallback(\n    (index: number) => {\n      const menuItem = filteredMenuItems[index]\n      switch (menuItem.type) {\n        case 'filter':\n          return [\n            ...(menuItem.group ? [menuItem.group] : []), //\n            getFilterKey(menuItem.filter),\n          ].join('-')\n        case 'header':\n          return `${menuItem.type}-${menuItem.title}`\n        default:\n          return index\n      }\n    },\n    [filteredMenuItems],\n  )\n\n  return (\n    <Flex direction=\"column\" style={POPOVER_STYLES}>\n      {/* Filter header */}\n      <FilterPopoverContentHeader\n        ariaInputLabel={t('search.filter-by-title-aria-label')}\n        onChange={handleFilterChange}\n        onClear={handleFilterClear}\n        ref={setInputElement}\n        typeFilter={titleFilter}\n      />\n\n      <Flex>\n        {filteredMenuItems.length > 0 && (\n          <CommandList\n            activeItemDataAttr=\"data-hovered\"\n            ariaLabel={t('search.filters-aria-label', {count: filteredMenuItems.length})}\n            autoFocus=\"input\"\n            getItemDisabled={getItemDisabled}\n            getItemKey={getItemKey}\n            inputElement={inputElement}\n            itemHeight={45}\n            items={filteredMenuItems}\n            overscan={20}\n            padding={1}\n            paddingBottom={0}\n            renderItem={renderItem}\n          />\n        )}\n\n        {/* No results */}\n        {filteredMenuItems.length == 0 && (\n          <Box padding={3}>\n            <Text muted size={1} textOverflow=\"ellipsis\">\n              {t('search.filter-no-matches-found', {filter: titleFilter})}\n            </Text>\n          </Box>\n        )}\n      </Flex>\n    </Flex>\n  )\n}\n","import {AddIcon} from '@sanity/icons'\nimport {useClickOutsideEvent} from '@sanity/ui'\nimport {useCallback, useRef, useState} from 'react'\n\nimport {Button, Popover} from '../../../../../../../../ui-components'\nimport {useTranslation} from '../../../../../../../i18n'\nimport {POPOVER_RADIUS, POPOVER_VERTICAL_MARGIN} from '../../../constants'\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {FilterPopoverWrapper} from '../common/FilterPopoverWrapper'\nimport {AddFilterPopoverContent} from './AddFilterPopoverContent'\n\nexport function AddFilterButton() {\n  const [open, setOpen] = useState(false)\n  const [buttonElement, setButtonElement] = useState<HTMLElement | null>(null)\n  const popoverRef = useRef<HTMLDivElement | null>(null)\n  const {t} = useTranslation()\n\n  const {\n    state: {fullscreen},\n  } = useSearchState()\n\n  const handleClose = useCallback(() => setOpen(false), [])\n  const handleOpen = useCallback(() => setOpen(true), [])\n\n  useClickOutsideEvent(handleClose, () => [buttonElement, popoverRef.current])\n\n  return (\n    <Popover\n      __unstable_margins={[POPOVER_VERTICAL_MARGIN, 0, 0, 0]}\n      content={\n        <FilterPopoverWrapper anchorElement={buttonElement} onClose={handleClose}>\n          <AddFilterPopoverContent onClose={handleClose} />\n        </FilterPopoverWrapper>\n      }\n      open={open}\n      placement=\"bottom-start\"\n      radius={POPOVER_RADIUS}\n      ref={popoverRef}\n      portal\n    >\n      <Button\n        icon={AddIcon}\n        mode=\"bleed\"\n        onClick={handleOpen}\n        size={fullscreen ? 'large' : 'default'}\n        ref={setButtonElement}\n        selected={open}\n        text={t('search.action.add-filter')}\n      />\n    </Popover>\n  )\n}\n","import {type SchemaType} from '@sanity/types'\n\nimport {type TFunction} from '../../../../../i18n'\n\nconst DEFAULT_AVAILABLE_CHARS = 40 // excluding \"+x more\" suffix\n\n/**\n * From the list of provided document types, return as many type names as possible that can fit\n * within the `availableCharacters` parameter, formatted by title where available. Includes the\n * number of remaining types that were _not_ included in the returned array of types, so a UI can\n * choose to display a \"+x more\" suffix.\n *\n * @see documentTypesTruncated for a helper function that returns a formatted string\n *\n * @param options - Options object\n * @returns An object containing truncated list of types, as well as number of excluded types\n * @internal\n */\nexport function getDocumentTypesTruncated({\n  availableCharacters = DEFAULT_AVAILABLE_CHARS,\n  types,\n}: {\n  availableCharacters?: number\n  types: SchemaType[]\n}): {types: string[]; remainingCount: number} {\n  if (types.length === 0) {\n    return {remainingCount: 0, types: []}\n  }\n\n  /**\n   * Get the total number of visible document types whose titles fit within `availableCharacters` count.\n   * The first document is always included, regardless of whether it fits within `availableCharacters` or not.\n   */\n  const visibleTypes = types.reduce<SchemaType[]>(\n    (function () {\n      let remaining = availableCharacters\n      return function (acc, val, index) {\n        const title = typeTitle(val)\n        remaining -= title.length\n\n        // Always include the first type, regardless of title length\n        if (index === 0) {\n          acc.push(val)\n        } else if (availableCharacters > title.length && remaining > title.length) {\n          acc.push(val)\n        }\n        return acc\n      }\n    })(),\n    [],\n  )\n\n  return {\n    remainingCount: types.length - visibleTypes.length,\n    types: visibleTypes.map(typeTitle),\n  }\n}\n\n/**\n * From the list of provided document types, return as many type names as possible that can fit\n * within the `availableCharacters` parameter, formatted by title where available. Includes the\n * number of remaining types that were _not_ included in the returned array of types, so a UI can\n * choose to display a \"+x more\" suffix.\n *\n * @param options - Options object\n * @returns A formatted string of types\n * @internal\n */\nexport function documentTypesTruncated({\n  t,\n  availableCharacters,\n  types,\n}: {\n  availableCharacters?: number\n  types: SchemaType[]\n  t: TFunction<'studio', undefined>\n}): string {\n  if (types.length === 0) {\n    return t('search.document-type-list-all-types')\n  }\n\n  const {remainingCount, types: visibleTypes} = getDocumentTypesTruncated({\n    availableCharacters,\n    types,\n  })\n\n  const key =\n    remainingCount > 0 ? 'search.document-type-list-truncated' : 'search.document-type-list'\n\n  // \"Author, Book\" or \"Author, Book, Pet, Person +2 more\"\n  return t(key, {\n    count: remainingCount,\n    types: visibleTypes,\n    formatParams: {types: {style: 'short', type: 'unit'}},\n  })\n}\n\nfunction typeTitle(schemaType: SchemaType) {\n  return schemaType.title ?? schemaType.name\n}\n","import {\n  type CrossDatasetType,\n  type SchemaType,\n  type SearchConfiguration,\n  type SlugSchemaType,\n} from '@sanity/types'\nimport {toString as pathToString} from '@sanity/util/paths'\n\nimport {isRecord} from '../../util'\nimport {type SearchPath, type SearchSpec} from './types'\n\ninterface SearchWeightEntry {\n  path: string\n  weight: number\n  type: 'string' | 'pt'\n}\n\nconst CACHE = new WeakMap<SchemaType | CrossDatasetType, SearchSpec>()\nconst PREVIEW_FIELD_WEIGHT_MAP = {\n  title: 10,\n  subtitle: 5,\n  description: 1.5,\n}\nconst BASE_WEIGHTS: Record<string, Omit<SearchWeightEntry, 'path'>> = {\n  _id: {weight: 1, type: 'string'},\n  _type: {weight: 1, type: 'string'},\n}\nconst ignoredBuiltInObjectTypes = ['reference', 'crossDatasetReference', 'slug']\n\nconst getTypeChain = (type: SchemaType | undefined): SchemaType[] =>\n  type ? [type, ...getTypeChain(type.type)] : []\n\nconst isPtField = (type: SchemaType | undefined) =>\n  type?.jsonType === 'array' &&\n  type.of.some((arrType) => getTypeChain(arrType).some(({name}) => name === 'block'))\n\nconst isStringField = (schemaType: SchemaType | undefined): boolean =>\n  schemaType ? schemaType?.jsonType === 'string' : false\n\nconst isSlugField = (schemaType: SchemaType | undefined): schemaType is SlugSchemaType => {\n  const typeChain = getTypeChain(schemaType)\n  return typeChain.some(({jsonType, name}) => jsonType === 'object' && name === 'slug')\n}\n\nconst isSearchConfiguration = (options: unknown): options is SearchConfiguration =>\n  isRecord(options) && 'search' in options && isRecord(options.search)\n\nfunction isSchemaType(input: SchemaType | CrossDatasetType | undefined): input is SchemaType {\n  return typeof input !== 'undefined' && 'name' in input\n}\n\nfunction getFullyQualifiedPath(schemaType: SchemaType, path: string): string {\n  // Slug field weights should be applied to the object's `current` field.\n  if (isSlugField(schemaType)) {\n    return [path, 'current'].join('.')\n  }\n\n  return path\n}\n\nfunction getLeafWeights(\n  schemaType: SchemaType | CrossDatasetType | undefined,\n  maxDepth: number,\n  getWeight: (schemaType: SchemaType, path: string) => number | null,\n): Record<string, SearchWeightEntry> {\n  function traverse(\n    type: SchemaType | undefined,\n    path: string,\n    depth: number,\n    accumulator: SearchWeightEntry[] = [], // use accumulator to avoid stack overflow\n  ): SearchWeightEntry[] {\n    if (!type) return accumulator\n    if (depth > maxDepth) return accumulator\n\n    const typeChain = getTypeChain(type)\n\n    if (isStringField(type) || isPtField(type)) {\n      const weight = getWeight(type, path)\n      if (typeof weight === 'number') {\n        accumulator.push({path, weight, type: isPtField(type) ? 'pt' : 'string'})\n      }\n      return accumulator\n    }\n\n    if (isSlugField(type)) {\n      const weight = getWeight(type, path)\n      if (typeof weight === 'number') {\n        accumulator.push({\n          path: getFullyQualifiedPath(type, path),\n          weight,\n          type: isPtField(type) ? 'pt' : 'string',\n        })\n      }\n      return accumulator\n    }\n\n    let recursiveResult = accumulator\n    for (const t of typeChain) {\n      if (\n        t.jsonType === 'object' &&\n        !!t.fields?.length &&\n        !ignoredBuiltInObjectTypes.includes(t.name)\n      ) {\n        for (const field of t.fields) {\n          recursiveResult = traverse(\n            field.type,\n            pathToString([path, field.name].filter(Boolean)),\n            depth + 1,\n            recursiveResult,\n          )\n        }\n      } else if (t.jsonType === 'array' && !!t.of?.length) {\n        for (const arrayItemType of t.of) {\n          // eslint-disable-next-line no-param-reassign\n          recursiveResult = traverse(arrayItemType, `${path}[]`, depth + 1, recursiveResult)\n        }\n      }\n    }\n\n    return recursiveResult\n  }\n\n  // Cross Dataset Reference are not part of the schema, so we should not attempt to reconcile them.\n  if (!isSchemaType(schemaType)) {\n    return {}\n  }\n\n  return traverse(schemaType, '', 0).reduce<Record<string, SearchWeightEntry>>(\n    (acc, {path, weight, type}) => {\n      acc[path] = {weight, type, path}\n      return acc\n    },\n    {},\n  )\n}\n\nconst getUserSetWeight = (schemaType: SchemaType) => {\n  const searchOptions = getTypeChain(schemaType)\n    .map((type) => type.options)\n    .find(isSearchConfiguration)\n\n  return typeof searchOptions?.search?.weight === 'number' ? searchOptions.search.weight : null\n}\n\nconst getHiddenWeight = (schemaType: SchemaType) => {\n  const hidden = getTypeChain(schemaType).some((type) => type.hidden)\n  return hidden ? 0 : null\n}\n\nconst getDefaultWeights = (schemaType: SchemaType) => {\n  // if there is no user set weight or a `0` weight due to be hidden,\n  // then we can return the default weight of `1`\n  const result = getUserSetWeight(schemaType) ?? getHiddenWeight(schemaType)\n  return typeof result === 'number' ? null : 1\n}\n\nconst getPreviewWeights = (\n  schemaType: SchemaType | CrossDatasetType | undefined,\n  maxDepth: number,\n  isCrossDataset?: boolean,\n): Record<string, SearchWeightEntry> | null => {\n  const select = schemaType?.preview?.select\n  if (!select) return null\n\n  const selectionKeysBySelectionPath = Object.fromEntries(\n    Object.entries(select).map(([selectionKey, selectionPath]) => [\n      // replace indexed paths with `[]`\n      // e.g. `arrayOfObjects.0.myField` becomes `arrayOfObjects[].myField`\n      selectionPath.replace(/\\.\\d+/g, '[]'),\n      selectionKey,\n    ]),\n  )\n\n  const defaultWeights = getLeafWeights(schemaType, maxDepth, getDefaultWeights)\n  const nestedWeightsBySelectionPath = Object.fromEntries(\n    Object.entries(defaultWeights)\n      .map(([path, {type}]) => ({path, type}))\n      .filter(({path}) => selectionKeysBySelectionPath[path])\n      .map(({path, type}) => [\n        path,\n        {\n          type,\n          weight:\n            PREVIEW_FIELD_WEIGHT_MAP[\n              selectionKeysBySelectionPath[path] as keyof typeof PREVIEW_FIELD_WEIGHT_MAP\n            ],\n        },\n      ]),\n  )\n\n  if (isCrossDataset) {\n    return Object.fromEntries(\n      Object.entries(selectionKeysBySelectionPath).map(([path, previewFieldName]) => {\n        return [\n          path,\n          {\n            path,\n            type: 'string',\n            weight:\n              PREVIEW_FIELD_WEIGHT_MAP[previewFieldName as keyof typeof PREVIEW_FIELD_WEIGHT_MAP],\n          },\n        ]\n      }),\n    )\n  }\n\n  return getLeafWeights(schemaType, maxDepth, (type, path) => {\n    const nested = nestedWeightsBySelectionPath[getFullyQualifiedPath(type, path)]\n    return nested ? nested.weight : null\n  })\n}\n\nexport interface DeriveSearchWeightsFromTypeOptions {\n  schemaType: SchemaType | CrossDatasetType\n  maxDepth: number\n  isCrossDataset?: boolean\n  processPaths?: (paths: SearchPath[]) => SearchPath[]\n}\n\nexport function deriveSearchWeightsFromType({\n  schemaType,\n  maxDepth,\n  isCrossDataset,\n  processPaths = (paths) => paths,\n}: DeriveSearchWeightsFromTypeOptions): SearchSpec {\n  const cached = CACHE.get(schemaType)\n  if (cached) return cached\n\n  const userSetWeights = getLeafWeights(schemaType, maxDepth, getUserSetWeight)\n  const hiddenWeights = getLeafWeights(schemaType, maxDepth, getHiddenWeight)\n  const defaultWeights = getLeafWeights(schemaType, maxDepth, getDefaultWeights)\n  const previewWeights = getPreviewWeights(schemaType, maxDepth, isCrossDataset)\n\n  const weights: Record<string, Omit<SearchWeightEntry, 'path'>> = {\n    ...BASE_WEIGHTS,\n    ...defaultWeights,\n    ...hiddenWeights,\n    ...previewWeights,\n    ...userSetWeights,\n  }\n\n  const result = {\n    typeName: isSchemaType(schemaType) ? schemaType.name : schemaType.type,\n    paths: processPaths(\n      Object.entries(weights).map(([path, {type, weight}]) => ({\n        path,\n        weight,\n        ...(type === 'pt' && {mapWith: 'pt::text'}),\n      })),\n    ),\n  }\n\n  CACHE.set(schemaType, result)\n  return result\n}\n","import {\n  type CrossDatasetType,\n  type SchemaType,\n  type SearchConfiguration,\n  type SlugSchemaType,\n} from '@sanity/types'\nimport {toString as pathToString} from '@sanity/util/paths'\n\nimport {isRecord} from '../../util'\nimport {type SearchPath, type SearchSpec} from './types'\n\ninterface SearchWeightEntry {\n  path: string\n  weight: number\n  type?: 'string' | 'pt'\n}\n\nconst CACHE = new WeakMap<SchemaType | CrossDatasetType, SearchSpec>()\n\nconst PREVIEW_FIELD_WEIGHT_MAP = {\n  title: 10,\n  subtitle: 5,\n  description: 1.5,\n}\nconst BASE_WEIGHTS: Record<string, Omit<SearchWeightEntry, 'path'>> = {\n  _id: {weight: 1},\n  _type: {weight: 1},\n}\n\n// Any object type whose fields should not be considered for custom weighting.\n//\n// Search may still match on their fields, but will not traverse their schema to find custom\n// weights.\n//\n// Some types, such as `slug`, may instead determine weights using a specialised implementation.\nconst ignoredBuiltInObjectTypes = [\n  'reference',\n  'crossDatasetReference',\n  'slug',\n  'globalDocumentReference',\n]\n\nconst getTypeChain = (type: SchemaType | undefined): SchemaType[] =>\n  type ? [type, ...getTypeChain(type.type)] : []\n\nconst isPtField = (type: SchemaType | undefined) =>\n  type?.jsonType === 'array' &&\n  type.of.some((arrType) => getTypeChain(arrType).some(({name}) => name === 'block'))\n\nconst isStringField = (schemaType: SchemaType | undefined): boolean =>\n  schemaType ? schemaType?.jsonType === 'string' : false\n\nconst isSlugField = (schemaType: SchemaType | undefined): schemaType is SlugSchemaType => {\n  const typeChain = getTypeChain(schemaType)\n  return typeChain.some(({jsonType, name}) => jsonType === 'object' && name === 'slug')\n}\n\nconst isSearchConfiguration = (options: unknown): options is SearchConfiguration =>\n  isRecord(options) && 'search' in options && isRecord(options.search)\n\nfunction isSchemaType(input: SchemaType | CrossDatasetType | undefined): input is SchemaType {\n  return typeof input !== 'undefined' && 'name' in input\n}\n\nfunction getFullyQualifiedPath(schemaType: SchemaType, path: string): string {\n  // Slug field weights should be applied to the object's `current` field.\n  if (isSlugField(schemaType)) {\n    return [path, 'current'].join('.')\n  }\n\n  return path\n}\n\nfunction getLeafWeights(\n  schemaType: SchemaType | CrossDatasetType | undefined,\n  maxDepth: number,\n  getWeight: (schemaType: SchemaType, path: string) => number | null,\n): Record<string, SearchWeightEntry> {\n  function traverse(\n    type: SchemaType | undefined,\n    path: string,\n    depth: number,\n    accumulator: SearchWeightEntry[] = [], // use accumulator to avoid stack overflow\n  ): SearchWeightEntry[] {\n    if (!type) return accumulator\n    if (depth > maxDepth) return accumulator\n\n    const typeChain = getTypeChain(type)\n\n    if (isStringField(type) || isPtField(type)) {\n      const weight = getWeight(type, path)\n\n      if (typeof weight === 'number') {\n        accumulator.push({path, weight})\n      }\n      return accumulator\n    }\n\n    if (isSlugField(type)) {\n      const weight = getWeight(type, path)\n      if (typeof weight === 'number') {\n        accumulator.push({\n          path: getFullyQualifiedPath(type, path),\n          weight,\n        })\n      }\n      return accumulator\n    }\n\n    let recursiveResult = accumulator\n    for (const t of typeChain) {\n      if (\n        t.jsonType === 'object' &&\n        !!t.fields?.length &&\n        !ignoredBuiltInObjectTypes.includes(t.name)\n      ) {\n        for (const field of t.fields) {\n          recursiveResult = traverse(\n            field.type,\n            pathToString([path, field.name].filter(Boolean)),\n            depth + 1,\n            recursiveResult,\n          )\n        }\n      } else if (t.jsonType === 'array' && !!t.of?.length) {\n        for (const arrayItemType of t.of) {\n          // eslint-disable-next-line no-param-reassign\n          recursiveResult = traverse(arrayItemType, `${path}[]`, depth + 1, recursiveResult)\n        }\n      }\n    }\n    return recursiveResult\n  }\n\n  // Cross Dataset Reference are not part of the schema, so we should not attempt to reconcile them.\n  if (!isSchemaType(schemaType)) {\n    return {}\n  }\n\n  return traverse(schemaType, '', 0).reduce<Record<string, SearchWeightEntry>>(\n    (acc, {path, weight, type}) => {\n      acc[path] = {weight, type, path}\n      return acc\n    },\n    {},\n  )\n}\n\nconst getUserSetWeight = (schemaType: SchemaType) => {\n  const searchOptions = getTypeChain(schemaType)\n    .map((type) => type.options)\n    .find(isSearchConfiguration)\n\n  return typeof searchOptions?.search?.weight === 'number' ? searchOptions.search.weight : null\n}\n\nconst getHiddenWeight = (schemaType: SchemaType) => {\n  const hidden = getTypeChain(schemaType).some((type) => type.hidden)\n  return hidden ? 0 : null\n}\n\nconst getDefaultWeights = (schemaType: SchemaType) => {\n  // if there is no user set weight or a `0` weight due to be hidden,\n  // then we can return the default weight of `1`\n  const result = getUserSetWeight(schemaType) ?? getHiddenWeight(schemaType)\n  return typeof result === 'number' ? null : 1\n}\n\nconst getPreviewWeights = (\n  schemaType: SchemaType | CrossDatasetType | undefined,\n  maxDepth: number,\n  isCrossDataset?: boolean,\n): Record<string, SearchWeightEntry> | null => {\n  const select = schemaType?.preview?.select\n  if (!select) return null\n\n  const selectionKeysBySelectionPath = Object.fromEntries(\n    Object.entries(select).map(([selectionKey, selectionPath]) => [\n      // replace indexed paths with `[]`\n      // e.g. `arrayOfObjects.0.myField` becomes `arrayOfObjects[].myField`\n      selectionPath.replace(/\\.\\d+/g, '[]'),\n      selectionKey,\n    ]),\n  )\n\n  const defaultWeights = getLeafWeights(schemaType, maxDepth, getDefaultWeights)\n  const nestedWeightsBySelectionPath = Object.fromEntries(\n    Object.entries(defaultWeights)\n      .map(([path, {type}]) => ({path, type}))\n      .filter(({path}) => selectionKeysBySelectionPath[path])\n      .map(({path, type}) => [\n        path,\n        {\n          type,\n          weight:\n            PREVIEW_FIELD_WEIGHT_MAP[\n              selectionKeysBySelectionPath[path] as keyof typeof PREVIEW_FIELD_WEIGHT_MAP\n            ],\n        },\n      ]),\n  )\n\n  if (isCrossDataset) {\n    return Object.fromEntries(\n      Object.entries(selectionKeysBySelectionPath).map(([path, previewFieldName]) => {\n        return [\n          path,\n          {\n            path,\n            type: 'string',\n            weight:\n              PREVIEW_FIELD_WEIGHT_MAP[previewFieldName as keyof typeof PREVIEW_FIELD_WEIGHT_MAP],\n          },\n        ]\n      }),\n    )\n  }\n\n  return getLeafWeights(schemaType, maxDepth, (type, path) => {\n    const nested = nestedWeightsBySelectionPath[getFullyQualifiedPath(type, path)]\n    return nested ? nested.weight : null\n  })\n}\n\ninterface DeriveSearchWeightsFromTypeOptions {\n  schemaType: SchemaType | CrossDatasetType\n  maxDepth: number\n  isCrossDataset?: boolean\n  processPaths?: (paths: SearchPath[]) => SearchPath[]\n}\n\nexport function deriveSearchWeightsFromType2024({\n  schemaType,\n  maxDepth,\n  isCrossDataset,\n  processPaths = (paths) => paths,\n}: DeriveSearchWeightsFromTypeOptions): SearchSpec {\n  const cached = CACHE.get(schemaType)\n  if (cached) return cached\n\n  const userSetWeights = getLeafWeights(schemaType, maxDepth, getUserSetWeight)\n  const hiddenWeights = getLeafWeights(schemaType, maxDepth, getHiddenWeight)\n  const defaultWeights = getLeafWeights(schemaType, maxDepth, getDefaultWeights)\n  const previewWeights = getPreviewWeights(schemaType, maxDepth, isCrossDataset)\n\n  const weights: Record<string, Omit<SearchWeightEntry, 'path'>> = {\n    ...BASE_WEIGHTS,\n    ...defaultWeights,\n    ...hiddenWeights,\n    ...previewWeights,\n    ...userSetWeights,\n  }\n\n  const result = {\n    typeName: isSchemaType(schemaType) ? schemaType.name : schemaType.type,\n    paths: processPaths(\n      Object.entries(weights).map(([path, {weight}]) => ({\n        path,\n        weight,\n      })),\n    ),\n  }\n\n  CACHE.set(schemaType, result)\n  return result\n}\n","import {type ObjectSchemaType, type Schema, type SchemaType} from '@sanity/types'\n\nimport {isNonNullable} from '../../util/isNonNullable'\n\nconst isDocumentType = (type: SchemaType): type is ObjectSchemaType =>\n  Boolean(type.type && type.type.name === 'document')\n\nconst isObjectType = (type: SchemaType): type is ObjectSchemaType => type.jsonType === 'object'\n\nconst isIgnoredType = (type: SchemaType): boolean =>\n  type.name.startsWith('sanity.') && type.name !== 'sanity.previewUrlSecret'\n\n/**\n * Get all defined document types from the schema that are searchable\n *\n * @param schema - The schema to get searchable types from\n * @param explicitlyAllowedTypes - Array of type names to explicitly allow, even if they are otherwise ignored. This is useful for cases where you want to allow say `sanity.imageAsset` explicitly, or an object type that was _previously_ defined as a document type, and thus still have documents.\n *\n * @internal\n */\nexport const getSearchableTypes = (\n  schema: Schema,\n  explicitlyAllowedTypes: string[] = [],\n): ObjectSchemaType[] =>\n  schema\n    .getTypeNames()\n    .map((typeName) => schema.get(typeName))\n    .filter(isNonNullable)\n    .filter(\n      (type) =>\n        (isDocumentType(type) && !isIgnoredType(type)) ||\n        explicitlyAllowedTypes.includes(type.name),\n    )\n    .filter(isObjectType)\n","import {isString} from '../../util/isString'\n\n/**\n * Check if a perspective is 'raw'\n *\n * @param perspective - the list with perspective ids or a simple perspective id\n * @returns true if the perspective is 'raw'\n *\n * @internal\n */\nexport function isPerspectiveRaw(perspective: string[] | string | undefined): boolean {\n  if (!perspective) return false\n\n  if (isString(perspective)) {\n    return perspective === 'raw'\n  }\n\n  return perspective.some((p) => p === 'raw')\n}\n","const WILDCARD_TOKEN = '*'\nconst NEGATION_TOKEN = '-'\nconst TOKEN_REGEX = /(?:[^\\s\"]+|\"[^\"]*\")+/g\n\n/**\n * @internal\n */\nexport function isNegationToken(token: string | undefined): boolean {\n  return typeof token !== 'undefined' && token.trim().at(0) === NEGATION_TOKEN\n}\n\n/**\n * @internal\n */\nexport function isPrefixToken(token: string | undefined): boolean {\n  return typeof token !== 'undefined' && token.trim().at(-1) === WILDCARD_TOKEN\n}\n\n/**\n * @internal\n */\nexport function isExactMatchToken(token: string | undefined): boolean {\n  return [token?.at(0), token?.at(-1)].every((character) => character === '\"')\n}\n\n/**\n * @internal\n */\nexport function prefixLast(query: string): string {\n  const tokens = (query.match(TOKEN_REGEX) ?? []).map((token) => token.trim())\n\n  const finalIncrementalTokenIndex = tokens.findLastIndex(\n    (token) => !isNegationToken(token) && !isExactMatchToken(token),\n  )\n\n  const finalIncrementalToken = tokens[finalIncrementalTokenIndex]\n\n  if (tokens.length === 0) {\n    return WILDCARD_TOKEN\n  }\n\n  if (isPrefixToken(finalIncrementalToken) || typeof finalIncrementalToken === 'undefined') {\n    return tokens.join(' ')\n  }\n\n  const prefixedTokens = [...tokens]\n  prefixedTokens.splice(finalIncrementalTokenIndex, 1, `${finalIncrementalToken}${WILDCARD_TOKEN}`)\n  return prefixedTokens.join(' ')\n}\n","import {type ClientPerspective} from '@sanity/client'\nimport {DEFAULT_MAX_FIELD_DEPTH} from '@sanity/schema/_internal'\nimport {\n  type CrossDatasetType,\n  type GlobalDocumentReferenceType,\n  type SchemaType,\n} from '@sanity/types'\nimport {groupBy} from 'lodash'\n\nimport {deriveSearchWeightsFromType2024} from '../common/deriveSearchWeightsFromType2024'\nimport {isPerspectiveRaw} from '../common/isPerspectiveRaw'\nimport {prefixLast} from '../common/token'\nimport {\n  type SearchFactoryOptions,\n  type SearchOptions,\n  type SearchSort,\n  type SearchTerms,\n} from '../common/types'\n\ninterface SearchParams extends Record<string, unknown> {\n  __types: string[]\n  __limit: number\n  __query: string\n}\n\nconst FINDABILITY_MVI = 5\nconst DEFAULT_LIMIT = 1_000\n\ninterface SearchQuery {\n  query: string\n  params: SearchParams\n  options: Record<string, unknown>\n  sortOrder: SearchSort[]\n}\n\nfunction isSchemaType(\n  maybeSchemaType: SchemaType | CrossDatasetType | undefined,\n): maybeSchemaType is SchemaType {\n  return typeof maybeSchemaType !== 'undefined' && 'name' in maybeSchemaType\n}\n\nfunction toOrderClause(orderBy: SearchSort[]): string {\n  function wrapFieldWithFn(ordering: SearchSort): string {\n    return ordering.mapWith ? `${ordering.mapWith}(${ordering.field})` : ordering.field\n  }\n\n  return (orderBy || [])\n    .map((ordering) =>\n      [wrapFieldWithFn(ordering), (ordering.direction || '').toLowerCase()]\n        .map((str) => str.trim())\n        .filter(Boolean)\n        .join(' '),\n    )\n    .join(',')\n}\n\n/**\n * @internal\n */\nexport function createSearchQuery(\n  searchTerms: SearchTerms<SchemaType | CrossDatasetType | GlobalDocumentReferenceType>,\n  searchParams: string | SearchTerms<SchemaType>,\n  {includeDrafts = true, perspective, ...options}: SearchOptions & SearchFactoryOptions = {},\n): SearchQuery {\n  const specs = searchTerms.types\n    .map((schemaType) =>\n      deriveSearchWeightsFromType2024({\n        schemaType,\n        maxDepth: options.maxDepth || DEFAULT_MAX_FIELD_DEPTH,\n        isCrossDataset: options.isCrossDataset,\n        processPaths: (paths) => paths.filter(({weight}) => weight !== 1),\n      }),\n    )\n    .filter(({paths}) => paths.length !== 0)\n\n  // Note: Computing this is unnecessary when `!isScored`.\n  const flattenedSpecs = specs\n    .map(({typeName, paths}) => paths.map((path) => ({...path, typeName})))\n    .flat()\n\n  // Note: Computing this is unnecessary when `!isScored`.\n  const groupedSpecs = groupBy(flattenedSpecs, (entry) => [entry.path, entry.weight].join(':'))\n\n  const baseMatch = '[@, _id] match text::query($__query)'\n\n  // Note: Computing this is unnecessary when `!isScored`.\n  const score = Object.entries(groupedSpecs)\n    .flatMap(([, entries]) => {\n      if (entries.some(({weight}) => weight === 0)) {\n        return []\n      }\n      return `boost(_type in ${JSON.stringify(entries.map((entry) => entry.typeName))} && ${entries[0].path} match text::query($__query), ${entries[0].weight})`\n    })\n    .concat(baseMatch)\n\n  const sortOrder = options?.sort ?? [{field: '_score', direction: 'desc'}]\n  const isScored = sortOrder.some(({field}) => field === '_score')\n\n  let activePerspective: ClientPerspective | undefined = perspective\n\n  // No perspective, or empty perspective array, provided.\n  if (\n    typeof perspective === 'undefined' ||\n    (Array.isArray(perspective) && perspective.length === 0)\n  ) {\n    activePerspective = 'raw'\n  }\n\n  const isRaw = isPerspectiveRaw(activePerspective)\n\n  const filters: string[] = [\n    '_type in $__types',\n    // If the search request doesn't use scoring, directly filter documents.\n    isScored ? [] : baseMatch,\n    options.filter ? `(${options.filter})` : [],\n    searchTerms.filter ? `(${searchTerms.filter})` : [],\n    isRaw ? [] : '!(_id in path(\"versions.**\"))',\n    includeDrafts === false ? `!(_id in path('drafts.**'))` : [],\n    options.cursor ?? [],\n  ].flat()\n\n  const projectionFields = sortOrder.map(({field}) => field).concat('_type', '_id', '_originalId')\n  const projection = projectionFields.join(', ')\n\n  const query = [\n    `*[${filters.join(' && ')}]`,\n    isScored ? ['|', `score(${score.join(', ')})`] : [],\n    ['|', `order(${toOrderClause(sortOrder)})`],\n    isScored ? `[_score > 0]` : [],\n    `[0...$__limit]`,\n    `{${projection}}`,\n  ]\n    .flat()\n    .join(' ')\n\n  const params: SearchParams = {\n    __types: searchTerms.types.map((type) => (isSchemaType(type) ? type.name : type.type)),\n    // Overfetch by 1 to determine whether there is another page to fetch.\n    __limit: (options?.limit ?? DEFAULT_LIMIT) + 1,\n    __query: prefixLast(typeof searchParams === 'string' ? searchParams : searchParams.query),\n    ...options.params,\n  }\n\n  const pragma = [`findability-mvi:${FINDABILITY_MVI}`]\n    .concat(options?.comments || [])\n    .map((s) => `// ${s}`)\n    .join('\\n')\n\n  return {\n    query: [pragma, query].join('\\n'),\n    options: {\n      tag: options.tag,\n      perspective: activePerspective,\n    },\n    params,\n    sortOrder,\n  }\n}\n","import {type SanityDocumentLike} from '@sanity/types'\n\nimport {type SearchSort, type SortDirection} from '../common/types'\n\n/**\n * @internal\n */\nexport function getNextCursor({\n  lastResult,\n  sortOrder,\n}: {\n  lastResult?: SanityDocumentLike\n  sortOrder: SearchSort[]\n}): string | undefined {\n  if (!lastResult) {\n    return undefined\n  }\n\n  const hasIdSort = sortOrder.some(({field}) => field === '_id')\n\n  return (\n    sortOrder\n      // Content Lake always orders by `_id asc` as a tiebreaker.\n      .concat(hasIdSort ? [] : {field: '_id', direction: 'asc'})\n      .reduce<string | undefined>((cursor, sortEntry, index) => {\n        const nextPredicate = sortOrder\n          .slice(0, index)\n          .map((previousSortEntry) => getCursorPredicate(previousSortEntry, lastResult, '=='))\n          .concat(getCursorPredicate(sortEntry, lastResult))\n          .filter((predicate) => typeof predicate !== 'undefined')\n          .join(' && ')\n\n        return [cursor, `(${nextPredicate})`]\n          .filter((segment) => typeof segment !== 'undefined')\n          .join(' || ')\n      }, undefined)\n  )\n}\n\nconst sortComparators: Record<SortDirection, '>' | '<'> = {\n  asc: '>',\n  desc: '<',\n}\n\n/**\n * @internal\n */\nexport function getCursorPredicate(\n  sort: SearchSort,\n  lastEntry: SanityDocumentLike,\n  comparator: '>' | '<' | '==' = sortComparators[sort.direction],\n): string | undefined {\n  if (sort.field == '_id' && comparator == '==') {\n    return undefined\n  }\n  return [sort.field, comparator, JSON.stringify(lastEntry[sort.field])].join(' ')\n}\n","import {type CrossDatasetType, type SanityDocumentLike, type SchemaType} from '@sanity/types'\nimport {map} from 'rxjs'\n\nimport {\n  type Groq2024SearchResults,\n  type SearchStrategyFactory,\n  type SearchTerms,\n} from '../common/types'\nimport {createSearchQuery} from './createSearchQuery'\nimport {getNextCursor} from './getNextCursor'\n\nfunction getSearchTerms(\n  searchParams: string | SearchTerms,\n  types: (SchemaType | CrossDatasetType)[],\n) {\n  if (typeof searchParams === 'string') {\n    return {\n      query: searchParams,\n      types: types,\n    }\n  }\n  return searchParams.types.length ? searchParams : {...searchParams, types}\n}\n\n/**\n * Note: When using the `raw` persepctive, `groq2024` may emit uncollated documents, manifesting as\n * duplicate search results. Consumers must collate the results.\n *\n * @internal\n */\nexport const createGroq2024Search: SearchStrategyFactory<Groq2024SearchResults> = (\n  typesFromFactory,\n  client,\n  factoryOptions,\n) => {\n  return function search(searchParams, searchOptions = {}) {\n    const searchTerms = getSearchTerms(searchParams, typesFromFactory)\n\n    const mergedOptions = {\n      ...factoryOptions,\n      ...searchOptions,\n    }\n\n    const {query, params, options, sortOrder} = createSearchQuery(\n      searchTerms,\n      searchParams,\n      mergedOptions,\n    )\n\n    return client.observable\n      .withConfig({\n        // The GROQ functions that power `groq2024` are currently only available using API `vX`.\n        // TODO: Switch to stable API version before `groq2024` general availability.\n        // TODO: When moving to stable API version, consider that the version should work with releases.\n        apiVersion: 'vX',\n      })\n      .fetch<SanityDocumentLike[]>(query, params, options)\n      .pipe(\n        map((hits) => {\n          const hasNextPage =\n            typeof searchOptions.limit !== 'undefined' && hits.length > searchOptions.limit\n\n          // Search overfetches by 1 to determine whether there is another page to fetch. Therefore,\n          // the penultimate result must be used to determine the start of the next page.\n          const lastResult = hasNextPage ? hits.at(-2) : hits.at(-1)\n\n          return {\n            type: 'groq2024',\n            // Search overfetches by 1 to determine whether there is another page to fetch. Therefore,\n            // exclude the final result if it's beyond the limit.\n            hits: hits.map((hit) => ({hit})).slice(0, searchOptions.limit),\n            nextCursor: hasNextPage ? getNextCursor({lastResult, sortOrder}) : undefined,\n          }\n        }),\n      )\n  }\n}\n","import {type SanityDocumentLike} from '@sanity/types'\nimport {compact, intersection, keyBy, partition, toLower, union, uniq, words} from 'lodash'\n\nimport {type SearchSpec, type WeightedHit} from '../common'\n\ntype SearchScore = [number, string]\n\n/**\n * Takes a set of terms and a value and returns a [score, story] pair where score is a value between 0, 1 and story is the explanation.\n *\n * @internal\n */\nexport const calculateScore = (searchTerms: string[], value: string): SearchScore => {\n  // Separate search terms by phrases (wrapped with quotes) and words.\n  const {phrases: uniqueSearchPhrases, words: uniqueSearchWords} =\n    partitionAndSanitizeSearchTerms(searchTerms)\n\n  // Calculate an aggregated score of both phrase and word matches.\n  const [phraseScore, phraseWhy] = calculatePhraseScore(uniqueSearchPhrases, value)\n  const [wordScore, wordWhy] = calculateWordScore(uniqueSearchWords, value)\n  return [phraseScore + wordScore, [wordWhy, phraseWhy].join(', ')]\n}\n\nconst stringify = (value: unknown): string =>\n  typeof value === 'string' ? value : JSON.stringify(value)\n\n/**\n * @internal\n */\nexport function applyWeights(\n  searchSpec: SearchSpec[],\n  hits: SanityDocumentLike[],\n  terms: string[] = [],\n): WeightedHit[] {\n  const specByType = keyBy(searchSpec, (spec) => spec.typeName)\n  return hits.map((hit, index) => {\n    const typeSpec = specByType[hit._type]\n    const stories = (typeSpec.paths || [])?.map((pathSpec, idx) => {\n      const value = stringify(hit[`w${idx}`])\n      if (!value) {\n        return {path: pathSpec.path, score: 0, why: 'No match'}\n      }\n      const [score, why] = calculateScore(terms, value)\n      return {\n        path: pathSpec.path,\n        score: score * pathSpec.weight,\n        why: `${why} (*${pathSpec.weight})`,\n      }\n    })\n\n    const totalScore = stories.reduce((acc, rank) => acc + rank.score, 0)\n\n    return {hit, resultIndex: hits.length - index, score: totalScore, stories: stories}\n  })\n}\n/**\n * For phrases: score on the total number of matching characters.\n * E.g. given the phrases [\"the fox\", \"of london\"] for the target value \"the wily fox of london\"\n *\n * - \"the fox\" isn't included in the target value (score: 0)\n * - \"of london\" is included in the target value, and 9 out of 22 characters match (score: 9/22 = ~0.408)\n * - non-exact matches have their score divided in half (final score: ~0.204)\n *\n * @internal\n */\nexport function calculatePhraseScore(uniqueSearchPhrases: string[], value: string): SearchScore {\n  const sanitizedValue = value.toLowerCase().trim()\n\n  let fieldScore = 0\n  let matchCount = 0\n  uniqueSearchPhrases.forEach((term) => {\n    if (sanitizedValue.includes(term)) {\n      fieldScore += term.length / sanitizedValue.length\n      matchCount += term.length\n    }\n  })\n\n  return fieldScore === 1\n    ? [1, '[Phrase] Exact match']\n    : [fieldScore / 2, `[Phrase] Matched ${matchCount} of ${sanitizedValue.length} characters`]\n}\n\n/**\n * For words: score on the total number of matching words.\n * E.g. given the words [\"the\", \"fox\", \"of\", \"london\"] for the target value \"the wily fox of london\"\n *\n * - 4 out of 5 words match (score: 4/5 = 0.8)\n * - non-exact matches have their score divided in half (final score: 0.4)\n *\n * @internal\n */\nexport function calculateWordScore(uniqueSearchTerms: string[], value: string): SearchScore {\n  const uniqueValueTerms = uniq(compact(words(toLower(value))))\n\n  const matches = intersection(uniqueSearchTerms, uniqueValueTerms)\n  const all = union(uniqueValueTerms, uniqueSearchTerms)\n  const fieldScore = matches.length / all.length\n  return fieldScore === 1\n    ? [1, '[Word] Exact match']\n    : [\n        fieldScore / 2,\n        `[Word] Matched ${matches.length} of ${all.length} terms: [${matches.join(', ')}]`,\n      ]\n}\n\n/**\n * @internal\n */\nexport function partitionAndSanitizeSearchTerms(searchTerms: string[]): {\n  phrases: string[]\n  words: string[]\n} {\n  const uniqueSearchTerms = uniq(searchTerms.map(toLower))\n\n  const [searchPhrases, searchWords] = partition(uniqueSearchTerms, (term) => /^\".*\"$/.test(term))\n  return {\n    phrases: uniq(searchPhrases).map(toLower).map(stripWrappingQuotes), //\n    words: uniq(searchWords.map(toLower)),\n  }\n}\n\nfunction stripWrappingQuotes(str: string) {\n  return str.replace(/^\"(.*)\"$/, '$1')\n}\n","// Findability version, prepended to every search query for future measurement\nexport const FINDABILITY_MVI = 4\n","import {DEFAULT_MAX_FIELD_DEPTH} from '@sanity/schema/_internal'\nimport {type CrossDatasetType, type SchemaType} from '@sanity/types'\nimport {compact, flatten, flow, toLower, trim, union, uniq, words} from 'lodash'\n\nimport {\n  deriveSearchWeightsFromType,\n  isPerspectiveRaw,\n  type SearchFactoryOptions,\n  type SearchOptions,\n  type SearchPath,\n  type SearchSort,\n  type SearchSpec,\n  type SearchTerms,\n} from '../common'\nimport {FINDABILITY_MVI} from '../constants'\n\nexport interface SearchParams {\n  __types: string[]\n  __limit: number\n  [key: string]: unknown\n}\n\nexport interface SearchQuery {\n  query: string\n  params: SearchParams\n  options: Record<string, unknown>\n  searchSpec: SearchSpec[]\n  terms: string[]\n}\n\nexport const DEFAULT_LIMIT = 1000\n\nconst combinePaths: (paths: string[][]) => string[] = flow([flatten, union, compact])\n\nconst pathWithMapper = ({mapWith, path}: SearchPath): string =>\n  mapWith ? `${mapWith}(${path})` : path\n\n/**\n * Create GROQ constraints, given search terms and the full spec of available document types and fields.\n * Essentially a large list of all possible fields (joined by logical OR) to match our search terms against.\n */\nfunction createConstraints(terms: string[], specs: SearchSpec[]) {\n  const combinedSearchPaths = combinePaths(\n    specs.map((configForType) => (configForType.paths || []).map((opt) => pathWithMapper(opt))),\n  )\n\n  const constraints = terms\n    .map((_term, i) => combinedSearchPaths.map((joinedPath) => `${joinedPath} match $t${i}`))\n    .filter((constraint) => constraint.length > 0)\n\n  return constraints.map((constraint) => `(${constraint.join(' || ')})`)\n}\n\nconst SPECIAL_CHARS = /([^!@#$%^&*(),\\\\/?\";:{}|[\\]+<>\\s-])+/g\nconst STRIP_EDGE_CHARS = /(^[.]+)|([.]+$)/\n\nexport function tokenize(string: string): string[] {\n  return (string.match(SPECIAL_CHARS) || []).map((token) => token.replace(STRIP_EDGE_CHARS, ''))\n}\n\n/**\n * Convert a string into an array of tokenized terms.\n *\n * Any (multi word) text wrapped in double quotes will be treated as \"phrases\", or separate tokens that\n * will not have its special characters removed.\n * E.g.`\"the\" \"fantastic mr\" fox fox book` =\\> [\"the\", `\"fantastic mr\"`, \"fox\", \"book\"]\n *\n * Phrases wrapped in quotes are assigned relevance scoring differently from regular words.\n *\n * @internal\n */\nexport function extractTermsFromQuery(query: string): string[] {\n  const quotedQueries = [] as string[]\n  const unquotedQuery = query.replace(/(\"[^\"]*\")/g, (match) => {\n    if (words(match).length > 1) {\n      quotedQueries.push(match)\n      return ''\n    }\n    return match\n  })\n\n  // Lowercase and trim quoted queries\n  const quotedTerms = quotedQueries.map((str) => trim(toLower(str)))\n\n  /**\n   * Convert (remaining) search query into an array of deduped, sanitized tokens.\n   * All white space and special characters are removed.\n   * e.g. \"The saint of Saint-Germain-des-Prés\" =\\> ['the', 'saint', 'of', 'germain', 'des', 'pres']\n   */\n  const remainingTerms = uniq(compact(tokenize(toLower(unquotedQuery))))\n\n  return [...quotedTerms, ...remainingTerms]\n}\n\nfunction toOrderClause(orderBy: SearchSort[]): string {\n  function wrapFieldWithFn(ordering: SearchSort): string {\n    return ordering.mapWith ? `${ordering.mapWith}(${ordering.field})` : ordering.field\n  }\n\n  return (orderBy || [])\n    .map((ordering) =>\n      [wrapFieldWithFn(ordering), (ordering.direction || '').toLowerCase()]\n        .map((str) => str.trim())\n        .filter(Boolean)\n        .join(' '),\n    )\n    .join(',')\n}\n\n/**\n * @internal\n */\nexport function createSearchQuery(\n  searchTerms: SearchTerms<SchemaType | CrossDatasetType>,\n  searchOpts: SearchOptions & SearchFactoryOptions = {},\n): SearchQuery {\n  const {filter, params, tag} = searchOpts\n\n  const specs = searchTerms.types\n    .map((schemaType) =>\n      deriveSearchWeightsFromType({\n        schemaType,\n        maxDepth: searchOpts.maxDepth || DEFAULT_MAX_FIELD_DEPTH,\n        isCrossDataset: searchOpts.isCrossDataset,\n      }),\n    )\n    .filter(({paths}) => paths.length)\n\n  // Extract search terms from string query, factoring in phrases wrapped in quotes\n  const terms = extractTermsFromQuery(searchTerms.query)\n  const {perspective} = searchOpts\n  const isRaw = isPerspectiveRaw(perspective)\n\n  // Construct search filters used in this GROQ query\n  const filters = [\n    '_type in $__types',\n    searchOpts.includeDrafts === false && `!(_id in path('drafts.**'))`,\n    ...createConstraints(terms, specs),\n    filter ? `(${filter})` : '',\n    searchTerms.filter ? `(${searchTerms.filter})` : '',\n    // Versions are collated server-side using the `perspective` option. Therefore, they must\n    // not be fetched individually. This should only be added if the search needs to be narrow to the perspective\n    isRaw ? '' : '!(_id in path(\"versions.**\"))',\n  ].filter(Boolean)\n\n  const selections = specs.map((spec) => {\n    const constraint = `_type == \"${spec.typeName}\" => `\n    const selection = `{ ${spec.paths.map((cfg, i) => `\"w${i}\": ${pathWithMapper(cfg)}`)} }`\n    return `${constraint}${selection}`\n  })\n\n  // Default to `_id asc` (GROQ default) if no search sort is provided\n  const sortOrder = toOrderClause(searchOpts?.sort || [{field: '_id', direction: 'asc'}])\n\n  const projectionFields = ['_type', '_id', '_originalId']\n  const selection = selections.length > 0 ? `...select(${selections.join(',\\n')})` : ''\n  const finalProjection = projectionFields.join(', ') + (selection ? `, ${selection}` : '')\n\n  let query =\n    `*[${filters.join(' && ')}]` +\n    `| order(${sortOrder})` +\n    `[0...$__limit]` +\n    `{${finalProjection}}`\n\n  // Optionally prepend our query with an 'extended' projection.\n  // Required if we want to sort on nested object or reference fields.\n  // In future, creating the extended projection should be handled internally by `createSearchQuery`.\n  if (searchOpts?.__unstable_extendedProjection) {\n    const extendedProjection = searchOpts?.__unstable_extendedProjection\n    const firstProjection = projectionFields.concat(extendedProjection).join(', ')\n\n    query = [\n      `*[${filters.join(' && ')}]{${firstProjection}}`,\n      `order(${sortOrder})[0...$__limit]{${finalProjection}}`,\n    ].join('|')\n  }\n\n  // Prepend GROQ comments\n  const groqComments = [`findability-mvi:${FINDABILITY_MVI}`]\n    .concat(searchOpts?.comments || [])\n    .map((s) => `// ${s}`)\n    .join('\\n')\n  const updatedQuery = groqComments ? `${groqComments}\\n${query}` : query\n\n  const limit = searchOpts?.limit ?? DEFAULT_LIMIT\n\n  return {\n    query: updatedQuery,\n    params: {\n      ...toGroqParams(terms),\n      __types: specs.map((spec) => spec.typeName),\n      __limit: limit,\n      ...(params || {}),\n    },\n    options: {\n      tag,\n      perspective: isRaw || !searchOpts.perspective?.length ? 'raw' : searchOpts.perspective,\n    },\n    searchSpec: specs,\n    terms,\n  }\n}\n\nconst toGroqParams = (terms: string[]): Record<string, string> => {\n  const params: Record<string, string> = {}\n  return terms.reduce((acc, term, i) => {\n    acc[`t${i}`] = `${term}*` // \"t\" is short for term\n    return acc\n  }, params)\n}\n","import {type CrossDatasetType, type SanityDocumentLike, type SchemaType} from '@sanity/types'\nimport {sortBy} from 'lodash'\nimport {map, tap} from 'rxjs/operators'\n\nimport {\n  isReleasePerspective,\n  RELEASES_STUDIO_CLIENT_OPTIONS,\n} from '../../releases/util/releasesClient'\nimport {versionedClient} from '../../studioClient'\nimport {removeDupes} from '../../util/draftUtils'\nimport {type SearchStrategyFactory, type SearchTerms, type WeightedSearchResults} from '../common'\nimport {applyWeights} from './applyWeights'\nimport {createSearchQuery} from './createSearchQuery'\n\nfunction getSearchTerms(\n  searchParams: string | SearchTerms,\n  types: (SchemaType | CrossDatasetType)[],\n) {\n  if (typeof searchParams === 'string') {\n    return {\n      query: searchParams,\n      types: types,\n    }\n  }\n  return searchParams.types.length ? searchParams : {...searchParams, types}\n}\n\n/**\n * @internal\n */\nexport const createWeightedSearch: SearchStrategyFactory<WeightedSearchResults> = (\n  types,\n  client,\n  factoryOptions,\n) => {\n  // Search currently supports both strings (reference + cross dataset reference inputs)\n  // or a SearchTerms object (omnisearch).\n  return function search(searchParams, searchOptions = {}) {\n    const searchTerms = getSearchTerms(searchParams, types)\n\n    const {query, params, options, searchSpec, terms} = createSearchQuery(searchTerms, {\n      ...factoryOptions,\n      ...searchOptions,\n    })\n\n    const apiVersion = isReleasePerspective(options?.perspective as string | string[] | undefined)\n      ? RELEASES_STUDIO_CLIENT_OPTIONS.apiVersion\n      : undefined\n\n    return versionedClient(client, apiVersion)\n      .observable.fetch<SanityDocumentLike[]>(query, params, options)\n      .pipe(\n        factoryOptions.unique ? map(removeDupes) : tap(),\n        // Assign weighting and scores based on current search terms.\n        // No scores will be assigned when terms are empty.\n        map((hits) => applyWeights(searchSpec, hits, terms)),\n        // Optionally skip client-side score sorting.\n        // This can be relevant when ordering results by specific fields, especially dates.\n        searchOptions?.skipSortByScore ? tap() : map((hits) => sortBy(hits, (hit) => -hit.score)),\n        map((hits) => ({type: 'weighted', hits})),\n      )\n  }\n}\n","import {type SearchStrategy} from '@sanity/types'\n\nimport {isReleasePerspective, RELEASES_STUDIO_CLIENT_OPTIONS} from '../releases/util/releasesClient'\nimport {versionedClient} from '../studioClient'\nimport {\n  type Groq2024SearchResults,\n  type SearchStrategyFactory,\n  type WeightedSearchResults,\n} from './common'\nimport {createGroq2024Search} from './groq2024'\nimport {createWeightedSearch} from './weighted'\n\nconst searchStrategies = {\n  groqLegacy: createWeightedSearch,\n  groq2024: createGroq2024Search,\n} satisfies Record<\n  SearchStrategy,\n  SearchStrategyFactory<WeightedSearchResults | Groq2024SearchResults>\n>\n\nconst DEFAULT_SEARCH_STRATEGY: SearchStrategy = 'groqLegacy'\n\n/** @internal */\nexport const createSearch: SearchStrategyFactory<WeightedSearchResults | Groq2024SearchResults> = (\n  searchableTypes,\n  client,\n  options,\n) => {\n  const factory = searchStrategies[options.strategy ?? DEFAULT_SEARCH_STRATEGY]\n\n  return factory(\n    searchableTypes,\n    isReleasePerspective(options?.perspective)\n      ? versionedClient(client, RELEASES_STUDIO_CLIENT_OPTIONS.apiVersion)\n      : client,\n    options,\n  )\n}\n","import {type ObjectSchemaType, type Schema, type SchemaType} from '@sanity/types'\n\nimport {getSearchableTypes} from '../../../../../search'\n\n/**\n * Returns a list of all available document types filtered by a search string.\n * Types containing the search string in its `title` or `name` will be returned.\n */\nexport function getSelectableOmnisearchTypes(schema: Schema, typeFilter: string): SchemaType[] {\n  return getSearchableOmnisearchTypes(schema)\n    .filter((type) => inTypeFilter(type, typeFilter))\n    .sort(sortTypes)\n}\n\n/**\n * Return all searchable document types that are visible to omnisearch.\n * Documents with `__experimental_omnisearch_visibility: false` will be hidden.\n */\nexport function getSearchableOmnisearchTypes(schema: Schema): ObjectSchemaType[] {\n  return getSearchableTypes(schema).filter(\n    (type) => !(type.__experimental_omnisearch_visibility === false),\n  )\n}\n\nexport function sortTypes(a: SchemaType, b: SchemaType): number {\n  return (a.title ?? a.name).localeCompare(b.title ?? b.name)\n}\n\nfunction inTypeFilter(type: SchemaType, typeFilter: string): boolean {\n  return !typeFilter || (type.title ?? type.name).toLowerCase().includes(typeFilter?.toLowerCase())\n}\n","import {CheckmarkIcon} from '@sanity/icons'\nimport {type SchemaType} from '@sanity/types'\nimport {Box, type ResponsiveMarginProps, type ResponsivePaddingProps} from '@sanity/ui'\nimport {memo, useCallback} from 'react'\n\nimport {Button} from '../../../../../../../../../ui-components'\nimport {useSearchState} from '../../../../contexts/search/useSearchState'\n\ninterface DocumentTypeFilterItemProps extends ResponsiveMarginProps, ResponsivePaddingProps {\n  selected: boolean\n  type: SchemaType\n}\n\nexport const DocumentTypeFilterItem = memo(function TypeFilterItem({\n  selected,\n  type,\n  ...rest\n}: DocumentTypeFilterItemProps) {\n  const {dispatch} = useSearchState()\n\n  const handleTypeAdd = useCallback(() => {\n    dispatch({type: 'TERMS_TYPE_ADD', schemaType: type})\n  }, [dispatch, type])\n\n  const handleTypeRemove = useCallback(() => {\n    dispatch({type: 'TERMS_TYPE_REMOVE', schemaType: type})\n  }, [dispatch, type])\n\n  const handleClick = useCallback(() => {\n    if (selected) {\n      handleTypeRemove()\n    } else {\n      handleTypeAdd()\n    }\n  }, [handleTypeAdd, handleTypeRemove, selected])\n\n  return (\n    <Box {...rest}>\n      <Button\n        iconRight={selected && CheckmarkIcon}\n        justify=\"flex-start\"\n        key={type.title ?? type.name}\n        mode=\"bleed\"\n        onClick={handleClick}\n        width=\"fill\"\n        size=\"large\"\n        tabIndex={-1}\n        text={type.title ?? type.name}\n        tone={selected ? 'primary' : 'default'}\n      />\n    </Box>\n  )\n})\n","import {type Schema, type SchemaType} from '@sanity/types'\nimport {Box, Flex, MenuDivider, Stack, Text} from '@sanity/ui'\nimport {partition} from 'lodash'\nimport {type KeyboardEvent, useCallback, useMemo, useRef, useState} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Button} from '../../../../../../../../ui-components'\nimport {\n  CommandList,\n  type CommandListGetItemSelectedCallback,\n  type CommandListHandle,\n  type CommandListRenderItemCallback,\n} from '../../../../../../../components'\nimport {useSchema} from '../../../../../../../hooks'\nimport {useTranslation} from '../../../../../../../i18n'\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {type DocumentTypeMenuItem} from '../../../types'\nimport {getSelectableOmnisearchTypes} from '../../../utils/selectors'\nimport {FilterPopoverContentHeader} from '../common/FilterPopoverContentHeader'\nimport {DocumentTypeFilterItem} from './items/DocumentTypeFilterItem'\n\nconst ClearButtonBox = styled(Box)`\n  border-top: 1px solid ${({theme}) => theme.sanity.color.base.border};\n  flex-shrink: 0;\n`\n\nconst POPOVER_STYLES = {width: '250px'}\n\nexport function DocumentTypesPopoverContent() {\n  const [inputElement, setInputElement] = useState<HTMLInputElement | null>(null)\n  const [typeFilter, setTypeFilter] = useState('')\n  const commandListRef = useRef<CommandListHandle | null>(null)\n  const {t} = useTranslation()\n\n  const schema = useSchema()\n\n  const {\n    dispatch,\n    state: {\n      terms: {types: selectedTypes},\n    },\n  } = useSearchState()\n\n  // Get a snapshot of initial selected types\n  const [selectedTypesSnapshot, setSelectedTypesSnapshot] = useState(selectedTypes)\n\n  const documentTypeItems = useGetDocumentTypeItems(\n    schema,\n    selectedTypes,\n    selectedTypesSnapshot,\n    typeFilter,\n  )\n\n  const handleFilterChange = useCallback(\n    (e: KeyboardEvent<HTMLInputElement>) => setTypeFilter(e.currentTarget.value),\n    [setTypeFilter],\n  )\n  const handleFilterClear = useCallback(() => setTypeFilter(''), [])\n\n  const handleTypesClear = useCallback(() => {\n    setSelectedTypesSnapshot([])\n    dispatch({type: 'TERMS_TYPES_CLEAR'})\n\n    // Re-focus the command list input element\n    commandListRef?.current?.focusInputElement()\n    commandListRef?.current?.scrollToIndex(0)\n  }, [dispatch])\n\n  const getItemKey = useCallback(\n    (index: number) => {\n      const virtualItem = documentTypeItems[index]\n      switch (virtualItem.type) {\n        case 'divider':\n          return `${virtualItem.type}-${index}`\n        case 'header':\n          return `${virtualItem.type}-${virtualItem.title}`\n        case 'item':\n          return `${virtualItem.type}-${virtualItem.item.name}`\n        default:\n          return index\n      }\n    },\n    [documentTypeItems],\n  )\n\n  const renderItem = useCallback<CommandListRenderItemCallback<DocumentTypeMenuItem>>((item) => {\n    if (item.type === 'divider') {\n      return (\n        <Box paddingY={1}>\n          <MenuDivider />\n        </Box>\n      )\n    }\n    if (item.type === 'header') {\n      return (\n        <Box margin={2} padding={1}>\n          <Text muted size={1} weight=\"medium\">\n            {item.title}\n          </Text>\n        </Box>\n      )\n    }\n    if (item.type === 'item') {\n      return <DocumentTypeFilterItem paddingBottom={1} selected={item.selected} type={item.item} />\n    }\n    return null\n  }, [])\n\n  const getItemDisabled = useCallback<CommandListGetItemSelectedCallback>(\n    (index) => {\n      const item = documentTypeItems[index]\n      return item.type !== 'item'\n    },\n    [documentTypeItems],\n  )\n\n  const getItemSelected = useCallback<CommandListGetItemSelectedCallback>(\n    (index) => {\n      const item = documentTypeItems[index]\n      return item.type === 'item' && item.selected\n    },\n    [documentTypeItems],\n  )\n\n  return (\n    <Flex direction=\"column\" style={POPOVER_STYLES}>\n      {/* Search header */}\n      <FilterPopoverContentHeader\n        ariaInputLabel={t('search.action.filter-by-document-type-aria-label')}\n        onChange={handleFilterChange}\n        onClear={handleFilterClear}\n        ref={setInputElement}\n        typeFilter={typeFilter}\n      />\n\n      <Flex>\n        {documentTypeItems.length > 0 && (\n          <CommandList\n            activeItemDataAttr=\"data-hovered\"\n            ariaLabel={t('search.document-types-aria-label')}\n            ariaMultiselectable\n            autoFocus=\"input\"\n            getItemDisabled={getItemDisabled}\n            getItemSelected={getItemSelected}\n            getItemKey={getItemKey}\n            inputElement={inputElement}\n            itemHeight={37}\n            items={documentTypeItems}\n            overscan={20}\n            padding={1}\n            paddingBottom={0}\n            ref={commandListRef}\n            renderItem={renderItem}\n          />\n        )}\n\n        {/* No results */}\n        {!documentTypeItems.length && (\n          <Box padding={3}>\n            <Text muted size={1} textOverflow=\"ellipsis\">\n              {t('search.document-types-no-matches-found', {filter: typeFilter})}\n            </Text>\n          </Box>\n        )}\n      </Flex>\n\n      {/* Clear button */}\n      {!typeFilter && selectedTypes.length > 0 && (\n        <ClearButton onClick={handleTypesClear} selectedTypes={selectedTypes} />\n      )}\n    </Flex>\n  )\n}\n\nfunction ClearButton({onClick, selectedTypes}: {onClick: () => void; selectedTypes: SchemaType[]}) {\n  const {t} = useTranslation()\n\n  return (\n    <ClearButtonBox padding={1}>\n      <Stack>\n        <Button\n          aria-label={t('search.action.clear-type-filters-aria-label')}\n          data-name=\"type-filter-button\"\n          disabled={selectedTypes.length === 0}\n          mode=\"bleed\"\n          onClick={onClick}\n          text={t('search.action.clear-type-filters-label')}\n          tone=\"primary\"\n        />\n      </Stack>\n    </ClearButtonBox>\n  )\n}\n\nfunction useGetDocumentTypeItems(\n  schema: Schema,\n  selectedTypes: SchemaType[],\n  selectedTypesSnapshot: SchemaType[],\n  typeFilter: string,\n) {\n  return useMemo(() => {\n    const [itemsSelected, itemsUnselected] = partition(\n      getSelectableOmnisearchTypes(schema, typeFilter),\n      (type) => selectedTypesSnapshot.includes(type),\n    )\n\n    const hasSelectedItems = itemsSelected.length > 0\n    const hasUnselectedItems = itemsSelected.length > 0\n\n    const items: DocumentTypeMenuItem[] = []\n    if (hasSelectedItems) {\n      items.push({title: 'Selected', type: 'header'})\n    }\n    itemsSelected.forEach((item) =>\n      items.push({item, selected: selectedTypes.includes(item), type: 'item'}),\n    )\n    if (hasSelectedItems && hasUnselectedItems) {\n      items.push({type: 'divider'})\n    }\n    itemsUnselected.forEach((item) =>\n      items.push({item, selected: selectedTypes.includes(item), type: 'item'}),\n    )\n\n    return items\n  }, [schema, selectedTypes, selectedTypesSnapshot, typeFilter])\n}\n","import {ChevronDownIcon} from '@sanity/icons'\nimport {type Placement, useClickOutsideEvent} from '@sanity/ui'\nimport {useCallback, useMemo, useRef, useState} from 'react'\n\nimport {Button, Popover} from '../../../../../../../../ui-components'\nimport {useTranslation} from '../../../../../../../i18n'\nimport {POPOVER_RADIUS, POPOVER_VERTICAL_MARGIN} from '../../../constants'\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {documentTypesTruncated} from '../../../utils/documentTypesTruncated'\nimport {FilterPopoverWrapper} from '../common/FilterPopoverWrapper'\nimport {DocumentTypesPopoverContent} from './DocumentTypesPopoverContent'\n\nconst FALLBACK_PLACEMENTS: Placement[] = ['top-start', 'bottom-start']\n\nexport function DocumentTypesButton() {\n  const [open, setOpen] = useState(false)\n  const [buttonElement, setButtonElement] = useState<HTMLElement | null>(null)\n  const popoverRef = useRef<HTMLDivElement | null>(null)\n\n  const {\n    state: {\n      fullscreen,\n      terms: {types},\n    },\n  } = useSearchState()\n  const {t} = useTranslation()\n\n  const handleClose = useCallback(() => setOpen(false), [])\n  const handleOpen = useCallback(() => setOpen(true), [])\n\n  useClickOutsideEvent(handleClose, () => [buttonElement, popoverRef.current])\n\n  const title = useMemo(() => documentTypesTruncated({types, t}), [types, t])\n\n  return (\n    <Popover\n      __unstable_margins={[POPOVER_VERTICAL_MARGIN, 0, 0, 0]}\n      content={\n        <FilterPopoverWrapper anchorElement={buttonElement} onClose={handleClose}>\n          <DocumentTypesPopoverContent />\n        </FilterPopoverWrapper>\n      }\n      open={open}\n      placement=\"bottom-start\"\n      fallbackPlacements={FALLBACK_PLACEMENTS}\n      portal\n      radius={POPOVER_RADIUS}\n      ref={popoverRef}\n    >\n      <Button\n        iconRight={ChevronDownIcon}\n        mode=\"ghost\"\n        onClick={handleOpen}\n        size={fullscreen ? 'large' : 'default'}\n        ref={setButtonElement}\n        selected={open}\n        text={title}\n        tone=\"default\"\n      />\n    </Popover>\n  )\n}\n","import {Box, Flex} from '@sanity/ui'\nimport {useMemo} from 'react'\nimport {styled} from 'styled-components'\n\nimport {TextWithTone} from '../../../../../../components'\nimport {type TFunction, useTranslation} from '../../../../../../i18n'\nimport {Translate, type TranslateComponentMap} from '../../../../../../i18n/Translate'\nimport {isRecord} from '../../../../../../util'\nimport {useSearchState} from '../../contexts/search/useSearchState'\nimport {getOperatorDefinition} from '../../definitions/operators'\nimport {type SearchFilter, type SearchFilterValues} from '../../types'\nimport {FilterTitle} from './FilterTitle'\n\ninterface FilterLabelProps {\n  filter: SearchFilter\n  fontSize?: number\n  showContent?: boolean\n}\n\nconst CustomBox = styled(Box)<{$flexShrink?: number}>`\n  flex-shrink: ${({$flexShrink = 0}) => $flexShrink};\n`\n\nexport function FilterLabel({filter, fontSize = 1, showContent = true}: FilterLabelProps) {\n  const {t} = useTranslation()\n  const {\n    state: {definitions, fullscreen},\n  } = useSearchState()\n\n  const operator = getOperatorDefinition(definitions.operators, filter.operatorType)\n\n  const ButtonValue = operator?.buttonValueComponent\n  const filterValue = filter.value\n\n  const components: TranslateComponentMap = useMemo(\n    () => ({\n      Field: () => (\n        <CustomBox $flexShrink={fullscreen ? 1 : 0}>\n          <TextWithTone tone=\"default\" size={fontSize} textOverflow=\"ellipsis\" weight=\"medium\">\n            <FilterTitle filter={filter} maxLength={fullscreen ? 25 : 40} />\n          </TextWithTone>\n        </CustomBox>\n      ),\n      Operator: ({children}) =>\n        showContent ? (\n          <CustomBox $flexShrink={0}>\n            <TextWithTone tone=\"default\" size={fontSize} textOverflow=\"ellipsis\" weight=\"regular\">\n              {children}\n            </TextWithTone>\n          </CustomBox>\n        ) : null,\n      Value: ({children}) =>\n        showContent ? (\n          <CustomBox $flexShrink={1}>\n            <TextWithTone tone=\"default\" size={fontSize} textOverflow=\"ellipsis\" weight=\"medium\">\n              {ButtonValue ? <ButtonValue value={filterValue} /> : children}\n            </TextWithTone>\n          </CustomBox>\n        ) : null,\n    }),\n    [filter, fontSize, fullscreen, showContent, ButtonValue, filterValue],\n  )\n\n  if (!operator?.descriptionKey) {\n    console.warn('Missing `descriptionKey` for operator `%s`', filter.operatorType)\n  }\n\n  if (!showContent || !operator?.descriptionKey) {\n    const Field = components.Field\n    return (\n      <Flex align=\"center\" gap={1}>\n        <Field />\n      </Flex>\n    )\n  }\n\n  return (\n    <Flex align=\"center\" gap={1}>\n      <Translate\n        t={t}\n        i18nKey={operator?.descriptionKey}\n        components={components}\n        values={getFilterValues(filter, t)}\n      />\n    </Flex>\n  )\n}\n\nfunction getFilterValues(\n  filter: SearchFilter,\n  t: TFunction<'translation', undefined>,\n): SearchFilterValues {\n  const values: SearchFilterValues = {}\n  if (typeof filter.value === 'number') {\n    values.count = filter.value\n  }\n  if (isStringOrNumber(filter.value)) {\n    values.value = filter.value\n  }\n  if (typeof filter.value === 'boolean') {\n    // Cast boolean into a string value\n    values.value = filter.value ? t('search.filter-boolean-true') : t('search.filter-boolean-false')\n  }\n  if (isRecord(filter.value) && 'from' in filter.value && isStringOrNumber(filter.value.from)) {\n    values.from = filter.value.from\n  }\n  if (isRecord(filter.value) && 'to' in filter.value && isStringOrNumber(filter.value.to)) {\n    values.to = filter.value.to\n  }\n  return values\n}\n\nfunction isStringOrNumber(value: unknown): value is string | number {\n  return typeof value === 'string' || typeof value === 'number'\n}\n","import {ErrorOutlineIcon} from '@sanity/icons'\nimport {Box, Flex, type ResponsivePaddingProps, Stack} from '@sanity/ui'\n\nimport {TextWithTone} from '../../../../../../../components'\nimport {useTranslation} from '../../../../../../../i18n'\n\nexport function FilterError(props: ResponsivePaddingProps) {\n  const {t} = useTranslation()\n\n  return (\n    <Box {...props}>\n      <Flex align=\"flex-start\" gap={3}>\n        <TextWithTone tone=\"critical\">\n          <ErrorOutlineIcon />\n        </TextWithTone>\n        <Stack space={4}>\n          <TextWithTone size={1} tone=\"critical\" weight=\"medium\">\n            {t('search.error.display-filter-title')}\n          </TextWithTone>\n          <TextWithTone size={1} tone=\"critical\">\n            {t('search.error.display-filter-description')}\n          </TextWithTone>\n        </Stack>\n      </Flex>\n    </Box>\n  )\n}\n","import {ChevronDownIcon} from '@sanity/icons'\nimport {Inline, Menu, MenuDivider} from '@sanity/ui'\nimport {useCallback, useId} from 'react'\n\nimport {Button, MenuButton, MenuItem} from '../../../../../../../../ui-components'\nimport {useTranslation} from '../../../../../../../i18n'\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {getFilterDefinition} from '../../../definitions/filters'\nimport {getOperatorDefinition, type SearchOperatorDefinition} from '../../../definitions/operators'\nimport {type SearchFilter} from '../../../types'\nimport {getFilterKey} from '../../../utils/filterUtils'\n\ninterface OperatorsMenuButtonProps {\n  filter: SearchFilter\n  operator?: SearchOperatorDefinition\n}\n\nfunction CustomMenuItem({\n  onClick,\n  operator,\n  selected,\n}: {\n  onClick: (operatorType: string) => void\n  operator: SearchOperatorDefinition\n  selected: boolean\n}) {\n  const handleClick = useCallback(() => onClick(operator.type), [onClick, operator.type])\n  const {t} = useTranslation()\n\n  return (\n    <MenuItem\n      onClick={handleClick}\n      pressed={selected}\n      tone=\"default\"\n      text={t(operator.nameKey)}\n      iconRight={operator?.icon}\n    />\n  )\n}\n\nexport function OperatorsMenuButton({filter, operator}: OperatorsMenuButtonProps) {\n  const menuButtonId = useId()\n\n  const {t} = useTranslation()\n  const {dispatch, state} = useSearchState()\n  const operatorItems = getFilterDefinition(state.definitions.filters, filter.filterName)?.operators\n\n  const handleClick = useCallback(\n    (operatorType: string) => {\n      dispatch({\n        filterKey: getFilterKey(filter),\n        operatorType,\n        type: 'TERMS_FILTERS_SET_OPERATOR',\n      })\n    },\n    [dispatch, filter],\n  )\n\n  if (!operator || !operatorItems || operatorItems.length <= 1) {\n    return null\n  }\n\n  return (\n    <Inline>\n      <MenuButton\n        button={<Button mode=\"ghost\" iconRight={ChevronDownIcon} text={t(operator.nameKey)} />}\n        id={menuButtonId || ''}\n        menu={\n          <Menu>\n            {operatorItems.map((item, index) => {\n              if (item.type === 'item') {\n                const menuOperator = getOperatorDefinition(state.definitions.operators, item.name)\n                if (!menuOperator) {\n                  return null\n                }\n                return (\n                  <CustomMenuItem\n                    // eslint-disable-next-line react/no-array-index-key\n                    key={index}\n                    onClick={handleClick}\n                    operator={menuOperator}\n                    selected={operator.type === item.name}\n                  />\n                )\n              }\n              if (item.type === 'divider') {\n                // eslint-disable-next-line react/no-array-index-key\n                return <MenuDivider key={index} />\n              }\n              return null\n            })}\n          </Menu>\n        }\n        placement=\"bottom-start\"\n        popover={{\n          constrainSize: true,\n          portal: false,\n          radius: 2,\n        }}\n      />\n    </Inline>\n  )\n}\n","import {TrashIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Stack, Text} from '@sanity/ui'\nimport {type ErrorInfo, useCallback, useState} from 'react'\nimport FocusLock from 'react-focus-lock'\n\nimport {Button, ErrorBoundary} from '../../../../../../../../ui-components'\nimport {supportsTouch} from '../../../../../../../util'\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {getFilterDefinition} from '../../../definitions/filters'\nimport {getOperatorDefinition} from '../../../definitions/operators'\nimport {type SearchFilter} from '../../../types'\nimport {getFieldFromFilter, getFilterKey} from '../../../utils/filterUtils'\nimport {FilterDetails} from '../common/FilterDetails'\nimport {FilterError} from './FilterError'\nimport {OperatorsMenuButton} from './OperatorsMenuButton'\n\ninterface FilterFormProps {\n  filter: SearchFilter\n}\n\ninterface ErrorParams {\n  error: Error\n  info: ErrorInfo\n}\n\nexport function FilterForm({filter}: FilterFormProps) {\n  const [errorParams, setErrorParams] = useState<ErrorParams | null>(null)\n  const {\n    dispatch,\n    state: {definitions, fullscreen},\n  } = useSearchState()\n\n  const filterDefinition = getFilterDefinition(definitions.filters, filter.filterName)\n  const operator = getOperatorDefinition(definitions.operators, filter.operatorType)\n  const fieldDefinition = getFieldFromFilter(definitions.fields, filter)\n  const filterKey = getFilterKey(filter)\n\n  const handleClose = useCallback(() => {\n    dispatch({\n      filterKey: getFilterKey(filter),\n      type: 'TERMS_FILTERS_REMOVE',\n    })\n  }, [dispatch, filter])\n\n  const handleValueChange = useCallback(\n    (value: any) => {\n      dispatch({\n        filterKey: filterKey,\n        type: 'TERMS_FILTERS_SET_VALUE',\n        value,\n      })\n    },\n    [dispatch, filterKey],\n  )\n\n  const handleCatchError = useCallback((params: ErrorParams) => {\n    setErrorParams(params)\n  }, [])\n\n  const Component = operator?.inputComponent\n\n  if (errorParams) {\n    return <FilterError padding={4} />\n  }\n\n  // Flex order is reversed to ensure form inputs are focusable first\n  return (\n    <ErrorBoundary onCatch={handleCatchError}>\n      <FocusLock autoFocus={!supportsTouch} returnFocus>\n        <Flex direction=\"column-reverse\">\n          {/* Value */}\n          {Component && (\n            <Card borderTop padding={3}>\n              <Component\n                fieldDefinition={fieldDefinition}\n                // re-render on new operators\n                key={filter.operatorType}\n                onChange={handleValueChange}\n                value={filter.value}\n              />\n            </Card>\n          )}\n\n          {/* Title, description and operator */}\n          <Card padding={3}>\n            <Stack space={3}>\n              <Flex align=\"flex-start\" gap={3} justify=\"space-between\">\n                <Box paddingLeft={1} paddingRight={2} paddingY={1}>\n                  <FilterDetails filter={filter} />\n                </Box>\n\n                {fullscreen && (\n                  <Button\n                    icon={TrashIcon}\n                    mode=\"bleed\"\n                    onClick={handleClose}\n                    tone=\"critical\"\n                    tooltipProps={{content: 'Remove filter'}}\n                  />\n                )}\n              </Flex>\n              {filterDefinition?.description && (\n                <Card border padding={3} radius={2} tone=\"transparent\">\n                  <Text muted size={1}>\n                    {filterDefinition.description}\n                  </Text>\n                </Card>\n              )}\n              <OperatorsMenuButton filter={filter} operator={operator} />\n            </Stack>\n          </Card>\n        </Flex>\n      </FocusLock>\n    </ErrorBoundary>\n  )\n}\n","import {Flex} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {DEBUG_MODE} from '../../../constants'\nimport {type SearchFilter} from '../../../types'\nimport {DebugDocumentTypes} from '../debug/_DebugDocumentTypes'\nimport {DebugFilterValues} from '../debug/_DebugFilterValues'\nimport {FilterForm} from './FilterForm'\n\ninterface FilterPopoverContentProps {\n  filter: SearchFilter\n}\n\nconst ContainerFlex = styled(Flex)`\n  max-width: 480px;\n  min-width: 150px;\n  overflow: hidden;\n  overflow: clip;\n  width: 100%;\n`\n\nexport function FilterPopoverContent({filter}: FilterPopoverContentProps) {\n  return (\n    <ContainerFlex direction=\"column\">\n      <FilterForm filter={filter} />\n\n      {/* Debug panels */}\n      {DEBUG_MODE && (\n        <>\n          <DebugFilterValues filter={filter} />\n          <DebugDocumentTypes filter={filter} />\n        </>\n      )}\n    </ContainerFlex>\n  )\n}\n","import {CloseIcon} from '@sanity/icons'\nimport {\n  // eslint-disable-next-line no-restricted-imports\n  Button, // Button with specific styling and children behavior.\n  Card,\n  rem,\n  useClickOutsideEvent,\n} from '@sanity/ui'\nimport {type KeyboardEvent, useCallback, useRef, useState} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Popover} from '../../../../../../../../ui-components'\nimport {useTranslation} from '../../../../../../../i18n'\nimport {POPOVER_RADIUS, POPOVER_VERTICAL_MARGIN} from '../../../constants'\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {type SearchFilter} from '../../../types'\nimport {getFilterKey, validateFilter} from '../../../utils/filterUtils'\nimport {FilterLabel} from '../../common/FilterLabel'\nimport {FilterPopoverWrapper} from '../common/FilterPopoverWrapper'\nimport {FilterPopoverContent} from './FilterPopoverContent'\n\ninterface FilterButtonProps {\n  filter: SearchFilter\n  initialOpen?: boolean\n}\n\nconst CloseButton = styled(Button)`\n  border-radius: ${({theme}) =>\n    `0 ${rem(theme.sanity.radius[2])} ${rem(theme.sanity.radius[2])} 0`};\n`\n\nconst CloseCard = styled(Card)`\n  position: absolute;\n  right: 0;\n`\n\nconst ContainerDiv = styled.div`\n  align-items: center;\n  display: inline-flex;\n  max-width: 100%;\n  position: relative;\n`\n\nconst LabelButton = styled(Button)`\n  border: none;\n  width: 100%;\n`\n\nexport function FilterButton({filter, initialOpen}: FilterButtonProps) {\n  const [open, setOpen] = useState(initialOpen)\n  const [buttonElement, setButtonElement] = useState<HTMLElement | null>(null)\n  const popoverRef = useRef<HTMLDivElement | null>(null)\n\n  const {\n    dispatch,\n    state: {definitions, fullscreen},\n  } = useSearchState()\n\n  const {t} = useTranslation()\n\n  const handleClose = useCallback(() => setOpen(false), [])\n  const handleOpen = useCallback(() => setOpen(true), [])\n  const handleRemove = useCallback(\n    () =>\n      dispatch({\n        filterKey: getFilterKey(filter),\n        type: 'TERMS_FILTERS_REMOVE',\n      }),\n    [dispatch, filter],\n  )\n  const handleKeyDown = useCallback(\n    (event: KeyboardEvent<HTMLButtonElement>) => {\n      if (['Backspace', 'Delete'].includes(event.key)) {\n        handleRemove()\n      }\n    },\n    [handleRemove],\n  )\n\n  useClickOutsideEvent(handleClose, () => [buttonElement, popoverRef.current])\n\n  const isValid = validateFilter({\n    fieldDefinitions: definitions.fields,\n    filter,\n    filterDefinitions: definitions.filters,\n    operatorDefinitions: definitions.operators,\n  })\n\n  return (\n    <Popover\n      __unstable_margins={[POPOVER_VERTICAL_MARGIN, 0, 0, 0]}\n      content={\n        <FilterPopoverWrapper anchorElement={buttonElement} onClose={handleClose}>\n          <FilterPopoverContent filter={filter} />\n        </FilterPopoverWrapper>\n      }\n      constrainSize\n      open={open}\n      overflow=\"auto\"\n      placement=\"bottom-start\"\n      portal\n      radius={POPOVER_RADIUS}\n      ref={popoverRef}\n    >\n      <ContainerDiv>\n        <Card\n          __unstable_focusRing\n          display=\"flex\"\n          radius={2}\n          tone={isValid ? 'primary' : 'transparent'}\n        >\n          <LabelButton\n            mode=\"bleed\"\n            onClick={handleOpen}\n            onKeyDown={handleKeyDown}\n            paddingLeft={fullscreen ? 3 : 2}\n            paddingRight={fullscreen ? 3 : 5}\n            paddingY={fullscreen ? 3 : 2}\n            ref={setButtonElement}\n          >\n            <FilterLabel filter={filter} showContent={isValid} />\n          </LabelButton>\n        </Card>\n\n        {!fullscreen && (\n          <CloseCard\n            __unstable_focusRing\n            display=\"flex\"\n            radius={2}\n            tone={isValid ? 'primary' : 'transparent'}\n          >\n            <CloseButton\n              aria-label={t('search.action.remove-filter-aria-label')}\n              fontSize={1}\n              icon={CloseIcon}\n              mode=\"bleed\"\n              onClick={handleRemove}\n              onKeyDown={handleKeyDown}\n              padding={2}\n              radius={2}\n            />\n          </CloseCard>\n        )}\n      </ContainerDiv>\n    </Popover>\n  )\n}\n","import {Flex} from '@sanity/ui'\nimport {useCallback, useEffect, useState} from 'react'\n\nimport {Button} from '../../../../../../../ui-components'\nimport {useTranslation} from '../../../../../../i18n'\nimport {DEBUG_MODE} from '../../constants'\nimport {useSearchState} from '../../contexts/search/useSearchState'\nimport {getFilterKey} from '../../utils/filterUtils'\nimport {AddFilterButton} from './addFilter/AddFilterButton'\nimport {DebugDocumentTypesNarrowed} from './debug/_DebugDocumentTypesNarrowed'\nimport {DebugFilterQuery} from './debug/_DebugFilterQuery'\nimport {DocumentTypesButton} from './documentTypes/DocumentTypesButton'\nimport {FilterButton} from './filter/FilterButton'\n\n/**\n * @internal\n */\nexport function Filters({showTypeFilter = true}: {showTypeFilter?: boolean}) {\n  const {\n    dispatch,\n    state: {\n      filters,\n      fullscreen,\n      lastAddedFilter,\n      terms: {types},\n    },\n  } = useSearchState()\n  const {t} = useTranslation()\n\n  const [isMounted, setIsMounted] = useState(false)\n\n  const handleClear = useCallback(() => {\n    if (showTypeFilter) dispatch({type: 'TERMS_TYPES_CLEAR'})\n    dispatch({type: 'TERMS_FILTERS_CLEAR'})\n  }, [dispatch, showTypeFilter])\n\n  const clearFiltersButtonVisible = filters.length > 0 || (showTypeFilter && types.length > 0)\n\n  useEffect(() => {\n    setIsMounted(true)\n  }, [])\n\n  const lastAddedFilterKey = lastAddedFilter && getFilterKey(lastAddedFilter)\n\n  const ClearFiltersButton = () => (\n    <Button\n      mode=\"bleed\"\n      onClick={handleClear}\n      size={fullscreen ? 'large' : 'default'}\n      text={t('search.action.clear-filters')}\n      tone=\"critical\"\n    />\n  )\n\n  return (\n    <>\n      <Flex align=\"flex-start\" gap={3} justify=\"space-between\" padding={2}>\n        <Flex flex={1} gap={2} wrap=\"wrap\">\n          {showTypeFilter && <DocumentTypesButton />}\n          {filters?.map((filter) => {\n            const key = getFilterKey(filter)\n            return (\n              <FilterButton\n                filter={filter}\n                initialOpen={isMounted && lastAddedFilterKey === key}\n                key={key}\n              />\n            )\n          })}\n          {!fullscreen && <AddFilterButton />}\n        </Flex>\n        {clearFiltersButtonVisible && !fullscreen && <ClearFiltersButton />}\n      </Flex>\n\n      {fullscreen && (\n        <Flex justify=\"space-between\" paddingBottom={2} paddingX={2}>\n          <AddFilterButton />\n          {clearFiltersButtonVisible && <ClearFiltersButton />}\n        </Flex>\n      )}\n\n      {/* Debug panels */}\n      {DEBUG_MODE && (\n        <>\n          <DebugFilterQuery />\n          <DebugDocumentTypesNarrowed />\n        </>\n      )}\n    </>\n  )\n}\n","import {\n  type ArrayDefinition,\n  type ObjectDefinition,\n  type Schema,\n  type SchemaTypeDefinition,\n  type StringDefinition,\n} from '@sanity/types'\nimport {startCase} from 'lodash'\n\nimport {sanitizeFieldValue} from '../utils/sanitizeField'\nimport {getSearchableOmnisearchTypes} from '../utils/selectors'\nimport {getSupportedFieldTypes, type SearchFilterDefinition} from './filters'\n\nexport const MAX_OBJECT_TRAVERSAL_DEPTH = 3\n\n/**\n * @internal\n */\nexport interface SearchFieldDefinition {\n  documentTypes: string[]\n  fieldPath: string\n  filterName: string\n  id: string\n  name: string\n  title: string\n  titlePath: string[]\n  type: string\n}\n\n/**\n * @internal\n */\nexport type SearchFieldDefinitionDictionary = Record<\n  SearchFieldDefinition['id'],\n  SearchFieldDefinition\n>\n\nexport function createFieldDefinitions(\n  schema: Schema,\n  filterDefinitions: SearchFilterDefinition[],\n): SearchFieldDefinition[] {\n  // Get allowed document types (`__experimental_omnisearch_visibility !== false`)\n  const searchableDocumentTypeNames = getSearchableOmnisearchTypes(schema).map((s) => s.name)\n\n  // Get user-defined schema types, partitioned into documents and objects\n  const {documentTypes, objectTypes} = (schema._original?.types || [])\n    // Ignore document types hidden by omnisearch\n    .filter((t) =>\n      isDocumentObjectDefinition(t) ? searchableDocumentTypeNames.includes(t.name) : true,\n    )\n    // Ignore the 'slug' object to prevent surfacing 'current' and (deprecated) 'source field' fields.\n    .filter((schemaType) => schemaType.name !== 'slug')\n    // Ignore sanity documents and assets\n    .filter((schemaType) => !schemaType.name.startsWith('sanity.'))\n    // Partition\n    .reduce<{\n      documentTypes: Record<string, ObjectDefinition>\n      objectTypes: Record<string, ObjectDefinition>\n    }>(\n      (acc, schemaType) => {\n        if (isDocumentObjectDefinition(schemaType)) {\n          acc.documentTypes[schemaType.name] = schemaType\n        }\n        if (isObjectDefinition(schemaType)) {\n          acc.objectTypes[schemaType.name] = schemaType as ObjectDefinition\n        }\n        return acc\n      },\n      {documentTypes: {}, objectTypes: {}},\n    ) || {documentTypes: {}, objectTypes: {}}\n\n  // Get supported filter field types that have corresponding filters defined\n  const supportedFieldTypes = getSupportedFieldTypes(filterDefinitions)\n\n  return getDocumentFieldDefinitions(supportedFieldTypes, documentTypes, objectTypes)\n}\n\nexport function createFieldDefinitionDictionary(\n  fieldDefinitions: SearchFieldDefinition[],\n): SearchFieldDefinitionDictionary {\n  return fieldDefinitions.reduce<SearchFieldDefinitionDictionary>((acc, val) => {\n    acc[val.id] = val\n    return acc\n  }, {})\n}\n\nexport function generateFieldId(field: SearchFieldDefinition): string {\n  return [field.type, field.fieldPath, field.filterName, field.documentTypes.join(',')].join('-')\n}\n\nfunction getDocumentFieldDefinitions(\n  supportedFieldTypes: string[],\n  documentTypes: Record<string, ObjectDefinition>,\n  objectTypes: Record<string, ObjectDefinition>,\n) {\n  // Recursively iterate through all documents and resolve objects\n  function addFieldDefinitionRecursive({\n    acc,\n    defType,\n    depth = 0,\n    documentType,\n    prevFieldPath,\n    prevTitlePath,\n  }: {\n    acc: SearchFieldDefinition[]\n    defType: SchemaTypeDefinition\n    depth?: number\n    documentType: string\n    prevFieldPath?: string\n    prevTitlePath?: string[]\n  }) {\n    const continueRecursion = depth <= MAX_OBJECT_TRAVERSAL_DEPTH\n    const isInternalField = defType.name.startsWith('_')\n    // Sanitize schema titles (which may either be a string or React element)\n    const title = defType?.title ? sanitizeFieldValue(defType.title) : startCase(defType.name)\n    const fieldPath = prevFieldPath ? `${prevFieldPath}.${defType.name}` : defType.name\n    const titlePath = prevTitlePath ? [...prevTitlePath, title] : [title]\n\n    if (!continueRecursion) return\n\n    // Map to an existing document, object or inline object if found\n    const existingObject = objectTypes[defType.type]\n    const existingDocument = documentTypes[defType.type]\n    const inlineObject = isObjectDefinition(defType) ? defType : null\n    const targetObject = existingDocument || existingObject || inlineObject\n\n    if (targetObject) {\n      targetObject?.fields?.forEach((field) =>\n        addFieldDefinitionRecursive({\n          acc,\n          defType: field as ObjectDefinition,\n          depth: depth + 1,\n          documentType,\n          prevFieldPath: fieldPath,\n          prevTitlePath: titlePath,\n        }),\n      )\n      return\n    }\n\n    // Return if the current field type doesn't have a corresponding filter\n    if (!supportedFieldTypes.includes(defType.type)) return\n\n    acc.push({\n      documentTypes: documentType && !isInternalField ? [documentType] : [],\n      fieldPath,\n      filterName: resolveFilterName(defType),\n      id: '',\n      name: defType.name,\n      titlePath,\n      title,\n      type: defType.type,\n    })\n  }\n\n  const fieldDefinitions = Object.values(documentTypes)\n    .reduce<SearchFieldDefinition[]>((acc, documentType) => {\n      const documentFields = (documentType.fields as ObjectDefinition[]).reduce<\n        SearchFieldDefinition[]\n      >((a, field) => {\n        addFieldDefinitionRecursive({acc: a, defType: field, documentType: documentType.name})\n        return a\n      }, [])\n      acc.push(...documentFields)\n      return acc\n    }, [])\n    .reduce<SearchFieldDefinition[]>((acc, val) => {\n      const prevIndex = acc.findIndex(\n        (v) => v.fieldPath === val.fieldPath && v.title === val.title && v.type === val.type,\n      )\n      if (prevIndex > -1) {\n        acc[prevIndex] = {\n          ...acc[prevIndex],\n          documentTypes: [...acc[prevIndex].documentTypes, ...val.documentTypes],\n        }\n      } else {\n        acc.push(val)\n      }\n      return acc\n    }, [])\n    .map(addFieldDefinitionId)\n    .sort(sortFieldDefinitions)\n\n  return fieldDefinitions\n}\n\n/**\n * Create unique ID as a hash from documentTypes, full field path, filter and field types\n */\nfunction addFieldDefinitionId(field: SearchFieldDefinition) {\n  return {\n    ...field,\n    id: generateFieldId(field),\n  }\n}\n\nfunction isArrayOfPrimitives(schemaType: SchemaTypeDefinition): schemaType is ArrayDefinition {\n  if (isArrayDefinition(schemaType)) {\n    return (\n      schemaType.of.every((item) => ['boolean', 'number', 'string'].includes(item.type)) &&\n      (schemaType.options?.list ? schemaType.options.list.length > 0 : false)\n    )\n  }\n  return false\n}\n\nfunction isArrayDefinition(schemaType: SchemaTypeDefinition): schemaType is ArrayDefinition {\n  return schemaType.type === 'array'\n}\n\nfunction isDocumentObjectDefinition(\n  schemaType: SchemaTypeDefinition,\n): schemaType is ObjectDefinition {\n  return schemaType.type === 'document'\n}\n\nfunction isObjectDefinition(schemaType: SchemaTypeDefinition): schemaType is ObjectDefinition {\n  return schemaType.type === 'object'\n}\n\nfunction isStringDefinition(schemaType: SchemaTypeDefinition): schemaType is StringDefinition {\n  return schemaType.type === 'string'\n}\n\nfunction isStringListDefinition(schemaType: SchemaTypeDefinition): schemaType is StringDefinition {\n  if (isStringDefinition(schemaType)) {\n    return schemaType.options?.list ? schemaType.options.list.length > 0 : false\n  }\n  return false\n}\n\nfunction resolveFilterName(schemaType: SchemaTypeDefinition) {\n  if (isStringListDefinition(schemaType)) {\n    return 'stringList'\n  }\n  if (isArrayDefinition(schemaType)) {\n    if (schemaType.of.some((item) => item.type === 'reference')) {\n      return 'arrayReferences'\n    }\n    if (schemaType.of.find((item) => item.type === 'block')) {\n      return 'portableText'\n    }\n    if (isArrayOfPrimitives(schemaType)) {\n      return 'arrayList'\n    }\n  }\n  return schemaType.type\n}\n\n/**\n * Sort definitions by title, joined titlePath and fieldPath (in that order)\n */\nfunction sortFieldDefinitions(a: SearchFieldDefinition, b: SearchFieldDefinition): number {\n  const aTitlePath = a.titlePath.slice(0, -1).join('/')\n  const bTitlePath = b.titlePath.slice(0, -1).join('/')\n  return (\n    a.title.localeCompare(b.title) ||\n    aTitlePath.localeCompare(bTitlePath) ||\n    a.fieldPath.localeCompare(b.fieldPath)\n  )\n}\n","import {useCallback, useEffect, useMemo, useState} from 'react'\nimport {map, startWith} from 'rxjs/operators'\n\nimport {useClient} from '../../../../../hooks'\nimport {useKeyValueStore} from '../../../../../store'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../../../../studioClient'\n\nexport const RECENT_SEARCH_VERSION = 2\nconst STORED_SEARCHES_NAMESPACE = 'studio.search.recent'\n\nexport interface StoredSearch {\n  version: number\n  recentSearches: any[]\n}\n\nconst defaultValue: StoredSearch = {\n  version: RECENT_SEARCH_VERSION,\n  recentSearches: [],\n}\n\nexport function useStoredSearch(): [StoredSearch, (_value: StoredSearch) => void] {\n  const keyValueStore = useKeyValueStore()\n  const client = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n  const {dataset} = client.config()\n\n  const keyValueStoreKey = useMemo(() => `${STORED_SEARCHES_NAMESPACE}.${dataset}`, [dataset])\n\n  const [value, setValue] = useState<StoredSearch>(defaultValue)\n\n  const settings = useMemo(() => {\n    return keyValueStore.getKey(keyValueStoreKey)\n  }, [keyValueStore, keyValueStoreKey])\n\n  useEffect(() => {\n    const sub = settings\n      .pipe(\n        startWith(defaultValue as any),\n        map((data: StoredSearch) => {\n          if (!data) {\n            return defaultValue\n          }\n          // Check if the version matches RECENT_SEARCH_VERSION\n          if (data?.version !== RECENT_SEARCH_VERSION) {\n            // If not, return the default object and mutate the store (per original verifySearchVersionNumber logic)\n            keyValueStore.setKey(keyValueStoreKey, defaultValue as any)\n            return defaultValue\n          }\n          // Otherwise, return the data as is\n          return data\n        }),\n      )\n      .subscribe({\n        next: setValue,\n      })\n\n    return () => sub?.unsubscribe()\n  }, [settings, keyValueStore, keyValueStoreKey])\n\n  const set = useCallback(\n    (newValue: StoredSearch) => {\n      setValue(newValue)\n      keyValueStore.setKey(keyValueStoreKey, newValue as any)\n    },\n    [keyValueStore, keyValueStoreKey],\n  )\n\n  return useMemo(() => [value, set], [set, value])\n}\n","import {type ObjectSchemaType, type Schema} from '@sanity/types'\nimport {isEqual, omit} from 'lodash'\nimport {useMemo} from 'react'\n\nimport {useSchema} from '../../../../../hooks'\nimport {type SearchTerms} from '../../../../../search'\nimport {useSource} from '../../../../source'\nimport {\n  createFieldDefinitionDictionary,\n  createFieldDefinitions,\n  type SearchFieldDefinitionDictionary,\n} from '../definitions/fields'\nimport {\n  createFilterDefinitionDictionary,\n  type SearchFilterDefinitionDictionary,\n} from '../definitions/filters'\nimport {\n  createOperatorDefinitionDictionary,\n  type SearchOperatorDefinitionDictionary,\n} from '../definitions/operators'\nimport {type SearchFilter} from '../types'\nimport {validateFilter} from '../utils/filterUtils'\nimport {getSearchableOmnisearchTypes} from '../utils/selectors'\nimport {useStoredSearch} from './useStoredSearch'\n\nexport const MAX_RECENT_SEARCHES = 5\n/**\n * Current recent search version.\n *\n * Users with recent searches containing mismatching versions will have their recent searches cleared.\n * This value should only be incremented when search filter operator `value` data types are updated,\n * ensuring that users don't have stored recent searches containing invalid operator values.\n *\n * This is a bit of a blunt instrument: in future we could look to validate individual filter values and\n * remove outdated entries individually.\n */\nexport const RECENT_SEARCH_VERSION = 2\n\nexport type RecentSearch = SearchTerms & {\n  __recent: {\n    index: number\n    timestamp: number\n  }\n  filters?: SearchFilter[]\n}\n\nexport interface RecentSearchesStore {\n  addSearch: (searchTerm: SearchTerms, filters?: SearchFilter[]) => RecentSearch[]\n  getRecentSearches: () => RecentSearch[]\n  removeSearch: () => RecentSearch[]\n  removeSearchAtIndex: (index: number) => RecentSearch[]\n}\n\ninterface StoredSearch {\n  version: number\n  recentSearches: StoredSearchItem[]\n}\n\ninterface StoredSearchItem {\n  created: string\n  filters: SearchFilter[]\n  terms: Omit<SearchTerms, 'types'> & {typeNames: string[]}\n}\n\nexport function useRecentSearchesStore(): RecentSearchesStore {\n  const [storedSearch, setStoredSearch] = useStoredSearch()\n  const schema = useSchema()\n  const {\n    search: {operators, filters},\n  } = useSource()\n\n  // Create field, filter and operator dictionaries\n  const {fieldDefinitions, filterDefinitions, operatorDefinitions} = useMemo(() => {\n    return {\n      fieldDefinitions: createFieldDefinitionDictionary(createFieldDefinitions(schema, filters)),\n      filterDefinitions: createFilterDefinitionDictionary(filters),\n      operatorDefinitions: createOperatorDefinitionDictionary(operators),\n    }\n  }, [filters, operators, schema])\n\n  return {\n    /**\n     * Write a search term to Local Storage and return updated recent searches.\n     */\n    addSearch: (searchTerm: SearchTerms, searchFilters?: SearchFilter[]): RecentSearch[] => {\n      const storedFilters = (searchFilters || []).map(\n        (filter): SearchFilter => ({\n          fieldId: filter.fieldId,\n          filterName: filter.filterName,\n          operatorType: filter.operatorType,\n          value: filter.value,\n        }),\n      )\n\n      // Remove any filters in 'incomplete' states prior to writing to local storage.\n      const validStoredFilters = storedFilters.filter((filter) =>\n        validateFilter({\n          fieldDefinitions,\n          filter,\n          filterDefinitions,\n          operatorDefinitions,\n        }),\n      )\n\n      const newSearchItem: StoredSearchItem = {\n        created: new Date().toISOString(),\n        filters: validStoredFilters,\n        terms: {\n          query: searchTerm.query.trim(),\n          typeNames: searchTerm.types.map((s) => s.name),\n        },\n      }\n      // Add new search item, remove previous duplicates (if any) and truncate array.\n      // When comparing search items, don't compare against the created date (which will always be different).\n      const newRecent: StoredSearch = {\n        version: RECENT_SEARCH_VERSION,\n        recentSearches: [\n          newSearchItem,\n          ...storedSearch.recentSearches.filter((r) => {\n            return !isEqual(omit(r, 'created'), omit(newSearchItem, 'created'))\n          }),\n        ].slice(0, MAX_RECENT_SEARCHES),\n      }\n      setStoredSearch(newRecent)\n\n      return getRecentSearchTerms({\n        fieldDefinitions,\n        filterDefinitions,\n        operatorDefinitions,\n        schema,\n        storedSearch: newRecent,\n        setStoredSearch,\n      })\n    },\n    /**\n     * Fetch all recent searches from Local Storage.\n     * Invalid search terms will be filtered out and terms will be re-written to Local Storage.\n     */\n    getRecentSearches: () =>\n      getRecentSearchTerms({\n        fieldDefinitions,\n        filterDefinitions,\n        operatorDefinitions,\n        schema,\n        storedSearch,\n        setStoredSearch,\n      }),\n    /**\n     * Remove all search terms from Local Storage and return updated recent searches.\n     */\n    removeSearch: () => {\n      const newRecent: StoredSearch = {\n        ...storedSearch,\n        recentSearches: [],\n      }\n\n      setStoredSearch(newRecent)\n\n      return getRecentSearchTerms({\n        fieldDefinitions,\n        filterDefinitions,\n        operatorDefinitions,\n        schema,\n        storedSearch: newRecent,\n        setStoredSearch,\n      })\n    },\n    /**\n     * Remove a search term from Local Storage and return updated recent searches.\n     */\n    removeSearchAtIndex: (index: number) => {\n      if (index < 0 || index > storedSearch.recentSearches.length) {\n        return getRecentSearchTerms({\n          fieldDefinitions,\n          filterDefinitions,\n          operatorDefinitions,\n          schema,\n          storedSearch,\n          setStoredSearch,\n        })\n      }\n\n      const newRecent: StoredSearch = {\n        ...storedSearch,\n        recentSearches: [\n          ...storedSearch.recentSearches.slice(0, index),\n          ...storedSearch.recentSearches.slice(index + 1),\n        ],\n      }\n\n      setStoredSearch(newRecent)\n\n      return getRecentSearchTerms({\n        fieldDefinitions,\n        filterDefinitions,\n        operatorDefinitions,\n        schema,\n        storedSearch: newRecent,\n        setStoredSearch,\n      })\n    },\n  }\n}\n\n/**\n * Get a list of recent searches from Local Storage.\n * Recent searches contain full document schema types.\n */\nfunction getRecentSearchTerms({\n  schema,\n  fieldDefinitions,\n  filterDefinitions,\n  operatorDefinitions,\n  storedSearch,\n  setStoredSearch,\n}: {\n  schema: Schema\n  fieldDefinitions: SearchFieldDefinitionDictionary\n  filterDefinitions: SearchFilterDefinitionDictionary\n  operatorDefinitions: SearchOperatorDefinitionDictionary\n  storedSearch: StoredSearch\n  setStoredSearch: (_value: StoredSearch) => void\n}): RecentSearch[] {\n  return sanitizeStoredSearch({\n    studioSchema: schema,\n    filterDefinitions,\n    fieldDefinitions,\n    operatorDefinitions,\n    storedSearch,\n    setStoredSearch,\n  })\n    .recentSearches.filter((r) => !!r.terms)\n    .map((r, index) => ({\n      __recent: {\n        index,\n        timestamp: new Date(r.created).getTime(),\n      },\n      filters: r.filters,\n      query: r.terms.query,\n      types: r.terms.typeNames\n        .map((typeName) => schema.get(typeName))\n        .filter((s): s is ObjectSchemaType => !!(s && s.jsonType === 'object')),\n    }))\n}\n\n/**\n * Sanitize stored search.\n *\n * Ignore searches containing:\n * - Any number of invalid document schema types\n * - Document types hidden from omnisearch with __experimental_omnisearch_visibility\n * - Invalid filters\n *\n * This mutates Local Storage if any invalid terms are found.\n */\nfunction sanitizeStoredSearch({\n  fieldDefinitions,\n  filterDefinitions,\n  operatorDefinitions,\n  studioSchema,\n  storedSearch,\n  setStoredSearch,\n}: {\n  fieldDefinitions: SearchFieldDefinitionDictionary\n  filterDefinitions: SearchFilterDefinitionDictionary\n  operatorDefinitions: SearchOperatorDefinitionDictionary\n  studioSchema: Schema\n  storedSearch: StoredSearch\n  setStoredSearch: (_value: StoredSearch) => void\n}): StoredSearch {\n  // Obtain all 'searchable' type names – defined as a type that exists in\n  // the current schema and also visible to omnisearch.\n  const searchableTypeNames = getSearchableOmnisearchTypes(studioSchema).map(\n    (schema) => schema.name,\n  )\n\n  const filteredSearch = storedSearch.recentSearches.filter((recentSearch) => {\n    return (\n      // Has valid searchable types (not hidden by omnisearch)\n      recentSearch.terms.typeNames.every((typeName) => searchableTypeNames.includes(typeName)) &&\n      recentSearch.filters.every((filter) =>\n        validateFilter({fieldDefinitions, filter, filterDefinitions, operatorDefinitions}),\n      )\n    )\n  })\n\n  const newStoredSearch: StoredSearch = {\n    version: RECENT_SEARCH_VERSION,\n    recentSearches: filteredSearch,\n  }\n\n  if (newStoredSearch.recentSearches.length < storedSearch.recentSearches.length) {\n    setStoredSearch(newStoredSearch)\n  }\n\n  return newStoredSearch\n}\n","import {ControlsIcon} from '@sanity/icons'\nimport {Flex, Inline, Text} from '@sanity/ui'\n\nimport {Translate, useTranslation} from '../../../../../i18n'\n\nexport function Instructions() {\n  const {t} = useTranslation()\n\n  return (\n    <Flex align=\"center\" direction=\"column\" gap={4} paddingX={4} paddingY={5}>\n      <Inline space={3}>\n        <Text muted>\n          <Translate\n            t={t}\n            i18nKey=\"search.instructions\"\n            components={{\n              ControlsIcon: () => <ControlsIcon key={0} style={{padding: '0 0.25rem'}} />,\n            }}\n          />\n        </Text>\n      </Inline>\n    </Flex>\n  )\n}\n","import {type SchemaType} from '@sanity/types'\nimport {Card, Text} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nimport {useTranslation} from '../../../../../../i18n'\nimport {documentTypesTruncated} from '../../utils/documentTypesTruncated'\n\ninterface TypePillsProps {\n  availableCharacters?: number\n  types: SchemaType[]\n}\n\nexport function DocumentTypesPill({availableCharacters, types}: TypePillsProps) {\n  const {t} = useTranslation()\n  const title = useMemo(\n    () => documentTypesTruncated({availableCharacters, types, t}),\n    [availableCharacters, types, t],\n  )\n\n  return (\n    <Card border padding={2} radius={2}>\n      <Text muted size={1}>\n        {title}\n      </Text>\n    </Card>\n  )\n}\n","import {Card} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {type SearchFilter} from '../../types'\nimport {FilterLabel} from './FilterLabel'\n\ninterface FilterPillProps {\n  filter: SearchFilter\n}\n\nconst FilterPillCard = styled(Card)`\n  cursor: default;\n`\n\nexport function FilterPill({filter}: FilterPillProps) {\n  return (\n    <FilterPillCard border padding={2} radius={2} tone=\"primary\">\n      <FilterLabel filter={filter} />\n    </FilterPillCard>\n  )\n}\n","import {ClockIcon, CloseIcon} from '@sanity/icons'\nimport {\n  Box,\n  // eslint-disable-next-line no-restricted-imports\n  Button, // Button with specific styling and children behavior.\n  Flex,\n  Inline,\n  rem,\n  type ResponsiveMarginProps,\n  type ResponsivePaddingProps,\n  Text,\n} from '@sanity/ui'\nimport {type MouseEvent, useCallback} from 'react'\nimport {styled} from 'styled-components'\n\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {type RecentSearch, useRecentSearchesStore} from '../../../datastores/recentSearches'\nimport {DocumentTypesPill} from '../../common/DocumentTypesPill'\nimport {FilterPill} from '../../common/FilterPill'\n\nexport interface RecentSearchesProps extends ResponsiveMarginProps, ResponsivePaddingProps {\n  index: number\n  maxVisibleTypePillChars?: number\n  value: RecentSearch\n}\n\nconst DEFAULT_COMBINED_TYPE_COUNT = 40\n\nconst RecentSearchItemButton = styled(Button)`\n  border-radius: ${({theme}) => rem(theme.sanity.radius[2])};\n  cursor: default;\n  width: 100%;\n`\n\nconst SearchItemPillsBox = styled(Box)`\n  flex-shrink: 3;\n`\n\nconst SearchItemQueryFlex = styled(Flex)`\n  flex-shrink: 2;\n`\n\nconst CloseButtonDiv = styled.div`\n  opacity: 0.8;\n  visibility: hidden;\n\n  @media (hover: hover) {\n    ${RecentSearchItemButton}:hover & {\n      visibility: visible;\n    }\n    &:hover {\n      opacity: 0.4;\n    }\n  }\n`\n\nexport function RecentSearchItem({\n  index,\n  maxVisibleTypePillChars = DEFAULT_COMBINED_TYPE_COUNT,\n  value,\n  ...rest\n}: RecentSearchesProps) {\n  const {dispatch} = useSearchState()\n  const recentSearchesStore = useRecentSearchesStore()\n\n  // Determine how many characters are left to render type pills\n  const availableCharacters = maxVisibleTypePillChars - value.query.length\n\n  const handleClick = useCallback(() => {\n    dispatch({type: 'TERMS_SET', filters: value?.filters, terms: value})\n\n    // Add to Local Storage\n    if (recentSearchesStore) {\n      recentSearchesStore?.addSearch(value, value?.filters)\n    }\n  }, [dispatch, recentSearchesStore, value])\n\n  const handleDelete = useCallback(\n    (event: MouseEvent) => {\n      event.stopPropagation()\n      // Remove from Local Storage\n      if (recentSearchesStore) {\n        recentSearchesStore?.removeSearchAtIndex(index)\n      }\n    },\n    [index, recentSearchesStore],\n  )\n\n  return (\n    <Box {...rest}>\n      <RecentSearchItemButton\n        mode=\"bleed\"\n        onClick={handleClick}\n        paddingLeft={3}\n        paddingRight={1}\n        paddingY={1}\n        tabIndex={-1}\n      >\n        <Flex align=\"stretch\">\n          {/* Combination of <Inline> and a zero-width character to ensure icon is optically aligned with adjacent text */}\n          <Inline paddingY={2}>\n            <Text muted size={1}>\n              <ClockIcon />\n            </Text>\n            {/* eslint-disable-next-line i18next/no-literal-string */}\n            <Text>&#8203;</Text>\n          </Inline>\n          <Flex align=\"stretch\" flex={1} gap={2} justify=\"flex-start\" marginLeft={3} wrap=\"wrap\">\n            {/* Text query */}\n            {value.query && (\n              <SearchItemQueryFlex align=\"center\" paddingY={2}>\n                <Text muted size={1} textOverflow=\"ellipsis\" weight=\"medium\">\n                  {value.query}\n                </Text>\n              </SearchItemQueryFlex>\n            )}\n            {/* Document type */}\n            {value.types.length > 0 && (\n              <SearchItemPillsBox>\n                <DocumentTypesPill availableCharacters={availableCharacters} types={value.types} />\n              </SearchItemPillsBox>\n            )}\n            {/* Filters */}\n            {value?.filters?.map((filter, i) => {\n              // eslint-disable-next-line react/no-array-index-key\n              return <FilterPill filter={filter} key={i} />\n            })}\n          </Flex>\n\n          {/* TODO: this is neither semantic nor accessible, consider revising */}\n          <Flex align=\"center\">\n            <CloseButtonDiv onClick={handleDelete}>\n              <Flex padding={2}>\n                <Text size={1}>\n                  <CloseIcon />\n                </Text>\n              </Flex>\n            </CloseButtonDiv>\n          </Flex>\n        </Flex>\n      </RecentSearchItemButton>\n    </Box>\n  )\n}\n","import {Box, Card, Text, useMediaIndex} from '@sanity/ui'\nimport {useCallback, useMemo, useRef} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Button} from '../../../../../../../ui-components'\nimport {\n  CommandList,\n  type CommandListHandle,\n  type CommandListRenderItemCallback,\n} from '../../../../../../components'\nimport {useTranslation} from '../../../../../../i18n'\nimport {useSearchState} from '../../contexts/search/useSearchState'\nimport {type RecentSearch, useRecentSearchesStore} from '../../datastores/recentSearches'\nimport {Instructions} from '../Instructions'\nimport {RecentSearchItem} from './item/RecentSearchItem'\n\nconst VIRTUAL_LIST_RECENT_SEARCH_ITEM_HEIGHT = 36 // px\n\n// Max character count of selected document types (combined) by breakpoint\nconst MAX_COMBINED_TYPE_COUNT_SMALL = 20\nconst MAX_COMBINED_TYPE_COUNT_LARGE = 40\n\nconst RecentSearchesBox = styled(Card)`\n  overflow-x: hidden;\n  overflow-y: auto;\n  position: relative;\n`\n\ninterface RecentSearchesProps {\n  inputElement?: HTMLInputElement | null\n}\n\nexport function RecentSearches({inputElement}: RecentSearchesProps) {\n  const {\n    dispatch,\n    state: {filtersVisible, fullscreen},\n  } = useSearchState()\n  const recentSearchesStore = useRecentSearchesStore()\n  const recentSearches = useMemo(\n    () => recentSearchesStore?.getRecentSearches(),\n    [recentSearchesStore],\n  )\n\n  const commandListRef = useRef<CommandListHandle | null>(null)\n\n  const {t} = useTranslation()\n\n  /**\n   * Remove terms from local storage.\n   * Also re-focus input (on non-touch devices)\n   */\n  const handleClearRecentSearchesClick = useCallback(() => {\n    if (recentSearchesStore) {\n      recentSearchesStore.removeSearch()\n    }\n    commandListRef?.current?.focusInputElement()\n  }, [recentSearchesStore])\n\n  const mediaIndex = useMediaIndex()\n\n  const maxVisibleTypePillChars = useMemo(() => {\n    return mediaIndex < 2 ? MAX_COMBINED_TYPE_COUNT_SMALL : MAX_COMBINED_TYPE_COUNT_LARGE\n  }, [mediaIndex])\n\n  const renderItem = useCallback<CommandListRenderItemCallback<RecentSearch>>(\n    (item, {virtualIndex}) => {\n      return (\n        <RecentSearchItem\n          index={virtualIndex}\n          maxVisibleTypePillChars={maxVisibleTypePillChars}\n          paddingBottom={1}\n          value={item}\n        />\n      )\n    },\n    [maxVisibleTypePillChars],\n  )\n\n  const hasRecentSearches = !!recentSearches.length\n\n  return (\n    <RecentSearchesBox\n      borderTop={hasRecentSearches || (!hasRecentSearches && !filtersVisible && fullscreen)}\n      flex={1}\n    >\n      {recentSearches.length > 0 ? (\n        <>\n          <Box paddingBottom={2} paddingTop={4} paddingX={3}>\n            <Text muted size={1} weight=\"medium\">\n              {t('search.recent-searches-label')}\n            </Text>\n          </Box>\n          <Box>\n            <CommandList\n              activeItemDataAttr=\"data-hovered\"\n              ariaLabel={t('search.recent-searches-aria-label')}\n              inputElement={inputElement}\n              initialIndex={0}\n              itemHeight={VIRTUAL_LIST_RECENT_SEARCH_ITEM_HEIGHT}\n              items={recentSearches}\n              paddingX={2}\n              paddingY={1}\n              renderItem={renderItem}\n            />\n          </Box>\n          <Box paddingBottom={2} paddingTop={1} paddingX={2}>\n            <Button\n              mode=\"bleed\"\n              onClick={handleClearRecentSearchesClick}\n              tone=\"default\"\n              text={t('search.action.clear-recent-searches')}\n              muted\n            />\n          </Box>\n        </>\n      ) : (\n        !filtersVisible && fullscreen && <Instructions />\n      )}\n    </RecentSearchesBox>\n  )\n}\n","import {ArrowLeftIcon, ControlsIcon, SearchIcon, SpinnerIcon} from '@sanity/icons'\nimport {Box, Card, Flex} from '@sanity/ui'\nimport {forwardRef, type KeyboardEvent, useCallback, useEffect, useRef} from 'react'\nimport {keyframes, styled} from 'styled-components'\n\nimport {Button} from '../../../../../../ui-components'\nimport {StatusButton} from '../../../../../components'\nimport {useTranslation} from '../../../../../i18n'\nimport {useSearchState} from '../contexts/search/useSearchState'\nimport {hasSearchableTerms} from '../utils/hasSearchableTerms'\nimport {CustomTextInput} from './common/CustomTextInput'\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\nconst FilterDiv = styled.div`\n  line-height: 0;\n  position: relative;\n`\n\ninterface SearchHeaderProps {\n  ariaInputLabel?: string\n  onClose?: () => void\n}\n\n/**\n * @internal\n */\nexport const SearchHeader = forwardRef<HTMLInputElement, SearchHeaderProps>(function SearchHeader(\n  {ariaInputLabel, onClose},\n  ref,\n) {\n  const isMountedRef = useRef(false)\n\n  const {t} = useTranslation()\n  const {\n    dispatch,\n    state: {\n      filters,\n      filtersVisible,\n      fullscreen,\n      result: {loading},\n      terms,\n    },\n  } = useSearchState()\n  const {types, query} = terms\n\n  const hasValidTerms = hasSearchableTerms({terms})\n  const ariaLabel =\n    ariaInputLabel || hasValidTerms\n      ? t('search.search-results-aria-label')\n      : t('search.recent-searches-aria-label')\n\n  const handleFiltersToggle = useCallback(\n    () => dispatch({type: 'FILTERS_VISIBLE_SET', visible: !filtersVisible}),\n    [dispatch, filtersVisible],\n  )\n  const handleQueryChange = useCallback(\n    (e: KeyboardEvent<HTMLInputElement>) =>\n      dispatch({type: 'TERMS_QUERY_SET', query: e.currentTarget.value}),\n    [dispatch],\n  )\n  const handleQueryClear = useCallback(() => {\n    dispatch({type: 'TERMS_QUERY_SET', query: ''})\n  }, [dispatch])\n\n  /**\n   * Always show filters on non-fullscreen mode\n   */\n  useEffect(() => {\n    if (!fullscreen) {\n      dispatch({type: 'FILTERS_VISIBLE_SET', visible: true})\n    }\n  }, [dispatch, fullscreen])\n\n  useEffect(() => {\n    isMountedRef.current = true\n  }, [])\n\n  const notificationBadgeVisible = filters.length > 0 || types.length > 0\n\n  return (\n    <Card flex=\"none\">\n      <Flex align=\"center\" flex={1} gap={fullscreen ? 2 : 1} padding={fullscreen ? 2 : 1}>\n        {/* (Fullscreen) Close button */}\n        {fullscreen && (\n          <Button\n            aria-label={t('search.action.close-search-aria-label')}\n            icon={ArrowLeftIcon}\n            mode=\"bleed\"\n            onClick={onClose}\n            size=\"large\"\n            tooltipProps={{content: t('search.action.close-search-aria-label')}}\n          />\n        )}\n\n        {/* Search field */}\n        <Box flex={1}>\n          <CustomTextInput\n            __unstable_disableFocusRing\n            $background={fullscreen}\n            $smallClearButton={fullscreen}\n            aria-label={ariaLabel}\n            autoComplete=\"off\"\n            border={false}\n            clearButton={!!query}\n            fontSize={[2, 2, 1]}\n            icon={loading ? AnimatedSpinnerIcon : SearchIcon}\n            onChange={handleQueryChange}\n            onClear={handleQueryClear}\n            placeholder={t('search.placeholder')}\n            radius={2}\n            ref={ref}\n            spellCheck={false}\n            value={query}\n          />\n        </Box>\n\n        {/* Filter toggle */}\n        {fullscreen && (\n          <FilterDiv>\n            <StatusButton\n              aria-expanded={filtersVisible}\n              aria-label={t('search.action.toggle-filters-aria-label', {\n                context: filtersVisible ? 'hide' : 'show',\n              })}\n              icon={ControlsIcon}\n              mode=\"bleed\"\n              onClick={handleFiltersToggle}\n              selected={filtersVisible}\n              size=\"large\"\n              tone={notificationBadgeVisible ? 'primary' : undefined}\n              tooltipProps={{\n                content: t('search.action.toggle-filters-label', {\n                  context: filtersVisible ? 'hide' : 'show',\n                }),\n              }}\n            />\n          </FilterDiv>\n        )}\n      </Flex>\n    </Card>\n  )\n})\n","import {Container, Stack, Text} from '@sanity/ui'\n\nimport {useTranslation} from '../../../../../i18n'\n\nexport function NoResults() {\n  const {t} = useTranslation()\n\n  return (\n    <Container width={0}>\n      <Stack aria-live=\"assertive\" space={4} paddingX={4} paddingY={5}>\n        <Text align=\"center\" muted size={1} weight=\"medium\">\n          {t('search.no-results-title')}\n        </Text>\n        <Text align=\"center\" muted size={1}>\n          {t('search.no-results-help-description')}\n        </Text>\n      </Stack>\n    </Container>\n  )\n}\n","import {WarningOutlineIcon} from '@sanity/icons'\nimport {Box, Flex} from '@sanity/ui'\n\nimport {TextWithTone} from '../../../../../components/textWithTone/TextWithTone'\nimport {useTranslation} from '../../../../../i18n'\n\nexport function SearchError() {\n  const {t} = useTranslation()\n\n  return (\n    <Flex\n      align=\"center\"\n      aria-live=\"assertive\"\n      direction=\"column\"\n      flex={1}\n      gap={3}\n      marginY={2}\n      padding={4}\n    >\n      <Box marginBottom={1}>\n        <TextWithTone tone=\"critical\">\n          <WarningOutlineIcon />\n        </TextWithTone>\n      </Box>\n      <TextWithTone size={2} tone=\"critical\" weight=\"medium\">\n        {t('search.error.unspecified-error-title')}\n      </TextWithTone>\n      <TextWithTone size={1} tone=\"critical\">\n        {t('search.error.unspecified-error-help-description')}\n      </TextWithTone>\n    </Flex>\n  )\n}\n","import {type SearchStrategy} from '@sanity/types'\n\nimport {type SearchOrdering} from '../types'\n\nexport const getOrderings: (context: {\n  searchStrategy?: SearchStrategy\n}) => Record<string, SearchOrdering> = ({searchStrategy}) => ({\n  createdAsc: {\n    ignoreScore: true,\n    sort: {direction: 'asc', field: '_createdAt'},\n    titleKey: 'search.ordering.created-ascending-label',\n  },\n  createdDesc: {\n    ignoreScore: true,\n    sort: {direction: 'desc', field: '_createdAt'},\n    titleKey: 'search.ordering.created-descending-label',\n  },\n  relevance: {\n    customMeasurementLabel: 'relevance',\n    ...(searchStrategy === 'groqLegacy' ? {sort: {direction: 'desc', field: '_updatedAt'}} : {}),\n    titleKey: 'search.ordering.best-match-label',\n  },\n  updatedAsc: {\n    ignoreScore: true,\n    sort: {direction: 'asc', field: '_updatedAt'},\n    titleKey: 'search.ordering.updated-ascending-label',\n  },\n  updatedDesc: {\n    ignoreScore: true,\n    sort: {direction: 'desc', field: '_updatedAt'},\n    titleKey: 'search.ordering.updated-descending-label',\n  },\n})\n","import {SortIcon} from '@sanity/icons'\nimport {Card, Flex, Menu, MenuDivider} from '@sanity/ui'\nimport {isEqual} from 'lodash'\nimport {useCallback, useId, useMemo} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Button, MenuButton, MenuItem} from '../../../../../../ui-components'\nimport {useTranslation} from '../../../../../i18n'\nimport {useWorkspace} from '../../../../workspace'\nimport {useSearchState} from '../contexts/search/useSearchState'\nimport {getOrderings} from '../definitions/getOrderings'\nimport {type SearchOrdering} from '../types'\n\ninterface SearchDivider {\n  type: 'divider'\n}\n\nconst SortMenuContentFlex = styled(Flex)`\n  box-sizing: border-box;\n`\n\nfunction isSearchDivider(item: SearchDivider | SearchOrdering): item is SearchDivider {\n  return (item as SearchDivider).type === 'divider'\n}\n\nfunction CustomMenuItem({ordering}: {ordering: SearchOrdering}) {\n  const {t} = useTranslation()\n  const {\n    dispatch,\n    state: {ordering: currentOrdering},\n  } = useSearchState()\n\n  const handleClick = useCallback(() => {\n    dispatch({ordering, type: 'ORDERING_SET'})\n  }, [dispatch, ordering])\n\n  const isSelected = useMemo(() => isEqual(currentOrdering, ordering), [currentOrdering, ordering])\n\n  return (\n    <MenuItem\n      onClick={handleClick}\n      pressed={isSelected}\n      tone=\"default\"\n      text={t(ordering.titleKey)}\n    />\n  )\n}\n\nexport function SortMenu() {\n  const {t} = useTranslation()\n  const {strategy: searchStrategy} = useWorkspace().search\n  const {\n    state: {ordering},\n  } = useSearchState()\n\n  const menuButtonId = useId()\n\n  const menuOrderings: (SearchDivider | SearchOrdering)[] = useMemo(() => {\n    const orderings = getOrderings({searchStrategy})\n    return [\n      orderings.relevance,\n      {type: 'divider'},\n      orderings.createdAsc,\n      orderings.createdDesc,\n      {type: 'divider'},\n      orderings.updatedAsc,\n      orderings.updatedDesc,\n    ]\n  }, [searchStrategy])\n\n  const currentMenuItem = menuOrderings.find(\n    (item): item is SearchOrdering => isEqual(ordering, item) && !isSearchDivider(item),\n  )\n\n  if (!currentMenuItem) {\n    return null\n  }\n\n  return (\n    <Card borderBottom>\n      <SortMenuContentFlex align=\"center\" flex={1} padding={2}>\n        <MenuButton\n          button={<Button mode=\"bleed\" icon={SortIcon} text={t(currentMenuItem.titleKey)} />}\n          id={menuButtonId || ''}\n          menu={\n            <Menu>\n              {menuOrderings.map((item, index) => {\n                if (isSearchDivider(item)) {\n                  // eslint-disable-next-line react/no-array-index-key\n                  return <MenuDivider key={index} />\n                }\n                return (\n                  <CustomMenuItem\n                    // eslint-disable-next-line react/no-array-index-key\n                    key={index}\n                    ordering={item}\n                  />\n                )\n              })}\n            </Menu>\n          }\n          placement=\"bottom-start\"\n          popover={{portal: true, radius: 2}}\n        />\n      </SortMenuContentFlex>\n    </Card>\n  )\n}\n","/* eslint-disable i18next/no-literal-string,@sanity/i18n/no-attribute-string-literals */\nimport {Card, type CardTone, Code, Inline, Stack} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {Tooltip} from '../../../../../../../../ui-components'\nimport {type WeightedHit} from '../../../../../../../search'\n\ninterface DebugScoreProps {\n  data: WeightedHit\n}\n\nconst DebugScoreCard = styled(Card)`\n  cursor: help;\n  left: 0;\n  position: absolute;\n  top: 0;\n`\n\nexport function DebugOverlay({data}: DebugScoreProps) {\n  const {score} = data\n\n  let tone: CardTone = 'default'\n  if (score <= 0.1) {\n    tone = 'critical'\n  } else if (score >= 0.5) {\n    tone = 'primary'\n  }\n\n  const matchingStories = data.stories.filter((story) => story.score > 0)\n\n  return (\n    <>\n      <Tooltip\n        content={\n          <Stack space={2}>\n            {matchingStories.length ? (\n              <>\n                {matchingStories.map((story) => (\n                  <Inline key={story.path} space={3}>\n                    <Code size={0} weight=\"medium\">\n                      {story.path}\n                    </Code>\n                    <Code size={0}>{story.why}</Code>\n                  </Inline>\n                ))}\n              </>\n            ) : (\n              <Code size={0}>No matches</Code>\n            )}\n          </Stack>\n        }\n        placement=\"bottom-start\"\n        portal\n      >\n        <DebugScoreCard padding={1} shadow={1} tone={tone}>\n          <Code size={0}>score: {score}</Code>\n        </DebugScoreCard>\n      </Tooltip>\n    </>\n  )\n}\n","import {type PreviewValue, type SchemaType, type SortOrdering} from '@sanity/types'\nimport {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {type Observable, of} from 'rxjs'\nimport {catchError, map} from 'rxjs/operators'\n\nimport {usePerspective} from '../perspective/usePerspective'\nimport {useDocumentPreviewStore} from '../store'\nimport {type Previewable} from './types'\n\nexport {useDocumentPreview as unstable_useValuePreview}\n\ninterface State {\n  isLoading: boolean\n  error?: Error\n  value?: PreviewValue\n}\nconst INITIAL_STATE: State = {\n  isLoading: true,\n}\n\nconst IDLE_STATE: State = {\n  isLoading: false,\n  value: {\n    title: undefined,\n    description: undefined,\n  },\n}\n/**\n * @internal\n * @deprecated FOR INTERNAL USE.\n */\nfunction useDocumentPreview(props: {\n  enabled?: boolean\n  ordering?: SortOrdering\n  schemaType?: SchemaType\n  value: unknown | undefined\n}): State {\n  const {enabled = true, ordering, schemaType, value: previewValue} = props || {}\n  const {observeForPreview} = useDocumentPreviewStore()\n  const {perspectiveStack} = usePerspective()\n  const observable = useMemo<Observable<State>>(() => {\n    // this will render previews as \"loaded\" (i.e. not in loading state) – typically with \"Untitled\" text\n    if (!enabled || !previewValue || !schemaType) return of(IDLE_STATE)\n\n    return observeForPreview(previewValue as Previewable, schemaType, {\n      perspective: perspectiveStack,\n      viewOptions: {ordering: ordering},\n    }).pipe(\n      map((event) => ({isLoading: false, value: event.snapshot || undefined})),\n      catchError((error) => of({isLoading: false, error})),\n    )\n  }, [enabled, previewValue, schemaType, observeForPreview, perspectiveStack, ordering])\n\n  return useObservable(observable, INITIAL_STATE)\n}\n","import {type SchemaType} from '@sanity/types'\nimport {Badge, Box, Flex} from '@sanity/ui'\nimport {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {styled} from 'styled-components'\n\nimport {type GeneralPreviewLayoutKey} from '../../../../../../../components'\nimport {DocumentStatus} from '../../../../../../../components/documentStatus'\nimport {DocumentStatusIndicator} from '../../../../../../../components/documentStatusIndicator'\nimport {type PerspectiveStack} from '../../../../../../../perspective/types'\nimport {DocumentPreviewPresence} from '../../../../../../../presence'\nimport {\n  getPreviewStateObservable,\n  getPreviewValueWithFallback,\n  SanityDefaultPreview,\n} from '../../../../../../../preview'\nimport {useDocumentVersionInfo} from '../../../../../../../releases'\nimport {type DocumentPresence, useDocumentPreviewStore} from '../../../../../../../store'\n\ninterface SearchResultItemPreviewProps {\n  documentId: string\n  documentType: string\n  layout?: GeneralPreviewLayoutKey\n  presence?: DocumentPresence[]\n  perspective?: PerspectiveStack\n  schemaType: SchemaType\n  showBadge?: boolean\n}\n\n/**\n * Temporary workaround: force all nested boxes on iOS to use `background-attachment: scroll`\n * to allow <Skeleton> components to render correctly within virtual lists.\n */\nconst SearchResultItemPreviewBox = styled(Box)`\n  @supports (-webkit-overflow-scrolling: touch) {\n    * [data-ui='Box'] {\n      background-attachment: scroll;\n    }\n  }\n`\n\n/**\n * @internal\n */\nexport function SearchResultItemPreview({\n  documentId,\n  documentType,\n  layout,\n  presence,\n  schemaType,\n  showBadge = true,\n  perspective,\n}: SearchResultItemPreviewProps) {\n  const documentPreviewStore = useDocumentPreviewStore()\n\n  const observable = useMemo(() => {\n    return getPreviewStateObservable(documentPreviewStore, schemaType, documentId, perspective)\n  }, [documentPreviewStore, schemaType, documentId, perspective])\n\n  const documentStub = useMemo(\n    () => ({_id: documentId, _type: documentType}),\n    [documentId, documentType],\n  )\n\n  const {isLoading, snapshot, original} = useObservable(observable, {\n    snapshot: null,\n    isLoading: true,\n    original: null,\n  })\n\n  const versionsInfo = useDocumentVersionInfo(documentId)\n\n  const status = useMemo(() => {\n    if (isLoading) return null\n    return (\n      <Flex align=\"center\" gap={3}>\n        {presence && presence.length > 0 && <DocumentPreviewPresence presence={presence} />}\n        {showBadge && <Badge>{schemaType.title}</Badge>}\n        <DocumentStatusIndicator\n          draft={versionsInfo.draft}\n          published={versionsInfo.published}\n          versions={versionsInfo.versions}\n        />\n      </Flex>\n    )\n  }, [\n    isLoading,\n    presence,\n    schemaType.title,\n    showBadge,\n    versionsInfo.draft,\n    versionsInfo.published,\n    versionsInfo.versions,\n  ])\n\n  const tooltip = (\n    <DocumentStatus\n      draft={versionsInfo.draft}\n      published={versionsInfo.published}\n      versions={versionsInfo.versions}\n    />\n  )\n\n  return (\n    <SearchResultItemPreviewBox>\n      <SanityDefaultPreview\n        {...getPreviewValueWithFallback({snapshot, original, fallback: documentStub})}\n        isPlaceholder={isLoading ?? true}\n        layout={layout || 'default'}\n        icon={schemaType.icon}\n        status={status}\n        tooltip={tooltip}\n      />\n    </SearchResultItemPreviewBox>\n  )\n}\n","import {type StackablePerspective} from '@sanity/client'\nimport {type SanityDocumentLike} from '@sanity/types'\nimport {Box, type ResponsiveMarginProps, type ResponsivePaddingProps} from '@sanity/ui'\nimport {type MouseEvent, useCallback, useEffect, useMemo, useState} from 'react'\nimport {useIntentLink} from 'sanity/router'\n\nimport {Tooltip} from '../../../../../../../../ui-components'\nimport {type GeneralPreviewLayoutKey, PreviewCard} from '../../../../../../../components'\nimport {useSchema} from '../../../../../../../hooks'\nimport {useTranslation} from '../../../../../../../i18n/hooks/useTranslation'\nimport {unstable_useValuePreview as useValuePreview} from '../../../../../../../preview/useValuePreview'\nimport {\n  type PermissionCheckResult,\n  useDocumentPresence,\n  useGrantsStore,\n} from '../../../../../../../store'\nimport {getPublishedId} from '../../../../../../../util/draftUtils'\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {SearchResultItemPreview} from './SearchResultItemPreview'\n\nexport type ItemSelectHandler = (item: Pick<SanityDocumentLike, '_id' | '_type' | 'title'>) => void\n\ninterface SearchResultItemProps extends ResponsiveMarginProps, ResponsivePaddingProps {\n  disableIntentLink?: boolean\n  documentId: string\n  documentType: string\n  layout?: GeneralPreviewLayoutKey\n  onClick?: (e: MouseEvent<HTMLElement>) => void\n  onItemSelect?: ItemSelectHandler\n  previewPerspective?: StackablePerspective[]\n}\n\nexport function SearchResultItem({\n  disableIntentLink,\n  documentId,\n  documentType,\n  layout,\n  onClick,\n  onItemSelect,\n  previewPerspective,\n  ...rest\n}: SearchResultItemProps) {\n  const schema = useSchema()\n  const type = schema.get(documentType)\n  const documentPresence = useDocumentPresence(documentId)\n  const params = useMemo(\n    () => ({id: getPublishedId(documentId), type: type?.name}),\n    [documentId, type?.name],\n  )\n\n  const {onClick: onIntentClick, href} = useIntentLink({\n    intent: 'edit',\n    params,\n  })\n  const {state} = useSearchState()\n  const {t} = useTranslation()\n  const grantsStore = useGrantsStore()\n  const [createPermission, setCreatePermission] = useState<PermissionCheckResult | null>(null)\n  const hasCreatePermission = createPermission?.granted\n\n  useEffect(() => {\n    if (state.canDisableAction) {\n      grantsStore\n        .checkDocumentPermission('create', {_id: documentId, _type: documentType})\n        .subscribe(setCreatePermission)\n    }\n  }, [documentId, documentType, grantsStore, state.canDisableAction])\n\n  // the current search result exists in the release provided by the search provider\n  const existsInRelease = state.disabledDocumentIds?.some((id) =>\n    id.includes(getPublishedId(documentId)),\n  )\n  // should the search items be disasabled\n  const disabledAction = (!hasCreatePermission && state.canDisableAction) || existsInRelease\n\n  const documentStub = useMemo(\n    () => ({_id: documentId, _type: documentType}),\n    [documentId, documentType],\n  )\n  const preview = useValuePreview({\n    enabled: true,\n    schemaType: type,\n    value: documentStub,\n  })\n\n  const handleClick = useCallback(\n    (e: MouseEvent<HTMLElement>) => {\n      onItemSelect?.({_id: documentId, _type: documentType, title: preview.value?.title})\n      if (!disableIntentLink) {\n        onIntentClick(e)\n      }\n      onClick?.(e)\n    },\n    [preview, onItemSelect, documentId, documentType, disableIntentLink, onClick, onIntentClick],\n  )\n\n  if (!type) return null\n\n  const content = (\n    <Box {...rest}>\n      <PreviewCard\n        as={disabledAction ? undefined : 'a'}\n        data-as=\"a\"\n        flex={1}\n        href={disabledAction || disableIntentLink ? undefined : href}\n        onClick={handleClick}\n        radius={2}\n        tabIndex={-1}\n        style={{\n          pointerEvents: disabledAction ? 'none' : undefined,\n          opacity: disabledAction ? 0.5 : 1,\n        }}\n      >\n        <SearchResultItemPreview\n          documentId={documentId}\n          documentType={documentType}\n          layout={layout}\n          perspective={previewPerspective}\n          presence={documentPresence}\n          schemaType={type}\n        />\n      </PreviewCard>\n    </Box>\n  )\n\n  const tooltipContent = existsInRelease\n    ? t('search.disabledItem')\n    : t('release.action.permission.error')\n\n  return disabledAction ? (\n    <Tooltip content={tooltipContent} placement=\"top\">\n      {content}\n    </Tooltip>\n  ) : (\n    content\n  )\n}\n","import {type StackablePerspective} from '@sanity/client'\nimport {Card, Flex} from '@sanity/ui'\nimport {type MouseEvent, useCallback} from 'react'\nimport {styled} from 'styled-components'\n\nimport {CommandList, type CommandListRenderItemCallback} from '../../../../../../components'\nimport {useTranslation} from '../../../../../../i18n'\nimport {type WeightedHit} from '../../../../../../search'\nimport {useSearchState} from '../../contexts/search/useSearchState'\nimport {useRecentSearchesStore} from '../../datastores/recentSearches'\nimport {NoResults} from '../NoResults'\nimport {SearchError} from '../SearchError'\nimport {SortMenu} from '../SortMenu'\nimport {DebugOverlay} from './item/DebugOverlay'\nimport {type ItemSelectHandler, SearchResultItem} from './item/SearchResultItem'\n\nconst VIRTUAL_LIST_SEARCH_RESULT_ITEM_HEIGHT = 57 // px\nconst VIRTUAL_LIST_OVERSCAN = 4\n\nconst SearchResultsInnerFlex = styled(Flex)<{$loadingFirstPage: boolean}>`\n  opacity: ${({$loadingFirstPage}) => ($loadingFirstPage ? 0.5 : 1)};\n  overflow-x: hidden;\n  overflow-y: auto;\n  position: relative;\n  transition: 300ms opacity;\n  width: 100%;\n`\n\ninterface SearchResultsProps {\n  disableIntentLink?: boolean\n  inputElement: HTMLInputElement | null\n  onItemSelect?: ItemSelectHandler\n  previewPerspective?: StackablePerspective[]\n}\n\nexport function SearchResults({\n  disableIntentLink,\n  inputElement,\n  onItemSelect,\n  previewPerspective,\n}: SearchResultsProps) {\n  const {\n    dispatch,\n    onClose,\n    setSearchCommandList,\n    state: {debug, filters, fullscreen, lastActiveIndex, result, terms, cursor},\n  } = useSearchState()\n  const {t} = useTranslation()\n  const recentSearchesStore = useRecentSearchesStore()\n\n  const hasSearchResults = !!result.hits.length\n  const hasNoSearchResults = !result.hits.length && result.loaded\n  const hasError = result.error\n\n  /**\n   * Add current search to recent searches, trigger child item click and close search\n   */\n  const handleSearchResultClick = useCallback(\n    (e: MouseEvent<HTMLElement>) => {\n      if (recentSearchesStore) {\n        recentSearchesStore.addSearch(terms, filters)\n      }\n      // We don't want to close the search if they are opening their result in a new tab\n      if (!e.metaKey && !e.ctrlKey) {\n        onClose?.()\n      }\n    },\n    [filters, onClose, recentSearchesStore, terms],\n  )\n\n  const handleEndReached = useCallback(() => {\n    dispatch({type: 'PAGE_INCREMENT'})\n  }, [dispatch])\n\n  const renderItem = useCallback<CommandListRenderItemCallback<WeightedHit>>(\n    (item) => {\n      return (\n        <>\n          <SearchResultItem\n            disableIntentLink={disableIntentLink}\n            documentId={item.hit._id || ''}\n            documentType={item.hit._type}\n            onClick={handleSearchResultClick}\n            onItemSelect={onItemSelect}\n            previewPerspective={previewPerspective}\n            paddingY={1}\n          />\n          {debug && <DebugOverlay data={item} />}\n        </>\n      )\n    },\n    [debug, disableIntentLink, handleSearchResultClick, onItemSelect, previewPerspective],\n  )\n\n  return (\n    <Flex>\n      <Card\n        borderTop={fullscreen || !!(hasError || hasSearchResults || hasNoSearchResults)}\n        flex={1}\n      >\n        <Flex direction=\"column\" height=\"fill\">\n          {/* Sort menu */}\n          {hasSearchResults && <SortMenu />}\n\n          {/* Results */}\n          <SearchResultsInnerFlex\n            $loadingFirstPage={result.loading && cursor === null}\n            aria-busy={result.loading}\n            flex={1}\n          >\n            {hasError ? (\n              <SearchError />\n            ) : (\n              <>\n                {hasSearchResults && (\n                  <CommandList\n                    activeItemDataAttr=\"data-hovered\"\n                    ariaLabel={t('search.search-results-label')}\n                    data-testid=\"search-results\"\n                    fixedHeight\n                    initialIndex={lastActiveIndex}\n                    inputElement={inputElement}\n                    itemHeight={VIRTUAL_LIST_SEARCH_RESULT_ITEM_HEIGHT}\n                    items={result.hits}\n                    overscan={VIRTUAL_LIST_OVERSCAN}\n                    onEndReached={handleEndReached}\n                    paddingX={2}\n                    paddingY={1}\n                    ref={setSearchCommandList}\n                    renderItem={renderItem}\n                  />\n                )}\n                {hasNoSearchResults && <NoResults />}\n              </>\n            )}\n          </SearchResultsInnerFlex>\n        </Flex>\n      </Card>\n    </Flex>\n  )\n}\n","import {type StackablePerspective} from '@sanity/client'\nimport {Card, Portal, useClickOutsideEvent, useLayer} from '@sanity/ui'\nimport {AnimatePresence, motion, type Transition, type Variants} from 'framer-motion'\nimport {useRef, useState} from 'react'\nimport FocusLock from 'react-focus-lock'\nimport {styled} from 'styled-components'\n\nimport {supportsTouch} from '../../../../../util'\nimport {\n  POPOVER_INPUT_PADDING,\n  POPOVER_MAX_HEIGHT,\n  POPOVER_MAX_WIDTH,\n  POPOVER_RADIUS,\n} from '../constants'\nimport {useSearchState} from '../contexts/search/useSearchState'\nimport {hasSearchableTerms} from '../utils/hasSearchableTerms'\nimport {SearchWrapper} from './common/SearchWrapper'\nimport {Filters} from './filters/Filters'\nimport {RecentSearches} from './recentSearches/RecentSearches'\nimport {SearchHeader} from './SearchHeader'\nimport {type ItemSelectHandler} from './searchResults/item/SearchResultItem'\nimport {SearchResults} from './searchResults/SearchResults'\n\n/**\n * @internal\n */\nexport interface SearchPopoverProps {\n  disableFocusLock?: boolean\n  disableIntentLink?: boolean\n  onClose: () => void\n  onItemSelect?: ItemSelectHandler\n  previewPerspective?: StackablePerspective[]\n  /**\n   * If provided, will trigger to open the search popover when user types hotkey + k\n   */\n  onOpen?: () => void\n  open: boolean\n}\n\nconst ANIMATION_TRANSITION: Transition = {\n  duration: 0.4,\n  type: 'spring',\n}\n\nconst CARD_VARIANTS: Variants = {\n  open: {opacity: 1, scale: 1, x: '-50%'},\n  closed: {opacity: 0, scale: 0.99, x: '-50%'},\n}\n\nconst OVERLAY_VARIANTS: Variants = {\n  open: {opacity: 1},\n  closed: {opacity: 0},\n}\n\nconst Y_POSITION = 12 // vh\n\nconst MotionOverlay = styled(motion.create(Card))`\n  background-color: var(--card-backdrop-color);\n  bottom: 0;\n  left: 0;\n  position: absolute;\n  right: 0;\n  top: 0;\n`\n\nconst SearchMotionCard = styled(motion.create(Card))`\n  display: flex !important;\n  flex-direction: column;\n  left: 50%;\n  max-height: min(\n    calc(100vh - ${Y_POSITION}vh - ${POPOVER_INPUT_PADDING}px),\n    ${POPOVER_MAX_HEIGHT}px\n  );\n  position: absolute;\n  top: ${Y_POSITION}vh;\n  width: min(calc(100vw - ${POPOVER_INPUT_PADDING * 2}px), ${POPOVER_MAX_WIDTH}px);\n`\n\n/**\n * @internal\n */\nexport function SearchPopover({\n  disableFocusLock,\n  disableIntentLink,\n  onClose,\n  onItemSelect,\n  onOpen,\n  previewPerspective,\n  open,\n}: SearchPopoverProps) {\n  const [inputElement, setInputElement] = useState<HTMLInputElement | null>(null)\n\n  const popoverElement = useRef<HTMLDivElement | null>(null)\n\n  const {isTopLayer, zIndex} = useLayer()\n\n  const {\n    onClose: onSearchClose,\n    state: {filtersVisible, terms},\n  } = useSearchState()\n\n  const hasValidTerms = hasSearchableTerms({terms})\n\n  /**\n   * Check for top-most layer to prevent closing if a portalled element (i.e. menu button) is active\n   */\n  useClickOutsideEvent(isTopLayer && open && !!onSearchClose && onSearchClose, () => [\n    popoverElement.current,\n  ])\n\n  return (\n    <SearchWrapper hasValidTerms={hasValidTerms} onClose={onClose} onOpen={onOpen} open={open}>\n      <AnimatePresence>\n        {open && (\n          <Portal>\n            <FocusLock autoFocus={!supportsTouch} disabled={disableFocusLock} returnFocus>\n              <MotionOverlay\n                animate=\"open\"\n                exit=\"closed\"\n                initial=\"closed\"\n                style={{zIndex}}\n                transition={ANIMATION_TRANSITION}\n                variants={OVERLAY_VARIANTS}\n              />\n\n              <SearchMotionCard\n                animate=\"open\"\n                exit=\"closed\"\n                initial=\"closed\"\n                overflow=\"hidden\"\n                radius={POPOVER_RADIUS}\n                ref={popoverElement}\n                shadow={2}\n                style={{zIndex}}\n                transition={ANIMATION_TRANSITION}\n                variants={CARD_VARIANTS}\n              >\n                <SearchHeader onClose={onClose} ref={setInputElement} />\n                {filtersVisible && (\n                  <Card borderTop flex=\"none\">\n                    <Filters />\n                  </Card>\n                )}\n                {hasValidTerms ? (\n                  <SearchResults\n                    inputElement={inputElement}\n                    onItemSelect={onItemSelect}\n                    disableIntentLink={disableIntentLink}\n                    previewPerspective={previewPerspective}\n                  />\n                ) : (\n                  <RecentSearches inputElement={inputElement} />\n                )}\n              </SearchMotionCard>\n            </FocusLock>\n          </Portal>\n        )}\n      </AnimatePresence>\n    </SearchWrapper>\n  )\n}\n","import {type SanityClient} from '@sanity/client'\nimport {DEFAULT_MAX_FIELD_DEPTH} from '@sanity/schema/_internal'\nimport {isFinite} from 'lodash'\nimport {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {type Observable, of} from 'rxjs'\nimport {catchError, map, shareReplay, startWith} from 'rxjs/operators'\n\nimport {useClient} from '../../../../../hooks'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../../../../studioClient'\nimport {useWorkspace} from '../../../../workspace'\n\n/** By default the API will return 0 = all fields */\nconst DEFAULT_API_FIELD_DEPTH = 0\n\n/**\n * @internal\n * @hidden\n */\nexport interface PartialIndexSettings {\n  partialIndexSettings: {\n    maxFieldDepth: number\n  }\n}\n\ninterface Settings {\n  isLoading: boolean\n  settings: PartialIndexSettings\n}\n\nconst INITIAL_LOADING_STATE: Settings = {\n  isLoading: true,\n  settings: {\n    partialIndexSettings: {\n      maxFieldDepth: DEFAULT_API_FIELD_DEPTH,\n    },\n  },\n}\n\n/**\n * Fetches the index settings for the current dataset, if any\n */\nfunction fetchMaxDepth({client}: {client: SanityClient}): Observable<PartialIndexSettings> {\n  const {projectId, dataset} = client.config()\n  return client.observable.request<PartialIndexSettings>({\n    uri: `/projects/${projectId}/datasets/${dataset}/settings/indexing`,\n    tag: 'search.getPartialIndexSettings',\n  })\n}\n\nconst cachedSettings: Map<string, Observable<PartialIndexSettings>> = new Map()\n\n/**\n * @internal\n * @hidden\n */\nexport function useSearchMaxFieldDepth(overrideClient?: SanityClient): number {\n  const isEnabled = useWorkspace().search?.unstable_partialIndexing?.enabled\n  const workspaceClient = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n  const client = useMemo(() => overrideClient || workspaceClient, [overrideClient, workspaceClient])\n  const dataset = useMemo(() => client.config().dataset, [client])!\n\n  if (!isEnabled) {\n    cachedSettings.set(dataset, of(INITIAL_LOADING_STATE.settings))\n  }\n\n  if (!cachedSettings.has(dataset)) {\n    cachedSettings.set(dataset, fetchMaxDepth({client}).pipe(shareReplay()))\n  }\n\n  const indexSettingsObservable = useMemo(\n    () =>\n      cachedSettings.get(dataset)!.pipe(\n        map((settings) => ({\n          isLoading: false,\n          settings,\n        })),\n        startWith(INITIAL_LOADING_STATE),\n        catchError((err: Error) => {\n          console.error(err)\n          return of({\n            isLoading: false,\n            enabled: true,\n            settings: {partialIndexSettings: {maxFieldDepth: DEFAULT_API_FIELD_DEPTH}},\n          })\n        }),\n      ),\n    [dataset],\n  )\n  const indexSettings = useObservable(indexSettingsObservable, INITIAL_LOADING_STATE)\n\n  const maxFieldDepth = indexSettings?.settings?.partialIndexSettings?.maxFieldDepth\n\n  if (!isFinite(maxFieldDepth)) {\n    return DEFAULT_MAX_FIELD_DEPTH\n  }\n\n  return Math.min(maxFieldDepth, DEFAULT_MAX_FIELD_DEPTH)\n}\n","import {type Schema} from '@sanity/types'\nimport {isEqual} from 'lodash'\nimport {useCallback, useMemo, useState} from 'react'\nimport {useObservableEvent} from 'react-rx'\nimport {concat, EMPTY, iif, type Observable, of, timer} from 'rxjs'\nimport {\n  catchError,\n  debounce,\n  distinctUntilChanged,\n  filter,\n  map,\n  scan,\n  switchMap,\n  tap,\n} from 'rxjs/operators'\n\nimport {useClient} from '../../../../../hooks'\nimport {\n  createSearch,\n  type SearchHit,\n  type SearchOptions,\n  type SearchTerms,\n} from '../../../../../search'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../../../../studioClient'\nimport {useWorkspace} from '../../../../workspace'\nimport {type SearchState} from '../types'\nimport {hasSearchableTerms} from '../utils/hasSearchableTerms'\nimport {getSearchableOmnisearchTypes} from '../utils/selectors'\nimport {useSearchMaxFieldDepth} from './useSearchMaxFieldDepth'\n\ninterface SearchRequest {\n  debounceTime?: number\n  options?: SearchOptions\n  terms: SearchTerms\n}\n\nconst DEFAULT_DEBOUNCE_TIME = 300 // ms\n\nconst INITIAL_SEARCH_STATE: SearchState = {\n  error: null,\n  hits: [],\n  loading: false,\n  terms: {\n    query: '',\n    types: [],\n  },\n}\n\nfunction nonNullable<T>(v: T): v is NonNullable<T> {\n  return v !== null\n}\n\nfunction sanitizeRequest(request: SearchRequest) {\n  return {\n    ...request,\n    terms: {\n      ...request.terms,\n      filter: request.terms.filter?.trim(),\n      query: request.terms.query.trim(),\n    },\n  }\n}\n\nexport function useSearch({\n  allowEmptyQueries,\n  initialState,\n  onComplete,\n  onError,\n  onStart,\n  schema,\n}: {\n  allowEmptyQueries?: boolean\n  initialState: SearchState\n  onComplete?: (result: {hits: SearchHit[]; nextCursor: string | undefined}) => void\n  onError?: (error: Error) => void\n  onStart?: () => void\n  schema: Schema\n}): {\n  handleSearch: (request: SearchRequest) => void\n  searchState: SearchState\n} {\n  const [searchState, setSearchState] = useState(initialState)\n  const client = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n  const maxFieldDepth = useSearchMaxFieldDepth()\n  const {strategy} = useWorkspace().search\n\n  const search = useMemo(\n    () =>\n      createSearch(getSearchableOmnisearchTypes(schema), client, {\n        tag: 'search.global',\n        unique: true,\n        strategy,\n        maxDepth: maxFieldDepth,\n      }),\n    [schema, client, strategy, maxFieldDepth],\n  )\n\n  const handleQueryChange = useObservableEvent((inputValue$: Observable<SearchRequest | null>) => {\n    return inputValue$.pipe(\n      // Ignore null values\n      filter(nonNullable),\n      // Sanitize request (trim query and filter)\n      map(sanitizeRequest),\n      // Only emit when values have changed\n      distinctUntilChanged(isEqual),\n      // Debounce requests\n      debounce((request) => timer(request?.debounceTime || DEFAULT_DEBOUNCE_TIME)),\n      // Trigger `onStart` callback\n      tap(onStart),\n      switchMap((request) => {\n        return concat(\n          // Emit loading start\n          of({\n            ...INITIAL_SEARCH_STATE,\n            loading: true,\n            options: request.options,\n            terms: request.terms,\n          }),\n          // Conditionally trigger search ONLY if we have valid searchable terms.\n          // Typically, search terms are valid if either query, filter or selected types is non-empty.\n          // There are exceptions (e.g. searching within <AutoComplete> components) where empty queries are permitted,\n          // which is what `allowEmptyQueries` is used for.\n          iif(\n            () => hasSearchableTerms({allowEmptyQueries, terms: request.terms}),\n            // If we have a valid search, run async fetch, map results and trigger `onComplete` / `onError` callbacks\n            search(request.terms, request.options).pipe(\n              tap(({hits, nextCursor}) => onComplete?.({hits, nextCursor})),\n              catchError((error) => {\n                onError?.(error)\n                return of({\n                  ...INITIAL_SEARCH_STATE,\n                  error,\n                  loading: false,\n                  options: request.options,\n                  terms: request.terms,\n                })\n              }),\n            ),\n            // If there is no valid search, emit an empty observable and trigger `onComplete` event\n            of(EMPTY).pipe(tap(() => onComplete?.({hits: [], nextCursor: undefined}))),\n          ),\n          // Emit loading completed\n          of({loading: false}),\n        )\n      }),\n      scan((prevState, nextState): SearchState => {\n        return {...prevState, ...nextState}\n      }, INITIAL_SEARCH_STATE),\n      // Update local search state\n      tap(setSearchState),\n    )\n  })\n\n  const handleSearch = useCallback(\n    (searchRequest: SearchRequest) => handleQueryChange(searchRequest),\n    [handleQueryChange],\n  )\n\n  return {handleSearch, searchState}\n}\n","import {type SearchTerms} from '../../../../../search'\nimport {type RecentSearch} from '../datastores/recentSearches'\n\nexport function isRecentSearchTerms(terms: SearchTerms | RecentSearch): terms is RecentSearch {\n  return typeof (terms as RecentSearch).__recent !== 'undefined'\n}\n","import debug from 'debug'\n\nimport {DEBUG_FRAGMENT} from '../constants'\n\nconst rootName = 'core:studio:navbar:search:'\n\nexport default debug(rootName)\nexport function debugWithName(name: string): debug.Debugger {\n  const namespace = `${rootName}${name}`\n  if (debug && debug.enabled(namespace)) {\n    return debug(namespace)\n  }\n  return debug(rootName)\n}\n\nexport function isDebugMode(): boolean {\n  return typeof window === 'undefined'\n    ? false\n    : window.location.hash.slice(1).split(';').includes(DEBUG_FRAGMENT)\n}\n","import {type CurrentUser, type SchemaType, type SearchStrategy} from '@sanity/types'\n\nimport {type SearchHit, type SearchTerms} from '../../../../../../search'\nimport {removeDupes} from '../../../../../../util/draftUtils'\nimport {type RecentSearch} from '../../datastores/recentSearches'\nimport {type SearchFieldDefinitionDictionary} from '../../definitions/fields'\nimport {type SearchFilterDefinitionDictionary} from '../../definitions/filters'\nimport {getOrderings} from '../../definitions/getOrderings'\nimport {\n  getOperatorDefinition,\n  getOperatorInitialValue,\n  type SearchOperatorDefinitionDictionary,\n} from '../../definitions/operators'\nimport {type SearchFilter, type SearchOrdering} from '../../types'\nimport {debugWithName, isDebugMode} from '../../utils/debug'\nimport {\n  generateFilterQuery,\n  getFieldFromFilter,\n  getFilterKey,\n  narrowDocumentTypes,\n} from '../../utils/filterUtils'\nimport {isRecentSearchTerms} from '../../utils/isRecentSearchTerms'\nimport {sortTypes} from '../../utils/selectors'\n\ninterface PaginationState {\n  cursor: string | null\n  nextCursor: string | null\n}\n\nexport type SearchReducerState = PaginationState & {\n  currentUser: CurrentUser | null\n  debug: boolean\n  definitions: SearchDefinitions\n  documentTypesNarrowed: string[]\n  filters: SearchFilter[]\n  filtersVisible: boolean\n  fullscreen?: boolean\n  lastAddedFilter?: SearchFilter | null\n  lastActiveIndex: number\n  ordering: SearchOrdering\n  result: SearchResult\n  terms: RecentSearch | SearchTerms\n  strategy?: SearchStrategy\n  disabledDocumentIds?: string[]\n  canDisableAction?: boolean\n}\n\nexport interface SearchDefinitions {\n  fields: SearchFieldDefinitionDictionary\n  filters: SearchFilterDefinitionDictionary\n  operators: SearchOperatorDefinitionDictionary\n}\n\nexport interface SearchResult {\n  error: Error | null\n  hasLocal: boolean\n  hits: SearchHit[]\n  loaded: boolean\n  loading: boolean\n}\n\nexport interface InitialSearchState {\n  currentUser: CurrentUser | null\n  fullscreen?: boolean\n  definitions: SearchDefinitions\n  pagination: PaginationState\n  strategy?: SearchStrategy\n}\n\nexport function initialSearchState({\n  currentUser,\n  fullscreen,\n  definitions,\n  pagination,\n  strategy,\n}: InitialSearchState): SearchReducerState {\n  return {\n    currentUser,\n    debug: isDebugMode(),\n    documentTypesNarrowed: [],\n    filters: [],\n    filtersVisible: true,\n    fullscreen,\n    lastActiveIndex: -1,\n    ordering: getOrderings({searchStrategy: strategy}).relevance,\n    ...pagination,\n    result: {\n      error: null,\n      hasLocal: false,\n      hits: [],\n      loaded: false,\n      loading: false,\n    },\n    terms: {\n      query: '',\n      types: [],\n    },\n    definitions,\n    strategy,\n  }\n}\n\nexport type FiltersVisibleSet = {type: 'FILTERS_VISIBLE_SET'; visible: boolean}\nexport type LastActiveIndexSet = {type: 'LAST_ACTIVE_INDEX_SET'; index: number}\nexport type PageIncrement = {type: 'PAGE_INCREMENT'}\nexport type OrderingReset = {type: 'ORDERING_RESET'}\nexport type OrderingSet = {ordering: SearchOrdering; type: 'ORDERING_SET'}\nexport type SearchClear = {type: 'SEARCH_CLEAR'}\nexport type SearchRequestComplete = {\n  type: 'SEARCH_REQUEST_COMPLETE'\n  hits: SearchHit[]\n  nextCursor: string | undefined\n}\nexport type SearchRequestError = {type: 'SEARCH_REQUEST_ERROR'; error: Error}\nexport type SearchRequestStart = {type: 'SEARCH_REQUEST_START'}\nexport type TermsFiltersAdd = {filter: SearchFilter; type: 'TERMS_FILTERS_ADD'}\nexport type TermsFiltersClear = {type: 'TERMS_FILTERS_CLEAR'}\nexport type TermsFiltersRemove = {filterKey: string; type: 'TERMS_FILTERS_REMOVE'}\nexport type TermsFiltersSetOperator = {\n  filterKey: string\n  operatorType: string\n  type: 'TERMS_FILTERS_SET_OPERATOR'\n}\nexport type TermsFiltersSetValue = {\n  filterKey: string\n  type: 'TERMS_FILTERS_SET_VALUE'\n  value?: any\n}\nexport type TermsQuerySet = {type: 'TERMS_QUERY_SET'; query: string}\nexport type TermsSet = {type: 'TERMS_SET'; filters?: SearchFilter[]; terms: SearchTerms}\nexport type TermsTypeAdd = {type: 'TERMS_TYPE_ADD'; schemaType: SchemaType}\nexport type TermsTypeRemove = {type: 'TERMS_TYPE_REMOVE'; schemaType: SchemaType}\nexport type TermsTypesClear = {type: 'TERMS_TYPES_CLEAR'}\n\nexport type SearchAction =\n  | FiltersVisibleSet\n  | LastActiveIndexSet\n  | OrderingReset\n  | OrderingSet\n  | PageIncrement\n  | SearchClear\n  | SearchRequestComplete\n  | SearchRequestError\n  | SearchRequestStart\n  | TermsFiltersAdd\n  | TermsFiltersClear\n  | TermsFiltersSetOperator\n  | TermsFiltersRemove\n  | TermsFiltersSetValue\n  | TermsQuerySet\n  | TermsSet\n  | TermsTypeAdd\n  | TermsTypeRemove\n  | TermsTypesClear\n\nconst debug = debugWithName('reducer')\n\nexport function searchReducer(state: SearchReducerState, action: SearchAction): SearchReducerState {\n  let prefix = '🔍'\n  if (action.type.startsWith('SEARCH_REQUEST')) {\n    prefix = '🚨'\n  }\n  if (action.type.startsWith('RECENT_SEARCHES')) {\n    prefix = '💾'\n  }\n  debug(prefix, action)\n\n  switch (action.type) {\n    case 'FILTERS_VISIBLE_SET':\n      return {\n        ...state,\n        filtersVisible: action.visible,\n      }\n    case 'LAST_ACTIVE_INDEX_SET':\n      return {\n        ...state,\n        lastActiveIndex: action.index,\n      }\n    case 'ORDERING_RESET':\n      return {\n        ...state,\n        ordering: getOrderings({searchStrategy: state.strategy}).relevance,\n        terms: stripRecent(state.terms),\n        cursor: null,\n        nextCursor: null,\n        result: {\n          ...state.result,\n          hasLocal: false,\n        },\n      }\n    case 'ORDERING_SET':\n      return {\n        ...state,\n        ordering: action.ordering,\n        terms: stripRecent(state.terms),\n        cursor: null,\n        nextCursor: null,\n        result: {\n          ...state.result,\n          hasLocal: false,\n        },\n      }\n    case 'PAGE_INCREMENT':\n      return {\n        ...state,\n        cursor: state.nextCursor ?? state.cursor,\n        nextCursor: null,\n        terms: stripRecent(state.terms),\n      }\n    case 'SEARCH_CLEAR':\n      return {\n        ...state,\n        cursor: null,\n        nextCursor: null,\n        result: {\n          ...state.result,\n          hasLocal: false,\n          hits: [],\n        },\n      }\n    case 'SEARCH_REQUEST_COMPLETE':\n      return {\n        ...state,\n        nextCursor: action.nextCursor ?? null,\n        result: {\n          ...state.result,\n          error: null,\n          hasLocal: true,\n          hits: state.result.hasLocal\n            ? removeDupes([...state.result.hits, ...action.hits].map(({hit}) => hit)).map(\n                (hit) => ({hit}),\n              )\n            : action.hits,\n          loaded: true,\n          loading: false,\n        },\n      }\n    case 'SEARCH_REQUEST_ERROR':\n      return {\n        ...state,\n        result: {\n          ...state.result,\n          error: action.error,\n          loaded: false,\n          loading: false,\n        },\n      }\n    case 'SEARCH_REQUEST_START':\n      return {\n        ...state,\n        result: {\n          ...state.result,\n          loaded: false,\n          loading: true,\n        },\n      }\n    case 'TERMS_FILTERS_ADD': {\n      const newFilter: SearchFilter = {\n        ...action.filter,\n        value: getOperatorInitialValue(state.definitions.operators, action.filter.operatorType),\n      }\n      const filters = [...state.filters, newFilter]\n\n      return {\n        ...state,\n        documentTypesNarrowed: narrowDocumentTypes({\n          fieldDefinitions: state.definitions.fields,\n          filters,\n          types: state.terms.types,\n        }),\n        filters,\n        lastAddedFilter: newFilter,\n        cursor: null,\n        nextCursor: null,\n        terms: {\n          ...state.terms,\n          filter: generateFilterQuery({\n            fieldDefinitions: state.definitions.fields,\n            filterDefinitions: state.definitions.filters,\n            filters,\n            operatorDefinitions: state.definitions.operators,\n          }),\n        },\n        result: {\n          ...state.result,\n          hasLocal: false,\n        },\n      }\n    }\n    case 'TERMS_FILTERS_CLEAR': {\n      const filters: SearchFilter[] = []\n\n      return {\n        ...state,\n        documentTypesNarrowed: narrowDocumentTypes({\n          fieldDefinitions: state.definitions.fields,\n          filters,\n          types: state.terms.types,\n        }),\n        filters,\n        cursor: null,\n        nextCursor: null,\n        terms: {\n          ...state.terms,\n          filter: generateFilterQuery({\n            fieldDefinitions: state.definitions.fields,\n            filterDefinitions: state.definitions.filters,\n            filters,\n            operatorDefinitions: state.definitions.operators,\n          }),\n        },\n        result: {\n          ...state.result,\n          hasLocal: false,\n        },\n      }\n    }\n    case 'TERMS_FILTERS_REMOVE': {\n      const index = state.filters.findIndex((filter) => getFilterKey(filter) === action.filterKey)\n\n      const filters = [\n        ...state.filters.slice(0, index), //\n        ...state.filters.slice(index + 1),\n      ]\n\n      return {\n        ...state,\n        documentTypesNarrowed: narrowDocumentTypes({\n          fieldDefinitions: state.definitions.fields,\n          filters,\n          types: state.terms.types,\n        }),\n        filters,\n        cursor: null,\n        nextCursor: null,\n        terms: {\n          ...state.terms,\n          filter: generateFilterQuery({\n            fieldDefinitions: state.definitions.fields,\n            filterDefinitions: state.definitions.filters,\n            filters,\n            operatorDefinitions: state.definitions.operators,\n          }),\n        },\n        result: {\n          ...state.result,\n          hasLocal: false,\n        },\n      }\n    }\n    case 'TERMS_FILTERS_SET_OPERATOR': {\n      // Compare input components between current and target operators, and update\n      // target filter value if it has changed.\n      const matchedFilter = state.filters.find(\n        (filter) => getFilterKey(filter) === action.filterKey,\n      )\n      const currentOperator = getOperatorDefinition(\n        state.definitions.operators,\n        matchedFilter?.operatorType,\n      )\n      const nextOperator = getOperatorDefinition(state.definitions.operators, action.operatorType)\n      const nextInitialValue = nextOperator?.initialValue\n      const inputComponentChanged = currentOperator?.inputComponent != nextOperator?.inputComponent\n\n      const filters = state.filters.map((filter) => {\n        if (getFilterKey(filter) === action.filterKey) {\n          return {\n            ...filter,\n            operatorType: action.operatorType,\n            ...(inputComponentChanged ? {value: nextInitialValue} : {}),\n          }\n        }\n        return filter\n      })\n\n      return {\n        ...state,\n        filters,\n        cursor: null,\n        nextCursor: null,\n        terms: {\n          ...state.terms,\n          filter: generateFilterQuery({\n            fieldDefinitions: state.definitions.fields,\n            filterDefinitions: state.definitions.filters,\n            filters,\n            operatorDefinitions: state.definitions.operators,\n          }),\n        },\n        result: {\n          ...state.result,\n          hasLocal: false,\n        },\n      }\n    }\n    case 'TERMS_FILTERS_SET_VALUE': {\n      const filters = state.filters.map((filter) => {\n        if (getFilterKey(filter) === action.filterKey) {\n          return {\n            ...filter,\n            value: action.value,\n          }\n        }\n        return filter\n      })\n\n      return {\n        ...state,\n        filters,\n        cursor: null,\n        nextCursor: null,\n        terms: {\n          ...state.terms,\n          filter: generateFilterQuery({\n            fieldDefinitions: state.definitions.fields,\n            filterDefinitions: state.definitions.filters,\n            filters,\n            operatorDefinitions: state.definitions.operators,\n          }),\n        },\n        result: {\n          ...state.result,\n          hasLocal: false,\n        },\n      }\n    }\n    case 'TERMS_QUERY_SET':\n      return {\n        ...state,\n        cursor: null,\n        nextCursor: null,\n        result: {\n          ...state.result,\n          loaded: false,\n          hasLocal: false,\n        },\n        terms: stripRecent({\n          ...state.terms,\n          query: action.query,\n        }),\n      }\n    case 'TERMS_SET': {\n      const filters = action.filters || []\n      const types = [\n        ...(state.terms.types || []), //\n        ...action.terms.types,\n      ].sort(sortTypes)\n\n      return {\n        ...state,\n        documentTypesNarrowed: narrowDocumentTypes({\n          fieldDefinitions: state.definitions.fields,\n          filters,\n          types,\n        }),\n        filters,\n        lastAddedFilter: null,\n        cursor: null,\n        nextCursor: null,\n        result: {\n          ...state.result,\n          loaded: false,\n          hasLocal: false,\n        },\n        terms: {\n          ...action.terms,\n          filter: generateFilterQuery({\n            fieldDefinitions: state.definitions.fields,\n            filterDefinitions: state.definitions.filters,\n            filters,\n            operatorDefinitions: state.definitions.operators,\n          }),\n        },\n      }\n    }\n    case 'TERMS_TYPE_ADD': {\n      const types = [\n        ...(state.terms.types || []), //\n        action.schemaType,\n      ].sort(sortTypes)\n\n      // Get narrowed document types based on selected types only (ignore filters)\n      const documentTypesNarrowed = narrowDocumentTypes({\n        fieldDefinitions: state.definitions.fields,\n        filters: [],\n        types,\n      })\n\n      // Remove field filters that don't qualify under the above narrowed document types.\n      // Non field-filters are always included.\n      const filters = state.filters.filter((f) => {\n        const fieldDefinition = getFieldFromFilter(state.definitions.fields, f)\n        if (fieldDefinition) {\n          // An empty documentTypes array denotes support across all fields.\n          if (fieldDefinition.documentTypes.length === 0) {\n            return true\n          }\n          return documentTypesNarrowed.every(\n            (type) => fieldDefinition.documentTypes.findIndex((t) => t === type) > -1,\n          )\n        }\n        return true\n      })\n\n      return {\n        ...state,\n        documentTypesNarrowed,\n        filters,\n        cursor: null,\n        nextCursor: null,\n        result: {\n          ...state.result,\n          loaded: false,\n          hasLocal: false,\n        },\n        terms: stripRecent({\n          ...state.terms,\n          filter: generateFilterQuery({\n            fieldDefinitions: state.definitions.fields,\n            filterDefinitions: state.definitions.filters,\n            operatorDefinitions: state.definitions.operators,\n            filters,\n          }),\n          types,\n        }),\n      }\n    }\n    case 'TERMS_TYPE_REMOVE': {\n      const types = (state.terms.types || []).filter((s) => s !== action.schemaType)\n\n      return {\n        ...state,\n        documentTypesNarrowed: narrowDocumentTypes({\n          fieldDefinitions: state.definitions.fields,\n          filters: state.filters,\n          types,\n        }),\n        cursor: null,\n        nextCursor: null,\n        result: {\n          ...state.result,\n          loaded: false,\n          hasLocal: false,\n        },\n        terms: stripRecent({\n          ...state.terms,\n          types,\n        }),\n      }\n    }\n    case 'TERMS_TYPES_CLEAR': {\n      const types: SchemaType[] = []\n\n      return {\n        ...state,\n        documentTypesNarrowed: narrowDocumentTypes({\n          fieldDefinitions: state.definitions.fields,\n          filters: state.filters,\n          types,\n        }),\n        cursor: null,\n        nextCursor: null,\n        result: {\n          ...state.result,\n          loaded: false,\n          hasLocal: false,\n        },\n        terms: stripRecent({\n          ...state.terms,\n          types: [],\n        }),\n      }\n    }\n    default:\n      return state\n  }\n}\n\n/**\n * This function is used to strip __recent from terms, generally whenever there's a change in\n * search terms or options that would otherwise trigger an additional search request.\n * (e.g. updating the search query, changing a sort filter, adding / removing document types)\n *\n * This is done so we can better disambiguate between requests sent as a result of clicking a 'recent search'\n * for purposes of measurement.\n *\n */\n// @todo: remove this (and associated tests) once client-side instrumentation is available\nfunction stripRecent(terms: RecentSearch | SearchTerms) {\n  if (isRecentSearchTerms(terms)) {\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    const {__recent, ...rest} = terms\n    return rest\n  }\n  return terms\n}\n","import {isEqual} from 'lodash'\nimport {type ReactNode, useEffect, useMemo, useReducer, useRef, useState} from 'react'\nimport {SearchContext} from 'sanity/_singletons'\n\nimport {type CommandListHandle} from '../../../../../../components'\nimport {useSchema} from '../../../../../../hooks'\nimport {useActiveReleases} from '../../../../../../releases/store/useActiveReleases'\nimport {type SearchTerms} from '../../../../../../search'\nimport {useCurrentUser} from '../../../../../../store'\nimport {useSource} from '../../../../../source'\nimport {SEARCH_LIMIT} from '../../constants'\nimport {type RecentSearch} from '../../datastores/recentSearches'\nimport {createFieldDefinitionDictionary, createFieldDefinitions} from '../../definitions/fields'\nimport {createFilterDefinitionDictionary} from '../../definitions/filters'\nimport {createOperatorDefinitionDictionary} from '../../definitions/operators'\nimport {useSearch} from '../../hooks/useSearch'\nimport {type SearchOrdering} from '../../types'\nimport {validateFilter} from '../../utils/filterUtils'\nimport {hasSearchableTerms} from '../../utils/hasSearchableTerms'\nimport {isRecentSearchTerms} from '../../utils/isRecentSearchTerms'\nimport {initialSearchState, searchReducer} from './reducer'\n\ninterface SearchProviderProps {\n  children?: ReactNode\n  fullscreen?: boolean\n  /**\n   * list of perspective ids\n   * if provided, then it means that the search is being done using a specific list of perspectives\n   */\n\n  /**\n   * list of document ids that should be be disabled in the search\n   * if they are found to exist in the search results\n   * if provided, then ids should be checked against this list\n   */\n  disabledDocumentIds?: string[]\n  /**\n   * If true, the search action (such as adding a document to a release list, for example) should be allowed to disable under the right conditions\n   */\n  canDisableAction?: boolean\n}\n\n/**\n * @internal\n */\nexport function SearchProvider({\n  children,\n  fullscreen,\n  disabledDocumentIds,\n  canDisableAction,\n}: SearchProviderProps) {\n  const [onClose, setOnClose] = useState<(() => void) | null>(null)\n  const [searchCommandList, setSearchCommandList] = useState<CommandListHandle | null>(null)\n  const {data: releases} = useActiveReleases()\n  const schema = useSchema()\n  const currentUser = useCurrentUser()\n  const {\n    search: {operators, filters, strategy},\n  } = useSource()\n\n  // Create field, filter and operator dictionaries\n  const {fieldDefinitions, filterDefinitions, operatorDefinitions} = useMemo(() => {\n    return {\n      fieldDefinitions: createFieldDefinitionDictionary(createFieldDefinitions(schema, filters)),\n      filterDefinitions: createFilterDefinitionDictionary(filters),\n      operatorDefinitions: createOperatorDefinitionDictionary(operators),\n    }\n  }, [filters, operators, schema])\n\n  const initialState = useMemo(\n    () =>\n      initialSearchState({\n        currentUser,\n        fullscreen,\n        definitions: {\n          fields: fieldDefinitions,\n          operators: operatorDefinitions,\n          filters: filterDefinitions,\n        },\n        pagination: {\n          cursor: null,\n          nextCursor: null,\n        },\n        strategy,\n      }),\n    [currentUser, fullscreen, fieldDefinitions, operatorDefinitions, filterDefinitions, strategy],\n  )\n  const [state, dispatch] = useReducer(searchReducer, initialState)\n\n  const {documentTypesNarrowed, filters: currentFilters, ordering, cursor, result, terms} = state\n\n  const isMountedRef = useRef(false)\n  const previousOrderingRef = useRef<SearchOrdering>(initialState.ordering)\n  const previousCursorRef = useRef<string | null>(initialState.cursor)\n  const previousTermsRef = useRef<SearchTerms | RecentSearch>(initialState.terms)\n\n  const {handleSearch, searchState} = useSearch({\n    initialState: {...result, terms},\n    onComplete: (searchResult) => dispatch({...searchResult, type: 'SEARCH_REQUEST_COMPLETE'}),\n    onError: (error) => dispatch({error, type: 'SEARCH_REQUEST_ERROR'}),\n    onStart: () => dispatch({type: 'SEARCH_REQUEST_START'}),\n    schema,\n  })\n\n  const hasValidTerms = hasSearchableTerms({terms})\n\n  // Get a narrowed list of document types to search on based on any current active filters.\n  const documentTypes = documentTypesNarrowed.map((documentType) => schema.get(documentType)!)\n\n  // Get a list of 'complete' filters (filters that return valid values)\n  const completeFilters = currentFilters.filter((filter) =>\n    validateFilter({\n      fieldDefinitions,\n      filter,\n      filterDefinitions,\n      operatorDefinitions,\n    }),\n  )\n\n  /**\n   * Trigger search when any terms (query or selected types) OR current pageIndex has changed\n   *\n   * Note that we compare inbound terms with our last local snapshot, and not the value of\n   * `searchState` from `useSearch`, as that only contains a reference to the last fully _executed_ request.\n   * There are cases were we may not run searches when terms change (e.g. when search terms are empty / invalid).\n   */\n  useEffect(() => {\n    const orderingChanged = !isEqual(ordering, previousOrderingRef.current)\n    const cursorChanged = cursor !== previousCursorRef.current\n    const termsChanged = !isEqual(terms, previousTermsRef.current)\n\n    if (orderingChanged || cursorChanged || termsChanged) {\n      let sortLabel = 'findability-sort:'\n\n      if (ordering?.customMeasurementLabel || ordering.sort) {\n        // Use a custom label if provided, otherwise return field and direction, e.g. `_updatedAt desc`\n        sortLabel +=\n          ordering?.customMeasurementLabel || `${ordering.sort?.field} ${ordering.sort?.direction}`\n      }\n\n      handleSearch({\n        options: {\n          // Comments prepended to each query for future measurement\n          comments: [\n            ...(isRecentSearchTerms(terms)\n              ? [`findability-recent-search:${terms.__recent.index}`]\n              : []),\n            `findability-selected-types:${terms.types.length}`,\n            sortLabel,\n            `findability-source: global`,\n            `findability-filter-count:${completeFilters.length}`,\n          ],\n          // `groq2024` supports pagination. Therefore, fetch fewer results.\n          limit: strategy === 'groq2024' ? 25 : SEARCH_LIMIT,\n          skipSortByScore: ordering.ignoreScore,\n          ...(ordering.sort ? {sort: [ordering.sort]} : {}),\n          cursor: cursor || undefined,\n          perspective: 'raw',\n        },\n        terms: {\n          ...terms,\n          // Narrow document type search\n          ...(documentTypes ? {types: documentTypes} : {}),\n        },\n      })\n\n      // Update previousCursorRef snapshot only on a valid search request\n      if (cursorChanged) {\n        previousCursorRef.current = cursor\n      }\n    }\n\n    // Update snapshots, even if no search request was executed\n    previousOrderingRef.current = ordering\n    previousTermsRef.current = terms\n  }, [\n    completeFilters.length,\n    currentFilters,\n    documentTypes,\n    handleSearch,\n    hasValidTerms,\n    ordering,\n    searchState.terms,\n    terms,\n    cursor,\n    strategy,\n    releases,\n  ])\n\n  /**\n   * Reset search hits / state when (after initial amount):\n   * - we have no valid search terms and\n   * - we have existing hits\n   */\n  useEffect(() => {\n    if (!hasValidTerms && isMountedRef?.current && result.hits.length > 0) {\n      dispatch({type: 'SEARCH_CLEAR'})\n    }\n\n    isMountedRef.current = true\n  }, [dispatch, hasValidTerms, result.hits, terms.query, terms.types])\n\n  const value = useMemo(\n    () => ({\n      dispatch,\n      onClose,\n      searchCommandList,\n      setSearchCommandList,\n      setOnClose,\n      state: {\n        ...state,\n        fullscreen,\n        disabledDocumentIds,\n        canDisableAction,\n      },\n    }),\n    [fullscreen, disabledDocumentIds, canDisableAction, onClose, searchCommandList, state],\n  )\n\n  return <SearchContext.Provider value={value}>{children}</SearchContext.Provider>\n}\n","import {\n  isValidationErrorMarker,\n  type PreviewValue,\n  type SanityDocument,\n  type Schema,\n} from '@sanity/types'\nimport {uuid} from '@sanity/uuid'\nimport {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {combineLatest, type Observable, of} from 'rxjs'\nimport {\n  catchError,\n  distinctUntilChanged,\n  expand,\n  filter,\n  map,\n  mergeMap,\n  reduce,\n  startWith,\n  switchAll,\n  switchMap,\n  take,\n} from 'rxjs/operators'\nimport {mergeMapArray} from 'rxjs-mergemap-array'\n\nimport {useSchema} from '../../../hooks'\nimport {type LocaleSource} from '../../../i18n/types'\nimport {type DocumentPreviewStore, prepareForPreview} from '../../../preview'\nimport {useDocumentPreviewStore} from '../../../store/_legacy/datastores'\nimport {useSource} from '../../../studio'\nimport {getPublishedId} from '../../../util/draftUtils'\nimport {validateDocumentWithReferences, type ValidationStatus} from '../../../validation'\nimport {type ReleaseDocument} from '../../store/types'\nimport {useReleasesStore} from '../../store/useReleasesStore'\nimport {getReleaseDocumentIdFromReleaseId} from '../../util/getReleaseDocumentIdFromReleaseId'\nimport {RELEASES_STUDIO_CLIENT_OPTIONS} from '../../util/releasesClient'\n\nexport interface DocumentValidationStatus extends ValidationStatus {\n  hasError: boolean\n}\n\nexport interface DocumentInRelease {\n  memoKey: string\n  isPending?: boolean\n  document: SanityDocument & {publishedDocumentExists: boolean}\n  validation: DocumentValidationStatus\n  previewValues: {\n    isLoading: boolean\n    values: PreviewValue | undefined | null\n  }\n}\n\ntype ReleaseDocumentsObservableResult = Observable<{\n  loading: boolean\n  results: DocumentInRelease[]\n  error: Error | null\n}>\n\nconst getActiveReleaseDocumentsObservable = ({\n  schema,\n  documentPreviewStore,\n  i18n,\n  getClient,\n  releaseId,\n}: {\n  schema: Schema\n  documentPreviewStore: DocumentPreviewStore\n  i18n: LocaleSource\n  getClient: ReturnType<typeof useSource>['getClient']\n  releaseId: string\n}): ReleaseDocumentsObservableResult => {\n  const client = getClient(RELEASES_STUDIO_CLIENT_OPTIONS)\n  const observableClient = client.observable\n\n  const groqFilter = `_id in path(\"versions.${releaseId}.**\")`\n\n  return documentPreviewStore\n    .unstable_observeDocumentIdSet(groqFilter, undefined, {\n      apiVersion: RELEASES_STUDIO_CLIENT_OPTIONS.apiVersion,\n    })\n    .pipe(\n      map((state) => (state.documentIds || []) as string[]),\n      mergeMapArray((id: string) => {\n        const ctx = {\n          observeDocument: documentPreviewStore.unstable_observeDocument,\n          observeDocumentPairAvailability:\n            documentPreviewStore.unstable_observeDocumentPairAvailability,\n          i18n,\n          getClient,\n          schema,\n        }\n\n        const document$ = documentPreviewStore\n          .unstable_observeDocument(id, {\n            apiVersion: RELEASES_STUDIO_CLIENT_OPTIONS.apiVersion,\n          })\n          .pipe(\n            filter(Boolean),\n            switchMap((doc) =>\n              observableClient\n                .fetch(\n                  `*[_id in path(\"${getPublishedId(doc._id)}\")]{_id}`,\n                  {},\n                  {tag: 'release-documents.check-existing'},\n                )\n                .pipe(\n                  switchMap((publishedDocumentExists) =>\n                    of({\n                      ...doc,\n                      publishedDocumentExists: !!publishedDocumentExists.length,\n                    }),\n                  ),\n                ),\n            ),\n          )\n        const validation$ = validateDocumentWithReferences(ctx, document$).pipe(\n          map((validationStatus) => ({\n            ...validationStatus,\n            hasError: validationStatus.validation.some((marker) => isValidationErrorMarker(marker)),\n          })),\n        )\n\n        const previewValues$ = document$.pipe(\n          map((document) => {\n            const schemaType = schema.get(document._type)\n            if (!schemaType) {\n              console.error(\n                `Schema type not found for document type ${document._type} (document ID: ${document._id})`,\n              )\n              return of({\n                isLoading: false,\n                values: {\n                  _id: document._id,\n                  title: `Document type \"${document._type}\" not found`,\n                  _createdAt: document._createdAt,\n                  _updatedAt: document._updatedAt,\n                } satisfies PreviewValue,\n              })\n            }\n            return documentPreviewStore\n              .observeForPreview(document, schemaType, {perspective: [releaseId]})\n              .pipe(\n                map(({snapshot}) => ({\n                  isLoading: false,\n                  values: snapshot,\n                })),\n                startWith({isLoading: true, values: {}}),\n              )\n          }),\n          switchAll(),\n        )\n\n        return combineLatest([document$, validation$, previewValues$]).pipe(\n          map(([document, validation, previewValues]) => ({\n            document,\n            validation,\n            previewValues,\n            memoKey: uuid(),\n          })),\n        )\n      }),\n      map((results) => ({loading: false, results, error: null})),\n      catchError((error) => {\n        return of({loading: false, results: [], error})\n      }),\n    )\n}\n\nconst getPublishedArchivedReleaseDocumentsObservable = ({\n  getClient,\n  schema,\n  documentPreviewStore,\n  release,\n}: {\n  getClient: ReturnType<typeof useSource>['getClient']\n  schema: Schema\n  documentPreviewStore: DocumentPreviewStore\n  release: ReleaseDocument\n}): ReleaseDocumentsObservableResult => {\n  const client = getClient(RELEASES_STUDIO_CLIENT_OPTIONS)\n  const observableClient = client.observable\n  const dataset = client.config().dataset\n\n  if (!release.finalDocumentStates?.length) return of({loading: false, results: [], error: null})\n\n  function batchRequestDocumentFromHistory(startIndex: number) {\n    const finalIndex = startIndex + 10\n    return observableClient\n      .request<{documents: DocumentInRelease['document'][]}>({\n        url: `/data/history/${dataset}/documents/${release.finalDocumentStates\n          ?.slice(startIndex, finalIndex)\n          .map((d) => d.id)\n          .join(',')}?lastRevision=true`,\n      })\n      .pipe(map(({documents}) => ({documents, finalIndex})))\n  }\n\n  const documents$ = batchRequestDocumentFromHistory(0).pipe(\n    expand((response) => {\n      if (release.finalDocumentStates && response.finalIndex < release.finalDocumentStates.length) {\n        // Continue with next batch\n        return batchRequestDocumentFromHistory(response.finalIndex)\n      }\n      // End recursion by emitting an empty observable\n      return of()\n    }),\n    reduce(\n      (documents: DocumentInRelease['document'][], batch) => documents.concat(batch.documents),\n      [],\n    ),\n  )\n\n  return documents$.pipe(\n    mergeMap((documents) => {\n      return combineLatest(\n        documents.map((document) => {\n          const schemaType = schema.get(document._type)\n          if (!schemaType) {\n            throw new Error(`Schema type not found for document type ${document._type}`)\n          }\n          const previewValues$ = documentPreviewStore.observeForPreview(document, schemaType).pipe(\n            take(1),\n            map(({snapshot}) => ({\n              isLoading: false,\n              values: prepareForPreview(snapshot || document, schemaType),\n            })),\n            startWith({isLoading: true, values: {}}),\n            filter(({isLoading}) => !isLoading),\n          )\n\n          return previewValues$.pipe(\n            map((previewValues) => ({\n              document,\n              previewValues,\n              memoKey: uuid(),\n              validation: {validation: [], hasError: false, isValidating: false},\n            })),\n          )\n        }),\n      ).pipe(\n        map((results) => ({\n          loading: false,\n          results,\n          error: null,\n        })),\n      )\n    }),\n    catchError((error) => {\n      return of({loading: false, results: [], error})\n    }),\n  )\n}\n\nconst getReleaseDocumentsObservable = ({\n  schema,\n  documentPreviewStore,\n  getClient,\n  releaseId,\n  i18n,\n  releasesState$,\n}: {\n  schema: Schema\n  documentPreviewStore: DocumentPreviewStore\n  getClient: ReturnType<typeof useSource>['getClient']\n  releaseId: string\n  i18n: LocaleSource\n  releasesState$: ReturnType<typeof useReleasesStore>['state$']\n}): ReleaseDocumentsObservableResult =>\n  releasesState$.pipe(\n    map((releasesState) =>\n      releasesState.releases.get(getReleaseDocumentIdFromReleaseId(releaseId)),\n    ),\n    filter(Boolean),\n    distinctUntilChanged((prev, next) => prev._rev === next._rev),\n    switchMap((release) => {\n      if (release.state === 'published' || release.state === 'archived') {\n        return getPublishedArchivedReleaseDocumentsObservable({\n          schema,\n          documentPreviewStore,\n          getClient,\n          release,\n        })\n      }\n\n      return getActiveReleaseDocumentsObservable({\n        schema,\n        documentPreviewStore,\n        i18n,\n        getClient,\n        releaseId,\n      })\n    }),\n    startWith({loading: true, results: [], error: null}),\n  )\n\nexport function useBundleDocuments(releaseId: string): {\n  loading: boolean\n  results: DocumentInRelease[]\n  error: null | Error\n} {\n  const documentPreviewStore = useDocumentPreviewStore()\n  const {getClient, i18n} = useSource()\n  const schema = useSchema()\n  const {state$: releasesState$} = useReleasesStore()\n\n  const releaseDocumentsObservable = useMemo(\n    () =>\n      getReleaseDocumentsObservable({\n        schema,\n        documentPreviewStore,\n        getClient,\n        releaseId,\n        i18n,\n        releasesState$,\n      }),\n    [schema, documentPreviewStore, getClient, releaseId, i18n, releasesState$],\n  )\n\n  return useObservable(releaseDocumentsObservable, {loading: true, results: [], error: null})\n}\n","import {type SanityDocument} from '@sanity/client'\nimport {LayerProvider, PortalProvider} from '@sanity/ui'\n\nimport {SearchPopover} from '../../../studio/components/navbar/search/components/SearchPopover'\nimport {SearchProvider} from '../../../studio/components/navbar/search/contexts/search/SearchProvider'\nimport {useBundleDocuments} from './useBundleDocuments'\n\nexport type AddedDocument = Pick<SanityDocument, '_id' | '_type' | 'title'> &\n  Partial<SanityDocument>\n\nexport function AddDocumentSearch({\n  open,\n  onClose,\n  releaseId,\n}: {\n  open: boolean\n  onClose: (document?: AddedDocument) => void\n  releaseId: string\n}): React.JSX.Element {\n  const {results} = useBundleDocuments(releaseId)\n  const idsInRelease: string[] = results.map((doc) => doc.document._id)\n\n  return (\n    <LayerProvider zOffset={1}>\n      <SearchProvider disabledDocumentIds={idsInRelease} canDisableAction>\n        <PortalProvider>\n          <SearchPopover\n            onClose={onClose}\n            onItemSelect={onClose}\n            open={open}\n            previewPerspective={[releaseId]}\n            disableIntentLink\n          />\n        </PortalProvider>\n      </SearchProvider>\n    </LayerProvider>\n  )\n}\n","import {Stack, Text, useToast} from '@sanity/ui'\nimport {type CSSProperties, useCallback, useState} from 'react'\n\nimport {Dialog} from '../../../../ui-components/dialog/Dialog'\nimport {LoadingBlock} from '../../../components/loadingBlock/LoadingBlock'\nimport {useSchema} from '../../../hooks/useSchema'\nimport {useTranslation} from '../../../i18n/hooks/useTranslation'\nimport {Translate} from '../../../i18n/Translate'\nimport {unstable_useValuePreview as useValuePreview} from '../../../preview'\nimport {Preview} from '../../../preview/components/Preview'\nimport {getVersionFromId} from '../../../util/draftUtils'\nimport {useVersionOperations} from '../../hooks/useVersionOperations'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {type ReleaseDocument} from '../../store/types'\nimport {useActiveReleases} from '../../store/useActiveReleases'\nimport {useArchivedReleases} from '../../store/useArchivedReleases'\nimport {getReleaseIdFromReleaseDocumentId} from '../../util/getReleaseIdFromReleaseDocumentId'\nimport {getReleaseTone} from '../../util/getReleaseTone'\n\nexport function UnpublishVersionDialog(props: {\n  onClose: () => void\n  documentVersionId: string\n  documentType: string\n}): React.JSX.Element {\n  const {onClose, documentVersionId, documentType} = props\n  const {t} = useTranslation(releasesLocaleNamespace)\n  const {t: coreT} = useTranslation()\n\n  const schema = useSchema()\n  const {unpublishVersion} = useVersionOperations()\n  const [isUnpublishing, setIsUnpublishing] = useState(false)\n  const toast = useToast()\n  const {data} = useActiveReleases()\n  const {data: archivedReleases} = useArchivedReleases()\n\n  const release = data\n    .concat(archivedReleases)\n    .find(\n      (candidate) =>\n        getReleaseIdFromReleaseDocumentId(candidate._id) === getVersionFromId(documentVersionId),\n    )\n\n  const tone = getReleaseTone(release as ReleaseDocument)\n  const schemaType = schema.get(documentType)\n\n  const preview = useValuePreview({schemaType, value: {_id: documentVersionId}})\n\n  const handleUnpublish = useCallback(async () => {\n    setIsUnpublishing(true)\n\n    try {\n      await unpublishVersion(documentVersionId)\n      toast.push({\n        closable: true,\n        status: 'success',\n        description: (\n          <Translate\n            t={coreT}\n            i18nKey={'release.action.unpublish-version.success'}\n            values={{title: preview?.value?.title || documentVersionId}}\n          />\n        ),\n      })\n    } catch (err) {\n      toast.push({\n        closable: true,\n        status: 'error',\n        title: coreT('release.action.unpublish-version.failure'),\n        description: err.message,\n      })\n    }\n\n    setIsUnpublishing(false)\n\n    onClose()\n  }, [coreT, documentVersionId, onClose, preview?.value?.title, toast, unpublishVersion])\n\n  return (\n    <Dialog\n      header={t('unpublish-dialog.header')}\n      id=\"document-unpublish-dialog\"\n      onClickOutside={onClose}\n      onClose={onClose}\n      width={0}\n      padding={false}\n      footer={{\n        cancelButton: {\n          text: t('unpublish-dialog.action.cancel'),\n          onClick: onClose,\n        },\n        confirmButton: {\n          text: t('unpublish-dialog.action.unpublish'),\n          onClick: handleUnpublish,\n          tone: 'critical',\n          disabled: isUnpublishing,\n          loading: isUnpublishing,\n        },\n      }}\n    >\n      <Stack space={4} paddingX={4} paddingBottom={4}>\n        {schemaType ? (\n          <Preview value={{_id: documentVersionId}} schemaType={schemaType} />\n        ) : (\n          <LoadingBlock />\n        )}\n\n        <Text muted size={1}>\n          <Translate\n            t={t}\n            i18nKey=\"unpublish-dialog.description.to-draft\"\n            values={{\n              title: release?.metadata.title || coreT('release.placeholder-untitled-release'),\n            }}\n            components={{\n              Label: ({children}) => {\n                return (\n                  <span\n                    style={\n                      {\n                        color: `var(--card-badge-${tone ?? 'default'}-fg-color)`,\n                        backgroundColor: `var(--card-badge-${tone ?? 'default'}-bg-color)`,\n                        borderRadius: 3,\n                        textDecoration: 'none',\n                        padding: '0px 2px',\n                        fontWeight: 500,\n                      } as CSSProperties\n                    }\n                  >\n                    {children}\n                  </span>\n                )\n              },\n            }}\n          />\n        </Text>\n\n        <Text muted size={1}>\n          {t('unpublish-dialog.description.lost-changes')}\n        </Text>\n      </Stack>\n    </Dialog>\n  )\n}\n","import {type SanityDocument} from '@sanity/client'\nimport {type SanityDocumentLike} from '@sanity/types'\n\n/**\n * checks if the document has been set for unpublishing\n * @internal\n *\n * @param document - sanity document\n * @returns boolean if the system delete is set\n */\nexport function isGoingToUnpublish(document: SanityDocument | SanityDocumentLike): boolean {\n  return Boolean(document._system?.delete === true)\n}\n","import {CloseIcon, UnpublishIcon} from '@sanity/icons'\nimport {Box, Card, Label, Menu, MenuDivider} from '@sanity/ui'\nimport {memo, useMemo, useState} from 'react'\n\nimport {MenuButton, MenuItem} from '../../../../../ui-components'\nimport {ContextMenuButton} from '../../../../components/contextMenuButton'\nimport {useSchema} from '../../../../hooks'\nimport {useTranslation} from '../../../../i18n'\nimport {useDocumentPairPermissions} from '../../../../store/_legacy/grants/documentPairPermissions'\nimport {getPublishedId, getVersionFromId} from '../../../../util/draftUtils'\nimport {DiscardVersionDialog} from '../../../components'\nimport {UnpublishVersionDialog} from '../../../components/dialog/UnpublishVersionDialog'\nimport {releasesLocaleNamespace} from '../../../i18n'\nimport {isGoingToUnpublish} from '../../../util/isGoingToUnpublish'\nimport {type BundleDocumentRow} from '../ReleaseSummary'\n\nconst DocumentActionsInner = memo(\n  function DocumentActionsInner({\n    document,\n    releaseTitle,\n  }: {\n    document: BundleDocumentRow\n    releaseTitle: string\n  }) {\n    const [showDiscardDialog, setShowDiscardDialog] = useState(false)\n    const [showUnpublishDialog, setShowUnpublishDialog] = useState(false)\n    const {t: coreT} = useTranslation()\n    const {t} = useTranslation(releasesLocaleNamespace)\n    const isAlreadyUnpublished = isGoingToUnpublish(document.document)\n\n    const publishedId = getPublishedId(document.document._id)\n    const type = document.document._type\n    const version = getVersionFromId(document.document._id)\n\n    const [discardVersionPermission, isDiscardVersionPermissionsLoading] =\n      useDocumentPairPermissions({\n        id: publishedId,\n        type,\n        version,\n        permission: 'discardVersion',\n      })\n    const [unpublishPermission, isUnpublishPermissionsLoading] = useDocumentPairPermissions({\n      id: publishedId,\n      type,\n      version,\n      permission: 'unpublish',\n    })\n\n    const isDiscardVersionActionDisabled =\n      !discardVersionPermission?.granted || isDiscardVersionPermissionsLoading\n    const noPermissionToUnpublish = !unpublishPermission?.granted || isUnpublishPermissionsLoading\n\n    const unPublishTooltipContent = useMemo(() => {\n      if (noPermissionToUnpublish) {\n        return t('permissions.error.unpublish')\n      }\n      if (!document.document.publishedDocumentExists) {\n        return t('unpublish.no-published-version')\n      }\n      if (isAlreadyUnpublished) {\n        return t('unpublish.already-unpublished')\n      }\n\n      return null\n    }, [\n      document.document.publishedDocumentExists,\n      isAlreadyUnpublished,\n      noPermissionToUnpublish,\n      t,\n    ])\n\n    const isUnpublishActionDisabled =\n      noPermissionToUnpublish || !document.document.publishedDocumentExists || isAlreadyUnpublished\n\n    return (\n      <>\n        <Card tone=\"default\" display=\"flex\">\n          <MenuButton\n            id=\"document-actions\"\n            button={<ContextMenuButton />}\n            menu={\n              <Menu>\n                <MenuItem\n                  text={coreT('release.action.discard-version')}\n                  icon={CloseIcon}\n                  onClick={() => setShowDiscardDialog(true)}\n                  disabled={isDiscardVersionActionDisabled}\n                  tooltipProps={{\n                    disabled: !isDiscardVersionActionDisabled,\n                    content: t('permissions.error.discard-version'),\n                  }}\n                />\n                <MenuDivider />\n                <Box padding={3} paddingBottom={2}>\n                  <Label size={1}>{t('menu.group.when-releasing')}</Label>\n                </Box>\n                <MenuItem\n                  text={t('action.unpublish')}\n                  icon={UnpublishIcon}\n                  disabled={isUnpublishActionDisabled}\n                  tooltipProps={{\n                    disabled: !isUnpublishActionDisabled,\n                    content: unPublishTooltipContent,\n                  }}\n                  onClick={() => setShowUnpublishDialog(true)}\n                />\n              </Menu>\n            }\n          />\n        </Card>\n        {showDiscardDialog && (\n          <DiscardVersionDialog\n            onClose={() => setShowDiscardDialog(false)}\n            documentId={document.document._id}\n            documentType={document.document._type}\n            fromPerspective={releaseTitle}\n          />\n        )}\n        {showUnpublishDialog && (\n          <UnpublishVersionDialog\n            onClose={() => setShowUnpublishDialog(false)}\n            documentVersionId={document.document._id}\n            documentType={document.document._type}\n          />\n        )}\n      </>\n    )\n  },\n  (prev, next) => prev.document.memoKey === next.document.memoKey,\n)\n\nexport const DocumentActions = memo(function GuardedDocumentActions(props: {\n  document: BundleDocumentRow\n  releaseTitle: string\n}) {\n  const schema = useSchema()\n  const type = schema.get(props.document.document._type)\n  const {t} = useTranslation()\n  if (!type) {\n    return (\n      <ContextMenuButton\n        disabled\n        tooltipProps={{\n          content: t('document.type.not-found', {type: props.document.document._type}),\n        }}\n      />\n    )\n  }\n\n  return <DocumentActionsInner {...props} />\n})\n","import {ErrorOutlineIcon} from '@sanity/icons'\nimport {Badge, Box, Flex, Text} from '@sanity/ui'\nimport {type TFunction} from 'i18next'\nimport {memo} from 'react'\n\nimport {ToneIcon} from '../../../../../ui-components/toneIcon/ToneIcon'\nimport {Tooltip} from '../../../../../ui-components/tooltip'\nimport {UserAvatar} from '../../../../components'\nimport {RelativeTime} from '../../../../components/RelativeTime'\nimport {useSchema} from '../../../../hooks'\nimport {SanityDefaultPreview} from '../../../../preview/components/SanityDefaultPreview'\nimport {type ReleaseState} from '../../../store'\nimport {isGoingToUnpublish} from '../../../util/isGoingToUnpublish'\nimport {ReleaseDocumentPreview} from '../../components/ReleaseDocumentPreview'\nimport {Headers} from '../../components/Table/TableHeader'\nimport {type Column} from '../../components/Table/types'\nimport {type BundleDocumentRow} from '../ReleaseSummary'\nimport {type DocumentInRelease} from '../useBundleDocuments'\n\nconst MemoReleaseDocumentPreview = memo(\n  function MemoReleaseDocumentPreview({\n    item,\n    releaseId,\n    releaseState,\n    documentRevision,\n  }: {\n    item: DocumentInRelease\n    releaseId: string\n    releaseState?: ReleaseState\n    documentRevision?: string\n  }) {\n    return (\n      <ReleaseDocumentPreview\n        documentId={item.document._id}\n        documentTypeName={item.document._type}\n        releaseId={releaseId}\n        releaseState={releaseState}\n        documentRevision={documentRevision}\n        previewValues={item.previewValues.values}\n        isLoading={item.previewValues.isLoading}\n      />\n    )\n  },\n  (prev, next) => prev.item.memoKey === next.item.memoKey && prev.releaseId === next.releaseId,\n)\n\nconst MemoDocumentType = memo(\n  function DocumentType({type}: {type: string}) {\n    const schema = useSchema()\n    const schemaType = schema.get(type)\n    return <Text size={1}>{schemaType?.title || 'Not found'}</Text>\n  },\n  (prev, next) => prev.type === next.type,\n)\n\nconst documentActionColumn: (t: TFunction<'releases', undefined>) => Column<BundleDocumentRow> = (\n  t,\n) => ({\n  id: 'action',\n  width: 100,\n  header: (props) => (\n    <Flex {...props.headerProps} paddingY={3} sizing=\"border\">\n      <Headers.BasicHeader text={t('table-header.action')} />\n    </Flex>\n  ),\n  cell: ({cellProps, datum}) => {\n    const actionBadge = () => {\n      if (datum.isPending || datum.isLoading) return null\n\n      const willBeUnpublished = isGoingToUnpublish(datum.document)\n      if (willBeUnpublished) {\n        return (\n          <Badge radius={2} tone={'critical'} data-testid={`unpublish-badge-${datum.document._id}`}>\n            {t('table-body.action.unpublish')}\n          </Badge>\n        )\n      }\n      if (datum.document.publishedDocumentExists) {\n        return (\n          <Badge radius={2} tone={'caution'} data-testid={`change-badge-${datum.document._id}`}>\n            {t('table-body.action.change')}\n          </Badge>\n        )\n      }\n\n      return (\n        <Badge radius={2} tone={'positive'} data-testid={`add-badge-${datum.document._id}`}>\n          {t('table-body.action.add')}\n        </Badge>\n      )\n    }\n\n    return (\n      <Flex align=\"center\" {...cellProps}>\n        <Box paddingX={2}>{actionBadge()}</Box>\n      </Flex>\n    )\n  },\n})\n\nexport const getDocumentTableColumnDefs: (\n  releaseId: string,\n  releaseState: ReleaseState,\n  t: TFunction<'releases', undefined>,\n) => Column<BundleDocumentRow>[] = (releaseId, releaseState, t) => [\n  /**\n   * Hiding action for archived and published releases of v1.0\n   * This will be added once Events API has reverse order lookup supported\n   */\n  ...(releaseState === 'archived' || releaseState === 'published' ? [] : [documentActionColumn(t)]),\n  {\n    id: 'document._type',\n    width: 100,\n    sorting: true,\n    header: (props) => (\n      <Flex {...props.headerProps} paddingY={3} sizing=\"border\">\n        <Headers.SortHeaderButton text={t('table-header.type')} {...props} />\n      </Flex>\n    ),\n    cell: ({cellProps, datum}) => (\n      <Flex align=\"center\" {...cellProps}>\n        <Box paddingX={2}>\n          {!datum.isLoading && <MemoDocumentType type={datum.document._type} />}\n        </Box>\n      </Flex>\n    ),\n  },\n  {\n    id: 'search',\n    width: null,\n    style: {minWidth: '50%', maxWidth: '50%'},\n    sortTransform(value) {\n      if (!value.previewValues) return 0\n\n      return value.previewValues.values?.title?.toLowerCase() || 0\n    },\n    header: (props) => (\n      <Headers.TableHeaderSearch {...props} placeholder={t('search-documents-placeholder')} />\n    ),\n    cell: ({cellProps, datum}) => (\n      <Box {...cellProps} flex={1} padding={1} paddingRight={2} sizing=\"border\">\n        {datum.isPending || datum.isLoading ? (\n          <SanityDefaultPreview isPlaceholder />\n        ) : (\n          <MemoReleaseDocumentPreview\n            item={datum}\n            releaseId={releaseId}\n            releaseState={releaseState}\n            documentRevision={datum.document._rev}\n          />\n        )}\n      </Box>\n    ),\n  },\n  {\n    id: 'document._updatedAt',\n    sorting: true,\n    width: 130,\n    header: (props) => (\n      <Flex {...props.headerProps} paddingY={3} sizing=\"border\">\n        <Headers.SortHeaderButton text={t('table-header.edited')} {...props} />\n      </Flex>\n    ),\n    cell: ({cellProps, datum: {document, history, isLoading}}) => (\n      <Flex\n        {...cellProps}\n        align=\"center\"\n        paddingX={2}\n        paddingY={3}\n        style={{minWidth: 130}}\n        sizing=\"border\"\n      >\n        {!isLoading && document._updatedAt && (\n          <Flex align=\"center\" gap={2}>\n            {history?.lastEditedBy && <UserAvatar size={0} user={history.lastEditedBy} />}\n            <Text muted size={1}>\n              <RelativeTime time={document._updatedAt} useTemporalPhrase minimal />\n            </Text>\n          </Flex>\n        )}\n      </Flex>\n    ),\n  },\n  {\n    id: 'validation',\n    sorting: false,\n    width: 50,\n    header: ({headerProps}) => (\n      <Flex {...headerProps} paddingY={3} sizing=\"border\">\n        <Headers.BasicHeader text={''} />\n      </Flex>\n    ),\n    cell: ({cellProps, datum}) => {\n      if (datum.isLoading) return null\n\n      const validationErrorCount = datum.validation.validation.filter(\n        (validation) => validation.level === 'error',\n      ).length\n\n      return (\n        <Flex {...cellProps} flex={1} padding={1} justify=\"center\" align=\"center\" sizing=\"border\">\n          {datum.validation.hasError && (\n            <Tooltip\n              portal\n              placement=\"bottom-end\"\n              content={\n                <Text muted size={1}>\n                  <Flex align={'center'} gap={3} padding={1}>\n                    <ToneIcon icon={ErrorOutlineIcon} tone=\"critical\" />\n                    {t(\n                      validationErrorCount === 1\n                        ? 'document-validation.error_one'\n                        : 'document-validation.error_other',\n                      {count: validationErrorCount},\n                    )}\n                  </Flex>\n                </Text>\n              }\n            >\n              <Text size={1}>\n                <ToneIcon icon={ErrorOutlineIcon} tone=\"critical\" />\n              </Text>\n            </Tooltip>\n          )}\n        </Flex>\n      )\n    },\n  },\n]\n","import {type SanityDocument} from '@sanity/client'\nimport {AddIcon} from '@sanity/icons'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {Card, Container, useToast} from '@sanity/ui'\nimport {type RefObject, useCallback, useEffect, useMemo, useState} from 'react'\n\nimport {Button} from '../../../../ui-components'\nimport {useTranslation} from '../../../i18n'\nimport {getVersionId} from '../../../util/draftUtils'\nimport {getDocumentVariantType} from '../../../util/getDocumentVariantType'\nimport {AddedVersion} from '../../__telemetry__/releases.telemetry'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {type ReleaseDocument} from '../../store/types'\nimport {useReleaseOperations} from '../../store/useReleaseOperations'\nimport {getReleaseIdFromReleaseDocumentId} from '../../util/getReleaseIdFromReleaseDocumentId'\nimport {Table} from '../components/Table/Table'\nimport {AddDocumentSearch, type AddedDocument} from './AddDocumentSearch'\nimport {DocumentActions} from './documentTable/DocumentActions'\nimport {getDocumentTableColumnDefs} from './documentTable/DocumentTableColumnDefs'\nimport {type DocumentHistory} from './documentTable/useReleaseHistory'\nimport {type DocumentInRelease} from './useBundleDocuments'\n\nexport type DocumentWithHistory = DocumentInRelease & {\n  history: DocumentHistory | undefined\n  // TODO: Get this value from the document, it can be calculated by checking if there is a corresponding document with no version attached\n  isAdded?: boolean\n}\nexport type BundleDocumentRow = DocumentWithHistory\n\nexport interface ReleaseSummaryProps {\n  documents: DocumentInRelease[]\n  documentsHistory: Record<string, DocumentHistory>\n  scrollContainerRef: RefObject<HTMLDivElement | null>\n  release: ReleaseDocument\n  isLoading?: boolean\n}\n\nconst isBundleDocumentRow = (\n  maybeBundleDocumentRow: unknown,\n): maybeBundleDocumentRow is BundleDocumentRow =>\n  !!maybeBundleDocumentRow &&\n  typeof maybeBundleDocumentRow === 'object' &&\n  'memoKey' in maybeBundleDocumentRow &&\n  'document' in maybeBundleDocumentRow &&\n  'validation' in maybeBundleDocumentRow &&\n  'previewValues' in maybeBundleDocumentRow &&\n  'history' in maybeBundleDocumentRow\n\nexport function ReleaseSummary(props: ReleaseSummaryProps) {\n  const {documents, documentsHistory, isLoading = false, release, scrollContainerRef} = props\n  const toast = useToast()\n  const {createVersion} = useReleaseOperations()\n  const telemetry = useTelemetry()\n\n  const [openAddDocumentDialog, setAddDocumentDialog] = useState(false)\n  const [pendingAddedDocument, setPendingAddedDocument] = useState<BundleDocumentRow[]>([])\n\n  const {t} = useTranslation(releasesLocaleNamespace)\n\n  const releaseId = getReleaseIdFromReleaseDocumentId(release._id)\n\n  const aggregatedData = useMemo(\n    () =>\n      documents.map((document) => ({\n        ...document,\n        history: documentsHistory[document.document._id],\n      })),\n    [documents, documentsHistory],\n  )\n\n  const renderRowActions = useCallback(\n    (rowProps: {datum: BundleDocumentRow | unknown}) => {\n      if (release.state !== 'active') return null\n      if (!isBundleDocumentRow(rowProps.datum)) return null\n      if (rowProps.datum.isPending) return null\n\n      return <DocumentActions document={rowProps.datum} releaseTitle={release.metadata.title} />\n    },\n    [release.metadata.title, release.state],\n  )\n\n  const documentTableColumnDefs = useMemo(\n    () => getDocumentTableColumnDefs(release._id, release.state, t),\n    [release._id, release.state, t],\n  )\n\n  const filterRows = useCallback(\n    (data: DocumentWithHistory[], searchTerm: string) =>\n      data.filter(({previewValues, isPending}) => {\n        const title =\n          typeof previewValues.values?.title === 'string'\n            ? previewValues.values?.title\n            : t('release-placeholder.title')\n\n        // always show the pending rows to visualise that documents are being added\n        return isPending || title.toLowerCase().includes(searchTerm.toLowerCase())\n      }),\n    [t],\n  )\n\n  const closeAddDialog = useCallback(\n    async (documentToAdd?: AddedDocument) => {\n      setAddDocumentDialog(false)\n      if (!documentToAdd) return\n\n      const versionDocumentId = getVersionId(documentToAdd._id, releaseId)\n      const pendingAddedDocumentId = `${versionDocumentId}-pending`\n\n      const pendingDocumentRow: DocumentWithHistory = {\n        memoKey: versionDocumentId,\n        previewValues: {isLoading: true, values: {}},\n        validation: {\n          isValidating: false,\n          validation: [],\n          hasError: false,\n        },\n        history: undefined,\n        document: {\n          ...(documentToAdd as SanityDocument),\n          _id: pendingAddedDocumentId,\n          publishedDocumentExists: false,\n        },\n        isPending: true,\n      }\n\n      setPendingAddedDocument((prev) => [...prev, pendingDocumentRow])\n\n      try {\n        await createVersion(releaseId, documentToAdd._id)\n\n        const origin = getDocumentVariantType(documentToAdd._id)\n\n        telemetry.log(AddedVersion, {\n          documentOrigin: origin,\n        })\n      } catch (error) {\n        setPendingAddedDocument((prev) =>\n          prev.filter(({document}) => document._id !== pendingAddedDocumentId),\n        )\n\n        toast.push({\n          id: `add-version-to-release-${versionDocumentId}`,\n          closable: true,\n          status: 'error',\n          title: t('toast.create-version.error', {error: error.message}),\n        })\n      }\n    },\n    [createVersion, releaseId, t, telemetry, toast],\n  )\n\n  useEffect(() => {\n    const documentsNoLongerPending: string[] = []\n\n    pendingAddedDocument?.forEach((pendingDocument) => {\n      // once pending added document has been received by bundle store\n      if (\n        documents.find(({document}) => `${document._id}-pending` === pendingDocument.document._id)\n      ) {\n        documentsNoLongerPending.push(pendingDocument.document._id)\n      }\n    })\n\n    if (documentsNoLongerPending.length)\n      // cleanup all resolved added documents\n      setPendingAddedDocument((prev) =>\n        prev.filter(({document}) => !documentsNoLongerPending.includes(document._id)),\n      )\n  }, [documents, pendingAddedDocument, t, toast])\n\n  const tableData = useMemo(\n    () =>\n      pendingAddedDocument.length ? [...aggregatedData, ...pendingAddedDocument] : aggregatedData,\n    [pendingAddedDocument, aggregatedData],\n  )\n\n  return (\n    <Card borderTop data-testid=\"document-table-card\" ref={scrollContainerRef}>\n      <Table<DocumentWithHistory>\n        loading={isLoading}\n        data={tableData}\n        emptyState={t('summary.no-documents')}\n        // eslint-disable-next-line @sanity/i18n/no-attribute-string-literals\n        rowId=\"document._id\"\n        columnDefs={documentTableColumnDefs}\n        rowActions={renderRowActions}\n        searchFilter={filterRows}\n        scrollContainerRef={scrollContainerRef}\n        defaultSort={{column: 'search', direction: 'asc'}}\n      />\n      {release.state === 'active' && (\n        <Container width={3}>\n          <Card padding={3}>\n            <Button\n              icon={AddIcon}\n              disabled={isLoading}\n              mode=\"bleed\"\n              onClick={() => setAddDocumentDialog(true)}\n              text={t('action.add-document')}\n            />\n          </Card>\n        </Container>\n      )}\n      <AddDocumentSearch\n        open={openAddDocumentDialog}\n        onClose={closeAddDialog}\n        releaseId={releaseId}\n      />\n    </Card>\n  )\n}\n","import {ErrorOutlineIcon} from '@sanity/icons'\nimport {Box, Card, Container, Flex, Heading, Stack, Text} from '@sanity/ui'\nimport {motion} from 'framer-motion'\nimport {useMemo, useRef, useState} from 'react'\nimport {useRouter} from 'sanity/router'\n\nimport {LoadingBlock} from '../../../components'\nimport {useTranslation} from '../../../i18n'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {useActiveReleases} from '../../store/useActiveReleases'\nimport {useArchivedReleases} from '../../store/useArchivedReleases'\nimport {type ReleasesRouterState} from '../../types/router'\nimport {getReleaseIdFromReleaseDocumentId} from '../../util/getReleaseIdFromReleaseDocumentId'\nimport {useReleaseHistory} from './documentTable/useReleaseHistory'\nimport {useReleaseEvents} from './events/useReleaseEvents'\nimport {ReleaseDashboardActivityPanel} from './ReleaseDashboardActivityPanel'\nimport {ReleaseDashboardDetails} from './ReleaseDashboardDetails'\nimport {ReleaseDashboardFooter} from './ReleaseDashboardFooter'\nimport {ReleaseDashboardHeader} from './ReleaseDashboardHeader'\nimport {ReleaseSummary} from './ReleaseSummary'\nimport {useBundleDocuments} from './useBundleDocuments'\n\nexport type ReleaseInspector = 'activity'\nconst MotionCard = motion.create(Card)\n\nexport const ReleaseDetail = () => {\n  const router = useRouter()\n  const [inspector, setInspector] = useState<ReleaseInspector | undefined>(undefined)\n  const {t} = useTranslation(releasesLocaleNamespace)\n  const {releaseId: releaseIdRaw}: ReleasesRouterState = router.state\n  const releaseId = decodeURIComponent(releaseIdRaw || '')\n  const {data, loading} = useActiveReleases()\n  const {data: archivedReleases} = useArchivedReleases()\n\n  const {\n    loading: documentsLoading,\n    results,\n    error: bundleDocumentsError,\n  } = useBundleDocuments(releaseId)\n  const releaseEvents = useReleaseEvents(releaseId)\n\n  const documentIds = results.map((result) => result.document?._id)\n  const history = useReleaseHistory(documentIds, releaseId)\n\n  const releaseInDetail = data\n    .concat(archivedReleases)\n    .find((candidate) => getReleaseIdFromReleaseDocumentId(candidate._id) === releaseId)\n\n  const scrollContainerRef = useRef<HTMLDivElement | null>(null)\n\n  const detailContent = useMemo(() => {\n    if (bundleDocumentsError) {\n      return (\n        <Box padding={3}>\n          <MotionCard\n            initial={{opacity: 0}}\n            animate={{opacity: 1}}\n            tone=\"critical\"\n            padding={4}\n            radius={4}\n          >\n            <Flex gap={3}>\n              <Text size={1}>\n                <ErrorOutlineIcon />\n              </Text>\n              <Stack space={4}>\n                <Text size={1} weight=\"semibold\">\n                  {t('loading-release-documents.error.title')}\n                </Text>\n                <Text size={1}>{t('loading-release-documents.error.description')}</Text>\n              </Stack>\n            </Flex>\n          </MotionCard>\n        </Box>\n      )\n    }\n    if (!releaseInDetail) return null\n\n    return (\n      <ReleaseSummary\n        isLoading={documentsLoading}\n        documents={results}\n        release={releaseInDetail}\n        documentsHistory={history.documentsHistory}\n        scrollContainerRef={scrollContainerRef}\n      />\n    )\n  }, [\n    bundleDocumentsError,\n    documentsLoading,\n    releaseInDetail,\n    results,\n    history.documentsHistory,\n    t,\n  ])\n\n  if (loading) {\n    return (\n      <LoadingBlock\n        title={t('loading-release')}\n        fill\n        data-testid=\"release-documents-table-loader\"\n      />\n    )\n  }\n\n  if (releaseInDetail) {\n    return (\n      <Flex direction=\"column\" flex={1} height=\"fill\" overflow=\"hidden\">\n        <Card flex=\"none\" padding={3}>\n          <ReleaseDashboardHeader\n            release={releaseInDetail}\n            inspector={inspector}\n            setInspector={setInspector}\n          />\n        </Card>\n\n        <Flex flex={1}>\n          <Flex direction=\"column\" flex={1} height=\"fill\">\n            <Card flex={1} overflow=\"auto\">\n              <ReleaseDashboardDetails release={releaseInDetail} />\n              {detailContent}\n            </Card>\n\n            <ReleaseDashboardFooter\n              documents={results}\n              release={releaseInDetail}\n              events={releaseEvents.events}\n            />\n          </Flex>\n\n          <ReleaseDashboardActivityPanel\n            events={releaseEvents}\n            release={releaseInDetail}\n            show={inspector === 'activity'}\n          />\n        </Flex>\n      </Flex>\n    )\n  }\n\n  return (\n    <Card flex={1} tone=\"critical\">\n      <Container width={0}>\n        <Stack paddingX={4} paddingY={6} space={1}>\n          <Heading>{t('not-found', {releaseId})}</Heading>\n        </Stack>\n      </Container>\n    </Card>\n  )\n}\n","import {CloseIcon} from '@sanity/icons'\nimport {Card, type CardTone, Text} from '@sanity/ui'\nimport {isWeekend} from 'date-fns'\nimport {useCallback} from 'react'\n\nexport interface CalendarDayProps {\n  date: Date // clock time\n  focused?: boolean\n  onSelect: (date?: Date) => void\n  isCurrentMonth?: boolean\n  isToday: boolean\n  selected?: boolean\n  dateStyles?: React.CSSProperties\n  disabled?: boolean\n}\n\nexport function CalendarDay(props: CalendarDayProps) {\n  const {\n    date,\n    focused,\n    isCurrentMonth,\n    isToday,\n    onSelect,\n    selected,\n    disabled,\n    dateStyles = {},\n  } = props\n\n  const handleClick = useCallback(() => {\n    if (selected) {\n      onSelect(undefined)\n    } else {\n      onSelect(date)\n    }\n  }, [date, onSelect, selected])\n\n  let tone: CardTone\n  if (isToday || selected) {\n    tone = 'primary'\n  } else if (isWeekend(date)) {\n    // tone = 'transparent'\n    tone = 'default'\n  } else {\n    tone = 'default'\n  }\n\n  return (\n    <div aria-selected={selected} data-ui=\"CalendarDay\">\n      <Card\n        aria-label={date.toDateString()}\n        aria-pressed={selected}\n        as=\"button\"\n        __unstable_focusRing\n        data-weekday\n        data-focused={focused ? 'true' : ''}\n        data-testid={isToday ? 'day-tile-today' : `day-tile-${date.getDate()}-${date.getMonth()}`}\n        role=\"button\"\n        tabIndex={-1}\n        onClick={handleClick}\n        paddingX={3}\n        paddingY={4}\n        radius={2}\n        selected={selected}\n        style={{position: 'relative'}}\n        tone={tone}\n        disabled={disabled}\n      >\n        <Text\n          size={1}\n          style={{\n            opacity: !selected && !isCurrentMonth ? 0.35 : 1,\n            textAlign: 'center',\n            ...dateStyles,\n          }}\n        >\n          {selected ? <CloseIcon /> : date.getDate()}\n        </Text>\n      </Card>\n    </div>\n  )\n}\n","import {Box, Card, Grid, Label} from '@sanity/ui'\nimport {isSameDay, isSameMonth} from 'date-fns'\n\nimport useTimeZone from '../../../../scheduledPublishing/hooks/useTimeZone'\nimport {DEFAULT_WEEK_DAY_NAMES} from '../../DateInputs/calendar/constants'\nimport {useWeeksOfMonth} from '../../DateInputs/calendar/utils'\nimport {CalendarDay as DefaultCalendarDay} from './CalendarDay'\nimport {type CalendarProps} from './CalendarFilter'\n\ninterface CalendarMonthProps {\n  date: Date\n  focused?: Date\n  selected?: Date\n  onSelect: (date?: Date) => void\n  hidden?: boolean\n  renderCalendarDay?: CalendarProps['renderCalendarDay']\n  disabled?: boolean\n}\n\nexport function CalendarMonth(props: CalendarMonthProps) {\n  const {date, renderCalendarDay, hidden, disabled} = props\n  const {getCurrentZoneDate} = useTimeZone()\n  const CalendarDay = renderCalendarDay || DefaultCalendarDay\n  const weeksOfMonth = useWeeksOfMonth(date)\n\n  return (\n    <Box aria-hidden={hidden || false} data-ui=\"CalendarMonth\">\n      <Grid\n        style={{\n          gridGap: '1px',\n          gridTemplateColumns: 'repeat(7, 1fr)',\n        }}\n      >\n        {/* Header */}\n        {DEFAULT_WEEK_DAY_NAMES.map((weekday) => (\n          <Card key={weekday} paddingY={3}>\n            <Label size={1} style={{textAlign: 'center'}}>\n              {weekday.slice(0, 1)}\n            </Label>\n          </Card>\n        ))}\n\n        {weeksOfMonth.map((week, weekIdx) =>\n          week.days.map((dayDate, dayIdx) => {\n            const focused = props.focused && isSameDay(dayDate, props.focused)\n            const selected = props.selected && isSameDay(dayDate, props.selected)\n            const isToday = isSameDay(dayDate, getCurrentZoneDate())\n            const isCurrentMonth = isSameMonth(dayDate, props.focused || date)\n\n            return (\n              <CalendarDay\n                date={dayDate}\n                focused={focused}\n                isCurrentMonth={isCurrentMonth}\n                isToday={isToday}\n                // eslint-disable-next-line react/no-array-index-key\n                key={`${weekIdx}-${dayIdx}`}\n                onSelect={props.onSelect}\n                selected={selected}\n                disabled={disabled}\n              />\n            )\n          }),\n        )}\n      </Grid>\n    </Box>\n  )\n}\n","import {ChevronLeftIcon, ChevronRightIcon} from '@sanity/icons'\nimport {Box, Flex, Text} from '@sanity/ui'\nimport {addDays, addMonths, setHours, setMinutes} from 'date-fns'\nimport {\n  type ComponentProps,\n  type ForwardedRef,\n  forwardRef,\n  type KeyboardEvent,\n  useCallback,\n  useEffect,\n  useImperativeHandle,\n  useRef,\n  useState,\n} from 'react'\n\nimport {Button} from '../../../../../ui-components/button/Button'\nimport {TooltipDelayGroupProvider} from '../../../../../ui-components/tooltipDelayGroupProvider/TooltipDelayGroupProvider'\nimport {useTranslation} from '../../../../i18n/hooks/useTranslation'\nimport useTimeZone from '../../../../scheduledPublishing/hooks/useTimeZone'\nimport {ARROW_KEYS, DEFAULT_MONTH_NAMES} from '../../DateInputs/calendar/constants'\nimport {type CalendarDayProps} from './CalendarDay'\nimport {CalendarMonth} from './CalendarMonth'\n\nexport type CalendarProps = Omit<ComponentProps<'div'>, 'onSelect'> & {\n  focusedDate?: Date\n  onSelect: (date?: Date) => void\n  onFocusedDateChange?: (index: Date) => void\n  selectedDate?: Date\n  renderCalendarDay?: (props: CalendarDayProps) => React.ReactNode\n  disabled?: boolean\n}\n\n// This is used to maintain focus on a child element of the calendar-grid between re-renders\n// When using arrow keys to move focus from a day in one month to another we are setting focus at the button for the day\n// after it has changed but *only* if we *already* had focus inside the calendar grid (e.g not if focus was on the \"next\n// year\" button, or any of the other controls)\n// When moving from the last day of a month that displays 6 weeks in the grid to a month that displays 5 weeks, current\n// focus gets lost on render, so this provides us with a stable element to help us preserve focus on a child element of\n// the calendar grid between re-renders\nconst PRESERVE_FOCUS_ELEMENT = (\n  <span\n    data-preserve-focus\n    style={{overflow: 'hidden', position: 'absolute', outline: 'none'}}\n    tabIndex={-1}\n  />\n)\n\nexport const CalendarFilter = forwardRef(function Calendar(\n  props: CalendarProps,\n  forwardedRef: ForwardedRef<HTMLDivElement>,\n) {\n  const {\n    focusedDate: providedFocusedDate,\n    onFocusedDateChange: handleOnFocusedDateChange,\n    onSelect,\n    selectedDate,\n    renderCalendarDay,\n    ...restProps\n  } = props\n  const [_focusedDate, _setFocusedDate] = useState<Date>(new Date())\n  const {t: tCore} = useTranslation()\n  const {zoneDateToUtc} = useTimeZone()\n\n  const focusedDate = providedFocusedDate || _focusedDate\n\n  const onFocusedDateChange = useCallback(\n    (date: Date) => {\n      if (handleOnFocusedDateChange && providedFocusedDate) {\n        handleOnFocusedDateChange(date)\n      } else {\n        _setFocusedDate(date)\n      }\n    },\n    [handleOnFocusedDateChange, providedFocusedDate],\n  )\n\n  const setFocusedDate = useCallback(\n    (date: Date) => {\n      onFocusedDateChange(zoneDateToUtc(date))\n    },\n    [onFocusedDateChange, zoneDateToUtc],\n  )\n\n  const moveFocusedDate = useCallback(\n    (by: number) => setFocusedDate(addMonths(focusedDate, by)),\n    [focusedDate, setFocusedDate],\n  )\n\n  const handleDateChange = useCallback(\n    (date?: Date) => {\n      if (date) {\n        const targetDate = zoneDateToUtc(\n          setMinutes(setHours(date, date.getHours()), date.getMinutes()),\n        )\n        onSelect(targetDate)\n        onFocusedDateChange(targetDate)\n      } else {\n        onSelect(undefined)\n      }\n    },\n    [onSelect, zoneDateToUtc, onFocusedDateChange],\n  )\n\n  const ref = useRef<HTMLDivElement | null>(null)\n  useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(forwardedRef, () => ref.current)\n\n  const focusCurrentWeekDay = useCallback(() => {\n    ref.current?.querySelector<HTMLElement>(`[data-focused=\"true\"]`)?.focus()\n  }, [ref])\n\n  const handleKeyDown = useCallback(\n    (event: KeyboardEvent<HTMLInputElement>) => {\n      if (!ARROW_KEYS.includes(event.key)) {\n        return\n      }\n      event.preventDefault()\n      if (event.currentTarget.hasAttribute('data-calendar-grid')) {\n        focusCurrentWeekDay()\n        return\n      }\n      if (event.key === 'ArrowUp') {\n        onFocusedDateChange(zoneDateToUtc(addDays(focusedDate, -7)))\n      }\n      if (event.key === 'ArrowDown') {\n        onFocusedDateChange(zoneDateToUtc(addDays(focusedDate, 7)))\n      }\n      if (event.key === 'ArrowLeft') {\n        onFocusedDateChange(zoneDateToUtc(addDays(focusedDate, -1)))\n      }\n      if (event.key === 'ArrowRight') {\n        onFocusedDateChange(zoneDateToUtc(addDays(focusedDate, 1)))\n      }\n      // set focus temporarily on this element to make sure focus is still inside the calendar-grid after re-render\n      ref.current?.querySelector<HTMLElement>('[data-preserve-focus]')?.focus()\n    },\n    [ref, focusCurrentWeekDay, onFocusedDateChange, focusedDate, zoneDateToUtc],\n  )\n\n  useEffect(() => {\n    focusCurrentWeekDay()\n  }, [focusCurrentWeekDay])\n\n  useEffect(() => {\n    const currentFocusInCalendarGrid = document.activeElement?.matches(\n      '[data-calendar-grid], [data-calendar-grid] [data-preserve-focus]',\n    )\n    if (\n      // Only move focus if it's currently in the calendar grid\n      currentFocusInCalendarGrid\n    ) {\n      focusCurrentWeekDay()\n    }\n  }, [ref, focusCurrentWeekDay, focusedDate])\n\n  // Select AND focus current date when 'today' is pressed\n  const handleNowClick = useCallback(() => {\n    const now = new Date()\n    onSelect(now)\n    onFocusedDateChange(now)\n  }, [onSelect, onFocusedDateChange])\n\n  const handlePrevMonthClick = useCallback(() => moveFocusedDate(-1), [moveFocusedDate])\n\n  const handleNextMonthClick = useCallback(() => moveFocusedDate(1), [moveFocusedDate])\n\n  return (\n    <Box data-ui=\"Calendar\" {...restProps} ref={ref}>\n      {/* Month + Year header */}\n      <Flex\n        align=\"center\"\n        paddingLeft={4}\n        style={{\n          borderBottom: '1px solid var(--card-border-color)',\n          minHeight: `55px`,\n          position: 'sticky',\n          top: 0,\n        }}\n      >\n        <Flex align=\"center\" flex={1} justify=\"space-between\">\n          <Text weight=\"medium\" size={1}>\n            {DEFAULT_MONTH_NAMES[focusedDate?.getMonth()]} {focusedDate?.getFullYear()}\n          </Text>\n          <Flex paddingRight={3} gap={2}>\n            <TooltipDelayGroupProvider>\n              <Button\n                icon={ChevronLeftIcon}\n                mode=\"bleed\"\n                onClick={handlePrevMonthClick}\n                tooltipProps={{content: 'Previous month'}}\n                disabled={restProps.disabled}\n              />\n              <Button\n                icon={ChevronRightIcon}\n                mode=\"bleed\"\n                onClick={handleNextMonthClick}\n                tooltipProps={{content: 'Next month'}}\n                disabled={restProps.disabled}\n              />\n            </TooltipDelayGroupProvider>\n          </Flex>\n        </Flex>\n      </Flex>\n\n      {/* Select date */}\n      <Box>\n        {/* Selected month (grid of days) */}\n        <Box\n          data-calendar-grid\n          onKeyDown={handleKeyDown}\n          overflow=\"hidden\"\n          paddingBottom={1}\n          paddingX={1}\n          tabIndex={0}\n        >\n          <CalendarMonth\n            date={focusedDate}\n            focused={providedFocusedDate}\n            onSelect={handleDateChange}\n            selected={selectedDate}\n            renderCalendarDay={renderCalendarDay}\n            disabled={restProps.disabled}\n          />\n          {PRESERVE_FOCUS_ELEMENT}\n        </Box>\n      </Box>\n\n      {/* Today button */}\n      <Box flex={1} style={{borderBottom: '1px solid var(--card-border-color)'}}>\n        <Button\n          disabled={restProps.disabled}\n          mode=\"bleed\"\n          onClick={handleNowClick}\n          width=\"fill\"\n          aria-label={tCore('calendar.action.go-to-today-aria-label')}\n          text={tCore('calendar.action.go-to-today')}\n        />\n      </Box>\n    </Box>\n  )\n})\n","import {useTelemetry} from '@sanity/telemetry/react'\nimport {Box, Card, Flex, useToast} from '@sanity/ui'\nimport {type FormEvent, useCallback, useState} from 'react'\n\nimport {Button, Dialog} from '../../../../ui-components'\nimport {useTranslation} from '../../../i18n'\nimport {useSetPerspective} from '../../../perspective/useSetPerspective'\nimport {CreatedRelease, type OriginInfo} from '../../__telemetry__/releases.telemetry'\nimport {useCreateReleaseMetadata} from '../../hooks/useCreateReleaseMetadata'\nimport {isReleaseLimitError} from '../../store/isReleaseLimitError'\nimport {type EditableReleaseDocument} from '../../store/types'\nimport {useReleaseOperations} from '../../store/useReleaseOperations'\nimport {getReleaseIdFromReleaseDocumentId} from '../../util/getReleaseIdFromReleaseDocumentId'\nimport {getReleaseDefaults} from '../../util/util'\nimport {ReleaseForm} from './ReleaseForm'\n\ninterface CreateReleaseDialogProps {\n  onCancel: () => void\n  onSubmit: (createdReleaseId: string) => void\n  origin?: OriginInfo['origin']\n}\n\nexport function CreateReleaseDialog(props: CreateReleaseDialogProps): React.JSX.Element {\n  const {onCancel, onSubmit, origin} = props\n  const toast = useToast()\n  const {createRelease} = useReleaseOperations()\n  const setPerspective = useSetPerspective()\n  const {t} = useTranslation()\n  const telemetry = useTelemetry()\n  const createReleaseMetadata = useCreateReleaseMetadata()\n\n  const [release, setRelease] = useState(getReleaseDefaults)\n  const [isSubmitting, setIsSubmitting] = useState(false)\n\n  const handleOnSubmit = useCallback(\n    async (event: FormEvent<HTMLFormElement>) => {\n      event.preventDefault()\n\n      try {\n        setIsSubmitting(true)\n\n        const releaseValue = createReleaseMetadata(release)\n\n        await createRelease(releaseValue)\n        telemetry.log(CreatedRelease, {origin})\n\n        // TODO: Remove this! temporary fix to give some time for the release to be created and the releases store state updated before closing the dialog.\n        await new Promise((resolve) => setTimeout(resolve, 1000))\n        // TODO: Remove the upper part\n\n        setPerspective(getReleaseIdFromReleaseDocumentId(release._id))\n\n        onSubmit(getReleaseIdFromReleaseDocumentId(release._id))\n      } catch (err) {\n        if (isReleaseLimitError(err)) {\n          onCancel()\n        } else {\n          console.error(err)\n          toast.push({\n            closable: true,\n            status: 'error',\n            title: t('release.toast.create-release-error.title'),\n          })\n        }\n      } finally {\n        setIsSubmitting(false)\n      }\n    },\n    [\n      release,\n      toast,\n      createReleaseMetadata,\n      createRelease,\n      telemetry,\n      origin,\n      setPerspective,\n      onSubmit,\n      onCancel,\n      t,\n    ],\n  )\n\n  const handleOnChange = useCallback((releaseMetadata: EditableReleaseDocument) => {\n    setRelease(releaseMetadata)\n  }, [])\n\n  const dialogTitle = t('release.dialog.create.title')\n  const dialogConfirm = t('release.dialog.create.confirm')\n\n  return (\n    <Dialog\n      onClickOutside={onCancel}\n      header={dialogTitle}\n      id=\"create-release-dialog\"\n      onClose={onCancel}\n      width={1}\n      padding={false}\n    >\n      <Card padding={4} borderTop>\n        <form onSubmit={handleOnSubmit}>\n          <Box paddingBottom={4}>\n            <ReleaseForm onChange={handleOnChange} value={release} />\n          </Box>\n          <Flex justify=\"flex-end\" paddingTop={5}>\n            <Button\n              size=\"large\"\n              disabled={isSubmitting}\n              type=\"submit\"\n              text={dialogConfirm}\n              loading={isSubmitting}\n              data-testid=\"submit-release-button\"\n            />\n          </Flex>\n        </form>\n      </Card>\n    </Dialog>\n  )\n}\n","import {useCallback, useContext, useEffect, useMemo, useState} from 'react'\nimport {useObservable} from 'react-rx'\nimport {ReleasesMetadataContext} from 'sanity/_singletons'\n\nimport {type MetadataWrapper} from '../store/createReleaseMetadataAggregator'\nimport {type ReleasesMetadata} from '../store/useReleasesMetadata'\nimport {useReleasesStore} from '../store/useReleasesStore'\n\n/**\n * @internal\n */\nexport interface ReleasesMetadataContextValue {\n  state: MetadataWrapper\n  addReleaseIdsToListener: (slugs: string[]) => void\n  removeReleaseIdsFromListener: (slugs: string[]) => void\n}\n\nconst DEFAULT_METADATA_STATE: MetadataWrapper = {\n  data: null,\n  error: null,\n  loading: false,\n}\n\nconst ReleasesMetadataProviderInner = ({children}: {children: React.ReactNode}) => {\n  const [listenerReleaseIds, setListenerReleaseIds] = useState<string[]>([])\n  const {getMetadataStateForSlugs$} = useReleasesStore()\n  const [releasesMetadata, setReleasesMetadata] = useState<Record<string, ReleasesMetadata> | null>(\n    null,\n  )\n\n  const memoObservable = useMemo(\n    () => getMetadataStateForSlugs$(listenerReleaseIds.map((slug) => slug)),\n    [getMetadataStateForSlugs$, listenerReleaseIds],\n  )\n\n  const observedResult = useObservable(memoObservable) || DEFAULT_METADATA_STATE\n\n  // patch metadata in local state\n  useEffect(\n    () =>\n      setReleasesMetadata((prevReleaseMetadata) => {\n        if (!observedResult.data) return prevReleaseMetadata\n\n        return {...(prevReleaseMetadata || {}), ...observedResult.data}\n      }),\n    [observedResult.data],\n  )\n\n  const addReleaseIdsToListener = useCallback((addReleaseIds: (string | undefined)[]) => {\n    setListenerReleaseIds((prevSlugs) => [\n      ...prevSlugs,\n      ...addReleaseIds.filter((releaseId): releaseId is string => typeof releaseId === 'string'),\n    ])\n  }, [])\n\n  const removeReleaseIdsFromListener = useCallback((releaseIds: string[]) => {\n    setListenerReleaseIds((prevSlugs) => {\n      const {nextSlugs} = prevSlugs.reduce<{removedSlugs: string[]; nextSlugs: string[]}>(\n        (acc, slug) => {\n          const {removedSlugs, nextSlugs: accNextSlugs} = acc\n          /**\n           * In cases where multiple consumers are listening to the same release id\n           * the release id will appear multiple times in listenerReleaseIds array\n           * removing should only remove 1 instance of the slug and retain all others\n           */\n          if (releaseIds.includes(slug) && !removedSlugs.includes(slug)) {\n            return {removedSlugs: [...removedSlugs, slug], nextSlugs: accNextSlugs}\n          }\n          return {removedSlugs, nextSlugs: [...accNextSlugs, slug]}\n        },\n        {removedSlugs: [], nextSlugs: []},\n      )\n      return nextSlugs\n    })\n  }, [])\n\n  const context = useMemo<{\n    addReleaseIdsToListener: (slugs: string[]) => void\n    removeReleaseIdsFromListener: (slugs: string[]) => void\n    state: MetadataWrapper\n  }>(\n    () => ({\n      addReleaseIdsToListener: addReleaseIdsToListener,\n      removeReleaseIdsFromListener: removeReleaseIdsFromListener,\n      state: {...observedResult, data: releasesMetadata},\n    }),\n    [addReleaseIdsToListener, releasesMetadata, observedResult, removeReleaseIdsFromListener],\n  )\n\n  return (\n    <ReleasesMetadataContext.Provider value={context}>{children}</ReleasesMetadataContext.Provider>\n  )\n}\n\nexport const ReleasesMetadataProvider = ({children}: {children: React.ReactNode}) => {\n  const context = useContext(ReleasesMetadataContext)\n\n  // Avoid mounting the provider if it's already provided by a parent\n  if (context) return children\n  return <ReleasesMetadataProviderInner>{children}</ReleasesMetadataProviderInner>\n}\n\nexport const useReleasesMetadataProvider = (): ReleasesMetadataContextValue => {\n  const contextValue = useContext(ReleasesMetadataContext)\n\n  return (\n    contextValue || {\n      state: DEFAULT_METADATA_STATE,\n      addReleaseIdsToListener: () => null,\n      removeReleaseIdsFromListener: () => null,\n    }\n  )\n}\n","import {useEffect, useState} from 'react'\n\nimport {useReleasesMetadataProvider} from '../contexts/ReleasesMetadataProvider'\n\nexport interface ReleasesMetadata {\n  /**\n   * The number of documents with the release version as a prefix\n   */\n  documentCount: number\n  /**\n   * The last time a document in the release was edited\n   */\n  updatedAt: string | null\n}\n\nexport const useReleasesMetadata = (releaseIds: string[]) => {\n  const {\n    addReleaseIdsToListener: addBundleIdsToListener,\n    removeReleaseIdsFromListener: removeBundleIdsFromListener,\n    state,\n  } = useReleasesMetadataProvider()\n  const [responseData, setResponseData] = useState<Record<string, ReleasesMetadata> | null>(null)\n\n  useEffect(() => {\n    if (releaseIds.length) addBundleIdsToListener([...new Set(releaseIds)])\n\n    return () => removeBundleIdsFromListener([...new Set(releaseIds)])\n  }, [addBundleIdsToListener, releaseIds, removeBundleIdsFromListener])\n\n  const {data, loading} = state\n\n  useEffect(() => {\n    if (!data) return\n\n    const hasUpdatedMetadata =\n      !responseData || Object.entries(responseData).some(([key, value]) => value !== data[key])\n\n    if (hasUpdatedMetadata) {\n      const nextResponseData = Object.fromEntries(\n        releaseIds.map((releaseId) => [releaseId, data[releaseId]]),\n      )\n\n      setResponseData(nextResponseData)\n    }\n  }, [releaseIds, data, responseData])\n\n  return {\n    error: state.error,\n    // loading is only for initial load\n    // changing listened to release IDs will not cause a re-load\n    loading,\n    data: responseData,\n  }\n}\n","export const ReleaseIllustration = () => {\n  return (\n    <svg\n      width=\"248\"\n      height=\"201\"\n      viewBox=\"0 0 248 201\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        opacity=\"0.2\"\n        d=\"M175.4 29.8262V98.1738C175.4 103.823 181.346 107.498 186.399 104.971L222.399 86.9714C224.974 85.684 226.6 83.0524 226.6 80.1738V11.8262C226.6 6.17654 220.654 2.50197 215.601 5.02859L179.601 23.0286C177.026 24.316 175.4 26.9476 175.4 29.8262Z\"\n        fill=\"white\"\n        stroke=\"#515870\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        opacity=\"0.2\"\n        d=\"M183.4 33.8262V102.174C183.4 107.823 189.346 111.498 194.399 108.971L230.399 90.9714C232.974 89.684 234.6 87.0524 234.6 84.1738V15.8262C234.6 10.1765 228.654 6.50197 223.601 9.02859L187.601 27.0286C185.026 28.316 183.4 30.9476 183.4 33.8262Z\"\n        fill=\"white\"\n        stroke=\"#515870\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        opacity=\"0.2\"\n        d=\"M195.4 39.8262V108.174C195.4 113.823 201.346 117.498 206.399 114.971L242.399 96.9714C244.974 95.684 246.6 93.0524 246.6 90.1738V21.8262C246.6 16.1765 240.654 12.502 235.601 15.0286L199.601 33.0286C197.026 34.316 195.4 36.9476 195.4 39.8262Z\"\n        fill=\"white\"\n        stroke=\"#515870\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        opacity=\"0.6\"\n        d=\"M109.4 50.8262V119.174C109.4 124.823 115.346 128.498 120.399 125.971L156.399 107.971C158.974 106.684 160.6 104.052 160.6 101.174V32.8262C160.6 27.1765 154.654 23.502 149.601 26.0286L113.601 44.0286C111.026 45.316 109.4 47.9476 109.4 50.8262Z\"\n        fill=\"white\"\n        stroke=\"#515870\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        opacity=\"0.9\"\n        d=\"M118 123.174V54.8262C118 52.1748 119.498 49.751 121.87 48.5653L157.87 30.5652C162.524 28.2381 168 31.6226 168 36.8262V105.174C168 107.825 166.502 110.249 164.131 111.435L128.13 129.435C123.476 131.762 118 128.377 118 123.174Z\"\n        fill=\"#F6F6F8\"\n        stroke=\"#4E556D\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        opacity=\"0.2\"\n        d=\"M121.4 56.8262V125.174C121.4 130.823 127.346 134.498 132.399 131.971L168.399 113.971C170.974 112.684 172.6 110.052 172.6 107.174V38.8262C172.6 33.1765 166.654 29.502 161.601 32.0286L125.601 50.0286C123.026 51.316 121.4 53.9476 121.4 56.8262Z\"\n        fill=\"white\"\n        stroke=\"#515870\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        opacity=\"0.2\"\n        d=\"M125.4 58.8262V127.174C125.4 132.823 131.346 136.498 136.399 133.971L172.399 115.971C174.974 114.684 176.6 112.052 176.6 109.174V40.8262C176.6 35.1765 170.654 31.502 165.601 34.0286L129.601 52.0286C127.026 53.316 125.4 55.9476 125.4 58.8262Z\"\n        fill=\"white\"\n        stroke=\"#515870\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        opacity=\"0.2\"\n        d=\"M137.4 64.8262V133.174C137.4 138.823 143.346 142.498 148.399 139.971L184.399 121.971C186.974 120.684 188.6 118.052 188.6 115.174V46.8262C188.6 41.1765 182.654 37.502 177.601 40.0286L141.601 58.0286C139.026 59.316 137.4 61.9476 137.4 64.8262Z\"\n        fill=\"white\"\n        stroke=\"#515870\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        opacity=\"0.2\"\n        d=\"M145.4 68.8262V137.174C145.4 142.823 151.346 146.498 156.399 143.971L192.399 125.971C194.974 124.684 196.6 122.052 196.6 119.174V50.8262C196.6 45.1765 190.654 41.502 185.601 44.0286L149.601 62.0286C147.026 63.316 145.4 65.9476 145.4 68.8262Z\"\n        fill=\"white\"\n        stroke=\"#515870\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        opacity=\"0.6\"\n        d=\"M1.4 104.826V173.174C1.4 178.823 7.34557 182.498 12.3988 179.971L48.3988 161.971C50.9736 160.684 52.6 158.052 52.6 155.174V86.8262C52.6 81.1765 46.6544 77.502 41.6012 80.0286L5.60117 98.0286C3.02641 99.316 1.4 101.948 1.4 104.826Z\"\n        fill=\"white\"\n        stroke=\"#515870\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        opacity=\"0.6\"\n        d=\"M56.6 146.174V77.8262C56.6 75.4021 57.9696 73.186 60.1378 72.1019L96.1378 54.1019C100.393 51.9742 105.4 55.0686 105.4 59.8262V128.174C105.4 130.598 104.03 132.814 101.862 133.898L65.8622 151.898C61.6068 154.026 56.6 150.931 56.6 146.174Z\"\n        fill=\"white\"\n        stroke=\"#515870\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        opacity=\"0.8\"\n        d=\"M60.6 148.174V79.8262C60.6 77.4021 61.9696 75.186 64.1378 74.1019L100.138 56.1019C104.393 53.9742 109.4 57.0686 109.4 61.8262V130.174C109.4 132.598 108.03 134.814 105.862 135.898L69.8622 153.898C65.6068 156.026 60.6 152.931 60.6 148.174Z\"\n        fill=\"white\"\n        stroke=\"#515870\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        opacity=\"0.9\"\n        d=\"M64 150.174V81.8262C64 79.1748 65.498 76.751 67.8695 75.5653L103.87 57.5652C108.524 55.2381 114 58.6226 114 63.8262V132.174C114 134.825 112.502 137.249 110.131 138.435L74.1305 156.435C69.4762 158.762 64 155.377 64 150.174Z\"\n        fill=\"#F6F6F8\"\n        stroke=\"#4E556D\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        opacity=\"0.2\"\n        d=\"M72.6 154.174V85.8262C72.6 83.4021 73.9696 81.186 76.1378 80.1019L112.138 62.1019C116.393 59.9742 121.4 63.0686 121.4 67.8262V136.174C121.4 138.598 120.03 140.814 117.862 141.898L81.8622 159.898C77.6068 162.026 72.6 158.931 72.6 154.174Z\"\n        fill=\"white\"\n        stroke=\"#515870\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        opacity=\"0.2\"\n        d=\"M76.6 156.174V87.8262C76.6 85.4021 77.9696 83.186 80.1378 82.1019L116.138 64.1019C120.393 61.9742 125.4 65.0686 125.4 69.8262V138.174C125.4 140.598 124.03 142.814 121.862 143.898L85.8622 161.898C81.6068 164.026 76.6 160.931 76.6 156.174Z\"\n        fill=\"white\"\n        stroke=\"#515870\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        opacity=\"0.2\"\n        d=\"M84.6 160.174V91.8262C84.6 89.4021 85.9696 87.186 88.1378 86.1019L124.138 68.1019C128.393 65.9742 133.4 69.0686 133.4 73.8262V142.174C133.4 144.598 132.03 146.814 129.862 147.898L93.8622 165.898C89.6068 168.026 84.6 164.931 84.6 160.174Z\"\n        fill=\"white\"\n        stroke=\"#515870\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        opacity=\"0.2\"\n        d=\"M88.6 162.174V93.8262C88.6 91.4021 89.9696 89.186 92.1378 88.1019L128.138 70.1019C132.393 67.9742 137.4 71.0686 137.4 75.8262V144.174C137.4 146.598 136.03 148.814 133.862 149.898L97.8622 167.898C93.6068 170.026 88.6 166.931 88.6 162.174Z\"\n        fill=\"white\"\n        stroke=\"#515870\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        opacity=\"0.2\"\n        d=\"M92.6 164.174V95.8262C92.6 93.4021 93.9696 91.186 96.1378 90.1019L132.138 72.1019C136.393 69.9742 141.4 73.0686 141.4 77.8262V146.174C141.4 148.598 140.03 150.814 137.862 151.898L101.862 169.898C97.6068 172.026 92.6 168.931 92.6 164.174Z\"\n        fill=\"white\"\n        stroke=\"#515870\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        opacity=\"0.2\"\n        d=\"M96.6 166.174V97.8262C96.6 95.4021 97.9696 93.186 100.138 92.1019L136.138 74.1019C140.393 71.9742 145.4 75.0686 145.4 79.8262V148.174C145.4 150.598 144.03 152.814 141.862 153.898L105.862 171.898C101.607 174.026 96.6 170.931 96.6 166.174Z\"\n        fill=\"white\"\n        stroke=\"#515870\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        opacity=\"0.2\"\n        d=\"M104.6 170.174V101.826C104.6 99.4021 105.97 97.186 108.138 96.1019L144.138 78.1019C148.393 75.9742 153.4 79.0686 153.4 83.8262V152.174C153.4 154.598 152.03 156.814 149.862 157.898L113.862 175.898C109.607 178.026 104.6 174.931 104.6 170.174Z\"\n        fill=\"white\"\n        stroke=\"#515870\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        opacity=\"0.8\"\n        d=\"M5.4 106.826V175.174C5.4 180.823 11.3456 184.498 16.3988 181.971L52.3988 163.971C54.9736 162.684 56.6 160.052 56.6 157.174V88.8262C56.6 83.1765 50.6544 79.502 45.6012 82.0286L9.60117 100.029C7.02641 101.316 5.4 103.948 5.4 106.826Z\"\n        fill=\"white\"\n        stroke=\"#515870\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        opacity=\"0.9\"\n        d=\"M10 177.174V108.826C10 106.175 11.498 103.751 13.8695 102.565L49.8695 84.5652C54.5238 82.2381 60 85.6226 60 90.8262V159.174C60 161.825 58.502 164.249 56.1305 165.435L20.1305 183.435C15.4762 185.762 10 182.377 10 177.174Z\"\n        fill=\"#F6F6F8\"\n        stroke=\"#4E556D\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        opacity=\"0.2\"\n        d=\"M13.4 110.826V179.174C13.4 184.823 19.3456 188.498 24.3988 185.971L60.3988 167.971C62.9736 166.684 64.6 164.052 64.6 161.174V92.8262C64.6 87.1765 58.6544 83.502 53.6012 86.0286L17.6012 104.029C15.0264 105.316 13.4 107.948 13.4 110.826Z\"\n        fill=\"white\"\n        stroke=\"#515870\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        opacity=\"0.2\"\n        d=\"M29.4 118.826V187.174C29.4 192.823 35.3456 196.498 40.3988 193.971L76.3988 175.971C78.9736 174.684 80.6 172.052 80.6 169.174V100.826C80.6 95.1765 74.6544 91.502 69.6012 94.0286L33.6012 112.029C31.0264 113.316 29.4 115.948 29.4 118.826Z\"\n        fill=\"white\"\n        stroke=\"#515870\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        opacity=\"0.2\"\n        d=\"M33.4 120.826V189.174C33.4 194.823 39.3456 198.498 44.3988 195.971L80.3988 177.971C82.9736 176.684 84.6 174.052 84.6 171.174V102.826C84.6 97.1765 78.6544 93.502 73.6012 96.0286L37.6012 114.029C35.0264 115.316 33.4 117.948 33.4 120.826Z\"\n        fill=\"white\"\n        stroke=\"#515870\"\n        strokeWidth=\"1.2\"\n      />\n    </svg>\n  )\n}\n","import {CalendarIcon} from '@sanity/icons'\n// eslint-disable-next-line no-restricted-imports\nimport {Button, useClickOutsideEvent} from '@sanity/ui'\nimport {type ReactNode, useRef, useState} from 'react'\n\nimport {Popover} from '../../../../ui-components/popover/Popover'\nimport {Tooltip} from '../../../../ui-components/tooltip/Tooltip'\nimport {useTranslation} from '../../../i18n/hooks/useTranslation'\nimport {releasesLocaleNamespace} from '../../i18n'\n\nexport function CalendarPopover({content}: {content: ReactNode}) {\n  const buttonRef = useRef<HTMLButtonElement | null>(null)\n  const popoverRef = useRef<HTMLDivElement | null>(null)\n  const [isCalendarOpen, setIsCalendarOpen] = useState(false)\n  const {t} = useTranslation(releasesLocaleNamespace)\n\n  useClickOutsideEvent(\n    () => setIsCalendarOpen(false),\n    () => [buttonRef.current, popoverRef.current],\n  )\n\n  return (\n    <Popover content={content} placement=\"bottom\" open={isCalendarOpen} ref={popoverRef}>\n      <Tooltip content={t('overview.calendar.tooltip')}>\n        <Button\n          name=\"calendar\"\n          data-as=\"a\"\n          icon={CalendarIcon}\n          mode=\"bleed\"\n          padding={2}\n          radius=\"full\"\n          selected={isCalendarOpen}\n          onClick={() => setIsCalendarOpen((prev) => !prev)}\n          ref={buttonRef}\n          space={2}\n        />\n      </Tooltip>\n    </Popover>\n  )\n}\n","import {endOfDay, startOfDay} from 'date-fns'\nimport {useCallback} from 'react'\n\nimport useTimeZone from '../../../scheduledPublishing/hooks/useTimeZone'\n\nexport const useTimezoneAdjustedDateTimeRange = () => {\n  const {zoneDateToUtc} = useTimeZone()\n\n  return useCallback(\n    (date: Date) => [startOfDay(date), endOfDay(date)].map(zoneDateToUtc),\n    [zoneDateToUtc],\n  )\n}\n","import {CloseIcon} from '@sanity/icons'\nimport {format} from 'date-fns'\nimport {AnimatePresence, motion} from 'framer-motion'\nimport {useMemo, useState} from 'react'\n\nimport {Button} from '../../../../ui-components'\nimport {CalendarDay} from '../../../components/inputs/DateFilters/calendar/CalendarDay'\nimport {type CalendarProps} from '../../../components/inputs/DateFilters/calendar/CalendarFilter'\nimport {useActiveReleases} from '../../store/useActiveReleases'\nimport {useTimezoneAdjustedDateTimeRange} from './useTimezoneAdjustedDateTimeRange'\n\nexport const ReleaseCalendarFilterDay: CalendarProps['renderCalendarDay'] = (props) => {\n  const {data: releases} = useActiveReleases()\n  const getTimezoneAdjustedDateTimeRange = useTimezoneAdjustedDateTimeRange()\n\n  const {date} = props\n\n  const [startOfDayForTimeZone, endOfDayForTimeZone] = getTimezoneAdjustedDateTimeRange(date)\n\n  const dayHasReleases = releases?.some((release) => {\n    const releasePublishAt = release.publishAt || release.metadata.intendedPublishAt\n    if (!releasePublishAt) return false\n\n    const publishDateUTC = new Date(releasePublishAt)\n\n    return (\n      release.metadata.releaseType === 'scheduled' &&\n      publishDateUTC >= startOfDayForTimeZone &&\n      publishDateUTC <= endOfDayForTimeZone\n    )\n  })\n\n  return <CalendarDay {...props} dateStyles={dayHasReleases ? {fontWeight: 700} : {}} />\n}\n\nconst MotionButton = motion.create(Button)\n\nexport const DateFilterButton = ({\n  filterDate,\n  onClear,\n}: {\n  filterDate: Date\n  onClear: () => void\n}) => {\n  const [isExiting, setIsExiting] = useState(false)\n\n  const handleOnExitComplete = useMemo(\n    () => () => {\n      setIsExiting(false)\n      onClear()\n    },\n    [onClear],\n  )\n\n  if (!filterDate) return null\n\n  return (\n    <AnimatePresence onExitComplete={handleOnExitComplete}>\n      {!isExiting && (\n        <MotionButton\n          data-testid=\"selected-date-filter\"\n          initial={{width: 0, opacity: 0}}\n          animate={{width: 'auto', opacity: 1}}\n          exit={{width: 0, opacity: 0}}\n          transition={{duration: 0.35, ease: 'easeInOut'}}\n          iconRight={CloseIcon}\n          mode=\"bleed\"\n          onClick={() => setIsExiting(true)}\n          selected\n          text={format(filterDate, 'PPP')}\n        />\n      )}\n    </AnimatePresence>\n  )\n}\n","import {type ReleaseDocument} from '../../store/types'\nimport {getReleaseIdFromReleaseDocumentId} from '../../util/getReleaseIdFromReleaseDocumentId'\nimport {ReleaseMenuButton} from '../components/ReleaseMenuButton/ReleaseMenuButton'\nimport {useBundleDocuments} from '../detail/useBundleDocuments'\n\nexport const ReleaseMenuButtonWrapper = ({\n  release,\n  documentsCount,\n}: {\n  release: ReleaseDocument\n  documentsCount: number\n}) => {\n  const {results: documents} = useBundleDocuments(getReleaseIdFromReleaseDocumentId(release._id))\n\n  return (\n    <ReleaseMenuButton release={release} documentsCount={documentsCount} documents={documents} />\n  )\n}\n","import {Text} from '@sanity/ui'\n\ntype Props = {\n  documentCount: number | undefined\n}\n\nexport const ReleaseDocumentsCounter = ({documentCount}: Props) => (\n  <Text muted size={1}>\n    {documentCount || '-'}\n  </Text>\n)\n","import {type PreviewLayoutKey} from './types'\n\nexport const PREVIEW_SIZES: Record<\n  PreviewLayoutKey,\n  {\n    icon: number\n    media: {height: number; width: number}\n  }\n> = {\n  block: {\n    icon: 25,\n    media: {width: 33, height: 33},\n  },\n  blockImage: {\n    icon: 25,\n    media: {width: 600, height: 400},\n  },\n  compact: {\n    icon: 21,\n    media: {width: 25, height: 25},\n  },\n  default: {\n    icon: 21,\n    media: {width: 33, height: 33},\n  },\n  detail: {\n    icon: 25,\n    media: {width: 73, height: 73},\n  },\n  inline: {\n    icon: 15,\n    media: {width: 15, height: 15},\n  },\n  media: {\n    icon: 25,\n    media: {width: 160, height: 160},\n  },\n}\n","import {Box, Flex, rem, Skeleton, Text, TextSkeleton} from '@sanity/ui'\nimport {css, styled} from 'styled-components'\n\nimport {PREVIEW_SIZES} from '../constants'\n\nexport const RootFlex = styled(Flex).attrs({align: 'center'})`\n  height: ${rem(PREVIEW_SIZES.detail.media.height)};\n`\n\nexport const StatusBox = styled(Box)`\n  white-space: nowrap;\n`\n\nexport const MediaSkeleton = styled(Skeleton).attrs({animated: true, radius: 2})`\n  width: ${rem(PREVIEW_SIZES.detail.media.width)};\n  height: ${rem(PREVIEW_SIZES.detail.media.height)};\n`\n\nexport const TitleSkeleton = styled(TextSkeleton).attrs({animated: true, radius: 1, size: 1})`\n  max-width: ${rem(160)}; /* 80% of 200px */\n  width: 80%;\n`\n\nexport const SubtitleSkeleton = styled(TextSkeleton).attrs({animated: true, radius: 1, size: 1})`\n  max-width: ${rem(120)}; /* 60% of 200px */\n  width: 60%;\n`\n\nexport const DescriptionSkeleton = styled(TextSkeleton).attrs({animated: true, radius: 1, size: 1})`\n  max-width: ${rem(180)}; /* 90% of 200px */\n  width: 90%;\n`\n\nexport const DescriptionText = styled(Text)(({theme}) => {\n  const {fonts} = theme.sanity\n  const textSize1 = fonts.text.sizes[1]\n  const maxLines = 2\n  const maxHeight = textSize1.lineHeight * maxLines\n\n  return css`\n    & > span {\n      max-height: ${rem(maxHeight)};\n\n      /* Multi-line text overflow */\n      display: -webkit-box;\n      overflow: hidden;\n      overflow: clip;\n      text-overflow: ellipsis;\n      -webkit-line-clamp: ${maxLines};\n      -webkit-box-orient: vertical;\n    }\n  `\n})\n","import {PinFilledIcon, PinIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Skeleton, Stack, Text} from '@sanity/ui'\nimport {useCallback} from 'react'\nimport {useTranslation} from 'react-i18next'\nimport {useRouter} from 'sanity/router'\n\nimport {Button, Tooltip} from '../../../../../ui-components'\nimport {PREVIEW_SIZES} from '../../../../components/previews/constants'\nimport {TitleSkeleton} from '../../../../components/previews/general/DetailPreview.styled'\nimport {Translate} from '../../../../i18n'\nimport {usePerspective} from '../../../../perspective/usePerspective'\nimport {useSetPerspective} from '../../../../perspective/useSetPerspective'\nimport {ReleaseAvatar} from '../../../components/ReleaseAvatar'\nimport {releasesLocaleNamespace} from '../../../i18n'\nimport {getReleaseIdFromReleaseDocumentId} from '../../../util/getReleaseIdFromReleaseDocumentId'\nimport {getReleaseTone} from '../../../util/getReleaseTone'\nimport {type TableRowProps} from '../../components/Table/Table'\nimport {type VisibleColumn} from '../../components/Table/types'\nimport {type TableRelease} from '../ReleasesOverview'\n\nexport const ReleaseNameCell: VisibleColumn<TableRelease>['cell'] = ({\n  cellProps,\n  datum: release,\n}) => {\n  const router = useRouter()\n  const {t} = useTranslation(releasesLocaleNamespace)\n  const {t: tCore} = useTranslation()\n  const {selectedReleaseId} = usePerspective()\n  const setPerspective = useSetPerspective()\n  const {state} = release\n  const releaseId = release.isLoading ? 'loading' : getReleaseIdFromReleaseDocumentId(release._id)\n  const isArchived = state === 'archived'\n  const isReleasePinned = releaseId === selectedReleaseId\n\n  const handlePinRelease = useCallback(() => {\n    if (isReleasePinned) {\n      setPerspective('drafts')\n    } else {\n      setPerspective(releaseId)\n    }\n  }, [isReleasePinned, releaseId, setPerspective])\n\n  const WrapperBox = useCallback(\n    ({children}: {children: React.ReactNode}) => {\n      return (\n        <Box {...cellProps} paddingLeft={3} flex={1} paddingY={1} paddingRight={2} sizing=\"border\">\n          {children}\n        </Box>\n      )\n    },\n    [cellProps],\n  )\n\n  if (release.isLoading) {\n    return (\n      <WrapperBox>\n        <Flex align=\"center\" gap={2}>\n          <Skeleton animated radius={1} style={PREVIEW_SIZES.default.media} />\n          <TitleSkeleton />\n        </Flex>\n      </WrapperBox>\n    )\n  }\n\n  const cardProps: TableRowProps = release.isDeleted\n    ? {tone: 'transparent'}\n    : {\n        as: 'a',\n        // navigate to release detail\n        onClick: () => router.navigate({releaseId: releaseId}),\n        tone: 'inherit',\n      }\n\n  const pinButtonIcon = isReleasePinned ? PinFilledIcon : PinIcon\n  const displayTitle = release.metadata.title || tCore('release.placeholder-untitled-release')\n\n  return (\n    <WrapperBox>\n      <Tooltip\n        disabled={!release.isDeleted}\n        content={\n          <Text size={1}>\n            <Translate t={t} i18nKey=\"deleted-release\" values={{title: displayTitle}} />\n          </Text>\n        }\n      >\n        <Flex align=\"center\" gap={3}>\n          <Button\n            tooltipProps={{\n              disabled: isArchived || release.state === 'published',\n              content: isReleasePinned\n                ? t('dashboard.details.unpin-release')\n                : t('dashboard.details.pin-release'),\n            }}\n            disabled={isArchived || release.state === 'published'}\n            icon={pinButtonIcon}\n            mode=\"bleed\"\n            data-testid=\"pin-release-button\"\n            onClick={handlePinRelease}\n            radius=\"full\"\n            selected={isReleasePinned}\n            aria-label={\n              isReleasePinned\n                ? `${t('dashboard.details.unpin-release')}: \"${release.metadata.title}\"`\n                : `${t('dashboard.details.pin-release')}: \"${release.metadata.title}\"`\n            }\n            aria-live=\"assertive\"\n          />\n          <Card {...cardProps} padding={2} radius={2} flex={1}>\n            <Flex align=\"center\" gap={2}>\n              <Box flex=\"none\">\n                <ReleaseAvatar tone={getReleaseTone(release)} />\n              </Box>\n              <Stack flex={1} space={2}>\n                <Flex align=\"center\" gap={2}>\n                  <Text size={1} weight=\"medium\">\n                    {displayTitle}\n                  </Text>\n                </Flex>\n              </Stack>\n            </Flex>\n          </Card>\n        </Flex>\n      </Tooltip>\n    </WrapperBox>\n  )\n}\n","import {ErrorOutlineIcon, LockIcon} from '@sanity/icons'\nimport {Flex, Text} from '@sanity/ui'\nimport {type TFunction} from 'i18next'\nimport {Fragment} from 'react'\n\nimport {ToneIcon} from '../../../../ui-components/toneIcon/ToneIcon'\nimport {Tooltip} from '../../../../ui-components/tooltip/Tooltip'\nimport {RelativeTime} from '../../../components'\nimport {getPublishDateFromRelease, isReleaseScheduledOrScheduling} from '../../util/util'\nimport {ReleaseTime} from '../components/ReleaseTime'\nimport {Headers} from '../components/Table/TableHeader'\nimport {type Column} from '../components/Table/types'\nimport {ReleaseDocumentsCounter} from './columnCells/ReleaseDocumentsCounter'\nimport {ReleaseNameCell} from './columnCells/ReleaseName'\nimport {type Mode} from './queryParamUtils'\nimport {type TableRelease} from './ReleasesOverview'\n\nconst enableColumnFormMode =\n  (currentMode: Mode) => (column: Column<TableRelease>, expectedMode: Mode | 'all') => {\n    if (!currentMode) throw new Error('currentMode is required')\n    if (expectedMode === 'all' || expectedMode === currentMode) {\n      return column\n    }\n    return undefined\n  }\n\nexport const releasesOverviewColumnDefs: (\n  t: TFunction<'releases', undefined>,\n  releaseGroupMode: Mode,\n) => Column<TableRelease>[] = (t, releaseGroupMode) => {\n  const checkColumnMode = enableColumnFormMode(releaseGroupMode)\n  return [\n    checkColumnMode(\n      {\n        id: 'metadata.title',\n        sorting: true,\n        width: null,\n        style: {minWidth: '50%', maxWidth: '50%'},\n        header: (props) => (\n          <Flex\n            {...props.headerProps}\n            flex={1}\n            paddingLeft={6}\n            width={3}\n            paddingRight={2}\n            paddingY={3}\n            sizing=\"border\"\n          >\n            <Headers.SortHeaderButton {...props} text={t('table-header.title')} />\n          </Flex>\n        ),\n        cell: ReleaseNameCell,\n      },\n      'all',\n    ),\n    checkColumnMode(\n      {\n        id: 'publishAt',\n        sorting: true,\n        sortTransform: (release) => {\n          if (release.metadata.releaseType === 'undecided') return Infinity\n\n          const publishDate = getPublishDateFromRelease(release)\n\n          if (release.metadata.releaseType === 'asap' || !publishDate) return 0\n          return new Date(publishDate).getTime()\n        },\n        width: 250,\n        header: (props) => (\n          <Flex {...props.headerProps} paddingY={3} sizing=\"border\">\n            <Headers.SortHeaderButton text={t('table-header.time')} {...props} />\n          </Flex>\n        ),\n        cell: ({cellProps, datum: release}) => {\n          if (release.isLoading) return null\n\n          return (\n            <Flex {...cellProps} align=\"center\" paddingX={2} paddingY={3} gap={2} sizing=\"border\">\n              <Text muted size={1}>\n                <ReleaseTime release={release} />\n              </Text>\n              {isReleaseScheduledOrScheduling(release) && (\n                <Text size={1} data-testid=\"release-lock-icon\">\n                  <LockIcon />\n                </Text>\n              )}\n            </Flex>\n          )\n        },\n      },\n      'active',\n    ),\n    // This is a hidden column only used for sorting when\n    // no other sort column is selected (the default state)\n    checkColumnMode(\n      {\n        id: 'lastActivity',\n        hidden: true,\n        sorting: true,\n        width: 100,\n        sortTransform: ({publishedAt, _updatedAt}) => {\n          // the default sort is always descending, so -Infinity pushes missing values to end\n          const lastActivity = publishedAt ?? _updatedAt\n\n          return lastActivity ? new Date(lastActivity).getTime() : -Infinity\n        },\n      },\n      'archived',\n    ),\n    checkColumnMode(\n      {\n        id: 'publishedAt',\n        sorting: true,\n        sortTransform: (release, direction) => {\n          if (release.state !== 'published') {\n            if (direction === 'asc') return Infinity\n            return -Infinity\n          }\n          if (!release.publishedAt) return release._updatedAt\n          return new Date(release.publishedAt).getTime()\n        },\n        width: 250,\n        header: (props) => (\n          <Flex {...props.headerProps} paddingY={3} sizing=\"border\">\n            <Headers.SortHeaderButton text={t('table-header.publishedAt')} {...props} />\n          </Flex>\n        ),\n        cell: ({cellProps, datum: release}) => (\n          <Flex {...cellProps} align=\"center\" paddingX={2} paddingY={3} gap={2} sizing=\"border\">\n            <Text muted size={1}>\n              {release.publishedAt ? (\n                // Assuming releases are not updated after archiving.\n                // If we realize this is miss leading for customers and they have edited the release after archiving\n                // we can use the history endpoint to get the archived change.\n                <RelativeTime time={release.publishedAt} useTemporalPhrase minimal />\n              ) : (\n                '-'\n              )}\n            </Text>\n          </Flex>\n        ),\n      },\n      'archived',\n    ),\n    checkColumnMode(\n      {\n        id: '_updatedAt',\n        sorting: true,\n        sortTransform: (release, direction) => {\n          if (release.state !== 'archived') {\n            if (direction === 'asc') return Infinity\n            return -Infinity\n          }\n\n          return new Date(release._updatedAt).getTime()\n        },\n        width: 250,\n        header: (props) => (\n          <Flex {...props.headerProps} paddingY={3} sizing=\"border\">\n            <Headers.SortHeaderButton text={t('table-header.archivedAt')} {...props} />\n          </Flex>\n        ),\n        cell: ({cellProps, datum: release}) => (\n          <Flex {...cellProps} align=\"center\" paddingX={2} paddingY={3} gap={2} sizing=\"border\">\n            <Text muted size={1}>\n              {release.state === 'archived' ? (\n                // Assuming releases are not updated after archiving.\n                // If we later realize this is miss leading for customers and they have edited the release after archiving\n                // we can use the history endpoint to get the archived change.\n                <RelativeTime time={release._updatedAt} useTemporalPhrase minimal />\n              ) : (\n                '-'\n              )}\n            </Text>\n          </Flex>\n        ),\n      },\n      'archived',\n    ),\n    checkColumnMode(\n      {\n        id: 'documentsMetadata.updatedAt',\n        sorting: true,\n        width: 150,\n        header: (props) => (\n          <Flex {...props.headerProps} paddingY={3} sizing=\"border\">\n            <Headers.SortHeaderButton text={t('table-header.edited')} {...props} />\n          </Flex>\n        ),\n        cell: ({datum: {documentsMetadata, _updatedAt}, cellProps}) => {\n          const updatedAtDate = documentsMetadata?.updatedAt ?? _updatedAt\n          return (\n            <Flex {...cellProps} align=\"center\" gap={2} paddingX={2} paddingY={3} sizing=\"border\">\n              <Text muted size={1}>\n                {updatedAtDate ? (\n                  <RelativeTime time={updatedAtDate} useTemporalPhrase minimal />\n                ) : (\n                  '-'\n                )}\n              </Text>\n            </Flex>\n          )\n        },\n      },\n      'active',\n    ),\n    checkColumnMode(\n      {\n        id: 'error',\n        sorting: false,\n        width: 40,\n        header: () => <Fragment />,\n        cell: ({datum: {error, state}, cellProps}) => (\n          <Flex\n            {...cellProps}\n            align=\"center\"\n            paddingX={2}\n            paddingY={3}\n            sizing=\"border\"\n            data-testid=\"error-indicator\"\n          >\n            {typeof error !== 'undefined' && state === 'active' && (\n              <Tooltip content={<Text size={1}>{t('failed-publish-title')}</Text>} portal>\n                <Text size={1}>\n                  <ToneIcon icon={ErrorOutlineIcon} tone=\"critical\" />\n                </Text>\n              </Tooltip>\n            )}\n          </Flex>\n        ),\n      },\n      'all',\n    ),\n    checkColumnMode(\n      {\n        id: 'documentCount',\n        sorting: false,\n        width: 120,\n        header: ({headerProps}) => (\n          <Flex {...headerProps} paddingY={3} sizing=\"border\">\n            <Headers.BasicHeader text={t('table-header.documents')} />\n          </Flex>\n        ),\n        cell: ({datum: {isDeleted, state, finalDocumentStates, documentsMetadata}, cellProps}) => (\n          <Flex {...cellProps} align=\"center\" paddingX={2} paddingY={3} sizing=\"border\">\n            {!isDeleted && (\n              <ReleaseDocumentsCounter\n                documentCount={\n                  state === 'archived' || state === 'published'\n                    ? finalDocumentStates?.length\n                    : documentsMetadata?.documentCount\n                }\n              />\n            )}\n          </Flex>\n        ),\n      },\n      'all',\n    ),\n  ].filter(Boolean) as Column<TableRelease>[]\n}\n","import {AddIcon, ChevronDownIcon, EarthGlobeIcon} from '@sanity/icons'\nimport {Box, type ButtonMode, Card, Flex, Inline, Stack, Text, useMediaIndex} from '@sanity/ui'\nimport {format, isSameDay} from 'date-fns'\nimport {AnimatePresence, motion} from 'framer-motion'\nimport {type MouseEventHandler, useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {type SearchParam, useRouter} from 'sanity/router'\n\nimport {Tooltip} from '../../../../ui-components'\nimport {Button} from '../../../../ui-components/button/Button'\nimport {CalendarFilter} from '../../../components/inputs/DateFilters/calendar/CalendarFilter'\nimport {useTranslation} from '../../../i18n'\nimport {usePerspective} from '../../../perspective/usePerspective'\nimport useDialogTimeZone from '../../../scheduledPublishing/hooks/useDialogTimeZone'\nimport useTimeZone from '../../../scheduledPublishing/hooks/useTimeZone'\nimport {CreateReleaseDialog} from '../../components/dialog/CreateReleaseDialog'\nimport {useReleasesUpsell} from '../../contexts/upsell/useReleasesUpsell'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {isReleaseDocument, type ReleaseDocument} from '../../store/types'\nimport {useActiveReleases} from '../../store/useActiveReleases'\nimport {useArchivedReleases} from '../../store/useArchivedReleases'\nimport {useReleaseOperations} from '../../store/useReleaseOperations'\nimport {useReleasePermissions} from '../../store/useReleasePermissions'\nimport {type ReleasesMetadata, useReleasesMetadata} from '../../store/useReleasesMetadata'\nimport {getReleaseTone} from '../../util/getReleaseTone'\nimport {getReleaseDefaults} from '../../util/util'\nimport {Table, type TableRowProps} from '../components/Table/Table'\nimport {type TableSort} from '../components/Table/TableProvider'\nimport {ReleaseIllustration} from '../resources/ReleaseIllustration'\nimport {CalendarPopover} from './CalendarPopover'\nimport {\n  DATE_SEARCH_PARAM_KEY,\n  getInitialFilterDate,\n  getInitialReleaseGroupMode,\n  GROUP_SEARCH_PARAM_KEY,\n  type Mode,\n} from './queryParamUtils'\nimport {DateFilterButton, ReleaseCalendarFilterDay} from './ReleaseCalendarFilter'\nimport {ReleaseMenuButtonWrapper} from './ReleaseMenuButtonWrapper'\nimport {releasesOverviewColumnDefs} from './ReleasesOverviewColumnDefs'\nimport {useTimezoneAdjustedDateTimeRange} from './useTimezoneAdjustedDateTimeRange'\n\nconst MotionButton = motion.create(Button)\n\nconst DATE_SEARCH_PARAM_VALUE_FORMAT = 'yyyy-MM-dd'\n\nexport interface TableRelease extends ReleaseDocument {\n  documentsMetadata?: ReleasesMetadata\n  isDeleted?: boolean\n}\n\nconst DEFAULT_RELEASES_OVERVIEW_SORT: TableSort = {column: 'publishAt', direction: 'asc'}\nconst DEFAULT_ARCHIVED_RELEASES_OVERVIEW_SORT: TableSort = {\n  column: 'lastActivity',\n  direction: 'desc',\n}\n// eslint-disable-next-line max-statements\nexport function ReleasesOverview() {\n  const {data: releases, loading: loadingReleases} = useActiveReleases()\n  const {data: archivedReleases} = useArchivedReleases()\n  const {guardWithReleaseLimitUpsell, mode} = useReleasesUpsell()\n\n  const router = useRouter()\n  const [releaseGroupMode, setReleaseGroupMode] = useState<Mode>(getInitialReleaseGroupMode(router))\n  const [releaseFilterDate, setReleaseFilterDate] = useState<Date | undefined>(\n    getInitialFilterDate(router),\n  )\n  const [isCreateReleaseDialogOpen, setIsCreateReleaseDialogOpen] = useState(false)\n  const releaseIds = useMemo(() => releases.map((release) => release._id), [releases])\n  const {data: releasesMetadata, loading: loadingReleasesMetadata} = useReleasesMetadata(releaseIds)\n  const loading = loadingReleases || (loadingReleasesMetadata && !releasesMetadata)\n  const loadingTableData = loading || (!releasesMetadata && Boolean(releaseIds.length))\n  const {t} = useTranslation(releasesLocaleNamespace)\n  const {t: tCore} = useTranslation()\n  const {timeZone, utcToCurrentZoneDate} = useTimeZone()\n  const {selectedPerspective} = usePerspective()\n  const {DialogTimeZone, dialogProps, dialogTimeZoneShow} = useDialogTimeZone()\n  const getTimezoneAdjustedDateTimeRange = useTimezoneAdjustedDateTimeRange()\n\n  const {createRelease} = useReleaseOperations()\n  const {checkWithPermissionGuard} = useReleasePermissions()\n  const [hasCreatePermission, setHasCreatePermission] = useState<boolean | null>(null)\n  const [isPendingGuardResponse, setIsPendingGuardResponse] = useState<boolean>(false)\n\n  const mediaIndex = useMediaIndex()\n\n  const getRowProps = useCallback(\n    (datum: TableRelease): Partial<TableRowProps> =>\n      datum.isDeleted\n        ? {tone: 'transparent'}\n        : {\n            tone:\n              isReleaseDocument(selectedPerspective) && selectedPerspective._id === datum._id\n                ? getReleaseTone(datum)\n                : 'default',\n          },\n    [selectedPerspective],\n  )\n\n  const scrollContainerRef = useRef<HTMLDivElement | null>(null)\n\n  const hasReleases = releases.length > 0 || archivedReleases.length > 0\n  const loadingOrHasReleases = loading || hasReleases\n  const hasNoReleases = !loading && !hasReleases\n\n  const tableReleases = useMemo<TableRelease[]>(() => {\n    if (!hasReleases || !releasesMetadata) return []\n    return [\n      ...releases.map((release) => ({\n        ...release,\n        publishAt: release.publishAt || release.metadata.intendedPublishAt,\n        documentsMetadata: releasesMetadata[release._id] || {},\n      })),\n    ]\n  }, [hasReleases, releasesMetadata, releases])\n\n  const isMounted = useRef(false)\n  useEffect(() => {\n    isMounted.current = true\n    checkWithPermissionGuard(createRelease, getReleaseDefaults()).then((hasPermissions) => {\n      if (isMounted.current) setHasCreatePermission(hasPermissions)\n    })\n\n    return () => {\n      isMounted.current = false\n    }\n  }, [checkWithPermissionGuard, createRelease])\n\n  // switch to open mode if on archived mode and there are no archived releases\n  useEffect(() => {\n    if (releaseGroupMode === 'archived' && !loadingReleases && !archivedReleases.length) {\n      setReleaseGroupMode('active')\n    }\n  }, [releaseGroupMode, archivedReleases.length, loadingReleases])\n\n  const handleReleaseGroupModeChange = useCallback<MouseEventHandler<HTMLButtonElement>>(\n    ({currentTarget: {value: groupMode}}) => {\n      setReleaseGroupMode(groupMode as Mode)\n    },\n    [],\n  )\n\n  const handleSelectFilterDate = useCallback(\n    (date?: Date) =>\n      setReleaseFilterDate((prevFilterDate) => {\n        if (!date) return undefined\n\n        const timeZoneAdjustedDate = utcToCurrentZoneDate(date)\n\n        return prevFilterDate && isSameDay(prevFilterDate, timeZoneAdjustedDate)\n          ? undefined\n          : timeZoneAdjustedDate\n      }),\n    [utcToCurrentZoneDate],\n  )\n\n  const clearFilterDate = useCallback(() => {\n    setReleaseFilterDate(undefined)\n    setReleaseGroupMode('active')\n  }, [])\n\n  useEffect(() => {\n    const getSearchParams: () => SearchParam[] = () => {\n      if (releaseFilterDate)\n        return [[DATE_SEARCH_PARAM_KEY, format(releaseFilterDate, DATE_SEARCH_PARAM_VALUE_FORMAT)]]\n      if (releaseGroupMode) return [[GROUP_SEARCH_PARAM_KEY, releaseGroupMode]]\n      return []\n    }\n\n    router.navigate({\n      _searchParams: getSearchParams(),\n    })\n  }, [releaseFilterDate, releaseGroupMode, router])\n\n  const [hasMounted, setHasMounted] = useState(false)\n\n  useEffect(() => {\n    setHasMounted(true)\n  }, [])\n\n  const showCalendar = mediaIndex > 2\n\n  const currentArchivedPicker = useMemo(() => {\n    const groupModeButtonBaseProps = {\n      disabled: loading || !hasReleases,\n      mode: 'bleed' as ButtonMode,\n      padding: 2,\n      ...(hasMounted\n        ? {\n            initial: {opacity: 0},\n            animate: {opacity: 1},\n            transition: {duration: 0.4, ease: 'easeInOut'},\n          }\n        : {}),\n    }\n    return (\n      <AnimatePresence>\n        <MotionButton\n          {...groupModeButtonBaseProps}\n          key=\"open-group\"\n          onClick={handleReleaseGroupModeChange}\n          selected={releaseGroupMode === 'active'}\n          text={t('action.open')}\n          value=\"active\"\n        />\n        <Tooltip\n          disabled={archivedReleases.length !== 0}\n          content={t('no-archived-release')}\n          placement=\"bottom\"\n        >\n          <div>\n            <MotionButton\n              {...groupModeButtonBaseProps}\n              key=\"archived-group\"\n              disabled={groupModeButtonBaseProps.disabled || !archivedReleases.length}\n              onClick={handleReleaseGroupModeChange}\n              selected={releaseGroupMode === 'archived'}\n              text={t('action.archived')}\n              value=\"archived\"\n            />\n          </div>\n        </Tooltip>\n      </AnimatePresence>\n    )\n  }, [\n    loading,\n    hasReleases,\n    hasMounted,\n    handleReleaseGroupModeChange,\n    releaseGroupMode,\n    t,\n    archivedReleases.length,\n  ])\n\n  const handleOnClickCreateRelease = useCallback(async () => {\n    setIsPendingGuardResponse(true)\n    await guardWithReleaseLimitUpsell(() => {\n      setIsCreateReleaseDialogOpen(true)\n    })\n    setIsPendingGuardResponse(false)\n  }, [guardWithReleaseLimitUpsell])\n\n  const createReleaseButton = useMemo(\n    () => (\n      <Button\n        icon={AddIcon}\n        disabled={\n          isPendingGuardResponse ||\n          !hasCreatePermission ||\n          isCreateReleaseDialogOpen ||\n          mode === 'disabled'\n        }\n        onClick={handleOnClickCreateRelease}\n        text={tCore('release.action.create-new')}\n        tooltipProps={{\n          disabled: hasCreatePermission === true,\n          content: tCore('release.action.permission.error'),\n        }}\n      />\n    ),\n    [\n      isPendingGuardResponse,\n      hasCreatePermission,\n      isCreateReleaseDialogOpen,\n      mode,\n      handleOnClickCreateRelease,\n      tCore,\n    ],\n  )\n\n  const handleOnCreateRelease = useCallback(\n    (createdReleaseId: string) => {\n      setIsCreateReleaseDialogOpen(false)\n\n      router.navigate(\n        {releaseId: createdReleaseId},\n        {\n          stickyParams: {\n            excludedPerspectives: null,\n            perspective: createdReleaseId,\n          },\n        },\n      )\n    },\n    [router],\n  )\n\n  const renderCreateReleaseDialog = () => {\n    if (!isCreateReleaseDialogOpen) return null\n\n    return (\n      <CreateReleaseDialog\n        onCancel={() => setIsCreateReleaseDialogOpen(false)}\n        onSubmit={handleOnCreateRelease}\n        origin=\"release-plugin\"\n      />\n    )\n  }\n\n  const renderRowActions = useCallback(\n    ({datum}: {datum: TableRelease | unknown}) => {\n      const release = datum as TableRelease\n\n      if (release.isDeleted || release.isLoading) return null\n\n      const documentsCount =\n        (releaseGroupMode === 'active'\n          ? release.documentsMetadata?.documentCount\n          : release.finalDocumentStates?.length) ?? 0\n\n      return <ReleaseMenuButtonWrapper release={release} documentsCount={documentsCount} />\n    },\n    [releaseGroupMode],\n  )\n\n  const filteredReleases = useMemo(() => {\n    if (!releaseFilterDate) return releaseGroupMode === 'active' ? tableReleases : archivedReleases\n\n    const [startOfDayForTimeZone, endOfDayForTimeZone] =\n      getTimezoneAdjustedDateTimeRange(releaseFilterDate)\n\n    return tableReleases.filter((release) => {\n      if (!release.publishAt || release.metadata.releaseType !== 'scheduled') return false\n\n      const publishDateUTC = new Date(release.publishAt)\n      return publishDateUTC >= startOfDayForTimeZone && publishDateUTC <= endOfDayForTimeZone\n    })\n  }, [\n    releaseFilterDate,\n    releaseGroupMode,\n    tableReleases,\n    archivedReleases,\n    getTimezoneAdjustedDateTimeRange,\n  ])\n\n  const renderCalendarFilter = useMemo(() => {\n    return (\n      <Flex flex=\"none\">\n        <Card borderRight flex=\"none\" disabled>\n          <CalendarFilter\n            disabled={loading || releases.length === 0}\n            renderCalendarDay={ReleaseCalendarFilterDay}\n            selectedDate={releaseFilterDate}\n            onSelect={handleSelectFilterDate}\n          />\n        </Card>\n      </Flex>\n    )\n  }, [loading, releases, releaseFilterDate, handleSelectFilterDate])\n\n  const tableColumns = useMemo(\n    () => releasesOverviewColumnDefs(t, releaseGroupMode),\n    [releaseGroupMode, t],\n  )\n\n  const NoRelease = () => {\n    return (\n      <Flex\n        direction=\"column\"\n        flex={1}\n        justify={hasNoReleases ? 'center' : 'flex-start'}\n        align={hasNoReleases ? 'center' : 'flex-start'}\n        style={{position: 'relative'}}\n      >\n        <Flex gap={3} direction=\"column\" style={{maxWidth: '300px'}}>\n          <ReleaseIllustration />\n          <Text as=\"h1\" size={1} weight=\"semibold\" data-testid=\"no-releases-info-text\">\n            {t('overview.title')}\n          </Text>\n          <Text size={1} muted>\n            {t('overview.description')}\n          </Text>\n          <Inline space={2}>\n            {createReleaseButton}\n            <Button\n              as=\"a\"\n              href=\"https://www.sanity.io/docs/content-releases\"\n              target=\"_blank\"\n              mode=\"ghost\"\n              onClick={handleOnClickCreateRelease}\n              text={t('overview.action.documentation')}\n            />\n          </Inline>\n        </Flex>\n      </Flex>\n    )\n  }\n\n  return (\n    <Flex direction=\"row\" flex={1} style={{height: '100%'}}>\n      <Flex flex={1}>\n        {showCalendar && renderCalendarFilter}\n\n        {hasNoReleases ? (\n          <NoRelease />\n        ) : (\n          <>\n            <Flex direction=\"column\" flex={1} style={{position: 'relative'}}>\n              <Card flex=\"none\" padding={3}>\n                <Flex align=\"center\" flex={1} gap={3}>\n                  <Inline>\n                    {!showCalendar && <CalendarPopover content={renderCalendarFilter} />}\n                    <Stack padding={2} space={4}>\n                      <Text as=\"h1\" size={1} weight=\"semibold\">\n                        {t('overview.title')}\n                      </Text>\n                    </Stack>\n                  </Inline>\n\n                  <Flex flex={1} gap={1}>\n                    {loadingOrHasReleases &&\n                      (releaseFilterDate ? (\n                        <DateFilterButton\n                          filterDate={releaseFilterDate}\n                          onClear={clearFilterDate}\n                        />\n                      ) : (\n                        currentArchivedPicker\n                      ))}\n                  </Flex>\n                  <Flex flex=\"none\" gap={2}>\n                    <Button\n                      icon={EarthGlobeIcon}\n                      iconRight={ChevronDownIcon}\n                      mode=\"bleed\"\n                      text={`${timeZone.abbreviation} (${timeZone.namePretty})`}\n                      onClick={dialogTimeZoneShow}\n                    />\n                    {DialogTimeZone && <DialogTimeZone {...dialogProps} />}\n                    {loadingOrHasReleases && createReleaseButton}\n                  </Flex>\n                </Flex>\n              </Card>\n              <Box ref={scrollContainerRef} marginTop={3} overflow={'auto'}>\n                {(loading || hasReleases) && (\n                  <Table<TableRelease>\n                    // for resetting filter and sort on table when filer changed\n                    key={releaseFilterDate ? 'by_date' : releaseGroupMode}\n                    defaultSort={\n                      releaseGroupMode === 'archived'\n                        ? DEFAULT_ARCHIVED_RELEASES_OVERVIEW_SORT\n                        : DEFAULT_RELEASES_OVERVIEW_SORT\n                    }\n                    loading={loadingTableData}\n                    data={filteredReleases}\n                    columnDefs={tableColumns}\n                    emptyState={t('no-releases')}\n                    // eslint-disable-next-line @sanity/i18n/no-attribute-string-literals\n                    rowId=\"_id\"\n                    rowActions={renderRowActions}\n                    rowProps={getRowProps}\n                    scrollContainerRef={scrollContainerRef}\n                    hideTableInlinePadding\n                  />\n                )}\n              </Box>\n            </Flex>\n          </>\n        )}\n      </Flex>\n      {renderCreateReleaseDialog()}\n    </Flex>\n  )\n}\n","import {useRouter} from 'sanity/router'\n\nimport {ReleaseDetail} from './detail/ReleaseDetail'\nimport {ReleasesOverview} from './overview/ReleasesOverview'\n\nexport function ReleasesTool() {\n  const router = useRouter()\n\n  const {releaseId} = router.state as {releaseId?: string}\n  if (releaseId) return <ReleaseDetail key={releaseId} />\n\n  return <ReleasesOverview />\n}\n","import {AccessDeniedIcon} from '@sanity/icons'\nimport {type CurrentUser} from '@sanity/types'\nimport {Box, Inline, Text} from '@sanity/ui'\nimport {startCase} from 'lodash'\nimport {Fragment, useCallback} from 'react'\n\nimport {useListFormat} from '../hooks/useListFormat'\nimport {useTranslation} from '../i18n/hooks/useTranslation'\n// note: these are both available from the `../i18n` export but importing through\n// that export fails the build. may be due to a circular reference.\nimport {Translate} from '../i18n/Translate'\n\n/** @internal */\nexport interface InsufficientPermissionsMessageProps {\n  currentUser?: CurrentUser | null\n  context:\n    | 'create-new-reference'\n    | 'create-document-type'\n    | 'create-any-document'\n    | 'create-document'\n    | 'delete-document'\n    | 'delete-schedules'\n    | 'discard-changes'\n    | 'duplicate-document'\n    | 'edit-schedules'\n    | 'execute-schedules'\n    | 'publish-document'\n    | 'unpublish-document'\n}\n\nconst EMPTY_ARRAY = [] as never[]\n\n/** @internal */\nexport function InsufficientPermissionsMessage({\n  currentUser,\n  context,\n}: InsufficientPermissionsMessageProps) {\n  const {t} = useTranslation()\n\n  const list = useListFormat({style: 'short', type: 'unit'})\n  const roles = currentUser?.roles || EMPTY_ARRAY\n\n  const Roles = useCallback(\n    () => (\n      <>\n        {list\n          .formatToParts(roles.map((role) => role.title || startCase(role.name)))\n          .map((i, index) =>\n            i.type === 'element' ? (\n              // eslint-disable-next-line react/no-array-index-key\n              <code key={`${i.value}-${index}`}>{i.value}</code>\n            ) : (\n              // eslint-disable-next-line react/no-array-index-key\n              <Fragment key={`${i.value}-${index}`}>{i.value}</Fragment>\n            ),\n          )}\n      </>\n    ),\n    [roles, list],\n  )\n\n  return (\n    <Box>\n      <Inline space={2}>\n        <Text size={0}>\n          <AccessDeniedIcon />\n        </Text>\n        <Text size={1} weight=\"medium\">\n          {t('insufficient-permissions-message.title')}\n        </Text>\n      </Inline>\n      <Inline marginTop={4}>\n        <Text size={1}>\n          <Translate\n            i18nKey=\"insufficient-permissions-message.not-authorized-explanation\"\n            t={t}\n            context={context}\n          />\n        </Text>\n      </Inline>\n      <Inline marginTop={4} marginBottom={1}>\n        <Text size={1}>\n          <Translate i18nKey=\"insufficient-permissions-message.roles\" t={t} components={{Roles}} />\n        </Text>\n      </Inline>\n    </Box>\n  )\n}\n","import {TrashIcon} from '@sanity/icons'\nimport {useCallback, useState} from 'react'\nimport {useTranslation} from 'react-i18next'\n\nimport {InsufficientPermissionsMessage} from '../../../components/InsufficientPermissionsMessage'\nimport {\n  type DocumentActionDescription,\n  type DocumentActionProps,\n} from '../../../config/document/actions'\nimport {usePerspective} from '../../../perspective/usePerspective'\nimport {useDocumentPairPermissions} from '../../../store/_legacy/grants/documentPairPermissions'\nimport {useCurrentUser} from '../../../store/user/hooks'\nimport {DiscardVersionDialog} from '../../components/dialog/DiscardVersionDialog'\n\n/**\n * @internal\n */\nexport const DiscardVersionAction = (\n  props: DocumentActionProps,\n): DocumentActionDescription | null => {\n  const {id, type, release, version} = props\n  const currentUser = useCurrentUser()\n  const {t} = useTranslation()\n  const {selectedPerspective} = usePerspective()\n\n  const [permissions, isPermissionsLoading] = useDocumentPairPermissions({\n    id,\n    type,\n    version: release,\n    permission: 'discardVersion',\n  })\n\n  const [dialogOpen, setDialogOpen] = useState(false)\n\n  // Callbacks\n  const handleDialogOpen = useCallback(() => {\n    setDialogOpen(true)\n  }, [])\n\n  if (!version) return null\n  const insufficientPermissions = !isPermissionsLoading && !permissions?.granted\n\n  if (insufficientPermissions) {\n    return {\n      disabled: true,\n      icon: TrashIcon,\n      label: 'no permissions',\n      title: <InsufficientPermissionsMessage currentUser={currentUser} context=\"discard-changes\" />,\n    }\n  }\n\n  return {\n    disabled: isPermissionsLoading || !permissions?.granted,\n    dialog: dialogOpen && {\n      type: 'custom',\n      component: (\n        <DiscardVersionDialog\n          documentId={version._id}\n          documentType={type}\n          onClose={() => setDialogOpen(false)}\n          fromPerspective={selectedPerspective}\n        />\n      ),\n    },\n    label: t('release.action.discard-version'),\n    icon: TrashIcon,\n    onHandle: handleDialogOpen,\n    title: t('release.action.discard-version'),\n  }\n}\n","import {TrashIcon, UnpublishIcon} from '@sanity/icons'\nimport {useCallback, useState} from 'react'\nimport {useTranslation} from 'react-i18next'\n\nimport {InsufficientPermissionsMessage} from '../../../components/InsufficientPermissionsMessage'\nimport {\n  type DocumentActionDescription,\n  type DocumentActionProps,\n} from '../../../config/document/actions'\nimport {useDocumentPairPermissions} from '../../../store/_legacy/grants/documentPairPermissions'\nimport {useCurrentUser} from '../../../store/user/hooks'\nimport {UnpublishVersionDialog} from '../../components/dialog/UnpublishVersionDialog'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {isGoingToUnpublish} from '../../util/isGoingToUnpublish'\n\n/**\n * @internal\n */\nexport const UnpublishVersionAction = (\n  props: DocumentActionProps,\n): DocumentActionDescription | null => {\n  const {id, type, release, published, version} = props\n  const currentUser = useCurrentUser()\n  const isPublished = published !== null\n  const {t} = useTranslation(releasesLocaleNamespace)\n  const isAlreadyUnpublished = version ? isGoingToUnpublish(version) : false\n\n  const [permissions, isPermissionsLoading] = useDocumentPairPermissions({\n    id,\n    type,\n    version: release,\n    permission: 'unpublish',\n  })\n\n  const [dialogOpen, setDialogOpen] = useState(false)\n\n  const handleDialogOpen = useCallback(() => {\n    setDialogOpen(true)\n  }, [])\n\n  if (!version) return null\n\n  const insufficientPermissions = !isPermissionsLoading && !permissions?.granted\n\n  if (insufficientPermissions) {\n    return {\n      disabled: true,\n      icon: TrashIcon,\n      label: 'no permissions',\n      title: (\n        <InsufficientPermissionsMessage context=\"unpublish-document\" currentUser={currentUser} />\n      ),\n    }\n  }\n\n  return {\n    dialog: dialogOpen && {\n      type: 'custom',\n      component: (\n        <UnpublishVersionDialog\n          documentVersionId={version._id}\n          documentType={type}\n          onClose={() => setDialogOpen(false)}\n        />\n      ),\n    },\n    /** @todo should be switched once we have the document actions updated */\n    label: t('action.unpublish-doc-actions'),\n    icon: UnpublishIcon,\n    onHandle: handleDialogOpen,\n    disabled: !isPublished || isAlreadyUnpublished,\n    /** @todo should be switched once we have the document actions updated */\n    title: t('action.unpublish-doc-actions'),\n  }\n}\n","import {type DocumentActionComponent} from '../../../config/document/actions'\nimport {type DocumentActionsContext} from '../../../config/types'\nimport {DiscardVersionAction} from './DiscardVersionAction'\nimport {UnpublishVersionAction} from './UnpublishVersionAction'\n\ntype Action = DocumentActionComponent\n\nexport default function resolveDocumentActions(\n  existingActions: Action[],\n  context: DocumentActionsContext,\n): Action[] {\n  const duplicateAction = existingActions.filter(({action}) => action === 'duplicate')\n\n  if (context.versionType === 'version') {\n    return duplicateAction.concat(DiscardVersionAction, UnpublishVersionAction)\n  }\n\n  return existingActions\n}\n","export const TEMPLATE_OPTIONS = {interpolate: /{{([\\s\\S]+?)}}/g}\n","import {\n  isPortableTextTextBlock,\n  type PortableTextBlock,\n  type PortableTextObject,\n  type PortableTextSpan,\n} from '@sanity/types'\n\nconst TRANSFORMATIONS: {\n  [type: string]: (\n    child: PortableTextObject | PortableTextSpan,\n    idx: number,\n    block: PortableTextBlock,\n  ) => PortableTextObject\n} = {\n  inlineIcon: (child, idx, block) => {\n    if (!isPortableTextTextBlock(block)) return block\n    const hasTextLeft = Boolean(\n      block.children[idx - 1]?._type === 'span' && block.children[idx - 1]?.text,\n    )\n    const hasTextRight = Boolean(\n      block.children[idx + 1]?._type === 'span' && block.children[idx + 1]?.text,\n    )\n    return {\n      ...child,\n      hasTextRight,\n      hasTextLeft,\n    }\n  },\n}\n\nexport const transformBlocks = (blocks: PortableTextBlock[]): PortableTextBlock[] => {\n  return blocks.map((block) => {\n    if (isPortableTextTextBlock(block) && block._type === 'block') {\n      const children = block.children.map((child, idx) => {\n        if (TRANSFORMATIONS[child._type]) {\n          return TRANSFORMATIONS[child._type](child, idx, block)\n        }\n        return child\n      })\n\n      return {\n        ...block,\n        children,\n      }\n    }\n    return block\n  })\n}\n","import {\n  PortableText,\n  type PortableTextComponents,\n  type PortableTextTypeComponentProps,\n} from '@portabletext/react'\nimport {Icon, LinkIcon} from '@sanity/icons'\nimport {type PortableTextBlock} from '@sanity/types'\nimport {Box, Card, Flex, Heading, Text} from '@sanity/ui'\n// eslint-disable-next-line camelcase\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {template} from 'lodash'\nimport {type ReactNode, useEffect, useMemo, useState} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {ConditionalWrapper} from '../../../../ui-components/conditionalWrapper'\nimport {TEMPLATE_OPTIONS} from '../constants'\nimport {transformBlocks} from './helpers'\n\n/** @internal */\nexport type InterpolationProp = {[key: string]: string | number}\n\nconst Divider = styled(Box)`\n  height: 1px;\n  background: var(--card-border-color);\n  width: 100%;\n`\n\nconst SerializerContainer = styled.div`\n  // Remove margin top of first element\n  > div:first-child {\n    margin-top: 0;\n  }\n  // Remove margin bottom to last box.\n  > [data-ui='Box']:last-child {\n    margin-bottom: 0;\n  }\n`\n\nconst IconTextContainer = styled(Text)((props) => {\n  if (props.accent) {\n    return `\n    --card-icon-color: var(--card-accent-fg-color);\n    `\n  }\n  return ``\n})\n\nconst AccentSpan = styled.span`\n  color: var(--card-accent-fg-color);\n  --card-icon-color: var(--card-accent-fg-color);\n`\n\nconst SemiboldSpan = styled.span(({theme}) => {\n  const {weights} = theme.sanity.fonts.text\n\n  return css`\n    font-weight: ${weights.semibold};\n  `\n})\n\ninterface InlineIconProps {\n  $hasTextLeft: boolean\n  $hasTextRight: boolean\n}\nconst InlineIcon = styled(Icon)<InlineIconProps>`\n  &[data-sanity-icon] {\n    /* Forces the icon to leave the necessary space to the right or left it has surrounding text */\n    margin-left: ${(props) => (props.$hasTextLeft ? '0' : '')};\n    margin-right: ${(props) => (props.$hasTextRight ? '0' : '')};\n  }\n`\n\nconst Link = styled.a<{$useTextColor: boolean}>`\n  font-weight: 600;\n  color: ${(props) => (props.$useTextColor ? 'var(--card-muted-fg-color) !important' : '')};\n`\n\nconst DynamicIconContainer = styled.span<{$inline: boolean}>`\n  display: ${({$inline}) => ($inline ? 'inline-block' : 'inline')};\n  font-size: calc(21 / 16 * 1rem) !important;\n  min-width: calc(21 / 16 * 1rem - 0.375rem);\n  line-height: 0;\n  > svg {\n    height: 1em;\n    width: 1em;\n    display: inline;\n    font-size: 1em !important;\n    margin: -0.375rem !important;\n    *[stroke] {\n      stroke: currentColor;\n    }\n  }\n`\n\nconst accentSpanWrapper = (children: ReactNode) => <AccentSpan>{children}</AccentSpan>\n\nconst DynamicIcon = (props: {icon: {url: string}; inline?: boolean}) => {\n  const [__html, setHtml] = useState('')\n  useEffect(() => {\n    const controller = new AbortController()\n    const signal = controller.signal\n\n    fetch(props.icon.url, {signal})\n      .then((response) => {\n        if (!response.ok) {\n          throw new Error(`HTTP error! status: ${response.status}`)\n        }\n        return response.text()\n      })\n      .then((data) => setHtml(data))\n      .catch((error) => {\n        if (error.name !== 'AbortError') {\n          console.error(error)\n        }\n      })\n\n    return () => {\n      controller.abort()\n    }\n  }, [props.icon.url])\n\n  return <DynamicIconContainer $inline={!!props.inline} dangerouslySetInnerHTML={{__html}} />\n}\n\nfunction NormalBlock(props: {children: ReactNode}) {\n  const {children} = props\n\n  return (\n    <Box paddingX={2} marginBottom={4}>\n      <Text size={1} muted>\n        {children}\n      </Text>\n    </Box>\n  )\n}\n\nfunction H2Block(props: {children: ReactNode}) {\n  const {children} = props\n  return (\n    <Box paddingX={2} marginY={4}>\n      <Heading size={2} as=\"h2\">\n        {children}\n      </Heading>\n    </Box>\n  )\n}\n\nfunction H3Block(props: {children: ReactNode}) {\n  const {children} = props\n  return (\n    <Box paddingX={2} marginY={4}>\n      <Heading size={1} as=\"h3\">\n        {children}\n      </Heading>\n    </Box>\n  )\n}\n\nconst Image = styled.img((props) => {\n  const theme = getTheme_v2(props.theme)\n\n  return css`\n    object-fit: cover;\n    width: 100%;\n    border-radius: ${theme.radius[3]}px;\n  `\n})\n\nfunction ImageBlock(\n  props: PortableTextTypeComponentProps<{\n    image?: {url: string}\n  }>,\n) {\n  return (\n    <Box paddingX={2} marginY={4}>\n      <Image src={props.value.image?.url} />\n    </Box>\n  )\n}\n\nconst interpolateChildrenText = (interpolation?: InterpolationProp) => (children: ReactNode) => {\n  if (!children || !interpolation) return children\n\n  const childrenArray = Array.isArray(children) ? children : [children]\n\n  return childrenArray.map((child) => {\n    if (typeof child === 'string') {\n      const childTemplate = template(child, TEMPLATE_OPTIONS)\n      return childTemplate(interpolation)\n    }\n\n    return child\n  })\n}\n\nconst createComponents = ({\n  onLinkClick,\n  interpolation,\n}: {\n  onLinkClick?: ({url, linkTitle}: {url: string; linkTitle: string}) => void\n  interpolation?: InterpolationProp\n}): PortableTextComponents => {\n  const interpolateChildren = interpolateChildrenText(interpolation)\n\n  return {\n    block: {\n      normal: ({children}) => <NormalBlock>{interpolateChildren(children)}</NormalBlock>,\n      h2: ({children}) => <H2Block>{interpolateChildren(children)}</H2Block>,\n      h3: ({children}) => <H3Block>{interpolateChildren(children)}</H3Block>,\n    },\n    list: {\n      bullet: ({children}) => <ul>{interpolateChildren(children)}</ul>,\n      number: ({children}) => <ol>{interpolateChildren(children)}</ol>,\n      checkmarks: ({children}) => <>{interpolateChildren(children)}</>,\n    },\n    listItem: {\n      bullet: ({children}) => (\n        <Text\n          as=\"li\"\n          size={1}\n          muted\n          style={{\n            display: 'list-item',\n            padding: '0.5rem 0',\n          }}\n        >\n          {interpolateChildren(children)}\n        </Text>\n      ),\n      number: ({children}) => (\n        <Text\n          as=\"li\"\n          size={1}\n          muted\n          style={{\n            display: 'list-item',\n            padding: '0.5rem 0',\n          }}\n        >\n          {interpolateChildren(children)}\n        </Text>\n      ),\n      checkmarks: ({children}) => <Text>{children}</Text>,\n    },\n\n    marks: {\n      strong: ({children}) => <strong>{interpolateChildren(children)}</strong>,\n      semibold: ({children}) => <SemiboldSpan>{interpolateChildren(children)}</SemiboldSpan>,\n      link: (props) => (\n        <Link\n          href={props.value.href}\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n          $useTextColor={props.value.useTextColor}\n          // eslint-disable-next-line react/jsx-no-bind\n          onClick={\n            onLinkClick\n              ? () =>\n                  onLinkClick({\n                    url: props.value.href,\n                    linkTitle: props.text,\n                  })\n              : undefined\n          }\n        >\n          {props.children}\n          {props.value.showIcon && <LinkIcon style={{marginLeft: '2px'}} />}\n        </Link>\n      ),\n      accent: ({children}) => <AccentSpan>{interpolateChildren(children)}</AccentSpan>,\n    },\n    types: {\n      inlineIcon: (props) => {\n        return (\n          <ConditionalWrapper condition={props.value.accent} wrapper={accentSpanWrapper}>\n            {props.value.sanityIcon ? (\n              <InlineIcon\n                symbol={props.value.sanityIcon}\n                $hasTextLeft={props.value.hasTextLeft}\n                $hasTextRight={props.value.hasTextRight}\n              />\n            ) : (\n              <>{props.value.icon?.url && <DynamicIcon icon={props.value.icon} inline />}</>\n            )}\n          </ConditionalWrapper>\n        )\n      },\n      divider: () => (\n        <Box marginY={3}>\n          <Box paddingY={3}>\n            <Divider />\n          </Box>\n        </Box>\n      ),\n      iconAndText: (props) => (\n        <Flex\n          align=\"flex-start\"\n          paddingX={2}\n          paddingTop={1}\n          paddingBottom={2}\n          marginTop={2}\n          gap={2}\n        >\n          <Flex gap={2} style={{flexShrink: 0}}>\n            <IconTextContainer size={1} accent={props.value.accent}>\n              {props.value.sanityIcon ? (\n                <Icon symbol={props.value.sanityIcon} />\n              ) : (\n                <>{props.value.icon?.url && <DynamicIcon icon={props.value.icon} />} </>\n              )}\n            </IconTextContainer>\n            <Text size={1} weight=\"semibold\" accent={props.value.accent}>\n              {interpolateChildren(props.value.title)}\n            </Text>\n          </Flex>\n\n          <Text size={1} muted accent={props.value.accent}>\n            {interpolateChildren(props.value.text)}\n          </Text>\n        </Flex>\n      ),\n      imageBlock: (props) => <ImageBlock {...props} />,\n    },\n  }\n}\n\ninterface DescriptionSerializerProps {\n  blocks: PortableTextBlock[]\n  onLinkClick?: ({url, linkTitle}: {url: string; linkTitle: string}) => void\n  interpolation?: InterpolationProp\n}\n\n/**\n * Portable text serializer for the description text for upsell elements.\n * Not meant for public consumption.\n * @internal\n */\nexport function UpsellDescriptionSerializer(props: DescriptionSerializerProps) {\n  const {blocks, onLinkClick, interpolation} = props\n\n  const value = useMemo(() => transformBlocks(blocks), [blocks])\n  const components = useMemo(\n    () => createComponents({onLinkClick, interpolation}),\n    [onLinkClick, interpolation],\n  )\n\n  return (\n    <Card tone=\"default\">\n      <SerializerContainer>\n        <PortableText\n          value={value}\n          components={components}\n          /* Disable warnings on missing components */\n          onMissingComponent={false}\n        />\n      </SerializerContainer>\n    </Card>\n  )\n}\n","import {white} from '@sanity/color'\nimport {CloseIcon, LaunchIcon} from '@sanity/icons'\nimport {Box, Stack} from '@sanity/ui'\n// eslint-disable-next-line camelcase\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {styled} from 'styled-components'\n\nimport {Button, Dialog} from '../../../ui-components'\nimport {type UpsellData} from './types'\nimport {type InterpolationProp, UpsellDescriptionSerializer} from './upsellDescriptionSerializer'\n\n/**\n * Absolute positioned button to close the dialog.\n */\nconst StyledButton = styled(Button)(({theme}) => {\n  const {space} = getTheme_v2(theme)\n  return `\n      position: absolute;\n      top: ${space[3]}px;\n      right: ${space[3]}px;\n      z-index: 20;\n      background: transparent;\n      border-radius: 9999px;\n      box-shadow: none;\n      color: ${white.hex};\n      --card-fg-color: ${white.hex};\n      :hover {\n        --card-fg-color: ${white.hex};\n      }\n    `\n})\n\nconst Image = styled.img`\n  object-fit: cover;\n  width: 100%;\n  height: 100%;\n  height: 200px;\n`\n\ninterface UpsellDialogProps {\n  data: UpsellData\n  onClose: () => void\n  onPrimaryClick: () => void\n  onSecondaryClick: () => void\n  interpolation?: InterpolationProp\n}\n\nexport function UpsellDialog(props: UpsellDialogProps) {\n  const {data, onClose, onPrimaryClick, onSecondaryClick, interpolation} = props\n\n  return (\n    <Dialog\n      id=\"upsell-dialog\"\n      onClose={onClose}\n      onClickOutside={onClose}\n      __unstable_hideCloseButton\n      bodyHeight=\"fill\"\n      padding={false}\n      footer={{\n        cancelButton: data.secondaryButton?.text\n          ? {\n              text: data.secondaryButton.text,\n              mode: 'bleed',\n              tone: 'default',\n              iconRight: LaunchIcon,\n              ...(data.secondaryButton.url && {\n                target: '_blank',\n                rel: 'noopener noreferrer',\n                as: 'a',\n                href: data.secondaryButton.url,\n              }),\n              onClick: onSecondaryClick,\n            }\n          : undefined,\n        confirmButton: {\n          text: data.ctaButton?.text,\n          mode: 'default',\n          tone: 'primary',\n          ...(data.ctaButton.url && {\n            target: '_blank',\n            rel: 'noopener noreferrer',\n            as: 'a',\n            href: data.ctaButton.url,\n          }),\n          onClick: onPrimaryClick,\n        },\n      }}\n    >\n      <StyledButton\n        icon={CloseIcon}\n        mode=\"bleed\"\n        tone=\"default\"\n        onClick={onClose}\n        tabIndex={-1}\n        tooltipProps={null}\n      />\n      {data.image && <Image src={data.image.asset.url} alt={data.image.asset.altText ?? ''} />}\n      <Box padding={3} marginTop={2}>\n        <Stack space={4} paddingBottom={2}>\n          <UpsellDescriptionSerializer\n            blocks={data.descriptionText}\n            interpolation={interpolation}\n          />\n        </Stack>\n      </Box>\n    </Dialog>\n  )\n}\n","import {type SanityClient} from '@sanity/client'\nimport {useMemo} from 'react'\nimport {BehaviorSubject, catchError, map, type Observable, of, switchMap, tap, timer} from 'rxjs'\n\nimport {useClient} from '../../hooks/useClient'\nimport {useResourceCache} from '../../store/_legacy/ResourceCacheProvider'\nimport {fetchReleaseLimits, type ReleaseLimits} from '../contexts/upsell/fetchReleaseLimits'\nimport {useActiveReleases} from './useActiveReleases'\n\ninterface OrgActiveReleaseCountStore {\n  orgActiveReleaseCount$: Observable<ReleaseLimits['orgActiveReleaseCount']>\n}\n\nconst STATE_TTL_MS = 60_000\nconst ORG_ACTIVE_RELEASE_COUNT_RESOURCE_CACHE_NAMESPACE = 'orgActiveReleaseCount'\n\nfunction createOrgActiveReleaseCountStore(\n  client: SanityClient,\n  activeReleasesCount: number,\n): OrgActiveReleaseCountStore {\n  const latestFetchState = new BehaviorSubject<number | null>(null)\n  const staleFlag$ = new BehaviorSubject<boolean>(false)\n  const activeReleaseCountAtFetch = new BehaviorSubject<number | null>(null)\n\n  const orgActiveReleaseCount$ = latestFetchState.pipe(\n    switchMap((state) => {\n      if (\n        state === null ||\n        staleFlag$.getValue() === true ||\n        activeReleaseCountAtFetch.getValue() !== activeReleasesCount\n      ) {\n        staleFlag$.next(false)\n\n        return fetchReleaseLimits(client, 'orgActiveReleaseCount').pipe(\n          tap(() => activeReleaseCountAtFetch.next(activeReleasesCount)),\n          map((data) => data.orgActiveReleaseCount),\n          catchError((error) => {\n            console.error('Failed to fetch org release count', error)\n\n            if (!state) throw error\n\n            // return the last state if it exists\n            return of(state)\n          }),\n          switchMap((nextState) => {\n            latestFetchState.next(nextState)\n\n            timer(STATE_TTL_MS).subscribe(() => {\n              staleFlag$.next(true)\n              activeReleaseCountAtFetch.next(null)\n            })\n\n            return of(nextState)\n          }),\n        )\n      }\n\n      return of(state)\n    }),\n  )\n\n  return {\n    orgActiveReleaseCount$,\n  }\n}\n\n/**\n * @internal\n *\n * Returns a shared observable to a cache of the org's active release count.\n *\n * This cache expires after a TTL or whenever the active releases in the\n * count of active releases in the dataset changes.\n *\n * @returns An Observable of the cached value for org's active release count.\n */\nexport const useOrgActiveReleaseCount = () => {\n  const resourceCache = useResourceCache()\n  const {data: activeReleases} = useActiveReleases()\n  const client = useClient({apiVersion: 'v2025-02-19'})\n\n  const activeReleasesCount = activeReleases?.length || 0\n\n  // dependencies must be objects not primitives, so nesting activeReleasesCount in an object\n  const count = useMemo(() => ({activeReleasesCount}), [activeReleasesCount])\n\n  return useMemo(() => {\n    const releaseLimitsStore =\n      resourceCache.get<OrgActiveReleaseCountStore>({\n        dependencies: [client, count],\n        namespace: ORG_ACTIVE_RELEASE_COUNT_RESOURCE_CACHE_NAMESPACE,\n      }) || createOrgActiveReleaseCountStore(client, count.activeReleasesCount)\n\n    resourceCache.set({\n      namespace: ORG_ACTIVE_RELEASE_COUNT_RESOURCE_CACHE_NAMESPACE,\n      value: releaseLimitsStore,\n      dependencies: [client, count],\n    })\n\n    return releaseLimitsStore\n  }, [client, count, resourceCache])\n}\n","import {useTelemetry} from '@sanity/telemetry/react'\nimport {template} from 'lodash'\nimport {useCallback, useEffect, useMemo, useState} from 'react'\nimport {firstValueFrom} from 'rxjs'\nimport {ReleasesUpsellContext} from 'sanity/_singletons'\n\nimport {useClient, useFeatureEnabled, useProjectId} from '../../../hooks'\nimport {\n  UpsellDialogDismissed,\n  UpsellDialogLearnMoreCtaClicked,\n  UpsellDialogUpgradeCtaClicked,\n  UpsellDialogViewed,\n} from '../../../studio'\nimport {TEMPLATE_OPTIONS} from '../../../studio/upsell/constants'\nimport {type UpsellData} from '../../../studio/upsell/types'\nimport {UpsellDialog} from '../../../studio/upsell/UpsellDialog'\nimport {useActiveReleases} from '../../store/useActiveReleases'\nimport {useOrgActiveReleaseCount} from '../../store/useOrgActiveReleaseCount'\nimport {useReleaseLimits} from '../../store/useReleaseLimits'\nimport {type ReleasesUpsellContextValue} from './types'\n\nclass StudioReleaseLimitExceededError extends Error {\n  details: {type: 'releaseLimitExceededError'}\n\n  constructor() {\n    super('StudioReleaseLimitExceeded')\n    this.name = 'StudioReleaseLimitExceededError'\n    this.details = {\n      type: 'releaseLimitExceededError',\n    }\n  }\n}\n\nconst FEATURE = 'content-releases'\nconst BASE_URL = 'www.sanity.io'\n// Date when the change from array to object in the data returned was introduced.\nconst API_VERSION = '2024-04-19'\n\n/**\n * @beta\n * @hidden\n */\nexport function ReleasesUpsellProvider(props: {children: React.ReactNode}) {\n  const [upsellDialogOpen, setUpsellDialogOpen] = useState(false)\n  const [upsellData, setUpsellData] = useState<UpsellData | null>(null)\n  const projectId = useProjectId()\n  const telemetry = useTelemetry()\n  const client = useClient({apiVersion: API_VERSION})\n  const {data: activeReleases} = useActiveReleases()\n  const {enabled: isReleasesFeatureEnabled} = useFeatureEnabled('contentReleases')\n\n  const mode = useMemo(() => {\n    /**\n     * upsell if:\n     * plan is free, ie releases is not feature enabled\n     */\n    if (!isReleasesFeatureEnabled && upsellData) {\n      return 'upsell'\n    }\n    if (isReleasesFeatureEnabled && !upsellData) {\n      return 'disabled'\n    }\n    return 'default'\n  }, [isReleasesFeatureEnabled, upsellData])\n\n  const telemetryLogs = useMemo(\n    (): ReleasesUpsellContextValue['telemetryLogs'] => ({\n      dialogSecondaryClicked: () =>\n        telemetry.log(UpsellDialogLearnMoreCtaClicked, {\n          feature: FEATURE,\n          type: 'modal',\n        }),\n      dialogPrimaryClicked: () =>\n        telemetry.log(UpsellDialogUpgradeCtaClicked, {\n          feature: FEATURE,\n          type: 'modal',\n        }),\n      panelViewed: (source) =>\n        telemetry.log(UpsellDialogViewed, {\n          feature: FEATURE,\n          type: 'inspector',\n          source,\n        }),\n      panelDismissed: () =>\n        telemetry.log(UpsellDialogDismissed, {\n          feature: FEATURE,\n          type: 'inspector',\n        }),\n      panelPrimaryClicked: () =>\n        telemetry.log(UpsellDialogUpgradeCtaClicked, {\n          feature: FEATURE,\n          type: 'inspector',\n        }),\n      panelSecondaryClicked: () =>\n        telemetry.log(UpsellDialogLearnMoreCtaClicked, {\n          feature: FEATURE,\n          type: 'inspector',\n        }),\n    }),\n    [telemetry],\n  )\n\n  const handlePrimaryButtonClick = useCallback(() => {\n    telemetryLogs.dialogPrimaryClicked()\n  }, [telemetryLogs])\n\n  const handleSecondaryButtonClick = useCallback(() => {\n    telemetryLogs.dialogSecondaryClicked()\n  }, [telemetryLogs])\n\n  const handleClose = useCallback(() => {\n    setUpsellDialogOpen(false)\n    telemetry.log(UpsellDialogDismissed, {\n      feature: FEATURE,\n      type: 'modal',\n    })\n  }, [telemetry])\n\n  useEffect(() => {\n    const data$ = client.observable.request<UpsellData | null>({\n      uri: '/journey/content-releases',\n    })\n\n    const sub = data$.subscribe({\n      next: (data) => {\n        if (!data) return\n        try {\n          const ctaUrl = template(data.ctaButton.url, TEMPLATE_OPTIONS)\n          data.ctaButton.url = ctaUrl({baseUrl: BASE_URL, projectId})\n\n          const secondaryUrl = template(data.secondaryButton.url, TEMPLATE_OPTIONS)\n          data.secondaryButton.url = secondaryUrl({baseUrl: BASE_URL, projectId})\n          setUpsellData(data)\n        } catch (e) {\n          // silently fail\n        }\n      },\n      error: () => {\n        // silently fail\n      },\n    })\n\n    return () => {\n      sub.unsubscribe()\n    }\n  }, [client, projectId])\n\n  const [releaseCount, setReleaseCount] = useState<number | null>(null)\n\n  const handleOpenDialog = useCallback(\n    (orgActiveReleaseCount?: number) => {\n      setUpsellDialogOpen(true)\n      if (orgActiveReleaseCount !== undefined) {\n        setReleaseCount(orgActiveReleaseCount)\n      }\n\n      telemetry.log(UpsellDialogViewed, {\n        feature: FEATURE,\n        type: 'modal',\n        source: 'navbar',\n      })\n    },\n    [telemetry],\n  )\n\n  const {releaseLimits$} = useReleaseLimits()\n  const {orgActiveReleaseCount$} = useOrgActiveReleaseCount()\n\n  const guardWithReleaseLimitUpsell = useCallback(\n    async (cb: () => void, throwError: boolean = false) => {\n      const doUpsell: (count?: number) => false = (count) => {\n        handleOpenDialog(count)\n        if (throwError) {\n          throw new StudioReleaseLimitExceededError()\n        }\n        return false\n      }\n\n      if (mode === 'upsell') return doUpsell()\n\n      const fetchLimitsCount = async () => {\n        try {\n          // if either fails then catch the error\n          return await Promise.all([\n            firstValueFrom(orgActiveReleaseCount$),\n            firstValueFrom(releaseLimits$),\n          ])\n        } catch (e) {\n          console.error('Error fetching release limits and org count for upsell:', e)\n\n          return null\n        }\n      }\n\n      const result = await fetchLimitsCount()\n\n      // silently fail and allow pass through guard\n      if (result === null) return cb()\n\n      const [orgActiveReleaseCount, releaseLimits] = result\n\n      if (releaseLimits === null || orgActiveReleaseCount === null) return cb()\n\n      const {orgActiveReleaseLimit, datasetReleaseLimit} = releaseLimits\n\n      // orgActiveReleaseCount might be missing due to internal server error\n      // allow pass through guard in that case\n      if (orgActiveReleaseCount === null) return cb()\n\n      const activeReleasesCount = activeReleases?.length || 0\n\n      const isCurrentDatasetAtAboveDatasetLimit = activeReleasesCount >= datasetReleaseLimit\n      const isCurrentDatasetAtAboveOrgLimit =\n        orgActiveReleaseLimit !== null && activeReleasesCount >= orgActiveReleaseLimit\n      const isOrgAtAboveOrgLimit =\n        orgActiveReleaseLimit !== null && orgActiveReleaseCount >= orgActiveReleaseLimit\n\n      const shouldShowDialog =\n        isCurrentDatasetAtAboveDatasetLimit ||\n        isCurrentDatasetAtAboveOrgLimit ||\n        isOrgAtAboveOrgLimit\n\n      if (shouldShowDialog) return doUpsell(orgActiveReleaseCount)\n\n      return cb()\n    },\n    [mode, handleOpenDialog, orgActiveReleaseCount$, releaseLimits$, activeReleases?.length],\n  )\n\n  const onReleaseLimitReached = useCallback(\n    (limit: number) => handleOpenDialog(limit),\n    [handleOpenDialog],\n  )\n\n  const ctxValue = useMemo<ReleasesUpsellContextValue>(\n    () => ({\n      mode,\n      upsellDialogOpen,\n      guardWithReleaseLimitUpsell,\n      onReleaseLimitReached,\n      telemetryLogs,\n    }),\n    [mode, upsellDialogOpen, guardWithReleaseLimitUpsell, onReleaseLimitReached, telemetryLogs],\n  )\n\n  const interpolation = releaseCount === null ? undefined : {releaseLimit: releaseCount}\n\n  return (\n    <ReleasesUpsellContext.Provider value={ctxValue}>\n      {props.children}\n      {upsellData && upsellDialogOpen && (\n        <UpsellDialog\n          interpolation={interpolation}\n          data={upsellData}\n          onClose={handleClose}\n          onPrimaryClick={handlePrimaryButtonClick}\n          onSecondaryClick={handleSecondaryButtonClick}\n        />\n      )}\n    </ReleasesUpsellContext.Provider>\n  )\n}\n","import {type Workspace} from '../../config/types'\nimport {RELEASES_TOOL_NAME} from '../plugin'\n\n/**\n * Determine whether the releases tool is available in the provided workspace.\n *\n * This check is performed on the available tools, rather than the enabled status of the releases\n * feature itself. This caters to scenarios in which releases are enabled for a workspace, but the\n * release tool was later removed (e.g. using a workspace tool filter).\n *\n * @internal\n */\nexport function releasesToolAvailable(workspace: Workspace): boolean {\n  return workspace.tools.some(({name}) => name === RELEASES_TOOL_NAME)\n}\n","import {useMemo} from 'react'\n\nimport {useWorkspace} from '../../studio/workspace'\nimport {releasesToolAvailable} from '../util/releasesToolAvailable'\n\n/**\n * Determine whether the releases tool is available in the current workspace.\n *\n * This check is performed on the available tools, rather than the enabled status of the releases\n * feature itself. This caters to scenarios in which releases are enabled for the workspace, but the\n * release tool was later removed (e.g. using a workspace tool filter).\n *\n * @internal\n */\nexport function useReleasesToolAvailable(): boolean {\n  const workspace = useWorkspace()\n  return useMemo(() => releasesToolAvailable(workspace), [workspace])\n}\n","import {type LayoutProps} from '../../config'\nimport {ReleasesMetadataProvider} from '../contexts/ReleasesMetadataProvider'\nimport {ReleasesUpsellProvider} from '../contexts/upsell/ReleasesUpsellProvider'\nimport {useReleasesToolAvailable} from '../hooks/useReleasesToolAvailable'\n\nexport function ReleasesStudioLayout(props: LayoutProps) {\n  const releasesToolAvailable = useReleasesToolAvailable()\n\n  if (!releasesToolAvailable) {\n    return props.renderDefault(props)\n  }\n\n  return (\n    <ReleasesUpsellProvider>\n      <ReleasesMetadataProvider>{props.renderDefault(props)}</ReleasesMetadataProvider>\n    </ReleasesUpsellProvider>\n  )\n}\n","import {route} from 'sanity/router'\n\nimport {definePlugin} from '../../config/definePlugin'\nimport {releasesUsEnglishLocaleBundle} from '../i18n'\nimport {ReleasesTool} from '../tool/ReleasesTool'\nimport resolveDocumentActions from './documentActions'\nimport {ReleasesStudioLayout} from './ReleasesStudioLayout'\n\n/**\n * @internal\n */\nexport const RELEASES_NAME = 'sanity/releases'\n\n/**\n * @internal\n */\nexport const RELEASES_TOOL_NAME = 'releases'\n\n/**\n * @internal\n */\nexport const RELEASES_INTENT = 'release'\n\n/**\n * @internal\n */\nexport const releases = definePlugin({\n  name: RELEASES_NAME,\n  studio: {\n    components: {\n      layout: ReleasesStudioLayout,\n    },\n  },\n  tools: [\n    {\n      name: RELEASES_TOOL_NAME,\n      title: 'Releases',\n      component: ReleasesTool,\n      router: route.create('/', [route.create('/:releaseId')]),\n      canHandleIntent: (intent) => {\n        // If intent is release, open the releases tool.\n        return Boolean(intent === RELEASES_INTENT)\n      },\n      getIntentState(intent, params) {\n        if (intent === RELEASES_INTENT) {\n          return {releaseId: params.id}\n        }\n        return null\n      },\n    },\n  ],\n  i18n: {\n    bundles: [releasesUsEnglishLocaleBundle],\n  },\n  document: {\n    actions: (actions, context) => resolveDocumentActions(actions, context),\n  },\n})\n","import {Flex} from '@sanity/ui'\nimport {useMemo} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {RELEASE_TYPES_TONES, type VersionInfoDocumentStub} from '../../releases'\nimport {useActiveReleases} from '../../releases/store/useActiveReleases'\nimport {getReleaseIdFromReleaseDocumentId} from '../../releases/util/getReleaseIdFromReleaseDocumentId'\n\ninterface DocumentStatusProps {\n  draft?: VersionInfoDocumentStub | undefined\n  published?: VersionInfoDocumentStub | undefined\n  versions?: Record<string, VersionInfoDocumentStub | undefined>\n}\n\nconst Dot = styled.div<{$index: number}>((props) => {\n  const {$index} = props\n  const tone = {\n    asap: RELEASE_TYPES_TONES.asap.tone,\n    scheduled: RELEASE_TYPES_TONES.scheduled.tone,\n    undecided: RELEASE_TYPES_TONES.undecided.tone,\n  }\n\n  return css`\n    width: 5px;\n    height: 5px;\n    background-color: var(--card-icon-color);\n    border-radius: 999px;\n    box-shadow: 0 0 0 1px var(--card-bg-color);\n    z-index: ${$index};\n    &[data-status='published'] {\n      --card-icon-color: var(--card-badge-positive-dot-color);\n    }\n    &[data-status='draft'] {\n      --card-icon-color: var(--card-badge-caution-dot-color);\n    }\n    &[data-status='asap'] {\n      --card-icon-color: var(--card-badge-${tone.asap}-dot-color);\n    }\n    &[data-status='undecided'] {\n      --card-icon-color: var(--card-badge-${tone.undecided}-dot-color);\n    }\n    &[data-status='scheduled'] {\n      --card-icon-color: var(--card-badge-${tone.scheduled}-dot-color);\n    }\n  `\n})\n\ntype Status = 'published' | 'draft' | 'asap' | 'scheduled' | 'undecided'\n\n/**\n * Renders a dot indicating the current document status.\n *\n * @internal\n */\nexport function DocumentStatusIndicator({draft, published, versions}: DocumentStatusProps) {\n  const {data: releases} = useActiveReleases()\n  const versionsList = useMemo(\n    () =>\n      versions\n        ? Object.entries(versions).map(([versionName, snapshot]) => {\n            if (!snapshot) {\n              return undefined\n            }\n            const release = releases?.find(\n              (r) => getReleaseIdFromReleaseDocumentId(r._id) === versionName,\n            )\n            return release?.metadata.releaseType\n          })\n        : [],\n    [releases, versions],\n  )\n\n  const indicators: {\n    status: Status\n    show: boolean\n  }[] = [\n    {\n      status: 'published',\n      show: Boolean(published),\n    },\n    {\n      status: 'draft',\n      show: Boolean(draft),\n    },\n    {\n      status: 'asap',\n      show: versionsList.includes('asap'),\n    },\n    {\n      status: 'scheduled',\n      show: versionsList.includes('scheduled'),\n    },\n    {\n      status: 'undecided',\n      show: versionsList.includes('undecided'),\n    },\n  ]\n\n  return (\n    <Flex>\n      {indicators\n        .filter(({show}) => show)\n        .map(({status}, index) => (\n          <Dot key={status} data-status={status} $index={index + 1} />\n        ))}\n    </Flex>\n  )\n}\n","import {type ObjectSchemaType} from '@sanity/types'\nimport {Badge, Box, Inline} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nimport {type PreviewLayoutKey} from '../../../components'\nimport {DocumentStatus} from '../../../components/documentStatus'\nimport {DocumentStatusIndicator} from '../../../components/documentStatusIndicator'\nimport {DocumentPreviewPresence} from '../../../presence'\nimport {useDocumentVersionInfo} from '../../../releases'\nimport {useDocumentPresence} from '../../../store'\nimport {type RenderPreviewCallback} from '../../types'\n\n/**\n * Used to preview a referenced type\n * Takes the reference type as props\n */\nexport function ReferencePreview(props: {\n  id: string\n  refType: ObjectSchemaType\n  layout: PreviewLayoutKey\n  renderPreview: RenderPreviewCallback\n  showTypeLabel?: boolean\n}) {\n  const {id, layout, refType, renderPreview, showTypeLabel} = props\n\n  const documentPresence = useDocumentPresence(id)\n\n  const versionsInfo = useDocumentVersionInfo(id)\n\n  // Note: we can't pass the preview values as-is to the Preview-component here since it's a \"prepared\" value and the\n  // Preview component expects the \"raw\"/unprepared value. By passing only _id and _type we make sure the Preview-component\n  // resolve the preview value it needs (this is cached in the runtime, so not likely to cause any fetch overhead)\n  const previewStub = useMemo(() => ({_id: id, _type: refType.name}), [id, refType.name])\n\n  const previewProps = useMemo(\n    () => ({\n      children: (\n        <Box paddingLeft={3}>\n          <Inline space={3}>\n            {showTypeLabel && <Badge mode=\"outline\">{refType.title}</Badge>}\n\n            {documentPresence && documentPresence.length > 0 && (\n              <DocumentPreviewPresence presence={documentPresence} />\n            )}\n\n            <DocumentStatusIndicator\n              draft={versionsInfo.draft}\n              published={versionsInfo.published}\n              versions={versionsInfo.versions}\n            />\n          </Inline>\n        </Box>\n      ),\n      layout,\n      schemaType: refType,\n      tooltip: (\n        <DocumentStatus\n          draft={versionsInfo.draft}\n          published={versionsInfo.published}\n          versions={versionsInfo.versions}\n        />\n      ),\n      value: previewStub,\n    }),\n    [\n      documentPresence,\n      layout,\n      previewStub,\n      refType,\n      showTypeLabel,\n      versionsInfo.draft,\n      versionsInfo.published,\n      versionsInfo.versions,\n    ],\n  )\n\n  return renderPreview(previewProps)\n}\n","import {AccessDeniedIcon, HelpCircleIcon} from '@sanity/icons'\nimport {type Reference, type ReferenceSchemaType} from '@sanity/types'\nimport {Badge, Box, Flex, Inline, Stack, Text} from '@sanity/ui'\nimport {type ComponentType, Fragment, type ReactNode} from 'react'\n\nimport {Tooltip} from '../../../../ui-components'\nimport {type PreviewLayoutKey, TextWithTone} from '../../../components'\nimport {useListFormat} from '../../../hooks'\nimport {Translate, useTranslation} from '../../../i18n'\nimport {SanityDefaultPreview} from '../../../preview'\nimport {type RenderPreviewCallback} from '../../types'\nimport {ReferencePreview} from './ReferencePreview'\nimport {type ReferenceInfo} from './types'\nimport {type Loadable} from './useReferenceInfo'\n\nexport function PreviewReferenceValue(props: {\n  layout?: PreviewLayoutKey\n  referenceInfo: Loadable<ReferenceInfo>\n  renderPreview: RenderPreviewCallback\n  type: ReferenceSchemaType\n  value: Reference\n  showTypeLabel?: boolean\n}) {\n  const {layout = 'default', referenceInfo, renderPreview, type, value, showTypeLabel} = props\n  const {t} = useTranslation()\n\n  if (referenceInfo.isLoading || referenceInfo.error) {\n    return <SanityDefaultPreview isPlaceholder layout={layout} />\n  }\n\n  // Special handling for \"create refs in place\"\n  // When a reference is created in place, the newly created document may not yet exist (or may have been deleted)\n  // This is a completely valid case, and we handle it by showing the preview for the referenced type\n  if (referenceInfo.result?.availability.reason === 'NOT_FOUND' && value._strengthenOnPublish) {\n    const refType = type.to.find((toType) => toType.name === value?._strengthenOnPublish?.type)\n    if (!refType) {\n      // This means that the reference document type (specified by _strengthenOnPublish.type)\n      // is not valid according to schema\n      return (\n        <InvalidType\n          documentId={value._ref}\n          actualType={value._strengthenOnPublish?.type}\n          declaredTypes={type.to.map((toType) => toType.name)}\n        />\n      )\n    }\n\n    // todo: figure out whether this check is necessary (can value._strengthenOnPublish.type ever be missing)\n    const stub = value._strengthenOnPublish?.type\n      ? {\n          _id: value._ref,\n          _type: value._strengthenOnPublish?.type,\n        }\n      : value\n\n    return (\n      <Flex align=\"center\">\n        <Box flex={1}>\n          {renderPreview({\n            layout,\n            schemaType: refType,\n            value: stub,\n            skipVisibilityCheck: true,\n          })}\n        </Box>\n        <Box>\n          <Inline space={4}>\n            {showTypeLabel && <Badge mode=\"outline\">{refType.title}</Badge>}\n          </Inline>\n        </Box>\n      </Flex>\n    )\n  }\n\n  const availability = referenceInfo.result.availability\n\n  const notFound = availability.reason === 'NOT_FOUND'\n  const insufficientPermissions = availability.reason === 'PERMISSION_DENIED'\n  if (insufficientPermissions || notFound) {\n    return (\n      <Inline space={2}>\n        <Box padding={1}>\n          <Flex align=\"center\">\n            <Box flex={1} paddingY={2}>\n              <Text muted>{t('inputs.reference.error.document-unavailable-title')}</Text>\n            </Box>\n          </Flex>\n        </Box>\n        {insufficientPermissions || notFound ? (\n          <Box>\n            <Tooltip\n              portal\n              content={\n                notFound ? (\n                  <UnavailableMessage\n                    title={t('inputs.reference.error.nonexistent-document-title')}\n                    icon={HelpCircleIcon}\n                  >\n                    <Translate\n                      i18nKey=\"inputs.reference.error.nonexistent-document-description\"\n                      t={t}\n                      values={{documentId: value._ref}}\n                    />\n                  </UnavailableMessage>\n                ) : (\n                  <UnavailableMessage\n                    title={t('inputs.reference.error.missing-read-permissions-title')}\n                    icon={AccessDeniedIcon}\n                  >\n                    {t('inputs.reference.error.missing-read-permissions-description')}\n                  </UnavailableMessage>\n                )\n              }\n            >\n              <TextWithTone tone=\"default\">\n                <HelpCircleIcon />\n              </TextWithTone>\n            </Tooltip>\n          </Box>\n        ) : null}\n      </Inline>\n    )\n  }\n\n  const refTypeName = referenceInfo.result?.type\n  const refType = type.to.find((toType) => toType.name === refTypeName)\n\n  if (!refType) {\n    return (\n      <InvalidType\n        documentId={value._ref}\n        // note: a missing refTypeName here means the document is either loading, doesn't exist or is unreadable by current role.\n        // These states should already have been covered by earlier checks\n        // eslint-disable-next-line @sanity/i18n/no-attribute-string-literals\n        actualType={refTypeName || '<unknown>'}\n        declaredTypes={type.to.map((toType) => toType.name)}\n      />\n    )\n  }\n\n  return (\n    <ReferencePreview\n      id={value._ref}\n      layout={layout}\n      refType={refType}\n      renderPreview={renderPreview}\n      showTypeLabel={showTypeLabel}\n    />\n  )\n}\n\nfunction UnavailableMessage(props: {icon: ComponentType; children: ReactNode; title: ReactNode}) {\n  const Icon = props.icon\n  return (\n    <Flex>\n      <Text size={1}>\n        <Icon />\n      </Text>\n      <Box flex={1} marginLeft={3}>\n        <Text size={1} weight=\"medium\">\n          {props.title}\n        </Text>\n\n        <Box marginTop={3}>\n          <Text as=\"p\" muted size={1}>\n            {props.children}\n          </Text>\n        </Box>\n      </Box>\n    </Flex>\n  )\n}\n\nfunction InvalidType({\n  declaredTypes,\n  documentId,\n  actualType,\n}: {\n  documentId: string\n  actualType: string\n  declaredTypes: string[]\n}) {\n  const {t} = useTranslation()\n\n  return (\n    <Flex align=\"center\" justify=\"flex-start\">\n      <Box padding={1}>\n        <Flex align=\"center\">\n          <Box flex={1} paddingY={2}>\n            <Text muted>{t('inputs.reference.error.invalid-type-title')}</Text>\n          </Box>\n        </Flex>\n      </Box>\n      <Box>\n        <Tooltip\n          portal\n          content={\n            <Stack space={3}>\n              <Text size={1}>\n                <Translate\n                  t={t}\n                  i18nKey=\"inputs.reference.error.invalid-type-description\"\n                  values={{documentId, actualType}}\n                  components={{\n                    AllowedTypes: () => <HumanizedList values={declaredTypes} />,\n                  }}\n                />\n              </Text>\n            </Stack>\n          }\n        >\n          <Box padding={2}>\n            <TextWithTone tone=\"default\">\n              <HelpCircleIcon />\n            </TextWithTone>\n          </Box>\n        </Tooltip>\n      </Box>\n    </Flex>\n  )\n}\n\nfunction HumanizedList(props: {values: string[]}) {\n  const listFormat = useListFormat({type: 'disjunction'})\n  const parts = listFormat.formatToParts(props.values)\n  return (\n    <Fragment>\n      {parts.map((segment) =>\n        segment.type === 'element' ? (\n          <code key={segment.value}>{segment.value}</code>\n        ) : (\n          segment.value\n        ),\n      )}\n    </Fragment>\n  )\n}\n","import {ErrorOutlineIcon, InfoOutlineIcon, WarningOutlineIcon} from '@sanity/icons'\nimport {Box, Card, type CardProps, Flex} from '@sanity/ui'\nimport {type HTMLProps, type ReactNode} from 'react'\n\nimport {Details} from './Details'\n\ninterface AlertProps extends Omit<CardProps, 'title'> {\n  title: ReactNode\n  status?: 'warning' | 'error' | 'info'\n}\n\nconst STATUS_TONES = {\n  warning: 'caution',\n  error: 'critical',\n  info: 'positive',\n} as const\n\nconst STATUS_ICONS = {\n  warning: <WarningOutlineIcon />,\n  error: <ErrorOutlineIcon />,\n  info: <InfoOutlineIcon />,\n}\n\nexport function AlertStrip(props: AlertProps & Omit<HTMLProps<HTMLDivElement>, 'ref'>) {\n  const {children, status = 'warning', title, ...rest} = props\n\n  return (\n    <Card radius={2} tone={STATUS_TONES[status]} {...rest} data-ui=\"Alert\">\n      <Flex padding={1}>\n        {children && (\n          <Box flex={1}>\n            <Details icon={STATUS_ICONS[status]} title={title}>\n              <Box marginLeft={3} marginTop={3}>\n                {children}\n              </Box>\n            </Details>\n          </Box>\n        )}\n      </Flex>\n    </Card>\n  )\n}\n","import {type ReferenceSchemaType} from '@sanity/types'\nimport {Stack, Text} from '@sanity/ui'\n\nimport {Button} from '../../../../ui-components'\nimport {Translate, useTranslation} from '../../../i18n'\nimport {AlertStrip} from '../../components/AlertStrip'\n\n/**\n * Alert strip that shows an explanation and action prompting the user to finalize a reference,\n * in the case where a `strengthen on publish` flag is set and the remote document exists.\n *\n * @internal\n */\nexport function ReferenceFinalizeAlertStrip({\n  schemaType,\n  handleRemoveStrengthenOnPublish,\n}: {\n  schemaType: ReferenceSchemaType\n  handleRemoveStrengthenOnPublish: () => void\n}) {\n  const {t} = useTranslation()\n  return (\n    <AlertStrip\n      padding={1}\n      title={t(\n        schemaType.weak\n          ? 'inputs.reference.incomplete-reference.finalize-action-title'\n          : 'inputs.reference.incomplete-reference.strengthen-action-title',\n      )}\n      status=\"info\"\n      data-testid=\"alert-reference-published\"\n    >\n      <Stack space={3}>\n        <Text as=\"p\" muted size={1}>\n          <Translate\n            t={t}\n            i18nKey={\n              schemaType.weak\n                ? 'inputs.reference.incomplete-reference.finalize-action-description'\n                : 'inputs.reference.incomplete-reference.strengthen-action-description'\n            }\n          />\n        </Text>\n        <Button\n          mode=\"ghost\"\n          onClick={handleRemoveStrengthenOnPublish}\n          size=\"large\"\n          text={t('inputs.reference.incomplete-reference.strengthen-button-label')}\n          tone=\"positive\"\n        />\n      </Stack>\n    </AlertStrip>\n  )\n}\n","import {Card, type CardProps} from '@sanity/ui'\nimport {type ForwardedRef, forwardRef, type HTMLProps} from 'react'\nimport {styled} from 'styled-components'\n\nexport const StyledCard = styled(Card)`\n  /* this is a hack to avoid layout jumps while previews are loading\n     there's probably better ways of solving this */\n  min-height: 33px;\n  position: relative;\n\n  /* TextWithTone uses its own logic to set color, and we therefore need */\n  /* to override this logic in order to set the correct color in different states */\n  &[data-selected],\n  &[data-pressed],\n  &:active {\n    [data-ui='TextWithTone'] {\n      color: inherit;\n    }\n  }\n`\n\ninterface ReferenceLinkCardProps extends CardProps {\n  as: any\n  documentId: string\n  documentType: string | undefined\n}\n\nexport const ReferenceLinkCard = forwardRef(function ReferenceLinkCard(\n  props: ReferenceLinkCardProps & HTMLProps<HTMLElement>,\n  ref: ForwardedRef<HTMLElement>,\n) {\n  const {as, documentId, documentType, ...cardProps} = props\n\n  // If the child link is clicked without a document type, an error will be thrown.\n  // This usually happens when the link is clicked before the document type has been resolved.\n  // In this case, we don't want to pass the `as`/`forwardedAs` props to the Card component, as it will throw an error.\n  const linkProps = documentId &&\n    documentType && {\n      // this will make @sanity/ui style it as a link\n      'data-as': 'a',\n      // this determines the actual tag inserted into the DOM (either a HTML element or a component)\n      'forwardedAs': as,\n      'documentId': documentId,\n      'documentType': documentType,\n    }\n\n  return (\n    <StyledCard\n      {...cardProps}\n      {...linkProps}\n      data-ui=\"ReferenceLinkCard\"\n      ref={ref as unknown as ForwardedRef<HTMLDivElement>}\n    />\n  )\n})\n","import {Stack, Text} from '@sanity/ui'\n\nimport {Button} from '../../../../ui-components'\nimport {useTranslation} from '../../../i18n'\nimport {AlertStrip} from '../../components/AlertStrip'\n\n/**\n * Alert strip that shows error encountered while fetching reference metadata, and allowing user\n * to retry the operation.\n *\n * @internal\n */\nexport function ReferenceMetadataLoadErrorAlertStrip({\n  errorMessage,\n  onHandleRetry,\n}: {\n  errorMessage: string\n  onHandleRetry: () => void\n}) {\n  const {t} = useTranslation()\n  return (\n    <AlertStrip\n      padding={1}\n      title={t('inputs.reference.metadata-error.title')}\n      status=\"warning\"\n      data-testid=\"alert-reference-info-failed\"\n    >\n      <Stack space={3}>\n        <Text as=\"p\" muted size={1}>\n          {errorMessage}\n        </Text>\n        <Button\n          mode=\"ghost\"\n          onClick={onHandleRetry}\n          size=\"large\"\n          text={t('inputs.reference.metadata-error.retry-button-label')}\n          tone=\"primary\"\n        />\n      </Stack>\n    </AlertStrip>\n  )\n}\n","import {Stack, Text} from '@sanity/ui'\n\nimport {Button} from '../../../../ui-components'\nimport {Translate, useTranslation} from '../../../i18n'\nimport {AlertStrip} from '../../components/AlertStrip'\n\n/**\n * Alert strip that shows an explanation and action prompting the user to fix a mismatch in\n * reference strength, eg when the schema declares it should be weak, but the reference is actually\n * strong, or wise versa.\n *\n * @internal\n */\nexport function ReferenceStrengthMismatchAlertStrip({\n  actualStrength,\n  handleFixStrengthMismatch,\n}: {\n  actualStrength: 'weak' | 'strong'\n  handleFixStrengthMismatch: () => void\n}) {\n  const shouldBe = actualStrength === 'weak' ? 'strong' : 'weak'\n  const {t} = useTranslation()\n  return (\n    <AlertStrip\n      padding={1}\n      title={t('inputs.reference.strength-mismatch.title')}\n      status=\"warning\"\n      data-testid=\"alert-reference-strength-mismatch\"\n    >\n      <Stack space={3}>\n        <Text as=\"p\" muted size={1}>\n          <Translate\n            t={t}\n            i18nKey={\n              actualStrength === 'weak'\n                ? 'inputs.reference.strength-mismatch.is-weak-description'\n                : 'inputs.reference.strength-mismatch.is-strong-description'\n            }\n          />\n        </Text>\n\n        <Text as=\"p\" muted size={1}>\n          {t(\n            shouldBe === 'weak'\n              ? 'inputs.reference.strength-mismatch.is-strong-consquences'\n              : 'inputs.reference.strength-mismatch.is-weak-consquences',\n          )}\n        </Text>\n        <Button\n          mode=\"ghost\"\n          onClick={handleFixStrengthMismatch}\n          size=\"large\"\n          text={t(\n            shouldBe === 'weak'\n              ? 'inputs.reference.strength-mismatch.weaken-button-label'\n              : 'inputs.reference.strength-mismatch.strengthen-button-label',\n          )}\n          tone=\"caution\"\n        />\n      </Stack>\n    </AlertStrip>\n  )\n}\n","import {observableCallback} from 'observable-callback'\nimport {useMemo, useState} from 'react'\nimport {useObservable} from 'react-rx'\nimport {concat, type Observable, of} from 'rxjs'\nimport {catchError, concatMap, map, startWith} from 'rxjs/operators'\n\nimport {type ReferenceInfo} from './types'\n\nconst noop = () => undefined\n\nconst INITIAL_LOADING_STATE: Loadable<ReferenceInfo> = {\n  isLoading: true,\n  result: undefined,\n  error: undefined,\n  retry: noop,\n}\n\nconst EMPTY_STATE: Loadable<any> = {\n  isLoading: false,\n  result: undefined,\n  error: undefined,\n  retry: noop,\n}\n\nexport type Loadable<T> =\n  | {isLoading: true; result: undefined; error: undefined; retry: () => void}\n  | {isLoading: false; result: T; error: undefined; retry: () => void}\n  | {isLoading: false; result: undefined; error: Error; retry: () => void}\n\ntype GetReferenceInfo = (id: string) => Observable<ReferenceInfo>\n\n// NOTE: If you refactor or fix bugs in this hook, also consider if the changes also relevant for the `useReferenceInfo` hook in\n// `packages/sanity/src/core/form/inputs/GlobalDocumentReferenceInput/useReferenceInfo.ts` and\n// `packages/sanity/src/core/form/inputs/CrossDatasetReferenceInput/useReferenceInfo.ts` which are similar but have some differences\n\nexport function useReferenceInfo(\n  id: string | undefined,\n  getReferenceInfo: GetReferenceInfo,\n): Loadable<ReferenceInfo> {\n  // NOTE: this is a small message queue to handle retries\n  const [[onRetry$, onRetry]] = useState(() => observableCallback())\n\n  const referenceInfoObservable = useMemo(\n    () =>\n      concat(of(null), onRetry$).pipe(\n        map(() => id),\n        concatMap((refId: string | undefined) =>\n          refId\n            ? getReferenceInfo(refId).pipe(\n                map((result) => {\n                  return {\n                    isLoading: false,\n                    result,\n                    error: undefined,\n                    retry: onRetry,\n                  } as const\n                }),\n                startWith(INITIAL_LOADING_STATE),\n                catchError((err: Error) => {\n                  console.error(err)\n                  return of({\n                    isLoading: false,\n                    result: undefined,\n                    error: err,\n                    retry: onRetry,\n                  } as const)\n                }),\n              )\n            : of(EMPTY_STATE),\n        ),\n      ),\n    [getReferenceInfo, id, onRetry, onRetry$],\n  )\n  return useObservable(referenceInfoObservable, INITIAL_LOADING_STATE)\n}\n","import {type Path} from '@sanity/types'\nimport {pathFor} from '@sanity/util/paths'\nimport {type ReactNode, useContext, useMemo} from 'react'\nimport {FormValueContext} from 'sanity/_singletons'\n\nimport {getValueAtPath} from '../../field'\nimport {type FormDocumentValue} from '../types'\n\n/**\n * @internal\n * @hidden\n */\nexport interface FormValueContextValue {\n  value: FormDocumentValue | undefined\n}\n\n/**\n *\n * @internal\n * @hidden\n */\nexport function FormValueProvider(props: {\n  value: FormDocumentValue | undefined\n  children: ReactNode\n}) {\n  const value = useMemo(() => ({value: props.value}), [props.value])\n  return <FormValueContext.Provider value={value}>{props.children}</FormValueContext.Provider>\n}\n\n/**\n * React hook that returns the value of the field specified by a path.\n * @public\n *\n * @param path - An array notation with segments that are either strings representing field names, index integers for arrays with simple values, or objects with a _key for arrays containing objects\n *\n * @returns The value of the field specified by the path\n *\n * @example Using the `useFormValue` hook\n * ```ts\n * function MyComponent() {\n *    // get value of field 'name' in object 'author'\n *    const authorName = useFormValue(['author', 'name'])\n *    // get value of the second item in array 'tags' of type 'string'\n *    const secondTag = useFormValue(['tags', 1])\n *    // get value of the reference with the matching key in an array of references\n *    const specificBook = useFormValue([ 'bibliography', {_key: '<key>'} ])\n *   // ... do something with the form values ...\n * }\n * ```\n */\n\nexport function useFormValue(path: Path): unknown {\n  const uniquePath = pathFor(path)\n  const ctx = useContext(FormValueContext)\n  if (!ctx) {\n    throw new Error('useFormValue must be used within a FormValueProvider')\n  }\n\n  return getValueAtPath(ctx?.value, uniquePath)\n}\n","import {type SanityClient, type StackablePerspective} from '@sanity/client'\nimport {DEFAULT_MAX_FIELD_DEPTH} from '@sanity/schema/_internal'\nimport {type ReferenceFilterSearchOptions, type ReferenceSchemaType} from '@sanity/types'\nimport {combineLatest, type Observable, of} from 'rxjs'\nimport {map, mergeMap, switchMap} from 'rxjs/operators'\n\nimport {type DocumentPreviewStore, getPreviewStateObservable} from '../../../../preview'\nimport {createSearch} from '../../../../search'\nimport {collate, type CollatedHit, getDraftId, getIdPair} from '../../../../util'\nimport {type ReferenceInfo, type ReferenceSearchHit} from '../../../inputs/ReferenceInput/types'\n\nconst READABLE = {\n  available: true,\n  reason: 'READABLE',\n} as const\n\nconst PERMISSION_DENIED = {\n  available: false,\n  reason: 'PERMISSION_DENIED',\n} as const\n\nconst NOT_FOUND = {\n  available: false,\n  reason: 'NOT_FOUND',\n} as const\n\n/**\n * Takes an id and a reference schema type, returns metadata about it\n */\nexport function getReferenceInfo(\n  documentPreviewStore: DocumentPreviewStore,\n  id: string,\n  referenceType: ReferenceSchemaType,\n  {version, perspective}: {version?: string; perspective?: StackablePerspective[]} = {},\n): Observable<ReferenceInfo> {\n  const {publishedId, draftId, versionId} = getIdPair(id, {version})\n\n  const pairAvailability$ = documentPreviewStore.unstable_observeDocumentPairAvailability(id, {\n    version,\n  })\n\n  return pairAvailability$.pipe(\n    switchMap((pairAvailability) => {\n      if (\n        !pairAvailability.draft.available &&\n        !pairAvailability.published.available &&\n        !pairAvailability.version?.available\n      ) {\n        // combine availability of draft + published\n        const availability =\n          pairAvailability.version?.reason === 'PERMISSION_DENIED' ||\n          pairAvailability.draft.reason === 'PERMISSION_DENIED' ||\n          pairAvailability.published.reason === 'PERMISSION_DENIED'\n            ? PERMISSION_DENIED\n            : NOT_FOUND\n\n        // short circuit, neither draft nor published nor version is available so no point in trying to get preview\n        return of({\n          id,\n          type: undefined,\n          availability,\n          isPublished: null,\n          preview: {\n            snapshot: null,\n            original: null,\n          },\n        } as const)\n      }\n\n      const typeName$ = combineLatest([\n        documentPreviewStore.observeDocumentTypeFromId(draftId),\n        documentPreviewStore.observeDocumentTypeFromId(publishedId),\n        ...(versionId ? [documentPreviewStore.observeDocumentTypeFromId(versionId)] : []),\n      ]).pipe(\n        // assume draft + published + version are always same type\n        map(\n          ([draftTypeName, publishedTypeName, versionTypeName]) =>\n            versionTypeName || draftTypeName || publishedTypeName,\n        ),\n      )\n\n      return typeName$.pipe(\n        switchMap((typeName) => {\n          if (!typeName) {\n            // we have already asserted that either the draft or the published document is readable, so\n            // if we get here we can't read the _type, so we're likely to be in an inconsistent state\n            // waiting for an update to reach the client. Since we're in the context of a reactive stream based on\n            // the _type we'll get it eventually\n            return of({\n              id,\n              type: undefined,\n              availability: {available: true, reason: 'READABLE'},\n              isPublished: null,\n              preview: {\n                snapshot: null,\n                original: null,\n              },\n            } as const)\n          }\n\n          // get schema type for the referenced document\n          const refSchemaType = referenceType.to.find((memberType) => memberType.name === typeName)!\n\n          if (!refSchemaType) {\n            return of({\n              id,\n              type: typeName,\n              availability: {available: true, reason: 'READABLE'},\n              isPublished: null,\n              preview: {\n                snapshot: null,\n                original: null,\n              },\n            } as const)\n          }\n\n          const publishedDocumentExists$ = documentPreviewStore\n            .observePaths({_id: publishedId}, ['_rev'])\n            .pipe(map((res) => Boolean((res as {_id: string; _rev: string} | undefined)?._rev)))\n\n          const previewState$ = getPreviewStateObservable(\n            documentPreviewStore,\n            refSchemaType,\n            publishedId,\n            perspective,\n          )\n\n          return combineLatest([previewState$, publishedDocumentExists$]).pipe(\n            map(([previewState, publishedDocumentExists]): ReferenceInfo => {\n              const availability =\n                // eslint-disable-next-line no-nested-ternary\n                pairAvailability.version?.available ||\n                pairAvailability.draft.available ||\n                pairAvailability.published.available\n                  ? READABLE\n                  : pairAvailability.version?.reason === 'PERMISSION_DENIED' ||\n                      pairAvailability.draft.reason === 'PERMISSION_DENIED' ||\n                      pairAvailability.published.reason === 'PERMISSION_DENIED'\n                    ? PERMISSION_DENIED\n                    : NOT_FOUND\n              return {\n                type: typeName,\n                id: publishedId,\n                availability,\n                isPublished: publishedDocumentExists,\n                preview: {snapshot: previewState.snapshot, original: previewState.original},\n              }\n            }),\n          )\n        }),\n      )\n    }),\n  )\n}\n\n/**\n * when we get a search result it may not include all [draft, published] id pairs for documents matching the\n * query. For example: searching for \"potato\" may yield a hit in the draft, but not the published (or vice versa)\n *\n * This method takes a list of collated search hits and returns an array of the missing \"counterpart\" ids\n */\nfunction getCounterpartIds(collatedHits: CollatedHit[]): string[] {\n  return collatedHits\n    .filter(\n      (collatedHit) =>\n        // we're interested in hits where either draft or published is missing\n        !collatedHit.draft || !collatedHit.published,\n    )\n    .map((collatedHit) =>\n      // if we have the draft, return the published id or vice versa\n      collatedHit.draft ? collatedHit.id : getDraftId(collatedHit.id),\n    )\n}\n\nfunction getExistingCounterparts(client: SanityClient, ids: string[]) {\n  return ids.length === 0\n    ? of([])\n    : client.observable.fetch(`*[_id in $ids]._id`, {ids}, {tag: 'get-counterpart-ids'})\n}\n\nexport function referenceSearch(\n  client: SanityClient,\n  textTerm: string,\n  type: ReferenceSchemaType,\n  options: ReferenceFilterSearchOptions,\n): Observable<ReferenceSearchHit[]> {\n  const search = createSearch(type.to, client, {\n    ...options,\n    maxDepth: options.maxFieldDepth || DEFAULT_MAX_FIELD_DEPTH,\n  })\n  return search(textTerm, {includeDrafts: true}).pipe(\n    map(({hits}) => hits.map(({hit}) => hit)),\n    map((docs) =>\n      docs.map((doc) => ({\n        ...doc,\n        // Pass the original id if available, it could be a `draftId` or a `versionId` , the _id will be the published one when using perspectives to query the data.\n        _id: (doc._originalId as string) || doc._id,\n      })),\n    ),\n    map((docs) => collate(docs)),\n    // pick the 100 best matches\n    map((collated) => collated.slice(0, 100)),\n    mergeMap((collated) => {\n      // Note: It might seem like this step is redundant, but it's here for a reason:\n      // The list of search hits returned from here will be passed as options to the reference input's autocomplete. When\n      // one of them gets selected by the user, it will then be passed as the argument to the `onChange` handler in the\n      // Reference Input. This handler will then look at the passed value to determine whether to make a link to a\n      // draft (using _strengthenOnPublish) or a published document.\n      //\n      // Without this step, in a case where both a draft and a published version exist but only the draft matches\n      // the search term, we'd end up making a reference with `_strengthenOnPublish: true`, when we instead should be\n      // making a normal reference to the published id\n      return getExistingCounterparts(client, getCounterpartIds(collated)).pipe(\n        map((existingCounterpartIds) => {\n          return collated.map((entry) => {\n            const draftId = getDraftId(entry.id)\n            return {\n              id: entry.id,\n              type: entry.type,\n              draft:\n                entry.draft || existingCounterpartIds.includes(draftId)\n                  ? {_id: draftId, _type: entry.type}\n                  : undefined,\n              published:\n                entry.published || existingCounterpartIds.includes(entry.id)\n                  ? {_id: entry.id, _type: entry.type}\n                  : undefined,\n            }\n          })\n        }),\n      )\n    }),\n  )\n}\n","import {type Path, type Reference, type ReferenceSchemaType} from '@sanity/types'\nimport * as PathUtils from '@sanity/util/paths'\nimport {\n  type ComponentProps,\n  type ForwardedRef,\n  forwardRef,\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n} from 'react'\n\nimport {type FIXME} from '../../../FIXME'\nimport {useSchema} from '../../../hooks'\nimport {usePerspective} from '../../../perspective/usePerspective'\nimport {useDocumentPreviewStore} from '../../../store'\nimport {isNonNullable} from '../../../util'\nimport {useFormValue} from '../../contexts/FormValue'\nimport {useReferenceInputOptions} from '../../studio'\nimport * as adapter from '../../studio/inputs/client-adapters/reference'\nimport {type EditReferenceEvent} from './types'\n\nfunction useValueRef<T>(value: T): {current: T} {\n  const ref = useRef(value)\n  useEffect(() => {\n    ref.current = value\n  }, [value])\n  return ref\n}\n\ninterface Options {\n  path: Path\n  schemaType: ReferenceSchemaType\n  value?: Reference\n  version?: string\n}\n\nexport function useReferenceInput(options: Options) {\n  const {path, schemaType, version} = options\n  const schema = useSchema()\n  const perspective = usePerspective()\n  const documentPreviewStore = useDocumentPreviewStore()\n  const {\n    EditReferenceLinkComponent,\n    onEditReference,\n    activePath,\n    initialValueTemplateItems,\n    ...inheritedOptions\n  } = useReferenceInputOptions()\n\n  const documentValue = useFormValue([]) as FIXME\n  const documentRef = useValueRef(documentValue)\n\n  const documentTypeName = documentRef.current?._type\n\n  const isCurrentDocumentLiveEdit = useMemo(() => {\n    return schema.get(documentTypeName)?.liveEdit\n  }, [documentTypeName, schema])\n\n  const disableNew = inheritedOptions.disableNew ?? schemaType.options?.disableNew === true\n\n  const template = options.value?._strengthenOnPublish?.template\n  const EditReferenceLink = useMemo(\n    () =>\n      forwardRef(function EditReferenceLink_(\n        _props: ComponentProps<NonNullable<typeof EditReferenceLinkComponent>>,\n        forwardedRef: ForwardedRef<'a'>,\n      ) {\n        return EditReferenceLinkComponent ? (\n          <EditReferenceLinkComponent\n            {..._props}\n            ref={forwardedRef}\n            parentRefPath={path}\n            template={template}\n          />\n        ) : null\n      }),\n    [EditReferenceLinkComponent, path, template],\n  )\n\n  const handleEditReference = useCallback(\n    (event: EditReferenceEvent) => {\n      onEditReference?.({\n        parentRefPath: path,\n        id: event.id,\n        type: event.type,\n        template: event.template,\n      })\n    },\n    [onEditReference, path],\n  )\n\n  const selectedState = PathUtils.startsWith(path, activePath?.path || [])\n    ? activePath?.state\n    : 'none'\n\n  const createOptions = useMemo(() => {\n    if (disableNew) {\n      return []\n    }\n    return (\n      (initialValueTemplateItems || [])\n        // eslint-disable-next-line max-nested-callbacks\n        .filter((i) => schemaType.to.some((refType) => refType.name === i.template?.schemaType))\n        .map((item) =>\n          item.template?.schemaType\n            ? {\n                id: item.id,\n                title:\n                  item.title || `${item.template.schemaType} from template ${item.template.id}`,\n                type: item.template.schemaType,\n                icon: item.icon,\n                template: {\n                  id: item.template.id,\n                  params: item.parameters,\n                },\n\n                permission: {granted: item.granted, reason: item.reason},\n              }\n            : undefined,\n        )\n        .filter(isNonNullable)\n    )\n  }, [disableNew, initialValueTemplateItems, schemaType.to])\n\n  const getReferenceInfo = useCallback(\n    (id: string) =>\n      adapter.getReferenceInfo(documentPreviewStore, id, schemaType, {\n        version,\n        perspective: perspective.perspectiveStack,\n      }),\n    [documentPreviewStore, schemaType, version, perspective.perspectiveStack],\n  )\n\n  return {\n    selectedState,\n    isCurrentDocumentLiveEdit,\n    handleEditReference,\n    EditReferenceLink,\n    createOptions,\n    getReferenceInfo,\n  }\n}\n","import {LaunchIcon as OpenInNewTabIcon, SyncIcon as ReplaceIcon, TrashIcon} from '@sanity/icons'\nimport {type Reference, type ReferenceSchemaType} from '@sanity/types'\nimport {Box, Card, type CardTone, Flex, Menu, MenuDivider, Stack} from '@sanity/ui'\nimport {\n  type ComponentProps,\n  type FocusEvent,\n  type ForwardedRef,\n  forwardRef,\n  useCallback,\n  useMemo,\n  useRef,\n  useState,\n} from 'react'\nimport {IntentLink} from 'sanity/router'\n\nimport {MenuButton, MenuItem, TooltipDelayGroupProvider} from '../../../../ui-components'\nimport {ContextMenuButton} from '../../../components/contextMenuButton'\nimport {type DocumentFieldActionNode} from '../../../config'\nimport {useTranslation} from '../../../i18n'\nimport {usePerspective} from '../../../perspective/usePerspective'\nimport {EMPTY_ARRAY} from '../../../util/empty'\nimport {FormField} from '../../components'\nimport {usePublishedId} from '../../contexts/DocumentIdProvider'\nimport {FieldActionsProvider, FieldActionsResolver} from '../../field'\nimport {useDidUpdate} from '../../hooks/useDidUpdate'\nimport {useScrollIntoViewOnFocusWithin} from '../../hooks/useScrollIntoViewOnFocusWithin'\nimport {set, unset} from '../../patch'\nimport {type ObjectFieldProps, type RenderPreviewCallback} from '../../types'\nimport {PreviewReferenceValue} from './PreviewReferenceValue'\nimport {ReferenceFinalizeAlertStrip} from './ReferenceFinalizeAlertStrip'\nimport {ReferenceLinkCard} from './ReferenceLinkCard'\nimport {ReferenceMetadataLoadErrorAlertStrip} from './ReferenceMetadataLoadFailure'\nimport {ReferenceStrengthMismatchAlertStrip} from './ReferenceStrengthMismatchAlertStrip'\nimport {type ReferenceInfo} from './types'\nimport {type Loadable, useReferenceInfo} from './useReferenceInfo'\nimport {useReferenceInput} from './useReferenceInput'\n\ninterface ReferenceFieldProps extends Omit<ObjectFieldProps, 'renderDefault'> {\n  schemaType: ReferenceSchemaType\n  renderPreview: RenderPreviewCallback\n}\n\nfunction getTone({\n  readOnly,\n  hasErrors,\n  hasWarnings,\n}: {\n  readOnly: boolean | undefined\n  hasErrors: boolean\n  hasWarnings: boolean\n}): CardTone {\n  if (readOnly) {\n    return 'transparent'\n  }\n  if (hasErrors) {\n    return 'critical'\n  }\n  return hasWarnings ? 'caution' : 'default'\n}\nconst MENU_POPOVER_PROPS = {portal: true, tone: 'default'} as const\n\nexport function ReferenceField(props: ReferenceFieldProps) {\n  const elementRef = useRef<HTMLDivElement | null>(null)\n  const {schemaType, path, open, inputId, children, inputProps} = props\n  const {readOnly, focused, renderPreview, onChange} = props.inputProps\n  const {selectedReleaseId} = usePerspective()\n\n  const [fieldActionsNodes, setFieldActionNodes] = useState<DocumentFieldActionNode[]>([])\n  const documentId = usePublishedId()\n\n  const handleClear = useCallback(() => inputProps.onChange(unset()), [inputProps])\n  const value: Reference | undefined = props.value as any\n\n  const {EditReferenceLink, getReferenceInfo, selectedState, isCurrentDocumentLiveEdit} =\n    useReferenceInput({\n      path,\n      schemaType,\n      value,\n      version: selectedReleaseId,\n    })\n\n  // this is here to make sure the item is visible if it's being edited behind a modal\n  useScrollIntoViewOnFocusWithin(elementRef, open)\n\n  useDidUpdate(focused, (hadFocus, hasFocus) => {\n    if (!hadFocus && hasFocus && elementRef.current) {\n      // Note: if editing an inline item, focus is handled by the item input itself and no ref is being set\n      elementRef.current.focus()\n    }\n  })\n\n  const hasErrors = props.validation.some((v) => v.level === 'error')\n  const hasWarnings = props.validation.some((v) => v.level === 'warning')\n\n  const loadableReferenceInfo: Loadable<ReferenceInfo> = useReferenceInfo(\n    value?._ref,\n    getReferenceInfo,\n  )\n\n  const refTypeName = loadableReferenceInfo.result?.type || value?._strengthenOnPublish?.type\n\n  const refType = refTypeName\n    ? schemaType.to.find((toType) => toType.name === refTypeName)\n    : undefined\n  const pressed = selectedState === 'pressed'\n  const selected = selectedState === 'selected'\n\n  const hasRef = value?._ref\n  const publishedReferenceExists = hasRef && loadableReferenceInfo.result?.isPublished\n\n  const handleRemoveStrengthenOnPublish = useCallback(() => {\n    onChange([\n      schemaType.weak === true ? set(true, ['_weak']) : unset(['_weak']),\n      unset(['_strengthenOnPublish']),\n    ])\n  }, [onChange, schemaType.weak])\n\n  const handleFixStrengthMismatch = useCallback(() => {\n    onChange(schemaType.weak === true ? set(true, ['_weak']) : unset(['_weak']))\n  }, [onChange, schemaType])\n\n  const handleReplace = useCallback(() => {\n    inputProps.onPathFocus(['_ref'])\n  }, [inputProps])\n\n  const actualStrength = value?._weak ? 'weak' : 'strong'\n  const weakShouldBe = schemaType.weak === true ? 'weak' : 'strong'\n\n  // If the reference value is marked with _strengthenOnPublish,\n  // we allow weak references if the reference points to a document that has a draft but not a published\n  // In all other cases we should display a \"weak mismatch\" warning\n  const weakWarningOverride =\n    hasRef && !loadableReferenceInfo.isLoading && value?._strengthenOnPublish\n\n  const showWeakRefMismatch =\n    !loadableReferenceInfo.isLoading &&\n    loadableReferenceInfo.result?.availability.available &&\n    hasRef &&\n    actualStrength !== weakShouldBe &&\n    !weakWarningOverride\n\n  const tone = getTone({readOnly, hasErrors, hasWarnings})\n  const isEditing = !value?._ref || inputProps.focusPath[0] === '_ref'\n\n  const {t} = useTranslation()\n\n  const footer = (\n    <>\n      {isCurrentDocumentLiveEdit && publishedReferenceExists && value._strengthenOnPublish && (\n        <ReferenceFinalizeAlertStrip\n          schemaType={schemaType}\n          handleRemoveStrengthenOnPublish={handleRemoveStrengthenOnPublish}\n        />\n      )}\n      {showWeakRefMismatch && (\n        <ReferenceStrengthMismatchAlertStrip\n          actualStrength={actualStrength}\n          handleFixStrengthMismatch={handleFixStrengthMismatch}\n        />\n      )}\n      {loadableReferenceInfo.error && (\n        <ReferenceMetadataLoadErrorAlertStrip\n          errorMessage={loadableReferenceInfo.error.message}\n          onHandleRetry={loadableReferenceInfo.retry!}\n        />\n      )}\n    </>\n  )\n\n  const OpenLink = useMemo(\n    () =>\n      // eslint-disable-next-line @typescript-eslint/no-shadow\n      forwardRef(function OpenLink(\n        restProps: ComponentProps<typeof IntentLink>,\n        _ref: ForwardedRef<HTMLAnchorElement>,\n      ) {\n        return (\n          <IntentLink\n            {...restProps}\n            intent=\"edit\"\n            params={{id: value?._ref, type: refType?.name}}\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n            ref={_ref}\n          />\n        )\n      }),\n    [refType?.name, value?._ref],\n  )\n\n  const menu = useMemo(\n    () =>\n      readOnly ? null : (\n        <Box flex=\"none\">\n          <MenuButton\n            button={<ContextMenuButton />}\n            id={`${inputId}-menuButton`}\n            menu={\n              <Menu>\n                {!readOnly && (\n                  <>\n                    <MenuItem\n                      text={t('inputs.reference.action.clear')}\n                      tone=\"critical\"\n                      icon={TrashIcon}\n                      onClick={handleClear}\n                    />\n                    <MenuItem\n                      text={t('inputs.reference.action.replace')}\n                      icon={ReplaceIcon}\n                      onClick={handleReplace}\n                    />\n                  </>\n                )}\n\n                {!readOnly && value?._ref && <MenuDivider />}\n                {value?._ref && (\n                  <MenuItem\n                    as={OpenLink}\n                    data-as=\"a\"\n                    text={t('inputs.reference.action.open-in-new-tab')}\n                    icon={OpenInNewTabIcon}\n                  />\n                )}\n              </Menu>\n            }\n            popover={MENU_POPOVER_PROPS}\n          />\n        </Box>\n      ),\n    [handleClear, handleReplace, inputId, OpenLink, readOnly, t, value?._ref],\n  )\n\n  const handleFocus = useCallback(\n    (event: FocusEvent) => {\n      if (event.target === elementRef.current) {\n        inputProps.onPathFocus(EMPTY_ARRAY)\n      }\n    },\n    [inputProps],\n  )\n\n  return (\n    <>\n      {documentId && props.actions && props.actions.length > 0 && (\n        <FieldActionsResolver\n          actions={props.actions}\n          documentId={documentId}\n          documentType={schemaType.name}\n          onActions={setFieldActionNodes}\n          path={path}\n          schemaType={schemaType}\n        />\n      )}\n\n      <FieldActionsProvider\n        actions={fieldActionsNodes}\n        focused={Boolean(props.inputProps.focused)}\n        path={path}\n      >\n        <FormField\n          __internal_comments={props.__internal_comments}\n          __internal_slot={props.__internal_slot}\n          __unstable_headerActions={fieldActionsNodes}\n          __unstable_presence={props.presence}\n          description={props.description}\n          level={props.level}\n          title={props.title}\n          validation={props.validation}\n          deprecated={props.schemaType.deprecated}\n        >\n          {isEditing ? (\n            <Box>{children}</Box>\n          ) : (\n            <Card border radius={2} padding={1} tone={tone}>\n              <Stack space={1}>\n                <Flex gap={1} align=\"center\" style={{lineHeight: 0}}>\n                  <TooltipDelayGroupProvider>\n                    <ReferenceLinkCard\n                      __unstable_focusRing\n                      as={EditReferenceLink}\n                      data-pressed={pressed ? true : undefined}\n                      data-selected={selected ? true : undefined}\n                      documentId={value?._ref}\n                      documentType={refType?.name}\n                      flex={1}\n                      pressed={pressed}\n                      radius={2}\n                      ref={elementRef}\n                      selected={selected}\n                      tone=\"inherit\"\n                      onFocus={handleFocus}\n                    >\n                      <PreviewReferenceValue\n                        value={value}\n                        referenceInfo={loadableReferenceInfo}\n                        renderPreview={renderPreview}\n                        type={schemaType}\n                      />\n                    </ReferenceLinkCard>\n                    <Box>{menu}</Box>\n                  </TooltipDelayGroupProvider>\n                </Flex>\n                {footer}\n              </Stack>\n            </Card>\n          )}\n        </FormField>\n      </FieldActionsProvider>\n    </>\n  )\n}\n","import {isArraySchemaType, type SchemaType} from '@sanity/types'\nimport {get} from 'lodash'\n\nexport function getOption(type: SchemaType, optionName: string) {\n  return get(type.options, optionName)\n}\n\nconst PSEUDO_OBJECTS = ['array', 'file', 'image', 'reference', 'slug']\nconst HIDDEN_FIELDS = ['asset', 'crop', 'hotspot', '_ref', '_weak', 'media']\nconst NO_LEVEL_LAYOUTS = ['tags']\nconst NO_LEVEL_TYPES = ['slug']\n\nexport function getTypeChain(type: SchemaType | undefined, visited: Set<SchemaType>): SchemaType[] {\n  if (!type) return []\n  if (visited.has(type)) return []\n\n  visited.add(type)\n\n  const next = type.type ? getTypeChain(type.type, visited) : []\n  return [type, ...next]\n}\n\nexport function getFieldLevel(schemaType: SchemaType, currentLevel: number) {\n  return isArraySchemaType(schemaType)\n    ? getArrayFieldLevel(schemaType, currentLevel)\n    : getObjectFieldLevel(schemaType, currentLevel)\n}\n\nfunction getObjectFieldLevel(schemaType: SchemaType, currentLevel: number): number {\n  const {type, options} = schemaType\n  const typeIfRelevant = asType(type, PSEUDO_OBJECTS)\n  const fields = schemaType?.jsonType === 'object' ? schemaType.fields : undefined\n\n  const typeName = typeIfRelevant?.name || ''\n\n  if (NO_LEVEL_TYPES.includes(typeName)) {\n    return 0\n  }\n\n  const isPseudoObject = PSEUDO_OBJECTS.includes(typeName)\n  const hasVisibleFields = (fields?.filter((f) => !HIDDEN_FIELDS.includes(f.name)).length ?? 0) > 0\n  const hasListOptions = (options?.list?.length ?? 0) > 0\n\n  if (hasVisibleFields || hasListOptions || !isPseudoObject) {\n    return currentLevel\n  }\n\n  return 0\n}\n\nfunction getArrayFieldLevel(schemaType: SchemaType, currentLevel: number): number {\n  const {options} = schemaType\n\n  const hasListOptions = (options?.list || [])?.length > 0\n  const isNoLevelLayout = NO_LEVEL_LAYOUTS.includes(options?.layout || '')\n\n  if (hasListOptions && !isNoLevelLayout) {\n    return currentLevel\n  }\n\n  return 0\n}\n\nfunction asType(\n  schemaType: SchemaType | undefined,\n  asOneOfTypes: string[],\n): SchemaType | undefined {\n  if (schemaType?.name && asOneOfTypes.includes(schemaType?.name)) {\n    return schemaType\n  }\n  if (!schemaType) {\n    return undefined\n  }\n  return asType(schemaType.type, asOneOfTypes)\n}\n","/* eslint-disable react/jsx-handler-names */\nimport {\n  isBooleanSchemaType,\n  isCrossDatasetReferenceSchemaType,\n  isReferenceSchemaType,\n  type SchemaType,\n} from '@sanity/types'\nimport {type ComponentType, useMemo, useState} from 'react'\n\nimport {ChangeIndicator} from '../../../changeIndicators'\nimport {type DocumentFieldActionNode} from '../../../config'\nimport {FormField, FormFieldSet} from '../../components'\nimport {usePublishedId} from '../../contexts/DocumentIdProvider'\nimport {FieldActionsProvider, FieldActionsResolver} from '../../field'\nimport {ReferenceField} from '../../inputs/ReferenceInput/ReferenceField'\nimport {type FieldMember} from '../../store'\nimport {type ArrayFieldProps, type FieldProps, type ObjectFieldProps} from '../../types'\nimport {getTypeChain} from './helpers'\n\nconst EMPTY_ARRAY: never[] = []\n\nfunction BooleanField(field: FieldProps) {\n  return (\n    <ChangeIndicator\n      hasFocus={Boolean(field.inputProps.focused)}\n      isChanged={field.inputProps.changed}\n      path={field.path}\n    >\n      {field.children}\n    </ChangeIndicator>\n  )\n}\n\nfunction PrimitiveField(field: FieldProps) {\n  const [fieldActionsNodes, setFieldActionNodes] = useState<DocumentFieldActionNode[]>(EMPTY_ARRAY)\n  const documentId = usePublishedId()\n  const focused = Boolean(field.inputProps.focused)\n\n  return (\n    <>\n      {documentId && field.actions && field.actions.length > 0 && (\n        <FieldActionsResolver\n          actions={field.actions}\n          documentId={documentId}\n          documentType={field.schemaType.name}\n          onActions={setFieldActionNodes}\n          path={field.path}\n          schemaType={field.schemaType}\n        />\n      )}\n\n      <FieldActionsProvider actions={fieldActionsNodes} focused={focused} path={field.path}>\n        <FormField\n          __internal_slot={field.__internal_slot}\n          __internal_comments={field.__internal_comments}\n          __unstable_headerActions={fieldActionsNodes}\n          __unstable_presence={field.presence}\n          data-testid={`field-${field.inputId}`}\n          description={field.description}\n          inputId={field.inputId}\n          level={field.level}\n          title={field.title}\n          validation={field.validation}\n          deprecated={field.schemaType.deprecated}\n        >\n          <ChangeIndicator\n            hasFocus={focused}\n            isChanged={field.inputProps.changed}\n            path={field.path}\n          >\n            {field.children}\n          </ChangeIndicator>\n        </FormField>\n      </FieldActionsProvider>\n    </>\n  )\n}\n\nfunction ObjectOrArrayField(field: ObjectFieldProps | ArrayFieldProps) {\n  const [fieldActionsNodes, setFieldActionNodes] = useState<DocumentFieldActionNode[]>(EMPTY_ARRAY)\n  const documentId = usePublishedId()\n  const focused = Boolean(field.inputProps.focused)\n\n  const disableActions = field.schemaType.options?.disableActions || EMPTY_ARRAY\n\n  const actions = useMemo(() => {\n    return field.actions?.filter((a) => {\n      if (a.name === 'pasteField') {\n        return !disableActions.includes('add')\n      }\n      if (a.name === 'copyField') {\n        return !disableActions.includes('copy')\n      }\n      return true\n    })\n  }, [disableActions, field.actions])\n  return (\n    <>\n      {documentId && field.actions && field.actions.length > 0 && (\n        <FieldActionsResolver\n          actions={actions || EMPTY_ARRAY}\n          documentId={documentId}\n          documentType={field.schemaType.name}\n          onActions={setFieldActionNodes}\n          path={field.path}\n          schemaType={field.schemaType}\n        />\n      )}\n\n      <FieldActionsProvider actions={fieldActionsNodes} focused={focused} path={field.path}>\n        <FormFieldSet\n          __internal_comments={field.__internal_comments}\n          __internal_slot={field.__internal_slot}\n          __unstable_headerActions={fieldActionsNodes}\n          __unstable_presence={field.presence}\n          collapsed={field.collapsed}\n          collapsible={field.collapsible}\n          data-testid={`field-${field.inputId}`}\n          description={field.description}\n          level={field.level}\n          onCollapse={field.onCollapse}\n          onExpand={field.onExpand}\n          title={field.title}\n          validation={field.validation}\n          inputId={field.inputId}\n          deprecated={field.schemaType.deprecated}\n        >\n          {field.children}\n        </FormFieldSet>\n      </FieldActionsProvider>\n    </>\n  )\n}\n\nfunction ImageOrFileField(field: ObjectFieldProps) {\n  const [fieldActionsNodes, setFieldActionNodes] = useState<DocumentFieldActionNode[]>(EMPTY_ARRAY)\n  const documentId = usePublishedId()\n  const focused = Boolean(field.inputProps.focused)\n\n  // unless the hotspot tool dialog is open we want to show whoever is in there as the field presence\n  const hotspotField = field.inputProps.members.find(\n    (member): member is FieldMember => member.kind === 'field' && member.name === 'hotspot',\n  )\n  const presence = hotspotField?.open\n    ? field.presence\n    : field.presence.concat(hotspotField?.field.presence || EMPTY_ARRAY)\n\n  return (\n    <>\n      {documentId && field.actions && field.actions.length > 0 && (\n        <FieldActionsResolver\n          actions={field.actions}\n          documentId={documentId}\n          documentType={field.schemaType.name}\n          onActions={setFieldActionNodes}\n          path={field.path}\n          schemaType={field.schemaType}\n        />\n      )}\n\n      <FieldActionsProvider actions={fieldActionsNodes} focused={focused} path={field.path}>\n        <FormFieldSet\n          __internal_comments={field.__internal_comments}\n          __internal_slot={field.__internal_slot}\n          __unstable_headerActions={fieldActionsNodes}\n          __unstable_presence={presence}\n          collapsed={field.collapsed}\n          collapsible={field.collapsible}\n          description={field.description}\n          level={field.level}\n          onCollapse={field.onCollapse}\n          onExpand={field.onExpand}\n          title={field.title}\n          validation={field.validation}\n          inputId={field.inputId}\n          deprecated={field.schemaType.deprecated}\n        >\n          {field.children}\n        </FormFieldSet>\n      </FieldActionsProvider>\n    </>\n  )\n}\n\nexport function defaultResolveFieldComponent(\n  schemaType: SchemaType,\n): ComponentType<Omit<FieldProps, 'renderDefault'>> {\n  if (schemaType.components?.field) return schemaType.components.field\n\n  if (isBooleanSchemaType(schemaType)) {\n    return BooleanField as ComponentType<Omit<FieldProps, 'renderDefault'>>\n  }\n\n  const typeChain = getTypeChain(schemaType, new Set())\n\n  if (typeChain.some((t) => t.name === 'image' || t.name === 'file')) {\n    return ImageOrFileField as ComponentType<Omit<FieldProps, 'renderDefault'>>\n  }\n\n  if (typeChain.some((t) => isCrossDatasetReferenceSchemaType(t))) {\n    return PrimitiveField as ComponentType<Omit<FieldProps, 'renderDefault'>>\n  }\n\n  if (typeChain.some((t) => t.name === 'slug')) {\n    return PrimitiveField as ComponentType<Omit<FieldProps, 'renderDefault'>>\n  }\n\n  if (typeChain.some((t) => isReferenceSchemaType(t))) {\n    return ReferenceField as ComponentType<Omit<FieldProps, 'renderDefault'>>\n  }\n\n  if (schemaType.jsonType !== 'object' && schemaType.jsonType !== 'array') {\n    return PrimitiveField as ComponentType<Omit<FieldProps, 'renderDefault'>>\n  }\n\n  return ObjectOrArrayField as ComponentType<Omit<FieldProps, 'renderDefault'>>\n}\n","import {Grid, useElementRect} from '@sanity/ui'\nimport {type ForwardedRef, forwardRef, type ReactNode, useCallback, useState} from 'react'\nimport {css, styled} from 'styled-components'\n\nconst NARROW_LAYOUT = css`\n  grid-template-columns: minmax(0px, 1fr);\n`\n\nconst WIDE_LAYOUT = css`\n  grid-template-columns: 1fr min-content;\n`\n\nconst Root = styled(Grid)<{$narrow: boolean}>((props: {$narrow: boolean}) =>\n  props.$narrow ? NARROW_LAYOUT : WIDE_LAYOUT,\n)\n\nexport const AutocompleteContainer = forwardRef(function AutocompleteContainer(\n  props: {\n    children: ReactNode\n  },\n  forwardedRef: ForwardedRef<HTMLDivElement>,\n) {\n  const [rootElement, setRootElement] = useState<HTMLDivElement | null>(null)\n\n  const handleNewRef = useCallback(\n    (element: HTMLDivElement) => {\n      // there's a bit of \"double bookkeeping\" here. since useElementRect needs to re-run whenever the ref updates,\n      // and thus we need to keep it in the state\n      setForwardedRef(forwardedRef, element)\n      setRootElement(element)\n    },\n    [forwardedRef],\n  )\n\n  const inputWrapperRect = useElementRect(rootElement)\n\n  return (\n    <Root ref={handleNewRef} gap={1} $narrow={(inputWrapperRect?.width || 480) < 480}>\n      {props.children}\n    </Root>\n  )\n})\n\nfunction setForwardedRef<T>(ref: ForwardedRef<T>, instance: T) {\n  if (typeof ref === 'function') {\n    ref(instance)\n  } else if (ref) {\n    ref.current = instance\n  }\n}\n","import {AddIcon} from '@sanity/icons'\nimport {Menu} from '@sanity/ui'\nimport {type HTMLProps, type RefObject} from 'react'\n\nimport {\n  Button,\n  MenuButton,\n  type MenuButtonProps,\n  MenuItem,\n  Tooltip,\n} from '../../../../ui-components'\nimport {InsufficientPermissionsMessage} from '../../../components'\nimport {useGetI18nText, useTranslation} from '../../../i18n'\nimport {useCurrentUser} from '../../../store'\nimport {type CreateReferenceOption} from './types'\n\ninterface Props\n  extends Omit<HTMLProps<HTMLButtonElement>, 'as' | 'size' | 'width' | 'type' | 'ref'> {\n  id: string\n  createOptions: CreateReferenceOption[]\n  menuRef?: RefObject<HTMLDivElement | null>\n  onCreate: (option: CreateReferenceOption) => void\n  readOnly?: boolean\n}\n\nconst INLINE_BLOCK_STYLE = {display: 'inline-flex'}\nconst FULL_WIDTH = {width: '100%'}\n\nconst POPOVER_PROPS: MenuButtonProps['popover'] = {\n  portal: true,\n  tone: 'default',\n  constrainSize: true,\n  fallbackPlacements: ['bottom', 'left', 'top'],\n  placement: 'right',\n  preventOverflow: true,\n}\n\nexport function CreateButton(props: Props) {\n  const {createOptions, onCreate, id, menuRef, ...rest} = props\n  const currentUser = useCurrentUser()\n\n  const {t} = useTranslation()\n  const getI18nText = useGetI18nText(createOptions)\n\n  const canCreateAny = createOptions.some((option) => option.permission.granted)\n  if (!canCreateAny) {\n    return (\n      <Tooltip\n        content={\n          <InsufficientPermissionsMessage\n            currentUser={currentUser}\n            context=\"create-new-reference\"\n          />\n        }\n      >\n        {/* this wrapper div is needed because disabled button doesn't trigger mouse events */}\n        <div style={INLINE_BLOCK_STYLE}>\n          <Button\n            text={t('inputs.reference.action.create-new-document')}\n            mode=\"ghost\"\n            disabled\n            icon={AddIcon}\n            style={FULL_WIDTH}\n          />\n        </div>\n      </Tooltip>\n    )\n  }\n\n  return createOptions.length > 1 ? (\n    <MenuButton\n      button={\n        <Button\n          {...rest}\n          disabled={props.readOnly}\n          text={t('inputs.reference.action.create-new-document-select')}\n          mode=\"ghost\"\n          icon={AddIcon}\n          size=\"large\"\n        />\n      }\n      id={id}\n      menu={\n        <Menu ref={menuRef}>\n          {createOptions.map((createOption) => (\n            <Tooltip\n              disabled={createOption.permission.granted}\n              key={createOption.id}\n              content={\n                <InsufficientPermissionsMessage\n                  currentUser={currentUser}\n                  context=\"create-document-type\"\n                />\n              }\n              portal\n            >\n              {/* this wrapper div is needed because disabled button doesn't trigger mouse events */}\n              <div>\n                <MenuItem\n                  disabled={!createOption.permission.granted}\n                  icon={createOption.icon}\n                  text={getI18nText(createOption).title}\n                  // eslint-disable-next-line react/jsx-no-bind\n                  onClick={() => onCreate(createOption)}\n                />\n              </div>\n            </Tooltip>\n          ))}\n        </Menu>\n      }\n      popover={POPOVER_PROPS}\n    />\n  ) : (\n    <Button\n      {...rest}\n      text={t('inputs.reference.action.create-new-document-select')}\n      mode=\"ghost\"\n      disabled={!createOptions[0].permission.granted || props.readOnly}\n      // eslint-disable-next-line react/jsx-no-bind\n      onClick={() => onCreate(createOptions[0])}\n      icon={AddIcon}\n      size=\"large\"\n      data-testid={`create-new-document-select-${id}`}\n    />\n  )\n}\n","import {type ReferenceSchemaType} from '@sanity/types'\nimport {Stack, Text, TextSkeleton} from '@sanity/ui'\nimport {type Observable} from 'rxjs'\n\nimport {useTranslation} from '../../../i18n'\nimport {Alert} from '../../components/Alert'\nimport {type RenderPreviewCallback} from '../../types'\nimport {ReferencePreview} from './ReferencePreview'\nimport {type ReferenceInfo} from './types'\nimport {useReferenceInfo} from './useReferenceInfo'\n\n/**\n * Used to preview a referenced type\n * Takes the reference type as props\n *\n * @internal\n */\nexport function OptionPreview(props: {\n  id: string\n  type: ReferenceSchemaType\n  getReferenceInfo: (id: string) => Observable<ReferenceInfo>\n  renderPreview: RenderPreviewCallback\n}) {\n  const {getReferenceInfo, id: documentId, renderPreview} = props\n  const {isLoading, result: referenceInfo, error} = useReferenceInfo(documentId, getReferenceInfo)\n  const {t} = useTranslation()\n\n  if (isLoading) {\n    return (\n      <Stack space={2} padding={1}>\n        <TextSkeleton style={{maxWidth: 320}} radius={1} animated />\n        <TextSkeleton style={{maxWidth: 200}} radius={1} size={1} animated />\n      </Stack>\n    )\n  }\n\n  if (error) {\n    return (\n      <Stack space={2} padding={1}>\n        <Alert title={t('inputs.reference.error.failed-to-load-document-title')}>\n          <Text muted size={1}>\n            {error.message}\n          </Text>\n        </Alert>\n      </Stack>\n    )\n  }\n\n  if (!referenceInfo) {\n    return null\n  }\n\n  if (referenceInfo.availability.reason === 'PERMISSION_DENIED') {\n    return (\n      <Stack space={2} padding={1}>\n        {t('inputs.reference.error.missing-read-permissions-description')}\n      </Stack>\n    )\n  }\n\n  const refType = props.type.to.find((toType) => toType.name === referenceInfo.type)\n\n  if (!refType) {\n    return (\n      <Stack space={2} padding={1}>\n        {t('inputs.reference.error.invalid-search-result-type-title', {\n          returnedType: referenceInfo.type,\n        })}\n      </Stack>\n    )\n  }\n\n  return (\n    referenceInfo &&\n    refType && (\n      <ReferencePreview\n        id={referenceInfo.id}\n        layout=\"default\"\n        refType={refType}\n        renderPreview={renderPreview}\n        showTypeLabel={props.type.to.length > 1}\n      />\n    )\n  )\n}\n","import {Autocomplete, Box, Flex, type Placement, Text} from '@sanity/ui'\nimport {\n  type ComponentProps,\n  type ForwardedRef,\n  forwardRef,\n  type Ref,\n  type RefObject,\n  useCallback,\n} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Popover} from '../../../../ui-components'\nimport {Translate, useTranslation} from '../../../i18n'\n\nconst StyledPopover = styled(Popover)`\n  & > div {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n`\n\nconst StyledText = styled(Text)`\n  word-break: break-word;\n`\n\nconst FALLBACK_PLACEMENTS: Placement[] = ['top-start', 'bottom-start']\n\nexport const ReferenceAutocomplete = forwardRef(function ReferenceAutocomplete(\n  props: ComponentProps<typeof Autocomplete> & {\n    referenceElement: HTMLDivElement | null\n    searchString?: string\n    portalRef?: RefObject<HTMLDivElement | null>\n  },\n  ref: ForwardedRef<HTMLInputElement>,\n) {\n  const {searchString, loading, portalRef, referenceElement, ...restProps} = props\n  const {t} = useTranslation()\n  const hasResults = props.options && props.options.length > 0\n  const renderPopover = useCallback(\n    (\n      {\n        content,\n        hidden,\n        inputElement,\n        onMouseEnter,\n        onMouseLeave,\n      }: {\n        content: React.JSX.Element | null\n        hidden: boolean\n        inputElement: HTMLInputElement | null\n        onMouseEnter: () => void\n        onMouseLeave: () => void\n      },\n      contentRef: Ref<HTMLDivElement>,\n    ) => (\n      <StyledPopover\n        placement=\"bottom-start\"\n        fallbackPlacements={FALLBACK_PLACEMENTS}\n        arrow={false}\n        constrainSize\n        onMouseEnter={onMouseEnter}\n        onMouseLeave={onMouseLeave}\n        content={\n          <div ref={contentRef}>\n            {hasResults ? (\n              content\n            ) : (\n              <Box padding={4}>\n                <Flex align=\"center\" height=\"fill\" justify=\"center\">\n                  <StyledText align=\"center\" muted>\n                    <Translate\n                      t={t}\n                      i18nKey=\"inputs.reference.no-results-for-query\"\n                      values={{searchTerm: searchString || ''}}\n                    />\n                  </StyledText>\n                </Flex>\n              </Box>\n            )}\n          </div>\n        }\n        open={!loading && !hidden}\n        ref={portalRef}\n        portal\n        referenceElement={referenceElement || inputElement}\n        matchReferenceWidth\n      />\n    ),\n    [hasResults, t, searchString, loading, portalRef, referenceElement],\n  )\n  return <Autocomplete {...restProps} loading={loading} ref={ref} renderPopover={renderPopover} />\n})\n","import {useContext} from 'react'\nimport {type ReferenceItemRef, ReferenceItemRefContext} from 'sanity/_singletons'\n\n/**\n * @internal\n */\nexport function useReferenceItemRef(): ReferenceItemRef {\n  const ref = useContext(ReferenceItemRefContext)\n  if (!ref) {\n    // The input may not always be wrapped in a reference item.\n    // For example in the case of a singular reference input.\n    // To prevent the function from crashing, default values are returned in such cases.\n    return {menuRef: {current: null}, menuButtonRef: {current: null}, containerRef: {current: null}}\n  }\n  return ref\n}\n","import {Stack, Text, useClickOutsideEvent, useToast} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {type FocusEvent, type KeyboardEvent, useCallback, useMemo, useRef, useState} from 'react'\nimport {useObservableEvent} from 'react-rx'\nimport {concat, type Observable, of} from 'rxjs'\nimport {catchError, filter, map, scan, switchMap, tap} from 'rxjs/operators'\n\nimport {Button} from '../../../../ui-components'\nimport {ReferenceInputPreviewCard} from '../../../components'\nimport {Translate, useTranslation} from '../../../i18n'\nimport {usePerspective} from '../../../perspective/usePerspective'\nimport {getPublishedId, isNonNullable} from '../../../util'\nimport {Alert} from '../../components/Alert'\nimport {useDidUpdate} from '../../hooks/useDidUpdate'\nimport {set, setIfMissing, unset} from '../../patch'\nimport {AutocompleteContainer} from './AutocompleteContainer'\nimport {CreateButton} from './CreateButton'\nimport {OptionPreview} from './OptionPreview'\nimport {ReferenceAutocomplete} from './ReferenceAutocomplete'\nimport {\n  type CreateReferenceOption,\n  type ReferenceInputProps,\n  type ReferenceSearchHit,\n  type ReferenceSearchState,\n} from './types'\nimport {useReferenceInfo} from './useReferenceInfo'\nimport {useReferenceInput} from './useReferenceInput'\nimport {useReferenceItemRef} from './useReferenceItemRef'\n\nconst INITIAL_SEARCH_STATE: ReferenceSearchState = {\n  hits: [],\n  isLoading: false,\n}\n\nconst NO_FILTER = () => true\n\nfunction nonNullable<T>(v: T): v is NonNullable<T> {\n  return v !== null\n}\n\ninterface AutocompleteOption {\n  hit: ReferenceSearchHit\n  value: string\n}\nexport function ReferenceInput(props: ReferenceInputProps) {\n  const {\n    createOptions,\n    onChange,\n    onEditReference,\n    onSearch,\n    schemaType,\n    readOnly,\n    id,\n    onPathFocus,\n    value,\n    version,\n    renderPreview,\n    path,\n    elementProps,\n    focusPath,\n  } = props\n  const {selectedReleaseId} = usePerspective()\n\n  const {getReferenceInfo} = useReferenceInput({\n    path,\n    schemaType,\n    value,\n    version,\n  })\n\n  const [searchState, setSearchState] = useState<ReferenceSearchState>(INITIAL_SEARCH_STATE)\n\n  const handleCreateNew = useCallback(\n    (option: CreateReferenceOption) => {\n      const newDocumentId = uuid()\n\n      // The strengthen-on-publish process is not necessary for documents inside a release, and in\n      // fact must be skipped in order for release preflight checks to function.\n      //\n      // Strengthen-on-publish is still necessary for drafts, and for documents in a bundle\n      // *that isn't a release* (this isn't a scenario Studio supports today, but it may need to in\n      // the future).\n      const shouldStrengthenOnPublish = typeof selectedReleaseId === 'undefined'\n      const strengthenOnPublishPatches = shouldStrengthenOnPublish ? [set(true, ['_weak'])] : []\n\n      // The `_strengthenOnPublish` field is always set, regardless of whether the\n      // strengthen-on-publish process should be used. This is because the field is used to\n      // store details such as the non-existing document's type, which Studio uses to render\n      // reference previews.\n      //\n      // Content Lake will only strengthen the reference if **both** `_strengthenOnPublish` and\n      // `_weak` are truthy.\n      //\n      // Yes, this is confusing.\n      const createInPlaceMetadataPatches = [\n        set({type: option.type, weak: schemaType.weak, template: option.template}, [\n          '_strengthenOnPublish',\n        ]),\n      ]\n\n      const patches = [\n        setIfMissing({}),\n        set(schemaType.name, ['_type']),\n        set(newDocumentId, ['_ref']),\n      ]\n        .concat(strengthenOnPublishPatches, createInPlaceMetadataPatches)\n        .filter(isNonNullable)\n\n      onChange(patches)\n\n      onEditReference({\n        id: newDocumentId,\n        type: option.type,\n        template: option.template,\n        version: selectedReleaseId,\n      })\n      onPathFocus([])\n    },\n    [onChange, onEditReference, onPathFocus, schemaType.name, schemaType.weak, selectedReleaseId],\n  )\n\n  const handleChange = useCallback(\n    (nextId: string) => {\n      if (!nextId) {\n        onChange(unset())\n        onPathFocus([])\n        return\n      }\n\n      const hit = searchState.hits.find((h) => h.id === nextId)\n\n      if (!hit) {\n        throw new Error('Selected an item that wasnt part of the result set')\n      }\n      // if there's no published version of this document, set the reference to weak\n\n      const patches = [\n        setIfMissing({}),\n        set(schemaType.name, ['_type']),\n        set(getPublishedId(nextId), ['_ref']),\n        hit.published && !schemaType.weak ? unset(['_weak']) : set(true, ['_weak']),\n        hit.published\n          ? unset(['_strengthenOnPublish'])\n          : set({type: hit?.type, weak: schemaType.weak}, ['_strengthenOnPublish']),\n      ].filter(isNonNullable)\n\n      onChange(patches)\n      // Move focus away from _ref and one level up\n      onPathFocus([])\n    },\n    [onChange, onPathFocus, schemaType.name, schemaType.weak, searchState.hits],\n  )\n\n  const handleClear = useCallback(() => {\n    onChange(unset())\n  }, [onChange])\n\n  const handleAutocompleteKeyDown = useCallback(\n    (event: KeyboardEvent) => {\n      if (event.key === 'Escape') {\n        onPathFocus([])\n      }\n    },\n    [onPathFocus],\n  )\n\n  const loadableReferenceInfo = useReferenceInfo(value?._ref, getReferenceInfo)\n\n  const [autocompletePopoverReferenceElement, setAutocompletePopoverReferenceElement] =\n    useState<HTMLDivElement | null>(null)\n\n  const {push} = useToast()\n  const {t} = useTranslation()\n\n  const handleQueryChange = useObservableEvent((inputValue$: Observable<string | null>) => {\n    return inputValue$.pipe(\n      filter(nonNullable),\n      switchMap((searchString) =>\n        concat(\n          of({isLoading: true}),\n          onSearch(searchString).pipe(\n            map((hits) => ({hits, searchString, isLoading: false})),\n            catchError((error) => {\n              push({\n                title: t('inputs.reference.error.search-failed-title'),\n                description: error.message,\n                status: 'error',\n                id: `reference-search-fail-${id}`,\n              })\n\n              console.error(error)\n              return of({hits: []})\n            }),\n          ),\n        ),\n      ),\n\n      scan(\n        (prevState, nextState): ReferenceSearchState => ({...prevState, ...nextState}),\n        INITIAL_SEARCH_STATE,\n      ),\n\n      tap(setSearchState),\n    )\n  })\n\n  const handleAutocompleteOpenButtonClick = useCallback(() => {\n    handleQueryChange('')\n  }, [handleQueryChange])\n\n  const handleCreateButtonKeyDown = useCallback(\n    (e: KeyboardEvent) => {\n      if (e.key === 'Escape') {\n        onPathFocus([])\n      }\n    },\n    [onPathFocus],\n  )\n\n  const renderOption = useCallback(\n    (option: AutocompleteOption) => {\n      const documentId = option.hit.draft?._id || option.hit.published?._id || option.value\n\n      return (\n        <ReferenceInputPreviewCard forwardedAs=\"button\" type=\"button\" radius={2} tone=\"inherit\">\n          <OptionPreview\n            getReferenceInfo={getReferenceInfo}\n            id={documentId}\n            renderPreview={renderPreview}\n            type={schemaType}\n          />\n        </ReferenceInputPreviewCard>\n      )\n    },\n    [schemaType, getReferenceInfo, renderPreview],\n  )\n\n  const renderValue = useCallback(() => {\n    return (loadableReferenceInfo.result?.preview?.snapshot?.title ||\n      loadableReferenceInfo.result?.preview?.original?.title ||\n      '') as string\n  }, [\n    loadableReferenceInfo.result?.preview?.original?.title,\n    loadableReferenceInfo.result?.preview?.snapshot?.title,\n  ])\n\n  const handleFocus = useCallback(() => onPathFocus(['_ref']), [onPathFocus])\n  const handleBlur = useCallback(\n    (event: FocusEvent) => {\n      if (!autocompletePopoverReferenceElement?.contains(event.relatedTarget)) {\n        props.elementProps.onBlur(event)\n      }\n    },\n    [autocompletePopoverReferenceElement, props.elementProps],\n  )\n\n  const isWeakRefToNonexistent =\n    loadableReferenceInfo?.result?.availability?.reason === 'NOT_FOUND' &&\n    !value?._strengthenOnPublish &&\n    value?._weak\n\n  useDidUpdate(focusPath?.[0] === '_ref', (hadFocusAtRef, hasFocusAtRef) => {\n    if (!hadFocusAtRef && hasFocusAtRef) {\n      elementProps.ref.current?.focus()\n    }\n  })\n  const hits: AutocompleteOption[] = useMemo(\n    () =>\n      searchState.hits.map((hit) => ({\n        value: hit.id,\n        hit: hit,\n      })),\n    [searchState.hits],\n  )\n\n  const isEditing = focusPath.length === 1 && focusPath[0] === '_ref'\n\n  // --- click outside handling\n  const {menuRef, menuButtonRef, containerRef} = useReferenceItemRef()\n  const clickOutsideBoundaryRef = useRef<HTMLDivElement>(null)\n  const autoCompletePortalRef = useRef<HTMLDivElement>(null)\n  const createButtonMenuPortalRef = useRef<HTMLDivElement>(null)\n  useClickOutsideEvent(\n    // We only clear on clicks outside if the ref does not have a value yet\n    !value?._ref &&\n      (() => {\n        // Handle clicks outside while the input is focused\n        if (isEditing) {\n          handleClear()\n        }\n        // And handle ReferenceItem clicks outside after clicking the context menu:\n        // 1. Click \"+ Add item\".\n        // 2. The empty reference has focus.\n        // 3. Click on the \"••• Show more\" button.\n        // 4. Focus leaves the empty reference autocomplete and moves to the menu.\n        // 5. Clicking outside of the menu should be handled as if `isEditing` were `true`\n        else if (document.activeElement === menuButtonRef.current) {\n          // If the menu button has focus when this event fires then it means the user clicked outside the menu and we should close\n          handleClear()\n        }\n      }),\n    () => [\n      menuRef.current,\n      menuButtonRef.current,\n      containerRef.current,\n      clickOutsideBoundaryRef.current,\n      autoCompletePortalRef.current,\n      createButtonMenuPortalRef.current,\n    ],\n  )\n\n  return (\n    <Stack space={1} data-testid=\"reference-input\" ref={clickOutsideBoundaryRef}>\n      <Stack space={2}>\n        {isWeakRefToNonexistent ? (\n          <Alert\n            data-testid=\"alert-nonexistent-document\"\n            title={t('inputs.reference.error.nonexistent-document-title')}\n            suffix={\n              <Stack padding={2}>\n                <Button\n                  text={t('inputs.reference.error.nonexistent-document.clear-button-label')}\n                  onClick={handleClear}\n                />\n              </Stack>\n            }\n          >\n            <Text size={1}>\n              <Translate\n                i18nKey=\"inputs.reference.error.nonexistent-document-description\"\n                t={t}\n                values={{documentId: value._ref}}\n              />\n            </Text>\n          </Alert>\n        ) : null}\n        <AutocompleteContainer ref={setAutocompletePopoverReferenceElement}>\n          <ReferenceAutocomplete\n            {...elementProps}\n            onFocus={handleFocus}\n            onBlur={handleBlur}\n            data-testid=\"autocomplete\"\n            loading={searchState.isLoading}\n            referenceElement={autocompletePopoverReferenceElement}\n            options={hits}\n            radius={2}\n            placeholder={t('inputs.reference.search-placeholder')}\n            onKeyDown={handleAutocompleteKeyDown}\n            readOnly={loadableReferenceInfo.isLoading || readOnly}\n            onQueryChange={handleQueryChange}\n            searchString={searchState.searchString}\n            onChange={handleChange}\n            filterOption={NO_FILTER}\n            renderOption={renderOption as any}\n            renderValue={renderValue}\n            openButton={{onClick: handleAutocompleteOpenButtonClick}}\n            portalRef={autoCompletePortalRef}\n            value={value?._ref}\n          />\n\n          {createOptions.length > 0 && (\n            <CreateButton\n              id={`${id}-selectTypeMenuButton`}\n              readOnly={readOnly}\n              createOptions={createOptions}\n              onCreate={handleCreateNew}\n              onKeyDown={handleCreateButtonKeyDown}\n              menuRef={createButtonMenuPortalRef}\n            />\n          )}\n        </AutocompleteContainer>\n      </Stack>\n    </Stack>\n  )\n}\n","import {\n  type Path,\n  type ReferenceFilterSearchOptions,\n  type ReferenceOptions,\n  type SanityDocument,\n} from '@sanity/types'\nimport {get} from '@sanity/util/paths'\n\nimport {type Source} from '../../../../config'\n\nexport async function resolveUserDefinedFilter(\n  options: ReferenceOptions | undefined,\n  document: SanityDocument,\n  valuePath: Path,\n  getClient: Source['getClient'],\n): Promise<ReferenceFilterSearchOptions> {\n  if (!options) {\n    return {}\n  }\n\n  if (typeof options.filter === 'function') {\n    const parentPath = valuePath.slice(0, -1)\n    const parent = get(document, parentPath) as Record<string, unknown>\n    const resolvedFilter = await options.filter({document, parentPath, parent, getClient})\n    return resolvedFilter\n  }\n\n  return {\n    filter: options.filter,\n    params: 'filterParams' in options ? options.filterParams : undefined,\n  }\n}\n","import {type Reference, type ReferenceSchemaType} from '@sanity/types'\nimport * as PathUtils from '@sanity/util/paths'\nimport {\n  type ComponentProps,\n  type ForwardedRef,\n  forwardRef,\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n} from 'react'\nimport {from, throwError} from 'rxjs'\nimport {catchError, mergeMap} from 'rxjs/operators'\n\nimport {type FIXME} from '../../../../FIXME'\nimport {useSchema} from '../../../../hooks'\nimport {usePerspective} from '../../../../perspective/usePerspective'\nimport {useDocumentPreviewStore} from '../../../../store'\nimport {useSource} from '../../../../studio'\nimport {useSearchMaxFieldDepth} from '../../../../studio/components/navbar/search/hooks/useSearchMaxFieldDepth'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../../../studioClient'\nimport {isNonNullable} from '../../../../util'\nimport {useFormValue} from '../../../contexts/FormValue'\nimport {ReferenceInput} from '../../../inputs/ReferenceInput/ReferenceInput'\nimport {\n  type CreateReferenceOption,\n  type EditReferenceEvent,\n} from '../../../inputs/ReferenceInput/types'\nimport {type ObjectInputProps} from '../../../types'\nimport {useReferenceInputOptions} from '../../contexts'\nimport * as adapter from '../client-adapters/reference'\nimport {resolveUserDefinedFilter} from './resolveUserDefinedFilter'\n\n/**\n *\n * @hidden\n * @beta\n */\nexport type StudioReferenceInputProps = ObjectInputProps<Reference, ReferenceSchemaType>\n\nfunction useValueRef<T>(value: T): {current: T} {\n  const ref = useRef(value)\n  useEffect(() => {\n    ref.current = value\n  }, [value])\n  return ref\n}\n\ntype SearchError = {\n  message: string\n  details?: {\n    type: string\n    description: string\n  }\n}\n\n/**\n *\n * @hidden\n * @beta\n */\nexport function StudioReferenceInput(props: StudioReferenceInputProps) {\n  const source = useSource()\n  const searchClient = source.getClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n  const {perspectiveStack} = usePerspective()\n  const schema = useSchema()\n  const maxFieldDepth = useSearchMaxFieldDepth()\n  const documentPreviewStore = useDocumentPreviewStore()\n  const {selectedReleaseId} = usePerspective()\n  const {path, schemaType} = props\n  const {\n    EditReferenceLinkComponent,\n    onEditReference,\n    activePath,\n    initialValueTemplateItems,\n    ...inheritedOptions\n  } = useReferenceInputOptions()\n  const {strategy: searchStrategy} = source.search\n\n  const documentValue = useFormValue([]) as FIXME\n  const documentRef = useValueRef(documentValue)\n  const documentTypeName = documentRef.current?._type\n  const refType = schema.get(documentTypeName)\n\n  const isDocumentLiveEdit = useMemo(() => refType?.liveEdit, [refType])\n\n  const disableNew = inheritedOptions.disableNew ?? schemaType.options?.disableNew === true\n  const getClient = source.getClient\n\n  const handleSearch = useCallback(\n    (searchString: string) =>\n      from(resolveUserDefinedFilter(schemaType.options, documentRef.current, path, getClient)).pipe(\n        mergeMap(({filter, params}) =>\n          adapter.referenceSearch(searchClient, searchString, schemaType, {\n            ...schemaType.options,\n            filter,\n            params,\n            tag: 'search.reference',\n            maxFieldDepth,\n            strategy: searchStrategy,\n            perspective: perspectiveStack,\n          }),\n        ),\n\n        catchError((err: SearchError) => {\n          const isQueryError = err.details && err.details.type === 'queryParseError'\n          if (schemaType.options?.filter && isQueryError) {\n            err.message = `Invalid reference filter, please check the custom \"filter\" option`\n          }\n          return throwError(err)\n        }),\n      ),\n\n    [\n      schemaType,\n      documentRef,\n      path,\n      getClient,\n      searchClient,\n      maxFieldDepth,\n      searchStrategy,\n      perspectiveStack,\n    ],\n  )\n\n  const template = props.value?._strengthenOnPublish?.template\n  const EditReferenceLink = useMemo(\n    () =>\n      forwardRef(function EditReferenceLink_(\n        _props: ComponentProps<NonNullable<typeof EditReferenceLinkComponent>>,\n        forwardedRef: ForwardedRef<'a'>,\n      ) {\n        return EditReferenceLinkComponent ? (\n          <EditReferenceLinkComponent\n            {..._props}\n            ref={forwardedRef}\n            parentRefPath={path}\n            template={template}\n          />\n        ) : null\n      }),\n    [EditReferenceLinkComponent, path, template],\n  )\n\n  const handleEditReference = useCallback(\n    (event: EditReferenceEvent) => {\n      onEditReference?.({\n        parentRefPath: path,\n        id: event.id,\n        type: event.type,\n        template: event.template,\n        version: event.version,\n      })\n    },\n    [onEditReference, path],\n  )\n\n  const selectedState = PathUtils.startsWith(path, activePath?.path || [])\n    ? activePath?.state\n    : 'none'\n\n  const createOptions = useMemo(() => {\n    if (disableNew) {\n      return []\n    }\n    return (\n      (initialValueTemplateItems || [])\n        // eslint-disable-next-line max-nested-callbacks\n        .filter((i) => {\n          return schemaType.to.some((_refType) => {\n            return _refType.name === i.template?.schemaType\n          })\n        })\n        .map((item): CreateReferenceOption | undefined =>\n          item.template?.schemaType\n            ? {\n                id: item.id,\n                title:\n                  item.title || `${item.template.schemaType} from template ${item.template?.id}`,\n                i18n: item.i18n,\n                type: item.template.schemaType,\n                icon: item.icon,\n                template: {\n                  id: item.template?.id,\n                  params: item.parameters,\n                },\n\n                permission: {granted: item.granted, reason: item.reason},\n              }\n            : undefined,\n        )\n        .filter(isNonNullable)\n    )\n  }, [disableNew, initialValueTemplateItems, schemaType.to])\n\n  const getReferenceInfo = useCallback(\n    (id: string, _type: ReferenceSchemaType) =>\n      adapter.getReferenceInfo(documentPreviewStore, id, _type),\n    [documentPreviewStore],\n  )\n\n  return (\n    <ReferenceInput\n      {...props}\n      onSearch={handleSearch}\n      liveEdit={isDocumentLiveEdit}\n      getReferenceInfo={getReferenceInfo}\n      selectedState={selectedState}\n      editReferenceLinkComponent={EditReferenceLink}\n      createOptions={createOptions}\n      onEditReference={handleEditReference}\n      version={selectedReleaseId}\n    />\n  )\n}\n","import {\n  isArrayOfBlocksSchemaType,\n  isArrayOfObjectsSchemaType,\n  isArrayOfPrimitivesSchemaType,\n  isBooleanSchemaType,\n  isNumberSchemaType,\n  isObjectSchemaType,\n  isStringSchemaType,\n} from '@sanity/types'\n\nimport {\n  type ArrayOfObjectsInputProps,\n  type ArrayOfPrimitivesInputProps,\n  type BooleanInputProps,\n  type InputProps,\n  type NumberInputProps,\n  type ObjectInputProps,\n  type StringInputProps,\n} from './inputProps'\nimport {type ItemProps, type ObjectItemProps} from './itemProps'\n\n/**\n * @hidden\n * @beta */\nexport function isObjectItemProps(\n  item: ItemProps | Omit<ItemProps, 'renderDefault'>,\n): item is ObjectItemProps {\n  return isObjectSchemaType(item.schemaType)\n}\n\n/**\n * @hidden\n * @beta */\nexport function isObjectInputProps(\n  inputProps: InputProps | Omit<InputProps, 'renderDefault'>,\n): inputProps is ObjectInputProps {\n  return isObjectSchemaType(inputProps.schemaType)\n}\n\n/**\n * @hidden\n * @beta */\nexport function isStringInputProps(\n  inputProps: InputProps | Omit<InputProps, 'renderDefault'>,\n): inputProps is StringInputProps {\n  return isStringSchemaType(inputProps.schemaType)\n}\n\n/**\n * @hidden\n * @beta */\nexport function isNumberInputProps(\n  inputProps: InputProps | Omit<InputProps, 'renderDefault'>,\n): inputProps is NumberInputProps {\n  return isNumberSchemaType(inputProps.schemaType)\n}\n\n/**\n * @hidden\n * @beta */\nexport function isBooleanInputProps(\n  inputProps: InputProps | Omit<InputProps, 'renderDefault'>,\n): inputProps is BooleanInputProps {\n  return isBooleanSchemaType(inputProps.schemaType)\n}\n\n/**\n * @hidden\n * @beta */\nexport function isArrayOfObjectsInputProps(\n  inputProps: InputProps | Omit<InputProps, 'renderDefault'>,\n): inputProps is ArrayOfObjectsInputProps {\n  return isArrayOfObjectsSchemaType(inputProps.schemaType)\n}\n\n/**\n * @hidden\n * @beta */\nexport function isArrayOfBlocksInputProps(\n  inputProps: InputProps | Omit<InputProps, 'renderDefault'>,\n): inputProps is ArrayOfObjectsInputProps {\n  return isArrayOfBlocksSchemaType(inputProps.schemaType)\n}\n\n/**\n * @hidden\n * @beta */\nexport function isArrayOfPrimitivesInputProps(\n  inputProps: InputProps | Omit<InputProps, 'renderDefault'>,\n): inputProps is ArrayOfPrimitivesInputProps {\n  return isArrayOfPrimitivesSchemaType(inputProps.schemaType)\n}\n","import {type ClientRect, type Modifier} from '@dnd-kit/core'\nimport {type Transform} from '@dnd-kit/utilities'\n\nfunction restrictToBoundingRect(\n  transform: Transform,\n  rect: ClientRect,\n  boundingRect: ClientRect,\n  margins: Margins,\n): Transform {\n  const value = {\n    ...transform,\n  }\n\n  const marginY = margins.y || 0\n  const marginX = margins.x || 0\n\n  if (rect.top + value.y <= boundingRect.top + marginY) {\n    value.y = boundingRect.top - rect.top + marginY\n  } else if (rect.bottom + value.y >= boundingRect.top + boundingRect.height - marginY) {\n    value.y = boundingRect.top + boundingRect.height - rect.bottom - marginY\n  }\n\n  if (rect.left + value.x <= boundingRect.left - marginX) {\n    value.x = boundingRect.left - rect.left + marginX\n  } else if (rect.right + value.x >= boundingRect.left + boundingRect.width + marginX) {\n    value.x = boundingRect.left + boundingRect.width - rect.right + marginX\n  }\n\n  return value\n}\n\ninterface Margins {\n  x?: number\n  y?: number\n}\n\nexport const restrictToParentElementWithMargins: (margins: Margins) => Modifier =\n  (margins: Margins) =>\n  ({containerNodeRect, draggingNodeRect, transform}) => {\n    if (!draggingNodeRect || !containerNodeRect) {\n      return transform\n    }\n\n    return restrictToBoundingRect(transform, draggingNodeRect, containerNodeRect, margins)\n  }\n","import {\n  type AutoScrollOptions,\n  closestCenter,\n  DndContext,\n  type DragEndEvent,\n  type DragStartEvent,\n  KeyboardSensor,\n  PointerSensor,\n  type SensorOptions,\n  useSensor,\n  useSensors,\n} from '@dnd-kit/core'\nimport {restrictToHorizontalAxis, restrictToVerticalAxis} from '@dnd-kit/modifiers'\nimport {\n  horizontalListSortingStrategy,\n  SortableContext,\n  sortableKeyboardCoordinates,\n  useSortable,\n  verticalListSortingStrategy,\n} from '@dnd-kit/sortable'\nimport {CSS} from '@dnd-kit/utilities'\nimport {Box, type Card, Grid} from '@sanity/ui'\nimport {\n  type ComponentProps,\n  type ForwardedRef,\n  forwardRef,\n  memo,\n  type ReactNode,\n  useCallback,\n  useMemo,\n} from 'react'\nimport {SortableItemIdContext} from 'sanity/_singletons'\nimport {css, styled} from 'styled-components'\n\nimport {restrictToParentElementWithMargins} from './dndkit-modifier/restrictToParentElementWithMargins'\n\nexport const MOVING_ITEM_CLASS_NAME = 'moving'\n\nconst ListItem = styled(Box)<ComponentProps<typeof Box> & {$moving?: boolean}>`\n  ${(props) =>\n    props.$moving &&\n    css`\n      z-index: 10000;\n      /* prevents hover-effects etc on the dragged element  */\n      pointer-events: none;\n    `}\n`\n\nconst AUTO_SCROLL_OPTIONS: AutoScrollOptions = {\n  threshold: {\n    x: 0,\n    y: 0.02,\n  },\n}\nconst SENSOR_OPTIONS: SensorOptions = {\n  coordinateGetter: sortableKeyboardCoordinates,\n}\n\nconst TRANSITION = {\n  duration: 200,\n  easing: 'ease',\n}\n\ntype Axis = 'x' | 'y'\n\nfunction restrictToAxis(axis: Axis) {\n  return axis === 'x' ? restrictToHorizontalAxis : restrictToVerticalAxis\n}\nfunction sortingStrategy(axis: Axis) {\n  return axis === 'x' ? horizontalListSortingStrategy : verticalListSortingStrategy\n}\n\nconst SortableList = memo(function SortableList(props: ListProps) {\n  const {items, axis, onItemMove, onItemMoveStart, onItemMoveEnd, children, ...rest} = props\n\n  const sensors = useSensors(useSensor(PointerSensor), useSensor(KeyboardSensor, SENSOR_OPTIONS))\n\n  const handleDragEnd = useCallback(\n    (event: DragEndEvent) => {\n      const {active, over} = event\n\n      if (active.id !== over?.id) {\n        onItemMove?.({\n          fromIndex: active.data.current?.sortable?.index,\n          toIndex: over?.data.current?.sortable?.index,\n        })\n      }\n\n      onItemMoveEnd?.()\n    },\n    [onItemMove, onItemMoveEnd],\n  )\n  const modifiers = useMemo(\n    () => [restrictToParentElementWithMargins({y: 4}), ...(axis ? [restrictToAxis(axis)] : [])],\n    [axis],\n  )\n\n  return (\n    <DndContext\n      sensors={sensors}\n      autoScroll={AUTO_SCROLL_OPTIONS}\n      modifiers={modifiers}\n      collisionDetection={closestCenter}\n      onDragEnd={handleDragEnd}\n      onDragStart={onItemMoveStart}\n    >\n      <SortableContext items={items} strategy={axis ? sortingStrategy(axis) : undefined}>\n        <Grid {...rest}>{children}</Grid>\n      </SortableContext>\n    </DndContext>\n  )\n})\n\nconst SortableListItem = forwardRef<HTMLDivElement, ItemProps>(\n  function SortableListItem(props, ref) {\n    const {id, children, disableTransition} = props\n    const {setNodeRef, transform, transition, active} = useSortable({\n      id,\n      transition: disableTransition ? null : TRANSITION,\n    })\n\n    const isActive = id === active?.id\n\n    const style = useMemo(\n      () =>\n        ({\n          transform: CSS.Translate.toString(transform),\n          transition,\n          pointerEvents: active ? 'none' : undefined,\n        }) as const,\n      [transform, transition, active],\n    )\n\n    // This sets the ref on the component for both sorting and for virtualizer\n    const setRef = useCallback(\n      (node: HTMLDivElement | null) => {\n        setNodeRef(node)\n        if (typeof ref === 'function') {\n          ref(node)\n        } else if (ref) {\n          ref.current = node\n        }\n      },\n      [ref, setNodeRef],\n    )\n\n    return (\n      <ListItem\n        ref={setRef}\n        style={style}\n        $moving={isActive}\n        className={isActive ? MOVING_ITEM_CLASS_NAME : ''}\n        data-index={props['data-index']}\n      >\n        {children}\n      </ListItem>\n    )\n  },\n)\n\ninterface ListProps extends ComponentProps<typeof Grid> {\n  sortable?: boolean\n  axis?: Axis\n  items: string[]\n  onItemMove?: (event: {fromIndex: number; toIndex: number}) => void\n  onItemMoveStart?: (event: DragStartEvent) => void\n  onItemMoveEnd?: () => void\n  children?: ReactNode\n}\n\nexport function List(props: ListProps) {\n  const {onItemMove, onItemMoveEnd, onItemMoveStart, sortable, ...rest} = props\n\n  // Note: this is here to make SortableList API compatible with onItemMove\n  const handleSortEnd = useCallback(\n    (event: {fromIndex: number; toIndex: number}) => {\n      onItemMove?.(event)\n    },\n    [onItemMove],\n  )\n\n  return sortable ? (\n    <SortableList\n      onItemMove={handleSortEnd}\n      onItemMoveStart={onItemMoveStart}\n      onItemMoveEnd={onItemMoveEnd}\n      {...rest}\n    />\n  ) : (\n    <Grid {...rest} />\n  )\n}\n\ninterface ItemProps {\n  'id': string\n\n  // false positive:\n  // eslint-disable-next-line react/no-unused-prop-types\n  'sortable'?: boolean\n  'disableTransition'?: boolean\n  'children'?: ReactNode\n  'data-index'?: number\n}\n\nexport const Item = forwardRef(function Item(\n  props: ItemProps & ComponentProps<typeof Card>,\n  ref: ForwardedRef<HTMLDivElement>,\n) {\n  const {sortable, ...rest} = props\n  return (\n    <SortableItemIdContext.Provider value={props.id}>\n      {sortable ? <SortableListItem ref={ref} {...rest} /> : <ListItem ref={ref} {...rest} />}\n    </SortableItemIdContext.Provider>\n  )\n})\n","// todo: get these utils from @sanity/ui instead\nexport function focusRingBorderStyle(border: {color: string; width: number}): string {\n  return `inset 0 0 0 ${border.width}px ${border.color}`\n}\n\nexport function focusRingStyle(opts: {\n  base?: {bg: string}\n  border?: {color: string; width: number}\n  focusRing: {offset: number; width: number}\n}): string {\n  const {base, border, focusRing} = opts\n  const focusRingOutsetWidth = focusRing.offset + focusRing.width\n  const focusRingInsetWidth = 0 - focusRing.offset\n  const bgColor = base ? base.bg : 'var(--card-bg-color)'\n\n  return [\n    focusRingInsetWidth > 0 && `inset 0 0 0 ${focusRingInsetWidth}px var(--card-focus-ring-color)`,\n    border && focusRingBorderStyle(border),\n    focusRingInsetWidth < 0 && `0 0 0 ${0 - focusRingInsetWidth}px ${bgColor}`,\n    focusRingOutsetWidth > 0 && `0 0 0 ${focusRingOutsetWidth}px var(--card-focus-ring-color)`,\n  ]\n    .filter(Boolean)\n    .join(',')\n}\n","/* eslint-disable camelcase */\n\nimport {rem, type Theme} from '@sanity/ui'\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {type ComponentType} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {focusRingBorderStyle, focusRingStyle} from './helpers'\n\nexport function withFocusRing<Props>(component: ComponentType<Props>) {\n  return styled(component)<Props & {$border?: boolean; $radius?: number}>(\n    (props: {theme: Theme; $border?: boolean; $radius?: number}) => {\n      const {$border, $radius} = props\n      const {card, color, radius} = getTheme_v2(props.theme)\n\n      const border = {width: $border ? 1 : 0, color: 'var(--card-border-color)'}\n\n      return css`\n        --card-focus-box-shadow: ${focusRingBorderStyle(border)};\n\n        border-radius: ${rem(radius[$radius ?? 1])};\n        outline: none;\n        box-shadow: var(--card-focus-box-shadow);\n\n        &:focus {\n          --card-focus-box-shadow: ${focusRingStyle({\n            border,\n            base: color,\n            focusRing: {\n              ...card.focusRing,\n              // An offset of 0 is needed to avoid the focus ring overlap the border of the inner items, the theme has an offset of -1\n              // Detected in empty array items.\n              offset: 0,\n            },\n          })};\n        }\n      `\n    },\n  )\n}\n","/**\n * Utilities for extracting files from dataTransfer in a predictable cross-browser fashion.\n * Also recursively extracts files from a directory\n * Inspired by https://github.com/component/normalized-upload\n */\n\nimport {flatten} from 'lodash'\n\nimport {type FIXME} from '../../../../../FIXME'\n\nexport function extractPastedFiles(dataTransfer: DataTransfer): Promise<File[]> {\n  if (dataTransfer.files && dataTransfer.files.length > 0) {\n    return Promise.resolve(Array.from(dataTransfer.files || []))\n  }\n  return normalizeItems(Array.from(dataTransfer.items || [])).then(flatten)\n}\n\nexport function extractDroppedFiles(dataTransfer: DataTransfer) {\n  const files: File[] = Array.from(dataTransfer.files || [])\n  const items: DataTransferItem[] = Array.from(dataTransfer.items || [])\n  if (files && files.length > 0) {\n    return Promise.resolve(files)\n  }\n  return normalizeItems(items).then(flatten)\n}\n\nfunction toArray<T>(v: T | null): T[] {\n  return v === null ? [] : [v]\n}\n\nfunction normalizeItems(items: DataTransferItem[]) {\n  return Promise.all(\n    items.map((item) => {\n      // directory\n      if (item.kind === 'file' && item.webkitGetAsEntry) {\n        let entry\n        // Edge throws\n        try {\n          entry = item.webkitGetAsEntry()\n        } catch (err) {\n          return toArray(item.getAsFile())\n        }\n        if (!entry) {\n          return []\n        }\n        return entry.isDirectory ? walk(entry as FIXME) : toArray(item.getAsFile())\n      }\n\n      if (item.kind === 'file') {\n        const file = item.getAsFile()\n        return Promise.resolve(file ? [file] : [])\n      }\n\n      if (item.kind === 'string') {\n        // We previously had support for reading datatransfer of strings here but decided to remove it since we don't handle it in higher up in the stack yet.\n        // If one day we want to support data transfer from a string value (e.g. copy+paste from a field to another), an earlier\n        // version of this file includes an implementation that uses DataTransferItem.getAsString to read the string value into a File\n        console.warn('DataTransfer with kind=\"string\" is currently not supported')\n        return Promise.resolve([])\n      }\n\n      console.warn('Unknown DataTransferItem.kind: %s', item.kind)\n      return Promise.resolve([])\n    }),\n  )\n}\n\n// Warning: experimental API: https://wicg.github.io/entries-api\ntype WebKitFileEntry = {\n  isFile: true\n  isDirectory: false\n  name: string\n  fullPath: string\n  file: (fileCallback: (file: File) => void, errorCallback?: (error: Error) => void) => void\n}\n\ntype WebKitDirectoryEntry = {\n  isFile: false\n  isDirectory: true\n  name: string\n  fullPath: string\n  createReader: () => DirectoryReader\n}\n\ntype Entry = WebKitFileEntry | WebKitDirectoryEntry\n\ntype DirectoryReader = {\n  readEntries: (\n    successCallback: (entries: Entry[]) => void,\n    errorCallback?: (error: Error) => void,\n  ) => void\n}\n\nfunction walk(entry: Entry): Promise<File[]> {\n  if (entry.isFile) {\n    return new Promise<File>((resolve, reject) => entry.file(resolve, reject)).then(\n      (file: File) => [file],\n    )\n  }\n\n  if (entry.isDirectory) {\n    const dir = entry.createReader()\n    return new Promise<Entry[]>((resolve, reject) => dir.readEntries(resolve, reject))\n      .then((entries) => entries.filter((entr) => !entr.name.startsWith('.')))\n      .then((entries) => Promise.all(entries.map(walk)).then(flatten))\n  }\n  return Promise.resolve([])\n}\n\nexport function isPortableTextItem(item: {type: string; kind: string}) {\n  return item.type === 'application/portable-text' || item.type === 'application/x-portable-text'\n}\n","export function imageUrlToBlob(\n  imageUrl: string,\n  format = 'image/jpeg',\n  quality = 1,\n): Promise<Blob | null> {\n  if (imageUrl.match(/^webkit-fake-url:\\/\\//)) {\n    return Promise.reject(new Error('Cannot read image contents from webkit fake url'))\n  }\n  return new Promise((resolve, reject) => {\n    const loader = new Image()\n    loader.crossOrigin = 'anonymous'\n    loader.referrerPolicy = 'strict-origin-when-cross-origin'\n    loader.onload = () => {\n      const canvas = document.createElement('canvas')\n      canvas.width = loader.width\n      canvas.height = loader.height\n      const ctx = canvas.getContext('2d')\n      ctx?.drawImage(loader, 0, 0, canvas.width, canvas.height)\n      try {\n        canvas.toBlob(resolve, format, quality)\n      } catch (error) {\n        reject(error)\n      }\n    }\n    loader.src = imageUrl\n  })\n}\n","import {\n  type ClipboardEvent,\n  type ComponentType,\n  type DragEvent,\n  type ForwardedRef,\n  forwardRef,\n  type ForwardRefExoticComponent,\n  type KeyboardEvent,\n  type PropsWithoutRef,\n  type RefAttributes,\n  useCallback,\n  useEffect,\n  useImperativeHandle,\n  useRef,\n  useState,\n} from 'react'\n\nimport {extractDroppedFiles, extractPastedFiles, isPortableTextItem} from './utils/extractFiles'\nimport {imageUrlToBlob} from './utils/imageUrlToBlob'\n\nexport type FileInfo = {\n  kind: DataTransferItem['kind'] // 'file' or 'string'\n  type: DataTransferItem['type'] // mime type of file or string\n}\n\ntype CamelToKebab<S extends string> = S extends `${infer P1}${infer P2}`\n  ? P2 extends Uncapitalize<P2>\n    ? `${Lowercase<P1>}${CamelToKebab<P2>}`\n    : `${Lowercase<P1>}-${CamelToKebab<Uncapitalize<P2>>}`\n  : S\n\ntype DataAttribute<S extends string> = `data-${CamelToKebab<S>}`\n\nconst fileTargetAttributeName = 'isFileTarget'\nconst fileTargetDataAttribute: Record<DataAttribute<typeof fileTargetAttributeName>, 'true'> = {\n  'data-is-file-target': 'true',\n}\n\n/**\n * @internal\n */\nexport const isFileTargetElement = (el: HTMLElement): boolean =>\n  el?.dataset?.[fileTargetAttributeName] === 'true'\n\ntype Props = {\n  // Triggered when the target component receives one or more files, either originating from a drop event or a paste event\n  onFiles?: (files: File[]) => void\n\n  // Triggered by the user dragging files over the target component\n  // Note: We can potentially also support reading from clipboard events here: https://developer.mozilla.org/en-US/docs/Web/API/Clipboard\n  onFilesOver?: (files: FileInfo[]) => void\n\n  // Triggered by the user dragging files out of the target component\n  onFilesOut?: () => void\n\n  disabled?: boolean\n}\n\n// These are managed and can't be passed to the composed component\ntype ManagedProps =\n  | 'onDrop'\n  | 'onDragOver'\n  | 'onPaste'\n  | 'onDragEnter'\n  | 'onDragLeave'\n  | 'onKeyDown'\n\nconst PASTE_INPUT_STYLE = {opacity: 0, position: 'absolute'} as const\n\n/**\n * Higher order component that creates a file target from a given component.\n * Returns a component that acts both as a drop target and a paste target, emitting a list of Files upon drop or paste\n */\nexport function fileTarget<ComponentProps>(\n  Component: ComponentType<ComponentProps>,\n): ForwardRefExoticComponent<\n  PropsWithoutRef<Omit<ComponentProps, ManagedProps> & Props> & RefAttributes<HTMLElement>\n> {\n  // @ts-expect-error TODO fix PropsWithoutRef related union typings\n  return forwardRef(function FileTarget(\n    props: Omit<ComponentProps, ManagedProps> & Props,\n    forwardedRef: ForwardedRef<HTMLElement>,\n  ) {\n    const {onFiles, onFilesOver, onFilesOut, disabled, ...rest} = props\n    const [showPasteInput, setShowPasteInput] = useState(false)\n\n    const pasteInput = useRef<HTMLDivElement | null>(null)\n    const ref = useRef<HTMLElement | null>(null)\n\n    useImperativeHandle<HTMLElement | null, HTMLElement | null>(forwardedRef, () => ref.current)\n\n    const enteredElements = useRef<Element[]>([])\n\n    const emitFiles = useCallback(\n      (files: File[]) => {\n        onFiles?.(files)\n      },\n      [onFiles],\n    )\n\n    const handleKeyDown = useCallback((event: KeyboardEvent) => {\n      if (event.target === ref.current && (event.ctrlKey || event.metaKey) && event.key === 'v') {\n        setShowPasteInput(true)\n      }\n    }, [])\n    const handlePaste = useCallback(\n      (event: ClipboardEvent) => {\n        extractPastedFiles(event.clipboardData)\n          .then((files) => {\n            if (!pasteInput.current) {\n              return []\n            }\n            return files.length > 0\n              ? files\n              : // Invoke Safari hack if we didn't get any files\n                convertImagesToFilesAndClearContentEditable(pasteInput.current, 'image/jpeg')\n          })\n          .then((files) => {\n            emitFiles(files)\n            setShowPasteInput(false)\n            ref.current?.focus()\n          })\n      },\n      [emitFiles],\n    )\n    const handleDrop = useCallback(\n      (event: DragEvent) => {\n        enteredElements.current = []\n\n        const fileTypes = Array.from(event.dataTransfer.items).map((item) => ({\n          type: item.type,\n          kind: item.kind,\n        }))\n\n        // Skip items that is PTE blocks\n        const isPortableTextBlock = fileTypes.some((item) => isPortableTextItem(item))\n\n        if (isPortableTextBlock) {\n          return\n        }\n\n        event.preventDefault()\n        event.stopPropagation()\n        const dataTransfer = event.nativeEvent.dataTransfer\n        if (onFiles && dataTransfer) {\n          extractDroppedFiles(dataTransfer).then((files) => {\n            if (files) {\n              emitFiles(files)\n            }\n          })\n        }\n        onFilesOut?.()\n      },\n      [emitFiles, onFiles, onFilesOut],\n    )\n\n    const handleDragOver = useCallback(\n      (event: DragEvent) => {\n        if (onFiles) {\n          const fileTypes = Array.from(event.dataTransfer.items).map((item) => ({\n            type: item.type,\n            kind: item.kind,\n          }))\n\n          // Skip items that is PTE blocks\n          const isPortableTextBlock = fileTypes.some((item) => isPortableTextItem(item))\n\n          if (isPortableTextBlock) {\n            return\n          }\n\n          event.preventDefault()\n          event.stopPropagation()\n        }\n      },\n      [onFiles],\n    )\n\n    const handleDragEnter = useCallback(\n      (event: DragEvent) => {\n        const fileTypes = Array.from(event.dataTransfer.items).map((item) => ({\n          type: item.type,\n          kind: item.kind,\n        }))\n\n        // Skip items that is PTE blocks\n        const isPortableTextBlock = fileTypes.some((item) => isPortableTextItem(item))\n\n        if (isPortableTextBlock) {\n          return\n        }\n        event.stopPropagation()\n\n        if (onFilesOver && ref.current === event.currentTarget) {\n          /* this is a (hackish) work around to have the drag and drop work when the file is hovered back and forth over it\n          as part of the refactor and adding more components to the \"hover\" state, it didn't recognise that it just kept adding the same\n          element over and over, so when it tried to remove them on the handleDragLeave, it only removed the last instance.\n        */\n          enteredElements.current = [...new Set(enteredElements.current), event.currentTarget]\n\n          onFilesOver(fileTypes)\n        }\n      },\n      [onFilesOver],\n    )\n\n    const handleDragLeave = useCallback(\n      (event: DragEvent) => {\n        const fileTypes = Array.from(event.dataTransfer.items).map((item) => ({\n          type: item.type,\n          kind: item.kind,\n        }))\n\n        // Skip items that is PTE blocks\n        const isPortableTextBlock = fileTypes.some((item) => isPortableTextItem(item))\n\n        if (isPortableTextBlock) {\n          return\n        }\n\n        event.stopPropagation()\n        const idx = enteredElements.current.indexOf(event.currentTarget)\n        if (idx > -1) {\n          enteredElements.current.splice(idx, 1)\n        }\n        if (enteredElements.current.length === 0) {\n          onFilesOut?.()\n        }\n      },\n      [onFilesOut],\n    )\n\n    const prevShowPasteInput = useRef(false)\n    useEffect(() => {\n      if (!prevShowPasteInput.current && showPasteInput && pasteInput.current) {\n        pasteInput.current.focus()\n        select(pasteInput.current) // Needed by Edge\n      } else if (prevShowPasteInput.current && !showPasteInput) {\n        pasteInput.current?.focus()\n      }\n      prevShowPasteInput.current = showPasteInput\n    }, [showPasteInput])\n\n    return (\n      <>\n        <Component\n          {...(rest as ComponentProps)}\n          ref={ref}\n          onKeyDown={disabled ? undefined : handleKeyDown}\n          onDragOver={disabled ? undefined : handleDragOver}\n          onDragEnter={disabled ? undefined : handleDragEnter}\n          onDragLeave={disabled ? undefined : handleDragLeave}\n          onDrop={disabled ? undefined : handleDrop}\n          data-test-id=\"file-target\"\n          {...fileTargetDataAttribute}\n        />\n        {!disabled && showPasteInput && (\n          <div contentEditable onPaste={handlePaste} ref={pasteInput} style={PASTE_INPUT_STYLE} />\n        )}\n      </>\n    )\n  })\n}\n\n// this is a hack for Safari that reads pasted image(s) from an ContentEditable div instead of the onpaste event\nfunction convertImagesToFilesAndClearContentEditable(\n  element: HTMLElement,\n  targetFormat = 'image/jpeg',\n): Promise<File[]> {\n  if (!element.isContentEditable) {\n    return Promise.reject(\n      new Error(\n        `Expected element to be contentEditable=\"true\". Instead found a non contenteditable ${element.tagName}`,\n      ),\n    )\n  }\n  return new Promise((resolve) => setTimeout(resolve, 10)) // add a delay so the paste event can finish\n    .then(() => Array.from(element.querySelectorAll('img')))\n    .then((imageElements) => {\n      element.innerHTML = '' // clear\n      return imageElements\n    })\n    .then((images) => Promise.all(images.map((img) => imageUrlToBlob(img.src))))\n    .then((imageBlobs) =>\n      imageBlobs.map((blob) => new File([blob!], 'pasted-image.jpg', {type: targetFormat})),\n    )\n}\n\n// needed by Edge\nfunction select(el: Element) {\n  const range = document.createRange()\n  range.selectNodeContents(el)\n  const sel = window.getSelection()\n  sel?.removeAllRanges()\n  sel?.addRange(range)\n}\n","import {AccessDeniedIcon, UploadIcon} from '@sanity/icons'\nimport {type SchemaType} from '@sanity/types'\nimport {Box, Inline, Text} from '@sanity/ui'\n\nimport {useTranslation} from '../../../../i18n'\nimport {type FileLike, type UploaderResolver} from '../../../studio/uploads/types'\n\ninterface Props {\n  hoveringFiles: FileLike[]\n  types: SchemaType[]\n  resolveUploader: UploaderResolver\n}\n\nexport function DropMessage(props: Props) {\n  const {hoveringFiles, types, resolveUploader} = props\n  const acceptedFiles = hoveringFiles.filter((file) =>\n    types.some((type) => resolveUploader(type, file)),\n  )\n  const rejectedFilesCount = hoveringFiles.length - acceptedFiles.length\n  const multiple = types.length > 1\n  const {t} = useTranslation()\n  return (\n    <>\n      {acceptedFiles.length > 0 ? (\n        <>\n          <Inline space={2}>\n            <Text>\n              <UploadIcon />\n            </Text>\n            {multiple\n              ? t('inputs.files.common.drop-message.drop-to-upload-multi', {\n                  count: acceptedFiles.length,\n                })\n              : t('inputs.files.common.drop-message.drop-to-upload')}\n            <Text />\n          </Inline>\n          {rejectedFilesCount > 0 && (\n            <Box marginTop={4}>\n              <Inline space={2}>\n                <Text muted size={1}>\n                  <AccessDeniedIcon />\n                </Text>\n                <Text muted size={1}>\n                  {t('inputs.files.common.drop-message.drop-to-upload.rejected-file-message', {\n                    count: rejectedFilesCount,\n                  })}\n                </Text>\n              </Inline>\n            </Box>\n          )}\n        </>\n      ) : (\n        <Inline space={2}>\n          <Text>\n            <AccessDeniedIcon />\n          </Text>\n          <Text>\n            {t('inputs.files.common.drop-message.drop-to-upload.no-accepted-file-message', {\n              count: hoveringFiles.length,\n            })}\n          </Text>\n        </Inline>\n      )}\n    </>\n  )\n}\n","import {Layer} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const Overlay = styled(Layer)`\n  position: absolute;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  top: -2px;\n  left: -2px;\n  right: -2px;\n  bottom: -2px;\n  background-color: var(--card-bg-color);\n  opacity: 0.8;\n`\n","import {type SchemaType} from '@sanity/types'\nimport {Box, Flex, Text, useToast} from '@sanity/ui'\nimport {sortBy} from 'lodash'\nimport {\n  type ComponentType,\n  type ForwardedRef,\n  forwardRef,\n  type ForwardRefExoticComponent,\n  type PropsWithoutRef,\n  type ReactNode,\n  type RefAttributes,\n  useCallback,\n  useState,\n} from 'react'\nimport {styled} from 'styled-components'\n\nimport {type FIXME} from '../../../../../FIXME'\nimport {useTranslation} from '../../../../../i18n'\nimport {\n  type FileLike,\n  type ResolvedUploader,\n  type UploaderResolver,\n} from '../../../../studio/uploads/types'\nimport {type UploadEvent} from '../../../../types'\nimport {type FileInfo, fileTarget} from '../../../common/fileTarget'\nimport {DropMessage} from '../../../files/common/DropMessage'\nimport {Overlay} from './styles'\n\nexport interface UploadTargetProps {\n  types: SchemaType[]\n  resolveUploader?: UploaderResolver<FIXME>\n  onUpload?: (event: UploadEvent) => void\n  children?: ReactNode\n}\n\n// todo: define and export this as a core interface in this package\ninterface UploadTask {\n  file: File\n  uploaderCandidates: ResolvedUploader[]\n}\n\nconst Root = styled.div`\n  position: relative;\n`\n\nfunction getUploadCandidates(\n  types: SchemaType[],\n  resolveUploader: UploaderResolver,\n  file: FileLike,\n) {\n  return types\n    .map((memberType) => ({\n      type: memberType,\n      uploader: resolveUploader(memberType, file),\n    }))\n    .filter((member) => member.uploader) as ResolvedUploader[]\n}\n\nexport function uploadTarget<Props>(\n  Component: ComponentType<Props>,\n): ForwardRefExoticComponent<\n  PropsWithoutRef<UploadTargetProps & Props> & RefAttributes<HTMLElement>\n> {\n  const FileTarget = fileTarget<FIXME>(Component)\n\n  // @ts-expect-error TODO fix PropsWithoutRef related union typings\n  return forwardRef(function UploadTarget(\n    props: UploadTargetProps & Props,\n    forwardedRef: ForwardedRef<HTMLElement>,\n  ) {\n    const {children, resolveUploader, onUpload, types, ...rest} = props\n    const {push: pushToast} = useToast()\n    const {t} = useTranslation()\n\n    const uploadFile = useCallback(\n      (file: File, resolvedUploader: ResolvedUploader) => {\n        const {type, uploader} = resolvedUploader\n        onUpload?.({file, schemaType: type, uploader})\n      },\n      [onUpload],\n    )\n\n    const handleFiles = useCallback(\n      (files: File[]) => {\n        if (!resolveUploader) {\n          return\n        }\n        const tasks: UploadTask[] = files.map((file) => ({\n          file,\n          uploaderCandidates: getUploadCandidates(types, resolveUploader, file),\n        }))\n        const ready = tasks.filter((task) => task.uploaderCandidates.length > 0)\n        const rejected: UploadTask[] = tasks.filter((task) => task.uploaderCandidates.length === 0)\n\n        if (rejected.length > 0) {\n          pushToast({\n            closable: true,\n            status: 'warning',\n            title: t('inputs.array.error.cannot-upload-unable-to-convert', {\n              count: rejected.length,\n            }),\n            description: rejected.map((task, i) => (\n              <Flex key={i} gap={2} padding={2}>\n                <Box>\n                  <Text weight=\"medium\">{task.file.name}</Text>\n                </Box>\n                <Box>\n                  <Text size={1}>({task.file.type})</Text>\n                </Box>\n              </Flex>\n            )),\n          })\n        }\n\n        // todo: consider if we should to ask the user here\n        // the list of candidates is sorted by their priority and the first one is selected\n        // const ambiguous = tasks\n        //   .filter(task => task.uploaderCandidates.length > 1)\n        ready.forEach((task) => {\n          uploadFile(\n            task.file,\n            // eslint-disable-next-line max-nested-callbacks\n            sortBy(task.uploaderCandidates, (candidate) => candidate.uploader.priority)[0],\n          )\n        })\n      },\n      [pushToast, resolveUploader, types, uploadFile, t],\n    )\n\n    const [hoveringFiles, setHoveringFiles] = useState<FileInfo[]>([])\n    const handleFilesOut = useCallback(() => setHoveringFiles([]), [])\n\n    return (\n      <Root>\n        <FileTarget\n          {...rest}\n          ref={forwardedRef}\n          onFiles={handleFiles}\n          onFilesOver={setHoveringFiles}\n          onFilesOut={handleFilesOut}\n        >\n          {resolveUploader && hoveringFiles.length > 0 && (\n            <Overlay zOffset={10}>\n              <DropMessage\n                hoveringFiles={hoveringFiles}\n                types={types}\n                resolveUploader={resolveUploader}\n              />\n            </Overlay>\n          )}\n          {children}\n        </FileTarget>\n      </Root>\n    )\n  })\n}\n","import {Card} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {withFocusRing} from '../../../components/withFocusRing'\nimport {uploadTarget} from './uploadTarget/uploadTarget'\n\nconst StyledCard = styled(Card)`\n  height: 100%;\n`\n\nexport const UploadTargetCard = withFocusRing(uploadTarget(StyledCard))\n","import {\n  InsertMenu as SanityInsertMenu,\n  type InsertMenuProps as SanityInsertMenuProps,\n} from '@sanity/insert-menu'\nimport {type SchemaType} from '@sanity/types'\nimport {useClickOutsideEvent, useGlobalKeyDown} from '@sanity/ui'\nimport {useCallback, useMemo, useReducer, useRef} from 'react'\n\nimport {Popover, type PopoverProps} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n/hooks/useTranslation'\n\ntype PopoverState = {open: boolean}\n\ntype PopoverEvent = {type: 'toggle'} | {type: 'close'}\n\nfunction popoverReducer(state: PopoverState, event: PopoverEvent): PopoverState {\n  if (event.type === 'toggle') {\n    return {open: !state.open}\n  }\n\n  return {\n    open: false,\n  }\n}\n\n/**\n * @internal\n */\nexport function useInsertMenuPopover(props: {\n  insertMenuProps: InsertMenuProps\n  popoverProps: Omit<PopoverProps, 'content' | 'open'>\n}) {\n  const [state, send] = useReducer(popoverReducer, {open: false})\n  const popoverRef = useRef<HTMLDivElement | null>(null)\n  const referenceElement = props.popoverProps.referenceElement ?? null\n\n  useClickOutsideEvent(\n    () => send({type: 'close'}),\n    () => [popoverRef.current, referenceElement],\n  )\n\n  useGlobalKeyDown(\n    useCallback(\n      (event: KeyboardEvent) => {\n        if (event.key === 'Escape' && state.open) {\n          send({type: 'close'})\n          referenceElement?.focus()\n        }\n      },\n      [state, referenceElement],\n    ),\n  )\n\n  const {onSelect, ...insertMenuProps} = props.insertMenuProps\n  const handleOnSelect = useCallback(\n    (schemaType: SchemaType) => {\n      onSelect(schemaType)\n      send({type: 'close'})\n    },\n    [onSelect],\n  )\n  const popover = useMemo(\n    () => (\n      <Popover\n        ref={popoverRef}\n        open={state.open}\n        constrainSize\n        overflow=\"hidden\"\n        portal\n        content={<InsertMenu {...insertMenuProps} onSelect={handleOnSelect} />}\n        {...props.popoverProps}\n      />\n    ),\n    [handleOnSelect, insertMenuProps, props.popoverProps, state],\n  )\n\n  return {\n    popover,\n    state,\n    send,\n  }\n}\n\n/**\n * @internal\n */\nexport type InsertMenuProps = Omit<SanityInsertMenuProps, 'labels'>\n\n/**\n * `InsertMenu` with pre-configured `labels`\n */\nfunction InsertMenu(props: InsertMenuProps) {\n  const {t} = useTranslation()\n\n  return (\n    <SanityInsertMenu\n      {...props}\n      labels={{\n        'insert-menu.filter.all-items': t('inputs.array.insert-menu.filter.all-items'),\n        'insert-menu.search.no-results': t('inputs.array.insert-menu.search.no-results'),\n        'insert-menu.search.placeholder': t('inputs.array.insert-menu.search.placeholder'),\n        'insert-menu.toggle-grid-view.tooltip': t(\n          'inputs.array.insert-menu.toggle-grid-view.tooltip',\n        ),\n        'insert-menu.toggle-list-view.tooltip': t(\n          'inputs.array.insert-menu.toggle-list-view.tooltip',\n        ),\n      }}\n    />\n  )\n}\n","/* eslint-disable react/jsx-no-bind */\nimport {AddIcon} from '@sanity/icons'\nimport {type ArraySchemaType} from '@sanity/types'\nimport {Grid} from '@sanity/ui'\nimport {useCallback, useState} from 'react'\n\nimport {Button, Tooltip} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n'\nimport {type ArrayInputFunctionsProps, type ObjectItem} from '../../../types'\nimport {useInsertMenuPopover} from './InsertMenuPopover'\n\n/**\n * @hidden\n * @beta */\nexport function ArrayOfObjectsFunctions<\n  Item extends ObjectItem,\n  TSchemaType extends ArraySchemaType,\n>(props: ArrayInputFunctionsProps<Item, TSchemaType>) {\n  const {schemaType, readOnly, children, onValueCreate, onItemAppend} = props\n  const {t} = useTranslation()\n  const [gridElement, setGridElement] = useState<HTMLDivElement | null>(null)\n  const [popoverToggleElement, setPopoverToggleElement] = useState<HTMLButtonElement | null>(null)\n\n  const insertItem = useCallback(\n    (itemType: any) => {\n      const item = onValueCreate(itemType)\n\n      onItemAppend(item)\n    },\n    [onValueCreate, onItemAppend],\n  )\n\n  const handleAddBtnClick = useCallback(() => {\n    insertItem(schemaType.of[0])\n  }, [schemaType, insertItem])\n\n  // If we have more than a single type candidate, we render a menu, so the button might show\n  // \"Add item...\" instead of simply \"Add item\", to indicate that further choices are available.\n  const addItemI18nKey =\n    schemaType.of.length > 1\n      ? 'inputs.array.action.add-item-select-type'\n      : 'inputs.array.action.add-item'\n\n  const insertButtonProps: React.ComponentProps<typeof Button> = {\n    icon: AddIcon,\n    mode: 'ghost',\n    size: 'large',\n    text: t(addItemI18nKey),\n  }\n\n  const insertMenu = useInsertMenuPopover({\n    insertMenuProps: {\n      ...props.schemaType.options?.insertMenu,\n      schemaTypes: props.schemaType.of,\n      onSelect: insertItem,\n    },\n    popoverProps: {\n      placement: 'bottom',\n      fallbackPlacements: ['top'],\n      matchReferenceWidth: props.schemaType.options?.insertMenu?.views?.some(\n        (view) => view.name === 'grid',\n      ),\n      referenceBoundary: gridElement,\n      referenceElement: popoverToggleElement,\n    },\n  })\n\n  if (schemaType.options?.disableActions?.includes('add')) {\n    return null\n  }\n\n  if (readOnly) {\n    return (\n      <Tooltip portal content={t('inputs.array.read-only-label')}>\n        <Grid>\n          <Button {...insertButtonProps} data-testid=\"add-read-object-button\" disabled />\n        </Grid>\n      </Tooltip>\n    )\n  }\n\n  return (\n    <Grid\n      ref={setGridElement}\n      gap={1}\n      style={{gridTemplateColumns: 'repeat(auto-fit, minmax(100px, 1fr))'}}\n    >\n      {schemaType.of.length === 1 ? (\n        <Button\n          {...insertButtonProps}\n          onClick={handleAddBtnClick}\n          data-testid=\"add-single-object-button\"\n        />\n      ) : (\n        <>\n          <Button\n            {...insertButtonProps}\n            data-testid=\"add-multiple-object-button\"\n            selected={insertMenu.state.open}\n            onClick={() => {\n              insertMenu.send({type: 'toggle'})\n            }}\n            ref={setPopoverToggleElement}\n          />\n          {insertMenu.popover}\n        </>\n      )}\n      {children}\n    </Grid>\n  )\n}\n","import {useSortable} from '@dnd-kit/sortable'\nimport {DragHandleIcon} from '@sanity/icons'\nimport {useContext} from 'react'\nimport {SortableItemIdContext} from 'sanity/_singletons'\nimport {css, styled} from 'styled-components'\n\nimport {Button, type ButtonProps} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n'\n\nconst DragHandleButton = styled(Button)<{$grid?: boolean; disabled?: boolean}>((props) => {\n  const {$grid, disabled} = props\n  if (disabled) return css``\n  return css`\n    cursor: ${$grid ? 'move' : 'ns-resize'};\n  `\n})\n\ninterface DragHandleProps {\n  $grid?: boolean\n  size?: ButtonProps['size']\n  mode?: ButtonProps['mode']\n  paddingY?: ButtonProps['paddingY']\n  readOnly: boolean\n}\n\nexport const DragHandle = function DragHandle(props: DragHandleProps) {\n  const id = useContext(SortableItemIdContext)!\n  const {mode = 'bleed', readOnly, ...rest} = props\n  const {listeners, attributes} = useSortable({id, disabled: readOnly})\n  const {t} = useTranslation()\n\n  return (\n    <DragHandleButton\n      icon={DragHandleIcon}\n      tooltipProps={{\n        content: t('inputs.array.action.drag.tooltip'),\n        delay: {open: 1000},\n        disabled: !!readOnly,\n      }}\n      mode={mode}\n      data-ui=\"DragHandleButton\"\n      {...rest}\n      {...attributes}\n      {...listeners}\n      disabled={readOnly}\n    />\n  )\n}\n","import {Box, Card, type CardTone, Flex} from '@sanity/ui'\nimport {type ComponentProps, type ReactNode} from 'react'\nimport {styled} from 'styled-components'\n\nimport {DragHandle} from '../common/DragHandle'\nimport {MOVING_ITEM_CLASS_NAME} from '../common/list'\n\ninterface RowLayoutProps {\n  tone?: CardTone\n  dragHandle?: boolean\n  presence?: ReactNode\n  validation?: ReactNode\n  menu?: ReactNode\n  footer?: ReactNode\n  selected?: boolean\n  children?: ReactNode\n}\n\nconst FooterFlex = styled(Flex)`\n  min-height: 33px;\n`\nconst PresenceFlex = styled(Flex)`\n  position: absolute;\n  top: 0;\n  right: 0;\n  height: 33px;\n`\n\nconst DragHandleCard = styled(Card)`\n  position: absolute;\n  top: 0;\n  left: 0;\n`\nconst Root = styled(Card)`\n  transition: border-color 250ms;\n  box-sizing: border-box;\n  position: relative;\n\n  @media (hover: hover) {\n    ${DragHandleCard} {\n      opacity: 0;\n    }\n\n    &:hover,\n    &:focus-within {\n      ${DragHandleCard} {\n        opacity: 1;\n      }\n    }\n  }\n\n  .${MOVING_ITEM_CLASS_NAME} & {\n    box-shadow:\n      0 0 0 0,\n      0 8px 17px 2px var(--card-shadow-umbra-color),\n      0 3px 14px 2px var(--card-shadow-penumbra-color),\n      0 5px 5px -3px var(--card-shadow-ambient-color);\n  }\n\n  &[aria-selected='true'] {\n    box-shadow: 0 0 0 2px var(--card-focus-ring-color);\n  }\n`\n\n/**\n * Use this to get the layout for grid items\n */\nexport function CellLayout(props: RowLayoutProps & ComponentProps<typeof Root>) {\n  const {\n    validation,\n    selected,\n    tone,\n    presence,\n    children,\n    dragHandle,\n    menu,\n    footer,\n    readOnly,\n    ...rest\n  } = props\n\n  return (\n    <Root\n      forwardedAs={Flex}\n      direction=\"column\"\n      border\n      selected={selected}\n      aria-selected={selected}\n      radius={1}\n      tone={tone}\n      {...rest}\n    >\n      {children}\n\n      {dragHandle && (\n        <DragHandleCard\n          margin={1}\n          radius={2}\n          display=\"flex\"\n          tone=\"inherit\"\n          data-ui=\"DragHandleCard\"\n        >\n          <DragHandle $grid mode=\"ghost\" readOnly={!!readOnly} />\n        </DragHandleCard>\n      )}\n\n      {presence && (\n        <PresenceFlex align=\"center\" marginX={1}>\n          {presence}\n        </PresenceFlex>\n      )}\n\n      <FooterFlex align=\"center\" paddingX={1} sizing=\"border\" justify=\"space-between\">\n        <Flex>{validation}</Flex>\n        <Box>{footer}</Box>\n        {menu}\n      </FooterFlex>\n    </Root>\n  )\n}\n","import {BulbOutlineIcon, UnknownIcon} from '@sanity/icons'\nimport {Box, Card, Code, Stack, Text, type Theme, useClickOutsideEvent} from '@sanity/ui'\nimport {resolveTypeName} from '@sanity/util/content'\nimport {type FocusEvent, useCallback, useRef, useState} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Popover} from '../../../../../../ui-components'\nimport {Translate, useTranslation} from '../../../../../i18n'\n\nconst PopoverCard = styled(Card)`\n  max-width: ${({theme}: {theme: Theme}) => theme.sanity.container[1]}px;\n`\n\ninterface Props {\n  value: unknown\n  onFocus?: (event: FocusEvent) => void\n  vertical?: boolean\n}\n\nexport function IncompatibleItemType(props: Props) {\n  const {value, onFocus, vertical, ...rest} = props\n  const [showDetails, setShowDetails] = useState(false)\n  const popoverRef = useRef<HTMLDivElement | null>(null)\n\n  const {t} = useTranslation()\n\n  useClickOutsideEvent(\n    () => setShowDetails(false),\n    () => [popoverRef.current],\n  )\n\n  const handleKeyDown = useCallback((e: any) => {\n    if (e.key === 'Escape' || e.key === 'Tab') {\n      setShowDetails(false)\n    }\n  }, [])\n\n  const handleShowDetails = useCallback(() => {\n    setShowDetails((v) => !v)\n  }, [])\n\n  const typeName = resolveTypeName(value)\n  return (\n    <Popover\n      open={showDetails}\n      ref={popoverRef}\n      onKeyDown={handleKeyDown}\n      portal\n      constrainSize\n      tone=\"default\"\n      content={\n        <PopoverCard margin={1} padding={3} onKeyDown={handleKeyDown} tabIndex={0} overflow=\"auto\">\n          <Stack space={4}>\n            <Box>\n              <Text weight=\"medium\">{t('inputs.array.error.type-is-incompatible-title')}</Text>\n            </Box>\n            <Text size={1}>\n              <Translate\n                t={t}\n                i18nKey=\"inputs.array.error.current-schema-not-declare-description\"\n                values={{typeName}}\n              />\n            </Text>\n            <Box>\n              <Text size={1}>\n                <BulbOutlineIcon /> {t('inputs.array.error.can-delete-but-no-edit-description')}\n              </Text>\n            </Box>\n            <Stack space={2}>\n              <Text size={1} weight=\"medium\">\n                {t('inputs.array.error.json-representation-description')}\n              </Text>\n              <Card padding={2} overflow=\"auto\" border>\n                <Code size={1} as=\"pre\" language=\"json\">\n                  {JSON.stringify(value, null, 2)}\n                </Code>\n              </Card>\n            </Stack>\n          </Stack>\n        </PopoverCard>\n      }\n    >\n      <Card\n        as=\"button\"\n        type=\"button\"\n        radius={2}\n        tone=\"inherit\"\n        paddingX={2}\n        paddingY={3}\n        style={{height: '100%'}}\n        onFocus={onFocus}\n        onClick={handleShowDetails}\n        onKeyDown={handleKeyDown}\n        __unstable_focusRing\n        {...rest}\n      >\n        <Stack space={4} marginTop={2}>\n          <Box margin={1}>\n            <Text align=\"center\" size={4}>\n              <UnknownIcon />\n            </Text>\n          </Box>\n          <Text align=\"center\" size={1}>\n            <Translate\n              t={t}\n              i18nKey=\"inputs.array.error.type-is-incompatible-prompt\"\n              values={{typeName}}\n            />\n          </Text>\n        </Stack>\n      </Card>\n    </Popover>\n  )\n}\n","import {TrashIcon} from '@sanity/icons'\nimport {Menu} from '@sanity/ui'\nimport {useCallback, useId} from 'react'\n\nimport {MenuButton, MenuItem} from '../../../../../../ui-components'\nimport {ContextMenuButton} from '../../../../../components/contextMenuButton'\nimport {useTranslation} from '../../../../../i18n'\nimport {PatchEvent, unset} from '../../../../patch'\nimport {type ArrayItemError} from '../../../../store'\nimport {useFormCallbacks} from '../../../../studio/contexts/FormCallbacks'\nimport {CellLayout} from '../../layouts/CellLayout'\nimport {IncompatibleItemType} from './IncompatibleItemType'\n\nconst MENU_POPOVER_PROPS = {portal: true, tone: 'default'} as const\n\nexport function ErrorItem(props: {member: ArrayItemError; sortable?: boolean; readOnly?: boolean}) {\n  const {member, sortable, readOnly} = props\n  const id = useId()\n  const {onChange} = useFormCallbacks()\n  const {t} = useTranslation()\n\n  const handleRemove = useCallback(() => {\n    onChange(PatchEvent.from([unset([{_key: member.key}])]))\n  }, [onChange, member.key])\n\n  return (\n    <CellLayout\n      dragHandle={sortable}\n      readOnly={readOnly}\n      tone=\"caution\"\n      style={{height: '100%'}}\n      menu={\n        <MenuButton\n          button={<ContextMenuButton />}\n          id={`${id}-menuButton`}\n          menu={\n            <Menu>\n              <MenuItem\n                text={t('inputs.array.action.remove-invalid-item')}\n                tone=\"critical\"\n                icon={TrashIcon}\n                onClick={handleRemove}\n              />\n            </Menu>\n          }\n          popover={MENU_POPOVER_PROPS}\n        />\n      }\n    >\n      {member.error.type === 'INVALID_ITEM_TYPE' ? (\n        <IncompatibleItemType value={member.error.value} vertical />\n      ) : (\n        <div>{t('inputs.array.error.unexpected-error', {error: member.error.type})}</div>\n      )}\n    </CellLayout>\n  )\n}\n","export default {\n  name: 'sanity.assetSourceData',\n  title: 'Asset Source Data',\n  type: 'object',\n  fields: [\n    {\n      name: 'name',\n      title: 'Source name',\n      description: 'A canonical name for the source this asset is originating from',\n      type: 'string',\n    },\n    {\n      name: 'id',\n      title: 'Asset Source ID',\n      description:\n        'The unique ID for the asset within the originating source so you can programatically find back to it',\n      type: 'string',\n    },\n    {\n      name: 'url',\n      title: 'Asset information URL',\n      description: 'A URL to find more information about this asset in the originating source',\n      type: 'string',\n    },\n  ],\n}\n","import {type SanityDocument} from '@sanity/client'\n\nexport default {\n  name: 'sanity.fileAsset',\n  title: 'File',\n  type: 'document',\n  fieldsets: [\n    {\n      name: 'system',\n      title: 'System fields',\n      description: 'These fields are managed by the system and not editable',\n    },\n  ],\n  fields: [\n    {\n      name: 'originalFilename',\n      type: 'string',\n      title: 'Original file name',\n      readOnly: true,\n    },\n    {\n      name: 'label',\n      type: 'string',\n      title: 'Label',\n    },\n    {\n      name: 'title',\n      type: 'string',\n      title: 'Title',\n    },\n    {\n      name: 'description',\n      type: 'string',\n      title: 'Description',\n    },\n    {\n      name: 'altText',\n      type: 'string',\n      title: 'Alternative text',\n    },\n    {\n      name: 'sha1hash',\n      type: 'string',\n      title: 'SHA1 hash',\n      readOnly: true,\n      fieldset: 'system',\n    },\n    {\n      name: 'extension',\n      type: 'string',\n      title: 'File extension',\n      readOnly: true,\n      fieldset: 'system',\n    },\n    {\n      name: 'mimeType',\n      type: 'string',\n      title: 'Mime type',\n      readOnly: true,\n      fieldset: 'system',\n    },\n    {\n      name: 'size',\n      type: 'number',\n      title: 'File size in bytes',\n      readOnly: true,\n      fieldset: 'system',\n    },\n    {\n      name: 'assetId',\n      type: 'string',\n      title: 'Asset ID',\n      readOnly: true,\n      fieldset: 'system',\n    },\n    {\n      name: 'uploadId',\n      type: 'string',\n      readOnly: true,\n      hidden: true,\n      fieldset: 'system',\n    },\n    {\n      name: 'path',\n      type: 'string',\n      title: 'Path',\n      readOnly: true,\n      fieldset: 'system',\n    },\n    {\n      name: 'url',\n      type: 'string',\n      title: 'Url',\n      readOnly: true,\n      fieldset: 'system',\n    },\n    {\n      name: 'source',\n      type: 'sanity.assetSourceData',\n      title: 'Source',\n      readOnly: true,\n      fieldset: 'system',\n    },\n  ],\n  preview: {\n    select: {\n      title: 'originalFilename',\n      path: 'path',\n      mimeType: 'mimeType',\n      size: 'size',\n    },\n    prepare(doc: Partial<SanityDocument>) {\n      return {\n        title: doc.title || doc.path.split('/').slice(-1)[0],\n        subtitle: `${doc.mimeType} (${(doc.size / 1024 / 1024).toFixed(2)} MB)`,\n      }\n    },\n  },\n  orderings: [\n    {\n      title: 'File size',\n      name: 'fileSizeDesc',\n      by: [{field: 'size', direction: 'desc'}],\n    },\n  ],\n}\n","export default {\n  title: 'Geographical Point',\n  name: 'geopoint',\n  type: 'object',\n  fields: [\n    {\n      name: 'lat',\n      type: 'number',\n      title: 'Latitude',\n    },\n    {\n      name: 'lng',\n      type: 'number',\n      title: 'Longitude',\n    },\n    {\n      name: 'alt',\n      type: 'number',\n      title: 'Altitude',\n    },\n  ],\n}\n","import {type SanityDocument} from '@sanity/types'\n\nexport default {\n  name: 'sanity.imageAsset',\n  title: 'Image',\n  type: 'document',\n  fieldsets: [\n    {\n      name: 'system',\n      title: 'System fields',\n      description: 'These fields are managed by the system and not editable',\n    },\n  ],\n  fields: [\n    {\n      name: 'originalFilename',\n      type: 'string',\n      title: 'Original file name',\n      readOnly: true,\n    },\n    {\n      name: 'label',\n      type: 'string',\n      title: 'Label',\n    },\n    {\n      name: 'title',\n      type: 'string',\n      title: 'Title',\n    },\n    {\n      name: 'description',\n      type: 'string',\n      title: 'Description',\n    },\n    {\n      name: 'altText',\n      type: 'string',\n      title: 'Alternative text',\n    },\n    {\n      name: 'sha1hash',\n      type: 'string',\n      title: 'SHA1 hash',\n      readOnly: true,\n      fieldset: 'system',\n    },\n    {\n      name: 'extension',\n      type: 'string',\n      readOnly: true,\n      title: 'File extension',\n      fieldset: 'system',\n    },\n    {\n      name: 'mimeType',\n      type: 'string',\n      readOnly: true,\n      title: 'Mime type',\n      fieldset: 'system',\n    },\n    {\n      name: 'size',\n      type: 'number',\n      title: 'File size in bytes',\n      readOnly: true,\n      fieldset: 'system',\n    },\n    {\n      name: 'assetId',\n      type: 'string',\n      title: 'Asset ID',\n      readOnly: true,\n      fieldset: 'system',\n    },\n    {\n      name: 'uploadId',\n      type: 'string',\n      readOnly: true,\n      hidden: true,\n      fieldset: 'system',\n    },\n    {\n      name: 'path',\n      type: 'string',\n      title: 'Path',\n      readOnly: true,\n      fieldset: 'system',\n    },\n    {\n      name: 'url',\n      type: 'string',\n      title: 'Url',\n      readOnly: true,\n      fieldset: 'system',\n    },\n    {\n      name: 'metadata',\n      type: 'sanity.imageMetadata',\n      title: 'Metadata',\n    },\n    {\n      name: 'source',\n      type: 'sanity.assetSourceData',\n      title: 'Source',\n      readOnly: true,\n      fieldset: 'system',\n    },\n  ],\n  preview: {\n    select: {\n      id: '_id',\n      title: 'originalFilename',\n      mimeType: 'mimeType',\n      size: 'size',\n    },\n    prepare(doc: Partial<SanityDocument>) {\n      return {\n        title: doc.title || (typeof doc.path === 'string' && doc.path.split('/').slice(-1)[0]),\n        media: {asset: {_ref: doc.id}},\n        subtitle: `${doc.mimeType} (${(Number(doc.size) / 1024 / 1024).toFixed(2)} MB)`,\n      }\n    },\n  },\n  orderings: [\n    {\n      title: 'File size',\n      name: 'fileSizeDesc',\n      by: [{field: 'size', direction: 'desc'}],\n    },\n  ],\n}\n","export default {\n  name: 'sanity.imageCrop',\n  title: 'Image crop',\n  type: 'object',\n  fields: [\n    {\n      name: 'top',\n      type: 'number',\n    },\n    {\n      name: 'bottom',\n      type: 'number',\n    },\n    {\n      name: 'left',\n      type: 'number',\n    },\n    {\n      name: 'right',\n      type: 'number',\n    },\n  ],\n}\n","export default {\n  name: 'sanity.imageDimensions',\n  type: 'object',\n  title: 'Image dimensions',\n  fields: [\n    {name: 'height', type: 'number', title: 'Height', readOnly: true},\n    {name: 'width', type: 'number', title: 'Width', readOnly: true},\n    {name: 'aspectRatio', type: 'number', title: 'Aspect ratio', readOnly: true},\n  ],\n}\n","export default {\n  name: 'sanity.imageHotspot',\n  title: 'Image hotspot',\n  type: 'object',\n  fields: [\n    {\n      name: 'x',\n      type: 'number',\n    },\n    {\n      name: 'y',\n      type: 'number',\n    },\n    {\n      name: 'height',\n      type: 'number',\n    },\n    {\n      name: 'width',\n      type: 'number',\n    },\n  ],\n}\n","export default {\n  name: 'sanity.imageMetadata',\n  title: 'Image metadata',\n  type: 'object',\n  fieldsets: [\n    {\n      name: 'extra',\n      title: 'Extra metadata…',\n      options: {\n        collapsable: true,\n      },\n    },\n  ],\n  fields: [\n    {\n      name: 'location',\n      type: 'geopoint',\n    },\n    {\n      name: 'dimensions',\n      title: 'Dimensions',\n      type: 'sanity.imageDimensions',\n      fieldset: 'extra',\n    },\n    {\n      name: 'palette',\n      type: 'sanity.imagePalette',\n      title: 'Palette',\n      fieldset: 'extra',\n    },\n    {\n      name: 'lqip',\n      title: 'LQIP (Low-Quality Image Placeholder)',\n      type: 'string',\n      readOnly: true,\n    },\n    {\n      name: 'blurHash',\n      title: 'BlurHash',\n      type: 'string',\n      readOnly: true,\n    },\n    {\n      name: 'hasAlpha',\n      title: 'Has alpha channel',\n      type: 'boolean',\n      readOnly: true,\n    },\n    {\n      name: 'isOpaque',\n      title: 'Is opaque',\n      type: 'boolean',\n      readOnly: true,\n    },\n  ],\n}\n","export default {\n  name: 'sanity.imagePalette',\n  title: 'Image palette',\n  type: 'object',\n  fields: [\n    {name: 'darkMuted', type: 'sanity.imagePaletteSwatch', title: 'Dark Muted'},\n    {name: 'lightVibrant', type: 'sanity.imagePaletteSwatch', title: 'Light Vibrant'},\n    {name: 'darkVibrant', type: 'sanity.imagePaletteSwatch', title: 'Dark Vibrant'},\n    {name: 'vibrant', type: 'sanity.imagePaletteSwatch', title: 'Vibrant'},\n    {name: 'dominant', type: 'sanity.imagePaletteSwatch', title: 'Dominant'},\n    {name: 'lightMuted', type: 'sanity.imagePaletteSwatch', title: 'Light Muted'},\n    {name: 'muted', type: 'sanity.imagePaletteSwatch', title: 'Muted'},\n  ],\n}\n","export default {\n  name: 'sanity.imagePaletteSwatch',\n  title: 'Image palette swatch',\n  type: 'object',\n  fields: [\n    {name: 'background', type: 'string', title: 'Background', readOnly: true},\n    {name: 'foreground', type: 'string', title: 'Foreground', readOnly: true},\n    {name: 'population', type: 'number', title: 'Population', readOnly: true},\n    {name: 'title', type: 'string', title: 'String', readOnly: true},\n  ],\n}\n","import {type Rule} from '@sanity/types'\n\nexport default {\n  title: 'Slug',\n  name: 'slug',\n  type: 'object',\n  fields: [\n    {\n      name: 'current',\n      title: 'Current slug',\n      type: 'string',\n      validation: (Rule: Rule): Rule => Rule.required(),\n    },\n    {\n      // The source field is deprecated/unused, but leaving it included and hidden\n      // to prevent rendering \"Unknown field\" warnings on legacy data\n      name: 'source',\n      title: 'Source field',\n      type: 'string',\n      hidden: true,\n    },\n  ],\n}\n","import {Schema as SchemaBuilder, type SchemaValidationResult} from '@sanity/schema'\nimport {groupProblems, validateSchema} from '@sanity/schema/_internal'\nimport {type Schema} from '@sanity/types'\n\nimport {inferFromSchema as inferValidation} from '../validation'\nimport assetSourceData from './types/assetSourceData'\nimport fileAsset from './types/fileAsset'\nimport geopoint from './types/geopoint'\nimport imageAsset from './types/imageAsset'\nimport imageCrop from './types/imageCrop'\nimport imageDimensions from './types/imageDimensions'\nimport imageHotspot from './types/imageHotspot'\nimport imageMetadata from './types/imageMetadata'\nimport imagePalette from './types/imagePalette'\nimport imagePaletteSwatch from './types/imagePaletteSwatch'\nimport slug from './types/slug'\n\nconst isError = (problem: SchemaValidationResult) => problem.severity === 'error'\n\nconst builtinTypes = [\n  assetSourceData,\n  slug,\n  geopoint,\n  // legacyRichDate,\n  imageAsset,\n  fileAsset,\n  imageCrop,\n  imageHotspot,\n  imageMetadata,\n  imageDimensions,\n  imagePalette,\n  imagePaletteSwatch,\n]\n\n/**\n * @hidden\n * @beta */\nexport function createSchema(schemaDef: {name: string; types: any[]}): Schema {\n  const validated = validateSchema(schemaDef.types).getTypes()\n  const validation = groupProblems(validated)\n  const hasErrors = validation.some((group) => group.problems.some(isError))\n\n  const compiled = SchemaBuilder.compile({\n    name: schemaDef.name,\n    types: hasErrors ? [] : [...schemaDef.types, ...builtinTypes].filter(Boolean),\n  })\n\n  // ;(compiled as any)._source = schemaDef\n  ;(compiled as any)._validation = validation\n\n  return inferValidation(compiled as Schema)\n}\n","import {type SchemaType} from '@sanity/types'\n\n/**\n * Get the most specific defined title of a schema type\n * If not set directly on the given type, it will traverse up the tree until it\n * finds one, falling back to the _name_ of the type.\n *\n * @param type - The schema type to get the title of\n * @returns A title, alternatively the schema type _name_\n * @internal\n */\nexport function getSchemaTypeTitle(type: SchemaType): string {\n  if (typeof type.title === 'string') {\n    return type.title\n  }\n\n  if (type.type) {\n    return getSchemaTypeTitle(type.type)\n  }\n\n  return type.name || type.jsonType\n}\n","import {deburr} from 'lodash'\n\nimport {type TreeEditingMenuItem} from '../../types'\nimport {type SearchableTreeEditingMenuItem} from './types'\n\n/**\n * Flattens a list of items and their children into a single list.\n */\nexport function flattenItems(items: TreeEditingMenuItem[]): TreeEditingMenuItem[] {\n  const result: TreeEditingMenuItem[] = items.reduce(\n    (acc: TreeEditingMenuItem[], item: TreeEditingMenuItem) => {\n      if (item?.children) {\n        return [...acc, item, ...flattenItems(item.children)]\n      }\n\n      return [...acc, item]\n    },\n    [],\n  )\n\n  // Remove the children property from the items\n  // as we only want to return the items themselves\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  return result.map(({children, ...item}) => item)\n}\n\n/**\n * Returns a list of items that match the search query.\n */\nexport function treeEditingSearch(\n  items: SearchableTreeEditingMenuItem[],\n  query: string,\n): TreeEditingMenuItem[] {\n  // Flatten the items list so we can search through all items and their children\n  const flattenItemsList = flattenItems(items) as SearchableTreeEditingMenuItem[]\n\n  // We use deburr to remove diacritics from the query and the item titles. This way we can\n  // search for \"nino\" and get results for \"niño\" as well.\n  const deburredQuery = deburr(query).toLocaleLowerCase()\n\n  const filtered = flattenItemsList\n    ?.filter((option) => {\n      const deburredTitle = deburr(option.title || '').toLocaleLowerCase()\n\n      return deburredTitle.includes(deburredQuery)\n    })\n    // Sort the most relevant results first\n    ?.sort((a, b) => {\n      const matchA = a.title?.startsWith(deburredQuery)\n      const matchB = b.title?.startsWith(deburredQuery)\n\n      if (matchA && !matchB) return -1\n      if (!matchA && matchB) return 1\n\n      return 0\n    })\n\n  return filtered\n}\n","import {isEqual} from 'lodash'\nimport {useCallback, useEffect, useMemo, useState} from 'react'\nimport {map} from 'rxjs'\n\nimport {type Previewable} from '../../../../preview/types'\nimport {useDocumentPreviewStore} from '../../../../store/_legacy/datastores'\nimport {flattenItems} from '../components/search/utils'\nimport {type TreeEditingMenuItem} from '../types'\n\nexport interface SearchableTreeEditingMenuItem extends TreeEditingMenuItem {\n  title: string | undefined\n  children?: SearchableTreeEditingMenuItem[]\n}\n\n/**\n * A hook that takes a list of items and returns a flat list of\n * items that are searchable by adding the title to the item.\n */\nexport function useSearchableList(items: TreeEditingMenuItem[]): SearchableTreeEditingMenuItem[] {\n  const [searchableList, setSearchableList] = useState<SearchableTreeEditingMenuItem[]>([])\n  const {observeForPreview} = useDocumentPreviewStore()\n\n  const flatList = useMemo(() => flattenItems(items), [items])\n\n  const handleResult = useCallback(\n    (item: SearchableTreeEditingMenuItem) => {\n      const path = item.path\n\n      setSearchableList((prev) => {\n        const exists = prev.some((prevItem) => isEqual(prevItem.path, path))\n\n        if (exists) {\n          return prev.map((prevItem) => {\n            if (isEqual(prevItem.path, path)) {\n              return {\n                ...item,\n                title: item?.title,\n              }\n            }\n\n            return prevItem\n          })\n        }\n\n        return prev.concat(item)\n      })\n    },\n    [setSearchableList],\n  )\n\n  useEffect(() => {\n    // clear the searchableList when items change\n    setSearchableList([])\n\n    flatList.forEach((item) => {\n      const sub$ = observeForPreview(item.value as Previewable, item.schemaType).pipe(\n        map((event) => {\n          const searchableItem = {\n            ...item,\n\n            // Add the title to the item to make it searchable\n            title: event.snapshot?.title,\n          }\n\n          return searchableItem as SearchableTreeEditingMenuItem\n        }),\n      )\n\n      sub$.subscribe(handleResult).unsubscribe()\n    })\n  }, [flatList, handleResult, observeForPreview])\n\n  return searchableList\n}\n","import {type PreviewValue, type SchemaType} from '@sanity/types'\nimport {useMemo} from 'react'\n\nimport {useTranslation} from '../../../../i18n/hooks/useTranslation'\nimport {unstable_useValuePreview as useValuePreview} from '../../../../preview/useValuePreview'\n\ninterface UseValuePreviewWithFallbackProps {\n  schemaType?: SchemaType\n  value: unknown | undefined\n}\n\ninterface Value extends PreviewValue {\n  title: string\n}\n\ninterface ReturnType {\n  isLoading: boolean\n  error?: Error\n  value: Value\n}\n\n/**\n * A hook that extends `useValuePreview` with a fallback title\n */\nexport function useValuePreviewWithFallback(props: UseValuePreviewWithFallbackProps): ReturnType {\n  const preview = useValuePreview(props)\n  const {t} = useTranslation()\n\n  return useMemo(\n    (): ReturnType => ({\n      ...preview,\n      value: {\n        ...(preview?.value || {}),\n        title: preview?.value?.title || t('preview.default.title-fallback'),\n      },\n    }),\n    [preview, t],\n  )\n}\n","export const ITEM_HEIGHT = 33\nexport const MAX_DISPLAYED_ITEMS = 50\n","import {CheckmarkIcon} from '@sanity/icons'\nimport {type Path, type PreviewValue} from '@sanity/types'\nimport {\n  // eslint-disable-next-line no-restricted-imports\n  Button, // Custom button needed, support for children\n  Flex,\n  Stack,\n  Text,\n} from '@sanity/ui'\nimport {isEqual} from 'lodash'\nimport {useCallback} from 'react'\n\nimport {CommandList} from '../../../../../components/commandList/CommandList'\nimport {useTranslation} from '../../../../../i18n/hooks/useTranslation'\nimport {SanityDefaultPreview} from '../../../../../preview/components/SanityDefaultPreview'\nimport {supportsTouch} from '../../../../../util/supportsTouch'\nimport {useValuePreviewWithFallback} from '../../hooks'\nimport {type TreeEditingBreadcrumb} from '../../types'\nimport {ITEM_HEIGHT} from './constants'\n\ninterface BreadcrumbsItemProps {\n  item: TreeEditingBreadcrumb\n  selected: boolean\n  isFirst: boolean\n  onPathSelect: (path: Path) => void\n  renderMenuItemTitle: (value: PreviewValue) => React.JSX.Element\n}\n\nfunction BreadcrumbsItem(props: BreadcrumbsItemProps): React.JSX.Element {\n  const {item, onPathSelect, selected, isFirst, renderMenuItemTitle} = props\n\n  const {value} = useValuePreviewWithFallback({\n    schemaType: item.schemaType,\n    value: item.value,\n  })\n\n  const {title} = value\n\n  return (\n    <Stack marginTop={isFirst ? undefined : 1}>\n      <Button\n        mode=\"bleed\"\n        // eslint-disable-next-line react/jsx-no-bind\n        onClick={() => onPathSelect(item.path)}\n        selected={selected}\n        title={title}\n        padding={2}\n      >\n        <Flex align=\"center\" gap={3} justify=\"space-between\">\n          <Flex flex={1}>{renderMenuItemTitle(value)}</Flex>\n\n          {selected && (\n            <Text size={1}>\n              <CheckmarkIcon />\n            </Text>\n          )}\n        </Flex>\n      </Button>\n    </Stack>\n  )\n}\n\ninterface TreeEditingBreadcrumbsMenuProps {\n  collapsed?: boolean\n  items: TreeEditingBreadcrumb[]\n  onPathSelect: (path: Path) => void\n  selectedPath: Path\n}\n\nexport function TreeEditingBreadcrumbsMenu(\n  props: TreeEditingBreadcrumbsMenuProps,\n): React.JSX.Element {\n  const {items, onPathSelect, selectedPath, collapsed = false} = props\n  const {t} = useTranslation()\n\n  const getItemDisabled = useCallback(\n    (index: number) => {\n      const item = items[index]\n      return isEqual(item.path, selectedPath)\n    },\n    [items, selectedPath],\n  )\n\n  const handleRenderMenuItemTitle = useCallback(\n    (value: PreviewValue) => {\n      const {title, media} = value\n\n      // Render the title of the menu item in the collapsed breadcrumb\n      // menu (i.e. the \"...\" item) with a leading slash.\n      if (collapsed) {\n        return (\n          <Flex align=\"center\" gap={1}>\n            <Text size={1} muted>\n              /\n            </Text>\n\n            <SanityDefaultPreview title={title} media={media} layout=\"inline\" />\n          </Flex>\n        )\n      }\n\n      return <SanityDefaultPreview title={title} media={media} layout=\"inline\" />\n    },\n    [collapsed],\n  )\n\n  const renderItem = useCallback(\n    (item: TreeEditingBreadcrumb) => {\n      const selected = isEqual(item.path, selectedPath)\n      const isFirst = isEqual(item.path, items[0].path)\n\n      return (\n        <BreadcrumbsItem\n          isFirst={isFirst}\n          item={item}\n          onPathSelect={onPathSelect}\n          renderMenuItemTitle={handleRenderMenuItemTitle}\n          selected={selected}\n        />\n      )\n    },\n    [handleRenderMenuItemTitle, items, onPathSelect, selectedPath],\n  )\n\n  return (\n    <CommandList\n      activeItemDataAttr=\"data-hovered\"\n      ariaLabel={t('tree-editing-dialog.breadcrumbs.menu')}\n      autoFocus={supportsTouch ? undefined : 'input'}\n      data-testid=\"tree-editing-breadcrumbs-menu\"\n      getItemDisabled={getItemDisabled}\n      itemHeight={ITEM_HEIGHT}\n      items={items}\n      overscan={5}\n      padding={1}\n      renderItem={renderItem}\n    />\n  )\n}\n","import {type Path} from '@sanity/types'\nimport {Box, Card, Flex, Text, useClickOutsideEvent} from '@sanity/ui'\n// eslint-disable-next-line camelcase\nimport {cloneElement, type KeyboardEvent, useCallback, useRef, useState} from 'react'\nimport ReactFocusLock from 'react-focus-lock'\nimport {css, styled} from 'styled-components'\n\nimport {Popover, type PopoverProps} from '../../../../../../ui-components'\nimport {type TreeEditingBreadcrumb} from '../../types'\nimport {ITEM_HEIGHT, MAX_DISPLAYED_ITEMS} from './constants'\nimport {TreeEditingBreadcrumbsMenu} from './TreeEditingBreadcrumbsMenu'\n\nconst POPOVER_FALLBACK_PLACEMENTS: PopoverProps['fallbackPlacements'] = ['bottom-start']\n\nconst RootFlex = styled(Flex)``\n\nconst TitleCard = styled(Card)`\n  min-height: max-content;\n`\n\nconst PopoverListFlex = styled(Flex)<{\n  $maxDisplayedItems: number\n  $itemHeight: number\n}>((props) => {\n  const {$maxDisplayedItems, $itemHeight} = props\n\n  return css`\n    --item-height: ${$itemHeight}px;\n    --max-items: ${$maxDisplayedItems};\n    --list-padding: 0.5rem;\n\n    position: relative;\n    max-height: calc(var(--item-height) * var(--max-items) + var(--list-padding));\n    min-height: calc((var(--item-height) * 1));\n  `\n})\n\nconst StyledPopover = styled(Popover)(() => {\n  return css`\n    [data-ui='Popover__wrapper'] {\n      width: 250px;\n      display: flex;\n      flex-direction: column;\n      border-radius: ${({theme}) => theme.sanity.radius[3]}px;\n      position: relative;\n      overflow: hidden;\n      overflow: clip;\n    }\n  `\n})\n\ninterface TreeEditingBreadcrumbsMenuButtonProps {\n  button: React.JSX.Element\n  collapsed?: boolean\n  items: TreeEditingBreadcrumb[]\n  menuTitle?: string\n  onPathSelect: (path: Path) => void\n  parentElement: HTMLElement | null\n  selectedPath: Path\n}\n\nexport function TreeEditingBreadcrumbsMenuButton(\n  props: TreeEditingBreadcrumbsMenuButtonProps,\n): React.JSX.Element {\n  const {\n    button,\n    collapsed = false,\n    items,\n    menuTitle,\n    onPathSelect,\n    parentElement,\n    selectedPath,\n  } = props\n  const [open, setOpen] = useState<boolean>(false)\n  const rootElementRef = useRef<HTMLDivElement | null>(null)\n  const [buttonElement, setButtonElement] = useState<HTMLButtonElement | null>(null)\n\n  const closeAndFocus = useCallback(() => {\n    if (!open) return\n\n    setOpen(false)\n    buttonElement?.focus()\n  }, [buttonElement, open])\n\n  const handlePopoverKeyDown = useCallback(\n    (event: KeyboardEvent<HTMLDivElement>) => {\n      const {key, shiftKey} = event\n\n      if ((shiftKey && key === 'Tab') || key === 'Escape' || key === 'Tab') {\n        closeAndFocus()\n      }\n    },\n    [closeAndFocus],\n  )\n\n  const handleButtonClick = useCallback(() => {\n    const next = !open\n\n    setOpen(next)\n  }, [open])\n\n  const handlePathSelect = useCallback(\n    (path: Path) => {\n      onPathSelect(path)\n      setOpen(false)\n    },\n    [onPathSelect],\n  )\n\n  useClickOutsideEvent(\n    () => setOpen(false),\n    () => [rootElementRef.current, buttonElement],\n  )\n\n  const content = (\n    <RootFlex direction=\"column\" flex={1} forwardedAs={ReactFocusLock} height=\"fill\" returnFocus>\n      <PopoverListFlex\n        $itemHeight={ITEM_HEIGHT}\n        $maxDisplayedItems={MAX_DISPLAYED_ITEMS}\n        direction=\"column\"\n        overflow=\"hidden\"\n      >\n        {menuTitle && (\n          <TitleCard borderBottom padding={3} sizing=\"border\">\n            <Box paddingX={1} sizing=\"border\">\n              <Text muted size={1} textOverflow=\"ellipsis\" weight=\"semibold\" title={menuTitle}>\n                {menuTitle}\n              </Text>\n            </Box>\n          </TitleCard>\n        )}\n\n        <TreeEditingBreadcrumbsMenu\n          collapsed={collapsed}\n          items={items}\n          onPathSelect={handlePathSelect}\n          selectedPath={selectedPath}\n        />\n      </PopoverListFlex>\n    </RootFlex>\n  )\n\n  const clonedButton = cloneElement(button, {\n    'aria-expanded': open,\n    'aria-haspopup': 'true',\n    'data-testid': 'tree-editing-breadcrumb-menu-button',\n    'id': 'tree-breadcrumb-menu-button',\n    'onClick': handleButtonClick,\n    'ref': setButtonElement,\n    'selected': open,\n  })\n\n  return (\n    <StyledPopover\n      constrainSize\n      content={content}\n      data-testid=\"tree-editing-breadcrumbs-menu-popover\"\n      fallbackPlacements={POPOVER_FALLBACK_PLACEMENTS}\n      onKeyDown={handlePopoverKeyDown}\n      open={open}\n      placement=\"bottom-start\"\n      portal\n      ref={rootElementRef}\n      referenceBoundary={parentElement}\n    >\n      {clonedButton}\n    </StyledPopover>\n  )\n}\n","import {ChevronDownIcon} from '@sanity/icons'\nimport {type Path} from '@sanity/types'\nimport {\n  Box,\n  // eslint-disable-next-line no-restricted-imports\n  Button, // Custom button needed, special padding support required\n  Flex,\n  Text,\n  useElementSize,\n} from '@sanity/ui'\n// eslint-disable-next-line camelcase\nimport {getTheme_v2, type Theme} from '@sanity/ui/theme'\nimport {isEqual} from 'lodash'\nimport {\n  type ForwardedRef,\n  forwardRef,\n  Fragment,\n  type PropsWithChildren,\n  useMemo,\n  useState,\n} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {SanityDefaultPreview} from '../../../../../preview/components/SanityDefaultPreview'\nimport {getSchemaTypeTitle} from '../../../../../schema/helpers'\nimport {useValuePreviewWithFallback} from '../../hooks'\nimport {type TreeEditingBreadcrumb} from '../../types'\nimport {TreeEditingBreadcrumbsMenuButton} from './TreeEditingBreadcrumbsMenuButton'\n\nconst MAX_LENGTH = 5\nconst EMPTY_ARRAY: [] = []\nconst SEPARATOR = '/'\n\nconst StyledButton = styled(Button)(({theme}: {theme: Theme}) => {\n  const {bold} = getTheme_v2(theme)?.font.text?.weights || {}\n\n  return css`\n    max-height: 1rem;\n    overflow: hidden;\n    min-width: 2ch;\n\n    &[data-active='true'] {\n      [data-ui='Text']:first-child {\n        font-weight: ${bold};\n      }\n    }\n  `\n})\n\nconst StyledText = styled(Text)`\n  overflow: hidden;\n  padding: 8px 0;\n`\n\ntype Item = TreeEditingBreadcrumb[] | TreeEditingBreadcrumb\n\ninterface MenuButtonProps {\n  item: TreeEditingBreadcrumb\n  onPathSelect: (path: Path) => void\n  isSelected: boolean\n}\n\nconst MenuButton = forwardRef(function MenuButton(\n  props: MenuButtonProps,\n  ref: ForwardedRef<HTMLButtonElement>,\n) {\n  const {item, onPathSelect, isSelected, ...rest} = props\n\n  const {value} = useValuePreviewWithFallback({\n    schemaType: item.schemaType,\n    value: item.value,\n  })\n\n  const title = value.title\n\n  // We check if the length is greater than 1 as the root item\n  // is also included in the children array.\n  const hasChildren = item.children && item.children?.length > 1\n\n  return (\n    <StyledButton\n      data-active={isSelected ? 'true' : 'false'}\n      mode=\"bleed\"\n      // eslint-disable-next-line react/jsx-no-bind\n      onClick={() => onPathSelect(item.path)}\n      padding={1}\n      ref={ref}\n      space={2}\n      title={title}\n      {...rest}\n    >\n      <Flex flex={1} align=\"center\" justify=\"flex-start\" gap={1} overflow=\"hidden\">\n        <SanityDefaultPreview title={title} media={value.media} layout=\"inline\" />\n\n        {hasChildren && (\n          <Text size={0}>\n            <ChevronDownIcon />\n          </Text>\n        )}\n      </Flex>\n    </StyledButton>\n  )\n})\n\nconst SeparatorItem = forwardRef(function SeparatorItem(\n  props: PropsWithChildren,\n  ref: ForwardedRef<HTMLDivElement>,\n) {\n  const {children} = props\n\n  return (\n    <Box ref={ref}>\n      <Text size={1}>{children}</Text>\n    </Box>\n  )\n})\n\ninterface TreeEditingBreadcrumbsProps {\n  items: TreeEditingBreadcrumb[]\n  onPathSelect: (path: Path) => void\n  selectedPath: Path\n}\n\nexport function TreeEditingBreadcrumbs(\n  props: TreeEditingBreadcrumbsProps,\n): React.JSX.Element | null {\n  const {items: itemsProp = EMPTY_ARRAY, onPathSelect, selectedPath} = props\n\n  const [rootElement, setRootElement] = useState<HTMLDivElement | null>(null)\n  const size = useElementSize(rootElement)\n\n  // Dynamically calculate the max length of the breadcrumbs\n  // based on the width of the container. If the length of the items\n  // is greater than the max length, the items will be grouped in an array\n  // and shown in the same breadcrumbs menu button (i.e. the \"...\" button).\n  const maxLength = useMemo(() => {\n    const w = size?.border.width\n\n    if (!w) return MAX_LENGTH\n    if (w < 500) return 3\n    if (w < 700) return 4\n\n    return MAX_LENGTH\n  }, [size?.border.width])\n\n  const items: Item[] = useMemo(() => {\n    const len = itemsProp.length\n    const beforeLength = Math.ceil(maxLength / 2)\n    const afterLength = Math.floor(maxLength / 2)\n\n    if (maxLength && len > maxLength) {\n      return [\n        ...itemsProp.slice(0, beforeLength - 1),\n        itemsProp.slice(beforeLength - 1, len - afterLength),\n        ...itemsProp.slice(len - afterLength),\n      ]\n    }\n\n    return itemsProp\n  }, [itemsProp, maxLength])\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 items are grouped in an array, those items are \"collapsed\" and should\n      // be grouped in the same breadcrumbs menu button (i.e. the \"...\" button).\n      if (Array.isArray(item)) {\n        return (\n          <Fragment key={key}>\n            <TreeEditingBreadcrumbsMenuButton\n              button={\n                <StyledButton mode=\"bleed\" padding={1}>\n                  <Flex overflow=\"hidden\">\n                    <StyledText size={1} weight=\"medium\" textOverflow=\"ellipsis\">\n                      ...\n                    </StyledText>\n                  </Flex>\n                </StyledButton>\n              }\n              collapsed\n              items={item}\n              onPathSelect={onPathSelect}\n              parentElement={rootElement}\n              selectedPath={selectedPath}\n            />\n\n            {showSeparator && <SeparatorItem>{SEPARATOR}</SeparatorItem>}\n          </Fragment>\n        )\n      }\n\n      // We check if the length is greater than 1 as the root item\n      // is also included in the children array.\n      const hasChildren = item.children && item.children?.length > 1\n\n      const isSelected = isEqual(item.path, selectedPath)\n\n      const button = <MenuButton item={item} isSelected={isSelected} onPathSelect={onPathSelect} />\n\n      return (\n        <Fragment key={key}>\n          {!hasChildren && button}\n\n          {hasChildren && (\n            <TreeEditingBreadcrumbsMenuButton\n              button={button}\n              items={item.children || EMPTY_ARRAY}\n              onPathSelect={onPathSelect}\n              menuTitle={getSchemaTypeTitle(item.schemaType)}\n              parentElement={rootElement}\n              // The selected path in the current menu is the path of the parent item.\n              // Therefore, we pass the parent item path as the selected path and\n              // not the selected path from the props.\n              selectedPath={item.path}\n            />\n          )}\n\n          {showSeparator && <SeparatorItem>{SEPARATOR}</SeparatorItem>}\n        </Fragment>\n      )\n    })\n  }, [items, selectedPath, onPathSelect, rootElement])\n\n  return (\n    <Flex align=\"center\" as=\"ol\" gap={2} ref={setRootElement}>\n      {nodes}\n    </Flex>\n  )\n}\n","import {Flex} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const FixedHeightFlex = styled(Flex).attrs({padding: 2, align: 'center', sizing: 'border'})`\n  height: 40px;\n  min-height: 40px;\n`\n","export const ITEM_HEIGHT = 51\nexport const MAX_DISPLAYED_ITEMS = 10\n","import {type Path} from '@sanity/types'\nimport {\n  Box,\n  // eslint-disable-next-line no-restricted-imports\n  Button, // Custom button needed, special children support required\n  Stack,\n  Text,\n} from '@sanity/ui'\nimport {isEqual} from 'lodash'\nimport {useCallback} from 'react'\n\nimport {CommandList} from '../../../../../components/commandList/CommandList'\nimport {useTranslation} from '../../../../../i18n/hooks/useTranslation'\nimport {SanityDefaultPreview} from '../../../../../preview/components/SanityDefaultPreview'\nimport {getSchemaTypeTitle} from '../../../../../schema/helpers'\nimport {supportsTouch} from '../../../../../util/supportsTouch'\nimport {useValuePreviewWithFallback} from '../../hooks'\nimport {type TreeEditingMenuItem} from '../../types'\nimport {ITEM_HEIGHT} from './constants'\n\ninterface ResultItemProps {\n  item: TreeEditingMenuItem\n  onPathSelect: (path: Path) => void\n  isFirst: boolean\n}\n\nfunction ResultItem(props: ResultItemProps): React.JSX.Element {\n  const {item, onPathSelect, isFirst} = props\n\n  const {value} = useValuePreviewWithFallback({\n    value: item.value,\n    schemaType: item.schemaType,\n  })\n\n  const title = value.title\n\n  return (\n    <Stack marginTop={isFirst ? undefined : 1}>\n      <Button\n        mode=\"bleed\"\n        // eslint-disable-next-line react/jsx-no-bind\n        onClick={() => onPathSelect(item.path)}\n      >\n        <Stack space={2} flex={1}>\n          <SanityDefaultPreview title={title} media={value.media} layout=\"inline\" />\n\n          <Box>\n            <Text muted size={0} textOverflow=\"ellipsis\">\n              {getSchemaTypeTitle(item.parentSchemaType)}\n            </Text>\n          </Box>\n        </Stack>\n      </Button>\n    </Stack>\n  )\n}\n\ninterface TreeEditingSearchMenuProps {\n  items: TreeEditingMenuItem[]\n  onPathSelect: (path: Path) => void\n  textInputElement: HTMLInputElement | null\n}\n\nexport function TreeEditingSearchMenu(props: TreeEditingSearchMenuProps): React.JSX.Element {\n  const {items, onPathSelect, textInputElement} = props\n  const {t} = useTranslation()\n\n  const renderItem = useCallback(\n    (item: TreeEditingMenuItem) => {\n      const isFirst = isEqual(item.path, items[0].path)\n\n      return <ResultItem isFirst={isFirst} item={item} onPathSelect={onPathSelect} />\n    },\n    [items, onPathSelect],\n  )\n\n  return (\n    <CommandList\n      activeItemDataAttr=\"data-hovered\"\n      ariaLabel={t('tree-editing-dialog.search.menu-label')}\n      autoFocus={supportsTouch ? undefined : 'input'}\n      inputElement={textInputElement}\n      itemHeight={ITEM_HEIGHT}\n      items={items}\n      overscan={5}\n      padding={1}\n      renderItem={renderItem}\n    />\n  )\n}\n","import {SearchIcon} from '@sanity/icons'\nimport {type Path} from '@sanity/types'\nimport {Card, Flex, Stack, Text, TextInput} from '@sanity/ui'\nimport {type ChangeEvent, type KeyboardEvent, useCallback, useMemo, useState} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {Popover, type PopoverProps} from '../../../../../../ui-components'\nimport {useTranslation} from '../../../../../i18n/hooks/useTranslation'\nimport {useSearchableList} from '../../hooks'\nimport {type TreeEditingMenuItem} from '../../types'\nimport {ITEM_HEIGHT, MAX_DISPLAYED_ITEMS} from './constants'\nimport {TreeEditingSearchMenu} from './TreeEditingSearchMenu'\nimport {treeEditingSearch} from './utils'\n\nconst POPOVER_FALLBACK_PLACEMENTS: PopoverProps['fallbackPlacements'] = ['bottom-start']\n\nconst RootFlex = styled(Flex)``\n\nconst PopoverListFlex = styled(Flex)<{\n  $maxDisplayedItems: number\n  $itemHeight: number\n}>((props) => {\n  const {$maxDisplayedItems, $itemHeight} = props\n\n  return css`\n    --item-height: ${$itemHeight}px;\n    --max-items: ${$maxDisplayedItems};\n    --list-padding: 0.5rem;\n\n    position: relative;\n    max-height: calc(var(--item-height) * var(--max-items) + var(--list-padding));\n    min-height: calc((var(--item-height) * 1));\n    width: 100%;\n  `\n})\n\nconst StyledPopover = styled(Popover)(() => {\n  return css`\n    [data-ui='Popover__wrapper'] {\n      min-width: 250px;\n      display: flex;\n      flex-direction: column;\n      border-radius: ${({theme}) => theme.sanity.radius[3]}px;\n      position: relative;\n      overflow: hidden;\n      overflow: clip;\n    }\n  `\n})\n\nconst StyledTextInput = styled(TextInput)`\n  border-radius: inherit;\n`\n\ninterface TreeEditingSearchProps {\n  items: TreeEditingMenuItem[]\n  onPathSelect: (path: Path) => void\n}\n\nexport function TreeEditingSearch(props: TreeEditingSearchProps): React.JSX.Element {\n  const {items, onPathSelect} = props\n\n  const [textInputElement, setTextInputElement] = useState<HTMLInputElement | null>(null)\n  const [query, setQuery] = useState<string>('')\n  const {t} = useTranslation()\n\n  const hasSearchQuery = query.length > 0\n\n  const searchableList = useSearchableList(items)\n\n  const filteredList = useMemo(\n    () => treeEditingSearch(searchableList, query),\n    [query, searchableList],\n  )\n\n  const resetSearch = useCallback(() => setQuery(''), [])\n\n  const handleSearchChange = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n    setQuery(event.target.value)\n  }, [])\n\n  const handlePathSelect = useCallback(\n    (path: Path) => {\n      onPathSelect(path)\n      resetSearch()\n    },\n    [onPathSelect, resetSearch],\n  )\n\n  const handleSearchKeyDown = useCallback(\n    (event: KeyboardEvent<HTMLInputElement>) => {\n      if (event.key === 'Escape') {\n        resetSearch()\n        textInputElement?.focus()\n      }\n    },\n    [resetSearch, textInputElement],\n  )\n\n  const handleSearchBlur = useCallback(() => {\n    // Run this in the next frame to avoid clearing the search query\n    // when the user clicks on a search result\n    requestAnimationFrame(() => {\n      resetSearch()\n    })\n  }, [resetSearch])\n\n  const content = useMemo(() => {\n    if (filteredList.length === 0) {\n      return (\n        <Card>\n          <Stack padding={4} sizing=\"border\" space={3}>\n            <Text align=\"center\" muted size={1} weight=\"medium\">\n              {t('tree-editing-dialog.search.no-results-title')}\n            </Text>\n          </Stack>\n        </Card>\n      )\n    }\n\n    return (\n      <RootFlex direction=\"column\" flex={1} height=\"fill\">\n        <Card>\n          <PopoverListFlex\n            $itemHeight={ITEM_HEIGHT}\n            $maxDisplayedItems={MAX_DISPLAYED_ITEMS}\n            direction=\"column\"\n            overflow=\"hidden\"\n          >\n            <TreeEditingSearchMenu\n              items={filteredList}\n              onPathSelect={handlePathSelect}\n              textInputElement={textInputElement}\n            />\n          </PopoverListFlex>\n        </Card>\n      </RootFlex>\n    )\n  }, [filteredList, handlePathSelect, textInputElement, t])\n\n  return (\n    <StyledPopover\n      constrainSize\n      content={content}\n      fallbackPlacements={POPOVER_FALLBACK_PLACEMENTS}\n      matchReferenceWidth\n      open={hasSearchQuery}\n      placement=\"bottom-start\"\n      portal\n    >\n      <Card radius={3}>\n        <StyledTextInput\n          fontSize={1}\n          icon={SearchIcon}\n          onBlur={handleSearchBlur}\n          onChange={handleSearchChange}\n          onKeyDown={handleSearchKeyDown}\n          placeholder={t('tree-editing-dialog.search-placeholder')}\n          ref={setTextInputElement}\n          value={query}\n        />\n      </Card>\n    </StyledPopover>\n  )\n}\n","import {type Path, type PathSegment} from '@sanity/types'\n\n/**\n * Check if the item is selected\n */\nexport function isArrayItemSelected(\n  itemPath: Path | PathSegment,\n  path: Path | PathSegment,\n): boolean {\n  return JSON.stringify(itemPath) === JSON.stringify(path)\n}\n\n/**\n * Check if the path is an array item path\n */\nexport function isArrayItemPath(path: Path): boolean {\n  if (path.length === 0) return false\n\n  // Check if the last segment in the path has a key\n  // at this point it will never be at path 0 since this method is not meant to be used for the document level\n  return path[path.length - 1].hasOwnProperty('_key')\n}\n\n/**\n * Check if the item should be in the breadcrumb\n */\nexport function shouldBeInBreadcrumb(itemPath: Path, path: Path): boolean {\n  return (\n    itemPath.every((segment, index) => {\n      return isArrayItemSelected(path[index], segment)\n    }) && isArrayItemPath(itemPath)\n  )\n}\n\n/**\n * Get the relative path.\n * The relative path is used to determine show fields that should be shown in the form.\n */\nexport function getRelativePath(path: Path): Path {\n  return isArrayItemPath(path) ? path : path.slice(0, path.length - 1)\n}\n","import {type TreeEditingMenuItem} from '../../types'\n\nexport function getSiblingHasChildren(items: TreeEditingMenuItem[]): boolean {\n  return items.some((sibling) => sibling.children && sibling.children.length > 0)\n}\n","import {hues} from '@sanity/color'\nimport {ChevronRightIcon, StackCompactIcon} from '@sanity/icons'\nimport {type Path} from '@sanity/types'\nimport {\n  // eslint-disable-next-line no-restricted-imports\n  Button, // Custom button needed, special children support required\n  Card,\n  Flex,\n  Stack,\n  Text,\n} from '@sanity/ui'\n// eslint-disable-next-line camelcase\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {toString} from '@sanity/util/paths'\nimport {isEqual} from 'lodash'\nimport {useCallback, useEffect, useMemo, useState} from 'react'\nimport {useTranslation} from 'react-i18next'\nimport scrollIntoViewIfNeeded, {type StandardBehaviorOptions} from 'scroll-into-view-if-needed'\nimport {css, styled} from 'styled-components'\n\nimport {SanityDefaultPreview} from '../../../../../preview/components/SanityDefaultPreview'\nimport {getSchemaTypeTitle} from '../../../../../schema/helpers'\nimport {useValuePreviewWithFallback} from '../../hooks'\nimport {type TreeEditingMenuItem as TreeEditingMenuItemType} from '../../types'\nimport {isArrayItemPath} from '../../utils/build-tree-editing-state/utils'\nimport {getSiblingHasChildren} from './utils'\n\nfunction hasOpenChild(item: TreeEditingMenuItemType, selectedPath: Path | null): boolean {\n  return (\n    item.children?.some(\n      (child) => isEqual(child.path, selectedPath) || hasOpenChild(child, selectedPath),\n    ) || false\n  )\n}\n\nconst SCROLL_BEHAVIOR_OPTIONS: StandardBehaviorOptions = {\n  block: 'center',\n  behavior: 'smooth',\n  scrollMode: 'if-needed',\n}\n\nconst AnimateChevronIcon = styled(ChevronRightIcon)`\n  transition: transform 0.2s ease;\n\n  &[data-expanded='true'] {\n    transform: rotate(90deg);\n  }\n`\n\n// This component is used to keep buttons aligned in the tree menu\n// when the expand button is not present on an item.\n// The width should match the width of the expand button.\nconst Spacer = styled.div`\n  min-width: 23px;\n  max-width: 23px;\n`\n\nconst ChildStack = styled(Stack)(({theme}) => {\n  const space = getTheme_v2(theme)?.space[3] || 0\n  const isDark = getTheme_v2(theme)?.color._dark\n  const borderColor = hues.gray[isDark ? 900 : 200].hex\n\n  return css`\n    margin-left: ${space + 2}px;\n    box-sizing: border-box;\n    border-left: 1px solid ${borderColor};\n  `\n})\n\nconst ItemFlex = styled(Flex)(({theme}) => {\n  const defaultHoverBg = getTheme_v2(theme)?.color.button.bleed.default.hovered.bg\n  const selectedHoverBg = getTheme_v2(theme)?.color.button.bleed.default.pressed.bg\n  const selectedBg = getTheme_v2(theme)?.color.button.bleed.default.selected.bg\n\n  return css`\n    padding: 2px;\n    padding-right: 3px;\n    box-sizing: border-box;\n    transition: inherit;\n    border-radius: ${getTheme_v2(theme).radius[2]}px;\n\n    &[data-selected='true'] {\n      background-color: ${selectedBg};\n    }\n\n    [data-ui='ExpandButton'],\n    [data-ui='NavigateButton'] {\n      transition: inherit;\n      background-color: inherit;\n      box-shadow: unset;\n    }\n\n    @media (hover: hover) {\n      &:hover {\n        &[data-selected='false'] {\n          background-color: ${defaultHoverBg};\n          border-radius: ${getTheme_v2(theme).radius[2]}px;\n\n          [data-ui='ExpandButton']:hover {\n            background-color: ${selectedHoverBg};\n          }\n        }\n\n        [data-ui='ExpandButton']:hover {\n          background-color: ${defaultHoverBg};\n        }\n      }\n    }\n  `\n})\n\ninterface TreeEditingMenuItemProps {\n  item: TreeEditingMenuItemType\n  onPathSelect: (path: Path) => void\n  selectedPath: Path | null\n  siblingHasChildren?: boolean\n}\n\nexport function TreeEditingMenuItem(props: TreeEditingMenuItemProps): React.JSX.Element {\n  const {item, onPathSelect, selectedPath, siblingHasChildren} = props\n  const {children} = item\n  const hasChildren = children && children.length > 0\n\n  const [open, setOpen] = useState<boolean>(false)\n  const [rootElement, setRootElement] = useState<HTMLElement | null>(null)\n\n  const {t} = useTranslation()\n\n  const {value} = useValuePreviewWithFallback({\n    schemaType: item.schemaType,\n    value: item.value,\n  })\n\n  const selected = useMemo(() => isEqual(item.path, selectedPath), [item.path, selectedPath])\n  const isArrayParent = useMemo(() => !isArrayItemPath(item.path), [item.path])\n  const stringPath = useMemo(() => toString(item.path), [item.path])\n\n  const title = useMemo(() => {\n    // If the item is an array parent, we want to show the schema type title\n    if (isArrayParent) {\n      return getSchemaTypeTitle(item.schemaType)\n    }\n\n    // Else, we show the preview title\n    return value.title\n  }, [isArrayParent, item.schemaType, value.title])\n\n  const icon = useMemo(() => {\n    if (!hasChildren) return null\n\n    return <AnimateChevronIcon data-expanded={open ? 'true' : 'false'} />\n  }, [hasChildren, open])\n\n  const media = useMemo(() => {\n    if (isArrayParent) {\n      return <StackCompactIcon />\n    }\n\n    return value.media\n  }, [isArrayParent, value.media])\n\n  const handleClick = useCallback(() => onPathSelect(item.path), [item.path, onPathSelect])\n\n  const handleExpandClick = useCallback(() => setOpen((v) => !v), [])\n\n  useEffect(() => {\n    const hasOpen = hasOpenChild(item, selectedPath)\n\n    if (hasOpen) {\n      setOpen(true)\n    }\n  }, [item, selectedPath])\n\n  // Scroll to the selected item\n  useEffect(() => {\n    if (!rootElement || !selected) return\n\n    scrollIntoViewIfNeeded(rootElement, SCROLL_BEHAVIOR_OPTIONS)\n  }, [rootElement, selected])\n\n  return (\n    <Stack\n      aria-expanded={open}\n      as=\"li\"\n      key={stringPath}\n      ref={setRootElement}\n      role=\"treeitem\"\n      space={1}\n    >\n      <Card\n        data-as=\"button\"\n        data-testid=\"tree-editing-menu-item\"\n        overflow=\"hidden\"\n        radius={2}\n        tone=\"inherit\"\n      >\n        <ItemFlex\n          align=\"center\"\n          data-selected={selected}\n          data-testid=\"tree-editing-menu-item-content\"\n        >\n          {icon && (\n            <Button\n              aria-label={`${open ? t('tree-editing-dialog.sidebar.action.collapse') : t('tree-editing-dialog.sidebar.action.expand')} ${title}`}\n              data-testid={`tree-editing-menu-expand-button-${stringPath}`}\n              data-ui=\"ExpandButton\"\n              mode=\"bleed\"\n              onClick={handleExpandClick}\n              padding={2}\n            >\n              <Text size={0} muted>\n                {icon}\n              </Text>\n            </Button>\n          )}\n\n          {!icon && siblingHasChildren && <Spacer />}\n\n          <Stack flex={1}>\n            <Button\n              data-testid={`tree-editing-menu-navigate-button-${stringPath}`}\n              data-ui=\"NavigateButton\"\n              mode=\"bleed\"\n              onClick={handleClick}\n              padding={1}\n              title={title}\n            >\n              <Flex align=\"center\">\n                <SanityDefaultPreview layout=\"inline\" media={media} title={title} />\n              </Flex>\n            </Button>\n          </Stack>\n        </ItemFlex>\n      </Card>\n\n      {open && hasChildren && (\n        <ChildStack flex={1} forwardedAs=\"ul\" paddingLeft={1} role=\"group\" space={1}>\n          {children.map((child) => {\n            const childSiblingHasChildren = getSiblingHasChildren(children)\n\n            return (\n              <TreeEditingMenuItem\n                item={child}\n                key={toString(child.path)}\n                onPathSelect={onPathSelect}\n                selectedPath={selectedPath}\n                siblingHasChildren={childSiblingHasChildren}\n              />\n            )\n          })}\n        </ChildStack>\n      )}\n    </Stack>\n  )\n}\n","import {type Path} from '@sanity/types'\nimport {Stack} from '@sanity/ui'\nimport {toString} from '@sanity/util/paths'\nimport {memo} from 'react'\n\nimport {type TreeEditingMenuItem as TreeEditingMenuItemType} from '../../types'\nimport {TreeEditingMenuItem} from './TreeEditingMenuItem'\nimport {getSiblingHasChildren} from './utils'\n\ninterface TreeEditingMenuProps {\n  items: TreeEditingMenuItemType[]\n  onPathSelect: (path: Path) => void\n  selectedPath: Path | null\n}\n\nexport const TreeEditingMenu = memo(function TreeEditingMenu(\n  props: TreeEditingMenuProps,\n): React.JSX.Element {\n  const {items, onPathSelect, selectedPath} = props\n\n  return (\n    <Stack as=\"ul\" data-testid=\"tree-editing-menu\" role=\"tree\" space={2}>\n      {items.map((item) => {\n        const siblingHasChildren = getSiblingHasChildren(items)\n\n        return (\n          <TreeEditingMenuItem\n            item={item}\n            key={toString(item.path)}\n            onPathSelect={onPathSelect}\n            selectedPath={selectedPath}\n            siblingHasChildren={siblingHasChildren}\n          />\n        )\n      })}\n    </Stack>\n  )\n})\n","import {PanelLeftIcon} from '@sanity/icons'\nimport {type Path} from '@sanity/types'\nimport {Box, Card, Stack, Text} from '@sanity/ui'\nimport {AnimatePresence, motion, type Variants} from 'framer-motion'\nimport {memo, useMemo} from 'react'\nimport {useTranslation} from 'react-i18next'\nimport {styled} from 'styled-components'\n\nimport {Button} from '../../../../../../ui-components'\nimport {Resizable} from '../../../../../components/resizer/Resizable'\nimport {type TreeEditingMenuItem} from '../../types'\nimport {TreeEditingSearch} from '../search'\nimport {TreeEditingMenu} from '../tree-menu'\nimport {FixedHeightFlex} from './styles'\n\nconst ANIMATION_VARIANTS: Variants = {\n  initial: {opacity: 0},\n  animate: {opacity: 1},\n  exit: {opacity: 0},\n}\n\nconst SidebarCard = styled(Card)`\n  flex-direction: column;\n`\n\nconst SidebarStack = styled(motion.create(Stack))`\n  overflow-x: hidden;\n`\n\nconst SearchStack = styled(Stack)`\n  min-height: max-content;\n`\n\ninterface TreeEditingLayoutSidebarProps {\n  items: TreeEditingMenuItem[]\n  onOpenToggle: () => void\n  onPathSelect: (path: Path) => void\n  open: boolean\n  selectedPath: Path\n  title: string\n}\n\nexport const TreeEditingLayoutSidebar = memo(function TreeEditingLayoutSidebar(\n  props: TreeEditingLayoutSidebarProps,\n) {\n  const {items, onPathSelect, selectedPath, onOpenToggle, open, title} = props\n  const {t} = useTranslation()\n\n  const tooltipProps = useMemo(\n    () => ({\n      content: open\n        ? t('tree-editing-dialog.sidebar.action.close')\n        : t('tree-editing-dialog.sidebar.action.open'),\n    }),\n    [open, t],\n  )\n\n  const content = (\n    <SidebarCard\n      borderRight={!open}\n      data-testid=\"tree-editing-sidebar\"\n      data-ui=\"SidebarCard\"\n      display=\"flex\"\n      forwardedAs=\"aside\"\n      height=\"fill\"\n      overflow=\"hidden\"\n      tone=\"transparent\"\n    >\n      <FixedHeightFlex align=\"center\" gap={2}>\n        <Button\n          data-testid=\"tree-editing-sidebar-toggle\"\n          icon={PanelLeftIcon}\n          mode=\"bleed\"\n          onClick={onOpenToggle}\n          selected={open}\n          tooltipProps={tooltipProps}\n        />\n\n        {open && (\n          <Box flex={1}>\n            <Text size={1} muted weight=\"medium\" textOverflow=\"ellipsis\">\n              {title}\n            </Text>\n          </Box>\n        )}\n      </FixedHeightFlex>\n\n      {open && (\n        <SearchStack padding={2} sizing=\"border\">\n          <TreeEditingSearch items={items} onPathSelect={onPathSelect} />\n        </SearchStack>\n      )}\n\n      <AnimatePresence mode=\"wait\">\n        {open && (\n          <SidebarStack\n            animate=\"animate\"\n            exit=\"exit\"\n            initial=\"initial\"\n            overflow=\"auto\"\n            padding={3}\n            sizing=\"border\"\n            variants={ANIMATION_VARIANTS}\n          >\n            <TreeEditingMenu\n              items={items}\n              onPathSelect={onPathSelect}\n              selectedPath={selectedPath}\n            />\n          </SidebarStack>\n        )}\n      </AnimatePresence>\n    </SidebarCard>\n  )\n\n  if (open) {\n    return (\n      <Resizable maxWidth={450} minWidth={150} initialWidth={250}>\n        {content}\n      </Resizable>\n    )\n  }\n\n  return content\n})\n","import {type Path} from '@sanity/types'\nimport {Card, Container, Flex} from '@sanity/ui'\nimport {memo, type ReactNode, useCallback, useRef, useState} from 'react'\n\nimport {PresenceOverlay} from '../../../../../presence/overlay/PresenceOverlay'\nimport {VirtualizerScrollInstanceProvider} from '../../../../inputs/arrays/ArrayOfObjectsInput/List/VirtualizerScrollInstanceProvider'\nimport {type TreeEditingBreadcrumb, type TreeEditingMenuItem} from '../../types'\nimport {TreeEditingBreadcrumbs} from '../breadcrumbs'\nimport {FixedHeightFlex} from './styles'\nimport {TreeEditingLayoutSidebar} from './TreeEditingLayoutSidebar'\n\nconst PRESENCE_MARGINS: [number, number, number, number] = [0, 0, 1, 0]\n\ninterface TreeEditingLayoutProps {\n  breadcrumbs: TreeEditingBreadcrumb[]\n  children: ReactNode\n  footer?: ReactNode\n  items: TreeEditingMenuItem[]\n  onPathSelect: (path: Path) => void\n  selectedPath: Path\n  setScrollElement?: (ref: HTMLDivElement | null) => void\n  title: string\n}\n\nexport const TreeEditingLayout = memo(function TreeEditingLayout(\n  props: TreeEditingLayoutProps,\n): React.JSX.Element {\n  const {\n    breadcrumbs,\n    children,\n    footer,\n    items,\n    onPathSelect,\n    selectedPath,\n    setScrollElement: setParentScrollElement,\n    title,\n  } = props\n  const [scrollElement, setScrollElement] = useState<HTMLDivElement | null>(null)\n  const containerElementRef = useRef<HTMLDivElement | null>(null)\n\n  const [open, setOpen] = useState<boolean>(false)\n\n  const toggleOpen = useCallback(() => setOpen((v) => !v), [])\n\n  const handleSetScrollElementRef = useCallback(\n    (el: HTMLDivElement | null) => {\n      setScrollElement(el)\n      setParentScrollElement?.(el)\n    },\n    [setParentScrollElement],\n  )\n\n  return (\n    <Flex height=\"fill\" overflow=\"hidden\">\n      <TreeEditingLayoutSidebar\n        items={items}\n        onOpenToggle={toggleOpen}\n        onPathSelect={onPathSelect}\n        open={open}\n        selectedPath={selectedPath}\n        title={title}\n      />\n\n      <Flex direction=\"column\" flex={1} overflow=\"hidden\">\n        <FixedHeightFlex align=\"center\" sizing=\"border\" gap={2} paddingX={4}>\n          <Flex flex={1}>\n            <TreeEditingBreadcrumbs\n              items={breadcrumbs}\n              onPathSelect={onPathSelect}\n              selectedPath={selectedPath}\n            />\n          </Flex>\n        </FixedHeightFlex>\n\n        <Card flex={1} id=\"tree-editing-form\" overflow=\"auto\" ref={handleSetScrollElementRef}>\n          {children && (\n            <VirtualizerScrollInstanceProvider\n              containerElement={containerElementRef}\n              scrollElement={scrollElement}\n            >\n              <Container\n                width={1}\n                ref={containerElementRef}\n                paddingX={5}\n                paddingY={5}\n                sizing=\"border\"\n              >\n                <PresenceOverlay margins={PRESENCE_MARGINS}>{children}</PresenceOverlay>\n              </Container>\n            </VirtualizerScrollInstanceProvider>\n          )}\n        </Card>\n\n        {footer}\n      </Flex>\n    </Flex>\n  )\n})\n","import {type Path} from '@sanity/types'\n\n/**\n * Get the root path of the focus path.\n * The root path is the path until the first key segment appears.\n *\n * Example:\n * ```js\n * const rootPath = getRootPath(['object', 'array', { _key: '123' }])\n * // => ['object','array']\n * ```\n */\nexport function getRootPath(path: Path): Path {\n  const keyedSegmentIndex = path.findIndex((seg) => seg?.hasOwnProperty('_key'))\n\n  if (keyedSegmentIndex === -1) return path\n\n  return path.slice(0, keyedSegmentIndex)\n}\n","import {isObjectSchemaType, type ObjectField, type SchemaType} from '@sanity/types'\nimport {fromString, toString} from '@sanity/util/paths'\n\nexport function getSchemaField(\n  schemaType: SchemaType,\n  fieldPath: string,\n): ObjectField<SchemaType> | undefined {\n  if (!fieldPath) return undefined\n\n  const paths = 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 = 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","import {type ArraySchemaType, type SchemaType} from '@sanity/types'\nimport {resolveTypeName} from '@sanity/util/content'\n\nexport function getItemType(arrayType: ArraySchemaType, item: unknown): SchemaType | undefined {\n  const itemTypeName = resolveTypeName(item)\n\n  return itemTypeName === 'object' && arrayType.of.length === 1\n    ? arrayType.of[0]\n    : arrayType.of.find((memberType) => memberType.name === itemTypeName)\n}\n\nexport function getPrimitiveItemType(\n  arrayType: ArraySchemaType,\n  item: unknown,\n): SchemaType | undefined {\n  const itemTypeName = resolveTypeName(item)\n\n  return arrayType?.of.find(\n    (memberType) => memberType.name === itemTypeName || memberType.jsonType === itemTypeName,\n  )\n}\n","import {\n  isArrayOfBlocksSchemaType,\n  isArrayOfObjectsSchemaType,\n  isObjectSchemaType,\n  type ObjectField,\n  type Path,\n  type SchemaType,\n} from '@sanity/types'\n\n/**\n * Find the paths to array schema types in a list of fields\n *\n * Example:\n * ```js\n * const paths = findArrayTypePaths(objectSchemaType.fields)\n *\n * // => [['field1', 'field2', 'arrayField'], ['field1', 'field2', 'arrayField2']]\n * ```\n */\nexport function findArrayTypePaths(fields: ObjectField<SchemaType>[]): Path[] {\n  // Array to store paths to array schema types\n  const arrayPaths: Path[] = []\n\n  // Initialize an empty path to keep track of the current path in the schema tree\n  let currentPath: Path = []\n\n  // Recursive function to check fields for array schema types\n  function checkFields(nestedFields: ObjectField<SchemaType>[]) {\n    nestedFields.forEach((field) => {\n      // Create a new path by extending the current path with the current field's name\n      const newPath = [...currentPath, field.name]\n\n      // If the field type is an array, add the new path to the arrayPaths array\n      if (isArrayOfObjectsSchemaType(field.type) && !isArrayOfBlocksSchemaType(field.type)) {\n        arrayPaths.push(newPath)\n      }\n\n      // If the field type is an object, recursively check its fields\n      if (isObjectSchemaType(field.type)) {\n        // Update the current path for the nested object\n        currentPath = newPath\n\n        // Recursively check the fields of the nested object\n        checkFields(field.type.fields)\n\n        // Reset the path after recursion to backtrack\n        currentPath = currentPath.slice(0, -1)\n      }\n    })\n  }\n\n  // Start checking from the top-level fields\n  checkFields(fields)\n\n  // Return the array of paths to array schema types\n  return arrayPaths\n}\n","import {type ArraySchemaType, isReferenceSchemaType, type Path} from '@sanity/types'\nimport {isEqual} from 'lodash'\n\nimport {EMPTY_ARRAY} from '../../../../../util/empty'\nimport {getItemType} from '../../../../store/utils/getItemType'\nimport {type TreeEditingBreadcrumb} from '../../types'\n\ninterface BuildBreadcrumbsStateProps {\n  arraySchemaType: ArraySchemaType\n  arrayValue: Record<string, unknown>[]\n  itemPath: Path\n  parentPath: Path\n}\n\nexport function buildBreadcrumbsState(props: BuildBreadcrumbsStateProps): TreeEditingBreadcrumb {\n  const {arraySchemaType, arrayValue, itemPath, parentPath} = props\n\n  const items: TreeEditingBreadcrumb[] = arrayValue\n    .map((arrayItem) => {\n      const nestedItemPath = [...parentPath, {_key: arrayItem._key}] as Path\n\n      const itemType = getItemType(arraySchemaType, arrayItem)\n      const isReference = isReferenceSchemaType(itemType)\n\n      // Don't add reference items to the breadcrumbs\n      // or items without a type\n      if (isReference || !itemType) return null\n\n      return {\n        children: EMPTY_ARRAY,\n        parentSchemaType: arraySchemaType,\n        path: nestedItemPath,\n        schemaType: itemType,\n        value: arrayItem,\n      } satisfies TreeEditingBreadcrumb\n    })\n    .filter(Boolean) as TreeEditingBreadcrumb[]\n\n  const selectedItem = items.find((item) => isEqual(item.path, itemPath)) as TreeEditingBreadcrumb\n\n  return {\n    children: items,\n    parentSchemaType: arraySchemaType,\n    path: itemPath,\n    schemaType: selectedItem.schemaType,\n    value: selectedItem.value,\n  }\n}\n","import {\n  type ArraySchemaType,\n  isArrayOfBlocksSchemaType,\n  isArrayOfObjectsSchemaType,\n  isObjectSchemaType,\n  isPrimitiveSchemaType,\n  isReferenceSchemaType,\n  type ObjectField,\n  type ObjectSchemaType,\n  type Path,\n  type SchemaType,\n} from '@sanity/types'\nimport {toString} from '@sanity/util/paths'\n\nimport {getValueAtPath} from '../../../../../field/paths/helpers'\nimport {EMPTY_ARRAY} from '../../../../../util/empty'\nimport {getItemType} from '../../../../store/utils/getItemType'\nimport {type TreeEditingBreadcrumb, type TreeEditingMenuItem} from '../../types'\nimport {findArrayTypePaths} from '../findArrayTypePaths'\nimport {getSchemaField} from '../getSchemaField'\nimport {buildBreadcrumbsState} from './buildBreadcrumbsState'\nimport {type RecursiveProps, type TreeEditingState} from './buildTreeEditingState'\nimport {getRelativePath, isArrayItemSelected, shouldBeInBreadcrumb} from './utils'\n\ninterface BuildArrayState {\n  /** The schema type of the array field  */\n  arraySchemaType: ArraySchemaType\n  /** The value of the array field */\n  arrayValue: Record<string, unknown>[]\n  /**  The value of the document */\n  documentValue: unknown\n  /** The current `openPath` */\n  openPath: Path\n  /** The recursive function to build the tree editing state for nested fields */\n  recursive: (props: RecursiveProps) => TreeEditingState\n  /** The root path of the array */\n  rootPath: Path\n}\n\n/**\n * Build the tree editing state for an array field.\n */\nexport function buildArrayState(props: BuildArrayState): TreeEditingState {\n  const {arraySchemaType, arrayValue, documentValue, openPath, rootPath, recursive} = props\n\n  let relativePath: Path = []\n  const menuItems: TreeEditingMenuItem[] = []\n  const breadcrumbs: TreeEditingBreadcrumb[] = []\n\n  // If tree editing is disabled for the array field, return early.\n  if (arraySchemaType.options?.treeEditing === false) {\n    return {\n      breadcrumbs,\n      menuItems,\n      relativePath,\n      rootTitle: '',\n    }\n  }\n\n  // Iterate over the values of the array field.\n  arrayValue.forEach((item) => {\n    // Construct the path to the array item.\n    const itemPath = [...rootPath, {_key: item._key}] as Path\n\n    // Get the schema field for the array item.\n    const itemSchemaField = getItemType(arraySchemaType, item) as ObjectSchemaType\n\n    if (!itemSchemaField) return\n    if (isReferenceSchemaType(itemSchemaField)) return\n    if (itemSchemaField?.options?.treeEditing === false) return\n\n    const childrenFields = itemSchemaField?.fields || []\n    const childrenMenuItems: TreeEditingMenuItem[] = []\n\n    if (shouldBeInBreadcrumb(itemPath, openPath)) {\n      const breadcrumbsResult = buildBreadcrumbsState({\n        arraySchemaType,\n        arrayValue,\n        itemPath,\n        parentPath: rootPath,\n      })\n\n      breadcrumbs.push(breadcrumbsResult)\n    }\n\n    // Iterate over the fields of the array item to resolve any nested fields.\n    childrenFields.forEach((childField) => {\n      if (childField?.type?.options?.treeEditing === false) return\n\n      // Construct the path to the child field.\n      const childPath = [...itemPath, childField.name] as Path\n\n      // Get the value of the child field.\n      const childValue = getValueAtPath(documentValue, childPath)\n\n      if (isArrayItemSelected(childPath, openPath)) {\n        relativePath = getRelativePath(childPath)\n      }\n\n      // If the child field is an object field, check if it contains any array fields.\n      // If there are array fields within the child field, recursively build the tree\n      // editing state for them.\n      if (isObjectSchemaType(childField.type)) {\n        // Find the paths of any array fields within the child field.\n        const arrayPaths = findArrayTypePaths(childField.type.fields)\n\n        // If there are no array fields within the child field, return early.\n        if (arrayPaths.length === 0) return\n\n        // Iterate over the paths of the array fields within the child field.\n        arrayPaths.forEach((arrayPath) => {\n          // Construct the path to the array field.\n          const fieldPath = [...childPath, ...arrayPath] as Path\n\n          // Get the schema field for the array field.\n          const nestedArrayField = getSchemaField(\n            childField.type,\n            toString(arrayPath),\n          ) as ObjectField<SchemaType>\n\n          // Get the value of the array field.\n          const arrayFieldValue_ = getValueAtPath(documentValue, fieldPath)\n          const arrayFieldValue = Array.isArray(arrayFieldValue_) ? arrayFieldValue_ : []\n\n          // If the array field has no value or tree editing is disabled, return early.\n          if (!arrayFieldValue.length) return\n          if (nestedArrayField.type.options?.treeEditing === false) return\n\n          // Update the relative path if the array field is selected.\n          if (isArrayItemSelected(fieldPath, openPath)) {\n            relativePath = getRelativePath(fieldPath)\n          }\n\n          // Recursively build the tree editing state for the array field.\n          const nestedArrayState = recursive({\n            documentValue,\n            path: fieldPath,\n            schemaType: nestedArrayField as ObjectSchemaType,\n          })\n\n          // Add the state of the array field to the children menu items.\n          childrenMenuItems.push({\n            children: nestedArrayState.menuItems,\n            parentSchemaType: childField.type,\n            path: fieldPath,\n            schemaType: nestedArrayField.type,\n            value: arrayFieldValue,\n          })\n        })\n      }\n\n      const isPortableText = isArrayOfBlocksSchemaType(childField.type)\n      const isValid = isArrayOfObjectsSchemaType(childField.type) && childValue && !isPortableText\n\n      if (isValid) {\n        if (shouldBeInBreadcrumb(childPath, openPath)) {\n          const breadcrumbsResult = buildBreadcrumbsState({\n            arraySchemaType: childField.type as ArraySchemaType,\n            arrayValue: childValue as Record<string, unknown>[],\n            itemPath: childPath,\n            parentPath: itemPath,\n          })\n\n          breadcrumbs.push(breadcrumbsResult)\n        }\n\n        const childState = recursive({\n          documentValue,\n          path: childPath,\n          schemaType: childField as ObjectSchemaType,\n        })\n\n        childrenMenuItems.push({\n          children: childState?.menuItems || EMPTY_ARRAY,\n          parentSchemaType: itemSchemaField,\n          path: childPath,\n          schemaType: childField as ObjectSchemaType,\n          value: childValue,\n        })\n\n        return\n      }\n\n      // If `openPath` points to an array field within a portable text field,\n      // set `relativePath` to the parent of the portable text field.\n      // This ensures that the tree editing dialog opens at the parent level\n      // of the portable text field.\n      // Portable text fields manage their own dialogs, so we open the tree editing\n      // dialog for the parent item and let the portable text field handle its\n      // dialogs via `openPath`.\n      if (isPortableText && toString(openPath).startsWith(toString(childPath))) {\n        relativePath = getRelativePath(childPath)\n      }\n    })\n\n    if (isArrayItemSelected(itemPath, openPath)) {\n      relativePath = getRelativePath(itemPath)\n    }\n\n    if (!isPrimitiveSchemaType(itemSchemaField?.type)) {\n      menuItems.push({\n        children: childrenMenuItems,\n        parentSchemaType: arraySchemaType,\n        path: itemPath as Path,\n        schemaType: itemSchemaField as ObjectSchemaType,\n        value: item,\n      })\n    }\n  })\n\n  return {\n    breadcrumbs,\n    menuItems,\n    relativePath,\n    rootTitle: '',\n  }\n}\n","import {\n  type ArraySchemaType,\n  isArrayOfObjectsSchemaType,\n  type ObjectSchemaType,\n  type Path,\n} from '@sanity/types'\nimport {toString} from '@sanity/util/paths'\n\nimport {getValueAtPath} from '../../../../../field/paths/helpers'\nimport {getSchemaTypeTitle} from '../../../../../schema/helpers'\nimport {type TreeEditingBreadcrumb, type TreeEditingMenuItem} from '../../types'\nimport {getRootPath} from '../getRootPath'\nimport {getSchemaField} from '../getSchemaField'\nimport {buildArrayState} from './buildArrayState'\n\nconst EMPTY_ARRAY: [] = []\n\nexport const EMPTY_TREE_STATE: TreeEditingState = {\n  breadcrumbs: EMPTY_ARRAY,\n  menuItems: EMPTY_ARRAY,\n  relativePath: EMPTY_ARRAY,\n  rootTitle: '',\n}\n\nexport interface BuildTreeEditingStateProps {\n  schemaType: ObjectSchemaType | ArraySchemaType\n  documentValue: unknown\n  openPath: Path\n}\n\nexport interface TreeEditingState {\n  /** The breadcrumbs for the tree editing state */\n  breadcrumbs: TreeEditingBreadcrumb[]\n  /** The menu items for the tree editing state */\n  menuItems: TreeEditingMenuItem[]\n  /**\n   * The relative path to the selected item in the tree editing state.\n   * It is used to determine which field to show in the form editor.\n   */\n  relativePath: Path\n  /** The title of the root field */\n  rootTitle: string\n}\n\nexport interface RecursiveProps extends Omit<BuildTreeEditingStateProps, 'openPath'> {\n  path: Path\n}\n\nexport function buildTreeEditingState(props: BuildTreeEditingStateProps): TreeEditingState {\n  const {openPath} = props\n\n  const rootPath = getRootPath(openPath)\n  const rootField = getSchemaField(props.schemaType, toString(rootPath)) as ObjectSchemaType\n  const rootTitle = getSchemaTypeTitle(rootField?.type as ObjectSchemaType)\n\n  if (!isArrayOfObjectsSchemaType(rootField?.type)) {\n    return EMPTY_TREE_STATE\n  }\n\n  if (rootField?.options?.treeEditing === false) {\n    return EMPTY_TREE_STATE\n  }\n\n  let relativePath: Path = []\n  const breadcrumbs: TreeEditingBreadcrumb[] = []\n\n  const result = recursive({\n    schemaType: rootField,\n    documentValue: props.documentValue,\n    path: rootPath,\n  })\n\n  function recursive(recursiveProps: RecursiveProps): TreeEditingState {\n    const {schemaType, path, documentValue} = recursiveProps\n\n    const value = getValueAtPath(documentValue, path) as Array<Record<string, unknown>>\n    const arrayValue = Array.isArray(value) ? value : EMPTY_ARRAY\n    const arraySchemaType = schemaType?.type as ArraySchemaType\n\n    const arrayState = buildArrayState({\n      arraySchemaType,\n      arrayValue,\n      documentValue,\n      openPath,\n      // Pass the recursive function to the buildArrayState function\n      // to allow for recursive calls in the array items.\n      recursive,\n      rootPath: path,\n    })\n\n    if (arrayState.relativePath.length > 0) {\n      relativePath = arrayState.relativePath\n    }\n\n    breadcrumbs.unshift(...arrayState.breadcrumbs)\n\n    return arrayState\n  }\n\n  return {\n    relativePath,\n    breadcrumbs,\n    menuItems: result.menuItems,\n    rootTitle,\n  }\n}\n","import {isKeySegment, type ObjectSchemaType, type Path} from '@sanity/types'\nimport {\n  Card,\n  // eslint-disable-next-line no-restricted-imports\n  Dialog, // Custom dialog needed\n  Flex,\n} from '@sanity/ui'\n// eslint-disable-next-line camelcase\nimport {getTheme_v2, type Theme} from '@sanity/ui/theme'\nimport {toString} from '@sanity/util/paths'\nimport {AnimatePresence, motion, type Transition, type Variants} from 'framer-motion'\nimport {debounce, isEqual} from 'lodash'\nimport {useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {Button} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n/hooks/useTranslation'\nimport {FormInput} from '../../../components/FormInput'\nimport {type InputProps, type ObjectInputProps} from '../../../types/inputProps'\nimport {\n  buildTreeEditingState,\n  type BuildTreeEditingStateProps,\n  EMPTY_TREE_STATE,\n  type TreeEditingState,\n} from '../utils'\nimport {isArrayItemPath} from '../utils/build-tree-editing-state/utils'\nimport {TreeEditingLayout} from './layout'\n\nconst EMPTY_ARRAY: [] = []\n\nconst ANIMATION_VARIANTS: Variants = {\n  initial: {opacity: 0},\n  animate: {opacity: 1},\n  exit: {opacity: 0},\n}\n\nconst ANIMATION_TRANSITION: Transition = {duration: 0.2, ease: 'easeInOut'}\n\nfunction renderDefault(props: InputProps) {\n  return props.renderDefault(props)\n}\n\nconst StyledDialog = styled(Dialog)(({theme}: {theme: Theme}) => {\n  const spacing = getTheme_v2(theme)?.space[4]\n\n  return css`\n    [data-ui='DialogCard'] {\n      padding: ${spacing}px;\n      box-sizing: border-box;\n\n      // Make the dialog full height\n      & > [data-ui='Card']:first-child {\n        flex: 1;\n      }\n    }\n  `\n})\n\nconst MotionFlex = motion.create(Flex)\n\ninterface TreeEditingDialogProps {\n  onPathFocus: (path: Path) => void\n  onPathOpen: (path: Path) => void\n  openPath: Path\n  rootInputProps: Omit<ObjectInputProps, 'renderDefault'>\n  schemaType: ObjectSchemaType\n}\n\nexport function TreeEditingDialog(props: TreeEditingDialogProps): React.JSX.Element | null {\n  const {onPathFocus, onPathOpen, openPath, rootInputProps, schemaType} = props\n  const {value} = rootInputProps\n  const {t} = useTranslation()\n\n  const [treeState, setTreeState] = useState<TreeEditingState>(EMPTY_TREE_STATE)\n  const [layoutScrollElement, setLayoutScrollElement] = useState<HTMLDivElement | null>(null)\n\n  const openPathRef = useRef<Path | undefined>(undefined)\n  const valueRef = useRef<Record<string, unknown> | undefined>(undefined)\n\n  const handleAnimationExitComplete = useCallback(() => {\n    // Scroll to the top of the layout when the animation has completed\n    // to avoid the layout being scrolled while the content is being\n    // animated out and then back in.\n    layoutScrollElement?.scrollTo(0, 0)\n  }, [layoutScrollElement])\n\n  const handleBuildTreeEditingState = useCallback(\n    (opts: BuildTreeEditingStateProps) => {\n      const nextState = buildTreeEditingState(opts)\n\n      if (isEqual(nextState, treeState)) return\n\n      const builtRelativePath = nextState.relativePath\n      const len = builtRelativePath.length\n\n      const hasNoRelativePath = len === 0\n\n      // If there is not relative path or the path is not an array item path, we want to use the\n      // current relative path. This is to avoid changing the fields being displayed in the form\n      // when the path is not an array item path.\n      const useCurrentRelativePath = hasNoRelativePath || !isArrayItemPath(builtRelativePath)\n      const nextRelativePath = useCurrentRelativePath ? treeState.relativePath : builtRelativePath\n\n      setTreeState({...nextState, relativePath: nextRelativePath})\n    },\n    [treeState],\n  )\n\n  const debouncedBuildTreeEditingState = useMemo(\n    () => debounce(handleBuildTreeEditingState, 1000),\n    [handleBuildTreeEditingState],\n  )\n\n  const onClose = useCallback(() => {\n    // Cancel any debounced state building when closing the dialog.\n    debouncedBuildTreeEditingState.cancel()\n\n    // Reset the `openPath`\n    onPathOpen(EMPTY_ARRAY)\n\n    // Reset the tree state when closing the dialog.\n    setTreeState(EMPTY_TREE_STATE)\n\n    // Reset the stored value and openPath to undefined.\n    // This is important since the next time the dialog is opened,\n    // we want to build the tree editing state from scratch and\n    // don't prevent the state from being built by comparing the\n    // previous stored values.\n    valueRef.current = undefined\n    openPathRef.current = undefined\n\n    // Focus the root array item when closing the dialog.\n    const firstKeySegmentIndex = openPath.findIndex(isKeySegment)\n    const rootFocusPath = openPath.slice(0, firstKeySegmentIndex + 1)\n    onPathFocus(rootFocusPath)\n  }, [debouncedBuildTreeEditingState, onPathFocus, onPathOpen, openPath])\n\n  const onHandlePathSelect = useCallback(\n    (path: Path) => {\n      // Cancel any debounced state building when navigating.\n      debouncedBuildTreeEditingState.cancel()\n\n      onPathOpen(path)\n\n      // If the path is not an array item path, it means that the field is\n      // present in the form. In that case, we want to focus the field\n      // in the form when it is selected in order to scroll it into view.\n      if (!isArrayItemPath(path)) {\n        onPathFocus(path)\n      }\n    },\n    [debouncedBuildTreeEditingState, onPathFocus, onPathOpen],\n  )\n\n  useEffect(() => {\n    const valueChanged = !isEqual(value, valueRef.current)\n    const openPathChanged = !isEqual(openPath, openPathRef.current)\n    const isInitialRender = valueRef.current === undefined && openPathRef.current === undefined\n\n    // If the value has not changed but the openPath has changed, or\n    // if it is the initial render, build the tree editing state\n    // without debouncing. We do this to make sure that the UI is\n    // updated immediately when the openPath changes.\n    // We only want to debounce the state building when the value changes\n    // as that might happen frequently when the user is editing the document.\n    if (isInitialRender || openPathChanged) {\n      handleBuildTreeEditingState({\n        schemaType,\n        documentValue: value,\n        openPath,\n      })\n\n      openPathRef.current = openPath\n\n      return undefined\n    }\n\n    // Don't proceed with building the tree editing state if the\n    // openPath and value has not changed.\n    if (!valueChanged && !openPathChanged) return undefined\n\n    // Store the openPath and value to be able to compare them\n    // with the next openPath and value.\n    valueRef.current = value\n    openPathRef.current = openPath\n\n    debouncedBuildTreeEditingState({\n      schemaType,\n      documentValue: value,\n      openPath,\n    })\n\n    return () => {\n      // Cancel any debounced state building on unmount.\n      debouncedBuildTreeEditingState.cancel()\n    }\n  }, [schemaType, value, debouncedBuildTreeEditingState, openPath, handleBuildTreeEditingState])\n\n  if (treeState.relativePath.length === 0) return null\n\n  return (\n    <StyledDialog\n      __unstable_hideCloseButton\n      animate\n      data-testid=\"tree-editing-dialog\"\n      id=\"tree-editing-dialog\"\n      onClickOutside={onClose}\n      onClose={onClose}\n      padding={0}\n      width={3}\n    >\n      <TreeEditingLayout\n        breadcrumbs={treeState.breadcrumbs}\n        items={treeState.menuItems}\n        onPathSelect={onHandlePathSelect}\n        selectedPath={treeState.relativePath}\n        title={treeState.rootTitle}\n        setScrollElement={setLayoutScrollElement}\n        footer={\n          <Card borderTop>\n            <Flex align=\"center\" justify=\"flex-end\" paddingX={3} paddingY={2} sizing=\"border\">\n              <Button\n                size=\"large\"\n                data-testid=\"tree-editing-done\"\n                text={t('tree-editing-dialog.sidebar.action.done')}\n                onClick={onClose}\n              />\n            </Flex>\n          </Card>\n        }\n      >\n        <AnimatePresence initial={false} mode=\"wait\" onExitComplete={handleAnimationExitComplete}>\n          <MotionFlex\n            animate=\"animate\"\n            data-testid=\"tree-editing-dialog-content\"\n            direction=\"column\"\n            exit=\"exit\"\n            height=\"fill\"\n            initial=\"initial\"\n            key={toString(treeState.relativePath)}\n            overflow=\"hidden\"\n            padding={1}\n            sizing=\"border\"\n            transition={ANIMATION_TRANSITION}\n            variants={ANIMATION_VARIANTS}\n          >\n            <FormInput\n              {...rootInputProps}\n              relativePath={treeState.relativePath}\n              renderDefault={renderDefault}\n            />\n          </MotionFlex>\n        </AnimatePresence>\n      </TreeEditingLayout>\n    </StyledDialog>\n  )\n}\n","import {useContext} from 'react'\nimport {TreeEditingEnabledContext} from 'sanity/_singletons'\n\n/**\n * @internal\n */\nexport interface TreeEditingEnabledContextValue {\n  /**\n   * A boolean indicating whether tree editing is enabled\n   */\n  enabled: boolean\n  /**\n   * A boolean indicating whether legacy editing is enabled\n   */\n  legacyEditing: boolean\n}\n\n/**\n * @internal\n */\nexport function useTreeEditingEnabled(): TreeEditingEnabledContextValue {\n  return useContext(TreeEditingEnabledContext)\n}\n","import {useMemo} from 'react'\nimport {TreeEditingEnabledContext} from 'sanity/_singletons'\n\nimport {type TreeEditingEnabledContextValue, useTreeEditingEnabled} from './useTreeEditingEnabled'\n\ninterface TreeEditingEnabledProviderProps {\n  children: React.ReactNode\n  legacyEditing?: boolean\n}\n\nexport function TreeEditingEnabledProvider(\n  props: TreeEditingEnabledProviderProps,\n): React.JSX.Element {\n  const {children, legacyEditing: legacyEditingProp} = props\n  const parentContextValue = useTreeEditingEnabled()\n\n  const value = useMemo((): TreeEditingEnabledContextValue => {\n    const legacyEditing =\n      // If any parent schema type has tree editing disabled, we should enable\n      // legacy array editing for any child array items by passing down the\n      // parent context value\n      parentContextValue.legacyEditing ||\n      // Else, we should enable legacy array editing if the `legacyEditing`\n      // prop is set.\n      legacyEditingProp\n\n    return {\n      enabled: false, // The tree editing beta feature has been disabled\n      legacyEditing: Boolean(legacyEditing),\n    }\n  }, [legacyEditingProp, parentContextValue.legacyEditing])\n\n  return (\n    <TreeEditingEnabledContext.Provider value={value}>\n      {children}\n    </TreeEditingEnabledContext.Provider>\n  )\n}\n","import {InsertAboveIcon, InsertBelowIcon} from '@sanity/icons'\nimport {type InsertMenuOptions} from '@sanity/insert-menu'\nimport {type SchemaType} from '@sanity/types'\nimport {useCallback, useMemo} from 'react'\n\nimport {MenuItem} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n/hooks/useTranslation'\nimport {useInsertMenuPopover} from './InsertMenuPopover'\n\n/**\n * @internal\n */\ntype InsertMenuItemsProps = {\n  insertMenuOptions?: InsertMenuOptions\n  onInsert: (pos: 'before' | 'after', type: SchemaType) => void\n  referenceElement: HTMLElement | null\n  schemaTypes?: SchemaType[]\n}\n\n/**\n * @internal\n */\nexport function useInsertMenuMenuItems(props: InsertMenuItemsProps) {\n  const {t} = useTranslation()\n  const {onInsert, schemaTypes: types} = props\n  const insertBefore = useInsertMenuPopover({\n    insertMenuProps: {\n      ...props.insertMenuOptions,\n      schemaTypes: props.schemaTypes ?? [],\n      onSelect: (insertType) => {\n        props.onInsert('before', insertType)\n      },\n    },\n    popoverProps: {\n      referenceElement: props.referenceElement,\n      placement: 'top-end',\n      fallbackPlacements: ['bottom-end'],\n    },\n  })\n  const insertAfter = useInsertMenuPopover({\n    insertMenuProps: {\n      ...props.insertMenuOptions,\n      schemaTypes: props.schemaTypes ?? [],\n      onSelect: (insertType) => {\n        props.onInsert('after', insertType)\n      },\n    },\n    popoverProps: {\n      referenceElement: props.referenceElement,\n      placement: 'bottom-end',\n      fallbackPlacements: ['top-end'],\n    },\n  })\n  const handleToggleInsertBefore = useCallback(() => {\n    if (!types) {\n      return\n    }\n\n    if (types.length === 1) {\n      onInsert('before', types[0])\n    } else {\n      insertBefore.send({type: 'toggle'})\n    }\n  }, [insertBefore, onInsert, types])\n  const handleToggleInsertAfter = useCallback(() => {\n    if (!types) {\n      return\n    }\n\n    if (types.length === 1) {\n      onInsert('after', types[0])\n    } else {\n      insertAfter.send({type: 'toggle'})\n    }\n  }, [insertAfter, onInsert, types])\n\n  const insertBeforeMenuItem = useMemo(\n    () =>\n      types ? (\n        <MenuItem\n          key=\"insertBefore\"\n          text={\n            types.length === 1\n              ? t('inputs.array.action.add-before')\n              : `${t('inputs.array.action.add-before')}...`\n          }\n          icon={InsertAboveIcon}\n          onClick={handleToggleInsertBefore}\n        />\n      ) : null,\n    [handleToggleInsertBefore, t, types],\n  )\n  const insertAfterMenuItem = useMemo(\n    () =>\n      types ? (\n        <MenuItem\n          key=\"insertAfter\"\n          text={\n            types.length === 1\n              ? t('inputs.array.action.add-after')\n              : `${t('inputs.array.action.add-after')}...`\n          }\n          icon={InsertBelowIcon}\n          onClick={handleToggleInsertAfter}\n        />\n      ) : null,\n    [handleToggleInsertAfter, t, types],\n  )\n\n  return {\n    insertBefore: {\n      ...insertBefore,\n      menuItem: insertBeforeMenuItem,\n    },\n    insertAfter: {\n      ...insertAfter,\n      menuItem: insertAfterMenuItem,\n    },\n  }\n}\n","import {AddDocumentIcon, CopyIcon, TrashIcon} from '@sanity/icons'\nimport {type SchemaType} from '@sanity/types'\nimport {Box, Card, type CardTone, Menu} from '@sanity/ui'\nimport {useCallback, useImperativeHandle, useMemo, useRef, useState} from 'react'\nimport {styled} from 'styled-components'\n\nimport {MenuButton, MenuItem} from '../../../../../../ui-components'\nimport {ChangeIndicator} from '../../../../../changeIndicators'\nimport {ContextMenuButton} from '../../../../../components/contextMenuButton'\nimport {LoadingBlock} from '../../../../../components/loadingBlock'\nimport {type FIXME} from '../../../../../FIXME'\nimport {useTranslation} from '../../../../../i18n'\nimport {FieldPresence} from '../../../../../presence'\nimport {getSchemaTypeTitle} from '../../../../../schema'\nimport {FormFieldValidationStatus} from '../../../../components'\nimport {EditPortal} from '../../../../components/EditPortal'\nimport {useDidUpdate} from '../../../../hooks/useDidUpdate'\nimport {useScrollIntoViewOnFocusWithin} from '../../../../hooks/useScrollIntoViewOnFocusWithin'\nimport {useChildPresence} from '../../../../studio/contexts/Presence'\nimport {useChildValidation} from '../../../../studio/contexts/Validation'\nimport {TreeEditingEnabledProvider, useTreeEditingEnabled} from '../../../../studio/tree-editing'\nimport {type ObjectItem, type ObjectItemProps} from '../../../../types'\nimport {randomKey} from '../../../../utils/randomKey'\nimport {CellLayout} from '../../layouts/CellLayout'\nimport {createProtoArrayValue} from '../createProtoArrayValue'\nimport {useInsertMenuMenuItems} from '../InsertMenuMenuItems'\n\ntype GridItemProps<Item extends ObjectItem> = Omit<ObjectItemProps<Item>, 'renderDefault'>\n\nconst PreviewCard = styled(Card)`\n  border-top-right-radius: inherit;\n  border-top-left-radius: inherit;\n  height: 100%;\n  position: relative;\n\n  @media (hover: hover) {\n    &:hover {\n      filter: brightness(95%);\n    }\n  }\n\n  &:focus:focus-visible {\n    box-shadow: 0 0 0 2px var(--card-focus-ring-color);\n  }\n`\n\nfunction getTone({\n  readOnly,\n  hasErrors,\n  hasWarnings,\n}: {\n  readOnly: boolean | undefined\n  hasErrors: boolean\n  hasWarnings: boolean\n}): CardTone {\n  if (readOnly) {\n    return 'transparent'\n  }\n  if (hasErrors) {\n    return 'critical'\n  }\n  return hasWarnings ? 'caution' : 'default'\n}\nconst MENU_POPOVER_PROPS = {portal: true, tone: 'default'} as const\nconst EMPTY_ARRAY: never[] = []\nexport function GridItem<Item extends ObjectItem = ObjectItem>(props: GridItemProps<Item>) {\n  const {\n    schemaType,\n    parentSchemaType,\n    path,\n    readOnly,\n    onRemove,\n    value,\n    open,\n    onInsert,\n    onCopy,\n    onFocus,\n    onOpen,\n    onClose,\n    changed,\n    focused,\n    children,\n    inputProps: {renderPreview},\n  } = props\n  const {t} = useTranslation()\n\n  const treeEditing = useTreeEditingEnabled()\n  const treeEditingDisabledByOption = parentSchemaType?.options?.treeEditing === false\n  const legacyEditing = treeEditingDisabledByOption || treeEditing.legacyEditing\n\n  // The edit portal should open if the item is open and:\n  // - tree array editing is disabled\n  // - legacy array editing is enabled (e.g. in a Portable Text editor)\n  const openPortal = open && (!treeEditing.enabled || legacyEditing)\n\n  const sortable = parentSchemaType.options?.sortable !== false\n  const insertableTypes = parentSchemaType.of\n\n  const [previewCardElement, setPreviewCardElement] = useState<FIXME | null>(null)\n  const previewCardRef = useRef<FIXME | null>(null)\n  useImperativeHandle(previewCardRef, () => previewCardElement, [previewCardElement])\n\n  // this is here to make sure the item is visible if it's being edited behind a modal\n  useScrollIntoViewOnFocusWithin(previewCardRef, open)\n\n  useDidUpdate(focused, (hadFocus, hasFocus) => {\n    if (!hadFocus && hasFocus && previewCardRef.current) {\n      // Note: if editing an inline item, focus is handled by the item input itself and no ref is being set\n      previewCardRef.current?.focus()\n    }\n  })\n\n  const resolvingInitialValue = (value as any)._resolvingInitialValue\n\n  const handleDuplicate = useCallback(() => {\n    onInsert({\n      items: [{...value, _key: randomKey()}],\n      position: 'after',\n    })\n  }, [onInsert, value])\n\n  const handleCopy = useCallback(() => {\n    onCopy({\n      items: [{...value, _key: randomKey()}],\n    })\n  }, [onCopy, value])\n\n  const handleInsert = useCallback(\n    (pos: 'before' | 'after', insertType: SchemaType) => {\n      onInsert({\n        items: [createProtoArrayValue(insertType)],\n        position: pos,\n      })\n    },\n    [onInsert],\n  )\n\n  const childPresence = useChildPresence(path, true)\n  const presence = useMemo(() => {\n    return childPresence.length === 0 ? null : (\n      <FieldPresence presence={childPresence} maxAvatars={1} />\n    )\n  }, [childPresence])\n\n  const childValidation = useChildValidation(path, true)\n  const validation = useMemo(() => {\n    return childValidation.length === 0 ? null : (\n      <Box paddingX={1} paddingY={3}>\n        <FormFieldValidationStatus validation={childValidation} __unstable_showSummary />\n      </Box>\n    )\n  }, [childValidation])\n\n  const hasErrors = childValidation.some((v) => v.level === 'error')\n  const hasWarnings = childValidation.some((v) => v.level === 'warning')\n  const [contextMenuButtonElement, setContextMenuButtonElement] =\n    useState<HTMLButtonElement | null>(null)\n  const {insertBefore, insertAfter} = useInsertMenuMenuItems({\n    schemaTypes: insertableTypes,\n    insertMenuOptions: parentSchemaType.options?.insertMenu,\n    onInsert: handleInsert,\n    referenceElement: contextMenuButtonElement,\n  })\n\n  const disableActions = parentSchemaType.options?.disableActions || EMPTY_ARRAY\n\n  const menuItems = useMemo(() => {\n    return [\n      !disableActions.includes('remove') && (\n        <MenuItem\n          text={t('inputs.array.action.remove')}\n          tone=\"critical\"\n          icon={TrashIcon}\n          onClick={onRemove}\n        />\n      ),\n      !disableActions.includes('copy') && (\n        <MenuItem text={t('inputs.array.action.copy')} icon={CopyIcon} onClick={handleCopy} />\n      ),\n      !disableActions.includes('duplicate') && (\n        <MenuItem\n          text={t('inputs.array.action.duplicate')}\n          icon={AddDocumentIcon}\n          onClick={handleDuplicate}\n        />\n      ),\n      !disableActions.includes('add') &&\n        !disableActions.includes('addBefore') &&\n        insertBefore.menuItem,\n      !disableActions.includes('add') &&\n        !disableActions.includes('addAfter') &&\n        insertAfter.menuItem,\n    ].filter(Boolean)\n  }, [\n    disableActions,\n    handleCopy,\n    handleDuplicate,\n    insertAfter.menuItem,\n    insertBefore.menuItem,\n    onRemove,\n    t,\n  ])\n\n  const menu = useMemo(\n    () =>\n      readOnly || menuItems.length === 0 ? null : (\n        <>\n          <MenuButton\n            ref={setContextMenuButtonElement}\n            onOpen={() => {\n              insertBefore.send({type: 'close'})\n              insertAfter.send({type: 'close'})\n            }}\n            button={\n              <ContextMenuButton\n                data-testid=\"array-item-menu-button\"\n                selected={insertBefore.state.open || insertAfter.state.open ? true : undefined}\n              />\n            }\n            id={`${props.inputId}-menuButton`}\n            menu={<Menu>{menuItems}</Menu>}\n            popover={MENU_POPOVER_PROPS}\n          />\n          {insertBefore.popover}\n          {insertAfter.popover}\n        </>\n      ),\n    [readOnly, insertBefore, insertAfter, props.inputId, menuItems],\n  )\n\n  const tone = getTone({readOnly, hasErrors, hasWarnings})\n\n  const item = (\n    <CellLayout\n      menu={menu}\n      presence={presence}\n      validation={validation}\n      tone={tone}\n      radius={2}\n      border\n      dragHandle={sortable}\n      selected={openPortal}\n      readOnly={readOnly}\n    >\n      <PreviewCard\n        tone=\"inherit\"\n        overflow=\"auto\"\n        forwardedAs=\"button\"\n        data-ui=\"PreviewCard\"\n        data-as=\"button\"\n        type=\"button\"\n        flex={1}\n        tabIndex={0}\n        disabled={resolvingInitialValue}\n        onClick={onOpen}\n        ref={setPreviewCardElement}\n        onFocus={onFocus}\n        __unstable_focusRing\n      >\n        {renderPreview({\n          schemaType,\n          value,\n          layout: 'media',\n          withBorder: false,\n          withShadow: false,\n        })}\n\n        {resolvingInitialValue && <LoadingBlock fill />}\n      </PreviewCard>\n    </CellLayout>\n  )\n\n  const itemTypeTitle = getSchemaTypeTitle(schemaType)\n  return (\n    <TreeEditingEnabledProvider legacyEditing={treeEditingDisabledByOption}>\n      <ChangeIndicator path={path} isChanged={changed} hasFocus={Boolean(focused)}>\n        {item}\n      </ChangeIndicator>\n      {openPortal && (\n        <EditPortal\n          header={\n            readOnly\n              ? t('inputs.array.action.view', {itemTypeTitle})\n              : t('inputs.array.action.edit', {itemTypeTitle})\n          }\n          type={parentSchemaType?.options?.modal?.type || 'dialog'}\n          width={parentSchemaType?.options?.modal?.width ?? 1}\n          id={value._key}\n          onClose={onClose}\n          autofocus={focused}\n          legacy_referenceElement={previewCardElement}\n        >\n          {children}\n        </EditPortal>\n      )}\n    </TreeEditingEnabledProvider>\n  )\n}\n","/* eslint-disable react/jsx-handler-names */\nimport {Card, Stack, Text} from '@sanity/ui'\nimport {useCallback, useMemo} from 'react'\n\nimport {useTranslation} from '../../../../../i18n'\nimport {ArrayOfObjectsItem} from '../../../../members'\nimport {\n  type ArrayOfObjectsInputProps,\n  type ObjectItem,\n  type ObjectItemProps,\n} from '../../../../types'\nimport {Item, List} from '../../common/list'\nimport {UploadTargetCard} from '../../common/UploadTargetCard'\nimport {ArrayOfObjectsFunctions} from '../ArrayOfObjectsFunctions'\nimport {createProtoArrayValue} from '../createProtoArrayValue'\nimport {ErrorItem} from './ErrorItem'\nimport {GridItem} from './GridItem'\n\nconst EMPTY: [] = []\n\nexport function GridArrayInput<Item extends ObjectItem>(props: ArrayOfObjectsInputProps<Item>) {\n  const {\n    arrayFunctions: ArrayFunctions = ArrayOfObjectsFunctions,\n    elementProps,\n    members,\n    onChange,\n    onItemPrepend,\n    onItemAppend,\n    onItemMove,\n    onUpload,\n    readOnly,\n    renderAnnotation,\n    renderBlock,\n    renderField,\n    renderInlineBlock,\n    renderInput,\n    renderPreview,\n    resolveUploader,\n    schemaType,\n    value = EMPTY,\n  } = props\n  const {t} = useTranslation()\n\n  const sortable = schemaType.options?.sortable !== false\n\n  const renderItem = useCallback(({key, ...itemProps}: Omit<ObjectItemProps, 'renderDefault'>) => {\n    // todo: consider using a different item component for references\n    return <GridItem key={key} {...itemProps} />\n  }, [])\n\n  const memberKeys = useMemo(() => members.map((member) => member.key), [members])\n\n  return (\n    <Stack space={2}>\n      <UploadTargetCard\n        types={schemaType.of}\n        resolveUploader={resolveUploader}\n        onUpload={onUpload}\n        {...elementProps}\n        tabIndex={0}\n      >\n        <Stack data-ui=\"ArrayInput__content\" space={2}>\n          {members?.length === 0 && (\n            <Card padding={3} border radius={2}>\n              <Text align=\"center\" muted size={1}>\n                {schemaType.placeholder || <>{t('inputs.array.no-items-label')}</>}\n              </Text>\n            </Card>\n          )}\n          {members?.length > 0 && (\n            <Card border radius={1}>\n              <List\n                columns={[2, 3, 4]}\n                gap={3}\n                padding={1}\n                margin={1}\n                items={memberKeys}\n                onItemMove={onItemMove}\n                sortable={sortable}\n              >\n                {members.map((member) => (\n                  <Item key={member.key} sortable={sortable} id={member.key} flex={1}>\n                    {member.kind === 'item' && (\n                      <ArrayOfObjectsItem\n                        member={member}\n                        renderAnnotation={renderAnnotation}\n                        renderBlock={renderBlock}\n                        renderInlineBlock={renderInlineBlock}\n                        renderItem={renderItem}\n                        renderField={renderField}\n                        renderInput={renderInput}\n                        renderPreview={renderPreview}\n                      />\n                    )}\n                    {member.kind === 'error' && (\n                      <ErrorItem sortable={sortable} member={member} readOnly={readOnly} />\n                    )}\n                  </Item>\n                ))}\n              </List>\n            </Card>\n          )}\n        </Stack>\n      </UploadTargetCard>\n\n      <ArrayFunctions\n        onChange={onChange}\n        onItemAppend={onItemAppend}\n        onItemPrepend={onItemPrepend}\n        onValueCreate={createProtoArrayValue}\n        readOnly={readOnly}\n        schemaType={schemaType}\n        value={value}\n      />\n    </Stack>\n  )\n}\n","import {Box, Card, type CardTone, Flex, Stack} from '@sanity/ui'\nimport {type ReactNode, useRef} from 'react'\nimport {styled} from 'styled-components'\n\nimport {useDidUpdate} from '../../../hooks/useDidUpdate'\nimport {DragHandle} from '../common/DragHandle'\nimport {MOVING_ITEM_CLASS_NAME} from '../common/list'\n\ninterface RowLayoutProps {\n  tone?: CardTone\n  dragHandle?: boolean\n  focused?: boolean\n  presence?: ReactNode\n  validation?: ReactNode\n  menu?: ReactNode\n  footer?: ReactNode\n  selected?: boolean\n  children?: ReactNode\n  readOnly: boolean\n}\n\nconst Root = styled(Card)`\n  position: relative;\n  border: 1px solid transparent;\n  transition: border-color 250ms;\n\n  .${MOVING_ITEM_CLASS_NAME} & {\n    border-color: var(--card-shadow-umbra-color);\n    box-shadow:\n      0 0 0 0,\n      0 8px 17px 2px var(--card-shadow-umbra-color),\n      0 3px 14px 2px var(--card-shadow-penumbra-color),\n      0 5px 5px -3px var(--card-shadow-ambient-color);\n  }\n\n  &:hover {\n    border-color: var(--card-shadow-umbra-color);\n  }\n\n  &[aria-selected='true'] {\n    border-color: var(--card-focus-ring-color);\n  }\n`\n\nexport function RowLayout(props: RowLayoutProps) {\n  const {\n    validation,\n    selected,\n    tone,\n    presence,\n    focused,\n    children,\n    dragHandle,\n    menu,\n    footer,\n    readOnly,\n  } = props\n\n  const elementRef = useRef<HTMLDivElement | null>(null)\n\n  useDidUpdate(focused, (hadFocus, hasFocus) => {\n    if (!hadFocus && hasFocus) {\n      elementRef.current?.focus()\n    }\n  })\n\n  return (\n    <Root\n      ref={elementRef}\n      selected={selected}\n      aria-selected={selected}\n      radius={1}\n      padding={1}\n      tone={tone}\n    >\n      <Stack space={1}>\n        <Flex align=\"center\" gap={1}>\n          {dragHandle && <DragHandle paddingY={3} readOnly={readOnly} />}\n\n          <Box flex={1}>{children}</Box>\n\n          {(presence || validation || menu) && (\n            <Flex align=\"center\" flex=\"none\" gap={2} style={{lineHeight: 0}}>\n              {presence && <Box flex=\"none\">{presence}</Box>}\n              {validation && <Box flex=\"none\">{validation}</Box>}\n              {menu}\n            </Flex>\n          )}\n        </Flex>\n        {footer}\n      </Stack>\n    </Root>\n  )\n}\n","import {BulbOutlineIcon, UnknownIcon} from '@sanity/icons'\nimport {Box, Card, Code, Flex, Stack, Text, type Theme, useClickOutsideEvent} from '@sanity/ui'\nimport {resolveTypeName} from '@sanity/util/content'\nimport {type FocusEvent, useCallback, useRef, useState} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Popover} from '../../../../../../ui-components'\nimport {Translate, useTranslation} from '../../../../../i18n'\n\nconst PopoverCard = styled(Card)`\n  max-width: ${({theme}: {theme: Theme}) => theme.sanity.container[1]}px;\n`\n\ninterface Props {\n  value: unknown\n  onFocus?: (event: FocusEvent) => void\n  vertical?: boolean\n}\n\nexport function IncompatibleItemType(props: Props) {\n  const {value, onFocus, vertical, ...rest} = props\n  const [showDetails, setShowDetails] = useState(false)\n  const popoverRef = useRef<HTMLDivElement | null>(null)\n\n  const {t} = useTranslation()\n\n  useClickOutsideEvent(\n    () => setShowDetails(false),\n    () => [popoverRef.current],\n  )\n\n  const handleKeyDown = useCallback((e: any) => {\n    if (e.key === 'Escape' || e.key === 'Tab') {\n      setShowDetails(false)\n    }\n  }, [])\n\n  const handleShowDetails = useCallback(() => {\n    setShowDetails((v) => !v)\n  }, [])\n\n  const typeName = resolveTypeName(value)\n  return (\n    <Popover\n      open={showDetails}\n      ref={popoverRef}\n      onKeyDown={handleKeyDown}\n      portal\n      constrainSize\n      tone=\"default\"\n      content={\n        <PopoverCard margin={1} padding={3} onKeyDown={handleKeyDown} tabIndex={0} overflow=\"auto\">\n          <Stack space={4}>\n            <Box>\n              <Text weight=\"medium\">{t('inputs.array.error.type-is-incompatible-title')}</Text>\n            </Box>\n            <Text size={1}>\n              <Translate\n                t={t}\n                i18nKey=\"inputs.array.error.current-schema-not-declare-description\"\n                values={{typeName}}\n              />\n            </Text>\n            <Box>\n              <Text size={1}>\n                <BulbOutlineIcon /> {t('inputs.array.error.can-delete-but-no-edit-description')}\n              </Text>\n            </Box>\n            <Stack space={2}>\n              <Text size={1} weight=\"medium\">\n                {t('inputs.array.error.json-representation-description')}\n              </Text>\n              <Card padding={2} overflow=\"auto\" border>\n                <Code size={1} as=\"pre\" language=\"json\">\n                  {JSON.stringify(value, null, 2)}\n                </Code>\n              </Card>\n            </Stack>\n          </Stack>\n        </PopoverCard>\n      }\n    >\n      <Card\n        as=\"button\"\n        type=\"button\"\n        radius={2}\n        tone=\"inherit\"\n        paddingX={2}\n        paddingY={3}\n        flex={1}\n        onFocus={onFocus}\n        onClick={handleShowDetails}\n        onKeyDown={handleKeyDown}\n        __unstable_focusRing\n        {...rest}\n      >\n        <Flex align=\"center\">\n          <Box marginRight={3}>\n            <Text>\n              <UnknownIcon />\n            </Text>\n          </Box>\n\n          <Box flex={1}>\n            <Text size={1} textOverflow=\"ellipsis\">\n              <Translate\n                t={t}\n                i18nKey=\"inputs.array.error.type-is-incompatible-prompt\"\n                values={{typeName}}\n              />\n            </Text>\n          </Box>\n        </Flex>\n      </Card>\n    </Popover>\n  )\n}\n","import {TrashIcon} from '@sanity/icons'\nimport {Box, Menu} from '@sanity/ui'\nimport {useId} from 'react'\n\nimport {MenuButton, MenuItem} from '../../../../../../ui-components'\nimport {ContextMenuButton} from '../../../../../components/contextMenuButton'\nimport {useTranslation} from '../../../../../i18n'\nimport {type ArrayItemError} from '../../../../store'\nimport {RowLayout} from '../../layouts/RowLayout'\nimport {IncompatibleItemType} from './IncompatibleItemType'\n\nconst MENU_POPOVER_PROPS = {portal: true, tone: 'default'} as const\n\nexport function ErrorItem(props: {\n  member: ArrayItemError\n  sortable?: boolean\n  onRemove: () => void\n  readOnly?: boolean\n}) {\n  const {member, sortable, onRemove, readOnly} = props\n  const id = useId()\n\n  const {t} = useTranslation()\n\n  return (\n    <Box paddingX={1}>\n      <RowLayout\n        dragHandle={sortable}\n        readOnly={!!readOnly}\n        tone=\"caution\"\n        menu={\n          <MenuButton\n            button={<ContextMenuButton />}\n            id={`${id}-menuButton`}\n            menu={\n              <Menu>\n                <MenuItem\n                  text={t('inputs.array.action.remove-invalid-item')}\n                  tone=\"critical\"\n                  icon={TrashIcon}\n                  onClick={onRemove}\n                />\n              </Menu>\n            }\n            popover={MENU_POPOVER_PROPS}\n          />\n        }\n      >\n        {member.error.type === 'INVALID_ITEM_TYPE' ? (\n          <IncompatibleItemType value={member.error.value} />\n        ) : (\n          <div>{t('inputs.array.error.unexpected-error', {error: member.error.type})}</div>\n        )}\n      </RowLayout>\n    </Box>\n  )\n}\n","import {useState} from 'react'\n\nexport function useMemoCompare<T>(next: T, compare: (prev: T, next: T) => boolean): T {\n  // State for storing previous value\n  const [previous, setPrevious] = useState<T>(next)\n  // Pass previous and next value to compare function\n  // to determine whether to consider them equal.\n  if (!compare(previous, next)) {\n    // We only update if not equal so that this hook continues to return\n    // the same old value if compare keeps returning true.\n    setPrevious(next)\n    // Return the next value right away, no need to have a render cycle with the old value\n    return next\n  }\n  // Finally, return the previous value until it has changed according to the compare function\n  return previous\n}\n","import {type MutableRefObject, useContext} from 'react'\nimport {VirtualizerScrollInstanceContext} from 'sanity/_singletons'\n\n/**\n * @internal\n */\nexport interface VirtualizerScrollInstance {\n  /**\n   * The parent that has the overflow scroll\n   */\n  scrollElement: HTMLElement | null\n  /**\n   * The container that wraps the array items\n   */\n  containerElement: MutableRefObject<HTMLElement | null>\n}\n\n/**\n * @internal\n */\nexport function useVirtualizerScrollInstance(): VirtualizerScrollInstance {\n  const ref = useContext(VirtualizerScrollInstanceContext)\n  if (!ref) {\n    throw new Error('VirtualizerScrollInstance: missing context value')\n  }\n  return ref\n}\n","'use no memo'\n// The `use no memo` directive is due to a known issue with react-virtual and react compiler: https://github.com/TanStack/virtual/issues/736\n\nimport {type DragStartEvent} from '@dnd-kit/core'\nimport {isKeySegment} from '@sanity/types'\nimport {Card, Stack, Text, useTheme} from '@sanity/ui'\nimport {\n  defaultRangeExtractor,\n  elementScroll,\n  type Range,\n  useVirtualizer,\n  type VirtualizerOptions,\n} from '@tanstack/react-virtual'\nimport {useCallback, useMemo, useRef, useState} from 'react'\nimport shallowEquals from 'shallow-equals'\n\nimport {useTranslation} from '../../../../../i18n'\nimport {ArrayOfObjectsItem} from '../../../../members'\nimport {type ArrayOfObjectsInputProps, type ObjectItem} from '../../../../types'\nimport {Item, List} from '../../common/list'\nimport {UploadTargetCard} from '../../common/UploadTargetCard'\nimport {ArrayOfObjectsFunctions} from '../ArrayOfObjectsFunctions'\nimport {createProtoArrayValue} from '../createProtoArrayValue'\nimport {ErrorItem} from './ErrorItem'\nimport {useMemoCompare} from './useMemoCompare'\nimport {useVirtualizerScrollInstance} from './useVirtualizerScrollInstance'\n\nconst EMPTY: [] = []\n\nexport function ListArrayInput<Item extends ObjectItem>(props: ArrayOfObjectsInputProps<Item>) {\n  const {\n    arrayFunctions: ArrayFunctions = ArrayOfObjectsFunctions,\n    elementProps,\n    members,\n    onChange,\n    onItemMove,\n    onUpload,\n    focusPath,\n    readOnly,\n    onItemAppend,\n    onItemPrepend,\n    renderAnnotation,\n    renderBlock,\n    renderField,\n    renderInlineBlock,\n    renderInput,\n    renderItem,\n    renderPreview,\n    resolveUploader,\n    schemaType,\n    value = EMPTY,\n  } = props\n  const {t} = useTranslation()\n\n  // Stores the index of the item being dragged\n  const [activeDragItemIndex, setActiveDragItemIndex] = useState<number | null>(null)\n  const {space} = useTheme().sanity\n\n  const memberKeys = useMemoCompare(\n    useMemo(() => members.map((member) => member.key), [members]),\n    shallowEquals,\n  )\n\n  const {scrollElement, containerElement} = useVirtualizerScrollInstance()\n  const parentRef = useRef<HTMLDivElement>(null)\n\n  const focusPathKey = useMemo(() => {\n    return isKeySegment(focusPath[0]) ? focusPath[0]._key : focusPath[0]\n  }, [focusPath])\n\n  /**\n   * This is a custom range extractor that adds the activeDragItemIndex and focusedItem to the range\n   * so that the item is always rendered and it can perform it's own actions\n   * Note: When adding an index make sure the range includes all index or the scroll will jump\n   */\n  const rangeExtractor = useCallback(\n    (range: Range) => {\n      const newRange = {...range}\n\n      // Update start and end indexes based on activeDragItemIndex\n      if (activeDragItemIndex !== null) {\n        newRange.startIndex = Math.min(range.startIndex, activeDragItemIndex)\n        newRange.endIndex = Math.max(range.endIndex, activeDragItemIndex)\n      }\n\n      // Update start and end indexes based on focusPathKey\n      if (focusPathKey) {\n        const index = memberKeys.findIndex((key) => key === focusPathKey)\n        if (index !== -1) {\n          newRange.startIndex = Math.min(newRange.startIndex, index)\n          newRange.endIndex = Math.max(newRange.endIndex, index)\n        }\n      }\n\n      return defaultRangeExtractor(newRange)\n    },\n    [activeDragItemIndex, focusPathKey, memberKeys],\n  )\n\n  /**\n   * It observes the scroll element and calls the callback function with the difference between the\n   * scroll's scrollTop and the offsetTop of the parent element of the observed element.\n   * it return an unsubscribe function that removes the event listener when called.\n   */\n  const observeElementOffset = useCallback<\n    VirtualizerOptions<HTMLElement, Element>['observeElementOffset']\n  >(\n    (instance, callback) => {\n      if (!instance.scrollElement) {\n        return undefined\n      }\n\n      const scroll = instance.scrollElement\n\n      const handleScroll = (evt?: Event) => {\n        const containerElementTop = containerElement.current?.getBoundingClientRect().top ?? 0\n        const parentElementTop = parentRef.current?.getBoundingClientRect().top ?? 0\n\n        // This is used to calculate the offsetTop of the parent element\n        // Instead of using the `offsetTop` which will use the nearest parent with `position: relative`\n        // We pass a component that we have more control over to avoid issues when wrapped in custom component\n        const itemOffset = Math.floor(parentElementTop - containerElementTop)\n\n        callback(scroll.scrollTop - itemOffset, Boolean(evt))\n      }\n\n      handleScroll()\n\n      instance.scrollElement.addEventListener('scroll', handleScroll, {\n        capture: false,\n        passive: true,\n      })\n\n      return () => {\n        scroll.removeEventListener('scroll', handleScroll)\n      }\n    },\n    [containerElement],\n  )\n\n  // This is the estimated size of an item in the list. The reason this is an estimate is because\n  // custom components can have different dimensions and the library recalculate the size of the element\n  const estimateSize = useCallback(() => 53, [])\n\n  const virtualizer = useVirtualizer({\n    count: members.length,\n    estimateSize,\n    getScrollElement: useCallback(() => scrollElement, [scrollElement]),\n    observeElementOffset,\n    rangeExtractor,\n    getItemKey: useCallback((index: number) => memberKeys[index], [memberKeys]),\n    scrollToFn: (offset, options, instance) => {\n      // If the offset is the same as the current scroll offset, don't scroll\n      // Offset gets set to 0 here https://github.com/TanStack/virtual/blob/beta/packages/virtual-core/src/index.ts#L211\n      // which causes the scroll to top\n      if (offset === instance.scrollOffset) {\n        return\n      }\n      elementScroll(offset, options, instance)\n    },\n  })\n\n  const items = virtualizer.getVirtualItems()\n\n  const handleItemMoveStart = useCallback((event: DragStartEvent) => {\n    const {active} = event\n    setActiveDragItemIndex(active.data.current?.sortable?.index)\n  }, [])\n\n  const handleItemMoveEnd = useCallback(() => {\n    setActiveDragItemIndex(null)\n  }, [])\n\n  const sortable = schemaType.options?.sortable !== false\n\n  const listGridGap = 1\n  const paddingY = 1\n  const radius = 2\n\n  return (\n    <Stack space={2} ref={parentRef}>\n      <UploadTargetCard\n        $radius={radius}\n        types={schemaType.of}\n        resolveUploader={resolveUploader}\n        onUpload={onUpload}\n        {...elementProps}\n        tabIndex={0}\n      >\n        <Stack data-ui=\"ArrayInput__content\" space={2}>\n          {members.length === 0 ? (\n            <Card padding={3} border radius={2}>\n              <Text align=\"center\" muted size={1}>\n                {schemaType.placeholder || <>{t('inputs.array.no-items-label')}</>}\n              </Text>\n            </Card>\n          ) : (\n            <Card\n              border\n              radius={radius}\n              style={{\n                // This is not memoized since it changes on scroll so it will change anyways making memo useless\n                // Account for grid gap\n                boxSizing: 'border-box',\n                height: `${\n                  virtualizer.getTotalSize() + items.length * space[listGridGap] + space[paddingY]\n                }px`,\n                width: '100%',\n                position: 'relative',\n              }}\n            >\n              <List\n                axis=\"y\"\n                gap={listGridGap}\n                paddingY={paddingY}\n                items={memberKeys}\n                onItemMove={onItemMove}\n                onItemMoveStart={handleItemMoveStart}\n                onItemMoveEnd={handleItemMoveEnd}\n                sortable={sortable}\n                style={{\n                  // This is not memoized since it changes on scroll so it will change anyways making memo useless\n                  position: 'absolute',\n                  top: 0,\n                  left: 0,\n                  width: '100%',\n                  transform: items.length > 0 ? `translateY(${items[0].start}px)` : undefined,\n                }}\n              >\n                {items.map((virtualRow) => {\n                  const member = members[virtualRow.index]\n                  return (\n                    <Item\n                      ref={virtualizer.measureElement}\n                      key={virtualRow.key}\n                      sortable={sortable}\n                      data-index={virtualRow.index}\n                      id={member.key}\n                    >\n                      {member.kind === 'item' && (\n                        <ArrayOfObjectsItem\n                          member={member}\n                          renderAnnotation={renderAnnotation}\n                          renderBlock={renderBlock}\n                          renderField={renderField}\n                          renderInlineBlock={renderInlineBlock}\n                          renderInput={renderInput}\n                          renderItem={renderItem}\n                          renderPreview={renderPreview}\n                        />\n                      )}\n                      {member.kind === 'error' && (\n                        <ErrorItem\n                          readOnly={readOnly}\n                          sortable={sortable}\n                          member={member}\n                          onRemove={() => props.onItemRemove(member.key)}\n                        />\n                      )}\n                    </Item>\n                  )\n                })}\n              </List>\n            </Card>\n          )}\n        </Stack>\n      </UploadTargetCard>\n      <ArrayFunctions\n        onChange={onChange}\n        onItemAppend={onItemAppend}\n        onItemPrepend={onItemPrepend}\n        onValueCreate={createProtoArrayValue}\n        readOnly={readOnly}\n        schemaType={schemaType}\n        value={value}\n      />\n    </Stack>\n  )\n}\n","import {type ArrayOfObjectsInputProps} from '../../../types'\nimport {GridArrayInput} from './Grid/GridArrayInput'\nimport {ListArrayInput} from './List/ListArrayInput'\n\n/**\n *\n * @hidden\n * @beta\n */\nexport function ArrayOfObjectsInput(props: ArrayOfObjectsInputProps) {\n  const isGrid = props.schemaType.options?.layout === 'grid'\n  return isGrid ? <GridArrayInput {...props} /> : <ListArrayInput {...props} />\n}\n","import {type ArraySchemaType, isKeyedObject} from '@sanity/types'\nimport {Box, Card, Checkbox, Flex, Grid} from '@sanity/ui'\nimport {resolveTypeName} from '@sanity/util/content'\nimport {useCallback, useMemo} from 'react'\n\nimport {ChangeIndicator} from '../../../../changeIndicators'\nimport {IncompatibleItemType} from '../../../members/array/IncompatibleItemType'\nimport {set, unset} from '../../../patch'\nimport {type ArrayOfObjectsInputProps} from '../../../types'\n\nfunction isEqual(item: any, otherItem: any): boolean {\n  if (item === otherItem) {\n    return true\n  }\n  if (typeof item !== typeof otherItem) {\n    return false\n  }\n  if (typeof item !== 'object' && !Array.isArray(item)) {\n    return item === otherItem\n  }\n  if (item._key && item._key === otherItem._key) {\n    return true\n  }\n  if (Array.isArray(item)) {\n    if (!item.length !== otherItem.length) {\n      return false\n    }\n    return item.every((it, i) => isEqual(item[i], otherItem[i]))\n  }\n  const keys = Object.keys(item)\n  const otherKeys = Object.keys(item)\n  if (keys.length !== otherKeys.length) {\n    return false\n  }\n  return keys.every((keyName) => isEqual(item[keyName], otherItem[keyName]))\n}\n\nfunction inArray(array: unknown[], candidate: unknown) {\n  return array ? array.some((item) => isEqual(item, candidate)) : false\n}\n\nfunction getMemberTypeOfItem(schemaType: ArraySchemaType, item: unknown) {\n  return schemaType.of.find((memberType) => memberType.name === resolveTypeName(item))\n}\n\nconst EMPTY_ARRAY: unknown[] = []\n\ninterface ObjectOption {\n  _key?: string\n}\n\n/**\n * @hidden\n * Array of predefined object options input\n * Note: this input can handle only object values\n *\n *\n * @hidden\n * @beta\n */\nexport function ArrayOfObjectOptionsInput(props: ArrayOfObjectsInputProps) {\n  const {\n    renderPreview,\n    schemaType,\n    onChange,\n    onPathFocus,\n    value = [],\n    readOnly,\n    elementProps,\n    path,\n    changed,\n  } = props\n\n  const options = useMemo(\n    () =>\n      ((schemaType.options?.list || EMPTY_ARRAY) as ObjectOption[]).map((option, index) =>\n        isKeyedObject(option) ? option : {...option, _key: `auto-generated-${index}`},\n      ),\n    [schemaType.options?.list],\n  )\n\n  const handleChange = useCallback(\n    (isChecked: boolean, changedOption: ObjectOption) => {\n      if (!isChecked && isKeyedObject(changedOption)) {\n        // This is an optimization that only works if list items are _keyed\n        onChange(unset([{_key: changedOption._key}]))\n        return\n      }\n\n      const nextValue = options.filter((option) =>\n        isEqual(changedOption, option) ? isChecked : inArray(value, option),\n      )\n\n      onChange(nextValue.length > 0 ? set(nextValue) : unset())\n    },\n    [onChange, options, value],\n  )\n\n  const handleItemFocus = useCallback(\n    (index: number) => {\n      onPathFocus([index])\n    },\n    [onPathFocus],\n  )\n\n  const isGrid = schemaType.options?.layout === 'grid'\n\n  return (\n    <ChangeIndicator path={path} isChanged={changed} hasFocus={false}>\n      <Grid\n        gap={2}\n        columns={isGrid ? Math.min(options.length, 4) : 1}\n        tabIndex={0}\n        {...elementProps}\n      >\n        {options.map((option, index) => {\n          const optionType = getMemberTypeOfItem(schemaType, option)\n          const checked = inArray(value, option)\n          const disabled = !optionType\n\n          return (\n            <Flex key={index} align=\"center\" as=\"label\" muted={disabled}>\n              <Checkbox\n                disabled={disabled}\n                checked={checked}\n                onChange={(e) => handleChange(e.currentTarget.checked, option)}\n                onFocus={() => handleItemFocus(index)}\n                readOnly={readOnly}\n              />\n              <Box flex={1} marginLeft={2}>\n                {optionType ? (\n                  renderPreview({\n                    layout: 'default',\n                    schemaType: optionType,\n                    value: option,\n                  })\n                ) : (\n                  <Card tone=\"caution\" radius={2}>\n                    <IncompatibleItemType value={option} onFocus={() => handleItemFocus(index)} />\n                  </Card>\n                )}\n              </Box>\n            </Flex>\n          )\n        })}\n      </Grid>\n    </ChangeIndicator>\n  )\n}\n","import {type ArraySchemaType} from '@sanity/types'\nimport {Box, Checkbox, Flex, Grid, Text} from '@sanity/ui'\nimport {resolveTypeName} from '@sanity/util/content'\nimport {startCase} from 'lodash'\nimport {useMemo} from 'react'\n\nimport {ChangeIndicator} from '../../../../changeIndicators'\nimport {set, unset} from '../../../patch'\nimport {type ArrayOfPrimitivesInputProps} from '../../../types'\nimport {IncompatibleItemType} from '../ArrayOfObjectsInput/List/IncompatibleItemType'\n\nfunction isPrimitiveOption(option: unknown): option is NormalizedPrimitiveOption {\n  return Boolean(option && typeof option === 'object' && 'title' in option && 'value' in option)\n}\n\nfunction normalizeOptions(options: unknown[]) {\n  return options.map((option) => {\n    if (isPrimitiveOption(option)) {\n      return {\n        title: option.title || startCase(String(option.value)),\n        value: option.value,\n      }\n    }\n    return {\n      title: startCase(String(option)),\n      value: option as string | number | boolean,\n    }\n  })\n}\n\ninterface NormalizedPrimitiveOption {\n  title: string\n  value: string | boolean | number\n}\n\nfunction getMemberTypeOfItem(schemaType: ArraySchemaType, option: NormalizedPrimitiveOption) {\n  return schemaType.of.find((memberType) => memberType.name === resolveTypeName(option.value))\n}\n\n/**\n * Array of predefined primitive options input\n * Note: this input can only handle primitive values\n *\n *\n * @hidden\n * @beta\n */\nexport function ArrayOfPrimitiveOptionsInput(props: ArrayOfPrimitivesInputProps) {\n  const {\n    schemaType,\n    onChange,\n    value = [],\n    readOnly,\n    path,\n    changed,\n    onIndexFocus,\n    elementProps,\n  } = props\n\n  const options = useMemo(\n    () => normalizeOptions(schemaType.options?.list || []),\n    [schemaType.options?.list],\n  )\n\n  const handleChange = (isChecked: boolean, changedValue: string | boolean | number) => {\n    const nextValue = options\n      .map((option) => option.value)\n      .filter((optionValue) =>\n        // note: sparse arrays are not supported here, so multiple options with same value will all be checked\n        optionValue === changedValue ? isChecked : value.includes(optionValue),\n      )\n\n    onChange(nextValue.length > 0 ? set(nextValue) : unset())\n  }\n\n  const isGrid = schemaType.options?.layout === 'grid'\n\n  return (\n    <ChangeIndicator path={path} isChanged={changed} hasFocus={false}>\n      <Grid gap={2} columns={isGrid ? Math.min(options.length, 4) : 1} {...elementProps}>\n        {options.map((option, index) => {\n          const optionType = getMemberTypeOfItem(schemaType, option)\n          const checked = value.includes(option.value)\n\n          const disabled = !optionType\n\n          return (\n            <Flex key={index} align=\"center\" as=\"label\" muted={disabled}>\n              <Checkbox\n                disabled={disabled}\n                checked={checked}\n                onChange={(e) => handleChange(e.currentTarget.checked, option.value)}\n                onFocus={() => onIndexFocus(index)}\n                readOnly={readOnly}\n              />\n\n              <Box padding={2}>\n                <Text>{option.title}</Text>\n              </Box>\n\n              {!optionType && (\n                <IncompatibleItemType value={option} onFocus={() => onIndexFocus(index)} />\n              )}\n            </Flex>\n          )\n        })}\n      </Grid>\n    </ChangeIndicator>\n  )\n}\n","import {\n  type ArrayOfObjectsInputProps,\n  type ArrayOfPrimitivesInputProps,\n  isArrayOfObjectsInputProps,\n} from '../../../types'\nimport {ArrayOfObjectOptionsInput} from './ArrayOfObjectOptionsInput'\nimport {ArrayOfPrimitiveOptionsInput} from './ArrayOfPrimitiveOptionsInput'\n\n/**\n *\n * @hidden\n * @beta\n */\nexport function ArrayOfOptionsInput(props: ArrayOfObjectsInputProps | ArrayOfPrimitivesInputProps) {\n  return isArrayOfObjectsInputProps(props) ? (\n    <ArrayOfObjectOptionsInput {...props} />\n  ) : (\n    <ArrayOfPrimitiveOptionsInput {...props} />\n  )\n}\n","/* eslint-disable react/no-unused-prop-types */\nimport {AddIcon} from '@sanity/icons'\nimport {type ArraySchemaType, isReferenceSchemaType} from '@sanity/types'\nimport {Grid, Menu} from '@sanity/ui'\nimport {useCallback, useId, useMemo} from 'react'\n\nimport {Button, MenuButton, MenuItem, Tooltip} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n'\nimport {type ArrayInputFunctionsProps} from '../../../types'\n\n/**\n * @hidden\n * @beta */\nexport function ArrayOfPrimitivesFunctions<\n  MemberType extends string | boolean | number,\n  SchemaType extends ArraySchemaType,\n>(props: ArrayInputFunctionsProps<MemberType, SchemaType>) {\n  const {schemaType, readOnly, children, onValueCreate, onItemAppend} = props\n  const menuButtonId = useId()\n  const {t} = useTranslation()\n\n  const insertItem = useCallback(\n    (itemType: any) => {\n      onItemAppend(onValueCreate(itemType))\n    },\n    [onValueCreate, onItemAppend],\n  )\n\n  const handleAddBtnClick = useCallback(() => {\n    insertItem(schemaType.of[0])\n  }, [schemaType, insertItem])\n\n  const popoverProps = useMemo(() => ({constrainSize: true, portal: true}), [])\n\n  // If we have more than a single type candidate, we render a menu, so the button might show\n  // \"Add item...\" instead of simply \"Add item\", to indicate that further choices are available.\n  const addItemI18nKey =\n    schemaType.of.length > 1\n      ? 'inputs.array.action.add-item-select-type'\n      : 'inputs.array.action.add-item'\n\n  if (schemaType.options?.disableActions?.includes('add')) {\n    return null\n  }\n\n  if (readOnly) {\n    return (\n      <Tooltip portal content={t('inputs.array.read-only-label')}>\n        <Grid>\n          <Button\n            data-testid=\"add-single-primitive-button\"\n            icon={AddIcon}\n            mode=\"ghost\"\n            disabled\n            size=\"large\"\n            text={t(addItemI18nKey)}\n          />\n        </Grid>\n      </Tooltip>\n    )\n  }\n\n  return (\n    <Grid gap={1} style={{gridTemplateColumns: 'repeat(auto-fit, minmax(100px, 1fr))'}}>\n      {schemaType.of.length === 1 ? (\n        <Button\n          data-testid=\"add-multiple--primitive-button\"\n          icon={AddIcon}\n          mode=\"ghost\"\n          onClick={handleAddBtnClick}\n          size=\"large\"\n          text={t(addItemI18nKey)}\n        />\n      ) : (\n        <MenuButton\n          button={<Button icon={AddIcon} mode=\"ghost\" size=\"large\" text={t(addItemI18nKey)} />}\n          id={menuButtonId || ''}\n          menu={\n            <Menu>\n              {schemaType.of.map((memberDef, i) => {\n                // Use reference icon if reference is to one schemaType only\n                const referenceIcon =\n                  isReferenceSchemaType(memberDef) &&\n                  (memberDef.to || []).length === 1 &&\n                  memberDef.to[0].icon\n\n                const icon = memberDef.icon || memberDef.type?.icon || referenceIcon\n                return (\n                  <MenuItem\n                    key={i}\n                    text={memberDef.title || memberDef.type?.name}\n                    onClick={() => insertItem(memberDef)}\n                    icon={icon}\n                  />\n                )\n              })}\n            </Menu>\n          }\n          popover={popoverProps}\n        />\n      )}\n\n      {children}\n    </Grid>\n  )\n}\n","/* eslint-disable react/jsx-no-bind */\nimport {InsertAboveIcon, InsertBelowIcon} from '@sanity/icons'\nimport {type SchemaType} from '@sanity/types'\nimport {type ComponentProps, memo} from 'react'\n\nimport {MenuGroup, MenuItem, type PopoverProps} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n'\n\ninterface Props {\n  types?: SchemaType[]\n  onInsert: (pos: 'before' | 'after', type: SchemaType) => void\n}\n\nconst MENU_POPOVER_PROPS: PopoverProps = {\n  portal: true,\n  tone: 'default',\n  placement: 'left',\n  constrainSize: true,\n} as const\n\nexport const InsertMenuGroups = memo(function InsertMenuGroups(props: Props) {\n  const {types, onInsert} = props\n  const {t} = useTranslation()\n  return (\n    <>\n      <InsertMenuGroup\n        pos=\"before\"\n        types={types}\n        onInsert={onInsert}\n        text={t('inputs.array.action.add-before')}\n        icon={InsertAboveIcon}\n      />\n      <InsertMenuGroup\n        pos=\"after\"\n        types={types}\n        onInsert={onInsert}\n        text={t('inputs.array.action.add-after')}\n        icon={InsertBelowIcon}\n      />\n    </>\n  )\n})\n\nexport function InsertMenuGroup(\n  props: Props & {\n    pos: 'before' | 'after'\n    text: ComponentProps<typeof MenuItem>['text']\n    icon: ComponentProps<typeof MenuItem>['icon']\n  },\n) {\n  const {types, onInsert, pos, text, icon} = props\n\n  if (types?.length === 1) {\n    return <MenuItem key={pos} text={text} icon={icon} onClick={() => onInsert(pos, types[0])} />\n  }\n  return (\n    <MenuGroup text={text} key={pos} popover={MENU_POPOVER_PROPS}>\n      {types?.map((insertableType) => (\n        <MenuItem\n          key={insertableType.name}\n          icon={insertableType.icon}\n          text={insertableType.title}\n          onClick={() => onInsert(pos, insertableType)}\n        />\n      ))}\n    </MenuGroup>\n  )\n}\n","import {AddDocumentIcon, CopyIcon, InsertAboveIcon, InsertBelowIcon, TrashIcon} from '@sanity/icons'\nimport {type SchemaType} from '@sanity/types'\nimport {Box, Flex, Menu} from '@sanity/ui'\nimport {type ForwardedRef, forwardRef, useCallback, useMemo} from 'react'\n\nimport {MenuButton, MenuItem} from '../../../../../ui-components'\nimport {ContextMenuButton} from '../../../../components/contextMenuButton'\nimport {useTranslation} from '../../../../i18n'\nimport {FieldPresence} from '../../../../presence'\nimport {FormFieldValidationStatus} from '../../../components/formField'\nimport {type PrimitiveItemProps} from '../../../types/itemProps'\nimport {InsertMenuGroup} from '../ArrayOfObjectsInput/InsertMenuGroups'\nimport {RowLayout} from '../layouts/RowLayout'\nimport {getEmptyValue} from './getEmptyValue'\n\nexport type DefaultItemProps = Omit<PrimitiveItemProps, 'renderDefault'> & {\n  insertableTypes: SchemaType[]\n  sortable: boolean\n}\n\nconst MENU_BUTTON_POPOVER_PROPS = {portal: true, tone: 'default'} as const\nconst EMPTY_ARRAY: never[] = []\n\nexport const ItemRow = forwardRef(function ItemRow(\n  props: DefaultItemProps,\n  ref: ForwardedRef<HTMLDivElement>,\n) {\n  const {\n    sortable,\n    value,\n    insertableTypes,\n    onInsert,\n    onCopy,\n    onRemove,\n    readOnly,\n    inputId,\n    parentSchemaType,\n    validation,\n    children,\n    presence,\n    schemaType,\n  } = props\n\n  const hasError = validation.filter((item) => item.level === 'error').length > 0\n  const hasWarning = validation.filter((item) => item.level === 'warning').length > 0\n\n  const handleInsert = useCallback(\n    (pos: 'before' | 'after', insertType: SchemaType) => {\n      onInsert({position: pos, items: [getEmptyValue(insertType)]})\n    },\n    [onInsert],\n  )\n\n  const handleDuplicate = useCallback(() => {\n    if (value) onInsert({position: 'after', items: [value]})\n  }, [onInsert, value])\n\n  const handleCopy = useCallback(() => {\n    onCopy({\n      items: [value],\n    })\n  }, [onCopy, value])\n\n  const tone = useMemo(() => {\n    if (hasError) {\n      return 'critical'\n    }\n    if (hasWarning) {\n      return 'caution'\n    }\n\n    return undefined\n  }, [hasError, hasWarning])\n\n  const {t} = useTranslation()\n\n  const disableActions = parentSchemaType.options?.disableActions || EMPTY_ARRAY\n\n  const menuItems = useMemo(\n    () =>\n      [\n        !disableActions.includes('remove') && (\n          <MenuItem\n            key=\"remove\"\n            text={t('inputs.array.action.remove')}\n            tone=\"critical\"\n            icon={TrashIcon}\n            onClick={onRemove}\n          />\n        ),\n        !disableActions.includes('copy') && (\n          <MenuItem\n            key=\"copy\"\n            text={t('inputs.array.action.copy')}\n            icon={CopyIcon}\n            onClick={handleCopy}\n          />\n        ),\n        !disableActions.includes('duplicate') && (\n          <MenuItem\n            key=\"duplicate\"\n            text={t('inputs.array.action.duplicate')}\n            icon={AddDocumentIcon}\n            onClick={handleDuplicate}\n          />\n        ),\n        !(disableActions.includes('add') || disableActions.includes('addBefore')) && (\n          <InsertMenuGroup\n            pos=\"before\"\n            types={insertableTypes}\n            onInsert={handleInsert}\n            text={t('inputs.array.action.add-before')}\n            icon={InsertAboveIcon}\n          />\n        ),\n        !disableActions.includes('add') && !disableActions.includes('addAfter') && (\n          <InsertMenuGroup\n            pos=\"after\"\n            types={insertableTypes}\n            onInsert={handleInsert}\n            text={t('inputs.array.action.add-after')}\n            icon={InsertBelowIcon}\n          />\n        ),\n      ].filter(Boolean),\n    [disableActions, handleCopy, handleDuplicate, handleInsert, insertableTypes, onRemove, t],\n  )\n\n  const menu = useMemo(\n    () =>\n      readOnly || menuItems.length === 0 ? null : (\n        <MenuButton\n          button={<ContextMenuButton />}\n          id={`${inputId}-menuButton`}\n          popover={MENU_BUTTON_POPOVER_PROPS}\n          menu={<Menu>{menuItems}</Menu>}\n        />\n      ),\n    [inputId, menuItems, readOnly],\n  )\n  return (\n    <RowLayout\n      tone={tone}\n      readOnly={!!readOnly}\n      menu={menu}\n      dragHandle={sortable}\n      presence={presence.length === 0 ? null : <FieldPresence presence={presence} maxAvatars={1} />}\n      validation={\n        validation.length > 0 ? (\n          <Box paddingX={1} paddingY={3}>\n            <FormFieldValidationStatus validation={validation} />\n          </Box>\n        ) : null\n      }\n    >\n      <Flex align={schemaType ? 'flex-end' : 'center'} ref={ref}>\n        <Flex align=\"flex-end\" flex={1}>\n          <Box flex={1} marginRight={2}>\n            {children}\n          </Box>\n        </Flex>\n      </Flex>\n    </RowLayout>\n  )\n})\n","import {type ArraySchemaType} from '@sanity/types'\nimport {Card, Text} from '@sanity/ui'\n\nimport {useTranslation} from '../../../../i18n'\n\n/**\n * Shows a placeholder for an empty array of primitives.\n *\n * @internal\n */\nexport function NoItemsPlaceholder({schemaType}: {schemaType: ArraySchemaType}) {\n  const {t} = useTranslation()\n  return (\n    <Card padding={3} border radius={2}>\n      <Text align=\"center\" muted size={1}>\n        {schemaType.placeholder || t('inputs.array.no-items-label')}\n      </Text>\n    </Card>\n  )\n}\n","/**\n * Find the index of the nearest element with the same value. Starts at given index and looks incrementally in either direction for the searchElement\n * It's *NOT* inclusive: If the element matches the element at the startIdx, startIdx will be returned\n * It prefers matches in the first half. If there's a tie it will pick the first element that comes before\n */\nexport function nearestIndexOf<T>(array: T[], startIdx: number, searchElement: T) {\n  return nearestIndex(array, startIdx, (element) => element === searchElement)\n}\n\n/**\n * Find the index of the nearest element matching the predicate. Starts at given index and looks incrementally in either direction\n * It's *NOT* inclusive: If the predicate matches the element at the startIdx, startIdx will be returned\n * It prefers matches in the first half. If there's a tie it will pick the first element that comes before\n */\nexport function nearestIndex<T>(\n  array: T[],\n  startIdx: number,\n  predicate: (element: T, index: number) => boolean,\n) {\n  let lowerIdx = startIdx - 1\n  let upperIdx = startIdx\n  const len = array.length\n  while (lowerIdx > -1 || upperIdx < len) {\n    const upper = array[upperIdx]\n    if (upperIdx < len && predicate(upper, upperIdx)) {\n      return upperIdx\n    }\n    const lower = array[lowerIdx]\n    if (lowerIdx > -1 && predicate(lower, lowerIdx)) {\n      return lowerIdx\n    }\n    lowerIdx--\n    upperIdx++\n  }\n  return -1\n}\n","import {Card, Stack} from '@sanity/ui'\nimport {get} from 'lodash'\nimport {PureComponent} from 'react'\n\nimport {ChangeIndicator} from '../../../../changeIndicators'\nimport {ArrayOfPrimitivesItem} from '../../../members'\nimport {type ArrayOfPrimitivesInputProps} from '../../../types'\nimport {type PrimitiveItemProps} from '../../../types/itemProps'\nimport {ErrorItem} from '../ArrayOfObjectsInput/List/ErrorItem'\nimport {Item, List} from '../common/list'\nimport {UploadTargetCard} from '../common/UploadTargetCard'\nimport {ArrayOfPrimitivesFunctions} from './ArrayOfPrimitivesFunctions'\nimport {getEmptyValue} from './getEmptyValue'\nimport {ItemRow} from './ItemRow'\nimport {NoItemsPlaceholder} from './NoItemsPlaceholder'\nimport {type PrimitiveValue} from './types'\nimport {nearestIndexOf} from './utils/nearestIndex'\n\ninterface State {\n  disableTransition: boolean\n}\n\n/**\n * Note: this should be a class component until React provides support for a hook version of getSnapshotBeforeUpdate\n *\n * @hidden\n * @beta\n */\nexport class ArrayOfPrimitivesInput extends PureComponent<ArrayOfPrimitivesInputProps, State> {\n  _element: HTMLElement | null = null\n\n  constructor(props: ArrayOfPrimitivesInputProps) {\n    super(props)\n\n    this.state = {\n      disableTransition: false,\n    }\n  }\n\n  handleAppend = (itemValue: PrimitiveValue) => {\n    const {value = [], onIndexFocus, onItemAppend} = this.props\n    onItemAppend(itemValue)\n    onIndexFocus(value.length)\n  }\n\n  handlePrepend = (itemValue: PrimitiveValue) => {\n    const {onIndexFocus, value = [], onItemPrepend} = this.props\n    onItemPrepend(itemValue)\n    onIndexFocus(value.length)\n  }\n\n  handleSortEnd = (event: {fromIndex: number; toIndex: number}) => {\n    const {onIndexFocus, onMoveItem, value} = this.props\n\n    if (value) onMoveItem(event)\n    onIndexFocus(event.toIndex)\n  }\n\n  // Enable transition when the user starts dragging an item\n  handleItemMoveStart = () => {\n    this.setState({disableTransition: false})\n  }\n\n  // Disable transition when the user stops dragging an item.\n  // Note: there's an issue with the transition of items when the sorting is completed, so we disable the\n  // transition effect when the user stops dragging.\n  handleItemMoveEnd = () => {\n    this.setState({disableTransition: true})\n  }\n\n  focus() {\n    if (this._element) {\n      this._element.focus()\n    }\n  }\n\n  getSnapshotBeforeUpdate(prevProps: ArrayOfPrimitivesInputProps) {\n    const {focusPath: prevFocusPath = [], value: prevValue = []} = prevProps\n    const {focusPath = [], value = []} = this.props\n    if (prevFocusPath[0] === focusPath[0] && prevValue.length !== value.length) {\n      // the length of the array has changed, but the focus path has not, which may happen if someone inserts or removes a new item above the one currently in focus\n      const focusIndex = focusPath[0]\n\n      const selection = window.getSelection()\n      if (!(selection?.focusNode instanceof HTMLElement)) {\n        return null\n      }\n\n      const input = selection.focusNode?.querySelector('input,textarea')\n\n      return input instanceof HTMLInputElement\n        ? {\n            prevFocusedIndex: focusIndex,\n            restoreSelection: {\n              text: selection.toString(),\n              start: input.selectionStart,\n              end: input.selectionEnd,\n              value: input.value,\n            },\n          }\n        : {}\n    }\n\n    return null\n  }\n\n  componentDidUpdate(\n    prevProps: ArrayOfPrimitivesInputProps,\n    prevState: Record<string, unknown>,\n    snapshot?: {restoreSelection: {start: number; end: number}; prevFocusedIndex: number},\n  ) {\n    const {onIndexFocus} = this.props\n    if (snapshot?.restoreSelection && prevProps.value) {\n      const prevFocusedValue = prevProps.value[snapshot.prevFocusedIndex]\n\n      const nearestIndex = nearestIndexOf(\n        this.props.value || [],\n        snapshot.prevFocusedIndex,\n        prevFocusedValue,\n      )\n\n      if (nearestIndex === -1) {\n        return\n      }\n      const newInput = this._element?.querySelector(\n        `[data-item-index='${nearestIndex}'] input,textarea`,\n      )\n\n      if (newInput instanceof HTMLInputElement) {\n        newInput.focus()\n        try {\n          newInput.setSelectionRange(snapshot.restoreSelection.start, snapshot.restoreSelection.end)\n        } catch {\n          // not all inputs supports selection (e.g. <input type=\"number\" />)\n        }\n      }\n      onIndexFocus(nearestIndex)\n    }\n  }\n\n  renderArrayItem = (props: Omit<PrimitiveItemProps, 'renderDefault'>) => {\n    const {schemaType} = this.props\n    const {key, ...rest} = props\n    const sortable = schemaType.options?.sortable !== false\n    return <ItemRow key={key} {...rest} sortable={sortable} insertableTypes={schemaType.of} />\n  }\n\n  render() {\n    const {\n      schemaType,\n      members,\n      readOnly,\n      renderInput,\n      onUpload,\n      onItemRemove,\n      resolveUploader,\n      elementProps,\n      arrayFunctions: ArrayFunctions = ArrayOfPrimitivesFunctions,\n      changed,\n    } = this.props\n\n    const isSortable = !readOnly && get(schemaType, 'options.sortable') !== false\n\n    // Note: we need this in order to generate new id's when items are moved around in the list\n    // without it, dndkit will restore focus on the original index of the dragged item\n    const membersWithSortIds = members.map((member) => ({\n      id: `${member.key}-${member.kind === 'item' ? member.item.value : 'error'}`,\n      member: member,\n    }))\n\n    return (\n      <Stack space={2} data-testid=\"array-primitives-input\">\n        <UploadTargetCard\n          types={schemaType.of}\n          resolveUploader={resolveUploader}\n          onUpload={onUpload}\n          {...elementProps}\n          tabIndex={0}\n        >\n          <Stack space={1}>\n            {membersWithSortIds.length === 0 ? (\n              <NoItemsPlaceholder schemaType={schemaType} />\n            ) : (\n              <Card padding={1} border>\n                <List\n                  onItemMove={this.handleSortEnd}\n                  onItemMoveStart={this.handleItemMoveStart}\n                  onItemMoveEnd={this.handleItemMoveEnd}\n                  items={membersWithSortIds.map((m) => m.id)}\n                  sortable={isSortable}\n                  gap={1}\n                >\n                  {membersWithSortIds.map(({member, id}, index) => {\n                    return (\n                      <Item\n                        key={member.key}\n                        id={id}\n                        sortable={isSortable}\n                        disableTransition={this.state.disableTransition}\n                      >\n                        {member.kind === 'item' && (\n                          <ChangeIndicator\n                            path={member.item.path}\n                            isChanged={changed}\n                            hasFocus={false}\n                          >\n                            <ArrayOfPrimitivesItem\n                              member={member}\n                              renderItem={this.renderArrayItem}\n                              renderInput={renderInput}\n                            />\n                          </ChangeIndicator>\n                        )}\n                        {member.kind === 'error' && (\n                          <ErrorItem\n                            readOnly={readOnly}\n                            sortable={isSortable}\n                            member={member}\n                            onRemove={() => onItemRemove(index)}\n                          />\n                        )}\n                      </Item>\n                    )\n                  })}\n                </List>\n              </Card>\n            )}\n          </Stack>\n        </UploadTargetCard>\n\n        <ArrayFunctions\n          onChange={this.props.onChange}\n          onItemAppend={this.handleAppend}\n          onItemPrepend={this.handlePrepend}\n          onValueCreate={getEmptyValue}\n          readOnly={this.props.readOnly}\n          schemaType={this.props.schemaType}\n          value={this.props.value}\n        />\n      </Stack>\n    )\n  }\n}\n","import {useMemo} from 'react'\n\nimport {\n  type ArrayOfObjectsInputProps,\n  type ArrayOfPrimitivesInputProps,\n  isArrayOfPrimitivesInputProps,\n} from '../../types'\nimport {ArrayOfObjectsInput} from './ArrayOfObjectsInput'\nimport {ArrayOfOptionsInput} from './ArrayOfOptionsInput'\nimport {ArrayOfPrimitivesInput} from './ArrayOfPrimitivesInput'\n\n/**\n * Universal array input that will introspect its schemaType and delegate to the right implementation\n * Useful as a fallback/last resort input for an array type\n *\n *\n * @hidden\n * @beta\n */\nexport function UniversalArrayInput(props: ArrayOfObjectsInputProps | ArrayOfPrimitivesInputProps) {\n  const isArrayOfOptionsInput = useMemo(\n    () => Array.isArray(props.schemaType.options?.list),\n    [props.schemaType],\n  )\n\n  if (isArrayOfOptionsInput) {\n    return <ArrayOfOptionsInput {...props} />\n  }\n\n  return isArrayOfPrimitivesInputProps(props) ? (\n    <ArrayOfPrimitivesInput {...props} />\n  ) : (\n    <ArrayOfObjectsInput {...props} />\n  )\n}\n","import {Box, Card, type CardTone, Checkbox, Flex, Switch} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {Tooltip} from '../../../ui-components'\nimport {useTranslation} from '../../i18n/hooks/useTranslation'\nimport {FormFieldHeaderText} from '../components/formField/FormFieldHeaderText'\nimport {FormFieldStatus} from '../components/formField/FormFieldStatus'\nimport {type BooleanInputProps} from '../types'\n\nconst Root = styled(Card)`\n  line-height: 1;\n`\n\nconst CenterAlignedBox = styled(Box)`\n  align-self: center;\n`\n\nconst ZeroLineHeightBox = styled(Box)`\n  line-height: 0;\n`\n\n/**\n *\n * @hidden\n * @beta\n */\nexport function BooleanInput(props: BooleanInputProps) {\n  const {t} = useTranslation()\n  const {id, value, schemaType, readOnly, elementProps, validation} = props\n  const layout = schemaType.options?.layout || 'switch'\n\n  const indeterminate = typeof value !== 'boolean'\n  const checked = value || false\n\n  const LayoutSpecificInput = layout === 'checkbox' ? Checkbox : Switch\n\n  const tone: CardTone | undefined = readOnly ? 'transparent' : undefined\n\n  const input = (\n    <ZeroLineHeightBox padding={3}>\n      <LayoutSpecificInput\n        label={schemaType.title}\n        {...elementProps}\n        checked={checked}\n        readOnly={readOnly}\n        indeterminate={indeterminate}\n        style={{margin: -4}}\n      />\n    </ZeroLineHeightBox>\n  )\n\n  return (\n    <Root border data-testid=\"boolean-input\" radius={2} tone={tone}>\n      <Flex>\n        {readOnly ? <Tooltip content={t('inputs.boolean.disabled')}>{input}</Tooltip> : input}\n        <Box flex={1} paddingY={2}>\n          <FormFieldHeaderText\n            deprecated={schemaType.deprecated}\n            description={schemaType.description}\n            inputId={id}\n            validation={validation}\n            title={schemaType.title}\n          />\n        </Box>\n        <CenterAlignedBox paddingX={3} paddingY={1}>\n          <FormFieldStatus maxAvatars={1} position=\"top\">\n            {/*<FieldPresence maxAvatars={1} presence={presence} />*/}\n          </FormFieldStatus>\n        </CenterAlignedBox>\n      </Flex>\n    </Root>\n  )\n}\n","import {TextInput} from '@sanity/ui'\n\nimport {type StringInputProps} from '../types'\n\n/**\n *\n * @hidden\n * @beta\n */\nexport type EmailInputProps = StringInputProps\n\n/**\n *\n * @hidden\n * @beta\n */\nexport function EmailInput(props: EmailInputProps) {\n  const {validationError, elementProps} = props\n  return (\n    <TextInput {...elementProps} type=\"email\" inputMode=\"email\" customValidity={validationError} />\n  )\n}\n","import {type Rule, type RuleSpec, type SchemaType, type SchemaValidationValue} from '@sanity/types'\n\nconst normalizeRules = (\n  validation: SchemaValidationValue | undefined,\n  type?: SchemaType,\n): Rule[] => {\n  if (typeof validation === 'function') {\n    throw new Error(\n      `Schema type \"${\n        type?.name || '<not-found>'\n      }\"'s \\`validation\\` was not run though \\`inferFromSchema\\``,\n    )\n  }\n  if (!validation) return []\n  if (Array.isArray(validation)) return validation as Rule[]\n  return [validation]\n}\n\n/**\n * Finds the first matching validation rule spec from a Rule class instance.\n *\n * @internal\n * Note: This accesses private fields of the rule.\n */\nexport function getValidationRule<RuleFlag extends RuleSpec['flag']>(\n  type: SchemaType | undefined,\n  ruleName: RuleFlag,\n): Extract<RuleSpec, {flag: RuleFlag}> | null {\n  for (const rule of normalizeRules(type?.validation, type)) {\n    for (const ruleSpec of rule._rules) {\n      if (ruleSpec.flag === ruleName) {\n        return ruleSpec as Extract<RuleSpec, {flag: RuleFlag}>\n      }\n    }\n  }\n\n  return null\n}\n","import {TextInput} from '@sanity/ui'\nimport {useEffect} from 'react'\n\nimport {type NumberInputProps} from '../types'\nimport {getValidationRule} from '../utils/getValidationRule'\n\nfunction getScrollableParent(node: EventTarget) {\n  if (!node || !(node instanceof Element)) return null\n\n  let parent = node.parentElement\n\n  while (parent) {\n    const style = window.getComputedStyle(parent)\n    const overflowY = style.overflowY\n    const isScrollable = overflowY === 'auto' || overflowY === 'scroll'\n    if (isScrollable && parent.scrollHeight > parent.clientHeight) {\n      return parent\n    }\n    parent = parent.parentElement\n  }\n\n  return window\n}\n\n// Workaround for wheel-events causing number inputs to mutate\n//\n// The mere presence of an event listener for the wheel event causes number inputs to mutate on wheel.\n// This is terrible UX and can lead to accidental modifications of values that can go unnoticed.\n// The below event handler provides a workaround for Chromium-based browsers.\n// Firefox has removed mutate-on-wheel behavior\n// Safari has removed it as of current Technology Preview, but this workaround, however, does not fix\n// the issue for current Safari versions\n// See https://github.com/facebook/react/issues/32156\nfunction preventWheel(event: WheelEvent) {\n  if (event.currentTarget && document.activeElement === event.currentTarget) {\n    event.preventDefault()\n    const scrollContainer = getScrollableParent(event.currentTarget)\n    if (scrollContainer) {\n      // The above preventDefault also prevents scrolling, but we still want the wheel event to actually scroll\n      // so we'll instead explicitly call scrollBy on the nearest scroll container\n      // ## Note about Safari\n      // Testing in Safari 18.1.1 reveals that this call to .scrollBy actually brings back the mutate-on-scroll\n      // behavior and triggers an onChange on the input ending up voiding the workaround here, meaning\n      // mutate-on-wheel behavior will still be an issue in Safari. It's unclear to me why this happens.\n      // However, since WebKit has removed mutate-on-wheel behavior, this will cease to be an issue in a future release of Safari.\n      scrollContainer.scrollBy({\n        top: event.deltaY,\n        left: event.deltaX,\n        behavior: 'instant',\n      })\n    }\n  }\n}\n/**\n *\n * @hidden\n * @beta\n */\nexport function NumberInput(props: NumberInputProps) {\n  const {schemaType, validationError, elementProps} = props\n\n  // Show numpad on mobile if only positive numbers is preferred\n  const minRule = getValidationRule(schemaType, 'min')\n  const integerRule = getValidationRule(schemaType, 'integer')\n  const precisionRule = getValidationRule(schemaType, 'precision')\n  const onlyPositiveNumber = typeof minRule?.constraint === 'number' && minRule?.constraint >= 0\n  const onlyIntegers = integerRule || precisionRule?.constraint === 0\n\n  // eslint-disable-next-line no-nested-ternary\n  const inputMode = onlyPositiveNumber ? (onlyIntegers ? 'numeric' : 'decimal') : 'text'\n\n  const inputElementRef = elementProps.ref\n\n  useEffect(() => {\n    const element = inputElementRef.current\n    element.addEventListener('wheel', preventWheel)\n    return () => {\n      element.removeEventListener('wheel', preventWheel)\n    }\n  }, [inputElementRef])\n\n  return (\n    <TextInput\n      {...elementProps}\n      type=\"number\"\n      step=\"any\"\n      inputMode={inputMode}\n      customValidity={validationError}\n      placeholder={schemaType.placeholder}\n      pattern={onlyPositiveNumber ? '[d]*' : undefined}\n      max={Number.MAX_SAFE_INTEGER}\n      min={Number.MIN_SAFE_INTEGER}\n      data-testid=\"number-input\"\n    />\n  )\n}\n","import {type ComponentType, forwardRef, type Ref, useCallback} from 'react'\n\nimport {Tab} from '../../../../../ui-components'\n\ninterface GroupType {\n  'aria-controls': string\n  'autoFocus'?: boolean\n  'disabled'?: boolean\n  'icon'?: ComponentType\n  'name': string\n  'onClick'?: (value: string) => void\n  'selected': boolean\n  'title': string\n}\n\nexport const GroupTab = forwardRef(function GroupTab(\n  props: GroupType,\n  ref: Ref<HTMLButtonElement>,\n) {\n  // Separate props for resolving conditional hidden groups\n  const {onClick} = props\n\n  // Here goes the content of our component\n  const handleClick = useCallback(() => {\n    onClick?.(props.name)\n  }, [props.name, onClick])\n\n  return (\n    <Tab\n      data-testid={`group-tab-${props.name}`}\n      id={`${props.name}-tab`}\n      label={props.title}\n      ref={ref}\n      {...props}\n      onClick={handleClick}\n    />\n  )\n})\n\nexport const GroupOption = (props: Omit<GroupType, 'onClick' | 'autoFocus'>) => {\n  const {name, title, ...rest} = props\n  const {selected} = props\n\n  return (\n    <option\n      title={title}\n      value={name}\n      id={`${name}-tab`}\n      aria-controls={rest['aria-controls']}\n      data-testid={`group-select-${name}`}\n      aria-selected={selected ? 'true' : 'false'}\n    >\n      {title || name}\n    </option>\n  )\n}\n","import {ElementQuery, Select, TabList} from '@sanity/ui'\nimport {type ChangeEvent, memo, useCallback} from 'react'\nimport {styled} from 'styled-components'\n\nimport {useTranslation} from '../../../../i18n'\nimport {type FormFieldGroup} from '../../../store'\nimport {GroupOption, GroupTab} from './GroupTab'\n\ninterface FieldGroupTabsProps {\n  disabled?: boolean\n  groups: FormFieldGroup[]\n  inputId?: string\n  onClick?: (name: string) => void\n  shouldAutoFocus?: boolean\n}\n\nconst Root = styled(ElementQuery)`\n  /* Hide on small screens */\n  &[data-eq-max~='0'] [data-ui='TabList'] {\n    display: none;\n  }\n\n  /* Hide on medium to large screens */\n  [data-ui='Select'] {\n    display: none;\n  }\n\n  /* Show on small screens */\n  &[data-eq-max~='0'] [data-ui='Select'] {\n    display: block;\n  }\n`\n\n/* For medium to large screens, use TabList and Tab from Sanity UI  */\nconst GroupTabs = ({\n  inputId,\n  groups,\n  onClick,\n  shouldAutoFocus = true,\n  disabled,\n}: FieldGroupTabsProps) => {\n  const {t} = useTranslation()\n  return (\n    <TabList space={2} data-testid=\"field-group-tabs\">\n      {groups.map((group) => {\n        const title = group.i18n?.title\n          ? t(group.i18n.title.key, {ns: group.i18n.title.ns})\n          : group.title || group.name\n\n        return (\n          <GroupTab\n            aria-controls={`${inputId}-field-group-fields`}\n            autoFocus={shouldAutoFocus && group.selected}\n            disabled={disabled || group.disabled}\n            icon={group?.icon}\n            key={`${inputId}-${group.name}-tab`}\n            name={group.name}\n            onClick={onClick}\n            selected={Boolean(group.selected)}\n            title={title}\n          />\n        )\n      })}\n    </TabList>\n  )\n}\n\n/* For small screens, use Select from Sanity UI  */\nconst GroupSelect = ({\n  disabled,\n  groups,\n  inputId,\n  onSelect,\n  shouldAutoFocus = true,\n}: Omit<FieldGroupTabsProps, 'onClick'> & {onSelect: (name: string) => void}) => {\n  const handleSelect = useCallback(\n    (event: ChangeEvent<HTMLSelectElement>) => {\n      onSelect(event.currentTarget.value)\n    },\n    [onSelect],\n  )\n\n  const {t} = useTranslation()\n\n  return (\n    <Select\n      aria-label={t('inputs.object.field-group-tabs.aria-label')}\n      autoFocus={shouldAutoFocus}\n      data-testid=\"field-group-select\"\n      disabled={disabled}\n      fontSize={2}\n      muted\n      onChange={handleSelect}\n      value={groups.find((g) => g.selected)?.name}\n    >\n      {groups.map((group) => {\n        const title = group.i18n?.title\n          ? t(group.i18n.title.key, {ns: group.i18n.title.ns})\n          : group.title || group.name\n\n        return (\n          <GroupOption\n            aria-controls={`${inputId}-field-group-fields`}\n            disabled={group.disabled}\n            key={`${inputId}-${group.name}-tab`}\n            name={group.name}\n            selected={Boolean(group.selected)}\n            title={title}\n          />\n        )\n      })}\n    </Select>\n  )\n}\n\nexport const FieldGroupTabs = memo(function FieldGroupTabs({\n  disabled = false,\n  onClick,\n  ...props\n}: FieldGroupTabsProps) {\n  const handleClick = useCallback(\n    (groupName: any) => {\n      onClick?.(groupName)\n    },\n    [onClick],\n  )\n\n  return (\n    <Root data-testid=\"field-group-root\">\n      <GroupTabs {...props} disabled={disabled} onClick={handleClick} />\n      <GroupSelect {...props} disabled={disabled} onSelect={handleClick} />\n    </Root>\n  )\n})\n","import {Card, Grid} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\n// The negative margins here removes the extra space between the tabs and the fields when inside of a grid\nexport const FieldGroupTabsWrapper = styled(Card)<{$level?: number}>`\n  margin-bottom: ${({$level, theme}) => ($level === 0 ? 0 : theme.sanity.space[5] * -1)}px;\n  padding-bottom: ${({$level, theme}) =>\n    $level === 0 ? theme.sanity.space[4] : theme.sanity.space[4]}px;\n`\nexport const AlignedBottomGrid = styled(Grid)`\n  align-items: flex-end;\n`\n","import {TrashIcon} from '@sanity/icons'\nimport {Box, Card, Code, Stack, Text} from '@sanity/ui'\nimport {useCallback} from 'react'\n\nimport {Button} from '../../../../ui-components'\nimport {isDev} from '../../../environment'\nimport {Translate, useTranslation} from '../../../i18n'\nimport {Alert} from '../../components/Alert'\nimport {Details} from '../../components/Details'\nimport {type FormPatch, type PatchEvent, unset} from '../../patch'\n\ntype Props = {\n  fieldNames: string[]\n  value?: Record<string, unknown>\n  onChange(patch: FormPatch): void\n  onChange(patch: FormPatch[]): void\n  onChange(patch: PatchEvent): void\n  readOnly?: boolean\n}\n\nexport function UnknownFields(props: Props) {\n  const {fieldNames, onChange, readOnly, value} = props\n  const fieldsLen = fieldNames.length\n\n  const handleUnsetClick = useCallback(\n    (fieldName: any) => {\n      onChange(unset([fieldName]))\n    },\n    [onChange],\n  )\n\n  const {t} = useTranslation()\n\n  return (\n    <Alert\n      status=\"warning\"\n      title={<>{t('inputs.object.unknown-fields.warning.title', {count: fieldsLen})}</>}\n    >\n      <Text as=\"p\" muted size={1}>\n        <>{t('inputs.object.unknown-fields.warning.description', {count: fieldsLen})}</>\n      </Text>\n\n      <Details\n        marginTop={4}\n        open={isDev}\n        title={t('inputs.object.unknown-fields.warning.details.title')}\n      >\n        <Box marginBottom={3}>\n          <Text as=\"p\" muted size={1}>\n            <>{t('inputs.object.unknown-fields.warning.details.description', {count: fieldsLen})}</>\n          </Text>\n        </Box>\n\n        <Stack as=\"ul\" space={3}>\n          {fieldNames.map((fieldName) => {\n            return (\n              <UnknownField\n                key={fieldName}\n                fieldName={fieldName}\n                onUnsetClick={handleUnsetClick}\n                readOnly={readOnly}\n                value={value?.[fieldName]}\n              />\n            )\n          })}\n        </Stack>\n      </Details>\n    </Alert>\n  )\n}\n\nfunction UnknownField({\n  fieldName,\n  onUnsetClick,\n  readOnly,\n  value,\n}: {\n  fieldName: string\n  onUnsetClick: (fieldName: string) => void\n  readOnly?: boolean\n  value: unknown\n}) {\n  const handleUnsetClick = useCallback(() => {\n    onUnsetClick(fieldName)\n  }, [fieldName, onUnsetClick])\n\n  const {t} = useTranslation()\n\n  return (\n    <Card as=\"li\" overflow=\"hidden\" radius={2} shadow={1} tone=\"caution\">\n      <Card padding={3} shadow={1} tone=\"inherit\">\n        <Code size={1}>{fieldName}</Code>\n      </Card>\n\n      <Box overflow=\"auto\" padding={3}>\n        <Code language=\"json\" size={1}>\n          {JSON.stringify(value, null, 2)}\n        </Code>\n      </Box>\n\n      {readOnly && (\n        <Box padding={3}>\n          <Text as=\"p\" muted size={1}>\n            <Translate t={t} i18nKey=\"inputs.object.unknown-fields.read-only.description\" />\n          </Text>\n        </Box>\n      )}\n\n      {!readOnly && (\n        <Card padding={3} shadow={1} tone=\"inherit\">\n          <Button\n            icon={TrashIcon}\n            mode=\"ghost\"\n            onClick={handleUnsetClick}\n            size=\"large\"\n            tone=\"critical\"\n            text={t('inputs.object.unknown-fields.remove-field-button.text')}\n          />\n        </Card>\n      )}\n    </Card>\n  )\n}\n","import {isKeySegment} from '@sanity/types'\nimport {Stack} from '@sanity/ui'\nimport {last} from 'lodash'\nimport {type FocusEvent, Fragment, memo, useCallback, useMemo, useRef} from 'react'\nimport {styled} from 'styled-components'\n\nimport {EMPTY_ARRAY} from '../../../util/empty'\nimport {ObjectInputMembers} from '../../members'\nimport {type ObjectInputProps} from '../../types'\nimport {FieldGroupTabs} from './fieldGroups/FieldGroupTabs'\nimport {AlignedBottomGrid, FieldGroupTabsWrapper} from './ObjectInput.styled'\nimport {UnknownFields} from './UnknownFields'\n\nconst RootStack = styled(Stack)`\n  // Disable focus ring for the object block. We instead highlight the left border on the fieldset\n  // for level > 0 to signal that you have focused on the object\n  &:focus {\n    outline: none;\n  }\n`\n\n/**\n * @hidden\n * @beta */\nexport const ObjectInput = memo(function ObjectInput(props: ObjectInputProps) {\n  const {\n    __internal_arrayEditingModal: arrayEditingModal = null,\n    groups,\n    id,\n    members,\n    onChange,\n    onFieldGroupSelect,\n    renderAnnotation,\n    renderBlock,\n    renderField,\n    renderInlineBlock,\n    renderInput,\n    renderItem,\n    renderPreview,\n    schemaType,\n    path,\n    level,\n    value,\n    onPathFocus,\n  } = props\n\n  const wrapperRef = useRef<HTMLDivElement>(null)\n  const {columns} = schemaType.options || {}\n\n  // Object inputs should only be focusable if they are not the root object input\n  // This includes if they are in the root of a array block\n  const isFocusable = useMemo(() => {\n    return id !== 'root' && !(path.length > 0 && isKeySegment(last(path)!))\n  }, [id, path])\n\n  const renderedUnknownFields = useMemo(() => {\n    if (!schemaType.fields) {\n      return null\n    }\n\n    const knownFieldNames = schemaType.fields.map((field) => field.name)\n    const unknownFields = Object.keys(value || {}).filter(\n      (key) => !key.startsWith('_') && !knownFieldNames.includes(key),\n    )\n\n    if (unknownFields.length === 0) {\n      return null\n    }\n\n    return <UnknownFields fieldNames={unknownFields} value={value} onChange={onChange} />\n  }, [onChange, schemaType.fields, value])\n\n  const selectedGroup = useMemo(() => groups.find(({selected}) => selected), [groups])\n\n  const handleFocus = useCallback(\n    (event: FocusEvent) => {\n      if (!isFocusable) {\n        return\n      }\n\n      // Since the focus event will bubble up to the wrapper, we need to check if the object input is the actual target\n      if (event.target === wrapperRef.current) {\n        onPathFocus(EMPTY_ARRAY)\n      }\n    },\n    [isFocusable, onPathFocus],\n  )\n\n  const renderObjectMembers = useCallback(\n    () => (\n      <ObjectInputMembers\n        members={members}\n        renderAnnotation={renderAnnotation}\n        renderBlock={renderBlock}\n        renderField={renderField}\n        renderInlineBlock={renderInlineBlock}\n        renderInput={renderInput}\n        renderItem={renderItem}\n        renderPreview={renderPreview}\n      />\n    ),\n    [\n      members,\n      renderAnnotation,\n      renderBlock,\n      renderField,\n      renderInlineBlock,\n      renderInput,\n      renderItem,\n      renderPreview,\n    ],\n  )\n\n  if (members.length === 0) {\n    return null\n  }\n\n  return (\n    <>\n      {arrayEditingModal}\n\n      <RootStack\n        space={6}\n        tabIndex={isFocusable ? 0 : undefined}\n        onFocus={handleFocus}\n        ref={wrapperRef}\n      >\n        {groups.length > 0 ? (\n          <FieldGroupTabsWrapper $level={level} data-testid=\"field-groups\">\n            <FieldGroupTabs\n              groups={groups}\n              inputId={id}\n              onClick={onFieldGroupSelect}\n              // autofocus is taken care of either by focusPath or focusFirstDescendant in the parent component\n              shouldAutoFocus={false}\n            />\n          </FieldGroupTabsWrapper>\n        ) : null}\n\n        <Fragment\n          // A key is used here to create a unique element for each selected group. This ensures\n          // virtualized descendants are recalculated when the selected group changes.\n          key={selectedGroup?.name}\n        >\n          {columns ? (\n            <AlignedBottomGrid columns={columns} gap={4} marginTop={1}>\n              {renderObjectMembers()}\n            </AlignedBottomGrid>\n          ) : (\n            renderObjectMembers()\n          )}\n        </Fragment>\n\n        {renderedUnknownFields}\n      </RootStack>\n    </>\n  )\n})\n","import {type SlugSchemaType, type SlugSourceContext} from '@sanity/types'\nimport speakingurl from 'speakingurl'\n\nimport {type FIXME} from '../../../../FIXME'\n\n// Fallback slugify function if not defined in field options\nconst defaultSlugify = (value: FIXME, type: SlugSchemaType): string => {\n  const maxLength = type.options?.maxLength\n  const slugifyOpts = {truncate: typeof maxLength === 'number' ? maxLength : 200, symbols: true}\n  return value ? speakingurl(value, slugifyOpts) : ''\n}\n\n// eslint-disable-next-line require-await\nexport async function slugify(\n  sourceValue: FIXME,\n  type: SlugSchemaType,\n  context: SlugSourceContext,\n): Promise<string> {\n  if (!sourceValue) {\n    return sourceValue\n  }\n\n  const slugifier = type.options?.slugify || defaultSlugify\n  return slugifier(sourceValue, type, context)\n}\n","import {useCallback, useRef, useState} from 'react'\n\nexport type AsyncCompleteState<T> = {\n  status: 'complete'\n  result: T\n}\nexport type AsyncPendingState = {\n  status: 'pending'\n}\nexport type AsyncErrorState = {\n  status: 'error'\n  error: Error\n}\n\nexport type AsyncState<T> = AsyncPendingState | AsyncCompleteState<T> | AsyncErrorState\n\n/**\n * Takes an async function and returns a [AsyncState<value>, callback] pair.\n * Whenever the callback is invoked, a new AsyncState is returned.\n * If the returned callback is called again before the previous callback has settled, the resolution of the previous one will be ignored, thus preventing race conditions.\n * @param fn - an async function that returns a value\n */\nexport function useAsync<T, U>(\n  fn: (arg: U) => Promise<T>,\n): [null | AsyncState<T>, (arg: U) => void] {\n  const [state, setState] = useState<AsyncState<T> | null>(null)\n\n  const lastId = useRef(0)\n\n  const wrappedCallback = useCallback(\n    (arg: U) => {\n      const asyncId = ++lastId.current\n      setState({status: 'pending'})\n\n      Promise.resolve()\n        .then(() => fn(arg))\n        .then(\n          (res) => {\n            if (asyncId === lastId.current) {\n              setState({status: 'complete', result: res})\n            }\n          },\n          (err) => {\n            if (asyncId === lastId.current) {\n              setState({status: 'error', error: err})\n            }\n          },\n        )\n    },\n    [fn],\n  )\n\n  return [state, wrappedCallback]\n}\n","import {type SlugSourceContext} from '@sanity/types'\nimport {useMemo} from 'react'\n\nimport {useCurrentUser, useDataset, useProjectId, useSchema, useSource} from '../../../../../core'\n\n/**\n * @internal\n */\nexport type SlugContext = Omit<SlugSourceContext, 'parent' | 'parentPath'>\n\n/**\n * @internal\n */\nexport function useSlugContext(): SlugContext {\n  const {getClient} = useSource()\n  const schema = useSchema()\n  const currentUser = useCurrentUser()\n  const projectId = useProjectId()\n  const dataset = useDataset()\n\n  return useMemo(() => {\n    return {\n      projectId,\n      dataset,\n      getClient,\n      schema,\n      currentUser,\n    }\n  }, [getClient, schema, currentUser, projectId, dataset])\n}\n","import {\n  type Path,\n  type SanityDocument,\n  type SlugParent,\n  type SlugSchemaType,\n  type SlugSourceContext,\n  type SlugSourceFn,\n  type SlugValue,\n} from '@sanity/types'\nimport {Box, Card, Flex, Stack, TextInput} from '@sanity/ui'\nimport * as PathUtils from '@sanity/util/paths'\nimport {type FormEvent, useCallback, useMemo} from 'react'\n\nimport {Button} from '../../../../ui-components'\nimport {useTranslation} from '../../../i18n'\nimport {useGetFormValue} from '../../contexts/GetFormValue'\nimport {PatchEvent, set, setIfMissing, unset} from '../../patch'\nimport {type ObjectInputProps} from '../../types'\nimport {slugify} from './utils/slugify'\nimport {useAsync} from './utils/useAsync'\nimport {type SlugContext, useSlugContext} from './utils/useSlugContext'\n\n/**\n *\n * @hidden\n * @beta\n */\nexport type SlugInputProps = ObjectInputProps<SlugValue, SlugSchemaType>\n\nfunction getSlugSourceContext(\n  valuePath: Path,\n  document: SanityDocument,\n  context: SlugContext,\n): SlugSourceContext {\n  const parentPath = valuePath.slice(0, -1)\n  const parent = PathUtils.get(document, parentPath) as SlugParent\n  return {parentPath, parent, ...context}\n}\n\n// eslint-disable-next-line require-await\nasync function getNewFromSource(\n  source: string | Path | SlugSourceFn,\n  document: SanityDocument,\n  context: SlugSourceContext,\n): Promise<string | undefined> {\n  return typeof source === 'function'\n    ? source(document, context)\n    : (PathUtils.get(document, source) as string | undefined)\n}\n\n/**\n *\n * @hidden\n * @beta\n */\nexport function SlugInput(props: SlugInputProps) {\n  const getFormValue = useGetFormValue()\n  const {path, value, schemaType, validation, onChange, readOnly, elementProps} = props\n  const sourceField = schemaType.options?.source\n  const errors = useMemo(() => validation.filter((item) => item.level === 'error'), [validation])\n\n  const slugContext = useSlugContext()\n\n  const {t} = useTranslation()\n\n  const updateSlug = useCallback(\n    (nextSlug: string) => {\n      if (!nextSlug) {\n        onChange(PatchEvent.from(unset([])))\n        return\n      }\n\n      onChange(\n        PatchEvent.from([setIfMissing({_type: schemaType.name}), set(nextSlug, ['current'])]),\n      )\n    },\n    [onChange, schemaType.name],\n  )\n\n  const handleAsyncGenerateSlug = useCallback(() => {\n    if (!sourceField) {\n      return Promise.reject(\n        new Error(t('inputs.slug.error.missing-source', {schemaType: schemaType.name})),\n      )\n    }\n\n    const doc = (getFormValue([]) as SanityDocument) || ({_type: schemaType.name} as SanityDocument)\n    const sourceContext = getSlugSourceContext(path, doc, slugContext)\n    return getNewFromSource(sourceField, doc, sourceContext)\n      .then((newFromSource) => slugify(newFromSource || '', schemaType, sourceContext))\n      .then((newSlug) => updateSlug(newSlug))\n  }, [sourceField, getFormValue, schemaType, path, slugContext, updateSlug, t])\n  const [generateState, handleGenerateSlug] = useAsync(handleAsyncGenerateSlug)\n\n  const isUpdating = generateState?.status === 'pending'\n\n  const handleChange = useCallback(\n    (event: FormEvent<HTMLInputElement>) => updateSlug(event.currentTarget.value),\n    [updateSlug],\n  )\n\n  return (\n    <Stack space={3}>\n      <Flex gap={1}>\n        <Box flex={1}>\n          <TextInput\n            customValidity={errors.length > 0 ? errors[0].message : ''}\n            disabled={isUpdating}\n            onChange={handleChange}\n            value={value?.current || ''}\n            readOnly={readOnly}\n            {...elementProps}\n          />\n\n          {generateState?.status === 'error' && (\n            <Card padding={2} tone=\"critical\">\n              {generateState.error.message}\n            </Card>\n          )}\n        </Box>\n        {sourceField && (\n          <Button\n            mode=\"ghost\"\n            type=\"button\"\n            disabled={readOnly || isUpdating}\n            onClick={handleGenerateSlug}\n            size=\"large\"\n            text={\n              generateState?.status === 'pending'\n                ? t('inputs.slug.action.generating')\n                : t('inputs.slug.action.generate')\n            }\n          />\n        )}\n      </Flex>\n    </Stack>\n  )\n}\n","import {TextInput} from '@sanity/ui'\n\nimport {type StringInputProps} from '../types'\n\n/**\n *\n * @hidden\n * @beta\n */\nexport function StringInput(props: StringInputProps) {\n  const {validationError, elementProps} = props\n  return <TextInput {...elementProps} customValidity={validationError} data-testid=\"string-input\" />\n}\n","import {type TextSchemaType} from '@sanity/types'\nimport {TextArea} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {type StringInputProps} from '../types'\n\n/**\n *\n * @hidden\n * @beta\n */\nexport type TextInputProps = StringInputProps<TextSchemaType>\n\nconst StyledTextArea = styled(TextArea)`\n  &[data-as='textarea'] {\n    resize: vertical;\n  }\n`\n\n/**\n *\n * @hidden\n * @beta\n */\nexport function TextInput(props: TextInputProps) {\n  const {schemaType, validationError, value, elementProps} = props\n\n  return (\n    <StyledTextArea\n      customValidity={validationError}\n      value={value || ''}\n      placeholder={schemaType.placeholder}\n      rows={typeof schemaType.rows === 'number' ? schemaType.rows : 10}\n      {...elementProps}\n    />\n  )\n}\n","import {TextInput} from '@sanity/ui'\n\nimport {type StringInputProps} from '../types'\nimport {getValidationRule} from '../utils/getValidationRule'\n\n/**\n *\n * @hidden\n * @beta\n */\nexport type UrlInputProps = StringInputProps\n\n/**\n *\n * @hidden\n * @beta\n */\nexport function UrlInput(props: UrlInputProps) {\n  const {schemaType, validationError, elementProps} = props\n\n  const uriRule = getValidationRule(schemaType, 'uri')\n  const inputType = uriRule?.constraint?.options?.allowRelative ? 'text' : 'url'\n  return (\n    <TextInput\n      type={inputType}\n      inputMode=\"url\"\n      customValidity={validationError}\n      {...elementProps}\n    />\n  )\n}\n","import {ResetIcon, WarningOutlineIcon} from '@sanity/icons'\nimport {type CrossDatasetReferenceValue} from '@sanity/types'\nimport {Box, Card, Flex, Stack, Text} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nimport {Button} from '../../../../ui-components'\nimport {Translate, useTranslation} from '../../../i18n'\n\ntype Props = {\n  value?: CrossDatasetReferenceValue\n  onClearValue?: () => void\n}\n\nexport function DisabledFeatureWarning({value, onClearValue}: Props) {\n  const hasRef = useMemo(() => Boolean(value?._ref), [value?._ref])\n  const {t} = useTranslation()\n\n  const description = (\n    <Translate\n      t={t}\n      i18nKey=\"inputs.reference.cross-dataset.feature-disabled-description\"\n      components={{\n        DocumentationLink: ({children}) => (\n          <a\n            href=\"https://www.sanity.io/docs/cross-dataset-references\"\n            target=\"_blank\"\n            rel=\"noreferrer\"\n          >\n            {children}\n          </a>\n        ),\n      }}\n    />\n  )\n\n  return (\n    <Card\n      tone=\"caution\"\n      padding={4}\n      border\n      radius={2}\n      data-testid=\"alert-cross-dataset-reference-feature-disabled\"\n    >\n      <Flex gap={4} marginBottom={hasRef ? 4 : undefined}>\n        <Box>\n          <Text size={1}>\n            <WarningOutlineIcon />\n          </Text>\n        </Box>\n        <Stack space={3}>\n          <Text as=\"h2\" size={1} weight=\"medium\">\n            {t('inputs.reference.cross-dataset.feature-unavailable-title')}\n          </Text>\n          {hasRef && (\n            <Stack space={3}>\n              <Text as=\"p\" size={1}>\n                {description}\n              </Text>\n              <Text as=\"p\" size={1}>\n                {t('inputs.reference.cross-dataset.feature-disabled-actions')}\n              </Text>\n            </Stack>\n          )}\n          {!hasRef && (\n            <Text as=\"p\" size={1}>\n              {description}\n            </Text>\n          )}\n        </Stack>\n      </Flex>\n      {onClearValue && hasRef && (\n        <Button\n          icon={ResetIcon}\n          mode=\"ghost\"\n          onClick={onClearValue}\n          text={t('inputs.reference.action.clear')}\n          width=\"fill\"\n        />\n      )}\n    </Card>\n  )\n}\n","import {Flex} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const StyledPreviewFlex = styled(Flex)`\n  /* this is a hack to avoid layout jumps while previews are loading\n  or the message is not tall enough to fill the card\n  there's probably better ways of solving this */\n  min-height: 36px;\n`\n","import {isImageSource} from '@sanity/asset-utils'\nimport {AccessDeniedIcon, HelpCircleIcon, LaunchIcon} from '@sanity/icons'\nimport imageUrlBuilder from '@sanity/image-url'\nimport {type CrossDatasetType, type PreviewValue} from '@sanity/types'\nimport {Badge, Box, Flex, Inline, Text} from '@sanity/ui'\nimport {isValidElement as ReactIsValidElement, useMemo} from 'react'\n\nimport {Tooltip} from '../../../../ui-components'\nimport {DefaultPreview, type PreviewMediaDimensions, TextWithTone} from '../../../components'\nimport {type FIXME} from '../../../FIXME'\nimport {useTranslation} from '../../../i18n'\nimport {type DocumentAvailability} from '../../../preview'\nimport {StyledPreviewFlex} from './CrossDatasetReferencePreview.styled'\n\n/**\n * Used to preview a referenced type\n * Takes the reference type as props\n *\n * @internal\n */\nexport function CrossDatasetReferencePreview(props: {\n  availability: DocumentAvailability | null\n  id: string\n  hasStudioUrl?: boolean\n  showStudioUrlIcon?: boolean\n  preview: {published: PreviewValue | undefined}\n  dataset: string\n  projectId: string\n  refType?: CrossDatasetType\n  showTypeLabel: boolean\n}) {\n  const {\n    refType,\n    showStudioUrlIcon,\n    hasStudioUrl,\n    showTypeLabel,\n    availability,\n    preview,\n    id,\n    dataset,\n    projectId,\n  } = props\n  const notFound = availability?.reason === 'NOT_FOUND'\n  const insufficientPermissions = availability?.reason === 'PERMISSION_DENIED'\n\n  const previewMedia = preview.published?.media\n  const {t} = useTranslation()\n\n  const media = useMemo(() => {\n    if (previewMedia) {\n      const isValidImageAsset =\n        typeof (previewMedia as FIXME)?.asset !== 'undefined' && isImageSource(previewMedia)\n      const isValidElement = ReactIsValidElement(previewMedia)\n\n      if (!isValidImageAsset && !isValidElement) {\n        return null\n      }\n\n      return function MediaPreview({dimensions}: {dimensions: PreviewMediaDimensions}) {\n        return isValidElement ? (\n          previewMedia\n        ) : (\n          <img\n            src={imageUrlBuilder({dataset, projectId})\n              .image(previewMedia as FIXME)\n              .withOptions(dimensions)\n              .url()}\n            alt={t('inputs.reference.image-preview-alt-text')}\n            referrerPolicy=\"strict-origin-when-cross-origin\"\n          />\n        )\n      }\n    }\n    if (!refType?.icon) return null\n    const Icon = refType.icon\n    return <Icon />\n  }, [previewMedia, dataset, projectId, refType?.icon, t])\n\n  return (\n    <StyledPreviewFlex align=\"center\" justify=\"center\" flex={1} data-testid=\"preview\">\n      {availability?.available ? (\n        <Box flex={1}>\n          <DefaultPreview\n            title={preview.published?.title}\n            subtitle={preview.published?.subtitle}\n            media={media || false}\n          />\n        </Box>\n      ) : (\n        <Box flex={1}>\n          <Flex align=\"center\">\n            <Box flex={1} paddingY={2}>\n              <Text muted>{t('inputs.reference.error.document-unavailable-title')}</Text>\n            </Box>\n          </Flex>\n        </Box>\n      )}\n\n      <Box paddingLeft={3}>\n        <Inline space={4}>\n          {refType && showTypeLabel && (\n            <Badge mode=\"outline\">{refType.title || refType.type}</Badge>\n          )}\n\n          {(insufficientPermissions || notFound) && (\n            <Box>\n              <Tooltip\n                portal\n                content={t(\n                  notFound\n                    ? 'inputs.reference.referenced-document-does-not-exist'\n                    : 'inputs.reference.referenced-document-insufficient-permissions',\n                  {documentId: id},\n                )}\n              >\n                <TextWithTone tone=\"default\">\n                  {insufficientPermissions ? <AccessDeniedIcon /> : <HelpCircleIcon />}\n                </TextWithTone>\n              </Tooltip>\n            </Box>\n          )}\n\n          {!(notFound || insufficientPermissions) && showStudioUrlIcon && (\n            <Box>\n              <Tooltip\n                portal\n                content={t(\n                  hasStudioUrl\n                    ? 'inputs.reference.document-opens-in-new-tab'\n                    : 'input.reference.document-cannot-be-opened.failed-to-resolve-url',\n                )}\n              >\n                <TextWithTone size={1} tone=\"default\" muted={!hasStudioUrl}>\n                  <LaunchIcon />\n                </TextWithTone>\n              </Tooltip>\n            </Box>\n          )}\n        </Inline>\n      </Box>\n    </StyledPreviewFlex>\n  )\n}\n","import {useCallback, useMemo, useState} from 'react'\nimport {useObservable} from 'react-rx'\nimport {type Observable, of} from 'rxjs'\nimport {catchError, map, startWith} from 'rxjs/operators'\n\nimport {type CrossDatasetReferenceInfo} from './types'\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst noop = () => {}\n\nconst INITIAL_LOADING_STATE: Loadable<CrossDatasetReferenceInfo> = {\n  isLoading: true,\n  result: undefined,\n  error: undefined,\n  retry: noop,\n}\n\nconst EMPTY_STATE: Loadable<any> = {\n  isLoading: false,\n  result: undefined,\n  error: undefined,\n  retry: noop,\n}\n\nexport type Loadable<T> =\n  | {isLoading: true; result: undefined; error: undefined; retry: () => void}\n  | {isLoading: false; result: T; error: undefined; retry: () => void}\n  | {isLoading: false; result: undefined; error: Error; retry: () => void}\n\nexport type GetReferenceInfoFn = (doc: {\n  _id: string\n  _type?: string\n}) => Observable<CrossDatasetReferenceInfo>\n\n// NOTE: If you refactor or fix bugs in this hook, also consider if the changes also relevant for the `useReferenceInfo` hook in\n// `packages/sanity/src/core/form/inputs/GlobalDocumentReferenceInput/useReferenceInfo.ts` and\n// `packages/sanity/src/core/form/inputs/ReferenceInput/useReferenceInfo.ts` which are similar but have some differences\n\nexport function useReferenceInfo(\n  doc: {_id: string; _type?: string},\n  getReferenceInfo: GetReferenceInfoFn,\n): Loadable<CrossDatasetReferenceInfo> {\n  const [retryAttempt, setRetryAttempt] = useState<number>(0)\n\n  const retry = useCallback(() => {\n    setRetryAttempt((current) => current + 1)\n  }, [])\n\n  const docInfo = useMemo(() => ({_id: doc._id, _type: doc._type}), [doc._id, doc._type])\n  const referenceInfoObservable = useMemo(\n    () =>\n      docInfo._id\n        ? getReferenceInfo(docInfo).pipe(\n            map(\n              (result) =>\n                ({\n                  isLoading: false,\n                  result,\n                  error: undefined,\n                  retry,\n                  retryAttempt,\n                }) as const,\n            ),\n            startWith(INITIAL_LOADING_STATE),\n            catchError((err: Error) => {\n              console.error(err)\n              return of({\n                isLoading: false,\n                result: undefined,\n                error: err,\n                retry,\n                retryAttempt,\n              } as const)\n            }),\n          )\n        : of(EMPTY_STATE),\n    [docInfo, getReferenceInfo, retry, retryAttempt],\n  )\n  return useObservable(referenceInfoObservable, INITIAL_LOADING_STATE)\n}\n","import {useClient} from '../../../../hooks'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../../../studioClient'\n\nexport function useProjectId(): string {\n  const client = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n\n  return client.config().projectId as string\n}\n","import {type CrossDatasetReferenceSchemaType} from '@sanity/types'\nimport {Stack, Text, TextSkeleton} from '@sanity/ui'\nimport {type Observable} from 'rxjs'\n\nimport {useTranslation} from '../../../i18n'\nimport {Alert} from '../../components/Alert'\nimport {CrossDatasetReferencePreview} from './CrossDatasetReferencePreview'\nimport {type CrossDatasetReferenceInfo} from './types'\nimport {useReferenceInfo} from './useReferenceInfo'\nimport {useProjectId} from './utils/useProjectId'\n\n/**\n * Used to preview a referenced type\n * Takes as props the referenced document, the reference type and a hook to subscribe to\n * in order to listen for the reference info\n *\n * @internal\n */\nexport function OptionPreview(props: {\n  document: {_id: string; _type: string}\n  referenceType: CrossDatasetReferenceSchemaType\n  getReferenceInfo: (doc: {_id: string; _type?: string}) => Observable<CrossDatasetReferenceInfo>\n}) {\n  const {\n    isLoading,\n    result: referenceInfo,\n    error,\n  } = useReferenceInfo(props.document, props.getReferenceInfo)\n  const {t} = useTranslation()\n  const projectId = useProjectId()\n\n  if (isLoading) {\n    return (\n      <Stack space={2} padding={1}>\n        <TextSkeleton style={{maxWidth: 320}} radius={1} animated />\n        <TextSkeleton style={{maxWidth: 200}} radius={1} size={1} animated />\n      </Stack>\n    )\n  }\n\n  if (error) {\n    return (\n      <Stack space={2} padding={1}>\n        <Alert title={t('inputs.reference.error.failed-to-load-document-title')}>\n          <Text muted size={1}>\n            {error.message}\n          </Text>\n        </Alert>\n      </Stack>\n    )\n  }\n\n  if (!referenceInfo) {\n    return null\n  }\n\n  if (referenceInfo.availability?.reason === 'PERMISSION_DENIED') {\n    return (\n      <Stack space={2} padding={1}>\n        {t('inputs.reference.error.missing-read-permissions-description')}\n      </Stack>\n    )\n  }\n\n  const refType = props.referenceType.to.find((toEntry) => toEntry.type === referenceInfo.type)\n  if (!refType) {\n    return (\n      <Stack space={2} padding={1}>\n        {t('inputs.reference.error.invalid-search-result-type-title', {\n          returnedType: referenceInfo.type,\n        })}\n      </Stack>\n    )\n  }\n  return (\n    referenceInfo &&\n    refType && (\n      <CrossDatasetReferencePreview\n        id={referenceInfo.id}\n        availability={referenceInfo.availability}\n        preview={referenceInfo.preview}\n        refType={refType}\n        dataset={props.referenceType.dataset}\n        projectId={projectId}\n        showTypeLabel={props.referenceType.to.length > 1}\n      />\n    )\n  )\n}\n","import {type CrossDatasetReferenceSchemaType, type CrossDatasetReferenceValue} from '@sanity/types'\nimport {Stack, Text, TextSkeleton} from '@sanity/ui'\n\nimport {Translate, useTranslation} from '../../../i18n'\nimport {CrossDatasetReferencePreview} from './CrossDatasetReferencePreview'\nimport {type CrossDatasetReferenceInfo} from './types'\nimport {type Loadable} from './useReferenceInfo'\nimport {useProjectId} from './utils/useProjectId'\n\nexport function PreviewReferenceValue(props: {\n  value: CrossDatasetReferenceValue\n  showStudioUrlIcon?: boolean\n  hasStudioUrl?: boolean\n  type: CrossDatasetReferenceSchemaType\n  referenceInfo: Loadable<CrossDatasetReferenceInfo>\n}) {\n  const {value, type, showStudioUrlIcon, hasStudioUrl, referenceInfo} = props\n  const {t} = useTranslation()\n  const projectId = useProjectId()\n\n  if (referenceInfo.isLoading || referenceInfo.error) {\n    return (\n      <Stack space={2} padding={1}>\n        <TextSkeleton style={{maxWidth: 320}} radius={1} animated={!referenceInfo.error} />\n        <TextSkeleton style={{maxWidth: 200}} radius={1} size={1} animated={!referenceInfo.error} />\n      </Stack>\n    )\n  }\n  const showTypeLabel = type.to.length > 1\n\n  const refTypeName = referenceInfo.result?.type\n  const refType = type.to.find((toType) => toType.type === refTypeName)\n\n  if (referenceInfo.result.availability?.available && !refType) {\n    return (\n      <Stack space={2} padding={2}>\n        <Text as=\"p\">\n          <Translate\n            t={t}\n            i18nKey=\"inputs.reference.cross-dataset.invalid-type\"\n            values={{typeName: refTypeName || 'unknown'}}\n            components={{JsonValue: () => <pre>{JSON.stringify(value, null, 2)}</pre>}}\n          />\n        </Text>\n      </Stack>\n    )\n  }\n\n  return (\n    <CrossDatasetReferencePreview\n      availability={referenceInfo.result.availability}\n      hasStudioUrl={hasStudioUrl}\n      showStudioUrlIcon={showStudioUrlIcon}\n      preview={referenceInfo.result.preview}\n      refType={refType}\n      projectId={projectId}\n      dataset={type.dataset}\n      id={value._ref}\n      showTypeLabel={showTypeLabel}\n    />\n  )\n}\n","import {Autocomplete, Box, Flex, type Placement, Text} from '@sanity/ui'\nimport {\n  type ComponentProps,\n  type ForwardedRef,\n  forwardRef,\n  type Ref,\n  type RefObject,\n  useCallback,\n} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Popover} from '../../../../ui-components'\nimport {Translate, useTranslation} from '../../../i18n'\n\nconst StyledPopover = styled(Popover)`\n  & > div {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n`\n\nconst StyledText = styled(Text)`\n  word-break: break-word;\n`\n\nconst FALLBACK_PLACEMENTS: Placement[] = ['top-start', 'bottom-start']\n\nexport const ReferenceAutocomplete = forwardRef(function ReferenceAutocomplete(\n  props: ComponentProps<typeof Autocomplete> & {\n    referenceElement: HTMLDivElement | null\n    searchString?: string\n    portalRef?: RefObject<HTMLDivElement | null>\n  },\n  ref: ForwardedRef<HTMLInputElement>,\n) {\n  const {searchString, loading, portalRef, referenceElement, ...restProps} = props\n  const {t} = useTranslation()\n  const hasResults = props.options && props.options.length > 0\n  const renderPopover = useCallback(\n    (\n      {\n        content,\n        hidden,\n        inputElement,\n        onMouseEnter,\n        onMouseLeave,\n      }: {\n        content: React.JSX.Element | null\n        hidden: boolean\n        inputElement: HTMLInputElement | null\n        onMouseEnter: () => void\n        onMouseLeave: () => void\n      },\n      contentRef: Ref<HTMLDivElement>,\n    ) => (\n      <StyledPopover\n        data-testid=\"autocomplete-popover\"\n        placement=\"bottom-start\"\n        fallbackPlacements={FALLBACK_PLACEMENTS}\n        arrow={false}\n        constrainSize\n        onMouseEnter={onMouseEnter}\n        onMouseLeave={onMouseLeave}\n        content={\n          <div ref={contentRef}>\n            {hasResults ? (\n              content\n            ) : (\n              <Box padding={4}>\n                <Flex align=\"center\" height=\"fill\" justify=\"center\">\n                  <StyledText align=\"center\" muted>\n                    <Translate\n                      t={t}\n                      i18nKey=\"inputs.reference.no-results-for-query\"\n                      values={{searchTerm: searchString || ''}}\n                    />\n                  </StyledText>\n                </Flex>\n              </Box>\n            )}\n          </div>\n        }\n        open={!loading && !hidden}\n        ref={portalRef}\n        portal\n        referenceElement={referenceElement || inputElement}\n        matchReferenceWidth\n      />\n    ),\n    [hasResults, t, searchString, loading, portalRef, referenceElement],\n  )\n  return <Autocomplete {...restProps} ref={ref} renderPopover={renderPopover} />\n})\n","/* eslint-disable complexity, max-nested-callbacks, no-nested-ternary */\nimport {ResetIcon as ClearIcon, SyncIcon as ReplaceIcon} from '@sanity/icons'\nimport {type CrossDatasetReferenceSchemaType, type CrossDatasetReferenceValue} from '@sanity/types'\nimport {Box, Card, Flex, Inline, Menu, Stack, useClickOutsideEvent, useToast} from '@sanity/ui'\nimport {\n  type FocusEvent,\n  type KeyboardEvent,\n  useCallback,\n  useId,\n  useMemo,\n  useRef,\n  useState,\n} from 'react'\nimport {useObservableEvent} from 'react-rx'\nimport {concat, type Observable, of} from 'rxjs'\nimport {catchError, distinctUntilChanged, filter, map, scan, switchMap, tap} from 'rxjs/operators'\n\nimport {MenuButton, MenuItem} from '../../../../ui-components'\nimport {ChangeIndicator} from '../../../changeIndicators'\nimport {PreviewCard} from '../../../components'\nimport {ContextMenuButton} from '../../../components/contextMenuButton'\nimport {type FIXME} from '../../../FIXME'\nimport {useFeatureEnabled} from '../../../hooks'\nimport {useTranslation} from '../../../i18n'\nimport {getPublishedId, isNonNullable} from '../../../util'\nimport {useDidUpdate} from '../../hooks/useDidUpdate'\nimport {set, unset} from '../../patch'\nimport {type ObjectInputProps} from '../../types'\nimport {ReferenceMetadataLoadErrorAlertStrip} from '../ReferenceInput/ReferenceMetadataLoadFailure'\nimport {ReferenceStrengthMismatchAlertStrip} from '../ReferenceInput/ReferenceStrengthMismatchAlertStrip'\nimport {DisabledFeatureWarning} from './DisabledFeatureWarning'\nimport {OptionPreview} from './OptionPreview'\nimport {PreviewReferenceValue} from './PreviewReferenceValue'\nimport {ReferenceAutocomplete} from './ReferenceAutocomplete'\nimport {type CrossDatasetReferenceInfo, type CrossDatasetSearchHit, type SearchState} from './types'\nimport {type GetReferenceInfoFn, useReferenceInfo} from './useReferenceInfo'\nimport {useProjectId} from './utils/useProjectId'\n\nconst INITIAL_SEARCH_STATE: SearchState = {\n  hits: [],\n  isLoading: false,\n}\n\n/** @internal */\nexport interface CrossDatasetReferenceInputProps\n  extends ObjectInputProps<CrossDatasetReferenceValue, CrossDatasetReferenceSchemaType> {\n  getReferenceInfo: (\n    doc: {_id: string; _type?: string},\n    type: CrossDatasetReferenceSchemaType,\n  ) => Observable<CrossDatasetReferenceInfo>\n  onSearch: (query: string) => Observable<CrossDatasetSearchHit[]>\n}\n\nconst NO_FILTER = () => true\n\nconst REF_PATH = ['_ref']\nconst CROSS_DATASET_FEATUREKEY = 'crossDatasetReferences'\n\n/** @internal */\nexport function CrossDatasetReferenceInput(props: CrossDatasetReferenceInputProps) {\n  const {\n    changed,\n    focused,\n    focusPath,\n    getReferenceInfo,\n    onChange,\n    onPathFocus,\n    onSearch,\n    path,\n    readOnly,\n    schemaType,\n    validation,\n    value,\n    elementProps,\n  } = props\n\n  const {t} = useTranslation()\n  const projectId = useProjectId()\n\n  const [searchState, setSearchState] = useState<SearchState>(INITIAL_SEARCH_STATE)\n\n  const handleChange = useCallback(\n    (id: string) => {\n      if (!id) {\n        onChange(unset())\n        onPathFocus([])\n        return\n      }\n\n      const hit = searchState.hits.find((h) => h.id === id)\n\n      if (!hit) {\n        throw new Error('Selected an item that wasnt part of the result set')\n      }\n\n      onChange(\n        set({\n          _type: schemaType.name,\n          _ref: getPublishedId(id),\n          _projectId: projectId,\n          _dataset: schemaType.dataset,\n          _weak: schemaType.weak,\n          // persist _key between mutations if the value is in an array\n          _key: value?._key,\n        }),\n      )\n\n      onPathFocus([])\n    },\n    [\n      value?._key,\n      searchState.hits,\n      schemaType.name,\n      schemaType.dataset,\n      schemaType.weak,\n      projectId,\n      onChange,\n      onPathFocus,\n    ],\n  )\n\n  const handleClear = useCallback(() => {\n    onChange(unset())\n  }, [onChange])\n\n  const handleAutocompleteKeyDown = useCallback(\n    (event: KeyboardEvent<HTMLInputElement>) => {\n      if (event.key === 'Escape') {\n        onPathFocus?.([])\n      }\n    },\n    [onPathFocus],\n  )\n\n  const getReferenceInfoMemo: GetReferenceInfoFn = useCallback(\n    (doc) => getReferenceInfo(doc, schemaType),\n    [getReferenceInfo, schemaType],\n  )\n\n  const refDoc = useMemo(() => ({_id: value?._ref}), [value?._ref])\n\n  const loadableReferenceInfo = useReferenceInfo(refDoc as FIXME, getReferenceInfoMemo)\n  const featureInfo = useFeatureEnabled(CROSS_DATASET_FEATUREKEY)\n\n  const [autocompletePopoverReferenceElement, setAutocompletePopoverReferenceElement] =\n    useState<HTMLDivElement | null>(null)\n\n  const hasFocusAtRef = focusPath.length === 1 && focusPath[0] === '_ref'\n\n  // --- focus handling\n  const focusElementRef = elementProps.ref\n  useDidUpdate({hasFocusAt: hasFocusAtRef, ref: value?._ref}, (prev, current) => {\n    const refUpdated = prev?.ref !== current.ref\n    const focusAtUpdated = prev?.hasFocusAt !== current.hasFocusAt\n\n    if ((focusAtUpdated || refUpdated) && current.hasFocusAt) {\n      // if search mode changed and we're having focus always ensure the\n      // ref element gets focus\n      focusElementRef.current?.focus()\n    }\n  })\n\n  const actualStrength = value?._weak ? 'weak' : 'strong'\n  const weakShouldBe = schemaType.weak === true ? 'weak' : 'strong'\n\n  const hasRef = Boolean(value?._ref)\n\n  const handleFixStrengthMismatch = useCallback(() => {\n    onChange(schemaType.weak === true ? set(true, ['_weak']) : unset(['_weak']))\n  }, [onChange, schemaType])\n\n  const {push} = useToast()\n\n  const errors = useMemo(() => validation.filter((item) => item.level === 'error'), [validation])\n\n  const handleFocus = useCallback(\n    (event: FocusEvent<HTMLDivElement>) => {\n      if (event.currentTarget === elementProps.ref.current) {\n        onPathFocus?.([])\n      }\n    },\n    [elementProps.ref, onPathFocus],\n  )\n\n  const handleBlur = useCallback((event: FocusEvent) => elementProps.onBlur(event), [elementProps])\n\n  const handleAutocompleteFocus = useCallback(\n    (event: FocusEvent<HTMLInputElement>) => {\n      if (event.currentTarget === elementProps.ref.current) {\n        onPathFocus?.(REF_PATH)\n      }\n    },\n    [elementProps.ref, onPathFocus],\n  )\n  const handleReplace = useCallback(() => {\n    onPathFocus?.(REF_PATH)\n  }, [onPathFocus])\n\n  const inputId = useId()\n\n  const handleQueryChange = useObservableEvent((inputValue$: Observable<string | null>) => {\n    return inputValue$.pipe(\n      filter(isNonNullable),\n      distinctUntilChanged(),\n      switchMap((searchString) =>\n        concat(\n          of({isLoading: true}),\n          onSearch(searchString).pipe(\n            map((hits) => ({hits, searchString, isLoading: false})),\n            catchError((error) => {\n              push({\n                title: 'Reference search failed',\n                description: error.message,\n                status: 'error',\n                id: `reference-search-fail-${inputId}`,\n              })\n\n              console.error(error)\n              return of({hits: []})\n            }),\n          ),\n        ),\n      ),\n\n      scan(\n        (prevState, nextState): SearchState => ({...prevState, ...nextState}),\n        INITIAL_SEARCH_STATE,\n      ),\n\n      tap(setSearchState),\n    )\n  })\n\n  const handleAutocompleteOpenButtonClick = useCallback(() => {\n    handleQueryChange('')\n  }, [handleQueryChange])\n\n  const showWeakRefMismatch =\n    !loadableReferenceInfo.isLoading && hasRef && actualStrength !== weakShouldBe\n\n  const studioUrl =\n    (value?._ref &&\n      schemaType.studioUrl?.({\n        id: value?._ref,\n        type: loadableReferenceInfo?.result?.type,\n      })) ||\n    null\n\n  const renderOption = useCallback(\n    (option: FIXME) => {\n      return (\n        <PreviewCard as=\"button\" type=\"button\" radius={2}>\n          <Box paddingX={3} paddingY={1}>\n            <OptionPreview\n              referenceType={schemaType}\n              document={option.hit.published}\n              getReferenceInfo={getReferenceInfoMemo}\n            />\n          </Box>\n        </PreviewCard>\n      )\n    },\n    [schemaType, getReferenceInfoMemo],\n  )\n\n  const isEditing = hasFocusAtRef || !value?._ref\n\n  // --- click outside handling\n  const clickOutsideBoundaryRef = useRef<HTMLDivElement | null>(null)\n  const autocompletePortalRef = useRef<HTMLDivElement | null>(null)\n  useClickOutsideEvent(hasFocusAtRef && (() => onPathFocus([])), () => [\n    clickOutsideBoundaryRef.current,\n    autocompletePortalRef.current,\n  ])\n\n  return (\n    <>\n      {!featureInfo.isLoading && !featureInfo.enabled && (\n        <DisabledFeatureWarning value={value} onClearValue={handleClear} />\n      )}\n      {(featureInfo.isLoading || featureInfo.enabled) && (\n        <Stack space={1}>\n          {isEditing ? (\n            <Stack space={2} ref={clickOutsideBoundaryRef}>\n              <ChangeIndicator path={path} isChanged={changed} hasFocus={!!focused}>\n                <div ref={setAutocompletePopoverReferenceElement}>\n                  <ReferenceAutocomplete\n                    {...elementProps}\n                    data-testid=\"autocomplete\"\n                    loading={searchState.isLoading}\n                    referenceElement={autocompletePopoverReferenceElement}\n                    portalRef={autocompletePortalRef}\n                    id={inputId || ''}\n                    options={searchState.hits.map((hit) => ({\n                      value: hit.id,\n                      hit: hit,\n                    }))}\n                    onFocus={handleAutocompleteFocus}\n                    radius={2}\n                    placeholder={t('inputs.reference.search-placeholder')}\n                    onKeyDown={handleAutocompleteKeyDown}\n                    readOnly={readOnly}\n                    disabled={loadableReferenceInfo.isLoading}\n                    onQueryChange={handleQueryChange}\n                    searchString={searchState.searchString}\n                    onChange={handleChange}\n                    filterOption={NO_FILTER}\n                    renderOption={renderOption}\n                    openButton={{onClick: handleAutocompleteOpenButtonClick}}\n                  />\n                </div>\n              </ChangeIndicator>\n            </Stack>\n          ) : (\n            <ChangeIndicator path={path} isChanged={changed} hasFocus={!!focused}>\n              <Card\n                padding={0}\n                border\n                flex={1}\n                radius={1}\n                tone={\n                  readOnly\n                    ? 'transparent'\n                    : loadableReferenceInfo.error || errors.length > 0\n                      ? 'critical'\n                      : 'default'\n                }\n              >\n                <Flex align=\"center\" padding={1}>\n                  {studioUrl ? (\n                    <PreviewCard\n                      as=\"a\"\n                      target=\"_blank\"\n                      rel=\"noopener noreferrer\"\n                      href={studioUrl}\n                      data-as=\"a\"\n                      flex={1}\n                      padding={1}\n                      paddingRight={3}\n                      radius={2}\n                      tone=\"inherit\"\n                      __unstable_focusRing\n                      tabIndex={0}\n                      onFocus={handleFocus}\n                      onBlur={handleBlur}\n                      ref={elementProps.ref}\n                    >\n                      <PreviewReferenceValue\n                        value={value}\n                        referenceInfo={loadableReferenceInfo}\n                        showStudioUrlIcon\n                        hasStudioUrl={!!studioUrl}\n                        type={schemaType}\n                      />\n                    </PreviewCard>\n                  ) : (\n                    <PreviewCard\n                      flex={1}\n                      padding={1}\n                      paddingRight={3}\n                      radius={2}\n                      tone=\"inherit\"\n                      __unstable_focusRing\n                      tabIndex={0}\n                      onFocus={handleFocus}\n                      onBlur={handleBlur}\n                      ref={elementProps.ref}\n                    >\n                      <PreviewReferenceValue\n                        value={value}\n                        referenceInfo={loadableReferenceInfo}\n                        showStudioUrlIcon\n                        type={schemaType}\n                      />\n                    </PreviewCard>\n                  )}\n\n                  <Inline paddingX={1}>\n                    <MenuButton\n                      button={<ContextMenuButton data-testid=\"menu-button\" />}\n                      id={`${inputId}-menuButton`}\n                      menu={\n                        <Menu>\n                          {!readOnly && (\n                            <>\n                              <MenuItem\n                                text={t('inputs.reference.action.clear')}\n                                tone=\"critical\"\n                                icon={ClearIcon}\n                                data-testid=\"menu-item-clear\"\n                                onClick={handleClear}\n                              />\n\n                              <MenuItem\n                                text={t('inputs.reference.action.replace')}\n                                icon={ReplaceIcon}\n                                data-testid=\"menu-item-replace\"\n                                onClick={handleReplace}\n                              />\n                            </>\n                          )}\n                        </Menu>\n                      }\n                      placement=\"right\"\n                      popover={{portal: true, tone: 'default'}}\n                    />\n                  </Inline>\n                </Flex>\n                {showWeakRefMismatch && (\n                  <ReferenceStrengthMismatchAlertStrip\n                    actualStrength={actualStrength}\n                    handleFixStrengthMismatch={handleFixStrengthMismatch}\n                  />\n                )}\n\n                {loadableReferenceInfo.error && (\n                  <ReferenceMetadataLoadErrorAlertStrip\n                    errorMessage={loadableReferenceInfo.error.message}\n                    onHandleRetry={loadableReferenceInfo.retry!}\n                  />\n                )}\n              </Card>\n            </ChangeIndicator>\n          )}\n        </Stack>\n      )}\n    </>\n  )\n}\n","import {type SanityClient} from '@sanity/client'\nimport {type CrossDatasetReferenceSchemaType} from '@sanity/types'\nimport {keyBy} from 'lodash'\nimport {combineLatest, type Observable, of} from 'rxjs'\nimport {map, switchMap} from 'rxjs/operators'\n\nimport {type FIXME} from '../../../../../FIXME'\nimport {\n  type DocumentAvailability,\n  type DocumentPreviewStore,\n  getPreviewPaths,\n  prepareForPreview,\n  type Previewable,\n} from '../../../../../preview'\nimport {isRecord} from '../../../../../util'\nimport {type CrossDatasetReferenceInfo} from '../../../../inputs/CrossDatasetReferenceInput/types'\n\nconst REQUEST_TAG_BASE = 'cross-dataset-refs'\n\nconst AVAILABILITY_READABLE = {\n  available: true,\n  reason: 'READABLE',\n} as const\n\nconst AVAILABILITY_PERMISSION_DENIED = {\n  available: false,\n  reason: 'PERMISSION_DENIED',\n} as const\n\nconst AVAILABILITY_NOT_FOUND = {\n  available: false,\n  reason: 'NOT_FOUND',\n} as const\n\n/**\n * Takes a client instance and returns a function that can be called to retrieve reference information\n */\nexport function createGetReferenceInfo(context: {\n  client: SanityClient\n  documentPreviewStore: DocumentPreviewStore\n}) {\n  const {client, documentPreviewStore} = context\n  const {dataset, projectId} = client.config()\n  const apiConfig = dataset && projectId ? {dataset, projectId} : undefined\n\n  /**\n   * Takes an id and a reference schema type, returns metadata about it\n   * Assumption: _id is always published id\n   */\n  return function getReferenceInfo(\n    doc: {_id: string; _type?: string}, // pass {_id, _type} instead and we can skip the `fetchType`\n    referenceType: CrossDatasetReferenceSchemaType,\n  ): Observable<CrossDatasetReferenceInfo> {\n    return (\n      doc._type\n        ? of(doc)\n        : documentPreviewStore\n            .observeDocumentTypeFromId(doc._id, apiConfig)\n            .pipe(map((docType): {_id: string; _type?: string} => ({_id: doc._id, _type: docType})))\n    ).pipe(\n      switchMap((resolvedDoc) => {\n        if (!resolvedDoc._type) {\n          // we still can't read the type of the referenced document. This may be due to either 1) lack of access 2) lack of existence\n          // we want to display a reason to the end user, so we're fetching metadata about it\n          return fetchDocumentAvailability(client, doc._id).pipe(\n            map((availability) => ({\n              id: doc._id,\n              type: undefined,\n              availability,\n              preview: {published: undefined},\n            })),\n          )\n        }\n        const refSchemaType = referenceType.to.find(\n          (candidate) => candidate.type === resolvedDoc._type,\n        )\n\n        const previewPaths = getPreviewPaths(refSchemaType?.preview) || []\n\n        const publishedPreview$ = documentPreviewStore\n          .observePaths(doc as Previewable, previewPaths, apiConfig)\n          .pipe(\n            map((result) => (result ? prepareForPreview(result, refSchemaType as FIXME) : result)),\n          )\n\n        return combineLatest([publishedPreview$]).pipe(\n          map(([publishedPreview]) => {\n            return {\n              type: resolvedDoc._type,\n              id: doc._id,\n              availability: AVAILABILITY_READABLE,\n              preview: {\n                published: isRecord(publishedPreview) ? publishedPreview : undefined,\n              },\n            }\n          }),\n        )\n      }),\n    )\n  }\n}\n\nfunction fetchDocumentAvailability(\n  client: SanityClient,\n  id: string,\n): Observable<DocumentAvailability | null> {\n  const requestOptions = {\n    uri: client.getDataUrl('doc', id),\n    json: true,\n    query: {excludeContent: 'true'},\n    tag: `${REQUEST_TAG_BASE}.availability`,\n  }\n\n  return client.observable.request(requestOptions).pipe(\n    map((response) => {\n      const omitted = keyBy(response.omitted || [], (entry) => entry.id)\n      const omittedEntry = omitted[id]\n      if (!omittedEntry) {\n        // it's not omitted, so it exists and is readable\n        return AVAILABILITY_READABLE\n      }\n      // omitted because it doesn't exist\n      if (omittedEntry.reason === 'existence') {\n        return AVAILABILITY_NOT_FOUND\n      }\n      if (omittedEntry.reason === 'permission') {\n        // omitted because it's not readable\n        return AVAILABILITY_PERMISSION_DENIED\n      }\n      return null\n    }),\n  )\n}\n","import {type SanityClient} from '@sanity/client'\nimport {\n  type CrossDatasetReferenceSchemaType,\n  type ReferenceFilterSearchOptions,\n} from '@sanity/types'\nimport {type Observable} from 'rxjs'\nimport {map} from 'rxjs/operators'\n\nimport {createSearch} from '../../../../../search'\nimport {collate} from '../../../../../util'\n\ninterface SearchHit {\n  id: string\n  type: string\n  published: undefined | {_id: string; _type: string}\n}\n\nexport function search(\n  client: SanityClient,\n  textTerm: string,\n  type: CrossDatasetReferenceSchemaType,\n  options: ReferenceFilterSearchOptions,\n): Observable<SearchHit[]> {\n  const searchStrategy = createSearch(type.to, client, {\n    ...options,\n    maxDepth: options.maxFieldDepth,\n  })\n\n  return searchStrategy(textTerm, {\n    includeDrafts: false,\n    isCrossDataset: true,\n  }).pipe(\n    map(({hits}) => hits.map(({hit}) => hit)),\n    map((docs) => collate(docs)),\n    map((collated) =>\n      collated.map((entry) => ({\n        id: entry.id,\n        type: entry.type,\n        published: entry.published,\n      })),\n    ),\n  )\n}\n","import {\n  type CrossDatasetReferenceSchemaType,\n  type CrossDatasetReferenceValue,\n  type Path,\n  type ReferenceFilterOptions,\n  type ReferenceFilterSearchOptions,\n  type SanityDocument,\n} from '@sanity/types'\nimport {get} from '@sanity/util/paths'\nimport {useCallback, useEffect, useMemo, useRef} from 'react'\nimport {from, throwError} from 'rxjs'\nimport {catchError, mergeMap} from 'rxjs/operators'\n\nimport {type Source} from '../../../../config'\nimport {type FIXME} from '../../../../FIXME'\nimport {useDocumentPreviewStore} from '../../../../store'\nimport {useSource} from '../../../../studio'\nimport {useSearchMaxFieldDepth} from '../../../../studio/components/navbar/search/hooks/useSearchMaxFieldDepth'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../../../studioClient'\nimport {useFormValue} from '../../../contexts/FormValue'\nimport {CrossDatasetReferenceInput} from '../../../inputs/CrossDatasetReferenceInput'\nimport {type ObjectInputProps} from '../../../types'\nimport {createGetReferenceInfo} from './datastores/getReferenceInfo'\nimport {search} from './datastores/search'\n\nasync function resolveUserDefinedFilter(\n  options: ReferenceFilterOptions | undefined,\n  document: SanityDocument,\n  valuePath: Path,\n  getClient: Source['getClient'],\n): Promise<ReferenceFilterSearchOptions> {\n  if (!options) {\n    return {}\n  }\n\n  if (typeof options.filter === 'function') {\n    const parentPath = valuePath.slice(0, -1)\n    const parent = get(document, parentPath) as Record<string, unknown>\n    const resolvedFilter = await options.filter({document, parentPath, parent, getClient})\n    return resolvedFilter\n  }\n\n  return {\n    filter: options.filter,\n    params: 'filterParams' in options ? options.filterParams : undefined,\n  }\n}\n\n/**\n *\n * @hidden\n * @beta\n */\nexport type StudioCrossDatasetReferenceInputProps = ObjectInputProps<\n  CrossDatasetReferenceValue,\n  CrossDatasetReferenceSchemaType\n>\n\nfunction useValueRef<T>(value: T): {current: T} {\n  const ref = useRef(value)\n  useEffect(() => {\n    ref.current = value\n  }, [value])\n  return ref\n}\n\ntype SearchError = {\n  message: string\n  details?: {\n    type: string\n    description: string\n  }\n}\n\n/**\n *\n * @hidden\n * @beta\n */\nexport function StudioCrossDatasetReferenceInput(props: StudioCrossDatasetReferenceInputProps) {\n  const {path, schemaType} = props\n  const source = useSource()\n  const client = source.getClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n  const documentPreviewStore = useDocumentPreviewStore()\n  const getClient = source.getClient\n  const {strategy: searchStrategy} = source.search\n\n  const crossDatasetClient = useMemo(() => {\n    return (\n      client\n        .withConfig({\n          dataset: schemaType.dataset,\n          apiVersion: '2023-11-13',\n          ignoreBrowserTokenWarning: true,\n        })\n\n        // seems like this is required to prevent this client from sometimes magically get mutated with a new projectId and dataset\n        .clone()\n    )\n  }, [client, schemaType.dataset])\n  const maxFieldDepth = useSearchMaxFieldDepth(crossDatasetClient)\n  const documentValue = useFormValue([]) as FIXME\n  const documentRef = useValueRef(documentValue)\n\n  const handleSearch = useCallback(\n    (searchString: string) =>\n      from(resolveUserDefinedFilter(schemaType.options, documentRef.current, path, getClient)).pipe(\n        mergeMap(({filter, params}) =>\n          search(crossDatasetClient, searchString, schemaType, {\n            ...schemaType.options,\n            filter,\n            params,\n            tag: 'search.cross-dataset-reference',\n            maxFieldDepth,\n            strategy: searchStrategy,\n          }),\n        ),\n\n        catchError((err: SearchError) => {\n          const isQueryError = err.details && err.details.type === 'queryParseError'\n          if (schemaType.options?.filter && isQueryError) {\n            err.message = `Invalid reference filter, please check the custom \"filter\" option`\n          }\n          return throwError(err)\n        }),\n      ),\n\n    [schemaType, documentRef, path, getClient, crossDatasetClient, maxFieldDepth, searchStrategy],\n  )\n\n  const getReferenceInfo = useMemo(\n    () => createGetReferenceInfo({client: crossDatasetClient, documentPreviewStore}),\n    [crossDatasetClient, documentPreviewStore],\n  )\n\n  return (\n    <CrossDatasetReferenceInput\n      {...props}\n      getReferenceInfo={getReferenceInfo}\n      onSearch={handleSearch}\n    />\n  )\n}\n","import {Flex} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const StyledPreviewFlex = styled(Flex)`\n  /* this is a hack to avoid layout jumps while previews are loading\n  or the message is not tall enough to fill the card\n  there's probably better ways of solving this */\n  min-height: 36px;\n`\n","export function resolveProjectDataset(\n  resourceType: string,\n  resourceId: string,\n): {\n  projectId: string\n  dataset: string\n} | null {\n  if (resourceType !== 'dataset') {\n    return null\n  }\n  const [projectId, dataset] = resourceId.split('.', 2)\n  if (!projectId || !dataset) {\n    throw new Error(`Invalid resource ID for resource \"dataset\": ${resourceId}`)\n  }\n  return {\n    projectId,\n    dataset,\n  }\n}\n","import {isImageSource} from '@sanity/asset-utils'\nimport {AccessDeniedIcon, HelpCircleIcon, LaunchIcon} from '@sanity/icons'\nimport imageUrlBuilder from '@sanity/image-url'\nimport {type GlobalDocumentReferenceType, type PreviewValue} from '@sanity/types'\nimport {Badge, Box, Flex, Inline, Text} from '@sanity/ui'\nimport {isValidElement as ReactIsValidElement, useMemo} from 'react'\n\nimport {Tooltip} from '../../../../ui-components'\nimport {DefaultPreview, type PreviewMediaDimensions, TextWithTone} from '../../../components'\nimport {type FIXME} from '../../../FIXME'\nimport {useTranslation} from '../../../i18n'\nimport {type DocumentAvailability} from '../../../preview'\nimport {StyledPreviewFlex} from './GlobalDocumentReferencePreview.styled'\nimport {resolveProjectDataset} from './utils/resolveProjectDataset'\n\n/**\n * Used to preview a referenced type\n * Takes the reference type as props\n *\n * @internal\n */\nexport function GlobalDocumentReferencePreview(props: {\n  availability: DocumentAvailability | null\n  id: string\n  hasStudioUrl?: boolean\n  showStudioUrlIcon?: boolean\n  preview: {published: PreviewValue | undefined}\n  resourceType: string\n  resourceId: string\n  refType?: GlobalDocumentReferenceType\n  showTypeLabel: boolean\n}): React.JSX.Element {\n  const {\n    refType,\n    showStudioUrlIcon,\n    hasStudioUrl,\n    showTypeLabel,\n    availability,\n    preview,\n    id,\n    resourceType,\n    resourceId,\n  } = props\n  const notFound = availability?.reason === 'NOT_FOUND'\n  const insufficientPermissions = availability?.reason === 'PERMISSION_DENIED'\n\n  const previewMedia = preview.published?.media\n  const {t} = useTranslation()\n\n  const media = useMemo(() => {\n    if (previewMedia) {\n      const isValidImageAsset =\n        typeof (previewMedia as FIXME)?.asset !== 'undefined' && isImageSource(previewMedia)\n      const isValidElement = ReactIsValidElement(previewMedia)\n\n      if (!isValidImageAsset && !isValidElement) {\n        return null\n      }\n\n      return function MediaPreview({dimensions}: {dimensions: PreviewMediaDimensions}) {\n        const projectDataset = resolveProjectDataset(resourceType, resourceId)\n        if (!projectDataset) return null\n\n        return isValidElement ? (\n          previewMedia\n        ) : (\n          <img\n            src={imageUrlBuilder(projectDataset)\n              .image(previewMedia as FIXME)\n              .withOptions(dimensions)\n              .url()}\n            alt={t('inputs.reference.image-preview-alt-text')}\n            referrerPolicy=\"strict-origin-when-cross-origin\"\n          />\n        )\n      }\n    }\n    if (!refType?.icon) return null\n    const Icon = refType.icon\n    return <Icon />\n  }, [previewMedia, resourceType, resourceId, refType?.icon, t])\n\n  return (\n    <StyledPreviewFlex align=\"center\" justify=\"center\" flex={1} data-testid=\"preview\">\n      {availability?.available ? (\n        <Box flex={1}>\n          <DefaultPreview\n            title={preview.published?.title}\n            subtitle={preview.published?.subtitle}\n            media={media || false}\n          />\n        </Box>\n      ) : (\n        <Box flex={1}>\n          <Flex align=\"center\">\n            <Box flex={1} paddingY={2}>\n              <Text muted>{t('inputs.reference.error.document-unavailable-title')}</Text>\n            </Box>\n          </Flex>\n        </Box>\n      )}\n\n      <Box paddingLeft={3}>\n        <Inline space={4}>\n          {refType && showTypeLabel && (\n            <Badge mode=\"outline\">{refType.title || refType.type}</Badge>\n          )}\n\n          {(insufficientPermissions || notFound) && (\n            <Box>\n              <Tooltip\n                portal\n                content={t(\n                  notFound\n                    ? 'inputs.reference.referenced-document-does-not-exist'\n                    : 'inputs.reference.referenced-document-insufficient-permissions',\n                  {documentId: id},\n                )}\n              >\n                <TextWithTone tone=\"default\">\n                  {insufficientPermissions ? <AccessDeniedIcon /> : <HelpCircleIcon />}\n                </TextWithTone>\n              </Tooltip>\n            </Box>\n          )}\n\n          {!(notFound || insufficientPermissions) && showStudioUrlIcon && (\n            <Box>\n              <Tooltip\n                portal\n                content={t(\n                  hasStudioUrl\n                    ? 'inputs.reference.document-opens-in-new-tab'\n                    : 'input.reference.document-cannot-be-opened.failed-to-resolve-url',\n                )}\n              >\n                <TextWithTone size={1} tone=\"default\" muted={!hasStudioUrl}>\n                  <LaunchIcon />\n                </TextWithTone>\n              </Tooltip>\n            </Box>\n          )}\n        </Inline>\n      </Box>\n    </StyledPreviewFlex>\n  )\n}\n","import {useCallback, useMemo, useState} from 'react'\nimport {useObservable} from 'react-rx'\nimport {type Observable, of} from 'rxjs'\nimport {catchError, map, startWith} from 'rxjs/operators'\n\nimport {type GlobalDocumentReferenceInfo} from './types'\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst noop = () => {}\n\nconst INITIAL_LOADING_STATE: Loadable<GlobalDocumentReferenceInfo> = {\n  isLoading: true,\n  result: undefined,\n  error: undefined,\n  retry: noop,\n}\n\nconst EMPTY_STATE: Loadable<any> = {\n  isLoading: false,\n  result: undefined,\n  error: undefined,\n  retry: noop,\n}\n\nexport type Loadable<T> =\n  | {isLoading: true; result: undefined; error: undefined; retry: () => void}\n  | {isLoading: false; result: T; error: undefined; retry: () => void}\n  | {isLoading: false; result: undefined; error: Error; retry: () => void}\n\nexport type GetReferenceInfoFn = (doc: {\n  _id: string\n  _type?: string\n}) => Observable<GlobalDocumentReferenceInfo>\n\n// NOTE: If you refactor or fix bugs in this hook, also consider if the changes also relevant for the `useReferenceInfo` hook in\n// `packages/sanity/src/core/form/inputs/CrossDatasetReferenceInput/useReferenceInfo.ts` and\n// `packages/sanity/src/core/form/inputs/ReferenceInput/useReferenceInfo.ts` which are similar but have some differences\n\nexport function useReferenceInfo(\n  doc: {_id: string; _type?: string} | null,\n  getReferenceInfo: GetReferenceInfoFn,\n): Loadable<GlobalDocumentReferenceInfo> {\n  const [retryAttempt, setRetryAttempt] = useState<number>(0)\n\n  const retry = useCallback(() => {\n    setRetryAttempt((current) => current + 1)\n  }, [])\n\n  const referenceInfoObservable = useMemo(() => {\n    if (!doc) {\n      return of(EMPTY_STATE)\n    }\n\n    return getReferenceInfo(doc).pipe(\n      map(\n        (result) =>\n          ({\n            isLoading: false,\n            result,\n            error: undefined,\n            retry,\n            retryAttempt,\n          }) as const,\n      ),\n      startWith(INITIAL_LOADING_STATE),\n      catchError((err: Error) => {\n        console.error(err)\n        return of({\n          isLoading: false,\n          result: undefined,\n          error: err,\n          retry,\n          retryAttempt,\n        } as const)\n      }),\n    )\n  }, [doc, getReferenceInfo, retry, retryAttempt])\n  return useObservable(referenceInfoObservable, INITIAL_LOADING_STATE)\n}\n","import {type GlobalDocumentReferenceSchemaType} from '@sanity/types'\nimport {Stack, Text, TextSkeleton} from '@sanity/ui'\nimport {type ReactNode} from 'react'\nimport {type Observable} from 'rxjs'\n\nimport {useTranslation} from '../../../i18n'\nimport {Alert} from '../../components/Alert'\nimport {GlobalDocumentReferencePreview} from './GlobalDocumentReferencePreview'\nimport {type GlobalDocumentReferenceInfo} from './types'\nimport {useReferenceInfo} from './useReferenceInfo'\n\n/**\n * Used to preview a referenced type\n * Takes as props the referenced document, the reference type and a hook to subscribe to\n * in order to listen for the reference info\n *\n * @internal\n */\nexport function OptionPreview(props: {\n  document: {_id: string; _type: string}\n  referenceType: GlobalDocumentReferenceSchemaType\n  getReferenceInfo: (doc: {_id: string; _type?: string}) => Observable<GlobalDocumentReferenceInfo>\n}): ReactNode {\n  const {\n    isLoading,\n    result: referenceInfo,\n    error,\n  } = useReferenceInfo(props.document, props.getReferenceInfo)\n  const {t} = useTranslation()\n\n  if (isLoading) {\n    return (\n      <Stack space={2} padding={1}>\n        <TextSkeleton style={{maxWidth: 320}} radius={1} animated />\n        <TextSkeleton style={{maxWidth: 200}} radius={1} size={1} animated />\n      </Stack>\n    )\n  }\n\n  if (error) {\n    return (\n      <Stack space={2} padding={1}>\n        <Alert title={t('inputs.reference.error.failed-to-load-document-title')}>\n          <Text muted size={1}>\n            {error.message}\n          </Text>\n        </Alert>\n      </Stack>\n    )\n  }\n\n  if (!referenceInfo) {\n    return null\n  }\n\n  if (referenceInfo.availability?.reason === 'PERMISSION_DENIED') {\n    return (\n      <Stack space={2} padding={1}>\n        {t('inputs.reference.error.missing-read-permissions-description')}\n      </Stack>\n    )\n  }\n\n  const refType = props.referenceType.to.find((toEntry) => toEntry.type === referenceInfo.type)\n  if (!refType) {\n    return (\n      <Stack space={2} padding={1}>\n        {t('inputs.reference.error.invalid-search-result-type-title', {\n          returnedType: referenceInfo.type,\n        })}\n      </Stack>\n    )\n  }\n  return (\n    referenceInfo &&\n    refType && (\n      <GlobalDocumentReferencePreview\n        id={referenceInfo.id}\n        availability={referenceInfo.availability}\n        preview={referenceInfo.preview}\n        refType={refType}\n        resourceType={props.referenceType.resourceType}\n        resourceId={props.referenceType.resourceId}\n        showTypeLabel={props.referenceType.to.length > 1}\n      />\n    )\n  )\n}\n","import {\n  type GlobalDocumentReferenceSchemaType,\n  type GlobalDocumentReferenceValue,\n} from '@sanity/types'\nimport {Stack, Text, TextSkeleton} from '@sanity/ui'\n\nimport {Translate, useTranslation} from '../../../i18n'\nimport {GlobalDocumentReferencePreview} from './GlobalDocumentReferencePreview'\nimport {type GlobalDocumentReferenceInfo} from './types'\nimport {type Loadable} from './useReferenceInfo'\n\nexport function PreviewReferenceValue(props: {\n  value: GlobalDocumentReferenceValue\n  showStudioUrlIcon?: boolean\n  hasStudioUrl?: boolean\n  type: GlobalDocumentReferenceSchemaType\n  referenceInfo: Loadable<GlobalDocumentReferenceInfo>\n}): React.JSX.Element {\n  const {value, type, showStudioUrlIcon, hasStudioUrl, referenceInfo} = props\n  const {t} = useTranslation()\n\n  if (referenceInfo.isLoading || referenceInfo.error) {\n    return (\n      <Stack space={2} padding={1}>\n        <TextSkeleton style={{maxWidth: 320}} radius={1} animated={!referenceInfo.error} />\n        <TextSkeleton style={{maxWidth: 200}} radius={1} size={1} animated={!referenceInfo.error} />\n      </Stack>\n    )\n  }\n  const showTypeLabel = type.to.length > 1\n\n  const refTypeName = referenceInfo.result?.type\n  const refType = type.to.find((toType) => toType.type === refTypeName)\n\n  if (referenceInfo.result.availability?.available && !refType) {\n    return (\n      <Stack space={2} padding={2}>\n        <Text as=\"p\">\n          <Translate\n            t={t}\n            i18nKey=\"inputs.reference.global.invalid-type\"\n            values={{typeName: refTypeName || 'unknown'}}\n            components={{JsonValue: () => <pre>{JSON.stringify(value, null, 2)}</pre>}}\n          />\n        </Text>\n      </Stack>\n    )\n  }\n\n  return (\n    <GlobalDocumentReferencePreview\n      availability={referenceInfo.result.availability}\n      hasStudioUrl={hasStudioUrl}\n      showStudioUrlIcon={showStudioUrlIcon}\n      preview={referenceInfo.result.preview}\n      refType={refType}\n      resourceType={type.resourceType}\n      resourceId={type.resourceId}\n      id={value._ref}\n      showTypeLabel={showTypeLabel}\n    />\n  )\n}\n","import {Autocomplete, Box, Flex, type Placement, Text} from '@sanity/ui'\nimport {\n  type ComponentProps,\n  type ForwardedRef,\n  forwardRef,\n  type ReactElement,\n  type Ref,\n  type RefObject,\n  useCallback,\n} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Popover} from '../../../../ui-components'\nimport {Translate, useTranslation} from '../../../i18n'\n\nconst StyledPopover = styled(Popover)`\n  & > div {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n`\n\nconst StyledText = styled(Text)`\n  word-break: break-word;\n`\n\nconst FALLBACK_PLACEMENTS: Placement[] = ['top-start', 'bottom-start']\n\nexport const ReferenceAutocomplete = forwardRef(function ReferenceAutocomplete(\n  props: ComponentProps<typeof Autocomplete> & {\n    referenceElement: HTMLDivElement | null\n    searchString?: string\n    portalRef?: RefObject<HTMLDivElement | null>\n  },\n  ref: ForwardedRef<HTMLInputElement>,\n) {\n  const {searchString, loading, portalRef, referenceElement, ...restProps} = props\n  const {t} = useTranslation()\n  const hasResults = props.options && props.options.length > 0\n  const renderPopover = useCallback(\n    (\n      {\n        content,\n        hidden,\n        inputElement,\n        onMouseEnter,\n        onMouseLeave,\n      }: {\n        content: ReactElement | null\n        hidden: boolean\n        inputElement: HTMLInputElement | null\n        onMouseEnter: () => void\n        onMouseLeave: () => void\n      },\n      contentRef: Ref<HTMLDivElement>,\n    ) => (\n      <StyledPopover\n        data-testid=\"autocomplete-popover\"\n        placement=\"bottom-start\"\n        fallbackPlacements={FALLBACK_PLACEMENTS}\n        arrow={false}\n        constrainSize\n        onMouseEnter={onMouseEnter}\n        onMouseLeave={onMouseLeave}\n        content={\n          <div ref={contentRef}>\n            {hasResults ? (\n              content\n            ) : (\n              <Box padding={4}>\n                <Flex align=\"center\" height=\"fill\" justify=\"center\">\n                  <StyledText align=\"center\" muted>\n                    <Translate\n                      t={t}\n                      i18nKey=\"inputs.reference.no-results-for-query\"\n                      values={{searchTerm: searchString || ''}}\n                    />\n                  </StyledText>\n                </Flex>\n              </Box>\n            )}\n          </div>\n        }\n        open={!loading && !hidden}\n        ref={portalRef}\n        portal\n        referenceElement={referenceElement || inputElement}\n        matchReferenceWidth\n      />\n    ),\n    [hasResults, t, searchString, loading, portalRef, referenceElement],\n  )\n  return <Autocomplete {...restProps} ref={ref} renderPopover={renderPopover} />\n})\n","/* eslint-disable complexity, max-nested-callbacks, no-nested-ternary */\nimport {ResetIcon as ClearIcon, SyncIcon as ReplaceIcon} from '@sanity/icons'\nimport {\n  type GlobalDocumentReferenceSchemaType,\n  type GlobalDocumentReferenceValue,\n} from '@sanity/types'\nimport {Box, Card, Flex, Inline, Menu, Stack, useClickOutsideEvent, useToast} from '@sanity/ui'\nimport {\n  type FocusEvent,\n  type KeyboardEvent,\n  type ReactNode,\n  useCallback,\n  useId,\n  useMemo,\n  useRef,\n  useState,\n} from 'react'\nimport {useObservableEvent} from 'react-rx'\nimport {concat, type Observable, of} from 'rxjs'\nimport {catchError, distinctUntilChanged, filter, map, scan, switchMap, tap} from 'rxjs/operators'\n\nimport {MenuButton, MenuItem} from '../../../../ui-components'\nimport {ChangeIndicator} from '../../../changeIndicators'\nimport {PreviewCard} from '../../../components'\nimport {ContextMenuButton} from '../../../components/contextMenuButton'\nimport {type FIXME} from '../../../FIXME'\nimport {useTranslation} from '../../../i18n'\nimport {getPublishedId, isNonNullable} from '../../../util'\nimport {useDidUpdate} from '../../hooks/useDidUpdate'\nimport {set, unset} from '../../patch'\nimport {type ObjectInputProps} from '../../types'\nimport {ReferenceMetadataLoadErrorAlertStrip} from '../ReferenceInput/ReferenceMetadataLoadFailure'\nimport {ReferenceStrengthMismatchAlertStrip} from '../ReferenceInput/ReferenceStrengthMismatchAlertStrip'\nimport {OptionPreview} from './OptionPreview'\nimport {PreviewReferenceValue} from './PreviewReferenceValue'\nimport {ReferenceAutocomplete} from './ReferenceAutocomplete'\nimport {type GlobalDocumentReferenceInfo, type SearchHit, type SearchState} from './types'\nimport {type GetReferenceInfoFn, useReferenceInfo} from './useReferenceInfo'\n\nconst INITIAL_SEARCH_STATE: SearchState = {\n  hits: [],\n  isLoading: false,\n}\n\n/** @internal */\nexport interface GlobalDocumentReferenceInputProps\n  extends ObjectInputProps<GlobalDocumentReferenceValue, GlobalDocumentReferenceSchemaType> {\n  getReferenceInfo: (\n    doc: {_id: string; _type?: string},\n    type: GlobalDocumentReferenceSchemaType,\n  ) => Observable<GlobalDocumentReferenceInfo>\n  onSearch: (query: string) => Observable<SearchHit[]>\n}\n\nconst NO_FILTER = () => true\n\nconst REF_PATH = ['_ref']\n\n/** @internal */\nexport function GlobalDocumentReferenceInput(props: GlobalDocumentReferenceInputProps): ReactNode {\n  const {\n    changed,\n    focused,\n    focusPath,\n    getReferenceInfo,\n    onChange,\n    onPathFocus,\n    onSearch,\n    path,\n    readOnly,\n    schemaType,\n    validation,\n    value,\n    elementProps,\n  } = props\n\n  const {t} = useTranslation()\n\n  const [searchState, setSearchState] = useState<SearchState>(INITIAL_SEARCH_STATE)\n\n  const handleChange = useCallback(\n    (id: string) => {\n      if (!id) {\n        onChange(unset())\n        onPathFocus([])\n        return\n      }\n\n      const hit = searchState.hits.find((h) => h.id === id)\n\n      if (!hit) {\n        throw new Error('Selected an item that wasnt part of the result set')\n      }\n\n      onChange(\n        set({\n          _type: schemaType.name,\n          _ref: `${schemaType.resourceType}:${schemaType.resourceId}:${getPublishedId(id)}`,\n          _weak: schemaType.weak,\n          // persist _key between mutations if the value is in an array\n          _key: value?._key,\n        }),\n      )\n\n      onPathFocus([])\n    },\n    [\n      value?._key,\n      searchState.hits,\n      schemaType.name,\n      schemaType.resourceType,\n      schemaType.resourceId,\n      schemaType.weak,\n      onChange,\n      onPathFocus,\n    ],\n  )\n\n  const handleClear = useCallback(() => {\n    onChange(unset())\n  }, [onChange])\n\n  const handleAutocompleteKeyDown = useCallback(\n    (event: KeyboardEvent<HTMLInputElement>) => {\n      if (event.key === 'Escape') {\n        onPathFocus?.([])\n      }\n    },\n    [onPathFocus],\n  )\n\n  const getReferenceInfoMemo: GetReferenceInfoFn = useCallback(\n    (doc) => getReferenceInfo(doc, schemaType),\n    [getReferenceInfo, schemaType],\n  )\n\n  const refDoc = useMemo(() => {\n    if (!value?._ref) {\n      return null\n    }\n\n    const [, , _id] = value._ref.split(':', 3)\n    return {_id}\n  }, [value])\n\n  const loadableReferenceInfo = useReferenceInfo(refDoc as FIXME, getReferenceInfoMemo)\n\n  const [autocompletePopoverReferenceElement, setAutocompletePopoverReferenceElement] =\n    useState<HTMLDivElement | null>(null)\n\n  const hasFocusAtRef = focusPath.length === 1 && focusPath[0] === '_ref'\n\n  // --- focus handling\n  const focusElementRef = elementProps.ref\n  useDidUpdate({hasFocusAt: hasFocusAtRef, ref: value?._ref}, (prev, current) => {\n    const refUpdated = prev?.ref !== current.ref\n    const focusAtUpdated = prev?.hasFocusAt !== current.hasFocusAt\n\n    if ((focusAtUpdated || refUpdated) && current.hasFocusAt) {\n      // if search mode changed and we're having focus always ensure the\n      // ref element gets focus\n      focusElementRef.current?.focus()\n    }\n  })\n\n  const actualStrength = value?._weak ? 'weak' : 'strong'\n  const weakShouldBe = schemaType.weak === true ? 'weak' : 'strong'\n\n  const hasRef = Boolean(value?._ref)\n\n  const handleFixStrengthMismatch = useCallback(() => {\n    onChange(schemaType.weak === true ? set(true, ['_weak']) : unset(['_weak']))\n  }, [onChange, schemaType])\n\n  const {push} = useToast()\n\n  const errors = useMemo(() => validation.filter((item) => item.level === 'error'), [validation])\n\n  const handleFocus = useCallback(\n    (event: FocusEvent<HTMLDivElement>) => {\n      if (event.currentTarget === elementProps.ref.current) {\n        onPathFocus?.([])\n      }\n    },\n    [elementProps.ref, onPathFocus],\n  )\n\n  const handleBlur = useCallback((event: FocusEvent) => elementProps.onBlur(event), [elementProps])\n\n  const handleAutocompleteFocus = useCallback(\n    (event: FocusEvent<HTMLInputElement>) => {\n      if (event.currentTarget === elementProps.ref.current) {\n        onPathFocus?.(REF_PATH)\n      }\n    },\n    [elementProps.ref, onPathFocus],\n  )\n  const handleReplace = useCallback(() => {\n    onPathFocus?.(REF_PATH)\n  }, [onPathFocus])\n\n  const inputId = useId()\n\n  const handleQueryChange = useObservableEvent((inputValue$: Observable<string | null>) => {\n    return inputValue$.pipe(\n      filter(isNonNullable),\n      distinctUntilChanged(),\n      switchMap((searchString) =>\n        concat(\n          of({isLoading: true}),\n          onSearch(searchString).pipe(\n            map((hits) => ({hits, searchString, isLoading: false})),\n            catchError((error) => {\n              push({\n                title: 'Reference search failed',\n                description: error.message,\n                status: 'error',\n                id: `reference-search-fail-${inputId}`,\n              })\n\n              console.error(error)\n              return of({hits: []})\n            }),\n          ),\n        ),\n      ),\n\n      scan(\n        (prevState, nextState): SearchState => ({...prevState, ...nextState}),\n        INITIAL_SEARCH_STATE,\n      ),\n\n      tap(setSearchState),\n    )\n  })\n\n  const handleAutocompleteOpenButtonClick = useCallback(() => {\n    handleQueryChange('')\n  }, [handleQueryChange])\n\n  const showWeakRefMismatch =\n    !loadableReferenceInfo.isLoading && hasRef && actualStrength !== weakShouldBe\n\n  const studioUrl =\n    (value?._ref &&\n      schemaType.studioUrl?.({\n        id: value?._ref,\n        type: loadableReferenceInfo?.result?.type,\n      })) ||\n    null\n\n  const renderOption = useCallback(\n    (option: FIXME) => {\n      return (\n        <PreviewCard as=\"button\" type=\"button\" radius={2}>\n          <Box paddingX={3} paddingY={1}>\n            <OptionPreview\n              referenceType={schemaType}\n              document={option.hit.published}\n              getReferenceInfo={getReferenceInfoMemo}\n            />\n          </Box>\n        </PreviewCard>\n      )\n    },\n    [schemaType, getReferenceInfoMemo],\n  )\n\n  const isEditing = hasFocusAtRef || !value?._ref\n\n  // --- click outside handling\n  const clickOutsideBoundaryRef = useRef<HTMLDivElement | null>(null)\n  const autocompletePortalRef = useRef<HTMLDivElement | null>(null)\n  useClickOutsideEvent(hasFocusAtRef && (() => onPathFocus([])), () => [\n    clickOutsideBoundaryRef.current,\n    autocompletePortalRef.current,\n  ])\n\n  return (\n    <Stack space={1}>\n      {isEditing ? (\n        <Stack space={2} ref={clickOutsideBoundaryRef}>\n          <ChangeIndicator path={path} isChanged={changed} hasFocus={!!focused}>\n            <div ref={setAutocompletePopoverReferenceElement}>\n              <ReferenceAutocomplete\n                {...elementProps}\n                data-testid=\"autocomplete\"\n                loading={searchState.isLoading}\n                referenceElement={autocompletePopoverReferenceElement}\n                portalRef={autocompletePortalRef}\n                id={inputId || ''}\n                options={searchState.hits.map((hit) => ({\n                  value: hit.id,\n                  hit: hit,\n                }))}\n                onFocus={handleAutocompleteFocus}\n                radius={2}\n                placeholder={t('inputs.reference.search-placeholder')}\n                onKeyDown={handleAutocompleteKeyDown}\n                readOnly={readOnly}\n                disabled={loadableReferenceInfo.isLoading}\n                onQueryChange={handleQueryChange}\n                searchString={searchState.searchString}\n                onChange={handleChange}\n                filterOption={NO_FILTER}\n                renderOption={renderOption}\n                openButton={{onClick: handleAutocompleteOpenButtonClick}}\n              />\n            </div>\n          </ChangeIndicator>\n        </Stack>\n      ) : (\n        <ChangeIndicator path={path} isChanged={changed} hasFocus={!!focused}>\n          <Card\n            padding={0}\n            border\n            flex={1}\n            radius={1}\n            tone={\n              readOnly\n                ? 'transparent'\n                : loadableReferenceInfo.error || errors.length > 0\n                  ? 'critical'\n                  : 'default'\n            }\n          >\n            <Flex align=\"center\" padding={1}>\n              {studioUrl ? (\n                <PreviewCard\n                  as=\"a\"\n                  target=\"_blank\"\n                  rel=\"noopener noreferrer\"\n                  href={studioUrl}\n                  data-as=\"a\"\n                  flex={1}\n                  padding={1}\n                  paddingRight={3}\n                  radius={2}\n                  tone=\"inherit\"\n                  __unstable_focusRing\n                  tabIndex={0}\n                  onFocus={handleFocus}\n                  onBlur={handleBlur}\n                  ref={elementProps.ref}\n                >\n                  <PreviewReferenceValue\n                    value={value}\n                    referenceInfo={loadableReferenceInfo}\n                    showStudioUrlIcon\n                    hasStudioUrl={!!studioUrl}\n                    type={schemaType}\n                  />\n                </PreviewCard>\n              ) : (\n                <PreviewCard\n                  flex={1}\n                  padding={1}\n                  paddingRight={3}\n                  radius={2}\n                  tone=\"inherit\"\n                  __unstable_focusRing\n                  tabIndex={0}\n                  onFocus={handleFocus}\n                  onBlur={handleBlur}\n                  ref={elementProps.ref}\n                >\n                  <PreviewReferenceValue\n                    value={value}\n                    referenceInfo={loadableReferenceInfo}\n                    showStudioUrlIcon\n                    type={schemaType}\n                  />\n                </PreviewCard>\n              )}\n\n              <Inline paddingX={1}>\n                <MenuButton\n                  button={<ContextMenuButton data-testid=\"menu-button\" />}\n                  id={`${inputId}-menuButton`}\n                  menu={\n                    <Menu>\n                      {!readOnly && (\n                        <>\n                          <MenuItem\n                            text={t('inputs.reference.action.clear')}\n                            tone=\"critical\"\n                            icon={ClearIcon}\n                            data-testid=\"menu-item-clear\"\n                            onClick={handleClear}\n                          />\n\n                          <MenuItem\n                            text={t('inputs.reference.action.replace')}\n                            icon={ReplaceIcon}\n                            data-testid=\"menu-item-replace\"\n                            onClick={handleReplace}\n                          />\n                        </>\n                      )}\n                    </Menu>\n                  }\n                  placement=\"right\"\n                  popover={{portal: true, tone: 'default'}}\n                />\n              </Inline>\n            </Flex>\n            {showWeakRefMismatch && (\n              <ReferenceStrengthMismatchAlertStrip\n                actualStrength={actualStrength}\n                handleFixStrengthMismatch={handleFixStrengthMismatch}\n              />\n            )}\n\n            {loadableReferenceInfo.error && (\n              <ReferenceMetadataLoadErrorAlertStrip\n                errorMessage={loadableReferenceInfo.error.message}\n                onHandleRetry={loadableReferenceInfo.retry!}\n              />\n            )}\n          </Card>\n        </ChangeIndicator>\n      )}\n    </Stack>\n  )\n}\n","export const globalDocumentReferenceApiVersion = 'v2025-02-19'\n\n// TODO: change globalDatasetApiVersion to 'vXXXX-XX-XX' when the global dataset data API is available\nexport const globalDatasetApiVersion = 'vX'\n","import {\n  type Any,\n  type ClientReturn,\n  connectEventSource,\n  type QueryWithoutParams,\n  type SanityClient,\n  type SanityDocument,\n  type ServerSentEvent,\n} from '@sanity/client'\nimport {type GlobalDocumentReferenceSchemaType} from '@sanity/types'\nimport {map, type Observable} from 'rxjs'\n\nimport {\n  globalDatasetApiVersion,\n  globalDocumentReferenceApiVersion as apiVersion,\n} from '../constants'\n\nexport type ReferenceClient = {\n  getDocument<R extends Record<string, Any>>(\n    id: string,\n    searchParams?: URLSearchParams,\n  ): Observable<SanityDocument<R> | null>\n  getDocuments<R extends Record<string, Any>>(\n    ids: string[],\n    searchParams?: URLSearchParams,\n  ): Observable<{\n    documents: SanityDocument<R>[]\n    omitted: {id: string; reason: 'existence' | 'permission'}[]\n  }>\n  query<\n    R = Any,\n    Q extends Record<string, unknown> | undefined = QueryWithoutParams,\n    G extends string = string,\n  >(\n    query: G,\n    params?: Q | QueryWithoutParams,\n  ): Observable<ClientReturn<G, R>>\n  listen<\n    Q extends Record<string, string> | undefined = QueryWithoutParams,\n    G extends string = string,\n  >(\n    query: G,\n    params?: Q | QueryWithoutParams,\n    opts?: {includeResult?: boolean},\n  ): Observable<ServerSentEvent<'mutation' | 'welcome'>>\n}\n\nexport function getReferenceClient(\n  client: SanityClient,\n  schemaType: GlobalDocumentReferenceSchemaType,\n): ReferenceClient {\n  if (schemaType.resourceType === 'dataset') {\n    const [projectId, datasetName] = schemaType.resourceId.split('.', 2)\n    return {\n      getDocument<R extends Record<string, Any>>(\n        id: string,\n        searchParams?: URLSearchParams,\n      ): Observable<SanityDocument<R> | null> {\n        const tag = searchParams?.get('tag') || undefined\n        searchParams?.delete('tag')\n        return client\n          .withConfig({\n            useProjectHostname: false,\n            apiVersion: globalDatasetApiVersion,\n          })\n          .observable.request({\n            useGlobalApi: true,\n            uri: `/projects/${projectId}/datasets/${datasetName}/doc/${id}?${searchParams?.toString() || ''}`,\n            method: 'GET',\n            tag,\n          })\n          .pipe(map((res) => res.documents[0]))\n      },\n      getDocuments<R extends Record<string, Any>>(\n        ids: string[],\n        searchParams?: URLSearchParams,\n      ): Observable<{\n        documents: SanityDocument<R>[]\n        omitted: {id: string; reason: 'existence' | 'permission'}[]\n      }> {\n        const tag = searchParams?.get('tag') || undefined\n        searchParams?.delete('tag')\n        return client\n          .withConfig({\n            useProjectHostname: false,\n            apiVersion: globalDatasetApiVersion,\n          })\n          .observable.request({\n            useGlobalApi: true,\n            uri: `/projects/${projectId}/datasets/${datasetName}/doc/${ids.join(',')}?${searchParams?.toString() || ''}`,\n            method: 'GET',\n            tag,\n          })\n      },\n      query<\n        R = Any,\n        Q extends Record<string, unknown> | undefined = QueryWithoutParams,\n        G extends string = string,\n      >(query: G, params: Q) {\n        return client.observable\n          .withConfig({\n            useProjectHostname: false,\n            apiVersion: globalDatasetApiVersion,\n          })\n          .request<{result: ClientReturn<G, R>}>({\n            url: `/projects/${projectId}/datasets/${datasetName}/query`,\n            useGlobalApi: true,\n            method: 'POST',\n            body: {query, params},\n            tag: 'sanity.studio.gdr.query',\n          })\n          .pipe(map((res) => res.result))\n      },\n      listen<\n        Q extends Record<string, string> | undefined = QueryWithoutParams,\n        G extends string = string,\n      >(query: G, params: Q, opts: {includeResult?: boolean} = {}) {\n        // add $ as a prefix to all keys in the params\n        const queryParams = Object.keys(params || {}).reduce<Record<string, string>>((acc, key) => {\n          acc[`$${key}`] = `\"${params![key]}\"`\n          return acc\n        }, {})\n        const allParams = {...queryParams, tag: 'sanity.studio.listen.gdr', query} as Record<\n          string,\n          string\n        >\n        if (opts.includeResult) {\n          allParams.includeResult = 'true'\n        }\n        const paramsString = new URLSearchParams(allParams).toString()\n        const uri = `${client.config().apiHost}/${globalDatasetApiVersion}/projects/${projectId}/datasets/${datasetName}/listen?${paramsString}`\n        return connectEventSource(\n          () => new EventSource(uri, {withCredentials: true}),\n          ['welcome', 'mutation'],\n        )\n      },\n    } satisfies ReferenceClient\n  }\n  if (schemaType.resourceType === 'media-library') {\n    return {\n      getDocument<R extends Record<string, Any>>(\n        id: string,\n        searchParams?: URLSearchParams,\n      ): Observable<SanityDocument<R> | null> {\n        const tag = searchParams?.get('tag') || undefined\n        searchParams?.delete('tag')\n        return client\n          .withConfig({\n            useProjectHostname: false,\n            apiVersion,\n          })\n          .observable.request({\n            useGlobalApi: true,\n            uri: `/media-libraries/${schemaType.resourceId}/doc/${id}?${searchParams?.toString() || ''}`,\n            method: 'GET',\n            tag,\n          })\n          .pipe(map((res) => res.documents[0]))\n      },\n      getDocuments<R extends Record<string, Any>>(\n        ids: string[],\n        searchParams?: URLSearchParams,\n      ): Observable<{\n        documents: SanityDocument<R>[]\n        omitted: {id: string; reason: 'existence' | 'permission'}[]\n      }> {\n        const tag = searchParams?.get('tag') || undefined\n        searchParams?.delete('tag')\n        return client\n          .withConfig({\n            useProjectHostname: false,\n            apiVersion,\n          })\n          .observable.request({\n            useGlobalApi: true,\n            uri: `/${apiVersion}/media-libraries/${schemaType.resourceId}/doc/${ids.join(',')}?${searchParams?.toString() || ''}`,\n            method: 'GET',\n            tag,\n          })\n      },\n      query<\n        R = Any,\n        Q extends Record<string, unknown> | undefined = QueryWithoutParams,\n        G extends string = string,\n      >(query: G, params: Q) {\n        return client\n          .withConfig({\n            useProjectHostname: false,\n            apiVersion,\n          })\n          .observable.request<{result: ClientReturn<G, R>}>({\n            useGlobalApi: true,\n            uri: `/media-libraries/${schemaType.resourceId}/query`,\n            method: 'POST',\n            body: {query, params},\n            tag: 'gdr.query',\n          })\n          .pipe(map((res) => res.result))\n      },\n      listen<\n        Q extends Record<string, string> | undefined = QueryWithoutParams,\n        G extends string = string,\n      >(query: G, params: Q) {\n        const allParams = {...params, tag: 'listen', query}\n        const paramsString = new URLSearchParams(allParams).toString()\n        const uri = `${client.config().apiHost}/${apiVersion}/media-libraries/${schemaType.resourceId}/listen?${paramsString}`\n        return connectEventSource(() => new EventSource(uri, {}), ['welcome', 'mutation'])\n      },\n    } satisfies ReferenceClient\n  }\n  throw new Error(`Invalid resource type \"${schemaType.resourceType}\"`)\n}\n","export function keysOf<T extends object>(value: T) {\n  return Object.keys(value) as (keyof T)[]\n}\n","import {\n  combineLatest,\n  from as observableFrom,\n  isObservable,\n  Observable,\n  of as observableOf,\n} from 'rxjs'\nimport {map, mergeAll, scan, switchMap} from 'rxjs/operators'\n\nimport {keysOf} from './keysOf'\n\nfunction setKey(source: Record<string, unknown>, key: any, value: unknown) {\n  return {\n    ...source,\n    [key]: value,\n  }\n}\n\ntype Props<K extends keyof any, T> = {\n  [P in K]: T | Observable<T>\n}\n\nexport function props<K extends keyof any, T>(options: {wait?: boolean} = {}) {\n  return (source: Observable<Props<K, T>>) => {\n    return new Observable<Props<K, T>>((observer) => source.subscribe(observer)).pipe(\n      switchMap((object) => {\n        const keyObservables = keysOf(object).map((key) => {\n          const value = object[key]\n          return isObservable(value)\n            ? observableFrom(value).pipe(map((val) => [key, val]))\n            : observableOf([key, value])\n        })\n\n        return options.wait\n          ? combineLatest(keyObservables).pipe(\n              map((pairs) => pairs.reduce((acc, [key, value]) => setKey(acc, key, value), {})),\n            )\n          : observableFrom(keyObservables).pipe(\n              mergeAll(),\n              scan((acc, [key, value]) => setKey(acc, key, value), {}),\n            )\n      }),\n    )\n  }\n}\n","import {type StackablePerspective} from '@sanity/client'\nimport {isCrossDatasetReference, isReference} from '@sanity/types'\nimport {uniq} from 'lodash'\nimport {type Observable, of as observableOf} from 'rxjs'\nimport {switchMap} from 'rxjs/operators'\n\nimport {isRecord} from '../util'\nimport {type ApiConfig, type FieldName, type Previewable, type PreviewPath} from './types'\nimport {props} from './utils/props'\n\nfunction createEmpty(fields: FieldName[]) {\n  return fields.reduce((result: Record<string, undefined>, field) => {\n    result[field] = undefined\n    return result\n  }, {})\n}\n\nfunction resolveMissingHeads(value: Record<string, unknown>, paths: string[][]) {\n  return paths.filter((path) => !(path[0] in value))\n}\n\nfunction getDocumentId(value: Previewable) {\n  if (isReference(value)) {\n    return value._ref\n  }\n  return '_id' in value ? value._id : undefined\n}\n\ntype ObserveFieldsFn = (\n  id: string,\n  fields: FieldName[],\n  apiConfig?: ApiConfig,\n  perspective?: StackablePerspective[],\n) => Observable<Record<string, unknown> | null>\n\nfunction observePaths(\n  value: Previewable,\n  paths: PreviewPath[],\n  observeFields: ObserveFieldsFn,\n  apiConfig?: ApiConfig,\n  perspective?: StackablePerspective[],\n): Observable<Record<string, unknown> | null> {\n  if (!value || typeof value !== 'object') {\n    // Reached a leaf. Return as is\n    return observableOf(value as null) // @todo\n  }\n\n  const id = getDocumentId(value)\n\n  const currentValue: Record<string, unknown> = id ? {...value, _id: id} : {...value}\n\n  if (currentValue._type === 'reference') {\n    delete currentValue._type\n    delete currentValue._ref\n    delete currentValue._weak\n    delete currentValue._dataset\n    delete currentValue._projectId\n    delete currentValue._strengthenOnPublish\n  }\n\n  const pathsWithMissingHeads = resolveMissingHeads(currentValue, paths)\n\n  if (id && pathsWithMissingHeads.length > 0) {\n    // Reached a node that is either a document (with _id), or a reference (with _ref) that\n    // needs to be \"materialized\"\n\n    const nextHeads: string[] = uniq(pathsWithMissingHeads.map((path: string[]) => path[0]))\n\n    const refApiConfig = isCrossDatasetReference(value)\n      ? {projectId: value._projectId, dataset: value._dataset}\n      : apiConfig\n\n    return observeFields(id, nextHeads, refApiConfig, perspective).pipe(\n      switchMap((snapshot) => {\n        if (snapshot === null) {\n          return observableOf(null)\n        }\n\n        return observePaths(\n          {\n            ...createEmpty(nextHeads),\n            ...(isReference(value) ? {...value, ...refApiConfig} : value),\n            ...snapshot,\n          } as Previewable,\n          paths,\n          observeFields,\n          refApiConfig,\n          perspective,\n        )\n      }),\n    )\n  }\n\n  // We have all the fields needed already present on value\n  const leads: Record<string, string[][]> = {}\n  paths.forEach((path) => {\n    const [head, ...tail] = path\n    if (!leads[head]) {\n      leads[head] = []\n    }\n    leads[head].push(tail)\n  })\n\n  const next = Object.keys(leads).reduce((res: Record<string, unknown>, head) => {\n    const tails = leads[head].filter((tail) => tail.length > 0)\n    if (tails.length === 0) {\n      res[head] = isRecord(value) ? (value as Record<string, unknown>)[head] : undefined\n    } else {\n      res[head] = observePaths((value as any)[head], tails, observeFields, apiConfig, perspective)\n    }\n    return res\n  }, currentValue)\n\n  return observableOf(next).pipe(props({wait: true}))\n}\n\n// Normalizes path arguments so it supports both dot-paths and array paths, e.g.\n// - ['propA.propB', 'propA.propC']\n// - [['propA', 'propB'], ['propA', 'propC']]\nfunction normalizePaths(path: (FieldName | PreviewPath)[]): PreviewPath[] {\n  return path.map((segment: FieldName | PreviewPath) =>\n    typeof segment === 'string' ? segment.split('.') : segment,\n  )\n}\n\n/**\n * Creates a function that allows observing nested paths on a document.\n * If the path includes a reference, the reference will be \"followed\", allowing for selecting paths within the referenced document.\n * @param options - Requires a function that can observe fields on a document\n * @internal\n */\nexport function createPathObserver(options: {observeFields: ObserveFieldsFn}) {\n  const {observeFields} = options\n\n  return (\n    value: Previewable,\n    paths: (FieldName | PreviewPath)[],\n    apiConfig?: ApiConfig,\n    perspective?: StackablePerspective[],\n  ): Observable<Record<string, unknown> | null> => {\n    return observePaths(value, normalizePaths(paths), observeFields, apiConfig, perspective)\n  }\n}\n","import {type GlobalDocumentReferenceSchemaType, type SanityDocument} from '@sanity/types'\nimport {keyBy} from 'lodash'\nimport {combineLatest, EMPTY, type Observable, of, share} from 'rxjs'\nimport {map, switchMap} from 'rxjs/operators'\n\nimport {\n  type DocumentAvailability,\n  type FieldName,\n  getPreviewPaths,\n  prepareForPreview,\n} from '../../../../../preview'\nimport {createPathObserver} from '../../../../../preview/createPathObserver'\nimport {isRecord} from '../../../../../util'\nimport {type GlobalDocumentReferenceInfo} from '../../../../inputs/GlobalDocumentReferenceInput/types'\nimport {type ReferenceClient} from './getReferenceClient'\n\nconst REQUEST_TAG_BASE = 'gdr'\n\nconst AVAILABILITY_READABLE = {\n  available: true,\n  reason: 'READABLE',\n} as const\n\nconst AVAILABILITY_PERMISSION_DENIED = {\n  available: false,\n  reason: 'PERMISSION_DENIED',\n} as const\n\nconst AVAILABILITY_NOT_FOUND = {\n  available: false,\n  reason: 'NOT_FOUND',\n} as const\n\n/**\n * Takes a client instance and returns a function that can be called to retrieve reference information\n */\nexport function createGetReferenceInfo(context: {client: ReferenceClient}) {\n  const {client} = context\n\n  /**\n   * Takes an id and a reference schema type, returns metadata about it\n   * Assumption: _id is always published id\n   */\n  return function getReferenceInfo(\n    doc: {_id: string; _type?: string}, // pass {_id, _type} instead and we can skip the `fetchType`\n    referenceType: GlobalDocumentReferenceSchemaType,\n  ): Observable<GlobalDocumentReferenceInfo> {\n    return (\n      doc._type\n        ? of(doc)\n        : client\n            .getDocument<{_id: string; _type: string}>(doc._id)\n            .pipe(map((res): {_id: string; _type?: string} => ({_id: doc._id, _type: res?._type})))\n    ).pipe(\n      switchMap((resolvedDoc) => {\n        if (!resolvedDoc._type) {\n          // we still can't read the type of the referenced document. This may be due to either 1) lack of access 2) lack of existence\n          // we want to display a reason to the end user, so we're fetching metadata about it\n          return fetchDocumentAvailability(client, doc._id).pipe(\n            map((availability) => ({\n              id: doc._id,\n              type: undefined,\n              availability,\n              preview: {published: undefined},\n            })),\n          )\n        }\n        const refSchemaType = referenceType.to.find(\n          (candidate) => candidate.type === resolvedDoc._type,\n        )\n        if (!refSchemaType) {\n          return of({\n            id: doc._id,\n            type: resolvedDoc._type,\n            availability: AVAILABILITY_READABLE,\n            preview: {published: undefined},\n          })\n        }\n\n        const previewPaths = getPreviewPaths(refSchemaType?.preview) || []\n        const listener = client.listen('*', {}, {includeResult: true}).pipe(share())\n        const observeFields = createObserveFields({client, listener})\n        const observePaths = createPathObserver({observeFields})\n\n        const publishedPreview$ = observePaths(doc, previewPaths).pipe(\n          map((result) => (result ? prepareForPreview(result, refSchemaType) : result)),\n        )\n\n        return combineLatest([publishedPreview$]).pipe(\n          map(([publishedPreview]) => {\n            return {\n              type: resolvedDoc._type,\n              id: doc._id,\n              availability: AVAILABILITY_READABLE,\n              preview: {\n                published: isRecord(publishedPreview) ? publishedPreview : undefined,\n              },\n            }\n          }),\n        )\n      }),\n    )\n  }\n}\n\nfunction createObserveFields(context: {\n  client: ReferenceClient\n  listener: Observable<{type: 'welcome'} | {type: 'mutation'; data?: unknown}>\n}): (id: string, fields: FieldName[]) => Observable<Record<string, unknown> | null> {\n  const {client, listener} = context\n  return function observeFields(id: string, fields: string[]) {\n    return listener.pipe(\n      switchMap((event) => {\n        if (event.type === 'welcome') {\n          return client.getDocument(id)\n        }\n        if (!event.data) {\n          return EMPTY\n        }\n\n        const data = event.data as {result: SanityDocument; documentId: string; transition: string}\n\n        if (data.documentId !== id) {\n          return EMPTY\n        }\n        if (data.transition === 'disappear') {\n          return of(null)\n        }\n\n        return of(data.result)\n      }),\n    )\n  }\n}\n\nfunction fetchDocumentAvailability(\n  client: ReferenceClient,\n  id: string,\n): Observable<DocumentAvailability | null> {\n  const queryParams = new URLSearchParams({\n    excludeContent: 'true',\n    tag: `${REQUEST_TAG_BASE}.availability`,\n  })\n\n  return client.getDocuments([id], queryParams).pipe(\n    map((response) => {\n      const omitted = keyBy(response.omitted || [], (entry) => entry.id)\n      const omittedEntry = omitted[id]\n      if (!omittedEntry) {\n        // it's not omitted, so it exists and is readable\n        return AVAILABILITY_READABLE\n      }\n      // omitted because it doesn't exist\n      if (omittedEntry.reason === 'existence') {\n        return AVAILABILITY_NOT_FOUND\n      }\n      if (omittedEntry.reason === 'permission') {\n        // omitted because it's not readable\n        return AVAILABILITY_PERMISSION_DENIED\n      }\n      return null\n    }),\n  )\n}\n","import {\n  type GlobalDocumentReferenceSchemaType,\n  type GlobalDocumentReferenceType,\n  type ReferenceFilterSearchOptions,\n  type SanityDocumentLike,\n} from '@sanity/types'\nimport {type Observable} from 'rxjs'\nimport {map} from 'rxjs/operators'\n\nimport {type Groq2024SearchResults} from '../../../../../search'\nimport {createSearchQuery} from '../../../../../search/groq2024/createSearchQuery'\nimport {getNextCursor} from '../../../../../search/groq2024/getNextCursor'\nimport {type SearchParams} from '../../../../../search/weighted/createSearchQuery'\nimport {collate} from '../../../../../util'\nimport {type ReferenceClient} from './getReferenceClient'\n\ninterface SearchHit {\n  id: string\n  type: string\n  published: undefined | {_id: string; _type: string}\n}\n\nconst limit = 10\n\nfunction doSearch(\n  client: ReferenceClient,\n  searchTerm: string,\n  types: GlobalDocumentReferenceType[],\n  searchOptions: ReferenceFilterSearchOptions,\n): Observable<Groq2024SearchResults> {\n  const {query, params, options, sortOrder} = createSearchQuery(\n    {types, query: searchTerm},\n    searchTerm,\n    searchOptions,\n  )\n\n  return client.query<SanityDocumentLike[], SearchParams>(query, params).pipe(\n    map((hits) => {\n      const hasNextPage = typeof limit !== 'undefined' && hits.length > limit\n\n      // Search overfetches by 1 to determine whether there is another page to fetch. Therefore,\n      // the penultimate result must be used to determine the start of the next page.\n      const lastResult = hasNextPage ? hits.at(-2) : hits.at(-1)\n\n      return {\n        type: 'groq2024',\n        // Search overfetches by 1 to determine whether there is another page to fetch. Therefore,\n        // exclude the final result if it's beyond the limit.\n        hits: hits.map((hit) => ({hit})).slice(0, limit),\n        nextCursor: hasNextPage ? getNextCursor({lastResult, sortOrder}) : undefined,\n      }\n    }),\n  )\n}\n\nexport function search(\n  client: ReferenceClient,\n  textTerm: string,\n  type: GlobalDocumentReferenceSchemaType,\n  options: ReferenceFilterSearchOptions,\n): Observable<SearchHit[]> {\n  return doSearch(client, textTerm, type.to, options).pipe(\n    map(({hits}) => hits.map(({hit}) => hit)),\n    map((docs) => collate(docs)),\n    map((collated) =>\n      collated.map((entry) => ({\n        id: entry.id,\n        type: entry.type,\n        published: entry.published,\n      })),\n    ),\n  )\n}\n","import {\n  type GlobalDocumentReferenceSchemaType,\n  type GlobalDocumentReferenceValue,\n  type Path,\n  type ReferenceFilterOptions,\n  type ReferenceFilterSearchOptions,\n  type SanityDocument,\n} from '@sanity/types'\nimport {get} from '@sanity/util/paths'\nimport {useCallback, useEffect, useMemo, useRef} from 'react'\nimport {from, throwError} from 'rxjs'\nimport {catchError, mergeMap} from 'rxjs/operators'\n\nimport {type Source} from '../../../../config'\nimport {type FIXME} from '../../../../FIXME'\nimport {useSource} from '../../../../studio'\nimport {useFormValue} from '../../../contexts/FormValue'\nimport {GlobalDocumentReferenceInput} from '../../../inputs/GlobalDocumentReferenceInput'\nimport {type ObjectInputProps} from '../../../types'\nimport {getReferenceClient} from './datastores/getReferenceClient'\nimport {createGetReferenceInfo} from './datastores/getReferenceInfo'\nimport {search} from './datastores/search'\n\nasync function resolveUserDefinedFilter(\n  options: ReferenceFilterOptions | undefined,\n  document: SanityDocument,\n  valuePath: Path,\n  getClient: Source['getClient'],\n): Promise<ReferenceFilterSearchOptions> {\n  if (!options) {\n    return {}\n  }\n\n  if (typeof options.filter === 'function') {\n    const parentPath = valuePath.slice(0, -1)\n    const parent = get(document, parentPath) as Record<string, unknown>\n    const resolvedFilter = await options.filter({document, parentPath, parent, getClient})\n    return resolvedFilter\n  }\n\n  return {\n    filter: options.filter,\n    params: 'filterParams' in options ? options.filterParams : undefined,\n  }\n}\n\n/**\n *\n * @hidden\n * @beta\n */\nexport type StudioGlobalDocumentReferenceInputProps = ObjectInputProps<\n  GlobalDocumentReferenceValue,\n  GlobalDocumentReferenceSchemaType\n>\n\nfunction useValueRef<T>(value: T): {current: T} {\n  const ref = useRef(value)\n  useEffect(() => {\n    ref.current = value\n  }, [value])\n  return ref\n}\n\ntype SearchError = {\n  message: string\n  details?: {\n    type: string\n    description: string\n  }\n}\n\n/**\n *\n * @hidden\n * @beta\n */\nexport function StudioGlobalDocumentReferenceInput(\n  props: StudioGlobalDocumentReferenceInputProps,\n): React.JSX.Element {\n  const {path, schemaType} = props\n  const source = useSource()\n  const client = source.getClient({\n    apiVersion: '2023-11-13',\n  })\n  const getClient = source.getClient\n  const {strategy: searchStrategy} = source.search\n\n  const referenceClient = useMemo(\n    () => getReferenceClient(client, schemaType),\n    [client, schemaType],\n  )\n  const documentValue = useFormValue([]) as FIXME\n  const documentRef = useValueRef(documentValue)\n\n  const handleSearch = useCallback(\n    (searchString: string) =>\n      from(resolveUserDefinedFilter(schemaType.options, documentRef.current, path, getClient)).pipe(\n        mergeMap(({filter, params}) =>\n          search(referenceClient, searchString, schemaType, {\n            ...schemaType.options,\n            filter,\n            params,\n            tag: 'search.global-document-reference',\n            strategy: searchStrategy,\n          }),\n        ),\n\n        catchError((err: SearchError) => {\n          const isQueryError = err.details && err.details.type === 'queryParseError'\n          if (schemaType.options?.filter && isQueryError) {\n            err.message = `Invalid reference filter, please check the custom \"filter\" option`\n          }\n          return throwError(err)\n        }),\n      ),\n\n    [schemaType, documentRef, path, getClient, referenceClient, searchStrategy],\n  )\n\n  const getReferenceInfo = useMemo(\n    () => createGetReferenceInfo({client: referenceClient}),\n    [referenceClient],\n  )\n\n  return (\n    <GlobalDocumentReferenceInput\n      {...props}\n      getReferenceInfo={getReferenceInfo}\n      onSearch={handleSearch}\n    />\n  )\n}\n","import {type Reference} from '@sanity/types'\nimport {type ReactNode, useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {type Observable} from 'rxjs'\n\ninterface Props<AssetDoc> {\n  reference: Reference\n  observeAsset: (assetId: string) => Observable<AssetDoc>\n  children: (assetDocument: AssetDoc) => ReactNode\n  waitPlaceholder?: ReactNode\n}\n\nexport function WithReferencedAsset<Asset>(props: Props<Asset>) {\n  const {reference, children, observeAsset, waitPlaceholder} = props\n  const documentId = reference?._ref\n  const observable = useMemo(() => observeAsset(documentId), [documentId, observeAsset])\n  const asset = useObservable(observable)\n  return <>{documentId && asset ? children(asset) : waitPlaceholder}</>\n}\n","import {styled} from 'styled-components'\n\nimport {MenuItem} from '../../../../../../ui-components'\n\nexport const FileMenuItem = styled(MenuItem)`\n  position: relative;\n\n  & input {\n    overflow: hidden;\n    overflow: clip;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    min-width: 0;\n    display: block;\n    appearance: none;\n    padding: 0;\n    margin: 0;\n    border: 0;\n    opacity: 0;\n  }\n`\n","import {\n  type ChangeEvent,\n  type ForwardedRef,\n  forwardRef,\n  type HTMLProps,\n  useCallback,\n  useId,\n} from 'react'\n\nimport {type MenuItemProps} from '../../../../../../ui-components'\nimport {FileMenuItem} from './FileInputMenuItem.styled'\n\nexport interface FileInputMenuItemProps extends Omit<MenuItemProps, 'onSelect'> {\n  accept?: string\n  capture?: 'user' | 'environment'\n  multiple?: boolean\n  onSelect?: (files: File[]) => void\n  disabled?: boolean\n}\n\nexport const FileInputMenuItem = forwardRef(function FileInputMenuItem(\n  props: FileInputMenuItemProps &\n    Omit<HTMLProps<HTMLButtonElement>, 'as' | 'ref' | 'type' | 'value' | 'onSelect'>,\n  forwardedRef: ForwardedRef<HTMLInputElement>,\n) {\n  const {icon, id: idProp, accept, capture, multiple, onSelect, text, disabled, ...rest} = props\n  const id = `${idProp || ''}-${useId()}`\n\n  const handleChange = useCallback(\n    (event: ChangeEvent<HTMLInputElement>) => {\n      if (onSelect && event.target.files) {\n        onSelect(Array.from(event.target.files))\n      }\n    },\n    [onSelect],\n  )\n\n  const renderMenuItem = useCallback(\n    (item: React.JSX.Element) => (\n      <div>\n        {item}\n        {/* Visibly hidden input */}\n        <input\n          data-testid=\"file-menuitem-input\"\n          accept={accept}\n          capture={capture}\n          id={id}\n          multiple={multiple}\n          onChange={handleChange}\n          type=\"file\"\n          value=\"\"\n          disabled={disabled}\n        />\n      </div>\n    ),\n    [accept, capture, disabled, handleChange, id, multiple],\n  )\n  return (\n    <FileMenuItem\n      {...rest}\n      htmlFor={id}\n      disabled={disabled}\n      ref={forwardedRef}\n      icon={icon}\n      text={text}\n      renderMenuItem={renderMenuItem}\n    />\n  )\n})\n","import {CopyIcon, DownloadIcon, ResetIcon, UploadIcon} from '@sanity/icons'\nimport {MenuDivider, useToast} from '@sanity/ui'\nimport {type MouseEventHandler, type ReactNode, useCallback} from 'react'\n\nimport {MenuItem} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n'\nimport {FileInputMenuItem} from './FileInputMenuItem/FileInputMenuItem'\n\ninterface Props {\n  onUpload: (files: File[]) => void\n  browse: ReactNode\n  readOnly?: boolean\n  onReset: MouseEventHandler<HTMLDivElement>\n  accept: string\n  directUploads?: boolean\n  downloadUrl?: string\n  copyUrl?: string\n}\n\nexport function ActionsMenu(props: Props) {\n  const {onUpload, onReset, readOnly, accept, directUploads, browse, downloadUrl, copyUrl} = props\n\n  const {push: pushToast} = useToast()\n  const {t} = useTranslation()\n\n  const handleCopyURL = useCallback(() => {\n    navigator.clipboard.writeText(copyUrl || '')\n    pushToast({\n      closable: true,\n      status: 'success',\n      title: t('inputs.files.common.actions-menu.notification.url-copied'),\n    })\n  }, [copyUrl, pushToast, t])\n\n  return (\n    <>\n      <FileInputMenuItem\n        icon={UploadIcon}\n        onSelect={onUpload}\n        accept={accept}\n        text={t('inputs.files.common.actions-menu.upload.label')}\n        data-testid=\"file-input-upload-button\"\n        disabled={readOnly || !directUploads}\n      />\n      {browse}\n\n      {(downloadUrl || copyUrl) && <MenuDivider />}\n      {downloadUrl && (\n        <MenuItem\n          as=\"a\"\n          icon={DownloadIcon}\n          text={t('inputs.files.common.actions-menu.download.label')}\n          href={downloadUrl}\n        />\n      )}\n      {copyUrl && (\n        <MenuItem\n          icon={CopyIcon}\n          text={t('inputs.files.common.actions-menu.copy-url.label')}\n          onClick={handleCopyURL}\n        />\n      )}\n\n      <MenuDivider />\n      <MenuItem\n        tone=\"critical\"\n        icon={ResetIcon}\n        text={t('inputs.files.common.actions-menu.clear-field.label')}\n        onClick={onReset}\n        disabled={readOnly}\n        data-testid=\"file-input-clear\"\n      />\n    </>\n  )\n}\n","import {uuid} from '@sanity/uuid'\n\nimport {type FIXME} from '../../../../../FIXME'\n\nexport function urlToFile(url: string, filename?: string): Promise<File> {\n  return new Promise((resolve, reject) => {\n    const xhr = new XMLHttpRequest()\n    xhr.onload = () => {\n      const reader = new FileReader()\n      reader.onloadend = () => {\n        const string = reader.result?.toString()\n        const base64Index = string?.indexOf(';base64')\n        if (!string || base64Index === -1) {\n          reject(new Error('Could not convert URL to file'))\n          return\n        }\n\n        const ext = string.slice('data:image/'.length, base64Index)\n        if (!ext && !filename) {\n          reject(new Error('Could not find mime type for image'))\n          return\n        }\n        resolve(dataURLtoFile(reader.result as FIXME, filename || `${uuid()}.${ext}`))\n      }\n      reader.readAsDataURL(xhr.response)\n    }\n    xhr.onerror = (error) => {\n      reject(error)\n    }\n    xhr.open('GET', url)\n    xhr.responseType = 'blob'\n    xhr.send()\n  })\n}\n\nexport function base64ToFile(base64Data: string | ArrayBuffer, filename?: string): Promise<File> {\n  return new Promise((resolve, reject) => {\n    const string = base64Data.toString()\n    const base64Index = string.indexOf(';base64')\n    if (!string || base64Index === -1) {\n      reject(new Error('Could not convert base64 to file'))\n      return\n    }\n\n    const ext = string.slice('data:image/'.length, base64Index)\n    if (!ext && !filename) {\n      reject(new Error('Could not find mime type for image'))\n      return\n    }\n    resolve(dataURLtoFile(base64Data as FIXME, filename || `${uuid()}.${ext}`))\n  })\n}\n\nfunction dataURLtoFile(dataurl: string, filename: string) {\n  const arr = dataurl.split(',')\n  const mime = arr[0].match(/:(.*?);/)?.[1]\n  const bstr = atob(arr[1])\n  let n = bstr.length\n  const u8arr = new Uint8Array(n)\n  while (n--) {\n    u8arr[n] = bstr.charCodeAt(n)\n  }\n  return new File([u8arr], filename, {type: mime})\n}\n","import {type AssetFromSource, type FileSchemaType} from '@sanity/types'\n\nimport {type FIXME} from '../../../../FIXME'\nimport {type FormPatch, type PatchEvent, set, setIfMissing, unset} from '../../../patch'\nimport {\n  type Uploader,\n  type UploaderResolver,\n  type UploadOptions,\n} from '../../../studio/uploads/types'\nimport {base64ToFile, urlToFile} from '../ImageInput/utils/image'\n\n// We alias DOM File type here to distinguish it from the type of the File value\ntype DOMFile = globalThis.File\n\ninterface Props {\n  assetFromSource: AssetFromSource[]\n  onChange: (patch: FormPatch | FormPatch[] | PatchEvent) => void\n  type: FileSchemaType\n  resolveUploader: UploaderResolver\n  uploadWith: (uploader: Uploader, file: DOMFile, assetDocumentProps?: UploadOptions) => void\n  isImage?: boolean\n}\n\nexport function handleSelectAssetFromSource({\n  assetFromSource,\n  onChange,\n  type,\n  resolveUploader,\n  uploadWith,\n  isImage,\n}: Props): void {\n  // const {onChange, type, resolveUploader} = this.props\n  if (!assetFromSource) {\n    throw new Error('No asset given')\n  }\n  if (!Array.isArray(assetFromSource) || assetFromSource.length === 0) {\n    throw new Error('Returned value must be an array with at least one item (asset)')\n  }\n  const firstAsset = assetFromSource[0]\n  const assetProps = firstAsset.assetDocumentProps\n  const mediaLibraryProps = firstAsset.mediaLibraryProps\n  const originalFilename = assetProps?.originalFilename\n  const label = assetProps?.label\n  const title = assetProps?.title\n  const description = assetProps?.description\n  const creditLine = assetProps?.creditLine\n  const source = assetProps?.source\n  const assetPatches: FormPatch[] = isImage\n    ? [unset(['hotspot']), unset(['crop']), unset(['media'])]\n    : [unset(['media'])]\n\n  // If the asset is from an media library, we need to set the media reference,\n  // so that the Media Library can backtrack the usage of that asset.\n  if (mediaLibraryProps) {\n    const assetContainerRef = {\n      _type: 'globalDocumentReference',\n      _ref: `media-library:${mediaLibraryProps.mediaLibraryId}:${mediaLibraryProps.assetId}`,\n      _weak: true,\n    }\n    assetPatches.push(set(assetContainerRef, ['media']))\n  }\n\n  switch (firstAsset.kind) {\n    case 'assetDocumentId':\n      onChange([\n        setIfMissing({\n          _type: type.name,\n        }),\n        ...assetPatches,\n        set(\n          {\n            _type: 'reference',\n            _ref: firstAsset.value,\n          },\n\n          ['asset'],\n        ),\n      ])\n\n      break\n    case 'file': {\n      const uploader = resolveUploader(type, firstAsset.value as FIXME)\n      if (uploader) {\n        uploadWith(uploader, firstAsset.value as FIXME, {\n          label,\n          title,\n          description,\n          creditLine,\n          source,\n        })\n      }\n      break\n    }\n    case 'base64':\n      base64ToFile(firstAsset.value as FIXME, originalFilename).then((file) => {\n        const uploader = resolveUploader(type, file)\n        if (uploader) {\n          uploadWith(uploader, file, {label, title, description, creditLine, source})\n        }\n      })\n      break\n    case 'url':\n      urlToFile(firstAsset.value as FIXME, originalFilename).then((file) => {\n        const uploader = resolveUploader(type, file)\n        if (uploader) {\n          uploadWith(uploader, file, {label, title, description, creditLine, source})\n        }\n      })\n      break\n    default: {\n      throw new Error('Invalid value returned from asset source plugin')\n    }\n  }\n}\n","import {AccessDeniedIcon, BinaryDocumentIcon, ImageIcon, ReadOnlyIcon} from '@sanity/icons'\nimport {Flex, Text} from '@sanity/ui'\nimport {useMemo} from 'react'\nimport {styled} from 'styled-components'\n\nimport {useTranslation} from '../../../../i18n'\nimport {type FileLike} from '../../../studio/uploads/types'\n\ninterface Props {\n  readOnly?: boolean\n  hoveringFiles: FileLike[]\n  type: string\n  acceptedFiles: FileLike[]\n  rejectedFilesCount: number\n  directUploads?: boolean\n}\n\nconst RootFlex = styled(Flex)`\n  pointer-events: none;\n`\n\nexport function PlaceholderText(props: Props) {\n  const {hoveringFiles, type, readOnly, acceptedFiles, rejectedFilesCount, directUploads} = props\n  const isFileType = type === 'file'\n\n  const {t} = useTranslation()\n\n  const messageIcon = useMemo(() => {\n    if (readOnly) {\n      return <ReadOnlyIcon />\n    }\n\n    if ((hoveringFiles && rejectedFilesCount > 0) || !directUploads) {\n      return <AccessDeniedIcon />\n    }\n\n    return isFileType ? <BinaryDocumentIcon /> : <ImageIcon />\n  }, [directUploads, hoveringFiles, isFileType, readOnly, rejectedFilesCount])\n\n  const messageText = useMemo(() => {\n    if (!directUploads) {\n      return t('inputs.files.common.placeholder.upload-not-supported')\n    }\n\n    if (readOnly) {\n      return t('inputs.files.common.placeholder.read-only')\n    }\n\n    if (hoveringFiles && directUploads && !readOnly) {\n      if (acceptedFiles.length > 0) {\n        return t('inputs.files.common.placeholder.drop-to-upload', {context: type})\n      }\n      if (rejectedFilesCount > 0) {\n        return t('inputs.files.common.placeholder.cannot-upload-some-files', {\n          count: rejectedFilesCount,\n        })\n      }\n    }\n\n    return t('inputs.files.common.placeholder.drag-or-paste-to-upload', {context: type})\n  }, [acceptedFiles.length, directUploads, hoveringFiles, readOnly, rejectedFilesCount, t, type])\n\n  return (\n    <RootFlex align=\"center\" gap={3} justify=\"center\" paddingLeft={1}>\n      <Text muted size={1}>\n        {messageIcon}\n      </Text>\n\n      <Text size={1} muted>\n        {messageText}\n      </Text>\n    </RootFlex>\n  )\n}\n","/* eslint-disable import/named */\n\nimport {Card} from '@sanity/ui'\n\nimport {withFocusRing} from '../../../components/withFocusRing'\nimport {fileTarget} from '../../common/fileTarget'\n\nexport type {FileInfo} from '../../common/fileTarget'\n\n// Note: FileTarget needs its own focusRing because we need show it on click, not only when :focus-visible\nexport const FileTarget = withFocusRing(fileTarget(Card))\n","import {type Theme} from '@sanity/ui'\nimport {css, styled} from 'styled-components'\n\nimport {Button} from '../../../../../../ui-components'\nimport {focusRingStyle} from '../../../../components/withFocusRing/helpers'\n\nexport const FileButton = styled(Button).attrs({forwardedAs: 'label'})(\n  ({theme}: {theme: Theme}) => {\n    const {focusRing} = theme.sanity\n    const base = theme.sanity.color.base\n    const border = {width: 1, color: 'var(--card-border-color)'}\n\n    return css`\n      &:not([data-disabled='true']) {\n        &:focus-within {\n          box-shadow: ${focusRingStyle({base, border, focusRing})};\n        }\n      }\n\n      // The underlying file input is rendered as children within a Sanity UI <Button> component.\n      // The below visibly hides it by targeting the input's parent <span> element, which is\n      // added by the <Button> component.\n      // TODO: refactor, avoid nth-child selector usage\n      & > span:nth-child(2) {\n        overflow: hidden;\n        overflow: clip;\n        top: 0;\n        left: 0;\n        width: 100%;\n        height: 100%;\n        position: absolute;\n        min-width: 0;\n        display: block;\n        appearance: none;\n        padding: 0;\n        margin: 0;\n        border: 0;\n        opacity: 0;\n      }\n    `\n  },\n)\n","import {\n  type ChangeEvent,\n  type ForwardedRef,\n  forwardRef,\n  type HTMLProps,\n  useCallback,\n  useId,\n} from 'react'\n\nimport {type ButtonProps} from '../../../../../../ui-components'\nimport {FileButton} from './styles'\n\nexport type FileInputButtonProps = ButtonProps & {\n  accept?: string\n  capture?: 'user' | 'environment'\n  multiple?: boolean\n  onSelect?: (files: File[]) => void\n  disabled?: boolean\n}\n\nexport const FileInputButton = forwardRef(function FileInputButton(\n  props: FileInputButtonProps &\n    Omit<HTMLProps<HTMLButtonElement>, 'as' | 'ref' | 'type' | 'value' | 'onSelect'>,\n  forwardedRef: ForwardedRef<HTMLInputElement>,\n) {\n  const {icon, id: idProp, accept, capture, multiple, onSelect, text, disabled, ...rest} = props\n  const id = `${idProp || ''}-${useId()}`\n\n  const handleChange = useCallback(\n    (event: ChangeEvent<HTMLInputElement>) => {\n      if (onSelect && event.target.files) {\n        onSelect(Array.from(event.target.files))\n      }\n    },\n    [onSelect],\n  )\n\n  return (\n    <FileButton {...rest} icon={icon} text={text} htmlFor={id} disabled={disabled}>\n      {/* Visibly hidden input */}\n      <input\n        data-testid=\"file-button-input\"\n        accept={accept}\n        capture={capture}\n        id={id}\n        multiple={multiple}\n        onChange={handleChange}\n        ref={forwardedRef}\n        type=\"file\"\n        value=\"\"\n        disabled={disabled}\n      />\n    </FileButton>\n  )\n})\n","import {UploadIcon} from '@sanity/icons'\nimport {Flex, useElementSize} from '@sanity/ui'\nimport {memo, type ReactNode, useState} from 'react'\n\nimport {useTranslation} from '../../../../i18n'\nimport {type FileLike} from '../../../studio/uploads/types'\nimport {FileInputButton} from './FileInputButton/FileInputButton'\nimport {PlaceholderText} from './PlaceholderText'\n\ninterface UploadPlaceholderProps {\n  accept: string\n  acceptedFiles: FileLike[]\n  browse?: ReactNode\n  directUploads?: boolean\n  hoveringFiles: FileLike[]\n  onUpload?: (files: File[]) => void\n  readOnly?: boolean\n  rejectedFilesCount: number\n  type: string\n}\n\nfunction UploadPlaceholderComponent(props: UploadPlaceholderProps) {\n  const {\n    accept,\n    acceptedFiles,\n    browse,\n    directUploads,\n    hoveringFiles,\n    onUpload,\n    readOnly,\n    rejectedFilesCount,\n    type,\n  } = props\n\n  const [rootElement, setRootElement] = useState<HTMLDivElement | null>(null)\n  const rect = useElementSize(rootElement)\n\n  // Adjust the layout in narrow containers\n  const collapsed = rect?.border && rect.border.width < 440\n  const {t} = useTranslation()\n\n  return (\n    <Flex\n      align={collapsed ? undefined : 'center'}\n      direction={collapsed ? 'column' : 'row'}\n      gap={4}\n      justify=\"space-between\"\n      paddingY={collapsed ? 1 : undefined}\n      ref={setRootElement}\n    >\n      <Flex flex={1}>\n        <PlaceholderText\n          acceptedFiles={acceptedFiles}\n          directUploads={directUploads}\n          hoveringFiles={hoveringFiles}\n          readOnly={readOnly}\n          rejectedFilesCount={rejectedFilesCount}\n          type={type}\n        />\n      </Flex>\n\n      <Flex align=\"center\" gap={1} justify=\"center\" wrap=\"wrap\">\n        <FileInputButton\n          accept={accept}\n          data-testid=\"file-input-upload-button\"\n          disabled={readOnly || !directUploads}\n          icon={UploadIcon}\n          mode=\"bleed\"\n          onSelect={onUpload}\n          text={t('input.files.common.upload-placeholder.file-input-button.text')}\n        />\n\n        {browse}\n      </Flex>\n    </Flex>\n  )\n}\n\nexport const UploadPlaceholder = memo(UploadPlaceholderComponent)\n","/**\n * How long, in milliseconds, an upload has to be inactive for in order to consider it stale.\n * E.g. if it's more than this amount of milliseconds since last time upload state was reported,\n * the upload will be marked as stale/interrupted.\n */\nexport const STALE_UPLOAD_MS = 1000 * 60 * 2\n","import {Card, Flex} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const RatioBox = styled(Card)`\n  position: relative;\n  width: 100%;\n  min-height: 3.75rem;\n  max-height: min(calc(var(--image-height) * 1px), 30vh);\n  aspect-ratio: var(--image-width) / var(--image-height);\n\n  & img {\n    display: block;\n    width: 100%;\n    height: 100%;\n    object-fit: scale-down;\n    object-position: center;\n  }\n`\n\nexport const Overlay = styled(Card)`\n  display: flex;\n  justify-content: flex-end;\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  backdrop-filter: blur(10px);\n  background-color: color-mix(in srgb, transparent, var(--card-bg-color) 80%);\n`\n\nexport const FlexOverlay = styled(Flex)`\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n`\n","import {Code, Flex, Stack} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {RatioBox} from '../ImageInput/ImagePreview.styled'\n\nexport const CardWrapper = styled(RatioBox)`\n  box-sizing: border-box;\n`\n\nexport const FlexWrapper = styled(Flex)`\n  box-sizing: border-box;\n  text-overflow: ellipsis;\n  overflow: hidden;\n  overflow: clip;\n`\n\nexport const LeftSection = styled(Stack)`\n  position: relative;\n  width: 60%;\n`\n\nexport const CodeWrapper = styled(Code)`\n  position: relative;\n  width: 100%;\n\n  code {\n    overflow: hidden;\n    overflow: clip;\n    text-overflow: ellipsis;\n    position: relative;\n    max-width: 200px;\n  }\n`\n","import {type UploadState} from '@sanity/types'\nimport {Card, Flex, Inline, Text} from '@sanity/ui'\nimport {useEffect} from 'react'\n\nimport {Button} from '../../../../../ui-components'\nimport {LinearProgress} from '../../../../components'\nimport {Translate, useTranslation} from '../../../../i18n'\nimport {STALE_UPLOAD_MS} from '../constants'\nimport {CardWrapper, CodeWrapper, FlexWrapper, LeftSection} from './UploadProgress.styled'\n\ntype Props = {\n  uploadState: UploadState\n  onCancel?: () => void\n  onStale?: () => void\n}\nconst elapsedMs = (date: string): number => new Date().getTime() - new Date(date).getTime()\n\nexport function UploadProgress({uploadState, onCancel, onStale}: Props) {\n  const filename = uploadState.file.name\n\n  useEffect(() => {\n    if (elapsedMs(uploadState.updatedAt) > STALE_UPLOAD_MS) {\n      onStale?.()\n    }\n  }, [uploadState.updatedAt, onStale])\n\n  const {t} = useTranslation()\n  return (\n    <CardWrapper tone=\"primary\" border>\n      <FlexWrapper\n        padding={4}\n        align=\"center\"\n        justify=\"space-between\"\n        height=\"fill\"\n        direction=\"row\"\n        gap={2}\n      >\n        <LeftSection>\n          <Flex justify=\"center\" gap={[3, 3, 2, 2]} direction={['column', 'column', 'row']}>\n            <Text size={1}>\n              <Inline space={2}>\n                <Translate\n                  t={t}\n                  i18nKey=\"input.files.common.upload-progress\"\n                  components={{\n                    FileName: () => <CodeWrapper size={1}>{filename ? filename : '…'}</CodeWrapper>,\n                  }}\n                />\n              </Inline>\n            </Text>\n          </Flex>\n\n          <Card border marginTop={3} radius={5}>\n            <LinearProgress value={uploadState.progress} />\n          </Card>\n        </LeftSection>\n\n        {onCancel ? (\n          <Button\n            mode=\"ghost\"\n            onClick={onCancel}\n            text={t('input.files.common.cancel-upload')}\n            tone=\"critical\"\n          />\n        ) : null}\n      </FlexWrapper>\n    </CardWrapper>\n  )\n}\n","import {ResetIcon, WarningOutlineIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Stack, Text} from '@sanity/ui'\n\nimport {Button} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n'\nimport {STALE_UPLOAD_MS} from '../constants'\n\ntype Props = {\n  onClearStale?: () => void\n}\n\nexport function UploadWarning({onClearStale}: Props) {\n  const {t} = useTranslation()\n\n  return (\n    <Card tone=\"caution\" padding={4} border radius={2}>\n      <Flex gap={4} marginBottom={4}>\n        <Box>\n          <Text size={1}>\n            <WarningOutlineIcon />\n          </Text>\n        </Box>\n        <Stack space={3}>\n          <Text size={1} weight=\"medium\">\n            {t('inputs.files.common.stale-upload-warning.title')}\n          </Text>\n          <Text size={1}>\n            {t('inputs.files.common.stale-upload-warning.description', {\n              staleThresholdMinutes: Math.ceil(STALE_UPLOAD_MS / 1000 / 60),\n            })}\n          </Text>\n        </Stack>\n      </Flex>\n      <Button\n        icon={ResetIcon}\n        mode=\"ghost\"\n        onClick={onClearStale}\n        text={t('inputs.files.common.stale-upload-warning.clear')}\n        width=\"fill\"\n      />\n    </Card>\n  )\n}\n","/* method which returns a file size in a readable format */\nexport function formatBytes(bytes: number, decimals = 2) {\n  if (bytes === 0) return '0 Bytes'\n\n  const k = 1024\n  const dm = decimals < 0 ? 0 : decimals\n  const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\n\n  const i = Math.floor(Math.log(bytes) / Math.log(k))\n\n  return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`\n}\n","import {BinaryDocumentIcon} from '@sanity/icons'\nimport {\n  Box,\n  Card,\n  Flex,\n  Menu,\n  Stack,\n  Text,\n  useClickOutsideEvent,\n  useGlobalKeyDown,\n} from '@sanity/ui'\nimport {type ReactNode, useCallback, useEffect, useState} from 'react'\n\nimport {Popover} from '../../../../../ui-components'\nimport {ContextMenuButton} from '../../../../components/contextMenuButton'\nimport {useTranslation} from '../../../../i18n'\nimport {formatBytes} from '../../common/helper'\n\ntype Props = {\n  children: ReactNode\n  size: number\n  originalFilename: string\n  onClick?: () => void\n  muted?: boolean\n  disabled?: boolean\n  isMenuOpen: boolean\n  onMenuOpen: (flag: boolean) => void\n  setMenuButtonElement: (element: HTMLButtonElement | null) => void\n}\n\nexport function FileActionsMenu(props: Props) {\n  const {\n    originalFilename,\n    size,\n    children,\n    muted,\n    disabled,\n    onClick,\n    isMenuOpen,\n    onMenuOpen,\n    setMenuButtonElement,\n  } = props\n  const [menuElement, setMenuElement] = useState<HTMLDivElement | null>(null)\n  const [buttonElement, setButtonElement] = useState<HTMLButtonElement | null>(null)\n\n  const handleClick = useCallback(() => onMenuOpen(true), [onMenuOpen])\n\n  useGlobalKeyDown(\n    useCallback(\n      (event) => {\n        if (isMenuOpen && (event.key === 'Escape' || event.key === 'Tab')) {\n          onMenuOpen(false)\n          buttonElement?.focus()\n        }\n      },\n      [isMenuOpen, onMenuOpen, buttonElement],\n    ),\n  )\n\n  // Close menu when clicking outside of it\n  // Not when clicking on the button\n  useClickOutsideEvent(\n    (event) => {\n      if (!buttonElement?.contains(event.target as Node)) {\n        onMenuOpen(false)\n      }\n    },\n    () => [menuElement],\n  )\n\n  const setOptionsButtonRef = useCallback(\n    (el: HTMLButtonElement | null) => {\n      // Pass the button element to the parent component so that it can focus it when e.g. closing dialogs\n      setMenuButtonElement(el)\n\n      // Set focus back on the button when closing the menu\n      setButtonElement(el)\n    },\n    [setMenuButtonElement],\n  )\n\n  // When the popover is open, focus the menu to enable keyboard navigation\n  useEffect(() => {\n    if (isMenuOpen) {\n      menuElement?.focus()\n    }\n  }, [isMenuOpen, menuElement])\n\n  const {t} = useTranslation()\n\n  return (\n    <Flex wrap=\"nowrap\" justify=\"space-between\" align=\"center\">\n      <Card\n        as={muted || disabled ? undefined : 'button'}\n        radius={2}\n        padding={2}\n        tone=\"inherit\"\n        onClick={onClick}\n        flex={1}\n      >\n        {/* todo: consider replacing with <SanityDefaultPreview> */}\n        <Flex wrap=\"nowrap\" align=\"center\">\n          <Card padding={3} tone=\"transparent\" shadow={1} radius={1}>\n            <Text muted={muted}>\n              <BinaryDocumentIcon />\n            </Text>\n          </Card>\n          <Stack flex={1} space={2} marginLeft={3}>\n            <Text\n              size={1}\n              textOverflow=\"ellipsis\"\n              muted={muted}\n              data-testid=\"file-name\"\n              weight=\"medium\"\n            >\n              {originalFilename}\n            </Text>\n            <Text size={1} muted data-testid=\"file-size\">\n              {formatBytes(size)}\n            </Text>\n          </Stack>\n        </Flex>\n      </Card>\n\n      <Box padding={2}>\n        <Flex justify=\"center\">\n          {/* Using a customized Popover instead of MenuButton because a MenuButton will close on click\n     and break replacing an uploaded file. */}\n          <Popover\n            content={<Menu ref={setMenuElement}>{children}</Menu>}\n            id=\"file-actions-menu\"\n            portal\n            open={isMenuOpen}\n            constrainSize\n          >\n            <ContextMenuButton\n              aria-label={t('inputs.file.actions-menu.file-options.aria-label')}\n              data-testid=\"options-menu-button\"\n              onClick={handleClick}\n              ref={setOptionsButtonRef}\n            />\n          </Popover>\n        </Flex>\n      </Box>\n    </Flex>\n  )\n}\n","import {Flex, Skeleton, Stack, TextSkeleton} from '@sanity/ui'\n\nexport function FileSkeleton() {\n  return (\n    <Flex align=\"center\" justify=\"flex-start\" padding={2}>\n      <Skeleton padding={3} radius={1} animated />\n      <Stack flex={1} space={2} marginLeft={3}>\n        <TextSkeleton style={{width: '100%'}} radius={1} animated />\n        <TextSkeleton style={{width: '100%'}} radius={1} animated />\n      </Stack>\n    </Flex>\n  )\n}\n","import {ResetIcon, WarningOutlineIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Stack, Text} from '@sanity/ui'\n\nimport {Button} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n'\n\ntype Props = {\n  onClearValue?: () => void\n}\n\nexport function InvalidFileWarning({onClearValue}: Props) {\n  const {t} = useTranslation()\n  return (\n    <Card tone=\"caution\" padding={4} border radius={2}>\n      <Flex gap={4} marginBottom={4}>\n        <Box>\n          <Text size={1}>\n            <WarningOutlineIcon />\n          </Text>\n        </Box>\n        <Stack space={3}>\n          <Text size={1} weight=\"medium\">\n            {t('inputs.file.invalid-file-warning.title')}\n          </Text>\n          <Text size={1}>{t('inputs.file.invalid-file-warning.description')}</Text>\n        </Stack>\n      </Flex>\n      <Button\n        icon={ResetIcon}\n        mode=\"ghost\"\n        onClick={onClearValue}\n        text={t('inputs.file.invalid-file-warning.reset-button.text')}\n        width=\"fill\"\n      />\n    </Card>\n  )\n}\n","import {Card, Flex} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const CardOverlay = styled(Card)`\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n`\n\nexport const FlexContainer = styled(Flex)`\n  height: 100%;\n`\n","/* eslint-disable import/no-unresolved,react/jsx-handler-names, react/display-name, react/no-this-in-sfc */\n\nimport {isFileSource} from '@sanity/asset-utils'\nimport {type SanityClient} from '@sanity/client'\nimport {ChevronDownIcon, ImageIcon, SearchIcon} from '@sanity/icons'\nimport {\n  type AssetFromSource,\n  type AssetSource,\n  type File as BaseFile,\n  type FileAsset,\n  type FileSchemaType,\n  type Path,\n  type UploadState,\n} from '@sanity/types'\nimport {Box, Card, Menu, type ThemeColorToneKey, type ToastParams} from '@sanity/ui'\nimport {get, startCase} from 'lodash'\nimport {PureComponent, type ReactNode} from 'react'\nimport {type Observable, type Subscription} from 'rxjs'\n\nimport {Button, MenuButton, MenuItem} from '../../../../../ui-components'\nimport {ChangeIndicator} from '../../../../changeIndicators'\nimport {ImperativeToast} from '../../../../components'\nimport {MemberField, MemberFieldError, MemberFieldSet} from '../../../members'\nimport {PatchEvent, setIfMissing, unset} from '../../../patch'\nimport {\n  type Uploader,\n  type UploaderResolver,\n  type UploadOptions,\n} from '../../../studio/uploads/types'\nimport {type InputProps, type ObjectInputProps} from '../../../types'\nimport {WithReferencedAsset} from '../../../utils/WithReferencedAsset'\nimport {ActionsMenu} from '../common/ActionsMenu'\nimport {handleSelectAssetFromSource} from '../common/assetSource'\nimport {PlaceholderText} from '../common/PlaceholderText'\nimport {type FileInfo, FileTarget} from '../common/styles'\nimport {UploadPlaceholder} from '../common/UploadPlaceholder'\nimport {UploadProgress} from '../common/UploadProgress'\nimport {UploadWarning} from '../common/UploadWarning'\nimport {FileActionsMenu} from './FileActionsMenu'\nimport {FileSkeleton} from './FileSkeleton'\nimport {InvalidFileWarning} from './InvalidFileWarning'\nimport {CardOverlay, FlexContainer} from './styles'\n\n/**\n * @hidden\n * @beta */\nexport interface BaseFileInputValue extends Partial<BaseFile> {\n  _upload?: UploadState\n}\n\nfunction passThrough({children}: {children?: React.ReactNode}) {\n  return children\n}\n\n/**\n * @hidden\n * @beta */\nexport interface BaseFileInputProps extends ObjectInputProps<BaseFileInputValue, FileSchemaType> {\n  assetSources: AssetSource[]\n  directUploads?: boolean\n  observeAsset: (documentId: string) => Observable<FileAsset>\n  resolveUploader: UploaderResolver\n  client: SanityClient\n  t: (key: string, values?: Record<string, string>) => string\n}\n\n/** @internal */\nexport interface BaseFileInputState {\n  isUploading: boolean\n  selectedAssetSource: AssetSource | null\n  hoveringFiles: FileInfo[]\n  isStale: boolean\n  isMenuOpen: boolean\n}\n\nconst ASSET_FIELD_PATH = ['asset']\n\n/** @internal */\nexport class BaseFileInput extends PureComponent<BaseFileInputProps, BaseFileInputState> {\n  _assetFieldPath: Path\n  uploadSubscription: Subscription | null = null\n  browseButtonElement: HTMLButtonElement | null = null\n\n  state: BaseFileInputState = {\n    isUploading: false,\n    selectedAssetSource: null,\n    hoveringFiles: [],\n    isStale: false,\n    isMenuOpen: false,\n  }\n\n  constructor(props: BaseFileInputProps) {\n    super(props)\n    this._assetFieldPath = props.path.concat(ASSET_FIELD_PATH)\n  }\n\n  toast: {push: (params: ToastParams) => void} | null = null\n\n  handleRemoveButtonClick = () => {\n    const {path, value} = this.props\n    const parentPathSegment = path.slice(-1)[0]\n\n    // String path segment mean an object path, while a number or a\n    // keyed segment means we're a direct child of an array\n    const isArrayElement = typeof parentPathSegment !== 'string'\n\n    // When removing the file, _type and _key are \"meta\"-properties and\n    // are not significant unless other properties are present. Thus, we\n    // want to remove the entire \"container\" object if these are the only\n    // properties present, BUT only if we're not an array element, as\n    // removing the array element will close the selection dialog. Instead,\n    // when closing the dialog, the array logic will check for an \"empty\"\n    // value and remove it for us\n    const allKeys = Object.keys(value || {})\n    const remainingKeys = allKeys.filter(\n      (key) => !['_type', '_key', '_upload', 'asset', 'media'].includes(key),\n    )\n\n    const isEmpty = remainingKeys.length === 0\n    const removeKeys = ['asset', 'media']\n      .concat(allKeys.filter((key) => ['_upload'].includes(key)))\n      .map((key) => unset([key]))\n\n    this.props.onChange(PatchEvent.from(isEmpty && !isArrayElement ? unset() : removeKeys))\n  }\n\n  clearUploadStatus() {\n    // todo: this is kind of hackish\n    if (this.props.value?._upload) {\n      this.props.onChange(PatchEvent.from([unset(['_upload'])]))\n    }\n  }\n\n  cancelUpload() {\n    if (this.uploadSubscription) {\n      this.uploadSubscription.unsubscribe()\n      this.clearUploadStatus()\n    }\n  }\n\n  handleCancelUpload = () => {\n    this.cancelUpload()\n  }\n\n  handleClearUploadState = () => {\n    this.setState({isStale: false})\n    this.clearUploadStatus()\n  }\n\n  handleStaleUpload = () => {\n    this.setState({isStale: true})\n  }\n\n  handleClearField = () => {\n    this.props.onChange([unset(['asset']), unset(['media'])])\n  }\n\n  handleSelectFiles = (files: globalThis.File[]) => {\n    const {directUploads, readOnly} = this.props\n    const {hoveringFiles} = this.state\n    if (directUploads && !readOnly) {\n      this.uploadFirstAccepted(files)\n    } else if (hoveringFiles.length > 0) {\n      this.handleFilesOut()\n    }\n  }\n\n  handleSelectFileFromAssetSource = (source: AssetSource) => {\n    this.setState({selectedAssetSource: source})\n  }\n\n  handleAssetSourceClosed = () => {\n    this.setState({selectedAssetSource: null})\n\n    // Restore focus to browse button when closing the dialog\n    this.browseButtonElement?.focus()\n  }\n\n  setBrowseButtonElement = (el: HTMLButtonElement | null) => {\n    this.browseButtonElement = el\n  }\n\n  uploadFirstAccepted(files: globalThis.File[]) {\n    const {schemaType} = this.props\n\n    const match = files\n      .map((file) => ({file, uploader: this.props.resolveUploader?.(schemaType, file)}))\n      .find((result) => result.uploader)\n\n    if (match) {\n      this.uploadWith(match.uploader!, match.file)\n    }\n\n    this.setState({isMenuOpen: false})\n  }\n\n  uploadWith = (\n    uploader: Uploader,\n    file: globalThis.File,\n    assetDocumentProps: UploadOptions = {},\n  ) => {\n    const {schemaType, onChange, client, t} = this.props\n    const {source} = assetDocumentProps\n    const options = {\n      metadata: get(schemaType, 'options.metadata'),\n      storeOriginalFilename: get(schemaType, 'options.storeOriginalFilename'),\n      source,\n    }\n    this.cancelUpload()\n    this.setState({isUploading: true})\n    onChange(PatchEvent.from([setIfMissing({_type: schemaType.name})]))\n    this.uploadSubscription = uploader.upload(client, file, schemaType, options).subscribe({\n      next: (uploadEvent) => {\n        if (uploadEvent.patches) {\n          onChange(PatchEvent.from(uploadEvent.patches))\n        }\n      },\n      error: (err) => {\n        // eslint-disable-next-line no-console\n        console.error(err)\n        this.toast?.push({\n          status: 'error',\n          description: t('inputs.file.upload-failed.description'),\n          title: t('inputs.file.upload-failed.title'),\n        })\n        this.clearUploadStatus()\n      },\n      complete: () => {\n        this.setState({isUploading: false})\n      },\n    })\n  }\n\n  renderUploadState(uploadState: UploadState) {\n    const {isUploading} = this.state\n\n    return (\n      <UploadProgress\n        uploadState={uploadState}\n        onCancel={isUploading ? this.handleCancelUpload : undefined}\n        onStale={this.handleStaleUpload}\n      />\n    )\n  }\n\n  renderAssetSource() {\n    const {selectedAssetSource} = this.state\n    const {value, schemaType, observeAsset, t} = this.props\n    if (!selectedAssetSource) {\n      return null\n    }\n    const accept = get(schemaType, 'options.accept', '')\n\n    const Component = selectedAssetSource.component\n    if (value && value.asset) {\n      return (\n        <WithReferencedAsset\n          observeAsset={observeAsset}\n          reference={value.asset}\n          waitPlaceholder={<FileSkeleton />}\n        >\n          {(fileAsset) => (\n            <Component\n              selectedAssets={[fileAsset]}\n              selectionType=\"single\"\n              assetType=\"file\"\n              accept={accept}\n              dialogHeaderTitle={t('inputs.file.dialog.title')}\n              onClose={this.handleAssetSourceClosed}\n              onSelect={this.handleSelectAssetFromSource}\n            />\n          )}\n        </WithReferencedAsset>\n      )\n    }\n    return (\n      <Component\n        selectedAssets={[]}\n        selectionType=\"single\"\n        assetType=\"file\"\n        accept={accept}\n        dialogHeaderTitle={t('inputs.file.dialog.title')}\n        onClose={this.handleAssetSourceClosed}\n        onSelect={this.handleSelectAssetFromSource}\n      />\n    )\n  }\n\n  handleSelectAssetFromSource = (assetFromSource: AssetFromSource[]) => {\n    const {onChange, schemaType, resolveUploader} = this.props\n    handleSelectAssetFromSource({\n      assetFromSource,\n      onChange,\n      type: schemaType,\n      resolveUploader,\n      uploadWith: this.uploadWith,\n    })\n    this.setState({selectedAssetSource: null})\n  }\n\n  handleFileTargetFocus = (event: React.FocusEvent) => {\n    // We want to handle focus when the file target element *itself* receives\n    // focus, not when an interactive child element receives focus. Since React has decided\n    // to let focus bubble, so this workaround is needed\n    // Background: https://github.com/facebook/react/issues/6410#issuecomment-671915381\n    if (\n      event.currentTarget === event.target &&\n      event.currentTarget === this.props.elementProps.ref?.current\n    ) {\n      this.props.elementProps.onFocus(event)\n    }\n  }\n\n  handleFilesOver = (fileInfo: FileInfo[]) => {\n    this.setState({\n      hoveringFiles: fileInfo,\n    })\n  }\n  handleFilesOut = () => {\n    this.setState({\n      hoveringFiles: [],\n    })\n  }\n\n  renderAsset() {\n    const {value, changed, readOnly, elementProps} = this.props\n    const {hoveringFiles, isStale} = this.state\n    const hasValueOrUpload = Boolean(value?._upload || value?.asset)\n\n    if (value && typeof value.asset !== 'undefined' && !value?._upload && !isFileSource(value)) {\n      return () => <InvalidFileWarning onClearValue={this.handleClearField} />\n    }\n\n    // todo: convert this to a functional component and use this with useCallback\n    //  it currently has to return a new function on every render in order to pick up state from this component\n    return (inputProps: Omit<InputProps, 'renderDefault'>) => (\n      <>\n        {isStale && (\n          <Box marginBottom={2}>\n            <UploadWarning onClearStale={this.handleClearUploadState} />\n          </Box>\n        )}\n        <ChangeIndicator\n          path={this._assetFieldPath}\n          hasFocus={!!inputProps.focused}\n          isChanged={changed}\n        >\n          {/* not uploading */}\n          {value?._upload ? (\n            this.renderUploadState(value._upload)\n          ) : (\n            <FileTarget\n              {...elementProps}\n              onFocus={this.handleFileTargetFocus}\n              tabIndex={0}\n              disabled={Boolean(readOnly)}\n              onFiles={this.handleSelectFiles}\n              onFilesOver={this.handleFilesOver}\n              onFilesOut={this.handleFilesOut}\n              tone={this.getFileTone()}\n              $border={hasValueOrUpload || hoveringFiles.length > 0}\n              style={{padding: 1}}\n              sizing=\"border\"\n              radius={2}\n            >\n              <div style={{position: 'relative'}}>\n                {!value?.asset && this.renderUploadPlaceholder()}\n                {value?.asset && hoveringFiles.length > 0\n                  ? this.renderAssetMenu(this.getFileTone())\n                  : null}\n                {!value?._upload && value?.asset && this.renderPreview()}\n              </div>\n            </FileTarget>\n          )}\n        </ChangeIndicator>\n      </>\n    )\n  }\n\n  renderPreview() {\n    const {value, readOnly, assetSources, schemaType, directUploads, observeAsset, t} = this.props\n    const {isMenuOpen} = this.state\n    const asset = value?.asset\n    if (!asset) {\n      return null\n    }\n\n    const accept = get(schemaType, 'options.accept', '')\n\n    let browseMenuItem: ReactNode =\n      assetSources && assetSources?.length === 0 ? null : (\n        <MenuItem\n          icon={SearchIcon}\n          text={t('inputs.file.browse-button.text')}\n          onClick={() => {\n            this.setState({isMenuOpen: false})\n            this.handleSelectFileFromAssetSource(assetSources[0])\n          }}\n          disabled={readOnly}\n          data-testid=\"file-input-browse-button\"\n        />\n      )\n\n    if (assetSources.length > 1) {\n      browseMenuItem = assetSources.map((assetSource) => {\n        return (\n          <MenuItem\n            key={assetSource.name}\n            text={\n              (assetSource.i18nKey ? t(assetSource.i18nKey) : assetSource.title) ||\n              startCase(assetSource.name)\n            }\n            onClick={() => {\n              this.setState({isMenuOpen: false})\n              this.handleSelectFileFromAssetSource(assetSource)\n            }}\n            icon={assetSource.icon || ImageIcon}\n            disabled={readOnly}\n            data-testid={`file-input-browse-button-${assetSource.name}`}\n          />\n        )\n      })\n    }\n\n    return (\n      <WithReferencedAsset\n        reference={asset}\n        observeAsset={observeAsset}\n        waitPlaceholder={<FileSkeleton />}\n      >\n        {({originalFilename, extension, url, size}) => {\n          const filename = originalFilename || `download.${extension}`\n          let copyUrl: string | undefined\n          let downloadUrl: string | undefined\n\n          if (isFileSource(value)) {\n            downloadUrl = `${url}?dl`\n            copyUrl = url\n          }\n\n          return (\n            <FileActionsMenu\n              size={size}\n              originalFilename={filename}\n              muted={!readOnly}\n              onMenuOpen={(isOpen) => this.setState({isMenuOpen: isOpen})}\n              isMenuOpen={isMenuOpen}\n              setMenuButtonElement={this.setBrowseButtonElement}\n            >\n              <ActionsMenu\n                onUpload={this.handleSelectFiles}\n                browse={browseMenuItem}\n                onReset={this.handleRemoveButtonClick}\n                downloadUrl={downloadUrl}\n                copyUrl={copyUrl}\n                readOnly={readOnly}\n                accept={accept}\n                directUploads={directUploads}\n              />\n            </FileActionsMenu>\n          )\n        }}\n      </WithReferencedAsset>\n    )\n  }\n\n  renderAssetMenu(tone: ThemeColorToneKey) {\n    const {schemaType, readOnly, directUploads, resolveUploader} = this.props\n    const {hoveringFiles} = this.state\n\n    const acceptedFiles = hoveringFiles.filter((file) => resolveUploader?.(schemaType, file))\n    const rejectedFilesCount = hoveringFiles.length - acceptedFiles.length\n\n    return (\n      <CardOverlay radius={2} tone={tone}>\n        <FlexContainer align=\"center\" justify=\"center\" gap={2} flex={1}>\n          <PlaceholderText\n            readOnly={readOnly}\n            hoveringFiles={hoveringFiles}\n            acceptedFiles={acceptedFiles}\n            rejectedFilesCount={rejectedFilesCount}\n            directUploads={directUploads}\n            type=\"file\"\n          />\n        </FlexContainer>\n      </CardOverlay>\n    )\n  }\n\n  renderBrowser() {\n    const {assetSources, readOnly, directUploads, id, t} = this.props\n\n    if (assetSources.length === 0) return null\n\n    if (assetSources.length > 1 && !readOnly && directUploads) {\n      return (\n        <MenuButton\n          id={`${id}_assetFileButton`}\n          ref={this.setBrowseButtonElement}\n          button={\n            <Button\n              mode=\"bleed\"\n              text={t('inputs.file.multi-browse-button.text')}\n              data-testid=\"file-input-multi-browse-button\"\n              icon={SearchIcon}\n              iconRight={ChevronDownIcon}\n            />\n          }\n          data-testid=\"input-select-button\"\n          menu={\n            <Menu>\n              {assetSources.map((assetSource) => {\n                return (\n                  <MenuItem\n                    key={assetSource.name}\n                    text={\n                      (assetSource.i18nKey ? t(assetSource.i18nKey) : assetSource.title) ||\n                      startCase(assetSource.name)\n                    }\n                    onClick={() => {\n                      this.setState({isMenuOpen: false})\n                      this.handleSelectFileFromAssetSource(assetSource)\n                    }}\n                    icon={assetSource.icon || ImageIcon}\n                    disabled={readOnly}\n                    data-testid={`file-input-browse-button-${assetSource.name}`}\n                  />\n                )\n              })}\n            </Menu>\n          }\n        />\n      )\n    }\n\n    return (\n      <Button\n        text={t('inputs.file.browse-button.text')}\n        icon={SearchIcon}\n        mode=\"bleed\"\n        onClick={() => {\n          this.setState({isMenuOpen: false})\n          this.handleSelectFileFromAssetSource(assetSources[0])\n        }}\n        data-testid=\"file-input-browse-button\"\n        disabled={readOnly}\n        ref={this.setBrowseButtonElement}\n      />\n    )\n  }\n\n  renderUploadPlaceholder() {\n    const {readOnly, schemaType, directUploads, resolveUploader} = this.props\n    const {hoveringFiles} = this.state\n\n    const acceptedFiles = hoveringFiles.filter((file) => resolveUploader?.(schemaType, file))\n    const rejectedFilesCount = hoveringFiles.length - acceptedFiles.length\n\n    const accept = get(schemaType, 'options.accept', '')\n\n    return (\n      <>\n        <Card\n          tone={readOnly ? 'transparent' : 'inherit'}\n          border\n          paddingX={3}\n          paddingY={2}\n          radius={2}\n          style={\n            hoveringFiles.length === 0\n              ? {borderStyle: 'dashed'}\n              : {borderStyle: 'dashed', borderColor: 'transparent'}\n          }\n        >\n          <UploadPlaceholder\n            browse={this.renderBrowser()}\n            onUpload={this.handleSelectFiles}\n            readOnly={readOnly}\n            hoveringFiles={hoveringFiles}\n            acceptedFiles={acceptedFiles}\n            rejectedFilesCount={rejectedFilesCount}\n            type=\"file\"\n            accept={accept}\n            directUploads={directUploads}\n          />\n        </Card>\n      </>\n    )\n  }\n\n  handleUpload = ({file, uploader}: {file: globalThis.File; uploader: Uploader}) => {\n    this.uploadWith(uploader, file)\n  }\n\n  setToast = (toast: {push: (params: ToastParams) => void}) => {\n    this.toast = toast\n  }\n  getFileTone() {\n    const {directUploads, schemaType, value, readOnly, resolveUploader} = this.props\n    const {hoveringFiles} = this.state\n\n    const acceptedFiles = hoveringFiles.filter((file) => resolveUploader?.(schemaType, file))\n    const rejectedFilesCount = hoveringFiles.length - acceptedFiles.length\n\n    if (hoveringFiles.length > 0) {\n      if (rejectedFilesCount > 0 || !directUploads) {\n        return 'critical'\n      }\n    }\n\n    if (!value?._upload && !readOnly && hoveringFiles.length > 0) {\n      return 'primary'\n    }\n    return value?._upload && value?.asset && readOnly ? 'transparent' : 'default'\n  }\n\n  render() {\n    const {\n      members,\n      renderAnnotation,\n      renderBlock,\n      renderInlineBlock,\n      renderItem,\n      renderInput,\n      renderField,\n      renderPreview,\n      t,\n    } = this.props\n    const {selectedAssetSource} = this.state\n\n    return (\n      <>\n        <ImperativeToast ref={this.setToast} />\n\n        {members.map((member) => {\n          if (member.kind === 'field' && (member.name === 'crop' || member.name === 'hotspot')) {\n            // we're rendering these separately\n            return null\n          }\n\n          if (member.kind === 'field') {\n            return (\n              <MemberField\n                key={member.key}\n                member={member}\n                renderAnnotation={renderAnnotation}\n                renderInlineBlock={renderInlineBlock}\n                renderBlock={renderBlock}\n                renderInput={member.name === 'asset' ? this.renderAsset() : renderInput}\n                renderField={member.name === 'asset' ? passThrough : renderField}\n                renderItem={renderItem}\n                renderPreview={renderPreview}\n              />\n            )\n          }\n          if (member.kind === 'fieldSet') {\n            return (\n              <MemberFieldSet\n                key={member.key}\n                member={member}\n                renderAnnotation={renderAnnotation}\n                renderBlock={renderBlock}\n                renderField={renderField}\n                renderInlineBlock={renderInlineBlock}\n                renderInput={renderInput}\n                renderItem={renderItem}\n                renderPreview={renderPreview}\n              />\n            )\n          }\n          if (member.kind === 'error') {\n            return <MemberFieldError key={member.key} member={member} />\n          }\n          //@ts-expect-error all possible cases should be covered\n          return <>{t('inputs.file.error.unknown-member-kind', {kind: member.kind})}</>\n        })}\n        {selectedAssetSource && this.renderAssetSource()}\n      </>\n    )\n  }\n}\n","import {type SchemaType} from '@sanity/types'\nimport {useCallback, useMemo} from 'react'\n\nimport {useClient} from '../../../hooks'\nimport {useTranslation} from '../../../i18n'\nimport {useDocumentPreviewStore} from '../../../store'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../../studioClient'\nimport {BaseFileInput, type BaseFileInputProps} from '../../inputs/files/FileInput'\nimport {useFormBuilder} from '../../useFormBuilder'\nimport {resolveUploader as defaultResolveUploader} from '../uploads/resolveUploader'\nimport {type FileLike} from '../uploads/types'\nimport {observeFileAsset} from './client-adapters/assets'\n\n/**\n * @hidden\n * @beta */\nexport type FileInputProps = Omit<\n  BaseFileInputProps,\n  'assetSources' | 'directUploads' | 'observeAsset' | 'resolveUploader' | 'client' | 't'\n>\n\n/**\n * @hidden\n * @beta */\nexport function StudioFileInput(props: FileInputProps) {\n  const sourcesFromSchema = props.schemaType.options?.sources\n  const documentPreviewStore = useDocumentPreviewStore()\n  const {file: fileConfig} = useFormBuilder().__internal\n  const client = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n  const {t} = useTranslation()\n\n  const resolveUploader = useCallback(\n    (type: SchemaType, file: FileLike) => {\n      if (!fileConfig.directUploads) {\n        return null\n      }\n      return defaultResolveUploader(type, file)\n    },\n    [fileConfig.directUploads],\n  )\n  // NOTE: type.options.sources may be an empty array and in that case we're\n  // disabling selecting images from asset source  (it's a feature, not a bug)\n  const assetSources = useMemo(\n    () => sourcesFromSchema || fileConfig.assetSources,\n    [fileConfig, sourcesFromSchema],\n  )\n\n  const observeAsset = useCallback(\n    (id: string) => observeFileAsset(documentPreviewStore, id),\n    [documentPreviewStore],\n  )\n\n  return (\n    <BaseFileInput\n      {...props}\n      t={t}\n      client={client}\n      assetSources={assetSources}\n      directUploads={fileConfig.directUploads}\n      observeAsset={observeAsset}\n      resolveUploader={resolveUploader}\n    />\n  )\n}\n","import {getImageDimensions, isImageSource, type SanityImageDimensions} from '@sanity/asset-utils'\nimport {type CSSProperties, useMemo} from 'react'\nimport {useDevicePixelRatio} from 'use-device-pixel-ratio'\n\nimport {type ImageUrlBuilder} from '../types'\nimport {type BaseImageInputValue} from './types'\n\nexport function usePreviewImageSource<Value extends BaseImageInputValue | undefined>({\n  value,\n  imageUrlBuilder,\n}: {\n  value: Value\n  imageUrlBuilder: ImageUrlBuilder\n}): {\n  url: Value extends undefined ? undefined : string\n  dimensions: SanityImageDimensions\n  customProperties: CSSProperties\n} {\n  const dpr = useDevicePixelRatio()\n\n  const url = useMemo(\n    () =>\n      value && isImageSource(value)\n        ? imageUrlBuilder.width(2000).fit('max').image(value).dpr(dpr).auto('format').url()\n        : undefined,\n    [dpr, imageUrlBuilder, value],\n  ) as Value extends undefined ? undefined : string\n\n  const dimensions = useMemo<SanityImageDimensions>(\n    () =>\n      url\n        ? getImageDimensions(url)\n        : {\n            width: 0,\n            height: 0,\n            aspectRatio: 0,\n          },\n    [url],\n  )\n\n  const customProperties = useMemo(\n    () =>\n      ({\n        '--image-width': dimensions.width,\n        '--image-height': dimensions.height,\n      }) as CSSProperties,\n    [dimensions.width, dimensions.height],\n  )\n\n  return {\n    url,\n    dimensions,\n    customProperties,\n  }\n}\n","import {type UploadState} from '@sanity/types'\nimport {Box, type CardTone} from '@sanity/ui'\nimport {type FocusEvent, memo, useMemo} from 'react'\n\nimport {ChangeIndicator} from '../../../../changeIndicators'\nimport {type InputProps} from '../../../types'\nimport {FileTarget} from '../common/styles'\nimport {UploadWarning} from '../common/UploadWarning'\nimport {type ImageUrlBuilder} from '../types'\nimport {type BaseImageInputProps, type BaseImageInputValue, type FileInfo} from './types'\nimport {usePreviewImageSource} from './usePreviewImageSource'\n\nconst ASSET_FIELD_PATH = ['asset'] as const\n\nfunction ImageInputAssetComponent(props: {\n  elementProps: BaseImageInputProps['elementProps']\n  handleClearUploadState: () => void\n  handleFilesOut: () => void\n  handleFilesOver: (hoveringFiles: FileInfo[]) => void\n  handleFileTargetFocus: (event: FocusEvent<Element, Element>) => void\n  handleSelectFiles: (files: File[]) => void\n  hoveringFiles: FileInfo[]\n  imageUrlBuilder: ImageUrlBuilder\n  inputProps: Omit<InputProps, 'renderDefault'>\n  isStale: boolean\n  readOnly: boolean | undefined\n  renderAssetMenu(): React.JSX.Element | null\n  renderPreview: () => React.JSX.Element\n  renderUploadPlaceholder(): React.JSX.Element\n  renderUploadState(uploadState: UploadState): React.JSX.Element\n  tone: CardTone\n  value: BaseImageInputValue | undefined\n}) {\n  const {\n    elementProps,\n    handleClearUploadState,\n    handleFilesOut,\n    handleFilesOver,\n    handleFileTargetFocus,\n    handleSelectFiles,\n    hoveringFiles,\n    inputProps,\n    isStale,\n    readOnly,\n    renderAssetMenu,\n    renderPreview,\n    renderUploadPlaceholder,\n    renderUploadState,\n    tone,\n    value,\n    imageUrlBuilder,\n  } = props\n\n  const hasValueOrUpload = Boolean(value?._upload || value?.asset)\n  const path = useMemo(() => inputProps.path.concat(ASSET_FIELD_PATH), [inputProps.path])\n  const {customProperties} = usePreviewImageSource({value, imageUrlBuilder})\n\n  return (\n    <div style={customProperties}>\n      {isStale && (\n        <Box marginBottom={2}>\n          <UploadWarning onClearStale={handleClearUploadState} />\n        </Box>\n      )}\n      <ChangeIndicator path={path} hasFocus={!!inputProps.focused} isChanged={inputProps.changed}>\n        {value?._upload ? (\n          renderUploadState(value._upload)\n        ) : (\n          <FileTarget\n            {...elementProps}\n            onFocus={handleFileTargetFocus}\n            tabIndex={0}\n            disabled={Boolean(readOnly)}\n            onFiles={handleSelectFiles}\n            onFilesOver={handleFilesOver}\n            onFilesOut={handleFilesOut}\n            tone={tone}\n            $border={hasValueOrUpload || hoveringFiles.length > 0}\n            sizing=\"border\"\n            radius={2}\n          >\n            {!value?.asset && renderUploadPlaceholder()}\n            {!value?._upload && value?.asset && (\n              <div style={{position: 'relative'}}>\n                {renderPreview()}\n                {renderAssetMenu()}\n              </div>\n            )}\n          </FileTarget>\n        )}\n      </ChangeIndicator>\n    </div>\n  )\n}\nexport const ImageInputAsset = memo(ImageInputAssetComponent)\n","import {CropIcon} from '@sanity/icons'\nimport {Inline, Menu, Skeleton, useClickOutsideEvent, useGlobalKeyDown} from '@sanity/ui'\nimport {type MouseEventHandler, type ReactNode, useCallback, useEffect, useState} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Button, Popover, TooltipDelayGroupProvider} from '../../../../../ui-components'\nimport {ContextMenuButton} from '../../../../components/contextMenuButton'\nimport {useTranslation} from '../../../../i18n'\n\nexport const MenuActionsWrapper = styled(Inline)`\n  position: absolute;\n  top: 0;\n  right: 0;\n`\n\nexport const ImageActionsMenuWaitPlaceholder = () => (\n  <MenuActionsWrapper padding={2}>\n    <Skeleton style={{width: '25px', height: '25px'}} animated />\n  </MenuActionsWrapper>\n)\n\ninterface ImageActionsMenuProps {\n  children: ReactNode\n  onEdit: MouseEventHandler<HTMLButtonElement>\n  setHotspotButtonElement: (element: HTMLButtonElement | null) => void\n  setMenuButtonElement: (element: HTMLButtonElement | null) => void\n  showEdit: boolean\n  isMenuOpen: boolean\n  onMenuOpen: (flag: boolean) => void\n}\n\nexport function ImageActionsMenu(props: ImageActionsMenuProps) {\n  const {\n    onEdit,\n    children,\n    showEdit,\n    setHotspotButtonElement,\n    setMenuButtonElement,\n    onMenuOpen,\n    isMenuOpen,\n  } = props\n\n  const [menuElement, setMenuElement] = useState<HTMLDivElement | null>(null)\n  const [buttonElement, setButtonElement] = useState<HTMLButtonElement | null>(null)\n\n  const handleClick = useCallback(() => onMenuOpen(!isMenuOpen), [onMenuOpen, isMenuOpen])\n\n  useGlobalKeyDown(\n    useCallback(\n      (event) => {\n        if (isMenuOpen && (event.key === 'Escape' || event.key === 'Tab')) {\n          onMenuOpen(false)\n          buttonElement?.focus()\n        }\n      },\n      [isMenuOpen, onMenuOpen, buttonElement],\n    ),\n  )\n\n  // Close menu when clicking outside of it\n  // Not when clicking on the button\n  useClickOutsideEvent(\n    (event) => {\n      if (!buttonElement?.contains(event.target as Node)) {\n        onMenuOpen(false)\n      }\n    },\n    () => [menuElement],\n  )\n\n  const setOptionsButtonRef = useCallback(\n    (el: HTMLButtonElement | null) => {\n      // Pass the button element to the parent component so that it can focus it when e.g. closing dialogs\n      setMenuButtonElement(el)\n\n      // Set focus back on the button when closing the menu\n      setButtonElement(el)\n    },\n    [setMenuButtonElement],\n  )\n\n  // When the popover is open, focus the menu to enable keyboard navigation\n  useEffect(() => {\n    if (isMenuOpen) {\n      menuElement?.focus()\n    }\n  }, [isMenuOpen, menuElement])\n\n  const {t} = useTranslation()\n  return (\n    <TooltipDelayGroupProvider>\n      <MenuActionsWrapper data-buttons space={1} padding={2}>\n        {showEdit && (\n          <Button\n            aria-label={t('inputs.image.actions-menu.edit-details.aria-label')}\n            data-testid=\"options-menu-edit-details\"\n            icon={CropIcon}\n            mode=\"ghost\"\n            onClick={onEdit}\n            ref={setHotspotButtonElement}\n            tooltipProps={{content: t('inputs.image.actions-menu.crop-image-tooltip')}}\n          />\n        )}\n        {/* Using a customized Popover instead of MenuButton because a MenuButton will close on click\n     and break replacing an uploaded file. */}\n        <Popover\n          id=\"image-actions-menu\"\n          content={<Menu ref={setMenuElement}>{children}</Menu>}\n          portal\n          open={isMenuOpen}\n          constrainSize\n        >\n          <ContextMenuButton\n            aria-label={t('inputs.image.actions-menu.options.aria-label')}\n            data-testid=\"options-menu-button\"\n            mode=\"ghost\"\n            onClick={handleClick}\n            ref={setOptionsButtonRef}\n          />\n        </Popover>\n      </MenuActionsWrapper>\n    </TooltipDelayGroupProvider>\n  )\n}\n","import {isImageSource} from '@sanity/asset-utils'\nimport {ImageIcon, SearchIcon} from '@sanity/icons'\nimport {type AssetSource, type ImageAsset, type Reference} from '@sanity/types'\nimport {get, startCase} from 'lodash'\nimport {memo, type ReactNode, useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {type Observable} from 'rxjs'\n\nimport {MenuItem} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n'\nimport {ActionsMenu} from '../common/ActionsMenu'\nimport {ImageActionsMenu, ImageActionsMenuWaitPlaceholder} from './ImageActionsMenu'\nimport {type BaseImageInputProps} from './types'\n\nfunction ImageInputAssetMenuComponent(\n  props: Pick<\n    BaseImageInputProps,\n    | 'assetSources'\n    | 'directUploads'\n    | 'imageUrlBuilder'\n    | 'observeAsset'\n    | 'readOnly'\n    | 'schemaType'\n    | 'value'\n  > & {\n    handleOpenDialog: () => void\n    handleRemoveButtonClick: () => void\n    handleSelectFiles: (files: File[]) => void\n    handleSelectImageFromAssetSource: (source: AssetSource) => void\n    isImageToolEnabled: boolean\n    isMenuOpen: boolean\n    setHotspotButtonElement: (el: HTMLButtonElement | null) => void\n    setMenuButtonElement: (el: HTMLButtonElement | null) => void\n    setMenuOpen: (isOpen: boolean) => void\n  },\n) {\n  const {\n    assetSources,\n    directUploads,\n    handleOpenDialog,\n    handleRemoveButtonClick,\n    handleSelectFiles,\n    handleSelectImageFromAssetSource,\n    imageUrlBuilder,\n    isImageToolEnabled,\n    isMenuOpen,\n    observeAsset,\n    readOnly,\n    schemaType,\n    setHotspotButtonElement,\n    setMenuButtonElement,\n    setMenuOpen,\n    value,\n  } = props\n  const {t} = useTranslation()\n\n  const accept = useMemo(() => get(schemaType, 'options.accept', 'image/*'), [schemaType])\n  const asset = value?.asset\n\n  const showAdvancedEditButton = value && asset && isImageToolEnabled\n\n  if (!asset) {\n    return null\n  }\n\n  let browseMenuItem: ReactNode =\n    assetSources && assetSources.length === 0 ? null : (\n      <MenuItem\n        icon={SearchIcon}\n        text={t('inputs.image.browse-menu.text')}\n        // eslint-disable-next-line react/jsx-no-bind\n        onClick={() => {\n          setMenuOpen(false)\n          handleSelectImageFromAssetSource(assetSources[0])\n        }}\n        disabled={readOnly}\n        data-testid=\"file-input-browse-button\"\n      />\n    )\n  if (assetSources && assetSources.length > 1) {\n    browseMenuItem = assetSources.map((assetSource) => {\n      return (\n        <MenuItem\n          key={assetSource.name}\n          text={\n            (assetSource.i18nKey ? t(assetSource.i18nKey) : assetSource.title) ||\n            startCase(assetSource.name)\n          }\n          // eslint-disable-next-line react/jsx-no-bind\n          onClick={() => {\n            setMenuOpen(false)\n            handleSelectImageFromAssetSource(assetSource)\n          }}\n          icon={assetSource.icon || ImageIcon}\n          data-testid={`file-input-browse-button-${assetSource.name}`}\n          disabled={readOnly}\n        />\n      )\n    })\n  }\n\n  return (\n    <ImageInputAssetMenuWithReferenceAsset\n      accept={accept}\n      browseMenuItem={browseMenuItem}\n      directUploads={directUploads}\n      handleOpenDialog={handleOpenDialog}\n      handleRemoveButtonClick={handleRemoveButtonClick}\n      handleSelectFiles={handleSelectFiles}\n      imageUrlBuilder={imageUrlBuilder}\n      isMenuOpen={isMenuOpen}\n      observeAsset={observeAsset}\n      readOnly={readOnly}\n      reference={asset}\n      schemaType={schemaType}\n      setHotspotButtonElement={setHotspotButtonElement}\n      setMenuButtonElement={setMenuButtonElement}\n      setMenuOpen={setMenuOpen}\n      showAdvancedEditButton={!!showAdvancedEditButton}\n      value={value}\n    />\n  )\n}\nexport const ImageInputAssetMenu = memo(ImageInputAssetMenuComponent)\n\nfunction ImageInputAssetMenuWithReferenceAssetComponent(\n  props: Pick<\n    BaseImageInputProps,\n    'directUploads' | 'imageUrlBuilder' | 'observeAsset' | 'readOnly' | 'schemaType' | 'value'\n  > & {\n    accept: string\n    browseMenuItem: ReactNode\n    handleOpenDialog: () => void\n    handleRemoveButtonClick: () => void\n    handleSelectFiles: (files: File[]) => void\n    isMenuOpen: boolean\n    observeAsset: (assetId: string) => Observable<ImageAsset>\n    reference: Reference\n    setHotspotButtonElement: (el: HTMLButtonElement | null) => void\n    setMenuButtonElement: (el: HTMLButtonElement | null) => void\n    setMenuOpen: (isOpen: boolean) => void\n    showAdvancedEditButton: boolean\n  },\n) {\n  const {\n    accept,\n    browseMenuItem,\n    directUploads,\n    handleOpenDialog,\n    handleRemoveButtonClick,\n    handleSelectFiles,\n    imageUrlBuilder,\n    isMenuOpen,\n    observeAsset,\n    readOnly,\n    reference,\n    setHotspotButtonElement,\n    setMenuButtonElement,\n    setMenuOpen,\n    showAdvancedEditButton,\n    value,\n  } = props\n\n  const documentId = reference?._ref\n  const observable = useMemo(() => observeAsset(documentId), [documentId, observeAsset])\n  const asset = useObservable(observable)\n\n  if (!documentId || !asset) {\n    return <ImageActionsMenuWaitPlaceholder />\n  }\n\n  const {_id, originalFilename, extension} = asset\n  let copyUrl: string | undefined\n  let downloadUrl: string | undefined\n\n  if (isImageSource(value)) {\n    const filename = originalFilename || `download.${extension}`\n    downloadUrl = imageUrlBuilder.image(_id).forceDownload(filename).url()\n    copyUrl = imageUrlBuilder.image(_id).url()\n  }\n\n  return (\n    <ImageActionsMenu\n      isMenuOpen={isMenuOpen}\n      onEdit={handleOpenDialog}\n      onMenuOpen={setMenuOpen}\n      setHotspotButtonElement={setHotspotButtonElement}\n      setMenuButtonElement={setMenuButtonElement}\n      showEdit={!!showAdvancedEditButton}\n    >\n      <ActionsMenu\n        onUpload={handleSelectFiles}\n        browse={browseMenuItem}\n        onReset={handleRemoveButtonClick}\n        downloadUrl={downloadUrl}\n        copyUrl={copyUrl}\n        readOnly={readOnly}\n        directUploads={directUploads}\n        accept={accept}\n      />\n    </ImageActionsMenu>\n  )\n}\nconst ImageInputAssetMenuWithReferenceAsset = memo(ImageInputAssetMenuWithReferenceAssetComponent)\n","import {type AssetFromSource, type AssetSource} from '@sanity/types'\nimport {get} from 'lodash'\nimport {memo, useMemo} from 'react'\n\nimport {WithReferencedAsset} from '../../../utils/WithReferencedAsset'\nimport {type BaseImageInputProps} from './types'\n\nfunction ImageInputAssetSourceComponent(\n  props: Pick<BaseImageInputProps, 'value' | 'schemaType' | 'observeAsset'> & {\n    selectedAssetSource: AssetSource | null\n    handleAssetSourceClosed: () => void\n    handleSelectAssetFromSource: (assetFromSource: AssetFromSource[]) => void\n  },\n) {\n  const {\n    handleAssetSourceClosed,\n    handleSelectAssetFromSource,\n    observeAsset,\n    schemaType,\n    selectedAssetSource,\n    value,\n  } = props\n  const accept = useMemo(() => get(schemaType, 'options.accept', 'image/*'), [schemaType])\n\n  if (!selectedAssetSource) {\n    return null\n  }\n  const {component: Component} = selectedAssetSource\n\n  if (value && value.asset) {\n    return (\n      <WithReferencedAsset observeAsset={observeAsset} reference={value.asset}>\n        {(imageAsset) => (\n          <Component\n            selectedAssets={[imageAsset]}\n            assetType=\"image\"\n            accept={accept}\n            selectionType=\"single\"\n            onClose={handleAssetSourceClosed}\n            onSelect={handleSelectAssetFromSource}\n          />\n        )}\n      </WithReferencedAsset>\n    )\n  }\n  return (\n    <Component\n      selectedAssets={[]}\n      selectionType=\"single\"\n      assetType=\"image\"\n      accept={accept}\n      onClose={handleAssetSourceClosed}\n      onSelect={handleSelectAssetFromSource}\n    />\n  )\n}\nexport const ImageInputAssetSource = memo(ImageInputAssetSourceComponent)\n","import {ChevronDownIcon, ImageIcon, SearchIcon} from '@sanity/icons'\nimport {type AssetSource} from '@sanity/types'\nimport {Menu} from '@sanity/ui'\nimport {startCase} from 'lodash'\nimport {type ForwardedRef, forwardRef, memo} from 'react'\n\nimport {Button, MenuButton, type MenuButtonProps, MenuItem} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n'\nimport {type BaseImageInputProps} from './types'\n\nconst ASSET_IMAGE_MENU_POPOVER: MenuButtonProps['popover'] = {portal: true} as const\n\nfunction ImageInputBrowserComponent(\n  props: Pick<BaseImageInputProps, 'assetSources' | 'readOnly' | 'directUploads' | 'id'> & {\n    setMenuOpen: (isOpen: boolean) => void\n    handleSelectImageFromAssetSource: (source: AssetSource) => void\n  },\n  forwardedRef: ForwardedRef<HTMLButtonElement>,\n) {\n  const {assetSources, readOnly, directUploads, id, setMenuOpen, handleSelectImageFromAssetSource} =\n    props\n  const {t} = useTranslation()\n\n  if (assetSources && assetSources.length === 0) return null\n\n  if (assetSources && assetSources.length > 1 && !readOnly && directUploads) {\n    return (\n      <MenuButton\n        id={`${id}_assetImageButton`}\n        ref={forwardedRef}\n        button={\n          <Button\n            data-testid=\"file-input-multi-browse-button\"\n            icon={SearchIcon}\n            iconRight={ChevronDownIcon}\n            mode=\"bleed\"\n            text={t('inputs.image.browse-menu.text')}\n          />\n        }\n        menu={\n          <Menu>\n            {assetSources.map((assetSource) => {\n              return (\n                <MenuItem\n                  key={assetSource.name}\n                  text={\n                    (assetSource.i18nKey ? t(assetSource.i18nKey) : assetSource.title) ||\n                    startCase(assetSource.name)\n                  }\n                  // eslint-disable-next-line react/jsx-no-bind\n                  onClick={() => {\n                    setMenuOpen(false)\n                    handleSelectImageFromAssetSource(assetSource)\n                  }}\n                  icon={assetSource.icon || ImageIcon}\n                  disabled={readOnly}\n                  data-testid={`file-input-browse-button-${assetSource.name}`}\n                />\n              )\n            })}\n          </Menu>\n        }\n        popover={ASSET_IMAGE_MENU_POPOVER}\n      />\n    )\n  }\n\n  return (\n    <Button\n      text={t('inputs.image.browse-menu.text')}\n      icon={SearchIcon}\n      mode=\"bleed\"\n      // eslint-disable-next-line react/jsx-no-bind\n      onClick={() => {\n        setMenuOpen(false)\n        handleSelectImageFromAssetSource(assetSources[0])\n      }}\n      data-testid=\"file-input-browse-button\"\n      disabled={readOnly}\n    />\n  )\n}\nexport const ImageInputBrowser = memo(forwardRef(ImageInputBrowserComponent))\n","import {Box} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const RatioBox = styled(Box)<{ratio?: number}>`\n  position: relative;\n  padding-bottom: calc(${({ratio = 3 / 2}) => 1 / ratio} * 100%);\n\n  & > div {\n    position: absolute;\n    top: ${({padding = 0}) => padding}px;\n    left: ${({padding = 0}) => padding}px;\n    right: ${({padding = 0}) => padding}px;\n    bottom: ${({padding = 0}) => padding}px;\n  }\n`\n","import {type Crop, type Hotspot} from './types'\n\nexport const DEFAULT_HOTSPOT: Hotspot = {\n  x: 0.5,\n  y: 0.5,\n  height: 1,\n  width: 1,\n}\n\nexport const DEFAULT_CROP: Crop = {\n  top: 0,\n  left: 0,\n  right: 0,\n  bottom: 0,\n}\n","import {type CSSProperties} from 'react'\n\nimport {DEFAULT_CROP, DEFAULT_HOTSPOT} from './constants'\nimport {type Crop, type CropAndHotspot, type CropMethod, type Hotspot} from './types'\n\ninterface Options {\n  image?: {aspectRatio: number} | {height: number; width: number}\n  container?: {aspectRatio: number} | {height: number; width: number}\n  hotspot?: Hotspot\n  crop?: Crop\n  align?: CropAlignment\n}\n\ninterface CSSBox {\n  width: number\n  height: number\n  left: number\n  top: number\n}\n\ninterface CropAlignment {\n  x: 'left' | 'right' | 'center'\n  y: 'top' | 'bottom' | 'center'\n}\n\ninterface HotspotCropStyleResult {\n  crop: CSSBox\n  image: CSSBox\n  method: CropMethod\n}\n\nexport interface CalculatedStyles {\n  container: CSSProperties\n  padding: CSSProperties\n  crop: CSSProperties\n  image: CSSProperties\n  debug: {\n    result: HotspotCropStyleResult\n  }\n}\n\nexport function calculateStyles(options: Options = {}): CalculatedStyles {\n  const imageAspect = readAspectRatio(options.image) || 1\n\n  const hotspot = options.hotspot || DEFAULT_HOTSPOT\n  const crop = options.crop || DEFAULT_CROP\n  const containerAspect = readAspectRatio(options.container) || imageAspect * readCropAspect(crop)\n\n  const align = options.align || {x: 'center', y: 'center'}\n\n  const result = calculateHotSpotCrop(\n    imageAspect,\n    {hotspot, crop},\n    {aspect: containerAspect, align},\n  )\n\n  const containerHeight = styleFormat(round(100 / containerAspect))\n\n  return {\n    debug: {\n      result,\n    },\n    container: {\n      //outline: '1px solid cyan',\n      overflow: 'hidden',\n      position: 'relative',\n      width: '100%',\n      height: containerHeight,\n    },\n    padding: {\n      marginTop: containerHeight,\n    },\n    crop: {\n      position: 'absolute',\n      overflow: 'hidden',\n      height: toStylePercentage(result.crop.height),\n      width: toStylePercentage(result.crop.width),\n      top: toStylePercentage(result.crop.top),\n      left: toStylePercentage(result.crop.left),\n    },\n    image: {\n      position: 'absolute',\n      height: toStylePercentage(result.image.height),\n      width: toStylePercentage(result.image.width),\n      top: toStylePercentage(result.image.top),\n      left: toStylePercentage(result.image.left),\n    },\n  }\n}\n\nfunction readAspectRatio(opts: Options['image']): number | null {\n  if (!opts) {\n    return null\n  }\n\n  if ('aspectRatio' in opts) {\n    return opts.aspectRatio\n  }\n\n  if ('height' in opts || 'width' in opts) {\n    if (typeof opts.height !== 'number' && typeof opts.width !== 'number') {\n      throw new Error(`Height and width must be numbers, got ${JSON.stringify(opts)}`)\n    }\n\n    return opts.width / opts.height\n  }\n\n  return null\n}\n\nfunction round(num: number, decimals = 2): number {\n  const multiplier = Math.pow(10, decimals)\n  return Math.round(num * multiplier) / multiplier\n}\n\nfunction calculateHotSpotCrop(\n  sourceAspect: number,\n  descriptor: CropAndHotspot,\n  spec: {aspect: number; align: CropAlignment},\n): HotspotCropStyleResult {\n  const crop = descriptor.crop\n  const viewportAspect = spec.aspect\n  const alignment = spec.align\n\n  // The rational aspect of the cropped image\n  const netWidth = 1.0 - crop.left - crop.right\n  const netHeight = 1.0 - crop.top - crop.bottom\n\n  // Places the image inside the crop box\n  const outImg = {\n    top: -crop.top / netHeight,\n    left: -crop.left / netWidth,\n    width: 1 / netWidth,\n    height: 1 / netHeight,\n  }\n\n  // The rational aspect is the aspect ration of the crop in ratios of the image size meaning the image\n  // is always considered having the size 1.0*1.0\n  const cropRationalAspect = netWidth / netHeight\n\n  // cropAspect is the real aspect ratio of the crop box in pixel-space\n  const cropAspect = cropRationalAspect * sourceAspect\n\n  // Now we transform the hotspot to be expressed in ratios of the cropped area, not the\n  // full image:\n  const hotspot = {\n    x: (descriptor.hotspot.x - crop.left) / netWidth,\n    y: (descriptor.hotspot.y - crop.top) / netHeight,\n    height: descriptor.hotspot.height / netHeight,\n    width: descriptor.hotspot.width / netWidth,\n  }\n\n  // Lets calculate the maximum scale the image may be presented at without cropping the hotspot. A scale of\n  // 1.0 means the cropped image exactly fill the width of the viewport.\n\n  // The scale at which the hotspot would fill the viewport exactly in the X direction\n  const maxHotspotXScale = 1.0 / hotspot.width\n  // The scale at which the hotspot would fill the veiwport exactly in the Y direction\n  const maxHotspotYScale = ((1.0 / hotspot.height) * cropAspect) / viewportAspect\n  // This is the largest scale the image can have while still not cropping the hotspot:\n  const maxScale = Math.min(maxHotspotXScale, maxHotspotYScale)\n\n  // Now lets find the minimum scale we can have while maintaining full bleed (no letterboxing)\n  let minFullBleedScale\n  const cropIsTaller = cropAspect <= viewportAspect\n  if (cropIsTaller) {\n    // Crop is taller than viewport\n    minFullBleedScale = 1.0 // By definition 1.0 fills the width of the viewport exactly with the viewport cutting away from the height of the cropbox\n  } else {\n    // Image is wider than viewport\n    minFullBleedScale = cropAspect / viewportAspect // At this scale the viewport is filled exactly in the height while cutting away from the sides\n  }\n\n  let method: CropMethod\n  let outCrop: CSSBox\n\n  // Do we have to letterbox this image in order to leave the hotspot area uncropped?\n  if (minFullBleedScale > maxScale) {\n    // Yes :-( There is no way to protect the hot spot and still have full bleed, so we are letterboxing it\n    method = 'letterbox'\n    let letterboxScale\n    const diff = minFullBleedScale - maxScale\n\n    // Determine a scale where the image fills one dimension of the container\n    if (cropIsTaller) {\n      letterboxScale = 1.0 - diff\n    } else {\n      letterboxScale = maxScale\n    }\n\n    outCrop = {\n      width: letterboxScale,\n      height: (letterboxScale / cropAspect) * viewportAspect,\n\n      // Gets overwritten further down\n      left: 0,\n      top: 0,\n    }\n\n    const hotspotLeft = hotspot.x * outCrop.width - (hotspot.width * outCrop.width) / 2\n    switch (alignment.x) {\n      case 'left':\n        outCrop.left = cropIsTaller ? 0 : -hotspotLeft\n        break\n      case 'right':\n        // todo: broken atm\n        outCrop.left = cropIsTaller ? 1 - outCrop.width : hotspotLeft\n        break\n      case 'center':\n        outCrop.left = cropIsTaller ? (1 - outCrop.width) / 2 : -hotspotLeft\n        break\n      default:\n        throw new Error(\n          `Invalid x alignment: '${alignment.x}'. Must be either 'left', 'right' or 'center'`,\n        )\n    }\n    const hotspotTop = hotspot.y * outCrop.height - (hotspot.height * outCrop.height) / 2\n    switch (alignment.y) {\n      case 'top':\n        outCrop.top = cropIsTaller ? -hotspotTop : 0\n        break\n      case 'bottom':\n        // todo: broken atm\n        outCrop.top = hotspotTop\n        break\n      case 'center':\n        outCrop.top = cropIsTaller ? -hotspotTop : (1 - outCrop.height) / 2\n        break\n      default:\n        throw new Error(\n          `Invalid y alignment: '${alignment.y}'. Must be either 'top', 'bottom' or 'center'`,\n        )\n    }\n  } else if (cropIsTaller) {\n    // TODO: Clamp hotspot offset to avoid moving image off canvas\n    method = 'full_width'\n\n    let top = (-hotspot.y / cropAspect) * viewportAspect + 0.5\n    const height = (minFullBleedScale / cropAspect) * viewportAspect\n    // Clamp top so that we will not move the image off of the viewport\n    if (top > 0) {\n      top = 0\n    } else if (-top > height - 1.0) {\n      top = -(height - 1.0)\n    }\n\n    outCrop = {\n      width: minFullBleedScale,\n      height,\n      left: 0,\n      // Place the Y center of the hotspot near the center of the viewport\n      top,\n    }\n  } else {\n    // crop is wider\n    method = 'full_height'\n\n    const width = minFullBleedScale\n    let left = 0.5 - hotspot.x * minFullBleedScale\n    if (left > 0) {\n      left = 0\n    } else if (-left > width - 1.0) {\n      left = -(width - 1.0)\n    }\n    // Clamp left so that we will not move the image off of the viewport.\n    outCrop = {\n      width,\n      height: (minFullBleedScale / cropAspect) * viewportAspect,\n      top: 0,\n      // Place the X center of the hotspot at the center of the viewport\n      left,\n    }\n  }\n\n  return {\n    method,\n    crop: outCrop,\n    image: outImg,\n  }\n}\n\nfunction readCropAspect(crop: Crop) {\n  const height = 1 - crop.top - crop.bottom\n  const width = 1 - crop.left - crop.right\n  return width / height\n}\n\nfunction styleFormat(num: number) {\n  return num === 0 ? 0 : `${num}%`\n}\n\nfunction toStylePercentage(num: number) {\n  return styleFormat(round(num * 100))\n}\n","import {styled} from 'styled-components'\n\nexport const HotspotImageContainer = styled.div`\n  position: relative;\n  width: 100%;\n`\n","import Debug from 'debug'\nimport {\n  type CSSProperties,\n  memo,\n  startTransition,\n  type SyntheticEvent,\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from 'react'\n\nimport {calculateStyles} from './calculateStyles'\nimport {DEFAULT_CROP, DEFAULT_HOTSPOT} from './constants'\nimport {HotspotImageContainer} from './HotspotImage.styles'\nimport {type Crop, type Hotspot} from './types'\n\nconst debug = Debug('sanity-imagetool')\n\nfunction getCropAspect(crop: Crop, srcAspect: number) {\n  const origHeight = 1 / srcAspect\n  const origWidth = srcAspect * origHeight\n  const cropWidth = origWidth - (crop.left + crop.right) * origWidth\n  const cropHeight = origHeight - (crop.top + crop.bottom) * origHeight\n  return cropWidth / cropHeight\n}\n\nexport interface HotspotImageProps {\n  src: string\n  srcAspectRatio: number\n  srcSet?: string\n  hotspot?: Hotspot\n  crop?: Crop\n  aspectRatio?: number | 'auto' | 'none'\n  alignX?: 'left' | 'center' | 'right'\n  alignY?: 'top' | 'center' | 'bottom'\n  className?: string\n  style?: CSSProperties\n  alt?: string\n  onError?: (event: SyntheticEvent<HTMLImageElement, Event>) => void\n  onLoad?: () => void\n}\n\nexport const HotspotImage = memo(function HotspotImage(props: HotspotImageProps) {\n  const {\n    alignX = 'center',\n    alignY = 'center',\n    alt,\n    aspectRatio = 'none',\n    className = '',\n    crop = DEFAULT_CROP,\n    hotspot = DEFAULT_HOTSPOT,\n    onError,\n    onLoad,\n    src,\n    srcAspectRatio,\n    srcSet,\n    style,\n  } = props\n  const [containerAspect, setContainerAspect] = useState<number | null>(null)\n  const containerElementRef = useRef<HTMLDivElement | null>(null)\n  const imageElementRef = useRef<HTMLImageElement | null>(null)\n\n  const updateContainerAspect = useCallback(() => {\n    if (!containerElementRef.current) return\n    if (aspectRatio === 'auto') {\n      const parentNode = containerElementRef.current.parentNode as HTMLElement\n      startTransition(() => setContainerAspect(parentNode.offsetWidth / parentNode.offsetHeight))\n    } else {\n      setContainerAspect(null)\n    }\n  }, [aspectRatio])\n\n  useEffect(() => {\n    const imageElement = imageElementRef.current\n\n    // Fixes issues that may happen if the component is rendered on server and mounted after the image has finished loading\n    // In these situations, neither the onLoad or the onError events will be called.\n    // Derived from http://imagesloaded.desandro.com/\n    const alreadyLoaded =\n      imageElement &&\n      imageElement.src &&\n      imageElement.complete &&\n      imageElement.naturalWidth !== undefined\n\n    if (alreadyLoaded) {\n      debug(\"Image '%s' already loaded, refreshing (from cache) to trigger onLoad / onError\", src)\n      // eslint-disable-next-line no-self-assign\n      imageElement.src = imageElement.src\n    }\n\n    updateContainerAspect()\n\n    window.addEventListener('resize', updateContainerAspect)\n\n    return () => {\n      window.removeEventListener('resize', updateContainerAspect)\n    }\n  }, [src, updateContainerAspect])\n\n  const targetAspect = useMemo(() => {\n    if (aspectRatio === 'none') {\n      return crop ? getCropAspect(crop, srcAspectRatio) : srcAspectRatio\n    }\n\n    if (aspectRatio === 'auto') {\n      return containerAspect\n    }\n\n    return aspectRatio || null\n  }, [aspectRatio, containerAspect, crop, srcAspectRatio])\n\n  const targetStyles = useMemo(\n    () =>\n      calculateStyles({\n        container: {aspectRatio: targetAspect || srcAspectRatio},\n        image: {aspectRatio: srcAspectRatio},\n        hotspot,\n        crop,\n        align: {\n          x: alignX,\n          y: alignY,\n        },\n      }),\n    [alignX, alignY, crop, hotspot, srcAspectRatio, targetAspect],\n  )\n\n  return (\n    <HotspotImageContainer className={`${className}`} style={style} ref={containerElementRef}>\n      <div style={targetStyles.container}>\n        <div style={targetStyles.padding} />\n        <div style={targetStyles.crop}>\n          <img\n            ref={imageElementRef}\n            src={src}\n            alt={alt}\n            srcSet={srcSet}\n            onLoad={onLoad}\n            onError={onError}\n            style={targetStyles.image}\n          />\n        </div>\n      </div>\n    </HotspotImageContainer>\n  )\n})\n","/* eslint-disable @typescript-eslint/no-shadow */\nimport {useEffect, useState} from 'react'\n\ninterface ImageLoaderProps {\n  src: string\n  children: (props: {\n    isLoading: boolean\n    image: HTMLImageElement | null\n    error: Error | null\n  }) => React.JSX.Element | null\n}\n\nexport function ImageLoader(props: ImageLoaderProps) {\n  const {src, children} = props\n  const [isLoading, setIsLoading] = useState(true)\n  const [image, setImage] = useState<HTMLImageElement | null>(null)\n  const [error, setError] = useState<Error | null>(null)\n\n  useEffect(() => {\n    setImage(null)\n    setError(null)\n    setIsLoading(true)\n\n    const image = new Image()\n\n    image.onload = () => {\n      setImage(image)\n      setError(null)\n      setIsLoading(false)\n    }\n\n    image.onerror = () => {\n      setError(new Error(`Could not load image from ${JSON.stringify(src)}`))\n      setIsLoading(false)\n    }\n\n    image.referrerPolicy = 'strict-origin-when-cross-origin'\n    image.src = src\n  }, [src])\n\n  return children({image, error, isLoading})\n}\n","import {type ReactNode, useEffect, useLayoutEffect, useState} from 'react'\n\nexport interface ResizeProps {\n  image: HTMLImageElement\n  maxHeight: number\n  maxWidth: number\n  children: (canvas: HTMLCanvasElement) => ReactNode\n}\n\nexport function Resize(props: ResizeProps): ReactNode {\n  const {image, maxHeight, maxWidth, children} = props\n  const [canvas, setCanvas] = useState<HTMLCanvasElement | null>(null)\n\n  const hasCanvas = Boolean(canvas)\n  useEffect(() => {\n    if (hasCanvas) {\n      return undefined\n    }\n    const canvasElement = document.createElement('canvas')\n    canvasElement.style.display = 'none'\n    document.body.appendChild(canvasElement)\n    setCanvas(canvasElement)\n    return () => {\n      document.body.removeChild(canvasElement)\n    }\n  }, [hasCanvas])\n  /**\n   * The useLayoutEffect is used here intentionally.\n   * It ensures that changes to the painted image, height and width are applied synchronously, before the next paint.\n   * If we used a passive useEffect it would cause a flicker as the canvas would be painted after the next paint.\n   * Two effect hooks are used to ensure the `document.body.appendChild` related logic only run once, while resizing the canvas and painting a new image can run multiple times as needed.\n   */\n  useLayoutEffect(() => {\n    if (!canvas) {\n      return\n    }\n\n    const ratio = image.width / image.height\n    const width = Math.min(image.width, maxWidth)\n    const height = Math.min(image.height, maxHeight)\n\n    const landscape = image.width > image.height\n    const targetWidth = landscape ? width : height * ratio\n    const targetHeight = landscape ? width / ratio : height\n\n    Object.assign(canvas, {width: targetWidth, height: targetHeight})\n\n    const ctx = canvas.getContext('2d')\n    if (ctx) {\n      ctx.drawImage(image, 0, 0, image.width, image.height, 0, 0, targetWidth, targetHeight)\n    }\n  }, [canvas, image, maxHeight, maxWidth])\n\n  if (!canvas) {\n    return null\n  }\n\n  return children(canvas)\n}\n","import {type Crop} from '../types'\n\nexport class Size {\n  height: number\n  width: number\n  constructor(height: number, width: number) {\n    this.height = height\n    this.width = width\n  }\n}\nexport class Point {\n  x: number\n  y: number\n  constructor(x: number, y: number) {\n    this.x = x\n    this.y = y\n  }\n}\n\nclass HLine {\n  y: number\n  _left: number\n  _right: number\n  constructor(y: number, left: number, right: number) {\n    this.y = y\n    this._left = left\n    this._right = right\n  }\n\n  get right() {\n    return new Point(this._right, this.y)\n  }\n\n  get left() {\n    return new Point(this._left, this.y)\n  }\n\n  get length() {\n    return this._right - this._left\n  }\n}\n\nclass Corners {\n  rect: Rect\n  constructor(rect: Rect) {\n    this.rect = rect\n  }\n\n  get top() {\n    return new HLine(this.rect.top, this.rect.left, this.rect.right)\n  }\n\n  get bottom() {\n    return new HLine(this.rect.bottom, this.rect.left, this.rect.right)\n  }\n}\n\nexport class Rect {\n  left: number\n  top: number\n  width: number\n  height: number\n  // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n  static fromEdges({left, right, top, bottom}: Crop) {\n    return new Rect(left, top, 1 - left - right, 1 - top - bottom)\n  }\n\n  constructor(left = 0, top = 0, width = 0, height = 0) {\n    this.left = left\n    this.top = top\n    this.width = width\n    this.height = height\n  }\n\n  setTopLeft(left: number | undefined, top: number | undefined): Rect {\n    return new Rect(left, top, this.width || 0, this.height || 0)\n  }\n\n  setSize(width: number | undefined, height: number | undefined): Rect {\n    return new Rect(this.left || 0, this.top || 0, width, height)\n  }\n\n  setCenter(x: number, y: number): Rect {\n    const width = this.width || 0\n    const height = this.height || 0\n    return new Rect(x - width / 2, y - height / 2, width || 0, height || 0)\n  }\n\n  get center(): Point {\n    return new Point(this.left + this.width / 2, this.top + this.height / 2)\n  }\n\n  get corners(): Corners {\n    return new Corners(this)\n  }\n\n  get right(): number {\n    return this.left + this.width\n  }\n\n  get bottom(): number {\n    return this.top + this.height\n  }\n\n  multiply(rect: Rect): Rect {\n    return new Rect(\n      (this.left || 0) + this.width * rect.left,\n      (this.top || 0) + this.height * rect.top,\n      this.width * rect.width,\n      this.height * rect.height,\n    )\n  }\n\n  grow(delta: number): Rect {\n    return new Rect(\n      this.left - delta,\n      this.top - delta,\n      this.width + delta * 2,\n      this.height + delta * 2,\n    )\n  }\n\n  shrink(delta: number): Rect {\n    return this.grow(-delta)\n  }\n\n  cropRelative(crop: Rect): Rect {\n    const top = this.top + crop.top * this.height\n    const left = this.left + crop.left * this.width\n    const height = this.height * crop.height\n    const width = this.width * crop.width\n    return new Rect(left, top, width, height)\n  }\n\n  clamp(bounds: Rect): Rect {\n    // always try to fit the whole rect inside given bounds\n    // adjust top, left if we can, resize if we must\n    let {left, top, width, height} = this\n    if (bounds.width < width) {\n      width = bounds.width\n      left = bounds.left\n    }\n    if (bounds.height < height) {\n      height = bounds.height\n      top = bounds.top\n    }\n\n    if (left + width > bounds.left + bounds.width) {\n      left = bounds.right - width\n    }\n\n    if (top + height > bounds.top + bounds.height) {\n      top = bounds.bottom - height\n    }\n\n    return new Rect(Math.max(left, bounds.left), Math.max(top, bounds.top), width, height)\n  }\n}\n","import {type Coordinate} from '../types'\nimport {type Rect} from './shapes'\n\nexport function isPointInEllipse(point: Coordinate, ellipse: Rect): boolean {\n  const center = {x: ellipse.center.x, y: ellipse.center.y}\n  const xradius = ellipse.width / 2\n  const yradius = ellipse.height / 2\n\n  if (xradius <= 0 || yradius <= 0) {\n    return false\n  }\n\n  const normalized = {x: point.x - center.x, y: point.y - center.y}\n\n  return (\n    Math.pow(normalized.x, 2) / Math.pow(xradius, 2) +\n      Math.pow(normalized.y, 2) / Math.pow(yradius, 2) <=\n    1\n  )\n}\n\nexport function isPointInCircle(\n  {x, y}: Coordinate,\n  circle: Coordinate & {radius: number},\n): boolean {\n  return Math.pow(x - circle.x, 2) + Math.pow(y - circle.y, 2) < Math.pow(circle.radius, 2)\n}\n\nexport function isPointInRect(point: Coordinate, rect: Rect): boolean {\n  return (\n    point.x >= rect.left &&\n    point.x <= rect.left + rect.width &&\n    point.y >= rect.top &&\n    point.y <= rect.top + rect.height\n  )\n}\n\nexport function getPointAtCircumference(radians: number, ellipse: Rect): Coordinate {\n  return {\n    x: ellipse.center.x - (ellipse.width / 2) * Math.cos(radians),\n    y: ellipse.center.y - (ellipse.height / 2) * Math.sin(radians),\n  }\n}\n","/* eslint-disable max-len */\n\nexport const OPEN_HAND =\n  'data:image/png;base64,AAACAAEAICACAAcABQAwAQAAFgAAACgAAAAgAAAAQAAAAAEAAQAAAAAAAAEAAAAAAAAAAAAAAgAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAA/AAAAfwAAAP+AAAH/gAAB/8AAA//AAAd/wAAGf+AAAH9gAADbYAAA2yAAAZsAAAGbAAAAGAAAAAAAAA//////////////////////////////////////////////////////////////////////////////////////gH///4B///8Af//+AD///AA///wAH//4AB//8AAf//AAD//5AA///gAP//4AD//8AF///AB///5A////5///8='\n\nexport const CLOSE_HAND =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAABdSURBVEjH7ZA7DsAwCEMN6v2vTCdESpLKQRl5gxfzMQDNRQyWlEK83QAIRh3cH/QbIhQwMDl8gORl7A16WD/xxAdq6N6SgycKUblf41+wbFBT44RiCi11NU3TLHgBxRUUD4ITqnIAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTUtMDEtMjFUMDA6MTM6NDMrMDE6MDC74T7AAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDEyLTA0LTAyVDA0OjEzOjM3KzAyOjAwQJ35wQAAAABJRU5ErkJggg=='\n","import Debug from 'debug'\nimport {forwardRef, memo, useCallback, useEffect, useRef} from 'react'\nimport {styled} from 'styled-components'\n\nimport {type Coordinate} from './types'\n\n/**\n * Pointer events are used which handles mouse/touch events the same way.\n * - `onDragStart` is called with the \\{x, y\\} positions relative from the dom node (e.g. where the pointerdown event happened)\n * - `onDrag` and `onDragEnd` are both called with the \\{x, y\\} difference from the previous position\n * @internal\n */\nexport interface DragAwareCanvasProps {\n  onDragStart: (pos: {x: number; y: number}) => void\n  onDrag: (pos: {x: number; y: number}) => void\n  onDragEnd: (pos: {x: number; y: number}) => void\n  readOnly?: boolean\n  onPointerDown?: never\n  onPointerMove?: React.PointerEventHandler<HTMLCanvasElement>\n  onPointerOut?: React.PointerEventHandler<HTMLCanvasElement>\n  height?: string | number | undefined\n  width?: string | number | undefined\n}\n\nconst DragAwareCanvasComponent = forwardRef<HTMLCanvasElement, DragAwareCanvasProps>(\n  function DragAwareCanvas(props, ref): React.JSX.Element {\n    const {readOnly, onDragStart, onDragEnd, onDrag, ...rest} = props\n\n    const domNode = useRef<HTMLCanvasElement | null>(null)\n    const currentPos = useRef<Coordinate | null>(null)\n    const isDragging = useRef(false)\n\n    const handleDragStart = useCallback(\n      (event: PositionableEvent) => {\n        if (readOnly || !domNode.current) {\n          return\n        }\n\n        if (isDragging.current) {\n          debug('Start cancelled, already a drag in progress')\n          return\n        }\n\n        isDragging.current = true\n        const nextPos = getPos(event)\n        debug('Drag started %o', nextPos)\n        onDragStart(\n          getPositionRelativeToRect(nextPos.x, nextPos.y, domNode.current.getBoundingClientRect()),\n        )\n\n        currentPos.current = nextPos\n      },\n      [onDragStart, readOnly],\n    )\n    const handleDrag = useCallback(\n      (event: PositionableEvent) => {\n        if (!isDragging.current || readOnly || !currentPos.current) {\n          return\n        }\n\n        const nextPos = getPos(event)\n        const diff = diffPos(nextPos, currentPos.current)\n        onDrag(diff)\n        debug('moving by %o', diff)\n        currentPos.current = nextPos\n      },\n      [onDrag, readOnly],\n    )\n    const handleDragCancel = useCallback(() => {\n      if (!isDragging.current || readOnly || !currentPos.current || !domNode.current) {\n        return\n      }\n\n      isDragging.current = false\n      onDragEnd(\n        getPositionRelativeToRect(\n          currentPos.current.x,\n          currentPos.current.y,\n          domNode.current.getBoundingClientRect(),\n        ),\n      )\n\n      currentPos.current = null\n    }, [onDragEnd, readOnly])\n    const handleDragEnd = useCallback(\n      (event: PositionableEvent) => {\n        if (!isDragging.current || readOnly || !domNode.current) {\n          return\n        }\n        const nextPos = getPos(event)\n        onDragEnd(\n          getPositionRelativeToRect(nextPos.x, nextPos.y, domNode.current.getBoundingClientRect()),\n        )\n        isDragging.current = false\n        currentPos.current = null\n        debug('Done moving %o', nextPos)\n      },\n      [onDragEnd, readOnly],\n    )\n\n    useEffect(() => {\n      document.body.addEventListener('pointermove', handleDrag)\n      document.body.addEventListener('pointerup', handleDragEnd)\n      document.body.addEventListener('pointerleave', handleDragCancel)\n      document.body.addEventListener('pointercancel', handleDragCancel)\n      return () => {\n        document.body.removeEventListener('pointermove', handleDrag)\n        document.body.removeEventListener('pointerup', handleDragEnd)\n        document.body.removeEventListener('pointerleave', handleDragCancel)\n        document.body.removeEventListener('pointercancel', handleDragCancel)\n      }\n    }, [handleDrag, handleDragCancel, handleDragEnd])\n\n    const setRef = useCallback(\n      (node: HTMLCanvasElement | null) => {\n        domNode.current = node\n        if (typeof ref === 'function') {\n          ref(node)\n        } else if (ref) {\n          ref.current = node\n        }\n      },\n      [ref],\n    )\n\n    return (\n      <StyledCanvas ref={setRef} onPointerDown={readOnly ? undefined : handleDragStart} {...rest} />\n    )\n  },\n)\nexport const DragAwareCanvas = memo(\n  DragAwareCanvasComponent,\n  /*\n  function arePropsEqual(oldProps, newProps) {\n    const keys = new Set([...Object.keys(oldProps), ...Object.keys(newProps)])\n    for (const key of keys) {\n      if (!Object.is(oldProps[key], newProps[key])) {\n        console.count(`DragAwareCanvas ${key} changed`)\n        return false\n      }\n    }\n    return true\n  },\n  // */\n)\n\ntype PositionableEvent = globalThis.PointerEvent | React.PointerEvent<HTMLElement>\n\nconst debug = Debug('sanity-imagetool')\n\nconst StyledCanvas = styled.canvas`\n  display: block;\n  position: relative;\n  max-width: calc(100% - 0.5em); /* to prevent overlap with change bar */\n  max-height: calc(100% + 1em);\n  user-select: none;\n  // Enable only multi-finger panning and zooming within this element.\n  // This prevents single finger panning when manipulating drag handles,\n  // which can cause unwanted scrolling in the underlying document body.\n  touch-action: pinch-zoom;\n`\n\nfunction getPositionRelativeToRect(x: number, y: number, rect: {left: number; top: number}) {\n  return {\n    x: x - rect.left,\n    y: y - rect.top,\n  }\n}\n\nfunction getPos(event: PositionableEvent): Coordinate {\n  return {\n    x: event.clientX,\n    y: event.clientY,\n  }\n}\n\nfunction diffPos(pos: Coordinate, otherPos: Coordinate): Coordinate {\n  return {\n    x: pos.x - otherPos.x,\n    y: pos.y - otherPos.y,\n  }\n}\n","import {Rect} from './2d/shapes'\nimport * as utils2d from './2d/utils'\nimport {type Coordinate, type CropHandles} from './types'\n\nfunction paintBackground({\n  context,\n  image,\n  MARGIN_PX,\n  scale,\n}: {\n  context: CanvasRenderingContext2D\n  image: HTMLCanvasElement\n  MARGIN_PX: number\n  scale: number\n}): void {\n  const inner = new Rect().setSize(image.width, image.height).shrink(MARGIN_PX * scale)\n\n  context.save()\n  context.fillStyle = 'white'\n  context.clearRect(0, 0, image.width, image.height)\n\n  context.globalAlpha = 0.3\n  //context.globalCompositeOperation = 'lighten';\n\n  context.drawImage(image, inner.left, inner.top, inner.width, inner.height)\n  context.restore()\n}\n\nfunction paintHotspot({\n  clampedValue,\n  context,\n  HOTSPOT_HANDLE_SIZE,\n  image,\n  MARGIN_PX,\n  opacity,\n  readOnly,\n  scale,\n}: {\n  clampedValue: {crop: Rect; hotspot: Rect}\n  context: CanvasRenderingContext2D\n  HOTSPOT_HANDLE_SIZE: number\n  image: HTMLCanvasElement\n  MARGIN_PX: number\n  opacity: number\n  readOnly: boolean\n  scale: number\n}): void {\n  const imageRect = new Rect().setSize(image.width, image.height)\n\n  const {hotspot, crop} = clampedValue\n\n  const margin = MARGIN_PX * scale\n\n  context.save()\n  drawBackdrop()\n  drawEllipse()\n  context.clip()\n  drawHole()\n  context.restore()\n  if (!readOnly) {\n    drawDragHandle(Math.PI * 1.25)\n  }\n\n  function drawEllipse() {\n    context.save()\n\n    const dest = imageRect.shrink(margin).multiply(hotspot)\n\n    const scaleY = dest.height / dest.width\n\n    context.scale(1, scaleY)\n    context.beginPath()\n    context.globalAlpha = opacity\n    context.arc(\n      dest.center.x,\n      dest.center.y / scaleY,\n      Math.abs(dest.width / 2),\n      0,\n      2 * Math.PI,\n      false,\n    )\n    context.strokeStyle = 'white'\n    context.lineWidth = 1.5 * scale\n    context.stroke()\n    context.closePath()\n\n    context.restore()\n  }\n\n  // eslint-disable-next-line max-params\n  function drawImage(\n    srcLeft: number,\n    srcTop: number,\n    srcWidth: number,\n    srcHeight: number,\n    destLeft: number,\n    destTop: number,\n    destWidth: number,\n    destHeight: number,\n  ) {\n    context.save()\n    context.drawImage(\n      image,\n      srcLeft,\n      srcTop,\n      srcWidth,\n      srcHeight,\n      destLeft,\n      destTop,\n      destWidth,\n      destHeight,\n    )\n    context.restore()\n  }\n\n  function drawHole() {\n    const src = imageRect.multiply(hotspot)\n\n    const dest = imageRect.shrink(margin).multiply(hotspot)\n\n    drawImage(\n      src.left,\n      src.top,\n      src.width,\n      src.height,\n      dest.left,\n      dest.top,\n      dest.width,\n      dest.height,\n    )\n  }\n\n  function drawBackdrop() {\n    const src = imageRect.cropRelative(crop)\n\n    const dest = imageRect.shrink(margin).cropRelative(crop)\n\n    context.save()\n    drawImage(\n      src.left,\n      src.top,\n      src.width,\n      src.height,\n      dest.left,\n      dest.top,\n      dest.width,\n      dest.height,\n    )\n    context.globalAlpha = 0.5\n    context.fillStyle = 'black'\n    context.fillRect(dest.left, dest.top, dest.width, dest.height)\n    context.restore()\n  }\n\n  function drawDragHandle(radians: number) {\n    context.save()\n\n    const radius = HOTSPOT_HANDLE_SIZE * scale\n    const dest = imageRect.shrink(margin).multiply(hotspot)\n\n    const point = utils2d.getPointAtCircumference(radians, dest)\n\n    context.beginPath()\n    context.arc(point.x, point.y, radius, 0, 2 * Math.PI, false)\n    context.fillStyle = 'rgb(255,255,255)'\n    context.fill()\n    context.closePath()\n    context.restore()\n\n    context.beginPath()\n    context.arc(point.x, point.y, radius, 0, 2 * Math.PI, false)\n    context.strokeStyle = 'rgb(0, 0, 0)'\n    context.lineWidth = 0.5 * scale\n    context.stroke()\n    context.closePath()\n  }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction paintPointerPosition({\n  context,\n  pointerPosition,\n  scale,\n}: {\n  context: CanvasRenderingContext2D\n  pointerPosition: Coordinate | null\n  scale: number\n}): void {\n  if (!pointerPosition) {\n    return\n  }\n\n  const {x, y} = pointerPosition\n  context.beginPath()\n  context.arc(x, y, 14 * scale, 0, 2 * Math.PI, false)\n  context.fillStyle = 'lightblue'\n  context.fill()\n  context.restore()\n}\n\nfunction printGuidelines({\n  context,\n  hotspotRect,\n  image,\n  MARGIN_PX,\n  scale,\n}: {\n  context: CanvasRenderingContext2D\n  hotspotRect: Rect\n  image: HTMLCanvasElement\n  MARGIN_PX: number\n  scale: number\n}): void {\n  context.save()\n\n  const margin = MARGIN_PX * scale\n\n  // IE 10 doesn't support context.setLineDash\n  if (context.setLineDash) {\n    context.setLineDash([2 * scale, 2 * scale])\n  }\n  context.lineWidth = 0.5 * scale\n\n  context.strokeStyle = 'rgba(200, 200, 200, 0.5)'\n\n  // --- center line x\n  vline(hotspotRect.center.x)\n  // --- center line y\n  hline(hotspotRect.center.y)\n\n  context.strokeStyle = 'rgba(150, 150, 150, 0.5)'\n  // --- line top\n  hline(hotspotRect.top)\n\n  // --- line bottom\n  hline(hotspotRect.bottom)\n\n  // --- line left\n  vline(hotspotRect.left)\n  // --- line right\n  vline(hotspotRect.right)\n\n  context.restore()\n\n  function vline(x: number) {\n    line(x, margin, x, image.height - margin)\n  }\n\n  function hline(y: number) {\n    line(margin, y, image.width - margin, y)\n  }\n\n  function line(x1: number, y1: number, x2: number, y2: number) {\n    context.beginPath()\n    context.moveTo(x1, y1)\n    context.lineTo(x2, y2)\n    context.stroke()\n    context.closePath()\n  }\n}\n\nfunction paintCropBorder({\n  context,\n  cropRect,\n}: {\n  context: CanvasRenderingContext2D\n  cropRect: Rect\n}): void {\n  context.save()\n  context.beginPath()\n  context.fillStyle = 'rgba(66, 66, 66, 0.9)'\n  context.lineWidth = 1\n  context.rect(cropRect.left, cropRect.top, cropRect.width, cropRect.height)\n  context.stroke()\n  context.closePath()\n  context.restore()\n}\n\nfunction highlightCropHandles({\n  context,\n  cropHandles,\n  cropping,\n  opacity,\n}: {\n  context: CanvasRenderingContext2D\n  cropHandles: CropHandles\n  cropping: keyof CropHandles | false\n  opacity: number\n}): void {\n  context.save()\n\n  //context.globalCompositeOperation = \"difference\";\n\n  cropHandleKeys.forEach((handle) => {\n    context.fillStyle =\n      cropping === handle\n        ? `rgba(202, 54, 53, ${opacity})`\n        : `rgba(230, 230, 230, ${opacity + 0.4})`\n    const {left, top, height, width} = cropHandles[handle]\n    context.fillRect(left, top, width, height)\n    context.beginPath()\n    context.fillStyle = `rgba(66, 66, 66, ${opacity})`\n    context.rect(left, top, width, height)\n    context.closePath()\n    context.stroke()\n  })\n  context.restore()\n}\n\n/** @internal */\nexport const cropHandleKeys: (keyof CropHandles)[] = [\n  'left',\n  'right',\n  'top',\n  'topLeft',\n  'topRight',\n  'bottom',\n  'bottomLeft',\n  'bottomRight',\n]\n\n/** @internal */\nexport function paint({\n  clampedValue,\n  context,\n  cropHandles,\n  cropping,\n  cropRect,\n  HOTSPOT_HANDLE_SIZE,\n  hotspotRect,\n  image,\n  MARGIN_PX,\n  pointerPosition,\n  ratio,\n  readOnly,\n  scale,\n}: {\n  clampedValue: {crop: Rect; hotspot: Rect}\n  context: CanvasRenderingContext2D\n  cropHandles: CropHandles\n  cropping: keyof CropHandles | false\n  cropRect: Rect\n  HOTSPOT_HANDLE_SIZE: number\n  hotspotRect: Rect\n  image: HTMLCanvasElement\n  MARGIN_PX: number\n  pointerPosition: Coordinate | null\n  ratio: number\n  readOnly: boolean\n  scale: number\n}): void {\n  context.save()\n\n  context.scale(ratio, ratio)\n\n  const opacity = !readOnly && pointerPosition ? 0.8 : 0.2\n\n  paintBackground({context, image, MARGIN_PX, scale})\n  paintHotspot({\n    clampedValue,\n    context,\n    HOTSPOT_HANDLE_SIZE,\n    image,\n    MARGIN_PX,\n    opacity,\n    readOnly,\n    scale,\n  })\n  printGuidelines({context, hotspotRect, image, MARGIN_PX, scale})\n  paintCropBorder({context, cropRect})\n\n  if (!readOnly) {\n    highlightCropHandles({context, cropHandles, cropping, opacity})\n  }\n\n  // paintPointerPosition({context, pointerPosition, scale})\n\n  context.restore()\n}\n","import {styled} from 'styled-components'\n\nexport const RootContainer = styled.div`\n  width: 100%;\n  height: 100%;\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n`\n","import {useEffect, useMemo, useState} from 'react'\n\nimport {resizeObserver} from '../../../../../util/resizeObserver'\nimport {type Dimensions} from './types'\n\n/**\n * Sets up a Resize Observer in such a way that it can be used in a React Class component\n * @internal\n */\nexport function useActualCanvasSizeObserver(): [\n  Dimensions,\n  React.Dispatch<React.SetStateAction<HTMLCanvasElement | null>>,\n] {\n  const [canvas, setCanvas] = useState<HTMLCanvasElement | null>(null)\n  const [height, setHeight] = useState(0)\n  const [width, setWidth] = useState(0)\n  const size = useMemo(() => ({height, width}), [height, width])\n\n  useEffect(() => {\n    if (!canvas) {\n      return undefined\n    }\n\n    setHeight(canvas.clientHeight)\n    setWidth(canvas.clientWidth)\n    resizeObserver.observe(canvas, (entry) => {\n      setHeight(Math.round(entry.contentRect.height))\n      setWidth(Math.round(entry.contentRect.width))\n    })\n    return () => {\n      resizeObserver.unobserve(canvas)\n    }\n  }, [canvas])\n\n  return [size, setCanvas]\n}\n","import {memo, type PointerEvent, PureComponent, useMemo} from 'react'\nimport {useDevicePixelRatio} from 'use-device-pixel-ratio'\n\nimport {Rect} from './2d/shapes'\nimport * as utils2d from './2d/utils'\nimport {DEFAULT_CROP, DEFAULT_HOTSPOT} from './constants'\nimport * as cursors from './cursors'\nimport {DragAwareCanvas} from './DragAwareCanvas'\nimport {cropHandleKeys, paint} from './draw'\nimport {RootContainer} from './ToolCanvas.styles'\nimport {\n  type Coordinate,\n  type Crop,\n  type CropAndHotspot,\n  type CropHandles,\n  type Dimensions,\n  type Hotspot,\n  type Offsets,\n  type ToolCanvasProps,\n} from './types'\nimport {useActualCanvasSizeObserver} from './useActualCanvasSizeObserver'\n\ninterface ToolCanvasState {\n  cropping: keyof CropHandles | false\n  resizing: boolean\n  moving: boolean\n  cropMoving: boolean\n  pointerPosition: Coordinate | null\n}\n\n// The margin available in all directions for drawing the crop tool\nconst MARGIN_PX = 8\nconst CROP_HANDLE_SIZE = 12\nconst HOTSPOT_HANDLE_SIZE = 10\n\nfunction normalizeRect(rect: Rect) {\n  const flippedY = rect.top > rect.bottom\n  const flippedX = rect.left > rect.right\n  return {\n    top: flippedY ? rect.bottom : rect.top,\n    bottom: flippedY ? rect.top : rect.bottom,\n    left: flippedX ? rect.right : rect.left,\n    right: flippedX ? rect.left : rect.right,\n  }\n}\n\nfunction checkCropBoundaries(value: Partial<CropAndHotspot>, delta: Offsets) {\n  // Make the experience a little better. Still offsets when dragging back from outside\n  if (\n    !value ||\n    !value.crop ||\n    value.crop.top + delta.top < 0 ||\n    value.crop.left + delta.left < 0 ||\n    value.crop.right + delta.right < 0 ||\n    value.crop.bottom + delta.bottom < 0\n  ) {\n    return false\n  }\n  return true\n}\n\nfunction limitToBoundaries(value: Partial<CropAndHotspot>, delta: Offsets) {\n  const {top, right, bottom, left} = value.crop || DEFAULT_CROP\n\n  const newValue = {\n    hotspot: value.hotspot,\n    crop: {\n      top: top + (delta.top || 0) > 0 ? top : 0,\n      right: right + (delta.right || 0) > 0 ? right : 0,\n      bottom: bottom + (delta.bottom || 0) > 0 ? bottom : 0,\n      left: left + (delta.left || 0) > 0 ? left : 0,\n    },\n  }\n\n  const newDelta = {\n    top: top + (delta.top || 0) > 0 ? delta.top || 0 : 0,\n    right: right + (delta.right || 0) > 0 ? delta.right || 0 : 0,\n    bottom: bottom + (delta.bottom || 0) > 0 ? delta.bottom || 0 : 0,\n    left: left + (delta.left || 0) > 0 ? delta.left || 0 : 0,\n  }\n\n  return {value: newValue, delta: newDelta}\n}\n\nfunction getCropCursorForHandle(handle: keyof CropHandles | boolean) {\n  switch (handle) {\n    case 'left':\n    case 'right':\n      return 'col-resize'\n\n    case 'top':\n    case 'bottom':\n      return 'row-resize'\n\n    case 'topRight':\n    case 'bottomLeft':\n      return 'nesw-resize'\n\n    case 'topLeft':\n    case 'bottomRight':\n      return 'nwse-resize'\n    default:\n      return null\n  }\n}\n\nfunction ToolCanvasComponent(props: ToolCanvasProps) {\n  const {image, readOnly, onChange, onChangeEnd, value} = props\n\n  const ratio = useDevicePixelRatio()\n  const [actualSize, setCanvasObserver] = useActualCanvasSizeObserver()\n  const scale = useMemo(() => image.width / actualSize.width, [actualSize.width, image.width])\n  const hotspotRect = useMemo(() => {\n    const hotspot: Hotspot = value.hotspot || DEFAULT_HOTSPOT\n    const rect = new Rect().setSize(hotspot.width, hotspot.height).setCenter(hotspot.x, hotspot.y)\n\n    return new Rect()\n      .setSize(image.width, image.height)\n      .shrink(MARGIN_PX * scale)\n      .multiply(rect)\n  }, [image.height, image.width, scale, value.hotspot])\n  const cropRect = useMemo(() => {\n    return new Rect()\n      .setSize(image.width, image.height)\n      .shrink(MARGIN_PX * scale)\n      .cropRelative(Rect.fromEdges(value.crop || DEFAULT_CROP).clamp(new Rect(0, 0, 1, 1)))\n  }, [image.height, image.width, scale, value.crop])\n  const cropHandles = useMemo(() => {\n    const inner = cropRect\n\n    const handleSize = CROP_HANDLE_SIZE * scale\n\n    const halfCropHandleSize = handleSize / 2\n\n    const cropHandle = new Rect(0, 0, handleSize, handleSize)\n    return {\n      left: cropHandle.setTopLeft(\n        inner.left - halfCropHandleSize,\n        inner.center.y - halfCropHandleSize,\n      ),\n      right: cropHandle.setTopLeft(\n        inner.right - halfCropHandleSize,\n        inner.center.y - halfCropHandleSize,\n      ),\n\n      top: cropHandle.setTopLeft(\n        inner.center.x - halfCropHandleSize,\n        inner.top - halfCropHandleSize,\n      ),\n      topLeft: cropHandle.setTopLeft(\n        inner.left - halfCropHandleSize,\n        inner.top - halfCropHandleSize,\n      ),\n      topRight: cropHandle.setTopLeft(\n        inner.right - halfCropHandleSize,\n        inner.top - halfCropHandleSize,\n      ),\n\n      bottom: cropHandle.setTopLeft(\n        inner.center.x - halfCropHandleSize,\n        inner.bottom - halfCropHandleSize,\n      ),\n      bottomLeft: cropHandle.setTopLeft(\n        inner.left - halfCropHandleSize,\n        inner.bottom - halfCropHandleSize,\n      ),\n      bottomRight: cropHandle.setTopLeft(\n        inner.right - halfCropHandleSize,\n        inner.bottom - halfCropHandleSize,\n      ),\n    }\n  }, [cropRect, scale])\n  const clampedValue = useMemo(() => {\n    const crop = Rect.fromEdges(value.crop || DEFAULT_CROP).clamp(new Rect(0, 0, 1, 1))\n\n    const hotspot = value.hotspot || DEFAULT_HOTSPOT\n    // eslint-disable-next-line @typescript-eslint/no-shadow\n    const hotspotRect = new Rect(0, 0, 1, 1)\n      .setSize(hotspot.width, hotspot.height)\n      .setCenter(hotspot.x, hotspot.y)\n      .clamp(crop)\n\n    return {crop: crop, hotspot: hotspotRect}\n  }, [value.crop, value.hotspot])\n\n  return (\n    <ToolCanvasLegacy\n      actualSize={actualSize}\n      hotspotRect={hotspotRect}\n      cropRect={cropRect}\n      cropHandles={cropHandles}\n      clampedValue={clampedValue}\n      image={image}\n      onChange={onChange}\n      onChangeEnd={onChangeEnd}\n      ratio={ratio}\n      readOnly={readOnly}\n      scale={scale}\n      setCanvasObserver={setCanvasObserver}\n      value={value}\n    />\n  )\n}\nexport const ToolCanvas = memo(ToolCanvasComponent)\n\nclass ToolCanvasLegacy extends PureComponent<\n  ToolCanvasProps & {\n    ratio: number\n    actualSize: Dimensions\n    scale: number\n    setCanvasObserver: React.Dispatch<React.SetStateAction<HTMLCanvasElement | null>>\n    hotspotRect: Rect\n    cropRect: Rect\n    cropHandles: CropHandles\n    clampedValue: {crop: Rect; hotspot: Rect}\n  },\n  ToolCanvasState\n> {\n  state: ToolCanvasState = {\n    cropping: false,\n    cropMoving: false,\n    moving: false,\n    resizing: false,\n    pointerPosition: null,\n  }\n\n  canvas?: HTMLCanvasElement\n\n  getActiveCropHandleFor({x, y}: Coordinate) {\n    const cropHandles = this.props.cropHandles\n    for (const position of cropHandleKeys) {\n      if (utils2d.isPointInRect({x, y}, cropHandles[position])) {\n        return position\n      }\n    }\n    return false\n  }\n\n  emitMove(pos: Coordinate) {\n    const {image, value, onChange} = this.props\n    const scale = this.props.scale\n    const delta = {\n      x: (pos.x * scale) / image.width,\n      y: (pos.y * scale) / image.height,\n    }\n\n    onChange(applyHotspotMoveBy(value, delta))\n  }\n\n  emitCropMove(pos: Coordinate) {\n    const {image, onChange, value} = this.props\n    const scale = this.props.scale\n    const left = (pos.x * scale) / image.width\n    const right = (-pos.x * scale) / image.width\n    const top = (pos.y * scale) / image.height\n    const bottom = (-pos.y * scale) / image.height\n    const delta = {left, right, top, bottom}\n\n    if (checkCropBoundaries(value, delta)) {\n      onChange(applyCropMoveBy(value, delta))\n    }\n  }\n\n  emitCrop(side: string | boolean, pos: Coordinate) {\n    const {image, onChange, value} = this.props\n    const scale = this.props.scale\n    let left = 0\n    let right = 0\n    let top = 0\n    let bottom = 0\n\n    if (side == 'left' || side === 'topLeft' || side === 'bottomLeft') {\n      left = (pos.x * scale) / image.width\n    } else if (side == 'right' || side === 'topRight' || side === 'bottomRight') {\n      right = (-pos.x * scale) / image.width\n    }\n\n    if (side == 'top' || side === 'topLeft' || side === 'topRight') {\n      top = (pos.y * scale) / image.height\n    } else if (side == 'bottom' || side === 'bottomLeft' || side === 'bottomRight') {\n      bottom = (-pos.y * scale) / image.height\n    }\n\n    const delta = {left, right, top, bottom}\n    const newValue = limitToBoundaries(value, delta).value\n    const newDelta = limitToBoundaries(value, delta).delta\n\n    onChange(applyCropMoveBy(newValue, newDelta))\n  }\n\n  emitResize(pos: Coordinate) {\n    const {image, onChange, value} = this.props\n    const scale = this.props.scale\n\n    const delta = {\n      x: (pos.x * scale * 2) / image.width,\n      y: (pos.y * scale * 2) / image.height,\n    }\n    onChange(applyHotspotResizeBy(value, {height: delta.y, width: delta.x}))\n  }\n\n  getDragHandleCoords() {\n    const bbox = this.props.hotspotRect\n    const point = utils2d.getPointAtCircumference(Math.PI * 1.25, bbox)\n    return {\n      x: point.x,\n      y: point.y,\n      radius: 8 * this.props.scale,\n    }\n  }\n\n  getCursor() {\n    const {pointerPosition} = this.state\n    const {readOnly} = this.props\n    if (!pointerPosition || readOnly) {\n      return 'auto'\n    }\n\n    const activeCropArea = this.state.cropping || this.getActiveCropHandleFor(pointerPosition)\n    if (activeCropArea) {\n      return getCropCursorForHandle(activeCropArea) || 'auto'\n    }\n\n    const pointerOverDragHandle = utils2d.isPointInCircle(\n      pointerPosition,\n      this.getDragHandleCoords(),\n    )\n\n    if (this.state.resizing || pointerOverDragHandle) {\n      return 'move'\n    }\n\n    if (this.state.moving || this.state.cropMoving) {\n      return `url(${cursors.CLOSE_HAND}), move`\n    }\n\n    const pointerOverHotspot = utils2d.isPointInEllipse(pointerPosition, this.props.hotspotRect)\n    const pointerOverCropRect = utils2d.isPointInRect(pointerPosition, this.props.cropRect)\n    if (pointerOverHotspot || pointerOverCropRect) {\n      return `url(${cursors.OPEN_HAND}), move`\n    }\n\n    return 'auto'\n  }\n\n  componentDidMount() {\n    const {canvas} = this\n    if (canvas) {\n      this.draw({canvas})\n    }\n  }\n\n  componentDidUpdate() {\n    const {canvas} = this\n    if (canvas) {\n      this.draw({canvas})\n    }\n  }\n\n  draw({canvas}: {canvas: HTMLCanvasElement}) {\n    const context = canvas.getContext('2d')\n    if (!context) {\n      return\n    }\n\n    const {clampedValue, cropHandles, cropRect, hotspotRect, image, ratio, readOnly, scale} =\n      this.props\n    const {cropping, pointerPosition} = this.state\n    paint({\n      clampedValue,\n      context,\n      cropHandles,\n      cropping,\n      cropRect,\n      HOTSPOT_HANDLE_SIZE,\n      hotspotRect,\n      image,\n      MARGIN_PX,\n      pointerPosition,\n      ratio,\n      readOnly,\n      scale,\n    })\n    const currentCursor = canvas.style.cursor\n    const newCursor = this.getCursor()\n    if (currentCursor !== newCursor) {\n      canvas.style.cursor = newCursor\n    }\n  }\n\n  handleDragStart = ({x, y}: Coordinate) => {\n    const pointerPosition = {x: x * this.props.scale, y: y * this.props.scale}\n\n    const inHotspot = utils2d.isPointInEllipse(pointerPosition, this.props.hotspotRect)\n\n    const inDragHandle = utils2d.isPointInCircle(pointerPosition, this.getDragHandleCoords())\n\n    const activeCropHandle = this.getActiveCropHandleFor(pointerPosition)\n\n    const inCropRect = utils2d.isPointInRect(pointerPosition, this.props.cropRect)\n\n    if (activeCropHandle) {\n      this.setState({cropping: activeCropHandle})\n    } else if (inDragHandle) {\n      this.setState({resizing: true})\n    } else if (inHotspot) {\n      this.setState({moving: true})\n    } else if (inCropRect) {\n      this.setState({cropMoving: true})\n    }\n  }\n\n  handleDrag = (pos: Coordinate) => {\n    if (this.state.cropping) {\n      this.emitCrop(this.state.cropping, pos)\n    } else if (this.state.cropMoving) {\n      this.emitCropMove(pos)\n    } else if (this.state.moving) {\n      this.emitMove(pos)\n    } else if (this.state.resizing) {\n      this.emitResize(pos)\n    }\n  }\n\n  handleDragEnd = () => {\n    const {onChange, onChangeEnd} = this.props\n    this.setState({moving: false, resizing: false, cropping: false, cropMoving: false})\n    const {hotspot, crop: rawCrop} = this.props.clampedValue\n\n    const crop = normalizeRect(rawCrop)\n\n    const finalValue = {\n      crop: {\n        top: crop.top,\n        bottom: 1 - crop.bottom,\n        left: crop.left,\n        right: 1 - crop.right,\n      },\n      hotspot: {\n        x: hotspot.center.x,\n        y: hotspot.center.y,\n        height: Math.abs(hotspot.height),\n        width: Math.abs(hotspot.width),\n      },\n    }\n    onChange(finalValue)\n    if (onChangeEnd) {\n      onChangeEnd(finalValue)\n    }\n  }\n\n  handlePointerOut = () => {\n    this.setState({pointerPosition: null})\n  }\n\n  handlePointerMove = (event: PointerEvent<HTMLCanvasElement>) => {\n    const clientRect = event.currentTarget.getBoundingClientRect()\n    this.setState({\n      pointerPosition: {\n        x: (event.clientX - clientRect.left) * this.props.scale,\n        y: (event.clientY - clientRect.top) * this.props.scale,\n      },\n    })\n  }\n\n  setCanvas = (node: HTMLCanvasElement | null) => {\n    if (node) {\n      this.canvas = node\n    }\n    this.props.setCanvasObserver(node)\n  }\n\n  render() {\n    const {image, readOnly, ratio} = this.props\n    return (\n      <RootContainer>\n        <DragAwareCanvas\n          readOnly={readOnly}\n          ref={this.setCanvas}\n          onDrag={this.handleDrag}\n          onDragStart={this.handleDragStart}\n          onDragEnd={this.handleDragEnd}\n          onPointerMove={this.handlePointerMove}\n          onPointerOut={this.handlePointerOut}\n          height={image.height * ratio}\n          width={image.width * ratio}\n        />\n      </RootContainer>\n    )\n  }\n}\n\nfunction applyHotspotMoveBy(value: Partial<CropAndHotspot>, delta: Coordinate): {hotspot: Hotspot} {\n  const currentHotspot = (value && value.hotspot) || DEFAULT_HOTSPOT\n\n  return {\n    ...value,\n    hotspot: {\n      ...currentHotspot,\n      x: currentHotspot.x + delta.x,\n      y: currentHotspot.y + delta.y,\n    },\n  }\n}\n\nfunction applyHotspotResizeBy(\n  value: Partial<CropAndHotspot>,\n  delta: Dimensions,\n): {hotspot: Hotspot} {\n  const currentHotspot = (value && value.hotspot) || DEFAULT_HOTSPOT\n  return {\n    ...value,\n    hotspot: {\n      ...currentHotspot,\n      height: currentHotspot.height + delta.height,\n      width: currentHotspot.width + delta.width,\n    },\n  }\n}\n\nfunction applyCropMoveBy(value: Partial<CropAndHotspot>, delta: Offsets): {crop: Crop} {\n  const currentCrop = (value && value.crop) || DEFAULT_CROP\n  return {\n    ...value,\n    crop: {\n      left: currentCrop.left + (delta.left || 0),\n      right: currentCrop.right + (delta.right || 0),\n      top: currentCrop.top + (delta.top || 0),\n      bottom: currentCrop.bottom + (delta.bottom || 0),\n    },\n  }\n}\n","import {LoadingBlock} from '../../../../../components/loadingBlock'\nimport {ImageLoader} from './ImageLoader'\nimport {Resize} from './Resize'\nimport {ToolCanvas} from './ToolCanvas'\nimport {type ToolCanvasProps} from './types'\n\nexport interface ImageToolProps extends Omit<ToolCanvasProps, 'image'> {\n  image?: HTMLCanvasElement\n  src: string\n}\n\nexport function ImageTool(props: ImageToolProps) {\n  return (\n    <ImageLoader src={props.src}>\n      {({isLoading, image, error}) => {\n        if (isLoading) {\n          return <LoadingBlock showText />\n        }\n        if (error) {\n          return <div>{error.message}</div>\n        }\n        if (image) {\n          return (\n            <Resize image={image} maxHeight={ImageTool.maxHeight} maxWidth={ImageTool.maxWidth}>\n              {(canvas) => <ToolCanvas image={canvas} {...props} />}\n            </Resize>\n          )\n        }\n        return null\n      }}\n    </ImageLoader>\n  )\n}\n\nImageTool.maxHeight = 500\nImageTool.maxWidth = 1000\n","import {useEffect, useState} from 'react'\nimport {Observable} from 'rxjs'\n\n// http://probablyprogramming.com/2009/03/15/the-tiniest-gif-ever\nconst PROBABLY_THE_TINIEST_GIF_EVER = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs='\n\nfunction isBlob(src: string) {\n  return src.startsWith('blob:')\n}\n\nexport function loadImage(src: string): Observable<HTMLImageElement> {\n  return new Observable((subscriber) => {\n    const image = document.createElement('img')\n\n    let completed = false\n    const onload = () => {\n      completed = true\n      subscriber.next(image)\n      subscriber.complete()\n    }\n\n    const onerror = () => {\n      completed = true\n      subscriber.error(new Error(`Could not load image from ${isBlob(src) ? 'blob' : src}`))\n    }\n\n    image.onload = onload\n    image.onerror = onerror\n    image.src = src\n\n    return () => {\n      image.onload = null\n      image.onerror = null\n\n      if (!completed) {\n        // if we unsubscribe before it's loaded this will cancel the image loading\n        image.src = PROBABLY_THE_TINIEST_GIF_EVER\n      }\n    }\n  })\n}\n\ntype ImageLoadState = {\n  isLoading: boolean\n  image?: HTMLImageElement\n  error?: Error\n}\n\nconst INITIAL_STATE = {isLoading: true}\n\nexport function useLoadImage(url: string): ImageLoadState {\n  const [state, setState] = useState<ImageLoadState>(INITIAL_STATE)\n\n  useEffect(() => {\n    setState(INITIAL_STATE)\n    const subscription = loadImage(url)\n      // .pipe(delay(2000))\n      .subscribe({\n        error: (err) => {\n          setState({isLoading: false, error: err})\n        },\n        next: (image) => {\n          setState({image, isLoading: false})\n        },\n      })\n    return () => {\n      subscription.unsubscribe()\n    }\n  }, [url])\n\n  return state\n}\n","import {type Image, type ImageSchemaType} from '@sanity/types'\nimport {Box, Card, Flex, Grid, Heading, Stack, Text} from '@sanity/ui'\nimport {type ReactNode, useCallback, useEffect, useMemo, useState} from 'react'\nimport {styled} from 'styled-components'\n\nimport {ChangeIndicator} from '../../../../changeIndicators'\nimport {LoadingBlock} from '../../../../components/loadingBlock'\nimport {Translate, useTranslation} from '../../../../i18n'\nimport {EMPTY_ARRAY} from '../../../../util'\nimport {Details} from '../../../components/Details'\nimport {FormField} from '../../../components/formField'\nimport {useDidUpdate} from '../../../hooks/useDidUpdate'\nimport {set} from '../../../patch'\nimport {type ObjectInputProps} from '../../../types'\nimport {RatioBox} from '../common/RatioBox'\nimport {DEFAULT_CROP, DEFAULT_HOTSPOT, HotspotImage, ImageTool} from './imagetool'\nimport {useLoadImage} from './useLoadImage'\n\nexport interface ImageToolInputProps\n  extends Omit<ObjectInputProps<Image, ImageSchemaType>, 'markers' | 'renderDefault'> {\n  imageUrl: string\n}\n\nconst HOTSPOT_PATH = ['hotspot']\n\nconst PREVIEW_ASPECT_RATIOS = [\n  ['3:4', 3 / 4],\n  ['Square', 1 / 1],\n  ['16:9', 16 / 9],\n  ['Panorama', 4 / 1],\n] as const\n\nconst DEFAULT_VALUE: Partial<Image> = {\n  crop: DEFAULT_CROP,\n  hotspot: DEFAULT_HOTSPOT,\n}\n\nconst Placeholder = styled.div`\n  min-height: 6em;\n`\n\nfunction LoadStatus(props: {children: ReactNode}) {\n  return (\n    <Flex align=\"center\" justify=\"center\" padding={4} style={{overflowWrap: 'break-word'}}>\n      {props.children}\n    </Flex>\n  )\n}\n\nexport function ImageToolInput(props: ImageToolInputProps) {\n  const {\n    imageUrl,\n    value,\n    changed,\n    level,\n    path,\n    focusPath = EMPTY_ARRAY,\n    presence,\n    onChange,\n    schemaType,\n    onPathFocus,\n    readOnly,\n    elementProps,\n  } = props\n\n  const [localValue, setLocalValue] = useState(value || DEFAULT_VALUE)\n\n  const {image, isLoading: isImageLoading, error: imageLoadError} = useLoadImage(imageUrl)\n\n  const handleFocus = useCallback(() => {\n    onPathFocus(HOTSPOT_PATH)\n  }, [onPathFocus])\n\n  useEffect(() => {\n    setLocalValue(value || DEFAULT_VALUE)\n  }, [value])\n\n  const hasFocus = focusPath[0] === 'hotspot'\n\n  useDidUpdate(hasFocus, (hadFocus) => {\n    if (!hadFocus && hasFocus) {\n      elementProps.ref.current?.focus()\n    }\n  })\n\n  const handleChangeEnd = useCallback(\n    (finalValue: any) => {\n      if (readOnly) {\n        return\n      }\n      // For backwards compatibility, where hotspot/crop might not have a named type yet\n      const cropField = schemaType.fields.find(\n        (field) => field.name === 'crop' && field.type.name !== 'object',\n      )\n\n      const hotspotField = schemaType.fields.find(\n        (field) => field.type.name !== 'object' && field.name === 'hotspot',\n      )\n\n      // Note: when either hotspot or crop change we fill in the default if the other is missing\n      // (we can't have one without the other)\n      const crop = cropField\n        ? {_type: cropField.type.name, ...(finalValue.crop || DEFAULT_CROP)}\n        : finalValue.crop\n\n      const hotspot = hotspotField\n        ? {_type: hotspotField.type.name, ...(finalValue.hotspot || DEFAULT_HOTSPOT)}\n        : finalValue.hotspot\n\n      onChange([set(crop, ['crop']), set(hotspot, ['hotspot'])])\n    },\n    [onChange, readOnly, schemaType.fields],\n  )\n\n  const isSvg = useMemo(() => value?.asset?._ref?.split('-').at(-1) === 'svg', [value?.asset?._ref])\n\n  const {t} = useTranslation()\n  return (\n    <FormField\n      title={t('inputs.imagetool.title')}\n      level={level}\n      description={t('inputs.imagetool.description')}\n      deprecated={schemaType.deprecated}\n      __unstable_presence={presence}\n    >\n      {isSvg ? (\n        <>\n          <Card padding={3} marginY={3} tone=\"caution\" radius={2}>\n            <Stack space={4}>\n              <Text size={1}>{t('inputs.imagetool.vector-warning.title')}</Text>\n              <Details title={t('inputs.imagetool.vector-warning.expand-developer-info')}>\n                <Text size={1}>\n                  <Translate\n                    t={t}\n                    i18nKey=\"inputs.imagetool.vector-warning.developer-info\"\n                    components={{\n                      ImageUrlDocumentationLink: ({children}) => (\n                        <a href=\"https://www.sanity.io/docs/image-urls#fm-048ba39d9e88\">\n                          {children}\n                        </a>\n                      ),\n                      ImageUrlPackageDocumentationLink: ({children}) => (\n                        <a href=\"https://www.sanity.io/docs/image-urls#fm-048ba39d9e88\">\n                          <code>{children}</code>\n                        </a>\n                      ),\n                    }}\n                  />\n                </Text>\n              </Details>\n            </Stack>\n          </Card>\n        </>\n      ) : null}\n\n      <div>\n        <Card\n          __unstable_checkered\n          __unstable_focusRing\n          tabIndex={0}\n          ref={elementProps.ref}\n          onFocus={handleFocus}\n        >\n          <ChangeIndicator\n            path={path.concat(HOTSPOT_PATH)}\n            hasFocus={focusPath[0] === 'hotspot'}\n            isChanged={changed}\n          >\n            <RatioBox ratio={3 / 2}>\n              {(isImageLoading || imageLoadError) && (\n                <LoadStatus>\n                  {imageLoadError ? (\n                    <Card padding={4} radius={2} tone=\"critical\" border>\n                      <Text>\n                        {t('inputs.imagetool.load-error', {\n                          errorMessage: imageLoadError.message,\n                        })}\n                      </Text>\n                    </Card>\n                  ) : (\n                    <LoadingBlock showText />\n                  )}\n                </LoadStatus>\n              )}\n              {!isImageLoading && image && (\n                <Box margin={1}>\n                  <ImageTool\n                    value={localValue}\n                    src={image.src}\n                    readOnly={Boolean(readOnly)}\n                    onChangeEnd={handleChangeEnd}\n                    onChange={setLocalValue}\n                  />\n                </Box>\n              )}\n            </RatioBox>\n          </ChangeIndicator>\n        </Card>\n        <Box marginTop={3}>\n          <Grid columns={PREVIEW_ASPECT_RATIOS.length} gap={1}>\n            {PREVIEW_ASPECT_RATIOS.map(([title, ratio]) => (\n              <div key={ratio}>\n                <Heading as=\"h4\" size={0}>\n                  {title}\n                </Heading>\n                <Box marginTop={2}>\n                  <RatioBox ratio={ratio}>\n                    <Card __unstable_checkered>\n                      {!isImageLoading && image ? (\n                        <HotspotImage\n                          aspectRatio={ratio}\n                          src={image.src}\n                          srcAspectRatio={image.width / image.height}\n                          hotspot={localValue.hotspot || DEFAULT_HOTSPOT}\n                          crop={localValue.crop || DEFAULT_CROP}\n                        />\n                      ) : (\n                        <Placeholder />\n                      )}\n                    </Card>\n                  </RatioBox>\n                </Box>\n              </div>\n            ))}\n          </Grid>\n        </Box>\n      </div>\n    </FormField>\n  )\n}\n","import {Stack} from '@sanity/ui'\nimport {memo, useMemo} from 'react'\n\nimport {Dialog} from '../../../../../ui-components'\nimport {type FIXME} from '../../../../FIXME'\nimport {useTranslation} from '../../../../i18n'\nimport {PresenceOverlay} from '../../../../presence'\nimport {type InputProps} from '../../../types'\nimport {ImageToolInput} from '../ImageToolInput'\nimport {type BaseImageInputProps} from './types'\n\nexport const ImageInputHotspotInput = memo(function ImageInputHotspotInputComponent(props: {\n  handleCloseDialog: () => void\n  inputProps: Omit<InputProps, 'renderDefault'>\n  imageInputProps: BaseImageInputProps\n  isImageToolEnabled: boolean\n}) {\n  const {handleCloseDialog, inputProps, imageInputProps, isImageToolEnabled} = props\n  const {t} = useTranslation()\n  const {changed, id, imageUrlBuilder, value} = imageInputProps\n\n  const withImageTool = isImageToolEnabled && value && value.asset\n  const imageUrl = useMemo(\n    () => (value?.asset ? imageUrlBuilder.image(value.asset).url() : ''),\n    [imageUrlBuilder, value?.asset],\n  )\n\n  return (\n    <Dialog\n      __unstable_autoFocus={false}\n      header={t('inputs.image.hotspot-dialog.title')}\n      id={`${id}_dialog`}\n      onClickOutside={handleCloseDialog}\n      onClose={handleCloseDialog}\n      width={1}\n    >\n      <PresenceOverlay>\n        <Stack space={5}>\n          {withImageTool && value?.asset && (\n            <ImageToolInput\n              {...imageInputProps}\n              imageUrl={imageUrl}\n              value={value as FIXME}\n              presence={inputProps.presence}\n              changed={changed}\n            />\n          )}\n        </Stack>\n      </PresenceOverlay>\n    </Dialog>\n  )\n})\n","import {AccessDeniedIcon, ImageIcon, ReadOnlyIcon} from '@sanity/icons'\nimport {Box, type Card, type CardTone, Heading, Text} from '@sanity/ui'\nimport {type ComponentProps, type ReactNode, useCallback, useEffect, useState} from 'react'\n\nimport {LoadingBlock} from '../../../../components/loadingBlock'\nimport {useTranslation} from '../../../../i18n'\nimport {FlexOverlay, Overlay, RatioBox} from './ImagePreview.styled'\n\ninterface Props {\n  alt: string\n  drag: boolean\n  isRejected: boolean\n  readOnly?: boolean | null\n  src: string\n}\n\nexport function ImagePreview(props: ComponentProps<typeof Card> & Props) {\n  const {drag, readOnly, isRejected, src, ...rest} = props\n  const [isLoaded, setLoaded] = useState(false)\n  const acceptTone = isRejected || readOnly ? 'critical' : 'primary'\n  const tone = drag ? acceptTone : 'default'\n\n  useEffect(() => {\n    /* set for when the src is being switched when the image input already had a image src\n    - meaning it already had an asset */\n    setLoaded(false)\n  }, [src])\n\n  const onLoadChange = useCallback(() => {\n    setLoaded(true)\n  }, [])\n\n  const {t} = useTranslation()\n\n  return (\n    <RatioBox {...rest} tone=\"transparent\">\n      {!isLoaded && <OverlayComponent cardTone=\"transparent\" content={<LoadingBlock showText />} />}\n      <img\n        src={src}\n        data-testid=\"hotspot-image-input\"\n        alt={props.alt}\n        onLoad={onLoadChange}\n        referrerPolicy=\"strict-origin-when-cross-origin\"\n      />\n      {drag && (\n        <OverlayComponent\n          cardTone={tone}\n          content={\n            <>\n              <Box marginBottom={3}>\n                <Heading>\n                  <HoverIcon isRejected={isRejected} readOnly={readOnly} />\n                </Heading>\n              </Box>\n              <Text size={1}>{t(getHoverTextTranslationKey({isRejected, readOnly}))}</Text>\n            </>\n          }\n        />\n      )}\n    </RatioBox>\n  )\n}\n\nfunction HoverIcon({isRejected, readOnly}: {isRejected: boolean; readOnly?: boolean}) {\n  if (isRejected) {\n    return <AccessDeniedIcon />\n  }\n  if (readOnly) {\n    return <ReadOnlyIcon />\n  }\n  return <ImageIcon />\n}\n\nfunction getHoverTextTranslationKey({\n  isRejected,\n  readOnly,\n}: {\n  isRejected: boolean\n  readOnly?: boolean\n}) {\n  if (isRejected) {\n    return 'inputs.image.drag-overlay.this-field-is-read-only'\n  }\n  return readOnly\n    ? 'inputs.image.drag-overlay.cannot-upload-here'\n    : 'inputs.image.drag-overlay.drop-to-upload-image'\n}\n\nfunction OverlayComponent({\n  cardTone,\n  content,\n}: {\n  cardTone: Exclude<CardTone, 'inherit'>\n  content: ReactNode\n}) {\n  return (\n    <Overlay padding={3} tone={cardTone}>\n      <FlexOverlay direction=\"column\" align=\"center\" justify=\"center\">\n        {content}\n      </FlexOverlay>\n    </Overlay>\n  )\n}\n","import {type ImageSchemaType} from '@sanity/types'\nimport {memo, useMemo} from 'react'\n\nimport {useTranslation} from '../../../../i18n'\nimport {type UploaderResolver} from '../../../studio/uploads/types'\nimport {type ImageUrlBuilder} from '../types'\nimport {ImagePreview} from './ImagePreview'\nimport {type BaseImageInputValue, type FileInfo} from './types'\nimport {usePreviewImageSource} from './usePreviewImageSource'\n\nexport const ImageInputPreview = memo(function ImageInputPreviewComponent(props: {\n  directUploads: boolean | undefined\n  handleOpenDialog: () => void\n  hoveringFiles: FileInfo[]\n  imageUrlBuilder: ImageUrlBuilder\n  readOnly: boolean | undefined\n  resolveUploader: UploaderResolver\n  schemaType: ImageSchemaType\n  value: BaseImageInputValue\n}) {\n  const {\n    directUploads,\n    handleOpenDialog,\n    hoveringFiles,\n    imageUrlBuilder,\n    readOnly,\n    resolveUploader,\n    schemaType,\n    value,\n  } = props\n\n  return (\n    <RenderImageInputPreview\n      directUploads={directUploads}\n      handleOpenDialog={handleOpenDialog}\n      hoveringFiles={hoveringFiles}\n      imageUrlBuilder={imageUrlBuilder}\n      readOnly={readOnly}\n      resolveUploader={resolveUploader}\n      schemaType={schemaType}\n      value={value}\n    />\n  )\n})\n\nfunction RenderImageInputPreview(props: {\n  directUploads: boolean | undefined\n  handleOpenDialog: () => void\n  hoveringFiles: FileInfo[]\n  imageUrlBuilder: ImageUrlBuilder\n  readOnly: boolean | undefined\n  resolveUploader: UploaderResolver\n  schemaType: ImageSchemaType\n  value: BaseImageInputValue\n}) {\n  const {\n    directUploads,\n    handleOpenDialog,\n    hoveringFiles,\n    imageUrlBuilder,\n    readOnly,\n    resolveUploader,\n    schemaType,\n    value,\n  } = props\n\n  const {t} = useTranslation()\n  const acceptedFiles = useMemo(\n    () => hoveringFiles.filter((file) => resolveUploader(schemaType, file)),\n    [hoveringFiles, resolveUploader, schemaType],\n  )\n  const rejectedFilesCount = useMemo(\n    () => hoveringFiles.length - acceptedFiles.length,\n    [acceptedFiles, hoveringFiles],\n  )\n\n  const {url} = usePreviewImageSource({value, imageUrlBuilder})\n\n  return (\n    <ImagePreview\n      alt={t('inputs.image.preview-uploaded-image')}\n      drag={!value?._upload && hoveringFiles.length > 0}\n      isRejected={rejectedFilesCount > 0 || !directUploads}\n      onDoubleClick={handleOpenDialog}\n      readOnly={readOnly}\n      src={url}\n    />\n  )\n}\n","import {Card} from '@sanity/ui'\nimport {get} from 'lodash'\nimport {memo, useMemo} from 'react'\n\nimport {UploadPlaceholder} from '../common/UploadPlaceholder'\nimport {type BaseImageInputProps, type FileInfo} from './types'\n\nfunction ImageInputUploadPlaceholderComponent(props: {\n  directUploads: boolean | undefined\n  handleSelectFiles: (files: File[]) => void\n  hoveringFiles: FileInfo[]\n  readOnly: boolean | undefined\n  renderBrowser(): React.JSX.Element | null\n  resolveUploader: BaseImageInputProps['resolveUploader']\n  schemaType: BaseImageInputProps['schemaType']\n}) {\n  const {\n    directUploads,\n    handleSelectFiles,\n    hoveringFiles,\n    readOnly,\n    renderBrowser,\n    resolveUploader,\n    schemaType,\n  } = props\n\n  const acceptedFiles = useMemo(\n    () => hoveringFiles.filter((file) => resolveUploader(schemaType, file)),\n    [hoveringFiles, resolveUploader, schemaType],\n  )\n  const accept = useMemo(() => get(schemaType, 'options.accept', 'image/*'), [schemaType])\n\n  const rejectedFilesCount = hoveringFiles.length - acceptedFiles.length\n\n  return (\n    <div style={{padding: 1}}>\n      <Card\n        tone={readOnly ? 'transparent' : 'inherit'}\n        border\n        paddingX={3}\n        paddingY={2}\n        radius={2}\n        style={hoveringFiles.length === 0 ? {} : {borderColor: 'transparent'}}\n      >\n        <UploadPlaceholder\n          browse={renderBrowser()}\n          onUpload={handleSelectFiles}\n          readOnly={readOnly}\n          hoveringFiles={hoveringFiles}\n          acceptedFiles={acceptedFiles}\n          rejectedFilesCount={rejectedFilesCount}\n          type=\"image\"\n          accept={accept}\n          directUploads={directUploads}\n        />\n      </Card>\n    </div>\n  )\n}\nexport const ImageInputUploadPlaceholder = memo(ImageInputUploadPlaceholderComponent)\n","import {ResetIcon, WarningOutlineIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Stack, Text} from '@sanity/ui'\n\nimport {Button} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n'\n\ntype Props = {\n  onClearValue?: () => void\n}\n\nexport function InvalidImageWarning({onClearValue}: Props) {\n  const {t} = useTranslation()\n  return (\n    <Card tone=\"caution\" padding={4} border radius={2}>\n      <Flex gap={4} marginBottom={4}>\n        <Box>\n          <Text size={1}>\n            <WarningOutlineIcon />\n          </Text>\n        </Box>\n        <Stack space={3}>\n          <Text size={1} weight=\"medium\">\n            {t('inputs.image.invalid-image-warning.title')}\n          </Text>\n          <Text size={1}>{t('inputs.image.invalid-image-warning.description')}</Text>\n        </Stack>\n      </Flex>\n      <Button\n        icon={ResetIcon}\n        mode=\"ghost\"\n        onClick={onClearValue}\n        text={t('inputs.image.invalid-image-warning.reset-button.text')}\n        width=\"fill\"\n      />\n    </Card>\n  )\n}\n","import {isImageSource} from '@sanity/asset-utils'\nimport {type AssetFromSource, type AssetSource, type UploadState} from '@sanity/types'\nimport {Stack, useToast} from '@sanity/ui'\nimport {get} from 'lodash'\nimport {type FocusEvent, memo, type ReactNode, useCallback, useMemo, useRef, useState} from 'react'\nimport {type Subscription} from 'rxjs'\n\nimport {useTranslation} from '../../../../i18n'\nimport {FormInput} from '../../../components'\nimport {MemberField, MemberFieldError, MemberFieldSet} from '../../../members'\nimport {setIfMissing, unset} from '../../../patch'\nimport {type FieldMember} from '../../../store'\nimport {type Uploader, type UploadOptions} from '../../../studio/uploads/types'\nimport {type InputProps} from '../../../types'\nimport {handleSelectAssetFromSource as _handleSelectAssetFromSource} from '../common/assetSource'\nimport {UploadProgress} from '../common/UploadProgress'\nimport {ImageInputAsset} from './ImageInputAsset'\nimport {ImageInputAssetMenu} from './ImageInputAssetMenu'\nimport {ImageInputAssetSource} from './ImageInputAssetSource'\nimport {ImageInputBrowser} from './ImageInputBrowser'\nimport {ImageInputHotspotInput} from './ImageInputHotspotInput'\nimport {ImageInputPreview} from './ImageInputPreview'\nimport {ImageInputUploadPlaceholder} from './ImageInputUploadPlaceholder'\nimport {InvalidImageWarning} from './InvalidImageWarning'\nimport {type BaseImageInputProps, type BaseImageInputValue, type FileInfo} from './types'\n\nexport {BaseImageInputProps, BaseImageInputValue}\n\nfunction BaseImageInputComponent(props: BaseImageInputProps): React.JSX.Element {\n  const {\n    assetSources,\n    client,\n    directUploads,\n    elementProps,\n    focusPath,\n    id,\n    imageUrlBuilder,\n    members,\n    observeAsset,\n    onChange,\n    onPathFocus,\n    path,\n    readOnly,\n    renderAnnotation,\n    renderBlock,\n    renderField,\n    renderInlineBlock,\n    renderInput,\n    renderItem,\n    renderPreview: renderPreviewProp,\n    resolveUploader,\n    schemaType,\n    value,\n  } = props\n  const {push} = useToast()\n  const {t} = useTranslation()\n\n  const [selectedAssetSource, setSelectedAssetSource] = useState<AssetSource | null>(null)\n  const [isUploading, setIsUploading] = useState(false)\n  const [hoveringFiles, setHoveringFiles] = useState<FileInfo[]>([])\n  const [isStale, setIsStale] = useState(false)\n  const [hotspotButtonElement, setHotspotButtonElement] = useState<HTMLButtonElement | null>(null)\n  // Get the menu button element in `ImageActionsMenu` so that focus can be restored to\n  // it when closing the dialog (see `handleAssetSourceClosed`)\n  const [menuButtonElement, setMenuButtonElement] = useState<HTMLButtonElement | null>(null)\n  const [isMenuOpen, setMenuOpen] = useState(false)\n\n  const uploadSubscription = useRef<null | Subscription>(null)\n\n  const getFileTone = useCallback(() => {\n    const acceptedFiles = hoveringFiles.filter((file) => resolveUploader(schemaType, file))\n    const rejectedFilesCount = hoveringFiles.length - acceptedFiles.length\n\n    if (hoveringFiles.length > 0) {\n      if (rejectedFilesCount > 0 || !directUploads) {\n        return 'critical'\n      }\n    }\n\n    if (!value?._upload && !readOnly && hoveringFiles.length > 0) {\n      return 'primary'\n    }\n\n    if (readOnly) {\n      return 'transparent'\n    }\n\n    return value?._upload && value?.asset ? 'transparent' : 'default'\n  }, [\n    directUploads,\n    hoveringFiles,\n    readOnly,\n    resolveUploader,\n    schemaType,\n    value?._upload,\n    value?.asset,\n  ])\n  const isImageToolEnabled = useCallback(\n    () => get(schemaType, 'options.hotspot') === true,\n    [schemaType],\n  )\n  const valueIsArrayElement = useCallback(() => {\n    const parentPathSegment = path.slice(-1)[0]\n\n    // String path segment mean an object path, while a number or a\n    // keyed segment means we're a direct child of an array\n    return typeof parentPathSegment !== 'string'\n  }, [path])\n\n  const clearUploadStatus = useCallback(() => {\n    if (value?._upload) {\n      onChange(unset(['_upload']))\n    }\n  }, [onChange, value?._upload])\n  const cancelUpload = useCallback(() => {\n    if (uploadSubscription.current) {\n      uploadSubscription.current.unsubscribe()\n      clearUploadStatus()\n    }\n  }, [clearUploadStatus])\n  const uploadWith = useCallback(\n    (uploader: Uploader, file: File, assetDocumentProps: UploadOptions = {}) => {\n      const {label, title, description, creditLine, source} = assetDocumentProps\n      const options = {\n        metadata: get(schemaType, 'options.metadata'),\n        storeOriginalFilename: get(schemaType, 'options.storeOriginalFilename'),\n        label,\n        title,\n        description,\n        creditLine,\n        source,\n      }\n\n      cancelUpload()\n      setIsUploading(true)\n      onChange(setIfMissing({_type: schemaType.name}))\n      uploadSubscription.current = uploader.upload(client, file, schemaType, options).subscribe({\n        next: (uploadEvent) => {\n          if (uploadEvent.patches) {\n            onChange(uploadEvent.patches)\n          }\n        },\n        error: (err) => {\n          // eslint-disable-next-line no-console\n          console.error(err)\n          push({\n            status: 'error',\n            description: t('inputs.image.upload-error.description'),\n            title: t('inputs.image.upload-error.title'),\n          })\n\n          clearUploadStatus()\n        },\n        complete: () => {\n          onChange([unset(['hotspot']), unset(['crop']), unset(['media'])])\n          setIsUploading(false)\n          // push({\n          //   status: 'success',\n          //   title: 'Upload completed',\n          // })\n        },\n      })\n    },\n    [cancelUpload, clearUploadStatus, client, onChange, push, schemaType, t],\n  )\n  const uploadFirstAccepted = useCallback(\n    (files: File[]) => {\n      const match = files\n        .map((file) => ({file, uploader: resolveUploader(schemaType, file)}))\n        .find((result) => result.uploader)\n\n      if (match) {\n        uploadWith(match.uploader!, match.file)\n      }\n      setMenuOpen(false)\n    },\n    [resolveUploader, schemaType, uploadWith],\n  )\n\n  const handleClearField = useCallback(() => {\n    onChange([unset(['asset']), unset(['crop']), unset(['hotspot']), unset(['media'])])\n  }, [onChange])\n  const handleRemoveButtonClick = useCallback(() => {\n    // When removing the image, we should also remove any crop and hotspot\n    // _type and _key are \"meta\"-properties and are not significant unless\n    // other properties are present. Thus, we want to remove the entire\n    // \"container\" object if these are the only properties present, BUT\n    // only if we're not an array element, as removing the array element\n    // will close the selection dialog. Instead, when closing the dialog,\n    // the array logic will check for an \"empty\" value and remove it for us\n    const allKeys = Object.keys(value || {})\n    const remainingKeys = allKeys.filter(\n      (key) => !['_type', '_key', '_upload', 'asset', 'crop', 'hotspot', 'media'].includes(key),\n    )\n\n    const isEmpty = remainingKeys.length === 0\n    const removeKeys = ['asset', 'media']\n      .concat(allKeys.filter((key) => ['crop', 'hotspot', '_upload'].includes(key)))\n      .map((key) => unset([key]))\n\n    onChange(isEmpty && !valueIsArrayElement() ? unset() : removeKeys)\n  }, [onChange, value, valueIsArrayElement])\n  const handleOpenDialog = useCallback(() => {\n    onPathFocus(['hotspot'])\n  }, [onPathFocus])\n  const handleCloseDialog = useCallback(() => {\n    onPathFocus([])\n\n    // Set focus on hotspot button in `ImageActionsMenu` when closing the dialog\n    hotspotButtonElement?.focus()\n  }, [hotspotButtonElement, onPathFocus])\n  const handleSelectAssetFromSource = useCallback(\n    (assetFromSource: AssetFromSource[]) => {\n      _handleSelectAssetFromSource({\n        assetFromSource,\n        onChange,\n        type: schemaType,\n        resolveUploader,\n        uploadWith,\n        isImage: true,\n      })\n\n      setSelectedAssetSource(null)\n    },\n    [onChange, resolveUploader, schemaType, uploadWith],\n  )\n  const handleFileTargetFocus = useCallback(\n    (event: FocusEvent) => {\n      // We want to handle focus when the file target element *itself* receives\n      // focus, not when an interactive child element receives focus. Since React has decided\n      // to let focus bubble, so this workaround is needed\n      // Background: https://github.com/facebook/react/issues/6410#issuecomment-671915381\n      if (\n        event.currentTarget === event.target &&\n        event.currentTarget === elementProps.ref?.current\n      ) {\n        elementProps.onFocus(event)\n      }\n    },\n    [elementProps],\n  )\n  const handleFilesOver = useCallback((nextHoveringFiles: FileInfo[]) => {\n    setHoveringFiles(nextHoveringFiles.filter((file) => file.kind !== 'string'))\n  }, [])\n  const handleFilesOut = useCallback(() => {\n    setHoveringFiles([])\n  }, [])\n  const handleCancelUpload = useCallback(() => {\n    cancelUpload()\n  }, [cancelUpload])\n  const handleClearUploadState = useCallback(() => {\n    setIsStale(false)\n    clearUploadStatus()\n  }, [clearUploadStatus])\n  const handleStaleUpload = useCallback(() => {\n    setIsStale(true)\n  }, [])\n  const handleSelectFiles = useCallback(\n    (files: File[]) => {\n      if (directUploads && !readOnly) {\n        uploadFirstAccepted(files)\n      } else if (hoveringFiles.length > 0) {\n        handleFilesOut()\n      }\n    },\n    [directUploads, handleFilesOut, hoveringFiles.length, readOnly, uploadFirstAccepted],\n  )\n  const handleSelectImageFromAssetSource = useCallback((source: AssetSource) => {\n    setSelectedAssetSource(source)\n  }, [])\n  const handleAssetSourceClosed = useCallback(() => {\n    setSelectedAssetSource(null)\n\n    // Set focus on menu button in `ImageActionsMenu` when closing the dialog\n    menuButtonElement?.focus()\n  }, [menuButtonElement])\n\n  const renderPreview = useCallback<() => React.JSX.Element>(() => {\n    if (!value) {\n      return <></>\n    }\n    return (\n      <ImageInputPreview\n        directUploads={directUploads}\n        handleOpenDialog={handleOpenDialog}\n        hoveringFiles={hoveringFiles}\n        imageUrlBuilder={imageUrlBuilder}\n        readOnly={readOnly}\n        resolveUploader={resolveUploader}\n        schemaType={schemaType}\n        value={value}\n      />\n    )\n  }, [\n    directUploads,\n    handleOpenDialog,\n    hoveringFiles,\n    imageUrlBuilder,\n    readOnly,\n    resolveUploader,\n    schemaType,\n    value,\n  ])\n  const renderAssetMenu = useCallback(() => {\n    return (\n      <ImageInputAssetMenu\n        assetSources={assetSources}\n        directUploads={directUploads}\n        handleOpenDialog={handleOpenDialog}\n        handleRemoveButtonClick={handleRemoveButtonClick}\n        handleSelectFiles={handleSelectFiles}\n        handleSelectImageFromAssetSource={handleSelectImageFromAssetSource}\n        imageUrlBuilder={imageUrlBuilder}\n        isImageToolEnabled={isImageToolEnabled()}\n        isMenuOpen={isMenuOpen}\n        observeAsset={observeAsset}\n        readOnly={readOnly}\n        schemaType={schemaType}\n        setHotspotButtonElement={setHotspotButtonElement}\n        setMenuButtonElement={setMenuButtonElement}\n        setMenuOpen={setMenuOpen}\n        value={value}\n      />\n    )\n  }, [\n    assetSources,\n    directUploads,\n    handleOpenDialog,\n    handleRemoveButtonClick,\n    handleSelectFiles,\n    handleSelectImageFromAssetSource,\n    imageUrlBuilder,\n    isImageToolEnabled,\n    isMenuOpen,\n    observeAsset,\n    readOnly,\n    schemaType,\n    value,\n  ])\n  const renderBrowser = useCallback(() => {\n    return (\n      <ImageInputBrowser\n        assetSources={assetSources}\n        readOnly={readOnly}\n        directUploads={directUploads}\n        id={id}\n        setMenuOpen={setMenuOpen}\n        handleSelectImageFromAssetSource={handleSelectImageFromAssetSource}\n      />\n    )\n  }, [assetSources, directUploads, handleSelectImageFromAssetSource, id, readOnly])\n  const renderUploadPlaceholder = useCallback(() => {\n    return (\n      <ImageInputUploadPlaceholder\n        directUploads={directUploads}\n        handleSelectFiles={handleSelectFiles}\n        hoveringFiles={hoveringFiles}\n        readOnly={readOnly}\n        renderBrowser={renderBrowser}\n        resolveUploader={resolveUploader}\n        schemaType={schemaType}\n      />\n    )\n  }, [\n    directUploads,\n    handleSelectFiles,\n    hoveringFiles,\n    readOnly,\n    renderBrowser,\n    resolveUploader,\n    schemaType,\n  ])\n  const renderUploadState = useCallback(\n    (uploadState: UploadState) => {\n      return (\n        <UploadProgress\n          uploadState={uploadState}\n          onCancel={isUploading ? handleCancelUpload : undefined}\n          onStale={handleStaleUpload}\n        />\n      )\n    },\n    [handleCancelUpload, handleStaleUpload, isUploading],\n  )\n  const renderAsset = useCallback(() => {\n    if (value && typeof value.asset !== 'undefined' && !value?._upload && !isImageSource(value)) {\n      // eslint-disable-next-line react/display-name\n      return () => <InvalidImageWarning onClearValue={handleClearField} />\n    }\n\n    // eslint-disable-next-line react/display-name\n    return (inputProps: Omit<InputProps, 'renderDefault'>) => (\n      <ImageInputAsset\n        elementProps={elementProps}\n        handleClearUploadState={handleClearUploadState}\n        handleFilesOut={handleFilesOut}\n        handleFilesOver={handleFilesOver}\n        handleFileTargetFocus={handleFileTargetFocus}\n        handleSelectFiles={handleSelectFiles}\n        hoveringFiles={hoveringFiles}\n        inputProps={inputProps}\n        isStale={isStale}\n        readOnly={readOnly}\n        renderAssetMenu={renderAssetMenu}\n        renderPreview={renderPreview}\n        renderUploadPlaceholder={renderUploadPlaceholder}\n        renderUploadState={renderUploadState}\n        tone={getFileTone()}\n        value={value}\n        imageUrlBuilder={imageUrlBuilder}\n      />\n    )\n  }, [\n    elementProps,\n    getFileTone,\n    handleClearField,\n    handleClearUploadState,\n    handleFileTargetFocus,\n    handleFilesOut,\n    handleFilesOver,\n    handleSelectFiles,\n    hoveringFiles,\n    imageUrlBuilder,\n    isStale,\n    readOnly,\n    renderAssetMenu,\n    renderPreview,\n    renderUploadPlaceholder,\n    renderUploadState,\n    value,\n  ])\n  const renderHotspotInput = useCallback(\n    (inputProps: Omit<InputProps, 'renderDefault'>) => {\n      return (\n        <ImageInputHotspotInput\n          isImageToolEnabled={isImageToolEnabled()}\n          handleCloseDialog={handleCloseDialog}\n          imageInputProps={props}\n          inputProps={inputProps}\n        />\n      )\n    },\n    [handleCloseDialog, isImageToolEnabled, props],\n  )\n  const renderAssetSource = useCallback(() => {\n    return (\n      <ImageInputAssetSource\n        handleAssetSourceClosed={handleAssetSourceClosed}\n        handleSelectAssetFromSource={handleSelectAssetFromSource}\n        observeAsset={observeAsset}\n        schemaType={schemaType}\n        selectedAssetSource={selectedAssetSource}\n        value={value}\n      />\n    )\n  }, [\n    handleAssetSourceClosed,\n    handleSelectAssetFromSource,\n    observeAsset,\n    schemaType,\n    selectedAssetSource,\n    value,\n  ])\n\n  // we use the hotspot field as the \"owner\" of both hotspot and crop\n  const hotspotField = useMemo(\n    () =>\n      members.find(\n        (member): member is FieldMember => member.kind === 'field' && member.name === 'hotspot',\n      ),\n    [members],\n  )\n\n  return (\n    // The Stack space should match the space in ObjectInput\n    <Stack space={5} data-testid=\"image-input\">\n      {members.map((member) => {\n        if (member.kind === 'field' && (member.name === 'crop' || member.name === 'hotspot')) {\n          // we're rendering these separately\n          return null\n        }\n\n        if (member.kind === 'field') {\n          return (\n            <MemberField\n              key={member.key}\n              member={member}\n              renderAnnotation={renderAnnotation}\n              renderBlock={renderBlock}\n              renderInlineBlock={renderInlineBlock}\n              renderInput={member.name === 'asset' ? renderAsset() : renderInput}\n              renderField={member.name === 'asset' ? passThrough : renderField}\n              renderItem={renderItem}\n              renderPreview={renderPreviewProp}\n            />\n          )\n        }\n\n        if (member.kind === 'fieldSet') {\n          return (\n            <MemberFieldSet\n              key={member.key}\n              member={member}\n              renderAnnotation={renderAnnotation}\n              renderBlock={renderBlock}\n              renderField={renderField}\n              renderInlineBlock={renderInlineBlock}\n              renderInput={renderInput}\n              renderItem={renderItem}\n              renderPreview={renderPreviewProp}\n            />\n          )\n        }\n        if (member.kind === 'error') {\n          return <MemberFieldError key={member.key} member={member} />\n        }\n        //@ts-expect-error all possible cases should be covered\n        return <>{t('inputs.image.error.unknown-member-kind', {kind: member.kind})}</>\n      })}\n\n      {hotspotField && focusPath[0] === 'hotspot' && (\n        <FormInput\n          {...props}\n          absolutePath={hotspotField.field.path}\n          renderInput={renderHotspotInput}\n        />\n      )}\n      {selectedAssetSource && renderAssetSource()}\n    </Stack>\n  )\n}\n\n/** @internal */\nexport const BaseImageInput = memo(BaseImageInputComponent)\n\nfunction passThrough({children}: {children?: ReactNode}) {\n  return children\n}\n","import imageUrlBuilder from '@sanity/image-url'\nimport {type SchemaType} from '@sanity/types'\nimport {useCallback, useMemo} from 'react'\n\nimport {useClient} from '../../../hooks'\nimport {useTranslation} from '../../../i18n'\nimport {useDocumentPreviewStore} from '../../../store'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../../studioClient'\nimport {BaseImageInput, type BaseImageInputProps} from '../../inputs/files/ImageInput'\nimport {useFormBuilder} from '../../useFormBuilder'\nimport {resolveUploader as defaultResolveUploader} from '../uploads/resolveUploader'\nimport {type FileLike} from '../uploads/types'\nimport {observeImageAsset} from './client-adapters/assets'\n\n/**\n * @hidden\n * @beta */\nexport type ImageInputProps = Omit<\n  BaseImageInputProps,\n  | 'assetSources'\n  | 'directUploads'\n  | 'imageUrlBuilder'\n  | 'observeAsset'\n  | 'client'\n  | 'resolveUploader'\n>\n\n/**\n * @hidden\n * @beta */\nexport function StudioImageInput(props: ImageInputProps) {\n  const sourcesFromSchema = props.schemaType.options?.sources\n  const {image} = useFormBuilder().__internal\n  const documentPreviewStore = useDocumentPreviewStore()\n  const client = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n  const supportsImageUploads = image.directUploads\n\n  const resolveUploader = useCallback(\n    (type: SchemaType, file: FileLike) => {\n      if (!supportsImageUploads) {\n        return null\n      }\n      return defaultResolveUploader(type, file)\n    },\n    [supportsImageUploads],\n  )\n\n  // note: type.options.sources may be an empty array and in that case we're\n  // disabling selecting images from asset source  (it's a feature, not a bug)\n  const assetSources = useMemo(\n    () => sourcesFromSchema || image.assetSources,\n    [image, sourcesFromSchema],\n  )\n\n  const builder = useMemo(() => imageUrlBuilder(client), [client])\n\n  const observeAsset = useCallback(\n    (id: string) => observeImageAsset(documentPreviewStore, id),\n    [documentPreviewStore],\n  )\n\n  const {t} = useTranslation()\n  return (\n    <BaseImageInput\n      {...props}\n      t={t}\n      client={client}\n      assetSources={assetSources}\n      directUploads={supportsImageUploads}\n      imageUrlBuilder={builder}\n      observeAsset={observeAsset}\n      resolveUploader={resolveUploader}\n    />\n  )\n}\n","import {type ComponentType} from 'react'\n\nimport {type FIXME} from '../../../FIXME'\nimport {UniversalArrayInput} from '../../inputs/arrays/UniversalArrayInput'\nimport {BooleanInput} from '../../inputs/BooleanInput'\nimport {DateInput, DateTimeInput} from '../../inputs/DateInputs'\nimport {EmailInput} from '../../inputs/EmailInput'\nimport {NumberInput} from '../../inputs/NumberInput'\nimport {ObjectInput} from '../../inputs/ObjectInput'\nimport {SlugInput} from '../../inputs/Slug/SlugInput'\nimport {StringInput} from '../../inputs/StringInput'\nimport {TextInput} from '../../inputs/TextInput'\nimport {UrlInput} from '../../inputs/UrlInput'\nimport {StudioCrossDatasetReferenceInput} from '../inputs/crossDatasetReference/StudioCrossDatasetReferenceInput'\nimport {StudioGlobalDocumentReferenceInput} from '../inputs/globalDocumentReference/StudioGlobalDocumentReferenceInput'\nimport {StudioFileInput} from '../inputs/StudioFileInput'\nimport {StudioImageInput} from '../inputs/StudioImageInput'\n\nexport const defaultInputs: Record<string, ComponentType<FIXME>> = {\n  document: ObjectInput,\n  object: ObjectInput,\n  array: UniversalArrayInput,\n  boolean: BooleanInput,\n  number: NumberInput,\n  text: TextInput,\n  email: EmailInput,\n  datetime: DateTimeInput,\n  date: DateInput,\n  url: UrlInput,\n  image: StudioImageInput,\n  file: StudioFileInput,\n  string: StringInput,\n  slug: SlugInput,\n  crossDatasetReference: StudioCrossDatasetReferenceInput,\n  globalDocumentReference: StudioGlobalDocumentReferenceInput,\n}\n","import {defineEvent} from '@sanity/telemetry'\n\nexport const PortableTextInputExpanded = defineEvent({\n  version: 1,\n  name: 'Portable Text Editor Expanded',\n  description: 'The portable text editor was expanded',\n})\n\nexport const PortableTextInputCollapsed = defineEvent({\n  version: 1,\n  name: 'Portable Text Editor Collapsed',\n  description: 'The portable text editor was collapsed',\n})\n\nexport const PortableTextInvalidValueIgnore = defineEvent({\n  version: 1,\n  name: 'Portable Text Editor Invalid Value Ignored',\n  description:\n    'The portable text got an invalid value from the form and pressed button to ignore it',\n})\n\nexport const PortableTextInvalidValueResolve = defineEvent<{\n  PTEInvalidValueId: string\n  PTEInvalidValueDescription: string\n}>({\n  version: 1,\n  name: 'Portable Text Editor Invalid Value Resolved',\n  description:\n    'The portable text got an invalid value from the form and pressed button to resolve it.',\n})\n\n/**\n * When a draft is successfully created\n * @internal\n */\nexport const CreatedDraft = defineEvent({\n  name: 'New Draft Created',\n  version: 1,\n  description: 'User created a new draft',\n})\n","import {Card, Flex} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const OverlayContainer = styled.div`\n  position: relative;\n`\n\nexport const ContentContainer = styled.div`\n  z-index: 13;\n  opacity: 0;\n  transition: opacity 300ms linear;\n`\n\nexport const CardContainer = styled(Card)`\n  border: 1px solid var(--card-border-color);\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  z-index: 12;\n  transition: opacity 150ms ease-in-out;\n  opacity: 0;\n  box-sizing: border-box;\n`\n\nexport const FlexContainer = styled(Flex)`\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n\n  &:hover,\n  &:focus {\n    & ${CardContainer} {\n      opacity: 0.9;\n    }\n\n    & ${ContentContainer} {\n      opacity: 1;\n    }\n  }\n`\n","// This is transitional in order to track usage of the ActivateOnFocusPart part from within the form-builder package\nimport {Text} from '@sanity/ui'\nimport {type KeyboardEvent, type ReactNode, useCallback, useMemo, useState} from 'react'\n\nimport {useTranslation} from '../../../i18n'\nimport {\n  CardContainer,\n  ContentContainer,\n  FlexContainer,\n  OverlayContainer,\n} from './ActivateOnFocus.styles'\n\nconst isTouchDevice = () =>\n  (typeof window !== 'undefined' && 'ontouchstart' in window) ||\n  (typeof navigator !== 'undefined' && navigator.maxTouchPoints > 0)\n\n/**\n * @internal\n */\nexport interface ActivateOnFocusProps {\n  children: ReactNode\n  message?: ReactNode\n  onActivate?: () => void\n  isOverlayActive: boolean\n}\n\n/**\n * @internal\n */\n\nexport function ActivateOnFocus(props: ActivateOnFocusProps) {\n  const {children, message, onActivate, isOverlayActive} = props\n  const [focused, setFocused] = useState(false)\n  const {t} = useTranslation()\n\n  const handleClick = useCallback(() => {\n    if (onActivate) {\n      onActivate()\n    }\n  }, [onActivate])\n\n  const handleKeyDown = useCallback(\n    (event: KeyboardEvent<HTMLDivElement>) => {\n      if (!isOverlayActive) {\n        return\n      }\n      if (event.code === 'Space' && onActivate) {\n        event.preventDefault()\n        onActivate()\n      }\n    },\n    [isOverlayActive, onActivate],\n  )\n\n  const handleDragEnter = useCallback(() => {\n    if (!isOverlayActive) {\n      return\n    }\n    if (onActivate) {\n      onActivate()\n    }\n  }, [isOverlayActive, onActivate])\n\n  const handleOnFocus = useCallback(() => {\n    setFocused(true)\n  }, [])\n\n  const handleBlur = useCallback(() => {\n    setFocused(false)\n  }, [])\n\n  const msg = useMemo(() => {\n    const isTouch = isTouchDevice()\n    let messageContext\n\n    if (isTouch) {\n      messageContext = 'tap'\n    } else if (focused) {\n      messageContext = 'click-focused'\n    } else {\n      messageContext = 'click'\n    }\n\n    const text =\n      message ||\n      t('inputs.portable-text.activate-on-focus-message', {\n        context: messageContext,\n      })\n    return <Text weight=\"medium\">{text}</Text>\n  }, [focused, message, t])\n\n  return (\n    <OverlayContainer\n      onBlur={handleBlur}\n      onClick={handleClick}\n      onFocus={handleOnFocus}\n      onKeyDown={handleKeyDown}\n      onDragEnter={handleDragEnter}\n    >\n      {isOverlayActive && (\n        <FlexContainer data-testid=\"activate-overlay\" tabIndex={0} align=\"center\" justify=\"center\">\n          <CardContainer\n            // Almost all input elements have radius=1, and this component is\n            // typically used for overlaying input elements.\n            // @todo Consider making `radius` a component property of `ActivateOnFocus`.\n            radius={2}\n          />\n          <ContentContainer>{msg}</ContentContainer>\n        </FlexContainer>\n      )}\n      {children}\n    </OverlayContainer>\n  )\n}\n","/* eslint-disable camelcase */\n\nimport {Layer} from '@sanity/ui'\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {css, styled} from 'styled-components'\n\nimport {focusRingBorderStyle, focusRingStyle} from '../../components/withFocusRing/helpers'\n\nexport const Root = styled.div((props) => {\n  const {color, input, radius} = getTheme_v2(props.theme)\n\n  const border = {\n    color: color.input.default.enabled.border,\n    width: input.border.width,\n  }\n\n  return css`\n    --input-box-shadow: ${focusRingBorderStyle(border)};\n\n    position: relative;\n\n    & [data-wrapper] {\n      overflow: hidden;\n      overflow: clip;\n      position: relative;\n      z-index: 1;\n      padding: ${input.border.width}px;\n    }\n\n    & [data-border] {\n      position: absolute;\n      top: 0;\n      left: 0;\n      right: 0;\n      bottom: 0;\n      box-shadow: var(--input-box-shadow);\n      z-index: 2;\n      border-radius: ${radius[2]}px;\n      pointer-events: none;\n    }\n\n    &:not([data-read-only])[data-focused] [data-border] {\n      --input-box-shadow: ${focusRingStyle({\n        base: color,\n        border,\n        focusRing: input.text.focusRing,\n      })};\n    }\n  `\n})\n\n// This element only wraps the input when in \"fullscreen\" mode\nexport const ExpandedLayer = styled(Layer)`\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n\n  & > div {\n    height: 100%;\n  }\n`\n","import {useCallback, useContext} from 'react'\nimport {useObservable} from 'react-rx'\nimport {\n  type PortableTextEditorElement,\n  PortableTextMemberItemElementRefsContext,\n} from 'sanity/_singletons'\n\nimport {type PortableTextMemberItem} from '../PortableTextInput'\n\nexport type SetPortableTextMemberItemElementRef = ({\n  key,\n  elementRef,\n}: {\n  key: PortableTextMemberItem['member']['key']\n  elementRef: PortableTextEditorElement | null\n}) => void\n\nexport function usePortableTextMemberItemElementRefs(): Record<\n  PortableTextMemberItem['member']['key'],\n  PortableTextEditorElement | null | undefined\n> {\n  const behaviorSubject = useContext(PortableTextMemberItemElementRefsContext)\n\n  return useObservable(behaviorSubject, {})\n}\n\nexport function useSetPortableTextMemberItemElementRef(): SetPortableTextMemberItemElementRef {\n  const behaviorSubject = useContext(PortableTextMemberItemElementRefsContext)\n\n  return useCallback<SetPortableTextMemberItemElementRef>(\n    ({key, elementRef}) => {\n      behaviorSubject.next({\n        ...behaviorSubject.value,\n        [key]: elementRef,\n      })\n    },\n    [behaviorSubject],\n  )\n}\n","import {type ResponsivePaddingProps} from '@sanity/ui'\nimport {type ElementType} from 'react'\n\nexport const TEXT_LEVELS = [1, 2, 3, 4, 5, 6, 7, 8, 9]\n\nexport const TEXT_BULLET_MARKERS = ['●', '○', '■']\n\nexport const TEXT_NUMBER_FORMATS = ['number', 'lower-alpha', 'lower-roman']\n\nexport const TEXT_DECORATOR_TAGS: Record<string, ElementType> = {\n  'em': 'em',\n  'strike-through': 's',\n  'underline': 'u',\n  'strong': 'strong',\n  'code': 'code',\n}\n\nexport const TEXT_STYLE_PADDING: Record<string, ResponsivePaddingProps> = {\n  h1: {\n    paddingTop: 5,\n    paddingBottom: 4,\n  },\n  h2: {\n    paddingTop: 4,\n    paddingBottom: 4,\n  },\n  h3: {\n    paddingTop: 4,\n    paddingBottom: 3,\n  },\n  h4: {\n    paddingTop: 4,\n    paddingBottom: 3,\n  },\n  h5: {\n    paddingTop: 4,\n    paddingBottom: 3,\n  },\n  h6: {\n    paddingTop: 4,\n    paddingBottom: 2,\n  },\n  normal: {\n    paddingTop: 2,\n    paddingBottom: 3,\n  },\n  blockquote: {\n    paddingTop: 2,\n    paddingBottom: 3,\n  },\n}\n","import {type BlockDecoratorRenderProps} from '@portabletext/editor'\nimport {type Theme} from '@sanity/ui'\nimport {useCallback, useMemo} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {type BlockDecoratorProps} from '../../../types'\nimport {TEXT_DECORATOR_TAGS} from './constants'\n\nconst Root = styled.span(({theme}: {theme: Theme}) => {\n  const isDark = theme.sanity.color.dark\n\n  return css`\n    /* Make sure the annotation styling is visible */\n    &[data-mark='code'] {\n      color: inherit;\n      mix-blend-mode: ${isDark ? 'screen' : 'multiply'};\n    }\n  `\n})\n\nexport function Decorator(props: BlockDecoratorRenderProps) {\n  const {value, focused, selected, children, schemaType} = props\n  const tag = TEXT_DECORATOR_TAGS[value]\n  const CustomComponent = schemaType.component\n  const DefaultComponent = useCallback(\n    (defaultComponentProps: BlockDecoratorProps) => {\n      return (\n        <Root as={tag} data-mark={value}>\n          {defaultComponentProps.children}\n        </Root>\n      )\n    },\n    [tag, value],\n  )\n  return useMemo(() => {\n    const componentProps = {\n      focused,\n      renderDefault: DefaultComponent,\n      schemaType,\n      selected,\n      title: schemaType.title,\n      value,\n    }\n    return CustomComponent ? (\n      <CustomComponent {...componentProps}>{children}</CustomComponent>\n    ) : (\n      <DefaultComponent {...componentProps}>{children}</DefaultComponent>\n    )\n  }, [CustomComponent, DefaultComponent, children, focused, schemaType, selected, value])\n}\n","export function createListName(level: number): string {\n  return `list-level-${level}`\n}\n","import {rgba} from '@sanity/ui'\nimport {css, styled} from 'styled-components'\n\nexport const ReviewChangesHighlightBlock = styled.div(({theme}) => {\n  const {radius, space, color} = theme.sanity\n  const bg = rgba(color.spot.yellow, 0.2)\n\n  return css`\n    position: absolute;\n    border-radius: ${radius[3]}px;\n    top: -${space[2]}px;\n    bottom: -${space[1] + space[1]}px;\n    left: ${space[4] + space[1]}px;\n    right: ${space[1]}px;\n    background-color: ${bg};\n    pointer-events: none;\n  `\n})\n","import {css, styled} from 'styled-components'\n\nimport {ChangeIndicator} from '../../../../changeIndicators'\n\nexport const StyledChangeIndicatorWithProvidedFullPath = styled(ChangeIndicator)(() => {\n  return css`\n    width: 1px;\n    height: 100%;\n\n    & > div {\n      height: 100%;\n    }\n  `\n})\n","import {normalizeBlock} from '@portabletext/block-tools'\nimport {type PortableTextBlock} from '@sanity/types'\n\nimport {insert, PatchEvent} from '../../../patch'\nimport {type InsertCallback} from './types'\n\nexport function createInsertCallback(options: {\n  allowedDecorators: string[]\n  block: PortableTextBlock\n  onChange: (patches: PatchEvent) => void\n}): InsertCallback {\n  const {allowedDecorators, block, onChange} = options\n\n  let toInsert\n\n  return (givenBlock: PortableTextBlock | PortableTextBlock[]): void => {\n    toInsert = Array.isArray(givenBlock) ? givenBlock : [givenBlock]\n    toInsert = toInsert.map((blk) =>\n      normalizeBlock(blk, {\n        allowedDecorators,\n      }),\n    )\n\n    const patches = [insert(toInsert, 'after', [{_key: block._key}])]\n\n    return onChange(PatchEvent.from(patches))\n  }\n}\n","import {normalizeBlock} from '@portabletext/block-tools'\nimport {type PortableTextBlock} from '@sanity/types'\n\nimport {PatchEvent, set} from '../../../patch'\nimport {type SetCallback} from './types'\n\nexport function createSetCallback(options: {\n  allowedDecorators: string[]\n  block: PortableTextBlock\n  onChange: (patches: PatchEvent) => void\n}): SetCallback {\n  const {allowedDecorators, block, onChange} = options\n\n  return (givenBlock: PortableTextBlock): void => {\n    const patches = [\n      set(\n        normalizeBlock(givenBlock, {\n          allowedDecorators,\n        }),\n\n        [{_key: block._key}],\n      ),\n    ]\n\n    return onChange(PatchEvent.from(patches))\n  }\n}\n","import {type PortableTextBlock} from '@sanity/types'\n\nimport {PatchEvent, unset} from '../../../patch'\nimport {type UnsetCallback} from './types'\n\nexport function createUnsetCallback(options: {\n  block: PortableTextBlock\n  onChange: (patches: PatchEvent) => void\n}): UnsetCallback {\n  const {block, onChange} = options\n\n  return (): void => {\n    const patches = [unset([{_key: block._key}])]\n\n    return onChange(PatchEvent.from(patches))\n  }\n}\n","import {PortableTextEditor, usePortableTextEditor} from '@portabletext/editor'\nimport {type PortableTextBlock} from '@sanity/types'\nimport {useMemo} from 'react'\nimport {styled} from 'styled-components'\n\nimport {type PatchEvent} from '../../patch'\nimport {\n  type RenderBlockActionsCallback,\n  type RenderBlockActionsProps,\n} from '../../types/_transitional'\nimport {createInsertCallback, createSetCallback, createUnsetCallback} from './callbacks'\n\ninterface BlockActionsProps {\n  block: PortableTextBlock\n  onChange: (patches: PatchEvent) => void\n  renderBlockActions?: RenderBlockActionsCallback\n}\n\nconst Root = styled.div`\n  display: flex;\n  pointer-events: all;\n`\n\nexport function BlockActions(props: BlockActionsProps) {\n  const editor = usePortableTextEditor()\n  const {block, onChange, renderBlockActions} = props\n  const decoratorValues = useMemo(() => editor.schemaTypes.decorators.map((d) => d.value), [editor])\n\n  const blockActions = useMemo(() => {\n    if (renderBlockActions) {\n      const blockActionProps: RenderBlockActionsProps = {\n        block,\n        value: PortableTextEditor.getValue(editor),\n        set: createSetCallback({allowedDecorators: decoratorValues, block, onChange}),\n        unset: createUnsetCallback({block, onChange}),\n        insert: createInsertCallback({allowedDecorators: decoratorValues, block, onChange}),\n      }\n      return renderBlockActions(blockActionProps)\n    }\n    return undefined\n  }, [renderBlockActions, block, editor, onChange, decoratorValues])\n\n  // Don't render anything if the renderBlockActions function returns null.\n  // Note that if renderBlockComponent is a React class, this will never be the case.\n  if (!blockActions) return null\n\n  return <Root contentEditable={false}>{blockActions}</Root>\n}\n","/* eslint-disable camelcase */\n\nimport {hues} from '@sanity/color'\nimport {Box, Flex, type Theme} from '@sanity/ui'\nimport {getTheme_v2, rgba} from '@sanity/ui/theme'\nimport {css, styled} from 'styled-components'\n\nimport {TEXT_BULLET_MARKERS, TEXT_NUMBER_FORMATS} from './constants'\nimport {createListName} from './helpers'\n\ninterface TextBlockStyleProps {\n  $level: number\n}\n\nfunction textBlockStyle(props: TextBlockStyleProps & {theme: Theme}) {\n  const {$level} = props\n  const {color, font, radius, space} = getTheme_v2(props.theme)\n\n  const numberMarker = TEXT_NUMBER_FORMATS[($level - 1) % TEXT_NUMBER_FORMATS.length]\n  const bulletMarker = TEXT_BULLET_MARKERS[($level - 1) % TEXT_BULLET_MARKERS.length]\n\n  return css`\n    --marker-bg-color: transparent;\n\n    mix-blend-mode: ${color._dark ? 'screen' : 'multiply'};\n    position: relative;\n\n    & > [data-ui='TextBlock_inner'] {\n      position: relative;\n      flex: 1;\n    }\n\n    & > div:before {\n      content: '';\n      position: absolute;\n      top: -${space[1]}px;\n      bottom: -${space[1]}px;\n      left: -${space[1]}px;\n      right: -${space[1]}px;\n      border-radius: ${radius[2]}px;\n      background-color: var(--marker-bg-color);\n      // This is to make sure the marker is always behind the text\n      z-index: -1;\n      pointer-events: none;\n    }\n\n    &[data-markers] {\n      --marker-bg-color: ${color._dark ? hues.purple[950].hex : hues.purple[50].hex};\n    }\n\n    &[data-warning] {\n      --card-border-color: ${color.button.ghost.caution.enabled.border};\n      --marker-bg-color: ${color.button.ghost.caution.hovered.bg};\n    }\n\n    &[data-error] {\n      --card-border-color: ${color.button.ghost.critical.enabled.border};\n      --marker-bg-color: ${color.button.ghost.critical.hovered.bg};\n    }\n\n    & [data-list-prefix] {\n      position: absolute;\n      margin-left: -4.5rem;\n      width: 3.75rem;\n      text-align: right;\n      box-sizing: border-box;\n    }\n\n    &[data-list-item='number'] [data-list-prefix] {\n      font-variant-numeric: tabular-nums;\n\n      & > span:before {\n        content: counter(${createListName($level)}) '.';\n        content: counter(${createListName($level)}, ${numberMarker}) '.';\n      }\n    }\n\n    &[data-list-item='bullet'] [data-list-prefix] {\n      & > span {\n        position: relative;\n        top: -0.1875em;\n\n        &:before {\n          content: '${bulletMarker}';\n          font-size: 0.46666em;\n        }\n      }\n    }\n\n    & [data-text] {\n      overflow-wrap: anywhere;\n      text-transform: none;\n      white-space: pre-wrap;\n      font-family: ${font.text.family};\n      flex: 1;\n\n      *::selection {\n        background-color: ${rgba(color.focusRing, 0.3)};\n      }\n    }\n  `\n}\n\nexport const TextRoot = styled.div<TextBlockStyleProps>(textBlockStyle)\n\n// Because of a weird bug in Google Chrome regarding the @sanity/ui Flex component and spellchecking,\n// this is set to be a Box with 'display: flex'. Using the Flex component here results in Chrome\n// using 20% CPU when idle when spellchecking is on for some reason.\nexport const TextBlockFlexWrapper = styled(Box)`\n  position: relative;\n  display: flex;\n`\n\nexport const ListPrefixWrapper = styled.div`\n  user-select: none;\n  white-space: nowrap;\n`\n\nexport const BlockActionsOuter = styled(Box)`\n  line-height: 0;\n  width: 25px;\n  position: relative;\n`\n\nexport const BlockActionsInner = styled(Flex)(({theme}: {theme: Theme}) => {\n  const {fonts, space} = theme.sanity\n  const textSize1 = fonts.text.sizes[1]\n  const textSize2 = fonts.text.sizes[2]\n  const capHeight1 = textSize1.lineHeight - textSize1.ascenderHeight - textSize1.descenderHeight\n  const capHeight2 = textSize2.lineHeight - textSize2.ascenderHeight - textSize2.descenderHeight\n  const buttonHeight = capHeight1 + space[2] + space[2]\n\n  // This calculates the following:\n  // > var buttonHeight = 25px\n  // > var capHeight2 = 11px\n  // > 0 - (buttonHeight - capHeight2) / 2 = -7px\n  const negativeTop = 0 - (buttonHeight - capHeight2) / 2\n\n  return css`\n    user-select: none;\n    position: absolute;\n    right: 0;\n    top: ${negativeTop}px;\n  `\n})\n\nexport const TooltipBox = styled(Box)`\n  max-width: 250px;\n`\n\nexport const TextFlex = styled(Flex)<{$level?: number}>`\n  position: relative;\n  padding-left: ${({$level}) => ($level ? $level * 32 : 0)}px;\n`\n\nexport const ChangeIndicatorWrapper = styled.div<{$hasChanges: boolean}>(\n  ({theme, $hasChanges}: {theme: Theme; $hasChanges: boolean}) => {\n    const {space} = theme.sanity\n\n    return css`\n      position: absolute;\n      width: ${space[2]}px;\n      right: 0;\n      top: 0;\n      bottom: 0;\n      padding-left: ${space[1]}px;\n      padding-right: ${space[2]}px;\n      user-select: none;\n\n      ${!$hasChanges &&\n      css`\n        display: none;\n      `}\n    `\n  },\n)\n","import {Heading, Text} from '@sanity/ui'\nimport {type ComponentType, type HTMLProps} from 'react'\nimport {styled} from 'styled-components'\n\ntype TextStyleProps = Omit<HTMLProps<HTMLDivElement>, 'as' | 'ref'>\ntype BlockQuoteStyleProps = Omit<HTMLProps<HTMLQuoteElement>, 'as' | 'ref'>\n\n/**\n * Without this container, editing with Android breaks due to how Text is styled via `responsiveFont` in `@sanity/ui`\n */\nexport const TextContainer = styled.div`\n  display: block;\n`\n\n/**\n * Portable Text Input built in style\n */\nexport const Normal = ({children, ...rest}: TextStyleProps) => (\n  <Text data-testid=\"text-style--normal\" {...rest}>\n    <TextContainer>{children}</TextContainer>\n  </Text>\n)\n\n/**\n * Styled component for Portable Text 'h1' style\n */\nexport const Heading1 = ({children, ...rest}: TextStyleProps) => (\n  <Heading as=\"h1\" data-testid=\"text-style--h1\" size={5} {...rest}>\n    <TextContainer>{children}</TextContainer>\n  </Heading>\n)\n\n/**\n * Styled component for Portable Text 'h2' style\n */\nexport const Heading2 = ({children, ...rest}: TextStyleProps) => (\n  <Heading as=\"h2\" data-testid=\"text-style--h2\" size={4} {...rest}>\n    <TextContainer>{children}</TextContainer>\n  </Heading>\n)\n\n/**\n * Styled component for Portable Text 'h3' style\n */\nexport const Heading3 = ({children, ...rest}: TextStyleProps) => (\n  <Heading as=\"h3\" data-testid=\"text-style--h3\" size={3} {...rest}>\n    <TextContainer>{children}</TextContainer>\n  </Heading>\n)\n\n/**\n * Styled component for Portable Text 'h4' style\n */\nexport const Heading4 = ({children, ...rest}: TextStyleProps) => (\n  <Heading as=\"h4\" data-testid=\"text-style--h4\" size={2} {...rest}>\n    <TextContainer>{children}</TextContainer>\n  </Heading>\n)\n\n/**\n * Styled component for Portable Text 'h5' style\n */\nexport const Heading5 = ({children, ...rest}: TextStyleProps) => (\n  <Heading as=\"h5\" data-testid=\"text-style--h5\" size={1} {...rest}>\n    <TextContainer>{children}</TextContainer>\n  </Heading>\n)\n\n/**\n * Styled component for Portable Text 'h6' style\n */\nexport const Heading6 = ({children, ...rest}: TextStyleProps) => (\n  <Heading as=\"h6\" data-testid=\"text-style--h6\" size={0} {...rest}>\n    <TextContainer>{children}</TextContainer>\n  </Heading>\n)\n\nconst BlockQuoteRoot = styled.blockquote`\n  position: relative;\n  display: block;\n  margin: 0;\n  padding-left: ${({theme}) => theme.sanity.space[3]}px;\n\n  &::before {\n    content: '';\n    position: absolute;\n    left: 0;\n    top: -4px;\n    bottom: -4px;\n    width: 3px;\n    background: var(--card-border-color);\n  }\n`\n\n/**\n * Styled component for Portable Text 'blockquote' style\n */\nexport const BlockQuote = ({children, ...rest}: TextStyleProps) => (\n  <BlockQuoteRoot data-testid=\"text-style--blockquote\" {...(rest as BlockQuoteStyleProps)}>\n    <Text as=\"p\">{children}</Text>\n  </BlockQuoteRoot>\n)\n\n/**\n * Portable Text built in styles.\n */\nexport const TEXT_STYLES: Record<string, ComponentType<TextStyleProps>> = {\n  normal: Normal,\n  h1: Heading1,\n  h2: Heading2,\n  h3: Heading3,\n  h4: Heading4,\n  h5: Heading5,\n  h6: Heading6,\n  blockquote: BlockQuote,\n}\n","import {type EditorSelection, PortableTextEditor, usePortableTextEditor} from '@portabletext/editor'\nimport {type ObjectSchemaType, type Path, type PortableTextTextBlock} from '@sanity/types'\nimport {Box, Flex, type ResponsivePaddingProps, Text} from '@sanity/ui'\nimport {isEqual} from '@sanity/util/paths'\nimport {type ReactNode, useCallback, useMemo, useState} from 'react'\n\nimport {Tooltip} from '../../../../../ui-components'\nimport {pathToString} from '../../../../field'\nimport {EMPTY_ARRAY} from '../../../../util'\nimport {useFormCallbacks} from '../../../studio'\nimport {useChildPresence} from '../../../studio/contexts/Presence'\nimport {\n  type BlockProps,\n  type RenderAnnotationCallback,\n  type RenderArrayOfObjectsItemCallback,\n  type RenderBlockCallback,\n  type RenderCustomMarkers,\n  type RenderFieldCallback,\n  type RenderInputCallback,\n  type RenderPreviewCallback,\n} from '../../../types'\nimport {type RenderBlockActionsCallback} from '../../../types/_transitional'\nimport {useFormBuilder} from '../../../useFormBuilder'\nimport {ReviewChangesHighlightBlock, StyledChangeIndicatorWithProvidedFullPath} from '../_common'\nimport {BlockActions} from '../BlockActions'\nimport {type SetPortableTextMemberItemElementRef} from '../contexts/PortableTextMemberItemElementRefsProvider'\nimport {debugRender} from '../debugRender'\nimport {useMemberValidation} from '../hooks/useMemberValidation'\nimport {usePortableTextMarkers} from '../hooks/usePortableTextMarkers'\nimport {usePortableTextMemberItem} from '../hooks/usePortableTextMembers'\nimport {TEXT_STYLE_PADDING} from './constants'\nimport {\n  BlockActionsInner,\n  BlockActionsOuter,\n  ChangeIndicatorWrapper,\n  ListPrefixWrapper,\n  TextBlockFlexWrapper,\n  TextFlex,\n  TextRoot,\n  TooltipBox,\n} from './TextBlock.styles'\nimport {TextContainer} from './textStyles'\n\nexport interface TextBlockProps {\n  children: ReactNode\n  floatingBoundary: HTMLElement | null\n  focused: boolean\n  isFullscreen?: boolean\n  onItemClose: () => void\n  onItemOpen: (path: Path) => void\n  onItemRemove: (itemKey: string) => void\n  onPathFocus: (path: Path) => void\n  path: Path\n  readOnly?: boolean\n  referenceBoundary: HTMLElement | null\n  renderAnnotation?: RenderAnnotationCallback\n  renderBlock?: RenderBlockCallback\n  renderBlockActions?: RenderBlockActionsCallback\n  renderCustomMarkers?: RenderCustomMarkers\n  renderField: RenderFieldCallback\n  renderInlineBlock?: RenderBlockCallback\n  renderInput: RenderInputCallback\n  renderItem: RenderArrayOfObjectsItemCallback\n  renderPreview: RenderPreviewCallback\n  schemaType: ObjectSchemaType\n  selected: boolean\n  setElementRef: SetPortableTextMemberItemElementRef\n  spellCheck?: boolean\n  value: PortableTextTextBlock\n}\n\nexport function TextBlock(props: TextBlockProps) {\n  const {\n    children,\n    floatingBoundary,\n    focused,\n    isFullscreen,\n    onItemClose,\n    onItemOpen,\n    onPathFocus,\n    path,\n    readOnly,\n    referenceBoundary,\n    renderBlock,\n    renderAnnotation,\n    renderBlockActions,\n    renderCustomMarkers,\n    renderField,\n    renderInlineBlock,\n    renderInput,\n    renderItem,\n    renderPreview,\n    schemaType,\n    selected,\n    setElementRef,\n    spellCheck,\n    value,\n  } = props\n  const {Markers} = useFormBuilder().__internal.components\n  const [reviewChangesHovered, setReviewChangesHovered] = useState<boolean>(false)\n  const markers = usePortableTextMarkers(path)\n  const [divElement, setDivElement] = useState<HTMLDivElement | null>(null)\n  const memberItem = usePortableTextMemberItem(pathToString(path))\n  const editor = usePortableTextEditor()\n  const {onChange} = useFormCallbacks()\n\n  const presence = useChildPresence(path, true)\n  // Include all presence paths pointing either directly to a block, or directly to a block child\n  // (which is where the user most of the time would have the presence in a text block)\n  const textPresence = useMemo(() => {\n    return presence.filter(\n      (p) =>\n        isEqual(p.path, path) ||\n        (p.path.slice(-3)[1] === 'children' && p.path.length - path.length === 2),\n    )\n  }, [path, presence])\n\n  const handleChangeIndicatorMouseEnter = useCallback(() => setReviewChangesHovered(true), [])\n  const handleChangeIndicatorMouseLeave = useCallback(() => setReviewChangesHovered(false), [])\n\n  const {validation, hasError, hasWarning, hasInfo} = useMemberValidation(memberItem?.node)\n\n  const hasMarkers = Boolean(renderCustomMarkers) && markers.length > 0\n\n  const tooltipEnabled = hasError || hasWarning || hasMarkers || hasInfo\n\n  const onOpen = useCallback(() => {\n    if (memberItem) {\n      onItemOpen(memberItem.node.path)\n    }\n  }, [onItemOpen, memberItem])\n\n  const onRemove = useCallback(() => {\n    const point = {path: path.slice(-1), offset: 0}\n    const sel: EditorSelection = {\n      focus: point,\n      anchor: point,\n    }\n    PortableTextEditor.delete(editor, sel, {mode: 'blocks'})\n    PortableTextEditor.focus(editor)\n  }, [path, editor])\n\n  const text = useMemo(() => {\n    return (\n      <TextFlex align=\"flex-start\" $level={value?.level}>\n        {value.listItem && (\n          <ListPrefixWrapper contentEditable={false}>\n            <Text data-list-prefix=\"\">\n              <TextContainer />\n            </Text>\n          </ListPrefixWrapper>\n        )}\n        <div data-text=\"\" style={debugRender()}>\n          {children}\n        </div>\n      </TextFlex>\n    )\n  }, [value.listItem, value.level, children])\n\n  const innerPaddingProps: ResponsivePaddingProps = useMemo(() => {\n    if (isFullscreen && !renderBlockActions) {\n      return {paddingX: 5}\n    }\n\n    if (isFullscreen && renderBlockActions) {\n      return {paddingLeft: 5, paddingRight: 2}\n    }\n\n    if (renderBlockActions) {\n      return {\n        paddingLeft: 3,\n        paddingRight: 2,\n      }\n    }\n\n    return {paddingX: 3}\n  }, [isFullscreen, renderBlockActions])\n\n  const outerPaddingProps: ResponsivePaddingProps = useMemo(() => {\n    if (value.listItem) {\n      return {paddingY: 2}\n    }\n\n    return TEXT_STYLE_PADDING[value.style || 'normal'] || {paddingY: 2}\n  }, [value])\n\n  const isOpen = Boolean(memberItem?.member.open)\n  const parentSchemaType = editor.schemaTypes.portableText\n  const referenceElement = divElement\n\n  const componentProps: BlockProps = useMemo(\n    () => ({\n      __unstable_floatingBoundary: floatingBoundary,\n      __unstable_referenceBoundary: referenceBoundary,\n      __unstable_referenceElement: referenceElement,\n      children: text,\n      focused,\n      markers,\n      onClose: onItemClose,\n      onOpen,\n      onPathFocus,\n      onRemove,\n      open: isOpen,\n      parentSchemaType,\n      path: memberItem?.node.path || EMPTY_ARRAY,\n      presence: textPresence,\n      readOnly: Boolean(readOnly),\n      renderAnnotation,\n      renderBlock,\n      renderDefault: DefaultComponent,\n      renderField,\n      renderInput,\n      renderInlineBlock,\n      renderItem,\n      renderPreview,\n      schemaType,\n      selected,\n      validation,\n      value,\n    }),\n    [\n      floatingBoundary,\n      focused,\n      isOpen,\n      markers,\n      memberItem?.node.path,\n      onItemClose,\n      onOpen,\n      onPathFocus,\n      onRemove,\n      parentSchemaType,\n      readOnly,\n      referenceBoundary,\n      referenceElement,\n      renderAnnotation,\n      renderBlock,\n      renderField,\n      renderInlineBlock,\n      renderInput,\n      renderItem,\n      renderPreview,\n      schemaType,\n      selected,\n      text,\n      textPresence,\n      validation,\n      value,\n    ],\n  )\n\n  const toolTipContent = useMemo(\n    () =>\n      (tooltipEnabled && (\n        <TooltipBox>\n          <Markers\n            markers={markers}\n            renderCustomMarkers={renderCustomMarkers}\n            validation={validation}\n          />\n        </TooltipBox>\n      )) ||\n      null,\n    [Markers, markers, renderCustomMarkers, tooltipEnabled, validation],\n  )\n\n  const blockActionsEnabled = renderBlockActions && !readOnly\n  const changeIndicatorVisible = isFullscreen && memberItem\n\n  const setRef = useCallback(\n    (elm: HTMLDivElement) => {\n      if (memberItem) {\n        setElementRef({key: memberItem.member.key, elementRef: elm})\n      }\n      setDivElement(elm) // update state here so the reference element is available on first render\n    },\n    [memberItem, setElementRef, setDivElement],\n  )\n\n  return useMemo(\n    () => (\n      <Box {...outerPaddingProps} data-testid=\"text-block\" ref={setRef} style={debugRender()}>\n        <TextBlockFlexWrapper data-testid=\"text-block__wrapper\">\n          <Flex flex={1} {...innerPaddingProps}>\n            <Box flex={1}>\n              <Tooltip\n                content={toolTipContent}\n                disabled={!tooltipEnabled}\n                placement=\"top\"\n                portal=\"editor\"\n              >\n                <TextRoot\n                  $level={value.level || 1}\n                  data-error={hasError ? '' : undefined}\n                  data-list-item={value.listItem}\n                  data-markers={hasMarkers ? '' : undefined}\n                  data-read-only={readOnly}\n                  data-testid=\"text-block__text\"\n                  data-warning={hasWarning ? '' : undefined}\n                  spellCheck={spellCheck}\n                >\n                  {renderBlock && renderBlock(componentProps)}\n                </TextRoot>\n              </Tooltip>\n            </Box>\n\n            {blockActionsEnabled && (\n              <BlockActionsOuter contentEditable={false} marginRight={3}>\n                <BlockActionsInner>\n                  {focused && (\n                    <BlockActions\n                      block={value}\n                      onChange={onChange}\n                      renderBlockActions={renderBlockActions}\n                    />\n                  )}\n                </BlockActionsInner>\n              </BlockActionsOuter>\n            )}\n\n            {changeIndicatorVisible && (\n              <ChangeIndicatorWrapper\n                $hasChanges={memberItem.member.item.changed}\n                contentEditable={false}\n                onMouseEnter={handleChangeIndicatorMouseEnter}\n                onMouseLeave={handleChangeIndicatorMouseLeave}\n              >\n                <StyledChangeIndicatorWithProvidedFullPath\n                  hasFocus={focused}\n                  isChanged={memberItem.member.item.changed}\n                  path={memberItem.member.item.path}\n                  withHoverEffect={false}\n                />\n              </ChangeIndicatorWrapper>\n            )}\n            {reviewChangesHovered && <ReviewChangesHighlightBlock />}\n          </Flex>\n        </TextBlockFlexWrapper>\n      </Box>\n    ),\n    [\n      blockActionsEnabled,\n      changeIndicatorVisible,\n      componentProps,\n      focused,\n      handleChangeIndicatorMouseEnter,\n      handleChangeIndicatorMouseLeave,\n      hasError,\n      hasMarkers,\n      hasWarning,\n      innerPaddingProps,\n      memberItem,\n      onChange,\n      outerPaddingProps,\n      readOnly,\n      renderBlock,\n      renderBlockActions,\n      reviewChangesHovered,\n      setRef,\n      spellCheck,\n      toolTipContent,\n      tooltipEnabled,\n      value,\n    ],\n  )\n}\n\nexport const DefaultComponent = (props: BlockProps) => {\n  return <>{props.children}</>\n}\n","/* eslint-disable camelcase */\n\nimport {Card, rem} from '@sanity/ui'\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {css, styled} from 'styled-components'\n\nimport {ScrollContainer} from '../../../components/scroll'\nimport {createListName, TEXT_LEVELS} from './text'\n\nexport const Root = styled(Card)`\n  &[data-fullscreen='true'] {\n    height: 100%;\n  }\n\n  &[data-fullscreen='false'] {\n    min-height: 5em;\n    resize: vertical;\n    overflow: auto;\n    height: 19em;\n  }\n\n  &:not([hidden]) {\n    display: flex;\n  }\n\n  flex-direction: column;\n`\n\nexport const ToolbarCard = styled(Card)`\n  z-index: 10;\n  line-height: 0;\n`\n\nexport const EditableCard = styled(Card)`\n  position: relative;\n  overflow: hidden;\n  overflow: clip;\n\n  & > [data-portal] {\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    pointer-events: none;\n\n    & > * {\n      pointer-events: initial;\n    }\n  }\n\n  &::selection,\n  *::selection {\n    background-color: transparent;\n  }\n`\n\nexport const Scroller = styled(ScrollContainer)`\n  position: relative;\n  overflow: auto;\n  height: 100%;\n  display: flex;\n  flex-direction: column;\n\n  & > * {\n    flex: 1;\n    min-height: auto;\n  }\n`\n\nexport const EditableWrapper = styled(Card)<{$isFullscreen: boolean; $readOnly?: boolean}>`\n  height: 100%;\n  width: 100%;\n  counter-reset: ${TEXT_LEVELS.map((l) => createListName(l)).join(' ')};\n  overflow: hidden;\n  overflow: clip;\n\n  & > div {\n    height: 100%;\n  }\n\n  & .pt-editable {\n    display: block;\n    width: 100%;\n    height: 100%;\n\n    ${TEXT_LEVELS.map((l) => {\n      return css`\n        & > .pt-list-item-number[class~='pt-list-item-level-${l}'] {\n          counter-increment: ${createListName(l)};\n        }\n      `\n    })}\n\n    & > .pt-list-item-bullet + .pt-list-item-number,\n    & > .pt-list-item-number + .pt-list-item-bullet {\n      margin-top: ${({theme}) => theme.sanity.space[3]}px;\n    }\n\n    & > :not(.pt-list-item) + .pt-list-item {\n      margin-top: ${({theme}) => theme.sanity.space[2]}px;\n    }\n\n    /* Reset the list count if the element is not a numbered list item */\n    & > :not(.pt-list-item-number) {\n      counter-set: ${TEXT_LEVELS.map((l) => createListName(l)).join(' ')};\n    }\n\n    /* Reset the list count all the sub-list items */\n    & > .pt-list-item-number.pt-list-item-level-${TEXT_LEVELS[0]} {\n      counter-set: ${TEXT_LEVELS.slice(1)\n        .map((l) => createListName(l))\n        .join(' ')};\n    }\n\n    & > .pt-list-item + :not(.pt-list-item) {\n      margin-top: ${({theme}) => theme.sanity.space[3]}px;\n    }\n\n    & > :first-child {\n      padding-top: ${({$isFullscreen, theme}) => theme.sanity.space[$isFullscreen ? 5 : 3]}px;\n    }\n\n    padding-bottom: ${({$isFullscreen, theme}) => theme.sanity.space[$isFullscreen ? 9 : 5]}px;\n\n    & > .pt-block {\n      margin: 0 auto;\n      max-width: ${(props) => getTheme_v2(props.theme).container[1]}px;\n    }\n\n    /* & > .pt-block {\n      & .pt-inline-object {\n      }\n    } */\n\n    & .pt-drop-indicator {\n      pointer-events: none;\n      border: 1px solid var(--card-focus-ring-color) !important;\n      height: 0px !important;\n      border-radius: ${(props) => getTheme_v2(props.theme).radius[2]}px;\n      margin-top: -3px;\n      left: calc(\n        ${({$isFullscreen, theme}) =>\n            $isFullscreen ? rem(theme.sanity.space[5]) : rem(theme.sanity.space[3])} -\n          1px\n      );\n      right: calc(\n        ${({$isFullscreen, theme}) =>\n            $isFullscreen ? rem(theme.sanity.space[5]) : rem(theme.sanity.space[3])} -\n          1px\n      );\n      width: calc(\n        100% -\n          ${({$isFullscreen, theme}) =>\n            $isFullscreen ? rem(theme.sanity.space[5] * 2) : rem(theme.sanity.space[3] * 2)} +\n          2px\n      ) !important;\n    }\n  }\n`\n","import {PortableTextEditor} from '@portabletext/editor'\nimport {useMemo} from 'react'\nimport scrollIntoView from 'scroll-into-view-if-needed'\n\n// This hook is used to scroll the editor selection into place when actively editing the document.\nexport function useScrollSelectionIntoView(scrollElement: HTMLElement | null) {\n  return useMemo(\n    () =>\n      (editor: PortableTextEditor, domRange: Range): void => {\n        const selection = PortableTextEditor.getSelection(editor)\n        if (selection) {\n          const leafEl = domRange.startContainer.parentElement\n          if (!leafEl) {\n            return\n          }\n          scrollIntoView(leafEl, {\n            scrollMode: 'if-needed',\n            boundary: scrollElement,\n            block: 'nearest',\n            inline: 'nearest',\n          })\n        }\n      },\n    [scrollElement],\n  )\n}\n","import {usePortableTextEditor} from '@portabletext/editor'\nimport {useMemo} from 'react'\n\nexport function useSpellCheck(): boolean {\n  const editor = usePortableTextEditor()\n  return useMemo(() => {\n    // Chrome 96. has serious perf. issues with spellchecking\n    // https://bugs.chromium.org/p/chromium/issues/detail?id=1271918\n    // This issue is verified fixed in Chrome 97.\n    const spellCheckOption = editor.schemaTypes.block.options?.spellCheck\n    const isChrome96 =\n      typeof navigator === 'undefined' ? false : /Chrome\\/96/.test(navigator.userAgent)\n    return spellCheckOption === undefined && isChrome96 === true ? false : spellCheckOption\n  }, [editor])\n}\n","import {type BlockListItemRenderProps} from '@portabletext/editor'\nimport {useMemo} from 'react'\n\nimport {type BlockListItemProps} from '../../../types'\n\nconst DefaultComponent = (dProps: BlockListItemProps) => {\n  return <>{dProps.children}</>\n}\n\nexport const ListItem = (props: BlockListItemRenderProps) => {\n  const {block, children, schemaType, selected, focused, level, value} = props\n  const {title, component: CustomComponent} = schemaType\n  return useMemo(() => {\n    const componentProps = {\n      block,\n      focused,\n      level,\n      renderDefault: DefaultComponent,\n      schemaType,\n      selected,\n      title,\n      value,\n    }\n    return CustomComponent ? (\n      <CustomComponent {...componentProps}>{children}</CustomComponent>\n    ) : (\n      <DefaultComponent {...componentProps}>{children}</DefaultComponent>\n    )\n  }, [CustomComponent, block, children, focused, level, schemaType, selected, title, value])\n}\n","import {type BlockStyleRenderProps} from '@portabletext/editor'\nimport {useCallback, useMemo} from 'react'\n\nimport {type BlockStyleProps} from '../../../types'\nimport {Normal as FallbackComponent, TEXT_STYLES, TextContainer} from './textStyles'\n\nexport const Style = (props: BlockStyleRenderProps) => {\n  const {block, focused, children, selected, schemaType} = props\n  const DefaultComponentWithFallback = useMemo(\n    () =>\n      (block.style && TEXT_STYLES[block.style] ? TEXT_STYLES[block.style] : TEXT_STYLES[0]) ||\n      FallbackComponent,\n    [block.style],\n  )\n\n  const DefaultComponent = useCallback(\n    (defaultComponentProps: BlockStyleProps) => {\n      return (\n        <DefaultComponentWithFallback>\n          <TextContainer data-testid={`text-style--${block.style}`}>\n            {defaultComponentProps.children}\n          </TextContainer>\n        </DefaultComponentWithFallback>\n      )\n    },\n    [DefaultComponentWithFallback, block.style],\n  )\n\n  return useMemo(() => {\n    const CustomComponent = schemaType.component\n    const {title, value} = schemaType\n    const componentProps = {\n      block,\n      focused,\n      renderDefault: DefaultComponent,\n      schemaType,\n      selected,\n      title,\n      value,\n    }\n    return CustomComponent ? (\n      <CustomComponent {...componentProps}>{children}</CustomComponent>\n    ) : (\n      <DefaultComponent {...componentProps}>{children}</DefaultComponent>\n    )\n  }, [DefaultComponent, block, children, focused, schemaType, selected])\n}\n","import {styled} from 'styled-components'\n\nconst DividerDiv = styled.div`\n  border-right: 1px solid var(--card-border-color);\n  height: auto;\n\n  &[data-hidden] {\n    opacity: 0;\n  }\n`\n\ninterface CollapseMenuDividerProps {\n  hidden?: boolean\n}\n\nexport function CollapseMenuDivider(props: CollapseMenuDividerProps) {\n  const {hidden, ...rest} = props\n\n  return (\n    <DividerDiv data-ui=\"CollapseMenuDivider\" data-hidden={hidden ? '' : undefined} {...rest} />\n  )\n}\n","import {Menu, MenuDivider} from '@sanity/ui'\nimport {type ForwardedRef, forwardRef, Fragment} from 'react'\n\nimport {MenuButton, type MenuButtonProps, MenuItem} from '../../../ui-components'\nimport {type CollapseMenuProps} from './CollapseMenu'\n\nconst MENU_BUTTON_POPOVER_PROPS: MenuButtonProps['popover'] = {\n  portal: true,\n  constrainSize: true,\n}\n\nexport const CollapseOverflowMenu = forwardRef(function CollapseOverflowMenu(\n  props: Pick<\n    CollapseMenuProps,\n    'disableRestoreFocusOnClose' | 'menuButtonProps' | 'onMenuClose'\n  > & {menuOptions: React.JSX.Element[]; menuButton: React.JSX.Element},\n  forwardedRef: ForwardedRef<HTMLButtonElement>,\n) {\n  const {disableRestoreFocusOnClose, menuButton, menuButtonProps, menuOptions, onMenuClose} = props\n\n  return (\n    <MenuButton\n      __unstable_disableRestoreFocusOnClose={disableRestoreFocusOnClose}\n      id=\"menu-button\"\n      ref={forwardedRef}\n      onClose={onMenuClose}\n      popover={MENU_BUTTON_POPOVER_PROPS}\n      {...menuButtonProps}\n      button={menuButton}\n      menu={\n        <Menu>\n          {menuOptions.map((c, index) => {\n            const {\n              // eslint-disable-next-line @typescript-eslint/no-unused-vars\n              collapsedProps = {},\n              // eslint-disable-next-line @typescript-eslint/no-unused-vars\n              expandedProps = {},\n              // eslint-disable-next-line @typescript-eslint/no-unused-vars\n              tooltipProps = {},\n              // eslint-disable-next-line @typescript-eslint/no-unused-vars\n              tooltipText,\n              // eslint-disable-next-line @typescript-eslint/no-unused-vars\n              dividerBefore,\n              // eslint-disable-next-line @typescript-eslint/no-unused-vars\n              fontSize,\n              // eslint-disable-next-line @typescript-eslint/no-unused-vars\n              padding,\n              text,\n              icon,\n              selected,\n              ...rest\n            } = c.props\n\n            return (\n              <Fragment key={c.key}>\n                {dividerBefore && index !== 0 && <MenuDivider />}\n                <MenuItem text={text} icon={icon} pressed={selected} {...rest} />\n              </Fragment>\n            )\n          })}\n        </Menu>\n      }\n    />\n  )\n})\n","import {Flex} from '@sanity/ui'\nimport {useEffect, useState} from 'react'\n\ninterface ObserveElementProps {\n  children: React.JSX.Element\n  options?: IntersectionObserverInit\n  onIntersectionChange: IntersectionObserverCallback\n}\n\nexport function ObserveElement(props: ObserveElementProps) {\n  const {onIntersectionChange, children, options, ...rest} = props\n  const [el, setEl] = useState<HTMLSpanElement | null>(null)\n\n  useEffect(() => {\n    const target = el?.closest('[data-ui=\"Flex\"]')\n    if (!target) return undefined\n\n    const io = new IntersectionObserver(onIntersectionChange, options)\n    io.observe(target)\n\n    return () => {\n      io.unobserve(target)\n      io.disconnect()\n    }\n  }, [el, onIntersectionChange, options])\n\n  return (\n    <Flex {...rest}>\n      {children}\n      <span hidden ref={setEl} />\n    </Flex>\n  )\n}\n","import {Flex} from '@sanity/ui'\nimport {difference} from 'lodash'\nimport {\n  Children,\n  cloneElement,\n  type ForwardedRef,\n  forwardRef,\n  Fragment,\n  memo,\n  type ReactNode,\n  useCallback,\n  useMemo,\n  useState,\n} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {type MenuButtonProps, Tooltip} from '../../../ui-components'\nimport {ContextMenuButton} from '../contextMenuButton'\nimport {CollapseMenuDivider} from './CollapseMenuDivider'\nimport {CollapseOverflowMenu} from './CollapseOverflowMenu'\nimport {ObserveElement} from './ObserveElement'\n\n/** @internal */\nexport interface CollapseMenuProps {\n  children: ReactNode | ReactNode[]\n  collapsed?: boolean\n  collapseText?: boolean\n  disableRestoreFocusOnClose?: boolean\n  gap?: number | number[]\n  menuButtonProps?: Omit<MenuButtonProps, 'id' | 'menu' | 'button'> & {\n    id?: string\n    button?: React.JSX.Element\n  }\n  onMenuClose?: () => void\n}\n\nconst FOCUS_RING_PADDING = 3\n\nconst OPTION_STYLE = css`\n  list-style: none;\n  display: flex;\n  white-space: nowrap;\n\n  &[data-hidden='true'] {\n    opacity: 0;\n    visibility: hidden;\n  }\n`\n\nconst OuterFlex = styled(Flex)`\n  padding: ${FOCUS_RING_PADDING}px;\n  margin: -${FOCUS_RING_PADDING}px;\n  box-sizing: border-box;\n`\n\nconst RootFlex = styled(Flex)`\n  border-radius: inherit;\n  position: relative;\n`\n\nconst RowFlex = styled(Flex)`\n  width: max-content;\n  &[data-hidden='true'] {\n    visibility: hidden;\n    position: relative;\n    margin-top: -1px;\n    height: 1px;\n  }\n`\n\nconst OptionObserveElement = styled(ObserveElement)`\n  ${OPTION_STYLE}\n`\n\nfunction _isReactElement(node: unknown): node is React.JSX.Element {\n  return Boolean(node)\n}\n\ninterface IntersectionEntry {\n  intersects: boolean\n  element: React.JSX.Element\n  // todo: potentially add bounding rects so we can calculate how many we can fit non-collapsed vs collapsed\n}\n\ntype ElementIntersections = Record<string, IntersectionEntry>\n\n/** @internal */\nexport const CollapseMenu = forwardRef(function CollapseMenu(\n  props: CollapseMenuProps,\n  ref: ForwardedRef<any>,\n) {\n  const {children, collapsed, disableRestoreFocusOnClose, onMenuClose, menuButtonProps, ...rest} =\n    props\n\n  const menuOptions = useMemo(() => Children.toArray(children).filter(_isReactElement), [children])\n  const menuButton = useMemo(\n    () => menuButtonProps?.button || <ContextMenuButton />,\n    [menuButtonProps],\n  )\n\n  if (collapsed) {\n    // We're showing everything collapsed (e.g. not auto-collapsing), so just delegate straight to the Menu\n    return (\n      <CollapseOverflowMenu\n        ref={ref}\n        disableRestoreFocusOnClose={disableRestoreFocusOnClose}\n        menuButton={menuButton}\n        menuButtonProps={menuButtonProps}\n        menuOptions={menuOptions}\n        onMenuClose={onMenuClose}\n      />\n    )\n  }\n  return (\n    <AutoCollapseMenu\n      {...rest}\n      ref={ref}\n      disableRestoreFocusOnClose={disableRestoreFocusOnClose}\n      menuButtonProps={menuButtonProps}\n      menuOptions={menuOptions}\n      onMenuClose={onMenuClose}\n    />\n  )\n})\n\n/** @internal */\nexport const AutoCollapseMenu = forwardRef(function AutoCollapseMenu(\n  props: Omit<CollapseMenuProps, 'children' | 'collapsed'> & {menuOptions: React.JSX.Element[]},\n  ref: ForwardedRef<HTMLDivElement>,\n) {\n  const {\n    collapseText = true,\n    disableRestoreFocusOnClose,\n    gap,\n    menuOptions,\n    menuButtonProps,\n    onMenuClose,\n    ...rest\n  } = props\n\n  const [rootEl, setRootEl] = useState<HTMLDivElement | null>(null)\n\n  // We use this to keep track of intersections for expanded options\n  const [expandedIntersections, setExpandedIntersections] = useState<ElementIntersections>({})\n\n  // We use this to keep track of intersections for collapsed options\n  const [collapsedIntersections, setCollapsedIntersections] = useState<ElementIntersections>({})\n\n  const intersectionOptions = useMemo(\n    () => ({\n      root: rootEl,\n      // safari needs threshold to be < 1\n      threshold: 0.99,\n      rootMargin: '2px',\n    }),\n    [rootEl],\n  )\n\n  // Make a list of all element keys of menu options\n  const menuOptionKeys = useMemo(() => menuOptions.map((child) => child.key), [menuOptions])\n\n  // List of intersections we have not yet received\n  const pendingIntersections = useMemo(\n    () => [\n      ...difference(menuOptionKeys, Object.keys(expandedIntersections)),\n      ...difference(menuOptionKeys, Object.keys(collapsedIntersections)),\n    ],\n    [menuOptionKeys, expandedIntersections, collapsedIntersections],\n  )\n\n  // Get a list of the expanded elements that are currently overflowing\n  const overflowingExpandedElements = useMemo(\n    () =>\n      menuOptions.filter((optionElement) => {\n        const entry = expandedIntersections[optionElement.key as string]\n        return entry && !entry.intersects\n      }),\n    [expandedIntersections, menuOptions],\n  )\n\n  const handleExpandedIntersection = useCallback(\n    (e: IntersectionObserverEntry, element: React.JSX.Element) => {\n      setExpandedIntersections((current) => {\n        const key = element.key\n        if (key === null) {\n          throw new Error('Expected element to have a non-null key')\n        }\n        const nextState = {\n          intersects: e.isIntersecting,\n          element: element,\n        }\n\n        const currentState = current[key]\n        if (!currentState || currentState.intersects !== nextState.intersects) {\n          return {\n            ...current,\n            [key]: nextState,\n          }\n        }\n        return current\n      })\n    },\n    [],\n  )\n\n  const handleCollapsedIntersection = useCallback(\n    (e: IntersectionObserverEntry, element: React.JSX.Element) => {\n      setCollapsedIntersections((current) => {\n        const key = element.key\n        if (key === null) {\n          throw new Error('Expected child element to have a non-null key')\n        }\n        const currentElementIntersection = current[key]\n\n        const nextElementIntersection = {\n          intersects: e.isIntersecting,\n          element,\n        }\n        return currentElementIntersection?.intersects === nextElementIntersection.intersects\n          ? current\n          : {\n              ...current,\n              [key]: nextElementIntersection,\n            }\n      })\n    },\n    [],\n  )\n\n  // An array of children rendered in their collapsed state\n  const collapsedElements = useMemo(\n    () =>\n      menuOptions.map((optionElement) => {\n        const {collapsedProps} = optionElement.props\n        const modeProps = collapsedProps\n        const text = collapseText ? undefined : optionElement.props.text\n\n        return cloneElement(optionElement, {\n          ...modeProps,\n          text: text,\n        })\n      }),\n    [menuOptions, collapseText],\n  )\n\n  // Even if rendered collapsed, there might not be space to render all,\n  // so put the overflowing ones into the menu\n  const overflowingCollapsedOptionElements = useMemo(\n    () =>\n      menuOptions.filter((optionElement) => {\n        const intersection = collapsedIntersections[optionElement.key as string]\n        return intersection?.intersects === false\n      }),\n    [menuOptions, collapsedIntersections],\n  )\n\n  const shouldCollapse = overflowingExpandedElements.length > 0\n  const visibleMenuOptions = shouldCollapse\n    ? collapsedElements.filter((optionElement) => {\n        const intersection = collapsedIntersections[optionElement.key as string]\n        return intersection?.intersects === true\n      })\n    : menuOptions\n\n  const menuButton = useMemo(\n    () => menuButtonProps?.button || <ContextMenuButton />,\n    [menuButtonProps],\n  )\n\n  return (\n    <OuterFlex\n      align=\"center\"\n      data-ui=\"CollapseMenu\"\n      overflow=\"hidden\"\n      sizing=\"border\"\n      ref={ref}\n      {...rest}\n    >\n      <RootFlex direction=\"column\" flex={1} justify=\"center\" ref={setRootEl}>\n        {/* The actual visible options */}\n        <RowFlex gap={gap}>\n          {pendingIntersections.length === 0 &&\n            visibleMenuOptions.map((optionElement, index) => {\n              const {dividerBefore, tooltipText = '', tooltipProps = {}} = optionElement.props\n              const hidden =\n                !optionElement.key ||\n                !(optionElement.key in expandedIntersections) ||\n                overflowingCollapsedOptionElements.includes(optionElement)\n              return (\n                <Fragment key={optionElement.key}>\n                  {dividerBefore && index !== 0 && <CollapseMenuDivider hidden={hidden} />}\n                  <Tooltip portal disabled={!tooltipText} content={tooltipText} {...tooltipProps}>\n                    <Flex>\n                      {cloneElement(optionElement, {\n                        'disabled': optionElement.props.disabled || hidden,\n                        'aria-hidden': hidden,\n                      })}\n                    </Flex>\n                  </Tooltip>\n                </Fragment>\n              )\n            })}\n        </RowFlex>\n        {/* Rendered hidden in order to calculate intersections for original (expanded) menu options */}\n        <RenderHidden\n          gap={gap}\n          elements={menuOptions}\n          intersectionOptions={intersectionOptions}\n          onIntersectionChange={handleExpandedIntersection}\n        />\n        {/* Rendered hidden in order to calculate intersections for collapsed menu options */}\n        <RenderHidden\n          gap={gap}\n          elements={collapsedElements}\n          intersectionOptions={intersectionOptions}\n          onIntersectionChange={handleCollapsedIntersection}\n        />\n      </RootFlex>\n\n      {/* Show the collapsed items that doesn't fit in a menu */}\n      {overflowingCollapsedOptionElements.length > 0 && (\n        <Flex marginLeft={gap}>\n          <CollapseOverflowMenu\n            disableRestoreFocusOnClose={disableRestoreFocusOnClose}\n            menuButton={menuButton}\n            menuButtonProps={menuButtonProps}\n            menuOptions={overflowingCollapsedOptionElements}\n            onMenuClose={onMenuClose}\n          />\n        </Flex>\n      )}\n    </OuterFlex>\n  )\n})\n\nconst RenderHidden = memo(function RenderHidden(props: {\n  elements: React.JSX.Element[]\n  gap?: number | number[]\n  intersectionOptions: IntersectionObserverInit\n  onIntersectionChange: (e: IntersectionObserverEntry, element: React.JSX.Element) => void\n}) {\n  const {elements, gap, intersectionOptions, onIntersectionChange} = props\n  return (\n    <RowFlex data-hidden aria-hidden=\"true\" gap={gap} overflow=\"hidden\">\n      {elements.map((element, index) => {\n        const {dividerBefore} = element.props\n        return (\n          <Fragment key={element.key}>\n            {dividerBefore && index !== 0 && <CollapseMenuDivider hidden />}\n\n            <OptionObserveElement\n              options={intersectionOptions}\n              // eslint-disable-next-line react/jsx-no-bind\n              onIntersectionChange={(e) => onIntersectionChange(e[0], element)}\n            >\n              <Flex>\n                {cloneElement(element, {\n                  'disabled': true,\n                  'aria-hidden': true,\n                })}\n              </Flex>\n            </OptionObserveElement>\n          </Fragment>\n        )\n      })}\n    </RowFlex>\n  )\n})\n","import {\n  type ElementType,\n  type ForwardedRef,\n  forwardRef,\n  type HTMLProps,\n  type ReactNode,\n} from 'react'\n\nimport {Button, type ButtonProps, type TooltipProps} from '../../../ui-components'\n\n/** @internal */\nexport interface CommonProps extends Omit<ButtonProps, 'text' | 'iconRight'> {\n  as?: ElementType | keyof React.JSX.IntrinsicElements\n  dividerBefore?: boolean\n  focused?: boolean\n  tooltipProps?: TooltipProps\n  tooltipText?: ReactNode\n}\n\n/** @internal */\nexport interface CollapseMenuButtonProps extends CommonProps {\n  collapsedProps?: Omit<CommonProps, 'text'>\n  expandedProps?: CommonProps\n  text: string\n}\n\n/** @internal */\nexport const CollapseMenuButton = forwardRef(function CollapseMenuButton(\n  props: CollapseMenuButtonProps & Omit<HTMLProps<HTMLButtonElement>, 'as' | 'size'>,\n  ref: ForwardedRef<HTMLButtonElement>,\n) {\n  const {\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    collapsedProps = {},\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    expandedProps = {},\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    tooltipProps = {},\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    tooltipText,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    dividerBefore,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    ...rest\n  } = props\n\n  return <Button data-ui=\"CollapseMenuButton\" {...rest} ref={ref} />\n})\n","import {useMemo} from 'react'\nimport {styled} from 'styled-components'\n\ninterface Props {\n  icon: string\n  active: boolean\n}\n\nconst CustomIconDiv = styled.div`\n  width: 1em;\n  height: 1em;\n  border-radius: inherit;\n  background-origin: content-box;\n  background-position: center;\n  background-repeat: no-repeat;\n  background-size: cover;\n  transform: scale(0.7);\n`\n\nexport function CustomIcon(props: Props) {\n  const {icon, active} = props\n\n  const inlineStyle = useMemo(\n    () => ({\n      backgroundImage: `url(${icon})`,\n      filter: active ? 'invert(100%)' : 'invert(0%)',\n    }),\n    [active, icon],\n  )\n\n  return <CustomIconDiv style={inlineStyle} />\n}\n","import {\n  type HotkeyOptions,\n  PortableTextEditor,\n  type PortableTextMemberSchemaTypes,\n} from '@portabletext/editor'\nimport {\n  BlockElementIcon,\n  BoldIcon,\n  CodeIcon,\n  InlineElementIcon,\n  ItalicIcon,\n  LinkIcon,\n  OlistIcon,\n  StrikethroughIcon,\n  UlistIcon,\n  UnderlineIcon,\n  UnknownIcon,\n} from '@sanity/icons'\nimport {type ObjectSchemaType} from '@sanity/types'\nimport {capitalize, get} from 'lodash'\nimport {type ComponentType} from 'react'\n\nimport {CustomIcon} from './CustomIcon'\nimport {\n  type BlockItem,\n  type BlockStyleItem,\n  type PTEToolbarAction,\n  type PTEToolbarActionGroup,\n} from './types'\n\nfunction getPTEFormatActions(\n  editor: PortableTextEditor,\n  disabled: boolean,\n  hotkeyOpts: HotkeyOptions,\n  t?: (key: string) => string,\n): PTEToolbarAction[] {\n  const types = editor.schemaTypes\n  return types.decorators.map((decorator) => {\n    const shortCutKey = Object.keys(hotkeyOpts.marks || {}).find(\n      (key) => hotkeyOpts.marks?.[key] === decorator.value,\n    )\n\n    let hotkeys: string[] = []\n    if (shortCutKey) {\n      hotkeys = [shortCutKey]\n    }\n\n    return {\n      type: 'format',\n      disabled: disabled,\n      icon: decorator?.icon,\n      key: decorator.value,\n      handle: (): void => {\n        PortableTextEditor.toggleMark(editor, decorator.value)\n        PortableTextEditor.focus(editor)\n      },\n      hotkeys,\n      title: decorator.i18nTitleKey && t ? t(decorator.i18nTitleKey) : decorator.title,\n    }\n  })\n}\n\nfunction getPTEListActions(\n  editor: PortableTextEditor,\n  disabled: boolean,\n  t?: (key: string) => string,\n): PTEToolbarAction[] {\n  const types = editor.schemaTypes\n  return types.lists.map((listItem) => {\n    return {\n      type: 'listStyle',\n      key: listItem.value,\n      disabled: disabled,\n      icon: listItem?.icon,\n      handle: (): void => {\n        PortableTextEditor.toggleList(editor, listItem.value)\n      },\n      title: listItem.i18nTitleKey && t ? t(listItem.i18nTitleKey) : listItem.title,\n    }\n  })\n}\n\nfunction getAnnotationIcon(type: ObjectSchemaType): ComponentType | string | undefined {\n  return (\n    get(type, 'icon') ||\n    get(type, 'type.icon') ||\n    get(type, 'type.to.icon') ||\n    get(type, 'type.to[0].icon')\n  )\n}\n\nfunction getPTEAnnotationActions(\n  editor: PortableTextEditor,\n  disabled: boolean,\n  onInsert: (type: ObjectSchemaType) => void,\n  t?: (key: string) => string,\n): PTEToolbarAction[] {\n  const types = editor.schemaTypes\n  const focusChild = PortableTextEditor.focusChild(editor)\n  const hasText = focusChild && focusChild.text\n  return types.annotations.map((aType) => {\n    return {\n      type: 'annotation',\n      disabled: !hasText || disabled,\n      icon: getAnnotationIcon(aType),\n      key: aType.name,\n      handle: (active?: boolean): void => {\n        if (active) {\n          PortableTextEditor.removeAnnotation(editor, aType)\n          PortableTextEditor.focus(editor)\n        } else {\n          onInsert(aType)\n        }\n      },\n      title:\n        aType.i18nTitleKey && t ? t(aType.i18nTitleKey) : aType.title || capitalize(aType.name),\n    }\n  })\n}\n\n/**\n * @internal\n */\nexport function getPTEToolbarActionGroups(\n  editor: PortableTextEditor,\n  disabled: boolean,\n  onInsertAnnotation: (type: ObjectSchemaType) => void,\n  hotkeyOpts: HotkeyOptions,\n  t?: (key: string) => string,\n): PTEToolbarActionGroup[] {\n  return [\n    {name: 'format', actions: getPTEFormatActions(editor, disabled, hotkeyOpts, t)},\n    {name: 'list', actions: getPTEListActions(editor, disabled, t)},\n    {name: 'annotation', actions: getPTEAnnotationActions(editor, disabled, onInsertAnnotation, t)},\n  ]\n}\n\nexport function getBlockStyles(types: PortableTextMemberSchemaTypes): BlockStyleItem[] {\n  return types.styles.map((style) => {\n    return {\n      key: `style-${style.value}`,\n      style: style.value,\n      styleComponent: style && style.component,\n      title: style.title,\n      i18nTitleKey: style.i18nTitleKey,\n    }\n  })\n}\n\nfunction getInsertMenuIcon(type: ObjectSchemaType, fallbackIcon: ComponentType): ComponentType {\n  const referenceIcon = get(type, 'to[0].icon')\n\n  return type.icon || (type.type && type.type.icon) || referenceIcon || fallbackIcon\n}\n\nexport function getInsertMenuItems(\n  types: PortableTextMemberSchemaTypes,\n  disabled: boolean,\n  onInsertBlock: (type: ObjectSchemaType) => void,\n  onInsertInline: (type: ObjectSchemaType) => void,\n): BlockItem[] {\n  const blockItems = types.blockObjects.map(\n    (type, index): BlockItem => ({\n      handle: () => onInsertBlock(type),\n      icon: getInsertMenuIcon(type, BlockElementIcon),\n      inline: false,\n      key: `block-${index}`,\n      type,\n    }),\n  )\n\n  const inlineItems = types.inlineObjects.map(\n    (type, index): BlockItem => ({\n      handle: () => onInsertInline(type),\n      icon: getInsertMenuIcon(type, InlineElementIcon),\n      inline: true,\n      key: `inline-${index}`,\n      type,\n    }),\n  )\n\n  // Do not include items that are supposed to be hidden\n  const filteredBlockItems = blockItems.concat(inlineItems).filter((item) => !item.type?.hidden)\n\n  return filteredBlockItems\n}\n\nconst annotationIcons: Record<string, ComponentType> = {\n  link: LinkIcon,\n}\n\nconst formatIcons: Record<string, ComponentType> = {\n  'strong': BoldIcon,\n  'em': ItalicIcon,\n  'strike-through': StrikethroughIcon,\n  'underline': UnderlineIcon,\n  'code': CodeIcon,\n}\n\nconst listStyleIcons: Record<string, ComponentType> = {\n  number: OlistIcon,\n  bullet: UlistIcon,\n}\n\nexport function getActionIcon(action: PTEToolbarAction, active: boolean) {\n  if (action.icon) {\n    if (typeof action.icon === 'string') {\n      return <CustomIcon active={active} icon={action.icon} />\n    }\n\n    return action.icon\n  }\n\n  if (action.type === 'annotation') {\n    return annotationIcons[action.key] || UnknownIcon\n  }\n\n  if (action.type === 'listStyle') {\n    return listStyleIcons[action.key] || UnknownIcon\n  }\n\n  return formatIcons[action.key] || UnknownIcon\n}\n","import {\n  type HotkeyOptions,\n  PortableTextEditor,\n  usePortableTextEditor,\n  usePortableTextEditorSelection,\n} from '@portabletext/editor'\nimport {\n  type ObjectSchemaType,\n  type Path,\n  type PortableTextBlock,\n  type PortableTextChild,\n} from '@sanity/types'\nimport {useCallback, useMemo} from 'react'\n\nimport {type FIXME} from '../../../../FIXME'\nimport {useTranslation} from '../../../../i18n'\nimport {useUnique} from '../../../../util'\nimport {getPTEToolbarActionGroups} from './helpers'\nimport {type BlockStyleItem, type PTEToolbarAction, type PTEToolbarActionGroup} from './types'\n\nexport function useFocusBlock(): PortableTextBlock | undefined {\n  const editor = usePortableTextEditor()\n  const selection = usePortableTextEditorSelection()\n\n  return useMemo(\n    () => (selection ? PortableTextEditor.focusBlock(editor) : undefined),\n    [editor, selection],\n  )\n}\n\nexport function useFocusChild(): PortableTextChild | undefined {\n  const editor = usePortableTextEditor()\n  const selection = usePortableTextEditorSelection()\n\n  return useMemo(\n    () => (selection ? PortableTextEditor.focusChild(editor) : undefined),\n    [editor, selection],\n  )\n}\n\nexport function useActionGroups({\n  hotkeys,\n  onMemberOpen,\n  resolveInitialValue,\n  disabled,\n}: {\n  hotkeys: HotkeyOptions\n  onMemberOpen: (relativePath: Path) => void\n  resolveInitialValue: (type: ObjectSchemaType) => FIXME\n  disabled: boolean\n}): PTEToolbarActionGroup[] {\n  const editor = usePortableTextEditor()\n  const {t} = useTranslation()\n\n  const handleInsertAnnotation = useCallback(\n    async (schemaType: ObjectSchemaType) => {\n      const initialValue = await resolveInitialValue(schemaType)\n      const paths = PortableTextEditor.addAnnotation(editor, schemaType, initialValue)\n      if (paths && paths.markDefPath) {\n        onMemberOpen(paths.markDefPath)\n      }\n    },\n    [editor, onMemberOpen, resolveInitialValue],\n  )\n\n  return useMemo(\n    () =>\n      editor ? getPTEToolbarActionGroups(editor, disabled, handleInsertAnnotation, hotkeys, t) : [],\n    [disabled, editor, handleInsertAnnotation, hotkeys, t],\n  )\n}\n\nexport function useActiveActionKeys({\n  actions,\n}: {\n  actions: Array<PTEToolbarAction & {firstInGroup?: true}>\n}): string[] {\n  const editor = usePortableTextEditor()\n  const selection = usePortableTextEditorSelection()\n\n  return useUnique(\n    useMemo(() => {\n      return selection\n        ? actions\n            .filter((a) => {\n              if (a.type === 'annotation') {\n                return PortableTextEditor.isAnnotationActive(editor, a.key)\n              }\n\n              if (a.type === 'listStyle') {\n                return PortableTextEditor.hasListStyle(editor, a.key)\n              }\n\n              return PortableTextEditor.isMarkActive(editor, a.key)\n            })\n            .map((a) => a.key)\n        : []\n    }, [actions, editor, selection]),\n  )\n}\n\nexport function useActiveStyleKeys({items}: {items: BlockStyleItem[]}): string[] {\n  const editor = usePortableTextEditor()\n  const focusBlock = useFocusBlock()\n  const selection = usePortableTextEditorSelection()\n\n  return useUnique(\n    useMemo(\n      () =>\n        focusBlock && selection\n          ? items\n              .filter((i) => PortableTextEditor.hasBlockStyle(editor, i.style))\n              .map((i) => i.style)\n          : [],\n      [editor, focusBlock, items, selection],\n    ),\n  )\n}\n","import {\n  PortableTextEditor,\n  usePortableTextEditor,\n  usePortableTextEditorSelection,\n} from '@portabletext/editor'\nimport {isKeySegment} from '@sanity/types'\nimport {memo, useCallback, useMemo} from 'react'\n\nimport {type PopoverProps} from '../../../../../ui-components'\nimport {CollapseMenu, CollapseMenuButton} from '../../../../components/collapseMenu'\nimport {ContextMenuButton} from '../../../../components/contextMenuButton'\nimport {useTranslation} from '../../../../i18n'\nimport {getActionIcon} from './helpers'\nimport {useActiveActionKeys, useFocusBlock} from './hooks'\nimport {type PTEToolbarAction, type PTEToolbarActionGroup} from './types'\n\nconst CollapseMenuMemo = memo(CollapseMenu)\n\nconst MENU_POPOVER_PROPS: PopoverProps = {constrainSize: true, portal: true}\n\ninterface ActionMenuProps {\n  disabled: boolean\n  groups: PTEToolbarActionGroup[]\n  isFullscreen?: boolean\n  collapsed?: boolean\n}\n\nexport const ActionMenu = memo(function ActionMenu(props: ActionMenuProps) {\n  const {disabled: disabledProp, groups, isFullscreen, collapsed} = props\n  const focusBlock = useFocusBlock()\n\n  const editor = usePortableTextEditor()\n  const selection = usePortableTextEditorSelection()\n  const {t} = useTranslation()\n  const isSelectingMultipleBlocks =\n    // Path at 0 is the block level, by comparing those we can detect if the user is selecting multiple blocks\n    selection && isKeySegment(selection.anchor.path[0]) && isKeySegment(selection.focus.path[0])\n      ? // In case of keyed segments\n        selection.anchor.path[0]._key !== selection?.focus.path[0]._key\n      : // In case of non-keyed segments\n        selection?.anchor.path[0] !== selection?.focus.path[0]\n\n  const isVoidBlock = focusBlock?._type !== editor.schemaTypes.block.name\n  const isEmptyTextBlock =\n    !isVoidBlock &&\n    Array.isArray(focusBlock.children) &&\n    focusBlock.children.length === 1 &&\n    focusBlock?.children[0].text === ''\n\n  const disabled = disabledProp || isVoidBlock\n\n  const actions: Array<PTEToolbarAction & {firstInGroup?: true}> = useMemo(\n    () =>\n      groups.reduce<Array<PTEToolbarAction & {firstInGroup?: true}>>((acc, group) => {\n        return acc.concat(\n          group.actions.map(\n            // eslint-disable-next-line max-nested-callbacks\n            (action: PTEToolbarAction, actionIndex) => {\n              if (actionIndex === 0) return {...action, firstInGroup: true}\n              return action\n            },\n          ),\n        )\n      }, []),\n    [groups],\n  )\n\n  const activeKeys = useActiveActionKeys({actions})\n\n  const handleMenuClose = useCallback(() => {\n    PortableTextEditor.focus(editor)\n  }, [editor])\n\n  const tooltipPlacement = isFullscreen ? 'bottom' : 'top'\n\n  const children = useMemo(\n    () =>\n      actions.map((action) => {\n        const annotationDisabled =\n          action.type === 'annotation' && (isEmptyTextBlock || isSelectingMultipleBlocks)\n        const annotationDisabledText = isEmptyTextBlock\n          ? t('user-menu.action.portable-text.annotation-disabled_empty-block', {\n              name: action.title || action.key,\n            })\n          : t('user-menu.action.portable-text.annotation-disabled_multiple-blocks', {\n              name: action.title || action.key,\n            })\n\n        const active = activeKeys.includes(action.key)\n        return (\n          <CollapseMenuButton\n            aria-label={t('toolbar.portable-text.action-button-aria-label', {\n              action: action.title || action.key,\n            })}\n            data-testid={`action-button-${action.key}`}\n            disabled={disabled || annotationDisabled}\n            mode=\"bleed\"\n            dividerBefore={action.firstInGroup}\n            icon={getActionIcon(action, active)}\n            key={action.key}\n            // eslint-disable-next-line react/jsx-no-bind\n            onClick={() => action.handle(active)}\n            selected={active}\n            text={action.title || action.key}\n            tooltipText={annotationDisabled ? annotationDisabledText : action.title || action.key}\n            tooltipProps={{\n              disabled: disabled,\n              placement: tooltipPlacement,\n              portal: 'default',\n            }}\n          />\n        )\n      }),\n    [\n      actions,\n      activeKeys,\n      disabled,\n      isEmptyTextBlock,\n      isSelectingMultipleBlocks,\n      t,\n      tooltipPlacement,\n    ],\n  )\n\n  const menuButtonProps = useMemo(\n    () => ({\n      button: (\n        <ContextMenuButton\n          data-testid=\"action-menu-button\"\n          disabled={disabled}\n          tooltipProps={{placement: tooltipPlacement}}\n        />\n      ),\n      popover: MENU_POPOVER_PROPS,\n    }),\n    [disabled, tooltipPlacement],\n  )\n\n  return (\n    <CollapseMenuMemo\n      data-testid=\"action-menu-auto-collapse-menu\"\n      collapsed={collapsed}\n      disableRestoreFocusOnClose\n      gap={1}\n      menuButtonProps={menuButtonProps}\n      onMenuClose={handleMenuClose}\n    >\n      {children}\n    </CollapseMenuMemo>\n  )\n})\n","import {PortableTextEditor, usePortableTextEditor} from '@portabletext/editor'\nimport {ChevronDownIcon} from '@sanity/icons'\nimport {\n  Menu,\n  // eslint-disable-next-line no-restricted-imports\n  MenuItem,\n  Text,\n} from '@sanity/ui'\nimport {memo, type MouseEvent, type ReactNode, useCallback, useMemo} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Button, MenuButton, type MenuButtonProps} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n'\nimport {\n  BlockQuote,\n  Heading1,\n  Heading2,\n  Heading3,\n  Heading4,\n  Heading5,\n  Heading6,\n  Normal,\n} from '../text/textStyles'\nimport {useActiveStyleKeys, useFocusBlock} from './hooks'\nimport {type BlockStyleItem} from './types'\n\nconst MenuButtonMemo = memo(MenuButton)\n\ninterface BlockStyleSelectProps {\n  disabled: boolean\n  items: BlockStyleItem[]\n  boundaryElement: HTMLDivElement | null\n}\n\nconst StyledMenuItem = styled(MenuItem)`\n  // Change the border color variable used by BlockQuote\n  // to make the border visible when the MenuItem is selected\n  &[data-selected] {\n    [data-option='blockquote'] {\n      --card-border-color: var(--card-muted-fg-color);\n    }\n  }\n`\n\nconst MENU_POPOVER_PROPS: MenuButtonProps['popover'] = {\n  constrainSize: true,\n  placement: 'bottom-start',\n  portal: 'default',\n}\n\nconst TEXT_STYLE_OPTIONS: Record<string, (title: ReactNode) => ReactNode> = {\n  h1: (title) => <Heading1>{title}</Heading1>,\n  h2: (title) => <Heading2>{title}</Heading2>,\n  h3: (title) => <Heading3>{title}</Heading3>,\n  h4: (title) => <Heading4>{title}</Heading4>,\n  h5: (title) => <Heading5>{title}</Heading5>,\n  h6: (title) => <Heading6>{title}</Heading6>,\n  normal: (title) => <Normal>{title}</Normal>,\n  blockquote: (title) => <BlockQuote data-option=\"blockquote\">{title}</BlockQuote>,\n}\n\nconst preventDefault = (event: MouseEvent<HTMLButtonElement>) => event.preventDefault()\n\nconst emptyStyle: BlockStyleItem = {\n  key: 'style-none',\n  style: '',\n  title: 'No style',\n  i18nTitleKey: 'inputs.portable-text.style.none',\n}\n\nexport const BlockStyleSelect = memo(function BlockStyleSelect(\n  props: BlockStyleSelectProps,\n): React.JSX.Element {\n  const {disabled, items: itemsProp, boundaryElement} = props\n  const editor = usePortableTextEditor()\n  const focusBlock = useFocusBlock()\n  const {t} = useTranslation()\n\n  const popoverProperties: MenuButtonProps['popover'] = {\n    constrainSize: true,\n    placement: 'bottom-start',\n    portal: 'default',\n    referenceBoundary: boundaryElement,\n  }\n\n  const _disabled =\n    disabled || (focusBlock ? editor.schemaTypes.block.name !== focusBlock._type : false)\n\n  // @todo: Explain what this does\n  const activeKeys = useActiveStyleKeys({items: itemsProp})\n\n  const {activeItems, items} = useMemo(() => {\n    const _activeItems = itemsProp.filter((item) => activeKeys.includes(item.style))\n\n    let _items = itemsProp\n\n    if (_activeItems.length === 0 && _items.length > 1) {\n      _items = _items.concat([emptyStyle])\n      _activeItems.push(emptyStyle)\n    }\n\n    return {activeItems: _activeItems, items: _items}\n  }, [activeKeys, itemsProp])\n\n  const menuButtonText = useMemo(() => {\n    if (activeItems.length > 1) {\n      return t('inputs.portable-text.style.multiple')\n    }\n\n    if (activeItems.length !== 1) {\n      return emptyStyle.i18nTitleKey ? t(emptyStyle.i18nTitleKey) : emptyStyle.title\n    }\n\n    return activeItems[0].i18nTitleKey ? t(activeItems[0].i18nTitleKey) : activeItems[0].title\n  }, [activeItems, t])\n\n  const handleChange = useCallback(\n    (item: BlockStyleItem): void => {\n      if (focusBlock && item.style !== focusBlock.style) {\n        PortableTextEditor.toggleBlockStyle(editor, item.style)\n        PortableTextEditor.focus(editor)\n      }\n    },\n    [editor, focusBlock],\n  )\n\n  const renderOption = useCallback(\n    (item: BlockStyleItem) => {\n      const {style, styleComponent} = item\n      const renderStyle = TEXT_STYLE_OPTIONS[style]\n      const title = item.i18nTitleKey ? t(item.i18nTitleKey) : item?.title || item.style\n\n      const CustomComponent = typeof styleComponent === 'function' ? styleComponent : undefined\n\n      // If we have default support for the style and there is no custom component\n      // defined, we render the default style.\n      if (renderStyle && !CustomComponent) {\n        return renderStyle(title)\n      }\n\n      // If we have a custom component, we render that\n      if (CustomComponent) {\n        return <CustomComponent>{title}</CustomComponent>\n      }\n\n      return <Text>{title}</Text>\n    },\n    [t],\n  )\n\n  const button = useMemo(\n    () => (\n      <Button\n        disabled={_disabled}\n        iconRight={ChevronDownIcon}\n        justify=\"space-between\"\n        mode=\"bleed\"\n        onClick={preventDefault}\n        text={menuButtonText}\n        width=\"fill\"\n      />\n    ),\n    [_disabled, menuButtonText],\n  )\n\n  const menu = useMemo(\n    () => (\n      <Menu disabled={_disabled}>\n        {items.map((item) => {\n          return (\n            <StyledMenuItem\n              key={item.key}\n              pressed={activeItems.includes(item)}\n              // eslint-disable-next-line react/jsx-no-bind\n              onClick={_disabled ? undefined : () => handleChange(item)}\n            >\n              {renderOption(item)}\n            </StyledMenuItem>\n          )\n        })}\n      </Menu>\n    ),\n    [_disabled, activeItems, handleChange, items, renderOption],\n  )\n\n  return (\n    <MenuButtonMemo\n      popover={popoverProperties}\n      id=\"block-style-select\"\n      button={button}\n      menu={menu}\n    />\n  )\n})\n","import {PortableTextEditor, usePortableTextEditor} from '@portabletext/editor'\nimport {upperFirst} from 'lodash'\nimport {memo, useCallback, useMemo} from 'react'\n\nimport {type PopoverProps} from '../../../../../ui-components'\nimport {CollapseMenu, CollapseMenuButton} from '../../../../components/collapseMenu'\nimport {ContextMenuButton} from '../../../../components/contextMenuButton'\nimport {useTranslation} from '../../../../i18n'\nimport {useFocusBlock} from './hooks'\nimport {type BlockItem} from './types'\n\nconst CollapseMenuMemo = memo(CollapseMenu)\n\nconst MENU_POPOVER_PROPS: PopoverProps = {constrainSize: true, portal: true}\n\ninterface InsertMenuProps {\n  disabled: boolean\n  items: BlockItem[]\n  isFullscreen?: boolean\n  collapsed?: boolean\n}\n\nexport const InsertMenu = memo(function InsertMenu(props: InsertMenuProps) {\n  const {disabled, items, isFullscreen, collapsed} = props\n  const {t} = useTranslation()\n  const focusBlock = useFocusBlock()\n  const editor = usePortableTextEditor()\n\n  const isVoidFocus = focusBlock && focusBlock._type !== editor.schemaTypes.block.name\n\n  const handleMenuClose = useCallback(() => {\n    PortableTextEditor.focus(editor)\n  }, [editor])\n\n  const tooltipPlacement = isFullscreen ? 'bottom' : 'top'\n\n  const children = useMemo(() => {\n    return items.map((item) => {\n      const title = item.type.title || upperFirst(item.type.name)\n\n      return (\n        <CollapseMenuButton\n          aria-label={t(\n            item.inline\n              ? 'inputs.portable-text.action.insert-inline-object-aria-label'\n              : 'inputs.portable-text.action.insert-block-aria-label',\n            {typeName: title},\n          )}\n          mode=\"bleed\"\n          disabled={disabled || (isVoidFocus && item.inline === true)}\n          icon={item.icon}\n          key={item.key}\n          // eslint-disable-next-line react/jsx-no-bind, react/jsx-handler-names\n          onClick={item.handle}\n          text={title}\n          tooltipText={t(\n            item.inline\n              ? 'inputs.portable-text.action.insert-inline-object'\n              : 'inputs.portable-text.action.insert-block',\n            {typeName: title},\n          )}\n          tooltipProps={{\n            disabled,\n            placement: tooltipPlacement,\n            portal: 'default',\n          }}\n        />\n      )\n    })\n  }, [disabled, isVoidFocus, items, t, tooltipPlacement])\n\n  const menuButtonProps = useMemo(\n    () => ({\n      button: (\n        <ContextMenuButton\n          data-testid=\"insert-menu-button\"\n          disabled={disabled}\n          tooltipProps={{placement: tooltipPlacement}}\n        />\n      ),\n      popover: MENU_POPOVER_PROPS,\n    }),\n    [disabled, tooltipPlacement],\n  )\n\n  return (\n    <CollapseMenuMemo\n      data-testid=\"insert-menu-auto-collapse-menu\"\n      collapsed={collapsed}\n      collapseText={false}\n      disableRestoreFocusOnClose\n      gap={1}\n      menuButtonProps={menuButtonProps}\n      onMenuClose={handleMenuClose}\n    >\n      {children}\n    </CollapseMenuMemo>\n  )\n})\n","import {\n  type HotkeyOptions,\n  PortableTextEditor,\n  usePortableTextEditor,\n  usePortableTextEditorSelection,\n} from '@portabletext/editor'\nimport {CollapseIcon, ExpandIcon} from '@sanity/icons'\nimport {type ObjectSchemaType, type Path, type SchemaType} from '@sanity/types'\nimport {Box, Flex, useElementRect, useToast} from '@sanity/ui'\nimport {memo, type MouseEvent, useCallback, useMemo, useState} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {Button} from '../../../../../ui-components'\nimport {useRovingFocus} from '../../../../components'\nimport {useTranslation} from '../../../../i18n'\nimport {useResolveInitialValueForType} from '../../../../store'\nimport {ActionMenu} from './ActionMenu'\nimport {BlockStyleSelect} from './BlockStyleSelect'\nimport {getBlockStyles, getInsertMenuItems} from './helpers'\nimport {useActionGroups} from './hooks'\nimport {InsertMenu} from './InsertMenu'\nimport {type BlockItem, type BlockStyleItem, type PTEToolbarActionGroup} from './types'\n\ninterface ToolbarProps {\n  /** Whether annotation and block menu buttons should fully collapse at smaller element widths */\n  collapsible?: boolean\n  hotkeys: HotkeyOptions\n  isFullscreen: boolean\n  onMemberOpen: (relativePath: Path) => void\n  onToggleFullscreen: () => void\n  readOnly?: boolean\n}\n\nconst RootFlex = styled(Flex)`\n  width: 100%;\n`\n\nconst StyleSelectBox = styled(Box)`\n  width: 8em;\n`\n\nconst StyleSelectFlex = styled(Flex)`\n  border-right: 1px solid var(--card-border-color);\n`\n\nconst ActionMenuBox = styled(Box)<{$withInsertMenu: boolean}>`\n  ${({$withInsertMenu}) =>\n    $withInsertMenu &&\n    css`\n      max-width: max-content;\n      border-right: 1px solid var(--card-border-color);\n    `}\n`\n\nconst FullscreenButtonBox = styled(Box)`\n  border-left: 1px solid var(--card-border-color);\n`\n\nconst SLOW_INITIAL_VALUE_LIMIT = 300\n\nconst IS_MAC =\n  typeof window != 'undefined' && /Mac|iPod|iPhone|iPad/.test(window.navigator.platform)\n\nconst InnerToolbar = memo(function InnerToolbar({\n  actionGroups,\n  blockStyles,\n  collapsible,\n  disabled,\n  insertMenuItems,\n  isFullscreen,\n  onToggleFullscreen,\n}: {\n  actionGroups: PTEToolbarActionGroup[]\n  blockStyles: BlockStyleItem[]\n  collapsible?: boolean\n  disabled: boolean\n  insertMenuItems: BlockItem[]\n  isFullscreen: boolean\n  onToggleFullscreen: () => void\n}) {\n  const {t} = useTranslation()\n  const actionsLen = actionGroups.reduce((acc, x) => acc + x.actions.length, 0)\n  const showActionMenu = actionsLen > 0\n  const showInsertMenu = insertMenuItems.length > 0\n  const [rootElement, setRootElement] = useState<HTMLDivElement | null>(null)\n  const rootElementRect = useElementRect(rootElement)\n\n  const collapsed = collapsible && rootElementRect ? rootElementRect?.width < 400 : false\n  const showBlockStyleSelect = blockStyles.length > 1\n\n  useRovingFocus({\n    rootElement: rootElement,\n  })\n\n  const preventEditorBlurOnToolbarMouseDown = useCallback((e: MouseEvent) => {\n    e.preventDefault()\n  }, [])\n\n  return (\n    <RootFlex align=\"center\" ref={setRootElement} onMouseDown={preventEditorBlurOnToolbarMouseDown}>\n      {showBlockStyleSelect && (\n        <StyleSelectFlex flex={collapsed ? 1 : undefined}>\n          <StyleSelectBox padding={isFullscreen ? 2 : 1} data-testid=\"block-style-select\">\n            <BlockStyleSelect\n              disabled={disabled}\n              items={blockStyles}\n              // send the boundary in cases of PTEs within PTEs\n              boundaryElement={rootElement}\n            />\n          </StyleSelectBox>\n        </StyleSelectFlex>\n      )}\n\n      <Flex flex={1}>\n        {showActionMenu && (\n          <ActionMenuBox\n            flex={collapsed ? undefined : 1}\n            padding={isFullscreen ? 2 : 1}\n            $withInsertMenu={showInsertMenu}\n          >\n            <ActionMenu\n              disabled={disabled}\n              collapsed={collapsed}\n              groups={actionGroups}\n              isFullscreen={isFullscreen}\n            />\n          </ActionMenuBox>\n        )}\n\n        {showInsertMenu && (\n          <Box flex={collapsed ? undefined : 1} padding={isFullscreen ? 2 : 1}>\n            <InsertMenu\n              disabled={disabled}\n              collapsed={collapsed}\n              items={insertMenuItems}\n              isFullscreen={isFullscreen}\n            />\n          </Box>\n        )}\n      </Flex>\n      <FullscreenButtonBox padding={isFullscreen ? 2 : 1}>\n        <Button\n          aria-label={t('inputs.portable-text.action.expand-editor')}\n          icon={isFullscreen ? CollapseIcon : ExpandIcon}\n          mode=\"bleed\"\n          onClick={onToggleFullscreen}\n          tooltipProps={{\n            content: t(\n              isFullscreen\n                ? 'inputs.portable-text.action.collapse-editor'\n                : 'inputs.portable-text.action.expand-editor',\n            ),\n            hotkeys: [`${IS_MAC ? 'Cmd' : 'Ctrl'}`, 'Enter'],\n            placement: isFullscreen ? 'bottom' : 'top',\n            portal: 'default',\n          }}\n        />\n      </FullscreenButtonBox>\n    </RootFlex>\n  )\n})\n\nexport function Toolbar(props: ToolbarProps) {\n  const {collapsible, hotkeys, isFullscreen, readOnly, onMemberOpen, onToggleFullscreen} = props\n  const editor = usePortableTextEditor()\n  const selection = usePortableTextEditorSelection()\n  const resolveInitialValueForType = useResolveInitialValueForType()\n  const disabled = readOnly || !selection\n\n  const {push} = useToast()\n\n  const resolveInitialValue = useCallback(\n    (type: ObjectSchemaType) => {\n      let isSlow = false\n      const slowTimer = setTimeout(() => {\n        isSlow = true\n        push({\n          id: 'resolving-initial-value',\n          status: 'info',\n          title: 'Resolving initial value…',\n        })\n      }, SLOW_INITIAL_VALUE_LIMIT)\n      return resolveInitialValueForType(type as unknown as SchemaType, {})\n        .then((value) => {\n          if (isSlow) {\n            // I found no way to close an existing toast, so this will replace the message in the\n            // \"Resolving initial value…\"-toast and then make sure it gets closed.\n            push({\n              id: 'resolving-initial-value',\n              status: 'info',\n              duration: 500,\n              title: 'Initial value resolved',\n            })\n          }\n          return value\n        })\n        .catch((error) => {\n          push({\n            title: `Could not resolve initial value`,\n            id: 'resolving-initial-value',\n            description: `Unable to resolve initial value for type: ${type.name}: ${error.message}.`,\n            status: 'error',\n          })\n\n          return undefined\n        })\n        .finally(() => clearTimeout(slowTimer))\n    },\n    [push, resolveInitialValueForType],\n  )\n\n  const handleInsertBlock = useCallback(\n    async (type: ObjectSchemaType) => {\n      const initialValue = await resolveInitialValue(type)\n      const path = PortableTextEditor.insertBlock(editor, type, initialValue)\n      if (path) {\n        onMemberOpen(path)\n      }\n    },\n    [editor, onMemberOpen, resolveInitialValue],\n  )\n\n  const handleInsertInline = useCallback(\n    async (type: ObjectSchemaType) => {\n      const initialValue = await resolveInitialValue(type)\n      const path = PortableTextEditor.insertChild(editor, type, initialValue)\n      if (path) {\n        onMemberOpen(path)\n      }\n    },\n    [editor, onMemberOpen, resolveInitialValue],\n  )\n\n  const actionGroups = useActionGroups({\n    hotkeys,\n    onMemberOpen,\n    resolveInitialValue,\n    disabled: true,\n  })\n\n  const blockStyles = useMemo(() => getBlockStyles(editor.schemaTypes), [editor])\n\n  const insertMenuItems = useMemo(\n    () => getInsertMenuItems(editor.schemaTypes, disabled, handleInsertBlock, handleInsertInline),\n    [disabled, editor, handleInsertBlock, handleInsertInline],\n  )\n\n  return (\n    <InnerToolbar\n      actionGroups={actionGroups}\n      blockStyles={blockStyles}\n      collapsible={collapsible}\n      disabled={disabled}\n      insertMenuItems={insertMenuItems}\n      isFullscreen={isFullscreen}\n      onToggleFullscreen={onToggleFullscreen}\n    />\n  )\n}\n","import {\n  type EditorSelection,\n  type HotkeyOptions,\n  type OnCopyFn,\n  type OnPasteFn,\n  PortableTextEditable,\n  type PortableTextEditableProps,\n  type RangeDecoration,\n  type RenderAnnotationFunction,\n  type RenderBlockFunction,\n  type RenderChildFunction,\n  type RenderDecoratorFunction,\n  type RenderListItemFunction,\n  type RenderStyleFunction,\n} from '@portabletext/editor'\nimport {type Path} from '@sanity/types'\nimport {BoundaryElementProvider, useBoundaryElement, useGlobalKeyDown, useLayer} from '@sanity/ui'\n// eslint-disable-next-line camelcase\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {omit} from 'lodash'\nimport {type ReactNode, useCallback, useMemo} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {TooltipDelayGroupProvider} from '../../../../ui-components'\nimport {useTranslation} from '../../../i18n'\nimport {type PortableTextInputProps} from '../../types/inputProps'\nimport {useFormBuilder} from '../../useFormBuilder'\nimport {EditableCard, EditableWrapper, Root, Scroller, ToolbarCard} from './Editor.styles'\nimport {useScrollSelectionIntoView} from './hooks/useScrollSelectionIntoView'\nimport {useSpellCheck} from './hooks/useSpellCheck'\nimport {Decorator} from './text'\nimport {ListItem} from './text/ListItem'\nimport {Style} from './text/Style'\nimport {Toolbar} from './toolbar'\n\nconst noOutlineStyle = {outline: 'none'} as const\n\n// The <FormBuilder> id that represents the default (document pane) form layout.\n// This is used to determine whether this editor should apply document pane specific styling.\nconst FORM_BUILDER_DEFAULT_ID = 'root'\n\nconst PlaceholderWrapper = styled.span((props) => {\n  const {color} = getTheme_v2(props.theme)\n  return css`\n    color: ${color.input.default.enabled.placeholder};\n  `\n})\n\ninterface EditorProps {\n  elementRef: React.RefObject<HTMLDivElement | null>\n  hideToolbar?: boolean\n  hotkeys: HotkeyOptions\n  initialSelection?: EditorSelection\n  isActive: boolean\n  isFullscreen: boolean\n  onCopy?: OnCopyFn\n  onItemOpen: (path: Path) => void\n  onPaste?: OnPasteFn\n  onToggleFullscreen: () => void\n  path: Path\n  readOnly?: boolean\n  rangeDecorations?: RangeDecoration[]\n  renderAnnotation: RenderAnnotationFunction\n  renderBlock: RenderBlockFunction\n  renderChild: RenderChildFunction\n  renderEditable?: PortableTextInputProps['renderEditable']\n  scrollElement: HTMLElement | null\n  setPortalElement?: (portalElement: HTMLDivElement | null) => void\n  setScrollElement: (scrollElement: HTMLElement | null) => void\n  ariaDescribedBy: string | undefined\n}\n\nconst renderDecorator: RenderDecoratorFunction = (props) => {\n  return <Decorator {...props} />\n}\n\nconst renderStyle: RenderStyleFunction = (props) => {\n  return <Style {...props} />\n}\n\nconst renderListItem: RenderListItemFunction = (props) => {\n  return <ListItem {...props} />\n}\n/**\n * @internal\n */\nexport function Editor(props: EditorProps): ReactNode {\n  const {\n    elementRef,\n    hideToolbar,\n    hotkeys,\n    initialSelection,\n    isActive,\n    isFullscreen,\n    onCopy,\n    onItemOpen,\n    onPaste,\n    onToggleFullscreen,\n    path,\n    readOnly,\n    rangeDecorations,\n    renderAnnotation,\n    renderBlock,\n    renderChild,\n    renderEditable,\n    scrollElement,\n    setPortalElement,\n    setScrollElement,\n    ariaDescribedBy,\n  } = props\n  const {id} = useFormBuilder()\n  const {t} = useTranslation()\n  const {isTopLayer} = useLayer()\n\n  const {element: boundaryElement} = useBoundaryElement()\n\n  // Let escape close fullscreen mode\n  useGlobalKeyDown(\n    useCallback(\n      (event: KeyboardEvent) => {\n        if (!isTopLayer || !isFullscreen) {\n          return\n        }\n        if (event.key === 'Escape') {\n          onToggleFullscreen()\n        }\n      },\n      [onToggleFullscreen, isFullscreen, isTopLayer],\n    ),\n  )\n\n  const renderPlaceholder = useCallback(\n    () => (\n      <PlaceholderWrapper data-testid=\"pt-input-placeholder\">\n        {t('inputs.portable-text.empty-placeholder')}\n      </PlaceholderWrapper>\n    ),\n    [t],\n  )\n  const spellCheck = useSpellCheck()\n\n  const scrollSelectionIntoView = useScrollSelectionIntoView(scrollElement)\n\n  const editable = useMemo(() => {\n    const editableProps = {\n      'aria-describedby': ariaDescribedBy,\n      hotkeys,\n      onCopy,\n      onPaste,\n      rangeDecorations,\n      'ref': elementRef,\n      renderAnnotation,\n      renderBlock,\n      renderChild,\n      renderDecorator,\n      renderListItem,\n      renderPlaceholder,\n      renderStyle,\n      scrollSelectionIntoView,\n      'selection': initialSelection,\n      spellCheck,\n      'style': noOutlineStyle,\n    } satisfies PortableTextEditableProps\n    const defaultRender = (defaultRenderProps: PortableTextEditableProps) => (\n      <PortableTextEditable {...editableProps} {...omit(defaultRenderProps, ['renderDefault'])} />\n    )\n    if (renderEditable) {\n      return renderEditable({...editableProps, renderDefault: defaultRender})\n    }\n    return defaultRender(editableProps)\n  }, [\n    ariaDescribedBy,\n    elementRef,\n    hotkeys,\n    initialSelection,\n    onCopy,\n    onPaste,\n    rangeDecorations,\n    renderAnnotation,\n    renderBlock,\n    renderChild,\n    renderEditable,\n    renderPlaceholder,\n    scrollSelectionIntoView,\n    spellCheck,\n  ])\n\n  const handleToolBarOnMemberOpen = useCallback(\n    (relativePath: Path) => {\n      onItemOpen(path.concat(relativePath))\n    },\n    [onItemOpen, path],\n  )\n\n  // Always collapse toolbars at smaller container widths when in 'default' (document pane) FormBuilder instances\n  const collapsibleToolbar = id === FORM_BUILDER_DEFAULT_ID\n\n  return (\n    <Root data-fullscreen={isFullscreen} data-testid=\"pt-editor\">\n      {isActive && !hideToolbar && (\n        <TooltipDelayGroupProvider>\n          <ToolbarCard data-testid=\"pt-editor__toolbar-card\" shadow={1}>\n            <Toolbar\n              collapsible={collapsibleToolbar}\n              hotkeys={hotkeys}\n              isFullscreen={isFullscreen}\n              onMemberOpen={handleToolBarOnMemberOpen}\n              onToggleFullscreen={onToggleFullscreen}\n              readOnly={readOnly}\n            />\n          </ToolbarCard>\n        </TooltipDelayGroupProvider>\n      )}\n\n      <EditableCard flex={1} tone={readOnly ? 'transparent' : 'default'}>\n        <Scroller ref={setScrollElement}>\n          <div>\n            <EditableWrapper\n              $isFullscreen={isFullscreen}\n              tone={readOnly ? 'transparent' : 'default'}\n            >\n              <BoundaryElementProvider element={isFullscreen ? scrollElement : boundaryElement}>\n                {editable}\n              </BoundaryElementProvider>\n            </EditableWrapper>\n          </div>\n        </Scroller>\n\n        <div data-portal=\"\" ref={setPortalElement} />\n      </EditableCard>\n    </Root>\n  )\n}\n","import {type HotkeyOptions, usePortableTextEditor} from '@portabletext/editor'\nimport {useMemo, useState} from 'react'\n\n// This hook will create final hotkeys for the editor from on those from props.\nexport function useHotkeys(hotkeys: HotkeyOptions): HotkeyOptions {\n  const editor = usePortableTextEditor()\n\n  // Guard that hotkeys from props will be a stable object.\n  // If this props is defined inline and is always a new object, there will be issues with key handling and cursor!\n  const [initialHotkeys] = useState(() => hotkeys)\n  if (initialHotkeys !== hotkeys) {\n    console.warn(\n      'Make sure that hotkeys are a stable object across renders, or there will be issues with key handling in the Portable Text Editor.',\n    )\n  }\n  return useMemo(() => {\n    const defaultHotkeys: {marks: Record<string, string>} = {marks: {}}\n    editor.schemaTypes.decorators.forEach((dec) => {\n      switch (dec.value) {\n        case 'strong':\n          defaultHotkeys.marks['mod+b'] = dec.value\n          break\n        case 'em':\n          defaultHotkeys.marks['mod+i'] = dec.value\n          break\n        case 'underline':\n          defaultHotkeys.marks['mod+u'] = dec.value\n          break\n        case 'code':\n          defaultHotkeys.marks[\"mod+'\"] = dec.value\n          break\n        default:\n      }\n    })\n    return {\n      marks: {...defaultHotkeys.marks, ...(initialHotkeys || {}).marks},\n      custom: initialHotkeys.custom,\n    }\n  }, [editor, initialHotkeys])\n}\n\n// If we want to have a hotkey to open up a focused object, we can use this:\n//\n// const handleOpenObjectHotkey = (\n//   event: BaseSyntheticEvent,\n//   ptEditor: PortableTextEditor\n// ) => {\n//   const selection = PortableTextEditor.getSelection(ptEditor)\n//   if (selection) {\n//     event.preventDefault()\n//     event.stopPropagation()\n//     const {focus} = selection\n//     const activeAnnotations = PortableTextEditor.activeAnnotations(ptEditor)\n//     const focusBlock = PortableTextEditor.focusBlock(ptEditor)\n//     const focusChild = PortableTextEditor.focusChild(ptEditor)\n//     if (activeAnnotations.length > 0) {\n//       onFocus([\n//         ...focus.path.slice(0, 1),\n//         'markDefs',\n//         {_key: activeAnnotations[0]._key},\n//         FOCUS_TERMINATOR,\n//       ])\n//       return\n//     }\n//     if (focusChild && PortableTextEditor.isVoid(ptEditor, focusChild)) {\n//       onFocus([...focus.path, FOCUS_TERMINATOR])\n//       return\n//     }\n//     if (focusBlock && PortableTextEditor.isVoid(ptEditor, focusBlock)) {\n//       onFocus([...focus.path.slice(0, 1), FOCUS_TERMINATOR])\n//     }\n//   }\n// }\n","import {\n  PortableTextEditor,\n  usePortableTextEditor,\n  usePortableTextEditorSelection,\n} from '@portabletext/editor'\nimport {isKeyedObject, type KeyedObject, type Path} from '@sanity/types'\nimport {isEqual} from '@sanity/util/paths'\nimport {useLayoutEffect} from 'react'\nimport scrollIntoView from 'scroll-into-view-if-needed'\n\nimport {usePortableTextMemberItemElementRefs} from '../contexts/PortableTextMemberItemElementRefsProvider'\nimport {usePortableTextMemberItems} from './usePortableTextMembers'\n\ninterface Props {\n  focusPath: Path\n  boundaryElement: HTMLElement | null\n  onItemClose: () => void\n}\n\n// This hook will track the form focusPath and make sure editor content is visible (opened), scrolled to, and (potentially) focused accordingly.\nexport function useTrackFocusPath(props: Props): void {\n  const {focusPath, boundaryElement, onItemClose} = props\n\n  const portableTextMemberItems = usePortableTextMemberItems()\n  const elementRefs = usePortableTextMemberItemElementRefs()\n  const editor = usePortableTextEditor()\n  const selection = usePortableTextEditorSelection()\n\n  useLayoutEffect(() => {\n    // Don't do anything if no focusPath to track\n    if (focusPath.length === 0) {\n      return\n    }\n\n    // Don't do anything if the editor selection focus path is already equal to the focusPath\n    if (\n      selection?.focus.path &&\n      isEqual(selection.focus.path, focusPath.slice(0, selection.focus.path.length))\n    ) {\n      return\n    }\n\n    // Find the focused editor member item (if any)\n    const focusedItem = portableTextMemberItems.find((m) => m.member.item.focused)\n\n    // Find the opened member item (if any)\n    const openItem = portableTextMemberItems.find((m) => m.member.open)\n\n    // The related editor member to scroll to, or focus, according to the given focusPath\n    const relatedEditorItem = focusedItem || openItem\n    const elementRef = relatedEditorItem ? elementRefs[relatedEditorItem.member.key] : undefined\n\n    if (relatedEditorItem && elementRef) {\n      if (boundaryElement) {\n        // Scroll the boundary element into view (the scrollable element itself)\n        scrollIntoView(boundaryElement, {\n          scrollMode: 'if-needed',\n          block: 'start',\n          inline: 'start',\n        })\n        // Scroll the member into view (the member within the scroll-boundary)\n        scrollIntoView(elementRef, {\n          scrollMode: 'if-needed',\n          boundary: boundaryElement,\n          block: 'nearest',\n          inline: 'start',\n        })\n      }\n\n      const isTextBlock = relatedEditorItem.kind === 'textBlock'\n      const isBlockFocusPath = focusPath.length === 1\n\n      // Track focus and selection for focusPaths that are either inside text blocks,\n      // or is pointing to the block itself (text and object blocks)\n      if (isTextBlock || isBlockFocusPath) {\n        const textBlockChildKey =\n          isTextBlock && isKeyedObject(focusPath[2]) ? focusPath[2]._key : undefined\n        const child =\n          textBlockChildKey && Array.isArray(relatedEditorItem.node.value?.children)\n            ? (relatedEditorItem.node.value?.children.find((c) => c._key === textBlockChildKey) as\n                | KeyedObject\n                | undefined)\n            : undefined\n\n        // Is the focusPath pointing to span's `.text` property?\n        const isSpanTextFocusPath =\n          (child &&\n            child._type === 'span' &&\n            focusPath.length === 4 &&\n            focusPath[1] === 'children' &&\n            focusPath[3] === 'text') ||\n          false\n\n        // Is focus directly on a text block child?\n        const isTextChildFocusPath =\n          isTextBlock &&\n          ((focusPath.length === 3 && focusPath[1] === 'children') || isSpanTextFocusPath)\n\n        let path: Path = []\n        // Known text block child\n        if (isTextChildFocusPath) {\n          path = focusPath.slice(0, 3)\n        } else if (\n          // Known text block, but unknown child. Select first child in that block.\n          isTextBlock &&\n          isBlockFocusPath &&\n          Array.isArray(relatedEditorItem.node.value?.children)\n        ) {\n          path = [focusPath[0], 'children', {_key: relatedEditorItem.node.value?.children[0]._key}]\n          // Directly pointing to a non-text block\n        } else if (isBlockFocusPath) {\n          path = [{_key: relatedEditorItem.key}]\n        }\n\n        // Select and focus the editor if we produced a path\n        if (path.length) {\n          PortableTextEditor.select(editor, {\n            anchor: {path, offset: 0},\n            focus: {path, offset: 0},\n          })\n          // Object blocks will have their interface opened when focused,\n          // so only call focus for regular text blocks\n          if (isTextBlock) {\n            PortableTextEditor.focus(editor)\n          }\n        }\n      }\n    }\n  }, [\n    boundaryElement,\n    editor,\n    elementRefs,\n    focusPath,\n    onItemClose,\n    portableTextMemberItems,\n    selection?.focus.path,\n  ])\n}\n","import {hues} from '@sanity/color'\nimport {Box, Card, type Theme} from '@sanity/ui'\nimport {css, styled} from 'styled-components'\n\nexport const Root = styled(Card)(rootStyle)\n\nexport const PreviewSpan = styled.span`\n  display: block;\n  max-width: calc(5em + 80px);\n  position: relative;\n`\n\nexport const TooltipBox = styled(Box)`\n  max-width: 250px;\n`\n\nexport function rootStyle({theme}: {theme: Theme}) {\n  const {color, radius} = theme.sanity\n\n  return css`\n    line-height: 0;\n    border-radius: ${radius[2]}px;\n    padding: 2px;\n    box-shadow: inset 0 0 0 1px var(--card-border-color);\n    height: calc(1em - 1px);\n    margin-top: 0.0625em;\n    cursor: default;\n\n    &:not([hidden]) {\n      display: inline-flex;\n      align-items: center;\n      vertical-align: top;\n    }\n\n    &[data-ready-only] {\n      cursor: default;\n    }\n\n    &[data-focused] {\n      box-shadow: inset 0 0 0 1px ${color.selectable?.primary.selected.border};\n      color: ${color.selectable?.primary.pressed.fg};\n    }\n\n    &[data-selected] {\n      background-color: ${color.selectable?.primary.pressed.bg};\n    }\n\n    &:not([data-focused]):not([data-selected]) {\n      @media (hover: hover) {\n        &:hover {\n          --card-border-color: ${color.input.default.hovered.border};\n        }\n      }\n    }\n\n    &[data-markers] {\n      --card-bg-color: ${color.dark ? hues.purple[950].hex : hues.purple[50].hex};\n    }\n\n    &[data-warning] {\n      --card-bg-color: ${color.muted.caution.hovered.bg};\n\n      @media (hover: hover) {\n        &:hover {\n          --card-border-color: ${color.muted.caution.hovered.border};\n        }\n      }\n    }\n\n    &[data-invalid] {\n      --card-bg-color: ${color.input.invalid.enabled.bg};\n      --card-border-color: ${color.input.invalid.enabled.border};\n\n      @media (hover: hover) {\n        &:hover {\n          --card-border-color: ${color.input.invalid.hovered.border};\n        }\n      }\n    }\n  `\n}\n","import {PortableTextEditor, usePortableTextEditor} from '@portabletext/editor'\nimport {EditIcon, TrashIcon} from '@sanity/icons'\nimport {Box, Flex, Text, useGlobalKeyDown, useTheme} from '@sanity/ui'\nimport {type ReactNode, useCallback, useEffect, useRef, useState} from 'react'\n\nimport {Button, Popover, type PopoverProps} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n'\n\nconst POPOVER_FALLBACK_PLACEMENTS: PopoverProps['fallbackPlacements'] = ['top', 'bottom']\n\ninterface InlineObjectToolbarPopoverProps {\n  floatingBoundary: HTMLElement | null\n  inlineObjectFocused: boolean\n  inlineObjectOpen: boolean\n  onOpenInlineObject: () => void\n  onRemoveInlineObject: () => void\n  referenceBoundary: HTMLElement | null\n  referenceElement: HTMLElement | null\n  title: string\n}\n\nexport function InlineObjectToolbarPopover(props: InlineObjectToolbarPopoverProps): ReactNode {\n  const {\n    floatingBoundary,\n    inlineObjectFocused,\n    inlineObjectOpen,\n    onOpenInlineObject,\n    onRemoveInlineObject,\n    referenceBoundary,\n    referenceElement,\n    title,\n  } = props\n  const [popoverOpen, setPopoverOpen] = useState<boolean>(false)\n  const {sanity} = useTheme()\n  const {t} = useTranslation()\n  const editButtonRef = useRef<HTMLButtonElement | null>(null)\n  const deleteButtonRef = useRef<HTMLButtonElement | null>(null)\n  const focusTrappedRef = useRef<HTMLButtonElement | null>(null)\n  const popoverScheme = sanity.color.dark ? 'light' : 'dark'\n  const editor = usePortableTextEditor()\n  const contentRef = useRef<HTMLDivElement | null>(null)\n\n  const handleClosePopover = useCallback(() => {\n    setPopoverOpen(false)\n    PortableTextEditor.focus(editor)\n    focusTrappedRef.current = null\n  }, [editor])\n\n  // Tab to edit button on tab\n  // Close floating toolbar on Escape\n  useGlobalKeyDown(\n    useCallback(\n      (event) => {\n        if (!popoverOpen) {\n          return\n        }\n        if (event.key === 'Tab') {\n          if (\n            inlineObjectFocused &&\n            event.target instanceof HTMLElement &&\n            event.target.contentEditable &&\n            focusTrappedRef.current === null\n          ) {\n            event.preventDefault()\n            editButtonRef.current?.focus()\n            focusTrappedRef.current = editButtonRef.current\n            return\n          }\n          if (event.target === deleteButtonRef.current) {\n            event.preventDefault()\n            event.stopPropagation()\n            focusTrappedRef.current = null\n            PortableTextEditor.focus(editor)\n            return\n          }\n        }\n        if (event.key === 'Escape') {\n          handleClosePopover()\n        }\n      },\n      [editor, inlineObjectFocused, handleClosePopover, popoverOpen],\n    ),\n  )\n\n  useEffect(() => {\n    focusTrappedRef.current = null\n    if (inlineObjectOpen) {\n      setPopoverOpen(false)\n      return\n    }\n    if (inlineObjectFocused) {\n      setPopoverOpen(true)\n      return\n    }\n    setPopoverOpen(false)\n  }, [inlineObjectFocused, inlineObjectOpen])\n\n  const handleEditButtonClicked = useCallback(() => {\n    setPopoverOpen(false)\n    onOpenInlineObject()\n  }, [onOpenInlineObject])\n\n  const handleRemoveButtonClicked = useCallback(() => {\n    setPopoverOpen(false)\n    onRemoveInlineObject()\n  }, [onRemoveInlineObject])\n\n  return (\n    <Popover\n      open={!inlineObjectOpen && popoverOpen}\n      floatingBoundary={floatingBoundary}\n      constrainSize\n      content={\n        <Box padding={1} data-testid=\"inline-object-toolbar-popover\" ref={contentRef}>\n          <Flex gap={1}>\n            <Box padding={2}>\n              <Text weight=\"medium\" size={1}>\n                {title}\n              </Text>\n            </Box>\n            <Button\n              aria-label={t('inputs.portable-text.inline-object.edit-aria-label')}\n              data-testid=\"edit-inline-object-button\"\n              icon={EditIcon}\n              mode=\"bleed\"\n              onClick={handleEditButtonClicked}\n              ref={editButtonRef}\n              tabIndex={0}\n              tooltipProps={{content: t('inputs.portable-text.inline-object.edit')}}\n            />\n            <Button\n              aria-label={t('inputs.portable-text.inline-object.remove-aria-label')}\n              data-testid=\"remove-inline-object-button\"\n              icon={TrashIcon}\n              mode=\"bleed\"\n              onClick={handleRemoveButtonClicked}\n              ref={deleteButtonRef}\n              tabIndex={0}\n              tone=\"critical\"\n              tooltipProps={{content: t('inputs.portable-text.inline-object.remove')}}\n            />\n          </Flex>\n        </Box>\n      }\n      fallbackPlacements={POPOVER_FALLBACK_PLACEMENTS}\n      placement=\"top\"\n      portal\n      preventOverflow\n      referenceBoundary={referenceBoundary}\n      referenceElement={referenceElement}\n      scheme={popoverScheme}\n    />\n  )\n}\n","import {type ObjectSchemaType} from '@sanity/types'\n\nconst parseResponsiveWidth = (value: unknown): (number | 'auto')[] => {\n  if (Array.isArray(value)) {\n    return value.flatMap(parseResponsiveWidth)\n  }\n  if (typeof value === 'number') {\n    return [value]\n  }\n  return value === 'auto' ? ['auto'] : []\n}\nconst parseModalType = (value: unknown): 'popover' | 'dialog' | undefined => {\n  return value === 'dialog' || value === 'popover' ? value : undefined\n}\n\nexport function _getModalOption(\n  schemaType: ObjectSchemaType,\n): {type?: 'dialog' | 'popover'; width: (number | 'auto')[]} | undefined {\n  const raw = schemaType.options?.modal\n  return typeof raw === 'object' && raw !== null\n    ? {\n        type: parseModalType(raw.type),\n        width: parseResponsiveWidth(raw.width),\n      }\n    : undefined\n}\n","import {Box} from '@sanity/ui'\nimport {type ReactNode, useId, useRef, useState} from 'react'\n\nimport {Dialog} from '../../../../../../ui-components'\nimport {PresenceOverlay} from '../../../../../presence'\nimport {VirtualizerScrollInstanceProvider} from '../../../arrays/ArrayOfObjectsInput/List/VirtualizerScrollInstanceProvider'\nimport {type ModalWidth} from './types'\n\ninterface DefaultEditDialogProps {\n  children: ReactNode\n  onClose: () => void\n  title: string | ReactNode\n  width?: ModalWidth\n  autoFocus?: boolean\n}\n\nexport function DefaultEditDialog(props: DefaultEditDialogProps) {\n  const {onClose, children, title, width = 1, autoFocus} = props\n  const dialogId = useId()\n  // This seems to work with regular refs as well, but it might be safer to use state.\n  const [contentElement, setContentElement] = useState<HTMLDivElement | null>(null)\n  const containerElement = useRef<HTMLDivElement | null>(null)\n\n  return (\n    <Dialog\n      header={title}\n      id={dialogId}\n      onClickOutside={onClose}\n      onClose={onClose}\n      portal=\"default\"\n      width={width}\n      contentRef={setContentElement}\n      data-testid=\"default-edit-object-dialog\"\n      __unstable_autoFocus={autoFocus}\n    >\n      <PresenceOverlay margins={[0, 0, 1, 0]}>\n        <VirtualizerScrollInstanceProvider\n          scrollElement={contentElement}\n          containerElement={containerElement}\n        >\n          <Box ref={containerElement}>{children}</Box>\n        </VirtualizerScrollInstanceProvider>\n      </PresenceOverlay>\n    </Dialog>\n  )\n}\n","import {Box} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {Popover} from '../../../../../../ui-components'\n\nexport const RootPopover = styled(Popover)`\n  & > div {\n    overflow: hidden;\n    overflow: clip;\n  }\n`\n\nexport const ContentScrollerBox = styled(Box)`\n  /* Prevent overflow caused by change indicator */\n  overflow-x: hidden;\n  overflow-y: auto;\n`\n\nexport const ContentHeaderBox = styled(Box)`\n  box-shadow: 0 1px 0 var(--card-shadow-outline-color);\n  position: relative;\n  z-index: 10;\n  min-height: auto;\n`\n","/* eslint-disable react/no-unused-prop-types */\n\nimport {CloseIcon} from '@sanity/icons'\nimport {Box, Flex, Text, useClickOutsideEvent, useGlobalKeyDown} from '@sanity/ui'\nimport {Fragment, type ReactNode, useCallback, useRef, useState} from 'react'\nimport FocusLock from 'react-focus-lock'\nimport {type PortableTextEditorElement} from 'sanity/_singletons'\n\nimport {Button, type PopoverProps} from '../../../../../../ui-components'\nimport {PresenceOverlay} from '../../../../../presence'\nimport {VirtualizerScrollInstanceProvider} from '../../../arrays/ArrayOfObjectsInput/List/VirtualizerScrollInstanceProvider'\nimport {ContentHeaderBox, ContentScrollerBox, RootPopover} from './PopoverModal.styles'\nimport {type ModalWidth} from './types'\n\ninterface PopoverEditDialogProps {\n  autoFocus?: boolean\n  children: ReactNode\n  floatingBoundary: HTMLElement | null\n  onClose: () => void\n  referenceBoundary: HTMLElement | null\n  referenceElement: PortableTextEditorElement | null\n  title: string | ReactNode\n  width?: ModalWidth\n}\n\nconst POPOVER_FALLBACK_PLACEMENTS: PopoverProps['fallbackPlacements'] = ['top', 'bottom']\n\nexport function PopoverEditDialog(props: PopoverEditDialogProps): ReactNode {\n  const {floatingBoundary, referenceBoundary, referenceElement, width = 1} = props\n  return (\n    <RootPopover\n      content={<Content {...props} />}\n      constrainSize\n      data-testid=\"popover-edit-dialog\"\n      data-ui=\"PopoverEditDialog\"\n      fallbackPlacements={POPOVER_FALLBACK_PLACEMENTS}\n      floatingBoundary={floatingBoundary}\n      open\n      overflow=\"auto\"\n      placement=\"bottom\"\n      portal=\"default\"\n      preventOverflow\n      referenceBoundary={referenceBoundary}\n      referenceElement={referenceElement}\n      width={width}\n      autoFocus\n    />\n  )\n}\n\nfunction Content(props: PopoverEditDialogProps) {\n  const {onClose, referenceBoundary, referenceElement, title} = props\n  const isClosedRef = useRef(false)\n\n  const handleClose = useCallback(() => {\n    isClosedRef.current = true\n    onClose()\n  }, [onClose])\n\n  useGlobalKeyDown(\n    useCallback(\n      (event: KeyboardEvent) => {\n        if (event.key === 'Escape') {\n          handleClose()\n        }\n      },\n      [handleClose],\n    ),\n  )\n\n  useClickOutsideEvent(\n    handleClose,\n    () => [referenceElement],\n    () => referenceBoundary,\n  )\n\n  // This seems to work with regular refs as well, but it might be safer to use state.\n  const [contentElement, setContentElement] = useState<HTMLDivElement | null>(null)\n  const containerElement = useRef<HTMLDivElement | null>(null)\n\n  const handleFocusLockWhiteList = useCallback((element: HTMLElement) => {\n    // This is needed in order for focusLock not to trap focus in the\n    // popover when closing the popover and focus is to be returned to the editor\n    if (isClosedRef.current) return false\n    return Boolean(element.contentEditable) || Boolean(containerElement.current?.contains(element))\n  }, [])\n\n  return (\n    <VirtualizerScrollInstanceProvider\n      scrollElement={contentElement}\n      containerElement={containerElement}\n    >\n      <FocusLock autoFocus as={Fragment} whiteList={handleFocusLockWhiteList}>\n        <Flex ref={containerElement} direction=\"column\" height=\"fill\">\n          <ContentHeaderBox flex=\"none\" padding={1}>\n            <Flex align=\"center\">\n              <Box flex={1} padding={2}>\n                <Text weight=\"medium\">{title}</Text>\n              </Box>\n\n              <Button\n                autoFocus\n                icon={CloseIcon}\n                mode=\"bleed\"\n                onClick={handleClose}\n                tooltipProps={{content: 'Close'}}\n              />\n            </Flex>\n          </ContentHeaderBox>\n          <ContentScrollerBox flex={1}>\n            <PresenceOverlay margins={[0, 0, 1, 0]}>\n              <Box padding={3} ref={setContentElement}>\n                {props.children}\n              </Box>\n            </PresenceOverlay>\n          </ContentScrollerBox>\n        </Flex>\n      </FocusLock>\n    </VirtualizerScrollInstanceProvider>\n  )\n}\n","import {type ObjectSchemaType} from '@sanity/types'\nimport {type ReactNode, useCallback, useMemo} from 'react'\n\nimport {useTranslation} from '../../../../../i18n'\nimport {_getModalOption} from '../helpers'\nimport {DefaultEditDialog} from './DialogModal'\nimport {PopoverEditDialog} from './PopoverModal'\n\nexport function ObjectEditModal(props: {\n  autoFocus?: boolean\n  children: ReactNode\n  defaultType: 'dialog' | 'popover'\n  floatingBoundary: HTMLElement | null\n  onClose: () => void\n  referenceBoundary: HTMLElement | null\n  referenceElement: HTMLElement | null\n  schemaType: ObjectSchemaType & {i18nTitleKey?: string}\n}) {\n  const {\n    autoFocus,\n    defaultType,\n    floatingBoundary,\n    onClose,\n    referenceBoundary,\n    referenceElement,\n    schemaType,\n  } = props\n\n  const {t} = useTranslation()\n  const schemaModalOption = useMemo(() => _getModalOption(schemaType), [schemaType])\n  const modalType = schemaModalOption?.type || defaultType\n\n  const schemaTypeTitle = schemaType.i18nTitleKey\n    ? t(schemaType.i18nTitleKey)\n    : schemaType.title || schemaType.name\n\n  const modalTitle = t('inputs.portable-text.annotation-editor.title', {\n    schemaType: schemaTypeTitle,\n  })\n\n  const handleClose = useCallback(() => {\n    onClose()\n  }, [onClose])\n\n  const modalWidth = schemaModalOption?.width\n\n  if (modalType === 'popover') {\n    return (\n      <PopoverEditDialog\n        autoFocus={autoFocus}\n        floatingBoundary={floatingBoundary}\n        onClose={handleClose}\n        referenceBoundary={referenceBoundary}\n        referenceElement={referenceElement}\n        title={<>{modalTitle}</>}\n        width={modalWidth}\n      >\n        {props.children}\n      </PopoverEditDialog>\n    )\n  }\n\n  return (\n    <DefaultEditDialog\n      onClose={handleClose}\n      title={modalTitle}\n      width={modalWidth}\n      autoFocus={autoFocus}\n    >\n      {props.children}\n    </DefaultEditDialog>\n  )\n}\n","import {type EditorSelection, PortableTextEditor, usePortableTextEditor} from '@portabletext/editor'\nimport {\n  type ObjectSchemaType,\n  type Path,\n  type PortableTextBlock,\n  type PortableTextChild,\n} from '@sanity/types'\nimport {isEqual} from '@sanity/util/paths'\nimport {useCallback, useMemo, useState} from 'react'\n\nimport {Tooltip} from '../../../../../ui-components'\nimport {pathToString} from '../../../../field/paths'\nimport {useTranslation} from '../../../../i18n'\nimport {EMPTY_ARRAY} from '../../../../util'\nimport {useChildPresence} from '../../../studio/contexts/Presence'\nimport {\n  type BlockProps,\n  type RenderAnnotationCallback,\n  type RenderArrayOfObjectsItemCallback,\n  type RenderBlockCallback,\n  type RenderCustomMarkers,\n  type RenderFieldCallback,\n  type RenderInputCallback,\n  type RenderPreviewCallback,\n} from '../../../types'\nimport {useFormBuilder} from '../../../useFormBuilder'\nimport {type SetPortableTextMemberItemElementRef} from '../contexts/PortableTextMemberItemElementRefsProvider'\nimport {useMemberValidation} from '../hooks/useMemberValidation'\nimport {usePortableTextMarkers} from '../hooks/usePortableTextMarkers'\nimport {usePortableTextMemberItem} from '../hooks/usePortableTextMembers'\nimport {PreviewSpan, Root, TooltipBox} from './InlineObject.styles'\nimport {InlineObjectToolbarPopover} from './InlineObjectToolbarPopover'\nimport {ObjectEditModal} from './modals/ObjectEditModal'\n\ninterface InlineObjectProps {\n  floatingBoundary: HTMLElement | null\n  focused: boolean\n  onItemClose: () => void\n  onItemOpen: (path: Path) => void\n  onPathFocus: (path: Path) => void\n  path: Path\n  readOnly?: boolean\n  referenceBoundary: HTMLElement | null\n  relativePath: Path\n  renderAnnotation?: RenderAnnotationCallback\n  renderBlock?: RenderBlockCallback\n  renderCustomMarkers?: RenderCustomMarkers\n  renderField: RenderFieldCallback\n  renderInlineBlock?: RenderBlockCallback\n  renderInput: RenderInputCallback\n  renderItem: RenderArrayOfObjectsItemCallback\n  renderPreview: RenderPreviewCallback\n  schemaType: ObjectSchemaType\n  selected: boolean\n  setElementRef: SetPortableTextMemberItemElementRef\n  value: PortableTextChild\n}\n\nexport const InlineObject = (props: InlineObjectProps): React.JSX.Element => {\n  const {\n    floatingBoundary,\n    focused,\n    onItemClose,\n    onItemOpen,\n    onPathFocus,\n    path,\n    readOnly,\n    referenceBoundary,\n    relativePath,\n    renderAnnotation,\n    renderBlock,\n    renderCustomMarkers,\n    renderField,\n    renderItem,\n    renderInlineBlock,\n    renderInput,\n    renderPreview,\n    schemaType,\n    selected,\n    setElementRef,\n    value,\n  } = props\n  const {Markers} = useFormBuilder().__internal.components\n  const editor = usePortableTextEditor()\n  const markers = usePortableTextMarkers(path)\n  const [divElement, setDivElement] = useState<HTMLDivElement | null>(null)\n  const memberItem = usePortableTextMemberItem(pathToString(path))\n  const {validation, hasError, hasInfo, hasWarning} = useMemberValidation(memberItem?.node)\n  const parentSchemaType = editor.schemaTypes.block\n  const hasMarkers = markers.length > 0\n  const selfSelection = useMemo(\n    (): EditorSelection => ({\n      anchor: {path: relativePath, offset: 0},\n      focus: {path: relativePath, offset: 0},\n    }),\n    [relativePath],\n  )\n\n  const onRemove = useCallback(() => {\n    PortableTextEditor.delete(editor, selfSelection, {mode: 'children'})\n    PortableTextEditor.focus(editor)\n  }, [selfSelection, editor])\n\n  const onOpen = useCallback(() => {\n    if (memberItem) {\n      // Take focus away from the editor so that it doesn't propagate a new focusPath and interfere here.\n      PortableTextEditor.blur(editor)\n      onItemOpen(memberItem.node.path)\n    }\n  }, [onItemOpen, editor, memberItem])\n\n  const onClose = useCallback(() => {\n    onItemClose()\n    PortableTextEditor.select(editor, selfSelection)\n    PortableTextEditor.focus(editor)\n  }, [onItemClose, editor, selfSelection])\n\n  const isOpen = Boolean(memberItem?.member.open)\n  const input = memberItem?.input\n  const nodePath = memberItem?.node.path || EMPTY_ARRAY\n  const referenceElement = divElement\n\n  const presence = useChildPresence(path, true)\n  const rootPresence = useMemo(\n    () => presence.filter((p) => isEqual(p.path, path)),\n    [path, presence],\n  )\n\n  const componentProps: BlockProps = useMemo(\n    () => ({\n      __unstable_floatingBoundary: floatingBoundary,\n      __unstable_referenceBoundary: referenceBoundary,\n      __unstable_referenceElement: referenceElement,\n      children: input,\n      focused,\n      onClose,\n      onOpen,\n      onPathFocus,\n      onRemove,\n      open: isOpen,\n      markers,\n      member: memberItem?.member,\n      parentSchemaType,\n      path: nodePath,\n      presence: rootPresence,\n      readOnly: Boolean(readOnly),\n      renderAnnotation,\n      renderBlock,\n      renderDefault: DefaultInlineObjectComponent,\n      renderField,\n      renderInlineBlock,\n      renderInput,\n      renderItem,\n      renderPreview,\n      schemaType,\n      selected,\n      value: value as PortableTextBlock,\n      validation,\n    }),\n    [\n      floatingBoundary,\n      focused,\n      input,\n      isOpen,\n      markers,\n      memberItem?.member,\n      nodePath,\n      onClose,\n      onOpen,\n      onPathFocus,\n      onRemove,\n      parentSchemaType,\n      readOnly,\n      referenceBoundary,\n      referenceElement,\n      renderAnnotation,\n      renderBlock,\n      renderField,\n      renderInlineBlock,\n      renderInput,\n      renderItem,\n      renderPreview,\n      rootPresence,\n      schemaType,\n      selected,\n      validation,\n      value,\n    ],\n  )\n\n  // Tooltip indicating validation errors, warnings, info and markers\n  const tooltipEnabled = hasError || hasWarning || hasInfo || hasMarkers\n  const toolTipContent = useMemo(\n    () =>\n      (tooltipEnabled && (\n        <TooltipBox>\n          <Markers\n            markers={markers}\n            validation={validation}\n            renderCustomMarkers={renderCustomMarkers}\n          />\n        </TooltipBox>\n      )) ||\n      null,\n    [Markers, markers, renderCustomMarkers, tooltipEnabled, validation],\n  )\n\n  const setRef = useCallback(\n    (elm: HTMLDivElement) => {\n      if (memberItem) {\n        setElementRef({key: memberItem.member.key, elementRef: elm})\n      }\n      setDivElement(elm) // update state here so the reference element is available on first render\n    },\n    [memberItem, setElementRef, setDivElement],\n  )\n\n  return useMemo(\n    () => (\n      <span ref={setRef} contentEditable={false}>\n        <Tooltip\n          placement=\"bottom\"\n          portal=\"editor\"\n          // If the object modal is open, disable the tooltip to avoid it rerendering the inner items when the validation changes.\n          disabled={isOpen ? true : !tooltipEnabled}\n          content={toolTipContent}\n        >\n          {/* This relative span must be here for the ToolTip to properly show */}\n          {renderInlineBlock && (\n            <span style={{position: 'relative'}}>{renderInlineBlock(componentProps)}</span>\n          )}\n        </Tooltip>\n      </span>\n    ),\n    [componentProps, renderInlineBlock, setRef, toolTipContent, tooltipEnabled, isOpen],\n  )\n}\n\nexport const DefaultInlineObjectComponent = (props: BlockProps): React.JSX.Element => {\n  const {\n    __unstable_floatingBoundary: floatingBoundary,\n    __unstable_referenceBoundary: referenceBoundary,\n    __unstable_referenceElement: referenceElement,\n    children,\n    focused,\n    markers,\n    onClose,\n    onOpen,\n    onRemove,\n    open,\n    readOnly,\n    renderPreview,\n    schemaType,\n    selected,\n    validation,\n    value,\n  } = props\n  const {t} = useTranslation()\n  const hasMarkers = markers.length > 0\n  const popoverTitle = schemaType?.title || schemaType.name\n  const hasError = validation.filter((v) => v.level === 'error').length > 0\n  const hasWarning = validation.filter((v) => v.level === 'warning').length > 0\n\n  const tone = useMemo(() => {\n    if (hasError) {\n      return 'critical'\n    }\n\n    if (hasWarning) {\n      return 'caution'\n    }\n\n    if (selected || focused) {\n      return 'primary'\n    }\n    return undefined\n  }, [focused, hasError, hasWarning, selected])\n\n  return (\n    <>\n      <Root\n        aria-label={t('inputs.portable-text.inline-block.aria-label')}\n        data-focused={focused || undefined}\n        data-invalid={hasError || undefined}\n        data-markers={hasMarkers || undefined}\n        data-read-only={readOnly || undefined}\n        data-selected={selected || undefined}\n        data-warning={hasWarning || undefined}\n        forwardedAs=\"span\"\n        onClick={readOnly ? onOpen : undefined}\n        onDoubleClick={onOpen}\n        tone={tone}\n      >\n        <PreviewSpan>\n          {renderPreview({\n            layout: 'inline',\n            schemaType,\n            skipVisibilityCheck: true,\n            value,\n            fallbackTitle: 'Click to edit',\n          })}\n        </PreviewSpan>\n      </Root>\n      {referenceElement && (\n        <InlineObjectToolbarPopover\n          floatingBoundary={floatingBoundary}\n          inlineObjectFocused={focused}\n          inlineObjectOpen={open}\n          onOpenInlineObject={onOpen}\n          onRemoveInlineObject={onRemove}\n          referenceBoundary={referenceBoundary}\n          referenceElement={referenceElement}\n          title={popoverTitle}\n        />\n      )}\n      {open && (\n        <ObjectEditModal\n          autoFocus\n          defaultType=\"popover\"\n          floatingBoundary={floatingBoundary}\n          onClose={onClose}\n          referenceBoundary={referenceBoundary}\n          referenceElement={referenceElement}\n          schemaType={schemaType}\n        >\n          {children}\n        </ObjectEditModal>\n      )}\n    </>\n  )\n}\n","import {PortableTextEditor, usePortableTextEditor} from '@portabletext/editor'\nimport {useBoundaryElement} from '@sanity/ui'\nimport {useCallback, useMemo} from 'react'\n\nimport {isEmptyItem} from '../../../../store/utils/isEmptyItem'\nimport {usePortableTextMemberItemElementRefs} from '../../contexts/PortableTextMemberItemElementRefsProvider'\nimport {usePortableTextMemberItems} from '../../hooks/usePortableTextMembers'\nimport {ObjectEditModal} from './ObjectEditModal'\n\nexport function AnnotationObjectEditModal(props: {\n  focused: boolean | undefined\n  onItemClose: () => void\n  referenceBoundary: HTMLElement | null\n}) {\n  const editor = usePortableTextEditor()\n  const boundaryElement = useBoundaryElement().element\n  const portableTextMemberItems = usePortableTextMemberItems()\n  const elementRefs = usePortableTextMemberItemElementRefs()\n  const openAnnotation = useMemo(() => {\n    return portableTextMemberItems.find((m) => m.kind === 'annotation' && m.member.open)\n  }, [portableTextMemberItems])\n\n  const onClose = useCallback(() => {\n    if (!openAnnotation) {\n      return\n    }\n\n    props.onItemClose()\n\n    if (openAnnotation.node.value && isEmptyItem(openAnnotation.node.value) && openAnnotation) {\n      PortableTextEditor.removeAnnotation(editor, openAnnotation.node.schemaType)\n    }\n\n    PortableTextEditor.focus(editor)\n  }, [editor, props, openAnnotation])\n\n  if (!openAnnotation) {\n    return null\n  }\n\n  const elementRef = elementRefs[openAnnotation.member.key]\n\n  if (!elementRef) {\n    return null\n  }\n\n  return (\n    <ObjectEditModal\n      defaultType=\"popover\"\n      floatingBoundary={boundaryElement}\n      onClose={onClose}\n      autoFocus={Boolean(props.focused)}\n      referenceBoundary={props.referenceBoundary}\n      referenceElement={elementRef}\n      schemaType={openAnnotation.node.schemaType}\n    >\n      {openAnnotation.input}\n    </ObjectEditModal>\n  )\n}\n","import {\n  type BlockAnnotationRenderProps,\n  type BlockChildRenderProps as EditorChildRenderProps,\n  type BlockRenderProps as EditorBlockRenderProps,\n  type EditorSelection,\n  type HotkeyOptions,\n  type OnCopyFn,\n  type OnPasteFn,\n  type RangeDecoration,\n  usePortableTextEditor,\n} from '@portabletext/editor'\nimport {type Path, type PortableTextBlock, type PortableTextTextBlock} from '@sanity/types'\nimport {Box, Portal, PortalProvider, useBoundaryElement, usePortal} from '@sanity/ui'\nimport {type ReactNode, useCallback, useMemo, useState} from 'react'\n\nimport {ChangeIndicator} from '../../../changeIndicators'\nimport {EMPTY_ARRAY} from '../../../util'\nimport {ActivateOnFocus} from '../../components/ActivateOnFocus/ActivateOnFocus'\nimport {TreeEditingEnabledProvider} from '../../studio/tree-editing'\nimport {\n  type ArrayOfObjectsInputProps,\n  type PortableTextInputProps,\n  type RenderCustomMarkers,\n} from '../../types'\nimport {type RenderBlockActionsCallback} from '../../types/_transitional'\nimport {UploadTargetCard} from '../arrays/common/UploadTargetCard'\nimport {ExpandedLayer, Root} from './Compositor.styles'\nimport {useSetPortableTextMemberItemElementRef} from './contexts/PortableTextMemberItemElementRefsProvider'\nimport {Editor} from './Editor'\nimport {useHotkeys} from './hooks/useHotKeys'\nimport {useTrackFocusPath} from './hooks/useTrackFocusPath'\nimport {Annotation} from './object/Annotation'\nimport {BlockObject} from './object/BlockObject'\nimport {InlineObject} from './object/InlineObject'\nimport {AnnotationObjectEditModal} from './object/modals/AnnotationObjectEditModal'\nimport {TextBlock} from './text'\n\ninterface InputProps extends ArrayOfObjectsInputProps<PortableTextBlock> {\n  elementRef: React.RefObject<HTMLDivElement | null>\n  hasFocusWithin: boolean\n  hideToolbar?: boolean\n  hotkeys?: HotkeyOptions\n  isActive: boolean\n  isFullscreen: boolean\n  onActivate: () => void\n  onCopy?: OnCopyFn\n  onPaste?: OnPasteFn\n  onToggleFullscreen: () => void\n  path: Path\n  rangeDecorations?: RangeDecoration[]\n  renderBlockActions?: RenderBlockActionsCallback\n  renderCustomMarkers?: RenderCustomMarkers\n  renderEditable?: PortableTextInputProps['renderEditable']\n}\n\n/** @internal */\nexport function Compositor(props: Omit<InputProps, 'schemaType' | 'arrayFunctions'>): ReactNode {\n  const {\n    changed,\n    elementRef,\n    focused,\n    focusPath = EMPTY_ARRAY,\n    elementProps,\n    hasFocusWithin,\n    hideToolbar,\n    hotkeys,\n    isActive,\n    isFullscreen,\n    onActivate,\n    onCopy,\n    onItemClose,\n    onItemOpen,\n    onItemRemove,\n    onPaste,\n    onPathFocus,\n    onToggleFullscreen,\n    onUpload,\n    path,\n    rangeDecorations,\n    readOnly,\n    renderAnnotation,\n    renderBlock,\n    renderBlockActions,\n    renderCustomMarkers,\n    renderEditable,\n    renderField,\n    renderInlineBlock,\n    renderInput,\n    renderItem,\n    renderPreview,\n    resolveUploader,\n    value,\n  } = props\n\n  const editor = usePortableTextEditor()\n  const setElementRef = useSetPortableTextMemberItemElementRef()\n\n  const boundaryElement = useBoundaryElement().element\n  const [wrapperElement, setWrapperElement] = useState<HTMLDivElement | null>(null)\n  const [scrollElement, setScrollElement] = useState<HTMLElement | null>(null)\n\n  const handleToggleFullscreen = useCallback(() => {\n    onToggleFullscreen()\n  }, [onToggleFullscreen])\n\n  const hotkeysWithFullscreenToggle = useMemo(\n    () => ({\n      ...hotkeys,\n      custom: {\n        'mod+enter': onToggleFullscreen,\n        ...(hotkeys?.custom || {}),\n      },\n    }),\n\n    [hotkeys, onToggleFullscreen],\n  )\n\n  const editorHotkeys = useHotkeys(hotkeysWithFullscreenToggle)\n\n  const _renderBlockActions = !!value && renderBlockActions ? renderBlockActions : undefined\n  const _renderCustomMarkers = !!value && renderCustomMarkers ? renderCustomMarkers : undefined\n\n  const [portalElement, setPortalElement] = useState<HTMLDivElement | null>(null)\n\n  const renderTextBlock = useCallback(\n    (blockProps: EditorBlockRenderProps) => {\n      const {\n        children,\n        focused: blockFocused,\n        path: blockPath,\n        selected,\n        schemaType: blockSchemaType,\n        value: block,\n      } = blockProps\n      return (\n        <TextBlock\n          floatingBoundary={boundaryElement}\n          focused={blockFocused}\n          isFullscreen={isFullscreen}\n          onItemClose={onItemClose}\n          onItemOpen={onItemOpen}\n          onItemRemove={onItemRemove}\n          onPathFocus={onPathFocus}\n          path={path.concat(blockPath)}\n          readOnly={readOnly}\n          referenceBoundary={scrollElement}\n          renderAnnotation={renderAnnotation}\n          renderField={renderField}\n          renderInlineBlock={renderInlineBlock}\n          renderInput={renderInput}\n          renderItem={renderItem}\n          renderBlockActions={_renderBlockActions}\n          renderCustomMarkers={_renderCustomMarkers}\n          renderPreview={renderPreview}\n          renderBlock={renderBlock}\n          schemaType={blockSchemaType}\n          selected={selected}\n          setElementRef={setElementRef}\n          value={block as PortableTextTextBlock}\n        >\n          {children}\n        </TextBlock>\n      )\n    },\n    [\n      _renderBlockActions,\n      _renderCustomMarkers,\n      boundaryElement,\n      isFullscreen,\n      onItemClose,\n      onItemOpen,\n      onItemRemove,\n      onPathFocus,\n      path,\n      readOnly,\n      renderAnnotation,\n      renderBlock,\n      renderField,\n      renderInlineBlock,\n      renderInput,\n      renderItem,\n      renderPreview,\n      scrollElement,\n      setElementRef,\n    ],\n  )\n\n  const renderObjectBlock = useCallback(\n    (blockProps: EditorBlockRenderProps) => {\n      const {\n        focused: blockFocused,\n        path: blockPath,\n        selected: blockSelected,\n        schemaType: blockSchemaType,\n        value: blockValue,\n      } = blockProps\n      return (\n        <BlockObject\n          floatingBoundary={boundaryElement}\n          focused={blockFocused}\n          isFullscreen={isFullscreen}\n          onItemClose={onItemClose}\n          onItemOpen={onItemOpen}\n          onItemRemove={onItemRemove}\n          onPathFocus={onPathFocus}\n          path={path.concat(blockPath)}\n          readOnly={readOnly}\n          referenceBoundary={scrollElement}\n          relativePath={blockPath}\n          renderAnnotation={renderAnnotation}\n          renderBlock={renderBlock}\n          renderBlockActions={_renderBlockActions}\n          renderCustomMarkers={_renderCustomMarkers}\n          renderField={renderField}\n          renderInlineBlock={renderInlineBlock}\n          renderInput={renderInput}\n          renderItem={renderItem}\n          renderPreview={renderPreview}\n          schemaType={blockSchemaType}\n          selected={blockSelected}\n          setElementRef={setElementRef}\n          value={blockValue}\n        />\n      )\n    },\n    [\n      boundaryElement,\n      scrollElement,\n      isFullscreen,\n      onItemClose,\n      onItemOpen,\n      onItemRemove,\n      onPathFocus,\n      path,\n      readOnly,\n      renderAnnotation,\n      renderBlock,\n      _renderBlockActions,\n      _renderCustomMarkers,\n      renderField,\n      renderInlineBlock,\n      renderInput,\n      renderItem,\n      renderPreview,\n      setElementRef,\n    ],\n  )\n\n  // This is the function that is sent to PortableTextEditor's renderBlock callback\n  const editorRenderBlock = useCallback(\n    (blockProps: EditorBlockRenderProps) => {\n      const {value: block} = blockProps\n      const isTextBlock = block._type === editor.schemaTypes.block.name\n      if (isTextBlock) {\n        return renderTextBlock(blockProps)\n      }\n      return renderObjectBlock(blockProps)\n    },\n    [editor.schemaTypes.block.name, renderObjectBlock, renderTextBlock],\n  )\n\n  // This is the function that is sent to PortableTextEditor's renderChild callback\n  const editorRenderChild = useCallback(\n    (childProps: EditorChildRenderProps) => {\n      const {\n        children,\n        focused: childFocused,\n        path: childPath,\n        selected,\n        schemaType: childSchemaType,\n        value: child,\n      } = childProps\n      const isSpan = child._type === editor.schemaTypes.span.name\n      if (isSpan) {\n        return children\n      }\n      return (\n        <InlineObject\n          floatingBoundary={boundaryElement}\n          focused={childFocused}\n          onItemClose={onItemClose}\n          onItemOpen={onItemOpen}\n          onPathFocus={onPathFocus}\n          path={path.concat(childPath)}\n          readOnly={readOnly}\n          referenceBoundary={scrollElement}\n          relativePath={childPath}\n          renderAnnotation={renderAnnotation}\n          renderBlock={renderBlock}\n          renderCustomMarkers={renderCustomMarkers}\n          renderField={renderField}\n          renderInlineBlock={renderInlineBlock}\n          renderInput={renderInput}\n          renderItem={renderItem}\n          renderPreview={renderPreview}\n          schemaType={childSchemaType}\n          selected={selected}\n          setElementRef={setElementRef}\n          value={child}\n        />\n      )\n    },\n    [\n      editor.schemaTypes.span.name,\n      boundaryElement,\n      onItemClose,\n      onItemOpen,\n      onPathFocus,\n      path,\n      readOnly,\n      scrollElement,\n      renderAnnotation,\n      renderBlock,\n      renderCustomMarkers,\n      renderField,\n      renderInlineBlock,\n      renderInput,\n      renderItem,\n      renderPreview,\n      setElementRef,\n    ],\n  )\n\n  const editorRenderAnnotation = useCallback(\n    (annotationProps: BlockAnnotationRenderProps) => {\n      const {\n        children,\n        focused: editorNodeFocused,\n        path: aPath,\n        selected,\n        schemaType: aSchemaType,\n        value: aValue,\n      } = annotationProps\n      return (\n        <Annotation\n          editorNodeFocused={editorNodeFocused}\n          floatingBoundary={boundaryElement}\n          focused={Boolean(focused)}\n          onItemClose={onItemClose}\n          onItemOpen={onItemOpen}\n          onPathFocus={onPathFocus}\n          path={path.concat(aPath)}\n          readOnly={readOnly}\n          referenceBoundary={scrollElement}\n          renderAnnotation={renderAnnotation}\n          renderBlock={renderBlock}\n          renderCustomMarkers={renderCustomMarkers}\n          renderField={renderField}\n          renderInlineBlock={renderInlineBlock}\n          renderInput={renderInput}\n          renderItem={renderItem}\n          renderPreview={renderPreview}\n          schemaType={aSchemaType}\n          selected={selected}\n          setElementRef={setElementRef}\n          value={aValue}\n        >\n          {children}\n        </Annotation>\n      )\n    },\n    [\n      boundaryElement,\n      scrollElement,\n      focused,\n      onItemClose,\n      onItemOpen,\n      onPathFocus,\n      path,\n      readOnly,\n      renderAnnotation,\n      renderBlock,\n      renderCustomMarkers,\n      renderField,\n      renderInlineBlock,\n      renderInput,\n      renderItem,\n      renderPreview,\n      setElementRef,\n    ],\n  )\n  const ariaDescribedBy = elementProps['aria-describedby']\n\n  // Create an initial editor selection based on the focusPath\n  // at the time that the editor mounts. Any updates to the\n  // focusPath later will be handled by the useTrackFocusPath hook.\n  // The initial selection is handled explicitly as a separate\n  // prop to the Editable PTE component (initialSelection) so that\n  // selections can be set initially even though the editor value\n  // might not be fully propagated or rendered yet.\n  const [initialSelection] = useState<EditorSelection | undefined>(() => {\n    // We can be sure that the focusPath is pointing directly to\n    // editor content when hasFocusWithin is true.\n    if (hasFocusWithin) {\n      return {\n        anchor: {\n          path: focusPath,\n          offset: 0,\n        },\n        focus: {\n          path: focusPath,\n          offset: 0,\n        },\n      }\n    }\n    return undefined\n  })\n\n  const editorNode = useMemo(\n    () => (\n      <UploadTargetCard\n        types={editor.schemaTypes.portableText.of}\n        resolveUploader={resolveUploader}\n        onUpload={onUpload}\n        tabIndex={-1}\n      >\n        <Editor\n          ariaDescribedBy={ariaDescribedBy}\n          elementRef={elementRef}\n          initialSelection={initialSelection}\n          hideToolbar={hideToolbar}\n          hotkeys={editorHotkeys}\n          isActive={isActive}\n          isFullscreen={isFullscreen}\n          onItemOpen={onItemOpen}\n          onCopy={onCopy}\n          onPaste={onPaste}\n          onToggleFullscreen={handleToggleFullscreen}\n          path={path}\n          rangeDecorations={rangeDecorations}\n          readOnly={readOnly}\n          renderAnnotation={editorRenderAnnotation}\n          renderBlock={editorRenderBlock}\n          renderChild={editorRenderChild}\n          renderEditable={renderEditable}\n          setPortalElement={setPortalElement}\n          scrollElement={scrollElement}\n          setScrollElement={setScrollElement}\n        />\n      </UploadTargetCard>\n    ),\n\n    // Keep only stable ones here!\n    [\n      ariaDescribedBy,\n      editor.schemaTypes.portableText.of,\n      editorHotkeys,\n      editorRenderAnnotation,\n      editorRenderBlock,\n      editorRenderChild,\n      elementRef,\n      handleToggleFullscreen,\n      hideToolbar,\n      initialSelection,\n      isActive,\n      isFullscreen,\n      onCopy,\n      onItemOpen,\n      onPaste,\n      path,\n      onUpload,\n      resolveUploader,\n      rangeDecorations,\n      readOnly,\n      renderEditable,\n      scrollElement,\n    ],\n  )\n\n  const portal = usePortal()\n  const portalElements = useMemo(\n    () => ({\n      collapsed: wrapperElement,\n      default: portal.element,\n      editor: portalElement,\n      expanded: portal.element,\n    }),\n\n    [portal.element, portalElement, wrapperElement],\n  )\n\n  // Scroll to the DOM element of the \"opened\" portable text member when relevant.\n  useTrackFocusPath({\n    focusPath,\n    boundaryElement: scrollElement,\n    onItemClose,\n  })\n\n  // The editor should have a focus ring when the field itself is focused,\n  // or focus is pointing directly to a node inside the editor\n  // (as opposed to focus on fields inside object nodes like annotations, inline blocks etc.)\n  const editorFocused = focused || hasFocusWithin\n\n  return (\n    <TreeEditingEnabledProvider legacyEditing>\n      <PortalProvider __unstable_elements={portalElements} element={portal.element}>\n        <ActivateOnFocus onActivate={onActivate} isOverlayActive={!isActive}>\n          <ChangeIndicator\n            disabled={isFullscreen}\n            hasFocus={Boolean(focused)}\n            isChanged={changed}\n            path={path}\n          >\n            <Root\n              data-focused={editorFocused ? '' : undefined}\n              data-read-only={readOnly ? '' : undefined}\n            >\n              <Box data-wrapper=\"\" ref={setWrapperElement}>\n                <Portal __unstable_name={isFullscreen ? 'expanded' : 'collapsed'}>\n                  {isFullscreen ? <ExpandedLayer>{editorNode}</ExpandedLayer> : editorNode}\n                  <AnnotationObjectEditModal\n                    focused={focused}\n                    onItemClose={onItemClose}\n                    referenceBoundary={scrollElement}\n                  />\n                </Portal>\n              </Box>\n              <div data-border=\"\" />\n            </Root>\n          </ChangeIndicator>\n        </ActivateOnFocus>\n      </PortalProvider>\n    </TreeEditingEnabledProvider>\n  )\n}\n","import {type ReactNode} from 'react'\nimport {PortableTextMarkersContext} from 'sanity/_singletons'\n\nimport {type PortableTextMarker} from '../../../types'\n\nexport function PortableTextMarkersProvider(props: {\n  markers: PortableTextMarker[]\n  children: ReactNode\n}) {\n  return (\n    <PortableTextMarkersContext.Provider value={props.markers}>\n      {props.children}\n    </PortableTextMarkersContext.Provider>\n  )\n}\n","import {type ReactNode} from 'react'\nimport {PortableTextMemberItemsContext} from 'sanity/_singletons'\n\nimport {type PortableTextMemberItem} from '../PortableTextInput'\n\nexport function PortableTextMemberItemsProvider(props: {\n  memberItems: PortableTextMemberItem[]\n  children: ReactNode\n}) {\n  return (\n    <PortableTextMemberItemsContext.Provider value={props.memberItems}>\n      {props.children}\n    </PortableTextMemberItemsContext.Provider>\n  )\n}\n","import {type InvalidValueResolution} from '@portabletext/editor'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {\n  Box,\n  // eslint-disable-next-line no-restricted-imports\n  Button,\n  Card,\n  Code,\n  Grid,\n  Stack,\n  Text,\n} from '@sanity/ui'\nimport {useCallback} from 'react'\n\nimport {Translate, useTranslation} from '../../../i18n'\nimport {\n  PortableTextInvalidValueIgnore,\n  PortableTextInvalidValueResolve,\n} from '../../__telemetry__/form.telemetry'\nimport {Alert} from '../../components/Alert'\n\ninterface InvalidValueProps {\n  onChange: (...args: any[]) => any\n  onIgnore: () => void\n  readOnly?: boolean\n  resolution: InvalidValueResolution\n}\n\nexport function InvalidValue(props: InvalidValueProps) {\n  const {onChange, onIgnore, resolution, readOnly} = props\n  const telemetry = useTelemetry()\n\n  const {t} = useTranslation()\n\n  const handleAction = useCallback(() => {\n    if (resolution) {\n      onChange({type: 'mutation', patches: resolution.patches})\n      telemetry.log(PortableTextInvalidValueResolve, {\n        PTEInvalidValueId: resolution.i18n.description,\n        PTEInvalidValueDescription: resolution.description,\n      })\n    }\n  }, [onChange, resolution, telemetry])\n\n  const handleOnIgnore = useCallback(() => {\n    telemetry.log(PortableTextInvalidValueIgnore)\n    onIgnore()\n  }, [onIgnore, telemetry])\n\n  if (!resolution) return null\n\n  return (\n    <Alert\n      title={<>{t('inputs.portable-text.invalid-value.title')}</>}\n      suffix={\n        <Stack padding={2}>\n          {resolution.action && (\n            <Grid columns={[1, 2]} gap={1}>\n              <Button\n                mode=\"ghost\"\n                onClick={handleOnIgnore}\n                text={t('inputs.portable-text.invalid-value.ignore-button.text')}\n              />\n              {/* @todo: use plain string */}\n              {!readOnly && (\n                <Button\n                  onClick={handleAction}\n                  text={\n                    <Translate\n                      t={t}\n                      i18nKey={resolution.i18n.action}\n                      values={resolution.i18n.values}\n                    />\n                  }\n                  tone=\"caution\"\n                />\n              )}\n            </Grid>\n          )}\n\n          <Box padding={3}>\n            {resolution.action && (\n              <Text as=\"p\" muted size={1}>\n                {t('inputs.portable-text.invalid-value.action-disclaimer')}\n              </Text>\n            )}\n          </Box>\n        </Stack>\n      }\n    >\n      <Stack space={3}>\n        <Text as=\"p\" muted size={1}>\n          <Translate t={t} i18nKey={resolution.i18n.description} values={resolution.i18n.values} />\n        </Text>\n\n        <Card border overflow=\"auto\" padding={2} tone=\"inherit\">\n          <Code language=\"json\">{JSON.stringify(resolution.item, null, 2)}</Code>\n        </Card>\n      </Stack>\n    </Alert>\n  )\n}\n","import {type ColorTints} from '@sanity/color'\nimport {type User} from '@sanity/types'\nimport {Box, Text} from '@sanity/ui'\nimport {\n  // eslint-disable-next-line camelcase\n  getTheme_v2,\n} from '@sanity/ui/theme'\nimport {AnimatePresence, motion, type Transition, type Variants} from 'framer-motion'\nimport {useCallback, useMemo, useState} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {useUserColor} from '../../../../user-color/hooks'\n\nconst DOT_SIZE = 6\n\nconst CONTENT_BOX_VARIANTS: Variants = {\n  animate: {opacity: 1, scaleX: 1, scaleY: 1},\n  exit: {opacity: 0, scaleX: 0, scaleY: 0.5},\n  initial: {opacity: 0, scaleX: 0, scaleY: 0.5},\n}\n\nconst CONTENT_BOX_TRANSITION: Transition = {\n  duration: 0.3,\n  ease: 'easeInOut',\n  type: 'spring',\n  bounce: 0,\n}\n\nconst CONTENT_TEXT_VARIANTS: Variants = {\n  animate: {opacity: 1},\n  exit: {opacity: 0},\n  initial: {opacity: 0},\n}\n\nconst CONTENT_TEXT_TRANSITION: Transition = {\n  duration: 0.2,\n  delay: 0.15,\n}\n\nconst CursorLine = styled.span<{$tints: ColorTints}>(({theme, $tints}) => {\n  const isDark = getTheme_v2(theme)?.color._dark\n  const bg = $tints[isDark ? 400 : 500].hex\n  const fg = $tints[isDark ? 900 : 50].hex\n\n  return css`\n    --presence-cursor-bg: ${bg};\n    --presence-cursor-fg: ${fg};\n\n    border-left: 1px solid transparent;\n    border-color: var(--presence-cursor-bg);\n    margin-left: -1px;\n    position: relative;\n    word-break: normal;\n    white-space: normal;\n    mix-blend-mode: unset;\n    pointer-events: none;\n  `\n})\n\nconst CursorDot = styled.div`\n  background-color: var(--presence-cursor-bg);\n  border-radius: 50%;\n  width: ${DOT_SIZE}px;\n  height: ${DOT_SIZE}px;\n  position: absolute;\n  top: -${DOT_SIZE - 1}px;\n  left: -0.5px;\n  transform: translateX(-50%);\n  mix-blend-mode: unset;\n  z-index: 0;\n  pointer-events: all;\n\n  // Increase the hit area of the cursor dot\n  &:before {\n    content: '';\n    position: absolute;\n    top: -${DOT_SIZE / 2}px;\n    left: 50%;\n    transform: translateX(-50%);\n    width: ${DOT_SIZE * 2}px;\n    height: ${DOT_SIZE * 3}px;\n    opacity: 0.5;\n  }\n`\n\nconst UserBox = styled(motion.create(Box))(({theme}) => {\n  const radius = getTheme_v2(theme)?.radius[4]\n\n  return css`\n    position: absolute;\n    top: -${DOT_SIZE * 1.5}px;\n    left: -${DOT_SIZE * 0.75}px;\n    transform-origin: left;\n    white-space: nowrap;\n    padding: 3px 6px;\n    box-sizing: border-box;\n    border-radius: ${radius}px;\n    background-color: var(--presence-cursor-bg);\n    z-index: 1;\n    mix-blend-mode: unset;\n    user-select: none;\n  `\n})\n\nconst UserText = styled(motion.create(Text))`\n  color: var(--presence-cursor-fg);\n  mix-blend-mode: unset;\n`\n\ninterface UserPresenceCursorProps {\n  children?: React.ReactNode\n  user: User\n}\n\nexport function UserPresenceCursor(props: UserPresenceCursorProps): React.JSX.Element {\n  const {children, user} = props\n  const {tints} = useUserColor(user.id)\n  const [hovered, setHovered] = useState<boolean>(false)\n\n  const handleMouseEnter = useCallback(() => setHovered(true), [])\n  const handleMouseLeave = useCallback(() => setHovered(false), [])\n\n  const testId = useMemo(\n    () => `presence-cursor-${user.displayName?.split(' ').join('-')}`,\n    [user.displayName],\n  )\n\n  return (\n    <>\n      <CursorLine\n        $tints={tints}\n        contentEditable={false}\n        data-testid={testId}\n        onMouseEnter={handleMouseEnter}\n        onMouseLeave={handleMouseLeave}\n      >\n        <AnimatePresence>\n          {hovered && (\n            <UserBox\n              animate=\"animate\"\n              exit=\"exit\"\n              flex={1}\n              initial=\"initial\"\n              transition={CONTENT_BOX_TRANSITION}\n              variants={CONTENT_BOX_VARIANTS}\n            >\n              <UserText\n                animate=\"animate\"\n                exit=\"exit\"\n                initial=\"initial\"\n                size={0}\n                transition={CONTENT_TEXT_TRANSITION}\n                variants={CONTENT_TEXT_VARIANTS}\n                weight=\"medium\"\n              >\n                {user.displayName}\n              </UserText>\n            </UserBox>\n          )}\n        </AnimatePresence>\n\n        <CursorDot />\n      </CursorLine>\n      {children}\n    </>\n  )\n}\n","import {type RangeDecoration, type RangeDecorationOnMovedDetails} from '@portabletext/editor'\nimport {type Path} from '@sanity/types'\nimport {startsWith} from '@sanity/util/paths'\nimport {isEqual} from 'lodash'\nimport {useCallback, useEffect, useRef, useState} from 'react'\n\nimport {type FormNodePresence} from '../../../../presence'\nimport {EMPTY_ARRAY} from '../../../../util/empty'\nimport {useFormFieldPresence} from '../../../studio/contexts/Presence'\nimport {UserPresenceCursor} from './UserPresenceCursor'\n\nexport interface PresenceCursorDecorationsHookProps {\n  path: Path\n}\n\nexport function usePresenceCursorDecorations(\n  props: PresenceCursorDecorationsHookProps,\n): RangeDecoration[] {\n  const {path} = props\n  const fieldPresence = useFormFieldPresence()\n  const [currentPresence, setCurrentPresence] = useState<FormNodePresence[]>([])\n  const [presenceCursorDecorations, setPresenceCursorDecorations] = useState<RangeDecoration[]>([])\n  const previousPresence = useRef<FormNodePresence[]>(currentPresence)\n\n  const handleRangeDecorationMoved = useCallback((details: RangeDecorationOnMovedDetails) => {\n    const {rangeDecoration, newSelection} = details\n\n    // Update the range decoration with the new selection.\n    setPresenceCursorDecorations((prev) => {\n      // eslint-disable-next-line max-nested-callbacks\n      const next = prev.map((p) => {\n        if (p.payload?.sessionId === rangeDecoration.payload?.sessionId) {\n          const nextDecoration: RangeDecoration = {\n            ...rangeDecoration,\n            selection: newSelection,\n          }\n          return nextDecoration\n        }\n        return p\n      })\n\n      return next\n    })\n  }, [])\n\n  useEffect(() => {\n    const nextPresence = fieldPresence.filter(\n      (p) => startsWith(path, p.path) && !isEqual(path, p.path),\n    )\n\n    // Filter out the selection and sessionId from the next and previous presence\n    // since that is the only thing we are interested in comparing to see if we need to update.\n    const filteredNext = nextPresence.map((d) => ({...d.selection, sessionId: d.sessionId}))\n    const filteredPrevious = previousPresence.current.map((d) => ({\n      ...d.selection,\n      sessionId: d.sessionId,\n    }))\n\n    // Only update the current presence state it has changed.\n    if (!isEqual(filteredNext, filteredPrevious)) {\n      const value = nextPresence.length > 0 ? nextPresence : EMPTY_ARRAY\n\n      setCurrentPresence(value)\n      // Store the previous presence to be able to compare it in the next render.\n      previousPresence.current = value\n    }\n  }, [fieldPresence, path])\n\n  useEffect(() => {\n    const decorations: RangeDecoration[] = currentPresence.map((presence) => {\n      if (!presence.selection) return null\n\n      // Always use the focus point as the cursor point. This is important when\n      // the user has selected a range of text. In that case, we want to show the\n      // cursor at the start of the selection.\n      const cursorPoint = {focus: presence.selection.focus, anchor: presence.selection.focus}\n\n      return {\n        component: ({children}) => (\n          <UserPresenceCursor user={presence.user}>{children}</UserPresenceCursor>\n        ),\n        selection: cursorPoint,\n        onMoved: handleRangeDecorationMoved,\n        payload: {sessionId: presence.sessionId},\n      }\n    }) as RangeDecoration[]\n\n    setPresenceCursorDecorations(decorations.filter(Boolean))\n  }, [currentPresence, handleRangeDecorationMoved])\n\n  return presenceCursorDecorations\n}\n","import {type SchemaType} from '@sanity/types'\n\n// import {PortableTextInputProps} from 'sanity/index'\nimport {type FIXME} from '../../../../FIXME'\nimport {\n  type FileLike,\n  type ResolvedUploader,\n  type UploaderResolver,\n} from '../../../studio/uploads/types'\n\nexport function getUploadCandidates(\n  types: SchemaType[],\n  resolveUploader: UploaderResolver<FIXME>,\n  file: FileLike,\n) {\n  return types\n    .map((memberType) => ({\n      type: memberType,\n      uploader: resolveUploader(memberType, file),\n      parentType: memberType,\n    }))\n    .filter((member) => member.uploader) as ResolvedUploader[]\n}\n","import {type Path, type PathSegment} from '@sanity/types'\nimport {find, get} from 'lodash'\nimport {useCallback} from 'react'\nimport shallowEquals from 'shallow-equals'\n\nimport {isRecord} from '../../../util'\nimport {type FormPatch} from '../../patch'\nimport {useFormBuilder} from '../../useFormBuilder'\n\n/**\n * @internal\n */\nexport interface PatchesData {\n  patches: Array<FormPatch>\n  shouldReset: boolean\n  snapshot: any\n}\n\n/**\n * @internal\n */\nexport type PatchesSubscriber = (data: PatchesData) => void\n\n/**\n * @internal\n */\nexport function usePatches(props: {path: Path}): {\n  subscribe: (subscriber: PatchesSubscriber) => () => void\n} {\n  const {path} = props\n  const {patchChannel} = useFormBuilder().__internal\n\n  const subscribe = useCallback(\n    (subscriber: PatchesSubscriber) => {\n      return patchChannel.subscribe(({snapshot, patches}) => {\n        const filteredPatches = patches\n          .filter((patch) => _startsWith(patch.path, path))\n          .map((patch) => ({\n            ...patch,\n            path: patch.path.slice(path.length),\n          }))\n\n        if (filteredPatches.length) {\n          subscriber({\n            shouldReset: _shouldReset(path, patches),\n            snapshot: isRecord(snapshot) ? _getValueAtPath(snapshot, path) : {},\n            patches: filteredPatches,\n          })\n        }\n      })\n    },\n    [path, patchChannel],\n  )\n\n  return {subscribe}\n}\n\nfunction _isSegmentEqual(segment1: PathSegment, segment2: PathSegment) {\n  const segment1Type = typeof segment1\n  if (segment1Type !== typeof segment2) {\n    return false\n  }\n  if (segment1Type === 'object') {\n    return shallowEquals(segment1, segment2)\n  }\n  return segment1 === segment2\n}\n\nfunction _startsWith(subjectPath: Path, checkPath: Path) {\n  if (subjectPath === checkPath) {\n    return true\n  }\n  if (!Array.isArray(subjectPath) || !Array.isArray(checkPath)) {\n    return false\n  }\n  if (subjectPath.length < checkPath.length) {\n    return false\n  }\n  for (let i = 0, len = checkPath.length; i < len; i++) {\n    if (!_isSegmentEqual(checkPath[i], subjectPath[i])) {\n      return false\n    }\n  }\n  return true\n}\n\nfunction _isAncestor(path1: Path, path2: Path) {\n  return path1.length === 0 || (_startsWith(path2, path1) && !_startsWith(path1, path2))\n}\n\nfunction _shouldReset(path: Path, patches: FormPatch[]) {\n  return patches.some(\n    (patch) => _isAncestor(patch.path, path) && (patch.type === 'set' || patch.type === 'unset'),\n  )\n}\n\nfunction _getValueAtPath(value: Record<string, unknown>, path: Path) {\n  return path.reduce((result, segment) => {\n    if (typeof segment === 'object') {\n      return find(result, segment)\n    }\n\n    return get(result, segment)\n  }, value)\n}\n","import {\n  type EditorChange,\n  type EditorEmittedEvent,\n  EditorProvider,\n  type EditorSelection,\n  type InvalidValue,\n  type OnPasteFn,\n  type Patch,\n  type PortableTextEditableProps,\n  PortableTextEditor,\n  type RangeDecoration,\n  type RenderEditableFunction,\n  useEditor,\n  usePortableTextEditor,\n} from '@portabletext/editor'\nimport {EventListenerPlugin, MarkdownPlugin} from '@portabletext/editor/plugins'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {isKeySegment, type Path, type PortableTextBlock} from '@sanity/types'\nimport {Box, Flex, Text, useToast} from '@sanity/ui'\nimport {randomKey} from '@sanity/util/content'\nimport {sortBy} from 'lodash'\nimport {\n  forwardRef,\n  type ReactNode,\n  startTransition,\n  useCallback,\n  useEffect,\n  useImperativeHandle,\n  useMemo,\n  useRef,\n  useState,\n} from 'react'\n\nimport {useTranslation} from '../../../i18n'\nimport {EMPTY_ARRAY} from '../../../util'\nimport {\n  PortableTextInputCollapsed,\n  PortableTextInputExpanded,\n} from '../../__telemetry__/form.telemetry'\nimport {SANITY_PATCH_TYPE} from '../../patch'\nimport {type ArrayOfObjectsItemMember, type ObjectFormNode} from '../../store'\nimport {immutableReconcile} from '../../store/utils/immutableReconcile'\nimport {type ResolvedUploader} from '../../studio/uploads/types'\nimport {type PortableTextInputProps} from '../../types'\nimport {extractPastedFiles} from '../common/fileTarget/utils/extractFiles'\nimport {Compositor} from './Compositor'\nimport {PortableTextMarkersProvider} from './contexts/PortableTextMarkers'\nimport {PortableTextMemberItemsProvider} from './contexts/PortableTextMembers'\nimport {usePortableTextMemberItemsFromProps} from './hooks/usePortableTextMembers'\nimport {InvalidValue as RespondToInvalidContent} from './InvalidValue'\nimport {\n  type PresenceCursorDecorationsHookProps,\n  usePresenceCursorDecorations,\n} from './presence-cursors'\nimport {getUploadCandidates} from './upload/helpers'\nimport {usePatches} from './usePatches'\n\ninterface UploadTask {\n  file: File\n  uploaderCandidates: ResolvedUploader[]\n}\n\nfunction keyGenerator() {\n  return randomKey(12)\n}\n\n/**\n * `EditorProvider` doesn't have a `ref` prop. This custom PTE plugin takes\n * care of imperatively forwarding that ref.\n */\nconst EditorRefPlugin = forwardRef<PortableTextEditor | null>((_, ref) => {\n  const portableTextEditor = usePortableTextEditor()\n\n  const portableTextEditorRef = useRef(portableTextEditor)\n\n  useImperativeHandle(ref, () => portableTextEditorRef.current, [])\n\n  return null\n})\nEditorRefPlugin.displayName = 'EditorRefPlugin'\n\n/** @internal */\nexport interface PortableTextMemberItem {\n  kind: 'annotation' | 'textBlock' | 'objectBlock' | 'inlineObject'\n  key: string\n  member: ArrayOfObjectsItemMember\n  node: ObjectFormNode\n  input?: ReactNode\n}\n/** @public */\nexport interface RenderPortableTextInputEditableProps extends PortableTextEditableProps {\n  renderDefault: RenderEditableFunction\n}\n\n/**\n * Input component for editing block content\n * ({@link https://github.com/portabletext/portabletext | Portable Text}) in the Sanity Studio.\n *\n * Supports multi-user real-time block content editing on larger documents.\n *\n * This component can be configured and customized extensively.\n * {@link https://www.sanity.io/docs/customizing-the-portable-text-editor | Go to the documentation for more details}.\n *\n * @public\n * @param props - {@link PortableTextInputProps} component props.\n */\nexport function PortableTextInput(props: PortableTextInputProps): ReactNode {\n  const {\n    editorRef: editorRefProp,\n    elementProps,\n    hotkeys,\n    initialActive,\n    initialFullscreen,\n    markers = EMPTY_ARRAY,\n    onChange,\n    onCopy,\n    onEditorChange,\n    onFullScreenChange,\n    onInsert,\n    onItemRemove,\n    onPaste,\n    onPathFocus,\n    path,\n    readOnly,\n    rangeDecorations: rangeDecorationsProp,\n    renderBlockActions,\n    renderCustomMarkers,\n    renderEditable,\n    schemaType,\n    value,\n    resolveUploader,\n    onUpload,\n  } = props\n\n  const {onBlur, ref: elementRef} = elementProps\n  const defaultEditorRef = useRef<PortableTextEditor | null>(null)\n  const editorRef = editorRefProp || defaultEditorRef\n\n  const presenceCursorDecorations = usePresenceCursorDecorations(\n    useMemo(\n      (): PresenceCursorDecorationsHookProps => ({\n        path: props.path,\n      }),\n      [props.path],\n    ),\n  )\n\n  const {t} = useTranslation()\n  const [ignoreValidationError, setIgnoreValidationError] = useState(false)\n  const [invalidValue, setInvalidValue] = useState<InvalidValue | null>(null)\n  const [isFullscreen, setIsFullscreen] = useState(initialFullscreen ?? false)\n  const [isActive, setIsActive] = useState(initialActive ?? false)\n  const [hasFocusWithin, setHasFocusWithin] = useState(false)\n  const [ready, setReady] = useState(false)\n  const telemetry = useTelemetry()\n\n  const toast = useToast()\n\n  const handleToggleFullscreen = useCallback(() => {\n    setIsFullscreen((v) => {\n      const next = !v\n      if (next) {\n        telemetry.log(PortableTextInputExpanded)\n      } else {\n        telemetry.log(PortableTextInputCollapsed)\n      }\n\n      onFullScreenChange?.(next)\n      return next\n    })\n  }, [onFullScreenChange, telemetry])\n\n  // Reset invalidValue if new value is coming in from props\n  useEffect(() => {\n    if (invalidValue && value !== invalidValue.value) {\n      setInvalidValue(null)\n    }\n  }, [invalidValue, value])\n\n  const portableTextMemberItems = usePortableTextMemberItemsFromProps(props)\n\n  // Set active if focused within the editor\n  useEffect(() => {\n    if (hasFocusWithin) {\n      setIsActive(true)\n    }\n  }, [hasFocusWithin])\n\n  const setFocusPathFromEditorSelection = useCallback(\n    (nextSelection: EditorSelection) => {\n      const focusPath = nextSelection?.focus.path\n      if (!focusPath) return\n\n      // Report focus on spans with `.text` appended to the reported focusPath.\n      // This is done to support the Presentation tool which uses this kind of paths to refer to texts.\n      // The PT-input already supports these paths the other way around.\n      // It's a bit ugly right here, but it's a rather simple way to support the Presentation tool without\n      // having to change the PTE's internals.\n      const isSpanPath =\n        focusPath.length === 3 && // A span path is always 3 segments long\n        focusPath[1] === 'children' && // Is a child of a block\n        isKeySegment(focusPath[2]) && // Contains the key of the child\n        !portableTextMemberItems.some(\n          (item) => isKeySegment(focusPath[2]) && item.member.key === focusPath[2]._key,\n        )\n      const nextFocusPath = isSpanPath ? focusPath.concat(['text']) : focusPath\n\n      // Must called in a transition useTrackFocusPath hook\n      // will try to effectuate a focusPath that is different from what currently is the editor focusPath\n      startTransition(() => {\n        onPathFocus(nextFocusPath, {\n          selection: nextSelection,\n        })\n      })\n    },\n    [onPathFocus, portableTextMemberItems],\n  )\n\n  // Handle editor changes\n  const handleEditorChange = useCallback(\n    (change: EditorChange): void => {\n      switch (change.type) {\n        case 'mutation':\n          onChange(toFormPatches(change.patches))\n          break\n        case 'selection':\n          setFocusPathFromEditorSelection(change.selection)\n          break\n        case 'focus':\n          setIsActive(true)\n          setHasFocusWithin(true)\n          break\n        case 'blur':\n          onBlur(change.event)\n          setHasFocusWithin(false)\n          break\n        case 'invalidValue':\n          setInvalidValue(change)\n          break\n        case 'error':\n          toast.push({\n            status: change.level,\n            description: change.description,\n          })\n          break\n        case 'ready':\n          setReady(true)\n          break\n        default:\n      }\n      if (editorRef.current && onEditorChange) {\n        onEditorChange(change, editorRef.current)\n      }\n    },\n    [editorRef, onEditorChange, onChange, setFocusPathFromEditorSelection, onBlur, toast],\n  )\n\n  useEffect(() => {\n    setIgnoreValidationError(false)\n  }, [value])\n\n  const handleIgnoreInvalidValue = useCallback((): void => {\n    setIgnoreValidationError(true)\n  }, [])\n\n  const respondToInvalidContent = useMemo(() => {\n    if (invalidValue && invalidValue.resolution) {\n      return (\n        <Box marginBottom={2}>\n          <RespondToInvalidContent\n            onChange={handleEditorChange}\n            onIgnore={handleIgnoreInvalidValue}\n            resolution={invalidValue.resolution}\n            readOnly={readOnly}\n          />\n        </Box>\n      )\n    }\n    return null\n  }, [handleEditorChange, handleIgnoreInvalidValue, invalidValue, readOnly])\n\n  const handleActivate = useCallback((): void => {\n    if (!isActive) {\n      setIsActive(true)\n      if (editorRef.current) {\n        PortableTextEditor.focus(editorRef.current)\n      }\n    }\n  }, [editorRef, isActive])\n\n  const previousRangeDecorations = useRef<RangeDecoration[]>([])\n\n  const rangeDecorations = useMemo((): RangeDecoration[] => {\n    const result = [...(rangeDecorationsProp || []), ...presenceCursorDecorations]\n    const reconciled = immutableReconcile(previousRangeDecorations.current, result)\n    previousRangeDecorations.current = reconciled\n    return reconciled\n  }, [presenceCursorDecorations, rangeDecorationsProp])\n\n  const uploadFile = useCallback(\n    (file: File, resolvedUploader: ResolvedUploader) => {\n      const {type, uploader} = resolvedUploader\n      onUpload?.({file, schemaType: type, uploader})\n    },\n    [onUpload],\n  )\n\n  const handleFiles = useCallback(\n    (files: File[]) => {\n      if (!resolveUploader) {\n        return\n      }\n      const tasks: UploadTask[] = files.map((file) => ({\n        file,\n        uploaderCandidates: getUploadCandidates(schemaType.of, resolveUploader, file),\n      }))\n      const readyTasks = tasks.filter((task) => task.uploaderCandidates.length > 0)\n      const rejected: UploadTask[] = tasks.filter((task) => task.uploaderCandidates.length === 0)\n\n      if (rejected.length > 0) {\n        toast.push({\n          closable: true,\n          status: 'warning',\n          title: t('inputs.array.error.cannot-upload-unable-to-convert', {\n            count: rejected.length,\n          }),\n          description: rejected.map((task, i) => (\n            <Flex key={i} gap={2} padding={2}>\n              <Box>\n                <Text weight=\"medium\">{task.file.name}</Text>\n              </Box>\n              <Box>\n                <Text size={1}>({task.file.type})</Text>\n              </Box>\n            </Flex>\n          )),\n        })\n      }\n\n      // todo: consider if we should to ask the user here\n      // the list of candidates is sorted by their priority and the first one is selected\n      readyTasks.forEach((task) => {\n        uploadFile(\n          task.file,\n          // eslint-disable-next-line max-nested-callbacks\n          sortBy(task.uploaderCandidates, (candidate) => candidate.uploader.priority)[0],\n        )\n      })\n    },\n    [toast, resolveUploader, schemaType, uploadFile, t],\n  )\n\n  const handlePaste: OnPasteFn = useCallback(\n    (input) => {\n      const {event} = input\n\n      // Some applications may put both text and files on the clipboard when content is copied.\n      // If we have both text and html on the clipboard, just ignore the files if this is a paste event.\n      // Drop events will most probably be files so skip this test for those.\n      const eventType = event.type === 'paste' ? 'paste' : 'drop'\n      const hasHtml = !!event.clipboardData.getData('text/html')\n      const hasText = !!event.clipboardData.getData('text/plain')\n      if (eventType === 'paste' && hasHtml && hasText) {\n        return onPaste?.(input)\n      }\n\n      extractPastedFiles(event.clipboardData)\n        .then((files) => {\n          return files.length > 0 ? files : []\n        })\n        .then((files) => {\n          handleFiles(files)\n        })\n      return onPaste?.(input)\n    },\n    [handleFiles, onPaste],\n  )\n\n  return (\n    <Box>\n      {!ignoreValidationError && respondToInvalidContent}\n      {(!invalidValue || ignoreValidationError) && (\n        <PortableTextMarkersProvider markers={markers}>\n          <PortableTextMemberItemsProvider memberItems={portableTextMemberItems}>\n            <EditorProvider\n              initialConfig={{\n                initialValue: value,\n                readOnly: readOnly || !ready,\n                keyGenerator,\n                schema: schemaType,\n              }}\n            >\n              <EditorChangePlugin onChange={handleEditorChange} />\n              <EditorRefPlugin ref={editorRef} />\n              <PatchesPlugin path={path} />\n              <UpdateReadOnlyPlugin readOnly={readOnly || !ready} />\n              <UpdateValuePlugin value={value} />\n              <MarkdownPlugin\n                config={{\n                  boldDecorator: ({schema}) =>\n                    schema.decorators.find((decorator) => decorator.value === 'strong')?.value,\n                  codeDecorator: ({schema}) =>\n                    schema.decorators.find((decorator) => decorator.value === 'code')?.value,\n                  italicDecorator: ({schema}) =>\n                    schema.decorators.find((decorator) => decorator.value === 'em')?.value,\n                  strikeThroughDecorator: ({schema}) =>\n                    schema.decorators.find((decorator) => decorator.value === 'strike-through')\n                      ?.value,\n                  defaultStyle: ({schema}) =>\n                    schema.styles.find((style) => style.value === 'normal')?.value,\n                  blockquoteStyle: ({schema}) =>\n                    schema.styles.find((style) => style.value === 'blockquote')?.value,\n                  headingStyle: ({schema, level}) =>\n                    schema.styles.find((style) => style.value === `h${level}`)?.value,\n                  orderedListStyle: ({schema}) =>\n                    schema.lists.find((list) => list.value === 'number')?.value,\n                  unorderedListStyle: ({schema}) =>\n                    schema.lists.find((list) => list.value === 'bullet')?.value,\n                }}\n              />\n              <Compositor\n                {...props}\n                elementRef={elementRef}\n                hasFocusWithin={hasFocusWithin}\n                hotkeys={hotkeys}\n                isActive={isActive}\n                isFullscreen={isFullscreen}\n                onActivate={handleActivate}\n                onItemRemove={onItemRemove}\n                onCopy={onCopy}\n                onInsert={onInsert}\n                onPaste={handlePaste}\n                onToggleFullscreen={handleToggleFullscreen}\n                rangeDecorations={rangeDecorations}\n                readOnly={readOnly || !ready}\n                renderBlockActions={renderBlockActions}\n                renderCustomMarkers={renderCustomMarkers}\n                renderEditable={renderEditable}\n              />\n            </EditorProvider>\n          </PortableTextMemberItemsProvider>\n        </PortableTextMarkersProvider>\n      )}\n    </Box>\n  )\n}\n\n/**\n * Custom PTE plugin that translates `EditorEmittedEvent`s to `EditorChange`s\n */\nfunction EditorChangePlugin(props: {onChange: (change: EditorChange) => void}) {\n  const handleEditorEvent = useCallback(\n    (event: EditorEmittedEvent) => {\n      switch (event.type) {\n        case 'blurred':\n          props.onChange({\n            type: 'blur',\n            event: event.event,\n          })\n          break\n        case 'error':\n          props.onChange({\n            type: 'error',\n            name: event.name,\n            level: 'warning',\n            description: event.description,\n          })\n          break\n        case 'focused':\n          props.onChange({\n            type: 'focus',\n            event: event.event,\n          })\n          break\n        case 'loading':\n          props.onChange({\n            type: 'loading',\n            isLoading: true,\n          })\n          break\n        case 'done loading':\n          props.onChange({\n            type: 'loading',\n            isLoading: false,\n          })\n          break\n        case 'invalid value':\n          props.onChange({\n            type: 'invalidValue',\n            resolution: event.resolution,\n            value: event.value,\n          })\n          break\n        case 'mutation':\n          props.onChange(event)\n          break\n        case 'patch': {\n          props.onChange(event)\n          break\n        }\n        case 'ready':\n          props.onChange(event)\n          break\n        case 'selection': {\n          props.onChange(event)\n          break\n        }\n        case 'value changed':\n          props.onChange({\n            type: 'value',\n            value: event.value,\n          })\n          break\n        default:\n      }\n    },\n    [props],\n  )\n\n  return <EventListenerPlugin on={handleEditorEvent} />\n}\n\n/**\n * Custom PTE plugin that sets up a patch subscription and sends patches to the\n * editor.\n */\nfunction PatchesPlugin(props: {path: Path}) {\n  const editor = useEditor()\n  const {subscribe} = usePatches({path: props.path})\n\n  useEffect(() => {\n    const unsubscribe = subscribe(({patches, snapshot}): void => {\n      editor.send({type: 'patches', patches, snapshot})\n    })\n\n    return () => {\n      return unsubscribe()\n    }\n  }, [editor, subscribe])\n\n  return null\n}\n\n/**\n * `EditorProvider` doesn't have a `value` prop. Instead, this custom PTE\n * plugin listens for the prop change and sends an `update value` event to the\n * editor.\n */\nfunction UpdateValuePlugin(props: {value: Array<PortableTextBlock> | undefined}) {\n  const editor = useEditor()\n\n  useEffect(() => {\n    editor.send({\n      type: 'update value',\n      value: props.value,\n    })\n  }, [editor, props.value])\n\n  return null\n}\n\n/**\n * `EditorProvider` doesn't have a `readOnly` prop. Instead, this custom PTE\n * plugin listens for the prop change and sends a `toggle readOnly` event to\n * the editor.\n */\nfunction UpdateReadOnlyPlugin(props: {readOnly: boolean}) {\n  const editor = useEditor()\n\n  useEffect(() => {\n    editor.send({\n      type: 'update readOnly',\n      readOnly: props.readOnly,\n    })\n  }, [editor, props.readOnly])\n\n  return null\n}\n\nfunction toFormPatches(patches: any) {\n  return patches.map((p: Patch) => ({...p, patchType: SANITY_PATCH_TYPE}))\n}\n","export function focusRingBorderStyle(border: {color: string; width: number}): string {\n  return `inset 0 0 0 ${border.width}px ${border.color}`\n}\n\nexport function focusRingStyle(opts: {\n  base?: {bg: string}\n  border?: {color: string; width: number}\n  focusRing: {offset: number; width: number}\n}): string {\n  const {base, border, focusRing} = opts\n  const focusRingOutsetWidth = focusRing.offset + focusRing.width\n  const focusRingInsetWidth = 0 - focusRing.offset\n  const bgColor = base ? base.bg : 'var(--card-bg-color)'\n\n  return [\n    focusRingInsetWidth > 0 && `inset 0 0 0 ${focusRingInsetWidth}px var(--card-focus-ring-color)`,\n    border && focusRingBorderStyle(border),\n    focusRingInsetWidth < 0 && `0 0 0 ${0 - focusRingInsetWidth}px ${bgColor}`,\n    focusRingOutsetWidth > 0 && `0 0 0 ${focusRingOutsetWidth}px var(--card-focus-ring-color)`,\n  ]\n    .filter(Boolean)\n    .join(',')\n}\n","import {CloseIcon} from '@sanity/icons'\nimport {Box, Card, Flex, isHTMLElement, rem, Text, type Theme} from '@sanity/ui'\nimport {\n  type ChangeEvent,\n  type FocusEvent,\n  forwardRef,\n  type HTMLProps,\n  type KeyboardEvent,\n  type PointerEvent,\n  useCallback,\n  useEffect,\n  useImperativeHandle,\n  useRef,\n  useState,\n} from 'react'\nimport {css, type CSSObject, styled} from 'styled-components'\n\nimport {Button} from '../../../../ui-components'\nimport {useTranslation} from '../../../i18n'\nimport {studioLocaleNamespace} from '../../../i18n/localeNamespaces'\nimport {focusRingBorderStyle, focusRingStyle} from './styles'\n\nconst Root = styled(Card)((props: {theme: Theme}): CSSObject => {\n  const {theme} = props\n  const {focusRing, input, radius} = theme.sanity\n  const color = theme.sanity.color.input\n  const space = rem(theme.sanity.space[1])\n\n  return {\n    'position': 'relative',\n    'borderRadius': `${radius[1]}px`,\n    'color': color.default.enabled.fg,\n    'boxShadow': focusRingBorderStyle({\n      color: color.default.enabled.border,\n      width: input.border.width,\n    }),\n\n    '& > .content': {\n      position: 'relative',\n      lineHeight: 0,\n      margin: `-${space} 0 0 -${space}`,\n    },\n\n    '& > .content > div': {\n      display: 'inline-block',\n      verticalAlign: 'top',\n      padding: `${space} 0 0 ${space}`,\n    },\n\n    // enabled\n    '&:not([data-read-only])': {\n      cursor: 'text',\n    },\n\n    // hovered\n    '@media(hover:hover):not([data-disabled]):not([data-read-only]):hover': {\n      borderColor: color.default.hovered.border,\n    },\n\n    // focused\n    '&:not([data-disabled]):not([data-read-only])[data-focused]': {\n      boxShadow: focusRingStyle({\n        border: {\n          color: color.default.enabled.border,\n          width: input.border.width,\n        },\n        focusRing,\n      }),\n    },\n\n    // disabled\n    '*:disabled + &': {\n      color: color.default.disabled.fg,\n      backgroundColor: color.default.disabled.bg,\n      boxShadow: focusRingBorderStyle({\n        color: color.default.disabled.border,\n        width: input.border.width,\n      }),\n    },\n  }\n})\n\nconst Input = styled.input((props: {theme: Theme}): CSSObject => {\n  const {theme} = props\n  const font = theme.sanity.fonts.text\n  const color = theme.sanity.color.input\n  const p = theme.sanity.space[2]\n  const size = theme.sanity.fonts.text.sizes[2]\n\n  return {\n    'appearance': 'none',\n    'background': 'none',\n    'border': 0,\n    'borderRadius': 0,\n    'outline': 'none',\n    'fontSize': rem(size.fontSize),\n    'lineHeight': size.lineHeight / size.fontSize,\n    'fontFamily': font.family,\n    'fontWeight': font.weights.regular,\n    'margin': 0,\n    'display': 'block',\n    'minWidth': '1px',\n    'maxWidth': '100%',\n    'boxSizing': 'border-box',\n    'paddingTop': rem(p - size.ascenderHeight),\n    'paddingRight': rem(p),\n    'paddingBottom': rem(p - size.descenderHeight),\n    'paddingLeft': rem(p),\n\n    // enabled\n    '&:not(:invalid):not(:disabled)': {\n      color: color.default.enabled.fg,\n    },\n\n    // disabled\n    '&:not(:invalid):disabled': {\n      color: color.default.disabled.fg,\n    },\n  }\n})\n\nconst Placeholder = styled(Box)((props: {theme: Theme}) => {\n  const {theme} = props\n  const color = theme.sanity.color.input\n\n  return css`\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    pointer-events: none;\n    --card-fg-color: ${color.default.enabled.placeholder};\n  `\n})\n\nconst TagBox = styled(Box)`\n  // This is needed to make textOverflow=\"ellipsis\" work properly for the Text primitive\n  max-width: 100%;\n`\n\nexport const TagInput = forwardRef(\n  (\n    props: {\n      readOnly?: boolean\n      onChange?: (newValue: {value: string}[]) => void\n      onFocus?: (event: FocusEvent) => void\n      placeholder?: string\n      value?: {value: string}[]\n    } & Omit<HTMLProps<HTMLInputElement>, 'as' | 'onChange' | 'onFocus' | 'ref' | 'value'>,\n    forwardedRef: React.ForwardedRef<HTMLInputElement>,\n  ) => {\n    const {\n      disabled,\n      onChange,\n      onFocus,\n      placeholder: placeholderProp,\n      readOnly,\n      value = [],\n      ...restProps\n    } = props\n\n    const {t} = useTranslation(studioLocaleNamespace)\n    const [inputValue, setInputValue] = useState('')\n    const enabled = !disabled && !readOnly\n    const [focused, setFocused] = useState(false)\n    const ref = useRef<HTMLInputElement | null>(null)\n    const rootRef = useRef<HTMLDivElement | null>(null)\n\n    useImperativeHandle<HTMLInputElement | null, HTMLInputElement | null>(\n      forwardedRef,\n      () => ref.current,\n    )\n\n    const handleRootPointerDown = useCallback((event: PointerEvent<HTMLDivElement>) => {\n      const isTagElement = isHTMLElement(event.target) && event.target.closest('[data-ui=\"Tag\"]')\n\n      if (isTagElement) return\n\n      const inputElement = ref.current\n\n      if (inputElement) {\n        setTimeout(() => inputElement.focus(), 0)\n      }\n    }, [])\n\n    const handleInputBlur = useCallback(() => {\n      setFocused(false)\n    }, [])\n\n    const handleInputChange = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n      setInputValue(event.currentTarget.value)\n    }, [])\n\n    const handleInputFocus = useCallback(\n      (event: FocusEvent) => {\n        setFocused(true)\n        if (onFocus) onFocus(event)\n      },\n      [onFocus],\n    )\n\n    const handleInputKeyDown = useCallback(\n      (event: KeyboardEvent<HTMLInputElement>) => {\n        if (event.key === 'Enter') {\n          event.preventDefault()\n          event.stopPropagation()\n\n          if (onChange && inputValue) {\n            const newValue = value.concat([{value: inputValue}])\n\n            setInputValue('')\n\n            if (onChange) onChange(newValue)\n          }\n        }\n      },\n      [inputValue, onChange, value],\n    )\n\n    const handleTagRemove = useCallback(\n      (index: number) => {\n        if (!onChange) return\n\n        const newValue = value.slice(0)\n\n        newValue.splice(index, 1)\n\n        onChange(newValue)\n      },\n      [onChange, value],\n    )\n\n    useEffect(() => {\n      const inputElement = ref.current\n\n      if (inputElement) {\n        inputElement.style.width = '0'\n        inputElement.style.width = `${inputElement.scrollWidth}px`\n      }\n    }, [inputValue])\n\n    return (\n      <Root\n        data-disabled={disabled ? '' : undefined}\n        data-focused={focused ? '' : undefined}\n        data-read-only={readOnly ? '' : undefined}\n        data-ui=\"TagInput\"\n        onPointerDown={handleRootPointerDown}\n        overflow=\"auto\"\n        padding={1}\n        ref={rootRef}\n      >\n        {enabled && (\n          <Placeholder hidden={Boolean(inputValue || value.length)} padding={3}>\n            <Text textOverflow=\"ellipsis\">\n              {placeholderProp\n                ? placeholderProp\n                : t('inputs.tags.placeholder', {\n                    context:\n                      typeof window !== 'undefined' && 'ontouchstart' in window\n                        ? 'touch'\n                        : undefined,\n                  })}\n            </Text>\n          </Placeholder>\n        )}\n\n        <div className=\"content\">\n          {value.map((tag, tagIndex) => (\n            // eslint-disable-next-line react/no-array-index-key\n            <TagBox key={`tag-${tagIndex}`}>\n              <Tag\n                enabled={enabled}\n                index={tagIndex}\n                muted={!enabled}\n                onRemove={handleTagRemove}\n                tag={tag}\n              />\n            </TagBox>\n          ))}\n\n          <div key=\"tag-input\">\n            <Input\n              {...restProps}\n              disabled={!enabled}\n              onBlur={handleInputBlur}\n              onChange={handleInputChange}\n              onFocus={handleInputFocus}\n              onKeyDown={handleInputKeyDown}\n              ref={ref}\n              type=\"text\"\n              value={inputValue}\n            />\n          </div>\n        </div>\n      </Root>\n    )\n  },\n)\n\nTagInput.displayName = 'ForwardRef(TagInput)'\n\nfunction Tag(props: {\n  enabled: boolean\n  index: number\n  muted?: boolean\n  onRemove: (index: number) => void\n  tag: {value: string}\n}) {\n  const {enabled, index, muted, onRemove, tag} = props\n\n  const handleRemoveClick = useCallback(() => {\n    onRemove(index)\n  }, [index, onRemove])\n\n  return (\n    <Card data-ui=\"Tag\" radius={2} tone=\"transparent\">\n      <Flex align=\"center\" gap={1}>\n        <Box flex={1} paddingY={2} paddingLeft={2}>\n          <Text muted={muted} textOverflow=\"ellipsis\">\n            {tag.value}\n          </Text>\n        </Box>\n        {enabled && (\n          <Button\n            icon={CloseIcon}\n            mode=\"bleed\"\n            onClick={handleRemoveClick}\n            tooltipProps={{content: 'Remove'}}\n          />\n        )}\n      </Flex>\n    </Card>\n  )\n}\n","import {useCallback, useMemo} from 'react'\n\nimport {ChangeIndicator} from '../../changeIndicators'\nimport {TagInput} from '../components/tagInput'\nimport {set, unset} from '../patch'\nimport {type ArrayOfPrimitivesInputProps} from '../types'\n\n/**\n *\n * @hidden\n * @beta\n */\nexport type TagsArrayInputProps = ArrayOfPrimitivesInputProps<string>\n\n/**\n *\n * @hidden\n * @beta\n */\nexport function TagsArrayInput(props: TagsArrayInputProps) {\n  const {onChange, readOnly, value = [], elementProps, path, changed} = props\n  const tagInputValue = useMemo(() => value?.map((v) => ({value: v})), [value])\n\n  const handleChange = useCallback(\n    (nextValue: {value: string}[]) => {\n      onChange(nextValue.length === 0 ? unset() : set(nextValue.map((v) => v.value)))\n    },\n    [onChange],\n  )\n\n  return (\n    <ChangeIndicator path={path} isChanged={changed} hasFocus={false}>\n      <TagInput\n        onChange={handleChange}\n        readOnly={readOnly}\n        value={tagInputValue}\n        {...elementProps}\n      />\n    </ChangeIndicator>\n  )\n}\n","import {type ArraySchemaType} from '@sanity/types'\nimport {type ComponentType} from 'react'\n\nimport {ArrayOfObjectsInput} from '../../inputs/arrays/ArrayOfObjectsInput'\nimport {ArrayOfOptionsInput} from '../../inputs/arrays/ArrayOfOptionsInput'\nimport {ArrayOfPrimitivesInput} from '../../inputs/arrays/ArrayOfPrimitivesInput'\nimport {PortableTextInput} from '../../inputs/PortableText/PortableTextInput'\nimport {TagsArrayInput} from '../../inputs/TagsArrayInput'\nimport * as is from '../../utils/is'\n\nconst PRIMITIVES = ['string', 'number', 'boolean']\n\nexport function isArrayOfPrimitives(type: ArraySchemaType): boolean {\n  return type.of.every((ofType) => PRIMITIVES.includes(ofType.jsonType))\n}\n\nfunction isStringArray(type: ArraySchemaType): type is ArraySchemaType<string> {\n  return type.of.length === 1 && is.type('string', type.of[0])\n}\n\nfunction isTagsArray(type: ArraySchemaType<string>): boolean {\n  return type.options?.layout === 'tags'\n}\n\nfunction isPortableText(type: ArraySchemaType): boolean {\n  // TODO: better testing here, not only for type 'block' !\n  return type.of.some((memberType) => is.type('block', memberType))\n}\n\nfunction hasListOptions(type: ArraySchemaType): boolean {\n  return Boolean(type.options?.list)\n}\n\nexport function resolveArrayInput(type: ArraySchemaType): ComponentType<any> {\n  if (isStringArray(type) && isTagsArray(type)) {\n    return TagsArrayInput\n  }\n\n  // Schema provides predefines list\n  if (hasListOptions(type)) {\n    return ArrayOfOptionsInput\n  }\n\n  // Special component for array of primitive values\n  if (isArrayOfPrimitives(type)) {\n    return ArrayOfPrimitivesInput\n  }\n\n  // Use Portable Text editor if portable text.\n  if (isPortableText(type)) {\n    return PortableTextInput\n  }\n\n  return ArrayOfObjectsInput\n}\n","import {isTitledListValue, type TitledListValue} from '@sanity/types'\nimport {Box, Card, Flex, Inline, Radio, Select, Stack, Text} from '@sanity/ui'\nimport {capitalize} from 'lodash'\nimport {\n  type ChangeEvent,\n  type FocusEvent,\n  type ForwardedRef,\n  forwardRef,\n  useCallback,\n  useId,\n  useMemo,\n} from 'react'\n\nimport {ChangeIndicator} from '../../changeIndicators'\nimport {PatchEvent, set, unset} from '../patch'\nimport {type StringInputProps} from '../types'\n\nfunction toSelectItem(\n  option: TitledListValue<string | number> | string | number,\n): TitledListValue<string | number> {\n  return isTitledListValue(option) ? option : {title: capitalize(`${option}`), value: option}\n}\n\nconst EMPTY_ITEM = {title: '', value: undefined}\n\n/**\n *\n * @hidden\n * @beta\n */\nexport function SelectInput(props: StringInputProps) {\n  const {\n    value,\n    readOnly,\n    validationError,\n    schemaType,\n    onChange,\n    path,\n    changed,\n    focused,\n    elementProps,\n  } = props\n  const items = useMemo(\n    () => (schemaType.options?.list || []).map(toSelectItem),\n    [schemaType.options?.list],\n  )\n  const currentItem = items.find((item) => item.value === value)\n  const isRadio = schemaType.options && schemaType.options.layout === 'radio'\n\n  const itemFromOptionValue = useCallback(\n    (optionValue: any) => {\n      const index = Number(optionValue)\n\n      return items[index]\n    },\n    [items],\n  )\n\n  const optionValueFromItem = useCallback(\n    (item: any) => {\n      return String(items.indexOf(item))\n    },\n    [items],\n  )\n\n  const inputId = useId()\n\n  const handleChange = useCallback(\n    (nextItem: TitledListValue<string | number> | null) => {\n      onChange(\n        PatchEvent.from(typeof nextItem?.value === 'undefined' ? unset() : set(nextItem.value)),\n      )\n    },\n    [onChange],\n  )\n\n  const handleSelectChange = useCallback(\n    (event: ChangeEvent<HTMLSelectElement>) => {\n      const nextItem = itemFromOptionValue(event.currentTarget.value)\n\n      if (!nextItem) {\n        handleChange(EMPTY_ITEM)\n        return\n      }\n\n      handleChange(nextItem)\n    },\n    [handleChange, itemFromOptionValue],\n  )\n\n  const content = isRadio ? (\n    <RadioSelect\n      {...elementProps}\n      value={currentItem}\n      inputId={inputId}\n      items={items}\n      direction={schemaType.options?.direction || 'vertical'}\n      customValidity={validationError}\n      onChange={handleChange}\n      readOnly={readOnly}\n    />\n  ) : (\n    <Select\n      {...elementProps}\n      customValidity={validationError}\n      value={optionValueFromItem(currentItem)}\n      readOnly={readOnly}\n      onChange={handleSelectChange}\n    >\n      {[EMPTY_ITEM, ...items].map((item, i) => (\n        <option key={`${i - 1}`} value={i - 1}>\n          {item.title}\n        </option>\n      ))}\n    </Select>\n  )\n  return (\n    <ChangeIndicator path={path} isChanged={changed} hasFocus={!!focused}>\n      {content}\n    </ChangeIndicator>\n  )\n}\n\nconst RadioSelect = forwardRef(function RadioSelect(\n  props: {\n    items: TitledListValue<string | number>[]\n    value?: TitledListValue<string | number>\n    direction: 'horizontal' | 'vertical'\n    readOnly?: boolean\n    onChange: (value: TitledListValue<string | number> | null) => void\n    onFocus: (event: FocusEvent<HTMLElement>) => void\n    customValidity?: string\n    inputId?: string\n  },\n\n  ref: ForwardedRef<HTMLInputElement>,\n) {\n  const {items, value, onChange, onFocus, readOnly, customValidity, direction, inputId} = props\n\n  const Layout = direction === 'horizontal' ? Inline : Stack\n  return (\n    <Card border padding={3} radius={2}>\n      <Layout space={3} role=\"group\">\n        {items.map((item, index) => (\n          <RadioSelectItem\n            customValidity={customValidity}\n            inputId={inputId}\n            item={item}\n            key={index}\n            onChange={onChange}\n            onFocus={onFocus}\n            readOnly={readOnly}\n            ref={index === 0 ? ref : null}\n            value={value}\n          />\n        ))}\n      </Layout>\n    </Card>\n  )\n})\n\nconst RadioSelectItem = forwardRef(function RadioSelectItem(\n  props: {\n    customValidity?: string\n    inputId?: string\n    item: TitledListValue<string | number>\n    onChange: (value: TitledListValue<string | number> | null) => void\n    onFocus: (event: FocusEvent<HTMLElement>) => void\n    readOnly?: boolean\n    value?: TitledListValue<string | number>\n  },\n\n  ref: ForwardedRef<HTMLInputElement>,\n) {\n  const {customValidity, inputId, item, onChange, onFocus, readOnly, value} = props\n\n  const handleChange = useCallback(() => {\n    onChange(item)\n  }, [item, onChange])\n\n  return (\n    <Flex as=\"label\" align=\"center\">\n      <Radio\n        ref={ref}\n        checked={value === item}\n        onChange={handleChange}\n        onFocus={onFocus}\n        readOnly={readOnly}\n        customValidity={customValidity}\n        name={inputId}\n      />\n\n      <Box marginLeft={2}>\n        <Text size={1} weight=\"medium\">\n          {item.title}\n        </Text>\n      </Box>\n    </Flex>\n  )\n})\n","import {type NumberSchemaType} from '@sanity/types'\n\nimport {NumberInput} from '../../inputs/NumberInput'\nimport {SelectInput} from '../../inputs/SelectInput'\nimport {getOption} from './helpers'\n\nexport function resolveNumberInput(type: NumberSchemaType) {\n  return getOption(type, 'list') ? SelectInput : NumberInput\n}\n","import {type StringSchemaType} from '@sanity/types'\n\nimport {SelectInput} from '../../inputs/SelectInput'\nimport {StringInput} from '../../inputs/StringInput'\nimport {getOption} from './helpers'\n\nexport function resolveStringInput(type: StringSchemaType) {\n  return getOption(type, 'list') ? SelectInput : StringInput\n}\n","/* eslint-disable react/jsx-handler-names */\nimport {\n  type ArraySchemaType,\n  type NumberSchemaType,\n  type SchemaType,\n  type StringSchemaType,\n} from '@sanity/types'\nimport {type ComponentType} from 'react'\n\nimport {type PreviewProps} from '../../../components'\nimport {type FIXME} from '../../../FIXME'\nimport {SanityDefaultPreview} from '../../../preview'\nimport {type InputProps} from '../../types'\nimport * as is from '../../utils/is'\nimport {StudioReferenceInput} from '../inputs/reference/StudioReferenceInput'\nimport {defaultInputs} from './defaultInputs'\nimport {getTypeChain} from './helpers'\nimport {resolveArrayInput} from './resolveArrayInput'\nimport {resolveNumberInput} from './resolveNumberInput'\nimport {resolveStringInput} from './resolveStringInput'\n\nfunction resolveComponentFromTypeVariants(type: SchemaType): ComponentType<FIXME> | undefined {\n  if (is.type('array', type)) {\n    return resolveArrayInput(type as ArraySchemaType)\n  }\n\n  if (is.type('reference', type)) {\n    return StudioReferenceInput\n  }\n\n  // String input with a select\n  if (is.type('string', type)) {\n    return resolveStringInput(type as StringSchemaType)\n  }\n\n  if (is.type('number', type)) {\n    return resolveNumberInput(type as NumberSchemaType)\n  }\n\n  return undefined\n}\n\nexport function defaultResolveInputComponent(\n  schemaType: SchemaType,\n): ComponentType<Omit<InputProps, 'renderDefault'>> {\n  if (schemaType.components?.input) return schemaType.components.input\n\n  const componentFromTypeVariants = resolveComponentFromTypeVariants(schemaType)\n  if (componentFromTypeVariants) {\n    return componentFromTypeVariants\n  }\n\n  const typeChain = getTypeChain(schemaType, new Set())\n  const deduped = typeChain.reduce(\n    (acc, type) => {\n      acc[type.name] = type\n      return acc\n    },\n    {} as Record<string, SchemaType>,\n  )\n\n  // using an object + Object.values to de-dupe the type chain by type name\n  const subType = Object.values(deduped).find((t) => defaultInputs[t.name])\n\n  if (subType) {\n    return defaultInputs[subType.name]\n  }\n\n  throw new Error(`Could not find input component for schema type \\`${schemaType.name}\\``)\n}\n\nexport function defaultResolvePreviewComponent(\n  schemaType: SchemaType,\n): ComponentType<Omit<PreviewProps, 'renderDefault'>> {\n  if (schemaType.components?.preview) return schemaType.components.preview\n\n  return SanityDefaultPreview\n}\n","/* eslint-disable no-nested-ternary, react/jsx-no-bind */\nimport {AddDocumentIcon, CopyIcon, TrashIcon} from '@sanity/icons'\nimport {type SchemaType} from '@sanity/types'\nimport {Box, Card, type CardTone, Menu} from '@sanity/ui'\nimport {useCallback, useImperativeHandle, useMemo, useRef, useState} from 'react'\n\nimport {MenuButton, MenuItem} from '../../../../../../ui-components'\nimport {ChangeIndicator} from '../../../../../changeIndicators'\nimport {ContextMenuButton} from '../../../../../components/contextMenuButton'\nimport {LoadingBlock} from '../../../../../components/loadingBlock'\nimport {useTranslation} from '../../../../../i18n'\nimport {FieldPresence} from '../../../../../presence'\nimport {getSchemaTypeTitle} from '../../../../../schema'\nimport {FormFieldValidationStatus} from '../../../../components'\nimport {EditPortal} from '../../../../components/EditPortal'\nimport {useDidUpdate} from '../../../../hooks/useDidUpdate'\nimport {useScrollIntoViewOnFocusWithin} from '../../../../hooks/useScrollIntoViewOnFocusWithin'\nimport {useChildPresence} from '../../../../studio/contexts/Presence'\nimport {useChildValidation} from '../../../../studio/contexts/Validation'\nimport {TreeEditingEnabledProvider, useTreeEditingEnabled} from '../../../../studio/tree-editing'\nimport {type ObjectItem, type ObjectItemProps} from '../../../../types'\nimport {randomKey} from '../../../../utils/randomKey'\nimport {RowLayout} from '../../layouts/RowLayout'\nimport {createProtoArrayValue} from '../createProtoArrayValue'\nimport {useInsertMenuMenuItems} from '../InsertMenuMenuItems'\n\ntype PreviewItemProps<Item extends ObjectItem> = Omit<ObjectItemProps<Item>, 'renderDefault'>\n\nfunction getTone({\n  readOnly,\n  hasErrors,\n  hasWarnings,\n}: {\n  readOnly: boolean | undefined\n  hasErrors: boolean\n  hasWarnings: boolean\n}): CardTone {\n  if (readOnly) {\n    return 'transparent'\n  }\n  if (hasErrors) {\n    return 'critical'\n  }\n  return hasWarnings ? 'caution' : 'default'\n}\nconst MENU_POPOVER_PROPS = {portal: true, tone: 'default'} as const\n\nconst BUTTON_CARD_STYLE = {position: 'relative'} as const\nconst EMPTY_ARRAY: never[] = []\nexport function PreviewItem<Item extends ObjectItem = ObjectItem>(props: PreviewItemProps<Item>) {\n  const {\n    schemaType,\n    parentSchemaType,\n    path,\n    readOnly,\n    onRemove,\n    value,\n    open,\n    onInsert,\n    onCopy,\n    onFocus,\n    onOpen,\n    onClose,\n    changed,\n    focused,\n    children,\n    inputProps: {renderPreview},\n  } = props\n  const {t} = useTranslation()\n\n  const treeEditing = useTreeEditingEnabled()\n  const treeEditingDisabledByOption = parentSchemaType?.options?.treeEditing === false\n  const legacyEditing = treeEditingDisabledByOption || treeEditing.legacyEditing\n\n  // The edit portal should open if the item is open and:\n  // - tree array editing is disabled\n  // - legacy array editing is enabled (e.g. in a Portable Text editor)\n  const openPortal = open && (!treeEditing.enabled || legacyEditing)\n\n  const sortable = parentSchemaType.options?.sortable !== false\n  const insertableTypes = parentSchemaType.of\n\n  const [previewCardElement, setPreviewCardElement] = useState<HTMLDivElement | null>(null)\n  const previewCardRef = useRef<HTMLDivElement | null>(null)\n  useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(\n    previewCardRef,\n    () => previewCardElement,\n    [previewCardElement],\n  )\n\n  // this is here to make sure the item is visible if it's being edited behind a modal\n  useScrollIntoViewOnFocusWithin(previewCardRef, open)\n\n  useDidUpdate(focused, (hadFocus, hasFocus) => {\n    if (!hadFocus && hasFocus && previewCardRef.current) {\n      // Note: if editing an inline item, focus is handled by the item input itself and no ref is being set\n      previewCardRef.current?.focus()\n    }\n  })\n\n  const resolvingInitialValue = (value as any)._resolvingInitialValue\n\n  const handleDuplicate = useCallback(() => {\n    onInsert({\n      items: [{...value, _key: randomKey()}],\n      position: 'after',\n    })\n  }, [onInsert, value])\n\n  const handleCopy = useCallback(() => {\n    onCopy({\n      items: [{...value, _key: randomKey()}],\n    })\n  }, [onCopy, value])\n\n  const handleInsert = useCallback(\n    (pos: 'before' | 'after', insertType: SchemaType) => {\n      onInsert({\n        items: [createProtoArrayValue(insertType)],\n        position: pos,\n      })\n    },\n    [onInsert],\n  )\n\n  const childPresence = useChildPresence(path, true)\n  const presence = useMemo(() => {\n    return childPresence.length === 0 ? null : (\n      <FieldPresence presence={childPresence} maxAvatars={1} />\n    )\n  }, [childPresence])\n\n  const childValidation = useChildValidation(path, true)\n  const validation = useMemo(() => {\n    return childValidation.length === 0 ? null : (\n      <Box paddingX={1} paddingY={3}>\n        <FormFieldValidationStatus validation={childValidation} __unstable_showSummary />\n      </Box>\n    )\n  }, [childValidation])\n\n  const hasErrors = childValidation.some((v) => v.level === 'error')\n  const hasWarnings = childValidation.some((v) => v.level === 'warning')\n  const [contextMenuButtonElement, setContextMenuButtonElement] =\n    useState<HTMLButtonElement | null>(null)\n  const {insertBefore, insertAfter} = useInsertMenuMenuItems({\n    schemaTypes: insertableTypes,\n    insertMenuOptions: parentSchemaType.options?.insertMenu,\n    onInsert: handleInsert,\n    referenceElement: contextMenuButtonElement,\n  })\n\n  const disableActions = parentSchemaType.options?.disableActions || EMPTY_ARRAY\n\n  const menuItems = useMemo(() => {\n    return [\n      !disableActions.includes('remove') && (\n        <MenuItem\n          key=\"remove\"\n          text={t('inputs.array.action.remove')}\n          tone=\"critical\"\n          icon={TrashIcon}\n          onClick={onRemove}\n        />\n      ),\n      !disableActions.includes('copy') && (\n        <MenuItem\n          key=\"copy\"\n          text={t('inputs.array.action.copy')}\n          icon={CopyIcon}\n          onClick={handleCopy}\n        />\n      ),\n      !disableActions.includes('duplicate') && (\n        <MenuItem\n          key=\"duplicate\"\n          text={t('inputs.array.action.duplicate')}\n          icon={AddDocumentIcon}\n          onClick={handleDuplicate}\n        />\n      ),\n      !disableActions.includes('add') &&\n        !disableActions.includes('addBefore') &&\n        insertBefore.menuItem,\n      !disableActions.includes('add') &&\n        !disableActions.includes('addAfter') &&\n        insertAfter.menuItem,\n    ].filter(Boolean)\n  }, [\n    disableActions,\n    handleCopy,\n    handleDuplicate,\n    insertAfter.menuItem,\n    insertBefore.menuItem,\n    onRemove,\n    t,\n  ])\n\n  const menu = useMemo(\n    () =>\n      readOnly || menuItems.length === 0 ? null : (\n        <>\n          <MenuButton\n            ref={setContextMenuButtonElement}\n            onOpen={() => {\n              insertBefore.send({type: 'close'})\n              insertAfter.send({type: 'close'})\n            }}\n            button={\n              <ContextMenuButton\n                data-testid=\"array-item-menu-button\"\n                selected={insertBefore.state.open || insertAfter.state.open ? true : undefined}\n              />\n            }\n            id={`${props.inputId}-menuButton`}\n            menu={<Menu>{menuItems}</Menu>}\n            popover={MENU_POPOVER_PROPS}\n          />\n          {insertBefore.popover}\n          {insertAfter.popover}\n        </>\n      ),\n    [menuItems, readOnly, insertBefore, insertAfter, props.inputId],\n  )\n\n  const tone = getTone({readOnly, hasErrors, hasWarnings})\n  const item = (\n    <RowLayout\n      menu={menu}\n      presence={presence}\n      validation={validation}\n      tone={tone}\n      focused={focused}\n      dragHandle={sortable}\n      selected={open}\n      readOnly={!!readOnly}\n    >\n      <Card\n        as=\"button\"\n        type=\"button\"\n        tone=\"inherit\"\n        radius={1}\n        disabled={resolvingInitialValue}\n        onClick={onOpen}\n        ref={setPreviewCardElement}\n        onFocus={onFocus}\n        __unstable_focusRing\n        style={BUTTON_CARD_STYLE}\n      >\n        {renderPreview({\n          schemaType: props.schemaType,\n          value: props.value,\n          layout: 'default',\n          // Don't do visibility check for virtualized items as the calculation will be incorrect causing it to scroll\n          skipVisibilityCheck: true,\n        })}\n\n        {resolvingInitialValue && <LoadingBlock fill />}\n      </Card>\n    </RowLayout>\n  )\n\n  const itemTypeTitle = getSchemaTypeTitle(schemaType)\n\n  return (\n    <TreeEditingEnabledProvider legacyEditing={treeEditingDisabledByOption}>\n      <ChangeIndicator path={path} isChanged={changed} hasFocus={Boolean(focused)}>\n        <Box paddingX={1}>{item}</Box>\n      </ChangeIndicator>\n\n      {openPortal && (\n        <EditPortal\n          header={\n            readOnly\n              ? t('inputs.array.action.view', {itemTypeTitle})\n              : t('inputs.array.action.edit', {itemTypeTitle})\n          }\n          type={parentSchemaType?.options?.modal?.type || 'dialog'}\n          width={parentSchemaType?.options?.modal?.width ?? 1}\n          id={value._key}\n          onClose={onClose}\n          autofocus={focused}\n          legacy_referenceElement={previewCardElement}\n        >\n          {children}\n        </EditPortal>\n      )}\n    </TreeEditingEnabledProvider>\n  )\n}\n","import {type ReactNode, useMemo} from 'react'\nimport {type ReferenceItemRef, ReferenceItemRefContext} from 'sanity/_singletons'\n\n/**\n * @internal\n */\ninterface ReferenceItemRefProviderProps extends ReferenceItemRef {\n  children: ReactNode\n}\n\n/**\n *\n * @internal\n */\nexport function ReferenceItemRefProvider(props: ReferenceItemRefProviderProps) {\n  const {menuRef, menuButtonRef, containerRef} = props\n  const value = useMemo(\n    () => ({menuRef, menuButtonRef, containerRef}),\n    [containerRef, menuButtonRef, menuRef],\n  )\n\n  return (\n    <ReferenceItemRefContext.Provider value={value}>\n      {props.children}\n    </ReferenceItemRefContext.Provider>\n  )\n}\n","import {\n  AddDocumentIcon,\n  CloseIcon,\n  CopyIcon,\n  LaunchIcon as OpenInNewTabIcon,\n  SyncIcon as ReplaceIcon,\n  TrashIcon,\n} from '@sanity/icons'\nimport {type Reference, type ReferenceSchemaType, type SchemaType} from '@sanity/types'\nimport {Box, type CardTone, Menu, MenuDivider} from '@sanity/ui'\nimport {\n  type ComponentProps,\n  type ForwardedRef,\n  forwardRef,\n  useCallback,\n  useMemo,\n  useRef,\n  useState,\n} from 'react'\nimport {IntentLink} from 'sanity/router'\n\nimport {MenuButton, MenuItem} from '../../../../ui-components'\nimport {ChangeIndicator} from '../../../changeIndicators'\nimport {ContextMenuButton} from '../../../components/contextMenuButton'\nimport {LoadingBlock} from '../../../components/loadingBlock'\nimport {useTranslation} from '../../../i18n'\nimport {FieldPresence} from '../../../presence'\nimport {EMPTY_ARRAY} from '../../../util/empty'\nimport {FormFieldSet, FormFieldValidationStatus} from '../../components/formField'\nimport {useDidUpdate} from '../../hooks/useDidUpdate'\nimport {useScrollIntoViewOnFocusWithin} from '../../hooks/useScrollIntoViewOnFocusWithin'\nimport {set, unset} from '../../patch'\nimport {type ObjectItem, type ObjectItemProps} from '../../types'\nimport {randomKey} from '../../utils/randomKey'\nimport {createProtoArrayValue} from '../arrays/ArrayOfObjectsInput/createProtoArrayValue'\nimport {useInsertMenuMenuItems} from '../arrays/ArrayOfObjectsInput/InsertMenuMenuItems'\nimport {RowLayout} from '../arrays/layouts/RowLayout'\nimport {PreviewReferenceValue} from './PreviewReferenceValue'\nimport {ReferenceFinalizeAlertStrip} from './ReferenceFinalizeAlertStrip'\nimport {ReferenceItemRefProvider} from './ReferenceItemRefProvider'\nimport {ReferenceLinkCard} from './ReferenceLinkCard'\nimport {ReferenceMetadataLoadErrorAlertStrip} from './ReferenceMetadataLoadFailure'\nimport {ReferenceStrengthMismatchAlertStrip} from './ReferenceStrengthMismatchAlertStrip'\nimport {useReferenceInfo} from './useReferenceInfo'\nimport {useReferenceInput} from './useReferenceInput'\n\nexport interface ReferenceItemValue extends Omit<ObjectItem, '_type'>, Omit<Reference, '_key'> {}\n\ninterface ReferenceItemProps<Item extends ReferenceItemValue>\n  extends Omit<ObjectItemProps<ReferenceItemValue>, 'renderDefault'> {\n  value: Item\n  schemaType: ReferenceSchemaType\n}\n\nfunction getTone({\n  readOnly,\n  hasErrors,\n  hasWarnings,\n}: {\n  readOnly: boolean | undefined\n  hasErrors: boolean\n  hasWarnings: boolean\n}): CardTone {\n  if (readOnly) {\n    return 'transparent'\n  }\n  if (hasErrors) {\n    return 'critical'\n  }\n  return hasWarnings ? 'caution' : 'default'\n}\nconst MENU_POPOVER_PROPS = {portal: true, tone: 'default'} as const\n\nexport function ReferenceItem<Item extends ReferenceItemValue = ReferenceItemValue>(\n  props: ReferenceItemProps<Item>,\n) {\n  const {\n    schemaType,\n    parentSchemaType,\n    path,\n    readOnly,\n    onRemove,\n    value,\n    open,\n    onInsert,\n    onCopy,\n    presence,\n    validation,\n    inputId,\n    changed,\n    focused,\n    children,\n    inputProps: {onChange, focusPath, onPathFocus, renderPreview, elementProps},\n  } = props\n\n  const sortable = parentSchemaType.options?.sortable !== false\n  const insertableTypes = parentSchemaType.of\n\n  const elementRef = useRef<HTMLDivElement | null>(null)\n  const menuRef = useRef<HTMLDivElement | null>(null)\n  const menuButtonRef = useRef<HTMLButtonElement | null>(null)\n  const containerRef = useRef<HTMLDivElement | null>(null)\n\n  const {EditReferenceLink, getReferenceInfo, selectedState, isCurrentDocumentLiveEdit} =\n    useReferenceInput({\n      path,\n      schemaType,\n      value,\n    })\n\n  // this is here to make sure the item is visible if it's being edited behind a modal\n  useScrollIntoViewOnFocusWithin(elementRef, open)\n\n  useDidUpdate(focused, (hadFocus, hasFocus) => {\n    if (!hadFocus && hasFocus && elementRef.current) {\n      // Note: if editing an inline item, focus is handled by the item input itself and no ref is being set\n      elementRef.current?.focus()\n    }\n  })\n\n  const hasErrors = props.validation.some((v) => v.level === 'error')\n  const hasWarnings = props.validation.some((v) => v.level === 'warning')\n  const resolvingInitialValue = (value as any)._resolvingInitialValue\n\n  const handleDuplicate = useCallback(() => {\n    onInsert({\n      items: [{...value, _key: randomKey()}],\n      position: 'after',\n    })\n  }, [onInsert, value])\n\n  const handleCopy = useCallback(() => {\n    onCopy({\n      items: [{...value, _key: randomKey()}],\n    })\n  }, [onCopy, value])\n\n  const handleInsert = useCallback(\n    (pos: 'before' | 'after', insertType: SchemaType) => {\n      onInsert({\n        items: [{...createProtoArrayValue(insertType), _key: randomKey()}],\n        position: pos,\n      })\n    },\n    [onInsert],\n  )\n  const loadableReferenceInfo = useReferenceInfo(value?._ref, getReferenceInfo)\n\n  const hasRef = value._ref\n  const refTypeName = loadableReferenceInfo.result?.type || value?._strengthenOnPublish?.type\n  const publishedReferenceExists = hasRef && loadableReferenceInfo.result?.isPublished\n\n  const handleRemoveStrengthenOnPublish = useCallback(() => {\n    onChange([\n      schemaType.weak === true ? set(true, ['_weak']) : unset(['_weak']),\n      unset(['_strengthenOnPublish']),\n    ])\n  }, [onChange, schemaType.weak])\n\n  const refType = refTypeName\n    ? schemaType.to.find((toType) => toType.name === refTypeName)\n    : undefined\n  const pressed = selectedState === 'pressed'\n  const selected = selectedState === 'selected'\n\n  const tone = getTone({readOnly, hasErrors, hasWarnings})\n  const isEditing = !hasRef || focusPath[0] === '_ref'\n\n  const {t} = useTranslation()\n\n  const OpenLink = useMemo(\n    () =>\n      // eslint-disable-next-line @typescript-eslint/no-shadow\n      forwardRef(function OpenLink(\n        restProps: ComponentProps<typeof IntentLink>,\n        _ref: ForwardedRef<HTMLAnchorElement>,\n      ) {\n        return (\n          <IntentLink\n            {...restProps}\n            intent=\"edit\"\n            params={{id: value?._ref, type: refType?.name}}\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n            ref={_ref}\n          />\n        )\n      }),\n    [refType?.name, value?._ref],\n  )\n\n  const handleReplace = useCallback(() => {\n    if (hasRef && isEditing) {\n      onPathFocus([])\n    } else {\n      onPathFocus(['_ref'])\n    }\n  }, [hasRef, isEditing, onPathFocus])\n  const [contextMenuButtonElement, setContextMenuButtonElement] =\n    useState<HTMLButtonElement | null>(null)\n  const setMenuButtonRef = useCallback((element: HTMLButtonElement | null) => {\n    // Sets the contextMenuButtonElement that useInsertMenuMenuItems needs and has to be a element from useState\n    // while also updating the menuButtonRef that useClickOutsideEvent needs inside ReferenceInput\n    setContextMenuButtonElement(element)\n    menuButtonRef.current = element\n  }, [])\n  const {insertBefore, insertAfter} = useInsertMenuMenuItems({\n    schemaTypes: insertableTypes,\n    insertMenuOptions: parentSchemaType.options?.insertMenu,\n    onInsert: handleInsert,\n    referenceElement: contextMenuButtonElement,\n  })\n\n  const disableActions = parentSchemaType.options?.disableActions || EMPTY_ARRAY\n\n  const menu = useMemo(\n    () =>\n      readOnly ? null : (\n        <>\n          <MenuButton\n            ref={setMenuButtonRef}\n            onOpen={() => {\n              insertBefore.send({type: 'close'})\n              insertAfter.send({type: 'close'})\n            }}\n            button={\n              <ContextMenuButton\n                selected={insertBefore.state.open || insertAfter.state.open ? true : undefined}\n                tooltipProps={{\n                  fallbackPlacements: ['top', 'bottom'],\n                  placement: 'right',\n                }}\n              />\n            }\n            id={`${inputId}-menuButton`}\n            menu={\n              <Menu ref={menuRef}>\n                {!readOnly && (\n                  <>\n                    {!disableActions.includes('remove') && (\n                      <MenuItem\n                        text={t('inputs.reference.action.remove')}\n                        tone=\"critical\"\n                        icon={TrashIcon}\n                        onClick={onRemove}\n                      />\n                    )}\n                    <MenuItem\n                      text={t(\n                        hasRef && isEditing\n                          ? 'inputs.reference.action.replace-cancel'\n                          : 'inputs.reference.action.replace',\n                      )}\n                      icon={hasRef && isEditing ? CloseIcon : ReplaceIcon}\n                      onClick={handleReplace}\n                    />\n                    {!disableActions.includes('copy') && (\n                      <MenuItem\n                        text={t('inputs.reference.action.copy')}\n                        icon={CopyIcon}\n                        onClick={handleCopy}\n                      />\n                    )}\n                    {!disableActions.includes('duplicate') && (\n                      <MenuItem\n                        text={t('inputs.reference.action.duplicate')}\n                        icon={AddDocumentIcon}\n                        onClick={handleDuplicate}\n                      />\n                    )}\n                    {!(disableActions.includes('add') || disableActions.includes('addBefore')) &&\n                      insertBefore.menuItem}\n                    {!disableActions.includes('add') &&\n                      !disableActions.includes('addAfter') &&\n                      insertAfter.menuItem}\n                  </>\n                )}\n\n                {!readOnly && !isEditing && hasRef && <MenuDivider />}\n                {!isEditing && hasRef && (\n                  <MenuItem\n                    as={OpenLink}\n                    data-as=\"a\"\n                    text={t('inputs.reference.action.open-in-new-tab')}\n                    icon={OpenInNewTabIcon}\n                  />\n                )}\n              </Menu>\n            }\n            popover={MENU_POPOVER_PROPS}\n          />\n          {insertBefore.popover}\n          {insertAfter.popover}\n        </>\n      ),\n    [\n      OpenLink,\n      disableActions,\n      handleCopy,\n      handleDuplicate,\n      handleReplace,\n      hasRef,\n      inputId,\n      insertAfter,\n      insertBefore,\n      isEditing,\n      onRemove,\n      readOnly,\n      setMenuButtonRef,\n      t,\n    ],\n  )\n\n  const handleFixStrengthMismatch = useCallback(() => {\n    onChange(schemaType.weak === true ? set(true, ['_weak']) : unset(['_weak']))\n  }, [onChange, schemaType])\n\n  const actualStrength = value?._weak ? 'weak' : 'strong'\n  const weakShouldBe = schemaType.weak === true ? 'weak' : 'strong'\n\n  // If the reference value is marked with _strengthenOnPublish,\n  // we allow weak references if the reference points to a document that has a draft but not a published\n  // In all other cases we should display a \"weak mismatch\" warning\n  const weakWarningOverride =\n    hasRef && !loadableReferenceInfo.isLoading && value?._strengthenOnPublish\n\n  const showWeakRefMismatch =\n    !loadableReferenceInfo.isLoading &&\n    loadableReferenceInfo.result?.availability.available &&\n    hasRef &&\n    actualStrength !== weakShouldBe &&\n    !weakWarningOverride\n\n  const issues = (\n    <>\n      {isCurrentDocumentLiveEdit && publishedReferenceExists && value._strengthenOnPublish && (\n        <ReferenceFinalizeAlertStrip\n          schemaType={schemaType}\n          handleRemoveStrengthenOnPublish={handleRemoveStrengthenOnPublish}\n        />\n      )}\n      {showWeakRefMismatch && (\n        <ReferenceStrengthMismatchAlertStrip\n          actualStrength={actualStrength}\n          handleFixStrengthMismatch={handleFixStrengthMismatch}\n        />\n      )}\n      {loadableReferenceInfo.error && (\n        <ReferenceMetadataLoadErrorAlertStrip\n          errorMessage={loadableReferenceInfo.error.message}\n          onHandleRetry={loadableReferenceInfo.retry!}\n        />\n      )}\n    </>\n  )\n\n  const item = (\n    <ReferenceItemRefProvider\n      menuRef={menuRef}\n      menuButtonRef={menuButtonRef}\n      containerRef={containerRef}\n    >\n      <RowLayout\n        dragHandle={sortable}\n        readOnly={!!readOnly}\n        presence={\n          !isEditing && presence.length > 0 && <FieldPresence presence={presence} maxAvatars={1} />\n        }\n        validation={\n          !isEditing &&\n          validation.length > 0 && <FormFieldValidationStatus validation={validation} />\n        }\n        menu={menu}\n        footer={isEditing ? undefined : issues}\n        tone={isEditing ? undefined : tone}\n        focused={focused}\n      >\n        {isEditing ? (\n          <Box padding={1} ref={containerRef}>\n            <FormFieldSet\n              title={schemaType.title}\n              description={schemaType.description}\n              __unstable_presence={presence}\n              validation={validation}\n              inputId={inputId}\n              deprecated={schemaType.deprecated}\n            >\n              {children}\n            </FormFieldSet>\n          </Box>\n        ) : (\n          <ReferenceLinkCard\n            as={EditReferenceLink}\n            tone=\"inherit\"\n            radius={2}\n            documentId={value?._ref}\n            documentType={refType?.name}\n            disabled={resolvingInitialValue}\n            __unstable_focusRing\n            selected={selected}\n            pressed={pressed}\n            data-selected={selected ? true : undefined}\n            data-pressed={pressed ? true : undefined}\n            {...elementProps}\n          >\n            <PreviewReferenceValue\n              value={value}\n              referenceInfo={loadableReferenceInfo}\n              renderPreview={renderPreview}\n              type={schemaType}\n            />\n            {resolvingInitialValue && <LoadingBlock fill />}\n          </ReferenceLinkCard>\n        )}\n      </RowLayout>\n    </ReferenceItemRefProvider>\n  )\n  return (\n    <ChangeIndicator path={path} isChanged={changed} hasFocus={Boolean(focused)}>\n      <Box paddingX={1}>{item}</Box>\n    </ChangeIndicator>\n  )\n}\n","import {isReferenceSchemaType, type SchemaType} from '@sanity/types'\nimport {type ComponentType} from 'react'\n\nimport {type FIXME} from '../../../FIXME'\nimport {PreviewItem} from '../../inputs/arrays/ArrayOfObjectsInput/List/PreviewItem'\nimport {ReferenceItem} from '../../inputs/ReferenceInput/ReferenceItem'\nimport {type ItemProps} from '../../types'\n\nexport function defaultResolveItemComponent(\n  schemaType: SchemaType,\n): ComponentType<Omit<ItemProps, 'renderDefault'>> {\n  if (schemaType.components?.item) return schemaType.components.item\n\n  if (isReferenceSchemaType(schemaType)) {\n    return ReferenceItem as FIXME\n  }\n\n  return PreviewItem as FIXME\n}\n","import {Preview} from '../../preview/components/Preview'\nimport {\n  type RenderAnnotationCallback,\n  type RenderBlockCallback,\n  type RenderFieldCallback,\n  type RenderInputCallback,\n  type RenderItemCallback,\n  type RenderPreviewCallback,\n} from '../types'\nimport {\n  defaultResolveAnnotationComponent,\n  defaultResolveBlockComponent,\n  defaultResolveInlineBlockComponent,\n} from './inputResolver/blockResolver'\nimport {defaultResolveFieldComponent} from './inputResolver/fieldResolver'\nimport {defaultResolveInputComponent} from './inputResolver/inputResolver'\nimport {defaultResolveItemComponent} from './inputResolver/itemResolver'\n\n/** @internal */\nexport const defaultRenderAnnotation: RenderAnnotationCallback = (props) => {\n  const Annotation = defaultResolveAnnotationComponent(props.schemaType)\n  return <Annotation {...props} />\n}\n\n/** @internal */\nexport const defaultRenderBlock: RenderBlockCallback = (props) => {\n  const Block = defaultResolveBlockComponent(props.schemaType)\n  return <Block {...props} />\n}\n\n/** @internal */\nexport const defaultRenderInlineBlock: RenderBlockCallback = (props) => {\n  const InlineBlock = defaultResolveInlineBlockComponent(props.schemaType)\n  return <InlineBlock {...props} />\n}\n\n/** @internal */\nexport const defaultRenderField: RenderFieldCallback = (props) => {\n  const Field = defaultResolveFieldComponent(props.schemaType)\n  return <Field {...props} />\n}\n\n/** @internal */\nexport const defaultRenderInput: RenderInputCallback = (props) => {\n  const Input = defaultResolveInputComponent(props.schemaType)\n  return <Input {...props} />\n}\n\n/** @internal */\nexport const defaultRenderItem: RenderItemCallback = (props) => {\n  const Item = defaultResolveItemComponent(props.schemaType)\n  return <Item {...props} />\n}\n\n/** @internal */\nexport const defaultRenderPreview: RenderPreviewCallback = (props) => {\n  return <Preview {...props} />\n}\n","import {Box, Card, Code, Stack, Text} from '@sanity/ui'\nimport {useCallback, useMemo, useState} from 'react'\nimport {useHotModuleReload} from 'use-hot-module-reload'\n\nimport {ErrorBoundary} from '../../../ui-components/errorBoundary'\nimport {SchemaError} from '../../config'\nimport {isDev} from '../../environment'\nimport {useTranslation} from '../../i18n'\nimport {CorsOriginError} from '../../store'\nimport {isRecord} from '../../util'\nimport {Alert} from '../components/Alert'\n\n/**\n * @internal\n */\ninterface FormBuilderInputErrorBoundaryProps {\n  children: React.ReactNode\n}\n\n/**\n * @internal\n */\nexport function FormBuilderInputErrorBoundary(\n  props: FormBuilderInputErrorBoundaryProps,\n): React.JSX.Element {\n  const {children} = props\n  const [{error, info}, setError] = useState<{error: unknown; info: React.ErrorInfo}>({\n    error: null,\n    info: {},\n  })\n  const handleRetry = useCallback(() => setError({error: null, info: {}}), [])\n\n  if (!error) {\n    return <ErrorBoundary onCatch={setError}>{children}</ErrorBoundary>\n  }\n\n  return <ErrorCard error={error} info={info} onRetry={handleRetry} />\n}\n\n/**\n * The error UI is in a separate component to keep the wrapper lightweight,\n * it allows us to use hooks like useTranslation without incurring the cost of it on every form input\n * when there are no errors.\n * @internal\n */\nfunction ErrorCard(props: {error: unknown; info?: React.ErrorInfo; onRetry: () => void}) {\n  const {error, info, onRetry} = props\n\n  // If a CORS error, or a schema error, rethrow and let the StudioErrorBoundary handle it\n  if (error instanceof CorsOriginError || error instanceof SchemaError) {\n    throw error\n  }\n\n  const {t} = useTranslation()\n  const message = useMemo(\n    () => isRecord(error) && typeof error.message === 'string' && error.message,\n    [error],\n  )\n  const callStack = useMemo(\n    () => isRecord(error) && typeof error.stack === 'string' && error.stack,\n    [error],\n  )\n  const componentStack = useMemo(\n    () => typeof info?.componentStack === 'string' && info.componentStack,\n    [info?.componentStack],\n  )\n\n  useHotModuleReload(onRetry)\n\n  return (\n    <Alert status=\"error\" title={<>{t('form.error.unhandled-runtime-error.title')}</>}>\n      <Stack space={4}>\n        <Text as=\"p\" muted size={1}>\n          <>{t('form.error.unhandled-runtime-error.error-message', {message})}</>\n        </Text>\n        {callStack && (\n          <Box key=\"call-stack\">\n            <Stack space={2}>\n              <Text as=\"p\" size={1}>\n                <>{t('form.error.unhandled-runtime-error.call-stack.title')}</>\n              </Text>\n              <Card border radius={2} overflow=\"auto\" padding={4} tone=\"inherit\">\n                {callStack && (\n                  <Code size={1} style={{maxHeight: '40vh'}}>\n                    {callStack}\n                  </Code>\n                )}\n              </Card>\n            </Stack>\n          </Box>\n        )}\n        {isDev && componentStack && (\n          <Box key=\"component-stack\">\n            <Stack space={2}>\n              <Text as=\"p\" size={1}>\n                <>{t('form.error.unhandled-runtime-error.component-stack.title')}</>\n              </Text>\n              <Card border radius={2} overflow=\"auto\" padding={4} tone=\"inherit\">\n                {componentStack && (\n                  <Code size={1} style={{maxHeight: '40vh'}}>\n                    {componentStack}\n                  </Code>\n                )}\n              </Card>\n            </Stack>\n          </Box>\n        )}\n      </Stack>\n    </Alert>\n  )\n}\n","import {EMPTY, fromEvent} from 'rxjs'\nimport {shareReplay} from 'rxjs/operators'\n\nexport const orientationChange$ =\n  typeof window === 'undefined'\n    ? EMPTY\n    : fromEvent(window, 'orientationchange').pipe(shareReplay(1))\n","import {EMPTY, fromEvent} from 'rxjs'\nimport {shareReplay} from 'rxjs/operators'\n\nexport const resize$ =\n  typeof window === 'undefined' ? EMPTY : fromEvent(window, 'resize').pipe(shareReplay(1))\n","import {EMPTY, fromEvent} from 'rxjs'\nimport {shareReplay} from 'rxjs/operators'\n\nexport const scroll$ =\n  typeof window === 'undefined'\n    ? EMPTY\n    : fromEvent(window, 'scroll', {passive: true, capture: true}).pipe(shareReplay(1))\n","import {merge, Observable, of as observableOf, Subject} from 'rxjs'\nimport {filter, map, mergeMap} from 'rxjs/operators'\n\nimport {orientationChange$} from './orientationChange'\nimport {resize$} from './resize'\nimport {scroll$} from './scroll'\n\nconst ROOT_MARGIN_PX = 150\n\n/*\n  Adapted from the polyfill at https://github.com/WICG/IntersectionObserver\n*/\nfunction isIntersectionObserverSupported() {\n  if (\n    typeof window !== 'undefined' &&\n    'IntersectionObserver' in window &&\n    'IntersectionObserverEntry' in window &&\n    'intersectionRatio' in IntersectionObserverEntry.prototype\n  ) {\n    // Minimal polyfill for Edge 15's lack of `isIntersecting`\n    // See: https://github.com/WICG/IntersectionObserver/issues/211\n    if (!('isIntersecting' in IntersectionObserverEntry.prototype)) {\n      Object.defineProperty(IntersectionObserverEntry.prototype, 'isIntersecting', {\n        get() {\n          return this.intersectionRatio > 0\n        },\n      })\n    }\n    return true\n  }\n  return false\n}\n\ntype IntersectionEvent = {isIntersecting: boolean}\n\nexport const intersectionObservableFor = isIntersectionObserverSupported()\n  ? createIntersectionObserverBased()\n  : createLegacyBased()\n\ntype IntersectionObservableFor = (element: Element) => Observable<IntersectionEvent>\n\nfunction createIntersectionObserverBased(): IntersectionObservableFor {\n  const intersectionObserverEntriesSubject = new Subject<IntersectionObserverEntry>()\n\n  const intersectionObserver = new IntersectionObserver(\n    (entries) => {\n      entries.forEach((entry) => {\n        intersectionObserverEntriesSubject.next(entry)\n      })\n    },\n    {\n      threshold: 0,\n      rootMargin: `${ROOT_MARGIN_PX}px`,\n    },\n  )\n\n  // eslint-disable-next-line @typescript-eslint/no-shadow\n  return function intersectionObservableFor(element) {\n    return new Observable<void>((observer) => {\n      intersectionObserver.observe(element)\n      observer.next()\n      return () => intersectionObserver.unobserve(element)\n    }).pipe(\n      mergeMap(() => intersectionObserverEntriesSubject.asObservable()),\n      filter((entry: IntersectionObserverEntry) => entry.target === element),\n      map((ev) => ({\n        isIntersecting: ev.isIntersecting,\n      })),\n    )\n  }\n}\n\n// This can be removed when intersection observer are supported by the browsers we support\nfunction createLegacyBased() {\n  function getViewport() {\n    return {\n      left: 0,\n      right: window.innerWidth,\n      top: 0,\n      bottom: window.innerHeight,\n    }\n  }\n\n  function intersects(\n    rect: DOMRect,\n    viewport: {left: number; right: number; top: number; bottom: number},\n    margin: number,\n  ) {\n    return (\n      rect.left <= viewport.right + margin &&\n      rect.right >= viewport.left - margin &&\n      rect.top <= viewport.bottom + margin &&\n      rect.bottom >= viewport.top - margin\n    )\n  }\n\n  function inViewport(element: HTMLElement) {\n    return () => intersects(element.getBoundingClientRect(), getViewport(), ROOT_MARGIN_PX)\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-shadow\n  return function intersectionObservableFor(element: HTMLElement): Observable<IntersectionEvent> {\n    const isElementInViewport = inViewport(element)\n    return merge(observableOf(isElementInViewport()), resize$, scroll$, orientationChange$).pipe(\n      // @todo: consider \"faking\" more of the IntersectionObserverEntry api if possible\n      map(isElementInViewport),\n      map((isIntersecting) => ({isIntersecting})),\n    )\n  }\n}\n","import {EMPTY, fromEvent, type Observable} from 'rxjs'\nimport {shareReplay} from 'rxjs/operators'\n\nexport const visibilityChange$: Observable<Event> =\n  typeof window === 'undefined'\n    ? EMPTY\n    : fromEvent(document, 'visibilitychange').pipe(shareReplay(1))\n","import {useLayoutEffect, useState} from 'react'\nimport {concat, of} from 'rxjs'\nimport {delay, distinctUntilChanged, map, switchMap} from 'rxjs/operators'\n\nimport {intersectionObservableFor} from './streams/intersectionObservableFor'\nimport {visibilityChange$} from './streams/visibilityChange'\n\ninterface Props {\n  /**\n   * Disable the check. The hook will return false if disabled\n   */\n  disabled?: boolean\n  /** DOM Node to check visibility for */\n  element: HTMLElement | null\n  /** When element is hidden, wait this delay in milliseconds before reporting it as */\n  hideDelay?: number\n}\n\nexport function useVisibility(props: Props): boolean {\n  const {element, hideDelay = 0, disabled} = props\n  const [visible, setVisible] = useState(false)\n\n  useLayoutEffect(() => {\n    if (!element || disabled) {\n      return undefined\n    }\n\n    if (element && 'checkVisibility' in element) {\n      setVisible(element.checkVisibility())\n    }\n\n    const isDocumentVisible$ = concat(\n      of(!document.hidden),\n      visibilityChange$.pipe(\n        map((event) => (event.target instanceof Document ? !event?.target?.hidden : false)),\n      ),\n    ).pipe(distinctUntilChanged())\n\n    const inViewport$ = intersectionObservableFor(element).pipe(\n      map((event) => event.isIntersecting),\n    )\n\n    const visible$ = isDocumentVisible$.pipe(\n      switchMap((isDocumentVisible) => (isDocumentVisible ? inViewport$ : of(false))),\n      switchMap((isVisible) => (isVisible ? of(true) : of(false).pipe(delay(hideDelay)))),\n      distinctUntilChanged(),\n    )\n\n    const sub = visible$.subscribe(setVisible)\n\n    return () => sub.unsubscribe()\n  }, [element, hideDelay, disabled])\n\n  return disabled ? false : visible\n}\n","export const _HIDE_DELAY = 1000 * 2 // 2 seconds\n","import {type UploadState} from '@sanity/types'\n\nimport {isRecord, isString} from '../../util'\n\nexport function _extractUploadState(value: any): UploadState | undefined {\n  return _resolveUploadValue(value?._upload)\n}\n\nfunction getStringOrUndefined(value: unknown): string | undefined {\n  return isString(value) ? value : undefined\n}\nfunction _resolveUploadValue(value: unknown): UploadState | undefined {\n  if (!isRecord(value)) return undefined\n\n  const progress = typeof value.progress === 'number' ? value.progress : 0\n  const createdAt = getStringOrUndefined(value.initiated || value.createdAt)\n  const updatedAt = getStringOrUndefined(value.updated || value.updatedAt)\n  const fileName = getStringOrUndefined((value?.file as any)?.name)\n  const fileType = getStringOrUndefined((value?.file as any)?.type)\n  const previewImage = getStringOrUndefined(value.previewImage)\n\n  if (createdAt && updatedAt && fileName && fileType) {\n    return {\n      progress,\n      createdAt,\n      updatedAt,\n      file: {name: fileName, type: fileType},\n      previewImage,\n    }\n  }\n\n  return undefined\n}\n","import {type ComponentType, type CSSProperties, useMemo, useState} from 'react'\n\nimport {type PreviewProps} from '../../components'\nimport {type RenderPreviewCallbackProps} from '../../form'\nimport {useTranslation} from '../../i18n'\nimport {unstable_useValuePreview as useValuePreview} from '../useValuePreview'\nimport {useVisibility} from '../useVisibility'\nimport {_HIDE_DELAY} from './_constants'\nimport {_extractUploadState} from './_extractUploadState'\n\n/**\n * This component is responsible for converting renderPreview() calls into an element.\n * It:\n * - subscribes to \"prepared\" preview value as long as the element is visible on screen\n * - resolves the configured preview component for the schema type\n * - prepares \"preview\"-props and passes this to the configured preview component\n * @internal\n * */\nexport function PreviewLoader(\n  props: RenderPreviewCallbackProps & {\n    component: ComponentType<Omit<PreviewProps, 'renderDefault'>>\n  },\n): React.JSX.Element {\n  const {\n    layout,\n    value,\n    component: Component,\n    style: styleProp,\n    schemaType,\n    skipVisibilityCheck,\n    ...restProps\n  } = props\n\n  const {t} = useTranslation()\n  const [element, setElement] = useState<HTMLDivElement | null>(null)\n\n  // Subscribe to visibility\n  const isVisible =\n    useVisibility({\n      disabled: skipVisibilityCheck,\n      element: element,\n      hideDelay: _HIDE_DELAY,\n    }) || skipVisibilityCheck\n\n  // Subscribe document preview value\n  const preview = useValuePreview({\n    enabled: skipVisibilityCheck || isVisible,\n    schemaType,\n    value,\n  })\n\n  const style: CSSProperties = useMemo(\n    () => ({\n      ...styleProp,\n      minWidth: styleProp?.minWidth || 1,\n      minHeight: styleProp?.minHeight || 1,\n    }),\n    [styleProp],\n  )\n\n  const uploadState = useMemo(() => _extractUploadState(value), [value])\n\n  const media: PreviewProps['media'] = useMemo(() => {\n    if (uploadState?.previewImage) {\n      return (\n        <img\n          alt={t('preview.image.file-is-being-uploaded.alt-text')}\n          src={uploadState.previewImage}\n        />\n      )\n    }\n\n    if (!preview?.value?.media) {\n      return schemaType.icon\n    }\n\n    // @todo: fix `TS2769: No overload matches this call.`\n    return preview?.value?.media as any\n  }, [preview, schemaType, uploadState, t])\n\n  return (\n    <div ref={setElement} style={style}>\n      <Component\n        {...restProps}\n        {...(preview?.value || {})}\n        media={media}\n        error={preview?.error}\n        isPlaceholder={preview?.isLoading}\n        layout={layout}\n        schemaType={schemaType}\n      />\n    </div>\n  )\n}\n","/* eslint-disable i18next/no-literal-string */\nimport {Text} from '@sanity/ui'\n\n// This is the fallback marker renderer if the block editor didn't get the 'renderCustomMarkers' prop\n// You will probably only see this when you first start to play with custom markers as a developer\nexport function DefaultCustomMarkers() {\n  return (\n    <Text size={1}>\n      This is a example custom marker, please implement <code>renderCustomMarkers</code> function.\n    </Text>\n  )\n}\n","/* eslint-disable camelcase */\n\nimport {type ObjectSchemaType, type Path, type ValidationMarker} from '@sanity/types'\nimport {type ReactNode, useMemo} from 'react'\nimport {FormBuilderContext} from 'sanity/_singletons'\n\nimport {type DocumentFieldAction, type Source} from '../config'\nimport {type FormNodePresence} from '../presence'\nimport {EMPTY_ARRAY} from '../util'\nimport {DocumentIdProvider} from './contexts/DocumentIdProvider'\nimport {HoveredFieldProvider} from './field'\nimport {type FormBuilderContextValue} from './FormBuilderContext'\nimport {ArrayOfObjectsFunctions} from './inputs/arrays/ArrayOfObjectsInput/ArrayOfObjectsFunctions'\nimport {DefaultCustomMarkers} from './inputs/PortableText/_legacyDefaultParts/CustomMarkers'\nimport {DefaultMarkers} from './inputs/PortableText/_legacyDefaultParts/Markers'\nimport {type PatchChannel, type PatchEvent} from './patch'\nimport {type FormFieldGroup, type StateTree} from './store'\nimport {FormCallbacksProvider} from './studio/contexts/FormCallbacks'\nimport {PresenceProvider} from './studio/contexts/Presence'\nimport {ValidationProvider} from './studio/contexts/Validation'\nimport {\n  type FormBuilderFilterFieldFn,\n  type RenderAnnotationCallback,\n  type RenderBlockCallback,\n  type RenderFieldCallback,\n  type RenderInputCallback,\n  type RenderItemCallback,\n  type RenderPreviewCallback,\n} from './types'\n\nexport interface FormBuilderProviderProps {\n  /** @internal */\n  __internal_fieldActions?: DocumentFieldAction[]\n  /** @internal */\n  __internal_patchChannel?: PatchChannel // eslint-disable-line camelcase\n\n  autoFocus?: boolean\n  changesOpen?: boolean\n  children?: ReactNode\n  collapsedFieldSets: StateTree<boolean> | undefined\n  collapsedPaths: StateTree<boolean> | undefined\n  file: Source['form']['file']\n  filterField?: FormBuilderFilterFieldFn\n  focusPath: Path\n  focused?: boolean\n  groups: FormFieldGroup[]\n  id: string\n  image: Source['form']['image']\n  onChange: (event: PatchEvent) => void\n  onFieldGroupSelect: (path: Path, groupName: string) => void\n  onPathBlur: (path: Path) => void\n  onPathFocus: (path: Path) => void\n  onPathOpen: (path: Path) => void\n  onSetFieldSetCollapsed: (path: Path, collapsed: boolean) => void\n  onSetPathCollapsed: (path: Path, collapsed: boolean) => void\n  presence: FormNodePresence[]\n  readOnly?: boolean\n  renderAnnotation?: RenderAnnotationCallback\n  renderBlock?: RenderBlockCallback\n  renderField: RenderFieldCallback\n  renderInlineBlock?: RenderBlockCallback\n  renderInput: RenderInputCallback\n  renderItem: RenderItemCallback\n  renderPreview: RenderPreviewCallback\n  schemaType: ObjectSchemaType\n  unstable?: Source['form']['unstable']\n  validation: ValidationMarker[]\n}\n\nconst missingPatchChannel: PatchChannel = {\n  publish: () => undefined,\n  subscribe: () => {\n    console.warn(\n      'No patch channel provided to form-builder. If you need input based patch updates, please provide one',\n    )\n\n    return () => undefined\n  },\n}\n\nexport function FormBuilderProvider(props: FormBuilderProviderProps) {\n  const {\n    __internal_fieldActions: fieldActions = EMPTY_ARRAY,\n    __internal_patchChannel: patchChannel = missingPatchChannel,\n    autoFocus,\n    changesOpen,\n    children,\n    collapsedFieldSets,\n    collapsedPaths,\n    file,\n    filterField,\n    focusPath,\n    focused,\n    groups,\n    id,\n    image,\n    onChange,\n    onFieldGroupSelect,\n    onPathBlur,\n    onPathFocus,\n    onPathOpen,\n    onSetFieldSetCollapsed,\n    onSetPathCollapsed,\n    presence,\n    readOnly,\n    renderAnnotation,\n    renderBlock,\n    renderField,\n    renderInlineBlock,\n    renderInput,\n    renderItem,\n    renderPreview,\n    schemaType,\n    unstable,\n    validation,\n  } = props\n\n  const __internal: FormBuilderContextValue['__internal'] = useMemo(\n    () => ({\n      patchChannel, // eslint-disable-line camelcase\n      components: {\n        ArrayFunctions: ArrayOfObjectsFunctions,\n        CustomMarkers: unstable?.CustomMarkers || DefaultCustomMarkers,\n        Markers: unstable?.Markers || DefaultMarkers,\n      },\n      field: {\n        actions: fieldActions,\n      },\n      file: {\n        assetSources: file.assetSources,\n        directUploads: file?.directUploads !== false,\n      },\n      filterField: filterField || (() => true),\n      image: {\n        assetSources: image.assetSources,\n        directUploads: image?.directUploads !== false,\n      },\n      onChange,\n    }),\n    [\n      fieldActions,\n      file.assetSources,\n      file?.directUploads,\n      filterField,\n      image.assetSources,\n      image?.directUploads,\n      onChange,\n      patchChannel,\n      unstable?.CustomMarkers,\n      unstable?.Markers,\n    ],\n  )\n\n  const formBuilder: FormBuilderContextValue = useMemo(\n    () => ({\n      __internal,\n      autoFocus,\n      changesOpen,\n      collapsedFieldSets,\n      collapsedPaths,\n      focusPath,\n      focused,\n      groups,\n      id,\n      readOnly,\n      renderAnnotation,\n      renderBlock,\n      renderField,\n      renderInlineBlock,\n      renderInput,\n      renderItem,\n      renderPreview,\n      schemaType,\n    }),\n    [\n      __internal,\n      autoFocus,\n      changesOpen,\n      collapsedFieldSets,\n      collapsedPaths,\n      focusPath,\n      focused,\n      groups,\n      id,\n      readOnly,\n      renderAnnotation,\n      renderBlock,\n      renderField,\n      renderInlineBlock,\n      renderInput,\n      renderItem,\n      renderPreview,\n      schemaType,\n    ],\n  )\n\n  return (\n    <FormBuilderContext.Provider value={formBuilder}>\n      <FormCallbacksProvider\n        onChange={onChange}\n        onFieldGroupSelect={onFieldGroupSelect}\n        onPathBlur={onPathBlur}\n        onPathFocus={onPathFocus}\n        onPathOpen={onPathOpen}\n        onSetPathCollapsed={onSetPathCollapsed}\n        onSetFieldSetCollapsed={onSetFieldSetCollapsed}\n      >\n        <DocumentIdProvider id={id}>\n          <PresenceProvider presence={presence}>\n            <ValidationProvider validation={validation}>\n              <HoveredFieldProvider>{children}</HoveredFieldProvider>\n            </ValidationProvider>\n          </PresenceProvider>\n        </DocumentIdProvider>\n      </FormCallbacksProvider>\n    </FormBuilderContext.Provider>\n  )\n}\n","import {type ObjectSchemaType, type Path, type ValidationMarker} from '@sanity/types'\nimport {type ReactNode, useCallback} from 'react'\n\nimport {type DocumentFieldAction} from '../../config'\nimport {type FormNodePresence} from '../../presence'\nimport {PreviewLoader} from '../../preview/components/PreviewLoader'\nimport {useSource} from '../../studio'\nimport {\n  useAnnotationComponent,\n  useBlockComponent,\n  useFieldComponent,\n  useInlineBlockComponent,\n  useInputComponent,\n  useItemComponent,\n  usePreviewComponent,\n} from '../form-components-hooks'\nimport {FormBuilderProvider} from '../FormBuilderProvider'\nimport {type PatchChannel, type PatchEvent} from '../patch'\nimport {type FormFieldGroup, type StateTree} from '../store'\nimport {\n  type BlockAnnotationProps,\n  type BlockProps,\n  type FieldProps,\n  type InputProps,\n  type ItemProps,\n  type RenderPreviewCallbackProps,\n} from '../types'\n\n/**\n * @alpha This API might change.\n */\nexport interface FormProviderProps {\n  /** @internal */\n  __internal_fieldActions?: DocumentFieldAction[]\n  /** @internal Considered internal, do not use. */\n  __internal_patchChannel: PatchChannel\n\n  autoFocus?: boolean\n  changesOpen?: boolean\n  children?: ReactNode\n  collapsedFieldSets: StateTree<boolean> | undefined\n  collapsedPaths: StateTree<boolean> | undefined\n  focusPath: Path\n  focused: boolean | undefined\n  groups: FormFieldGroup[]\n  id: string\n  onChange: (changeEvent: PatchEvent) => void\n  onPathBlur: (path: Path) => void\n  onPathFocus: (path: Path) => void\n  onPathOpen: (path: Path) => void\n  onFieldGroupSelect: (path: Path, groupName: string) => void\n  onSetPathCollapsed: (path: Path, collapsed: boolean) => void\n  onSetFieldSetCollapsed: (path: Path, collapsed: boolean) => void\n  presence: FormNodePresence[]\n  readOnly?: boolean\n  schemaType: ObjectSchemaType\n  validation: ValidationMarker[]\n}\n\n/**\n * Default wiring for `FormBuilderProvider` when used with Sanity\n *\n * @alpha This API might change.\n */\nexport function FormProvider(props: FormProviderProps) {\n  const {\n    __internal_fieldActions: fieldActions,\n    __internal_patchChannel: patchChannel,\n    autoFocus,\n    changesOpen,\n    children,\n    collapsedFieldSets,\n    collapsedPaths,\n    focusPath,\n    focused,\n    groups,\n    id,\n    onChange,\n    onPathBlur,\n    onPathFocus,\n    onPathOpen,\n    onFieldGroupSelect,\n    onSetPathCollapsed,\n    onSetFieldSetCollapsed,\n    presence,\n    readOnly,\n    schemaType,\n    validation,\n  } = props\n\n  const {file, image} = useSource().form\n\n  // These hooks may be stored in context as an perf optimization\n  const Input = useInputComponent()\n  const Field = useFieldComponent()\n  const Preview = usePreviewComponent()\n  const Item = useItemComponent()\n  const Block = useBlockComponent()\n  const InlineBlock = useInlineBlockComponent()\n  const Annotation = useAnnotationComponent()\n\n  const renderInput = useCallback(\n    (inputProps: Omit<InputProps, 'renderDefault'>) => <Input {...inputProps} />,\n    [Input],\n  )\n  const renderField = useCallback(\n    (fieldProps: Omit<FieldProps, 'renderDefault'>) => <Field {...fieldProps} />,\n    [Field],\n  )\n  const renderItem = useCallback(\n    ({key, ...itemProps}: Omit<ItemProps, 'renderDefault'>) => <Item key={key} {...itemProps} />,\n    [Item],\n  )\n  const renderPreview = useCallback(\n    (previewProps: RenderPreviewCallbackProps) => (\n      <PreviewLoader component={Preview} {...previewProps} />\n    ),\n    [Preview],\n  )\n  const renderBlock = useCallback(\n    (blockProps: Omit<BlockProps, 'renderDefault'>) => <Block {...blockProps} />,\n    [Block],\n  )\n  const renderInlineBlock = useCallback(\n    (blockProps: Omit<BlockProps, 'renderDefault'>) => <InlineBlock {...blockProps} />,\n    [InlineBlock],\n  )\n  const renderAnnotation = useCallback(\n    (annotationProps: Omit<BlockAnnotationProps, 'renderDefault'>) => (\n      <Annotation {...annotationProps} />\n    ),\n    [Annotation],\n  )\n\n  return (\n    <FormBuilderProvider\n      __internal_fieldActions={fieldActions}\n      __internal_patchChannel={patchChannel}\n      autoFocus={autoFocus}\n      changesOpen={changesOpen}\n      collapsedFieldSets={collapsedFieldSets}\n      collapsedPaths={collapsedPaths}\n      file={file}\n      focusPath={focusPath}\n      focused={focused}\n      groups={groups}\n      id={id}\n      image={image}\n      onChange={onChange}\n      onPathBlur={onPathBlur}\n      onPathFocus={onPathFocus}\n      onPathOpen={onPathOpen}\n      onFieldGroupSelect={onFieldGroupSelect}\n      onSetPathCollapsed={onSetPathCollapsed}\n      onSetFieldSetCollapsed={onSetFieldSetCollapsed}\n      presence={presence}\n      readOnly={readOnly}\n      renderAnnotation={renderAnnotation}\n      renderBlock={renderBlock}\n      renderField={renderField}\n      renderInlineBlock={renderInlineBlock}\n      renderInput={renderInput}\n      renderItem={renderItem}\n      renderPreview={renderPreview}\n      schemaType={schemaType}\n      validation={validation}\n    >\n      {children}\n    </FormBuilderProvider>\n  )\n}\n","import {type ObjectSchemaType, type Path, type ValidationMarker} from '@sanity/types'\nimport {useCallback, useMemo, useRef} from 'react'\n\nimport {type DocumentFieldAction} from '../../config'\nimport {type FormNodePresence} from '../../presence'\nimport {PreviewLoader} from '../../preview'\nimport {EMPTY_ARRAY} from '../../util'\nimport {FormValueProvider} from '../contexts/FormValue'\nimport {GetFormValueProvider} from '../contexts/GetFormValue'\nimport {\n  useAnnotationComponent,\n  useBlockComponent,\n  useFieldComponent,\n  useInlineBlockComponent,\n  useInputComponent,\n  useItemComponent,\n  usePreviewComponent,\n} from '../form-components-hooks'\nimport {type FormPatch, type PatchChannel, PatchEvent} from '../patch'\nimport {type StateTree} from '../store'\nimport {type ObjectFormNode} from '../store/types/nodes'\nimport {\n  type BlockAnnotationProps,\n  type BlockProps,\n  type FieldProps,\n  type FormDocumentValue,\n  type InputProps,\n  type ItemProps,\n  type ObjectInputProps,\n  type RenderPreviewCallbackProps,\n} from '../types'\nimport {DocumentFieldActionsProvider} from './contexts/DocumentFieldActions'\nimport {FormBuilderInputErrorBoundary} from './FormBuilderInputErrorBoundary'\nimport {FormProvider} from './FormProvider'\nimport {TreeEditingDialog, TreeEditingEnabledProvider, useTreeEditingEnabled} from './tree-editing'\n\n/**\n * @alpha\n */\nexport interface FormBuilderProps\n  extends Omit<ObjectFormNode, 'level' | 'path' | 'presence' | 'validation' | '_allMembers'> {\n  /** @internal */\n  __internal_fieldActions?: DocumentFieldAction[]\n  /** @internal Considered internal – do not use. */\n  __internal_patchChannel: PatchChannel\n\n  autoFocus?: boolean\n  changesOpen?: boolean\n  collapsedFieldSets: StateTree<boolean> | undefined\n  collapsedPaths: StateTree<boolean> | undefined\n  focused: boolean | undefined\n  focusPath: Path\n  id: string\n  onChange: (changeEvent: PatchEvent) => void\n  onFieldGroupSelect: (path: Path, groupName: string) => void\n  onPathBlur: (path: Path) => void\n  onPathFocus: (path: Path) => void\n  onPathOpen: (path: Path) => void\n  onSetFieldSetCollapsed: (path: Path, collapsed: boolean) => void\n  onSetPathCollapsed: (path: Path, collapsed: boolean) => void\n  openPath?: Path\n  presence: FormNodePresence[]\n  readOnly?: boolean\n  schemaType: ObjectSchemaType\n  validation: ValidationMarker[]\n  value: FormDocumentValue | undefined\n}\n\n/**\n * @alpha\n */\nexport function FormBuilder(props: FormBuilderProps) {\n  const {\n    __internal_fieldActions: fieldActions,\n    __internal_patchChannel: patchChannel,\n    autoFocus,\n    changesOpen,\n    collapsedFieldSets,\n    collapsedPaths,\n    focused,\n    focusPath,\n    groups,\n    id,\n    members,\n    onChange,\n    onFieldGroupSelect,\n    onPathBlur,\n    onPathFocus,\n    onPathOpen,\n    onSetFieldSetCollapsed,\n    onSetPathCollapsed,\n    openPath = EMPTY_ARRAY,\n    presence,\n    readOnly,\n    schemaType,\n    validation,\n    value,\n  } = props\n\n  const handleCollapseField = useCallback(\n    (fieldName: string) => onSetPathCollapsed([fieldName], true),\n    [onSetPathCollapsed],\n  )\n\n  const handleExpandField = useCallback(\n    (fieldName: string) => onSetPathCollapsed([fieldName], false),\n    [onSetPathCollapsed],\n  )\n\n  const handleBlur = useCallback(() => onPathBlur(EMPTY_ARRAY), [onPathBlur])\n\n  const handleFocus = useCallback(() => onPathFocus(EMPTY_ARRAY), [onPathFocus])\n\n  const handleChange = useCallback(\n    (patch: FormPatch | FormPatch[] | PatchEvent) => onChange(PatchEvent.from(patch)),\n    [onChange],\n  )\n\n  const focusRef = useRef(null)\n\n  const handleSelectFieldGroup = useCallback(\n    (groupName: string) => onFieldGroupSelect(EMPTY_ARRAY, groupName),\n    [onFieldGroupSelect],\n  )\n\n  const handleOpenField = useCallback((fieldName: string) => onPathOpen([fieldName]), [onPathOpen])\n\n  const handleCloseField = useCallback(() => onPathOpen([]), [onPathOpen])\n\n  const handleCollapseFieldSet = useCallback(\n    (fieldSetName: string) => onSetFieldSetCollapsed([fieldSetName], true),\n    [onSetFieldSetCollapsed],\n  )\n\n  const handleExpandFieldSet = useCallback(\n    (fieldSetName: string) => onSetFieldSetCollapsed([fieldSetName], false),\n    [onSetFieldSetCollapsed],\n  )\n  // These hooks may be stored in context as an perf optimization\n  const Input = useInputComponent()\n  const Field = useFieldComponent()\n  const Preview = usePreviewComponent()\n  const Item = useItemComponent()\n  const Block = useBlockComponent()\n  const InlineBlock = useInlineBlockComponent()\n  const Annotation = useAnnotationComponent()\n\n  const renderInput = useCallback(\n    (inputProps: Omit<InputProps, 'renderDefault'>) => (\n      <FormBuilderInputErrorBoundary>\n        <Input {...inputProps} />\n      </FormBuilderInputErrorBoundary>\n    ),\n    [Input],\n  )\n  const renderField = useCallback(\n    (fieldProps: Omit<FieldProps, 'renderDefault'>) => <Field {...fieldProps} />,\n    [Field],\n  )\n  const renderItem = useCallback(\n    ({key, ...itemProps}: Omit<ItemProps, 'renderDefault'>) => <Item key={key} {...itemProps} />,\n    [Item],\n  )\n  const renderPreview = useCallback(\n    (previewProps: RenderPreviewCallbackProps) => (\n      <PreviewLoader component={Preview} {...previewProps} />\n    ),\n    [Preview],\n  )\n  const renderBlock = useCallback(\n    (blockProps: Omit<BlockProps, 'renderDefault'>) => <Block {...blockProps} />,\n    [Block],\n  )\n  const renderInlineBlock = useCallback(\n    (blockProps: Omit<BlockProps, 'renderDefault'>) => <InlineBlock {...blockProps} />,\n    [InlineBlock],\n  )\n  const renderAnnotation = useCallback(\n    (annotationProps: Omit<BlockAnnotationProps, 'renderDefault'>) => (\n      <Annotation {...annotationProps} />\n    ),\n    [Annotation],\n  )\n\n  const rootInputProps: Omit<ObjectInputProps, 'renderDefault'> = useMemo(() => {\n    return {\n      focusPath,\n      elementProps: {\n        'ref': focusRef,\n        id,\n        'onBlur': handleBlur,\n        'onFocus': handleFocus,\n        'aria-describedby': undefined, // Root input should not have any aria-describedby\n      },\n      changed: members.some((m) => m.kind === 'field' && m.field.changed),\n      focused,\n      groups,\n      id,\n      level: 0,\n      members,\n      onChange: handleChange,\n      onFieldClose: handleCloseField,\n      onFieldCollapse: handleCollapseField,\n      onFieldSetCollapse: handleCollapseFieldSet,\n      onFieldExpand: handleExpandField,\n      onFieldSetExpand: handleExpandFieldSet,\n      onPathFocus: onPathFocus,\n      onFieldOpen: handleOpenField,\n      onFieldGroupSelect: handleSelectFieldGroup,\n      path: EMPTY_ARRAY,\n      presence: EMPTY_ARRAY,\n      readOnly,\n      renderAnnotation,\n      renderBlock,\n      renderField,\n      renderInlineBlock,\n      renderInput,\n      renderItem,\n      renderPreview,\n      schemaType,\n      validation: EMPTY_ARRAY,\n      value,\n    }\n  }, [\n    focusPath,\n    focused,\n    groups,\n    handleBlur,\n    handleChange,\n    handleCloseField,\n    handleCollapseField,\n    handleCollapseFieldSet,\n    handleExpandField,\n    handleExpandFieldSet,\n    handleFocus,\n    handleOpenField,\n    handleSelectFieldGroup,\n    id,\n    members,\n    onPathFocus,\n    readOnly,\n    renderAnnotation,\n    renderBlock,\n    renderField,\n    renderInlineBlock,\n    renderInput,\n    renderItem,\n    renderPreview,\n    schemaType,\n    value,\n  ])\n\n  return (\n    <FormProvider\n      __internal_fieldActions={fieldActions}\n      __internal_patchChannel={patchChannel}\n      autoFocus={autoFocus}\n      changesOpen={changesOpen}\n      collapsedFieldSets={collapsedFieldSets}\n      collapsedPaths={collapsedPaths}\n      focusPath={focusPath}\n      focused={focused}\n      groups={groups}\n      id={id}\n      onChange={onChange}\n      onPathBlur={onPathBlur}\n      onPathFocus={onPathFocus}\n      onPathOpen={onPathOpen}\n      onFieldGroupSelect={onFieldGroupSelect}\n      onSetPathCollapsed={onSetPathCollapsed}\n      onSetFieldSetCollapsed={onSetFieldSetCollapsed}\n      presence={presence}\n      validation={validation}\n      readOnly={readOnly}\n      schemaType={schemaType}\n    >\n      <GetFormValueProvider value={value}>\n        <FormValueProvider value={value}>\n          <DocumentFieldActionsProvider actions={fieldActions}>\n            <TreeEditingEnabledProvider>\n              <RootInput\n                rootInputProps={rootInputProps}\n                onPathOpen={onPathOpen}\n                openPath={openPath}\n                renderInput={renderInput}\n              />\n            </TreeEditingEnabledProvider>\n          </DocumentFieldActionsProvider>\n        </FormValueProvider>\n      </GetFormValueProvider>\n    </FormProvider>\n  )\n}\n\ninterface RootInputProps {\n  rootInputProps: Omit<ObjectInputProps, 'renderDefault'>\n  onPathOpen: (path: Path) => void\n  openPath: Path\n  renderInput: (props: Omit<ObjectInputProps, 'renderDefault'>) => React.JSX.Element\n}\n\nfunction RootInput(props: RootInputProps) {\n  const {rootInputProps, onPathOpen, openPath, renderInput} = props\n  const treeEditing = useTreeEditingEnabled()\n  const isRoot = rootInputProps.id === 'root'\n\n  const arrayEditingModal = treeEditing.enabled && isRoot && (\n    <TreeEditingDialog\n      // eslint-disable-next-line react/jsx-handler-names\n      onPathFocus={rootInputProps.onPathFocus}\n      onPathOpen={onPathOpen}\n      openPath={openPath}\n      rootInputProps={rootInputProps}\n      schemaType={rootInputProps.schemaType}\n    />\n  )\n\n  return renderInput({\n    ...rootInputProps,\n    // eslint-disable-next-line camelcase\n    __internal_arrayEditingModal: arrayEditingModal,\n  })\n}\n","import {hues} from '@sanity/color'\nimport {Box, Card, Flex, type Theme} from '@sanity/ui'\nimport {css, styled} from 'styled-components'\n\nexport const Root = styled(Card)((props: {theme: Theme}) => {\n  const {color, radius, space} = props.theme.sanity\n\n  const overlay = css`\n    pointer-events: none;\n    content: '';\n    position: absolute;\n    top: -${space[1]}px;\n    bottom: -${space[1]}px;\n    left: -${space[1]}px;\n    right: -${space[1]}px;\n    border-radius: ${radius[2]}px;\n    mix-blend-mode: ${color.dark ? 'screen' : 'multiply'};\n  `\n\n  return css`\n    box-shadow: 0 0 0 1px var(--card-border-color);\n    border-radius: ${radius[1]}px;\n    pointer-events: all;\n    position: relative;\n\n    &[data-focused] {\n      --card-border-color: var(--card-focus-ring-color);\n    }\n\n    &:not([data-focused]):not([data-selected]) {\n      @media (hover: hover) {\n        &:hover {\n          --card-border-color: ${color.input.default.hovered.border};\n        }\n      }\n    }\n\n    &[data-markers] {\n      &:after {\n        ${overlay}\n        background-color: ${color.dark ? hues.purple[950].hex : hues.purple[50].hex};\n      }\n    }\n\n    &[data-warning] {\n      &:after {\n        ${overlay}\n        background-color: ${color.muted.caution.hovered.bg};\n      }\n\n      @media (hover: hover) {\n        &:hover {\n          --card-border-color: ${color.muted.caution.hovered.border};\n        }\n      }\n    }\n\n    &[data-invalid] {\n      &:after {\n        ${overlay}\n        background-color: ${color.input.invalid.enabled.bg};\n      }\n\n      @media (hover: hover) {\n        &:hover {\n          --card-border-color: ${color.input.invalid.hovered.border};\n        }\n      }\n    }\n  `\n})\n\nexport const PreviewContainer = styled(Flex)`\n  display: block;\n  position: relative;\n  width: 100%;\n  user-select: none;\n  pointer-events: all;\n`\n\nexport const ChangeIndicatorWrapper = styled.div<{$hasChanges: boolean}>(\n  ({theme, $hasChanges}: {theme: Theme; $hasChanges: boolean}) => {\n    const {space} = theme.sanity\n\n    return css`\n      position: absolute;\n      width: ${space[2]}px;\n      right: 0;\n      top: 0;\n      bottom: 0;\n      padding-left: ${space[1]}px;\n      padding-right: ${space[2]}px;\n      user-select: none;\n\n      ${!$hasChanges &&\n      css`\n        display: none;\n      `}\n\n      [data-dragged] & {\n        visibility: hidden;\n      }\n    `\n  },\n)\n\nexport const InnerFlex = styled(Flex)`\n  position: relative;\n\n  [data-dragged] > & {\n    opacity: 0.5;\n  }\n`\n\nexport const BlockActionsOuter = styled(Box)`\n  width: 25px;\n  position: relative;\n  flex-shrink: 0;\n  user-select: none;\n\n  [data-dragged] & {\n    visibility: hidden;\n  }\n`\n\nexport const BlockActionsInner = styled(Flex)`\n  position: absolute;\n  right: 0;\n  [data-dragged] & {\n    visibility: hidden;\n  }\n`\n\nexport const TooltipBox = styled(Box)`\n  max-width: 250px;\n`\n","import {EditIcon, EllipsisHorizontalIcon, EyeOpenIcon, LinkIcon, TrashIcon} from '@sanity/icons'\nimport {isReference, type PortableTextBlock} from '@sanity/types'\nimport {Box, Flex, Menu, useGlobalKeyDown} from '@sanity/ui'\nimport {\n  forwardRef,\n  type MouseEvent,\n  type PropsWithChildren,\n  type Ref,\n  useCallback,\n  useEffect,\n  useId,\n  useMemo,\n  useRef,\n} from 'react'\nimport {IntentLink} from 'sanity/router'\n\nimport {Button, MenuButton, type MenuButtonProps, MenuItem} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n'\n\ninterface BlockObjectActionsMenuProps extends PropsWithChildren {\n  focused: boolean\n  isOpen?: boolean\n  onOpen: () => void\n  onRemove: () => void\n  readOnly?: boolean\n  value: PortableTextBlock\n}\n\nconst POPOVER_PROPS: MenuButtonProps['popover'] = {\n  constrainSize: true,\n  placement: 'bottom',\n  portal: 'default',\n  tone: 'default',\n}\n\nexport function BlockObjectActionsMenu(props: BlockObjectActionsMenuProps): React.JSX.Element {\n  const {children, focused, isOpen, onOpen, onRemove, readOnly, value} = props\n  const {t} = useTranslation()\n  const menuButtonId = useId()\n  const menuButton = useRef<HTMLButtonElement | null>(null)\n  const isTabbing = useRef<boolean>(false)\n\n  const referenceLink = useMemo(\n    () =>\n      isReference(value)\n        ? forwardRef(function ReferenceLink(linkProps, ref: Ref<HTMLAnchorElement> | undefined) {\n            return <IntentLink {...linkProps} intent=\"edit\" params={{id: value._ref}} ref={ref} />\n          })\n        : undefined,\n    [value],\n  )\n\n  useEffect(() => {\n    if (isOpen) {\n      isTabbing.current = false\n    }\n  }, [isOpen])\n\n  // Go to menu when tabbed to\n  useGlobalKeyDown(\n    useCallback(\n      (event) => {\n        if (!focused) {\n          return\n        }\n        if (event.key === 'Tab') {\n          if (menuButton.current && !isTabbing.current && !isOpen) {\n            event.preventDefault()\n            event.stopPropagation()\n            menuButton.current.focus()\n            isTabbing.current = true\n          }\n        }\n      },\n      [focused, isOpen],\n    ),\n  )\n\n  const handleDelete = useCallback(\n    (event: MouseEvent<HTMLDivElement>) => {\n      event.preventDefault()\n      event.stopPropagation()\n      onRemove()\n    },\n    [onRemove],\n  )\n\n  return (\n    <Flex>\n      <Box flex={1}>{children}</Box>\n      <Box>\n        <MenuButton\n          button={\n            <Button\n              aria-label={t('inputs.portable-text.block.open-menu-aria-label')}\n              icon={EllipsisHorizontalIcon}\n              mode=\"bleed\"\n              paddingY={3}\n              tabIndex={focused ? 0 : 1}\n              tooltipProps={{content: 'Open menu'}}\n            />\n          }\n          ref={menuButton}\n          id={menuButtonId}\n          menu={\n            <Menu>\n              <>\n                {'_ref' in value && !!value._ref && (\n                  <MenuItem\n                    as={referenceLink}\n                    data-as=\"a\"\n                    icon={LinkIcon}\n                    text={t('inputs.portable-text.block.open-reference')}\n                  />\n                )}\n\n                {readOnly && (\n                  <MenuItem\n                    icon={EyeOpenIcon}\n                    onClick={onOpen}\n                    text={t('inputs.portable-text.block.view')}\n                  />\n                )}\n                {!readOnly && (\n                  <>\n                    <MenuItem\n                      icon={EditIcon}\n                      onClick={onOpen}\n                      text={t('inputs.portable-text.block.edit')}\n                    />\n                    <MenuItem\n                      icon={TrashIcon}\n                      onClick={handleDelete}\n                      text={t('inputs.portable-text.block.remove')}\n                      tone=\"critical\"\n                    />\n                  </>\n                )}\n              </>\n            </Menu>\n          }\n          popover={POPOVER_PROPS}\n        />\n      </Box>\n    </Flex>\n  )\n}\n","/* eslint-disable complexity */\nimport {type EditorSelection, PortableTextEditor, usePortableTextEditor} from '@portabletext/editor'\nimport {isImage, type ObjectSchemaType, type Path, type PortableTextBlock} from '@sanity/types'\nimport {Box, Flex, type ResponsivePaddingProps} from '@sanity/ui'\nimport {isEqual} from '@sanity/util/paths'\nimport {\n  type MouseEvent,\n  type PropsWithChildren,\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from 'react'\n\nimport {Tooltip} from '../../../../../ui-components'\nimport {pathToString} from '../../../../field'\nimport {useTranslation} from '../../../../i18n'\nimport {EMPTY_ARRAY} from '../../../../util'\nimport {useFormCallbacks} from '../../../studio'\nimport {useChildPresence} from '../../../studio/contexts/Presence'\nimport {\n  type BlockProps,\n  type RenderAnnotationCallback,\n  type RenderArrayOfObjectsItemCallback,\n  type RenderBlockCallback,\n  type RenderCustomMarkers,\n  type RenderFieldCallback,\n  type RenderInputCallback,\n  type RenderPreviewCallback,\n} from '../../../types'\nimport {type RenderBlockActionsCallback} from '../../../types/_transitional'\nimport {useFormBuilder} from '../../../useFormBuilder'\nimport {ReviewChangesHighlightBlock, StyledChangeIndicatorWithProvidedFullPath} from '../_common'\nimport {BlockActions} from '../BlockActions'\nimport {type SetPortableTextMemberItemElementRef} from '../contexts/PortableTextMemberItemElementRefsProvider'\nimport {debugRender} from '../debugRender'\nimport {useMemberValidation} from '../hooks/useMemberValidation'\nimport {usePortableTextMarkers} from '../hooks/usePortableTextMarkers'\nimport {usePortableTextMemberItem} from '../hooks/usePortableTextMembers'\nimport {\n  BlockActionsInner,\n  BlockActionsOuter,\n  ChangeIndicatorWrapper,\n  PreviewContainer,\n  Root,\n  TooltipBox,\n} from './BlockObject.styles'\nimport {BlockObjectActionsMenu} from './BlockObjectActionsMenu'\nimport {ObjectEditModal} from './modals/ObjectEditModal'\n\ninterface BlockObjectProps extends PropsWithChildren {\n  floatingBoundary: HTMLElement | null\n  focused: boolean\n  isActive?: boolean\n  isFullscreen?: boolean\n  onItemClose: () => void\n  onItemOpen: (path: Path) => void\n  onItemRemove: (itemKey: string) => void\n  onPathFocus: (path: Path) => void\n  path: Path\n  readOnly?: boolean\n  referenceBoundary: HTMLElement | null\n  relativePath: Path\n  renderAnnotation?: RenderAnnotationCallback\n  renderBlock?: RenderBlockCallback\n  renderBlockActions?: RenderBlockActionsCallback\n  renderCustomMarkers?: RenderCustomMarkers\n  renderField: RenderFieldCallback\n  renderInlineBlock?: RenderBlockCallback\n  renderInput: RenderInputCallback\n  renderItem: RenderArrayOfObjectsItemCallback\n  renderPreview: RenderPreviewCallback\n  schemaType: ObjectSchemaType\n  selected: boolean\n  setElementRef: SetPortableTextMemberItemElementRef\n  value: PortableTextBlock\n}\n\nexport function BlockObject(props: BlockObjectProps) {\n  const {\n    floatingBoundary,\n    focused,\n    isFullscreen,\n    onItemClose,\n    onItemOpen,\n    onPathFocus,\n    path,\n    readOnly,\n    referenceBoundary,\n    relativePath,\n    renderAnnotation,\n    renderBlock,\n    renderBlockActions,\n    renderCustomMarkers,\n    renderField,\n    renderInlineBlock,\n    renderInput,\n    renderItem,\n    renderPreview,\n    schemaType,\n    selected,\n    setElementRef,\n    value,\n  } = props\n  const {onChange} = useFormCallbacks()\n  const {Markers} = useFormBuilder().__internal.components\n  const [reviewChangesHovered, setReviewChangesHovered] = useState<boolean>(false)\n  const markers = usePortableTextMarkers(path)\n  const editor = usePortableTextEditor()\n  const [divElement, setDivElement] = useState<HTMLDivElement | null>(null)\n  const memberItem = usePortableTextMemberItem(pathToString(path))\n  const isDeleting = useRef<boolean>(false)\n\n  const selfSelection = useMemo(\n    (): EditorSelection => ({\n      anchor: {path: relativePath, offset: 0},\n      focus: {path: relativePath, offset: 0},\n    }),\n    [relativePath],\n  )\n\n  const handleChangeIndicatorMouseEnter = useCallback(() => setReviewChangesHovered(true), [])\n  const handleChangeIndicatorMouseLeave = useCallback(() => setReviewChangesHovered(false), [])\n\n  const onOpen = useCallback(() => {\n    if (memberItem) {\n      // Take focus away from the editor so that it doesn't propagate a new focusPath and interfere here.\n      PortableTextEditor.blur(editor)\n      onItemOpen(memberItem.node.path)\n    }\n  }, [editor, memberItem, onItemOpen])\n\n  const onClose = useCallback(() => {\n    onItemClose()\n    PortableTextEditor.select(editor, selfSelection)\n    PortableTextEditor.focus(editor)\n  }, [onItemClose, editor, selfSelection])\n\n  const onRemove = useCallback(() => {\n    // Guard against clicking \"Delete\" multiple times.\n    if (isDeleting.current) {\n      return\n    }\n    try {\n      PortableTextEditor.delete(editor, selfSelection, {mode: 'blocks'})\n    } catch (err) {\n      console.error(err)\n    } finally {\n      isDeleting.current = true\n    }\n  }, [editor, selfSelection])\n\n  // Focus the editor if this object is removed because it was deleted.\n  // This is some special code needed for how the Menu for the block object\n  // is taking focus while clicking \"Delete\" from the menu.\n  useEffect(\n    () => () => {\n      if (isDeleting.current) {\n        PortableTextEditor.focus(editor)\n      }\n    },\n    [editor],\n  )\n\n  const innerPaddingProps: ResponsivePaddingProps = useMemo(() => {\n    if (isFullscreen && !renderBlockActions) {\n      return {paddingX: 5}\n    }\n\n    if (isFullscreen && renderBlockActions) {\n      return {paddingLeft: 5, paddingRight: 2}\n    }\n\n    if (renderBlockActions) {\n      return {\n        paddingLeft: 3,\n        paddingRight: 2,\n      }\n    }\n\n    return {paddingX: 3}\n  }, [isFullscreen, renderBlockActions])\n\n  const {validation, hasError, hasWarning, hasInfo} = useMemberValidation(memberItem?.node)\n  const parentSchemaType = editor.schemaTypes.portableText\n  const hasMarkers = Boolean(markers.length > 0)\n\n  const presence = useChildPresence(path, true)\n  const rootPresence = useMemo(\n    () => presence.filter((p) => isEqual(p.path, path)),\n    [path, presence],\n  )\n\n  // Tooltip indicating validation errors, warnings, info and markers\n  const tooltipEnabled = hasError || hasWarning || hasInfo || hasMarkers\n  const toolTipContent = useMemo(\n    () =>\n      (tooltipEnabled && (\n        <TooltipBox>\n          <Markers\n            markers={markers}\n            validation={validation}\n            renderCustomMarkers={renderCustomMarkers}\n          />\n        </TooltipBox>\n      )) ||\n      null,\n    [Markers, markers, renderCustomMarkers, tooltipEnabled, validation],\n  )\n\n  const isOpen = Boolean(memberItem?.member.open)\n  const input = memberItem?.input\n  const nodePath = memberItem?.node.path || EMPTY_ARRAY\n  const referenceElement = divElement\n\n  const componentProps: BlockProps = useMemo(\n    () => ({\n      __unstable_floatingBoundary: floatingBoundary,\n      __unstable_referenceBoundary: referenceBoundary,\n      __unstable_referenceElement: referenceElement,\n      children: input,\n      focused,\n      markers,\n      onClose,\n      onOpen,\n      onPathFocus,\n      onRemove,\n      open: isOpen,\n      parentSchemaType,\n      path: nodePath,\n      presence: rootPresence,\n      readOnly: Boolean(readOnly),\n      renderAnnotation,\n      renderBlock,\n      renderDefault: DefaultBlockObjectComponent,\n      renderField,\n      renderInlineBlock,\n      renderInput,\n      renderItem,\n      renderPreview,\n      schemaType,\n      selected,\n      validation,\n      value,\n    }),\n    [\n      floatingBoundary,\n      referenceElement,\n      input,\n      focused,\n      markers,\n      onClose,\n      onOpen,\n      onPathFocus,\n      onRemove,\n      isOpen,\n      parentSchemaType,\n      nodePath,\n      rootPresence,\n      readOnly,\n      referenceBoundary,\n      renderAnnotation,\n      renderBlock,\n      renderField,\n      renderInlineBlock,\n      renderInput,\n      renderItem,\n      renderPreview,\n      schemaType,\n      selected,\n      validation,\n      value,\n    ],\n  )\n\n  const blockActionsEnabled = renderBlockActions && value && !readOnly\n  const changeIndicatorVisible = isFullscreen && memberItem\n\n  const setRef = useCallback(\n    (elm: HTMLDivElement) => {\n      if (memberItem) {\n        setElementRef({key: memberItem.member.key, elementRef: elm})\n      }\n      setDivElement(elm) // update state here so the reference element is available on first render\n    },\n    [memberItem, setElementRef, setDivElement],\n  )\n\n  return useMemo(\n    () => (\n      <Box ref={setRef} contentEditable={false}>\n        <Flex paddingBottom={1} marginY={3} style={debugRender()}>\n          <PreviewContainer {...innerPaddingProps}>\n            <Box flex={1}>\n              <Tooltip\n                placement=\"top\"\n                portal=\"editor\"\n                // If the object modal is open, disable the tooltip to avoid it rerendering the inner items when the validation changes.\n                disabled={isOpen ? true : !tooltipEnabled}\n                content={toolTipContent}\n              >\n                <div>{renderBlock && renderBlock(componentProps)}</div>\n              </Tooltip>\n            </Box>\n\n            {blockActionsEnabled && (\n              <BlockActionsOuter contentEditable={false} marginRight={3}>\n                <BlockActionsInner>\n                  {focused && (\n                    <BlockActions\n                      block={value}\n                      onChange={onChange}\n                      renderBlockActions={renderBlockActions}\n                    />\n                  )}\n                </BlockActionsInner>\n              </BlockActionsOuter>\n            )}\n\n            {changeIndicatorVisible && (\n              <ChangeIndicatorWrapper\n                $hasChanges={memberItem.member.item.changed}\n                contentEditable={false}\n                onMouseEnter={handleChangeIndicatorMouseEnter}\n                onMouseLeave={handleChangeIndicatorMouseLeave}\n              >\n                <StyledChangeIndicatorWithProvidedFullPath\n                  hasFocus={focused}\n                  isChanged={memberItem.member.item.changed}\n                  path={memberItem.member.item.path}\n                  withHoverEffect={false}\n                />\n              </ChangeIndicatorWrapper>\n            )}\n            {reviewChangesHovered && <ReviewChangesHighlightBlock />}\n          </PreviewContainer>\n        </Flex>\n      </Box>\n    ),\n    [\n      blockActionsEnabled,\n      changeIndicatorVisible,\n      componentProps,\n      focused,\n      handleChangeIndicatorMouseLeave,\n      handleChangeIndicatorMouseEnter,\n      innerPaddingProps,\n      memberItem,\n      onChange,\n      renderBlock,\n      renderBlockActions,\n      reviewChangesHovered,\n      setRef,\n      toolTipContent,\n      tooltipEnabled,\n      value,\n      isOpen,\n    ],\n  )\n}\n\nexport const DefaultBlockObjectComponent = (props: BlockProps) => {\n  const {\n    __unstable_floatingBoundary,\n    __unstable_referenceBoundary,\n    __unstable_referenceElement,\n    children,\n    focused,\n    markers,\n    onClose,\n    onOpen,\n    onRemove,\n    open,\n    readOnly,\n    renderPreview,\n    schemaType,\n    selected,\n    value,\n    validation,\n  } = props\n\n  const {t} = useTranslation()\n  const isImagePreview = isImage(value)\n  const hasError = validation.filter((v) => v.level === 'error').length > 0\n  const hasWarning = validation.filter((v) => v.level === 'warning').length > 0\n  const hasMarkers = Boolean(markers.length > 0)\n  const tone = selected || focused ? 'primary' : 'default'\n\n  const handleDoubleClickToOpen = useCallback(\n    (e: MouseEvent<Element, globalThis.MouseEvent>) => {\n      e.preventDefault()\n      e.stopPropagation()\n      onOpen()\n    },\n    [onOpen],\n  )\n\n  return (\n    <>\n      <Root\n        aria-label={t('inputs.portable-text.block.aria-label')}\n        data-focused={focused ? '' : undefined}\n        data-image-preview={isImagePreview ? '' : undefined}\n        data-invalid={hasError ? '' : undefined}\n        data-markers={hasMarkers ? '' : undefined}\n        data-read-only={readOnly ? '' : undefined}\n        data-selected={selected ? '' : undefined}\n        data-testid=\"pte-block-object\"\n        data-warning={hasWarning ? '' : undefined}\n        flex={1}\n        onDoubleClick={handleDoubleClickToOpen}\n        padding={isImagePreview ? 0 : 1}\n        tone={tone}\n      >\n        {renderPreview({\n          actions: (\n            <BlockObjectActionsMenu\n              isOpen={open}\n              focused={focused}\n              onOpen={onOpen}\n              onRemove={onRemove}\n              readOnly={readOnly}\n              value={value}\n            />\n          ),\n          layout: isImagePreview ? 'blockImage' : 'block',\n          schemaType,\n          skipVisibilityCheck: true,\n          value,\n        })}\n      </Root>\n      {open && (\n        <ObjectEditModal\n          floatingBoundary={__unstable_floatingBoundary}\n          defaultType=\"dialog\"\n          onClose={onClose}\n          autoFocus\n          schemaType={schemaType}\n          referenceBoundary={__unstable_referenceBoundary}\n          referenceElement={__unstable_referenceElement}\n        >\n          {children}\n        </ObjectEditModal>\n      )}\n    </>\n  )\n}\n","import {type SchemaType} from '@sanity/types'\nimport {type ComponentType} from 'react'\n\nimport {type FIXME} from '../../../FIXME'\nimport {isBlockType} from '../../inputs/PortableText/_helpers'\nimport {DefaultAnnotationComponent} from '../../inputs/PortableText/object/Annotation'\nimport {DefaultBlockObjectComponent} from '../../inputs/PortableText/object/BlockObject'\nimport {DefaultInlineObjectComponent} from '../../inputs/PortableText/object/InlineObject'\nimport {DefaultComponent as DefaultBlockTextComponent} from '../../inputs/PortableText/text/TextBlock'\nimport {type BlockAnnotationProps, type BlockProps} from '../../types'\n\nexport function defaultResolveBlockComponent(\n  schemaType: SchemaType,\n): ComponentType<Omit<BlockProps, 'renderDefault'>> {\n  if (schemaType.components?.block) return schemaType.components.block\n  if (isBlockType(schemaType)) {\n    return DefaultBlockTextComponent as FIXME\n  }\n  return DefaultBlockObjectComponent as FIXME\n}\n\nexport function defaultResolveInlineBlockComponent(\n  schemaType: SchemaType,\n): ComponentType<Omit<BlockProps, 'renderDefault'>> {\n  if (schemaType.components?.inlineBlock) return schemaType.components.inlineBlock\n  return DefaultInlineObjectComponent as FIXME\n}\n\nexport function defaultResolveAnnotationComponent(\n  schemaType: SchemaType,\n): ComponentType<Omit<BlockAnnotationProps, 'renderDefault'>> {\n  if (schemaType.components?.annotation) return schemaType.components.annotation\n  return DefaultAnnotationComponent as FIXME\n}\n","import {type SchemaType} from '@sanity/types'\nimport {type ComponentType, useCallback} from 'react'\n\nimport {type PreviewProps} from '../../components/previews'\nimport {\n  defaultResolveAnnotationComponent,\n  defaultResolveBlockComponent,\n  defaultResolveInlineBlockComponent,\n} from '../studio/inputResolver/blockResolver'\nimport {defaultResolveFieldComponent} from '../studio/inputResolver/fieldResolver'\nimport {\n  defaultResolveInputComponent,\n  defaultResolvePreviewComponent,\n} from '../studio/inputResolver/inputResolver'\nimport {defaultResolveItemComponent} from '../studio/inputResolver/itemResolver'\nimport {\n  type BlockAnnotationProps,\n  type BlockProps,\n  type FieldProps,\n  type InputProps,\n  type ItemProps,\n} from '../types'\n\nfunction useResolveDefaultComponent<T extends {schemaType?: SchemaType}>(props: {\n  componentProps: Omit<T, 'renderDefault'>\n  componentResolver: (schemaType: SchemaType) => ComponentType<Omit<T, 'renderDefault'>>\n}): React.JSX.Element {\n  const {componentResolver, componentProps} = props\n\n  // NOTE: this will not happen, but we do this to avoid updating too many places\n  // TODO: We need to clean up the preview machinery + types to remove this\n  if (!componentProps.schemaType) {\n    throw new Error('the `schemaType` property must be defined')\n  }\n\n  const DefaultResolvedComponent = componentResolver(componentProps.schemaType)\n\n  const renderDefault = useCallback(\n    (parentTypeProps: T) => {\n      if (!parentTypeProps.schemaType?.type) {\n        // In theory this should not be possible, and this error should never be thrown\n        throw new Error('Attempted to render form component of non-existent parent type')\n      }\n\n      // The components property is removed from the schemaType object\n      // in order to prevent that a component is render itself\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      const {components, ...restSchemaType} = parentTypeProps.schemaType\n      const ParentTypeResolvedComponent = componentResolver(restSchemaType)\n      return <ParentTypeResolvedComponent {...parentTypeProps} />\n    },\n    [componentResolver],\n  )\n\n  return <DefaultResolvedComponent {...componentProps} renderDefault={renderDefault} />\n}\n\n/**\n * @internal\n */\nexport function DefaultInput(props: Omit<InputProps, 'renderDefault'>): React.JSX.Element {\n  return useResolveDefaultComponent<Omit<InputProps, 'renderDefault'>>({\n    componentProps: props,\n    componentResolver: defaultResolveInputComponent,\n  })\n}\n\n/**\n * @internal\n */\nexport function DefaultField(props: Omit<FieldProps, 'renderDefault'>): React.JSX.Element {\n  return useResolveDefaultComponent<Omit<FieldProps, 'renderDefault'>>({\n    componentProps: props,\n    componentResolver: defaultResolveFieldComponent,\n  })\n}\n\n/**\n * @internal\n */\nexport function DefaultItem(props: Omit<ItemProps, 'renderDefault'>): React.JSX.Element {\n  return useResolveDefaultComponent<Omit<ItemProps, 'renderDefault'>>({\n    componentProps: props,\n    componentResolver: defaultResolveItemComponent,\n  })\n}\n\n/**\n * @internal\n */\nexport function DefaultPreview(props: Omit<PreviewProps, 'renderDefault'>): React.JSX.Element {\n  return useResolveDefaultComponent<PreviewProps>({\n    componentProps: props,\n    componentResolver: defaultResolvePreviewComponent,\n  })\n}\n\n/**\n * @internal\n */\nexport function DefaultBlock(props: Omit<BlockProps, 'renderDefault'>): React.JSX.Element {\n  return useResolveDefaultComponent<Omit<BlockProps, 'renderDefault'>>({\n    componentProps: props,\n    componentResolver: defaultResolveBlockComponent,\n  })\n}\n\n/**\n * @internal\n */\nexport function DefaultInlineBlock(props: Omit<BlockProps, 'renderDefault'>): React.JSX.Element {\n  return useResolveDefaultComponent<Omit<BlockProps, 'renderDefault'>>({\n    componentProps: props,\n    componentResolver: defaultResolveInlineBlockComponent,\n  })\n}\n\n/**\n * @internal\n */\nexport function DefaultAnnotation(\n  props: Omit<BlockAnnotationProps, 'renderDefault'>,\n): React.JSX.Element {\n  return useResolveDefaultComponent<Omit<BlockAnnotationProps, 'renderDefault'>>({\n    componentProps: props,\n    componentResolver: defaultResolveAnnotationComponent,\n  })\n}\n","import {type ComponentType} from 'react'\n\nimport {type PreviewProps} from '../../components/previews'\nimport {type PluginOptions} from '../../config'\nimport {\n  type BlockAnnotationProps,\n  type BlockProps,\n  type FieldProps,\n  type InputProps,\n  type ItemProps,\n} from '../types'\n\nexport function pickInputComponent(\n  plugin: PluginOptions,\n): ComponentType<Omit<InputProps, 'renderDefault'>> {\n  return plugin.form?.components?.input as ComponentType<Omit<InputProps, 'renderDefault'>>\n}\n\nexport function pickFieldComponent(\n  plugin: PluginOptions,\n): ComponentType<Omit<FieldProps, 'renderDefault'>> {\n  return plugin.form?.components?.field as ComponentType<Omit<FieldProps, 'renderDefault'>>\n}\n\nexport function pickPreviewComponent(\n  plugin: PluginOptions,\n): ComponentType<Omit<PreviewProps, 'renderDefault'>> {\n  return plugin.form?.components?.preview as ComponentType<Omit<PreviewProps, 'renderDefault'>>\n}\n\nexport function pickItemComponent(\n  plugin: PluginOptions,\n): ComponentType<Omit<ItemProps, 'renderDefault'>> {\n  return plugin.form?.components?.item as ComponentType<Omit<ItemProps, 'renderDefault'>>\n}\n\nexport function pickBlockComponent(\n  plugin: PluginOptions,\n): ComponentType<Omit<BlockProps, 'renderDefault'>> {\n  return plugin.form?.components?.block as ComponentType<Omit<BlockProps, 'renderDefault'>>\n}\n\nexport function pickInlineBlockComponent(\n  plugin: PluginOptions,\n): ComponentType<Omit<BlockProps, 'renderDefault'>> {\n  return plugin.form?.components?.inlineBlock as ComponentType<Omit<BlockProps, 'renderDefault'>>\n}\n\nexport function pickAnnotationComponent(\n  plugin: PluginOptions,\n): ComponentType<Omit<BlockAnnotationProps, 'renderDefault'>> {\n  return plugin.form?.components?.annotation as ComponentType<\n    Omit<BlockAnnotationProps, 'renderDefault'>\n  >\n}\n","import {type ComponentType} from 'react'\n\nimport {type PreviewProps} from '../../components'\nimport {useMiddlewareComponents} from '../../config/components'\nimport {\n  type BlockAnnotationProps,\n  type BlockProps,\n  type FieldProps,\n  type InputProps,\n  type ItemProps,\n} from '../types'\nimport {\n  DefaultAnnotation,\n  DefaultBlock,\n  DefaultField,\n  DefaultInlineBlock,\n  DefaultInput,\n  DefaultItem,\n  DefaultPreview,\n} from './components'\nimport {\n  pickAnnotationComponent,\n  pickBlockComponent,\n  pickFieldComponent,\n  pickInlineBlockComponent,\n  pickInputComponent,\n  pickItemComponent,\n  pickPreviewComponent,\n} from './picks'\n\n/**\n * @internal\n */\nexport function useInputComponent(): ComponentType<Omit<InputProps, 'renderDefault'>> {\n  return useMiddlewareComponents({\n    defaultComponent: DefaultInput,\n    pick: pickInputComponent,\n  })\n}\n\n/**\n * @internal\n */\nexport function useFieldComponent(): ComponentType<Omit<FieldProps, 'renderDefault'>> {\n  return useMiddlewareComponents({\n    defaultComponent: DefaultField,\n    pick: pickFieldComponent,\n  })\n}\n\n/**\n * @internal\n */\nexport function usePreviewComponent(): ComponentType<Omit<PreviewProps, 'renderDefault'>> {\n  return useMiddlewareComponents({\n    defaultComponent: DefaultPreview,\n    pick: pickPreviewComponent,\n  })\n}\n\n/**\n * @internal\n */\nexport function useItemComponent(): ComponentType<Omit<ItemProps, 'renderDefault'>> {\n  return useMiddlewareComponents({\n    defaultComponent: DefaultItem,\n    pick: pickItemComponent,\n  })\n}\n\n/**\n * @internal\n */\nexport function useBlockComponent(): ComponentType<Omit<BlockProps, 'renderDefault'>> {\n  return useMiddlewareComponents({\n    defaultComponent: DefaultBlock,\n    pick: pickBlockComponent,\n  })\n}\n\n/**\n * @internal\n */\nexport function useInlineBlockComponent(): ComponentType<Omit<BlockProps, 'renderDefault'>> {\n  return useMiddlewareComponents({\n    defaultComponent: DefaultInlineBlock,\n    pick: pickInlineBlockComponent,\n  })\n}\n\n/**\n * @internal\n */\nexport function useAnnotationComponent(): ComponentType<\n  Omit<BlockAnnotationProps, 'renderDefault'>\n> {\n  return useMiddlewareComponents({\n    defaultComponent: DefaultAnnotation,\n    pick: pickAnnotationComponent,\n  })\n}\n","import {usePreviewComponent} from '../../form/form-components-hooks'\nimport {type RenderPreviewCallbackProps} from '../../form/types'\nimport {PreviewLoader} from '../index'\n\n/**\n * @internal\n */\nexport function Preview(props: RenderPreviewCallbackProps) {\n  const PreviewComponent = usePreviewComponent()\n  return <PreviewLoader {...props} component={PreviewComponent} />\n}\n","import {WarningOutlineIcon} from '@sanity/icons'\nimport {type PreviewValue} from '@sanity/types'\n\nexport const INCLUDE_FIELDS_QUERY = ['_id', '_rev', '_type']\nexport const INCLUDE_FIELDS = [...INCLUDE_FIELDS_QUERY, '_key']\n\n/**\n * How long to wait after the last subscriber has unsubscribed before resetting the observable and disconnecting the listener\n * We want to keep the listener alive for a short while after the last subscriber has unsubscribed to avoid unnecessary reconnects\n */\nexport const LISTENER_RESET_DELAY = 10_000\n\nexport const AVAILABILITY_READABLE = {\n  available: true,\n  reason: 'READABLE',\n} as const\n\nexport const AVAILABILITY_PERMISSION_DENIED = {\n  available: false,\n  reason: 'PERMISSION_DENIED',\n} as const\n\nexport const AVAILABILITY_NOT_FOUND = {\n  available: false,\n  reason: 'NOT_FOUND',\n} as const\n\nexport const INVALID_PREVIEW_FALLBACK: PreviewValue = {\n  title: 'Invalid preview config',\n  subtitle: 'Check the error log in the console',\n  media: <WarningOutlineIcon />,\n}\n","import {Observable, type Subscriber} from 'rxjs'\n\nimport {isNonNullable} from '../../util'\n\ninterface QueueItem {\n  args: any[]\n  observer: Subscriber<any>\n  completed: boolean\n}\n\n// Takes an observable returning function and returns a debounced function that, when called\n// collects its passed arguments until wait time has passed without receiving new calls.\n// When wait period is over, calls the original function with the collected arguments\nexport function debounceCollect<Fn extends (...args: any[]) => Observable<any[]>>(\n  fn: Fn,\n  wait: number,\n): Fn extends (collectedArgs: [...infer TArgs][]) => Observable<(infer TReturnValue)[]>\n  ? (...args: TArgs) => Observable<TReturnValue>\n  : never\nexport function debounceCollect(fn: any, wait: number) {\n  let timer: ReturnType<typeof setTimeout>\n  let queue: Record<number | string, QueueItem | undefined> = {}\n  let idx = 0\n  return function debounced(...args: any[]) {\n    return new Observable((obs) => {\n      clearTimeout(timer)\n      timer = setTimeout(flush, wait)\n      const queueItem: QueueItem = {\n        args: args,\n        observer: obs,\n        completed: false,\n      }\n      const id = idx++\n      queue[id] = queueItem\n      return () => {\n        // console.log('completed', queueItem.args)\n        queueItem.completed = true\n      }\n    })\n  }\n\n  function flush() {\n    const currentlyFlushingQueue = queue\n    queue = {}\n\n    const queueItemIds = Object.keys(currentlyFlushingQueue) // Todo: use debug\n      // .map(id => {\n      //   if (currentlyFlushingQueue[id].completed) {\n      //     console.log('Dropped', currentlyFlushingQueue[id].args)\n      //   }\n      //   return id\n      // })\n      .filter((id) => {\n        const queueItem = currentlyFlushingQueue[id]\n\n        return queueItem && !queueItem.completed\n      })\n\n    if (queueItemIds.length === 0) {\n      // nothing to do\n      return\n    }\n    const collectedArgs = queueItemIds\n      .map((id) => {\n        const queueItem = currentlyFlushingQueue[id]\n\n        return queueItem && queueItem.args\n      })\n      .filter(isNonNullable)\n    fn(collectedArgs).subscribe({\n      next(results: any[]) {\n        results.forEach((result, i) => {\n          const queueItem = currentlyFlushingQueue[queueItemIds[i]]\n          if (queueItem && !queueItem.completed) {\n            queueItem.observer.next(results[i])\n          }\n        })\n      },\n      complete() {\n        queueItemIds.forEach((id) => {\n          const entry = currentlyFlushingQueue[id]\n          if (entry && !entry.completed) {\n            entry.observer.complete()\n          }\n        })\n      },\n      error(err: Error) {\n        queueItemIds.forEach((id) => {\n          const entry = currentlyFlushingQueue[id]\n          if (entry && !entry.completed) {\n            entry.observer.error(err)\n          }\n        })\n      },\n    })\n  }\n}\n","/* eslint-disable max-nested-callbacks */\n\nimport {type SanityClient} from '@sanity/client'\nimport {flatten, keyBy} from 'lodash'\nimport {combineLatest, defer, from, type Observable, of} from 'rxjs'\nimport {distinctUntilChanged, map, mergeMap, reduce, switchMap} from 'rxjs/operators'\nimport shallowEquals from 'shallow-equals'\n\nimport {createSWR, getDraftId, getPublishedId, getVersionId, isRecord} from '../util'\nimport {\n  AVAILABILITY_NOT_FOUND,\n  AVAILABILITY_PERMISSION_DENIED,\n  AVAILABILITY_READABLE,\n} from './constants'\nimport {\n  type AvailabilityResponse,\n  type DocumentAvailability,\n  type DraftsModelDocumentAvailability,\n  type ObservePathsFn,\n} from './types'\nimport {debounceCollect} from './utils/debounceCollect'\n\nconst MAX_DOCUMENT_ID_CHUNK_SIZE = 11164\n\n/**\n * Create an SWR operator for document availability\n */\nconst swr = createSWR<DocumentAvailability>({maxSize: 1000})\n\n/**\n * Takes an array of document IDs and puts them into individual chunks.\n * Because document IDs can vary greatly in size, we want to chunk by the length of the\n * combined comma-separated ID set. We try to stay within 11164 bytes - this is about the\n * same length the Sanity client uses for max query size, and accounts for rather large\n * headers to be present - so this _should_ be safe.\n *\n * @param documentIds - Unique document IDs to chunk\n * @returns Array of document ID chunks\n */\nfunction chunkDocumentIds(documentIds: string[]): string[][] {\n  let chunk: string[] = []\n  let chunkSize = 0\n\n  const chunks: string[][] = []\n\n  for (const documentId of documentIds) {\n    // Reached the max length? start a new chunk\n    if (chunkSize + documentId.length + 1 >= MAX_DOCUMENT_ID_CHUNK_SIZE) {\n      chunks.push(chunk)\n      chunk = []\n      chunkSize = 0\n    }\n\n    chunkSize += documentId.length + 1 // +1 is to account for a comma between IDs\n    chunk.push(documentId)\n  }\n\n  if (!chunks.includes(chunk)) {\n    chunks.push(chunk)\n  }\n\n  return chunks\n}\n\n/**\n * Mutative concat\n * @param array - the array to concat to\n * @param chunks - the items to concat to the array\n */\nfunction mutConcat<T>(array: T[], chunks: T[]) {\n  array.push(...chunks)\n  return array\n}\n\nexport function createPreviewAvailabilityObserver(\n  versionedClient: SanityClient,\n  observePaths: ObservePathsFn,\n): (id: string) => Observable<DraftsModelDocumentAvailability> {\n  /**\n   * Observable of metadata for the document with the given id\n   * If we can't read a document it is either because it's not readable or because it doesn't exist\n   *\n   * @internal\n   */\n  function observeDocumentAvailability(id: string): Observable<DocumentAvailability> {\n    // check for existence\n    return observePaths({_ref: id}, [['_rev']]).pipe(\n      map((res) => isRecord(res) && Boolean('_rev' in res && res?._rev)),\n      distinctUntilChanged(),\n      switchMap((hasRev) => {\n        return hasRev\n          ? // short circuit: if we can read the _rev field we know it both exists and is readable\n            of(AVAILABILITY_READABLE)\n          : // we can't read the _rev field for two possible reasons: 1) the document isn't readable or 2) the document doesn't exist\n            fetchDocumentReadability(id)\n      }),\n      swr(id),\n      map((ev) => ev.value),\n    )\n  }\n\n  const fetchDocumentReadability = debounceCollect(function fetchDocumentReadability(\n    args: string[][],\n  ): Observable<DocumentAvailability[]> {\n    const uniqueIds = [...new Set(flatten(args))]\n    return from(chunkDocumentIds(uniqueIds)).pipe(\n      mergeMap(fetchDocumentReadabilityChunked, 10),\n      reduce<DocumentAvailability[], DocumentAvailability[]>(mutConcat, []),\n      map((res) => args.map(([id]) => res[uniqueIds.indexOf(id)])),\n    )\n  }, 1)\n\n  function fetchDocumentReadabilityChunked(ids: string[]): Observable<DocumentAvailability[]> {\n    return defer(() => {\n      const requestOptions = {\n        uri: versionedClient.getDataUrl('doc', ids.join(',')),\n        json: true,\n        query: {excludeContent: 'true'},\n        tag: 'preview.documents-availability',\n      }\n      return versionedClient.observable.request<AvailabilityResponse>(requestOptions).pipe(\n        map((response) => {\n          const omitted = keyBy(response.omitted || [], (entry) => entry.id)\n          return ids.map((id) => {\n            const omittedEntry = omitted[id]\n            if (!omittedEntry) {\n              // it's not omitted, so it exists and is readable\n              return AVAILABILITY_READABLE\n            }\n            if (omittedEntry.reason === 'existence') {\n              return AVAILABILITY_NOT_FOUND\n            }\n            if (omittedEntry.reason === 'permission') {\n              // it's not omitted, so it exists and is readable\n              return AVAILABILITY_PERMISSION_DENIED\n            }\n            throw new Error(`Unexpected reason for omission: \"${omittedEntry.reason}\"`)\n          })\n        }),\n      )\n    })\n  }\n\n  /**\n   * Returns an observable of metadata for a given drafts model document\n   */\n  return function observeDocumentPairAvailability(\n    id: string,\n    {version}: {version?: string} = {},\n  ): Observable<DraftsModelDocumentAvailability> {\n    const draftId = getDraftId(id)\n    const publishedId = getPublishedId(id)\n    const versionId = version ? getVersionId(id, version) : undefined\n    return combineLatest([\n      observeDocumentAvailability(draftId),\n      observeDocumentAvailability(publishedId),\n      ...(versionId ? [observeDocumentAvailability(versionId)] : []),\n    ]).pipe(\n      distinctUntilChanged(shallowEquals),\n      map(([draftReadability, publishedReadability, versionReadability]) => {\n        return {\n          draft: draftReadability,\n          published: publishedReadability,\n          ...(versionReadability\n            ? {\n                version: versionReadability,\n              }\n            : {}),\n        }\n      }),\n    )\n  }\n}\n","import {type SanityClient} from '@sanity/client'\nimport {timer} from 'rxjs'\n\nimport {LISTENER_RESET_DELAY} from './constants'\nimport {shareReplayLatest} from './utils/shareReplayLatest'\n\n/**\n * @internal\n * Creates a listener that will emit 'welcome' for all new subscribers immediately, and thereafter emit at every mutation event\n */\nexport function createGlobalListener(client: SanityClient) {\n  return client\n    .listen(\n      '*',\n      {},\n      {\n        events: ['welcome', 'mutation', 'reconnect'],\n        includeResult: false,\n        includePreviousRevision: false,\n        includeMutations: false,\n        includeAllVersions: true,\n        visibility: 'query',\n        effectFormat: 'mendoza',\n        tag: 'preview.global',\n      },\n    )\n    .pipe(\n      shareReplayLatest({\n        predicate: (event) => event.type === 'welcome' || event.type === 'reconnect',\n        resetOnRefCountZero: () => timer(LISTENER_RESET_DELAY),\n      }),\n    )\n}\n","import {type MutationEvent, type SanityClient, type WelcomeEvent} from '@sanity/client'\nimport {type SanityDocument} from '@sanity/types'\nimport {memoize, uniq} from 'lodash'\nimport {type RawPatch} from 'mendoza'\nimport {EMPTY, finalize, type Observable, of} from 'rxjs'\nimport {concatMap, map, scan, shareReplay} from 'rxjs/operators'\n\nimport {applyMutationEventEffects} from './utils/applyMendozaPatch'\nimport {debounceCollect} from './utils/debounceCollect'\n\nexport type ListenerMutationEventLike = Pick<\n  MutationEvent,\n  'type' | 'documentId' | 'previousRev' | 'resultRev'\n> & {\n  effects?: {\n    apply: unknown[]\n  }\n}\nexport interface ObserveDocumentAPIConfig {\n  dataset?: string\n  projectId?: string\n  apiVersion?: string\n}\n\nexport function createObserveDocument({\n  mutationChannel,\n  client,\n}: {\n  client: SanityClient\n  mutationChannel: Observable<WelcomeEvent | ListenerMutationEventLike>\n}) {\n  const getBatchFetcher = memoize(\n    function getBatchFetcher(apiConfig: {dataset: string; projectId: string; apiVersion: string}) {\n      const _client = client.withConfig(apiConfig)\n\n      function batchFetchDocuments(ids: [string][]) {\n        return _client.observable\n          .fetch(`*[_id in $ids]`, {ids: uniq(ids.flat())}, {tag: 'preview.observe-document'})\n          .pipe(\n            // eslint-disable-next-line max-nested-callbacks\n            map((result) => ids.map(([id]) => result.find((r: {_id: string}) => r._id === id))),\n          )\n      }\n      return debounceCollect(batchFetchDocuments, 100)\n    },\n    (apiConfig) => apiConfig.dataset + apiConfig.projectId + apiConfig.apiVersion,\n  )\n\n  const MEMO: Record<string, Observable<SanityDocument | undefined>> = {}\n\n  function observeDocument(id: string, apiConfig?: ObserveDocumentAPIConfig) {\n    const _apiConfig = {\n      dataset: apiConfig?.dataset || client.config().dataset!,\n      projectId: apiConfig?.projectId || client.config().projectId!,\n      apiVersion: apiConfig?.apiVersion || client.config().apiVersion!,\n    }\n    const fetchDocument = getBatchFetcher(_apiConfig)\n    return mutationChannel.pipe(\n      concatMap((event) => {\n        if (event.type === 'welcome') {\n          return fetchDocument(id).pipe(map((document) => ({type: 'sync' as const, document})))\n        }\n        return event.documentId === id ? of(event) : EMPTY\n      }),\n      scan((current: SanityDocument | undefined, event) => {\n        if (event.type === 'sync') {\n          return event.document\n        }\n        if (event.type === 'mutation') {\n          return applyMutationEvent(current, event)\n        }\n        //@ts-expect-error - this should never happen\n        throw new Error(`Unexpected event type: \"${event.type}\"`)\n      }, undefined),\n    )\n  }\n  return function memoizedObserveDocument(id: string, apiConfig?: ObserveDocumentAPIConfig) {\n    const key = apiConfig ? `${id}-${JSON.stringify(apiConfig)}` : id\n    if (!(key in MEMO)) {\n      MEMO[key] = observeDocument(id, apiConfig).pipe(\n        finalize(() => delete MEMO[key]),\n        shareReplay({bufferSize: 1, refCount: true}),\n      )\n    }\n    return MEMO[key]\n  }\n}\n\nfunction applyMutationEvent(current: SanityDocument | undefined, event: ListenerMutationEventLike) {\n  if (event.previousRev !== current?._rev) {\n    console.warn('Document out of sync, skipping mutation')\n    return current\n  }\n  if (!event.effects) {\n    throw new Error(\n      'Mutation event is missing effects. Is the listener set up with effectFormat=mendoza?',\n    )\n  }\n  return applyMutationEventEffects(\n    current,\n    event as {effects: {apply: RawPatch}; previousRev: string; resultRev: string},\n  )\n}\n","import {type PreviewableType, type PreviewPath} from '../types'\n\nconst DEFAULT_PREVIEW_PATHS: PreviewPath[] = [['_createdAt'], ['_updatedAt']]\n\n/** @internal */\nexport function getPreviewPaths(preview: PreviewableType['preview']): PreviewPath[] | undefined {\n  const selection = preview?.select\n\n  if (!selection) return undefined\n\n  // Transform the selection dot-notation paths into array paths.\n  // Example: ['object.title', 'name'] => [['object', 'title'], ['name']]\n  const paths = Object.values(selection).map((value) => String(value).split('.')) || []\n\n  // Return the paths with the default preview paths appended.\n  return paths.concat(DEFAULT_PREVIEW_PATHS)\n}\n","import {isPortableTextSpan, isPortableTextTextBlock, type PortableTextBlock} from '@sanity/types'\n\nexport function isPortableTextPreviewValue(value: unknown): value is PortableTextBlock[] {\n  return Array.isArray(value) && (value.length === 0 || value.some(isPortableTextTextBlock))\n}\n\nexport function extractTextFromBlocks(blocks: unknown): string {\n  const firstBlock = Array.isArray(blocks) && blocks.find(isPortableTextTextBlock)\n  if (!firstBlock || !firstBlock.children) {\n    return ''\n  }\n\n  return firstBlock.children\n    .filter(isPortableTextSpan)\n    .map((span) => span.text)\n    .join('')\n}\n","import {\n  isTitledListValue,\n  type PrepareViewOptions,\n  type PreviewValue,\n  type SchemaType,\n  type TitledListValue,\n} from '@sanity/types'\nimport {debounce, flatten, get, isPlainObject, pick, uniqBy} from 'lodash'\n\nimport {isRecord} from '../../util'\nimport {INVALID_PREVIEW_FALLBACK} from '../constants'\nimport {type PreviewableType} from '../types'\nimport {keysOf} from './keysOf'\nimport {extractTextFromBlocks, isPortableTextPreviewValue} from './portableText'\n\nconst PRESERVE_KEYS = ['_id', '_type', '_upload', '_createdAt', '_updatedAt']\nconst EMPTY: never[] = []\n\ntype SelectedValue = Record<string, unknown>\n\nexport type PrepareInvocationResult = {\n  selectedValue?: SelectedValue\n  returnValue: null | PreviewValue\n  errors: Error[]\n}\n\nconst errorCollector = (() => {\n  let errorsByType: Record<string, {error: Error; type: PreviewableType; value: SelectedValue}[]> =\n    {}\n\n  return {\n    add: (type: PreviewableType, value: SelectedValue, error: Error) => {\n      // cross dataset referenced types have a `type` (string) property instead of `name`\n      const typeName = 'name' in type ? type.name : type.type\n      if (!errorsByType[typeName]) {\n        errorsByType[typeName] = []\n      }\n      errorsByType[typeName].push({error: error, type: type, value})\n    },\n    getAll() {\n      return errorsByType\n    },\n    clear() {\n      errorsByType = {}\n    },\n  }\n})()\n\nconst reportErrors = debounce(() => {\n  /* eslint-disable no-console */\n  const errorsByType = errorCollector.getAll()\n  const uniqueErrors = flatten(\n    Object.keys(errorsByType).map((typeName) => {\n      const entries = errorsByType[typeName]\n      return uniqBy(entries, (entry) => entry.error.message)\n    }),\n  )\n  const errorCount = uniqueErrors.length\n  if (errorCount === 0) {\n    return\n  }\n\n  console.groupCollapsed(\n    `%cHeads up! Got ${\n      errorCount === 1 ? 'error' : `${errorCount} errors`\n    } while preparing data for preview. Click for details.`,\n    'color: #ff7e7c',\n  )\n\n  Object.keys(errorsByType).forEach((typeName) => {\n    const entries = errorsByType[typeName]\n    const first = entries[0]\n    console.group(`Check the preview config for schema type \"${typeName}\": %o`, first.type.preview)\n    const uniqued = uniqBy(entries, (entry) => entry.error.message)\n    uniqued.forEach((entry) => {\n      if ((entry.error as any).type === 'returnValueError') {\n        const hasPrepare = typeof entry.type.preview?.prepare === 'function'\n        const {value, error} = entry\n        console.log(\n          `Encountered an invalid ${\n            hasPrepare\n              ? 'return value when calling prepare(%o)'\n              : 'value targeted by preview.select'\n          }:`,\n          value,\n        )\n        console.error(error)\n      }\n      if ((entry.error as any).type === 'prepareError') {\n        const {value, error} = entry\n        console.log('Encountered an error when calling prepare(%o):', value)\n        console.error(error)\n      }\n    })\n    console.groupEnd()\n  })\n  console.groupEnd()\n  errorCollector.clear()\n  /* eslint-enable no-console */\n}, 1000)\n\nconst isRenderable =\n  (fieldName: string) =>\n  (value: unknown): Error[] => {\n    const type = typeof value\n    if (\n      value === null ||\n      type === 'undefined' ||\n      type === 'string' ||\n      type === 'number' ||\n      type === 'boolean'\n    ) {\n      return EMPTY\n    }\n    return [\n      assignType(\n        'returnValueError',\n        new Error(\n          `The \"${fieldName}\" field should be a string, number, boolean, undefined or null, instead saw ${inspect(\n            value,\n          )}`,\n        ),\n      ),\n    ]\n  }\nconst FIELD_NAME_VALIDATORS: Record<string, (value: unknown) => Error[]> = {\n  media: () => {\n    // not sure how to validate media as it would  possibly involve executing a function and check the\n    // return value\n    return EMPTY\n  },\n  title: isRenderable('title'),\n  subtitle: isRenderable('subtitle'),\n  description: isRenderable('description'),\n  imageUrl: isRenderable('imageUrl'),\n  date: isRenderable('date'),\n}\n\nfunction inspect(val: unknown, prefixType = true): string {\n  if (isRecord(val)) {\n    const keys = Object.keys(val)\n    const ellipse = keys.length > 3 ? '...' : ''\n    const prefix = `object with keys `\n    return `${prefixType ? prefix : ''}{${keys.slice(0, 3).join(', ')}${ellipse}}`\n  }\n  if (Array.isArray(val)) {\n    const ellipse = val.length > 3 ? '...' : ''\n    const prefix = `array with `\n    return `${prefixType ? prefix : ''}[${val.map((v) => inspect(v, false))}${ellipse}]`\n  }\n  return `the ${typeof val} ${val}`\n}\n\nfunction validateFieldValue(fieldName: string, fieldValue: unknown) {\n  if (typeof fieldValue === 'undefined') {\n    return EMPTY\n  }\n  const validator = FIELD_NAME_VALIDATORS[fieldName]\n  return (validator && validator(fieldValue)) || EMPTY\n}\n\nfunction assignType(type: string, error: Error) {\n  return Object.assign(error, {type})\n}\n\nfunction validatePreparedValue(preparedValue: PreviewValue | null) {\n  if (!isPlainObject(preparedValue) || preparedValue === null) {\n    return [\n      assignType(\n        'returnValueError',\n        new Error(\n          `Invalid return value. Expected a plain object with at least a 'title' field, instead saw ${inspect(\n            preparedValue,\n          )}`,\n        ),\n      ),\n    ]\n  }\n\n  return Object.entries(preparedValue).reduce<Error[]>((acc, [fieldName, fieldValue]) => {\n    return [...acc, ...validateFieldValue(fieldName, fieldValue)]\n  }, EMPTY)\n}\n\nfunction validateReturnedPreview(result: PrepareInvocationResult) {\n  return {\n    ...result,\n    errors: [...(result.errors || []), ...validatePreparedValue(result.returnValue)],\n  }\n}\n\nfunction defaultPrepare(value: SelectedValue) {\n  return keysOf(value).reduce((acc: SelectedValue, fieldName: keyof SelectedValue) => {\n    const val = value[fieldName]\n    return {\n      ...acc,\n      [fieldName]: isPortableTextPreviewValue(val) ? extractTextFromBlocks(val) : val,\n    }\n  }, {})\n}\n\nexport function invokePrepare(\n  type: PreviewableType,\n  value: SelectedValue,\n  viewOptions: PrepareViewOptions = {},\n): PrepareInvocationResult {\n  const prepare = type.preview?.prepare\n  try {\n    return {\n      returnValue: prepare\n        ? (prepare(value, viewOptions) as Record<string, unknown>)\n        : defaultPrepare(value),\n      errors: EMPTY,\n    }\n  } catch (error) {\n    return {\n      returnValue: null,\n      errors: [assignType('prepareError', error)],\n    }\n  }\n}\n\nfunction withErrors(\n  result: {errors: Error[]},\n  type: PreviewableType,\n  selectedValue: SelectedValue,\n): PreviewValue {\n  result.errors.forEach((error) => errorCollector.add(type, selectedValue, error))\n  reportErrors()\n\n  return INVALID_PREVIEW_FALLBACK\n}\n\ninterface EnumListOptions {\n  list: TitledListValue[] | unknown[]\n}\n\nfunction hasEnumListOptions(\n  type: SchemaType,\n): type is SchemaType & {options: SchemaType['options'] & EnumListOptions} {\n  const options = type.options && typeof type.options === 'object' ? type.options : false\n  if (!options || !('list' in options)) {\n    return false\n  }\n\n  const listOptions = (options as EnumListOptions).list\n  return Array.isArray(listOptions)\n}\n\nfunction getListOptions(type: SchemaType): TitledListValue[] | undefined {\n  if (!hasEnumListOptions(type)) {\n    return undefined\n  }\n\n  const listOptions = type.options.list as EnumListOptions['list']\n  return listOptions.map((option) =>\n    isTitledListValue(option) ? option : ({title: option, value: option} as TitledListValue),\n  )\n}\n\n/** @internal */\nexport function prepareForPreview(\n  rawValue: unknown,\n  type: PreviewableType,\n  viewOptions: PrepareViewOptions = {},\n): PreviewValue & {_createdAt?: string; _updatedAt?: string} {\n  const hasCustomPrepare = typeof type.preview?.prepare === 'function'\n  const selection: Record<string, string> = type.preview?.select || {}\n  const targetKeys = Object.keys(selection)\n\n  const selectedValue = targetKeys.reduce<Record<string, unknown>>((acc, key) => {\n    // Find the field the value belongs to\n    const typeWithFields = 'fields' in type ? type : null\n    const targetFieldName = selection[key]\n    const valueField = typeWithFields?.fields?.find((f) => f.name === targetFieldName)\n    const listOptions = valueField && getListOptions(valueField.type)\n\n    // If the user has _not_ specified a `prepare()` function for the preview, and the\n    // field type has an `options.list`, we want to use the title of the selected item\n    // as the preview value. If, however, there _is_ a custom `prepare()`, we leave this\n    // mapping up to the user to perform should they want to. This is both to maintain\n    // backwards compatiblity, but also to allow using the raw value for prepare operations\n    if (!hasCustomPrepare && listOptions) {\n      // Find the selected option that matches the raw value\n      const selectedOption =\n        listOptions && listOptions.find((opt) => opt.value === get(rawValue, selection[key]))\n      acc[key] = selectedOption ? selectedOption.value : get(rawValue, selection[key])\n    } else {\n      acc[key] = get(rawValue, selection[key])\n    }\n\n    return acc\n  }, {})\n\n  const prepareResult = invokePrepare(type, selectedValue, viewOptions)\n  if (prepareResult.errors.length > 0) {\n    return withErrors(prepareResult, type, selectedValue)\n  }\n\n  const returnValueResult = validateReturnedPreview(prepareResult)\n  return returnValueResult.errors.length > 0\n    ? withErrors(returnValueResult, type, selectedValue)\n    : {...pick(rawValue, PRESERVE_KEYS), ...prepareResult.returnValue}\n}\n","import {type StackablePerspective} from '@sanity/client'\nimport {\n  isCrossDatasetReference,\n  isCrossDatasetReferenceSchemaType,\n  isReferenceSchemaType,\n  type PrepareViewOptions,\n} from '@sanity/types'\nimport {isPlainObject} from 'lodash'\nimport {type Observable, of} from 'rxjs'\nimport {map, switchMap} from 'rxjs/operators'\n\nimport {type ObserveForPreviewFn} from './documentPreviewStore'\nimport {\n  type ApiConfig,\n  type ObserveDocumentTypeFromIdFn,\n  type ObservePathsFn,\n  type PreparedSnapshot,\n  type Previewable,\n  type PreviewableType,\n} from './types'\nimport {getPreviewPaths} from './utils/getPreviewPaths'\nimport {invokePrepare, prepareForPreview} from './utils/prepareForPreview'\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return isPlainObject(value)\n}\n\nfunction isReference(value: unknown): value is {_ref: string} {\n  return isPlainObject(value)\n}\n\n/**\n * Takes a value and its type and prepares a snapshot for it that can be passed to a preview component\n * @internal\n */\nexport function createPreviewObserver(context: {\n  observeDocumentTypeFromId: ObserveDocumentTypeFromIdFn\n  observePaths: ObservePathsFn\n}): ObserveForPreviewFn {\n  const {observeDocumentTypeFromId, observePaths} = context\n\n  return function observeForPreview(\n    value: Previewable,\n    type: PreviewableType,\n    options: {\n      viewOptions?: PrepareViewOptions\n      apiConfig?: ApiConfig\n      perspective?: StackablePerspective[]\n    } = {},\n  ): Observable<PreparedSnapshot> {\n    const {viewOptions = {}, apiConfig, perspective} = options\n    if (isCrossDatasetReferenceSchemaType(type)) {\n      // if the value is of type crossDatasetReference, but has no _ref property, we cannot prepare any value for the preview\n      // and the most appropriate thing to do is to return `undefined` for snapshot\n      if (!isCrossDatasetReference(value)) {\n        return of({snapshot: undefined})\n      }\n\n      const refApiConfig = {projectId: value._projectId, dataset: value._dataset}\n\n      return observeDocumentTypeFromId(value._ref, refApiConfig, perspective).pipe(\n        switchMap((typeName) => {\n          if (typeName) {\n            const refType = type.to.find((toType) => toType.type === typeName)\n            if (refType) {\n              return observeForPreview(value, refType, {\n                apiConfig: refApiConfig,\n                viewOptions,\n                perspective,\n              })\n            }\n          }\n          return of({snapshot: undefined})\n        }),\n      )\n    }\n    if (isReferenceSchemaType(type)) {\n      // if the value is of type reference, but has no _ref property, we cannot prepare any value for the preview\n      // and the most appropriate thing to do is to return `undefined` for snapshot\n      if (!isReference(value)) {\n        return of({snapshot: undefined})\n      }\n      // Previewing references actually means getting the referenced value,\n      // and preview using the preview config of its type\n      // We do this since there's no way of knowing the type of the referenced value by looking at the reference value alone\n      return observeDocumentTypeFromId(value._ref).pipe(\n        switchMap((typeName) => {\n          if (typeName) {\n            const refType = type.to.find((toType) => toType.name === typeName)\n            if (refType) {\n              return observeForPreview(value, refType, {perspective})\n            }\n          }\n          // todo: in case we can't read the document type, we can figure out the reason why e.g. whether it's because\n          //  the document doesn't exist or it's not readable due to lack of permission.\n          //  We can use the \"observeDocumentAvailability\" function\n          //  for this, but currently not sure if needed\n          return of({snapshot: undefined})\n        }),\n      )\n    }\n    const paths = getPreviewPaths(type.preview)\n    if (paths) {\n      return observePaths(value, paths, apiConfig, perspective).pipe(\n        map((snapshot) => ({\n          type: type,\n          snapshot: snapshot ? prepareForPreview(snapshot, type, viewOptions) : null,\n        })),\n      )\n    }\n\n    // Note: this case is typically rare (or non-existent) and occurs only if\n    // the SchemaType doesn't have a `select` field. The schema compiler\n    // provides a default `preview` implementation for `object`s, `image`s,\n    // `file`s, and `document`s\n    return of({\n      type,\n      snapshot:\n        value && isRecord(value) ? invokePrepare(type, value, viewOptions).returnValue : null,\n    })\n  }\n}\n","import {type SanityDocument} from '@sanity/types'\nimport {combineLatest, type Observable, of} from 'rxjs'\nimport {map, switchMap} from 'rxjs/operators'\n\nimport {getIdPair, isRecord} from '../util'\nimport {\n  type DraftsModelDocument,\n  type ObserveDocumentAvailabilityFn,\n  type ObservePathsFn,\n  type PreviewPath,\n} from './types'\n\nexport function createObservePathsDocumentPair(options: {\n  observeDocumentPairAvailability: ObserveDocumentAvailabilityFn\n  observePaths: ObservePathsFn\n}): <T extends SanityDocument = SanityDocument>(\n  id: string,\n  paths: PreviewPath[],\n) => Observable<DraftsModelDocument<T>> {\n  const {observeDocumentPairAvailability, observePaths} = options\n\n  const ALWAYS_INCLUDED_SNAPSHOT_PATHS: PreviewPath[] = [['_updatedAt'], ['_createdAt'], ['_type']]\n\n  return function observePathsDocumentPair<T extends SanityDocument = SanityDocument>(\n    id: string,\n    paths: PreviewPath[],\n    {version}: {version?: string} = {},\n  ): Observable<DraftsModelDocument<T>> {\n    const {draftId, publishedId, versionId} = getIdPair(id, {version})\n\n    return observeDocumentPairAvailability(draftId, {version}).pipe(\n      switchMap((availability) => {\n        if (\n          !availability.draft.available &&\n          !availability.published.available &&\n          !availability.version?.available\n        ) {\n          // short circuit, neither draft nor published is available so no point in trying to get a snapshot\n          return of({\n            id: publishedId,\n            type: null,\n            draft: {\n              availability: availability.draft,\n              snapshot: undefined,\n            },\n            published: {\n              availability: availability.published,\n              snapshot: undefined,\n            },\n            ...(availability.version\n              ? {\n                  version: {\n                    availability: availability.version,\n                    snapshot: undefined,\n                  },\n                }\n              : {}),\n          })\n        }\n\n        const snapshotPaths = [...paths, ...ALWAYS_INCLUDED_SNAPSHOT_PATHS]\n\n        return combineLatest([\n          observePaths({_type: 'reference', _ref: draftId}, snapshotPaths),\n          observePaths({_type: 'reference', _ref: publishedId}, snapshotPaths),\n          ...(version ? [observePaths({_type: 'reference', _ref: versionId}, snapshotPaths)] : []),\n        ]).pipe(\n          map(([draftSnapshot, publishedSnapshot, versionSnapshot]) => {\n            // note: assume type is always the same\n            const type =\n              (isRecord(versionSnapshot) && '_type' in versionSnapshot && versionSnapshot._type) ||\n              (isRecord(draftSnapshot) && '_type' in draftSnapshot && draftSnapshot._type) ||\n              (isRecord(publishedSnapshot) &&\n                '_type' in publishedSnapshot &&\n                publishedSnapshot._type) ||\n              null\n\n            return {\n              id: publishedId,\n              type: typeof type === 'string' ? type : null,\n              draft: {\n                availability: availability.draft,\n                snapshot: draftSnapshot as T,\n              },\n              published: {\n                availability: availability.published,\n                snapshot: publishedSnapshot as T,\n              },\n              ...(availability.version\n                ? {\n                    version: {\n                      availability: availability.version,\n                      snapshot: versionSnapshot as T,\n                    },\n                  }\n                : {}),\n            }\n          }),\n        )\n      }),\n    )\n  }\n}\n","import {type QueryParams, type SanityClient} from '@sanity/client'\nimport {sortedIndex} from 'lodash'\nimport {of} from 'rxjs'\nimport {distinctUntilChanged, filter, map, mergeMap, scan, tap} from 'rxjs/operators'\n\nimport {type SourceClientOptions} from '../config/types'\nimport {versionedClient} from '../studioClient'\n\nexport type DocumentIdSetObserverState = {\n  status: 'reconnecting' | 'connected'\n  documentIds: string[]\n}\n\ninterface LiveDocumentIdSetOptions {\n  insert?: 'sorted' | 'prepend' | 'append'\n  apiVersion?: SourceClientOptions['apiVersion']\n}\n\nexport function createDocumentIdSetObserver(client: SanityClient) {\n  return function observe(\n    queryFilter: string,\n    params?: QueryParams,\n    options: LiveDocumentIdSetOptions = {},\n  ) {\n    const {insert: insertOption = 'sorted', apiVersion} = options\n\n    const query = `*[${queryFilter}]._id`\n    function fetchFilter() {\n      return versionedClient(client, apiVersion)\n        .observable.fetch(query, params, {\n          tag: 'preview.observe-document-set.fetch',\n        })\n        .pipe(\n          tap((result) => {\n            if (!Array.isArray(result)) {\n              throw new Error(\n                `Expected query to return array of documents, but got ${typeof result}`,\n              )\n            }\n          }),\n        )\n    }\n    return versionedClient(client, apiVersion)\n      .observable.listen(`*[${queryFilter}]`, params, {\n        visibility: 'transaction',\n        events: ['welcome', 'mutation', 'reconnect'],\n        includeResult: false,\n        includeMutations: false,\n        includeAllVersions: true,\n        tag: 'preview.observe-document-set.listen',\n      })\n      .pipe(\n        mergeMap((event) => {\n          return event.type === 'welcome'\n            ? fetchFilter().pipe(map((result) => ({type: 'fetch' as const, result})))\n            : of(event)\n        }),\n        scan(\n          (\n            state: DocumentIdSetObserverState | undefined,\n            event,\n          ): DocumentIdSetObserverState | undefined => {\n            if (event.type === 'reconnect') {\n              return {\n                documentIds: state?.documentIds || [],\n                ...state,\n                status: 'reconnecting' as const,\n              }\n            }\n            if (event.type === 'fetch') {\n              return {...state, status: 'connected' as const, documentIds: event.result}\n            }\n            if (event.type === 'mutation') {\n              if (event.transition === 'update') {\n                // ignore updates, as we're only interested in documents appearing and disappearing from the set\n                return state\n              }\n              if (event.transition === 'appear') {\n                return {\n                  status: 'connected',\n                  documentIds: insert(state?.documentIds || [], event.documentId, insertOption),\n                }\n              }\n              if (event.transition === 'disappear') {\n                return {\n                  status: 'connected',\n                  documentIds: state?.documentIds\n                    ? state.documentIds.filter((id) => id !== event.documentId)\n                    : [],\n                }\n              }\n            }\n            return state\n          },\n          undefined,\n        ),\n        distinctUntilChanged(),\n        filter(\n          (state: DocumentIdSetObserverState | undefined): state is DocumentIdSetObserverState =>\n            state !== undefined,\n        ),\n      )\n  }\n}\n\nfunction insert<T>(array: T[], element: T, strategy: 'sorted' | 'prepend' | 'append') {\n  let index\n  if (strategy === 'prepend') {\n    index = 0\n  } else if (strategy === 'append') {\n    index = array.length\n  } else {\n    index = sortedIndex(array, element)\n  }\n\n  return array.toSpliced(index, 0, element)\n}\n","export function hasEqualFields(fields: string[]) {\n  return (object: Record<string, any> | null, otherObject: Record<string, any> | null) => {\n    if (object === otherObject) {\n      return true\n    }\n    if (!object || !otherObject) {\n      return false\n    }\n    if (typeof object !== 'object' || typeof otherObject !== 'object') {\n      return false\n    }\n    return fields.every((field) => object[field] === otherObject[field])\n  }\n}\n","const id = <T>(value: T): T => value\n\ntype ItemSelector<T> = (element: T) => any\n\n// Takes an array and checks if each item is unique,\n// optionally by specifying an itemSelector function that will be called with\n// each item, returning the value to compare for uniqueness\nexport function isUniqueBy<T>(array: Array<T>, itemSelector: ItemSelector<T> = id): boolean {\n  let prevItem\n  let currItem\n  for (let i = 0; i < array.length; i++) {\n    if (i === 0) {\n      prevItem = itemSelector(array[i])\n      continue\n    }\n    currItem = itemSelector(array[i])\n    if (prevItem !== currItem) {\n      return false\n    }\n    prevItem = currItem\n  }\n  return true\n}\n","import {identity, sortBy, values} from 'lodash'\n\nimport {escapeField, fieldNeedsEscape} from '../../util'\nimport {INCLUDE_FIELDS_QUERY} from '../constants'\nimport {type FieldName, type Id, type Selection} from '../types'\n\ntype CombinedSelection = {\n  ids: Id[]\n  fields: FieldName[]\n  map: number[]\n}\n\ntype Doc = {\n  _id: string\n}\n\ntype Result = Doc[]\n\nexport function combineSelections(selections: Selection[]): CombinedSelection[] {\n  return values(\n    selections.reduce((output: {[key: string]: any}, [id, fields], index) => {\n      const key = sortBy(fields.join(','), identity).join('.')\n      if (!output[key]) {\n        output[key] = {fields: fields, ids: [], map: []}\n      }\n      const idx = output[key].ids.length\n      output[key].ids[idx] = id\n      output[key].map[idx] = index\n      return output\n    }, {}),\n  )\n}\n\nfunction stringifyId(id: string) {\n  return JSON.stringify(id)\n}\n\nconst maybeEscape = (fieldName: string) =>\n  fieldNeedsEscape(fieldName) ? `\"${fieldName}\": @${escapeField(fieldName)}` : fieldName\n\nfunction toSubQuery({ids, fields}: {ids: string[]; fields: string[]}) {\n  const allFields = [...INCLUDE_FIELDS_QUERY, ...fields]\n  return `*[_id in [${ids.map(stringifyId).join(',')}]][0...${ids.length}]{${allFields\n    .map(maybeEscape)\n    .join(',')}}`\n}\n\nexport function toQuery(combinedSelections: CombinedSelection[]): string {\n  return `[${combinedSelections.map(toSubQuery).join(',')}][0...${combinedSelections.length}]`\n}\n\nexport function reassemble(\n  queryResult: Result[],\n  combinedSelections: CombinedSelection[],\n): (Doc | null)[] {\n  return queryResult.reduce((reprojected: (Doc | null)[], subResult, index) => {\n    const map = combinedSelections[index].map\n    map.forEach((resultIdx, i) => {\n      const id = combinedSelections[index].ids[i]\n      const found = subResult.find((doc) => doc._id === id)\n      reprojected[resultIdx] = found || null\n    })\n    return reprojected\n  }, [])\n}\n","import {type SanityClient, type StackablePerspective} from '@sanity/client'\nimport {difference, flatten, memoize} from 'lodash'\nimport {\n  combineLatest,\n  concat,\n  defer,\n  EMPTY,\n  fromEvent,\n  merge,\n  type Observable,\n  of,\n  timer,\n} from 'rxjs'\nimport {\n  distinctUntilChanged,\n  filter,\n  map,\n  mergeMap,\n  share,\n  shareReplay,\n  startWith,\n  switchMap,\n  tap,\n} from 'rxjs/operators'\n\nimport {RELEASES_STUDIO_CLIENT_OPTIONS} from '../releases/util/releasesClient'\nimport {versionedClient} from '../studioClient'\nimport {getPublishedId, idMatchesPerspective, isVersionId} from '../util/draftUtils'\nimport {INCLUDE_FIELDS} from './constants'\nimport {\n  type ApiConfig,\n  type FieldName,\n  type Id,\n  type InvalidationChannelEvent,\n  type Selection,\n} from './types'\nimport {debounceCollect} from './utils/debounceCollect'\nimport {hasEqualFields} from './utils/hasEqualFields'\nimport {isUniqueBy} from './utils/isUniqueBy'\nimport {combineSelections, reassemble, toQuery} from './utils/optimizeQuery'\n\ntype CachedFieldObserver = {\n  id: Id\n  fields: FieldName[]\n  changes$: Observable<any>\n}\n\ntype Cache = {\n  [id: string]: CachedFieldObserver[]\n}\n\n/**\n * Note: this should be the minimal interface createObserveFields needs to function\n * It should be kept compatible with the Sanity Client\n */\nexport interface ClientLike {\n  withConfig(config: ApiConfig): ClientLike\n  observable: {\n    fetch: (\n      query: string,\n      params: Record<string, string>,\n      options: {tag: string},\n    ) => Observable<unknown>\n  }\n}\n\n/**\n * Creates a function that allows observing individual fields on a document.\n * It will automatically debounce and batch requests, and maintain an in-memory cache of the latest field values\n * @param options - Options to use when creating the observer\n * @internal\n */\nexport function createObserveFields(options: {\n  client: SanityClient\n  invalidationChannel: Observable<InvalidationChannelEvent>\n}) {\n  const {client: currentDatasetClient, invalidationChannel} = options\n\n  function fetchAllDocumentPathsWith(client: SanityClient, perspective?: StackablePerspective[]) {\n    return function fetchAllDocumentPath(selections: Selection[]) {\n      const combinedSelections = combineSelections(selections)\n      // If any document is a version document we need to use the release API version\n      const useReleaseVersion =\n        (perspective && perspective.length > 0) ||\n        combinedSelections.some((selection) => selection.ids.some(isVersionId))\n\n      return versionedClient(\n        client,\n        useReleaseVersion ? RELEASES_STUDIO_CLIENT_OPTIONS.apiVersion : undefined,\n      )\n        .observable.fetch(\n          toQuery(combinedSelections),\n          {},\n          {tag: 'preview.document-paths', perspective},\n        )\n        .pipe(map((result: any) => reassemble(result, combinedSelections)))\n    }\n  }\n  const batchFetchersCache = new Map()\n  function getBatchFetchersForPerspective(perspective?: StackablePerspective[]) {\n    const key = perspective?.join('-') || 'raw'\n    if (batchFetchersCache.has(key)) {\n      return batchFetchersCache.get(key)\n    }\n    const batchFetchers = {\n      fast: debounceCollect(fetchAllDocumentPathsWith(currentDatasetClient, perspective), 100),\n      slow: debounceCollect(fetchAllDocumentPathsWith(currentDatasetClient, perspective), 1000),\n    }\n    batchFetchersCache.set(key, batchFetchers)\n    return batchFetchers\n  }\n\n  function currentDatasetListenFields(\n    documentId: Id,\n    fields: FieldName[],\n    perspective?: StackablePerspective[],\n  ) {\n    const {fast: fetchDocumentPathsFast, slow: fetchDocumentPathsSlow} =\n      getBatchFetchersForPerspective(perspective)\n\n    const hasPerspective = perspective && perspective.length > 0\n    /**\n     * Q: Why are we using published id if perspective is provided?\n     * A: Normally, queries for fetching preview values will be based on the _id of the document,\n     * for example `*[_id == \"drafts.foo\"]`. However, if a perspective passed, the query\n     * `*[_id == \"drafts.foo\"]` will not match anything since the `_id` will always be the published id\n     * Therefore, if perspective is provided, we need to refetch using the published id instead.\n     */\n    const fetchId = hasPerspective ? getPublishedId(documentId) : documentId\n\n    return invalidationChannel.pipe(\n      filter((event) => {\n        // we always want to fetch when the listener just (re) connected\n        if (event.type === 'connected') {\n          return true\n        }\n        if (hasPerspective) {\n          // if a perspective stack was provided, we need to refetch if we receive a mutation\n          // for a document whose _id matches either:\n          // - the published _id (since it's always implied)\n          // - any version id matching the provided perspectives\n          return idMatchesPerspective(perspective, documentId)\n        }\n        // if not using perspective, refetch previews for the document that was actually changed\n        return event.documentId === documentId\n      }),\n      switchMap((event) => {\n        if (event.type === 'connected' || event.visibility === 'query') {\n          return fetchDocumentPathsFast(fetchId, fields).pipe(\n            mergeMap((result) => {\n              return concat(\n                of(result),\n                result === null // hack: if we get undefined as result here it can be because the document has\n                  ? // just been created and is not yet indexed. We therefore need to wait a bit\n                    // and then re-fetch.\n                    fetchDocumentPathsSlow(fetchId, fields)\n                  : [],\n              )\n            }),\n          )\n        }\n        return fetchDocumentPathsSlow(fetchId, fields)\n      }),\n    )\n  }\n\n  const CACHE: Cache = {} // todo: use a LRU cache instead (e.g. hashlru or quick-lru)\n\n  const getBatchFetcherForDataset = memoize(\n    function getBatchFetcherForDataset(apiConfig: ApiConfig) {\n      const client = currentDatasetClient.withConfig(apiConfig)\n      const fetchAll = fetchAllDocumentPathsWith(client, ['published'])\n      return debounceCollect(fetchAll, 10)\n    },\n    (apiConfig) => apiConfig.dataset + apiConfig.projectId,\n  )\n\n  const CROSS_DATASET_PREVIEW_POLL_INTERVAL = 10000\n  // We want to poll for changes in the other dataset, but only when window/tab is visible\n  // This sets up a shared stream that emits an event every `POLL_INTERVAL` milliseconds as long as the\n  // document is visible. It starts emitting immediately (if the page is visible)\n  const visiblePoll$ = fromEvent(document, 'visibilitychange').pipe(\n    startWith(0),\n    map(() => document.visibilityState === 'visible'),\n    switchMap((visible) => (visible ? timer(0, CROSS_DATASET_PREVIEW_POLL_INTERVAL) : EMPTY)),\n    share(),\n  )\n\n  function crossDatasetListenFields(id: Id, fields: FieldName[], apiConfig: ApiConfig) {\n    return visiblePoll$.pipe(startWith(0)).pipe(\n      switchMap(() => {\n        const batchFetcher = getBatchFetcherForDataset(apiConfig)\n        return batchFetcher(id, fields)\n      }),\n    )\n  }\n\n  function createCachedFieldObserver<T>(\n    id: string,\n    fields: FieldName[],\n    apiConfig?: ApiConfig,\n    perspective?: StackablePerspective[],\n  ): CachedFieldObserver {\n    // Note: `undefined` means the memo has not been set, while `null` means the memo is explicitly set to null (e.g. we did fetch, but got null back)\n    let latest: T | undefined | null = undefined\n    const changes$ = merge(\n      defer(() => (latest === undefined ? EMPTY : of(latest))),\n      (apiConfig\n        ? (crossDatasetListenFields(id, fields, apiConfig) as any)\n        : currentDatasetListenFields(id, fields, perspective)) as Observable<T>,\n    ).pipe(\n      tap((v: T | null) => (latest = v)),\n      shareReplay({refCount: true, bufferSize: 1}),\n    )\n\n    return {id, fields, changes$}\n  }\n\n  function cachedObserveFields(\n    id: Id,\n    fields: FieldName[],\n    apiConfig?: ApiConfig,\n    perspective?: StackablePerspective[],\n  ) {\n    const cacheKey = apiConfig\n      ? `${apiConfig.projectId}:${apiConfig.dataset}:${id}`\n      : `$current$-${id}-${perspective?.join('-') || 'raw'}`\n\n    if (!(cacheKey in CACHE)) {\n      CACHE[cacheKey] = []\n    }\n\n    const existingObservers = CACHE[cacheKey]\n    const missingFields = difference(\n      fields,\n      flatten(existingObservers.map((cachedFieldObserver) => cachedFieldObserver.fields)),\n    )\n\n    if (missingFields.length > 0) {\n      existingObservers.push(createCachedFieldObserver(id, fields, apiConfig, perspective))\n    }\n\n    const cachedFieldObservers = existingObservers\n      .filter((observer) => observer.fields.some((fieldName) => fields.includes(fieldName)))\n      .map((cached) => cached.changes$)\n\n    return combineLatest(cachedFieldObservers).pipe(\n      // in the event that a document gets deleted, the cached values will be updated to store `undefined`\n      // if this happens, we should not pick any fields from it, but rather just return null\n      map((snapshots) => snapshots.filter(Boolean)), // make sure all snapshots agree on same revision\n      filter((snapshots) => isUniqueBy(snapshots, (snapshot) => snapshot._rev)), // pass on value with the requested fields (or null if value is deleted)\n      map((snapshots) => (snapshots.length === 0 ? null : pickFrom(snapshots, fields))), // emit values only if changed\n      distinctUntilChanged(hasEqualFields(fields)),\n    )\n  }\n\n  return cachedObserveFields\n\n  function pickFrom(objects: Record<string, any>[], fields: string[]) {\n    return [...INCLUDE_FIELDS, ...fields].reduce((result, fieldName) => {\n      const value = getFirstFieldValue(objects, fieldName)\n      if (value !== undefined) {\n        ;(result as any)[fieldName] = value\n      }\n      return result\n    }, {})\n  }\n\n  function getFirstFieldValue(objects: Record<string, any>[], fieldName: string) {\n    let value\n    objects.some((object) => {\n      if (fieldName in object) {\n        value = object[fieldName]\n        return true\n      }\n      return false\n    })\n    return value\n  }\n}\n","import {\n  type MutationEvent,\n  type QueryParams,\n  type SanityClient,\n  type StackablePerspective,\n  type WelcomeEvent,\n} from '@sanity/client'\nimport {type PrepareViewOptions, type SanityDocument} from '@sanity/types'\nimport {combineLatest, type Observable} from 'rxjs'\nimport {distinctUntilChanged, filter, map} from 'rxjs/operators'\n\nimport {isRecord} from '../util'\nimport {createPreviewAvailabilityObserver} from './availability'\nimport {createGlobalListener} from './createGlobalListener'\nimport {createObserveDocument, type ObserveDocumentAPIConfig} from './createObserveDocument'\nimport {createPathObserver} from './createPathObserver'\nimport {createPreviewObserver} from './createPreviewObserver'\nimport {createObservePathsDocumentPair} from './documentPair'\nimport {createDocumentIdSetObserver, type DocumentIdSetObserverState} from './liveDocumentIdSet'\nimport {createObserveFields} from './observeFields'\nimport {\n  type ApiConfig,\n  type DraftsModelDocument,\n  type DraftsModelDocumentAvailability,\n  type ObservePathsFn,\n  type PreparedSnapshot,\n  type Previewable,\n  type PreviewableType,\n  type PreviewPath,\n} from './types'\n\n/**\n * @hidden\n * @beta */\nexport type ObserveForPreviewFn = (\n  value: Previewable,\n  type: PreviewableType,\n  options?: {\n    viewOptions?: PrepareViewOptions\n    perspective?: StackablePerspective[]\n    apiConfig?: ApiConfig\n  },\n) => Observable<PreparedSnapshot>\n\n/**\n * The document preview store supports subscribing to content for previewing purposes.\n * Documents observed by this store will be kept in sync and receive real-time updates from all collaborators,\n * but has no support for optimistic updates, so any local edits will require a server round-trip before becoming visible,\n * which means this store is less suitable for real-time editing scenarios.\n *\n * @hidden\n * @beta */\nexport interface DocumentPreviewStore {\n  observePaths: ObservePathsFn\n  observeForPreview: ObserveForPreviewFn\n  observeDocumentTypeFromId: (id: string, apiConfig?: ApiConfig) => Observable<string | undefined>\n\n  /**\n   *\n   * @hidden\n   * @beta\n   */\n  unstable_observeDocumentPairAvailability: (\n    id: string,\n    options?: {version?: string},\n  ) => Observable<DraftsModelDocumentAvailability>\n\n  unstable_observePathsDocumentPair: <T extends SanityDocument = SanityDocument>(\n    id: string,\n    paths: PreviewPath[],\n    options?: {version?: string},\n  ) => Observable<DraftsModelDocument<T>>\n\n  /**\n   * Observes a set of document IDs that matches the given groq-filter. The document ids are returned in ascending order and will update in real-time\n   * Whenever a document appears or disappears from the set, a new array with the updated set of IDs will be pushed to subscribers.\n   * The query is performed once, initially, and thereafter the set of ids are patched based on the `appear` and `disappear`\n   * transitions on the received listener events.\n   * This provides a lightweight way of subscribing to a list of ids for simple cases where you just want to subscribe to a set of documents ids\n   * that matches a particular filter.\n   * @hidden\n   * @beta\n   * @param filter - A groq filter to use for the document set\n   * @param params - Parameters to use with the groq filter\n   * @param options - Options for the observer\n   * @param apiVersion - Specify the API version to use for the query\n   */\n  unstable_observeDocumentIdSet: (\n    filter: string,\n    params?: QueryParams,\n    options?: {\n      /**\n       * Where to insert new items into the set. Defaults to 'sorted' which is based on the lexicographic order of the id\n       */\n      insert?: 'sorted' | 'prepend' | 'append'\n      apiVersion?: string\n    },\n  ) => Observable<DocumentIdSetObserverState>\n\n  /**\n   * Observe a complete document with the given ID\n   * @hidden\n   * @beta\n   */\n  unstable_observeDocument: (\n    id: string,\n    clientConfig?: ObserveDocumentAPIConfig,\n  ) => Observable<SanityDocument | undefined>\n  /**\n   * Observe a list of complete documents with the given IDs\n   * @hidden\n   * @beta\n   */\n  unstable_observeDocuments: (\n    ids: string[],\n    clientConfig?: ObserveDocumentAPIConfig,\n  ) => Observable<(SanityDocument | undefined)[]>\n}\n\n/** @internal */\nexport interface DocumentPreviewStoreOptions {\n  client: SanityClient\n}\n\n/** @internal */\nexport function createDocumentPreviewStore({\n  client,\n}: DocumentPreviewStoreOptions): DocumentPreviewStore {\n  const versionedClient = client.withConfig({apiVersion: '2025-02-19'})\n  const globalListener = createGlobalListener(versionedClient).pipe(\n    filter(\n      (event): event is MutationEvent | WelcomeEvent =>\n        // ignore reconnect events for now until we've verified that downstream consumers can handle them\n        event.type === 'mutation' || event.type === 'welcome',\n    ),\n  )\n  const invalidationChannel = globalListener.pipe(\n    map((event) => (event.type === 'welcome' ? {type: 'connected' as const} : event)),\n  )\n\n  const observeDocument = createObserveDocument({client, mutationChannel: globalListener})\n  const observeFields = createObserveFields({client: versionedClient, invalidationChannel})\n  const observePaths = createPathObserver({observeFields})\n\n  function observeDocumentTypeFromId(\n    id: string,\n    apiConfig?: ApiConfig,\n    perspective?: StackablePerspective[],\n  ): Observable<string | undefined> {\n    return observePaths({_type: 'reference', _ref: id}, ['_type'], apiConfig, perspective).pipe(\n      map((res) => (isRecord(res) && typeof res._type === 'string' ? res._type : undefined)),\n      distinctUntilChanged(),\n    )\n  }\n\n  const observeDocumentIdSet = createDocumentIdSetObserver(versionedClient)\n\n  const observeForPreview = createPreviewObserver({observeDocumentTypeFromId, observePaths})\n  const observeDocumentPairAvailability = createPreviewAvailabilityObserver(\n    versionedClient,\n    observePaths,\n  )\n\n  const observePathsDocumentPair = createObservePathsDocumentPair({\n    observeDocumentPairAvailability,\n    observePaths,\n  })\n\n  // @todo: explain why the API is like this now, and that it should not be like this in the future!\n\n  return {\n    observePaths,\n    observeForPreview,\n    observeDocumentTypeFromId,\n\n    unstable_observeDocumentIdSet: observeDocumentIdSet,\n    unstable_observeDocument: observeDocument,\n    unstable_observeDocuments: (ids: string[]) =>\n      combineLatest(ids.map((id) => observeDocument(id))),\n    unstable_observeDocumentPairAvailability: observeDocumentPairAvailability,\n    unstable_observePathsDocumentPair: observePathsDocumentPair,\n  }\n}\n","import {type SanityDocument} from '@sanity/types'\nimport {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {map} from 'rxjs/operators'\n\nimport {useDocumentPreviewStore} from '../store/_legacy/datastores'\nimport {type ObserveDocumentAPIConfig} from './createObserveDocument'\n\nconst INITIAL_STATE = {loading: true, document: null}\n\n/**\n * @internal\n * @beta\n *\n * Observes a document by its ID and returns the document and loading state\n * it will listen to the document changes.\n */\nexport function useObserveDocument<T extends SanityDocument>(\n  documentId: string,\n  apiConfig?: ObserveDocumentAPIConfig,\n): {\n  document: T | null\n  loading: boolean\n} {\n  const documentPreviewStore = useDocumentPreviewStore()\n  const observable = useMemo(\n    () =>\n      documentPreviewStore\n        .unstable_observeDocument(documentId, apiConfig)\n        .pipe(map((document) => ({loading: false, document: document as T}))),\n    [documentId, documentPreviewStore, apiConfig],\n  )\n  return useObservable(observable, INITIAL_STATE)\n}\n","import {type PreviewValue, type SanityDocument, type SchemaType} from '@sanity/types'\nimport {combineLatest, type Observable, of} from 'rxjs'\nimport {map, startWith} from 'rxjs/operators'\n\nimport {type PerspectiveStack} from '../../perspective/types'\nimport {getPublishedId, getVersionFromId, isVersionId} from '../../util/draftUtils'\nimport {type DocumentPreviewStore} from '../documentPreviewStore'\n\n/**\n * @internal\n */\nexport interface PreviewState {\n  isLoading?: boolean\n  /**\n   * The preview snapshot as seen through the current perspective stack\n   */\n  snapshot: PreviewValue | Partial<SanityDocument> | null\n  /**\n   * The preview snapshot in either a single `version` perspective, or the `drafts` perspective\n   * This can be used as a fallback if the document exists in e.g. drafts form, but not in the current perspective\n   */\n  original: PreviewValue | Partial<SanityDocument> | null\n}\n\n/**\n * Obtain a document's published and draft state, along with loading status.\n *\n * @internal\n */\nexport function getPreviewStateObservable(\n  documentPreviewStore: DocumentPreviewStore,\n  schemaType: SchemaType,\n  documentId: string,\n  perspective?: PerspectiveStack,\n): Observable<PreviewState> {\n  const perspectiveSnapshot = documentPreviewStore.observeForPreview(\n    {_id: getPublishedId(documentId)},\n    schemaType,\n    {perspective},\n  )\n\n  const versionOrDraftId = isVersionId(documentId) ? getVersionFromId(documentId) : 'drafts'\n\n  const preparedVersionSnapshot = versionOrDraftId\n    ? documentPreviewStore.observeForPreview({_id: getPublishedId(documentId)}, schemaType, {\n        perspective: [versionOrDraftId],\n      })\n    : of(null)\n\n  return combineLatest([perspectiveSnapshot, preparedVersionSnapshot]).pipe(\n    map(([main, version]) => ({\n      isLoading: false,\n      snapshot: main?.snapshot || null,\n      original: version?.snapshot || null,\n    })),\n    startWith({\n      isLoading: true,\n      snapshot: null,\n      original: null,\n    }),\n  )\n}\n","import {WarningOutlineIcon} from '@sanity/icons'\nimport {type PreviewValue, type SanityDocument} from '@sanity/types'\n\nfunction getMissingDocumentFallback(document: Partial<SanityDocument> | PreviewValue) {\n  return {\n    title: <em>{document.title ? String(document.title) : 'Missing document'}</em>,\n    subtitle: (\n      <em>\n        {document.title ? `Missing document ID: ${document._id}` : `Document ID: ${document._id}`}\n      </em>\n    ),\n    media: () => <WarningOutlineIcon />,\n  }\n}\n\n/**\n * @internal\n */\nexport type Sources = {\n  /**\n   * Preview snapshot with current perspective applied\n   * This takes priority of original and fallback\n   */\n  snapshot?: Partial<SanityDocument> | PreviewValue | null | undefined\n  /**\n   * Preview of the original document (e.g. without current perspective applied)\n   */\n  original?: Partial<SanityDocument> | PreviewValue | null | undefined\n  /**\n   * last resort fallback in case we don't have anything to preview\n   * this can be a hard-coded preview value, or a document stub\n   */\n  fallback?: Partial<SanityDocument> | PreviewValue\n}\n\nconst EMPTY: {[key: string]: never} = {}\n\n/**\n * Obtain document preview values used in <SanityPreview> and <SanityDefaultPreview> components.\n * Also displays fallback values if the document cannot be found.\n *\n * @internal\n */\nexport function getPreviewValueWithFallback({snapshot, original, fallback}: Sources) {\n  return snapshot || original || getMissingDocumentFallback(fallback || EMPTY)\n}\n","import {type Observable} from 'rxjs'\n\n/**\n * @internal\n */\nexport type BaseStudioRenderingContext<\n  Name extends string = string,\n  Metadata = Record<PropertyKey, never>,\n> = {\n  name: Name\n  metadata: Metadata\n}\n\n/**\n * @internal\n */\nexport type DefaultRenderingContext = BaseStudioRenderingContext<'default'>\n\n/**\n * @internal\n */\nexport type CoreUiRenderingContext = BaseStudioRenderingContext<\n  'coreUi',\n  {\n    environment: string\n  }\n>\n\n/**\n * @internal\n */\nexport type StudioRenderingContext = DefaultRenderingContext | CoreUiRenderingContext\n\n/**\n * @internal\n */\nexport const capabilities = ['globalUserMenu', 'globalWorkspaceControl'] as const\n\n/**\n * @internal\n */\nexport type Capability = (typeof capabilities)[number]\n\n/**\n * @internal\n */\nexport type CapabilityRecord = Partial<Record<Capability, boolean>>\n\n/**\n * @internal\n */\nexport type RenderingContextStore = {\n  renderingContext: Observable<StudioRenderingContext>\n  capabilities: Observable<CapabilityRecord>\n}\n\n/**\n * Check whether the provided value satisfies the `CoreUiRenderingContext` type.\n *\n * @internal\n */\nexport function isCoreUiRenderingContext(\n  maybeCoreUiRenderingContext: unknown,\n): maybeCoreUiRenderingContext is CoreUiRenderingContext {\n  return (\n    typeof maybeCoreUiRenderingContext === 'object' &&\n    maybeCoreUiRenderingContext !== null &&\n    'name' in maybeCoreUiRenderingContext &&\n    maybeCoreUiRenderingContext.name === 'coreUi' &&\n    'metadata' in maybeCoreUiRenderingContext &&\n    typeof maybeCoreUiRenderingContext.metadata === 'object' &&\n    maybeCoreUiRenderingContext.metadata !== null &&\n    'environment' in maybeCoreUiRenderingContext.metadata &&\n    typeof maybeCoreUiRenderingContext.metadata.environment === 'string'\n  )\n}\n","import {\n  catchError,\n  distinctUntilChanged,\n  map,\n  of,\n  type OperatorFunction,\n  pipe,\n  switchMap,\n} from 'rxjs'\n\nimport {isCoreUiRenderingContext, type StudioRenderingContext} from './types'\n\n// Core UI Rendering Context is provided via the URL query string, and remains static the entire\n// duration Studio is rendered inside the Core UI iframe.\n//\n// However, the URL query string is liable to be lost during Studio's lifecycle (for example, when\n// the user navigates to a different tool). Therefore, the URL query string is captured as soon as\n// this code is evaluated, and later referenced when a consumer subscribes to the store.\nconst INITIAL_URL_SEARCH = typeof location === 'object' ? location.search : ''\n\nconst CORE_UI_MODE_NAME = 'core-ui'\nconst CORE_UI_CONTEXT_SEARCH_PARAM = '_context'\n\n/**\n * @internal\n */\nexport function coreUiRenderingContext(\n  urlSearch: string = INITIAL_URL_SEARCH,\n): OperatorFunction<StudioRenderingContext | undefined, StudioRenderingContext | undefined> {\n  return pipe(\n    switchMap((renderingContext) => {\n      if (renderingContext) {\n        return of(renderingContext)\n      }\n\n      return of(urlSearch).pipe(\n        distinctUntilChanged(),\n        map((search) => new URLSearchParams(search).get(CORE_UI_CONTEXT_SEARCH_PARAM)),\n        map((serializedContext) => {\n          if (serializedContext === null) {\n            return undefined\n          }\n\n          const {mode, env} = JSON.parse(serializedContext)\n\n          const coreUirenderingContext = {\n            name: mode === CORE_UI_MODE_NAME ? 'coreUi' : undefined,\n            metadata: {\n              environment: env,\n            },\n          }\n\n          if (isCoreUiRenderingContext(coreUirenderingContext)) {\n            return coreUirenderingContext\n          }\n\n          return undefined\n        }),\n        catchError((error) => {\n          console.warn('Error parsing rendering context:', error)\n          return of(undefined)\n        }),\n      )\n    }),\n  )\n}\n","import {map, type OperatorFunction} from 'rxjs'\n\nimport {type DefaultRenderingContext, type StudioRenderingContext} from './types'\n\nconst DEFAULT_RENDERING_CONTEXT: DefaultRenderingContext = {\n  name: 'default',\n  metadata: {},\n}\n\n/**\n * @internal\n */\nexport function defaultRenderingContext(): OperatorFunction<\n  StudioRenderingContext | undefined,\n  StudioRenderingContext\n> {\n  return map((renderingContext) => renderingContext ?? DEFAULT_RENDERING_CONTEXT)\n}\n","import {map, type OperatorFunction} from 'rxjs'\n\nimport {type CapabilityRecord, type StudioRenderingContext} from './types'\n\nconst capabilitiesByRenderingContext: Record<StudioRenderingContext['name'], CapabilityRecord> = {\n  coreUi: {\n    globalUserMenu: true,\n    globalWorkspaceControl: true,\n  },\n  default: {},\n}\n\n/**\n * @internal\n */\nexport function listCapabilities(): OperatorFunction<StudioRenderingContext, CapabilityRecord> {\n  return map((renderingContext) => capabilitiesByRenderingContext[renderingContext.name])\n}\n","import {of, shareReplay} from 'rxjs'\n\nimport {coreUiRenderingContext} from './coreUiRenderingContext'\nimport {defaultRenderingContext} from './defaultRenderingContext'\nimport {listCapabilities} from './listCapabilities'\nimport {type RenderingContextStore} from './types'\n\n/**\n * Rendering Context Store provides information about where Studio is being rendered, and which\n * capabilities are provided by the rendering context.\n *\n * This can be used to adapt parts of the Studio UI that are provided by the rendering context,\n * such as the global user menu.\n *\n * @internal\n */\nexport function createRenderingContextStore(): RenderingContextStore {\n  const renderingContext = of(undefined).pipe(\n    coreUiRenderingContext(),\n    defaultRenderingContext(),\n    shareReplay(1),\n  )\n\n  const capabilities = renderingContext.pipe(listCapabilities(), shareReplay(1))\n\n  return {\n    renderingContext,\n    capabilities,\n  }\n}\n","import {defineEvent} from '@sanity/telemetry'\n\nexport const DocumentDesynced = defineEvent<{errorName: string}>({\n  name: 'Document Desynced',\n  version: 1,\n  description:\n    'Occurs when a \"hole\" in events from the document pair listener is detected and recovered from.',\n})\n","import {defineEvent} from '@sanity/telemetry'\n\ntype Samples = {\n  latency: number\n  transactionId: string\n  shard?: string\n}\nexport const HighListenerLatencyOccurred = defineEvent<Samples>({\n  name: 'High Listener Latency Detected',\n  version: 1,\n  description: 'Emits when a high listener latency is detected',\n})\n","import {isEqual} from 'lodash'\nimport {useEffect, useReducer, useRef} from 'react'\nimport {distinctUntilChanged, type Observable, type Subscription} from 'rxjs'\n\nimport {type LoadingTuple, type PartialExcept} from '../../../util'\nimport {useGrantsStore} from '../datastores'\nimport {type DocumentValuePermission, type GrantsStore, type PermissionCheckResult} from './types'\n\n/** @internal */\nexport interface DocumentValuePermissionsOptions {\n  grantsStore: GrantsStore\n  document: Record<string, unknown>\n  permission: DocumentValuePermission\n}\n\n/**\n * Gets permissions based on the value of the document passed into the hook\n * (stateless).\n *\n * Note: this is a lower-level API (compared to `useDocumentPairPermissions`)\n * that is _not_ draft-model aware.\n *\n * As a consequence, the operations it accepts are also low-level. (e.g.\n * `'publish'` permissions can't be determined with this API). This is because\n * it's not possible to tell if a user can do high-level document pair\n * operations on document using only one document value.\n *\n * For example, in order to determine if a user can publish, the current value\n * of the published document needs to be pulled and checked against the user's\n * grants. If there are no matching grants, then it fails the pre-condition and\n * no operation is allowed regardless of the given document.\n *\n * @see useDocumentPairPermissions\n *\n * @internal\n */\nexport function getDocumentValuePermissions({\n  grantsStore,\n  document,\n  permission,\n}: DocumentValuePermissionsOptions): Observable<PermissionCheckResult> {\n  const {checkDocumentPermission} = grantsStore\n\n  return checkDocumentPermission(permission, document)\n}\n\nconst INITIAL_STATE: LoadingTuple<PermissionCheckResult | undefined> = [undefined, true]\n\nfunction stateReducer(\n  prev: LoadingTuple<PermissionCheckResult | undefined>,\n  action:\n    | {type: 'loading'}\n    | {type: 'value'; value: PermissionCheckResult}\n    | {type: 'error'; error: unknown},\n): LoadingTuple<PermissionCheckResult | undefined> {\n  const [prevResult, prevIsLoading] = prev\n  switch (action.type) {\n    // Keep the old value around while loading a new one. Prevents \"jittering\" UIs, and permissions\n    // usually don't change _that_ rapidly (this hook runs on every single document change).\n    case 'loading':\n      return [prevResult, true]\n    case 'value':\n      // Signal \"no update\" to React if we've got the same value as before by returning old state\n      return !prevIsLoading && isEqual(action.value, prevResult) ? prev : [action.value, false]\n    case 'error':\n      throw action.error\n    default:\n      throw new Error(`Invalid action type: ${action}`)\n  }\n}\n\n/** @internal */\nexport function useDocumentValuePermissions({\n  document,\n  permission,\n  grantsStore: specifiedGrantsStore,\n}: PartialExcept<DocumentValuePermissionsOptions, 'permission' | 'document'>): LoadingTuple<\n  PermissionCheckResult | undefined\n> {\n  const defaultGrantsStore = useGrantsStore()\n  const grantsStore = specifiedGrantsStore || defaultGrantsStore\n\n  const [state, dispatch] = useReducer(stateReducer, INITIAL_STATE)\n  const subscriptionRef = useRef<Subscription | null>(null)\n\n  useEffect(() => {\n    dispatch({type: 'loading'})\n\n    // Unsubscribe from any previous subscription\n    if (subscriptionRef.current) {\n      subscriptionRef.current.unsubscribe()\n    }\n\n    const permissions$ = getDocumentValuePermissions({\n      grantsStore,\n      document,\n      permission,\n    })\n\n    subscriptionRef.current = permissions$\n      .pipe(distinctUntilChanged((prev, next) => isEqual(prev, next)))\n      .subscribe({\n        next: (value) => dispatch({type: 'value', value}),\n        error: (error) => dispatch({type: 'error', error}),\n      })\n\n    return () => {\n      if (subscriptionRef.current) {\n        subscriptionRef.current.unsubscribe()\n        subscriptionRef.current = null\n      }\n    }\n  }, [grantsStore, document, permission])\n\n  return state\n}\n","import { asapScheduler, NEVER, Subject, timer, using, } from \"rxjs\";\r\nimport { scan, switchMap, tap } from \"rxjs/operators\";\r\nexport function refCountDelay(duration, scheduler = asapScheduler) {\r\n    return (source) => {\r\n        const connectable = source;\r\n        let connectableSubscription = null;\r\n        let connectorSubscription = null;\r\n        const notifier = new Subject();\r\n        const connector = notifier.pipe(scan((count, step) => count + step, 0), switchMap((count) => {\r\n            if (count === 0) {\r\n                return timer(duration, scheduler).pipe(tap(() => {\r\n                    if (connectableSubscription) {\r\n                        connectableSubscription.unsubscribe();\r\n                        connectableSubscription = null;\r\n                    }\r\n                    if (connectorSubscription) {\r\n                        connectorSubscription.unsubscribe();\r\n                        connectorSubscription = null;\r\n                    }\r\n                }));\r\n            }\r\n            if (!connectableSubscription && count > 0) {\r\n                return timer(0, scheduler).pipe(tap(() => {\r\n                    if (!connectableSubscription) {\r\n                        connectableSubscription = connectable.connect();\r\n                    }\r\n                }));\r\n            }\r\n            return NEVER;\r\n        }));\r\n        return using(() => {\r\n            if (!connectorSubscription) {\r\n                connectorSubscription = connector.subscribe();\r\n            }\r\n            notifier.next(1);\r\n            return { unsubscribe: () => notifier.next(-1) };\r\n        }, () => source);\r\n    };\r\n}\r\nexport const refCountAuditTime = refCountDelay;\r\n//# sourceMappingURL=refCountDelay.js.map","import {concat, fromEvent, of} from 'rxjs'\nimport {distinctUntilChanged, map} from 'rxjs/operators'\n\nconst DEBUG_PREFIX = '_debug_'\n\nconst hashchange$ = typeof window === 'undefined' ? of({}) : fromEvent(window, 'hashchange')\n\nexport const debugParams$ = concat(of(0), hashchange$).pipe(\n  map(() => (typeof document === 'undefined' ? '#' : document.location.hash)),\n  distinctUntilChanged(),\n  map((hash) =>\n    hash\n      .slice(1)\n      .split(';')\n      .filter((p) => p.toLowerCase().startsWith(DEBUG_PREFIX))\n      .map((param) => param.slice(DEBUG_PREFIX.length)),\n  ),\n)\n\nexport const debugRolesParam$ = debugParams$.pipe(\n  map((args) => args.find((arg) => arg.startsWith('roles='))),\n  map(\n    (arg) =>\n      arg\n        ?.split('roles=')[1]\n        .split(',')\n        .map((r) => r.trim()) || [],\n  ),\n)\n","// NOTE: these example grants are used in other test files.\n// if you change this file, check to see if other files need to be updated too\nimport {type Grant} from '../types'\n\nexport const administrator: Grant[] = [\n  {\n    filter: '_id in path(\"**\")',\n    permissions: ['read', 'create', 'history', 'update'],\n  },\n]\n\nexport const editor: Grant[] = [\n  {\n    filter: '_id in path(\"**\")',\n    permissions: ['read', 'create', 'history', 'update'],\n  },\n]\n\nexport const developer: Grant[] = [\n  {\n    filter: '_id in path(\"**\")',\n    permissions: ['read', 'create', 'history', 'update'],\n  },\n]\n\nexport const contributor: Grant[] = [\n  {\n    filter: '_id in path(\"**\")',\n    permissions: ['read'],\n  },\n  {\n    filter: '_id in path(\"drafts.**\")',\n    permissions: ['create', 'history', 'update'],\n  },\n]\n\nexport const viewer: Grant[] = [\n  {\n    filter: '_id in path(\"**\")',\n    permissions: ['read', 'history'],\n  },\n]\n\nexport const requiresApproval: Grant[] = [\n  {\n    filter: '!locked',\n    permissions: ['read', 'create', 'update'],\n  },\n]\n\nexport const restricted: Grant[] = [\n  {\n    filter:\n      '_id in path(\"drafts.**\") && _type in [\"stringsTest\", \"book\", \"author\", \"referenceTest\"]',\n    permissions: ['read', 'create', 'history', 'update'],\n  },\n  {\n    filter: '_id in path(\"**\")',\n    permissions: ['read'],\n  },\n]\n","import {map} from 'rxjs/operators'\n\nimport {debugRolesParam$} from '../../debugParams'\nimport {type Grant} from '../types'\nimport * as grants from './exampleGrants'\nimport {type ExampleRoleName} from './exampleRoles'\n\nconst DEBUG_ROLE_GRANTS_MAP: Record<ExampleRoleName, Grant[]> = {\n  // basic\n  administrator: grants.administrator,\n  editor: grants.editor,\n  developer: grants.developer,\n  contributor: grants.contributor,\n  viewer: grants.viewer,\n\n  // custom\n  restricted: grants.restricted,\n  requiresApproval: grants.requiresApproval,\n\n  // legacy\n  read: grants.viewer,\n  write: grants.editor,\n}\n\n// todo: merge other resource keys(?)\nexport const debugGrants$ = debugRolesParam$.pipe(\n  map((roles) => {\n    if (!roles.length) return null\n\n    return roles\n      .filter((value) => Boolean(value) && value in DEBUG_ROLE_GRANTS_MAP)\n      .flatMap((roleName: ExampleRoleName) => DEBUG_ROLE_GRANTS_MAP[roleName] || [])\n  }),\n)\n","import {type SanityClient} from '@sanity/client'\nimport {type CurrentUser, type SanityDocument} from '@sanity/types'\nimport {evaluate, parse} from 'groq-js'\nimport {defer, of} from 'rxjs'\nimport {distinctUntilChanged, publishReplay, switchMap} from 'rxjs/operators'\nimport {refCountDelay} from 'rxjs-etc/operators'\nimport shallowEquals from 'shallow-equals'\n\nimport {debugGrants$} from './debug'\nimport {\n  type DocumentValuePermission,\n  type EvaluationParams,\n  type Grant,\n  type GrantsStore,\n  type PermissionCheckResult,\n} from './types'\n\nasync function getDatasetGrants(\n  client: SanityClient,\n  projectId: string,\n  dataset: string,\n): Promise<Grant[]> {\n  // `acl` stands for access control list and returns a list of grants\n  const grants: Grant[] = await client.request({\n    uri: `/projects/${projectId}/datasets/${dataset}/acl`,\n    tag: 'acl.get',\n  })\n\n  return grants\n}\n\nfunction getParams(userId: string | null): EvaluationParams {\n  const params: EvaluationParams = {}\n\n  if (userId !== null) {\n    params.identity = userId\n  }\n\n  return params\n}\n\nconst PARSED_FILTERS_MEMO = new Map()\nasync function matchesFilter(userId: string | null, filter: string, document: SanityDocument) {\n  if (!PARSED_FILTERS_MEMO.has(filter)) {\n    // note: it might be tempting to also memoize the result of the evaluation here,\n    // Currently these filters are typically evaluated whenever a document change, which means they will be evaluated\n    // quite frequently with different versions of the document. There might be some gains in finding out which subset of document\n    // properties to use as key (e.g. by looking at the parsed filter and see what properties the filter cares about)\n    // But as always, it's worth considering if the complexity/memory usage is worth the potential perf gain…\n    PARSED_FILTERS_MEMO.set(filter, parse(`*[${filter}]`))\n  }\n  const parsed = PARSED_FILTERS_MEMO.get(filter)\n\n  const evalParams = getParams(userId)\n  const {identity} = evalParams\n  const params: Record<string, unknown> = {...evalParams}\n  const data = await (await evaluate(parsed, {dataset: [document], identity, params})).get()\n  return data?.length === 1\n}\ninterface GrantsStoreOptionsCurrentUser {\n  client: SanityClient\n  /**\n   * @deprecated The `currentUser` option is deprecated. Use `userId` instead.\n   */\n  currentUser: CurrentUser | null\n}\n\ninterface GrantsStoreOptionsUserId {\n  client: SanityClient\n  userId: string | null\n}\n\n/** @internal */\nexport type GrantsStoreOptions = GrantsStoreOptionsCurrentUser | GrantsStoreOptionsUserId\n\n/** @internal */\nexport function createGrantsStore(opts: GrantsStoreOptions): GrantsStore {\n  const {client} = opts\n  const versionedClient = client.withConfig({apiVersion: '2021-06-07'})\n  const userId = 'userId' in opts ? opts.userId : opts?.currentUser?.id || null\n\n  const datasetGrants$ = defer(() => of(versionedClient.config())).pipe(\n    switchMap(({projectId, dataset}) => {\n      if (!projectId || !dataset) {\n        throw new Error('Missing projectId or dataset')\n      }\n      return getDatasetGrants(versionedClient, projectId, dataset)\n    }),\n  )\n\n  const currentUserDatasetGrants = debugGrants$.pipe(\n    switchMap((debugGrants) => (debugGrants ? of(debugGrants) : datasetGrants$)),\n    publishReplay(1),\n    refCountDelay(1000),\n  )\n\n  return {\n    checkDocumentPermission(permission: DocumentValuePermission, document: SanityDocument) {\n      return currentUserDatasetGrants.pipe(\n        switchMap((grants) => grantsPermissionOn(userId, grants, permission, document)),\n        distinctUntilChanged(shallowEquals),\n      )\n    },\n  }\n}\n\n/**\n * @internal\n * Takes a grants object, a permission and a document\n * checks whether the permission is granted for the given document\n */\nexport async function grantsPermissionOn(\n  userId: string | null,\n  grants: Grant[],\n  permission: DocumentValuePermission,\n  document: SanityDocument | null,\n): Promise<PermissionCheckResult> {\n  if (!document) {\n    // we say it's granted if null due to initial states\n    return {granted: true, reason: 'Null document, nothing to check'}\n  }\n\n  if (!grants.length) {\n    return {granted: false, reason: 'No document grants'}\n  }\n\n  const matchingGrants: Grant[] = []\n\n  for (const grant of grants) {\n    if (await matchesFilter(userId, grant.filter, document)) {\n      matchingGrants.push(grant)\n    }\n  }\n\n  const foundMatch = matchingGrants.some((grant) => grant.permissions.some((p) => p === permission))\n\n  return {\n    granted: foundMatch,\n    reason: foundMatch ? `Matching grant` : `No matching grants found`,\n  }\n}\n","import {type InitialValueResolverContext, type Schema} from '@sanity/types'\nimport {useMemo} from 'react'\nimport {combineLatest, defer, from, type Observable, of} from 'rxjs'\nimport {concatMap, map, switchMap, toArray} from 'rxjs/operators'\n\nimport {useSchema, useTemplates} from '../../../hooks'\nimport {type InitialValueTemplateItem, resolveInitialValue, type Template} from '../../../templates'\nimport {\n  createHookFromObservableFactory,\n  getDraftId,\n  getPublishedId,\n  type PartialExcept,\n} from '../../../util'\nimport {useGrantsStore} from '../datastores'\nimport {useInitialValueResolverContext} from '../document'\nimport {getDocumentValuePermissions} from './documentValuePermissions'\nimport {type GrantsStore, type PermissionCheckResult} from './types'\n\n/** @internal */\nexport interface TemplatePermissionsResult<TInitialValue = Record<string, unknown>>\n  extends PermissionCheckResult,\n    InitialValueTemplateItem {\n  granted: boolean\n  reason: string\n  resolvedInitialValue: TInitialValue\n  subtitle?: string\n  template: Template\n}\n\ntype Serializable<T> = {serialize(): T}\n\nfunction serialize<T>(item: T | Serializable<T>): T {\n  if (typeof item === 'object' && item !== null && 'serialize' in item) {\n    return serialize(item.serialize())\n  }\n\n  return item as T\n}\n\n/** @internal */\nexport interface TemplatePermissionsOptions {\n  grantsStore: GrantsStore\n  schema: Schema\n  templates: Template[]\n  templateItems: InitialValueTemplateItem[]\n  context: InitialValueResolverContext\n}\n\n/**\n * The observable version of `useTemplatePermissions`\n *\n * @internal\n */\nexport function getTemplatePermissions({\n  grantsStore,\n  templateItems,\n  templates,\n  schema,\n  context,\n}: TemplatePermissionsOptions): Observable<\n  Array<TemplatePermissionsResult<Record<string, unknown>>>\n> {\n  if (!templateItems?.length) return of([])\n\n  return defer(() => {\n    // Process items sequentially\n    return from(templateItems).pipe(\n      // Serialize and resolve each item one at a time\n      concatMap(async (item) => {\n        const serializedItem = serialize(item)\n        const template = templates.find((t) => t.id === serializedItem.templateId)\n\n        if (!template) {\n          throw new Error(`template not found: \"${serializedItem.templateId}\"`)\n        }\n\n        const resolvedInitialValue = await resolveInitialValue(\n          schema,\n          template,\n          serializedItem.parameters,\n          context,\n          {useCache: true},\n        )\n\n        return {item: serializedItem, template, resolvedInitialValue}\n      }),\n      // Convert each resolved item into a permission check observable\n      map(({item, template, resolvedInitialValue}) => {\n        const schemaType = schema.get(template.schemaType)\n\n        if (!schemaType) {\n          throw new Error(`schema type not found: \"${template.schemaType}\"`)\n        }\n\n        const liveEdit = schemaType?.liveEdit\n        const {initialDocumentId = 'dummy-id'} = item\n        const documentId = liveEdit\n          ? getPublishedId(initialDocumentId)\n          : getDraftId(initialDocumentId)\n\n        return getDocumentValuePermissions({\n          grantsStore,\n          permission: 'create',\n          document: {\n            _id: documentId,\n            ...resolvedInitialValue,\n          },\n        }).pipe(\n          map(\n            ({granted, reason}): TemplatePermissionsResult => ({\n              ...item,\n              granted,\n              reason,\n              resolvedInitialValue,\n              template,\n              i18n: item.i18n || template.i18n,\n              title: item.title || template.title,\n              subtitle:\n                schemaType.title === (item.title || template.title) ? undefined : schemaType.title,\n              description: item.description || template.description,\n              icon: item.icon || template.icon,\n            }),\n          ),\n        )\n      }),\n      // Collect all permission check observables\n      toArray(),\n      // Switch to combined observable of all permission checks\n      switchMap((observables) => combineLatest(observables)),\n    )\n  })\n}\n\n/**\n * Takes in an array of initial template values and returns an object of\n * `TemplatePermissionsResult` keyed by the IDs of the initial template values\n * given.\n *\n * The `TemplatePermissionsResult` is an object that contains a `granted`\n * boolean per key and can be used to determine if a user has the ability to\n * create documents using the given initial value template items.\n *\n * For each initial template value item, the corresponding template is found and\n * resolved against the parameters in each the initial template value item. The\n * resolved value is then run through the document-value permissions. If there\n * are any matching grants for the resolved initial template value, the\n * `TemplatePermissionsResult` will include `granted: true`.\n *\n * @internal\n */\nexport const useTemplatePermissionsFromHookFactory =\n  createHookFromObservableFactory(getTemplatePermissions)\n\n/** @internal */\nexport function useTemplatePermissions({\n  templateItems,\n  ...rest\n}: PartialExcept<TemplatePermissionsOptions, 'templateItems'>): ReturnType<\n  typeof useTemplatePermissionsFromHookFactory\n> {\n  const schema = useSchema()\n  const templates = useTemplates()\n  const grantsStore = useGrantsStore()\n  const initialValueContext = useInitialValueResolverContext()\n\n  return useTemplatePermissionsFromHookFactory(\n    useMemo(\n      () => ({\n        templateItems,\n        grantsStore: rest.grantsStore || grantsStore,\n        schema: rest.schema || schema,\n        templates: rest.templates || templates,\n        context: initialValueContext,\n      }),\n      [\n        grantsStore,\n        initialValueContext,\n        rest.grantsStore,\n        rest.schema,\n        rest.templates,\n        schema,\n        templateItems,\n        templates,\n      ],\n    ),\n  )\n}\n","/* eslint-disable no-nested-ternary */\nimport {type MendozaEffectPair, type MendozaPatch} from '@sanity/types'\n\nimport {type Chunk, type ChunkType} from '../../../../field'\nimport {type Transaction} from './types'\n\nfunction canMergeEdit(type: ChunkType) {\n  return type === 'create' || type === 'editDraft'\n}\n\nconst CHUNK_WINDOW = 5 * 60 * 1000 // 5 minutes\n\nfunction isWithinMergeWindow(a: string, b: string) {\n  return Date.parse(b) - Date.parse(a) < CHUNK_WINDOW\n}\n\nexport function mergeChunk(left: Chunk, right: Chunk): Chunk | [Chunk, Chunk] {\n  if (left.end !== right.start) throw new Error('chunks are not next to each other')\n\n  // TODO: How to detect first squash/create\n\n  const draftState = combineState(left.draftState, right.draftState)\n  const publishedState = combineState(left.publishedState, right.publishedState)\n\n  if (left.type === 'delete' && right.type === 'editDraft') {\n    return [left, {...right, type: 'create', draftState, publishedState}]\n  }\n\n  // Convert deletes into either discardDraft or unpublish depending on what's been deleted.\n  if (right.type === 'delete') {\n    if (draftState === 'missing' && publishedState === 'present') {\n      return [left, {...right, type: 'discardDraft', draftState, publishedState}]\n    }\n\n    if (draftState === 'present' && publishedState === 'missing') {\n      return [left, {...right, type: 'unpublish', draftState, publishedState}]\n    }\n  }\n\n  if (\n    canMergeEdit(left.type) &&\n    right.type === 'editDraft' &&\n    isWithinMergeWindow(left.endTimestamp, right.startTimestamp)\n  ) {\n    const authors = new Set<string>()\n    for (const author of left.authors) authors.add(author)\n    for (const author of right.authors) authors.add(author)\n\n    return {\n      index: 0,\n      id: right.id,\n      type: left.type,\n      start: left.start,\n      end: right.end,\n      startTimestamp: left.startTimestamp,\n      endTimestamp: right.endTimestamp,\n      authors,\n      draftState,\n      publishedState,\n    }\n  }\n\n  return [left, {...right, draftState, publishedState}]\n}\n\ntype ChunkState = 'unedited' | 'deleted' | 'upsert'\nfunction getChunkState(effect?: MendozaEffectPair): ChunkState {\n  const modified = Boolean(effect)\n  const deleted = effect && isDeletePatch(effect?.apply)\n\n  if (deleted) {\n    return 'deleted'\n  }\n\n  if (modified) {\n    return 'upsert'\n  }\n\n  return 'unedited'\n}\n\n/*\n * getChunkType tries to determine what effect the given transaction had on the document\n * More information about the logic can be found here https://github.com/sanity-io/sanity/pull/2633#issuecomment-886461812\n *\n * |                    | draft unedited | draft deleted | draft upsert |\n * |--------------------|----------------|---------------|--------------|\n * | published unedited | X              | delete        | editDraft    |\n * | published deleted  | delete         | delete        | delete       |\n * | published upsert   | liveEdit       | publish       | liveEdit     |\n */\nfunction getChunkType(transaction: Transaction): ChunkType {\n  const draftState = getChunkState(transaction.draftEffect)\n  const publishedState = getChunkState(transaction.publishedEffect)\n\n  if (publishedState === 'unedited') {\n    if (draftState === 'deleted') {\n      return 'delete'\n    }\n\n    if (draftState === 'upsert') {\n      return 'editDraft'\n    }\n  }\n\n  if (publishedState === 'deleted') {\n    return 'delete'\n  }\n\n  if (publishedState === 'upsert') {\n    if (draftState === 'unedited') {\n      return 'editLive'\n    }\n\n    if (draftState === 'deleted') {\n      return 'publish'\n    }\n\n    if (draftState === 'upsert') {\n      return 'editLive'\n    }\n  }\n\n  return 'editLive'\n}\n\nexport function chunkFromTransaction(transaction: Transaction): Chunk {\n  const modifiedDraft = Boolean(transaction.draftEffect)\n  const modifiedPublished = Boolean(transaction.publishedEffect)\n\n  const draftDeleted = transaction.draftEffect && isDeletePatch(transaction.draftEffect.apply)\n  const publishedDeleted =\n    transaction.publishedEffect && isDeletePatch(transaction.publishedEffect.apply)\n\n  const type = getChunkType(transaction)\n\n  return {\n    index: 0,\n    id: transaction.id,\n    type,\n    start: transaction.index,\n    end: transaction.index + 1,\n    startTimestamp: transaction.timestamp,\n    endTimestamp: transaction.timestamp,\n    authors: new Set([transaction.author]),\n    draftState: modifiedDraft ? (draftDeleted ? 'missing' : 'present') : 'unknown',\n    publishedState: modifiedPublished ? (publishedDeleted ? 'missing' : 'present') : 'unknown',\n  }\n}\n\nfunction combineState(\n  left: 'present' | 'missing' | 'unknown',\n  right: 'present' | 'missing' | 'unknown',\n) {\n  return right === 'unknown' ? left : right\n}\n\nexport function isDeletePatch(patch: MendozaPatch): boolean {\n  return patch[0] === 0 && patch[1] === null\n}\n","import {type Annotation} from '../../../../field'\nimport {type CombinedDocument} from './types'\n\nexport function isSameAnnotation(a: Annotation, b: Annotation): boolean {\n  if (a && b) {\n    return a.author === b.author && a.timestamp === b.timestamp\n  }\n\n  if (!a && !b) {\n    return true\n  }\n\n  return false\n}\n\nexport function getAttrs(doc: CombinedDocument): Record<string, unknown> | null {\n  return doc.draft || doc.published\n}\n","import {\n  type ArrayInput,\n  type Diff,\n  diffInput,\n  type Input,\n  type ObjectInput,\n  type StringInput,\n  wrap,\n} from '@sanity/diff'\nimport {type incremental} from 'mendoza'\n\nimport {type Annotation, type Chunk} from '../../../../field'\nimport {type Timeline} from './Timeline'\nimport {isSameAnnotation} from './utils'\n\nexport type Meta = {chunk: Chunk; transactionIndex: number} | null\n\nexport type AnnotationExtractor<T> = {\n  fromValue(value: incremental.Value<T>): Annotation\n  fromMeta(meta: T): Annotation\n}\n\nclass ArrayContentWrapper<T> implements ArrayInput<Annotation> {\n  type = 'array' as const\n  value: unknown[]\n  length: number\n  annotation: Annotation\n  extractor: AnnotationExtractor<T>\n\n  private content: incremental.ArrayContent<T>\n  private elements: Input<Annotation>[] = []\n\n  constructor(\n    content: incremental.ArrayContent<T>,\n    value: unknown[],\n    annotation: Annotation,\n    extractor: AnnotationExtractor<T>,\n  ) {\n    this.content = content\n    this.value = value\n    this.annotation = annotation\n    this.extractor = extractor\n    this.length = content.elements.length\n  }\n\n  at(idx: number) {\n    if (idx >= this.length) throw new Error('out of bounds')\n    const input = this.elements[idx]\n    if (input) {\n      return input\n    }\n    return (this.elements[idx] = wrapValue(\n      this.content.elements[idx],\n      this.value[idx],\n      this.extractor,\n    ))\n  }\n\n  annotationAt(idx: number): Annotation {\n    const meta = this.content.metas[idx]\n    return this.extractor.fromMeta(meta)\n  }\n}\n\nclass ObjectContentWrapper<T> implements ObjectInput<Annotation> {\n  type = 'object' as const\n  value: Record<string, unknown>\n  keys: string[]\n  annotation: Annotation\n  extractor: AnnotationExtractor<T>\n\n  private content: incremental.ObjectContent<T>\n  private fields: Record<string, Input<Annotation>> = {}\n\n  constructor(\n    content: incremental.ObjectContent<T>,\n    value: Record<string, unknown>,\n    annotation: Annotation,\n    extractor: AnnotationExtractor<T>,\n  ) {\n    this.content = content\n    this.value = value\n    this.annotation = annotation\n    this.extractor = extractor\n    this.keys = Object.keys(content.fields)\n  }\n\n  get(key: string) {\n    const input = this.fields[key]\n    if (input) {\n      return input\n    }\n    const value = this.content.fields[key]\n    if (!value) return undefined\n    return (this.fields[key] = wrapValue(value, this.value[key], this.extractor))\n  }\n}\n\nclass StringContentWrapper<T> implements StringInput<Annotation> {\n  type = 'string' as const\n  value: string\n  annotation: Annotation\n  extractor: AnnotationExtractor<T>\n\n  private content: incremental.StringContent<T>\n\n  constructor(\n    content: incremental.StringContent<T>,\n    value: string,\n    annotation: Annotation,\n    extractor: AnnotationExtractor<T>,\n  ) {\n    this.content = content\n    this.value = value\n    this.annotation = annotation\n    this.extractor = extractor\n  }\n\n  sliceAnnotation(start: number, end: number): {text: string; annotation: Annotation}[] {\n    const result: {text: string; annotation: Annotation}[] = []\n    let idx = 0\n\n    function push(text: string, annotation: Annotation) {\n      if (result.length > 0) {\n        const lst = result[result.length - 1]\n        if (isSameAnnotation(lst.annotation, annotation)) {\n          lst.text += text\n          return\n        }\n      }\n\n      result.push({text, annotation})\n    }\n\n    for (const part of this.content.parts) {\n      const length = part.value.length\n\n      const subStart = Math.max(0, start - idx)\n      if (subStart < length) {\n        // The start of the slice is inside this part somewhere.\n\n        // Figure out where the end is:\n        const subEnd = Math.min(length, end - idx)\n\n        // If the end of the slice is before this part, then we're guaranteed\n        // that there are no more parts.\n        if (subEnd <= 0) break\n\n        push(part.value.slice(subStart, subEnd), this.extractor.fromValue(part))\n      }\n\n      idx += length\n    }\n\n    return result\n  }\n}\n\nexport function wrapValue<T>(\n  value: incremental.Value<T>,\n  raw: unknown,\n  extractor: AnnotationExtractor<T>,\n): Input<Annotation> {\n  const annotation = extractor.fromValue(value)\n\n  if (value.content) {\n    switch (value.content.type) {\n      case 'array':\n        return new ArrayContentWrapper<T>(value.content, raw as unknown[], annotation, extractor)\n      case 'object':\n        return new ObjectContentWrapper<T>(\n          value.content,\n          raw as Record<string, unknown>,\n          annotation,\n          extractor,\n        )\n      case 'string':\n        return new StringContentWrapper<T>(value.content, raw as string, annotation, extractor)\n      default:\n      // do nothing\n    }\n  }\n\n  return wrap(raw, annotation)\n}\n\nfunction extractAnnotationForFromInput(\n  timeline: Timeline,\n  firstChunk: Chunk | null,\n  meta: Meta,\n): Annotation {\n  if (meta) {\n    // The next transaction is where it disappeared:\n    return annotationForTransactionIndex(timeline, meta.transactionIndex + 1, meta.chunk.index)\n  } else if (firstChunk) {\n    return annotationForTransactionIndex(timeline, firstChunk.start, firstChunk.index)\n  }\n\n  return null\n}\n\nfunction extractAnnotationForToInput(timeline: Timeline, meta: Meta): Annotation {\n  if (meta) {\n    return annotationForTransactionIndex(timeline, meta.transactionIndex, meta.chunk.index)\n  }\n\n  return null\n}\n\nfunction annotationForTransactionIndex(timeline: Timeline, idx: number, chunkIdx?: number) {\n  const tx = timeline.transactionByIndex(idx)\n  if (!tx) return null\n\n  const chunk = timeline.chunkByTransactionIndex(idx, chunkIdx)\n  if (!chunk) return null\n\n  return {\n    chunk,\n    timestamp: tx.timestamp,\n    author: tx.author,\n  }\n}\n\n// eslint-disable-next-line max-params\nexport function diffValue(\n  timeline: Timeline,\n  firstChunk: Chunk | null,\n  from: incremental.Value<Meta>,\n  fromRaw: unknown,\n  to: incremental.Value<Meta>,\n  toRaw: unknown,\n): Diff<Annotation> {\n  const fromInput = wrapValue<Meta>(from, fromRaw, {\n    fromValue(value) {\n      return extractAnnotationForFromInput(timeline, firstChunk, value.endMeta)\n    },\n    fromMeta(meta) {\n      return extractAnnotationForFromInput(timeline, firstChunk, meta)\n    },\n  })\n\n  const toInput = wrapValue<Meta>(to, toRaw, {\n    fromValue(value) {\n      return extractAnnotationForToInput(timeline, value.startMeta)\n    },\n    fromMeta(meta) {\n      return extractAnnotationForToInput(timeline, meta)\n    },\n  })\n  return diffInput(fromInput, toInput)\n}\n","export type Merger<T> = (left: T, right: T) => T | [T, T]\n\n/**\n * The two ended array supports pushing both at the beginning and\n * at the end while preserving indicies.\n */\nexport class TwoEndedArray<T extends {index: number}> {\n  private _postive: T[] = []\n  private _negative: T[] = []\n\n  addToEnd(elem: T): void {\n    elem.index = this._postive.length\n    this._postive.push(elem)\n  }\n\n  addToBeginning(elem: T): void {\n    // Prefer to place things at the positive side if possible.\n    if (this.length == 0) {\n      this.addToEnd(elem)\n      return\n    }\n\n    elem.index = -(this._negative.length + 1)\n    this._negative.push(elem)\n  }\n\n  mergeAtEnd(value: T, merger: Merger<T>): void {\n    if (this.length === 0) {\n      this.addToEnd(value)\n      return\n    }\n\n    const idx = this.lastIdx\n    const result = merger(this.get(idx), value)\n    if (Array.isArray(result)) {\n      this.set(idx, result[0])\n      this.addToEnd(result[1])\n    } else {\n      this.set(idx, result)\n    }\n  }\n\n  mergeAtBeginning(value: T, merger: Merger<T>): void {\n    if (this.length === 0) {\n      this.addToEnd(value)\n      return\n    }\n\n    const idx = this.firstIdx\n    const result = merger(value, this.get(idx))\n    if (Array.isArray(result)) {\n      this.set(idx, result[1])\n      this.addToBeginning(result[0])\n    } else {\n      this.set(idx, result)\n    }\n  }\n\n  removeFromEnd(): void {\n    if (this._postive.length === 0) {\n      this._negative.shift()\n    } else {\n      this._postive.pop()\n    }\n  }\n\n  has(idx: number): boolean {\n    if (idx >= 0) {\n      return idx < this._postive.length\n    }\n\n    return -(idx + 1) < this._negative.length\n  }\n\n  get(idx: number): T {\n    if (idx >= 0) {\n      return this._postive[idx]\n    }\n\n    return this._negative[-(idx + 1)]\n  }\n\n  set(idx: number, value: T): void {\n    if (idx >= 0) {\n      value.index = idx\n      this._postive[idx] = value\n    } else {\n      value.index = idx\n      this._negative[-(idx + 1)] = value\n    }\n  }\n\n  get lastIdx(): number {\n    // Note: This also works correctly when _positive is empty (it returns -1)\n    return this._postive.length - 1\n  }\n\n  get last(): T {\n    return this.get(this.lastIdx)\n  }\n\n  get firstIdx(): number {\n    // Note: This also works correctly when _negative is empty (it returns 0)\n    return -this._negative.length\n  }\n\n  get first(): T {\n    return this.get(this.firstIdx)\n  }\n\n  get length(): number {\n    return this._postive.length + this._negative.length\n  }\n}\n","import {type Diff} from '@sanity/diff'\nimport {type TransactionLogEventWithEffects} from '@sanity/types'\nimport {applyPatch, incremental} from 'mendoza'\n\nimport {type Annotation, type Chunk} from '../../../../field'\nimport {chunkFromTransaction, mergeChunk} from './chunker'\nimport {diffValue, type Meta} from './diffValue'\nimport {type TraceEvent} from './replay'\nimport {TwoEndedArray} from './TwoEndedArray'\nimport {\n  type CombinedDocument,\n  type DocumentRemoteMutationVersionEvent,\n  type Transaction,\n} from './types'\nimport {getAttrs} from './utils'\n\n/**\n * @hidden\n * @beta */\nexport type ParsedTimeRef = Chunk | 'loading' | 'invalid'\n\n/**\n * @hidden\n * @beta */\nexport interface TimelineOptions {\n  publishedId: string\n  enableTrace?: boolean\n}\n\n/**\n * Timeline maintains information about the history of a document:\n * Grouping raw translog entries into sensible groups, replaying and\n * reconstructing different versions and abstract other details.\n *\n * Note that this class by itself is not capable of _fetching_ information,\n * but will only organize and structure the incoming translog entries.\n *\n *\n * @hidden\n * @beta\n */\nexport class Timeline {\n  reachedEarliestEntry = false\n\n  publishedId: string\n  draftId: string\n  private _transactions = new TwoEndedArray<Transaction>()\n  private _chunks = new TwoEndedArray<Chunk>()\n\n  // These two properties are here to handle the case\n  private _possiblePendingTransactions = new Map<\n    string,\n    {\n      transaction: Transaction\n      idx: number\n    }\n  >()\n  private _recreateTransactionsFrom?: number\n  private _trace?: TraceEvent[]\n\n  constructor(opts: TimelineOptions) {\n    this.publishedId = opts.publishedId\n    this.draftId = `drafts.${opts.publishedId}`\n\n    if (opts.enableTrace) {\n      this._trace = []\n      this._trace.push({\n        type: 'initial',\n        publishedId: opts.publishedId,\n      })\n      ;(window as any).__sanityTimelineTrace = this._trace\n    }\n  }\n\n  get chunkCount(): number {\n    return this._chunks.length\n  }\n\n  /** Maps over the chunk from newest to oldest. */\n  mapChunks<T>(mapper: (chunk: Chunk, idx: number) => T): T[] {\n    const result: T[] = []\n\n    const firstIdx = this._chunks.firstIdx\n    const lastIdx = this._chunks.lastIdx\n\n    for (let idx = lastIdx; idx >= firstIdx; idx--) {\n      result.push(mapper(this._chunks.get(idx), idx))\n    }\n\n    return result\n  }\n\n  reset(): void {\n    this._transactions = new TwoEndedArray()\n    this._chunks = new TwoEndedArray()\n    this._possiblePendingTransactions = new Map()\n    this._recreateTransactionsFrom = undefined\n    this.reachedEarliestEntry = false\n  }\n\n  /**\n   * Adds a remote mutation to the timeline. This methods assumes that the remote mutations\n   * come in correct order for their respective version, but has no ordering requirements\n   * across draft/published.\n   *\n   * Example: [D1, D2, P1] (where D1 and P1 were mutations done to the draft and published\n   * version in the same transaction) is a valid input. [P1, D2, D1] is _not_ valid since\n   * the mutation for the draft is out of order.\n   */\n  addRemoteMutation(entry: DocumentRemoteMutationVersionEvent): void {\n    if (this._trace) this._trace.push({type: 'addRemoteMutation', event: entry})\n\n    const pending = this._possiblePendingTransactions.get(entry.transactionId)\n\n    const transaction: Transaction = pending\n      ? pending.transaction\n      : {\n          index: 0,\n          id: entry.transactionId,\n          timestamp: entry.timestamp.toISOString(),\n          author: entry.author,\n        }\n\n    if (entry.version === 'draft') {\n      transaction.draftEffect = entry.effects as any\n    } else {\n      transaction.publishedEffect = entry.effects as any\n    }\n\n    if (pending) {\n      this._possiblePendingTransactions.delete(entry.transactionId)\n      this._invalidateTransactionFrom(pending.idx)\n    } else {\n      this._transactions.addToEnd(transaction)\n      this._possiblePendingTransactions.set(entry.transactionId, {\n        transaction,\n        idx: this._transactions.lastIdx,\n      })\n    }\n  }\n\n  addTranslogEntry(event: TransactionLogEventWithEffects): void {\n    if (this._trace) this._trace.push({type: 'addTranslogEntry', event})\n\n    this._transactions.addToBeginning({\n      index: 0,\n      id: event.id,\n      author: event.author,\n      timestamp: event.timestamp,\n      draftEffect: event.effects[this.draftId],\n      publishedEffect: event.effects[this.publishedId],\n    })\n  }\n\n  /** Mark that we've reached the earliest entry. */\n  didReachEarliestEntry(): void {\n    if (this._trace) this._trace.push({type: 'didReachEarliestEntry'})\n\n    this.reachedEarliestEntry = true\n  }\n\n  /**\n   * updateChunks synchronizes the chunks to match the current state\n   * of the transactions array. After calling this method you need\n   * to invalidate all Chunks.\n   */\n  updateChunks(): void {\n    if (this._trace) this._trace.push({type: 'updateChunks'})\n\n    this._removeInvalidatedChunks()\n    this._addChunksFromTransactions()\n    this._createInitialChunk()\n  }\n\n  private _removeInvalidatedChunks() {\n    if (this._recreateTransactionsFrom) {\n      while (this._chunks.length > 0) {\n        const chunk = this._chunks.last\n        if (this._recreateTransactionsFrom < chunk.end) {\n          this._chunks.removeFromEnd()\n        } else {\n          break\n        }\n      }\n      this._recreateTransactionsFrom = undefined\n    }\n  }\n\n  private _addChunksFromTransactions() {\n    const firstIdx = this._transactions.firstIdx\n    const lastIdx = this._transactions.lastIdx\n\n    // Add transactions at the end:\n    const nextTransactionToChunk = this._chunks.length > 0 ? this._chunks.last.end : firstIdx\n    for (let idx = nextTransactionToChunk; idx <= lastIdx; idx++) {\n      const transaction = this._transactions.get(idx)\n      this._chunks.mergeAtEnd(chunkFromTransaction(transaction), mergeChunk)\n    }\n\n    // Add transactions at the beginning:\n    if (this._chunks.length == 0) return\n\n    const firstTransactionChunked = this._chunks.first.start\n\n    for (let idx = firstTransactionChunked - 1; idx >= firstIdx; idx--) {\n      const transaction = this._transactions.get(idx)\n      this._chunks.mergeAtBeginning(chunkFromTransaction(transaction), mergeChunk)\n    }\n  }\n\n  private _invalidateTransactionFrom(idx: number) {\n    if (this._recreateTransactionsFrom === undefined || idx < this._recreateTransactionsFrom) {\n      this._recreateTransactionsFrom = idx\n    }\n  }\n\n  private _createInitialChunk() {\n    if (this.reachedEarliestEntry) {\n      if (this._chunks.first?.type === 'initial') return\n\n      const firstTx = this._transactions.first\n      if (!firstTx) return\n      const initialChunk = chunkFromTransaction(firstTx)\n      initialChunk.type = 'initial'\n      initialChunk.id = '@initial'\n      initialChunk.end = initialChunk.start\n      this._chunks.addToBeginning(initialChunk)\n    }\n  }\n\n  /**\n   * Resolves a time reference.\n   *\n   * Note that the chunk returned is only valid if the timeline stays constant.\n   * Once the timeline is updated, you must re-parse all references.\n   */\n  parseTimeId(id: string): ParsedTimeRef {\n    if (this._chunks.length === 0) {\n      return this.reachedEarliestEntry ? 'invalid' : 'loading'\n    }\n\n    // NOTE:\n    // This was refactored from\n    // ```\n    // const [timestampStr, chunkId] = id.split('/', 3)\n    // ```\n    // in order to avoid issues with `@microsoft/api-extractor`.\n    const idSegments = id.split('/', 3)\n    const timestampStr = idSegments.shift()\n    const chunkId = idSegments.shift()\n    const timestamp = Number(timestampStr)\n\n    for (let idx = this._chunks.lastIdx; idx >= this._chunks.firstIdx; idx--) {\n      const chunk = this._chunks.get(idx)\n      if (chunk.id === chunkId) {\n        return chunk\n      }\n\n      if (Date.parse(chunk.endTimestamp) + 60 * 60 * 1000 < timestamp) {\n        // The chunk ended _before_ the timestamp we're asking for. This means that there\n        // is no point in looking further and the chunk is invalid.\n\n        // We add 1 hour to allow some slack since transactions are not guaranteed to be in order.\n        return 'invalid'\n      }\n    }\n\n    return this.reachedEarliestEntry ? 'invalid' : 'loading'\n  }\n\n  findLastPublishedBefore(chunk: Chunk | null): ParsedTimeRef {\n    for (\n      let chunkIdx = chunk ? chunk.index - 1 : this._chunks.lastIdx;\n      chunkIdx >= this._chunks.firstIdx;\n      chunkIdx--\n    ) {\n      const currentChunk = this._chunks.get(chunkIdx)\n      if (currentChunk.type === 'publish' || currentChunk.type === 'initial') {\n        return currentChunk\n      }\n    }\n\n    if (!this.reachedEarliestEntry) return 'loading'\n\n    return this._chunks.first\n  }\n\n  isLatestChunk(chunk: Chunk): boolean {\n    return chunk === this._chunks.last\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  createTimeId(chunk: Chunk): string {\n    return `${chunk.endTimestamp.valueOf()}/${chunk.id}`\n  }\n\n  lastChunk(): Chunk {\n    return this._chunks.last\n  }\n\n  transactionByIndex(idx: number): Transaction | null {\n    if (!this._transactions.has(idx)) return null\n    return this._transactions.get(idx)\n  }\n\n  chunkByTransactionIndex(idx: number, startChunkIdx = 0): Chunk {\n    let chunkIdx = startChunkIdx\n    for (;;) {\n      const chunk = this._chunks.get(chunkIdx)\n      if (!chunk) throw new Error('transaction does not belong in any chunk')\n\n      if (idx >= chunk.end) {\n        chunkIdx++\n      } else if (idx < chunk.start) {\n        chunkIdx--\n      } else {\n        return chunk\n      }\n    }\n  }\n\n  replayBackwardsBetween(\n    firstIdx: number,\n    lastIdx: number,\n    doc: CombinedDocument,\n  ): CombinedDocument {\n    let draft = doc.draft\n    let published = doc.published\n\n    for (let idx = lastIdx; idx >= firstIdx; idx--) {\n      const transaction = this._transactions.get(idx)\n\n      if (transaction.draftEffect) {\n        draft = applyPatch(draft, transaction.draftEffect.revert)\n      }\n\n      if (transaction.publishedEffect) {\n        published = applyPatch(published, transaction.publishedEffect.revert)\n      }\n    }\n\n    return {draft, published}\n  }\n\n  replayBackwardsUntil(firstIdx: number, doc: CombinedDocument): CombinedDocument {\n    return this.replayBackwardsBetween(firstIdx, this._transactions.lastIdx, doc)\n  }\n\n  calculateDiff(\n    initialDoc: CombinedDocument,\n    finalDoc: CombinedDocument,\n    firstIdx: number,\n    lastIdx: number,\n  ): Diff<Annotation> {\n    let draftValue = incremental.wrap<Meta>(initialDoc.draft, null)\n    let publishedValue = incremental.wrap<Meta>(initialDoc.published, null)\n\n    const initialValue = getValue(draftValue, publishedValue)\n    const initialAttributes = getAttrs(initialDoc)\n    let firstChunk: Chunk | null = null\n\n    // Loop over all of the chunks:\n    for (let chunkIdx = firstIdx; chunkIdx <= lastIdx; chunkIdx++) {\n      const chunk = this._chunks.get(chunkIdx)\n      if (!firstChunk) firstChunk = chunk\n\n      for (let idx = chunk.start; idx < chunk.end; idx++) {\n        const transaction = this._transactions.get(idx)\n\n        const meta = {\n          chunk,\n          transactionIndex: idx,\n        }\n\n        const preDraftValue = draftValue\n        const prePublishedValue = publishedValue\n\n        if (transaction.draftEffect) {\n          draftValue = incremental.applyPatch(draftValue, transaction.draftEffect.apply, meta)\n        }\n\n        if (transaction.publishedEffect) {\n          publishedValue = incremental.applyPatch(\n            publishedValue,\n            transaction.publishedEffect.apply,\n            meta,\n          )\n        }\n\n        const didHaveDriaft = incremental.getType(preDraftValue) !== 'null'\n        const haveDraft = incremental.getType(draftValue) !== 'null'\n        const havePublished = incremental.getType(publishedValue) !== 'null'\n\n        if (havePublished && !haveDraft) {\n          publishedValue = incremental.rebaseValue(preDraftValue, publishedValue)\n        }\n\n        if (haveDraft && !didHaveDriaft) {\n          draftValue = incremental.rebaseValue(prePublishedValue, draftValue)\n        }\n      }\n    }\n\n    const finalValue = incremental.getType(draftValue) === 'null' ? publishedValue : draftValue\n    const finalAttributes = getAttrs(finalDoc)\n\n    return diffValue(this, firstChunk, initialValue, initialAttributes, finalValue, finalAttributes)\n  }\n}\n\nfunction getValue(draftValue: incremental.Value<Meta>, publishedValue: incremental.Value<Meta>) {\n  return incremental.getType(draftValue) === 'null' ? publishedValue : draftValue\n}\n","import {type SanityDocument, type TransactionLogEventWithEffects} from '@sanity/types'\nimport {applyPatch} from 'mendoza'\n\nimport {type RemoteSnapshotVersionEvent} from '../../document/document-pair/checkoutPair'\nimport {type Timeline} from './Timeline'\nimport {type CombinedDocument, type DocumentRemoteMutationVersionEvent} from './types'\n\ntype VersionState = {\n  id: string\n  hasAttrs: boolean\n  attrs: Record<string, unknown> | null\n  rev: string | null\n  events: Array<DocumentRemoteMutationVersionEvent>\n  aligned: boolean\n}\n\nfunction emptyVersionState(id: string): VersionState {\n  return {\n    id,\n    hasAttrs: false,\n    attrs: null,\n    rev: null,\n    events: [],\n    aligned: false,\n  }\n}\n\nfunction align(history: TransactionLogEventWithEffects, state: VersionState): number {\n  const idx = state.events.findIndex((evt) => history.id === evt.transactionId)\n  if (idx >= 0) {\n    // Return the next event as we don't want this to be included.\n    return idx + 1\n  }\n\n  if (state.rev) {\n    return state.rev === history.id ? 0 : -1\n  }\n\n  // At this point the document doesn't exist and we were not able to match\n  // it up with a received mutation. This is a bit unfortunate as we don't\n  // have a _reliably_ way of aligning it. For now we just always assume\n  // that it's consistent.\n\n  return 0\n}\n\nfunction startFromSnapshot(state: VersionState, doc: SanityDocument) {\n  state.hasAttrs = true\n\n  if (doc) {\n    state.attrs = {...doc}\n    if (typeof state.attrs._rev != 'string') throw new Error('snapshot has no _rev')\n    state.rev = state.attrs._rev\n    delete state.attrs._rev\n  } else {\n    state.attrs = null\n    state.rev = null\n  }\n\n  state.events = []\n}\n\n/**\n * The timeline consists of data from (1) the history, (2) live draft mutations, and\n * (3) live published mutations. It's critical for us that the chain of transactions\n * is complete and without holes. The following class can be used as a layer in front\n * of Timeline to ensure this:\n *\n * - Invoke `appendRemoteSnapshotEvent` when there's an incoming remote mutation.\n *   These mutations are buffered internally and _not_ passed to the timeline quite yet.\n *\n * - Once we've received snapshots for both draft and published, then `acceptsHistory`\n *   becomes true and the caller can fetch a chunk of the translog. The flag\n *   `earliestTransactionId` can be used to figure out where to fetch transactions from.\n *\n * - The caller invokes `prependHistoryEvent` for each of the events. These history events\n *   are always pushed to the timeline and it will become available immediately.\n *\n * - Internally this class will then try to align the history event to the received\n *   mutations and then dispatch to the timeline.\n *\n * - The aligner also maintains the latest revision for both the draft and the published version.\n *\n *\n */\nexport class Aligner {\n  timeline: Timeline\n  earliestTransactionId: string | null = null\n\n  constructor(timeline: Timeline) {\n    this.timeline = timeline\n    this._states = {\n      draft: emptyVersionState(timeline.draftId),\n      published: emptyVersionState(timeline.publishedId),\n    }\n  }\n\n  private _states: {\n    draft: VersionState\n    published: VersionState\n  }\n\n  appendRemoteSnapshotEvent(evt: RemoteSnapshotVersionEvent): void {\n    if (evt.version === 'version') {\n      return\n    }\n\n    const state = this._states[evt.version]\n\n    if (evt.type === 'snapshot') {\n      this._maybeInvalidateHistory()\n\n      startFromSnapshot(state, evt.document)\n      return\n    }\n\n    if (evt.type === 'remoteMutation') {\n      if (state.aligned) {\n        this._apply(state, evt)\n        this.timeline.addRemoteMutation(evt)\n      } else if (state.hasAttrs) {\n        state.events.push(evt)\n      } else {\n        startFromSnapshot(state, evt.head)\n      }\n    }\n  }\n\n  prependHistoryEvent(evt: TransactionLogEventWithEffects): void {\n    if (!this.acceptsHistory) throw new Error('cannot prepend history at this point')\n\n    for (const state of Object.values(this._states)) {\n      if (!state.aligned) {\n        const idx = align(evt, state)\n\n        if (idx >= 0) {\n          this._alignAtIndex(state, idx)\n        }\n      }\n    }\n\n    this.timeline.addTranslogEntry(evt)\n    this.earliestTransactionId = evt.id\n  }\n\n  didReachEarliestEntry(): void {\n    for (const state of Object.values(this._states)) {\n      if (!state.aligned) {\n        if (state.attrs !== null) throw new Error('unable to find translog entry to align to')\n        this._alignAtIndex(state, 0)\n      }\n    }\n    this.timeline.didReachEarliestEntry()\n  }\n\n  get isAligned(): boolean {\n    return Object.values(this._states).every((state) => state.aligned)\n  }\n\n  get acceptsHistory(): boolean {\n    return this._isComplete\n  }\n\n  get currentDocument(): CombinedDocument {\n    return {draft: this._states.draft.attrs, published: this._states.published.attrs}\n  }\n\n  private _alignAtIndex(state: VersionState, idx: number) {\n    // These we must only apply locally since they are present in the fetched translog.\n    for (const mutEvt of state.events.slice(0, idx)) {\n      this._apply(state, mutEvt)\n    }\n\n    // ... while these must also be pushed to the timeline:\n    for (const mutEvt of state.events.slice(idx)) {\n      this._apply(state, mutEvt)\n      this.timeline.addRemoteMutation(mutEvt)\n    }\n\n    state.events = []\n    state.aligned = true\n  }\n\n  private get _isComplete(): boolean {\n    return Object.values(this._states).every((state) => state.hasAttrs)\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  private _apply(state: VersionState, evt: DocumentRemoteMutationVersionEvent) {\n    state.attrs = applyPatch(state.attrs, evt.effects.apply as any)\n    state.rev = evt.transactionId\n  }\n\n  private _maybeInvalidateHistory() {\n    if (this._isComplete) {\n      for (const state of Object.values(this._states)) {\n        state.aligned = false\n      }\n      this.earliestTransactionId = null\n      this.timeline.reset()\n    }\n  }\n}\n","import {type Diff} from '@sanity/diff'\n\nimport {type Annotation, type Chunk} from '../../../../field'\nimport {type Timeline} from './Timeline'\nimport {type CombinedDocument} from './types'\n\n/**\n * A reconstruction represents a single reconstruction of a\n */\nexport class Reconstruction {\n  timeline: Timeline\n  start: Chunk | null\n  end: Chunk\n  doc: CombinedDocument\n\n  constructor(timeline: Timeline, doc: CombinedDocument, start: Chunk | null, end: Chunk) {\n    this.timeline = timeline\n    this.start = start\n    this.end = end\n    this.doc = doc\n  }\n\n  same(start: Chunk | null, end: Chunk): boolean {\n    return this.start === start && this.end === end\n  }\n\n  private _startDocument?: CombinedDocument\n  private _endDocument?: CombinedDocument\n  private _diff?: Diff<Annotation>\n\n  /** Returns the attributes as seen at the end of the range. */\n  endAttributes(): Record<string, unknown> | null {\n    return getAttrs(this.endDocument())\n  }\n\n  endDocument(): CombinedDocument {\n    if (!this._endDocument) {\n      this._endDocument = this.timeline.replayBackwardsUntil(this.end.end, this.doc)\n    }\n\n    return this._endDocument\n  }\n\n  /** Returns the attributes as seen at the end of the range. */\n  startAttributes(): Record<string, unknown> | null {\n    return getAttrs(this.startDocument())\n  }\n\n  startDocument(): CombinedDocument {\n    if (!this.start) throw new Error('start required')\n\n    if (!this._startDocument) {\n      this._startDocument = this.timeline.replayBackwardsBetween(\n        this.start.end,\n        this.end.end - 1,\n        this.endDocument(),\n      )\n    }\n\n    return this._startDocument\n  }\n\n  diff(): Diff<Annotation> {\n    if (!this._diff) {\n      if (!this.start) throw new Error('start required')\n\n      this._diff = this.timeline.calculateDiff(\n        this.startDocument(),\n        this.endDocument(),\n        this.start.index + 1,\n        this.end.index,\n      )\n    }\n\n    return this._diff\n  }\n}\n\nfunction getAttrs(doc: CombinedDocument) {\n  return doc.draft || doc.published\n}\n","import {type SanityClient} from '@sanity/client'\nimport {type Diff, type ObjectDiff} from '@sanity/diff'\n\nimport {type Annotation, type Chunk} from '../../../../field'\nimport {type RemoteSnapshotVersionEvent} from '../../document/document-pair/checkoutPair'\nimport {Aligner} from './Aligner'\nimport {getJsonStream} from './getJsonStream'\nimport {Reconstruction} from './Reconstruction'\nimport {type ParsedTimeRef, type Timeline} from './Timeline'\n\nconst TRANSLOG_ENTRY_LIMIT = 50\n\n/**\n * @hidden\n * @beta */\nexport type TimelineControllerOptions = {\n  timeline: Timeline\n  client: SanityClient\n  documentId: string\n  documentType: string\n  handler?: (err: Error | null, controller: TimelineController) => void\n}\n\n/**\n * @hidden\n * @beta */\nexport type SelectionState = 'inactive' | 'rev' | 'range' | 'loading' | 'invalid'\n\n/**\n * The controller is responsible for fetching information\n * about a document and maintaining a Timeline.\n *\n *\n * @hidden\n * @beta\n */\nexport class TimelineController {\n  timeline: Timeline\n  client: SanityClient\n  handler: TimelineControllerOptions['handler']\n\n  version = 0\n\n  /**\n   * The selection state represents the  different states of the current selection:\n   * - inactive: No selection is active.\n   * - rev: A selection is active for a single revision.\n   * - range: A selection is active for a range and we have all the data needed to render it.\n   * - loading: A selection is active, but we don't have the entries yet.\n   * - invalid: The selection picked is invalid.\n   */\n  selectionState: SelectionState = 'inactive'\n\n  constructor(options: TimelineControllerOptions) {\n    this.timeline = options.timeline\n    this.client = options.client\n    this.handler = options.handler\n    this._aligner = new Aligner(this.timeline)\n\n    this.markChange()\n  }\n\n  private _aligner: Aligner\n\n  private _fetchMore = false\n  private _fetchAtLeast = 0\n  private _isRunning = false\n  private _isSuspended = false\n  private _didErr = false\n\n  private _since: string | null = null\n  private _sinceTime: ParsedTimeRef | null = null\n  private _rev: string | null = null\n  private _revTime: ParsedTimeRef | null = null\n\n  private _reconstruction?: Reconstruction\n\n  clearRange(): void {\n    this.setRange(null, null)\n  }\n\n  setRange(since: string | null, rev: string | null): void {\n    if (rev !== this._rev) this.setRevTime(rev)\n    if (since !== this._since) this.setSinceTime(since)\n\n    let _fetchAtLeast = 10\n\n    if (this._sinceTime === 'loading' || this._revTime === 'loading' || !this._aligner.isAligned) {\n      this.selectionState = 'loading'\n    } else if (this._sinceTime === 'invalid' || this._revTime === 'invalid') {\n      this.selectionState = 'invalid'\n    } else if (this._sinceTime) {\n      this.selectionState = 'range'\n\n      const targetRev = this._revTime || this.timeline.lastChunk()\n\n      if (this._sinceTime.index > targetRev.index) {\n        this._revTime = 'invalid'\n        this.selectionState = 'invalid'\n      } else {\n        this.setReconstruction(this._sinceTime, targetRev)\n      }\n    } else if (this._revTime) {\n      this.selectionState = 'rev'\n      this.setReconstruction(null, this._revTime)\n    } else {\n      this.selectionState = 'inactive'\n      _fetchAtLeast = 0\n    }\n\n    this._fetchAtLeast = _fetchAtLeast\n\n    this.start()\n  }\n\n  setLoadMore(flag: boolean): void {\n    this._fetchMore = flag\n    this.start()\n  }\n\n  get sinceTime(): Chunk | null {\n    return this._sinceTime && typeof this._sinceTime === 'object' ? this._sinceTime : null\n  }\n\n  get revTime(): Chunk | null {\n    return this._revTime && typeof this._revTime === 'object' ? this._revTime : null\n  }\n\n  get isLoading(): boolean {\n    return this._isRunning\n  }\n\n  get realRevChunk(): Chunk {\n    return this.revTime || this.timeline.lastChunk()\n  }\n\n  /** Returns true when there's an older revision we want to render. */\n  onOlderRevision(): boolean {\n    return Boolean(this._rev) && (this.selectionState === 'range' || this.selectionState === 'rev')\n  }\n\n  findRangeForNewRev(rev: Chunk): [string | null, string | null] {\n    const revTimeId = this.timeline.isLatestChunk(rev) ? null : this.timeline.createTimeId(rev)\n\n    if (!this._since) {\n      return [null, revTimeId]\n    }\n\n    const sinceChunk = this.sinceTime\n    if (sinceChunk && sinceChunk.index < rev.index) {\n      return [this._since, revTimeId]\n    }\n\n    return ['@lastPublished', revTimeId]\n  }\n\n  findRangeForNewSince(since: Chunk): [string, string | null] {\n    const revChunk = this.revTime\n\n    // If the the `since` timestamp is earlier than the `rev`, then we can\n    // accept it. Otherwise we'll move the current revision to the current draft.\n\n    if (revChunk && since.index < revChunk.index) {\n      return [this.timeline.createTimeId(since), this._rev]\n    }\n\n    return [this.timeline.createTimeId(since), null]\n  }\n\n  setRevTime(rev: string | null): void {\n    this._rev = rev\n    this._revTime = rev ? this.timeline.parseTimeId(rev) : null\n\n    if (this._since === '@lastPublished') {\n      // Make sure we invalidate it since this depends on the _rev.\n      this._since = null\n      this._sinceTime = null\n    }\n  }\n\n  setSinceTime(since: string | null): void {\n    if (since === '@lastPublished') {\n      if (typeof this._revTime === 'string') {\n        this._sinceTime = this._revTime\n      } else {\n        this._sinceTime = this.timeline.findLastPublishedBefore(this._revTime)\n      }\n    } else {\n      this._sinceTime = since ? this.timeline.parseTimeId(since) : null\n    }\n\n    this._since = since\n  }\n\n  sinceAttributes(): Record<string, unknown> | null {\n    return this._sinceTime && this._reconstruction ? this._reconstruction.startAttributes() : null\n  }\n\n  displayed(): Record<string, unknown> | null {\n    return this._revTime && this._reconstruction ? this._reconstruction.endAttributes() : null\n  }\n\n  setReconstruction(since: Chunk | null, rev: Chunk): void {\n    if (this._reconstruction && this._reconstruction.same(since, rev)) return\n    this._reconstruction = new Reconstruction(\n      this.timeline,\n      this._aligner.currentDocument,\n      since,\n      rev,\n    )\n  }\n\n  currentDiff(): Diff<Annotation> | null {\n    return this._reconstruction ? this._reconstruction.diff() : null\n  }\n\n  currentObjectDiff(): ObjectDiff<Annotation> | null {\n    const diff = this.currentDiff()\n    if (diff) {\n      if (diff.type === 'null') return null\n      if (diff.type !== 'object') throw new Error(`ObjectDiff expected, got ${diff.type}`)\n    }\n\n    return diff as ObjectDiff<Annotation>\n  }\n\n  handleRemoteMutation(ev: RemoteSnapshotVersionEvent): void {\n    this._aligner.appendRemoteSnapshotEvent(ev)\n    this.markChange()\n\n    // Make sure we fetch history as soon as possible.\n    if (this._aligner.acceptsHistory) this.start()\n  }\n\n  start(): void {\n    if (this._didErr) return\n\n    if (!this._isRunning) {\n      this._isRunning = true\n\n      this.tick().then(() => {\n        this._isRunning = false\n      })\n    }\n  }\n\n  resume(): void {\n    this._isSuspended = false\n  }\n\n  suspend(): void {\n    this._isSuspended = true\n  }\n\n  private async tick() {\n    const shouldFetchMore =\n      this._aligner.acceptsHistory &&\n      !this.timeline.reachedEarliestEntry &&\n      (this.selectionState === 'loading' ||\n        this._fetchMore ||\n        this.timeline.chunkCount <= this._fetchAtLeast) &&\n      !this._isSuspended\n\n    if (!shouldFetchMore) {\n      this._isRunning = false\n      return\n    }\n\n    try {\n      await this.fetchMoreTransactions()\n    } catch (err) {\n      this._didErr = true\n      this.handler?.(err, this)\n      return\n    }\n\n    await this.tick()\n  }\n\n  private async fetchMoreTransactions() {\n    const publishedId = this.timeline.publishedId\n    const draftId = this.timeline.draftId\n    const clientConfig = this.client.config()\n    const limit = TRANSLOG_ENTRY_LIMIT\n\n    let queryParams = `tag=sanity.studio.structure.history&effectFormat=mendoza&excludeContent=true&excludeMutations=true&includeIdentifiedDocumentsOnly=true&reverse=true&limit=${limit}`\n    let tid = this._aligner.earliestTransactionId\n    if (tid) {\n      queryParams += `&toTransaction=${tid}`\n    }\n\n    const transactionsUrl = this.client.getUrl(\n      `/data/history/${clientConfig.dataset}/transactions/${publishedId},${draftId}?${queryParams}`,\n    )\n    const stream = await getJsonStream(transactionsUrl, clientConfig.token)\n    const reader = stream.getReader()\n    let count = 0\n\n    for (;;) {\n      // eslint-disable-next-line no-await-in-loop\n      const result = await reader.read()\n      if (result.done) break\n\n      if ('error' in result.value) {\n        throw new Error(result.value.error.description || result.value.error.type)\n      }\n\n      count++\n\n      if (result.value.id === tid) {\n        // toTransaction is inclusive so we must ignore it when we fetch the next page\n        continue\n      }\n\n      // For some reason, the aligner is now interested in a different set of entries.\n      // This can happen if a new snapshot comes in as we're streaming the translog.\n      // In this case it's safe to abort, and the run-loop will re-schedule it correctly.\n      if (this._aligner.earliestTransactionId !== tid || !this._aligner.acceptsHistory) {\n        return\n      }\n\n      this._aligner.prependHistoryEvent(result.value)\n      tid = this._aligner.earliestTransactionId\n    }\n\n    // Same consistency checking here:\n    if (this._aligner.earliestTransactionId !== tid || !this._aligner.acceptsHistory) {\n      return\n    }\n\n    if (count < limit) {\n      this._aligner.didReachEarliestEntry()\n    }\n\n    this.markChange()\n  }\n\n  private markChange() {\n    this.timeline.updateChunks()\n\n    this.setRevTime(this._rev)\n    this.setSinceTime(this._rev)\n\n    this.version++\n    this.handler?.(null, this)\n  }\n}\n","import {type Action, type SanityClient} from '@sanity/client'\nimport {\n  isReference,\n  type Reference,\n  type SanityDocument,\n  type TransactionLogEventWithMutations,\n} from '@sanity/types'\nimport {reduce as jsonReduce} from 'json-reduce'\nimport {from, type Observable} from 'rxjs'\nimport {map, mergeMap} from 'rxjs/operators'\n\nimport {isDev} from '../../../environment'\nimport {getDraftId, getIdPair, getPublishedId, getVersionFromId, isRecord} from '../../../util'\nimport {actionsApiClient} from '../document/document-pair/utils/actionsApiClient'\nimport {Timeline, TimelineController} from './history'\n\n/**\n * @hidden\n * @beta */\nexport interface HistoryStore {\n  getDocumentAtRevision: (\n    documentId: string,\n    revision: string,\n  ) => Promise<SanityDocument | undefined>\n\n  getHistory: (\n    documentIds: string[],\n    options?: {time?: string; revision?: string},\n  ) => Promise<{documents: SanityDocument[]}>\n\n  getTransactions: (documentIds: string[]) => Promise<TransactionLogEventWithMutations[]>\n\n  restore: (id: string, targetId: string, rev: string, options?: RestoreOptions) => Observable<void>\n\n  /** @internal */\n  getTimelineController: (options: {\n    client: SanityClient\n    documentId: string\n    documentType: string\n  }) => TimelineController\n}\n\ninterface RestoreOptions {\n  fromDeleted: boolean\n  useServerDocumentActions?: boolean\n}\n\nconst documentRevisionCache: Record<string, Promise<SanityDocument | undefined> | undefined> =\n  Object.create(null)\n\nconst getHistory = (\n  client: SanityClient,\n  documentIds: string[],\n  options: {time?: string; revision?: string} = {},\n): Promise<{documents: SanityDocument[]}> => {\n  const ids = Array.isArray(documentIds) ? documentIds : [documentIds]\n  const {time, revision} = options\n\n  if (time && revision) {\n    throw new Error(`getHistory can't handle both time and revision parameters`)\n  }\n\n  const dataset = client.config().dataset\n  let url = `/data/history/${dataset}/documents/${ids.join(',')}`\n\n  if (revision) {\n    url = `${url}?revision=${revision}`\n  } else {\n    const timestamp = time || new Date().toISOString()\n\n    url = `${url}?time=${timestamp}`\n  }\n\n  return client.request({url})\n}\n\nconst getDocumentAtRevision = (\n  client: SanityClient,\n  documentId: string,\n  revision: string,\n): Promise<SanityDocument | undefined> => {\n  const publishedId = getPublishedId(documentId)\n  const draftId = getDraftId(documentId)\n  const cacheKey = `${publishedId}@${revision}`\n  const cached = documentRevisionCache[cacheKey]\n  if (cached) {\n    return cached\n  }\n\n  const dataset = client.config().dataset\n  const url = `/data/history/${dataset}/documents/${publishedId},${draftId}?revision=${revision}`\n\n  const entry = client.request<{documents?: SanityDocument[]}>({url}).then((result) => {\n    const documents = result.documents || []\n    const published = documents.find((res) => res._id === publishedId)\n    const draft = documents.find((res) => res._id === draftId)\n    return draft || published\n  })\n\n  documentRevisionCache[cacheKey] = entry\n  return entry\n}\n\nconst getTimelineController = ({\n  client,\n  documentId,\n  documentType,\n}: {\n  client: SanityClient\n  documentId: string\n  documentType: string\n}): TimelineController => {\n  const timeline = new Timeline({\n    enableTrace: isDev,\n    publishedId: documentId,\n  })\n  return new TimelineController({\n    client,\n    documentId,\n    documentType,\n    timeline,\n  })\n}\n\nconst getTransactions = async (\n  client: SanityClient,\n  documentIds: string | string[],\n): Promise<TransactionLogEventWithMutations[]> => {\n  const ids = Array.isArray(documentIds) ? documentIds : [documentIds]\n  const dataset = client.config().dataset\n  const query = {excludeContent: 'true', includeIdentifiedDocumentsOnly: 'true'}\n  const url = `/data/history/${dataset}/transactions/${ids.join(',')}`\n  const result = await client.request({url, query})\n  const transactions = result\n    .toString('utf8')\n    .split('\\n')\n    .filter(Boolean)\n    .map((line: string) => JSON.parse(line))\n\n  return transactions\n}\n\nconst getAllRefIds = (doc: SanityDocument): string[] =>\n  jsonReduce(\n    doc as any,\n    (acc: any, node) => (isReference(node) && !acc.includes(node._ref) ? [...acc, node._ref] : acc),\n    [],\n  )\n\nfunction jsonMap(value: unknown, mapFn: any): any {\n  if (Array.isArray(value)) {\n    return mapFn(\n      value.map((item) => jsonMap(item, mapFn)).filter((item) => typeof item !== 'undefined'),\n    )\n  }\n\n  if (isRecord(value)) {\n    return mapFn(\n      Object.keys(value).reduce<Record<string, unknown>>((res, key) => {\n        const mappedValue = jsonMap(value[key], mapFn)\n        if (typeof mappedValue !== 'undefined') {\n          res[key] = mappedValue\n        }\n\n        return res\n      }, {}),\n    )\n  }\n\n  return mapFn(value)\n}\n\nconst mapRefNodes = (doc: SanityDocument, mapFn: (node: Reference) => Reference | undefined) =>\n  jsonMap(doc, (node: unknown) => (isReference(node) ? mapFn(node) : node))\n\n/** @internal */\nexport const removeMissingReferences = (\n  doc: SanityDocument,\n  existingIds: Record<string, boolean | undefined>,\n): SanityDocument =>\n  mapRefNodes(doc, (refNode) => {\n    const documentExists = existingIds[refNode._ref]\n    return documentExists ? refNode : undefined\n  })\n\nfunction restore(\n  client: SanityClient,\n  documentId: string,\n  targetDocumentId: string,\n  rev: string,\n  options?: RestoreOptions,\n): Observable<void> {\n  return from(getDocumentAtRevision(client, documentId, rev)).pipe(\n    mergeMap((documentAtRevision) => {\n      if (!documentAtRevision) {\n        throw new Error(`Unable to find document with ID ${documentId} at revision ${rev}`)\n      }\n\n      const existingIdsQuery = getAllRefIds(documentAtRevision)\n        .map((refId) => `\"${refId}\": defined(*[_id==\"${refId}\"]._id)`)\n        .join(',')\n\n      return client.observable\n        .fetch<Record<string, boolean | undefined>>(`{${existingIdsQuery}}`)\n        .pipe(map((existingIds) => removeMissingReferences(documentAtRevision, existingIds)))\n    }),\n    map((documentAtRevision) => {\n      // Remove _updatedAt\n      const {_updatedAt, ...document} = documentAtRevision\n      return {...document, _id: targetDocumentId}\n    }),\n    mergeMap((restoredDraft) => {\n      if (options?.useServerDocumentActions) {\n        const replaceDraftAction: Action = {\n          actionType: 'sanity.action.document.replaceDraft',\n          publishedId: documentId,\n          attributes: restoredDraft,\n        }\n        return actionsApiClient(\n          client,\n          getIdPair(documentId, {version: getVersionFromId(documentId)}),\n        ).observable.action(\n          options.fromDeleted\n            ? [\n                {\n                  actionType: 'sanity.action.document.create',\n                  publishedId: documentId,\n                  attributes: restoredDraft,\n                  // This will guard against a race where someone else restores a deleted document at the same time\n                  ifExists: 'fail',\n                },\n                replaceDraftAction,\n              ]\n            : replaceDraftAction,\n        )\n      }\n\n      return client.observable.createOrReplace(restoredDraft, {visibility: 'async'})\n    }),\n    map(() => undefined),\n  )\n}\n\n/** @internal */\nexport interface HistoryStoreOptions {\n  client: SanityClient\n}\n\n/** @internal */\nexport function createHistoryStore({client}: HistoryStoreOptions): HistoryStore {\n  return {\n    getDocumentAtRevision: (documentId, revision) =>\n      getDocumentAtRevision(client, documentId, revision),\n\n    getHistory: (documentIds, options) => getHistory(client, documentIds, options),\n\n    getTransactions: (documentIds) => getTransactions(client, documentIds),\n\n    restore: (id, targetId, rev, options) => restore(client, id, targetId, rev, options),\n\n    getTimelineController,\n  }\n}\n","import {useSyncExternalStoreWithSelector} from 'use-sync-external-store/with-selector.js'\n\nimport {type TimelineState, type TimelineStore} from './useTimelineStore'\n\n/**\n * Custom hook which wraps around `useSyncExternalStore`.\n * Accepts a selector function which can be used to opt-in to specific timelineStore updates.\n *\n * @internal\n */\nexport function useTimelineSelector<ReturnValue>(\n  timelineStore: TimelineStore | undefined,\n  selector: (timelineState: TimelineState) => ReturnValue,\n): ReturnValue {\n  if (!timelineStore) {\n    throw new Error(\n      'Passed timelineStore is undefined, if your are using the events timeline, call useEvents() instead. If you need to use this hook, opt in by setting the beta.eventsAPI.enabled feature flag to false',\n    )\n  }\n  return useSyncExternalStoreWithSelector(\n    timelineStore.subscribe,\n    timelineStore.getSnapshot,\n    null,\n    selector,\n  )\n}\n","import {type ObjectDiff} from '@sanity/diff'\nimport {useEffect, useMemo, useRef} from 'react'\nimport deepEquals from 'react-fast-compare'\nimport {\n  BehaviorSubject,\n  catchError,\n  distinctUntilChanged,\n  map,\n  of,\n  type Subscription,\n  tap,\n} from 'rxjs'\n\nimport {\n  type Annotation,\n  type Chunk,\n  type SelectionState,\n  type TimelineController,\n  useHistoryStore,\n  useWorkspace,\n} from '../../..'\nimport {useClient} from '../../../hooks'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../../studioClient'\nimport {remoteSnapshots, type RemoteSnapshotVersionEvent} from '../document'\nimport {fetchFeatureToggle} from '../document/document-pair/utils/fetchFeatureToggle'\n\ninterface UseTimelineControllerOpts {\n  documentId: string\n  documentType: string\n  onError?: (err: Error) => void\n  rev?: string\n  since?: string\n}\n\n/** @internal */\nexport interface TimelineState {\n  chunks: Chunk[]\n  diff: ObjectDiff<Annotation, Record<string, any>> | null\n  /** null is used here when the chunks hasn't loaded / is not known */\n  hasMoreChunks: boolean | null\n  isLoading: boolean\n  /**\n   * Whether this timeline is fully loaded and completely empty (true for new documents)\n   * It can be `null` when the chunks hasn't loaded / is not known\n   */\n  isPristine: boolean | null\n  lastNonDeletedRevId: string | null\n  onOlderRevision: boolean\n  realRevChunk: Chunk | null\n  revTime: Chunk | null\n  selectionState: SelectionState\n  sinceAttributes: Record<string, unknown> | null\n  sinceTime: Chunk | null\n  timelineDisplayed: Record<string, unknown> | null\n  timelineReady: boolean\n}\n\nconst INITIAL_TIMELINE_STATE: TimelineState = {\n  chunks: [],\n  diff: null,\n  hasMoreChunks: null,\n  isLoading: false,\n  isPristine: null,\n  lastNonDeletedRevId: null,\n  onOlderRevision: false,\n  realRevChunk: null,\n  revTime: null,\n  selectionState: 'inactive',\n  sinceAttributes: null,\n  sinceTime: null,\n  timelineDisplayed: null,\n  timelineReady: false,\n}\n\n/** @internal */\nexport interface TimelineStore {\n  findRangeForRev: TimelineController['findRangeForNewRev']\n  findRangeForSince: TimelineController['findRangeForNewSince']\n  loadMore: () => void\n  getSnapshot: () => TimelineState\n  subscribe: (callback: () => void) => () => void\n}\n\n/**\n * Creates a store which handles the creation of a document Timeline,\n * TimelineController and also fetches pre-requisite document snapshots.\n *\n * `TimelineStore` exposes select TimelineController methods used to query\n * ranges and fetch more transactions. It can also be used with\n * `useSyncExternalStore` to subscribe to selected state changes.\n *\n * @internal\n * */\nexport function useTimelineStore({\n  documentId,\n  documentType,\n  onError,\n  rev,\n  since,\n}: UseTimelineControllerOpts): TimelineStore {\n  const historyStore = useHistoryStore()\n  const snapshotsSubscriptionRef = useRef<Subscription | null>(null)\n  const timelineStateRef = useRef<TimelineState>(INITIAL_TIMELINE_STATE)\n  const client = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n  const workspace = useWorkspace()\n\n  /**\n   * The mutable TimelineController, used internally\n   */\n  const controller = useMemo(\n    () =>\n      historyStore.getTimelineController({\n        client,\n        documentId,\n        documentType,\n      }),\n    [client, documentId, documentType, historyStore],\n  )\n\n  /**\n   * A BehaviorSubject which can be subscribed by multiple observers, which broadcasts\n   * the the latest state of the (mutable) TimelineController.\n   */\n  const timelineController$ = useMemo(\n    () => new BehaviorSubject<TimelineController>(controller),\n    [controller],\n  )\n\n  /**\n   * Broadcasts the updated state on TimelineController's `handler` updates (as well as on mount / unmount).\n   *\n   * Note that TimelineController triggers updates very frequently when fetching transactions, which it does so\n   * in fairly small batches.\n   *\n   * This will also suspend TimelineController transaction fetching on cleanup, ensuring that fetches don't\n   * continue once the document pane has been closed.\n   */\n  useEffect(() => {\n    controller.setRange(since || null, rev || null)\n    timelineController$.next(controller)\n\n    controller.handler = (err, innerController) => {\n      if (err) {\n        timelineController$.error(err)\n      } else {\n        /**\n         * NOTE: TimelineController requires that you call `setRange` manually whenever its internal\n         * timeline has changed (e.g. has a result of fetched transactions).\n         * Ideally, TimelineController would be updated to handle this automatically for us.\n         * Until then, this workaround waits until the next call stack before calling `setRange`.\n         */\n        setTimeout(() => {\n          innerController.setRange(since || null, rev || null)\n          timelineController$.next(innerController)\n        }, 0)\n      }\n    }\n    controller.resume()\n    return () => controller.suspend()\n  }, [rev, since, controller, timelineController$])\n\n  const serverActionsEnabled = useMemo(() => {\n    const configFlag = workspace.__internal_serverDocumentActions?.enabled\n    // If it's explicitly set, let it override the feature toggle\n    return typeof configFlag === 'boolean' ? of(configFlag as boolean) : fetchFeatureToggle(client)\n  }, [client, workspace.__internal_serverDocumentActions?.enabled])\n\n  /**\n   * Fetch document snapshots and update the mutable controller.\n   * Unsubscribes on clean up, preventing double fetches in strict mode.\n   */\n  useEffect(() => {\n    if (!snapshotsSubscriptionRef.current) {\n      snapshotsSubscriptionRef.current = remoteSnapshots(\n        client,\n        {draftId: `drafts.${documentId}`, publishedId: documentId},\n        documentType,\n        serverActionsEnabled,\n      ).subscribe((ev: RemoteSnapshotVersionEvent) => {\n        controller.handleRemoteMutation(ev)\n      })\n    }\n    return () => {\n      if (snapshotsSubscriptionRef.current) {\n        snapshotsSubscriptionRef.current.unsubscribe()\n        snapshotsSubscriptionRef.current = null\n      }\n    }\n  }, [client, controller, documentId, documentType, serverActionsEnabled])\n\n  const timelineStore = useMemo(() => {\n    return {\n      findRangeForRev: (chunk: Chunk) => controller.findRangeForNewRev(chunk),\n      findRangeForSince: (chunk: Chunk) => controller.findRangeForNewSince(chunk),\n      loadMore: () => {\n        controller.setLoadMore(true)\n      },\n      getSnapshot: () => timelineStateRef.current,\n      subscribe: (callback: () => void) => {\n        const subscription = timelineController$\n          .pipe(\n            map((innerController) => {\n              const chunks = innerController.timeline.mapChunks((c) => c)\n              const lastNonDeletedChunk = chunks.filter(\n                (chunk) => !['delete', 'initial'].includes(chunk.type),\n              )\n              const hasMoreChunks = !innerController.timeline.reachedEarliestEntry\n\n              // 'Switch the faucet off' once we know we have enough chunks to reasonably display overflow.\n              // Here, 16 is just an arbitrary number which will probably cover most regular screen sizes.\n              if (hasMoreChunks && chunks.length > 16) {\n                innerController.setLoadMore(false)\n              }\n\n              const timelineReady = !['invalid', 'loading'].includes(innerController.selectionState)\n              return {\n                chunks,\n                diff: innerController.sinceTime ? innerController.currentObjectDiff() : null,\n                isLoading: innerController.isLoading,\n                isPristine: timelineReady ? chunks.length === 0 && hasMoreChunks === false : null,\n                hasMoreChunks: !innerController.timeline.reachedEarliestEntry,\n                lastNonDeletedRevId: lastNonDeletedChunk?.[0]?.id,\n                onOlderRevision: innerController.onOlderRevision(),\n                realRevChunk: innerController.realRevChunk,\n                revTime: innerController.revTime,\n                selectionState: innerController.selectionState,\n                sinceAttributes: innerController.sinceAttributes(),\n                sinceTime: innerController.sinceTime,\n                timelineDisplayed: innerController.displayed(),\n                timelineReady,\n              }\n            }),\n            // Only emit (and in turn, re-render) when values have changed\n            distinctUntilChanged(deepEquals),\n            // Emit initial timeline state whenever we encounter an error in TimelineController's `handler` callback.\n            // A little ham-fisted, but also reflects how we handle timeline errors in the UI\n            // (i.e. no timeline state or diffs are rendered and we revert to the current editable document)\n            catchError((err) => {\n              onError?.(err)\n              return of(INITIAL_TIMELINE_STATE)\n            }),\n            tap((timelineState) => {\n              timelineStateRef.current = timelineState\n            }),\n            // Trigger callback function required by `useSyncExternalStore` to denote when to re-render\n            tap(callback),\n          )\n          .subscribe()\n\n        return () => subscription.unsubscribe()\n      },\n    }\n  }, [controller, onError, timelineController$])\n\n  return timelineStore\n}\n","import {type BifurClient} from '@sanity/bifur-client'\nimport {EMPTY, type Observable} from 'rxjs'\nimport {map, share} from 'rxjs/operators'\n\nimport {type PresenceLocation} from '../types'\nimport {type Transport, type TransportEvent, type TransportMessage} from './transport'\n\ntype BifurStateMessage = {\n  type: 'state'\n  i: string\n  m: {\n    sessionId: string\n    locations: PresenceLocation[]\n  }\n}\n\ntype BifurDisconnectMessage = {\n  type: 'disconnect'\n  i: string\n  m: {session: string}\n}\n\ntype RollCallEvent = {\n  type: 'rollCall'\n  i: string\n  session: string\n}\n\ntype IncomingBifurEvent<T> = RollCallEvent | BifurStateMessage | BifurDisconnectMessage\n\nconst handleIncomingMessage = (event: IncomingBifurEvent<Location[]>): TransportEvent => {\n  if (event.type === 'rollCall') {\n    return {\n      type: 'rollCall',\n      userId: event.i,\n      sessionId: event.session,\n    }\n  }\n  if (event.type === 'state') {\n    const {sessionId, locations} = event.m\n    return {\n      type: 'state',\n      userId: event.i,\n      sessionId: sessionId,\n      timestamp: new Date().toISOString(),\n      locations,\n    }\n  }\n\n  if (event.type === 'disconnect') {\n    return {\n      type: 'disconnect',\n      userId: event.i,\n      sessionId: event.m.session,\n      timestamp: new Date().toISOString(),\n    }\n  }\n\n  throw new Error(`Got unknown presence event: ${JSON.stringify(event)}`)\n}\n\nexport const createBifurTransport = (bifur: BifurClient, sessionId: string): Transport => {\n  const incomingEvents$: Observable<TransportEvent> = bifur\n    .listen<IncomingBifurEvent<Location[]>>('presence')\n    .pipe(map(handleIncomingMessage))\n\n  const dispatchMessage = (message: TransportMessage): Observable<undefined> => {\n    if (message.type === 'rollCall') {\n      return bifur.request('presence_rollcall', {session: sessionId})\n    }\n\n    if (message.type === 'state') {\n      return bifur.request('presence_announce', {\n        data: {locations: message.locations, sessionId},\n      })\n    }\n\n    if (message.type === 'disconnect') {\n      return bifur.request('presence_disconnect', {session: sessionId})\n    }\n\n    return EMPTY\n  }\n\n  return [incomingEvents$.pipe(share()), dispatchMessage]\n}\n","import {sample} from 'lodash'\nimport {defer, timer} from 'rxjs'\nimport {map, mergeMapTo, shareReplay} from 'rxjs/operators'\n\nimport {type StateEvent} from './message-transports/transport'\n\nconst USERIDS = [\n  'pqSMwf6hH',\n  'pnLYqNfv5',\n  'priDVVmy8',\n  'p0NFOU0j8',\n  'pTDl2jw8d',\n  'pHMeQnTse',\n  'pDQYzJbyS',\n  'pZyoPHKUs',\n  'p4Tyi2Be5',\n  'pb9vii060',\n  'pE8yhOisw',\n  'p7Fd2C6Cj',\n  'p3exSgYCx',\n  'pbIQRYViC',\n  'p8GJaTEhN',\n  'p27ewL8aM',\n  'pYg97z75S',\n  'pdLr4quHv',\n  'pkJXiDgg6',\n  'pkl4UAKcA',\n\n  // Included to ensure we handle the case when a user profile cannot\n  // be fetched due to insufficient privileges or similar\n  'pNoExists',\n]\n\nconst PATHS = [\n  ['nested', 'first'],\n  ['nested', 'second'],\n  [\n    'nestedArray',\n    {_key: '565c867c8dac'},\n    'arrayNo1',\n    {_key: 'a645548a8f01'},\n    'arrayNo1',\n    {_key: '1685e372c40f'},\n    'fieldNo0',\n  ],\n  ['nestedArray', {_key: '565c867c8dac'}, 'fieldNo0'],\n  ['nestedArray', {_key: '565c867c8dac'}, 'arrayNo19', {_key: 'a02e7a93e2a2'}, 'fieldNo0'],\n  ['nestedArray', {_key: '565c867c8dac'}, 'arrayNo19', {_key: 'a02e7a93e2a2'}, 'fieldNo19'],\n  ['address', 'country'],\n  ['address', 'street'],\n  ['customInputWithDefaultPresence', 'row3', 'cell3'],\n]\n\nexport const mock$ = defer(() => timer(0, 10000)).pipe(\n  mergeMapTo(USERIDS),\n  map(\n    (id, n): StateEvent => ({\n      type: 'state',\n      userId: id,\n      sessionId: id + n,\n      timestamp: new Date().toISOString(),\n      locations: [\n        {\n          type: 'document',\n          documentId: 'presence-debug',\n          lastActiveAt: new Date().toISOString(),\n          path: sample(PATHS),\n        },\n      ] as any,\n    }),\n  ),\n  shareReplay(),\n)\n","/* eslint-disable camelcase */\n\nimport {type BifurClient} from '@sanity/bifur-client'\nimport {type User} from '@sanity/types'\nimport {flatten, groupBy, isEqual, omit, uniq} from 'lodash'\nimport {nanoid} from 'nanoid'\nimport {\n  BehaviorSubject,\n  combineLatest,\n  defer,\n  EMPTY,\n  from,\n  fromEvent,\n  merge,\n  NEVER,\n  type Observable,\n  timer,\n} from 'rxjs'\nimport {\n  auditTime,\n  distinctUntilChanged,\n  filter,\n  map,\n  mergeMapTo,\n  scan,\n  share,\n  shareReplay,\n  switchMap,\n  switchMapTo,\n  takeUntil,\n  tap,\n  withLatestFrom,\n} from 'rxjs/operators'\n\nimport {type ConnectionStatusStore} from '../connection-status/connection-status-store'\nimport {debugParams$} from '../debugParams'\nimport {type UserStore} from '../user'\nimport {createBifurTransport} from './message-transports/bifurTransport'\nimport {\n  type DisconnectEvent,\n  type RollCallEvent,\n  type StateEvent,\n  type TransportEvent,\n} from './message-transports/transport'\nimport {mock$} from './mock-events'\nimport {\n  type DocumentPresence,\n  type GlobalPresence,\n  type PresenceLocation,\n  type Session,\n  type UserSessionPair,\n} from './types'\n\n/**\n * @hidden\n * @beta */\nexport interface PresenceStore {\n  /**\n   * @internal\n   */\n  documentPresence: (documentId: string) => Observable<DocumentPresence[]>\n\n  /**\n   * @internal\n   */\n  globalPresence$: Observable<GlobalPresence[]>\n\n  /**\n   * @internal\n   */\n  reportLocations: (locations: PresenceLocation[]) => Observable<void>\n\n  /**\n   * @internal\n   */\n  setLocation: (nextLocation: PresenceLocation[]) => void\n\n  /**\n   * @internal\n   */\n  debugPresenceParam$: Observable<string[]>\n}\n\nconst KEY = 'presence_session_id'\nconst generate = () => nanoid(16)\n\n// We're keeping the session id in sessionStorage as it will survive page reloads.\n// todo:\n//  There's a potential issue with window.open(...) here as it inherits the top level session storage and thus will\n//  re-use session ids:\n//    > Opening a page in a new tab or window creates a new session with the value of the top-level browsing context,\n//      which differs from how session cookies work.\n//      More at https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage\n//  This is _probably_ a quite marginal case and not going to be much of a issue in practice\nfunction getSessionId() {\n  try {\n    return window.sessionStorage.getItem(KEY)\n  } catch (err) {\n    // We don't want to fail hard if session storage can't be accessed for some reason\n  }\n  return null\n}\n\nfunction setSessionId(id: string) {\n  try {\n    window.sessionStorage.setItem(KEY, id)\n  } catch (err) {\n    // We don't want to fail hard if session storage can't be accessed for some reason\n  }\n  return id\n}\n\n/** @internal */\nexport const SESSION_ID = getSessionId() || setSessionId(generate())\n\n/** @internal */\nexport function createPresenceStore(context: {\n  bifur: BifurClient\n  connectionStatusStore: ConnectionStatusStore\n  userStore: UserStore\n}): PresenceStore {\n  const {bifur, connectionStatusStore, userStore} = context\n\n  const [presenceEvents$, sendMessage] = createBifurTransport(bifur, SESSION_ID)\n\n  const currentLocation$ = new BehaviorSubject<PresenceLocation[]>([])\n  const locationChange$ = currentLocation$.pipe(distinctUntilChanged())\n\n  // export\n  const setLocation = (nextLocation: PresenceLocation[]) => {\n    currentLocation$.next(nextLocation)\n  }\n\n  // export\n  const reportLocations = (locations: PresenceLocation[]) =>\n    sendMessage({type: 'state', locations: locations})\n\n  const requestRollCall = () => sendMessage({type: 'rollCall'})\n\n  const rollCallRequests$ = presenceEvents$.pipe(\n    filter((event: TransportEvent): event is RollCallEvent => event.type === 'rollCall'),\n    // do not respond to my own rollcall requests\n    filter((event: RollCallEvent) => event.sessionId !== SESSION_ID),\n  )\n\n  const REPORT_MIN_INTERVAL = 30000\n\n  // Interval to report my own location at\n  const reportLocationInterval$ = timer(0, REPORT_MIN_INTERVAL)\n\n  const reportLocation$ = defer(() => merge(locationChange$, rollCallRequests$)).pipe(\n    switchMap(() => reportLocationInterval$),\n    withLatestFrom(currentLocation$),\n    map(([, locations]) => locations),\n    auditTime(200),\n    switchMap((locations) => reportLocations(locations)),\n    mergeMapTo(EMPTY),\n    share(),\n  )\n\n  // This represents my rollcall request to other clients\n  // Note: We are requesting a rollcall whenever we (re)connect\n  const myRollCall$ = defer(() => requestRollCall()).pipe(mergeMapTo(EMPTY))\n\n  const connectionChange$ = connectionStatusStore.connectionStatus$.pipe(\n    map((status) => status.type),\n    filter((statusType) => statusType === 'connected' || statusType === 'error'),\n    distinctUntilChanged(),\n  )\n\n  // export\n  const debugPresenceParam$ = debugParams$.pipe(\n    map((args) => args.find((arg) => arg.startsWith('presence='))),\n    map(\n      (arg) =>\n        arg\n          ?.split('presence=')[1]\n          .split(',')\n          .map((r) => r.trim()) || [],\n    ),\n  )\n\n  const useMock$ = debugPresenceParam$.pipe(\n    filter((args) => args.includes('fake_others')),\n    tap(() => {\n      // eslint-disable-next-line no-console\n      console.log(\n        'Faking other users present in the studio. They will hang out in the document with _type: \"presence\" and _id: \"presence-debug\"',\n      )\n    }),\n    switchMapTo(mock$),\n  )\n\n  const debugIntrospect$ = debugPresenceParam$.pipe(map((args) => args.includes('show_own')))\n\n  const syncEvent$ = merge(myRollCall$, presenceEvents$).pipe(\n    filter(\n      (event: TransportEvent): event is StateEvent | DisconnectEvent =>\n        event.type === 'state' || event.type === 'disconnect',\n    ),\n  )\n\n  const stateEventToSession = (stateEvent: StateEvent): Session => {\n    return {\n      lastActiveAt: stateEvent.timestamp,\n      locations: stateEvent.locations,\n      sessionId: stateEvent.sessionId,\n      userId: stateEvent.userId,\n    }\n  }\n\n  const states$: Observable<{[sessionId: string]: Session}> = merge(syncEvent$, useMock$).pipe(\n    scan(\n      (keyed, event: StateEvent | DisconnectEvent): {[sessionId: string]: Session} =>\n        event.type === 'disconnect'\n          ? omit(keyed, event.sessionId)\n          : {...keyed, [event.sessionId]: stateEventToSession(event)},\n      {},\n    ),\n  )\n\n  const allSessions$: Observable<UserSessionPair[]> = connectionChange$.pipe(\n    switchMap((status) => (status === 'connected' ? merge(states$, reportLocation$) : NEVER)),\n    map((keyedSessions) => Object.values(keyedSessions)),\n    switchMap((sessions) => {\n      const userIds = uniq(sessions.map((sess) => sess.userId))\n      return from(userStore.getUsers(userIds)).pipe(\n        map((users) =>\n          sessions\n            .map((session) => ({\n              // eslint-disable-next-line max-nested-callbacks\n              user: users.find((res) => res.id === session.userId),\n              session: session,\n            }))\n            // If we failed to find a user profile for a session, remove it\n            .filter(userSessionPairHasUser),\n        ),\n      )\n    }),\n    takeUntil(\n      fromEvent(window, 'beforeunload').pipe(switchMap(() => sendMessage({type: 'disconnect'}))),\n    ),\n    shareReplay({refCount: true, bufferSize: 1}),\n  )\n\n  function userSessionPairHasUser(pair: Partial<UserSessionPair>): pair is UserSessionPair {\n    return Boolean(pair.user && pair.session)\n  }\n\n  // export\n  const globalPresence$: Observable<GlobalPresence[]> = allSessions$.pipe(\n    map((sessions): {user: User; sessions: Session[]}[] => {\n      const grouped = groupBy(\n        sessions.map((s) => s.session),\n        (e) => e.userId,\n      )\n\n      return Object.keys(grouped).map((userId): {user: User; sessions: Session[]} => ({\n        user: sessions.find((s) => s.user.id === userId)?.user as User,\n        sessions: grouped[userId],\n      }))\n    }),\n    withLatestFrom(debugIntrospect$),\n    map(([userAndSessions, debugIntrospect]) =>\n      userAndSessions.filter((userAndSession) => {\n        if (debugIntrospect) {\n          return true\n        }\n\n        const isCurrent = userAndSession.sessions.some((sess) => sess.sessionId === SESSION_ID)\n\n        return !isCurrent\n      }),\n    ),\n    map((userAndSessions) =>\n      userAndSessions.map((userAndSession) => ({\n        user: userAndSession.user,\n        status: 'online',\n        lastActiveAt: userAndSession.sessions.sort()[0]?.lastActiveAt,\n        locations: flatten(\n          (userAndSession.sessions || []).map((session) => session.locations || []),\n        )\n          .map((location) => ({\n            type: location.type,\n            documentId: location.documentId,\n            path: location.path,\n            lastActiveAt: location.lastActiveAt,\n          }))\n          .reduce((prev, curr) => prev.concat(curr), [] as PresenceLocation[]),\n      })),\n    ),\n  )\n\n  // Create a single shared observable for all documents\n  const allDocumentsPresence$ = combineLatest([allSessions$, debugIntrospect$]).pipe(\n    map(([userAndSessions, debugIntrospect]) =>\n      userAndSessions\n        .flatMap((userAndSession) =>\n          (userAndSession.session.locations || []).map((location) => ({\n            documentId: location.documentId,\n            presence: {\n              user: userAndSession.user,\n              lastActiveAt: userAndSession.session.lastActiveAt,\n              path: location.path || [],\n              sessionId: userAndSession.session.sessionId,\n              selection: location?.selection,\n            },\n          })),\n        )\n        .filter((item) => debugIntrospect || item.presence.sessionId !== SESSION_ID),\n    ),\n    shareReplay(1),\n  )\n\n  // export\n  const documentPresence = (documentId: string): Observable<DocumentPresence[]> => {\n    return allDocumentsPresence$.pipe(\n      map((allPresence) =>\n        allPresence.filter((item) => item.documentId === documentId).map((item) => item.presence),\n      ),\n      // Only emit if the presence has changed for this document id\n      distinctUntilChanged((prev, curr) => isEqual(prev, curr)),\n    )\n  }\n\n  return {setLocation, reportLocations, debugPresenceParam$, globalPresence$, documentPresence}\n}\n","import {type SanityClient} from '@sanity/client'\nimport {type Observable} from 'rxjs'\n\nimport {type ProjectData, type ProjectStore} from './types'\n\n/** @internal */\nexport function createProjectStore(context: {client: SanityClient}): ProjectStore {\n  const {client} = context\n  const projectId = client.config().projectId\n  const versionedClient = client.withConfig({apiVersion: '2021-12-15'})\n\n  function get(): Observable<ProjectData> {\n    return versionedClient.observable.request({\n      url: `/projects/${projectId}`,\n    })\n  }\n\n  function getDatasets() {\n    return versionedClient.observable.request({\n      url: `/projects/${projectId}/datasets`,\n    })\n  }\n\n  return {get, getDatasets}\n}\n","import {useEffect, useState} from 'react'\n\nimport {useProjectStore} from '../datastores'\nimport {type ProjectData} from './types'\n\n/** @internal */\nexport function useProject(): {value: ProjectData | null} {\n  const projectStore = useProjectStore()\n  const [value, setValue] = useState<ProjectData | null>(null)\n\n  useEffect(() => {\n    const project$ = projectStore.get()\n    const sub = project$.subscribe(setValue)\n\n    return () => sub.unsubscribe()\n  }, [projectStore])\n\n  return {value}\n}\n","import {useEffect, useState} from 'react'\n\nimport {useProjectStore} from '../datastores'\nimport {type ProjectDatasetData} from './types'\n\n/** @internal */\nexport function useProjectDatasets(): {value: ProjectDatasetData[] | null} {\n  const projectStore = useProjectStore()\n  const [value, setValue] = useState<ProjectDatasetData[] | null>(null)\n\n  useEffect(() => {\n    const project$ = projectStore.getDatasets()\n    const sub = project$.subscribe(setValue)\n\n    return () => sub.unsubscribe()\n  }, [projectStore])\n\n  return {value}\n}\n","import {type SanityClient} from '@sanity/client'\nimport {type CurrentUser, type User} from '@sanity/types'\nimport DataLoader from 'dataloader'\nimport raf from 'raf'\n\nimport {isRecord} from '../../../util'\n\n/** @internal */\nexport interface UserStoreOptions {\n  client: SanityClient\n  currentUser: CurrentUser | null\n}\n\nconst INTERNAL_USER_IDS: User[] = [\n  {\n    id: '<system>',\n    displayName: 'Sanity',\n    imageUrl: 'https://public.sanity.io/logos/favicon-192.png',\n  },\n]\n\n/**\n * @hidden\n * @beta */\nexport interface UserStore {\n  getUser(userId: string): Promise<User | null>\n  getUsers(userIds: string[]): Promise<User[]>\n}\n\n/**\n * Given a `client` and a `currentUser` creates a datastore that handles\n * fetching, batch fetching, and caching users.\n *\n * @internal\n */\nexport function createUserStore({client: _client, currentUser}: UserStoreOptions): UserStore {\n  const client = _client.withConfig({apiVersion: '2021-06-07'})\n\n  const userLoader = new DataLoader<string, User | null>(\n    async (userIds) => {\n      const value = await client.request<(User | null)[]>({\n        uri: `/users/${userIds.join(',')}`,\n        tag: 'users.get',\n      })\n      const response = Array.isArray(value) ? value : [value]\n      const users = response.reduce(\n        (acc, next) => {\n          if (next?.id) {\n            acc[next.id] = next\n          }\n          return acc\n        },\n        {} as Record<string, User | null>,\n      )\n      return userIds.map((id) => users[id] || null)\n    },\n    {\n      batchScheduleFn: (cb) => raf(cb),\n      /**\n       * User IDs are generally 9 bytes long, but external user IDs may be longer.\n       * In order to keep the HTTP header size below ~8KB, we limit the batch size.\n       * ~4kB for user IDs in paths should allow for plenty of headers, if need be.\n       */\n      maxBatchSize: 400,\n    },\n  )\n\n  const userFromCurrentUser: User | null = currentUser && {\n    id: currentUser.id,\n    displayName: currentUser.name,\n    imageUrl: currentUser.profileImage,\n  }\n\n  userLoader.prime('me', userFromCurrentUser)\n\n  if (userFromCurrentUser?.id) {\n    userLoader.prime(userFromCurrentUser.id, userFromCurrentUser)\n  }\n\n  INTERNAL_USER_IDS.forEach((user) => userLoader.prime(user.id, user))\n\n  return {\n    getUser: async (userId) => {\n      if (!userId) return Promise.resolve(null)\n\n      try {\n        return await userLoader.load(userId)\n      } catch (err) {\n        /**\n         * 403 Forbidden responses indicate that the current user doesn't have read access to project members.\n         * In these instances, we don't throw and resolve `null` instead.\n         * Components consuming this (such as `<UserAvatar>`) shouldn't render anything in these cases.\n         */\n        if (err.statusCode === 403) {\n          return Promise.resolve(null)\n        }\n        // Throw all other errors\n        throw err\n      }\n    },\n    getUsers: async (userIds) => {\n      const results = await userLoader.loadMany(userIds)\n      /**\n       * Unlike `load()`, DataLoader's `loadMany()` will always resolve even if it contains `Error` instances.\n       * Here, we remove all Errors (or more specifically, only include records with valid IDs).\n       */\n      return results.filter(\n        (result): result is User => isRecord(result) && typeof result.id === 'string',\n      )\n    },\n  }\n}\n","/* eslint-disable camelcase */\n\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {useCallback, useMemo} from 'react'\nimport {of} from 'rxjs'\n\nimport {useClient, useSchema, useTemplates} from '../../hooks'\nimport {createDocumentPreviewStore, type DocumentPreviewStore} from '../../preview'\nimport {useSource, useWorkspace} from '../../studio'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../studioClient'\nimport {createKeyValueStore, type KeyValueStore} from '../key-value'\nimport {createRenderingContextStore} from '../renderingContext/createRenderingContextStore'\nimport {type RenderingContextStore} from '../renderingContext/types'\nimport {useCurrentUser} from '../user'\nimport {\n  type ConnectionStatusStore,\n  createConnectionStatusStore,\n} from './connection-status/connection-status-store'\nimport {createDocumentStore, type DocumentStore, type LatencyReportEvent} from './document'\nimport {DocumentDesynced} from './document/__telemetry__/documentOutOfSyncEvents.telemetry'\nimport {HighListenerLatencyOccurred} from './document/__telemetry__/listenerLatency.telemetry'\nimport {fetchFeatureToggle} from './document/document-pair/utils/fetchFeatureToggle'\nimport {type OutOfSyncError} from './document/utils/sequentializeListenerEvents'\nimport {createGrantsStore, type GrantsStore} from './grants'\nimport {createHistoryStore, type HistoryStore} from './history'\nimport {createPresenceStore, type PresenceStore} from './presence/presence-store'\nimport {createProjectStore, type ProjectStore} from './project'\nimport {useResourceCache} from './ResourceCacheProvider'\nimport {createUserStore, type UserStore} from './user'\n\n/**\n * Latencies below this value will not be logged\n */\nconst IGNORE_LATENCY_BELOW_MS = 1000\n\n/**\n * @hidden\n * @beta */\nexport function useUserStore(): UserStore {\n  const {getClient, currentUser} = useSource()\n  const resourceCache = useResourceCache()\n  const client = getClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n\n  return useMemo(() => {\n    const userStore =\n      resourceCache.get<UserStore>({\n        namespace: 'userStore',\n        dependencies: [client, currentUser],\n      }) || createUserStore({client, currentUser})\n\n    resourceCache.set({\n      namespace: 'userStore',\n      dependencies: [client, currentUser],\n      value: userStore,\n    })\n\n    return userStore\n  }, [client, currentUser, resourceCache])\n}\n\n/**\n * @hidden\n * @beta */\nexport function useGrantsStore(): GrantsStore {\n  const {getClient} = useSource()\n  const client = getClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n  const currentUser = useCurrentUser()\n  const resourceCache = useResourceCache()\n\n  return useMemo(() => {\n    const grantsStore =\n      resourceCache.get<GrantsStore>({\n        namespace: 'grantsStore',\n        dependencies: [client, currentUser],\n      }) || createGrantsStore({client, userId: currentUser?.id || null})\n\n    resourceCache.set({\n      namespace: 'grantsStore',\n      dependencies: [client, currentUser],\n      value: grantsStore,\n    })\n\n    return grantsStore\n  }, [client, currentUser, resourceCache])\n}\n\n/**\n * @hidden\n * @beta */\nexport function useHistoryStore(): HistoryStore {\n  const client = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n  const resourceCache = useResourceCache()\n\n  return useMemo(() => {\n    const historyStore =\n      resourceCache.get<HistoryStore>({\n        namespace: 'historyStore',\n        dependencies: [client],\n      }) || createHistoryStore({client})\n\n    resourceCache.set({\n      namespace: 'historyStore',\n      dependencies: [client],\n      value: historyStore,\n    })\n\n    return historyStore\n  }, [client, resourceCache])\n}\n\n/**\n * @hidden\n * @beta */\nexport function useDocumentPreviewStore(): DocumentPreviewStore {\n  const client = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n  const resourceCache = useResourceCache()\n\n  return useMemo(() => {\n    const documentPreviewStore =\n      resourceCache.get<DocumentPreviewStore>({\n        namespace: 'documentPreviewStore',\n        dependencies: [client],\n      }) || createDocumentPreviewStore({client})\n\n    resourceCache.set({\n      namespace: 'documentPreviewStore',\n      dependencies: [client],\n      value: documentPreviewStore,\n    })\n\n    return documentPreviewStore\n  }, [client, resourceCache])\n}\n\n/**\n * @hidden\n * @beta */\nexport function useDocumentStore(): DocumentStore {\n  const {getClient, i18n} = useSource()\n  const schema = useSchema()\n  const templates = useTemplates()\n  const resourceCache = useResourceCache()\n  const historyStore = useHistoryStore()\n  const documentPreviewStore = useDocumentPreviewStore()\n  const workspace = useWorkspace()\n\n  const serverActionsEnabled = useMemo(() => {\n    const configFlag = workspace.__internal_serverDocumentActions?.enabled\n    // If it's explicitly set, let it override the feature toggle\n    return typeof configFlag === 'boolean'\n      ? of(configFlag as boolean)\n      : fetchFeatureToggle(getClient(DEFAULT_STUDIO_CLIENT_OPTIONS))\n  }, [getClient, workspace.__internal_serverDocumentActions?.enabled])\n\n  const telemetry = useTelemetry()\n\n  const handleSyncErrorRecovery = useCallback(\n    (error: OutOfSyncError) => {\n      telemetry.log(DocumentDesynced, {errorName: error.name})\n    },\n    [telemetry],\n  )\n\n  const handleReportLatency = useCallback(\n    (event: LatencyReportEvent) => {\n      if (event.latencyMs > IGNORE_LATENCY_BELOW_MS) {\n        telemetry.log(HighListenerLatencyOccurred, {\n          latency: event.latencyMs,\n          shard: event.shard,\n          transactionId: event.transactionId,\n        })\n      }\n    },\n    [telemetry],\n  )\n\n  return useMemo(() => {\n    const documentStore =\n      resourceCache.get<DocumentStore>({\n        namespace: 'documentStore',\n        dependencies: [getClient, documentPreviewStore, historyStore, schema, i18n, workspace],\n      }) ||\n      createDocumentStore({\n        getClient,\n        documentPreviewStore,\n        historyStore,\n        initialValueTemplates: templates,\n        schema,\n        i18n,\n        serverActionsEnabled,\n        extraOptions: {\n          onReportLatency: handleReportLatency,\n          onSyncErrorRecovery: handleSyncErrorRecovery,\n        },\n      })\n\n    resourceCache.set({\n      namespace: 'documentStore',\n      dependencies: [getClient, documentPreviewStore, historyStore, schema, i18n, workspace],\n      value: documentStore,\n    })\n\n    return documentStore\n  }, [\n    resourceCache,\n    getClient,\n    documentPreviewStore,\n    historyStore,\n    schema,\n    i18n,\n    workspace,\n    templates,\n    serverActionsEnabled,\n    handleReportLatency,\n    handleSyncErrorRecovery,\n  ])\n}\n\n/** @internal */\nexport function useConnectionStatusStore(): ConnectionStatusStore {\n  const {bifur} = useSource().__internal\n  const resourceCache = useResourceCache()\n\n  return useMemo(() => {\n    const connectionStatusStore =\n      resourceCache.get<ConnectionStatusStore>({\n        namespace: 'connectionStatusStore',\n        dependencies: [bifur],\n      }) || createConnectionStatusStore({bifur})\n\n    resourceCache.set({\n      namespace: 'connectionStatusStore',\n      dependencies: [bifur],\n      value: connectionStatusStore,\n    })\n\n    return connectionStatusStore\n  }, [bifur, resourceCache])\n}\n\n/**\n * @hidden\n * @beta */\nexport function usePresenceStore(): PresenceStore {\n  const {\n    __internal: {bifur},\n  } = useSource()\n  const resourceCache = useResourceCache()\n  const userStore = useUserStore()\n  const connectionStatusStore = useConnectionStatusStore()\n\n  return useMemo(() => {\n    const presenceStore =\n      resourceCache.get<PresenceStore>({\n        namespace: 'presenceStore',\n        dependencies: [bifur, connectionStatusStore, userStore],\n      }) || createPresenceStore({bifur, connectionStatusStore, userStore})\n\n    resourceCache.set({\n      namespace: 'presenceStore',\n      dependencies: [bifur, connectionStatusStore, userStore],\n      value: presenceStore,\n    })\n\n    return presenceStore\n  }, [bifur, connectionStatusStore, resourceCache, userStore])\n}\n\n/**\n * @hidden\n * @beta */\nexport function useProjectStore(): ProjectStore {\n  const client = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n  const resourceCache = useResourceCache()\n\n  return useMemo(() => {\n    const projectStore =\n      resourceCache.get<ProjectStore>({\n        namespace: 'projectStore',\n        dependencies: [client],\n      }) || createProjectStore({client})\n\n    resourceCache.set({\n      namespace: 'projectStore',\n      dependencies: [client],\n      value: projectStore,\n    })\n\n    return projectStore\n  }, [client, resourceCache])\n}\n\n/** @internal */\nexport function useKeyValueStore(): KeyValueStore {\n  const resourceCache = useResourceCache()\n  const workspace = useWorkspace()\n  const client = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n\n  return useMemo(() => {\n    const keyValueStore =\n      resourceCache.get<KeyValueStore>({\n        dependencies: [workspace],\n        namespace: 'KeyValueStore',\n      }) || createKeyValueStore({client})\n\n    resourceCache.set({\n      dependencies: [workspace],\n      namespace: 'KeyValueStore',\n      value: keyValueStore,\n    })\n\n    return keyValueStore\n  }, [client, resourceCache, workspace])\n}\n\n/** @internal */\nexport function useRenderingContextStore(): RenderingContextStore {\n  const resourceCache = useResourceCache()\n\n  return useMemo(() => {\n    const renderingContextStore =\n      resourceCache.get<RenderingContextStore>({\n        dependencies: [],\n        namespace: 'RenderingContextStore',\n      }) || createRenderingContextStore()\n\n    resourceCache.set({\n      dependencies: [],\n      namespace: 'RenderingContextStore',\n      value: renderingContextStore,\n    })\n\n    return renderingContextStore\n  }, [resourceCache])\n}\n","import {startTransition, useEffect, useReducer} from 'react'\nimport {useObservable} from 'react-rx'\nimport {of} from 'rxjs'\n\nimport {usePresenceStore} from '../datastores'\nimport {type GlobalPresence} from './types'\n\nconst initial: GlobalPresence[] = []\nconst fallback = of(initial)\n\n/** @internal */\nexport function useGlobalPresence(): GlobalPresence[] {\n  const [mounted, mount] = useReducer(() => true, false)\n  // Using `startTransition` here ensures that rapid re-renders that affect the deps used by `usePresenceStore` delay the transition to `mounted=true`, thus avoiding creating websocket connections that will be closed immediately.\n  useEffect(() => startTransition(mount), [])\n\n  const presenceStore = usePresenceStore()\n  return useObservable(mounted ? presenceStore.globalPresence$ : fallback, initial)\n}\n","import {useContext} from 'react'\nimport {EventsContext} from 'sanity/_singletons'\n\nimport {type EventsStore} from './types'\n\ninterface EventsProviderProps {\n  value: EventsStore\n  children: React.ReactNode\n}\n/**\n * @internal\n */\nexport function EventsProvider({value, children}: EventsProviderProps) {\n  return <EventsContext.Provider value={value}>{children}</EventsContext.Provider>\n}\n\n/**\n * @internal\n */\nexport function useEvents(): EventsStore {\n  const context = useContext(EventsContext)\n  if (context === null) {\n    throw new Error('useEvents must be used within a EventsProvider')\n  }\n  return context\n}\n","/**\n * # Draft model\n *\n * The following describes the semantics of the draft model in Content Releases.\n *\n * ## Terminology\n *\n * In this world we have the following terms:\n *\n * - \"Document\" is unfortunately an overloaded term. It _may_ refer to the\n *   user's perspective of a document in Studio It _may_ refer to a specific\n *   document as observed through the API, or it _may_ refer to user's\n *   perspective of a document in Studio (which is a single \"document group\"\n *   represented by multiple documents).\n * - \"Document version\" is a document with the ID of `drafts.` or `versions.{bundleId}.`\n * - \"Document group\" is an explicit way of referring to the published\n *   document and all of its versions.\n * - \"Event\" (either on \"a document\" or on \"a release\") represents a change in the\n *   state. They are often caused by actions, but they are not 1-to-1. The\n *   \"publish release\" action causes a `ScheduleDocumentVersionEvent` for each\n *   of the document versions inside the release.\n *\n * These are higher level events and you can not assume that they are being\n * caused by a single document actions. For instance, scheduling/publishing a\n * _release_ causes a `ScheduleDocumentEvent` to appear in the document's event\n * list.\n *\n * ## Document group event\n *\n * The completely lifecycle of a document group can be described with a series\n * of _events_. These are the higher level changes such as \"document was\n * published\", \"version was created\", \"document was scheduled\", and so forth.\n * Every event has a single timestamp.\n *\n * We're also using the following conventions:\n *\n * - `documentId` always refers to the published document ID (which is also what\n *   we consider the ID for the whole group).\n * - `revisionId` refers to a revision on the published document.\n * - `versionId` refers to a document version ID.\n * - `releaseId` refers to the release of the document version.\n *    This will be not present if `versionId` starts with`drafts.`.\n * - `versionRevisionId` refers to a revision on a document version.\n *\n * See {@link DocumentGroupEvent} for the full list of events.\n *\n * ## Document changes\n *\n * Interestingly, there's no document group events about the _contents_ of a\n * document. Instead we have a separate concept of _document changes_ which are\n * the actual changes of the attributes to a document.\n *\n * Document changes are constructed from edits (i.e. through the Edit action),\n * but are distinct objects. They have a time_span_, instead of a time_stamp_,\n * and can have multiple authors and/or fields modified in a single \"change\".\n * The change could be represented by \"these fields have been modifed in some\n * way\" or \"here's a detailed attribution of every new character that appeared\n * in this Portable Text\".\n *\n * ## Release events\n *\n * There's a separate set of events for releases which deals with changes done\n * at the whole release level (e.g. schedule/publish) that are _critical_ for\n * its behavior. These events intentionally do not include changes to\n * non-critical metadata (e.g. title). This is currently not defined here.\n *\n * ## Release activity\n *\n * When looking at the complete activity of a release it should be composed of\n * three different sources:\n *\n * 1. Release events (schedule/unschedule/publish etc).\n * 2. Release metadata changes.\n * 2. Document group events related to release – with the exclusion of events\n *    which are caused by release-level actions.\n *\n * ## Relation to Content Lake APIs\n *\n * \"Document group events\", \"document changes\" and \"release events\" are\n * currently not exposed by the REST API in Content Lake. Some of these data\n * _might_ however already be inferred through using the History Transactions\n * API.\n *\n * The intention is for Studio to internally refer to these concepts using an\n * implementation which uses the _current_ Content Lake APIs. Over time we\n * aspire to extend the API to provide access to this data natively and\n * efficiently.\n *\n * ## Overall document lifecycle\n *\n * The overall document's existence is defined by the existence of either the\n * published document or a draft (either the main draft or a version in a\n * release).\n *\n * This means that there are two ways a document can be _created_:\n *\n * 1. `CreateDocumentVersionEvent`: This is what Studio does through an Edit action.\n * 2. `CreateLiveDocumentEvent`: A raw Create mutation sent outside of the Studio.\n *\n * The whole document is considered _deleted_ through a single event:\n *\n * 1. `DeleteDocumentGroupEvent`: This is caused either by the Delete action,\n *     or when discarding the last draft.\n *\n * ## Version lifecycle\n *\n * A document version has the following lifecycle:\n *\n * 1. \"Version doesn't exist\".\n *     - `CreateDocumentVersionEvent`: Edit action - \"Version exists\"\n *     - `UnpublishDocumentEvent`: Unpublish action - \"Version exists\"\n * 2. \"Version exists\".\n *    - `DeleteDocumentVersionEvent`: DiscardDraft action - \"Version doesn't\n *       exist\"\n *    - `PublishDocumentVersionEvent`: Publish document/release action - \"Version doesn't exist\"\n *    - `ScheduleDocumentVersionEvent`: Schedule release action - \"Version is scheduled\"\n *    - `DeleteDocumentGroupEvent`: Delete action _OR_ DiscardDraft [the last one] - \"Version doesn't exist\"\n * 3. \"Version is scheduled\".\n *    - `PublishDocumentVersionEvent`: Automatically, on schedule - \"Version doesn't exist\"\n *    - `UnscheduleDocumentVersionEvent`: Unschedule release action - \"Version exists\"\n *\n * ## Published lifecycle\n *\n * The published document has the following lifecycle:\n *\n * 1. \"Published document doesn't exist\".\n *    - `PublishDocumentVersionEvent`: Publish document/release action - \"Published document exists\".\n *    - `CreateLiveDocumentEvent`: Raw Create mutation - \"Published document exists\"\n * 2. \"Published document exists\"\n *    - `PublishDocumentVersionEvent`: Publish document/release action - \"Published document exists\"\n *    - `UnpublishDocumentEvent`: Unpublish action - \"Published document doesn't exist\"\n *    - `DeleteDocumentGroupEvent`: Delete action - \"Published document doesn't exist\"\n *    - `UpdateLiveDocumentEvent`: Raw Update mutation - \"Published document exists\"\n */\n\nimport {type SanityDocument} from '@sanity/types'\nimport {type Observable} from 'rxjs'\n\nimport {type ObjectDiff} from '../../field'\n\n/**\n * Events relevant for the whole document group.\n * @hidden\n * @beta\n */\nexport type DocumentGroupEvent =\n  | CreateDocumentVersionEvent\n  | DeleteDocumentVersionEvent\n  | PublishDocumentVersionEvent\n  | UnpublishDocumentEvent\n  | ScheduleDocumentVersionEvent\n  | UnscheduleDocumentVersionEvent\n  | DeleteDocumentGroupEvent\n  | CreateLiveDocumentEvent\n  | UpdateLiveDocumentEvent\n  | EditDocumentVersionEvent\n\n/**\n * @hidden\n * @beta\n */\nexport const isCreateDocumentVersionEvent = (\n  event: Partial<DocumentGroupEvent>,\n): event is CreateDocumentVersionEvent => event.type === 'createDocumentVersion'\n\n/**\n * @hidden\n * @beta\n */\nexport const isDeleteDocumentVersionEvent = (\n  event: Partial<DocumentGroupEvent>,\n): event is DeleteDocumentVersionEvent => event.type === 'deleteDocumentVersion'\n\n/**\n * @hidden\n * @beta\n */\nexport const isPublishDocumentVersionEvent = (\n  event: Partial<DocumentGroupEvent>,\n): event is PublishDocumentVersionEvent => event.type === 'publishDocumentVersion'\n\n/**\n * @hidden\n * @beta\n */\nexport const isUnpublishDocumentEvent = (\n  event: Partial<DocumentGroupEvent>,\n): event is UnpublishDocumentEvent => event.type === 'unpublishDocument'\n\n/**\n * @hidden\n * @beta\n */\nexport const isScheduleDocumentVersionEvent = (\n  event: Partial<DocumentGroupEvent>,\n): event is ScheduleDocumentVersionEvent => event.type === 'scheduleDocumentVersion'\n\n/**\n * @hidden\n * @beta\n */\nexport const isUnscheduleDocumentVersionEvent = (\n  event: Partial<DocumentGroupEvent>,\n): event is UnscheduleDocumentVersionEvent => event.type === 'unscheduleDocumentVersion'\n\n/**\n * @hidden\n * @beta\n */\nexport const isDeleteDocumentGroupEvent = (\n  event: Partial<DocumentGroupEvent>,\n): event is DeleteDocumentGroupEvent => event.type === 'deleteDocumentGroup'\n\n/**\n * @hidden\n * @beta\n */\nexport const isCreateLiveDocumentEvent = (\n  event: Partial<DocumentGroupEvent>,\n): event is CreateLiveDocumentEvent => event.type === 'createLiveDocument'\n\n/**\n * @hidden\n * @beta\n */\nexport const isUpdateLiveDocumentEvent = (\n  event: Partial<DocumentGroupEvent>,\n): event is UpdateLiveDocumentEvent => event.type === 'updateLiveDocument'\n\n/**\n * @hidden\n * @beta\n */\nexport const isEditDocumentVersionEvent = (\n  event: Partial<DocumentGroupEvent>,\n): event is EditDocumentVersionEvent => event.type === 'editDocumentVersion'\n\n/**\n * A generic event with a type and a timestamp.\n * @hidden\n * @beta\n */\nexport interface BaseEvent {\n  id: string\n  timestamp: string\n  author: string\n}\n\n/**\n * @hidden\n * @beta\n */\nexport interface CreateDocumentVersionEvent extends BaseEvent {\n  type: 'createDocumentVersion'\n  documentId: string\n\n  releaseId?: string\n  versionId: string\n  versionRevisionId: string\n\n  /**\n   * This is undefined for versions and drafts. (will be present only in publish document?)\n   */\n  revisionId?: string\n\n  /**\n   * This is present when this creation event is already published.\n   */\n  parentId?: string\n}\n\n/**\n * @hidden\n * @beta\n */\nexport interface DeleteDocumentVersionEvent extends BaseEvent {\n  type: 'deleteDocumentVersion'\n  documentId: string\n\n  releaseId?: string\n  versionId: string\n  versionRevisionId: string\n}\n\n/**\n * @hidden\n * @beta\n */\nexport interface PublishDocumentVersionEvent extends BaseEvent {\n  type: 'publishDocumentVersion'\n  documentId: string\n  revisionId: string\n\n  versionId: string\n  releaseId?: string\n\n  /** This is only available when it was triggered by Publish action. */\n  versionRevisionId?: string\n\n  publishCause: 'document.publish' | 'release.publish' | 'release.schedule'\n\n  contributors?: string[]\n\n  /**\n   * This is added client side to enhance the UI.\n   * TODO: should be ReleaseDocument, but it's @internal and this is @beta\n   */\n  release?: any\n\n  /**\n   * This is added client side to enhance the UI.\n   * For draft documents, it indicates the event that created this document that was later published\n   * It will be used to expand the publish view.\n   */\n  creationEvent?: CreateDocumentVersionEvent\n}\n\n/**\n * @hidden\n * @beta\n */\nexport interface UnpublishDocumentEvent extends BaseEvent {\n  type: 'unpublishDocument'\n  documentId: string\n\n  /** The version that was created based on it */\n  versionId: string\n  versionRevisionId: string\n  releaseId?: string\n\n  author: string\n}\n\n/**\n * @hidden\n * @beta\n */\nexport interface ScheduleDocumentVersionEvent extends BaseEvent {\n  type: 'scheduleDocumentVersion'\n  documentId: string\n\n  releaseId: string\n  versionId: string\n  versionRevisionId: string\n\n  /** The _current_ state of this schedule. */\n  state: 'pending' | 'unscheduled' | 'published'\n\n  author: string\n  publishAt: string\n}\n\n/**\n * @hidden\n * @beta\n */\nexport interface UnscheduleDocumentVersionEvent extends BaseEvent {\n  type: 'unscheduleDocumentVersion'\n  documentId: string\n\n  releaseId: string\n  versionId: string\n  versionRevisionId: string\n\n  author: string\n}\n\n/**\n * @hidden\n * @beta\n */\nexport interface DeleteDocumentGroupEvent extends BaseEvent {\n  type: 'deleteDocumentGroup'\n  documentId: string\n\n  author: string\n}\n\n/**\n * @hidden\n * @beta\n */\nexport interface CreateLiveDocumentEvent extends BaseEvent {\n  type: 'createLiveDocument'\n  documentId: string\n  revisionId: string\n\n  author: string\n}\n\n/**\n * @hidden\n * @beta\n */\nexport interface UpdateLiveDocumentEvent extends BaseEvent {\n  type: 'updateLiveDocument'\n  documentId: string\n  revisionId: string\n\n  author: string\n}\n\n/**\n * @hidden\n * @beta\n * This event won't be exposed by the API, it needs to be generated by validating the\n * transactions that occurred between two events. Usually, between two PublishDocumentEvents.\n * Or a create event and a publish event.\n */\nexport interface EditDocumentVersionEvent extends BaseEvent {\n  type: 'editDocumentVersion'\n  documentId: string\n  // Given this event could be a result of multiple edits, we could have more than one author.\n  contributors: string[]\n  releaseId?: string\n  /**\n   * One edit event could contain multiple transactions that are merged together.\n   * This represents the newest transaction in the merged events.\n   */\n  revisionId: string\n  transactions: {\n    type: 'editTransaction'\n    author: string\n    timestamp: string\n    revisionId: string\n  }[]\n  /**\n   * Present when an edit was already published, then the user decided to expand the event.\n   */\n  parentId?: string\n}\n\n/**\n * @hidden\n * @beta\n */\nexport interface EventsStoreRevision {\n  revisionId: string\n  loading: boolean\n  document?: SanityDocument | null\n}\n\n/**\n * @internal\n * */\nexport interface EventsStore {\n  events: DocumentGroupEvent[]\n  nextCursor: string | null\n  loading: boolean\n  error: Error | null\n  revision: EventsStoreRevision | null\n  sinceRevision: EventsStoreRevision | null\n  findRangeForRevision: (nextRev: string) => [string | null, string | null]\n  findRangeForSince: (nextSince: string) => [string | null, string | null]\n  loadMoreEvents: () => void\n  getChangesList: () => Observable<{\n    diff: ObjectDiff | null\n    loading: boolean\n    error: Error | null\n  }>\n  expandEvent: (event: DocumentGroupEvent) => Promise<void>\n}\n\n/**\n * @internal\n **/\nexport type DocumentVersionEventType = DocumentGroupEvent['type']\n","import {type MendozaPatch, type TransactionLogEventWithEffects} from '@sanity/types'\n\nimport {type ReleasesReducerState} from '../../releases/store/reducer'\nimport {getReleaseDocumentIdFromReleaseId} from '../../releases/util/getReleaseDocumentIdFromReleaseId'\nimport {getVersionFromId} from '../../util/draftUtils'\nimport {type DocumentVariantType} from '../../util/getDocumentVariantType'\nimport {type DocumentRemoteMutationEvent} from '../_legacy'\nimport {\n  type DocumentGroupEvent,\n  type EditDocumentVersionEvent,\n  isCreateDocumentVersionEvent,\n  isCreateLiveDocumentEvent,\n  isDeleteDocumentGroupEvent,\n  isDeleteDocumentVersionEvent,\n  isEditDocumentVersionEvent,\n  isPublishDocumentVersionEvent,\n  isScheduleDocumentVersionEvent,\n  isUnpublishDocumentEvent,\n  isUnscheduleDocumentVersionEvent,\n  isUpdateLiveDocumentEvent,\n  type UpdateLiveDocumentEvent,\n} from './types'\n\nexport function removeDupes(\n  events: DocumentGroupEvent[],\n  newEvents: DocumentGroupEvent[],\n): DocumentGroupEvent[] {\n  const noDupes = [...events, ...newEvents].reduce((acc, event) => {\n    if (acc.has(event.id)) {\n      const existingEvent = acc.get(event.id) as DocumentGroupEvent\n      if (isEditDocumentVersionEvent(existingEvent) && !isEditDocumentVersionEvent(event)) {\n        // Replaces the edit event with the none edit event, the publish event and the last edit event before the publish have the same id.\n        acc.set(event.id, event)\n      }\n\n      if (existingEvent.type !== event.type) {\n        // In the strange case two events got the same id but different types, we need to add a unique key to the map so both events are available\n        // This could happen with a document that is created and published with the same revision id, for example in our e2e tests.\n        acc.set(`${event.id}-${event.type}`, event)\n      }\n      return acc\n    }\n    return acc.set(event.id, event)\n  }, new Map<string, DocumentGroupEvent>())\n  return Array.from(noDupes.values())\n}\n\nexport function addEventId(\n  event: Omit<DocumentGroupEvent, 'id'>,\n  documentVariantType: DocumentVariantType,\n): DocumentGroupEvent {\n  // this tries to infer the id of the event by checking if we are dealing with a published or version document\n  let id = ''\n  if (isCreateDocumentVersionEvent(event)) {\n    id =\n      documentVariantType === 'published'\n        ? event.revisionId || `publishCreation--${event.timestamp}`\n        : event.versionRevisionId\n  } else if (isDeleteDocumentVersionEvent(event)) {\n    id =\n      documentVariantType === 'published' ? `deleteAt-${event.timestamp}` : event.versionRevisionId\n  } else if (isPublishDocumentVersionEvent(event)) {\n    id =\n      documentVariantType === 'published'\n        ? event.revisionId\n        : event.versionRevisionId || event.revisionId\n  } else if (isUnpublishDocumentEvent(event)) {\n    // This event is only available for the published document\n    id = documentVariantType === 'published' ? `unpublishAt-${event.timestamp}` : ''\n  } else if (isScheduleDocumentVersionEvent(event)) {\n    // This event is only available for the version document\n    id = documentVariantType === 'published' ? '' : event.versionRevisionId\n  } else if (isUnscheduleDocumentVersionEvent(event)) {\n    id = documentVariantType === 'published' ? '' : event.versionRevisionId\n  } else if (isDeleteDocumentGroupEvent(event)) {\n    id = `deleted-${event.timestamp}`\n  } else if (isCreateLiveDocumentEvent(event)) {\n    id = event.revisionId\n  } else if (isUpdateLiveDocumentEvent(event)) {\n    id = event.revisionId\n  } else if (isEditDocumentVersionEvent(event)) {\n    id = event.revisionId\n  }\n  return {...event, id} as DocumentGroupEvent\n}\n\nexport function addParentToEvents(events: DocumentGroupEvent[]): DocumentGroupEvent[] {\n  const eventsWithParent = JSON.parse(JSON.stringify(events)) as DocumentGroupEvent[]\n  eventsWithParent.forEach((event, index) => {\n    if (isPublishDocumentVersionEvent(event)) {\n      event.documentId = event.versionId\n      // Find the creation event and edit events for this published event\n      for (let i = index; i < eventsWithParent.length; i++) {\n        const nextEvent = eventsWithParent[i]\n        if (isEditDocumentVersionEvent(nextEvent)) {\n          nextEvent.parentId = event.id\n        }\n        if (isCreateDocumentVersionEvent(nextEvent)) {\n          event.creationEvent = nextEvent\n          nextEvent.parentId = event.id\n          // When we find the create event we should stop the loop. Events are ordered\n          break\n        }\n      }\n    }\n    if (isEditDocumentVersionEvent(event)) {\n      // If it's the first edit event after expanding a publish, the id of this event will be shared with the id of the published event, we need to use the following transaction id.\n      if (event.parentId === event.id && event.transactions[1]?.revisionId) {\n        event.id = event.transactions[1].revisionId\n      }\n    }\n  })\n  return eventsWithParent\n}\n\nconst MERGE_WINDOW = 5 * 60 * 1000 // 5 minutes\n\nexport function isWithinMergeWindow(a: string, b: string): boolean {\n  return Math.abs(Date.parse(a) - Date.parse(b)) < MERGE_WINDOW\n}\n\nexport function squashLiveEditEvents(events: DocumentGroupEvent[]): DocumentGroupEvent[] {\n  return events.reduce((acc: DocumentGroupEvent[], event) => {\n    if (isUpdateLiveDocumentEvent(event)) {\n      const previousEvent = acc[acc.length - 1]\n      // check if the previous event is the same type is within the merge window and same author\n      if (\n        previousEvent &&\n        isUpdateLiveDocumentEvent(previousEvent) &&\n        isWithinMergeWindow(previousEvent.timestamp, event.timestamp) &&\n        previousEvent.author === event.author\n      ) {\n        return acc\n      }\n    }\n    acc.push(event)\n    return acc\n  }, [])\n}\n\nexport function remoteMutationToTransaction(\n  event: DocumentRemoteMutationEvent,\n): TransactionLogEventWithEffects {\n  return {\n    author: event.author,\n    documentIDs: [],\n    id: event.transactionId,\n    timestamp: event.timestamp.toISOString(),\n    effects: {\n      [event.head._id]: {\n        apply: event.effects.apply as MendozaPatch,\n        revert: event.effects.revert as MendozaPatch,\n      },\n    },\n  }\n}\n\n/**\n * Updates the version publish document id.\n */\nexport function updateVersionEvents(events: DocumentGroupEvent[]) {\n  return events.map((event) => {\n    if (isPublishDocumentVersionEvent(event)) {\n      return {\n        ...event,\n        documentId: event.versionId,\n      }\n    }\n    return event\n  })\n}\n\n/**\n * Adds the release information to the publish event.\n */\nexport function updatePublishedEvents(\n  events: DocumentGroupEvent[],\n  releases: ReleasesReducerState,\n) {\n  return events.map((event) => {\n    if (isPublishDocumentVersionEvent(event)) {\n      const releaseId = getVersionFromId(event.versionId)\n      if (releaseId) {\n        const release = releases.releases.get(getReleaseDocumentIdFromReleaseId(releaseId))\n        return {...event, release: release}\n      }\n      return event\n    }\n    return event\n  })\n}\n\nexport function sortEvents({\n  remoteEdits,\n  events,\n  expandedEvents,\n}: {\n  remoteEdits: (UpdateLiveDocumentEvent | EditDocumentVersionEvent)[]\n  events: DocumentGroupEvent[]\n  expandedEvents: EditDocumentVersionEvent[]\n}): DocumentGroupEvent[] {\n  const eventsWithRemoteEdits = [...remoteEdits, ...events, ...expandedEvents].sort(\n    // Sort by timestamp, newest first unless is an edit event that has a corresponding publish event\n    (a, b) => {\n      if (\n        isPublishDocumentVersionEvent(a) &&\n        isEditDocumentVersionEvent(b) &&\n        a.versionRevisionId === b.revisionId\n      ) {\n        return -1\n      }\n      if (\n        isPublishDocumentVersionEvent(b) &&\n        isEditDocumentVersionEvent(a) &&\n        b.versionRevisionId === a.revisionId\n      ) {\n        return +1\n      }\n\n      return Date.parse(b.timestamp) - Date.parse(a.timestamp)\n    },\n  )\n  return eventsWithRemoteEdits\n}\n","import {combineLatest, map, type Observable} from 'rxjs'\n\nimport {type useReleasesStore} from '../../releases/store/useReleasesStore'\nimport {getDocumentVariantType} from '../../util/getDocumentVariantType'\nimport {type EventsObservableValue} from './getInitialFetchEvents'\nimport {type EditDocumentVersionEvent, type UpdateLiveDocumentEvent} from './types'\nimport {\n  addParentToEvents,\n  sortEvents,\n  squashLiveEditEvents,\n  updatePublishedEvents,\n  updateVersionEvents,\n} from './utils'\n\ninterface CreateEventsObservableOptions {\n  documentId: string\n  releases$: ReturnType<typeof useReleasesStore>['state$']\n  events$: Observable<EventsObservableValue>\n  remoteEdits$: Observable<(UpdateLiveDocumentEvent | EditDocumentVersionEvent)[]>\n  expandedEvents$: Observable<EditDocumentVersionEvent[]>\n}\n\nexport function createEventsObservable({\n  releases$,\n  events$,\n  remoteEdits$,\n  expandedEvents$,\n  documentId,\n}: CreateEventsObservableOptions) {\n  const documentVariantType = getDocumentVariantType(documentId)\n  return combineLatest([releases$, events$, remoteEdits$, expandedEvents$]).pipe(\n    map(([releases, {events, nextCursor, loading, error}, remoteEdits, expandedEvents]) => {\n      const eventsWithRemoteEdits = sortEvents({remoteEdits, events, expandedEvents})\n\n      if (documentVariantType === 'published') {\n        return {\n          events: updatePublishedEvents(eventsWithRemoteEdits, releases),\n          nextCursor: nextCursor,\n          loading: loading,\n          error: error,\n        }\n      }\n\n      if (documentVariantType === 'draft') {\n        return {\n          events: addParentToEvents(eventsWithRemoteEdits),\n          nextCursor: nextCursor,\n          loading: loading,\n          error: error,\n        }\n      }\n      return {\n        events: updateVersionEvents(eventsWithRemoteEdits),\n        nextCursor: nextCursor,\n        loading: loading,\n        error: error,\n      }\n    }),\n    // TODO: This is temporal - liveEditEvents will be squashed in the API\n    map((value) => ({...value, events: squashLiveEditEvents(value.events)})),\n  )\n}\n","import {type SanityClient} from '@sanity/client'\nimport {type TransactionLogEventWithEffects} from '@sanity/types'\n\nimport {getTransactionsLogs} from '../translog/getTransactionsLogs'\n\nconst TRANSLOG_ENTRY_LIMIT = 50\n\nconst documentTransactionsCache: Record<string, TransactionLogEventWithEffects[]> =\n  Object.create(null)\n\n// Transactions could be cached, given they are not gonna change EVER.\n// Transactions are in an order, so if we have [rev4, rev3, rev2] and we already got [rev4, rev3] we can just get the diff between rev3 and rev2 and increment it.\n\nexport async function getDocumentTransactions({\n  documentId,\n  client,\n  toTransaction,\n  fromTransaction,\n}: {\n  documentId: string\n  client: SanityClient\n  toTransaction?: string\n  fromTransaction: string\n}): Promise<TransactionLogEventWithEffects[]> {\n  const cacheKey = `${documentId}-${toTransaction}-${fromTransaction}`\n  if (documentTransactionsCache[cacheKey] && typeof toTransaction !== 'undefined') {\n    return documentTransactionsCache[cacheKey]\n  }\n  const skipFromTransaction = fromTransaction !== toTransaction\n\n  let transactions = await getTransactionsLogs(client, documentId, {\n    tag: 'sanity.studio.documents.history',\n    effectFormat: 'mendoza',\n    excludeContent: true,\n    includeIdentifiedDocumentsOnly: true,\n    limit: TRANSLOG_ENTRY_LIMIT,\n    fromTransaction: fromTransaction,\n    toTransaction: toTransaction,\n  })\n  if (skipFromTransaction) {\n    transactions = transactions.filter((transaction) => transaction.id !== fromTransaction)\n  }\n\n  if (\n    skipFromTransaction\n      ? // The transaction received with the id fromTransaction is not included in the list but it's returned by the API; remove that from the count\n        transactions.length === TRANSLOG_ENTRY_LIMIT - 1\n      : transactions.length === TRANSLOG_ENTRY_LIMIT\n  ) {\n    // We have received the max values, we need to fetch the next batch. (Unless we have reached the toTransaction)\n    if (\n      (toTransaction && transactions[transactions.length - 1].id !== toTransaction) ||\n      !toTransaction\n    ) {\n      const nextTransactions = await getDocumentTransactions({\n        documentId,\n        client,\n        toTransaction,\n        fromTransaction: transactions[transactions.length - 1].id,\n      })\n      return transactions.concat(nextTransactions)\n    }\n  }\n\n  documentTransactionsCache[cacheKey] = transactions\n  return transactions\n}\n","import {type SanityClient} from '@sanity/client'\nimport {diffInput, wrap} from '@sanity/diff'\nimport {type SanityDocument, type TransactionLogEventWithEffects} from '@sanity/types'\nimport {applyPatch, incremental} from 'mendoza'\nimport {\n  catchError,\n  combineLatest,\n  from,\n  map,\n  type Observable,\n  of,\n  shareReplay,\n  startWith,\n  switchMap,\n  tap,\n} from 'rxjs'\n\nimport {type Annotation, type ObjectDiff} from '../../field'\nimport {wrapValue} from '../_legacy/history/history/diffValue'\nimport {getDocumentTransactions} from './getDocumentTransactions'\nimport {\n  type DocumentGroupEvent,\n  type EventsStoreRevision,\n  isCreateDocumentVersionEvent,\n  isEditDocumentVersionEvent,\n} from './types'\nimport {type EventsObservableValue} from './useEventsStore'\n\nconst buildDocumentForDiffInput = (document?: Partial<SanityDocument> | null) => {\n  if (!document) return {}\n  // Remove internal fields and undefined values\n  const {_id, _rev, _createdAt, _updatedAt, _type, ...rest} = JSON.parse(JSON.stringify(document))\n\n  return rest\n}\n\ntype EventMeta = {\n  transactionIndex: number\n  event?: DocumentGroupEvent\n} | null\n\nfunction omitRev(document: SanityDocument): Omit<SanityDocument, '_rev'> {\n  const {_rev, ...doc} = document\n  return doc\n}\n\nfunction annotationForTransactionIndex(\n  transactions: TransactionLogEventWithEffects[],\n  idx: number,\n  event?: DocumentGroupEvent,\n) {\n  const tx = transactions[idx]\n  if (!tx) return null\n\n  return {\n    timestamp: tx.timestamp,\n    author: tx.author,\n    event: event,\n  }\n}\n\nfunction extractAnnotationForFromInput(\n  transactions: TransactionLogEventWithEffects[],\n  meta: EventMeta,\n): Annotation {\n  if (meta) {\n    return annotationForTransactionIndex(transactions, meta.transactionIndex + 1, meta.event)\n  }\n\n  return null\n}\nfunction extractAnnotationForToInput(\n  transactions: TransactionLogEventWithEffects[],\n  meta: EventMeta,\n): Annotation {\n  if (meta) {\n    return annotationForTransactionIndex(transactions, meta.transactionIndex, meta.event)\n  }\n\n  return null\n}\n\nfunction diffValue({\n  transactions,\n  fromValue,\n  fromRaw,\n  toValue,\n  toRaw,\n}: {\n  transactions: TransactionLogEventWithEffects[]\n  fromValue: incremental.Value<EventMeta>\n  fromRaw: Omit<SanityDocument, '_rev'>\n  toValue: incremental.Value<EventMeta>\n  toRaw: Omit<SanityDocument, '_rev'>\n}) {\n  const fromInput = wrapValue<EventMeta>(fromValue, fromRaw, {\n    fromValue(value) {\n      return extractAnnotationForFromInput(transactions, value.endMeta)\n    },\n    fromMeta(meta) {\n      return extractAnnotationForFromInput(transactions, meta)\n    },\n  })\n\n  const toInput = wrapValue<EventMeta>(toValue, toRaw, {\n    fromValue(value) {\n      return extractAnnotationForToInput(transactions, value.startMeta)\n    },\n    fromMeta(meta) {\n      return extractAnnotationForToInput(transactions, meta)\n    },\n  })\n  return diffInput(fromInput, toInput)\n}\n\nfunction calculateDiff({\n  initialDoc,\n  documentId,\n  transactions,\n  events = [],\n}: {\n  initialDoc: SanityDocument\n  finalDoc?: SanityDocument\n  transactions: TransactionLogEventWithEffects[]\n  events: DocumentGroupEvent[]\n  documentId: string\n}) {\n  const initialValue = incremental.wrap<EventMeta>(omitRev(initialDoc), null)\n  let document = incremental.wrap<EventMeta>(omitRev(initialDoc), null)\n  let finalDocument = omitRev(initialDoc)\n  transactions.forEach((transaction, index) => {\n    const meta: EventMeta = {\n      transactionIndex: index,\n      event: events.find(\n        (event) =>\n          !isEditDocumentVersionEvent(event) &&\n          'revisionId' in event &&\n          event.revisionId === transaction.id,\n      ),\n    }\n    const effect = transaction.effects[documentId]\n    if (effect) {\n      document = incremental.applyPatch(document, effect.apply, meta)\n      finalDocument = applyPatch(finalDocument, effect.apply)\n    }\n  })\n\n  const diff = diffValue({\n    transactions,\n    fromValue: initialValue,\n    fromRaw: initialDoc,\n    toValue: document,\n    toRaw: finalDocument,\n  }) as ObjectDiff\n  return diff\n}\n\nfunction removeDuplicatedTransactions(transactions: TransactionLogEventWithEffects[]) {\n  const seen = new Set()\n  return transactions.filter((tx) => {\n    if (seen.has(tx.id)) return false\n    seen.add(tx.id)\n    return true\n  })\n}\n\nexport function getDocumentChanges({\n  eventsObservable$,\n  documentId,\n  client,\n  to$,\n  since$,\n  remoteTransactions$,\n}: {\n  eventsObservable$: Observable<EventsObservableValue>\n  documentId: string\n  client: SanityClient\n  to$: Observable<EventsStoreRevision | null>\n  remoteTransactions$: Observable<TransactionLogEventWithEffects[]>\n  since$: Observable<EventsStoreRevision | null>\n}): Observable<{loading: boolean; diff: ObjectDiff | null; error: Error | null}> {\n  let lastResolvedSince: string | null = null\n  let lastResolvedTo: string | null = null\n  let lastTransactions: TransactionLogEventWithEffects[] = []\n\n  return combineLatest(to$, since$, eventsObservable$).pipe(\n    switchMap(([toObs, since, {events}]) => {\n      const to = toObs?.document\n      let sinceDoc: SanityDocument | undefined = undefined\n      if (since?.document) {\n        sinceDoc = since?.document\n      } else {\n        const selectedToEvent = events.find((event) => event.id === to?._rev)\n        const isShowingCreationEvent =\n          selectedToEvent && isCreateDocumentVersionEvent(selectedToEvent)\n        if (isShowingCreationEvent && to) {\n          sinceDoc = {_type: to._type, _id: to._id, _rev: to._rev} as SanityDocument\n        }\n      }\n      if (!sinceDoc) {\n        return of({loading: false, diff: null, error: null})\n      }\n\n      return remoteTransactions$.pipe(\n        switchMap((remoteTx) => {\n          // When the user doesn't have a revision selected, so he is viewing the latest version of the document in the form.\n          // For this case, we can use the remote transactions to calculate the diff.\n          const viewingLatest = !to?._rev\n          const getTransactions = (): Observable<TransactionLogEventWithEffects[]> => {\n            if (viewingLatest && lastResolvedSince === sinceDoc._rev) {\n              // The document has been previously resolved and it's on latest, we can use the remote transactions, we don't need to fetch them again\n              return of(removeDuplicatedTransactions(lastTransactions.concat(remoteTx)))\n            }\n            if (\n              lastResolvedSince &&\n              lastResolvedSince === sinceDoc._rev &&\n              lastResolvedTo &&\n              lastResolvedTo === to?._rev\n            ) {\n              // The since and to haven't changed, use the same transactions.\n              return of(lastTransactions)\n            }\n            return from(\n              getDocumentTransactions({\n                documentId,\n                client,\n                toTransaction: to?._rev,\n                fromTransaction: sinceDoc._rev,\n              }),\n            )\n          }\n          return getTransactions().pipe(\n            tap((transactions) => {\n              lastResolvedSince = sinceDoc._rev\n              lastTransactions = transactions\n              if (to?._rev) {\n                lastResolvedTo = to._rev\n              }\n            }),\n            map((transactions) => {\n              return {\n                loading: false,\n                diff: calculateDiff({documentId, initialDoc: sinceDoc, transactions, events}),\n                error: null,\n              }\n            }),\n          )\n        }),\n        catchError((error) => {\n          console.error(error)\n          return of({loading: false, diff: null, error})\n        }),\n        startWith({\n          loading: true,\n          error: null,\n          diff:\n            sinceDoc && to\n              ? (diffInput(\n                  wrap(buildDocumentForDiffInput(sinceDoc), null),\n                  wrap(buildDocumentForDiffInput(to), null),\n                ) as ObjectDiff)\n              : null,\n        }),\n        shareReplay(1),\n      )\n    }),\n  )\n}\n","import {\n  type MendozaEffectPair,\n  type MendozaPatch,\n  type TransactionLogEventWithEffects,\n} from '@sanity/types'\n\nimport {getVersionFromId} from '../../util/draftUtils'\nimport {\n  type EditDocumentVersionEvent,\n  isEditDocumentVersionEvent,\n  type UpdateLiveDocumentEvent,\n} from './types'\nimport {isWithinMergeWindow} from './utils'\n\nexport function getEffectState(\n  effect?: MendozaEffectPair,\n): 'noop' | 'deleted' | 'modified' | 'created' {\n  const modified = Boolean(effect)\n  const deleted = effect && isDeletePatch(effect?.apply)\n  const created = effect && isDeletePatch(effect?.revert)\n\n  if (deleted) {\n    return 'deleted'\n  }\n  if (created) {\n    return 'created'\n  }\n\n  if (modified) {\n    return 'modified'\n  }\n\n  return 'noop'\n}\n\nfunction isDeletePatch(patch: MendozaPatch): boolean {\n  return patch[0] === 0 && patch[1] === null\n}\n\nconst getEditTransaction = (\n  transaction: TransactionLogEventWithEffects,\n): EditDocumentVersionEvent['transactions'][number] => {\n  return {\n    type: 'editTransaction',\n    author: transaction.author,\n    timestamp: transaction.timestamp,\n    revisionId: transaction.id,\n  }\n}\n\nexport function getEditEvents(\n  transactions: TransactionLogEventWithEffects[],\n  documentId: string,\n  liveEdit: true,\n): UpdateLiveDocumentEvent[]\n\nexport function getEditEvents(\n  transactions: TransactionLogEventWithEffects[],\n  documentId: string,\n  liveEdit: false,\n): EditDocumentVersionEvent[]\n\nexport function getEditEvents(\n  transactions: TransactionLogEventWithEffects[],\n  documentId: string,\n  liveEdit: boolean,\n): (EditDocumentVersionEvent | UpdateLiveDocumentEvent)[]\nexport function getEditEvents(\n  transactions: TransactionLogEventWithEffects[],\n  documentId: string,\n  liveEdit: boolean,\n): (EditDocumentVersionEvent | UpdateLiveDocumentEvent)[] {\n  const editTransactions = transactions\n    .filter((tx) => {\n      const effectState = getEffectState(tx.effects[documentId])\n      // We only care about the transactions that have modified the document\n      return effectState === 'modified'\n    })\n    // We sort the transactions by timestamp, newest first\n    .sort((a, b) => Date.parse(b.timestamp) - Date.parse(a.timestamp))\n\n  const result: (EditDocumentVersionEvent | UpdateLiveDocumentEvent)[] = []\n  for (const transaction of editTransactions) {\n    // If result is empty, add the current event\n    const event = liveEdit\n      ? ({\n          id: transaction.id,\n          timestamp: transaction.timestamp,\n          type: 'updateLiveDocument',\n          documentId: documentId,\n          revisionId: transaction.id,\n          author: transaction.author,\n        } satisfies UpdateLiveDocumentEvent)\n      : ({\n          type: 'editDocumentVersion',\n          documentId: documentId,\n          id: transaction.id,\n          timestamp: transaction.timestamp,\n          author: transaction.author,\n          contributors: [transaction.author],\n          releaseId: getVersionFromId(documentId),\n          revisionId: transaction.id,\n          transactions: [getEditTransaction(transaction)],\n        } satisfies EditDocumentVersionEvent)\n    if (result.length === 0) {\n      result.push(event)\n      continue\n    }\n\n    const lastEvent = result[result.length - 1]\n\n    if (isWithinMergeWindow(lastEvent.timestamp, event.timestamp)) {\n      if (isEditDocumentVersionEvent(lastEvent)) {\n        // Add the transaction event to the transactions\n        lastEvent.transactions.push(getEditTransaction(transaction))\n        if (!lastEvent.contributors.includes(event.author) && lastEvent.author !== event.author) {\n          // Update event the contributors list\n          lastEvent.contributors.push(event.author)\n        }\n      }\n    } else {\n      // If the time difference is greater than the window, add as a new event\n      result.push(event)\n    }\n  }\n\n  return result\n}\n","import {type SanityClient} from '@sanity/client'\nimport {BehaviorSubject, map} from 'rxjs'\n\nimport {getDocumentTransactions} from './getDocumentTransactions'\nimport {getEditEvents} from './getEditEvents'\nimport {\n  type DocumentGroupEvent,\n  type EditDocumentVersionEvent,\n  isPublishDocumentVersionEvent,\n} from './types'\n\nexport function getExpandEvents({documentId, client}: {client: SanityClient; documentId: string}) {\n  const expandedEventsMap$ = new BehaviorSubject<Map<string, EditDocumentVersionEvent[]>>(new Map())\n  const expandedEvents$ = expandedEventsMap$.pipe(\n    map((expandedEventsMap) => Array.from(expandedEventsMap.values()).flatMap((v) => v)),\n  )\n\n  const handleExpandEvent = async (event: DocumentGroupEvent) => {\n    if (expandedEventsMap$.getValue().has(event.id)) {\n      return // Already expanded\n    }\n    if (isPublishDocumentVersionEvent(event) && event.versionRevisionId && event.creationEvent) {\n      // This are the only events we can expand.\n      // We need to get that creation event and use versionRevisionId and fetch the transactions that occurred\n      // Since since the creation to the publish.\n      const transactions = await getDocumentTransactions({\n        client,\n        documentId,\n        fromTransaction: event.creationEvent.versionRevisionId,\n        toTransaction: event.versionRevisionId,\n      })\n      const editEvents = getEditEvents(transactions, documentId, false).map((editEvent) => ({\n        ...editEvent,\n        parentId: event.id,\n      }))\n\n      const value = expandedEventsMap$.getValue()\n      value.set(event.id, editEvents)\n      expandedEventsMap$.next(value)\n    } else {\n      console.error(\"This event can't be expanded\", event)\n    }\n  }\n\n  return {handleExpandEvent, expandedEvents$}\n}\n","import {type SanityClient} from '@sanity/client'\nimport {BehaviorSubject, from, of} from 'rxjs'\nimport {catchError, map, scan, shareReplay, startWith, switchMap, tap} from 'rxjs/operators'\n\nimport {getDocumentVariantType} from '../../util/getDocumentVariantType'\nimport {getDocumentTransactions} from './getDocumentTransactions'\nimport {getEditEvents} from './getEditEvents'\nimport {type DocumentGroupEvent, isCreateDocumentVersionEvent} from './types'\nimport {addEventId, removeDupes} from './utils'\n\nexport interface EventsObservableValue {\n  events: DocumentGroupEvent[]\n  nextCursor: string\n  loading: boolean\n  error: null | Error\n}\nconst INITIAL_VALUE: EventsObservableValue = {\n  events: [],\n  nextCursor: '',\n  loading: true,\n  error: null,\n}\n\ninterface InitialFetchEventsOptions {\n  client: SanityClient\n  documentId: string\n}\nexport function getInitialFetchEvents({client, documentId}: InitialFetchEventsOptions) {\n  const documentVariantType = getDocumentVariantType(documentId)\n  const refetchEventsTrigger$ = new BehaviorSubject<{\n    cursor: string | null\n    origin: 'loadMore' | 'reload' | 'initial'\n  }>({\n    cursor: null,\n    origin: 'initial',\n  })\n\n  const fetchEvents = ({limit, nextCursor}: {limit: number; nextCursor: string | null}) => {\n    const params = new URLSearchParams({\n      limit: limit.toString(),\n    })\n    if (nextCursor) {\n      params.append('nextCursor', nextCursor)\n    }\n    return client.observable\n      .request<{\n        events: Record<string, Omit<DocumentGroupEvent, 'id'>[]>\n        nextCursor: string\n      }>({\n        url: `/data/history/${client.config().dataset}/events/documents/${documentId}?${params.toString()}`,\n        tag: 'get-document-events',\n      })\n      .pipe(\n        map((response) => {\n          return {\n            events:\n              response.events[documentId]?.map((ev) => addEventId(ev, documentVariantType)) || [],\n            nextCursor: response.nextCursor,\n            loading: false,\n            error: null,\n          }\n        }),\n      )\n  }\n\n  const fetchTransactions = (events: DocumentGroupEvent[]) => {\n    const eventWithRevision =\n      documentVariantType === 'version'\n        ? events.find(isCreateDocumentVersionEvent)\n        : events.find((event) => 'versionRevisionId' in event && event.versionRevisionId)\n\n    const revisionId =\n      eventWithRevision &&\n      'versionRevisionId' in eventWithRevision &&\n      eventWithRevision.versionRevisionId\n\n    if (!revisionId) {\n      return of([])\n    }\n    return from(\n      getDocumentTransactions({\n        client,\n        documentId,\n        fromTransaction: revisionId,\n        toTransaction: undefined, // We need to get up to the present moment\n      }),\n    )\n  }\n  let nextCursor: string = ''\n\n  return {\n    events$: refetchEventsTrigger$.pipe(\n      switchMap(({cursor, origin}) => {\n        return fetchEvents({\n          nextCursor: cursor,\n          limit: origin === 'reload' ? 10 : 100,\n        }).pipe(\n          switchMap((response) => {\n            if (documentVariantType === 'published' || origin === 'loadMore') {\n              // For the published document we don't need to fetch the edit transactions.\n              return of({...response, origin})\n            }\n            return fetchTransactions(response.events).pipe(\n              map((transactions) => {\n                const editEvents = getEditEvents(transactions, documentId, false)\n                return {...response, events: [...editEvents, ...response.events], origin}\n              }),\n            )\n          }),\n          catchError((error: Error) => {\n            console.error('Error fetching events', error)\n            return [{events: [], nextCursor: '', loading: false, error: error, origin}]\n          }),\n          startWith({events: [], nextCursor: '', loading: true, error: null, origin}),\n        )\n      }),\n      scan((prev, next) => {\n        return {\n          events: removeDupes(prev.events, next.events),\n          // If we are reloading, we should keep the cursor as it was before.\n          nextCursor: next.origin === 'reload' ? prev.nextCursor : next.nextCursor,\n          loading: next.loading,\n          error: next.error,\n        }\n      }, INITIAL_VALUE),\n      tap((response) => {\n        nextCursor = response.nextCursor\n      }),\n      shareReplay(1),\n    ),\n    /**\n     * Loads new events for the document, fetching the latest events from the API.\n     */\n    reloadEvents: () => refetchEventsTrigger$.next({cursor: null, origin: 'reload'}),\n    /**\n     * Loads more events for the document, fetching the next batch of events from the API.\n     */\n    loadMore: () => {\n      const lastCursorUsed = refetchEventsTrigger$.getValue().cursor\n      if (nextCursor && lastCursorUsed !== nextCursor) {\n        refetchEventsTrigger$.next({origin: 'loadMore', cursor: nextCursor})\n      }\n    },\n  }\n}\n","import {type SanityClient} from '@sanity/client'\nimport {type MendozaPatch, type TransactionLogEventWithEffects} from '@sanity/types'\nimport {BehaviorSubject, filter, map, type Observable} from 'rxjs'\n\nimport {getDraftId, getPublishedId, isVersionId} from '../../util/draftUtils'\nimport {getDocumentVariantType} from '../../util/getDocumentVariantType'\nimport {type DocumentRemoteMutationEvent} from '../_legacy/document/buffered-doc/types'\nimport {remoteSnapshots, type WithVersion} from '../_legacy/document/document-pair'\nimport {getEditEvents, getEffectState} from './getEditEvents'\nimport {remoteMutationToTransaction} from './utils'\n\ninterface GetRemoteTransactionsSubscriptionOptions {\n  client: SanityClient\n  documentId: string\n  documentType: string\n  isLiveEdit: boolean\n  serverActionsEnabled: Observable<boolean>\n  onRefetch: () => void\n}\n\nexport function getRemoteTransactionsSubscription({\n  client,\n  isLiveEdit,\n  documentId,\n  documentType,\n  serverActionsEnabled,\n  onRefetch,\n}: GetRemoteTransactionsSubscriptionOptions) {\n  const remoteTransactions$ = new BehaviorSubject<TransactionLogEventWithEffects[]>([])\n  const remoteEdits$ = remoteTransactions$.pipe(\n    map((transactions) => getEditEvents(transactions, documentId, isLiveEdit)),\n  )\n\n  const documentVariantType = getDocumentVariantType(documentId)\n  const onMutationReceived = (remoteMutation: WithVersion<DocumentRemoteMutationEvent> | null) => {\n    if (!remoteMutation) return\n    // If the remote mutation happened to a published document we need to re-fetch the events.\n    // If it happens to a version, we need to add the mutation to the list of events.\n    // If it happens to a draft: we need to decide if it looks like an event\n    //       Looks like an event: we need to refetch the events list (e.g. publish, discard)\n    //       Doesn't look like an event: we need to add the mutation to the list of events.\n    const variant = remoteMutation.version\n    if (variant !== documentVariantType) {\n      // The mutation is not for the current document variant, we don't need to do anything.\n      return\n    }\n    if (variant === 'published' && !isLiveEdit) {\n      onRefetch()\n      return\n    }\n\n    const effectState = getEffectState({\n      apply: remoteMutation.effects.apply as MendozaPatch,\n      revert: remoteMutation.effects.revert as MendozaPatch,\n    })\n    if (effectState === 'created' || effectState === 'deleted') {\n      onRefetch()\n      remoteTransactions$.next([])\n      return\n    }\n    remoteTransactions$.next([\n      ...remoteTransactions$.value,\n      remoteMutationToTransaction(remoteMutation),\n    ])\n  }\n\n  const subscription = remoteSnapshots(\n    client,\n    {\n      draftId: getDraftId(documentId),\n      publishedId: getPublishedId(documentId),\n      ...(isVersionId(documentId)\n        ? {\n            versionId: documentId,\n          }\n        : {}),\n    },\n    documentType,\n    serverActionsEnabled,\n  ).pipe(filter((event) => event.type === 'remoteMutation'))\n\n  return {\n    remoteTransactions$,\n    remoteEdits$,\n    subscribe: () => subscription.subscribe(onMutationReceived),\n  }\n}\n","import {type SanityClient} from '@sanity/client'\nimport {type Observable} from 'rxjs'\n\nimport {type useReleasesStore} from '../../releases/store/useReleasesStore'\nimport {createEventsObservable} from './createEventsObservable'\nimport {getDocumentChanges} from './getDocumentChanges'\nimport {getExpandEvents} from './getExpandEvents'\nimport {getInitialFetchEvents} from './getInitialFetchEvents'\nimport {getRemoteTransactionsSubscription} from './getRemoteTransactionsSubscription'\nimport {type EventsStoreRevision} from './types'\n\ninterface EventsStoreOptions {\n  client: SanityClient\n  documentId: string\n  documentType: string\n  releases$: ReturnType<typeof useReleasesStore>['state$']\n  serverActionsEnabled: Observable<boolean>\n  isLiveEdit: boolean\n}\n\n/**\n * Creates an event store for a document.\n * If you want to use this in a React component, consider using `useEventsStore` instead.\n *\n * Consider subscribing the remoteEventsListener to get updates on remote transactions.\n */\nexport function createEventsStore({\n  client,\n  documentId,\n  documentType,\n  releases$,\n  serverActionsEnabled,\n  isLiveEdit,\n}: EventsStoreOptions) {\n  const initialEvents = getInitialFetchEvents({client, documentId})\n  const {expandedEvents$, handleExpandEvent} = getExpandEvents({client, documentId})\n  const {remoteEdits$, remoteTransactions$, subscribe} = getRemoteTransactionsSubscription({\n    client,\n    documentId,\n    documentType,\n    isLiveEdit,\n    serverActionsEnabled,\n    onRefetch: initialEvents.reloadEvents,\n  })\n  const eventsObservable$ = createEventsObservable({\n    documentId,\n    events$: initialEvents.events$,\n    remoteEdits$,\n    expandedEvents$,\n    releases$,\n  })\n\n  return {\n    eventsObservable$,\n    getDocumentChanges: (\n      revision$: Observable<EventsStoreRevision | null>,\n      since$: Observable<EventsStoreRevision | null>,\n    ) => {\n      return getDocumentChanges({\n        client,\n        eventsObservable$: eventsObservable$,\n        documentId,\n        remoteTransactions$,\n        to$: revision$,\n        since$: since$,\n      })\n    },\n    handleExpandEvent: handleExpandEvent,\n    loadMoreEvents: initialEvents.loadMore,\n    reloadEvents: initialEvents.reloadEvents,\n    remoteTransactionsListener: subscribe,\n  }\n}\n","import {type SanityClient, type SanityDocument} from '@sanity/client'\nimport {type Observable} from 'rxjs'\nimport {catchError, map, shareReplay, startWith} from 'rxjs/operators'\n\nimport {type EventsStoreRevision} from './types'\n\nconst documentRevisionCache: Record<string, Observable<EventsStoreRevision>> = Object.create(null)\n\nexport function getDocumentAtRevision({\n  client,\n  documentId,\n  revisionId,\n}: {\n  client: SanityClient\n  documentId: string\n  revisionId: string\n}): Observable<EventsStoreRevision | null> {\n  const cacheKey = `${documentId}@${revisionId}`\n  const dataset = client.config().dataset\n  if (!documentRevisionCache[cacheKey]) {\n    documentRevisionCache[cacheKey] = client.observable\n      .request<{documents: SanityDocument[]}>({\n        url: `/data/history/${dataset}/documents/${documentId}?revision=${revisionId}`,\n        tag: 'get-document-revision',\n      })\n      .pipe(\n        map((response) => {\n          const document = response.documents[0]\n          return {document: document, loading: false, revisionId: revisionId}\n        }),\n\n        catchError((error: Error) => {\n          // TODO: Handle error\n          console.error('Error fetching document at revision', error)\n          return [{document: null, loading: false, revisionId: revisionId}]\n        }),\n        startWith({document: null, loading: true, revisionId: revisionId}),\n        shareReplay(1),\n      )\n  }\n\n  return documentRevisionCache[cacheKey]\n}\n","import {type ObjectSchemaType} from '@sanity/types'\nimport {useCallback, useEffect, useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {of} from 'rxjs'\n\nimport {useClient, useSchema} from '../../hooks'\nimport {useReleasesStore} from '../../releases/store/useReleasesStore'\nimport {RELEASES_STUDIO_CLIENT_OPTIONS} from '../../releases/util/releasesClient'\nimport {useWorkspace} from '../../studio/workspace'\nimport {getDocumentVariantType} from '../../util/getDocumentVariantType'\nimport {fetchFeatureToggle} from '../_legacy/document/document-pair/utils/fetchFeatureToggle'\nimport {createEventsStore} from './createEventsStore'\nimport {getDocumentAtRevision} from './getDocumentAtRevision'\nimport {\n  type DocumentGroupEvent,\n  type EventsStore,\n  isEditDocumentVersionEvent,\n  isPublishDocumentVersionEvent,\n} from './types'\n\nexport interface EventsObservableValue {\n  events: DocumentGroupEvent[]\n  nextCursor: string\n  loading: boolean\n  error: null | Error\n}\nconst INITIAL_VALUE: EventsObservableValue = {\n  events: [],\n  nextCursor: '',\n  loading: true,\n  error: null,\n}\n\n/**\n * @internal\n */\nexport function useEventsStore({\n  documentId,\n  documentType,\n  rev,\n  since,\n}: {\n  documentId: string\n  documentType: string\n  rev?: string | '@lastEdited'\n  since?: string | '@lastPublished'\n}): EventsStore {\n  const client = useClient(RELEASES_STUDIO_CLIENT_OPTIONS)\n  const {state$: releases$} = useReleasesStore()\n  const workspace = useWorkspace()\n\n  const serverActionsEnabled = useMemo(() => {\n    const configFlag = workspace.__internal_serverDocumentActions?.enabled\n    // If it's explicitly set, let it override the feature toggle\n    return typeof configFlag === 'boolean' ? of(configFlag as boolean) : fetchFeatureToggle(client)\n  }, [client, workspace.__internal_serverDocumentActions?.enabled])\n  const schema = useSchema()\n  const schemaType = schema.get(documentType) as ObjectSchemaType | undefined\n  const isLiveEdit = Boolean(schemaType?.liveEdit)\n\n  const eventsStore = useMemo(\n    () =>\n      createEventsStore({\n        client,\n        documentId,\n        documentType,\n        releases$,\n        serverActionsEnabled,\n        isLiveEdit,\n      }),\n    [client, documentId, documentType, releases$, serverActionsEnabled, isLiveEdit],\n  )\n  const {events, loading, error, nextCursor} = useObservable(\n    eventsStore.eventsObservable$,\n    INITIAL_VALUE,\n  )\n\n  useEffect(() => {\n    // Subscribe to the remove edits - listening to transactions received from the document pair.\n    const subscription = eventsStore.remoteTransactionsListener()\n    return () => {\n      subscription.unsubscribe()\n    }\n  }, [eventsStore])\n\n  const revisionId = useMemo(() => {\n    if (rev === '@lastPublished') {\n      const publishEvent = events.find(isPublishDocumentVersionEvent)\n      return publishEvent?.id || null\n    }\n    if (rev === '@lastEdited') {\n      const editEvent = events.find(isEditDocumentVersionEvent)\n      if (editEvent) return editEvent.revisionId\n    }\n    if (rev?.startsWith('@release:')) {\n      const releaseId = rev.split(':')[1]\n      const releaseEvent = events.find(\n        (event) => isPublishDocumentVersionEvent(event) && event.releaseId === releaseId,\n      )\n      if (releaseEvent) return releaseEvent.id\n      if (events.length > 0 && !loading) eventsStore.loadMoreEvents()\n    }\n    return rev\n  }, [events, rev, eventsStore, loading])\n\n  const revision$ = useMemo(\n    () =>\n      revisionId ? getDocumentAtRevision({client, documentId, revisionId: revisionId}) : of(null),\n    [client, documentId, revisionId],\n  )\n  const revision = useObservable(revision$, null)\n\n  const sinceId = useMemo(() => {\n    if (since && since !== '@lastPublished') return since\n    if (!events) return null\n\n    if (since === '@lastPublished' || !since) {\n      // Skip the first published, the since and rev cannot be the same.\n      const lastPublishedId = events.slice(1).find(isPublishDocumentVersionEvent)?.id\n      if (lastPublishedId) return lastPublishedId\n    }\n\n    // rev has not been selected, the is seeing the last version of the document, select the event that comes after\n    if (!revisionId) return events[1]?.id\n\n    // If the user has selected a revisionId, we should show here the id of the event that is the previous event to the rev selected.\n    const revisionEventIndex = events.findIndex((e) => e.id === revisionId)\n    if (revisionEventIndex === -1) return null\n\n    return events[revisionEventIndex + 1]?.id || null\n  }, [events, revisionId, since])\n\n  const since$ = useMemo(\n    () => (sinceId ? getDocumentAtRevision({client, documentId, revisionId: sinceId}) : of(null)),\n    [sinceId, client, documentId],\n  )\n\n  const getChangesList = useCallback(\n    () => eventsStore.getDocumentChanges(revision$, since$),\n    [eventsStore, revision$, since$],\n  )\n\n  const sinceRevision = useObservable(since$, null)\n\n  const documentVariantType = getDocumentVariantType(documentId)\n  const findRangeForRevision = useCallback(\n    (nextRev: string): [string | null, string | null] => {\n      if (!events) return [null, null]\n      const revisionIndex = events.findIndex((event) => event.id === nextRev)\n      if (revisionIndex === 0) {\n        // If last event is publish and we are in a version, select that one as the nextRev\n        if (documentVariantType === 'version' && isPublishDocumentVersionEvent(events[0])) {\n          return [since || null, nextRev]\n        }\n        // When selecting the first element of the events (latest) the rev is removed.\n        return [since || null, null]\n      }\n\n      if (!since) {\n        // Get the current revision and check if it's older than the next revision, in that case, use that value as the since.\n        const currentRevisionIndex = events.findIndex((event) => event.id === revisionId)\n        if (\n          currentRevisionIndex === -1 ||\n          revisionIndex === -1 ||\n          revisionIndex > currentRevisionIndex\n        ) {\n          return [null, nextRev]\n        }\n        return [revisionId || null, nextRev]\n      }\n      const sinceIndex = events.findIndex((event) => event.id === since)\n\n      if (sinceIndex === -1 || revisionIndex === -1) return [null, nextRev]\n      if (sinceIndex < revisionIndex) return [null, nextRev]\n      if (sinceIndex === revisionIndex) return [null, nextRev]\n      return [since, nextRev]\n    },\n    [events, since, documentVariantType, revisionId],\n  )\n\n  const findRangeForSince = useCallback(\n    (nextSince: string): [string | null, string | null] => {\n      if (!events) return [null, null]\n      if (!revisionId) return [nextSince, null]\n      const revisionIndex = events.findIndex((event) => event.id === revisionId)\n      const sinceIndex = events.findIndex((event) => event.id === nextSince)\n      if (sinceIndex === -1 || revisionIndex === -1) return [nextSince, null]\n      if (sinceIndex < revisionIndex) return [nextSince, null]\n      if (sinceIndex === revisionIndex) return [nextSince, null]\n      return [nextSince, revisionId]\n    },\n    [events, revisionId],\n  )\n\n  return {\n    events,\n    nextCursor,\n    loading,\n    error,\n    revision,\n    sinceRevision,\n    findRangeForRevision,\n    findRangeForSince,\n    loadMoreEvents: eventsStore.loadMoreEvents,\n    expandEvent: eventsStore.handleExpandEvent,\n    getChangesList,\n  }\n}\n","import {\n  AddCircleIcon,\n  CalendarIcon,\n  CircleIcon,\n  CloseIcon,\n  EditIcon,\n  type IconComponent,\n  PublishIcon,\n  TrashIcon,\n  UnpublishIcon,\n} from '@sanity/icons'\nimport {type ThemeColorAvatarColorKey} from '@sanity/ui/theme'\n\nimport {type StudioLocaleResourceKeys} from '../../../i18n/bundles/studio'\nimport {type DocumentVersionEventType} from '../../../store/events/types'\n\nexport const TIMELINE_ICON_COMPONENTS: Record<DocumentVersionEventType, IconComponent> = {\n  createDocumentVersion: AddCircleIcon,\n  createLiveDocument: AddCircleIcon,\n  deleteDocumentGroup: TrashIcon,\n  deleteDocumentVersion: CloseIcon,\n  editDocumentVersion: EditIcon,\n  updateLiveDocument: EditIcon,\n  publishDocumentVersion: PublishIcon,\n  unpublishDocument: UnpublishIcon,\n  scheduleDocumentVersion: CalendarIcon,\n  unscheduleDocumentVersion: CircleIcon,\n}\n\nexport const TIMELINE_ITEM_EVENT_TONE: Record<DocumentVersionEventType, ThemeColorAvatarColorKey> =\n  {\n    createDocumentVersion: 'green',\n    createLiveDocument: 'blue',\n    updateLiveDocument: 'green',\n    editDocumentVersion: 'yellow',\n    unpublishDocument: 'orange',\n    deleteDocumentVersion: 'orange',\n    deleteDocumentGroup: 'orange',\n    scheduleDocumentVersion: 'cyan',\n    unscheduleDocumentVersion: 'cyan',\n    publishDocumentVersion: 'green',\n  }\n\n/**\n * @internal\n * mapping of events types with a readable key for translation\n */\nexport const TIMELINE_ITEM_I18N_KEY_MAPPING: Record<\n  DocumentVersionEventType,\n  StudioLocaleResourceKeys\n> = {\n  createDocumentVersion: 'timeline.operation.created',\n  publishDocumentVersion: 'timeline.operation.published',\n  updateLiveDocument: 'timeline.operation.edited-live',\n  editDocumentVersion: 'timeline.operation.edited-draft',\n  unpublishDocument: 'timeline.operation.unpublished',\n  deleteDocumentVersion: 'timeline.operation.draft-discarded',\n  deleteDocumentGroup: 'timeline.operation.deleted',\n  scheduleDocumentVersion: 'timeline.operation.published',\n  unscheduleDocumentVersion: 'timeline.operation.published',\n  createLiveDocument: 'timeline.operation.created',\n}\n","import {type AvatarSize, AvatarStack, Box, Flex, Skeleton, Stack, Text} from '@sanity/ui'\n// eslint-disable-next-line camelcase\nimport {getTheme_v2, type ThemeColorAvatarColorKey} from '@sanity/ui/theme'\nimport {useMemo} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {Tooltip} from '../../../../ui-components'\nimport {UserAvatar} from '../../../components/userAvatar/UserAvatar'\nimport {useDateTimeFormat} from '../../../hooks/useDateTimeFormat'\nimport {type RelativeTimeOptions, useRelativeTime} from '../../../hooks/useRelativeTime'\nimport {useTranslation} from '../../../i18n/hooks/useTranslation'\nimport {VersionInlineBadge} from '../../../releases/components/VersionInlineBadge'\nimport {getReleaseTone} from '../../../releases/util/getReleaseTone'\nimport {\n  type DocumentGroupEvent,\n  isEditDocumentVersionEvent,\n  isPublishDocumentVersionEvent,\n} from '../../../store/events/types'\nimport {useUser} from '../../../store/user/hooks'\nimport {getDocumentVariantType} from '../../../util/getDocumentVariantType'\nimport {\n  TIMELINE_ICON_COMPONENTS,\n  TIMELINE_ITEM_EVENT_TONE,\n  TIMELINE_ITEM_I18N_KEY_MAPPING,\n} from './constants'\n\ninterface UserAvatarStackProps {\n  maxLength?: number\n  userIds: string[]\n  size?: AvatarSize\n  withTooltip?: boolean\n}\n\nfunction UserAvatarStack({maxLength, userIds, size, withTooltip = true}: UserAvatarStackProps) {\n  return (\n    <AvatarStack maxLength={maxLength} size={size}>\n      {userIds.map((userId) => (\n        <UserAvatar key={userId} user={userId} withTooltip={withTooltip} />\n      ))}\n    </AvatarStack>\n  )\n}\n\nconst IconBox = styled(Flex)<{$color: ThemeColorAvatarColorKey}>((props) => {\n  const theme = getTheme_v2(props.theme)\n  const color = props.$color\n\n  return css`\n    --card-icon-color: ${theme.color.avatar[color].fg};\n    background-color: ${theme.color.avatar[color].bg};\n    box-shadow: 0 0 0 1px var(--card-bg-color);\n\n    position: absolute;\n    width: ${theme.avatar.sizes[0].size}px;\n    height: ${theme.avatar.sizes[0].size}px;\n    right: -3px;\n    bottom: -3px;\n    border-radius: 50%;\n  `\n})\n\nconst RELATIVE_TIME_OPTIONS: RelativeTimeOptions = {\n  minimal: true,\n  useTemporalPhrase: true,\n}\n\nconst AvatarSkeleton = styled(Skeleton)((props) => {\n  const theme = getTheme_v2(props.theme)\n  return css`\n    border-radius: 50%;\n    width: ${theme.avatar.sizes[1].size}px;\n    height: ${theme.avatar.sizes[1].size}px;\n  `\n})\n\nconst NameSkeleton = styled(Skeleton)((props) => {\n  const theme = getTheme_v2(props.theme)\n  return css`\n    width: 6ch;\n    height: ${theme.font.text.sizes[0].lineHeight}px;\n  `\n})\n\nconst UserLine = ({userId}: {userId: string}) => {\n  const [user, loading] = useUser(userId)\n\n  return (\n    <Flex align=\"center\" gap={2} key={userId} padding={1}>\n      <Box>{loading || !user ? <AvatarSkeleton animated /> : <UserAvatar user={user} />}</Box>\n      <Box>\n        {loading || !user?.displayName ? (\n          <Text size={1}>\n            <NameSkeleton animated />\n          </Text>\n        ) : (\n          <Text muted size={1}>\n            {user.displayName}\n          </Text>\n        )}\n      </Box>\n    </Flex>\n  )\n}\nconst ChangesBy = ({collaborators}: {collaborators: string[]}) => {\n  const {t} = useTranslation('studio')\n  return (\n    <Stack paddingBottom={1}>\n      <Box padding={1} paddingBottom={2}>\n        <Text size={1} weight=\"medium\">\n          {t('timeline.changes.title')}\n        </Text>\n      </Box>\n      {collaborators.map((userId) => (\n        <UserLine key={userId} userId={userId} />\n      ))}\n    </Stack>\n  )\n}\n\ninterface TimelineItemProps {\n  event: DocumentGroupEvent\n  showChangesBy: 'tooltip' | 'inline' | 'hidden'\n}\n/**\n * @internal\n */\nexport function Event({event, showChangesBy = 'tooltip'}: TimelineItemProps) {\n  const {t} = useTranslation('studio')\n  const documentVariantType = getDocumentVariantType(event.documentId)\n  const {type, timestamp} = event\n\n  const IconComponent = TIMELINE_ICON_COMPONENTS[type]\n  const contributors = 'contributors' in event ? event.contributors || [] : []\n\n  const dateFormat = useDateTimeFormat({dateStyle: 'medium', timeStyle: 'short'})\n  const date = new Date(timestamp)\n\n  const updatedTimeAgo = useRelativeTime(date || '', RELATIVE_TIME_OPTIONS)\n\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 userIds = isEditDocumentVersionEvent(event) ? event.contributors : [event.author]\n\n  return (\n    <>\n      <Flex align=\"center\" gap={3}>\n        <div style={{position: 'relative'}}>\n          <UserAvatarStack maxLength={3} userIds={userIds.filter(Boolean)} size={2} />\n          <IconBox align=\"center\" justify=\"center\" $color={TIMELINE_ITEM_EVENT_TONE[type]}>\n            <Text size={0}>{IconComponent && <IconComponent />}</Text>\n          </IconBox>\n        </div>\n        <Stack space={2}>\n          <Text size={1} weight=\"medium\">\n            {t(TIMELINE_ITEM_I18N_KEY_MAPPING[type])}\n            {isPublishDocumentVersionEvent(event) && documentVariantType === 'published' && (\n              <>\n                {' '}\n                {event.release ? (\n                  <VersionInlineBadge $tone={getReleaseTone(event.release)}>\n                    {event.release.metadata.title || t('release.placeholder-untitled-release')}\n                  </VersionInlineBadge>\n                ) : (\n                  <VersionInlineBadge $tone=\"caution\">\n                    {t('changes.versions.draft')}\n                  </VersionInlineBadge>\n                )}\n              </>\n            )}\n          </Text>\n\n          <Text as=\"time\" size={1} muted dateTime={timestamp} title={formattedTimestamp}>\n            {updatedTimeAgo}\n          </Text>\n        </Stack>\n\n        {contributors.length > 0 && showChangesBy == 'tooltip' && (\n          <Flex flex={1} justify=\"flex-end\" align=\"center\">\n            <Tooltip placement=\"top\" content={<ChangesBy collaborators={contributors} />} portal>\n              <Box paddingLeft={2} paddingY={2}>\n                <UserAvatarStack\n                  maxLength={3}\n                  userIds={contributors}\n                  size={0}\n                  withTooltip={false}\n                />\n              </Box>\n            </Tooltip>\n          </Flex>\n        )}\n      </Flex>\n      {contributors.length > 0 && showChangesBy === 'inline' && (\n        <Box paddingTop={2}>\n          <ChangesBy collaborators={contributors} />\n        </Box>\n      )}\n    </>\n  )\n}\n","import {type Path} from '@sanity/types'\nimport {Card, Flex, Inline, Stack, Text} from '@sanity/ui'\nimport {type ReactNode} from 'react'\n\nimport {Tooltip, type TooltipProps} from '../../../../ui-components'\nimport {LegacyLayerProvider, UserAvatar} from '../../../components'\nimport {useRelativeTime} from '../../../hooks'\nimport {useTranslation} from '../../../i18n'\nimport {useUser} from '../../../store'\nimport {type AnnotationDetails, type Diff} from '../../types'\nimport {getAnnotationAtPath, useAnnotationColor} from '../annotations'\nimport {Event} from '../components/Event'\n\n/** @internal */\nexport interface DiffTooltipProps extends TooltipProps {\n  children: React.JSX.Element\n  description?: ReactNode\n  diff: Diff\n  path?: Path | string\n}\n\n/** @internal */\nexport interface DiffTooltipWithAnnotationsProps extends TooltipProps {\n  annotations: AnnotationDetails[]\n  children: React.JSX.Element\n  description?: ReactNode\n}\n\n/** @internal */\nexport function DiffTooltip(props: DiffTooltipProps | DiffTooltipWithAnnotationsProps) {\n  if (!('diff' in props)) {\n    return <DiffTooltipWithAnnotation {...props} />\n  }\n\n  const {diff, path = [], ...restProps} = props\n  const annotation = getAnnotationAtPath(diff, path)\n\n  return <DiffTooltipWithAnnotation {...restProps} annotations={annotation ? [annotation] : []} />\n}\n\nfunction DiffTooltipWithAnnotation(props: DiffTooltipWithAnnotationsProps) {\n  const {annotations, children, description, ...restProps} = props\n  const {t} = useTranslation()\n\n  if (!annotations) {\n    return children\n  }\n\n  const content = (\n    <Stack space={2} style={{minWidth: '240px'}} paddingTop={1}>\n      <Text muted size={1} weight=\"medium\">\n        {description || t('changes.changed-label')}\n      </Text>\n      <Stack space={2}>\n        {annotations.map((annotation, idx) => (\n          <AnnotationItem annotation={annotation} key={idx} />\n        ))}\n      </Stack>\n    </Stack>\n  )\n\n  return (\n    <LegacyLayerProvider zOffset=\"paneFooter\">\n      <Tooltip content={content} portal {...restProps}>\n        {children}\n      </Tooltip>\n    </LegacyLayerProvider>\n  )\n}\n\nfunction AnnotationItem({annotation}: {annotation: AnnotationDetails}) {\n  const {author, timestamp} = annotation\n  const [user] = useUser(author)\n  const color = useAnnotationColor(annotation)\n  const timeAgo = useRelativeTime(timestamp, {minimal: true})\n  const {t} = useTranslation()\n\n  return (\n    <>\n      {annotation.event ? (\n        <>\n          <Card borderBottom marginBottom={2} />\n          <Event event={annotation.event} showChangesBy=\"inline\" />\n        </>\n      ) : (\n        <Inline space={2}>\n          <Flex\n            align=\"center\"\n            paddingRight={3}\n            style={{\n              backgroundColor: color.background,\n              color: color.text,\n              borderRadius: 'calc(23px / 2)',\n            }}\n          >\n            <UserAvatar user={author} />\n            <Inline paddingLeft={2}>\n              <Text muted size={1} style={{color: color.text}}>\n                {user ? user.displayName : t('changes.loading-author')}\n              </Text>\n            </Inline>\n          </Flex>\n          <Text as=\"time\" muted size={1} dateTime={timestamp}>\n            {timeAgo}\n          </Text>\n        </Inline>\n      )}\n    </>\n  )\n}\n","import {type Path} from '@sanity/types'\nimport {Card, rem} from '@sanity/ui'\nimport {type ElementType, forwardRef, type HTMLProps, type ReactNode, useMemo} from 'react'\nimport {styled} from 'styled-components'\n\nimport {type Annotation, type Diff} from '../../types'\nimport {getAnnotationAtPath, useAnnotationColor} from '../annotations'\nimport {DiffTooltip} from './DiffTooltip'\n\n/** @internal */\nexport interface DiffCardProps {\n  annotation?: Annotation\n  as?: ElementType | keyof React.JSX.IntrinsicElements\n  diff?: Diff\n  disableHoverEffect?: boolean\n  path?: Path | string\n  tooltip?: {description?: ReactNode} | boolean\n}\n\ninterface StyledCardProps {\n  $annotationColor: {backgroundColor: string; color: string}\n}\n\nconst StyledCard = styled(Card)<StyledCardProps>`\n  --diff-card-radius: ${({theme}) => rem(theme.sanity.radius[2])};\n  --diff-card-bg-color: ${({theme}) => theme.sanity.color.card.enabled.bg};\n\n  max-width: 100%;\n  position: relative;\n  border-radius: var(--diff-card-radius);\n  background-color: ${({$annotationColor}) => $annotationColor.backgroundColor};\n  color: ${({$annotationColor}) => $annotationColor.color};\n\n  &:not(del) {\n    text-decoration: none;\n  }\n\n  &[data-hover] {\n    &::after {\n      content: '';\n      display: block;\n      position: absolute;\n      left: 0;\n      right: 0;\n      bottom: 0;\n    }\n\n    &:hover {\n      border-bottom-left-radius: 0;\n      border-bottom-right-radius: 0;\n\n      &::after {\n        bottom: -3px;\n        border-top: 1px solid var(---diff-card-bg-color);\n        border-bottom: 2px solid currentColor;\n        border-bottom-left-radius: var(--diff-card-radius);\n        border-bottom-right-radius: var(--diff-card-radius);\n      }\n    }\n\n    [data-from-to-layout]:hover & {\n      border-bottom-left-radius: 0;\n      border-bottom-right-radius: 0;\n\n      &::after {\n        bottom: -3px;\n        border-top: 1px solid var(---diff-card-bg-color);\n        border-bottom: 2px solid currentColor;\n        border-bottom-left-radius: var(--diff-card-radius);\n        border-bottom-right-radius: var(--diff-card-radius);\n      }\n    }\n  }\n`\n\nconst EMPTY_PATH: Path = []\n\n/** @internal */\nexport const DiffCard = forwardRef(function DiffCard(\n  props: DiffCardProps & Omit<HTMLProps<HTMLElement>, 'as' | 'height'>,\n  ref,\n) {\n  const {\n    annotation: annotationProp,\n    as = 'div',\n    children,\n    className,\n    diff,\n    disableHoverEffect,\n    path = EMPTY_PATH,\n    style = {},\n    tooltip,\n    ...restProps\n  } = props\n\n  const annotation = useMemo(\n    () => annotationProp || getAnnotationAtPath(diff!, path),\n    [annotationProp, diff, path],\n  )\n\n  const color = useAnnotationColor(annotation)\n\n  const element = (\n    <StyledCard\n      {...restProps}\n      as={as}\n      className={className}\n      data-hover={disableHoverEffect || !annotation ? undefined : ''}\n      data-ui=\"diff-card\"\n      ref={ref}\n      radius={1}\n      // Added annotation color to the card using css to make it possible to override by the ReleaseReview\n      $annotationColor={{backgroundColor: color.background, color: color.text}}\n      style={style}\n    >\n      {children}\n    </StyledCard>\n  )\n\n  if (tooltip && annotation) {\n    return (\n      <DiffTooltip\n        annotations={[annotation]}\n        description={tooltip && typeof tooltip === 'object' && tooltip.description}\n      >\n        {element}\n      </DiffTooltip>\n    )\n  }\n\n  return element\n})\n","import {Box, rem, Text} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {useTranslation} from '../../../i18n'\nimport {type Annotation, type FieldChangeNode, type FromToIndex} from '../../types'\nimport {getAnnotationAtPath} from '../annotations'\nimport {DiffCard} from './DiffCard'\n\nconst RoundedCard = styled.div`\n  border-radius: ${({theme}) => rem(theme.sanity.radius[2])};\n  padding: ${({theme}) => rem(theme.sanity.space[1])};\n`\n\nconst AnnotationText = styled(Text)`\n  &:not([hidden]) {\n    color: inherit;\n  }\n`\n\n/** @internal */\nexport function ChangeTitleSegment(props: {\n  change?: FieldChangeNode\n  segment: string | FromToIndex\n}) {\n  const {change, segment} = props\n\n  if (typeof segment === 'string') {\n    return (\n      <Box>\n        <Text title={segment} size={1} weight=\"medium\" textOverflow=\"ellipsis\">\n          {segment}\n        </Text>\n      </Box>\n    )\n  }\n\n  const {hasMoved, fromIndex, toIndex, annotation} = segment\n  const created = typeof fromIndex === 'undefined'\n  const deleted = typeof toIndex === 'undefined'\n  if (created) {\n    // Item was created\n    return <CreatedTitleSegment annotation={annotation} change={change} toIndex={toIndex} />\n  }\n\n  if (deleted) {\n    // Item was deleted\n    return <DeletedTitleSegment annotation={annotation} fromIndex={fromIndex} />\n  }\n\n  if (hasMoved && typeof toIndex !== 'undefined' && typeof fromIndex !== 'undefined') {\n    // Item was moved\n    return <MovedTitleSegment annotation={annotation} fromIndex={fromIndex} toIndex={toIndex} />\n  }\n\n  // Changed/unchanged\n  const readableIndex = (toIndex || 0) + 1\n  return (\n    <Box padding={1}>\n      <Text size={1} weight=\"medium\">\n        #{readableIndex}\n      </Text>\n    </Box>\n  )\n}\n\nfunction CreatedTitleSegment(props: {\n  annotation: Annotation | undefined\n  change?: FieldChangeNode\n  toIndex?: number\n}) {\n  const {annotation: annotationProp, change, toIndex = 0} = props\n  const {t} = useTranslation()\n  const readableIndex = toIndex + 1\n  const description = t('changes.array.item-added-in-position', {position: readableIndex})\n  const content = <>#{readableIndex}</>\n  const diffAnnotation = change?.diff ? getAnnotationAtPath(change.diff, []) : undefined\n  const annotation = diffAnnotation || annotationProp\n\n  if (annotation) {\n    return (\n      <DiffCard annotation={annotation} tooltip={{description}} as={RoundedCard}>\n        <AnnotationText size={1} weight=\"medium\" forwardedAs=\"ins\" style={{textDecoration: 'none'}}>\n          {content}\n        </AnnotationText>\n      </DiffCard>\n    )\n  }\n\n  return (\n    <Text size={1} weight=\"medium\">\n      {content}\n    </Text>\n  )\n}\n\nfunction DeletedTitleSegment(props: {annotation: Annotation | undefined; fromIndex?: number}) {\n  const {annotation, fromIndex = 0} = props\n  const {t} = useTranslation()\n  const readableIndex = fromIndex + 1\n  const description = t('changes.array.item-removed-from-position', {position: readableIndex})\n  return (\n    <DiffCard annotation={annotation || null} as={RoundedCard} tooltip={{description}}>\n      <AnnotationText size={1} weight=\"medium\" forwardedAs=\"del\">\n        #{readableIndex}\n      </AnnotationText>\n    </DiffCard>\n  )\n}\n\nfunction MovedTitleSegment(props: {\n  annotation: Annotation | undefined\n  fromIndex: number\n  toIndex: number\n}) {\n  const {annotation, fromIndex, toIndex} = props\n  const {t} = useTranslation()\n  const indexDiff = toIndex - fromIndex\n  const indexSymbol = indexDiff < 0 ? '↑' : '↓'\n  const positions = Math.abs(indexDiff)\n  const direction = indexDiff < 0 ? 'up' : 'down'\n  const description = t('changes.array.item-moved', {\n    count: positions,\n    context: direction,\n  })\n\n  return (\n    <>\n      <Box padding={1}>\n        <AnnotationText size={1} weight=\"medium\">\n          #{toIndex + 1}\n        </AnnotationText>\n      </Box>\n      <DiffCard annotation={annotation} as={RoundedCard} tooltip={{description}}>\n        <AnnotationText size={1} weight=\"medium\">\n          {indexSymbol}\n          {Math.abs(indexDiff)}\n        </AnnotationText>\n      </DiffCard>\n    </>\n  )\n}\n","import {ChevronRightIcon} from '@sanity/icons'\nimport {Breadcrumbs, Text} from '@sanity/ui'\n\nimport {type ChangeTitlePath, type FieldChangeNode} from '../../types'\nimport {ChangeTitleSegment} from './ChangeTitleSegment'\n\n/** @internal */\nexport function ChangeBreadcrumb(props: {change?: FieldChangeNode; titlePath: ChangeTitlePath}) {\n  const {change, titlePath} = props\n\n  return (\n    <Breadcrumbs\n      maxLength={4}\n      separator={\n        <Text muted size={1}>\n          <ChevronRightIcon />\n        </Text>\n      }\n    >\n      {titlePath.map((titleSegment, idx) => {\n        const showSegment = typeof titleSegment === 'string' || !change || change.showIndex\n\n        if (!showSegment) {\n          return null\n        }\n\n        return <ChangeTitleSegment change={change} key={idx} segment={titleSegment} />\n      })}\n    </Breadcrumbs>\n  )\n}\n","import {\n  type ConditionalProperty,\n  type ConditionalPropertyCallbackContext,\n  type CurrentUser,\n} from '@sanity/types'\nimport {omit} from 'lodash'\nimport {useMemo} from 'react'\n\nimport {isRecord} from '../../util'\n\nexport function isThenable(value: unknown): value is Promise<unknown> {\n  return isRecord(value) && typeof value?.then === 'function'\n}\n\nexport function omitDeprecatedRole(user: CurrentUser): Omit<CurrentUser, 'role'> {\n  return omit(user, 'role')\n}\n\nexport function useCheckCondition(\n  checkProperty: ConditionalProperty,\n  checkPropertyName: string,\n  context: ConditionalPropertyCallbackContext,\n): boolean {\n  const {currentUser, document, parent, value} = context\n\n  return useMemo(() => {\n    let isTrueIsh = false\n\n    if (typeof checkProperty === 'boolean' || checkProperty === undefined) {\n      return checkProperty || false\n    }\n\n    try {\n      isTrueIsh = checkProperty({\n        document,\n        parent,\n        value,\n        currentUser,\n      })\n    } catch (err) {\n      console.error(\n        `An error occurred while running the callback from \\`${checkPropertyName}\\`: ${err.message}`,\n      )\n      return false\n    }\n\n    if (isThenable(isTrueIsh)) {\n      console.warn(\n        `The \\`${checkPropertyName}\\` option is either a promise or a promise returning function. Async callbacks for \\`${checkPropertyName}\\` option is not currently supported.`,\n      )\n      return false\n    }\n\n    if (typeof isTrueIsh === 'undefined') {\n      console.warn(\n        `The \\`${checkPropertyName}\\` option is or returned \\`undefined\\`. \\`${checkPropertyName}\\` should return a boolean.`,\n      )\n    }\n\n    return isTrueIsh\n  }, [checkProperty, document, parent, value, currentUser, checkPropertyName])\n}\n","import {type ConditionalProperty, type SanityDocument} from '@sanity/types'\n\nimport {useCurrentUser} from '../../store'\nimport {useUnique} from '../../util'\nimport {useCheckCondition} from './utils'\n\n/**\n * @internal Not yet a stable API\n */\nexport interface ConditionalPropertyProps {\n  parent?: unknown\n  value: unknown\n  document?: SanityDocument\n  checkProperty: ConditionalProperty\n  checkPropertyKey: string\n}\n\n/**\n * Resolve a callback function to a boolean using the passed arguments\n *\n * @internal Not yet a stable API\n */\nconst useConditionalProperty = (props: ConditionalPropertyProps): boolean => {\n  const {checkProperty = false, checkPropertyKey, document, parent, value: valueProp} = props\n  const value = useUnique(valueProp)\n  const currentUser = useCurrentUser()\n\n  const isPropertyTruthy = useCheckCondition(checkProperty, checkPropertyKey, {\n    currentUser,\n    document,\n    parent,\n    value,\n  })\n\n  return isPropertyTruthy\n}\n\nexport {useConditionalProperty as unstable_useConditionalProperty}\n","import {type ArraySchemaType, isTypedObject, type SchemaType} from '@sanity/types'\n\nimport {type Diff} from '../types'\n\nexport function resolveTypeName(value: unknown): string {\n  return isTypedObject(value) ? value._type : resolveJSType(value)\n}\n\nexport function getArrayDiffItemType(\n  diff: Diff,\n  schemaType: ArraySchemaType,\n): {fromType?: SchemaType; toType?: SchemaType} {\n  if (diff.action === 'added') {\n    return {\n      toType: resolveArrayMemberType(schemaType, diff.toValue),\n    }\n  }\n\n  if (diff.action === 'changed') {\n    return {\n      fromType: resolveArrayMemberType(schemaType, diff.fromValue),\n      toType: resolveArrayMemberType(schemaType, diff.toValue),\n    }\n  }\n\n  if (diff.action === 'removed') {\n    return {\n      fromType: resolveArrayMemberType(schemaType, diff.fromValue),\n    }\n  }\n\n  // unchanged\n  return {\n    toType: resolveArrayMemberType(schemaType, diff.toValue),\n  }\n}\n\nfunction resolveArrayMemberType(\n  schemaType: ArraySchemaType,\n  value: unknown,\n): SchemaType | undefined {\n  const typeName = resolveTypeName(value)\n  const declared = schemaType.of.find((candidate) => candidate.name === typeName)\n  if (declared) {\n    return declared as any\n  }\n\n  return (schemaType.of.length === 1 ? schemaType.of[0] : undefined) as any\n}\n\nfunction resolveJSType(val: unknown) {\n  if (Array.isArray(val)) {\n    return 'array'\n  }\n\n  if (val === null) {\n    return 'null'\n  }\n\n  return typeof val\n}\n","export const ANNOTATION_SYMBOLS = [\n  // [startTag, endTag]\n  ['\\uF050', '\\uF051'],\n  ['\\uF052', '\\uF053'],\n  ['\\uF054', '\\uF055'],\n  ['\\uF056', '\\uF057'],\n  ['\\uF058', '\\uF059'],\n  ['\\uF05A', '\\uF05B'],\n  ['\\uF05C', '\\uF05D'],\n  ['\\uF05F', '\\uF060'],\n  ['\\uF061', '\\uF062'],\n  ['\\uF063', '\\uF064'],\n  ['\\uF065', '\\uF066'],\n  ['\\uF067', '\\uF068'],\n  ['\\uF069', '\\uF06A'],\n  ['\\uF06B', '\\uF06C'],\n  ['\\uF06E', '\\uF06F'],\n  ['\\uF070', '\\uF071'],\n  ['\\uF072', '\\uF073'],\n  ['\\uF074', '\\uF075'],\n  ['\\uF076', '\\uF077'],\n  ['\\uF078', '\\uF079'],\n  ['\\uF07A', '\\uF07B'],\n  ['\\uF07C', '\\uF07D'],\n  ['\\uF07E', '\\uF07F'],\n  ['\\uF080', '\\uF081'],\n  ['\\uF082', '\\uF083'],\n  ['\\uF084', '\\uF085'],\n  ['\\uF086', '\\uF087'],\n  ['\\uF088', '\\uF089'],\n  ['\\uF08A', '\\uF08B'],\n  ['\\uF08C', '\\uF08D'],\n  ['\\uF08E', '\\uF08F'],\n]\n\nexport const CHILD_SYMBOL = '\\uF0D0'\n\nexport const DECORATOR_SYMBOLS = [\n  // [startTag, endTag]\n  ['\\uF000', '\\uF001'],\n  ['\\uF002', '\\uF003'],\n  ['\\uF004', '\\uF005'],\n  ['\\uF006', '\\uF007'],\n  ['\\uF008', '\\uF009'],\n  ['\\uF00A', '\\uF00B'],\n  ['\\uF00C', '\\uF00D'],\n  ['\\uF00F', '\\uF010'],\n  ['\\uF011', '\\uF012'],\n  ['\\uF013', '\\uF014'],\n  ['\\uF015', '\\uF016'],\n  ['\\uF017', '\\uF018'],\n  ['\\uF019', '\\uF01A'],\n  ['\\uF01B', '\\uF01C'],\n  ['\\uF01E', '\\uF01F'],\n  ['\\uF020', '\\uF021'],\n]\n\nexport const EMPTY_BLOCK_SYMBOL = '\\u21B2'\n\nexport const INLINE_SYMBOLS = [\n  '\\uF090',\n  '\\uF091',\n  '\\uF092',\n  '\\uF093',\n  '\\uF094',\n  '\\uF095',\n  '\\uF096',\n  '\\uF097',\n  '\\uF098',\n  '\\uF099',\n  '\\uF09A',\n  '\\uF09B',\n  '\\uF09C',\n  '\\uF09D',\n  '\\uF09E',\n  '\\uF09F',\n  '\\uF0A0',\n  '\\uF0A1',\n  '\\uF0A2',\n  '\\uF0A3',\n  '\\uF0A4',\n  '\\uF0A5',\n  '\\uF0A6',\n  '\\uF0A7',\n  '\\uF0A8',\n  '\\uF0A9',\n  '\\uF0AA',\n  '\\uF0AB',\n  '\\uF0AC',\n  '\\uF0AD',\n  '\\uF0AE',\n  '\\uF0AF',\n  '\\uF0B0',\n  '\\uF0B1',\n  '\\uF0B2',\n  '\\uF0B3',\n  '\\uF0B4',\n  '\\uF0B5',\n  '\\uF0B6',\n  '\\uF0B7',\n  '\\uF0B8',\n  '\\uF0B9',\n  '\\uF0BA',\n  '\\uF0BB',\n  '\\uF0BC',\n  '\\uF0BD',\n  '\\uF0BE',\n  '\\uF0BF',\n]\n\nexport const TRAILING_SPACE_SYMBOL = '\\u205F'\n\nexport const SEGMENT_START_SYMBOL = '\\u2060'\n","import {\n  cleanupEfficiency,\n  DIFF_DELETE,\n  DIFF_EQUAL,\n  DIFF_INSERT,\n  makeDiff,\n} from '@sanity/diff-match-patch'\nimport {\n  type ArraySchemaType,\n  isPortableTextSpan,\n  isPortableTextTextBlock,\n  type ObjectField,\n  type ObjectSchemaType,\n  type PortableTextBlock,\n  type PortableTextChild,\n  type PortableTextObject,\n  type PortableTextTextBlock,\n  type SchemaType,\n  type SpanSchemaType,\n} from '@sanity/types'\nimport {flatten, isEqual, orderBy} from 'lodash'\n\nimport {\n  type ArrayDiff,\n  type DiffComponent,\n  type DiffComponentOptions,\n  type ObjectDiff,\n  type StringDiffSegment,\n} from '../../../types'\nimport * as TextSymbols from './symbols'\nimport {type InlineSymbolMap, type MarkSymbolMap, type PortableTextDiff} from './types'\n\nexport const UNKNOWN_TYPE_NAME = '_UNKOWN_TYPE_'\n\nexport function hasPTMemberType(schemaType: ArraySchemaType): boolean {\n  return schemaType.of.some(isPTSchemaType)\n}\n\nconst startMarkSymbols = TextSymbols.DECORATOR_SYMBOLS.map((set) => set[0]).concat(\n  TextSymbols.ANNOTATION_SYMBOLS.map((set) => set[0]),\n)\nconst endMarkSymbols = TextSymbols.DECORATOR_SYMBOLS.map((set) => set[1]).concat(\n  TextSymbols.ANNOTATION_SYMBOLS.map((set) => set[1]),\n)\nconst allSymbols = startMarkSymbols\n  .concat(endMarkSymbols)\n  .concat(TextSymbols.INLINE_SYMBOLS)\n  .concat(TextSymbols.CHILD_SYMBOL)\n  .concat(TextSymbols.SEGMENT_START_SYMBOL)\nconst symbolRegex = new RegExp(`${allSymbols.join('|')}`, 'g')\nconst segmentRegex = new RegExp(`${allSymbols.join('|')}|\\n`, 'g')\n\ninterface BlockSchemaType extends ObjectSchemaType {\n  diffComponent:\n    | DiffComponent<ObjectDiff<PortableTextBlock>>\n    | DiffComponentOptions<ObjectDiff<PortableTextBlock>>\n}\n\nexport function isPTSchemaType(schemaType: SchemaType): schemaType is BlockSchemaType {\n  return schemaType.jsonType === 'object' && schemaType.name === 'block'\n}\n\nexport function isHeader(node: PortableTextBlock): boolean {\n  return (\n    isPortableTextTextBlock(node) &&\n    !!node.style &&\n    ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(node.style)\n  )\n}\n\nexport function findChildDiff(diff: ObjectDiff, child: PortableTextChild): ObjectDiff {\n  const childrenDiff = diff.fields.children as ArrayDiff\n  return childrenDiff.items\n    .filter(\n      (item: any) =>\n        item.diff.isChanged && (item.diff.toValue === child || item.diff.fromValue === child),\n    )\n    .map((item: any) => item.diff)\n    .map((childDiff: any) => childDiff as ObjectDiff)[0]\n}\n\nexport function getChildSchemaType(\n  fields: ObjectField<SchemaType>[],\n  child: PortableTextChild,\n): ObjectSchemaType | undefined {\n  const childrenField = fields.find((f) => f.name === 'children')\n  const cSchemaType =\n    (childrenField &&\n      childrenField.type &&\n      childrenField.type.jsonType === 'array' &&\n      (childrenField.type.of.find((type) => type.name === child._type) as ObjectSchemaType)) ||\n    undefined\n  return cSchemaType\n}\n\nexport function getDecorators(spanSchemaType: SpanSchemaType): {title: string; value: string}[] {\n  if (spanSchemaType.decorators) {\n    return orderBy(spanSchemaType.decorators, ['value'], ['asc'])\n  }\n  return []\n}\n\nexport function getAnnotations(spanSchemaType: SpanSchemaType): ObjectSchemaType[] {\n  if (spanSchemaType.annotations) {\n    return orderBy(spanSchemaType.annotations, ['name'], ['asc'])\n  }\n  return []\n}\n\nexport function isDecorator(name: string, schemaType: SpanSchemaType): boolean {\n  return getDecorators(schemaType).some((dec) => dec.value === name)\n}\n\nexport function blockToSymbolizedText(\n  diff: ObjectDiff,\n  block: PortableTextTextBlock | undefined,\n  decoratorMap: MarkSymbolMap,\n  annotationMap: MarkSymbolMap,\n  inlineMap: InlineSymbolMap,\n): string {\n  if (!block) {\n    return ''\n  }\n  return block.children\n    .map((child) => {\n      let returned = isPortableTextSpan(child) ? child.text?.replace(symbolRegex, '') : '' // Make sure symbols aren't in the text already\n      if (isPortableTextSpan(child)) {\n        // Attatch stringdiff segments\n        const spanDiff = findSpanDiffFromChild(diff, child)\n        const textDiff = spanDiff?.fields.text\n        if (\n          textDiff &&\n          textDiff.toValue === child.text &&\n          textDiff.type === 'string' &&\n          textDiff.action !== 'unchanged'\n        ) {\n          returned = textDiff.segments\n            .filter((seg) => seg.action !== 'removed')\n            .map((seg) => seg.text.replace(symbolRegex, ''))\n            .join(TextSymbols.SEGMENT_START_SYMBOL)\n        }\n        if (child.marks) {\n          child.marks.forEach((mark) => {\n            const _isDecorator = !!decoratorMap[mark]\n            if (_isDecorator) {\n              returned = `${decoratorMap[mark][0]}${returned}${decoratorMap[mark][1]}`\n            } else if (annotationMap[mark]) {\n              returned = `${annotationMap[mark][0]}${returned}${annotationMap[mark][1]}`\n            }\n          })\n        }\n      } else {\n        returned = inlineMap[child._key]\n      }\n      return `${TextSymbols.CHILD_SYMBOL}${returned}`\n    })\n    .join('')\n}\n\nexport function createPortableTextDiff(\n  diff: ObjectDiff,\n  schemaType: ObjectSchemaType,\n): PortableTextDiff {\n  const displayValue =\n    diff.action === 'removed'\n      ? (diff.fromValue as PortableTextTextBlock)\n      : (diff.toValue as PortableTextTextBlock)\n  const _diff: PortableTextDiff = {\n    ...diff,\n    origin: diff,\n    displayValue,\n  }\n\n  if (displayValue) {\n    const annotationMap: MarkSymbolMap = {}\n    const decoratorMap: MarkSymbolMap = {}\n    const inlineMap: InlineSymbolMap = {}\n    const spanSchemaType = getChildSchemaType(schemaType.fields, {\n      _key: 'bogus',\n      _type: 'span',\n    }) as SpanSchemaType\n    if (spanSchemaType) {\n      getDecorators(spanSchemaType).forEach((dec, index) => {\n        decoratorMap[dec.value] = TextSymbols.DECORATOR_SYMBOLS[index]\n      })\n    }\n    const allMarkDefs = getAllMarkDefs(_diff.origin)\n    allMarkDefs.forEach((markDef, index) => {\n      annotationMap[markDef._key] = TextSymbols.ANNOTATION_SYMBOLS[index]\n    })\n    const inlines = getInlineObjects(_diff.origin)\n    inlines.forEach((inline, index) => {\n      inlineMap[inline._key] = TextSymbols.INLINE_SYMBOLS[index]\n    })\n    const fromText = blockToSymbolizedText(\n      _diff.origin,\n      _diff.fromValue as PortableTextTextBlock,\n      decoratorMap,\n      annotationMap,\n      inlineMap,\n    )\n    const toText = blockToSymbolizedText(\n      _diff.origin,\n      _diff.toValue as PortableTextTextBlock,\n      decoratorMap,\n      annotationMap,\n      inlineMap,\n    )\n    const toPseudoValue = {\n      ...displayValue,\n      children: [\n        {\n          _type: 'span',\n          _key: 'pseudoSpanKey',\n          text: toText,\n          marks: [],\n        },\n      ],\n    }\n    const fromPseudoValue = {\n      displayValue,\n      children: [\n        {\n          _type: 'span',\n          _key: 'pseudoSpanKey',\n          text: fromText,\n          marks: [],\n        },\n      ],\n    }\n    const pseudoDiff = {\n      origin: diff,\n      action: 'changed',\n      type: 'object',\n      displayValue: toPseudoValue,\n      fromValue: fromPseudoValue,\n      toValue: toPseudoValue,\n      isChanged: true,\n      fields: {\n        children: {\n          action: 'changed',\n          type: 'array',\n          isChanged: true,\n          items: [\n            {\n              diff: {\n                action: 'changed',\n                type: 'object',\n                isChanged: true,\n                fields: {\n                  text: {\n                    type: 'string',\n                    action: 'changed',\n                    isChanged: true,\n                    fromValue: fromText,\n                    toValue: toText,\n                    segments: buildSegments(fromText, toText).map((seg) => ({\n                      ...seg,\n                      ...(_diff.action !== 'unchanged' && _diff.annotation\n                        ? {annotation: _diff.annotation} // Fallback if we can't find a spesific original diff\n                        : {}),\n                    })),\n                  },\n                },\n                fromValue: fromPseudoValue.children[0],\n                toValue: toPseudoValue.children[0],\n              },\n              annotation: null,\n              fromIndex: 0,\n              toIndex: 0,\n              hasMoved: false,\n            },\n          ],\n          fromValue: fromPseudoValue.children,\n          toValue: toPseudoValue.children,\n        },\n      },\n    }\n    return pseudoDiff as PortableTextDiff\n  }\n  throw new Error('Can not display this diff')\n}\n\nfunction buildSegments(fromInput: string, toInput: string): StringDiffSegment[] {\n  const segments: StringDiffSegment[] = []\n  const dmpDiffs = cleanupEfficiency(makeDiff(fromInput, toInput))\n\n  let fromIdx = 0\n  let toIdx = 0\n  for (const [op, text] of dmpDiffs) {\n    switch (op) {\n      case DIFF_EQUAL:\n        segments.push({\n          type: 'stringSegment',\n          action: 'unchanged',\n          text,\n        })\n        fromIdx += text.length\n        toIdx += text.length\n        break\n      case DIFF_DELETE:\n        segments.push({\n          type: 'stringSegment',\n          action: 'removed',\n          text: fromInput.slice(fromIdx, fromIdx + text.length),\n          annotation: null,\n        })\n        fromIdx += text.length\n        break\n      case DIFF_INSERT:\n        segments.push({\n          type: 'stringSegment',\n          action: 'added',\n          text: toInput.slice(toIdx, toIdx + text.length),\n          annotation: null,\n        })\n        toIdx += text.length\n        break\n      default:\n      // Do nothing\n    }\n  }\n  // Clean up so that marks / symbols are treated as an own segment\n  return flatten(\n    segments.map((seg) => {\n      const newSegments: StringDiffSegment[] = []\n      if (seg.text.length > 1) {\n        const markMatches = [...seg.text.matchAll(segmentRegex)]\n        let lastIndex = -1\n        markMatches.forEach((match) => {\n          const index = match.index || 0\n          if (index > lastIndex) {\n            newSegments.push({...seg, text: seg.text.slice(lastIndex + 1, index)})\n            newSegments.push({...seg, text: match[0]})\n          }\n          if (match === markMatches[markMatches.length - 1]) {\n            newSegments.push({...seg, text: seg.text.slice(Math.max(0, index + 1))})\n          }\n          lastIndex = index\n        })\n        if (markMatches.length === 0) {\n          newSegments.push(seg)\n        }\n      } else {\n        newSegments.push(seg)\n      }\n      return newSegments\n    }),\n  )\n}\n\nexport function getInlineObjects(diff: ObjectDiff): PortableTextObject[] {\n  const allChildren = [\n    ...(diff.toValue ? diff.toValue.children.filter((cld: any) => cld._type !== 'span') : []),\n  ]\n  const previousChildren = diff.fromValue\n    ? diff.fromValue.children.filter((cld: any) => cld._type !== 'span')\n    : []\n  previousChildren.forEach((oCld: any) => {\n    if (!allChildren.some((cld) => oCld._key === cld._key)) {\n      allChildren.push(oCld)\n    }\n  })\n  return orderBy(allChildren, ['_key'], ['asc']) as PortableTextObject[]\n}\n\nexport function findSpanDiffFromChild(\n  diff: ObjectDiff,\n  child: PortableTextChild,\n): ObjectDiff | undefined {\n  // Find span in original diff which has a string segment similar to the one from the input\n  const candidate =\n    diff.fields.children &&\n    diff.fields.children.action !== 'unchanged' &&\n    diff.fields.children.type === 'array' &&\n    diff.fields.children.items.find(\n      (item: any) =>\n        item.diff &&\n        item.diff.type === 'object' &&\n        (item.diff.action === 'removed'\n          ? item.diff.fromValue && item.diff.fromValue._key === child._key\n          : (item.diff.toValue && item.diff.toValue._key) === child._key),\n    )\n  if (candidate) {\n    return candidate.diff as ObjectDiff\n  }\n  return undefined\n}\n\nexport function findAnnotationDiff(diff: ObjectDiff, markDefKey: string): ObjectDiff | undefined {\n  return (\n    ((diff.fields.markDefs &&\n      diff.fields.markDefs.isChanged &&\n      diff.fields.markDefs.type === 'array' &&\n      diff.fields.markDefs.items.find(\n        (item: any) =>\n          item.diff &&\n          item.diff.type === 'object' &&\n          ((item.diff.toValue && item.diff.toValue._key && item.diff.toValue._key === markDefKey) ||\n            (item.diff.fromValue &&\n              item.diff.fromValue._key &&\n              item.diff.fromValue._key === markDefKey)),\n      )?.diff) as ObjectDiff) || undefined\n  )\n}\n\nexport function isEmptyObject(object: PortableTextChild): boolean {\n  return (object && isEqual(Object.keys(object), ['_key', '_type'])) || false\n}\n\nexport function escapeRegExp(text: string): string {\n  return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n}\n\nexport function getAllMarkDefs(diff: ObjectDiff): PortableTextChild[] {\n  const allDefs: PortableTextChild[] = [\n    ...(diff.toValue && diff.toValue.markDefs ? diff.toValue.markDefs : []),\n  ]\n  const oldDefs: PortableTextChild[] =\n    diff.fromValue && diff.fromValue.markDefs ? diff.fromValue.markDefs : []\n  oldDefs.forEach((oDef) => {\n    if (!allDefs.some((def) => oDef._key === def._key)) {\n      allDefs.push(oDef)\n    }\n  })\n  return orderBy(allDefs, ['_key'], ['asc'])\n}\n","/**\n * Gets the human-friendly printable type name for the given value, for instance it will yield\n * `array` instead of `object`, as the native `typeof` operator would do. Can be extended to\n * account for other types, such as React components, fragments, elements etc, and should thus\n * not be counted as \"exhaustive\", as the list is both dynamic and will grow over time.\n *\n * @param value - The value to get the type name for\n * @returns A \"human friendly\" type name\n * @internal\n */\nexport function getPrintableType(value: unknown): string {\n  const nativeType = typeof value\n\n  if (nativeType === 'object') {\n    if (value === null) return 'null'\n    if (Array.isArray(value)) return 'array'\n    if (value instanceof Object && value.constructor.name !== 'Object') {\n      return value.constructor.name\n    }\n  }\n\n  return nativeType\n}\n","import {type ObjectSchemaType, type SchemaType} from '@sanity/types'\n\nimport {type StudioLocaleResourceKeys} from '../../i18n'\nimport {getPrintableType} from '../../util/getPrintableType'\n\n/** @internal */\nexport interface FieldValueError {\n  /**\n   * i18n key for the error message\n   */\n  messageKey: StudioLocaleResourceKeys\n\n  /**\n   * The expected type of the value\n   */\n  expectedType: string\n\n  /**\n   * The actual type of the value\n   */\n  actualType: string\n\n  /**\n   * The actual value of the field\n   */\n  value: unknown\n}\n\n/** @internal */\nexport function getValueError(value: unknown, schemaType: SchemaType): FieldValueError | undefined {\n  const {jsonType} = schemaType\n  const valueType = Array.isArray(value) ? 'array' : typeof value\n\n  if (value === null || valueType === 'undefined') {\n    return undefined\n  }\n\n  if (valueType !== jsonType) {\n    return {\n      messageKey: 'changes.error.incorrect-type-message',\n      value,\n      expectedType: jsonType,\n      actualType: getPrintableType(value),\n    }\n  }\n\n  if (isObjectType(schemaType) && isObjectValue(value)) {\n    for (const field of schemaType.fields) {\n      const fieldError = getValueError(value[field.name], field.type as SchemaType)\n      if (fieldError) {\n        return fieldError\n      }\n    }\n  }\n\n  return undefined\n}\n\nfunction isObjectType(schemaType: SchemaType): schemaType is ObjectSchemaType {\n  return schemaType.jsonType === 'object'\n}\n\nfunction isObjectValue(value: unknown): value is Record<string, unknown> {\n  return value !== null && !Array.isArray(value) && typeof value === 'object'\n}\n","import {\n  type ChangeNode,\n  type Diff,\n  type FieldChangeNode,\n  type GroupChangeNode,\n  type ItemDiff,\n} from '../types'\n\n/** @internal */\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport function noop(): void {}\n\n/** @internal */\nexport function isFieldChange(change: ChangeNode): change is FieldChangeNode {\n  return change.type === 'field'\n}\n\n/** @internal */\nexport function isGroupChange(change: ChangeNode): change is GroupChangeNode {\n  return change.type === 'group'\n}\n\n/** @internal */\nexport function isAddedItemDiff(\n  item: ItemDiff,\n): item is ItemDiff & {diff: Diff & {action: 'added'}} {\n  return item.diff.action === 'added'\n}\n\n/** @internal */\nexport function isRemovedItemDiff(\n  item: ItemDiff,\n): item is ItemDiff & {diff: Diff & {action: 'removed'}} {\n  return item.diff.action === 'removed'\n}\n\n/** @internal */\nexport function isUnchangedDiff(diff: Diff): diff is Diff & {action: 'unchanged'} {\n  return diff.action === 'unchanged'\n}\n","import {type DiffComponentResolver} from './types'\n\n// import diffResolvers from 'all:part:@sanity/base/diff-resolver'\nexport const diffResolvers: DiffComponentResolver[] = []\n","import {type UserColor} from '../../../../user-color'\nimport {type FieldPreviewComponent} from '../../../preview'\n\ntype BooleanProps = {\n  checked: boolean | undefined | null\n  color?: UserColor\n}\n\nexport const BooleanPreview: FieldPreviewComponent<boolean> = function BooleanPreview({\n  value,\n  schemaType,\n  color,\n}) {\n  const Preview = schemaType.options?.layout === 'checkbox' ? Checkbox : Switch\n  return <Preview checked={value} color={color} />\n}\n\nexport function Checkbox({checked, color}: BooleanProps) {\n  return (\n    <svg\n      width=\"17\"\n      height=\"17\"\n      viewBox=\"0 0 17 17\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      fill={color?.background}\n    >\n      <rect x=\"0\" y=\"0\" width=\"17\" height=\"17\" rx=\"2.5\" />\n      {typeof checked === 'undefined' && (\n        <path d=\"M4.07996 8.5H12.92\" stroke={color?.text} strokeWidth=\"2\" />\n      )}\n      {checked && <path d=\"M3.5 8L7 11.5L13.5 5\" stroke={color?.text} strokeWidth=\"2\" />}\n    </svg>\n  )\n}\n\nexport function Switch({checked, color}: BooleanProps) {\n  return (\n    <svg width=\"38\" height=\"22\" viewBox=\"0 0 38 22\" xmlns=\"http://www.w3.org/2000/svg\">\n      <rect width=\"38\" height=\"22\" rx=\"11\" fill={checked ? color?.border : color?.background} />\n      {typeof checked === 'undefined' && (\n        <rect x=\"11\" y=\"3\" width=\"16\" height=\"16\" rx=\"8\" fill=\"white\" />\n      )}\n      {checked && <rect x=\"18\" y=\"3\" width=\"16\" height=\"16\" rx=\"8\" fill=\"white\" />}\n      {typeof checked === 'boolean' && !checked && (\n        <rect x=\"4\" y=\"3\" width=\"16\" height=\"16\" rx=\"8\" fill=\"white\" />\n      )}\n    </svg>\n  )\n}\n","import {Box, Flex, Text} from '@sanity/ui'\n\nimport {DiffTooltip, FromToArrow, useDiffAnnotationColor, useDocumentChange} from '../../../diff'\nimport {type BooleanDiff, type DiffComponent} from '../../../types'\nimport {Checkbox, Switch} from '../preview'\n\nexport const BooleanFieldDiff: DiffComponent<BooleanDiff> = ({diff, schemaType}) => {\n  const {fromValue, toValue} = diff\n  const {title, options} = schemaType\n  const Preview = options?.layout === 'checkbox' ? Checkbox : Switch\n  const userColor = useDiffAnnotationColor(diff, [])\n  const {showFromValue} = useDocumentChange()\n  const showToValue = toValue !== undefined && toValue !== null\n\n  return (\n    <Flex align=\"center\">\n      <DiffTooltip diff={diff}>\n        <Flex align=\"center\">\n          {showFromValue && <Preview checked={fromValue} color={userColor} />}\n\n          {showToValue && (\n            <>\n              {showFromValue && (\n                <Box marginX={2}>\n                  <FromToArrow />\n                </Box>\n              )}\n              <Preview checked={toValue} color={userColor} />\n            </>\n          )}\n        </Flex>\n      </DiffTooltip>\n\n      {showToValue && title && (\n        <Box marginLeft={2}>\n          <Text size={1} weight=\"medium\">\n            {title}\n          </Text>\n        </Box>\n      )}\n    </Flex>\n  )\n}\n","import {type StringSchemaType} from '@sanity/types'\nimport {Box} from '@sanity/ui'\nimport * as legacyDateFormat from '@sanity/util/legacyDateFormat'\nimport {styled} from 'styled-components'\n\nimport {type FieldPreviewComponent} from '../../../preview'\n\nconst DatetimeWrapper = styled.div`\n  display: inline-block;\n  word-wrap: break-word;\n`\n\nexport const DatetimePreview: FieldPreviewComponent<string> = function DatetimePreview({\n  value,\n  schemaType,\n}) {\n  return (\n    <Box as={DatetimeWrapper} paddingX={2} paddingY={1}>\n      {formatDateTime(value, schemaType)}\n    </Box>\n  )\n}\n\nfunction formatDateTime(value: string, schemaType: StringSchemaType): string {\n  const {options, name} = schemaType\n  const dateFormat = options?.dateFormat || legacyDateFormat.DEFAULT_DATE_FORMAT\n  const timeFormat = options?.timeFormat || legacyDateFormat.DEFAULT_TIME_FORMAT\n\n  return legacyDateFormat.format(\n    new Date(value),\n    name === 'date' ? dateFormat : `${dateFormat} ${timeFormat}`,\n  )\n}\n","import {DiffFromTo} from '../../../diff'\nimport {type DiffComponent, type StringDiff} from '../../../types'\nimport {DatetimePreview} from '../preview'\n\nexport const DatetimeFieldDiff: DiffComponent<StringDiff> = ({diff, schemaType}) => {\n  return (\n    <DiffFromTo\n      align=\"center\"\n      diff={diff}\n      layout=\"grid\"\n      previewComponent={DatetimePreview}\n      schemaType={schemaType}\n    />\n  )\n}\n","import {useContext} from 'react'\nimport {DocumentChangeContext} from 'sanity/_singletons'\n\nimport {type DocumentChangeContextInstance} from '../contexts/DocumentChangeContext'\n\n/** @internal */\nexport function useDocumentChange(): DocumentChangeContextInstance {\n  const documentChange = useContext(DocumentChangeContext)\n\n  if (!documentChange) {\n    throw new Error('DocumentChange: missing context value')\n  }\n\n  return documentChange\n}\n","import {useEffect, useState} from 'react'\n\nimport {useClient} from '../../../hooks'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../../studioClient'\n\nexport function useRefValue<T extends Record<string, any> = Record<string, any>>(\n  refId: string | undefined | null,\n): T | undefined {\n  const [value, setValue] = useState<T | undefined>(undefined)\n  const client = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n\n  useEffect(() => {\n    if (!refId) {\n      return undefined\n    }\n\n    const subscription = client.observable.getDocument<T>(refId).subscribe(setValue)\n\n    return () => {\n      subscription.unsubscribe()\n    }\n  }, [client, refId])\n\n  // Always return undefined in the case of a falsey ref to prevent bug\n  // when going from an ID to an undefined state\n  return refId ? value : undefined\n}\n","import {type UnitFormatter} from '../../../../hooks'\n\n/**\n * Calculates the size difference between two numbers, in percent\n *\n * @param prev - Previous size\n * @param next - Next size\n * @returns The size difference in percent\n * @internal\n */\nexport function getSizeDiff(prev: number | undefined, next: number | undefined): number {\n  if (!prev || !next) {\n    return 0\n  }\n\n  const increase = next - prev\n  const pct = Math.round((increase / prev) * 100)\n\n  return pct\n}\n\n/**\n * Get a \"human friendly\" representation of a number of bytes, using base10 units\n *\n * @param bytes - Number of bytes\n * @param format - The unit formatter to use (from `useUnitFormatter`)\n * @returns A human friendly representation of the number of bytes\n * @internal\n */\nexport function getHumanFriendlyBytes(bytes: number, format: UnitFormatter): string {\n  if (bytes < 1000) {\n    return format(bytes, 'byte')\n  }\n\n  if (bytes < 1000 * 1000) {\n    return format(bytes / 1000, 'kilobyte')\n  }\n\n  if (bytes < 1000 * 1000 * 1000) {\n    return format(bytes / (1000 * 1000), 'megabyte')\n  }\n\n  if (bytes < 1000 * 1000 * 1000 * 1000) {\n    return format(bytes / (1000 * 1000 * 1000), 'gigabyte')\n  }\n\n  return format(bytes / (1000 * 1000 * 1000 * 1000), 'terabyte')\n}\n","import {DocumentIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Text} from '@sanity/ui'\nimport {useMemo} from 'react'\nimport {styled} from 'styled-components'\n\nimport {useUnitFormatter} from '../../../../hooks'\nimport {useTranslation} from '../../../../i18n'\nimport {ChangeList, DiffCard, DiffTooltip, FromTo, MetaInfo} from '../../../diff'\nimport {useRefValue} from '../../../diff/hooks'\nimport {type DiffComponent, type ObjectDiff} from '../../../types'\nimport {getHumanFriendlyBytes, getSizeDiff} from './helpers'\nimport {type File, type FileAsset} from './types'\n\nconst SizeDiff = styled.div`\n  ${({theme}) => `\n    --size-diff-positive: ${theme.sanity.color.solid.positive.enabled.bg};\n    --size-diff-negative: ${theme.sanity.color.solid.critical.enabled.bg};\n  `}\n  &:not([hidden]) {\n    display: inline-block;\n  }\n\n  [data-number='positive'] {\n    color: var(--size-diff-positive);\n  }\n\n  [data-number='negative'] {\n    color: var(--size-diff-negative);\n  }\n`\n\nexport const FileFieldDiff: DiffComponent<ObjectDiff<File>> = ({diff, schemaType}) => {\n  const {fromValue, toValue, fields} = diff\n  const fromAsset = fromValue?.asset\n  const toAsset = toValue?.asset\n  const {t} = useTranslation()\n  const prev = useRefValue<FileAsset>(fromAsset?._ref)\n  const next = useRefValue<FileAsset>(toAsset?._ref)\n  const formatUnit = useUnitFormatter({unitDisplay: 'short', maximumFractionDigits: 2})\n  const ignoredFields = ['_type', 'media']\n  const changedFields = Object.entries(fields)\n    .filter(([name, field]) => field.isChanged && !ignoredFields.includes(name))\n    .map(([name]) => name)\n\n  const didAssetChange = changedFields.includes('asset')\n\n  const nestedFields = schemaType.fields\n    .filter((field) => field.name !== 'asset' && changedFields.includes(field.name))\n    .map((field) => field.name)\n\n  const pctDiff = getSizeDiff(prev?.size, next?.size)\n  const prevSize = prev?.size && getHumanFriendlyBytes(prev.size, formatUnit)\n  const nextSize = next?.size && getHumanFriendlyBytes(next.size, formatUnit)\n\n  const cardStyles = useMemo(() => ({display: 'block', flex: 1}), [])\n\n  const from = prev && (\n    <DiffCard as=\"del\" diff={diff} path=\"asset._ref\" style={cardStyles}>\n      <MetaInfo\n        title={prev.originalFilename || t('changes.file.meta-info-fallback-title')}\n        icon={DocumentIcon}\n      >\n        <Text size={0} style={{color: 'inherit'}}>\n          {prevSize}\n        </Text>\n      </MetaInfo>\n    </DiffCard>\n  )\n\n  const to = next && (\n    <DiffCard as=\"ins\" diff={diff} path=\"asset._ref\" style={cardStyles}>\n      <MetaInfo\n        title={next.originalFilename || t('changes.file.meta-info-fallback-title')}\n        icon={DocumentIcon}\n      >\n        <Flex align=\"center\">\n          <Text size={0} style={{color: 'inherit'}}>\n            {nextSize}\n          </Text>\n          {pctDiff !== 0 && (\n            <Card radius={2} padding={1} as={SizeDiff} marginLeft={2}>\n              <Text size={0} data-number={pctDiff > 0 ? 'positive' : 'negative'}>\n                {pctDiff > 0 ? '+' : '-'}\n                {pctDiff}%\n              </Text>\n            </Card>\n          )}\n        </Flex>\n      </MetaInfo>\n    </DiffCard>\n  )\n\n  const FileAssetChange = (\n    <>\n      {/* Removed only */}\n      {from && !to && (\n        <DiffTooltip diff={diff} path=\"asset._ref\" description={t('changes.removed-label')}>\n          {from}\n        </DiffTooltip>\n      )}\n\n      {/* Removed and added */}\n      {from && to && (\n        <DiffTooltip diff={diff} path=\"asset._ref\">\n          <FromTo from={from} layout=\"grid\" to={to} />\n        </DiffTooltip>\n      )}\n\n      {/* Added only */}\n      {!from && to && (\n        <DiffTooltip diff={diff} path=\"asset._ref\" description={t('changes.added-label')}>\n          {to}\n        </DiffTooltip>\n      )}\n    </>\n  )\n\n  return (\n    <>\n      {didAssetChange && FileAssetChange}\n      {nestedFields.length > 0 && (\n        <Box marginTop={didAssetChange ? 4 : 3}>\n          <ChangeList diff={diff} schemaType={schemaType} fields={nestedFields} />\n        </Box>\n      )}\n    </>\n  )\n}\n","// @todo: use `polished` for this?\nexport function hexToRgba(hex: string, opacity: number): string {\n  const rgba = (/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex) || ([] as string[]))\n    .slice(1)\n    .map((num) => parseInt(num, 16))\n    .concat(opacity)\n  return `rgba(${rgba.join(', ')})`\n}\n\n// @todo: replace this\nexport function simpleHash(str: string): string {\n  let hash = 0\n\n  if (str.length == 0) {\n    return hash.toString()\n  }\n\n  for (let i = 0; i < str.length; i++) {\n    const char = str.charCodeAt(i)\n\n    // eslint-disable-next-line no-bitwise\n    hash = (hash << 5) - hash + char\n\n    // eslint-disable-next-line no-bitwise\n    hash &= hash // Convert to 32bit integer\n  }\n\n  return hash.toString()\n}\n\nexport function getDeviceDpr(): number {\n  const base = Math.ceil(window.devicePixelRatio || 1)\n  return Math.min(3, Math.max(1, base))\n}\n","import {type Image, type ImageCrop, type ImageHotspot} from '@sanity/types'\nimport {type SVGProps} from 'react'\n\nimport {useTranslation} from '../../../../i18n'\nimport {DiffTooltip, useDiffAnnotationColor} from '../../../diff'\nimport {type ObjectDiff} from '../../../types'\nimport {hexToRgba} from './helpers'\n\ninterface HotspotCropSVGProps {\n  crop?: ImageCrop\n  diff: ObjectDiff<Image>\n  hash: string\n  hotspot?: ImageHotspot\n  width?: number\n  height?: number\n}\n\nexport function HotspotCropSVG(\n  props: HotspotCropSVGProps & Omit<SVGProps<SVGElement>, 'ref' | 'width' | 'height'>,\n) {\n  const {crop, diff, hash, hotspot, width = 100, height = 100, ...restProps} = props\n  const {t} = useTranslation()\n  const cropColor = useDiffAnnotationColor(diff, 'crop')\n  const hotspotColor = useDiffAnnotationColor(diff, 'hotspot')\n\n  return (\n    <svg\n      {...restProps}\n      fill=\"none\"\n      width={width}\n      height={height}\n      viewBox={`0 0 ${width} ${height}`}\n    >\n      <defs>\n        {crop && hotspot && (\n          <mask id={`mask-hotspot-${hash}`}>\n            <rect x={0} y={0} width={width} height={height} fill=\"#fff\" />\n            <HotspotSVG\n              hotspot={hotspot}\n              fill=\"#000\"\n              offset={1}\n              width={width}\n              height={height}\n              stroke=\"#000\"\n              strokeWidth={3}\n            />\n          </mask>\n        )}\n      </defs>\n\n      {crop && (\n        <DiffTooltip diff={diff} path=\"crop\" description={t('changes.image.crop-changed')}>\n          <g>\n            <CropSVG\n              crop={crop}\n              fill={hexToRgba(cropColor.border, 0.25)}\n              mask={hotspot ? `url(#mask-hotspot-${hash})` : undefined}\n              stroke={cropColor.border}\n              strokeWidth={1}\n              width={width}\n              height={height}\n            />\n          </g>\n        </DiffTooltip>\n      )}\n\n      {hotspot && (\n        <DiffTooltip diff={diff} path=\"hotspot\" description={t('changes.image.crop-changed')}>\n          <g>\n            <HotspotSVG\n              hotspot={hotspot}\n              fill={hexToRgba(hotspotColor.border, 0.25)}\n              stroke={hotspotColor.border}\n              strokeWidth={1}\n              width={width}\n              height={height}\n            />\n          </g>\n        </DiffTooltip>\n      )}\n    </svg>\n  )\n}\n\nfunction CropSVG({\n  crop,\n  width,\n  height,\n  ...restProps\n}: {crop: ImageCrop; width: number; height: number} & Omit<\n  SVGProps<SVGRectElement>,\n  'width' | 'height'\n>) {\n  const rectProps = {\n    x: crop.left * width,\n    y: crop.top * height,\n    width: (1 - crop.right - crop.left) * width,\n    height: (1 - crop.bottom - crop.top) * height,\n  }\n\n  return <rect {...restProps} {...rectProps} style={{vectorEffect: 'non-scaling-stroke'}} />\n}\n\nfunction HotspotSVG({\n  hotspot,\n  offset = 0,\n  width,\n  height,\n  ...restProps\n}: {hotspot: ImageHotspot; offset?: number; width: number; height: number} & Omit<\n  SVGProps<SVGEllipseElement>,\n  'width' | 'height'\n>) {\n  const ellipseProps = {\n    cx: hotspot.x * width,\n    cy: hotspot.y * height,\n    rx: (hotspot.width / 2) * width + offset,\n    ry: (hotspot.height / 2) * height + offset,\n  }\n\n  return <ellipse {...restProps} {...ellipseProps} style={{vectorEffect: 'non-scaling-stroke'}} />\n}\n","import {getImageDimensions, isDefaultCrop, isDefaultHotspot} from '@sanity/asset-utils'\nimport {hues} from '@sanity/color'\nimport {ImageIcon} from '@sanity/icons'\nimport imageUrlBuilder from '@sanity/image-url'\nimport {Box, Card, Flex, Text} from '@sanity/ui'\nimport {type SyntheticEvent, useMemo, useState} from 'react'\nimport {styled} from 'styled-components'\n\nimport {useClient} from '../../../../hooks'\nimport {useTranslation} from '../../../../i18n'\nimport {useDocumentValues} from '../../../../store'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../../../studioClient'\nimport {MetaInfo} from '../../../diff'\nimport {getDeviceDpr, simpleHash} from './helpers'\nimport {HotspotCropSVG} from './HotspotCropSVG'\nimport {type ImagePreviewProps, type MinimalAsset} from './types'\n\nconst ASSET_FIELDS = ['originalFilename']\n\n// To trigger error state, change `src` attribute to random string (\"foo\")\n// To trigger slow loading, use a throttling proxy (charles) or browser devtools\n\n// To trigger deleted state, set `id` to valid, non-existant image asset ID,\n// eg: 'image-1217bc35db5030739b7be571c79d3c401551911d-300x200-png'\n\nexport const NoImagePreview = () => {\n  const {t} = useTranslation()\n  return (\n    <Card flex={1} tone=\"transparent\" padding={4} radius={2} height=\"stretch\">\n      <Flex align=\"center\" justify=\"center\" height=\"fill\">\n        <Text size={1} muted>\n          {t('changes.image.no-image-placeholder')}\n        </Text>\n      </Flex>\n    </Card>\n  )\n}\n\nconst ImageWrapper = styled.div`\n  height: 100%;\n  max-height: 190px;\n  position: relative;\n\n  /* Ideally the checkerboard component currently in the form builder should be made available and used here */\n  background-color: ${hues.gray[100].hex};\n  background-image:\n    linear-gradient(45deg, ${hues.gray[50].hex} 25%, transparent 25%),\n    linear-gradient(-45deg, ${hues.gray[50].hex} 25%, transparent 25%),\n    linear-gradient(45deg, transparent 75%, ${hues.gray[50].hex} 75%),\n    linear-gradient(-45deg, transparent 75%, ${hues.gray[50].hex} 75%);\n  background-size: 16px 16px;\n  background-position:\n    0 0,\n    0 8px,\n    8px -8px,\n    -8px 0;\n\n  &::after {\n    content: '';\n    display: block;\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    box-shadow: inset 0 0 0 1px var(--card-border-color);\n    pointer-events: none;\n  }\n\n  &[data-changed] {\n    opacity: 0.45;\n  }\n`\n\nconst Image = styled.img`\n  display: block;\n  flex: 1;\n  min-height: 0;\n  object-fit: contain;\n  width: 100%;\n  height: 100%;\n\n  &[data-action='removed'] {\n    opacity: 0.45;\n  }\n`\n\nconst HotspotDiff = styled.div`\n  svg {\n    display: block;\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n  }\n`\n\nexport function ImagePreview(props: ImagePreviewProps): React.JSX.Element {\n  const {id, action, diff, hotspot, crop, is} = props\n  const {t} = useTranslation()\n  const client = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n  const [imageError, setImageError] = useState<SyntheticEvent<HTMLImageElement, Event>>()\n  const {value: asset} = useDocumentValues<MinimalAsset>(id, ASSET_FIELDS)\n  const dimensions = getImageDimensions(id)\n  const imageBuilder = useMemo(() => imageUrlBuilder(client), [client])\n\n  // undefined = still loading, null = its gone\n  const assetIsDeleted = asset === null\n\n  const title = asset && asset.originalFilename\n  const imageSource = imageBuilder\n    .image(id)\n    .height(190) // Should match container max-height\n    .dpr(getDeviceDpr())\n    .fit('max')\n\n  const assetChanged = diff.fromValue?.asset?._ref !== diff.toValue?.asset?._ref\n\n  let printAction\n  if (action && action !== 'changed') {\n    printAction = t(action === 'added' ? 'changes.added-label' : 'changes.removed-label')\n  }\n\n  const metaAction = action === 'changed' ? undefined : action\n\n  return (\n    <Flex direction=\"column\" height=\"fill\" flex={1}>\n      <Box flex={1} padding={2} paddingBottom={0}>\n        <Flex\n          as={ImageWrapper}\n          direction=\"column\"\n          data-changed={is === 'from' && assetChanged ? '' : undefined}\n          data-error={imageError ? '' : undefined}\n        >\n          {!assetIsDeleted && !imageError && (\n            <Image\n              src={imageSource.toString() || ''}\n              alt={title}\n              data-action={metaAction}\n              onError={setImageError}\n              width={dimensions.width}\n              height={dimensions.height}\n            />\n          )}\n\n          {(assetIsDeleted || imageError) && (\n            <Box paddingY={5}>\n              <Text size={1} muted align=\"center\">\n                {t(assetIsDeleted ? 'changes.image.deleted' : 'changes.image.error-loading-image')}\n              </Text>\n            </Box>\n          )}\n\n          <HotspotDiff>\n            <HotspotCropSVG\n              crop={crop && !isDefaultCrop(crop) ? crop : undefined}\n              diff={diff}\n              hash={simpleHash(`${imageSource.toString() || ''}-${is}`)}\n              hotspot={hotspot && !isDefaultHotspot(hotspot) ? hotspot : undefined}\n              width={dimensions.width}\n              height={dimensions.height}\n            />\n          </HotspotDiff>\n        </Flex>\n      </Box>\n\n      <MetaInfo\n        title={title || t('changes.image.meta-info-fallback-title')}\n        icon={ImageIcon}\n        markRemoved={assetChanged && is === 'from'}\n      >\n        {printAction ? (\n          <div>{printAction}</div>\n        ) : (\n          <div>\n            {dimensions.width} × {dimensions.height}\n          </div>\n        )}\n      </MetaInfo>\n    </Flex>\n  )\n}\n","import {type Image} from '@sanity/types'\nimport {Box, Card, Text} from '@sanity/ui'\n\nimport {type TFunction, useTranslation} from '../../../../i18n'\nimport {\n  ChangeList,\n  DiffCard,\n  DiffTooltip,\n  getAnnotationAtPath,\n  useDocumentChange,\n} from '../../../diff'\nimport {FromTo} from '../../../diff/components'\nimport {type DiffComponent, type ObjectDiff} from '../../../types'\nimport {ImagePreview, NoImagePreview} from './ImagePreview'\n\nconst IMAGE_META_FIELDS = ['crop', 'hotspot']\nconst BASE_IMAGE_FIELDS = ['asset', 'media', ...IMAGE_META_FIELDS]\n\nconst CARD_STYLES = {\n  flex: 1,\n}\n\nexport const ImageFieldDiff: DiffComponent<ObjectDiff<Image>> = ({diff, schemaType}) => {\n  const {t} = useTranslation()\n  const {showFromValue} = useDocumentChange()\n  const {fromValue, toValue, fields, isChanged} = diff\n  const fromRef = fromValue?.asset?._ref\n  const toRef = toValue?.asset?._ref\n  const assetAnnotation = getAnnotationAtPath(diff, ['asset', '_ref'])\n\n  // Get all the changed fields within this image field\n  const changedFields = Object.keys(fields).filter(\n    (name) => fields[name].isChanged && name !== '_type',\n  )\n\n  const nestedFields = schemaType.fields\n    .filter(\n      (field) => !BASE_IMAGE_FIELDS.includes(field.name) && changedFields.includes(field.name),\n    )\n    .map((field) => field.name)\n\n  let assetAction: 'changed' | 'added' | 'removed' = 'changed'\n  if (!fromRef && toRef) {\n    assetAction = 'added'\n  } else if (!toRef && fromRef) {\n    assetAction = 'removed'\n  }\n\n  const didAssetChange = changedFields.includes('asset')\n  const didCropChange = changedFields.includes('crop')\n  const didHotspotChange = changedFields.includes('hotspot')\n  const didMetaChange = didCropChange || didHotspotChange\n  const showImageDiff = didAssetChange || didMetaChange\n  const showMetaChange = didMetaChange && !didAssetChange\n\n  const from =\n    fromValue && fromRef ? (\n      <DiffCard annotation={assetAnnotation} style={CARD_STYLES}>\n        <ImagePreview\n          is=\"from\"\n          id={fromRef}\n          diff={diff}\n          action={assetAction}\n          hotspot={showMetaChange && didHotspotChange ? fromValue.hotspot : undefined}\n          crop={showMetaChange && didCropChange ? fromValue.crop : undefined}\n        />\n      </DiffCard>\n    ) : (\n      <NoImagePreview />\n    )\n\n  const to =\n    toValue && toRef ? (\n      <DiffCard annotation={assetAnnotation} style={CARD_STYLES}>\n        <ImagePreview\n          is=\"to\"\n          id={toRef}\n          diff={diff}\n          hotspot={showMetaChange && didHotspotChange ? toValue.hotspot : undefined}\n          crop={showMetaChange && didCropChange ? toValue.crop : undefined}\n        />\n      </DiffCard>\n    ) : (\n      <NoImagePreview />\n    )\n\n  if (!from && !to) {\n    return (\n      <Card padding={4} radius={2} tone=\"transparent\">\n        <Text muted size={1} align=\"center\">\n          {t('changes.image.no-asset-set')}\n        </Text>\n      </Card>\n    )\n  }\n\n  if (!isChanged) {\n    return toRef ? (\n      <DiffCard annotation={assetAnnotation} style={CARD_STYLES}>\n        <ImagePreview id={toRef} is=\"to\" diff={diff} />\n      </DiffCard>\n    ) : null\n  }\n\n  const imageDiff = (\n    <FromTo align=\"center\" from={showFromValue ? from : undefined} layout=\"grid\" to={to} />\n  )\n\n  return (\n    <>\n      {showImageDiff &&\n        (didAssetChange ? (\n          <DiffTooltip\n            annotations={assetAnnotation ? [assetAnnotation] : []}\n            description={getChangeDescription(assetAction, t)}\n          >\n            {imageDiff}\n          </DiffTooltip>\n        ) : (\n          imageDiff\n        ))}\n      {nestedFields.length > 0 && (\n        <Box marginTop={showImageDiff ? 4 : 3}>\n          <ChangeList diff={diff} schemaType={schemaType} fields={nestedFields} />\n        </Box>\n      )}\n    </>\n  )\n}\n\nfunction getChangeDescription(action: 'changed' | 'added' | 'removed', t: TFunction): string {\n  switch (action) {\n    case 'changed':\n      return t('changes.changed-label')\n    case 'added':\n      return t('changes.added-label')\n    case 'removed':\n      return t('changes.removed-label')\n    default:\n      // Should never happen, but for linters' sake\n      return 'Unknown change'\n  }\n}\n","import {Box} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {type FieldPreviewComponent} from '../../../preview'\n\nconst NumberWrapper = styled.div`\n  display: inline-block;\n  word-break: break-all;\n`\n\nexport const NumberPreview: FieldPreviewComponent<string> = (props) => {\n  const {value} = props\n\n  return (\n    <Box as={NumberWrapper} paddingX={2} paddingY={1}>\n      {value}\n    </Box>\n  )\n}\n","import {DiffFromTo} from '../../../diff'\nimport {type DiffComponent, type NumberDiff} from '../../../types'\nimport {NumberPreview} from '../preview/NumberPreview'\n\nexport const NumberFieldDiff: DiffComponent<NumberDiff> = ({diff, schemaType}) => {\n  return (\n    <DiffFromTo\n      diff={diff}\n      schemaType={schemaType}\n      previewComponent={NumberPreview}\n      layout=\"inline\"\n    />\n  )\n}\n","import {Box, Text} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const InlineBox = styled(Box)`\n  &:not([hidden]) {\n    display: inline;\n    align-items: center;\n\n    &[data-changed] {\n      cursor: pointer;\n    }\n  }\n`\n\nexport const InlineText = styled(Text)`\n  &:not([hidden]) {\n    display: inline;\n    color: inherit;\n  }\n`\n\nexport const PreviewContainer = styled(Box)`\n  &:not([hidden]) {\n    display: inline-flex;\n    align-items: center;\n\n    ${InlineBox} [data-ui=\"Text\"] {\n      opacity: 0.5;\n    }\n  }\n`\n\nexport const PopoverContainer = styled(Box)`\n  min-width: 160px;\n  max-height: 40vh;\n  overflow-y: auto;\n`\n","import {ChevronDownIcon} from '@sanity/icons'\nimport {isKeySegment, type ObjectSchemaType, type Path, type PortableTextChild} from '@sanity/types'\nimport {Flex, Text, useClickOutsideEvent} from '@sanity/ui'\nimport {toString} from '@sanity/util/paths'\nimport {\n  type MouseEvent,\n  type ReactNode,\n  useCallback,\n  useContext,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from 'react'\nimport {ConnectorContext, DiffContext} from 'sanity/_singletons'\nimport {styled} from 'styled-components'\n\nimport {Popover} from '../../../../../../ui-components'\nimport {useChangeIndicatorsReportedValues} from '../../../../../changeIndicators'\nimport {useTranslation} from '../../../../../i18n'\nimport {ChangeList, DiffTooltip, useDiffAnnotationColor} from '../../../../diff'\nimport {type ObjectDiff} from '../../../../types'\nimport {isEmptyObject} from '../helpers'\nimport {InlineBox, InlineText, PopoverContainer, PreviewContainer} from './styledComponents'\n\ninterface AnnotationProps {\n  diff?: ObjectDiff\n  object: PortableTextChild\n  schemaType?: ObjectSchemaType\n  path: Path\n  children: ReactNode\n}\n\nconst AnnotationWrapper = styled.div`\n  text-decoration: none;\n  display: inline;\n  position: relative;\n  border: 0;\n  padding: 0;\n  border-bottom: 2px dotted currentColor;\n  box-shadow: inset 0 0 0 1px var(--card-border-color);\n  white-space: nowrap;\n  align-items: center;\n  background-color: color(var(--card-fg-color) a(10%));\n\n  &[data-changed] {\n    cursor: pointer;\n  }\n\n  &[data-removed] {\n    text-decoration: line-through;\n  }\n\n  &:hover ${PreviewContainer} {\n    opacity: 1;\n  }\n`\n\nexport function Annotation({\n  children,\n  diff,\n  object,\n  schemaType,\n  path,\n  ...restProps\n}: AnnotationProps) {\n  const {t} = useTranslation()\n  if (!schemaType) {\n    return (\n      <AnnotationWrapper {...restProps}>\n        {t('changes.portable-text.unknown-annotation-schema-type')}\n      </AnnotationWrapper>\n    )\n  }\n  if (diff && diff.action !== 'unchanged') {\n    return (\n      <AnnnotationWithDiff\n        {...restProps}\n        diff={diff}\n        object={object}\n        schemaType={schemaType}\n        path={path}\n      >\n        {children}\n      </AnnnotationWithDiff>\n    )\n  }\n  return <AnnotationWrapper>{children}</AnnotationWrapper>\n}\n\ninterface AnnnotationWithDiffProps {\n  diff: ObjectDiff\n  object: PortableTextChild\n  schemaType: ObjectSchemaType\n  path: Path\n  children?: ReactNode\n}\n\nfunction AnnnotationWithDiff({\n  diff,\n  children,\n  object,\n  schemaType,\n  path,\n  ...restProps\n}: AnnnotationWithDiffProps) {\n  const {onSetFocus} = useContext(ConnectorContext)\n  const {path: fullPath} = useContext(DiffContext)\n  const popoverRef = useRef<HTMLDivElement | null>(null)\n  const {t} = useTranslation()\n  const color = useDiffAnnotationColor(diff, [])\n  const style = useMemo(\n    () => (color ? {background: color.background, color: color.text} : {}),\n    [color],\n  )\n  const isRemoved = diff.action === 'removed'\n  const [open, setOpen] = useState(false)\n  const emptyObject = object && isEmptyObject(object)\n  const markDefPath = useMemo(\n    () => [path[0]].concat(['markDefs', {_key: object._key}]),\n    [object._key, path],\n  )\n  const prefix = useMemo(\n    () =>\n      fullPath.slice(\n        0,\n        fullPath.findIndex((seg) => isKeySegment(seg) && seg._key === object._key),\n      ),\n    [fullPath, object._key],\n  )\n  const annotationPath = useMemo(() => prefix.concat(path), [path, prefix])\n  const myPath = useMemo(() => prefix.concat(markDefPath), [markDefPath, prefix])\n  const myValue = `field-${toString(myPath)}`\n  const values = useChangeIndicatorsReportedValues()\n  const isEditing = useMemo(\n    () => values.filter(([p]) => p.startsWith(myValue)).length > 0,\n    [myValue, values],\n  )\n\n  useEffect(() => {\n    if (!open && isEditing) {\n      setOpen(true)\n      onSetFocus(myPath)\n    }\n  }, [isEditing, myPath, onSetFocus, open])\n\n  const handleOpenPopup = useCallback(\n    (event: MouseEvent<HTMLDivElement, globalThis.MouseEvent>) => {\n      event.stopPropagation()\n      setOpen(true)\n      if (!isRemoved) {\n        event.preventDefault()\n        onSetFocus(annotationPath) // Go to span first\n        setTimeout(() => onSetFocus(myPath), 10) // Open edit object interface\n      }\n    },\n    [annotationPath, isRemoved, myPath, onSetFocus],\n  )\n\n  useClickOutsideEvent(!isEditing && (() => setOpen(false)), () => [popoverRef.current])\n\n  const annotation = (diff.action !== 'unchanged' && diff.annotation) || null\n  const annotations = useMemo(() => (annotation ? [annotation] : []), [annotation])\n\n  const value = useMemo(() => ({path: myPath}), [myPath])\n\n  const popoverContent = (\n    <DiffContext.Provider value={value}>\n      <PopoverContainer padding={3}>\n        <div>\n          {emptyObject && (\n            <Text muted size={1} weight=\"medium\">\n              {t('changes.portable-text.empty-object-annotation', {\n                annotationType: schemaType.title || schemaType.name,\n              })}\n            </Text>\n          )}\n          {!emptyObject && <ChangeList diff={diff} schemaType={schemaType} />}\n        </div>\n      </PopoverContainer>\n    </DiffContext.Provider>\n  )\n\n  return (\n    <AnnotationWrapper\n      {...restProps}\n      onClick={handleOpenPopup}\n      style={style}\n      data-changed=\"\"\n      data-removed={diff.action === 'removed' ? '' : undefined}\n    >\n      <Popover content={popoverContent} open={open} ref={popoverRef} portal>\n        <PreviewContainer paddingLeft={1}>\n          <DiffTooltip\n            annotations={annotations}\n            description={t('changes.portable-text.annotation', {context: diff.action})}\n          >\n            <InlineBox style={{display: 'inline-flex'}}>\n              <span>{children}</span>\n              <Flex align=\"center\" paddingX={1}>\n                <InlineText size={0}>\n                  <ChevronDownIcon />\n                </InlineText>\n              </Flex>\n            </InlineBox>\n          </DiffTooltip>\n        </PreviewContainer>\n      </Popover>\n    </AnnotationWrapper>\n  )\n}\n","import {type ReactNode} from 'react'\nimport {styled} from 'styled-components'\n\nconst Quote = styled.blockquote`\n  margin: 0;\n`\n\nexport function Blockquote({children}: {children: ReactNode}): React.JSX.Element {\n  return (\n    <div>\n      <Quote>{children}</Quote>\n    </div>\n  )\n}\n","import {Heading} from '@sanity/ui'\nimport {type ReactNode} from 'react'\nimport {styled} from 'styled-components'\n\nconst headingSizes: Record<string, number | undefined> = {\n  h1: 2,\n  h2: 1,\n  h3: 0,\n  h4: 0,\n  h5: 0,\n  h6: 0,\n}\n\nconst StyledHeading = styled(Heading)`\n  &:not([hidden]) {\n    display: inline;\n    text-transform: none;\n    margin: 0;\n\n    &::before,\n    &::after {\n      content: unset;\n    }\n  }\n`\n\nexport function Header({style, children}: {style: string; children: ReactNode}): React.JSX.Element {\n  return <StyledHeading size={headingSizes[style]}>{children}</StyledHeading>\n}\n","import {type ReactNode} from 'react'\nimport {styled} from 'styled-components'\n\n// This can contain nested <div> elements, so it's not rendered as a <p> element\nconst StyledParagraph = styled.div`\n  text-transform: none;\n  white-space: wrap;\n  overflow-wrap: break-word;\n  margin: 0;\n`\n\nexport function Paragraph({children}: {children: ReactNode}): React.JSX.Element {\n  return <StyledParagraph>{children}</StyledParagraph>\n}\n","import {type Path, type PortableTextTextBlock} from '@sanity/types'\nimport {Box, Card, Stack, Text} from '@sanity/ui'\nimport {type MouseEvent, useCallback, useContext} from 'react'\nimport {ConnectorContext, DiffContext} from 'sanity/_singletons'\n\nimport {useTranslation} from '../../../../../i18n'\nimport {DiffTooltip, useDiffAnnotationColor} from '../../../../diff'\nimport {isHeader} from '../helpers'\nimport {type PortableTextDiff} from '../types'\nimport {Blockquote} from './Blockquote'\nimport {Header} from './Header'\nimport {Paragraph} from './Paragraph'\n\nconst EMPTY_PATH: Path = []\n\nexport function Block(props: {\n  diff: PortableTextDiff\n  block: PortableTextTextBlock\n  children: React.JSX.Element\n}): React.JSX.Element {\n  const {diff, block, children} = props\n  const color = useDiffAnnotationColor(diff, EMPTY_PATH)\n  const {path: fullPath} = useContext(DiffContext)\n  const {onSetFocus} = useContext(ConnectorContext)\n  const {t} = useTranslation()\n  const isRemoved = diff.action === 'removed'\n  let returned = children\n\n  const handleClick = useCallback(\n    (event: MouseEvent<HTMLDivElement, globalThis.MouseEvent>) => {\n      event.stopPropagation()\n\n      if (!isRemoved) {\n        onSetFocus(fullPath)\n      }\n    },\n    [fullPath, isRemoved, onSetFocus],\n  )\n\n  if (block.style === 'blockquote') {\n    returned = <Blockquote>{returned}</Blockquote>\n  } else if (block.style && isHeader(block)) {\n    returned = <Header style={block.style}>{returned}</Header>\n  } else {\n    returned = <Paragraph>{returned}</Paragraph>\n  }\n\n  let fromStyle: string | undefined\n  // If style was changed, indicate that\n  if (\n    diff.origin.action === 'changed' &&\n    diff.origin.fields.style &&\n    diff.origin.fields.style.action === 'changed' &&\n    diff.origin.fields.style.annotation\n  ) {\n    fromStyle = diff?.origin?.fromValue?.style\n\n    const style = color ? {background: color.background, color: color.text} : {}\n\n    returned = (\n      <Card\n        padding={3}\n        border\n        radius={2}\n        style={{borderStyle: 'dotted'}}\n        diff-block-action={diff.action}\n        data-block-note={`changed_from_style_${fromStyle || 'undefined'}`}\n      >\n        <Stack space={2}>\n          <DiffTooltip\n            annotations={[diff.origin.fields.style?.annotation]}\n            diff={diff.origin.fields.style}\n          >\n            <Text size={0}>\n              {t('changes.portable-text.block-style-changed', {fromStyle, toStyle: block.style})}\n            </Text>\n          </DiffTooltip>\n          <Box style={style}>{returned}</Box>\n        </Stack>\n      </Card>\n    )\n  }\n\n  return (\n    <div\n      onClick={handleClick}\n      data-diff-block-action={diff.action}\n      data-block-note={`changed_from_style_${fromStyle || 'undefined'}`}\n    >\n      {returned}\n    </div>\n  )\n}\n","import {styled} from 'styled-components'\n\nconst DecoratorWrapper = styled.span<{decoration: string}>`\n  display: inline;\n  ${({theme, decoration}) => {\n    switch (decoration) {\n      case 'strong':\n        return 'font-weight: bold;'\n      case 'em':\n        return 'font-style: italic;'\n      case 'underline':\n        return 'text-decoration: underline;'\n      case 'overline':\n        return 'text-decoration: overline;'\n      case 'strike-through':\n        return 'text-decoration: line-through;'\n      case 'code':\n        return `\n          font-family: ${theme.sanity.fonts.code.family};\n          background: ${theme.sanity.color.muted.default.enabled.bg};\n        `\n      default:\n        return ''\n    }\n  }}\n`\n\nexport function Decorator({mark, children}: {mark: string; children: React.JSX.Element}) {\n  return <DecoratorWrapper decoration={mark}>{children}</DecoratorWrapper>\n}\n","import {ChevronDownIcon} from '@sanity/icons'\nimport {\n  isKeySegment,\n  type ObjectSchemaType,\n  type Path,\n  type PortableTextChild,\n  type PortableTextObject,\n} from '@sanity/types'\nimport {Card, Flex, Text, useClickOutsideEvent} from '@sanity/ui'\nimport {FOCUS_TERMINATOR, toString} from '@sanity/util/paths'\nimport {type MouseEvent, useCallback, useContext, useEffect, useMemo, useRef, useState} from 'react'\nimport {ConnectorContext, DiffContext} from 'sanity/_singletons'\nimport {styled} from 'styled-components'\n\nimport {Popover} from '../../../../../../ui-components'\nimport {useChangeIndicatorsReportedValues} from '../../../../../changeIndicators'\nimport {useTranslation} from '../../../../../i18n'\nimport {Preview} from '../../../../../preview/components/Preview'\nimport {ChangeList, DiffTooltip, useDiffAnnotationColor} from '../../../../diff'\nimport {type ObjectDiff} from '../../../../types'\nimport {isEmptyObject} from '../helpers'\nimport {InlineBox, InlineText, PopoverContainer, PreviewContainer} from './styledComponents'\n\ninterface InlineObjectProps {\n  diff?: ObjectDiff\n  object: PortableTextObject\n  path: Path\n  schemaType?: ObjectSchemaType\n}\n\nconst InlineObjectWrapper = styled(Card)`\n  &:not([hidden]) {\n    display: inline;\n    cursor: pointer;\n    white-space: nowrap;\n    align-items: center;\n\n    &[data-removed] {\n      text-decoration: line-through;\n    }\n\n    ${InlineBox} {\n      display: inline-flex;\n    }\n  }\n`\n\nexport function InlineObject({diff, object, schemaType, ...restProps}: InlineObjectProps) {\n  const {t} = useTranslation()\n  if (!schemaType) {\n    return (\n      <InlineObjectWrapper {...restProps} border radius={1}>\n        {t('changes.portable-text.unknown-inline-object-schema-type', {schemaType: object._type})}\n      </InlineObjectWrapper>\n    )\n  }\n\n  if (diff) {\n    return (\n      <InlineObjectWithDiff {...restProps} diff={diff} object={object} schemaType={schemaType} />\n    )\n  }\n\n  return (\n    <InlineObjectWrapper>\n      <Preview schemaType={schemaType} value={object} layout=\"inline\" />\n    </InlineObjectWrapper>\n  )\n}\n\ninterface InlineObjectWithDiffProps {\n  diff: ObjectDiff\n  object: PortableTextChild\n  path: Path\n  schemaType: ObjectSchemaType\n}\n\nfunction InlineObjectWithDiff({\n  diff,\n  object,\n  path,\n  schemaType,\n  ...restProps\n}: InlineObjectWithDiffProps) {\n  const {path: fullPath} = useContext(DiffContext)\n  const {onSetFocus} = useContext(ConnectorContext)\n  const {t} = useTranslation()\n  const color = useDiffAnnotationColor(diff, [])\n  const style = useMemo(\n    () => (color ? {background: color.background, color: color.text} : {}),\n    [color],\n  )\n  const [open, setOpen] = useState(false)\n  const emptyObject = object && isEmptyObject(object)\n  const isRemoved = diff.action === 'removed'\n  const prefix = fullPath.slice(\n    0,\n    fullPath.findIndex((seg) => isKeySegment(seg) && seg._key === object._key),\n  )\n  const myPath = prefix.concat(path)\n  const myValue = `field-${toString(myPath)}`\n  const values = useChangeIndicatorsReportedValues()\n  const isEditing = values.filter(([p]) => p.startsWith(myValue)).length > 0\n\n  const focusPath = fullPath.slice(0, -1).concat(path).concat([FOCUS_TERMINATOR])\n\n  useEffect(() => {\n    if (isEditing) {\n      setOpen(true)\n      onSetFocus(focusPath)\n    }\n  }, [focusPath, isEditing, onSetFocus])\n\n  const handleOpenPopup = useCallback(\n    (event: MouseEvent<HTMLDivElement, globalThis.MouseEvent>) => {\n      event.stopPropagation()\n      setOpen(true)\n      if (!isRemoved) {\n        onSetFocus(focusPath)\n        return\n      }\n      event.preventDefault()\n    },\n    [focusPath, isRemoved, onSetFocus],\n  )\n\n  const handleClose = useCallback(() => {\n    setOpen(false)\n  }, [])\n\n  const value = useMemo(() => ({path: myPath}), [myPath])\n\n  const popoverContent = (\n    <DiffContext.Provider value={value}>\n      <PopoverContent\n        diff={diff}\n        emptyObject={emptyObject}\n        onClose={handleClose}\n        schemaType={schemaType}\n      />\n    </DiffContext.Provider>\n  )\n\n  const annotation = (diff.action !== 'unchanged' && diff.annotation) || null\n  const annotations = annotation ? [annotation] : []\n\n  return (\n    <InlineObjectWrapper\n      {...restProps}\n      onClick={handleOpenPopup}\n      style={style}\n      data-removed={diff.action === 'removed' ? '' : undefined}\n      border\n      radius={2}\n    >\n      <Popover content={popoverContent} open={open} portal>\n        <PreviewContainer>\n          <DiffTooltip\n            annotations={annotations}\n            description={t('changes.portable-text.inline-object', {context: diff.action})}\n          >\n            <InlineBox>\n              <Preview schemaType={schemaType} value={object} layout=\"inline\" />\n              <Flex align=\"center\" paddingX={1}>\n                <InlineText size={0}>\n                  <ChevronDownIcon />\n                </InlineText>\n              </Flex>\n            </InlineBox>\n          </DiffTooltip>\n        </PreviewContainer>\n      </Popover>\n    </InlineObjectWrapper>\n  )\n}\n\nfunction PopoverContent({\n  diff,\n  emptyObject,\n  onClose,\n  schemaType,\n}: {\n  diff: ObjectDiff\n  emptyObject: boolean\n  onClose: () => void\n  schemaType: ObjectSchemaType\n}) {\n  const {t} = useTranslation()\n  const popoverRef = useRef<HTMLDivElement | null>(null)\n\n  useClickOutsideEvent(onClose, () => [popoverRef.current])\n\n  return (\n    <PopoverContainer ref={popoverRef} padding={3}>\n      {emptyObject && (\n        <Text muted size={1} weight=\"medium\">\n          {t('changes.portable-text.empty-inline-object', {\n            inlineObjectType: schemaType.title || schemaType.name,\n          })}\n        </Text>\n      )}\n      {!emptyObject && <ChangeList diff={diff} schemaType={schemaType} />}\n    </PopoverContainer>\n  )\n}\n","import {isKeySegment, type Path} from '@sanity/types'\nimport {type HTMLProps, type SyntheticEvent, useCallback, useContext, useMemo} from 'react'\nimport {ConnectorContext, DiffContext} from 'sanity/_singletons'\n\nimport {useTranslation} from '../../../../../i18n'\nimport {DiffCard} from '../../../../diff'\nimport {type ObjectDiff, type StringDiff, type StringDiffSegment} from '../../../../types'\nimport {InlineBox} from './styledComponents'\n\ninterface TextProps {\n  diff?: StringDiff\n  childDiff?: ObjectDiff\n  children: React.JSX.Element\n  path: Path\n  segment: StringDiffSegment\n}\n\nexport function Text({\n  diff,\n  childDiff,\n  children,\n  path,\n  segment,\n  ...restProps\n}: TextProps & Omit<HTMLProps<HTMLSpanElement>, 'onClick'>) {\n  const diffWithFallback = diff || childDiff\n  const hasChanged =\n    diffWithFallback && diffWithFallback.action !== 'unchanged' && segment.action !== 'unchanged'\n  if (hasChanged) {\n    return (\n      <TextWithDiff {...restProps} childDiff={childDiff} diff={diff} segment={segment} path={path}>\n        {children}\n      </TextWithDiff>\n    )\n  }\n  return <InlineBox>{children}</InlineBox>\n}\n\nexport function TextWithDiff({diff, childDiff, children, path, segment, ...restProps}: TextProps) {\n  const {onSetFocus} = useContext(ConnectorContext)\n  const {path: fullPath} = useContext(DiffContext)\n  const spanSegment = useMemo(() => path.slice(-2, 1)[0], [path])\n  const {t} = useTranslation()\n  const isRemoved = diff && diff.action === 'removed'\n  const prefix = fullPath.slice(\n    0,\n    fullPath.findIndex(\n      (seg) => isKeySegment(seg) && isKeySegment(spanSegment) && seg._key === spanSegment._key,\n    ),\n  )\n  const focusPath = prefix.concat(path)\n\n  const handleClick = useCallback(\n    (event: SyntheticEvent) => {\n      event.stopPropagation()\n      if (!isRemoved) {\n        event.preventDefault()\n        onSetFocus(focusPath)\n      }\n    },\n    [focusPath, isRemoved, onSetFocus],\n  )\n  const realSeg = diff && diff.segments.find((rSeg) => rSeg.text === segment.text)\n\n  const diffWithFallback = realSeg || diff || childDiff\n  const annotation =\n    (diffWithFallback && diffWithFallback.action !== 'unchanged' && diffWithFallback.annotation) ||\n    null\n\n  const diffCard =\n    annotation && segment.action !== 'unchanged' ? (\n      <DiffCard\n        annotation={annotation}\n        as={segment.action === 'removed' ? 'del' : 'ins'}\n        tooltip={{description: t('changes.portable-text.text', {context: segment.action})}}\n      >\n        {children}\n      </DiffCard>\n    ) : null\n\n  return (\n    <InlineBox {...restProps} onClick={handleClick} data-changed=\"\">\n      <span>\n        <>{diffCard || children}</>\n      </span>\n    </InlineBox>\n  )\n}\n","import {\n  isPortableTextSpan,\n  type ObjectSchemaType,\n  type PortableTextChild,\n  type PortableTextTextBlock,\n  type SpanSchemaType,\n} from '@sanity/types'\nimport {uniq, xor} from 'lodash'\nimport {type ReactNode, useCallback, useMemo} from 'react'\n\nimport {type TFunction, useTranslation} from '../../../../../i18n'\nimport {DiffCard} from '../../../../diff'\nimport {\n  type ArrayDiff,\n  type ObjectDiff,\n  type StringDiff,\n  type StringDiffSegment,\n} from '../../../../types'\nimport {\n  escapeRegExp,\n  findAnnotationDiff,\n  findChildDiff,\n  findSpanDiffFromChild,\n  getAllMarkDefs,\n  getChildSchemaType,\n  getDecorators,\n  getInlineObjects,\n  isDecorator,\n} from '../helpers'\nimport * as TextSymbols from '../symbols'\nimport {type PortableTextDiff} from '../types'\nimport {Annotation} from './Annotation'\nimport {Block} from './Block'\nimport {Decorator} from './Decorator'\nimport {InlineObject} from './InlineObject'\nimport {Text} from './Text'\n\nconst decoratorSymbolsStart = TextSymbols.DECORATOR_SYMBOLS.map((set) => set[0])\nconst decoratorSymbolsEnd = TextSymbols.DECORATOR_SYMBOLS.map((set) => set[1])\nconst annotationSymbolsStart = TextSymbols.ANNOTATION_SYMBOLS.map((set) => set[0])\nconst annotationSymbolsEnd = TextSymbols.ANNOTATION_SYMBOLS.map((set) => set[1])\n\nconst allSymbolsStart = decoratorSymbolsStart.concat(annotationSymbolsStart)\nconst allSymbolsEnd = decoratorSymbolsEnd.concat(annotationSymbolsEnd)\n\nconst allDecoratorSymbols = decoratorSymbolsStart.concat(decoratorSymbolsEnd)\nconst markRegex = new RegExp(`${allDecoratorSymbols.concat(allSymbolsEnd).join('|')}`, 'g')\n\ntype Props = {\n  diff: PortableTextDiff\n  schemaType: ObjectSchemaType\n}\n\nexport function PortableText(props: Props): React.JSX.Element {\n  const {diff, schemaType} = props\n  const block = (diff.origin.toValue || diff.origin.fromValue) as PortableTextTextBlock\n  const {t} = useTranslation()\n\n  const inlineObjects = useMemo(\n    () => (diff.origin.toValue ? getInlineObjects(diff.origin) : []),\n    [diff.origin],\n  )\n\n  const renderChild = useCallback(\n    (ptDiffChild: PortableTextChild) => {\n      const spanSchemaType = getChildSchemaType(schemaType.fields, ptDiffChild) as SpanSchemaType\n      let decoratorTypes: {title: string; value: string}[] = []\n      if (spanSchemaType) {\n        decoratorTypes = getDecorators(spanSchemaType)\n        const childrenDiff = diff.fields.children as ArrayDiff\n        const segments =\n          (childrenDiff.items[0].diff &&\n            childrenDiff.items[0].diff.type === 'object' &&\n            childrenDiff.items[0].diff.fields.text.type === 'string' &&\n            childrenDiff.items[0].diff.fields.text.segments) ||\n          []\n        const returnedChildren: ReactNode[] = []\n        const annotationSegments: Record<string, ReactNode[]> = {}\n        // Special case for new empty PT-block (single span child with empty text)\n        if (\n          isEmptyTextChange(block, diff) &&\n          (diff.origin.action === 'added' || diff.origin.action === 'removed')\n        ) {\n          const textDiff = findChildDiff(diff.origin, block.children[0]) || diff.origin\n          if (textDiff && textDiff.action !== 'unchanged') {\n            return (\n              <DiffCard\n                annotation={textDiff.annotation}\n                as={textDiff.action === 'removed' ? 'del' : 'ins'}\n                key={`empty-block-${block._key}`}\n                tooltip={{\n                  description: t('changes.portable-text.empty-text', {context: textDiff.action}),\n                }}\n              >\n                <span>{TextSymbols.EMPTY_BLOCK_SYMBOL}</span>\n              </DiffCard>\n            )\n          }\n        }\n        // Run through all the segments from the PortableTextDiff\n        let childToIndex = -1\n        let segIndex = -1\n        const activeAnnotations: {mark: string; object: PortableTextChild; symbols: string[]}[] = []\n        let endedAnnotation:\n          | {mark: string; object: PortableTextChild; symbols: string[]}\n          | undefined\n        const allMarkDefs = getAllMarkDefs(diff.origin)\n        segments.forEach((seg) => {\n          segIndex++\n          const isInline = TextSymbols.INLINE_SYMBOLS.includes(seg.text)\n          const isMarkStart = allSymbolsStart.includes(seg.text)\n          const isMarkEnd = allSymbolsEnd.includes(seg.text)\n          const isChildStart = seg.text === TextSymbols.CHILD_SYMBOL\n          const isRemoved = seg.action === 'removed'\n          if (isChildStart) {\n            if (!isRemoved) {\n              childToIndex++\n            }\n            // No output\n          } else if (isMarkStart || isMarkEnd) {\n            if (isMarkStart && annotationSymbolsStart.includes(seg.text)) {\n              const object = allMarkDefs[annotationSymbolsStart.indexOf(seg.text)]\n              if (object) {\n                activeAnnotations.push({\n                  mark: object._key,\n                  symbols: [\n                    seg.text,\n                    annotationSymbolsEnd[annotationSymbolsStart.indexOf(seg.text)],\n                  ],\n                  object,\n                })\n              }\n            }\n            if (isMarkEnd && annotationSymbolsEnd.includes(seg.text)) {\n              endedAnnotation = activeAnnotations.pop()\n            }\n            // No output\n          } else if (isInline) {\n            // Render inline object\n            const indexOfSymbol = TextSymbols.INLINE_SYMBOLS.findIndex((sym) => sym === seg.text)\n            const key = inlineObjects[indexOfSymbol]?._key\n            const originChild = inlineObjects[indexOfSymbol]\n            if (key) {\n              const objectSchemaType = getChildSchemaType(schemaType.fields, originChild)\n              const objectDiff = findChildDiff(diff.origin, originChild)\n              returnedChildren.push(\n                <InlineObject\n                  key={`inline-object-${originChild._key}`}\n                  object={originChild}\n                  path={[{_key: block._key}, 'children', {_key: originChild._key}]}\n                  diff={objectDiff}\n                  schemaType={objectSchemaType}\n                />,\n              )\n            }\n          } else if (seg.text) {\n            // TODO: find a better way of getting a removed child\n            const getChildFromFromValue = () =>\n              diff.origin.fromValue?.children.find(\n                (cld: any) => cld.text && cld.text.match(escapeRegExp(seg.text)),\n              ) as PortableTextChild\n            const child = block.children[childToIndex] || getChildFromFromValue()\n            const childDiff = child && findSpanDiffFromChild(diff.origin, child)\n            if (!child) {\n              throw new Error('Could not find child')\n            }\n            const textDiff = childDiff?.fields?.text\n              ? (childDiff?.fields?.text as StringDiff)\n              : undefined\n            const text = (\n              <Text\n                diff={textDiff}\n                key={`text-${child._key}-${segIndex}`}\n                path={[{_key: block._key}, 'children', {_key: child._key}]}\n                childDiff={childDiff}\n                segment={seg}\n              >\n                {renderTextSegment({\n                  diff,\n                  child,\n                  decoratorTypes,\n                  seg,\n                  segIndex,\n                  spanSchemaType,\n                  t,\n                })}\n              </Text>\n            )\n\n            // Render annotations text changes within the annotation child\n            if (activeAnnotations.length > 0) {\n              activeAnnotations.forEach((active) => {\n                annotationSegments[active.mark] = annotationSegments[active.mark] || []\n                annotationSegments[active.mark].push(text)\n              })\n            }\n            if (endedAnnotation) {\n              const key = `annotation-${endedAnnotation.object._key}`\n              const lastChild = returnedChildren[returnedChildren.length - 1] as React.JSX.Element\n              if (lastChild && lastChild.key !== key) {\n                const annotationDiff = findAnnotationDiff(diff.origin, endedAnnotation.mark)\n                const objectSchemaType =\n                  endedAnnotation &&\n                  spanSchemaType.annotations &&\n                  spanSchemaType.annotations.find(\n                    (type) =>\n                      endedAnnotation &&\n                      endedAnnotation.object &&\n                      type.name === endedAnnotation.object._type,\n                  )\n                returnedChildren.push(\n                  <Annotation\n                    object={endedAnnotation.object}\n                    diff={annotationDiff}\n                    path={[{_key: block._key}, 'children', {_key: child._key}]}\n                    schemaType={objectSchemaType}\n                    key={key}\n                  >\n                    <>{annotationSegments[endedAnnotation.mark]}</>\n                  </Annotation>,\n                )\n              }\n              // delete annotationSegments[endedAnnotation.mark]\n              endedAnnotation = undefined\n            }\n            if (activeAnnotations.length === 0) {\n              returnedChildren.push(text)\n            }\n          } // end if seg.text\n        })\n        return <div key={block._key}>{returnedChildren}</div>\n      }\n      throw new Error(\"'span' schemaType not found\")\n    },\n    [block, diff, inlineObjects, schemaType, t],\n  )\n\n  return (\n    <Block block={diff.displayValue} diff={diff}>\n      {<>{(diff.displayValue.children || []).map((child) => renderChild(child))}</>}\n    </Block>\n  )\n}\n\nfunction renderTextSegment({\n  diff,\n  child,\n  decoratorTypes,\n  seg,\n  segIndex,\n  spanSchemaType,\n  t,\n}: {\n  diff: PortableTextDiff\n  child: PortableTextChild\n  decoratorTypes: {title: string; value: string}[]\n  seg: StringDiffSegment\n  segIndex: number\n  spanSchemaType: SpanSchemaType\n  t: TFunction\n}): React.JSX.Element {\n  // Newlines\n  if (seg.text === '\\n') {\n    return <br />\n  }\n  // Make sure we render trailing spaces correctly\n  let children = (\n    <span key={`text-${segIndex}`}>\n      {seg.text.replace(/ /g, TextSymbols.TRAILING_SPACE_SYMBOL)}\n    </span>\n  )\n  const spanDiff = child && findSpanDiffFromChild(diff.origin, child)\n  // Render decorator diff info\n  const activeMarks = isPortableTextSpan(child) ? child.marks || [] : []\n  if (spanDiff) {\n    children = renderDecorators({\n      activeMarks,\n      decoratorTypes,\n      diff,\n      children,\n      seg,\n      segIndex,\n      spanDiff,\n      spanSchemaType,\n      t,\n    })\n  }\n  // Render the segment with the active marks\n  if (activeMarks && activeMarks.length > 0) {\n    activeMarks.forEach((mark) => {\n      if (isDecorator(mark, spanSchemaType)) {\n        children = (\n          // eslint-disable-next-line react/no-array-index-key\n          <Decorator mark={mark} key={`decorator-${mark}-${child._key}-${segIndex}`}>\n            {children}\n          </Decorator>\n        )\n      }\n    })\n  }\n  return children\n}\n\nfunction renderDecorators({\n  activeMarks,\n  decoratorTypes,\n  diff,\n  children,\n  seg,\n  segIndex,\n  spanDiff,\n  spanSchemaType,\n  t,\n}: {\n  activeMarks: string[]\n  decoratorTypes: {title: string; value: string}[]\n  diff: PortableTextDiff\n  children: React.JSX.Element\n  seg: StringDiffSegment\n  segIndex: number\n  spanDiff: ObjectDiff\n  spanSchemaType: SpanSchemaType\n  t: TFunction\n}): React.JSX.Element {\n  let returned = <span key={`text-segment-${segIndex}`}>{children}</span>\n  const fromPtDiffText: string =\n    (diff.origin.fromValue && diff.fromValue && diff.fromValue.children[0].text) || '' // Always one child\n\n  // There are cases where we have changed marks, but it's an indirect change in the diff data.\n  // For example when '<>normal-text</><>bold-text</>' and 'bold' is unbolded. Then 'bold' is added to first span,\n  // and 'bold' is removed from the second span: '<>normal-text-bold</><>-text</>'. No marks are changed.\n  // We do however want to indicate to the user that someone removed bold from 'bold'\n  // In these cases, fallback to the diff annotation information in the span itself.\n  const indirectMarksAnnotation =\n    (spanDiff && spanDiff.action !== 'unchanged' && spanDiff.annotation) || undefined\n\n  const marksDiff = spanDiff?.fields?.marks as ArrayDiff\n  const marksAnnotation =\n    (marksDiff && marksDiff.action !== 'unchanged' && marksDiff.annotation) ||\n    indirectMarksAnnotation\n\n  let marksChanged: string[] = []\n  const ptDiffChildren = fromPtDiffText\n    .split(TextSymbols.CHILD_SYMBOL)\n    .filter((text) => !!text)\n    .join('')\n  const ptDiffMatchString = ptDiffChildren\n  const controlString = ptDiffMatchString.slice(\n    0,\n    Math.max(0, ptDiffMatchString.indexOf(seg.text) + seg.text.length),\n  )\n  const toTest = controlString.slice(0, Math.max(0, controlString.indexOf(seg.text)))\n  const marks: string[] = []\n  const matches = [...toTest.matchAll(markRegex)]\n  matches.forEach((match) => {\n    const sym = match[0]\n    const set = TextSymbols.DECORATOR_SYMBOLS.concat(TextSymbols.ANNOTATION_SYMBOLS).find(\n      (aSet) => aSet.indexOf(sym) > -1,\n    )\n    if (set) {\n      const isMarkStart = sym === set[0]\n      const mark: string =\n        decoratorTypes[\n          isMarkStart ? decoratorSymbolsStart.indexOf(sym) : decoratorSymbolsEnd.indexOf(sym)\n        ]?.value || sym // Annotation marks are uniqe anyway\n      const notClosed = toTest.lastIndexOf(sym) > toTest.lastIndexOf(set[1])\n      if (notClosed) {\n        marks.push(mark)\n      }\n    }\n  })\n  marksChanged = xor(activeMarks, uniq(marks))\n  // Only for decorators, annotations are taken care of elsewhere\n  if (\n    marksAnnotation &&\n    marksChanged.length > 0 &&\n    marksChanged.some((m) => isDecorator(m, spanSchemaType))\n  ) {\n    returned = (\n      <DiffCard\n        annotation={marksAnnotation}\n        key={`diffcard-annotation-${segIndex}-${marksChanged.join('-')}`}\n        as={'ins'}\n        tooltip={{\n          description: t('changes.portable-text.changed-formatting'),\n        }}\n      >\n        {returned}\n      </DiffCard>\n    )\n  }\n  return returned\n}\n\nfunction isEmptyTextChange(block: PortableTextTextBlock, diff: PortableTextDiff) {\n  return (\n    block.children.length === 1 &&\n    block.children[0]._type === 'span' &&\n    typeof block.children[0].text === 'string' &&\n    block.children[0].text === '' &&\n    diff.origin.action !== 'unchanged'\n  )\n}\n","import {useMemo} from 'react'\n\nimport {type DiffComponent, type ObjectDiff} from '../../../types'\nimport {PortableText} from './components/PortableText'\nimport {createPortableTextDiff} from './helpers'\n\nexport const PTDiff: DiffComponent<ObjectDiff> = (props) => {\n  const {diff, schemaType} = props\n\n  const ptDiff = useMemo(() => createPortableTextDiff(diff, schemaType), [diff, schemaType])\n\n  return (\n    <div data-diff-action={diff.action}>\n      <PortableText diff={ptDiff} schemaType={schemaType} />\n    </div>\n  )\n}\n","import {type Reference} from '@sanity/types'\nimport {Box} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {Preview} from '../../../../preview/components/Preview'\nimport {type FieldPreviewComponent} from '../../../preview'\n\nconst ReferenceWrapper = styled.div`\n  word-wrap: break-word;\n`\n\nexport const ReferencePreview: FieldPreviewComponent<Reference> = ({value, schemaType}) => (\n  <Box as={ReferenceWrapper} padding={2}>\n    <Preview schemaType={schemaType} value={value} layout=\"default\" />\n  </Box>\n)\n","import {DiffFromTo} from '../../../diff'\nimport {type DiffComponent, type ReferenceDiff} from '../../../types'\nimport {ReferencePreview} from '../preview/ReferencePreview'\n\nexport const ReferenceFieldDiff: DiffComponent<ReferenceDiff> = ({diff, schemaType}) => {\n  return (\n    <DiffFromTo\n      align=\"center\"\n      diff={diff}\n      layout=\"grid\"\n      path=\"_ref\"\n      previewComponent={ReferencePreview}\n      schemaType={schemaType}\n    />\n  )\n}\n","import {Box} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {type FieldPreviewComponent} from '../../../preview'\n\nconst StringWrapper = styled.div`\n  display: inline-block;\n  word-break: break-all;\n  white-space: pre-wrap;\n`\n\nexport const StringPreview: FieldPreviewComponent<string> = (props) => {\n  const {value} = props\n\n  return (\n    <Box as={StringWrapper} paddingX={2} paddingY={1}>\n      {value}\n    </Box>\n  )\n}\n","import {styled} from 'styled-components'\n\nimport {DiffFromTo, DiffString} from '../../../diff'\nimport {type DiffComponent, type StringDiff} from '../../../types'\nimport {StringPreview} from '../preview/StringPreview'\n\nconst StringWrapper = styled.div`\n  white-space: pre-wrap;\n  word-wrap: break-word;\n`\n\nexport const StringFieldDiff: DiffComponent<StringDiff> = ({diff, schemaType}) => {\n  const {options} = schemaType\n\n  if (options?.list) {\n    // When the string is considered to be an \"enum\", don't show individual\n    // string segment changes, rather treat is as a \"from -> to\" diff\n    return <DiffFromTo diff={diff} previewComponent={StringPreview} schemaType={schemaType} />\n  }\n\n  return (\n    <StringWrapper>\n      <DiffString diff={diff} />\n    </StringWrapper>\n  )\n}\n","import {type DiffComponent, type DiffComponentOptions} from '../../types'\nimport {BooleanFieldDiff} from '../../types/boolean/diff'\nimport {DatetimeFieldDiff} from '../../types/datetime/diff'\nimport {FileFieldDiff} from '../../types/file/diff'\nimport {ImageFieldDiff} from '../../types/image/diff'\nimport {NumberFieldDiff} from '../../types/number/diff'\nimport {PTDiff} from '../../types/portableText/diff'\nimport {ReferenceFieldDiff} from '../../types/reference/diff'\nimport {StringFieldDiff} from '../../types/string/diff'\n\nexport const defaultComponents: Record<\n  string,\n  DiffComponent<any> | DiffComponentOptions<any> | undefined\n> = {\n  block: PTDiff,\n  boolean: {component: BooleanFieldDiff, showHeader: false},\n  date: DatetimeFieldDiff,\n  datetime: DatetimeFieldDiff,\n  file: FileFieldDiff,\n  image: ImageFieldDiff,\n  number: NumberFieldDiff,\n  reference: ReferenceFieldDiff,\n  string: StringFieldDiff,\n}\n","import {type ArraySchemaType, type ObjectSchemaType, type SchemaType} from '@sanity/types'\nimport {type ComponentType} from 'react'\n\nimport {diffResolvers} from '../../TODO'\nimport {type Diff, type DiffComponent, type DiffComponentOptions} from '../../types'\nimport {defaultComponents} from './defaultComponents'\n\n/** @internal */\nexport function resolveDiffComponent<D extends Diff = any>(\n  type: SchemaType,\n  parentSchemaType?: ArraySchemaType | ObjectSchemaType,\n): DiffComponent<D> | DiffComponentOptions | undefined {\n  let itType: SchemaType | undefined = type\n\n  while (itType) {\n    const resolved =\n      itType?.components?.diff ||\n      tryResolve(itType, parentSchemaType) ||\n      defaultComponents[itType.name]\n\n    if (resolved) {\n      return resolved as DiffComponent<any>\n    }\n\n    itType = itType.type\n  }\n\n  const isDateType = ['date', 'datetime'].includes(type.name)\n\n  // The date and datetime has the same jsonType as string, but we want to use\n  // a different default component for them. Therefore, we use the name of the\n  // type instead of the jsonType for these types.\n  const defaultComponentKey = isDateType ? type.name : type.jsonType\n\n  return defaultComponents[defaultComponentKey]\n}\n\nfunction tryResolve(\n  schemaType: SchemaType,\n  parentSchemaType?: ArraySchemaType | ObjectSchemaType,\n): DiffComponent<any> | DiffComponentOptions | undefined {\n  const resolvers = diffResolvers\n\n  let resolved: ComponentType | DiffComponentOptions | undefined\n\n  for (const resolver of resolvers) {\n    if (typeof resolver !== 'function') {\n      // eslint-disable-next-line no-console\n      console.error('Diff component resolver is not a function: ', resolver)\n      continue\n    }\n\n    resolved = resolver({schemaType, parentSchemaType})\n\n    if (resolved) {\n      return resolved as DiffComponent\n    }\n  }\n  return undefined\n}\n","import {\n  type ArraySchemaType,\n  type MultiFieldSet,\n  type ObjectField,\n  type ObjectSchemaType,\n  type Path,\n  type SchemaType,\n} from '@sanity/types'\n\nimport {getItemKeySegment, pathsAreEqual, pathToString} from '../../paths'\nimport {getArrayDiffItemType} from '../../schema/helpers'\nimport {\n  type ArrayDiff,\n  type ChangeNode,\n  type ChangeTitlePath,\n  type Diff,\n  type DiffComponent,\n  type FieldChangeNode,\n  type ItemDiff,\n  type ObjectDiff,\n} from '../../types'\nimport {hasPTMemberType} from '../../types/portableText/diff/helpers'\nimport {getValueError} from '../../validation'\nimport {isFieldChange} from '../helpers'\nimport {resolveDiffComponent} from '../resolve/resolveDiffComponent'\n\ninterface DiffContext {\n  itemDiff?: ItemDiff\n  parentDiff?: ArrayDiff | ObjectDiff\n  parentSchema?: ArraySchemaType | ObjectSchemaType\n  fieldFilter?: string[]\n}\n\nexport function buildChangeList(\n  schemaType: SchemaType,\n  diff: Diff,\n  path: Path = [],\n  titlePath: ChangeTitlePath = [],\n  context: DiffContext = {},\n): ChangeNode[] {\n  const diffComponent = resolveDiffComponent(schemaType, context.parentSchema)\n\n  if (!diffComponent) {\n    if (schemaType.jsonType === 'object' && diff.type === 'object') {\n      return buildObjectChangeList(schemaType as ObjectSchemaType, diff, path, titlePath, context)\n    }\n\n    if (schemaType.jsonType === 'array' && diff.type === 'array') {\n      return buildArrayChangeList(schemaType, diff, path, titlePath)\n    }\n  }\n\n  return getFieldChange(schemaType, diff, path, titlePath, context)\n}\n\nexport function buildObjectChangeList(\n  schemaType: ObjectSchemaType,\n  diff: ObjectDiff,\n  path: Path = [],\n  titlePath: ChangeTitlePath = [],\n  diffContext: DiffContext = {},\n): ChangeNode[] {\n  const changes: ChangeNode[] = []\n\n  const childContext: DiffContext = {...diffContext, parentSchema: schemaType}\n  const fieldSets =\n    schemaType.fieldsets || schemaType.fields.map((field) => ({single: true, field}))\n  for (const fieldSet of fieldSets) {\n    if (fieldSet.single) {\n      changes.push(...buildFieldChange(fieldSet.field, diff, path, titlePath, childContext))\n    } else {\n      changes.push(\n        ...buildFieldsetChangeList(fieldSet as MultiFieldSet, diff, path, titlePath, childContext),\n      )\n    }\n  }\n\n  if (changes.length < 2) {\n    return changes\n  }\n\n  return [\n    {\n      type: 'group',\n      key: pathToString(path) || 'root',\n      path,\n      titlePath,\n      changes: reduceTitlePaths(changes, titlePath.length),\n      schemaType,\n    },\n  ]\n}\n\nexport function buildFieldChange(\n  field: ObjectField,\n  diff: ObjectDiff,\n  path: Path,\n  titlePath: ChangeTitlePath,\n  diffContext: DiffContext & {fieldFilter?: string[]} = {},\n): ChangeNode[] {\n  const {fieldFilter, ...context} = diffContext\n  const fieldDiff = diff.fields[field.name]\n  if (!fieldDiff || !fieldDiff.isChanged || (fieldFilter && !fieldFilter.includes(field.name))) {\n    return []\n  }\n\n  const fieldPath = path.concat([field.name])\n  const fieldTitlePath = titlePath.concat([field.type.title || field.name])\n  return buildChangeList(field.type as any, fieldDiff, fieldPath, fieldTitlePath, context)\n}\n\nexport function buildFieldsetChangeList(\n  fieldSet: MultiFieldSet,\n  diff: ObjectDiff,\n  path: Path,\n  titlePath: ChangeTitlePath,\n  diffContext: DiffContext & {fieldFilter?: string[]} = {},\n): ChangeNode[] {\n  const {fields, name, title, readOnly, hidden} = fieldSet\n  const {fieldFilter, ...context} = diffContext\n\n  const fieldSetHidden = hidden\n  const fieldsetReadOnly = readOnly\n\n  const fieldSetTitlePath = titlePath.concat([title || name])\n  const changes: ChangeNode[] = []\n\n  for (const field of fields) {\n    const fieldDiff = diff.fields[field.name]\n    if (!fieldDiff || !fieldDiff.isChanged || (fieldFilter && !fieldFilter.includes(field.name))) {\n      continue\n    }\n\n    const fieldPath = path.concat([field.name])\n    const fieldTitlePath = fieldSetTitlePath.concat([field.type.title || field.name])\n    changes.push(\n      ...buildChangeList(\n        {\n          readOnly: fieldsetReadOnly,\n          hidden: fieldSetHidden,\n          ...field.type,\n        } as any,\n        fieldDiff,\n        fieldPath,\n        fieldTitlePath,\n        context,\n      ),\n    )\n  }\n\n  if (changes.length < 2) {\n    return changes\n  }\n\n  return [\n    {\n      type: 'group',\n      key: pathToString(path) || 'root',\n      fieldsetName: name,\n      path,\n      titlePath: fieldSetTitlePath,\n      changes: reduceTitlePaths(changes, fieldSetTitlePath.length),\n      readOnly: fieldsetReadOnly,\n      hidden: fieldSetHidden,\n    },\n  ]\n}\n\nexport function buildArrayChangeList(\n  schemaType: ArraySchemaType,\n  diff: ArrayDiff,\n  path: Path = [],\n  titlePath: ChangeTitlePath = [],\n): ChangeNode[] {\n  const changedOrMoved = diff.items.filter(\n    (item) =>\n      (item.hasMoved && item.fromIndex !== item.toIndex) || item.diff.action !== 'unchanged',\n  )\n\n  if (changedOrMoved.length === 0) {\n    return []\n  }\n\n  const isPortableText = hasPTMemberType(schemaType)\n  const list: ChangeNode[] = []\n  const changes = changedOrMoved.reduce((acc, itemDiff) => {\n    const memberTypes = getArrayDiffItemType(itemDiff.diff, schemaType)\n    const memberType = memberTypes.toType || memberTypes.fromType\n    if (!memberType) {\n      // eslint-disable-next-line no-console\n      console.warn('Could not determine schema type for item at %s', pathToString(path))\n      return acc\n    }\n\n    const segment =\n      getItemKeySegment(itemDiff.diff.fromValue) ||\n      getItemKeySegment(itemDiff.diff.toValue) ||\n      diff.items.indexOf(itemDiff)\n\n    const itemPath = path.concat(segment)\n    const itemContext: DiffContext = {itemDiff, parentDiff: diff, parentSchema: schemaType}\n    const itemTitlePath = titlePath.concat({\n      hasMoved: itemDiff.hasMoved,\n      toIndex: itemDiff.toIndex,\n      fromIndex: itemDiff.fromIndex,\n      annotation:\n        itemDiff.diff.action === 'unchanged' ? itemDiff.annotation : itemDiff.diff.annotation,\n    })\n\n    const attachItemDiff = (change: ChangeNode): ChangeNode => {\n      if (change.type === 'field' && pathsAreEqual(itemPath, change.path)) {\n        change.itemDiff = itemDiff\n      }\n\n      return change\n    }\n\n    const children = buildChangeList(\n      memberType,\n      itemDiff.diff,\n      itemPath,\n      itemTitlePath,\n      itemContext,\n    ).map(attachItemDiff)\n\n    if (isPortableText) {\n      children.filter(isFieldChange).forEach((field, index, siblings) => {\n        field.showHeader = siblings.length === 1\n        field.showIndex = itemDiff.fromIndex !== itemDiff.toIndex && itemDiff.hasMoved\n      })\n    }\n\n    if (children.length === 0) {\n      // This can happen when there are no changes to the actual element, it's just been moved\n      acc.push(...getFieldChange(memberType, itemDiff.diff, itemPath, itemTitlePath, itemContext))\n    } else {\n      acc.push(...children)\n    }\n\n    return acc\n  }, list)\n\n  if (changes.length > 1) {\n    return [\n      {\n        type: 'group',\n        key: pathToString(path) || 'root',\n        path,\n        titlePath,\n        changes: reduceTitlePaths(changes, titlePath.length),\n        schemaType,\n      },\n    ]\n  }\n\n  return changes\n}\n\nfunction getFieldChange(\n  schemaType: SchemaType,\n  diff: Diff,\n  path: Path,\n  titlePath: ChangeTitlePath,\n  {itemDiff, parentDiff, parentSchema}: DiffContext = {},\n): FieldChangeNode[] {\n  const {fromValue, toValue, type} = diff\n\n  // Treat undefined => [] as no change\n  if (type === 'array' && isEmpty(fromValue) && isEmpty(toValue)) {\n    return []\n  }\n\n  let error\n  if (typeof fromValue !== 'undefined') {\n    error = getValueError(fromValue, schemaType)\n  }\n\n  if (!error && typeof toValue !== 'undefined') {\n    error = getValueError(toValue, schemaType)\n  }\n\n  let showHeader = true\n  let component: DiffComponent | undefined\n\n  const diffComponent = resolveDiffComponent(schemaType, parentSchema)\n  if (diffComponent && typeof diffComponent === 'function') {\n    // Just a diff component with default options\n    component = diffComponent\n  } else if (diffComponent) {\n    // Diff component with options\n    component = (diffComponent as any).component\n    showHeader =\n      typeof (diffComponent as any).showHeader === 'undefined'\n        ? showHeader\n        : (diffComponent as any).showHeader\n  }\n\n  return [\n    {\n      type: 'field',\n      diff,\n      path,\n      error,\n      itemDiff,\n      parentDiff,\n      titlePath,\n      schemaType,\n      showHeader,\n      showIndex: true,\n      key: pathToString(path) || 'root',\n      diffComponent: error ? undefined : component,\n      parentSchema,\n    },\n  ]\n}\n\nfunction reduceTitlePaths(changes: ChangeNode[], byLength = 1): ChangeNode[] {\n  return changes.map((change) => {\n    change.titlePath = change.titlePath.slice(byLength)\n    return change\n  })\n}\n\nfunction isEmpty(item: unknown): boolean {\n  return (Array.isArray(item) && item.length === 0) || item === null || typeof item === 'undefined'\n}\n","import {type Path, type PathSegment} from '@sanity/types'\n\nimport {getItemKey} from '../../paths'\nimport {type ChangeNode, type FieldChangeNode} from '../../types'\n\nconst isAddedAction = (change: ChangeNode): boolean => {\n  return change.type === 'field' && change.diff.action === 'added'\n}\n\nconst flattenChangeNode = (changeNode: ChangeNode): FieldChangeNode[] => {\n  if (changeNode.type !== 'group') {\n    return [changeNode]\n  }\n\n  const newSubChanges: FieldChangeNode[] = []\n\n  changeNode.changes.forEach((cChange) => {\n    newSubChanges.push(...flattenChangeNode(cChange))\n  })\n\n  return newSubChanges\n}\n\n/**\n * Checks whether a path is under another path within the tree.\n */\nconst isSubpathOf = (subPath: Path, parentPath: Path): boolean => {\n  if (parentPath.length >= subPath.length) {\n    return false\n  }\n\n  for (let i = 0; i < parentPath.length; i++) {\n    if (parentPath[i] !== subPath[i]) {\n      return false\n    }\n  }\n\n  return true\n}\n\nconst pathSegmentOfCorrectType = (item: Record<string, unknown>, child: string): PathSegment => {\n  const nextItem = item[child]\n\n  const key = getItemKey(nextItem)\n\n  if (key) {\n    return {_key: key}\n  }\n\n  const isArray = Array.isArray(item)\n\n  if (isArray) {\n    return parseInt(child, 10)\n  }\n\n  return child\n}\n\nexport {flattenChangeNode, isAddedAction, isSubpathOf, pathSegmentOfCorrectType}\n","import {\n  diffItem,\n  type DiffOptions,\n  type InsertAfterPatch,\n  type SetPatch,\n  type UnsetPatch,\n} from '@sanity/diff-patch'\nimport {\n  isIndexSegment,\n  isKeyedObject,\n  isKeySegment,\n  isTypedObject,\n  type PatchOperations,\n  type Path,\n} from '@sanity/types'\n\nimport {isRecord} from '../../../util'\nimport {\n  findIndex,\n  getItemKeySegment,\n  getValueAtPath,\n  isEmptyObject,\n  pathToString,\n} from '../../paths'\nimport {\n  type ArrayDiff,\n  type ChangeNode,\n  type Diff,\n  type FieldOperationsAPI,\n  type ItemDiff,\n  type ObjectDiff,\n} from '../../types'\nimport {flattenChangeNode, isAddedAction, isSubpathOf, pathSegmentOfCorrectType} from './helpers'\n\nconst diffOptions: DiffOptions = {\n  diffMatchPatch: {enabled: false, lengthThresholdAbsolute: 30, lengthThresholdRelative: 1.2},\n}\n\nexport function undoChange(\n  change: ChangeNode,\n  rootDiff: ObjectDiff | null,\n  documentOperations: FieldOperationsAPI,\n): void {\n  if (!rootDiff) {\n    return\n  }\n\n  const patches: PatchOperations[] = []\n\n  if (change.type === 'group') {\n    const allChanges = flattenChangeNode(change)\n\n    const unsetChanges = allChanges.filter(isAddedAction)\n\n    allChanges\n      .filter((child) => !isAddedAction(child))\n      .forEach((child) => undoChange(child, rootDiff, documentOperations))\n\n    patches.push(\n      ...buildUnsetPatches(rootDiff, unsetChanges.map((unsetChange) => unsetChange.path).reverse()),\n    )\n  } else if (change.diff.action === 'added') {\n    // The reverse of an add operation is an unset -\n    // so we don't need to worry about moved items in this case\n    patches.push(...buildUnsetPatches(rootDiff, [change.path]))\n  } else if (\n    change.type === 'field' &&\n    change.itemDiff &&\n    change.parentDiff &&\n    change.parentDiff.type === 'array' &&\n    change.itemDiff.hasMoved\n  ) {\n    // If an array item has moved, we need to unset + insert it again\n    // (we lack a \"move\" patch currently)\n    patches.push(...buildMovePatches(change.itemDiff, change.parentDiff, change.path))\n  } else {\n    // For all other operations, try to find the most optimal case\n    patches.push(...buildUndoPatches(change.diff, rootDiff, change.path))\n  }\n\n  documentOperations.patch.execute(patches)\n}\n\nfunction buildUnsetPatch(rootDiff: ObjectDiff, path: Path, concurrentUnsetPaths: Path[]): Path {\n  const previousValue = rootDiff.toValue as Record<string, unknown>\n\n  return furthestEmptyAncestor(previousValue, path, concurrentUnsetPaths)\n}\n\nfunction buildUnsetPatches(rootDiff: ObjectDiff, paths: Path[]): PatchOperations[] {\n  const patches: Path[] = []\n\n  for (let i = 0; i < paths.length; i++) {\n    const unsetByEarlierPatch = patches.some((patch) => isSubpathOf(paths[i], patch))\n\n    if (unsetByEarlierPatch) {\n      continue\n    }\n\n    patches.push(buildUnsetPatch(rootDiff, paths[i], paths))\n  }\n\n  return [{unset: [...new Set(patches.map(pathToString))]}]\n}\n\n/**\n * Find the path to the furthest empty ancestor that's also a stub.\n *\n * Used for removing all stubs when unsetting a nested value.\n */\nfunction furthestEmptyAncestor(\n  /**\n   * The state of the tree before the change was made.\n   */\n  previousValue: Record<string, unknown>,\n  /**\n   * Path of the value to unset. Used for recursing.\n   */\n  currentPath: Path,\n  /**\n   * An optional list of path to forcefully mark as a stub regardless of what it actually is.\n   */\n  ignorePaths: Path[] = [],\n  /**\n   * Same as the first value of currentPath.\n   */\n  initialPath?: Path,\n): Path {\n  if (currentPath.length <= 0) {\n    /*\n     * This means we are at root and no ancestors are stubs. We\n     * can therefore safely unset only the actual value.\n     */\n    if (!initialPath) {\n      /*\n       * Will happen if the function is started with `currentPath = []`.\n       */\n      throw new Error('Root has no ancestor')\n    }\n\n    return initialPath\n  }\n\n  const ancestorPath = currentPath.slice(0, -1)\n  const ancestorValue = getValueAtPath(previousValue, ancestorPath)\n\n  /*\n   * If the ancestor also is a stub we can add it to the ignore-list\n   * so it'll be \"remembered\" as a stub without us having to scan\n   * the whole tree again.\n   */\n  const updatedIgnorePaths = [\n    ancestorPath,\n\n    /*\n     * We can filter out all the subpaths from under this ancestor\n     * because since we ignore it higher up in the tree it doesn't\n     * matter anymore what the values of subpaths are.\n     */\n    ...ignorePaths.filter((path) => !isSubpathOf(path, ancestorPath)),\n  ]\n\n  return isStub(ancestorValue, ancestorPath, ignorePaths)\n    ? furthestEmptyAncestor(previousValue, ancestorPath, updatedIgnorePaths, initialPath)\n    : currentPath\n}\n\nfunction buildMovePatches(\n  itemDiff: ItemDiff,\n  parentDiff: ArrayDiff,\n  path: Path,\n): PatchOperations[] {\n  const basePath = path.slice(0, -1)\n  const {parentValue, fromIndex, fromValue} = getFromItem(parentDiff, itemDiff)\n\n  let insertLocation\n  if (fromIndex === 0) {\n    // If it was moved from the beginning, we can use a simple prepend\n    insertLocation = {before: pathToString([...basePath, 0])}\n  } else {\n    // Try to use item key segments where possible, falling back to array indexes\n    const prevIndex = fromIndex - 1\n    const prevItemKey = getItemKeySegment(parentValue[prevIndex])\n    const prevSegment = prevItemKey || prevIndex\n    insertLocation = {after: pathToString([...basePath, prevSegment])}\n  }\n\n  return [\n    {\n      unset: [pathToString(path)],\n    },\n    {\n      insert: {...insertLocation, items: [fromValue]} as any,\n    },\n  ]\n}\n\nfunction buildUndoPatches(diff: Diff, rootDiff: ObjectDiff, path: Path): PatchOperations[] {\n  const patches = diffItem(diff.toValue, diff.fromValue, diffOptions, path)\n\n  const inserts = patches\n    .filter((patch): patch is InsertAfterPatch => patch.op === 'insert')\n    .map(({after, items}) => ({insert: {after: pathToString(after), items}}) as any)\n\n  const unsets = patches\n    .filter((patch): patch is UnsetPatch => patch.op === 'unset')\n    .reduce((acc, patch) => acc.concat(pathToString(patch.path)), [] as string[])\n\n  const stubbedPaths = new Set<string>()\n  const stubs: PatchOperations[] = []\n\n  let hasSets = false\n  const sets = patches\n    .filter((patch): patch is SetPatch => patch.op === 'set')\n    .reduce(\n      (acc, patch) => {\n        hasSets = true\n        stubs.push(...getParentStubs(patch.path, rootDiff, stubbedPaths))\n        acc[pathToString(patch.path)] = patch.value\n        return acc\n      },\n      {} as Record<string, unknown>,\n    )\n\n  return [\n    ...stubs,\n    ...inserts,\n    ...(unsets.length > 0 ? [{unset: unsets}] : []),\n    ...(hasSets ? [{set: sets}] : []),\n  ]\n}\n\nfunction getParentStubs(path: Path, rootDiff: ObjectDiff, stubbed: Set<string>): PatchOperations[] {\n  const value = rootDiff.fromValue as Record<string, unknown>\n  const nextValue = rootDiff.toValue as Record<string, unknown>\n  const stubs: PatchOperations[] = []\n\n  for (let i = 1; i <= path.length; i++) {\n    const subPath = path.slice(0, i)\n    const pathStr = pathToString(subPath)\n    if (stubbed.has(pathStr)) {\n      continue\n    }\n\n    const nextSegment = path[i]\n    const nextIsArrayElement = isKeySegment(nextSegment) || isIndexSegment(nextSegment)\n    const itemValue = getValueAtPath(value, subPath)\n    const stub = getStubValue(itemValue)\n\n    // If the next array element does not exist, we need to inject an insert stub here\n    if (\n      nextIsArrayElement &&\n      Array.isArray(itemValue) &&\n      !getValueAtPath(nextValue, path.slice(0, i + 1))\n    ) {\n      const indexAtPrev = findIndex(itemValue, nextSegment)\n      const prevItem = itemValue[indexAtPrev - 1]\n      const nextItem = getValueAtPath(value, subPath.concat(nextSegment))\n      const prevSeg = isKeyedObject(prevItem) ? {_key: prevItem._key} : indexAtPrev - 1\n      const after = pathToString(subPath.concat(indexAtPrev < 1 ? 0 : prevSeg))\n      stubs.push({setIfMissing: {[pathStr]: []}})\n      stubs.push({insert: {after, items: [getStubValue(nextItem)]} as any})\n\n      i++\n      continue\n    }\n\n    if (typeof stub === 'undefined') {\n      continue\n    }\n\n    stubbed.add(pathStr)\n    stubs.push({setIfMissing: {[pathStr]: stub as Record<string, unknown>}})\n  }\n  return stubs\n}\n\n/**\n * Check if all items in an object or an array are stubs.\n */\nfunction onlyContainsStubs(\n  /**\n   * The item to check whether is a stub.\n   */\n  item: unknown,\n  /**\n   * The path to the item we're checking.\n   */\n  path: Path,\n  /**\n   * An optional list of path to forcefully mark as a stub regardless of what it actually is.\n   */\n  ignorePaths?: Path[],\n): boolean {\n  /*\n   * If we're trying to check for stubs inside something which isn't an object\n   * or an array we're checking a string for example and it they cannot\n   * contain stubs.\n   */\n  if (!isRecord(item) || !Array.isArray(item)) {\n    return false\n  }\n\n  for (const child in item) {\n    if (!Object.prototype.hasOwnProperty.call(item, child)) {\n      continue\n    }\n\n    /*\n     * _type or _key field alone doesn't affect whether the field is a stub or\n     * not.\n     */\n    if (child === '_type' || child === '_key') {\n      continue\n    }\n\n    const nextPath = [...path, pathSegmentOfCorrectType(item as Record<string, unknown>, child)]\n\n    if (!isStub(item[child], nextPath, ignorePaths)) {\n      return false\n    }\n  }\n\n  return true\n}\n\nfunction isStub(item: unknown, path: Path, ignorePaths?: Path[]): boolean {\n  const isIgnoredPath = ignorePaths?.some(\n    (ignorePath) => pathToString(ignorePath) === pathToString(path),\n  )\n\n  const isEmptyArray = Array.isArray(item) && item.length <= 0\n\n  return (\n    isIgnoredPath ||\n    item === undefined ||\n    item === null ||\n    isEmptyArray ||\n    isEmptyObject(item) ||\n    onlyContainsStubs(item, path, ignorePaths)\n  )\n}\n\nfunction getStubValue(item: unknown): unknown {\n  if (Array.isArray(item)) {\n    return []\n  }\n\n  if (typeof item !== 'object' || item === null) {\n    return undefined\n  }\n\n  const props: Record<string, unknown> = {}\n\n  if (isKeyedObject(item)) {\n    props._key = item._key\n  }\n\n  if (isTypedObject(item)) {\n    props._type = item._type\n  }\n\n  return props\n}\n\nfunction getFromItem(parentDiff: ArrayDiff, itemDiff: ItemDiff) {\n  if (parentDiff.fromValue && typeof itemDiff.fromIndex === 'number') {\n    const fromValue = parentDiff.fromValue[itemDiff.fromIndex]\n    return {\n      parentValue: parentDiff.fromValue,\n      fromIndex: itemDiff.fromIndex,\n      fromValue,\n    }\n  }\n\n  // Shouldn't ever happen\n  throw new Error(`Failed to find item at index ${itemDiff.fromIndex}`)\n}\n","import {styled} from 'styled-components'\n\nexport const ChangeListWrapper = styled.div`\n  display: grid;\n  grid-template-columns: minmax(0, 1fr);\n`\n","import {ErrorOutlineIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Text} from '@sanity/ui'\nimport {Component, type ReactNode} from 'react'\n\nimport {isDev} from '../../../environment'\nimport {type TFunction} from '../../../i18n'\n\n/** @internal */\nexport interface DiffErrorBoundaryProps {\n  children: ReactNode\n  t: TFunction\n}\n\n/** @internal */\nexport interface DiffErrorBoundaryState {\n  error?: Error\n}\n\n/** @internal */\nexport class DiffErrorBoundary extends Component<DiffErrorBoundaryProps, DiffErrorBoundaryState> {\n  static getDerivedStateFromError(error: Error) {\n    return {error}\n  }\n\n  state: DiffErrorBoundaryState = {}\n\n  // eslint-disable-next-line class-methods-use-this\n  componentDidCatch(error: Error) {\n    console.error('Error rendering diff component: ')\n    console.error(error)\n  }\n\n  render() {\n    const {t} = this.props\n    const {error} = this.state\n\n    if (!error) {\n      return this.props.children\n    }\n\n    return (\n      <Card padding={3} radius={2} tone=\"critical\">\n        <Flex>\n          <Text size={1}>\n            <ErrorOutlineIcon />\n          </Text>\n\n          <Box paddingLeft={3}>\n            <Text as=\"h3\" size={1} weight=\"medium\">\n              {t('changes.error-boundary.title')}\n            </Text>\n\n            {isDev && (\n              <Box marginTop={2}>\n                <Text as=\"p\" size={1}>\n                  {t('changes.error-boundary.developer-info')}\n                </Text>\n              </Box>\n            )}\n          </Box>\n        </Flex>\n      </Card>\n    )\n  }\n}\n","import {ArrowDownIcon, ArrowRightIcon} from '@sanity/icons'\nimport {Text, type TextProps} from '@sanity/ui'\nimport {type HTMLProps} from 'react'\n\n/** @internal */\nexport type FromToArrowDirection = 'down' | 'right'\n\nconst arrowComponents = {\n  down: ArrowDownIcon,\n  right: ArrowRightIcon,\n}\n\n/** @internal */\nexport function FromToArrow(\n  props: {direction?: FromToArrowDirection} & TextProps &\n    Omit<HTMLProps<HTMLDivElement>, 'children' | 'ref'>,\n) {\n  const {direction = 'right', ...restProps} = props\n  const ArrowComponent = arrowComponents[direction]\n\n  return (\n    <Text muted size={1} {...restProps}>\n      <ArrowComponent />\n    </Text>\n  )\n}\n","import {Box, type BoxProps, Card, Code, Stack, Text} from '@sanity/ui'\nimport {type ReactNode, useCallback, useEffect, useRef, useState} from 'react'\nimport {type ExecutionProps, styled} from 'styled-components'\n\nimport {useTranslation} from '../../../i18n'\nimport {pathToString} from '../../paths'\nimport {type FieldChangeNode} from '../../types'\nimport {FromToArrow} from './FromToArrow'\n\n/** @internal */\nexport interface DiffInspectWrapperProps {\n  children: ReactNode\n  change: FieldChangeNode\n  as?: ExecutionProps['as']\n}\n\nconst CodeWrapper = styled.pre`\n  overflow-x: auto;\n  position: relative;\n`\n\nconst Meta = styled.div`\n  position: absolute;\n  top: 0;\n  right: 0;\n`\n\n/** @internal */\nexport function DiffInspectWrapper(props: DiffInspectWrapperProps & BoxProps): React.JSX.Element {\n  const {children, as, change, ...restProps} = props\n  const isHovering = useRef(false)\n  const [isInspecting, setIsInspecting] = useState(false)\n\n  const toggleInspect = useCallback(() => setIsInspecting((state) => !state), [setIsInspecting])\n  const handleMouseEnter = useCallback(() => (isHovering.current = true), [])\n  const handleMouseLeave = useCallback(() => (isHovering.current = false), [isHovering])\n\n  useEffect(() => {\n    function onKeyDown(evt: KeyboardEvent) {\n      const {metaKey, key} = evt\n      if (metaKey && key === 'i' && isHovering.current) {\n        toggleInspect()\n      }\n    }\n\n    window.addEventListener('keydown', onKeyDown, false)\n    return () => window.removeEventListener('keydown', onKeyDown, false)\n  }, [toggleInspect])\n\n  return (\n    <Box as={as} onMouseEnter={handleMouseEnter} onMouseLeave={handleMouseLeave} {...restProps}>\n      {isInspecting ? <DiffInspector change={change} /> : children}\n    </Box>\n  )\n}\n\nconst MetaLabel = ({title}: {title: string}) => (\n  <Box padding={3} display=\"inline-block\" as={Meta}>\n    <Text muted size={1} weight=\"medium\">\n      {title}\n    </Text>\n  </Box>\n)\n\nfunction DiffInspector({change}: {change: FieldChangeNode}): React.JSX.Element | null {\n  const {t} = useTranslation()\n  return (\n    <Stack space={3}>\n      <Card padding={3} tone=\"transparent\" as={CodeWrapper} radius={1}>\n        <MetaLabel title={t('changes.inspector.meta-label')} />\n        <Code language=\"json\" size={1}>\n          {printMeta({\n            path: pathToString(change.path),\n            fromIndex: change.itemDiff?.fromIndex,\n            toIndex: change.itemDiff?.toIndex,\n            hasMoved: change.itemDiff?.hasMoved,\n            action: change.diff.action,\n            isChanged: change.diff.isChanged,\n          })}\n        </Code>\n      </Card>\n      <Card as={CodeWrapper} tone=\"critical\" padding={3} radius={1}>\n        <MetaLabel title={t('changes.inspector.from-label')} />\n        <Code language=\"json\" size={1}>\n          {jsonify(change.diff.fromValue)}\n        </Code>\n      </Card>\n      <Card>\n        <FromToArrow direction=\"down\" align=\"center\" />\n      </Card>\n      <Card as={CodeWrapper} tone=\"positive\" padding={3} radius={1}>\n        <MetaLabel title={t('changes.inspector.to-label')} />\n        <Code language=\"json\" size={1}>\n          {jsonify(change.diff.toValue)}\n        </Code>\n      </Card>\n    </Stack>\n  )\n}\n\nfunction jsonify(value: unknown) {\n  if (typeof value === 'undefined') {\n    return 'undefined'\n  }\n\n  return JSON.stringify(value, null, 2)\n}\n\nfunction printMeta(keys: Record<string, unknown>) {\n  const lines: string[] = []\n\n  Object.entries(keys).forEach(([key, value]) => {\n    if (typeof value !== 'undefined' && value !== null) {\n      lines.push(`${key}: ${value}`)\n    }\n  })\n\n  return lines.join('\\n')\n}\n","import {useTranslation} from '../../../i18n'\nimport {type Diff} from '../../types'\n\n/** @internal */\nexport function useChangeVerb(diff: Diff): string {\n  const {t} = useTranslation()\n  const hadPrevValue = hasValue(diff.fromValue)\n  const hasNextValue = hasValue(diff.toValue)\n  if (!hadPrevValue && hasNextValue) {\n    return t('changes.added-label')\n  }\n\n  if (!hasNextValue && hadPrevValue) {\n    return t('changes.removed-label')\n  }\n\n  return t('changes.changed-label')\n}\n\n/** @internal */\nfunction hasValue(value: unknown) {\n  return value !== null && typeof value !== 'undefined' && value !== ''\n}\n","import {Flex, Grid, rem, useTheme} from '@sanity/ui'\nimport {forwardRef, type HTMLProps, type ReactNode, useMemo} from 'react'\n\nimport {FromToArrow} from './FromToArrow'\n\n/** @internal */\nexport type FromToProps = {\n  align?: 'top' | 'center' | 'bottom'\n  layout?: 'grid' | 'inline'\n  from?: ReactNode\n  to?: ReactNode\n} & Omit<HTMLProps<HTMLDivElement>, 'children' | 'as' | 'height' | 'wrap'>\n\nconst INLINE_COLUMN_STYLES = {flexShrink: 0}\nconst BLOCK_COLUMN_STYLES = {alignItems: 'stretch'}\n\nconst FLEX_ALIGN: Record<string, 'flex-start' | 'center' | 'flex-end'> = {\n  top: 'flex-start',\n  center: 'center',\n  bottom: 'flex-end',\n  default: 'flex-start',\n}\n\n/** @internal */\nexport const FromTo = forwardRef<HTMLDivElement, FromToProps>(function FromTo(props, ref) {\n  const {align = 'top', layout = 'inline', from, to, style, ...restProps} = props\n  const theme = useTheme()\n\n  const Layout = layout === 'inline' ? Flex : Grid\n  const layoutStyles = useMemo(\n    () => ({\n      ...style,\n      ...(layout === 'inline'\n        ? {maxWidth: '100%', display: 'inline-flex'}\n        : {gridTemplateColumns: `minmax(0, 1fr) ${rem(theme.sanity.space[5])} minmax(0, 1fr)`}),\n    }),\n    [layout, style, theme],\n  )\n\n  const columnStyles = layout === 'inline' ? INLINE_COLUMN_STYLES : BLOCK_COLUMN_STYLES\n\n  return (\n    <Layout {...restProps} ref={ref} style={layoutStyles} data-from-to-layout>\n      {from && (\n        <>\n          <Flex align={FLEX_ALIGN[align]} style={columnStyles}>\n            {from}\n          </Flex>\n          <Flex align=\"center\" justify=\"center\" padding={2}>\n            <FromToArrow />\n          </Flex>\n        </>\n      )}\n      <Flex align={FLEX_ALIGN[align]} style={columnStyles}>\n        {to}\n      </Flex>\n    </Layout>\n  )\n})\n","import {type Path, type SchemaType} from '@sanity/types'\nimport {type CSSProperties} from 'react'\n\nimport {type FieldPreviewComponent} from '../../preview'\nimport {type Diff} from '../../types'\nimport {useChangeVerb} from '../hooks/useChangeVerb'\nimport {DiffCard} from './DiffCard'\nimport {DiffTooltip} from './DiffTooltip'\nimport {FromTo} from './FromTo'\n\n/** @internal */\nexport interface DiffFromToProps {\n  align?: 'top' | 'center' | 'bottom'\n  cardClassName?: string\n  diff: Diff\n  layout?: 'grid' | 'inline'\n  path?: Path | string\n  previewComponent: FieldPreviewComponent\n  schemaType: SchemaType\n}\n\nconst cardStyles: CSSProperties = {\n  flex: 1,\n  minWidth: 0,\n  display: 'block',\n  whiteSpace: 'break-spaces',\n}\n\n/** @internal */\nexport function DiffFromTo(props: DiffFromToProps) {\n  const {\n    align,\n    cardClassName,\n    diff,\n    layout,\n    path,\n    previewComponent: PreviewComponent,\n    schemaType,\n  } = props\n  const {action} = diff\n  const changeVerb = useChangeVerb(diff)\n\n  if (action === 'unchanged') {\n    return (\n      <DiffCard className={cardClassName} style={cardStyles}>\n        <PreviewComponent schemaType={schemaType} value={diff.toValue} />\n      </DiffCard>\n    )\n  }\n\n  const from = diff.fromValue !== undefined && diff.fromValue !== null && (\n    <DiffCard as=\"del\" className={cardClassName} diff={diff} path={path} style={cardStyles}>\n      <PreviewComponent schemaType={schemaType} value={diff.fromValue} />\n    </DiffCard>\n  )\n\n  const to = diff.toValue !== undefined && diff.toValue !== null && (\n    <DiffCard as=\"ins\" className={cardClassName} diff={diff} path={path} style={cardStyles}>\n      <PreviewComponent schemaType={schemaType} value={diff.toValue} />\n    </DiffCard>\n  )\n\n  if (from && !to) {\n    return (\n      <DiffTooltip description={changeVerb} diff={diff} path={path}>\n        {from}\n      </DiffTooltip>\n    )\n  }\n\n  if (!from && to) {\n    return (\n      <DiffTooltip description={changeVerb} diff={diff} path={path}>\n        {to}\n      </DiffTooltip>\n    )\n  }\n\n  return (\n    <DiffTooltip description={changeVerb} diff={diff} path={path}>\n      <FromTo align={align} from={from} layout={layout} to={to} />\n    </DiffTooltip>\n  )\n}\n","import {Box} from '@sanity/ui'\nimport {type ReactNode} from 'react'\n\nimport {Preview} from '../../../preview/components/Preview'\nimport {type FieldPreviewComponent} from '../../preview'\nimport {type Diff, type DiffComponent} from '../../types'\nimport {DiffFromTo} from './DiffFromTo'\n\nconst FallbackPreview: FieldPreviewComponent<ReactNode> = ({value, schemaType}) => {\n  return (\n    <Box padding={2}>\n      <Preview schemaType={schemaType} value={value as any} layout=\"default\" />\n    </Box>\n  )\n}\n\n/** @internal */\nexport const FallbackDiff: DiffComponent<Diff<unknown, Record<string, unknown>>> = (props) => {\n  const {diff, schemaType} = props\n\n  return (\n    <DiffFromTo\n      diff={diff}\n      schemaType={schemaType}\n      previewComponent={FallbackPreview}\n      layout=\"grid\"\n    />\n  )\n}\n","import {rem} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const FieldChangeContainer = styled.div`\n  --field-change-error: ${({theme}) => theme.sanity.color.solid.critical.enabled.bg};\n  &[data-revert-all-changes-hover] [data-revert-all-hover]::before {\n    border-left: 2px solid var(--field-change-error);\n  }\n`\n\nexport const DiffBorder = styled.div`\n  --field-change-error: ${({theme}) => theme.sanity.color.solid.critical.enabled.bg};\n  --diff-inspect-padding-xsmall: ${({theme}) => rem(theme.sanity.space[1])};\n  --diff-inspect-padding-small: ${({theme}) => rem(theme.sanity.space[2])};\n\n  position: relative;\n  padding: var(--diff-inspect-padding-xsmall) 0 var(--diff-inspect-padding-xsmall)\n    var(--diff-inspect-padding-small);\n\n  &::before {\n    content: '';\n    display: block;\n    position: absolute;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    border-left: 1px solid var(--card-border-color);\n  }\n\n  &[data-error]:hover::before,\n  &[data-revert-field-hover]:hover::before {\n    border-left: 2px solid var(--field-change-error);\n  }\n`\n","import {RevertIcon} from '@sanity/icons'\nimport {type ForwardedRef, forwardRef, type HTMLProps} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Button, type ButtonProps} from '../../../../ui-components'\nimport {useTranslation} from '../../../i18n'\n\nconst Root = styled(Button)`\n  [data-ui='Text'] {\n    font-weight: normal;\n  }\n\n  div[data-ui='Box'] {\n    display: none;\n  }\n\n  &:not([data-disabled='true']):hover,\n  &:not([data-disabled='true']):focus {\n    --card-fg-color: ${({theme}) => theme.sanity.color.solid.critical.enabled.bg};\n    --card-bg-color: transparent;\n    --card-border-color: transparent;\n\n    div[data-ui='Box'] {\n      display: block;\n    }\n  }\n`\n\n/** @internal */\nexport const RevertChangesButton = forwardRef(function RevertChangesButton(\n  props: Omit<ButtonProps, 'tooltipProps'> &\n    Omit<HTMLProps<HTMLButtonElement>, 'ref'> & {changeCount: number},\n  ref: ForwardedRef<HTMLButtonElement>,\n): React.JSX.Element {\n  const {selected, changeCount, ...restProps} = props\n  const {t} = useTranslation()\n\n  return (\n    <Root\n      icon={RevertIcon}\n      selected={selected}\n      text={t('changes.action.revert-changes-confirm-change', {count: changeCount})}\n      mode=\"bleed\"\n      ref={ref}\n      tooltipProps={null}\n      {...restProps}\n    />\n  )\n})\n","import {ErrorOutlineIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Text} from '@sanity/ui'\n\nimport {useTranslation} from '../../../i18n'\nimport {type FieldValueError} from '../../validation'\n\n/** @internal */\nexport function ValueError({error}: {error: FieldValueError}) {\n  const {t} = useTranslation()\n  return (\n    <Card tone=\"critical\" padding={3}>\n      <Flex align=\"flex-start\">\n        <Box>\n          <Text>\n            <ErrorOutlineIcon />\n          </Text>\n        </Box>\n        <Box flex={1} paddingLeft={3}>\n          <Text size={1} as=\"p\">\n            {t(error.messageKey, {\n              expectedType: error.expectedType,\n              actualType: error.actualType,\n            })}\n          </Text>\n        </Box>\n      </Flex>\n    </Card>\n  )\n}\n","import {type ObjectSchemaType} from '@sanity/types'\nimport {Box, Flex, Stack, Text, useClickOutsideEvent} from '@sanity/ui'\nimport {Fragment, type HTMLAttributes, useCallback, useMemo, useRef, useState} from 'react'\nimport {DiffContext} from 'sanity/_singletons'\n\nimport {Button, Popover} from '../../../../ui-components'\nimport {useDocumentOperation} from '../../../hooks'\nimport {useTranslation} from '../../../i18n'\nimport {useDocumentPairPermissions} from '../../../store'\nimport {type FieldChangeNode, type FieldOperationsAPI} from '../../types'\nimport {undoChange} from '../changes/undoChange'\nimport {useDocumentChange} from '../hooks'\nimport {ChangeBreadcrumb} from './ChangeBreadcrumb'\nimport {DiffErrorBoundary} from './DiffErrorBoundary'\nimport {DiffInspectWrapper} from './DiffInspectWrapper'\nimport {FallbackDiff} from './FallbackDiff'\nimport {DiffBorder, FieldChangeContainer} from './FieldChange.styled'\nimport {RevertChangesButton} from './RevertChangesButton'\nimport {ValueError} from './ValueError'\n\n/** @internal */\nexport function FieldChange(\n  props: {\n    change: FieldChangeNode\n    readOnly?: boolean\n    hidden?: boolean\n  } & HTMLAttributes<HTMLDivElement>,\n) {\n  const {change, hidden, readOnly} = props\n  const DiffComponent = change.diffComponent || FallbackDiff\n  const {\n    documentId,\n    schemaType,\n    rootDiff,\n    isComparingCurrent,\n    FieldWrapper = Fragment,\n  } = useDocumentChange()\n  const ops = useDocumentOperation(documentId, schemaType.name) as FieldOperationsAPI\n  const [confirmRevertOpen, setConfirmRevertOpen] = useState(false)\n  const [revertHovered, setRevertHovered] = useState(false)\n  const popoverRef = useRef<HTMLDivElement | null>(null)\n  const {t} = useTranslation()\n\n  const [permissions, isPermissionsLoading] = useDocumentPairPermissions({\n    id: documentId,\n    type: schemaType.name,\n    permission: 'update',\n  })\n\n  const handleRevertChanges = useCallback(() => {\n    undoChange(change, rootDiff, ops)\n  }, [change, rootDiff, ops])\n\n  const handleRevertChangesConfirm = useCallback(() => {\n    setConfirmRevertOpen(true)\n  }, [])\n\n  const closeRevertChangesConfirmDialog = useCallback(() => {\n    setConfirmRevertOpen(false)\n  }, [])\n\n  const handleRevertButtonMouseEnter = useCallback(() => {\n    setRevertHovered(true)\n  }, [])\n\n  const handleRevertButtonMouseLeave = useCallback(() => {\n    setRevertHovered(false)\n  }, [])\n\n  useClickOutsideEvent(\n    () => setConfirmRevertOpen(false),\n    () => [popoverRef.current],\n  )\n\n  const isArray = change.parentSchema?.jsonType === 'array'\n\n  /* this condition is required in order to avoid situations where an array change has happened\n   * but not necessarily an array item change. E.g. when adding one new item to an array, the changes pane\n   * would be able to identify that a new item was addded but not what array it belonged to (because the change path\n   * is only related to the item itself, not the array)\n   */\n  const fieldPath = isArray ? change.path.slice(0, -1) : change.path\n\n  const value = useMemo(() => ({path: change.path}), [change.path])\n\n  const content = useMemo(\n    () =>\n      hidden ? null : (\n        <Stack space={1} as={FieldChangeContainer}>\n          {change.showHeader && <ChangeBreadcrumb change={change} titlePath={change.titlePath} />}\n\n          <FieldWrapper path={fieldPath} hasHover={revertHovered}>\n            <DiffInspectWrapper\n              change={change}\n              as={DiffBorder}\n              data-revert-field-hover={revertHovered ? '' : undefined}\n              data-error={change.error ? '' : undefined}\n              data-revert-all-hover\n              data-ui=\"field-diff-inspect-wrapper\"\n            >\n              {change.error ? (\n                <ValueError error={change.error} />\n              ) : (\n                <DiffErrorBoundary t={t}>\n                  <DiffContext.Provider value={value}>\n                    <DiffComponent\n                      diff={change.diff}\n                      schemaType={change.schemaType as ObjectSchemaType}\n                    />\n                  </DiffContext.Provider>\n                </DiffErrorBoundary>\n              )}\n\n              {isComparingCurrent && !isPermissionsLoading && permissions?.granted && (\n                <Popover\n                  content={\n                    <Stack space={3}>\n                      <Box paddingY={3}>\n                        <Text size={1}>\n                          {t('changes.action.revert-changes-description', {count: 1})}\n                        </Text>\n                      </Box>\n                      <Flex gap={3} justify=\"flex-end\">\n                        <Button\n                          mode=\"ghost\"\n                          onClick={closeRevertChangesConfirmDialog}\n                          text={t('changes.action.revert-all-cancel')}\n                        />\n                        <Button\n                          tone=\"critical\"\n                          onClick={handleRevertChanges}\n                          text={t('changes.action.revert-changes-confirm-change', {count: 1})}\n                        />\n                      </Flex>\n                    </Stack>\n                  }\n                  open={confirmRevertOpen}\n                  padding={3}\n                  portal\n                  placement=\"left\"\n                  ref={popoverRef}\n                >\n                  <RevertChangesButton\n                    changeCount={1}\n                    onClick={handleRevertChangesConfirm}\n                    onMouseEnter={handleRevertButtonMouseEnter}\n                    onMouseLeave={handleRevertButtonMouseLeave}\n                    selected={confirmRevertOpen}\n                    disabled={readOnly}\n                    data-testid={`single-change-revert-button-${change?.key}`}\n                  />\n                </Popover>\n              )}\n            </DiffInspectWrapper>\n          </FieldWrapper>\n        </Stack>\n      ),\n    [\n      hidden,\n      change,\n      FieldWrapper,\n      fieldPath,\n      revertHovered,\n      t,\n      value,\n      DiffComponent,\n      isComparingCurrent,\n      isPermissionsLoading,\n      permissions?.granted,\n      closeRevertChangesConfirmDialog,\n      handleRevertChanges,\n      confirmRevertOpen,\n      handleRevertChangesConfirm,\n      handleRevertButtonMouseEnter,\n      handleRevertButtonMouseLeave,\n      readOnly,\n    ],\n  )\n\n  return content\n}\n","import {type MutableRefObject, useEffect, useRef, useState} from 'react'\n\nexport function useHover<T extends HTMLElement>(): [MutableRefObject<T | null>, boolean] {\n  const ref = useRef<T | null>(null)\n  const [value, setValue] = useState(false)\n\n  useEffect(() => {\n    const node = ref.current\n\n    if (!node) {\n      return () => undefined\n    }\n\n    const handleMouseOver = () => setValue(true)\n    const handleMouseOut = () => setValue(false)\n\n    node.addEventListener('mouseover', handleMouseOver)\n    node.addEventListener('mouseout', handleMouseOut)\n\n    return () => {\n      node.removeEventListener('mouseover', handleMouseOver)\n      node.removeEventListener('mouseout', handleMouseOut)\n    }\n  }, [])\n\n  return [ref, value]\n}\n","import {rem} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const ChangeListWrapper = styled.div`\n  display: grid;\n  grid-template-columns: minmax(0, 1fr);\n`\n\nexport const GroupChangeContainer = styled.div`\n  --field-change-error: ${({theme}) => theme.sanity.color.solid.critical.enabled.bg};\n  --diff-inspect-padding-xsmall: ${({theme}) => rem(theme.sanity.space[1])};\n  --diff-inspect-padding-small: ${({theme}) => rem(theme.sanity.space[2])};\n\n  position: relative;\n  padding: var(--diff-inspect-padding-xsmall) var(--diff-inspect-padding-small);\n\n  &::before {\n    content: '';\n    display: block;\n    position: absolute;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    border-left: 1px solid var(--card-border-color);\n  }\n\n  &[data-error]:hover::before,\n  &[data-revert-group-hover]:hover::before,\n  &[data-revert-all-groups-hover]::before {\n    border-left: 2px solid var(--field-change-error);\n  }\n`\n","import {Box, Flex, Stack, Text, useClickOutsideEvent} from '@sanity/ui'\nimport {type HTMLAttributes, useCallback, useContext, useMemo, useRef, useState} from 'react'\nimport {DiffContext} from 'sanity/_singletons'\n\nimport {Button, Popover} from '../../../../ui-components'\nimport {useDocumentOperation} from '../../../hooks'\nimport {useTranslation} from '../../../i18n'\nimport {useDocumentPairPermissions} from '../../../store'\nimport {pathsAreEqual} from '../../paths'\nimport {type FieldOperationsAPI, type GroupChangeNode} from '../../types'\nimport {isPTSchemaType} from '../../types/portableText/diff'\nimport {useHover} from '../../utils/useHover'\nimport {undoChange} from '../changes/undoChange'\nimport {isFieldChange} from '../helpers'\nimport {useDocumentChange} from '../hooks'\nimport {ChangeBreadcrumb} from './ChangeBreadcrumb'\nimport {ChangeResolver} from './ChangeResolver'\nimport {ChangeListWrapper, GroupChangeContainer} from './GroupChange.styled'\nimport {RevertChangesButton} from './RevertChangesButton'\n\n/** @internal */\nexport function GroupChange(\n  props: {\n    change: GroupChangeNode\n    readOnly?: boolean\n    hidden?: boolean\n  } & HTMLAttributes<HTMLDivElement>,\n): React.JSX.Element | null {\n  const {change: group, readOnly, hidden, ...restProps} = props\n  const {titlePath, changes, path: groupPath} = group\n  const {path: diffPath} = useContext(DiffContext)\n  const {documentId, schemaType, FieldWrapper, rootDiff, isComparingCurrent} = useDocumentChange()\n  const {t} = useTranslation()\n\n  const isPortableText = changes.every(\n    (change) => isFieldChange(change) && isPTSchemaType(change.schemaType),\n  )\n\n  const isNestedInDiff = pathsAreEqual(diffPath, groupPath)\n  const [revertButtonRef, isRevertButtonHovered] = useHover<HTMLButtonElement>()\n\n  const docOperations = useDocumentOperation(documentId, schemaType.name) as FieldOperationsAPI\n  const [confirmRevertOpen, setConfirmRevertOpen] = useState(false)\n  const popoverRef = useRef<HTMLDivElement | null>(null)\n\n  const [permissions, isPermissionsLoading] = useDocumentPairPermissions({\n    id: documentId,\n    type: schemaType.name,\n    permission: 'update',\n  })\n\n  const handleRevertChanges = useCallback(\n    () => undoChange(group, rootDiff, docOperations),\n    [group, rootDiff, docOperations],\n  )\n\n  const handleRevertChangesConfirm = useCallback(() => {\n    setConfirmRevertOpen(true)\n  }, [])\n\n  const closeRevertChangesConfirmDialog = useCallback(() => {\n    setConfirmRevertOpen(false)\n  }, [])\n\n  useClickOutsideEvent(\n    () => setConfirmRevertOpen(false),\n    () => [popoverRef.current],\n  )\n\n  const content = useMemo(\n    () =>\n      hidden ? null : (\n        <Stack\n          space={1}\n          as={GroupChangeContainer}\n          data-ui=\"group-change-content\"\n          data-revert-group-hover={isRevertButtonHovered ? '' : undefined}\n          data-portable-text={isPortableText ? '' : undefined}\n        >\n          <Stack as={ChangeListWrapper} space={5} data-ui=\"group-change-list\">\n            {changes.map((change) => (\n              <ChangeResolver\n                key={change.key}\n                change={change}\n                readOnly={readOnly}\n                hidden={hidden}\n              />\n            ))}\n          </Stack>\n          {isComparingCurrent && !isPermissionsLoading && permissions?.granted && (\n            <Popover\n              content={\n                <Stack space={3}>\n                  <Box paddingY={3}>\n                    <Text size={1}>\n                      {t('changes.action.revert-changes-description', {count: changes.length})}\n                    </Text>\n                  </Box>\n                  <Flex gap={3} justify=\"flex-end\">\n                    <Button\n                      mode=\"ghost\"\n                      onClick={closeRevertChangesConfirmDialog}\n                      text={t('changes.action.revert-all-cancel')}\n                    />\n                    <Button\n                      tone=\"critical\"\n                      onClick={handleRevertChanges}\n                      text={t('changes.action.revert-changes-confirm-change', {count: 1})}\n                    />\n                  </Flex>\n                </Stack>\n              }\n              padding={3}\n              portal\n              placement=\"left\"\n              open={confirmRevertOpen}\n              ref={popoverRef}\n            >\n              <Box>\n                <RevertChangesButton\n                  changeCount={changes.length}\n                  onClick={handleRevertChangesConfirm}\n                  ref={revertButtonRef}\n                  selected={confirmRevertOpen}\n                  disabled={readOnly}\n                  data-testid={`group-change-revert-button-${group.fieldsetName}`}\n                />\n              </Box>\n            </Popover>\n          )}\n        </Stack>\n      ),\n    [\n      changes,\n      closeRevertChangesConfirmDialog,\n      confirmRevertOpen,\n      group.fieldsetName,\n      handleRevertChanges,\n      handleRevertChangesConfirm,\n      hidden,\n      isComparingCurrent,\n      isPermissionsLoading,\n      isPortableText,\n      isRevertButtonHovered,\n      permissions?.granted,\n      readOnly,\n      revertButtonRef,\n      t,\n    ],\n  )\n\n  return hidden ? null : (\n    <Stack space={1} {...restProps}>\n      <ChangeBreadcrumb titlePath={titlePath} />\n      {isNestedInDiff || !FieldWrapper ? (\n        content\n      ) : (\n        <FieldWrapper hasHover={isRevertButtonHovered} path={group.path}>\n          {content}\n        </FieldWrapper>\n      )}\n    </Stack>\n  )\n}\n","import {type ConditionalProperty, type SanityDocument} from '@sanity/types'\nimport {Text} from '@sanity/ui'\n\nimport {unstable_useConditionalProperty as useConditionalProperty} from '../../conditional-property'\nimport {type ChangeNode} from '../../types'\nimport {useDocumentChange} from '../hooks'\nimport {FieldChange} from './FieldChange'\nimport {GroupChange} from './GroupChange'\n\n/** @internal */\nexport interface ChangeResolverProps {\n  change: ChangeNode\n  readOnly?: ConditionalProperty\n  hidden?: ConditionalProperty\n}\n\n/** @internal */\nexport function ChangeResolver(props: ChangeResolverProps) {\n  const {change, hidden, readOnly} = props\n  const {value} = useDocumentChange()\n\n  const isHidden = useConditionalProperty({\n    // @todo: is parent missing here?\n    document: value as SanityDocument,\n    checkProperty: hidden || change.schemaType?.hidden,\n    checkPropertyKey: 'hidden',\n    value: change.type === 'field' ? change.diff.toValue : undefined,\n  })\n\n  const isReadOnly = useConditionalProperty({\n    // @todo: is parent missing here?\n    document: value as SanityDocument,\n    checkProperty: readOnly || change.schemaType?.readOnly,\n    checkPropertyKey: 'readOnly',\n    value: change.type === 'field' ? change.diff.toValue : undefined,\n  })\n\n  if (isHidden) return null\n\n  if (change.type === 'field') {\n    return <FieldChange change={change} readOnly={isReadOnly} />\n  }\n\n  if (change.type === 'group') {\n    return (\n      <GroupChange\n        change={change}\n        data-testid={`group-change-${change.fieldsetName}`}\n        readOnly={isReadOnly}\n      />\n    )\n  }\n\n  return (\n    // eslint-disable-next-line i18next/no-literal-string\n    <Text>\n      Unknown change type: <code>{(change as any).type || 'undefined'}</code>\n    </Text>\n  )\n}\n","import {Stack, Text} from '@sanity/ui'\n\nimport {useTranslation} from '../../../i18n'\n\n/** @internal */\nexport function NoChanges() {\n  const {t} = useTranslation()\n  return (\n    <Stack space={3} paddingTop={2}>\n      <Text size={1} weight=\"medium\" as=\"h3\">\n        {t('changes.no-changes-title')}\n      </Text>\n      <Text as=\"p\" size={1} muted>\n        {t('changes.no-changes-description')}\n      </Text>\n    </Stack>\n  )\n}\n","import {type SanityDocument} from '@sanity/client'\nimport {RevertIcon} from '@sanity/icons'\nimport {type ObjectSchemaType} from '@sanity/types'\nimport {Box, Card, Flex, Stack, Text, useClickOutsideEvent} from '@sanity/ui'\nimport {useCallback, useContext, useMemo, useRef, useState} from 'react'\nimport {DiffContext} from 'sanity/_singletons'\n\nimport {Button, Popover} from '../../../../ui-components'\nimport {useDocumentOperation} from '../../../hooks'\nimport {useTranslation} from '../../../i18n'\nimport {useDocumentPairPermissions} from '../../../store'\nimport {unstable_useConditionalProperty as useConditionalProperty} from '../../conditional-property'\nimport {type ChangeNode, type FieldOperationsAPI, type ObjectDiff} from '../../types'\nimport {buildObjectChangeList} from '../changes/buildChangeList'\nimport {undoChange} from '../changes/undoChange'\nimport {useDocumentChange} from '../hooks/useDocumentChange'\nimport {ChangeListWrapper} from './ChangeList.styled'\nimport {ChangeResolver} from './ChangeResolver'\nimport {NoChanges} from './NoChanges'\n\n/** @internal */\nexport interface ChangeListProps {\n  schemaType: ObjectSchemaType\n  diff: ObjectDiff\n  fields?: string[]\n}\n\n/** @internal */\nexport function ChangeList({diff, fields, schemaType}: ChangeListProps): React.JSX.Element | null {\n  const {documentId, isComparingCurrent, value} = useDocumentChange()\n  const docOperations = useDocumentOperation(documentId, schemaType.name) as FieldOperationsAPI\n  const {path} = useContext(DiffContext)\n  const isRoot = path.length === 0\n  const [confirmRevertAllOpen, setConfirmRevertAllOpen] = useState(false)\n  const [confirmRevertAllHover, setConfirmRevertAllHover] = useState(false)\n  const {t} = useTranslation()\n\n  const isReadOnly = useConditionalProperty({\n    document: value as SanityDocument,\n    value: undefined,\n    checkProperty: schemaType.readOnly,\n    checkPropertyKey: 'readOnly',\n  })\n\n  if (schemaType.jsonType !== 'object') {\n    throw new Error(`Only object schema types are allowed in ChangeList`)\n  }\n\n  const [permissions, isPermissionsLoading] = useDocumentPairPermissions({\n    id: documentId,\n    type: schemaType.name,\n    permission: 'update',\n  })\n\n  const allChanges = useMemo(\n    () => buildObjectChangeList(schemaType, diff, path, [], {fieldFilter: fields}),\n    [schemaType, fields, path, diff],\n  )\n\n  const changes = useMemo(\n    () => (fields && fields.length === 0 ? [] : maybeFlatten(allChanges)),\n    [allChanges, fields],\n  )\n\n  const rootChange = allChanges[0]\n\n  const revertAllChanges = useCallback(() => {\n    undoChange(rootChange, diff, docOperations)\n    setConfirmRevertAllOpen(false)\n  }, [rootChange, diff, docOperations])\n\n  const handleRevertAllChangesClick = useCallback(() => {\n    setConfirmRevertAllOpen(true)\n  }, [])\n\n  const handleRevertAllChangesMouseEnter = useCallback(() => {\n    setConfirmRevertAllHover(true)\n  }, [])\n\n  const handleRevertAllChangesMouseLeave = useCallback(() => {\n    setConfirmRevertAllHover(false)\n  }, [])\n\n  const closeRevertAllChangesConfirmDialog = useCallback(() => {\n    setConfirmRevertAllOpen(false)\n  }, [])\n\n  const revertAllContainerElementRef = useRef<HTMLDivElement | null>(null)\n\n  useClickOutsideEvent(\n    () => setConfirmRevertAllOpen(false),\n    () => [revertAllContainerElementRef.current],\n  )\n\n  if (changes.length === 0) {\n    return isRoot ? <NoChanges /> : null\n  }\n\n  const showFooter = isRoot && changes.length > 1\n\n  return (\n    <Card>\n      <Stack space={5}>\n        <Stack as={ChangeListWrapper} space={5}>\n          {changes.map((change) => (\n            <div key={change.key}>\n              <ChangeResolver\n                change={change}\n                key={change.key}\n                data-revert-all-changes-hover={confirmRevertAllHover ? '' : undefined}\n                readOnly={isReadOnly || change?.readOnly}\n                hidden={change?.hidden}\n              />\n            </div>\n          ))}\n        </Stack>\n\n        {showFooter && isComparingCurrent && !isPermissionsLoading && permissions?.granted && (\n          <Popover\n            content={\n              <Stack space={3}>\n                <Box paddingY={3}>\n                  <Text size={1}>\n                    {t('changes.action.revert-all-description', {\n                      count: changes.length,\n                    })}\n                  </Text>\n                </Box>\n                <Flex gap={3} justify=\"flex-end\">\n                  <Button\n                    mode=\"ghost\"\n                    text={t('changes.action.revert-all-cancel')}\n                    onClick={closeRevertAllChangesConfirmDialog}\n                  />\n                  <Button\n                    tone=\"critical\"\n                    text={t('changes.action.revert-all-confirm')}\n                    onClick={revertAllChanges}\n                  />\n                </Flex>\n              </Stack>\n            }\n            open={confirmRevertAllOpen}\n            padding={3}\n            placement={'left'}\n            portal\n            ref={revertAllContainerElementRef}\n          >\n            <Stack>\n              <Button\n                tone=\"critical\"\n                mode=\"ghost\"\n                text={t('changes.action.revert-all-confirm')}\n                icon={RevertIcon}\n                onClick={handleRevertAllChangesClick}\n                onMouseEnter={handleRevertAllChangesMouseEnter}\n                onMouseLeave={handleRevertAllChangesMouseLeave}\n                disabled={isReadOnly}\n                size=\"large\"\n              />\n            </Stack>\n          </Popover>\n        )}\n      </Stack>\n    </Card>\n  )\n}\n\nfunction maybeFlatten(changes: ChangeNode[]) {\n  return changes.length === 1 && changes[0].type === 'group' && changes[0].path.length === 0\n    ? changes[0].changes\n    : changes\n}\n","import {Card, Stack, Text} from '@sanity/ui'\n\nimport {useTranslation} from '../../../i18n'\n\n/**\n * @internal\n * */\nexport function ChangesError() {\n  const {t} = useTranslation()\n  return (\n    <Card tone=\"caution\" padding={3}>\n      <Stack space={3}>\n        <Text size={1} weight=\"medium\" as=\"h3\">\n          {t('changes.error-title')}\n        </Text>\n        <Text as=\"p\" size={1} muted>\n          {t('changes.error-description')}\n        </Text>\n      </Stack>\n    </Card>\n  )\n}\n","import {Card, rem, Text} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {useTranslation} from '../../../i18n'\nimport {type StringDiff, type StringDiffSegment} from '../../types'\nimport {DiffCard} from './DiffCard'\n\nconst RoundedCard = styled.span`\n  border-radius: ${({theme}) => rem(theme.sanity.radius[1])};\n`\n\nconst ChangeSegment = styled(Text)`\n  &:not([hidden]) {\n    display: inline;\n    line-height: calc(1.25em + 2px);\n  }\n\n  &:hover {\n    background-color: none !important;\n    background-image: linear-gradient(\n      to bottom,\n      var(--card-bg-color) 0,\n      var(--card-bg-color) 33.333%,\n      currentColor 33.333%,\n      currentColor 100%\n    );\n    background-size: 1px 3px;\n    background-repeat: repeat-x;\n    background-position-y: bottom;\n    padding-bottom: 3px;\n    box-shadow: 0 0 0 1px var(--card-bg-color);\n    z-index: 1;\n  }\n`\n\n/** @internal */\nexport function DiffStringSegment(props: {segment: StringDiffSegment}): React.JSX.Element {\n  const {segment} = props\n  const {text} = segment\n  const {t} = useTranslation()\n\n  if (segment.action === 'added') {\n    return (\n      <DiffCard\n        annotation={segment.annotation}\n        disableHoverEffect\n        tooltip={{description: t('changes.added-label')}}\n        as={RoundedCard}\n      >\n        <ChangeSegment as=\"ins\" style={{textDecoration: 'none'}}>\n          {text}\n        </ChangeSegment>\n      </DiffCard>\n    )\n  }\n\n  if (segment.action === 'removed') {\n    return (\n      <DiffCard\n        annotation={segment.annotation}\n        as={RoundedCard}\n        disableHoverEffect\n        tooltip={{description: t('changes.removed-label')}}\n      >\n        <ChangeSegment as=\"del\">{text}</ChangeSegment>\n      </DiffCard>\n    )\n  }\n\n  return (\n    <Card as=\"span\" radius={2} style={{display: 'inline'}}>\n      {text}\n    </Card>\n  )\n}\n\n/** @internal */\nexport function DiffString(props: {diff: StringDiff}) {\n  const {diff} = props\n\n  return (\n    <>\n      {(diff.segments || []).map((segment, segmentIndex) => (\n        <DiffStringSegment\n          // eslint-disable-next-line react/no-array-index-key\n          key={segmentIndex}\n          segment={segment}\n        />\n      ))}\n    </>\n  )\n}\n","import {Box, Flex, Stack, Text} from '@sanity/ui'\nimport {type ComponentType, type ReactNode} from 'react'\nimport {styled} from 'styled-components'\n\n/** @internal */\nexport interface MetaInfoProps {\n  title: string\n  action?: string\n  icon?: ComponentType\n  children?: ReactNode\n  markRemoved?: boolean\n}\n\nconst MetaText = styled(Text)`\n  color: inherit;\n`\n\n/** @internal */\nexport function MetaInfo(props: MetaInfoProps) {\n  const {title, action, icon: Icon, children, markRemoved} = props\n\n  return (\n    <Flex padding={2} align=\"center\">\n      {Icon && (\n        <Box padding={2}>\n          <MetaText size={4} forwardedAs={markRemoved ? 'del' : 'div'}>\n            <Icon />\n          </MetaText>\n        </Box>\n      )}\n\n      <Stack space={2} paddingLeft={2}>\n        <MetaText\n          size={1}\n          weight=\"medium\"\n          forwardedAs={markRemoved ? 'del' : 'h3'}\n          textOverflow=\"ellipsis\"\n        >\n          {title}\n        </MetaText>\n\n        {action && <div>{action}</div>}\n\n        <MetaText size={0} textOverflow=\"ellipsis\">\n          {children}\n        </MetaText>\n      </Stack>\n    </Flex>\n  )\n}\n","import {isKeyedObject} from '@sanity/types'\n\nexport function isEqual(item: unknown, otherItem: unknown): boolean {\n  if (item === otherItem) {\n    return true\n  }\n\n  if (typeof item !== typeof otherItem) {\n    return false\n  }\n\n  if (typeof item !== 'object' && !Array.isArray(item)) {\n    return item === otherItem\n  }\n\n  if (isKeyedObject(item) && isKeyedObject(otherItem) && item._key === otherItem._key) {\n    return true\n  }\n\n  if (Array.isArray(item) && Array.isArray(otherItem)) {\n    if (item.length !== otherItem.length) {\n      return false\n    }\n\n    return item.every((child, i) => isEqual(child, otherItem[i]))\n  }\n\n  if (item === null || otherItem === null) {\n    return item === otherItem\n  }\n\n  const obj = item as Record<string, unknown>\n  const otherObj = otherItem as Record<string, unknown>\n\n  const keys = Object.keys(obj)\n  const otherKeys = Object.keys(otherObj)\n  if (keys.length !== otherKeys.length) {\n    return false\n  }\n\n  return keys.every((keyName) => isEqual(obj[keyName], otherObj[keyName]))\n}\n","import {type ArraySchemaType, isKeyedObject, type SchemaType, type TypedObject} from '@sanity/types'\nimport {Box, Flex} from '@sanity/ui'\n\nimport {useTranslation} from '../../../../i18n'\nimport {Preview} from '../../../../preview/components/Preview'\nimport {useUserColorManager} from '../../../../user-color'\nimport {DiffTooltip, FromToArrow, getAnnotationColor} from '../../../diff'\nimport {\n  type Annotation,\n  type ArrayDiff,\n  type Diff,\n  type DiffComponent,\n  type ItemDiff,\n} from '../../../types'\nimport {Checkbox} from '../../boolean/preview'\nimport {isEqual} from '../util/arrayUtils'\n\ninterface NamedListOption {\n  title?: string\n  value: unknown\n}\n\ninterface NormalizedListOption {\n  title?: string\n  value: unknown\n  memberType?: Exclude<SchemaType, ArraySchemaType>\n  isPresent: boolean\n  annotation: Annotation\n  itemIndex: number\n}\n\nexport const ArrayOfOptionsFieldDiff: DiffComponent<ArrayDiff> = ({diff, schemaType}) => {\n  const options = schemaType.options?.list\n  const colorManager = useUserColorManager()\n  const {t} = useTranslation()\n  if (!Array.isArray(options)) {\n    // Shouldn't happen, because the resolver should only resolve here if it does\n    return null\n  }\n\n  return (\n    <div>\n      {diff.items\n        .map((item) => normalizeItems(item, diff, schemaType))\n        .filter((item): item is NormalizedListOption => item !== null)\n        .sort(sortItems)\n        .map((item, index) => {\n          const {annotation, isPresent, value, memberType, title} = item\n          const color = getAnnotationColor(colorManager, annotation)\n          const action = isPresent ? t('changes.added-label') : t('changes.removed-label')\n          return (\n            <Flex align=\"center\" key={getItemKey(diff, index)}>\n              <DiffTooltip annotations={annotation ? [annotation] : []} description={action}>\n                <Flex align=\"center\">\n                  <Checkbox checked={!isPresent} color={color} />\n                  <Box margin={2}>\n                    <FromToArrow />\n                  </Box>\n                  <Checkbox checked={isPresent} color={color} />\n                </Flex>\n              </DiffTooltip>\n              <Flex align=\"center\">\n                <ItemPreview value={title || value} memberType={memberType} />\n              </Flex>\n            </Flex>\n          )\n        })}\n    </div>\n  )\n}\n\nfunction normalizeItems(\n  item: ItemDiff,\n  parentDiff: ArrayDiff,\n  schemaType: ArraySchemaType,\n): NormalizedListOption | null {\n  if (item.diff.action === 'unchanged') {\n    return null\n  }\n\n  const {fromValue, toValue} = parentDiff\n  const value = getValue(item.diff)\n  const wasPresent = isInArray(value, fromValue)\n  const isPresent = isInArray(value, toValue)\n  if (wasPresent === isPresent) {\n    return null\n  }\n\n  return {\n    title: getItemTitle(value, schemaType),\n    memberType: resolveMemberType(getValue(item.diff), schemaType),\n    itemIndex: getOptionIndex(value, schemaType),\n    annotation: item.annotation,\n    isPresent,\n    value,\n  }\n}\n\nfunction sortItems(itemA: NormalizedListOption, itemB: NormalizedListOption): number {\n  return itemA.itemIndex - itemB.itemIndex\n}\n\nfunction ItemPreview({value, memberType}: {memberType?: SchemaType; value: unknown}) {\n  return (\n    <Box marginX={2} marginY={1}>\n      {typeof value === 'string' || typeof value === 'number' ? (\n        value\n      ) : (\n        <Preview schemaType={memberType!} value={value as any} layout=\"default\" />\n      )}\n    </Box>\n  )\n}\n\nfunction isInArray(value: unknown, parent?: unknown[] | null): boolean {\n  const array = parent || []\n  return typeof value === 'object' && value !== null\n    ? array.some((item) => isEqual(item, value))\n    : array.includes(value)\n}\n\nfunction getItemKey(diff: Diff, index: number): string | number {\n  const value = diff.toValue || diff.fromValue\n  return isKeyedObject(value) ? value._key : index\n}\n\nfunction getValue(diff: Diff) {\n  return typeof diff.toValue === 'undefined' ? diff.fromValue : diff.toValue\n}\n\nfunction resolveMemberType(item: unknown, schemaType: ArraySchemaType) {\n  const itemTypeName = resolveTypeName(item)\n  return schemaType.of.find((memberType) => memberType.name === itemTypeName)\n}\n\nfunction resolveTypeName(value: unknown): string {\n  const jsType = resolveJSType(value)\n  if (jsType !== 'object') {\n    return jsType\n  }\n\n  const obj = value as TypedObject\n  return ('_type' in obj && obj._type) || jsType\n}\n\nfunction resolveJSType(val: unknown) {\n  if (val === null) {\n    return 'null'\n  }\n\n  if (Array.isArray(val)) {\n    return 'array'\n  }\n\n  return typeof val\n}\n\nfunction isNamedOption(item: unknown | NamedListOption): item is NamedListOption {\n  return typeof item === 'object' && item !== null && 'title' in item\n}\n\nfunction getOptionIndex(item: unknown, schemaType: ArraySchemaType): number {\n  const list = schemaType.options?.list || []\n  return list.findIndex((opt) => isEqual(isNamedOption(opt) ? opt.value : opt, item))\n}\n\nfunction getItemTitle(item: unknown, schemaType: ArraySchemaType): string | undefined {\n  const list = (schemaType.options?.list || []) as NamedListOption[]\n  const index = getOptionIndex(item, schemaType)\n  return index === -1 ? undefined : list[index].title || undefined\n}\n","import {type Slug} from '@sanity/types'\nimport {Box} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {type FieldPreviewComponent} from '../../../preview'\n\nconst SlugWrapper = styled.div`\n  display: inline-block;\n  word-break: break-all;\n  white-space: pre-wrap;\n`\n\nexport const SlugPreview: FieldPreviewComponent<Slug> = (props) => {\n  const {value} = props\n\n  return (\n    <Box as={SlugWrapper} paddingX={2} paddingY={1}>\n      {value.current}\n    </Box>\n  )\n}\n","import {DiffFromTo} from '../../../diff'\nimport {type DiffComponent, type ObjectDiff} from '../../../types'\nimport {SlugPreview} from '../preview'\n\ninterface Slug {\n  current?: string\n}\n\nexport const SlugFieldDiff: DiffComponent<ObjectDiff<Slug>> = ({diff, schemaType}) => {\n  return (\n    <DiffFromTo\n      layout=\"inline\"\n      diff={diff}\n      schemaType={schemaType}\n      previewComponent={SlugPreview}\n    />\n  )\n}\n","import {DiffFromTo} from '../../../diff'\nimport {type DiffComponent, type StringDiff} from '../../../types'\nimport {StringPreview} from '../../string/preview'\n\nexport const UrlFieldDiff: DiffComponent<StringDiff> = ({diff, schemaType}) => {\n  return <DiffFromTo diff={diff} schemaType={schemaType} previewComponent={StringPreview} />\n}\n","import {type DiffComponentResolver} from '../../types'\nimport {ArrayOfOptionsFieldDiff} from '../../types/array/diff'\nimport {DatetimeFieldDiff} from '../../types/datetime/diff'\nimport {SlugFieldDiff} from '../../types/slug/diff'\nimport {UrlFieldDiff} from '../../types/url/diff'\n\n/** @internal */\nexport const diffResolver: DiffComponentResolver = ({schemaType}) => {\n  // datetime or date\n  if (['datetime', 'date'].includes(schemaType.name)) {\n    return DatetimeFieldDiff\n  }\n\n  if (schemaType.name === 'url') {\n    return UrlFieldDiff\n  }\n\n  if (schemaType.name === 'slug') {\n    return SlugFieldDiff\n  }\n\n  if (schemaType.jsonType === 'array' && Array.isArray(schemaType.options?.list)) {\n    return ArrayOfOptionsFieldDiff\n  }\n\n  return undefined\n}\n","import {type Path} from '@sanity/types'\nimport {type ReactNode, useCallback, useContext, useEffect, useRef} from 'react'\nimport {GetFormValueContext} from 'sanity/_singletons'\n\nimport {getValueAtPath} from '../../field'\nimport {type FormDocumentValue} from '../types'\n\n/**\n *\n * @internal\n * @hidden\n */\nexport const GetFormValueProvider = function GetFormValueProvider(props: {\n  value: FormDocumentValue | undefined\n  children: ReactNode\n}) {\n  const valueRef = useRef(props.value)\n  useEffect(() => {\n    valueRef.current = props.value\n  }, [props.value])\n\n  const getValue = useCallback((path: Path) => getValueAtPath(valueRef.current, path), [valueRef])\n  return (\n    <GetFormValueContext.Provider value={getValue}>{props.children}</GetFormValueContext.Provider>\n  )\n}\nGetFormValueProvider.displayName = 'GetFormValueProvider'\n\n/**\n * React hook that returns a function that can be called to look up the value from the current document at the given path.\n * The returned function is stable and never changes identity.\n * NOTE: This hook will *not* trigger a re-render when the value of the document changes, which makes it less suitable for use in render functions.\n * The main use case for using this is to look up values at the current document during an event handler\n * @public\n *\n * @returns A function that can be called to look up the value from the current document at the given path.\n *\n * @example Using the `useGetFormValue` hook\n * ```ts\n * function MyComponent() {\n *    // get value of field 'name' in object 'author'\n *    const getFormValue = useGetFormValue()\n *\n *    const handleClick = useCallback(() => {\n *      console.log(getFormValue(['author', 'name']))\n *    }, [getFormValue])\n * }\n * ```\n */\n\nexport function useGetFormValue() {\n  const ctx = useContext(GetFormValueContext)\n  if (!ctx) {\n    throw new Error('useGetFormValue must be used within a GetFormValueProvider')\n  }\n  return ctx\n}\n","import {CopyIcon} from '@sanity/icons'\nimport {useCallback} from 'react'\n\nimport {defineDocumentFieldAction} from '../../../config/document/fieldActions/define'\nimport {useTranslation} from '../../../i18n'\nimport {useCopyPaste} from '../../../studio'\nimport {useGetFormValue} from '../../contexts/GetFormValue'\nimport {type FormDocumentValue} from '../../types/formDocumentValue'\nimport {defineActionItem} from './define'\n\nexport const copyAction = defineDocumentFieldAction({\n  name: 'copyField',\n  useAction({path}) {\n    const getFormValue = useGetFormValue()\n    const {onCopy} = useCopyPaste()\n    const {t} = useTranslation('copy-paste')\n\n    const isDocument = path.length === 0\n\n    const documentTitle = t('copy-paste.field-action-copy-button.document.title')\n    const fieldTitle = t('copy-paste.field-action-copy-button.field.title')\n    const title = isDocument ? documentTitle : fieldTitle\n\n    const onAction = useCallback(() => {\n      const value = getFormValue([]) as FormDocumentValue\n\n      onCopy(path, value, {\n        context: {source: isDocument ? 'documentFieldAction' : 'fieldAction'},\n      })\n    }, [path, isDocument, onCopy, getFormValue])\n\n    return defineActionItem({\n      type: 'action',\n      icon: CopyIcon,\n      onAction,\n      title,\n    })\n  },\n})\n","import {ClipboardIcon} from '@sanity/icons'\nimport {useCallback} from 'react'\n\nimport {defineDocumentFieldAction} from '../../../config/document/fieldActions/define'\nimport {useTranslation} from '../../../i18n'\nimport {useCopyPaste} from '../../../studio'\nimport {useGetFormValue} from '../../contexts/GetFormValue'\nimport {type FormDocumentValue} from '../../types/formDocumentValue'\nimport {defineActionItem} from './define'\n\nexport const pasteAction = defineDocumentFieldAction({\n  name: 'pasteField',\n  useAction({path}) {\n    const {t} = useTranslation('copy-paste')\n    const getFormValue = useGetFormValue()\n\n    const isDocument = path.length === 0\n\n    const documentTitle = t('copy-paste.field-action-paste-button.document.title')\n    const fieldTitle = t('copy-paste.field-action-paste-button.field.title')\n    const title = isDocument ? documentTitle : fieldTitle\n\n    const {onPaste} = useCopyPaste()\n\n    const onAction = useCallback(() => {\n      const value = getFormValue([]) as FormDocumentValue\n      onPaste(path, value, {\n        context: {source: isDocument ? 'documentFieldAction' : 'fieldAction'},\n      })\n    }, [getFormValue, onPaste, path, isDocument])\n\n    return defineActionItem({\n      type: 'action',\n      icon: ClipboardIcon,\n      onAction,\n      title,\n    })\n  },\n})\n","import {type ConfigPropertyReducer} from '../../types'\nimport {type DocumentFieldAction, type DocumentFieldActionsResolverContext} from './types'\n\n/** @internal */\nexport const documentFieldActionsReducer: ConfigPropertyReducer<\n  DocumentFieldAction[],\n  DocumentFieldActionsResolverContext\n> = (prev, {document}, context) => {\n  const documentFieldActions = document?.unstable_fieldActions\n  if (!documentFieldActions) return prev\n\n  if (typeof documentFieldActions === 'function') return documentFieldActions(prev, context)\n  if (Array.isArray(documentFieldActions)) return [...prev, ...documentFieldActions]\n\n  throw new Error(\n    `Expected \\`document.unstable_fieldActions\\` to be an array or a function, but received ${typeof documentFieldActions}`,\n  )\n}\n","import {copyAction} from '../../../form/field/actions/copyAction'\nimport {pasteAction} from '../../../form/field/actions/pasteAction'\nimport {type DocumentFieldAction} from './types'\n\nexport * from './define'\nexport * from './reducer'\nexport * from './types'\n\n/** @internal */\nexport const initialDocumentFieldActions: DocumentFieldAction[] = [copyAction, pasteAction]\n","import {type ButtonTone} from '@sanity/ui'\nimport {type ComponentType} from 'react'\n\n/** @hidden @beta */\nexport interface DocumentInspectorProps {\n  documentId: string\n  documentType: string\n  onClose: () => void\n}\n\n/** @hidden @beta */\nexport type DocumentInspectorComponent = ComponentType<DocumentInspectorProps>\n\n/** @hidden @beta */\nexport interface DocumentInspectorUseMenuItemProps {\n  documentId: string\n  documentType: string\n}\n\n/** @hidden @beta */\nexport interface DocumentInspectorMenuItem {\n  hidden?: boolean\n  hotkeys?: string[]\n  icon?: ComponentType\n  showAsAction?: boolean\n  status?: ButtonTone\n  title: string\n  tone?: ButtonTone\n}\n\n/** @hidden @beta */\nexport interface DocumentInspector {\n  name: string\n  component: DocumentInspectorComponent\n  /**\n   * Hook for defining a menu item for the inspector.\n   */\n  useMenuItem?: (props: DocumentInspectorUseMenuItemProps) => DocumentInspectorMenuItem\n\n  /**\n   * Callback for when the inspector is closed, which can be used to clean up custom document pane\n   * parameters.\n   */\n  onClose?: (ctx: {params: Record<string, string | undefined>}) => {\n    params: Record<string, string | undefined>\n  }\n\n  /**\n   * Callback for when the inspector is opened, which can be used to set custom document pane\n   * parameters.\n   */\n  onOpen?: (ctx: {params: Record<string, string | undefined>}) => {\n    params: Record<string, string | undefined>\n  }\n}\n\n/**\n * Define a document inspector to be used in Sanity configuration.\n *\n * @example\n *\n * ```ts\n * // sanity.config.ts\n *\n * import {RocketIcon} from '@sanity/icons'\n * import {defineConfig, defineDocumentInspector} from 'sanity'\n *\n * const customInspector = defineDocumentInspector({\n *   name: 'custom',\n *   useMenuItem: () => ({\n *     icon: RocketIcon,\n *     showAsAction: true,\n *     title: 'Custom'\n *   }),\n *   component: lazy(() => import('./inspectors/custom')),\n * })\n *\n * export default defineConfig({\n *   // ...\n *\n *   document: {\n *     inspectors: (prev) => [customInspector, ...prev],\n *   },\n * })\n * ```\n *\n * @hidden @beta\n * */\nexport function defineDocumentInspector(inspector: DocumentInspector): DocumentInspector {\n  return inspector\n}\n","import {useToast} from '@sanity/ui'\nimport {useEffect} from 'react'\n\nimport {definePlugin, type LayoutProps} from '../config'\n\nfunction SchedulePublishingStudioLayout(props: LayoutProps) {\n  const toast = useToast()\n  useEffect(() => {\n    console.error(\n      `Scheduled publishing plugin is added by default, please remove this plugin from your config. \n        \\nIf you have a custom date config, you can use the scheduledPublishing API to customize the date input.\n        \\nSee: https://www.sanity.io/docs/scheduled-publishing.\n        `,\n    )\n    toast.push({\n      id: 'scheduled-publishing-deprecated',\n      closable: true,\n      duration: 60000,\n      status: 'error',\n      title: 'Scheduled publishing plugin is deprecated',\n      description:\n        'The scheduled publishing plugin is now deprecated, you should remove the plugin from your configuration. If you have a custom date config, you can use the scheduledPublishing API to customize the date input. See: https://www.sanity.io/docs/scheduled-publishing.',\n    })\n  }, [toast])\n\n  return props.renderDefault(props)\n}\n\n/**\n * Shows an error in console and a toast to prevent users from importing the deprecated plugin.\n * Gives information about how to upgrade to the new version.\n */\nexport const deprecatedScheduledPublishingPlugin = definePlugin({\n  name: 'sanity/deprecated/scheduled-publishing',\n  studio: {\n    components: {\n      layout: SchedulePublishingStudioLayout,\n    },\n  },\n})\n","import {deprecatedScheduledPublishingPlugin} from '../deprecatedPlugins/DeprecatedScheduledPublishing'\nimport {type PluginOptions} from './types'\n\nconst DEPRECATED_PLUGINS = [\n  // Scheduled publishing is added by default, we are filtering to avoid duplicates\n  'scheduled-publishing',\n]\n\n/**\n * @internal\n *\n * This function flattens the config tree into a list of configs in the order they should be applied.\n */\nexport const flattenConfig = (\n  {plugins = [], ...currentConfig}: PluginOptions,\n  path: string[],\n): Array<{config: PluginOptions; path: string[]}> => {\n  // The APIs used at the root config level\n  const rootConfig = {config: currentConfig, path: [...path, currentConfig.name]}\n\n  // An array with the APIs used in plugins\n  const allPlugins = plugins.flatMap((plugin) =>\n    flattenConfig(plugin, [...path, currentConfig.name]),\n  )\n\n  const deprecatedScheduledPublishing = allPlugins.find(\n    (p) => p.config.name === 'scheduled-publishing',\n  )\n  if (deprecatedScheduledPublishing) {\n    // Add the deprecated plugin error to the plugins list, to show the error to users.\n    allPlugins.push({\n      path: deprecatedScheduledPublishing.path,\n      config: deprecatedScheduledPublishingPlugin(),\n    })\n  }\n\n  const resolved = [\n    ...allPlugins.filter((plugin) => !DEPRECATED_PLUGINS.includes(plugin.config.name)),\n    rootConfig,\n  ]\n\n  return resolved\n}\n","import {type SanityDocument} from '@sanity/types'\nimport {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {map, startWith} from 'rxjs/operators'\n\nimport {useDocumentStore} from '../store'\n\ninterface ReferringDocumentsState<Doc> {\n  isLoading: boolean\n  referringDocuments: Doc[]\n}\n/** @beta */\nexport type DocumentField = Exclude<keyof SanityDocument, number>\n\nconst INITIAL_STATE: ReferringDocumentsState<never> = {referringDocuments: [], isLoading: true}\nconst DEFAULT_FIELDS: DocumentField[] = ['_id', '_type']\n\n/**\n * @beta\n * Subscribe to a live-updating list document referring to the document of the passed ID\n * A new list of document will be emitted every time a document refers or no longer refers to the document of the given ID\n *\n * ## Gotcha\n * The returned list of referring documents is not extensive, will only return the 101 first documents.\n *\n * ## Gotcha\n * For every component that calls this hook, a new listener connection will be made to the backed.\n *\n * Make sure call this hook sparingly\n * @param id - id of document to search for referring documents for\n * @param fields - which fields to return for each document (defaults to _id and _type). Pass an empty array to return full documents\n */\nexport function useReferringDocuments<DocumentType extends SanityDocument>(\n  id: string,\n  fields: DocumentField[] = DEFAULT_FIELDS,\n) {\n  const documentStore = useDocumentStore()\n\n  const projection = useMemo(() => {\n    return fields.length === 0 ? '' : fields.join(',')\n  }, [fields])\n\n  const observable = useMemo(\n    () =>\n      documentStore\n        .listenQuery(\n          `*[references($docId)] [0...101]${projection}`,\n          {docId: id},\n          {tag: 'use-referring-documents'},\n        )\n        .pipe(\n          map(\n            (docs: DocumentType[]): ReferringDocumentsState<DocumentType> => ({\n              referringDocuments: docs,\n              isLoading: false,\n            }),\n          ),\n          startWith(INITIAL_STATE),\n        ),\n    [documentStore, id, projection],\n  )\n  return useObservable(observable, INITIAL_STATE)\n}\n\nconst EMPTY_FIELDS: never[] = []\n/**\n * Kept for backwards compat\n * - useReferringDocuments(id) will select `{_id, _type}` from returned documents,\n * - while this hook will return full documents\n *\n * Internal callers of this hook should migrate over to useReferringDocuments\n * @deprecated - replaced by useReferringDocuments(id) but kept for backwards compatibility\n * @internal\n * @param id - id of document to search for referring documents for\n */\n// eslint-disable-next-line camelcase\nexport function useLegacyReferringDocuments(id: string): ReferringDocumentsState<SanityDocument> {\n  return useReferringDocuments(id, EMPTY_FIELDS)\n}\n","import {type Asset as AssetType, type SanityDocument} from '@sanity/types'\nimport {Card, Flex, Text} from '@sanity/ui'\nimport {type HTMLProps, useCallback} from 'react'\nimport {IntentLink} from 'sanity/router'\n\nimport {useSchema} from '../../../../hooks'\nimport {Translate, useTranslation} from '../../../../i18n'\nimport {Preview} from '../../../../preview/components/Preview'\n\nexport const AssetUsageList = ({\n  asset,\n  assetType,\n  referringDocuments,\n}: {\n  asset: AssetType\n  assetType: 'image' | 'file'\n  referringDocuments: SanityDocument[]\n}) => {\n  const {t} = useTranslation()\n  const count = referringDocuments.length\n  return (\n    <>\n      <Card borderBottom={count > 0} marginTop={2} paddingBottom={2} marginBottom={1}>\n        <Text size={1} as=\"h2\" weight=\"medium\">\n          <Translate\n            t={t}\n            i18nKey={`asset-source.usage-list.documents-using-${assetType}`}\n            context={asset.originalFilename ? 'named' : 'unnamed'}\n            values={{filename: asset.originalFilename, count}}\n          />\n        </Text>\n      </Card>\n      {referringDocuments.map((document: SanityDocument) => (\n        <DocumentLink key={document._id} document={document} />\n      ))}\n    </>\n  )\n}\n\nconst DocumentLink = ({document}: {document: SanityDocument}) => {\n  const schema = useSchema()\n\n  const LinkComponent = useCallback(\n    (linkProps: Omit<HTMLProps<HTMLAnchorElement>, 'ref'>) => (\n      <IntentLink {...linkProps} params={{id: document._id, type: document._type}} intent=\"edit\" />\n    ),\n\n    [document],\n  )\n\n  return (\n    <Card as={LinkComponent} radius={2} key={document._id} data-as=\"a\" tabIndex={0}>\n      <Flex align=\"center\" gap={2}>\n        <Preview\n          layout=\"default\"\n          value={{_type: 'reference', _ref: document._id}}\n          schemaType={schema.get(document._type)!}\n        />\n      </Flex>\n    </Card>\n  )\n}\n","import {WarningOutlineIcon} from '@sanity/icons'\nimport {Card, Flex, Grid, Text} from '@sanity/ui'\nimport {type CSSProperties} from 'react'\n\nimport {Translate, useTranslation} from '../../../../i18n'\nimport {type UsageDialogProps} from './AssetDeleteDialog'\n\ntype ConfirmMessageProps = Omit<UsageDialogProps, 'onClose' | 'onDelete'> & {\n  hasResults?: boolean\n}\n\nconst STYLE_ASSET_IMAGE: CSSProperties = {\n  maxWidth: '100%',\n  height: '120px',\n  objectFit: 'contain',\n  objectPosition: 'center',\n}\nconst STYLE_CONFIRM_CARD: CSSProperties = {\n  gridColumn: 'span 1',\n  overflow: 'hidden',\n  display: 'flex',\n  alignSelf: 'center',\n  justifyContent: 'center',\n}\nconst STYLE_IMAGE_WRAPPER: CSSProperties = {height: '100%'}\n\nexport const ConfirmMessage = ({asset, assetType, hasResults = false}: ConfirmMessageProps) => {\n  const isImage = assetType === 'image'\n  const {t} = useTranslation()\n\n  if (hasResults) {\n    return (\n      <Card tone=\"caution\" padding={[3, 3, 4]} border radius={2} marginBottom={3}>\n        <Grid columns={3} gap={[2, 3, 4]}>\n          <Flex gap={[3, 4]} align=\"center\" style={{gridColumn: isImage ? 'span 2' : 'span 3'}}>\n            <Text>\n              <WarningOutlineIcon />\n            </Text>\n            <Text size={1}>\n              {t(`asset-source.delete-dialog.usage-list.warning-${assetType}-is-in-use`, {\n                context: asset.originalFilename ? 'named' : 'unnamed',\n                filename: asset.originalFilename,\n              })}\n            </Text>\n          </Flex>\n          {isImage && (\n            <Card __unstable_checkered border radius={1} style={STYLE_CONFIRM_CARD}>\n              <Flex align=\"center\" justify=\"center\" style={STYLE_IMAGE_WRAPPER}>\n                <img\n                  src={`${asset.url}?w=200`}\n                  style={STYLE_ASSET_IMAGE}\n                  alt={t('asset-source.usage-list.image-alt')}\n                  referrerPolicy=\"strict-origin-when-cross-origin\"\n                />\n              </Flex>\n            </Card>\n          )}\n        </Grid>\n      </Card>\n    )\n  }\n\n  return (\n    <Card paddingX={[2, 3, 4]} paddingY={[3, 3, 3, 4]}>\n      <Grid columns={3} gap={3}>\n        <Flex style={{gridColumn: isImage ? 'span 2' : 'span 3'}} align=\"center\">\n          <Text>\n            <Translate\n              t={t}\n              i18nKey={`asset-source.delete-dialog.usage-list.confirm-delete-${assetType}`}\n              context={asset.originalFilename ? 'named' : 'unnamed'}\n              values={{filename: asset.originalFilename}}\n            />\n          </Text>\n        </Flex>\n        {isImage && (\n          <Card __unstable_checkered border radius={1} style={STYLE_CONFIRM_CARD}>\n            <Flex align=\"center\" justify=\"center\" style={STYLE_IMAGE_WRAPPER}>\n              <img\n                src={`${asset.url}?w=200`}\n                style={STYLE_ASSET_IMAGE}\n                alt={t('asset-source.asset-list.table.preview-alt')}\n                referrerPolicy=\"strict-origin-when-cross-origin\"\n              />\n            </Flex>\n          </Card>\n        )}\n      </Grid>\n    </Card>\n  )\n}\n","import {TrashIcon} from '@sanity/icons'\nimport {type Asset as AssetType} from '@sanity/types'\nimport {Box, Stack} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nimport {Dialog} from '../../../../../ui-components'\nimport {LoadingBlock} from '../../../../components/loadingBlock'\nimport {useLegacyReferringDocuments} from '../../../../hooks/useReferringDocuments'\nimport {useTranslation} from '../../../../i18n'\nimport {AssetUsageList} from './AssetUsageList'\nimport {ConfirmMessage} from './ConfirmMessage'\n\nexport interface UsageDialogProps {\n  assetType: 'file' | 'image'\n  asset: AssetType\n  isDeleting?: boolean\n  onClose: () => void\n  onDelete: () => void\n}\n\nexport function AssetDeleteDialog({\n  asset,\n  assetType,\n  isDeleting = false,\n  onClose,\n  onDelete,\n}: UsageDialogProps) {\n  const {isLoading, referringDocuments} = useLegacyReferringDocuments(asset._id)\n\n  const publishedDocuments = useMemo(() => {\n    const drafts = referringDocuments.reduce<string[]>(\n      (acc, doc) => (doc._id.startsWith('drafts.') ? acc.concat(doc._id.slice(7)) : acc),\n      [],\n    )\n\n    return referringDocuments.filter((doc) => !drafts.includes(doc._id))\n  }, [referringDocuments])\n\n  const hasResults = publishedDocuments.length > 0\n\n  const {t} = useTranslation()\n\n  return (\n    <Dialog\n      __unstable_autoFocus={isLoading}\n      footer={{\n        cancelButton: {\n          onClick: onClose,\n          text: t('asset-source.delete-dialog.action.cancel'),\n        },\n        confirmButton: {\n          disabled: hasResults,\n          icon: TrashIcon,\n          loading: isDeleting,\n          onClick: onDelete,\n          text: t('asset-source.delete-dialog.action.delete'),\n        },\n      }}\n      header={t('asset-source.delete-dialog.header', {context: assetType})}\n      id=\"asset-dialog\"\n      onClickOutside={onClose}\n      onClose={onClose}\n      width={1}\n    >\n      {isLoading ? (\n        <Box padding={4}>\n          <LoadingBlock showText />\n        </Box>\n      ) : (\n        <Stack\n          paddingX={hasResults ? [2, 3, 4] : 0}\n          paddingY={hasResults ? [3, 3, 3, 4] : 0}\n          space={1}\n        >\n          <ConfirmMessage asset={asset} assetType={assetType} hasResults={hasResults} />\n\n          {hasResults && (\n            <AssetUsageList\n              asset={asset}\n              referringDocuments={publishedDocuments}\n              assetType={assetType}\n            />\n          )}\n        </Stack>\n      )}\n    </Dialog>\n  )\n}\n","import {LinkIcon, TrashIcon} from '@sanity/icons'\nimport {Menu} from '@sanity/ui'\n\nimport {MenuButton, MenuItem} from '../../../../../ui-components'\nimport {ContextMenuButton} from '../../../../components/contextMenuButton'\nimport {useTranslation} from '../../../../i18n'\nimport {type AssetMenuAction} from '../types'\n\nconst MENU_POPOVER_PROPS = {portal: true, placement: 'right'} as const\n\nexport function AssetMenu({\n  isSelected,\n  border = true,\n  onAction,\n}: {\n  isSelected: boolean\n  border?: boolean\n  onAction: (action: AssetMenuAction) => void\n}) {\n  const triggerButtonMode = isSelected ? 'default' : 'bleed'\n  const triggerButtonTone = isSelected ? 'primary' : 'default'\n\n  const {t} = useTranslation()\n  return (\n    <MenuButton\n      button={\n        <ContextMenuButton\n          mode={border ? 'ghost' : triggerButtonMode}\n          tone={border ? 'default' : triggerButtonTone}\n        />\n      }\n      id=\"asset-menu\"\n      menu={\n        <Menu>\n          <MenuItem\n            text={t('asset-source.asset-list.menu.show-usage')}\n            icon={LinkIcon}\n            onClick={() => {\n              onAction({type: 'showUsage'})\n            }}\n          />\n          <MenuItem\n            text={t('asset-source.asset-list.menu.delete')}\n            icon={TrashIcon}\n            tone=\"critical\"\n            onClick={() => {\n              onAction({type: 'delete'})\n            }}\n          />\n        </Menu>\n      }\n      popover={MENU_POPOVER_PROPS}\n    />\n  )\n}\n","import {type Asset as AssetType} from '@sanity/types'\nimport {useMemo} from 'react'\n\nimport {Dialog} from '../../../../../ui-components'\nimport {LoadingBlock} from '../../../../components/loadingBlock'\nimport {useLegacyReferringDocuments} from '../../../../hooks/useReferringDocuments'\nimport {useTranslation} from '../../../../i18n'\nimport {AssetUsageList} from './AssetUsageList'\n\nexport interface UsageDialogProps {\n  assetType: 'file' | 'image'\n  asset: AssetType\n  onClose: () => void\n}\n\nexport function AssetUsageDialog({asset, assetType, onClose}: UsageDialogProps) {\n  const {isLoading, referringDocuments} = useLegacyReferringDocuments(asset._id)\n\n  const publishedDocuments = useMemo(() => {\n    const drafts = referringDocuments.reduce<string[]>(\n      (acc, doc) => (doc._id.startsWith('drafts.') ? acc.concat(doc._id.slice(7)) : acc),\n      [],\n    )\n\n    return referringDocuments.filter((doc) => !drafts.includes(doc._id))\n  }, [referringDocuments])\n\n  const {t} = useTranslation()\n\n  return (\n    <Dialog\n      __unstable_autoFocus\n      header={t('asset-source.asset-usage-dialog.header', {context: assetType})}\n      id=\"asset-dialog\"\n      onClickOutside={onClose}\n      onClose={onClose}\n      width={1}\n    >\n      {isLoading ? (\n        <LoadingBlock showText />\n      ) : (\n        <AssetUsageList\n          asset={asset}\n          referringDocuments={publishedDocuments}\n          assetType={assetType}\n        />\n      )}\n    </Dialog>\n  )\n}\n","interface MimeTypeInfo {\n  title: string\n}\n\nconst MIME_TYPES: Record<string, MimeTypeInfo> = {\n  // Images\n  'image/bmp': {\n    title: 'Bitmap Image',\n  },\n  'image/jpeg': {\n    title: 'JPEG Image',\n  },\n  'image/gif': {\n    title: 'GIF Image',\n  },\n  'image/vnd.microsoft.icon': {\n    title: 'Icon',\n  },\n  'image/png': {\n    title: 'PNG Image',\n  },\n  'image/svg+xml': {\n    title: 'SVG Image',\n  },\n  'image/webp': {\n    title: 'WebP Image',\n  },\n  'image/tiff': {\n    title: 'TIFF Image',\n  },\n  'image/heic': {\n    title: 'HEIC Image',\n  },\n  // Audio\n  'audio/midi': {\n    title: 'MIDI Audio',\n  },\n  'audio/midi-x': {\n    title: 'MIDI Audio',\n  },\n  'audio/mpeg': {\n    title: 'MP3 Audio',\n  },\n  'audio/ogg': {\n    title: 'OGG Audio',\n  },\n  'audio/wav': {\n    title: 'WAV Audio',\n  },\n  'audio/webm': {\n    title: 'WebM Audio',\n  },\n  'audio/aac': {\n    title: 'AAC Audio',\n  },\n  // Video\n  'video/x-msvideo': {\n    title: 'AVI Video',\n  },\n  'video/mp4': {\n    title: 'MP4 Video',\n  },\n  'video/mpeg': {\n    title: 'MPEG Video',\n  },\n  'video/ogg': {\n    title: 'OGG Video',\n  },\n  'video/webm': {\n    title: 'WebM Video',\n  },\n  'video/quicktime': {\n    title: 'QuickTime Video',\n  },\n  // Documents\n  'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': {\n    title: 'Excel Spreadsheet',\n  },\n  'application/vnd.ms-excel': {\n    title: 'Excel Spreadsheet',\n  },\n  'text/plain': {\n    title: 'Text',\n  },\n  'text/javascript': {\n    title: 'JavaScript',\n  },\n  'text/markdown': {\n    title: 'Markdown',\n  },\n  'text/csv': {\n    title: 'CSV',\n  },\n  'text/css': {\n    title: 'CSS',\n  },\n  'application/pdf': {\n    title: 'PDF Document',\n  },\n  'application/xml': {\n    title: 'XML Document',\n  },\n  'text/xml': {\n    title: 'XML Document',\n  },\n  'application/zip': {\n    title: 'ZIP Archive',\n  },\n  'application/vnd.rar': {\n    title: 'RAR Archive',\n  },\n  'application/x-7z-compressed': {\n    title: '7-zip Archive',\n  },\n  'application/octet-stream': {\n    title: 'Binary',\n  },\n}\n\nfunction convertMimeTypeToSomethingNice(mimeType: string): string {\n  const part = mimeType.replace('x-', '').split('/')[1]\n\n  return part.charAt(0).toUpperCase() + part.slice(1)\n}\n\nexport function formatMimeType(mimeType: string): string {\n  if (MIME_TYPES?.[mimeType]) {\n    return MIME_TYPES[mimeType].title\n  }\n\n  return convertMimeTypeToSomethingNice(mimeType)\n}\n","import {ChevronDownIcon, ChevronUpIcon, DocumentIcon, LinkIcon, TrashIcon} from '@sanity/icons'\nimport {type Asset as AssetType} from '@sanity/types'\nimport {\n  Box,\n  // eslint-disable-next-line no-restricted-imports\n  Button,\n  Card,\n  Flex,\n  Grid,\n  Stack,\n  Text,\n  useToast,\n} from '@sanity/ui'\nimport {type KeyboardEvent, type MouseEvent, useCallback, useMemo, useRef, useState} from 'react'\nimport {type Subscription} from 'rxjs'\nimport {css, styled} from 'styled-components'\n\nimport {Tooltip} from '../../../../../ui-components'\nimport {getHumanFriendlyBytes} from '../../../../field/types/file/diff/helpers'\nimport {useClient, useRelativeTime, useUnitFormatter} from '../../../../hooks'\nimport {useTranslation} from '../../../../i18n'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../../../studioClient'\nimport {AssetDeleteDialog} from '../shared/AssetDeleteDialog'\nimport {AssetMenu} from '../shared/AssetMenu'\nimport {AssetUsageDialog} from '../shared/AssetUsageDialog'\nimport {type AssetMenuAction} from '../types'\nimport {formatMimeType} from '../utils/mimeType'\n\ninterface RowProps {\n  isMobile?: boolean\n  asset: AssetType\n  isSelected?: boolean\n  onClick?: (event: MouseEvent) => void\n  onKeyPress?: (event: KeyboardEvent) => void\n  onDeleteFinished?: (assetId: string) => void\n}\n\nconst CardIconWrapper = styled.span`\n  background-color: transparent;\n  flex-shrink: 0;\n`\n\n// These are here because using vanilla UI components caused a type issue inside of styled-components\nconst CustomFlex = styled(Flex)``\n\nconst CustomCard = styled(Card)<RowProps>`\n  ${(props) =>\n    props.isSelected &&\n    css`\n      --card-muted-fg-color: var(--card-bg-color);\n      --card-fg-color: var(--card-bg-color);\n    `}\n`\n\nconst RowButton = styled(Button)<RowProps>`\n  box-shadow: none;\n  min-width: 0;\n  cursor: pointer;\n  position: initial;\n\n  &:before,\n  &:after {\n    content: '';\n    position: absolute;\n    left: 0;\n    top: 0;\n    width: 100%;\n    height: 100%;\n    z-index: 2;\n  }\n\n  &:before {\n    z-index: 0;\n    pointer-events: none;\n    border-radius: inherit;\n  }\n\n  ${(props) =>\n    props.isSelected &&\n    css`\n      --card-muted-fg-color: var(--card-bg-color);\n      --card-fg-color: var(--card-bg-color);\n\n      &:before {\n        background-color: var(--card-focus-ring-color);\n      }\n\n      ${CardIconWrapper} {\n        --card-muted-fg-color: var(--card-bg-color);\n      }\n\n      ${CustomFlex} {\n        --card-muted-fg-color: var(--card-bg-color);\n        --card-fg-color: var(--card-bg-color);\n      }\n    `}\n\n  ${(props) =>\n    !props.isSelected &&\n    css`\n      &:hover:before {\n        background-color: var(--card-bg-color);\n      }\n\n      &:focus:before {\n        background-color: var(--card-code-bg-color);\n      }\n\n      &:focus-within:before {\n        background-color: var(--card-bg-color);\n      }\n    `}\n`\n\nconst TypeText = styled(Text)`\n  overflow-wrap: anywhere;\n`\n\nconst STYLES_ROW_CARD = {\n  position: 'relative',\n} as const\n\nconst STYLES_ICON_CARD = {flexShrink: 0}\nconst STYLES_BUTTON_TEXT = {minWidth: 0}\nconst STYLES_ASSETMENU_WRAPPER = {\n  zIndex: 3,\n  marginTop: '-0.5rem',\n  marginBottom: '-0.5rem',\n}\n\nexport const AssetRow = (props: RowProps): React.JSX.Element => {\n  const versionedClient = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n  const toast = useToast()\n  const deleteRef$ = useRef<Subscription>(undefined)\n  const [showUsageDialog, setShowUsageDialog] = useState(false)\n  const [showDeleteDialog, setShowDeleteDialog] = useState(false)\n  const [isDeleting, setIsDeleting] = useState(false)\n  const [isOpen, setIsOpen] = useState(false)\n  const {asset, onClick, onKeyPress, onDeleteFinished, isSelected, isMobile} = props\n  const {originalFilename, _id, mimeType, size, _createdAt} = asset\n  const formattedTime = useRelativeTime(_createdAt, {useTemporalPhrase: true})\n  const formattedMimeType = formatMimeType(mimeType)\n\n  const formatUnit = useUnitFormatter({unitDisplay: 'short', maximumFractionDigits: 2})\n  const formattedSize = getHumanFriendlyBytes(size, formatUnit)\n\n  const showTooltip = (originalFilename || '').length > 37\n\n  const {t} = useTranslation()\n  const handleConfirmDelete = useCallback(() => {\n    setShowDeleteDialog(true)\n  }, [])\n\n  const handleDeleteError = useCallback(\n    (error: Error) => {\n      toast.push({\n        closable: true,\n        status: 'error',\n        title: t('asset-source.file.asset-list.delete-failed'),\n        description: error.message,\n      })\n    },\n    [t, toast],\n  )\n\n  const handleDeleteSuccess = useCallback(() => {\n    toast.push({\n      status: 'success',\n      title: t('asset-source.file.asset-list.delete-successful'),\n    })\n  }, [t, toast])\n\n  const handleDeleteAsset = useCallback(() => {\n    setIsDeleting(true)\n\n    deleteRef$.current = versionedClient.observable.delete(asset._id).subscribe({\n      next: () => {\n        setIsDeleting(false)\n        onDeleteFinished?.(asset._id)\n        setShowDeleteDialog(false)\n        handleDeleteSuccess()\n      },\n      error: (err: Error) => {\n        setIsDeleting(false)\n        handleDeleteError(err)\n        // eslint-disable-next-line no-console\n        console.error('Could not delete asset', err)\n      },\n    })\n  }, [\n    asset._id,\n    handleDeleteError,\n    handleDeleteSuccess,\n    onDeleteFinished,\n    versionedClient.observable,\n  ])\n\n  const handleDialogClose = useCallback(() => {\n    setShowUsageDialog(false)\n    setShowDeleteDialog(false)\n  }, [])\n\n  const handleToggleUsageDialog = useCallback(() => {\n    setShowUsageDialog(true)\n  }, [])\n\n  const handleToggleOpen = useCallback(() => {\n    setIsOpen((prev) => !prev)\n  }, [])\n\n  const handleMenuAction = useCallback(\n    (action: AssetMenuAction) => {\n      if (action.type === 'delete') {\n        handleConfirmDelete()\n      }\n\n      if (action.type === 'showUsage') {\n        handleToggleUsageDialog()\n      }\n    },\n    [handleConfirmDelete, handleToggleUsageDialog],\n  )\n\n  const usageDialog = useMemo(() => {\n    return (\n      showUsageDialog && (\n        <AssetUsageDialog assetType=\"file\" asset={asset} onClose={handleDialogClose} />\n      )\n    )\n  }, [asset, handleDialogClose, showUsageDialog])\n\n  const deleteDialog = useMemo(() => {\n    return (\n      showDeleteDialog && (\n        <AssetDeleteDialog\n          assetType=\"file\"\n          asset={asset}\n          onClose={handleDialogClose}\n          onDelete={handleDeleteAsset}\n          isDeleting={isDeleting}\n        />\n      )\n    )\n  }, [asset, handleDeleteAsset, handleDialogClose, isDeleting, showDeleteDialog])\n\n  if (isMobile) {\n    return (\n      <Card paddingBottom={2} style={STYLES_ROW_CARD}>\n        <Grid\n          columns={4}\n          gap={1}\n          style={{\n            position: 'relative',\n            gridTemplateColumns: '1fr 30px',\n            opacity: isDeleting ? 0.5 : 1,\n          }}\n        >\n          <RowButton\n            asset={asset}\n            mode=\"bleed\"\n            padding={0}\n            data-id={_id}\n            onClick={onClick}\n            paddingY={1}\n            radius={2}\n          >\n            <Flex gap={2} flex={2} align=\"center\">\n              <Card as={CardIconWrapper} padding={2} tone=\"transparent\" radius={2}>\n                <Text muted size={2} style={STYLES_ICON_CARD}>\n                  <DocumentIcon />\n                </Text>\n              </Card>\n              <Text size={1} align=\"left\" textOverflow=\"ellipsis\" style={STYLES_BUTTON_TEXT}>\n                {originalFilename}\n              </Text>\n            </Flex>\n          </RowButton>\n          <Flex justify=\"flex-end\" align=\"center\" paddingRight={1} style={STYLES_ASSETMENU_WRAPPER}>\n            <Button\n              mode=\"bleed\"\n              fontSize={1}\n              padding={2}\n              onClick={handleToggleOpen}\n              icon={isOpen ? ChevronUpIcon : ChevronDownIcon}\n            />\n          </Flex>\n        </Grid>\n        {isOpen && (\n          <>\n            <Grid marginTop={3} columns={3} gap={1}>\n              <Stack space={2}>\n                <Text size={1} muted weight=\"medium\">\n                  {t('asset-source.file.asset-list.header.size')}\n                </Text>\n                <Text size={1} muted>\n                  {formattedSize}\n                </Text>\n              </Stack>\n              <Stack space={2}>\n                <Text size={1} muted weight=\"medium\">\n                  {t('asset-source.file.asset-list.header.type')}\n                </Text>\n                <Text size={1} muted>\n                  {formattedMimeType}\n                </Text>\n              </Stack>\n              <Stack space={2}>\n                <Text size={1} muted weight=\"medium\">\n                  {t('asset-source.file.asset-list.header.date-added')}\n                </Text>\n                <Text size={1} muted>\n                  {formattedTime}\n                </Text>\n              </Stack>\n            </Grid>\n            <Stack space={2} marginTop={3}>\n              <Button\n                fontSize={1}\n                tone=\"default\"\n                mode=\"ghost\"\n                text={t('asset-source.file.asset-list.action.show-usage.title')}\n                onClick={handleToggleUsageDialog}\n                icon={LinkIcon}\n              />\n\n              <Button\n                fontSize={1}\n                tone=\"critical\"\n                mode=\"ghost\"\n                text={t('asset-source.file.asset-list.action.delete.title')}\n                icon={TrashIcon}\n                disabled={isSelected}\n                title={t(\n                  isSelected\n                    ? 'asset-source.file.asset-list.action.delete.disabled-cannot-delete-current-file'\n                    : 'asset-source.file.asset-list.action.delete.title',\n                )}\n                onClick={handleConfirmDelete}\n              />\n            </Stack>\n          </>\n        )}\n        {usageDialog || deleteDialog}\n      </Card>\n    )\n  }\n\n  return (\n    <CustomCard\n      asset={asset}\n      paddingBottom={1}\n      style={STYLES_ROW_CARD}\n      radius={0}\n      overflow={'hidden'}\n      isSelected={isSelected}\n      aria-selected=\"true\"\n    >\n      <Grid\n        columns={4}\n        gap={1}\n        data-id={_id}\n        paddingY={1}\n        style={{\n          position: 'relative',\n          gridTemplateColumns: '3fr 1fr 1fr 2fr 30px',\n          opacity: isDeleting ? 0.5 : 1,\n        }}\n      >\n        <RowButton\n          asset={asset}\n          mode=\"bleed\"\n          data-id={_id}\n          onClick={onClick}\n          padding={0}\n          onKeyPress={onKeyPress}\n          title={t('asset-source.file.asset-list.item.select-file-tooltip', {\n            filename: originalFilename,\n          })}\n          isSelected={isSelected}\n          radius={2}\n        >\n          <CustomFlex\n            gap={2}\n            flex={2}\n            paddingRight={1}\n            align=\"center\"\n            onClick={onClick}\n            onKeyPress={onKeyPress}\n            data-id={_id}\n          >\n            <Card\n              as={CardIconWrapper}\n              padding={2}\n              tone=\"transparent\"\n              radius={2}\n              style={STYLES_ICON_CARD}\n            >\n              <Text muted size={2}>\n                <DocumentIcon />\n              </Text>\n            </Card>\n            {showTooltip && (\n              <Tooltip content={originalFilename}>\n                <Text size={1} align=\"left\" textOverflow=\"ellipsis\" style={STYLES_BUTTON_TEXT}>\n                  {originalFilename}\n                </Text>\n              </Tooltip>\n            )}\n\n            {!showTooltip && (\n              <Text size={1} align=\"left\" textOverflow=\"ellipsis\" style={STYLES_BUTTON_TEXT}>\n                {originalFilename}\n              </Text>\n            )}\n          </CustomFlex>\n        </RowButton>\n        <CustomFlex align=\"center\">\n          <Text size={1} muted>\n            {formattedSize}\n          </Text>\n        </CustomFlex>\n        <CustomFlex align=\"center\">\n          <Box>\n            <TypeText size={1} muted textOverflow=\"ellipsis\">\n              {formattedMimeType}\n            </TypeText>\n          </Box>\n        </CustomFlex>\n        <CustomFlex align=\"center\">\n          <Text as=\"time\" size={1} muted dateTime={_createdAt}>\n            {formattedTime}\n          </Text>\n        </CustomFlex>\n        <CustomFlex\n          justify=\"flex-end\"\n          align=\"center\"\n          paddingX={1}\n          paddingY={1}\n          style={STYLES_ASSETMENU_WRAPPER}\n        >\n          <AssetMenu border={false} isSelected={false} onAction={handleMenuAction} />\n        </CustomFlex>\n      </Grid>\n      {usageDialog || deleteDialog}\n    </CustomCard>\n  )\n}\n","import {type Asset} from '@sanity/types'\nimport {Box, Card, Flex, Grid, Spinner, Stack, Text, useMediaIndex} from '@sanity/ui'\nimport {type KeyboardEvent, type MouseEvent} from 'react'\n\nimport {useTranslation} from '../../../../i18n'\nimport {AssetRow} from './AssetRow'\n\ninterface Props {\n  onClick?: (event: MouseEvent) => void\n  onKeyPress?: (event: KeyboardEvent) => void\n  onDeleteFinished: (assetId: string) => void\n  assets: Asset[]\n  isLoading?: boolean\n  selectedAssets: Asset[]\n}\n\nconst STYLES_FILENAME = {paddingLeft: '2.2rem'}\nconst STYLES_GRID = {gridTemplateColumns: '3fr 1fr 1fr 2fr 30px'}\n\nexport function FileListView(props: Props) {\n  const mediaIndex = useMediaIndex()\n  const isMobile = mediaIndex < 2\n  const {assets, onClick, onKeyPress, onDeleteFinished, selectedAssets, isLoading} = props\n\n  const {t} = useTranslation()\n  return (\n    <Box>\n      <Card borderBottom paddingBottom={2} marginBottom={1}>\n        {isMobile ? (\n          <Grid style={STYLES_GRID}>\n            <Box flex={2} paddingLeft={5}>\n              <Text muted size={1} weight=\"medium\">\n                {t('asset-source.file.asset-list.header.filename')}\n              </Text>\n            </Box>\n          </Grid>\n        ) : (\n          <Grid gap={1} style={STYLES_GRID}>\n            <Box flex={2} style={STYLES_FILENAME}>\n              <Text muted size={1} weight=\"medium\">\n                {t('asset-source.file.asset-list.header.filename')}\n              </Text>\n            </Box>\n            <Box flex={1}>\n              <Text muted size={1} weight=\"medium\">\n                {t('asset-source.file.asset-list.header.size')}\n              </Text>\n            </Box>\n            <Box flex={1}>\n              <Text muted size={1} weight=\"medium\">\n                {t('asset-source.file.asset-list.header.type')}\n              </Text>\n            </Box>\n            <Box flex={1}>\n              <Text muted size={1} weight=\"medium\">\n                {t('asset-source.file.asset-list.header.date-added')}\n              </Text>\n            </Box>\n          </Grid>\n        )}\n      </Card>\n      <Stack>\n        {isLoading && assets.length === 0 && (\n          <Box paddingTop={4} paddingBottom={2}>\n            <Flex justify=\"center\">\n              <Spinner muted />\n            </Flex>\n          </Box>\n        )}\n        {assets.map((asset) => (\n          <AssetRow\n            key={asset._id}\n            asset={asset}\n            isMobile={isMobile}\n            isSelected={selectedAssets.some((selected) => selected._id === asset._id)}\n            onClick={onClick}\n            onKeyPress={onKeyPress}\n            onDeleteFinished={onDeleteFinished}\n          />\n        ))}\n      </Stack>\n    </Box>\n  )\n}\n","import {type Asset} from '@sanity/types'\nimport {\n  // eslint-disable-next-line no-restricted-imports\n  Button,\n  Card,\n  useToast,\n} from '@sanity/ui'\nimport {memo, useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {type Subscription} from 'rxjs'\nimport {styled} from 'styled-components'\n\nimport {LoadingBlock} from '../../../../components/loadingBlock'\nimport {useClient} from '../../../../hooks'\nimport {useTranslation} from '../../../../i18n'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../../../studioClient'\nimport {AssetDeleteDialog} from '../shared/AssetDeleteDialog'\nimport {AssetMenu} from '../shared/AssetMenu'\nimport {AssetUsageDialog} from '../shared/AssetUsageDialog'\nimport {type AssetMenuAction} from '../types'\n\ninterface AssetProps {\n  asset: Asset\n  isSelected: boolean\n  onClick?: (event: React.MouseEvent) => void\n  onKeyPress?: (event: React.KeyboardEvent) => void\n  onDeleteFinished: (assetId: string) => void\n}\n\n// Get pixel density of the current device\nconst DPI =\n  typeof window === 'undefined' || !window.devicePixelRatio\n    ? 1\n    : Math.round(window.devicePixelRatio)\n\nconst Image = styled.img`\n  position: absolute;\n  z-index: 1;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  display: block;\n  object-fit: contain;\n`\n\nconst Container = styled(Card)`\n  position: relative;\n  z-index: 1;\n  padding-bottom: 100%;\n`\n\nconst Root = styled.div`\n  position: relative;\n  display: inherit;\n`\nconst MenuContainer = styled.div`\n  box-sizing: border-box;\n  position: absolute;\n  z-index: 2;\n  top: 3px;\n  right: 3px;\n\n  & button[data-selected] {\n    display: block;\n  }\n\n  @media (hover: hover) {\n    // If hover is supported, hide the buttons until the user hovers or focuses the asset\n    // Use opacity to enable the buttons to still be focusable\n    & button {\n      opacity: 0;\n    }\n\n    ${Root}:hover & {\n      button {\n        opacity: 1;\n      }\n    }\n\n    ${Root}:focus-within & {\n      button {\n        opacity: 1;\n      }\n    }\n  }\n`\n\nexport const AssetThumb = memo(function AssetThumb(props: AssetProps) {\n  const versionedClient = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n  const toast = useToast()\n  const deleteRef$ = useRef<Subscription>(undefined)\n  const {asset, onClick, onKeyPress, onDeleteFinished, isSelected} = props\n  const [showUsageDialog, setShowUsageDialog] = useState(false)\n  const [showDeleteDialog, setShowDeleteDialog] = useState(false)\n  const [isDeleting, setIsDeleting] = useState(false)\n  const {t} = useTranslation()\n\n  useEffect(() => {\n    return () => {\n      if (deleteRef$.current) {\n        deleteRef$.current.unsubscribe()\n      }\n    }\n  }, [])\n\n  const handleConfirmDelete = useCallback(() => {\n    setShowDeleteDialog(true)\n  }, [setShowDeleteDialog])\n\n  const handleDialogClose = useCallback(() => {\n    setShowUsageDialog(false)\n    setShowDeleteDialog(false)\n  }, [setShowUsageDialog, setShowDeleteDialog])\n\n  const handleToggleUsageDialog = useCallback(() => {\n    setShowUsageDialog(true)\n  }, [setShowUsageDialog])\n\n  const handleDeleteError = useCallback(\n    (error: {message: string}) => {\n      toast.push({\n        closable: true,\n        status: 'error',\n        title: t('asset-source.image.asset-list.delete-failed'),\n        description: error.message,\n      })\n    },\n    [t, toast],\n  )\n\n  const handleDeleteSuccess = useCallback(() => {\n    toast.push({\n      status: 'success',\n      title: t('asset-source.image.asset-list.delete-successful'),\n    })\n  }, [t, toast])\n\n  const handleDeleteAsset = useCallback(() => {\n    setIsDeleting(true)\n\n    deleteRef$.current = versionedClient.observable.delete(asset._id).subscribe({\n      next: () => {\n        setIsDeleting(false)\n        onDeleteFinished(asset._id)\n        setShowDeleteDialog(false)\n        handleDeleteSuccess()\n      },\n      error: (err: Error) => {\n        setIsDeleting(false)\n        handleDeleteError(err)\n        // eslint-disable-next-line no-console\n        console.error('Could not delete asset', err)\n      },\n    })\n  }, [\n    asset._id,\n    handleDeleteError,\n    handleDeleteSuccess,\n    onDeleteFinished,\n    versionedClient.observable,\n  ])\n\n  const handleMenuAction = useCallback(\n    (action: AssetMenuAction) => {\n      if (action.type === 'delete') {\n        handleConfirmDelete()\n      }\n\n      if (action.type === 'showUsage') {\n        handleToggleUsageDialog()\n      }\n    },\n    [handleConfirmDelete, handleToggleUsageDialog],\n  )\n\n  const usageDialog = useMemo(() => {\n    return (\n      showUsageDialog && (\n        <AssetUsageDialog assetType=\"file\" asset={asset} onClose={handleDialogClose} />\n      )\n    )\n  }, [asset, handleDialogClose, showUsageDialog])\n\n  const deleteDialog = useMemo(() => {\n    return (\n      showDeleteDialog && (\n        <AssetDeleteDialog\n          assetType=\"file\"\n          asset={asset}\n          onClose={handleDialogClose}\n          onDelete={handleDeleteAsset}\n          isDeleting={isDeleting}\n        />\n      )\n    )\n  }, [asset, handleDeleteAsset, handleDialogClose, isDeleting, showDeleteDialog])\n\n  // const {asset, onClick, onKeyPress, isSelected} = props\n  const {originalFilename, _id, url} = asset\n  const imgH = 200 * Math.max(1, DPI)\n\n  // Mead can't convert gifs, so we might end up with large gifs that will cause the source window to use a lot of CPU\n  // We instead force them to display as jpgs\n  const imageUrl = url.includes('.gif')\n    ? `${url}?h=${imgH}&fit=max&fm=jpg`\n    : `${url}?h=${imgH}&fit=max`\n\n  return (\n    <Root>\n      <Button\n        selected={isSelected}\n        tabIndex={0}\n        data-id={_id}\n        mode=\"ghost\"\n        onKeyPress={onKeyPress}\n        padding={0}\n        style={{padding: 2}}\n      >\n        <Container __unstable_checkered>\n          <Image alt={originalFilename} src={imageUrl} onClick={onClick} data-id={_id} />\n          {isDeleting && <LoadingBlock />}\n        </Container>\n      </Button>\n      <MenuContainer>\n        <AssetMenu isSelected={isSelected} onAction={handleMenuAction} />\n      </MenuContainer>\n      {usageDialog || deleteDialog}\n    </Root>\n  )\n})\n","import {type Asset} from '@sanity/types'\nimport {Box, Flex, Grid, Spinner, Text} from '@sanity/ui'\nimport {type KeyboardEvent, type MouseEvent} from 'react'\nimport {styled} from 'styled-components'\n\nimport {AssetThumb} from './AssetThumb'\n\ninterface ImageListViewProps {\n  isLoading?: boolean\n  assets: Asset[]\n  selectedAssets: Asset[]\n  onItemClick: (event: MouseEvent) => void\n  onItemKeyPress: (event: KeyboardEvent) => void\n  onDeleteFinished: (assetId: string) => void\n}\n\nconst ThumbGrid = styled(Grid)`\n  grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));\n`\n\nexport function ImageListView(props: ImageListViewProps) {\n  const {isLoading, assets, selectedAssets, onItemClick, onItemKeyPress, onDeleteFinished} = props\n  return (\n    <Box padding={4}>\n      <ThumbGrid gap={2}>\n        {assets.map((asset) => (\n          <AssetThumb\n            key={asset._id}\n            asset={asset}\n            isSelected={selectedAssets.some((selected) => selected._id === asset._id)}\n            onClick={onItemClick}\n            onKeyPress={onItemKeyPress}\n            onDeleteFinished={onDeleteFinished}\n          />\n        ))}\n      </ThumbGrid>\n      {isLoading && assets.length === 0 && (\n        <Flex justify=\"center\">\n          <Spinner muted />\n        </Flex>\n      )}\n      {!isLoading && assets.length === 0 && <Text align=\"center\" muted />}\n    </Box>\n  )\n}\n","import {DownloadIcon, InfoOutlineIcon} from '@sanity/icons'\nimport {type Asset, type AssetFromSource, type AssetSourceComponentProps} from '@sanity/types'\nimport {Card, Flex, Stack, Text} from '@sanity/ui'\nimport {uniqueId} from 'lodash'\nimport {\n  type ForwardedRef,\n  forwardRef,\n  type KeyboardEvent,\n  memo,\n  type MouseEvent,\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from 'react'\nimport {type Subscription} from 'rxjs'\nimport {styled} from 'styled-components'\n\nimport {Button, Dialog} from '../../../../../ui-components'\nimport {useClient, useListFormat} from '../../../../hooks'\nimport {Translate, useTranslation} from '../../../../i18n'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../../../studioClient'\nimport {FileListView} from '../file/FileListView'\nimport {ImageListView} from '../image/ImageListView'\n\nconst PER_PAGE = 200\nconst ASSET_TYPE_IMAGE = 'sanity.imageAsset'\nconst ASSET_TYPE_FILE = 'sanity.fileAsset'\n\nconst buildFilterQuery = (acceptParam: string) => {\n  const WILDCARD_ACCEPT = ['image/*', 'audio/*', 'video/*']\n  const acceptItems = acceptParam.split(',').map((accept) => accept.trim())\n\n  const typesForFilter: {[key: string]: string} = acceptItems.reduce(\n    (acceptTypes: {[key: string]: string}, acceptValue: string) => {\n      // builds the wildcard part of the groq query\n      if (WILDCARD_ACCEPT.includes(acceptValue)) {\n        return {\n          ...acceptTypes,\n          wildcards: `mimeType match '${acceptValue}' || ${acceptTypes.wildcards}`,\n        }\n      }\n\n      // builds the extension part of the groq query (and removes the .)\n      if (acceptValue.indexOf('.') === 0) {\n        return {\n          ...acceptTypes,\n          extensions: `'${acceptValue.replace('.', '')}', ${acceptTypes.extensions}`,\n        }\n      }\n\n      // all that remains is then the mime types, so we build that part\n      return {...acceptTypes, mimes: `'${acceptValue}', ${acceptTypes.mimes}`}\n    },\n    {mimes: '', extensions: '', wildcards: ''},\n  )\n\n  /* when no accept filter is set, we don't need to add the filter condition\n  wildcards conditions do not work with arrays so the whole query is built at the top on the condition connected\n  with ORs. So when they are empty it means that we can keep the whole first section clean.\n  The extension and mimeType work when the arrays are empty returning the right values so they are kept in the query */\n  return `&&\n  (\n    ${typesForFilter.wildcards}\n    extension in [${typesForFilter.extensions}] ||\n    mimeType in [${typesForFilter.mimes}]\n  )`\n}\n\nconst buildQuery = (\n  start = 0,\n  end = PER_PAGE,\n  assetType = ASSET_TYPE_IMAGE,\n  acceptParam: string,\n) => {\n  const hasAccept = acceptParam.length > 0\n  const filterCondition = hasAccept ? buildFilterQuery(acceptParam) : ''\n\n  return `\n  *[_type == \"${assetType}\" ${filterCondition}] | order(_updatedAt desc) [${start}...${end}] {\n    _id,\n    _updatedAt,\n    _createdAt,\n    url,\n    originalFilename,\n    mimeType,\n    extension,\n    size,\n    metadata {dimensions}\n  }\n`\n}\n\nconst CardLoadMore = styled(Card)`\n  border-top: 1px solid var(--card-border-color);\n  position: sticky;\n  bottom: 0;\n  z-index: 200;\n`\n\nconst DefaultAssetSource = function DefaultAssetSource(\n  props: AssetSourceComponentProps,\n  ref: ForwardedRef<HTMLDivElement>,\n) {\n  const client = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n  const versionedClient = useMemo(() => client.withConfig({apiVersion: '2023-02-14'}), [client])\n  const [_elementId] = useState(() => `default-asset-source-${uniqueId()}`)\n  const currentPageNumber = useRef(0)\n  const {t} = useTranslation()\n  const fetch$ = useRef<Subscription>(undefined)\n  const [assets, setAssets] = useState<Asset[]>([])\n  const [isLastPage, setIsLastPage] = useState(false)\n  const [hasResetAutoFocus, setHasResetFocus] = useState(false)\n  const [isLoading, setIsLoading] = useState(true)\n  const {selectedAssets, assetType = 'image', dialogHeaderTitle, onClose, onSelect, accept} = props\n\n  const isImageOnlyWildCard = accept && accept === 'image/*' && assetType === 'image'\n  const fetchPage = useCallback(\n    (pageNumber: number) => {\n      const start = pageNumber * PER_PAGE\n      const end = start + PER_PAGE\n      const isImageAssetType = assetType === 'image'\n      const tag = isImageAssetType ? 'asset.image-list' : 'asset.file-list'\n      const assetTypeParam = isImageAssetType ? ASSET_TYPE_IMAGE : ASSET_TYPE_FILE\n\n      setIsLoading(true)\n\n      if (typeof accept !== 'undefined') {\n        fetch$.current = versionedClient.observable\n          .fetch(buildQuery(start, end, assetTypeParam, accept), {}, {tag})\n          .subscribe((result) => {\n            setIsLastPage(result.length < PER_PAGE)\n            setAssets((prevState) => prevState.concat(result))\n            setIsLoading(false)\n          })\n      }\n    },\n    [assetType, accept, versionedClient],\n  )\n\n  const handleDeleteFinished = useCallback(\n    (id: string) => {\n      // eslint-disable-next-line max-nested-callbacks\n      setAssets((prevState) => prevState.filter((asset) => asset._id !== id))\n    },\n    [setAssets],\n  )\n\n  const select = useCallback(\n    (id: string) => {\n      const selected = assets.find((doc) => doc._id === id)\n\n      if (selected) {\n        const selectedSource: AssetFromSource[] = [{kind: 'assetDocumentId', value: id}]\n\n        onSelect(selectedSource)\n      }\n    },\n    [assets, onSelect],\n  )\n\n  const handleItemClick = useCallback(\n    (event: MouseEvent) => {\n      event.preventDefault()\n      const id = event.currentTarget.getAttribute('data-id')\n      if (!id) {\n        throw new Error('Missing data-id attribute on item')\n      }\n      select(id)\n    },\n    [select],\n  )\n\n  const handleItemKeyPress = useCallback(\n    (event: KeyboardEvent) => {\n      if (event.key === 'Enter') {\n        event.preventDefault()\n        const id = event.currentTarget.getAttribute('data-id')\n        if (!id) {\n          throw new Error('Missing data-id attribute on item')\n        }\n        select(id)\n      }\n    },\n    [select],\n  )\n\n  const handleClose = useCallback(() => {\n    if (onClose) {\n      onClose()\n    }\n  }, [onClose])\n\n  const handleFetchNextPage = useCallback(\n    (event: MouseEvent) => {\n      event.preventDefault()\n      fetchPage(++currentPageNumber.current)\n    },\n    [fetchPage],\n  )\n\n  useEffect(() => {\n    fetchPage(currentPageNumber.current)\n\n    return () => {\n      if (fetch$.current) {\n        fetch$.current.unsubscribe()\n      }\n    }\n  }, [fetchPage])\n\n  useEffect(() => {\n    // We focus on the first item after we're doing loading, but only on initial load, as\n    // this will reset the scroll position to the top if we do it on the second page\n    if (!isLoading && (!currentPageNumber.current || currentPageNumber.current === 0)) {\n      setHasResetFocus(true)\n    }\n  }, [isLoading])\n\n  const listFormat = useListFormat({style: 'narrow'})\n\n  return (\n    <Dialog\n      __unstable_autoFocus={hasResetAutoFocus}\n      header={\n        dialogHeaderTitle ||\n        t('asset-source.dialog.default-title', {\n          context: assetType,\n        })\n      }\n      id={_elementId}\n      onClickOutside={handleClose}\n      onClose={handleClose}\n      ref={ref}\n      width={2}\n    >\n      <Stack space={5}>\n        {!isImageOnlyWildCard && !isLoading && accept?.length > 0 && (\n          <Card tone=\"primary\" padding={3} border radius={2}>\n            <Flex gap={3} align=\"center\">\n              <Text size={1}>\n                <InfoOutlineIcon />\n              </Text>\n              <Text size={1}>\n                <Translate\n                  t={t}\n                  i18nKey=\"asset-source.dialog.accept-message\"\n                  values={{\n                    acceptTypes: listFormat.format(accept.split(',').map((type) => type.trim())),\n                  }}\n                />\n              </Text>\n            </Flex>\n          </Card>\n        )}\n        {assetType === 'file' && (\n          <FileListView\n            assets={assets}\n            onDeleteFinished={handleDeleteFinished}\n            onClick={handleItemClick}\n            onKeyPress={handleItemKeyPress}\n            isLoading={isLoading}\n            selectedAssets={selectedAssets}\n          />\n        )}\n        {assetType === 'image' && (\n          <ImageListView\n            assets={assets}\n            onDeleteFinished={handleDeleteFinished}\n            onItemClick={handleItemClick}\n            onItemKeyPress={handleItemKeyPress}\n            isLoading={isLoading}\n            selectedAssets={selectedAssets}\n          />\n        )}\n        {assets.length > 0 && !isLastPage && (\n          <CardLoadMore tone=\"default\" padding={4}>\n            <Flex direction=\"column\">\n              <Button\n                type=\"button\"\n                icon={DownloadIcon}\n                loading={isLoading}\n                onClick={handleFetchNextPage}\n                size=\"large\"\n                text={t('asset-source.dialog.load-more')}\n                tone=\"primary\"\n              />\n            </Flex>\n          </CardLoadMore>\n        )}\n      </Stack>\n    </Dialog>\n  )\n}\n\nexport const DefaultSource = memo(forwardRef(DefaultAssetSource))\n","import {DocumentsIcon} from '@sanity/icons'\nimport {type AssetSource} from '@sanity/types'\n\nimport {DefaultSource} from './shared/DefaultSource'\n\nexport const FileSource: AssetSource = {\n  name: 'sanity-default',\n  title: 'Uploaded files',\n  i18nKey: 'asset-source.file.title',\n  component: DefaultSource,\n  icon: DocumentsIcon,\n}\n","import {ImageIcon} from '@sanity/icons'\nimport {type AssetSource} from '@sanity/types'\n\nimport {DefaultSource} from './shared/DefaultSource'\n\nexport const ImageSource: AssetSource = {\n  name: 'sanity-default',\n  title: 'Uploaded images',\n  i18nKey: 'asset-source.image.title',\n  component: DefaultSource,\n  icon: ImageIcon,\n}\n","import {\n  type AssetSource,\n  isSearchStrategy,\n  type SchemaTypeDefinition,\n  searchStrategies,\n  type SearchStrategy,\n} from '@sanity/types'\nimport {type ErrorInfo, type ReactNode} from 'react'\n\nimport {type LocaleConfigContext, type LocaleDefinition, type LocaleResourceBundle} from '../i18n'\nimport {type Template, type TemplateItem} from '../templates'\nimport {getPrintableType} from '../util/getPrintableType'\nimport {\n  type DocumentActionComponent,\n  type DocumentBadgeComponent,\n  type DocumentInspector,\n} from './document'\nimport {flattenConfig} from './flattenConfig'\nimport {\n  type AsyncConfigPropertyReducer,\n  type ConfigContext,\n  type ConfigPropertyReducer,\n  type DocumentActionsContext,\n  type DocumentBadgesContext,\n  type DocumentCommentsEnabledContext,\n  type DocumentInspectorContext,\n  type DocumentLanguageFilterComponent,\n  type DocumentLanguageFilterContext,\n  type NewDocumentOptionsContext,\n  type PluginOptions,\n  type ResolveProductionUrlContext,\n  type Tool,\n} from './types'\n\nexport const initialDocumentBadges: DocumentBadgeComponent[] = []\n\nexport const initialDocumentActions: DocumentActionComponent[] = []\n\nexport const initialLanguageFilter: DocumentLanguageFilterComponent[] = []\n\nexport const schemaTypesReducer: ConfigPropertyReducer<\n  SchemaTypeDefinition[],\n  Omit<ConfigContext, 'schema' | 'currentUser' | 'client' | 'getClient' | 'i18n'>\n> = (prev, {schema}, context) => {\n  const schemaTypes = schema?.types\n\n  if (!schemaTypes) return prev\n  if (typeof schemaTypes === 'function') return schemaTypes(prev, context)\n  if (Array.isArray(schemaTypes)) return [...prev, ...schemaTypes]\n\n  throw new Error(\n    `Expected \\`schema.types\\` to be an array or a function, but received ${getPrintableType(\n      schemaTypes,\n    )}`,\n  )\n}\n\nexport const resolveProductionUrlReducer: AsyncConfigPropertyReducer<\n  string | undefined,\n  ResolveProductionUrlContext\n> = async (prev, {document}, context) => {\n  const resolveProductionUrl = document?.productionUrl\n  // the redundant await is useful for error logging because the error is caught\n  // in this stack vs somewhere down stream\n  // eslint-disable-next-line no-return-await\n  if (resolveProductionUrl) return await resolveProductionUrl(prev, context)\n  return prev\n}\n\nexport const toolsReducer: ConfigPropertyReducer<Tool[], ConfigContext> = (\n  prev,\n  {tools},\n  context,\n) => {\n  if (!tools) return prev\n  if (typeof tools === 'function') return tools(prev, context)\n  if (Array.isArray(tools)) return [...prev, ...tools]\n\n  throw new Error(\n    `Expected \\`tools\\` to be an array or a function, but received ${getPrintableType(tools)}`,\n  )\n}\n\n// we will need this when we ressurect user config for search\n/*export const searchFilterReducer: ConfigPropertyReducer<\n  SearchFilterDefinition<string>[],\n  ConfigContext\n> = (prev, {search}, context) => {\n  const filters = search?.filters\n  if (!filters) return prev\n  if (typeof filters === 'function') return filters(prev, context)\n  if (Array.isArray(filters)) return [...prev, ...filters]\n\n  throw new Error(\n    `Expected \\`search.filters\\` to be an array or a function, but received ${typeof filters}`\n  )\n}\n\nexport const searchOperatorsReducer: ConfigPropertyReducer<\n  SearchOperatorDefinition[],\n  ConfigContext\n> = (prev, {search}, context) => {\n  const operators = search?.operators\n  if (!operators) return prev\n  if (typeof operators === 'function') return operators(prev, context)\n  if (Array.isArray(operators)) return [...prev, ...operators]\n\n  throw new Error(\n    `Expected \\`operators\\` to be be an array or a function, but received ${getPrintableType(operators)}`\n  )\n}*/\n\nexport const schemaTemplatesReducer: ConfigPropertyReducer<Template[], ConfigContext> = (\n  prev,\n  {schema},\n  context,\n) => {\n  const schemaTemplates = schema?.templates\n  if (!schemaTemplates) return prev\n  if (typeof schemaTemplates === 'function') return schemaTemplates(prev, context)\n  if (Array.isArray(schemaTemplates)) return [...prev, ...schemaTemplates]\n\n  throw new Error(\n    `Expected \\`schema.templates\\` to be an array or a function, but received ${getPrintableType(\n      schemaTemplates,\n    )}`,\n  )\n}\n\nexport const localeDefReducer: ConfigPropertyReducer<LocaleDefinition[], LocaleConfigContext> = (\n  prev,\n  {i18n},\n  context,\n) => {\n  const locales = i18n?.locales\n  if (!locales) return prev\n  if (typeof locales === 'function') return locales(prev, context)\n  if (Array.isArray(locales)) return [...prev, ...locales]\n\n  throw new Error(\n    `Expected \\`i18n.locales\\` to be an array or a function, but received ${getPrintableType(\n      locales,\n    )}`,\n  )\n}\n\nexport const localeBundlesReducer: ConfigPropertyReducer<\n  LocaleResourceBundle[],\n  LocaleConfigContext\n> = (prev, {i18n}, context) => {\n  const bundles = i18n?.bundles\n  if (!bundles) return prev\n  if (Array.isArray(bundles)) return [...prev, ...bundles]\n  if (typeof bundles === 'function') return bundles(prev, context)\n\n  throw new Error(\n    `Expected \\`i18n.bundles\\` to be an array or a function, but received ${typeof bundles}`,\n  )\n}\n\nexport const documentBadgesReducer: ConfigPropertyReducer<\n  DocumentBadgeComponent[],\n  DocumentBadgesContext\n> = (prev, {document}, context) => {\n  const documentBadges = document?.badges\n  if (!documentBadges) return prev\n\n  if (typeof documentBadges === 'function') return documentBadges(prev, context)\n  if (Array.isArray(documentBadges)) return [...prev, ...documentBadges]\n\n  throw new Error(\n    `Expected \\`document.badges\\` to be an array or a function, but received ${getPrintableType(\n      documentBadges,\n    )}`,\n  )\n}\n\nexport const documentActionsReducer: ConfigPropertyReducer<\n  DocumentActionComponent[],\n  DocumentActionsContext\n> = (prev, {document}, context) => {\n  const documentActions = document?.actions\n  if (!documentActions) return prev\n\n  if (typeof documentActions === 'function') return documentActions(prev, context)\n  if (Array.isArray(documentActions)) return [...prev, ...documentActions]\n\n  throw new Error(\n    `Expected \\`document.actions\\` to be an array or a function, but received ${getPrintableType(\n      documentActions,\n    )}`,\n  )\n}\n\nexport const newDocumentOptionsResolver: ConfigPropertyReducer<\n  TemplateItem[],\n  NewDocumentOptionsContext\n> = (prev, {document}, context) => {\n  const resolveNewDocumentOptions = document?.newDocumentOptions\n  if (!resolveNewDocumentOptions) return prev\n\n  if (typeof resolveNewDocumentOptions !== 'function') {\n    throw new Error(\n      `Expected \\`document.resolveNewDocumentOptions\\` to be a function, but received ${getPrintableType(\n        resolveNewDocumentOptions,\n      )}`,\n    )\n  }\n\n  return resolveNewDocumentOptions(prev, context)\n}\n\nexport const fileAssetSourceResolver: ConfigPropertyReducer<AssetSource[], ConfigContext> = (\n  prev,\n  {form},\n  context,\n) => {\n  const assetSources = form?.file?.assetSources\n  if (!assetSources) return prev\n\n  if (typeof assetSources === 'function') return assetSources(prev, context)\n  if (Array.isArray(assetSources)) return [...prev, ...assetSources]\n\n  throw new Error(\n    `Expected \\`form.file.assetSources\\` to be an array or a function, but received ${getPrintableType(\n      assetSources,\n    )}`,\n  )\n}\n\nexport const imageAssetSourceResolver: ConfigPropertyReducer<AssetSource[], ConfigContext> = (\n  prev,\n  {form},\n  context,\n) => {\n  const assetSources = form?.image?.assetSources\n  if (!assetSources) return prev\n\n  if (typeof assetSources === 'function') return assetSources(prev, context)\n  if (Array.isArray(assetSources)) return [...prev, ...assetSources]\n\n  throw new Error(\n    `Expected \\`form.image.assetSources\\` to be an array or a function, but received ${getPrintableType(\n      assetSources,\n    )}`,\n  )\n}\n\n/**\n * @internal\n */\nexport const documentLanguageFilterReducer: ConfigPropertyReducer<\n  DocumentLanguageFilterComponent[],\n  DocumentLanguageFilterContext\n> = (prev, {document}, context) => {\n  const resolveDocumentLanguageFilter = document?.unstable_languageFilter\n  if (!resolveDocumentLanguageFilter) return prev\n\n  if (typeof resolveDocumentLanguageFilter === 'function')\n    return resolveDocumentLanguageFilter(prev, context)\n\n  if (Array.isArray(resolveDocumentLanguageFilter))\n    return [...prev, ...resolveDocumentLanguageFilter]\n\n  throw new Error(\n    `Expected \\`document.unstable_languageFilter\\` to be an array or a function, but received ${getPrintableType(\n      resolveDocumentLanguageFilter,\n    )}`,\n  )\n}\n\nexport const documentInspectorsReducer: ConfigPropertyReducer<\n  DocumentInspector[],\n  DocumentInspectorContext\n> = (prev, {document}, context) => {\n  const resolveInspectorsFilter = document?.inspectors\n  if (!resolveInspectorsFilter) return prev\n\n  if (typeof resolveInspectorsFilter === 'function') return resolveInspectorsFilter(prev, context)\n\n  if (Array.isArray(resolveInspectorsFilter)) return [...prev, ...resolveInspectorsFilter]\n\n  throw new Error(\n    `Expected \\`document.inspectors\\` to be an array or a function, but received ${getPrintableType(\n      resolveInspectorsFilter,\n    )}`,\n  )\n}\n\nexport const documentCommentsEnabledReducer = (opts: {\n  config: PluginOptions\n  context: DocumentCommentsEnabledContext\n  initialValue: boolean\n}): boolean => {\n  const {config, context, initialValue} = opts\n  const flattenedConfig = flattenConfig(config, [])\n\n  // There is no concept of 'previous value' in this API. We only care about the final value.\n  // That is, if a plugin returns true, but the next plugin returns false, the result will be false.\n  // The last plugin 'wins'.\n  const result = flattenedConfig.reduce((acc, {config: innerConfig}) => {\n    const resolver =\n      innerConfig.document?.comments?.enabled ?? innerConfig.document?.unstable_comments?.enabled\n\n    if (!resolver && typeof resolver !== 'boolean') return acc\n    if (typeof resolver === 'function') return resolver(context)\n    if (typeof resolver === 'boolean') return resolver\n\n    throw new Error(\n      `Expected \\`document.comments.enabled\\` to be a boolean or a function, but received ${getPrintableType(\n        resolver,\n      )}`,\n    )\n  }, initialValue)\n\n  return result\n}\n\nexport const onUncaughtErrorResolver = (opts: {\n  config: PluginOptions\n  context: {error: Error; errorInfo: ErrorInfo}\n}) => {\n  const {config, context} = opts\n  const flattenedConfig = flattenConfig(config, [])\n  flattenedConfig.forEach(({config: pluginConfig}) => {\n    // There is no concept of 'previous value' in this API. We only care about the final value.\n    // That is, if a plugin returns true, but the next plugin returns false, the result will be false.\n    // The last plugin 'wins'.\n    const resolver = pluginConfig.onUncaughtError\n\n    if (typeof resolver === 'function') return resolver(context.error, context.errorInfo)\n    if (!resolver) return undefined\n\n    throw new Error(\n      `Expected \\`document.onUncaughtError\\` to be a a function, but received ${getPrintableType(\n        resolver,\n      )}`,\n    )\n  })\n}\n\nexport const internalTasksReducer = (opts: {\n  config: PluginOptions\n}): {footerAction: ReactNode} | undefined => {\n  const {config} = opts\n  const flattenedConfig = flattenConfig(config, [])\n\n  const result = flattenedConfig.reduce(\n    (acc: {footerAction: ReactNode} | undefined, {config: innerConfig}) => {\n      const resolver = innerConfig.__internal_tasks\n\n      if (!resolver) return acc\n      if (typeof resolver === 'object' && resolver.footerAction) return resolver\n\n      throw new Error(\n        `Expected \\`__internal__tasks\\` to be an object with footerAction, but received ${getPrintableType(\n          resolver,\n        )}`,\n      )\n    },\n    undefined,\n  )\n\n  return result\n}\n\nexport const eventsAPIReducer = (opts: {\n  config: PluginOptions\n  initialValue: boolean\n  key: 'releases' | 'documents'\n}): boolean => {\n  const {config, initialValue} = opts\n  const flattenedConfig = flattenConfig(config, [])\n\n  const result = flattenedConfig.reduce((acc: boolean, {config: innerConfig}) => {\n    // @ts-expect-error enabled is a legacy option we want to warn beta testers in case they have enabled it.\n    if (innerConfig.beta?.eventsAPI?.enabled) {\n      throw new Error(\n        `The \\`beta.eventsAPI.enabled\\` option has been removed. Use \\`beta.eventsAPI.${opts.key}\\` instead.`,\n      )\n    }\n\n    const enabled = innerConfig.beta?.eventsAPI?.[opts.key]\n\n    if (typeof enabled === 'undefined') return acc\n    if (typeof enabled === 'boolean') return enabled\n\n    throw new Error(\n      `Expected \\`beta.eventsAPI.${opts.key}\\` to be a boolean, but received ${getPrintableType(\n        enabled,\n      )}`,\n    )\n  }, initialValue)\n\n  return result\n}\n\nexport const mediaLibraryEnabledReducer = (opts: {\n  config: PluginOptions\n  initialValue: boolean\n}): boolean => {\n  const {config, initialValue} = opts\n  const flattenedConfig = flattenConfig(config, [])\n\n  const result = flattenedConfig.reduce((acc, {config: innerConfig}) => {\n    const resolver = innerConfig.mediaLibrary?.enabled\n\n    if (!resolver && typeof resolver !== 'boolean') return acc\n    if (typeof resolver === 'boolean') return resolver\n\n    throw new Error(\n      `Expected \\`mediaLibrary.enabled\\` to be a boolean, but received ${getPrintableType(\n        resolver,\n      )}`,\n    )\n  }, initialValue)\n\n  return result\n}\n\nexport const mediaLibraryLibraryIdReducer = (opts: {\n  config: PluginOptions\n  initialValue: string | undefined\n}): string | undefined => {\n  const {config, initialValue} = opts\n  const flattenedConfig = flattenConfig(config, [])\n\n  const result = flattenedConfig.reduce((acc, {config: innerConfig}) => {\n    const resolver = innerConfig.mediaLibrary?.libraryId\n\n    if (!resolver && typeof resolver !== 'string') return acc\n    if (typeof resolver === 'string') return resolver\n\n    throw new Error(\n      `Expected \\`mediaLibrary.libraryId\\` to be a string, but received ${getPrintableType(\n        resolver,\n      )}`,\n    )\n  }, initialValue)\n\n  return result\n}\n\nexport const serverDocumentActionsReducer = (opts: {\n  config: PluginOptions\n  initialValue: boolean | undefined\n}): boolean | undefined => {\n  const {config, initialValue} = opts\n  const flattenedConfig = flattenConfig(config, [])\n\n  const result = flattenedConfig.reduce((acc: boolean | undefined, {config: innerConfig}) => {\n    const enabled = innerConfig.__internal_serverDocumentActions?.enabled\n\n    if (typeof enabled === 'undefined') return acc\n    if (typeof enabled === 'boolean') return enabled\n\n    throw new Error(\n      `Expected \\`__internal_serverDocumentActions\\` to be a boolean, but received ${getPrintableType(\n        enabled,\n      )}`,\n    )\n  }, initialValue)\n\n  return result\n}\n\nexport const partialIndexingEnabledReducer = (opts: {\n  config: PluginOptions\n  initialValue: boolean\n}): boolean => {\n  const {config, initialValue} = opts\n  const flattenedConfig = flattenConfig(config, [])\n\n  const result = flattenedConfig.reduce((acc, {config: innerConfig}) => {\n    const resolver = innerConfig.search?.unstable_partialIndexing?.enabled\n\n    if (!resolver && typeof resolver !== 'boolean') return acc\n    if (typeof resolver === 'boolean') return resolver\n\n    throw new Error(\n      `Expected \\`search.unstable_partialIndexing.enabled\\` to be a boolean, but received ${getPrintableType(\n        resolver,\n      )}`,\n    )\n  }, initialValue)\n\n  return result\n}\n\nexport const legacySearchEnabledReducer: ConfigPropertyReducer<boolean, ConfigContext> = (\n  prev,\n  {search},\n): boolean => {\n  if (typeof search?.enableLegacySearch !== 'undefined') {\n    return search.enableLegacySearch\n  }\n\n  return prev\n}\n\n/**\n * Some projects may already be using the `enableLegacySearch` option. In order to gracefully\n * migrate to the `strategy` option, this reducer produces a value that respects any existing\n * `enableLegacySearch` option.\n *\n * If the project currently enables the Text Search API search strategy by setting\n * `enableLegacySearch` to `false`, this is mapped to the `groq2024` strategy.\n *\n * Any explicitly defined `strategy` value will take precedence over the value inferred from\n * `enableLegacySearch`.\n */\nexport const searchStrategyReducer = ({\n  config,\n  initialValue,\n}: {\n  config: PluginOptions\n  initialValue: SearchStrategy\n}): SearchStrategy => {\n  const flattenedConfig = flattenConfig(config, [])\n\n  type SearchStrategyReducerState = [\n    implicit: SearchStrategy | undefined,\n    explicit: SearchStrategy | undefined,\n  ]\n\n  const [implicit, explicit] = flattenedConfig.reduce<SearchStrategyReducerState>(\n    ([currentImplicit, currentExplicit], entry) => {\n      const {enableLegacySearch, strategy} = entry.config.search ?? {}\n\n      // The strategy has been explicitly defined.\n      if (typeof strategy !== 'undefined') {\n        if (!isSearchStrategy(strategy)) {\n          const listFormatter = new Intl.ListFormat('en-US', {type: 'disjunction'})\n          const options = listFormatter.format(searchStrategies.map((value) => `\"${value}\"`))\n          const received =\n            typeof strategy === 'string' ? `\"${strategy}\"` : getPrintableType(strategy)\n          throw new Error(`Expected \\`search.strategy\\` to be ${options}, but received ${received}`)\n        }\n\n        return [currentImplicit, strategy]\n      }\n\n      // The strategy has been implicitly defined.\n      if (typeof enableLegacySearch === 'boolean') {\n        return [enableLegacySearch ? 'groqLegacy' : 'groq2024', currentExplicit]\n      }\n\n      return [currentImplicit, currentExplicit]\n    },\n    [undefined, undefined],\n  )\n\n  return explicit ?? implicit ?? initialValue\n}\n\nexport const startInCreateEnabledReducer = (opts: {\n  config: PluginOptions\n  initialValue: boolean\n}): boolean => {\n  const {config, initialValue} = opts\n  const flattenedConfig = flattenConfig(config, [])\n\n  const result = flattenedConfig.reduce((acc, {config: innerConfig}) => {\n    const resolver = innerConfig.beta?.create?.startInCreateEnabled\n\n    if (!resolver && typeof resolver !== 'boolean') return acc\n    if (typeof resolver === 'boolean') return resolver\n\n    throw new Error(\n      `Expected \\`beta.create.startInCreateEnabled\\` to be a boolean, but received ${getPrintableType(\n        resolver,\n      )}`,\n    )\n  }, initialValue)\n\n  return result\n}\n\nexport const createFallbackOriginReducer = (config: PluginOptions): string | undefined => {\n  const flattenedConfig = flattenConfig(config, [])\n\n  const result = flattenedConfig.reduce(\n    (acc, {config: innerConfig}) => {\n      const resolver = innerConfig.beta?.create?.fallbackStudioOrigin\n\n      if (!resolver) return acc\n      if (typeof resolver === 'string') return resolver\n\n      throw new Error(\n        `Expected \\`beta.create.fallbackStudioOrigin\\` to be a string, but received ${getPrintableType(\n          resolver,\n        )}`,\n      )\n    },\n    undefined as string | undefined,\n  )\n\n  return result\n}\n\nexport const announcementsEnabledReducer = (opts: {\n  config: PluginOptions\n  initialValue: boolean\n}): boolean => {\n  const {config, initialValue} = opts\n  const flattenedConfig = flattenConfig(config, [])\n\n  const result = flattenedConfig.reduce((acc, {config: innerConfig}) => {\n    const resolver = innerConfig.announcements?.enabled\n\n    if (!resolver && typeof resolver !== 'boolean') return acc\n    if (typeof resolver === 'boolean') return resolver\n\n    throw new Error(\n      `Expected \\`announcements.enabled\\` to be a boolean, but received ${getPrintableType(\n        resolver,\n      )}`,\n    )\n  }, initialValue)\n\n  return result\n}\n","import {ConfigPropertyError} from './ConfigPropertyError'\nimport {flattenConfig} from './flattenConfig'\nimport {\n  type AsyncConfigPropertyReducer,\n  type ConfigPropertyReducer,\n  type PluginOptions,\n} from './types'\n\ninterface ResolveConfigPropertyOptions<TValue, TContext> {\n  propertyName: string\n  config: PluginOptions\n  context: TContext\n  initialValue: TValue\n  reducer: ConfigPropertyReducer<TValue, TContext>\n}\ninterface AsyncResolveConfigPropertyOptions<TValue, TContext> {\n  propertyName: string\n  config: PluginOptions\n  context: TContext\n  initialValue: TValue\n  asyncReducer: AsyncConfigPropertyReducer<TValue, TContext>\n}\n\nexport function resolveConfigProperty<TValue, TContext>(\n  options: ResolveConfigPropertyOptions<TValue, TContext>,\n): TValue\nexport function resolveConfigProperty<TValue, TContext>(\n  options: AsyncResolveConfigPropertyOptions<TValue, TContext>,\n): Promise<TValue>\nexport function resolveConfigProperty<TValue, TContext>({\n  config: inputConfig,\n  context,\n  initialValue,\n  propertyName,\n  ...reducers\n}:\n  | ResolveConfigPropertyOptions<TValue, TContext>\n  | AsyncResolveConfigPropertyOptions<TValue, TContext>): TValue | Promise<TValue> {\n  const configs = flattenConfig(inputConfig, [])\n\n  if ('reducer' in reducers) {\n    return configs.reduce((acc, {config, path}) => {\n      try {\n        return reducers.reducer(acc, config, context)\n      } catch (e) {\n        throw new ConfigPropertyError({\n          propertyName,\n          path: path,\n          cause: e,\n        })\n      }\n    }, initialValue)\n  }\n\n  const reducer = reducers.asyncReducer\n  return (async () => {\n    let current = initialValue\n    for (const {config, path} of configs) {\n      try {\n        current = await reducer(current, config, context)\n      } catch (e) {\n        throw new ConfigPropertyError({\n          propertyName,\n          path,\n          cause: e,\n        })\n      }\n    }\n    return current\n  })()\n}\n","import {type BackendModule, type ReadCallback} from 'i18next'\nimport {isPlainObject} from 'lodash'\n\nimport {type LocaleResourceBundle, type LocaleResourceKey, type LocaleResourceRecord} from './types'\n\n/**\n * Options for the Sanity i18next backend\n *\n * @internal\n * @hidden\n */\nexport interface SanityI18nBackendOptions {\n  bundles: LocaleResourceBundle[]\n}\n\n/**\n * Creates a \"backend\" for i18next that loads locale resources defined in configuration/plugins.\n *\n * This allows us to dynamically load only the resources used. For instance, if the user requests\n * the `vision` namespace and is using the `fr` locale, we skip loading all the other locales.\n *\n * Note that this only works if the locale bundles are defined with an async function for the\n * `resources` key, usually by using a dynamic import (`import('some/path/en.js')`. Otherwise,\n * the resources will be loaded at once.\n *\n * @param options - Options for the backend\n * @returns A backend module for i18next\n * @internal\n * @hidden\n */\nexport function createSanityI18nBackend(options: SanityI18nBackendOptions): BackendModule {\n  const {bundles} = options\n  function init() {\n    // intentional noop - i18next requires a init function, but we don't need it\n  }\n\n  function read(locale: string, namespace: string, callback: ReadCallback) {\n    const loadable = bundles.filter(\n      (bundle) => bundle.locale === locale && bundle.namespace === namespace,\n    )\n\n    if (loadable.length === 0) {\n      // @todo warn? This means someone requested a namespace/locale combination that there are no resources for\n      callback(\n        `No translations found for namespace \"${namespace}\", language \"${locale}\"`,\n        undefined, // Returning undefined here will i18next _not_ retry\n      )\n      return\n    }\n\n    loadBundles(loadable)\n      .then((resources) => callback(null, resources))\n      // Returning true for second parameter will make i18next retry.\n      // It handles the retry internally, and has both max retries and timeouts.\n      .catch((err) => callback(err, true))\n  }\n\n  return {\n    type: 'backend',\n    init,\n    read,\n  }\n}\n\n/**\n * Load the given locale bundles, and return a promise for a merged resource object.\n *\n * @param bundles - Array of bundles to load resources for\n * @returns An object of locale resources\n * @remarks\n * - The bundles passed **MUST** be for the same namespace and locale!\n * - The algorithm differs from i18next:\n *   - in i18next, if `deep` is `false`, `overwrite` is _always_ `true`\n *   - in Sanity,  `overwrite` is always respected\n * @internal\n * @hidden\n */\nasync function loadBundles(bundles: LocaleResourceBundle[]): Promise<LocaleResourceRecord> {\n  // Resolve resources in parallell to avoid waiting for each bundle as we extend\n  // Note: we may want a queue for this if people do very dynamic loading strategies\n  const resolved = await Promise.all(\n    bundles.map(async (bundle) => ({\n      ...bundle,\n      resources: await loadBundleResources(bundle),\n    })),\n  )\n\n  const base: LocaleResourceRecord = {}\n  for (const item of resolved) {\n    const deep = item.deep ?? true\n    const overwrite = item.overwrite ?? true\n\n    if (deep) {\n      deepExtend(base, item.resources, overwrite)\n    } else if (overwrite) {\n      Object.assign(base, item.resources)\n    } else {\n      Object.assign({}, item.resources, base)\n    }\n  }\n\n  return base\n}\n\n/**\n * Loads the resources of a bundle, calling any function and unwrapping any default module exports.\n *\n * @param bundle - Bundle to load resources for\n * @returns Record of resources\n */\nasync function loadBundleResources(bundle: LocaleResourceBundle): Promise<LocaleResourceRecord> {\n  if (typeof bundle.resources !== 'function') {\n    return bundle.resources\n  }\n\n  const resources = await bundle.resources()\n  return maybeUnwrapModule(resources)\n}\n\n/**\n * Deeply extend an object of resources, taking into account flat string shapes and nested objects.\n *\n * Typescripted version of i18next's internal utility for the same operation, see\n * {@link https://github.com/i18next/i18next/blob/v23.2.11/src/utils.js#L89}\n *\n * We need this because we're letting the backend do the merging instead of using `addResourceBundle`.\n *\n * @param target - Target object to extend\n * @param source - Source object to merge into target\n * @param overwrite - Whether to overwrite existing strings/objects\n * @returns A merged object\n * @internal\n */\nfunction deepExtend(\n  target: LocaleResourceRecord,\n  source: LocaleResourceRecord,\n  overwrite = false,\n): LocaleResourceRecord {\n  for (const prop in source) {\n    if (prop === '__proto__' || prop === 'constructor') {\n      continue\n    }\n\n    // Assign missing properties directly\n    if (!(prop in target)) {\n      target[prop] = source[prop]\n      continue\n    }\n\n    const targetLeaf = target[prop]\n    const sourceLeaf = source[prop]\n\n    const targetIsString = isStringLeaf(targetLeaf)\n    const sourceIsString = isStringLeaf(sourceLeaf)\n\n    // We reached a leaf string in target OR source\n    if ((targetIsString || sourceIsString) && overwrite) {\n      target[prop] = source[prop]\n      continue\n    }\n\n    if (targetIsString || sourceIsString) {\n      // Skip, since we are not overwriting\n      continue\n    }\n\n    // If we're overwriting with an array, don't try to merge objects/arrays, just overwrite\n    const sourceIsArray = Array.isArray(sourceLeaf)\n    const targetIsArray = Array.isArray(targetLeaf)\n    if (sourceIsArray || targetIsArray) {\n      // Nothing to do here if we can't overwrite\n      if (overwrite) {\n        target[prop] = sourceLeaf\n      }\n      continue\n    }\n\n    // Recurse deeper since we haven't reached a leaf\n    deepExtend(targetLeaf, sourceLeaf, overwrite)\n  }\n\n  return target\n}\n\n/**\n * Returns whether or not the target is leaf, eg a string\n *\n * @param target - The target to check\n * @returns True if string/instance of string, false otherwise\n * @internal\n */\nfunction isStringLeaf(target: LocaleResourceKey): target is string {\n  return typeof target === 'string' || target instanceof String\n}\n\n/**\n * Unwraps an imported module if it only contains a default export\n *\n * @param maybeModule - Module to unwrap\n * @returns Unwrapped resource record\n * @internal\n */\nfunction maybeUnwrapModule(\n  maybeModule: LocaleResourceRecord | {default: LocaleResourceRecord},\n): LocaleResourceRecord {\n  return isWrappedModule(maybeModule) ? maybeModule.default : maybeModule\n}\n\n/**\n * Checks whether or not the passed item is wrapped\n *\n * @param mod - Item to check whether or not is wrapped\n * @returns True if wrapped, false otherwise\n * @internal\n */\nfunction isWrappedModule(\n  mod: LocaleResourceRecord | {default: LocaleResourceRecord},\n): mod is {default: LocaleResourceRecord} {\n  return 'default' in mod && typeof mod.default === 'object' && isPlainObject(mod.default)\n}\n","import {createInstance as createI18nInstance, type i18n, type InitOptions} from 'i18next'\nimport {initReactI18next} from 'react-i18next'\n\nimport {type SourceOptions} from '../config'\nimport {localeBundlesReducer, localeDefReducer} from '../config/configPropertyReducers'\nimport {resolveConfigProperty} from '../config/resolveConfigProperty'\nimport {createSanityI18nBackend} from './backend'\nimport {DEBUG_I18N, maybeWrapT} from './debug'\nimport {studioLocaleNamespace} from './localeNamespaces'\nimport {defaultLocale} from './locales'\nimport {getPreferredLocale} from './localeStore'\nimport {\n  type Locale,\n  type LocaleDefinition,\n  type LocaleResourceBundle,\n  type LocaleSource,\n} from './types'\n\n/**\n * @internal\n * @hidden\n */\nexport function prepareI18n(source: SourceOptions): {source: LocaleSource; i18next: i18n} {\n  const {projectId, dataset, name: sourceName} = source\n  const context = {projectId: projectId, dataset}\n\n  const locales = resolveConfigProperty({\n    config: source,\n    context,\n    propertyName: 'i18n.locales',\n    reducer: localeDefReducer,\n    initialValue: [defaultLocale],\n  })\n\n  const bundles = resolveConfigProperty({\n    config: source,\n    context,\n    propertyName: 'i18n.bundles',\n    reducer: localeBundlesReducer,\n    initialValue: normalizeResourceBundles(locales),\n  })\n\n  return createI18nApi({\n    locales,\n    bundles,\n    projectId,\n    sourceName,\n  })\n}\n\nfunction createI18nApi({\n  locales,\n  bundles,\n  projectId,\n  sourceName,\n}: {\n  locales: LocaleDefinition[]\n  bundles: LocaleResourceBundle[]\n  projectId: string\n  sourceName: string\n}): {source: LocaleSource; i18next: i18n} {\n  const namespaceNames = new Set(bundles.map((bundle) => bundle.namespace))\n  const options = getI18NextOptions(projectId, sourceName, locales, namespaceNames)\n  const i18nInstance = createI18nInstance()\n    .use(createSanityI18nBackend({bundles}))\n    .use(initReactI18next)\n\n  i18nInstance.init(options).catch((err) => {\n    console.error('Failed to initialize i18n backend: %s', err)\n  })\n\n  const reducedLocales = locales.map(reduceLocaleDefinition)\n\n  return {\n    /** @public */\n    source: {\n      get currentLocale() {\n        return reducedLocales.find((locale) => locale.id === i18nInstance.language) ?? defaultLocale\n      },\n      loadNamespaces(namespaces: string[]): Promise<void> {\n        const missing = namespaces.filter((ns) => !i18nInstance.hasLoadedNamespace(ns))\n        return missing.length === 0 ? Promise.resolve() : i18nInstance.loadNamespaces(missing)\n      },\n      locales: reducedLocales,\n      t: maybeWrapT(i18nInstance.t),\n    },\n\n    /** @internal */\n    i18next: i18nInstance,\n  }\n}\n\n/**\n * Takes the locales config and returns a normalized array of bundles from the defined locales.\n *\n * @param locales - The locale bundles defined in configuration/plugins\n * @returns An array of normalized bundles\n * @internal\n */\nfunction normalizeResourceBundles(locales: LocaleDefinition[]): LocaleResourceBundle[] {\n  const normalized: LocaleResourceBundle[] = []\n\n  for (const lang of locales) {\n    if (lang.bundles && !Array.isArray(lang.bundles)) {\n      throw new Error(`Resource bundle for locale ${lang.id} is not an array`)\n    }\n\n    if (!lang.bundles) {\n      continue\n    }\n\n    for (const bundle of lang.bundles) {\n      if ('locale' in bundle && bundle.locale !== lang.id) {\n        throw new Error(`Resource bundle inside locale ${lang.id} has mismatching locale id`)\n      }\n\n      const ns = bundle.namespace\n      if (!ns) {\n        throw new Error(`Resource bundle for locale ${lang.id} is missing namespace`)\n      }\n\n      normalized.push('locale' in bundle ? bundle : {...bundle, locale: lang.id})\n    }\n  }\n\n  return normalized\n}\n\nconst defaultOptions: InitOptions = {\n  /**\n   * Even though we're only defining the studio namespace, i18next will still load requested\n   * namespaces through the backend. The reason why we're defining the namespace at all is to\n   * prevent i18next from (trying) to load the i18next default `translation` namespace.\n   */\n  ns: [studioLocaleNamespace],\n  defaultNS: studioLocaleNamespace,\n  partialBundledLanguages: true,\n\n  // Fall back to English (US) locale\n  fallbackLng: defaultLocale.id,\n\n  // This will be overriden with the users detected/preferred locale before initing,\n  // but to satisfy the init options and prevent mistakes, we include a default here.\n  lng: defaultLocale.id,\n\n  // In rare cases we'll want to be able to debug i18next - there is a `debug` option\n  // in the studio i18n configuration for that, which will override this value.\n  debug: DEBUG_I18N,\n\n  // When specifying language 'en-US', do not load 'en-US', 'en', 'dev' - only `en-US`.\n  load: 'currentOnly',\n\n  // We always use our \"backend\" for loading translations, allowing us to handle i18n resources\n  // in a single place with a single approach. This means we shouldn't need to wait for the init,\n  // as any missing translations will be loaded async (through react suspense).\n  initImmediate: true,\n\n  // Because we use i18next-react, we do not need to escale values\n  interpolation: {\n    escapeValue: false,\n  },\n\n  // Theoretically, if the framework somehow gets new translations added, re-render.\n  // Note that this shouldn't actually happen, as we only use the Sanity backend\n  react: {\n    bindI18nStore: 'added',\n  },\n}\n\nfunction getI18NextOptions(\n  projectId: string,\n  sourceName: string,\n  locales: LocaleDefinition[],\n  namespaces: Set<string>,\n): InitOptions & {lng: string} {\n  const preferredLocaleId = getPreferredLocale(projectId, sourceName)\n  const preferredLocale = locales.find((l) => l.id === preferredLocaleId)\n  const lastLocale = locales[locales.length - 1]\n  const locale = preferredLocale?.id ?? lastLocale.id ?? defaultOptions.lng\n  return {\n    ...defaultOptions,\n    ns: Array.from(namespaces), // For now, let us load all namespaces. We can optimize later.\n    lng: locale,\n    supportedLngs: locales.map((def) => def.id),\n  }\n}\n\n/**\n * Reduce a locale definition to a Locale instance\n *\n * @param definition - The locale definition to reduce\n * @returns A Locale instance\n * @internal\n */\nfunction reduceLocaleDefinition(definition: LocaleDefinition): Locale {\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  const {bundles, ...locale} = definition\n  return locale\n}\n","import {\n  BlockContentIcon,\n  CalendarIcon,\n  CheckmarkCircleIcon,\n  ChevronDownIcon,\n  DocumentIcon,\n  ImageIcon,\n  LinkIcon,\n  NumberIcon,\n  StringIcon,\n  UlistIcon,\n} from '@sanity/icons'\n\nimport {defineSearchFilter, type SearchFilterDefinition} from './filters'\nimport {type SearchOperatorType} from './operators/defaultOperators'\n\nexport const filterDefinitions: SearchFilterDefinition[] = [\n  // 'Pinned' filters\n  defineSearchFilter<SearchOperatorType>({\n    fieldPath: '_updatedAt',\n    icon: CalendarIcon,\n    operators: [\n      {name: 'dateTimeLast', type: 'item'},\n      {type: 'divider'},\n      {name: 'dateTimeRange', type: 'item'},\n      {name: 'dateTimeAfter', type: 'item'},\n      {name: 'dateTimeBefore', type: 'item'},\n      {type: 'divider'},\n      {name: 'dateTimeEqual', type: 'item'},\n      {name: 'dateTimeNotEqual', type: 'item'},\n    ],\n    title: 'Edited at',\n    name: 'updatedAt',\n    type: 'pinned',\n  }),\n  defineSearchFilter<SearchOperatorType>({\n    fieldPath: '_createdAt',\n    icon: CalendarIcon,\n    operators: [\n      {name: 'dateTimeLast', type: 'item'},\n      {type: 'divider'},\n      {name: 'dateTimeRange', type: 'item'},\n      {name: 'dateTimeAfter', type: 'item'},\n      {name: 'dateTimeBefore', type: 'item'},\n      {type: 'divider'},\n      {name: 'dateTimeEqual', type: 'item'},\n      {name: 'dateTimeNotEqual', type: 'item'},\n    ],\n    title: 'Created at',\n    name: 'createdAt',\n    type: 'pinned',\n  }),\n  defineSearchFilter<SearchOperatorType>({\n    icon: LinkIcon,\n    operators: [\n      {name: 'referencesDocument', type: 'item'},\n      {name: 'referencesAssetImage', type: 'item'},\n      {name: 'referencesAssetFile', type: 'item'},\n    ],\n    title: 'Contains document, image or file',\n    name: 'references',\n    type: 'pinned',\n  }),\n  // 'Field' filters\n  defineSearchFilter<SearchOperatorType>({\n    fieldType: 'array',\n    icon: UlistIcon,\n    name: 'array',\n    operators: [\n      {name: 'defined', type: 'item'},\n      {name: 'notDefined', type: 'item'},\n      {type: 'divider'},\n      {name: 'arrayCountEqual', type: 'item'},\n      {name: 'arrayCountNotEqual', type: 'item'},\n      {type: 'divider'},\n      {name: 'arrayCountGt', type: 'item'},\n      {name: 'arrayCountGte', type: 'item'},\n      {name: 'arrayCountLt', type: 'item'},\n      {name: 'arrayCountLte', type: 'item'},\n      {type: 'divider'},\n      {name: 'arrayCountRange', type: 'item'},\n    ],\n    type: 'field',\n  }),\n  defineSearchFilter<SearchOperatorType>({\n    fieldType: 'array',\n    icon: UlistIcon,\n    name: 'arrayList',\n    operators: [\n      {name: 'arrayListIncludes', type: 'item'},\n      {name: 'arrayListNotIncludes', type: 'item'},\n      {type: 'divider'},\n      {name: 'defined', type: 'item'},\n      {name: 'notDefined', type: 'item'},\n      {type: 'divider'},\n      {name: 'arrayCountEqual', type: 'item'},\n      {name: 'arrayCountNotEqual', type: 'item'},\n      {type: 'divider'},\n      {name: 'arrayCountGt', type: 'item'},\n      {name: 'arrayCountGte', type: 'item'},\n      {name: 'arrayCountLt', type: 'item'},\n      {name: 'arrayCountLte', type: 'item'},\n      {type: 'divider'},\n      {name: 'arrayCountRange', type: 'item'},\n    ],\n    type: 'field',\n  }),\n  defineSearchFilter<SearchOperatorType>({\n    fieldType: 'array',\n    icon: UlistIcon,\n    name: 'arrayReferences',\n    operators: [\n      {name: 'arrayReferenceIncludes', type: 'item'},\n      {name: 'arrayReferenceNotIncludes', type: 'item'},\n      {type: 'divider'},\n      {name: 'defined', type: 'item'},\n      {name: 'notDefined', type: 'item'},\n      {type: 'divider'},\n      {name: 'arrayCountEqual', type: 'item'},\n      {name: 'arrayCountNotEqual', type: 'item'},\n      {type: 'divider'},\n      {name: 'arrayCountGt', type: 'item'},\n      {name: 'arrayCountGte', type: 'item'},\n      {name: 'arrayCountLt', type: 'item'},\n      {name: 'arrayCountLte', type: 'item'},\n      {type: 'divider'},\n      {name: 'arrayCountRange', type: 'item'},\n    ],\n    type: 'field',\n  }),\n  defineSearchFilter<SearchOperatorType>({\n    fieldType: 'boolean',\n    icon: CheckmarkCircleIcon,\n    name: 'boolean',\n    operators: [\n      {name: 'booleanEqual', type: 'item'},\n      {type: 'divider'},\n      {name: 'notDefined', type: 'item'},\n    ],\n    type: 'field',\n  }),\n  defineSearchFilter<SearchOperatorType>({\n    fieldType: 'date',\n    icon: CalendarIcon,\n    name: 'date',\n    operators: [\n      {name: 'dateLast', type: 'item'},\n      {type: 'divider'},\n      {name: 'dateRange', type: 'item'},\n      {name: 'dateAfter', type: 'item'},\n      {name: 'dateBefore', type: 'item'},\n      {type: 'divider'},\n      {name: 'dateEqual', type: 'item'},\n      {name: 'dateNotEqual', type: 'item'},\n      {type: 'divider'},\n      {name: 'defined', type: 'item'},\n      {name: 'notDefined', type: 'item'},\n    ],\n    type: 'field',\n  }),\n  defineSearchFilter<SearchOperatorType>({\n    fieldType: 'datetime',\n    icon: CalendarIcon,\n    name: 'datetime',\n    operators: [\n      {name: 'dateTimeLast', type: 'item'},\n      {type: 'divider'},\n      {name: 'dateTimeRange', type: 'item'},\n      {name: 'dateTimeAfter', type: 'item'},\n      {name: 'dateTimeBefore', type: 'item'},\n      {type: 'divider'},\n      {name: 'dateTimeEqual', type: 'item'},\n      {name: 'dateTimeNotEqual', type: 'item'},\n      {type: 'divider'},\n      {name: 'defined', type: 'item'},\n      {name: 'notDefined', type: 'item'},\n    ],\n    type: 'field',\n  }),\n  defineSearchFilter<SearchOperatorType>({\n    fieldType: 'email',\n    icon: StringIcon,\n    name: 'email',\n    operators: [\n      {name: 'stringMatches', type: 'item'},\n      {name: 'stringNotMatches', type: 'item'},\n      {type: 'divider'},\n      {name: 'stringEqual', type: 'item'},\n      {name: 'stringNotEqual', type: 'item'},\n      {type: 'divider'},\n      {name: 'defined', type: 'item'},\n      {name: 'notDefined', type: 'item'},\n    ],\n    type: 'field',\n  }),\n  defineSearchFilter<SearchOperatorType>({\n    fieldType: 'file',\n    icon: DocumentIcon,\n    name: 'file',\n    operators: [\n      {name: 'assetFileEqual', type: 'item'},\n      {name: 'assetFileNotEqual', type: 'item'},\n      {type: 'divider'},\n      {name: 'defined', type: 'item'},\n      {name: 'notDefined', type: 'item'},\n    ],\n    type: 'field',\n  }),\n  defineSearchFilter<SearchOperatorType>({\n    fieldType: 'image',\n    icon: ImageIcon,\n    name: 'image',\n    operators: [\n      {name: 'assetImageEqual', type: 'item'},\n      {name: 'assetImageNotEqual', type: 'item'},\n      {type: 'divider'},\n      {name: 'defined', type: 'item'},\n      {name: 'notDefined', type: 'item'},\n    ],\n    type: 'field',\n  }),\n  defineSearchFilter<SearchOperatorType>({\n    fieldType: 'number',\n    icon: NumberIcon,\n    name: 'number',\n    operators: [\n      {name: 'numberEqual', type: 'item'},\n      {name: 'numberNotEqual', type: 'item'},\n      {type: 'divider'},\n      {name: 'numberGt', type: 'item'},\n      {name: 'numberGte', type: 'item'},\n      {name: 'numberLt', type: 'item'},\n      {name: 'numberLte', type: 'item'},\n      {type: 'divider'},\n      {name: 'numberRange', type: 'item'},\n      {type: 'divider'},\n      {name: 'defined', type: 'item'},\n      {name: 'notDefined', type: 'item'},\n    ],\n    type: 'field',\n  }),\n  defineSearchFilter<SearchOperatorType>({\n    fieldType: 'array',\n    icon: BlockContentIcon,\n    name: 'portableText',\n    operators: [\n      {name: 'portableTextMatches', type: 'item'},\n      {name: 'portableTextNotMatches', type: 'item'},\n      {type: 'divider'},\n      {name: 'portableTextEqual', type: 'item'},\n      {name: 'portableTextNotEqual', type: 'item'},\n      {type: 'divider'},\n      {name: 'defined', type: 'item'},\n      {name: 'notDefined', type: 'item'},\n    ],\n    type: 'field',\n  }),\n  defineSearchFilter<SearchOperatorType>({\n    fieldType: 'reference',\n    icon: LinkIcon,\n    name: 'reference',\n    operators: [\n      {name: 'referenceEqual', type: 'item'},\n      {name: 'referenceNotEqual', type: 'item'},\n      {type: 'divider'},\n      {name: 'defined', type: 'item'},\n      {name: 'notDefined', type: 'item'},\n    ],\n    type: 'field',\n  }),\n  defineSearchFilter<SearchOperatorType>({\n    fieldType: 'slug',\n    icon: StringIcon,\n    name: 'slug',\n    operators: [\n      {name: 'slugMatches', type: 'item'},\n      {name: 'slugNotMatches', type: 'item'},\n      {type: 'divider'},\n      {name: 'slugEqual', type: 'item'},\n      {name: 'slugNotEqual', type: 'item'},\n      {type: 'divider'},\n      {name: 'defined', type: 'item'},\n      {name: 'notDefined', type: 'item'},\n    ],\n    type: 'field',\n  }),\n  defineSearchFilter<SearchOperatorType>({\n    fieldType: 'string',\n    icon: StringIcon,\n    name: 'string',\n    operators: [\n      {name: 'stringMatches', type: 'item'},\n      {name: 'stringNotMatches', type: 'item'},\n      {type: 'divider'},\n      {name: 'stringEqual', type: 'item'},\n      {name: 'stringNotEqual', type: 'item'},\n      {type: 'divider'},\n      {name: 'defined', type: 'item'},\n      {name: 'notDefined', type: 'item'},\n    ],\n    type: 'field',\n  }),\n  defineSearchFilter<SearchOperatorType>({\n    fieldType: 'string',\n    icon: ChevronDownIcon,\n    name: 'stringList',\n    operators: [\n      {name: 'stringListEqual', type: 'item'},\n      {name: 'stringListNotEqual', type: 'item'},\n      {type: 'divider'},\n      {name: 'stringMatches', type: 'item'},\n      {name: 'stringNotMatches', type: 'item'},\n      {type: 'divider'},\n      {name: 'defined', type: 'item'},\n      {name: 'notDefined', type: 'item'},\n    ],\n    type: 'field',\n  }),\n  defineSearchFilter<SearchOperatorType>({\n    fieldType: 'text',\n    icon: StringIcon,\n    name: 'text',\n    operators: [\n      {name: 'stringMatches', type: 'item'},\n      {name: 'stringNotMatches', type: 'item'},\n      {type: 'divider'},\n      {name: 'stringEqual', type: 'item'},\n      {name: 'stringNotEqual', type: 'item'},\n      {type: 'divider'},\n      {name: 'defined', type: 'item'},\n      {name: 'notDefined', type: 'item'},\n    ],\n    type: 'field',\n  }),\n  defineSearchFilter<SearchOperatorType>({\n    fieldType: 'url',\n    icon: StringIcon,\n    name: 'url',\n    operators: [\n      {name: 'stringMatches', type: 'item'},\n      {name: 'stringNotMatches', type: 'item'},\n      {type: 'divider'},\n      {name: 'stringEqual', type: 'item'},\n      {name: 'stringNotEqual', type: 'item'},\n      {type: 'divider'},\n      {name: 'defined', type: 'item'},\n      {name: 'notDefined', type: 'item'},\n    ],\n    type: 'field',\n  }),\n]\n","import {useCurrentLocale} from '../i18n/hooks/useLocale'\nimport {intlCache} from '../i18n/intlCache'\n\n/**\n * Options for the `useUnitFormatter` hook\n *\n * @public\n */\nexport type UseUnitFormatterOptions = Pick<\n  Intl.NumberFormatOptions,\n  'notation' | 'signDisplay' | 'unitDisplay' | 'maximumFractionDigits' | 'minimumFractionDigits'\n>\n\n/**\n * Available measurement units\n *\n * @public\n */\nexport type FormattableMeasurementUnit =\n  | 'acre'\n  | 'bit'\n  | 'byte'\n  | 'celsius'\n  | 'centimeter'\n  | 'day'\n  | 'degree'\n  | 'fahrenheit'\n  | 'fluid-ounce'\n  | 'foot'\n  | 'gallon'\n  | 'gigabit'\n  | 'gigabyte'\n  | 'gram'\n  | 'hectare'\n  | 'hour'\n  | 'inch'\n  | 'kilobit'\n  | 'kilobyte'\n  | 'kilogram'\n  | 'kilometer'\n  | 'liter'\n  | 'megabit'\n  | 'megabyte'\n  | 'meter'\n  | 'mile'\n  | 'mile-scandinavian'\n  | 'milliliter'\n  | 'millimeter'\n  | 'millisecond'\n  | 'minute'\n  | 'month'\n  | 'ounce'\n  | 'percent'\n  | 'petabyte'\n  | 'pound'\n  | 'second'\n  | 'stone'\n  | 'terabit'\n  | 'terabyte'\n  | 'week'\n  | 'yard'\n  | 'year'\n\n/**\n * Formats a number using the specified unit, using the currently active locale.\n *\n * @param value - The number to format\n * @param unit - The unit to format the number as\n * @returns The formatted number\n * @public\n */\nexport type UnitFormatter = (value: number, unit: FormattableMeasurementUnit) => string\n\n/**\n * Returns a formatter with the given options. Function takes a number and the unit to format as\n * the second argument. The formatter will yield localized output, based on the users' selected\n * locale.\n *\n * This differs from regular `Intl.NumberFormat` in two ways:\n * 1. You do not need to instantiate a new formatter for each unit you want to format\n *    (still happens behind the scenes, but is memoized)\n * 2. The default unit display style (`unitDisplay`) is `long`\n *\n * @example\n * ```ts\n * function MyComponent() {\n *   const format = useUnitFormatter()\n *   return <div>{format(2313, 'meter')}</div>\n *   // en-US -> 2,313 meters\n *   // fr-FR -> 2 313 mètres\n * }\n * ```\n *\n * @param options - Optional options for the unit formatter\n * @returns Formatter function\n * @public\n */\nexport function useUnitFormatter(options: UseUnitFormatterOptions = {}): UnitFormatter {\n  const currentLocale = useCurrentLocale().id\n  const defaultOptions: Intl.NumberFormatOptions = {\n    unitDisplay: 'long',\n    ...options,\n    style: 'unit',\n  }\n\n  return function format(value: number, unit: FormattableMeasurementUnit) {\n    const formatter = intlCache.numberFormat(currentLocale, {...defaultOptions, unit})\n    return formatter.format(value)\n  }\n}\n","import {type SchemaType} from '@sanity/types'\nimport {Skeleton} from '@sanity/ui'\nimport {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\n\nimport {getPreviewStateObservable} from '../../../../../../../preview'\nimport {useDocumentPreviewStore} from '../../../../../../../store'\n\nexport function ReferencePreviewTitle({\n  documentId,\n  schemaType,\n}: {\n  documentId: string\n  schemaType: SchemaType\n}) {\n  const documentPreviewStore = useDocumentPreviewStore()\n\n  const observable = useMemo(\n    () => getPreviewStateObservable(documentPreviewStore, schemaType, documentId),\n    [documentId, documentPreviewStore, schemaType],\n  )\n  const {snapshot, original, isLoading} = useObservable(observable, {\n    isLoading: true,\n    snapshot: null,\n    original: null,\n  })\n\n  if (isLoading) {\n    return <Skeleton animated marginLeft={1} radius={2} style={{width: '10ch', height: '1em'}} />\n  }\n\n  return <>{snapshot?.title || original?.title || documentId.slice(0, 8)}</>\n}\n","import {type Reference} from '@sanity/types'\nimport {isValid} from 'date-fns'\n\nimport {useSchema} from '../../../../../../../hooks'\nimport {useDateTimeFormat} from '../../../../../../../hooks/useDateTimeFormat'\nimport {useUnitFormatter} from '../../../../../../../hooks/useUnitFormatter'\nimport {useTranslation} from '../../../../../../../i18n'\nimport {\n  type OperatorDateEqualValue,\n  type OperatorDateLastValue,\n  type OperatorDateRangeValue,\n} from '../../../definitions/operators/dateOperators'\nimport {type OperatorButtonValueComponentProps} from '../../../definitions/operators/operatorTypes'\nimport {ReferencePreviewTitle} from './ReferencePreviewTitle'\n\nconst DEFAULT_DATE_FORMAT = 'yyyy-MM-dd'\n\nexport function SearchButtonValueBoolean({value}: OperatorButtonValueComponentProps<boolean>) {\n  const {t} = useTranslation()\n  return <>{value ? t('search.filter-boolean-true') : t('search.filter-boolean-false')}</>\n}\n\nexport function SearchButtonValueDate({\n  value,\n}: OperatorButtonValueComponentProps<OperatorDateEqualValue>) {\n  const dateFormat = useDateTimeFormat({\n    dateStyle: 'medium',\n    timeStyle: value.includeTime ? 'short' : undefined,\n  })\n  const date = value?.date ? new Date(value.date) : null\n  if (!date || !isValid(date)) {\n    return null\n  }\n  return <>{dateFormat.format(date)}</>\n}\n\nexport function SearchButtonValueDateLast({\n  value,\n}: OperatorButtonValueComponentProps<OperatorDateLastValue>) {\n  const formatUnit = useUnitFormatter()\n  return <>{formatUnit(Math.floor(value?.unitValue ?? 0), value.unit)}</>\n}\n\nexport function SearchButtonValueDateRange({\n  value,\n}: OperatorButtonValueComponentProps<OperatorDateRangeValue>) {\n  const dateFormat = useDateTimeFormat({\n    dateStyle: 'medium',\n    timeStyle: value.includeTime ? 'short' : undefined,\n  })\n  const startDate = value?.from ? new Date(value.from) : null\n  const endDate = value?.to ? new Date(value.to) : null\n  if (!endDate || !startDate || !isValid(endDate) || !isValid(startDate)) {\n    return null\n  }\n\n  const from = dateFormat.format(startDate)\n  const to = dateFormat.format(endDate)\n  return <>{`${from} → ${to}`}</>\n}\n\nexport function SearchButtonValueReference({value}: OperatorButtonValueComponentProps<Reference>) {\n  const schema = useSchema()\n  const documentId = value._ref\n  const schemaType = schema.get(value._type)\n  if (!schemaType) {\n    return null\n  }\n  return <ReferencePreviewTitle documentId={documentId} schemaType={schemaType} />\n}\n","import {TextInput} from '@sanity/ui'\nimport {type ChangeEvent, useCallback, useState} from 'react'\n\nimport {useTranslation} from '../../../../../../../../../i18n'\nimport {useSearchState} from '../../../../../contexts/search/useSearchState'\nimport {type OperatorInputComponentProps} from '../../../../../definitions/operators/operatorTypes'\n\nexport function SearchFilterNumberInput({value, onChange}: OperatorInputComponentProps<number>) {\n  const [uncontrolledValue, setUncontrolledValue] = useState(value ?? '')\n\n  const {\n    state: {fullscreen},\n  } = useSearchState()\n  const {t} = useTranslation()\n\n  const handleChange = useCallback(\n    (event: ChangeEvent<HTMLInputElement>) => {\n      setUncontrolledValue(event.currentTarget.value)\n      const numValue = parseFloat(event.currentTarget.value)\n      onChange(Number.isFinite(numValue) ? numValue : null)\n    },\n    [onChange],\n  )\n\n  return (\n    <TextInput\n      fontSize={fullscreen ? 2 : 1}\n      onChange={handleChange}\n      placeholder={t('search.filter-number-value-placeholder')}\n      radius={2}\n      step=\"any\"\n      type=\"number\"\n      value={uncontrolledValue}\n    />\n  )\n}\n","import {Box, Flex, TextInput} from '@sanity/ui'\nimport {type ChangeEvent, useCallback, useState} from 'react'\n\nimport {useTranslation} from '../../../../../../../../../i18n'\nimport {useSearchState} from '../../../../../contexts/search/useSearchState'\nimport {type OperatorNumberRangeValue} from '../../../../../definitions/operators/common'\nimport {type OperatorInputComponentProps} from '../../../../../definitions/operators/operatorTypes'\n\nexport function SearchFilterNumberRangeInput({\n  onChange,\n  value,\n}: OperatorInputComponentProps<OperatorNumberRangeValue>) {\n  const [to, setTo] = useState(value?.to ?? '')\n  const [from, setFrom] = useState(value?.from ?? '')\n\n  const {\n    state: {fullscreen},\n  } = useSearchState()\n  const {t} = useTranslation()\n\n  const handleToChange = useCallback(\n    (event: ChangeEvent<HTMLInputElement>) => {\n      setTo(event.currentTarget.value)\n      const numValue = parseFloat(event.currentTarget.value)\n      onChange({\n        to: Number.isFinite(numValue) ? numValue : null,\n        from: value?.from ?? null,\n      })\n    },\n    [value?.from, onChange],\n  )\n  const handleFromChange = useCallback(\n    (event: ChangeEvent<HTMLInputElement>) => {\n      setFrom(event.currentTarget.value)\n      const numValue = parseFloat(event.currentTarget.value)\n      onChange({\n        to: value?.to ?? null,\n        from: Number.isFinite(numValue) ? numValue : null,\n      })\n    },\n    [value?.to, onChange],\n  )\n\n  return (\n    <Flex gap={2}>\n      <Box flex={1}>\n        <TextInput\n          fontSize={fullscreen ? 2 : 1}\n          onChange={handleFromChange}\n          placeholder={t('search.filter-number-min-value-placeholder')}\n          radius={2}\n          step=\"any\"\n          type=\"number\"\n          value={from}\n        />\n      </Box>\n      <Box flex={1}>\n        <TextInput\n          fontSize={fullscreen ? 2 : 1}\n          onChange={handleToChange}\n          placeholder={t('search.filter-number-max-value-placeholder')}\n          radius={2}\n          step=\"any\"\n          type=\"number\"\n          value={to}\n        />\n      </Box>\n    </Flex>\n  )\n}\n","import {type ReferenceValue, type SchemaType} from '@sanity/types'\nimport {Autocomplete, Box, Flex, Text} from '@sanity/ui'\nimport {type ForwardedRef, forwardRef, useCallback, useId, useMemo, useRef, useState} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Popover} from '../../../../../../../../../../ui-components'\nimport {useSchema} from '../../../../../../../../../hooks'\nimport {Translate, useTranslation} from '../../../../../../../../../i18n'\nimport {type SearchHit} from '../../../../../../../../../search'\nimport {getPublishedId} from '../../../../../../../../../util'\nimport {POPOVER_RADIUS} from '../../../../../constants'\nimport {useSearchState} from '../../../../../contexts/search/useSearchState'\nimport {useSearch} from '../../../../../hooks/useSearch'\nimport {getDocumentTypesTruncated} from '../../../../../utils/documentTypesTruncated'\nimport {SearchResultItem} from '../../../../searchResults/item/SearchResultItem'\n\ntype AutocompleteSearchHit = {value: string} & SearchHit\n\ninterface PopoverContentProps {\n  content: React.JSX.Element | null\n  hidden: boolean\n  onMouseEnter: () => void\n  onMouseLeave: () => void\n}\n\ninterface ReferenceAutocompleteProps {\n  onSelect?: (reference: ReferenceValue | null) => void\n  types?: SchemaType[]\n  value?: ReferenceValue | null\n}\n\nconst NO_FILTER = () => true\n\nconst StyledText = styled(Text)`\n  word-break: break-word;\n`\n\nexport const ReferenceAutocomplete = forwardRef(function ReferenceAutocomplete(\n  {onSelect, types = [], value}: ReferenceAutocompleteProps,\n  ref: ForwardedRef<HTMLInputElement>,\n) {\n  const autocompletePopoverReferenceElementRef = useRef<HTMLDivElement | null>(null)\n\n  const schema = useSchema()\n\n  const {\n    state: {fullscreen},\n  } = useSearchState()\n  const {t} = useTranslation()\n\n  const autocompleteId = useId()\n\n  const [hits, setHits] = useState<AutocompleteSearchHit[]>([])\n  const {handleSearch, searchState} = useSearch({\n    allowEmptyQueries: true,\n    initialState: {\n      hits: [],\n      loading: false,\n      error: null,\n      terms: {query: '', types},\n    },\n    onComplete: (result) => {\n      setHits(result.hits.map(({hit}) => ({value: hit._id, hit})))\n    },\n    schema,\n  })\n\n  /**\n   * Trigger non-debounced search query when autocomplete is manually opened\n   */\n  const handleAutocompleteOpenButtonClick = useCallback(() => {\n    handleSearch({\n      debounceTime: 0,\n      options: {limit: 100},\n      terms: {query: '', types},\n    })\n  }, [handleSearch, types])\n\n  /**\n   * Trigger debounced search queries on text input.\n   *\n   * When search query has been cleared (either via manual input or by closing autocomplete),\n   * trigger an non-debounecd 'empty' search to clear search state terms and reset hits.\n   */\n  const handleQueryChange = useCallback(\n    (query: string | null) => {\n      if (query) {\n        handleSearch({\n          options: {limit: 100},\n          terms: {query: query || '', types},\n        })\n      } else {\n        handleSearch({\n          debounceTime: 0,\n          options: {limit: 0},\n          terms: {query: '', types},\n        })\n      }\n    },\n    [handleSearch, types],\n  )\n\n  const handleSelect = useCallback(\n    (val: string) => {\n      const hit = hits.find((h) => h.value === val)?.hit\n      if (hit) {\n        onSelect?.({\n          _ref: getPublishedId(hit._id),\n          _type: hit._type,\n        })\n      }\n    },\n    [hits, onSelect],\n  )\n  const placeholderText = useMemo(() => {\n    if (types.length === 0) {\n      // \"Search all documents\"\n      return t('search.action.search-all-types')\n    }\n\n    const {remainingCount, types: visibleTypes} = getDocumentTypesTruncated({types})\n    const key =\n      remainingCount > 0\n        ? 'search.action.search-specific-types-truncated'\n        : 'search.action.search-specific-types'\n\n    // \"Search for Author, Book\" or \"Search for Author, Book +2 more\"\n    return t(key, {\n      count: remainingCount,\n      types: visibleTypes,\n      formatParams: {types: {style: 'short', type: 'unit'}},\n    })\n  }, [types, t])\n\n  const renderOption = useCallback((option: AutocompleteSearchHit) => {\n    return (\n      <SearchResultItem\n        disableIntentLink\n        documentId={option.value}\n        documentType={option.hit._type}\n        layout=\"compact\"\n      />\n    )\n  }, [])\n\n  const renderPopover = useCallback(\n    (props: PopoverContentProps, contentRef: ForwardedRef<HTMLDivElement>) => {\n      const {content, hidden, onMouseEnter, onMouseLeave} = props\n      const hasResults = hits && hits.length > 0\n      return (\n        <Popover\n          constrainSize\n          content={\n            <div ref={contentRef}>\n              {hasResults\n                ? content\n                : searchState.terms.query && (\n                    <Box padding={4}>\n                      <Flex align=\"center\" height=\"fill\" justify=\"center\">\n                        <StyledText align=\"center\" muted>\n                          <Translate\n                            t={t}\n                            i18nKey=\"new-document.no-results\"\n                            values={{searchQuery: searchState.terms.query}}\n                          />\n                        </StyledText>\n                      </Flex>\n                    </Box>\n                  )}\n            </div>\n          }\n          fallbackPlacements={['bottom', 'bottom-end']}\n          matchReferenceWidth\n          onMouseEnter={onMouseEnter}\n          onMouseLeave={onMouseLeave}\n          open={!searchState.loading && !hidden}\n          overflow=\"auto\"\n          placement=\"bottom-start\"\n          radius={POPOVER_RADIUS}\n          referenceElement={autocompletePopoverReferenceElementRef.current}\n        />\n      )\n    },\n    [hits, searchState.loading, searchState.terms.query, t],\n  )\n\n  return (\n    <div ref={autocompletePopoverReferenceElementRef}>\n      <Autocomplete\n        aria-label={placeholderText}\n        filterOption={NO_FILTER}\n        fontSize={fullscreen ? 2 : 1}\n        id={autocompleteId}\n        loading={searchState.loading}\n        openButton={{onClick: handleAutocompleteOpenButtonClick}}\n        options={hits}\n        onQueryChange={handleQueryChange}\n        onSelect={handleSelect}\n        placeholder={placeholderText}\n        radius={2}\n        ref={ref}\n        renderOption={renderOption}\n        renderPopover={renderPopover}\n        value={value?._ref}\n      />\n    </div>\n  )\n})\n","import {\n  isArraySchemaType,\n  isReferenceSchemaType,\n  type ReferenceValue,\n  type SchemaType,\n} from '@sanity/types'\nimport {Box, Card, Stack} from '@sanity/ui'\nimport {useCallback, useMemo} from 'react'\n\nimport {Button} from '../../../../../../../../../../ui-components'\nimport {useSchema} from '../../../../../../../../../hooks'\nimport {useTranslation} from '../../../../../../../../../i18n'\nimport {useSearchState} from '../../../../../contexts/search/useSearchState'\nimport {type OperatorInputComponentProps} from '../../../../../definitions/operators/operatorTypes'\nimport {getSchemaField} from '../../../../../utils/getSchemaField'\nimport {SearchResultItem} from '../../../../searchResults/item/SearchResultItem'\nimport {ReferenceAutocomplete} from './ReferenceAutocomplete'\n\nexport function SearchFilterReferenceInput({\n  fieldDefinition,\n  onChange,\n  value,\n}: OperatorInputComponentProps<ReferenceValue>) {\n  const {\n    onClose,\n    state: {documentTypesNarrowed},\n  } = useSearchState()\n  const schema = useSchema()\n  const {t} = useTranslation()\n\n  const handleChange = useCallback(\n    (referenceValue: ReferenceValue | null) => onChange(referenceValue),\n    [onChange],\n  )\n\n  // Extract all searchable types\n  const searchableTypes = useMemo(() => {\n    if (!fieldDefinition) {\n      return []\n    }\n\n    return fieldDefinition.documentTypes\n      .filter((d) => documentTypesNarrowed.includes(d))\n      .flatMap((type) => {\n        const schemaType = schema.get(type)\n        if (schemaType) {\n          const field = getSchemaField(schemaType, fieldDefinition.fieldPath)\n          if (isArraySchemaType(field?.type)) {\n            return field?.type.of.filter(isReferenceSchemaType).flatMap((i) => i.to)\n          }\n          if (isReferenceSchemaType(field?.type)) {\n            return field?.type.to\n          }\n        }\n        return []\n      })\n      .reduce<SchemaType[]>((acc, val) => {\n        if (acc.findIndex((v) => v.name === val?.name) < 0) {\n          acc.push(val as SchemaType)\n        }\n        return acc\n      }, [])\n  }, [documentTypesNarrowed, fieldDefinition, schema])\n\n  const handleClear = useCallback(() => handleChange(null), [handleChange])\n\n  const handleClick = useCallback(() => {\n    onClose?.()\n  }, [onClose])\n\n  return (\n    <Box style={{width: 'min(calc(100vw - 40px), 420px)'}}>\n      {value?._ref && value?._type ? (\n        <Stack space={3}>\n          <Card padding={1} radius={1} shadow={1}>\n            <SearchResultItem\n              documentId={value._ref}\n              documentType={value._type}\n              layout=\"compact\"\n              onClick={handleClick}\n            />\n          </Card>\n          <Button\n            mode=\"ghost\"\n            onClick={handleClear}\n            text={t('search.filter-reference-clear')}\n            tone=\"critical\"\n          />\n        </Stack>\n      ) : (\n        <ReferenceAutocomplete onSelect={handleChange} types={searchableTypes} value={value} />\n      )}\n    </Box>\n  )\n}\n","import {ChevronDownIcon} from '@sanity/icons'\nimport {isTitledListValue, type StringOptions, type TitledListValue} from '@sanity/types'\nimport {Menu} from '@sanity/ui'\nimport {capitalize, uniq} from 'lodash'\nimport {useCallback, useId, useMemo} from 'react'\n\nimport {Button, MenuButton, MenuItem} from '../../../../../../../../../../ui-components'\nimport {useSchema} from '../../../../../../../../../hooks'\nimport {useTranslation} from '../../../../../../../../../i18n'\nimport {isNonNullable} from '../../../../../../../../../util'\nimport {useSearchState} from '../../../../../contexts/search/useSearchState'\nimport {type OperatorInputComponentProps} from '../../../../../definitions/operators/operatorTypes'\nimport {getSchemaField} from '../../../../../utils/getSchemaField'\n\ninterface TitledListValueGroup extends Omit<TitledListValue<number | string>, 'title'> {\n  title: (number | string)[]\n}\n\nfunction CustomMenuItem({\n  onClick,\n  selected,\n  title,\n  value,\n}: {\n  onClick: (value: number | string) => void\n  selected: boolean\n  title: string\n  value: number | string\n}) {\n  const handleClick = useCallback(() => onClick(value), [onClick, value])\n\n  let menuItemText = `${title}`\n  if (typeof value !== 'undefined' && title !== value) {\n    menuItemText += ` (${value})`\n  }\n\n  return <MenuItem onClick={handleClick} pressed={selected} tone=\"default\" text={menuItemText} />\n}\n\nexport function SearchFilterStringListInput({\n  fieldDefinition,\n  onChange,\n  value,\n}: OperatorInputComponentProps<number | string>) {\n  const menuButtonId = useId()\n\n  const {\n    state: {documentTypesNarrowed},\n  } = useSearchState()\n  const {t} = useTranslation()\n\n  const schema = useSchema()\n\n  // Build list items\n  const items = useMemo(() => {\n    if (!fieldDefinition) {\n      return []\n    }\n\n    const options = fieldDefinition.documentTypes\n      .filter((d) => documentTypesNarrowed.includes(d))\n      .map((type) => {\n        const schemaType = schema.get(type)\n        if (schemaType) {\n          const field = getSchemaField(schemaType, fieldDefinition.fieldPath)\n          return field?.type.options as StringOptions\n        }\n        return null\n      })\n      .filter(isNonNullable)\n\n    const selectOptions = options\n      .map((o) => o.list)\n      .flatMap((list) => list?.map((l) => toSelectItem(l)))\n      .filter(isNonNullable)\n\n    return selectOptions.reduce<TitledListValueGroup[]>((acc, val) => {\n      const prevIndex = acc.findIndex((v) => v.value === val?.value)\n      if (prevIndex > -1) {\n        const prevValue = acc[prevIndex]\n        acc[prevIndex] = {\n          ...acc[prevIndex],\n          title: uniq([...prevValue.title, val.title]).sort(),\n        }\n      } else {\n        acc.push({\n          ...val,\n          title: [val.title],\n        })\n      }\n      return acc\n    }, [])\n  }, [documentTypesNarrowed, fieldDefinition, schema])\n\n  const handleClick = useCallback(\n    (v: number | string) => {\n      onChange(v)\n    },\n    [onChange],\n  )\n\n  return (\n    <MenuButton\n      button={\n        <Button\n          mode=\"ghost\"\n          iconRight={ChevronDownIcon}\n          text={value ? String(value) : t('search.filter-string-value-select-predefined-value')}\n        />\n      }\n      id={menuButtonId || ''}\n      menu={\n        <Menu>\n          {items.map((item, index) => (\n            <CustomMenuItem\n              // eslint-disable-next-line react/no-array-index-key\n              key={index}\n              onClick={handleClick}\n              selected={item.value === value}\n              title={item.title.join(', ')}\n              value={item.value || ''}\n            />\n          ))}\n        </Menu>\n      }\n      popover={{\n        constrainSize: true,\n        placement: 'bottom-start',\n        portal: false,\n        radius: 2,\n      }}\n    />\n  )\n}\n\nfunction toSelectItem(\n  option: TitledListValue<string | number> | string | number,\n): TitledListValue<string | number> {\n  return isTitledListValue(option) ? option : {title: capitalize(`${option}`), value: option}\n}\n","export const GteIcon = () => (\n  <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 25 25\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path\n      d=\"M7.04 19V17.512H17.36V19H7.04ZM7.04 15.328V13.624L12.08 11.872L15.32 10.816V10.72L12.08 9.664L7.04 7.912V6.208L17.36 9.88V11.656L7.04 15.328Z\"\n      fill=\"currentColor\"\n    />\n  </svg>\n)\n","export const GtIcon = () => (\n  <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 25 25\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path\n      d=\"M7.568 18.848V16.952L14.792 12.08V11.984L7.568 7.112V5.216L16.52 11.288V12.776L7.568 18.848Z\"\n      fill=\"currentColor\"\n    />\n  </svg>\n)\n","export const LteIcon = () => (\n  <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 25 25\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path\n      d=\"M7.04 19V17.512H17.36V19H7.04ZM17.36 15.328L7.04 11.656V9.88L17.36 6.208V7.912L12.32 9.664L9.08 10.72V10.816L12.32 11.872L17.36 13.624V15.328Z\"\n      fill=\"currentColor\"\n    />\n  </svg>\n)\n","export const LtIcon = () => (\n  <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 25 25\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path\n      d=\"M16.952 19.632L8 13.56V12.072L16.952 6V7.896L9.728 12.768V12.864L16.952 17.736V19.632Z\"\n      fill=\"currentColor\"\n    />\n  </svg>\n)\n","import {type ComponentType} from 'react'\n\nimport {type LocaleSource} from '../../../../../../i18n'\nimport {type SearchFieldDefinition} from '../fields'\n\n/**\n * @alpha\n */\nexport type I18nSearchOperatorNameKey = `search.operator.${Lowercase<string>}.name`\n\n/**\n * @alpha\n */\nexport type I18nSearchOperatorDescriptionKey = `search.operator.${Lowercase<string>}.description`\n\n/**\n * @alpha\n */\nexport interface SearchOperatorBase {\n  /** i18n resource key for the \"name\", eg `quantity is` or `contains` */\n  nameKey: I18nSearchOperatorNameKey\n\n  /** i18n resource key for the \"name\", eg `quantity is` or `contains` */\n  descriptionKey: I18nSearchOperatorDescriptionKey\n\n  /** icon for explaining the operator (React component) */\n  icon?: ComponentType\n\n  /** name/type of operator, eg `arrayCountEqual` or `numberGt` */\n  type: string\n}\n\n/**\n * @alpha\n */\nexport type SearchOperatorInput<TValue> = ComponentType<OperatorInputComponentProps<TValue>>\n\n/**\n * @alpha\n */\nexport type SearchOperatorButtonValue<TValue> = ComponentType<\n  OperatorButtonValueComponentProps<TValue>\n>\n\n/**\n * @alpha\n */\nexport interface OperatorButtonValueComponentProps<T> {\n  value: T\n}\n\n/**\n * @alpha\n */\nexport interface OperatorInputComponentProps<T> {\n  fieldDefinition?: SearchFieldDefinition\n  onChange: (value: T | null) => void\n  value: T | null\n}\n\n/**\n * @alpha\n */\nexport type SearchOperatorParams<TValue> = {fieldPath?: string; value?: TValue}\n\n/**\n * @alpha\n */\nexport type ValuelessSearchOperatorParams = {fieldPath?: string}\n\n/**\n * @alpha\n */\nexport type SearchValueFormatterContext = {\n  i18n: LocaleSource\n}\n\n/**\n * @alpha\n */\nexport interface SearchOperatorBuilder<TType extends string, TValue> extends SearchOperatorBase {\n  buttonValueComponent?: SearchOperatorButtonValue<TValue>\n  groqFilter: (params: SearchOperatorParams<TValue>) => string | null\n  initialValue: TValue | null\n  inputComponent: SearchOperatorInput<TValue>\n  type: TType\n}\n\n/**\n * @alpha\n */\nexport interface ValuelessSearchOperatorBuilder<TType extends string> extends SearchOperatorBase {\n  buttonValueComponent?: never\n  groqFilter: (params: ValuelessSearchOperatorParams) => string | null\n  initialValue?: never\n  inputComponent?: never\n  type: TType\n}\n\n/**\n * @alpha\n */\nexport function defineSearchOperator<\n  TType extends string,\n  TValue extends unknown | never,\n  TOperatorSnippet extends\n    | {type: TType; inputComponent?: never}\n    | {type: TType; inputComponent: SearchOperatorInput<TValue>},\n>(\n  definition: (TOperatorSnippet extends {\n    type: TType\n    inputComponent: SearchOperatorInput<TValue>\n  }\n    ? SearchOperatorBuilder<TType, TValue>\n    : ValuelessSearchOperatorBuilder<TType>) &\n    TOperatorSnippet,\n): typeof definition {\n  return definition\n}\n","export function toJSON(val: unknown): string {\n  return JSON.stringify(val)\n}\n","import {type ReferenceValue} from '@sanity/types'\n\nimport {SearchButtonValueReference} from '../../components/filters/common/ButtonValue'\nimport {SearchFilterNumberInput} from '../../components/filters/filter/inputs/number/Number'\nimport {SearchFilterNumberRangeInput} from '../../components/filters/filter/inputs/number/NumberRange'\nimport {SearchFilterReferenceInput} from '../../components/filters/filter/inputs/reference/Reference'\nimport {SearchFilterStringListInput} from '../../components/filters/filter/inputs/string/StringList'\nimport {GteIcon} from '../../components/filters/icons/GteIcon'\nimport {GtIcon} from '../../components/filters/icons/GtIcon'\nimport {LteIcon} from '../../components/filters/icons/LteIcon'\nimport {LtIcon} from '../../components/filters/icons/LtIcon'\nimport {type OperatorNumberRangeValue} from './common'\nimport {\n  defineSearchOperator,\n  type SearchOperatorButtonValue,\n  type SearchOperatorInput,\n} from './operatorTypes'\nimport {toJSON} from './operatorUtils'\n\n// @todo: don't manually cast `buttonValueComponent` and `inputComponent` once\n// we understand why `npm run etl` fails with 'Unable to follow symbol' errors\nexport const arrayOperators = {\n  arrayCountEqual: defineSearchOperator({\n    nameKey: 'search.operator.array-count-equal.name',\n    descriptionKey: 'search.operator.array-count-equal.description',\n    groqFilter: ({fieldPath, value}) =>\n      Number.isFinite(value) && fieldPath ? `count(${fieldPath}) == ${toJSON(value)}` : null,\n    initialValue: null,\n    inputComponent: SearchFilterNumberInput as SearchOperatorInput<number>,\n    type: 'arrayCountEqual',\n  }),\n  arrayCountGt: defineSearchOperator({\n    nameKey: 'search.operator.array-count-gt.name',\n    descriptionKey: 'search.operator.array-count-gt.description',\n    groqFilter: ({fieldPath, value}) =>\n      Number.isFinite(value) && fieldPath ? `count(${fieldPath}) > ${toJSON(value)}` : null,\n    icon: GtIcon,\n    initialValue: null,\n    inputComponent: SearchFilterNumberInput as SearchOperatorInput<number>,\n    type: 'arrayCountGt',\n  }),\n  arrayCountGte: defineSearchOperator({\n    nameKey: 'search.operator.array-count-gte.name',\n    descriptionKey: 'search.operator.array-count-gte.description',\n    groqFilter: ({fieldPath, value}) =>\n      Number.isFinite(value) && fieldPath ? `count(${fieldPath}) >= ${toJSON(value)}` : null,\n    icon: GteIcon,\n    initialValue: null,\n    inputComponent: SearchFilterNumberInput as SearchOperatorInput<number>,\n    type: 'arrayCountGte',\n  }),\n  arrayCountLt: defineSearchOperator({\n    nameKey: 'search.operator.array-count-lt.name',\n    descriptionKey: 'search.operator.array-count-lt.description',\n    groqFilter: ({fieldPath, value}) =>\n      Number.isFinite(value) && fieldPath ? `count(${fieldPath}) < ${toJSON(value)}` : null,\n    icon: LtIcon,\n    initialValue: null,\n    inputComponent: SearchFilterNumberInput as SearchOperatorInput<number>,\n    type: 'arrayCountLt',\n  }),\n  arrayCountLte: defineSearchOperator({\n    nameKey: 'search.operator.array-count-lte.name',\n    descriptionKey: 'search.operator.array-count-lte.description',\n    groqFilter: ({fieldPath, value}) =>\n      Number.isFinite(value) && fieldPath ? `count(${fieldPath}) <= ${toJSON(value)}` : null,\n    icon: LteIcon,\n    initialValue: null,\n    inputComponent: SearchFilterNumberInput as SearchOperatorInput<number>,\n    type: 'arrayCountLte',\n  }),\n  arrayCountNotEqual: defineSearchOperator({\n    nameKey: 'search.operator.array-count-not-equal.name',\n    descriptionKey: 'search.operator.array-count-not-equal.description',\n    groqFilter: ({fieldPath, value}) =>\n      Number.isFinite(value) && fieldPath ? `count(${fieldPath}) != ${toJSON(value)}` : null,\n    initialValue: null,\n    inputComponent: SearchFilterNumberInput as SearchOperatorInput<number>,\n    type: 'arrayCountNotEqual',\n  }),\n  arrayCountRange: defineSearchOperator({\n    nameKey: 'search.operator.array-count-range.name',\n    descriptionKey: 'search.operator.array-count-range.description',\n    groqFilter: ({fieldPath, value}) =>\n      Number.isFinite(value?.to) && Number.isFinite(value?.from) && fieldPath\n        ? `count(${fieldPath}) > ${toJSON(value?.from)} && count(${fieldPath}) < ${toJSON(\n            value?.to,\n          )}`\n        : '',\n    initialValue: null,\n    inputComponent: SearchFilterNumberRangeInput as SearchOperatorInput<OperatorNumberRangeValue>,\n    type: 'arrayCountRange',\n  }),\n  arrayListIncludes: defineSearchOperator({\n    nameKey: 'search.operator.array-list-includes.name',\n    descriptionKey: 'search.operator.array-list-includes.description',\n    groqFilter: ({fieldPath, value}) =>\n      value && fieldPath ? `${toJSON(value)} in ${fieldPath}` : null,\n    initialValue: null,\n    inputComponent: SearchFilterStringListInput as SearchOperatorInput<string | number>,\n    type: 'arrayListIncludes',\n  }),\n  arrayListNotIncludes: defineSearchOperator({\n    nameKey: 'search.operator.array-list-not-includes.name',\n    descriptionKey: 'search.operator.array-list-not-includes.description',\n    groqFilter: ({fieldPath, value}) =>\n      value && fieldPath ? `!(${toJSON(value)} in ${fieldPath})` : null,\n    initialValue: null,\n    inputComponent: SearchFilterStringListInput as SearchOperatorInput<string | number>,\n    type: 'arrayListNotIncludes',\n  }),\n  arrayReferenceIncludes: defineSearchOperator({\n    nameKey: 'search.operator.array-reference-includes.name',\n    descriptionKey: 'search.operator.array-reference-includes.description',\n    buttonValueComponent: SearchButtonValueReference as SearchOperatorButtonValue<ReferenceValue>,\n    groqFilter: ({fieldPath, value}) =>\n      value?._ref && fieldPath ? `${toJSON(value._ref)} in ${fieldPath}[]._ref` : null,\n    initialValue: null,\n    inputComponent: SearchFilterReferenceInput as SearchOperatorInput<ReferenceValue>,\n    type: 'arrayReferenceIncludes',\n  }),\n  arrayReferenceNotIncludes: defineSearchOperator({\n    nameKey: 'search.operator.array-reference-not-includes.name',\n    descriptionKey: 'search.operator.array-reference-not-includes.description',\n    buttonValueComponent: SearchButtonValueReference as SearchOperatorButtonValue<ReferenceValue>,\n    groqFilter: ({fieldPath, value}) =>\n      value?._ref && fieldPath ? `!(${toJSON(value._ref)} in ${fieldPath}[]._ref)` : null,\n    initialValue: null,\n    inputComponent: SearchFilterReferenceInput as SearchOperatorInput<ReferenceValue>,\n    type: 'arrayReferenceNotIncludes',\n  }),\n}\n","import {WarningOutlineIcon} from '@sanity/icons'\nimport {Box, Flex, type ResponsivePaddingProps, Stack} from '@sanity/ui'\n\nimport {TextWithTone} from '../../../../../../../../../components'\nimport {useTranslation} from '../../../../../../../../../i18n'\n\nexport function AssetSourceError(props: ResponsivePaddingProps) {\n  const {t} = useTranslation()\n\n  return (\n    <Box {...props}>\n      <Flex align=\"flex-start\" gap={3}>\n        <TextWithTone tone=\"caution\">\n          <WarningOutlineIcon />\n        </TextWithTone>\n        <Stack space={4}>\n          <TextWithTone size={1} tone=\"caution\" weight=\"medium\">\n            {t('search.error.no-valid-asset-source-title')}\n          </TextWithTone>\n          <TextWithTone size={1} tone=\"caution\">\n            {t('search.error.no-valid-asset-source-only-default-description')}\n          </TextWithTone>\n          <TextWithTone size={1} tone=\"caution\">\n            {t('search.error.no-valid-asset-source-check-config-description')}\n          </TextWithTone>\n        </Stack>\n      </Flex>\n    </Box>\n  )\n}\n","import {BinaryDocumentIcon} from '@sanity/icons'\nimport {type FileAsset, type ReferenceValue} from '@sanity/types'\nimport {Card, Flex, Stack, Text, TextSkeleton} from '@sanity/ui'\nimport {useCallback} from 'react'\n\nimport {formatBytes} from '../../../../../../../../../../form/inputs/common/helper'\nimport {observeFileAsset} from '../../../../../../../../../../form/studio/inputs/client-adapters/assets'\nimport {WithReferencedAsset} from '../../../../../../../../../../form/utils/WithReferencedAsset'\nimport {useDocumentPreviewStore} from '../../../../../../../../../../store'\n\ninterface FileReferencePreviewProps {\n  reference: ReferenceValue\n}\n\nexport function FileReferencePreview({reference}: FileReferencePreviewProps) {\n  const documentPreviewStore = useDocumentPreviewStore()\n  const observeAsset = useCallback(\n    (id: string) => observeFileAsset(documentPreviewStore, id),\n    [documentPreviewStore],\n  )\n  return (\n    <WithReferencedAsset\n      observeAsset={observeAsset}\n      reference={reference}\n      waitPlaceholder={<FileSkeleton />}\n    >\n      {(asset) => <FilePreview asset={asset} />}\n    </WithReferencedAsset>\n  )\n}\n\nfunction FilePreview({asset}: {asset: FileAsset}) {\n  // todo: consider replacing with <SanityDefaultPreview>\n  return (\n    <Card padding={2} shadow={1}>\n      <Flex align=\"center\" justify=\"space-between\" wrap=\"nowrap\">\n        <Card padding={3} radius={1} shadow={1} tone=\"transparent\">\n          <Text>\n            <BinaryDocumentIcon />\n          </Text>\n        </Card>\n        <Stack flex={1} space={2} marginLeft={3}>\n          <Text muted size={1} textOverflow=\"ellipsis\" weight=\"medium\">\n            {asset?.originalFilename || asset._id}\n          </Text>\n          <Text size={1} muted>\n            {formatBytes(asset.size)}\n          </Text>\n        </Stack>\n      </Flex>\n    </Card>\n  )\n}\n\nfunction FileSkeleton() {\n  return (\n    <Card padding={2} shadow={1}>\n      <Flex align=\"center\" justify=\"flex-start\">\n        <Card padding={3} radius={1} shadow={1} tone=\"transparent\">\n          <Text>\n            <BinaryDocumentIcon />\n          </Text>\n        </Card>\n        <Stack flex={1} space={2} marginLeft={3}>\n          <TextSkeleton animated style={{width: '100%'}} radius={1} />\n          <TextSkeleton animated style={{width: '100%'}} radius={1} />\n        </Stack>\n      </Flex>\n    </Card>\n  )\n}\n","import {type ImageAsset, type ReferenceValue} from '@sanity/types'\nimport {Card} from '@sanity/ui'\nimport {useCallback, useState} from 'react'\nimport {styled} from 'styled-components'\n\nimport {LoadingBlock} from '../../../../../../../../../../components/loadingBlock'\nimport {observeImageAsset} from '../../../../../../../../../../form/studio/inputs/client-adapters/assets'\nimport {WithReferencedAsset} from '../../../../../../../../../../form/utils/WithReferencedAsset'\nimport {useDocumentPreviewStore} from '../../../../../../../../../../store'\n\ninterface ImageReferencePreviewProps {\n  reference: ReferenceValue\n}\n\nconst Container = styled(Card)`\n  position: relative;\n  padding-bottom: 100%;\n`\n\nconst Image = styled.img`\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  display: block;\n  object-fit: contain;\n`\n\nexport function ImageReferencePreview({reference}: ImageReferencePreviewProps) {\n  const documentPreviewStore = useDocumentPreviewStore()\n  const observeAsset = useCallback(\n    (id: string) => observeImageAsset(documentPreviewStore, id),\n    [documentPreviewStore],\n  )\n  return (\n    <WithReferencedAsset observeAsset={observeAsset} reference={reference}>\n      {(asset) => <ImagePreview asset={asset} />}\n    </WithReferencedAsset>\n  )\n}\n\nfunction ImagePreview({asset}: {asset: ImageAsset}) {\n  const [loaded, setLoaded] = useState(false)\n  const imageUrl = `${asset.url}?h=800&fit=max`\n  const handleLoad = useCallback(() => setLoaded(true), [])\n\n  return (\n    <Container __unstable_checkered border>\n      {!loaded && <LoadingBlock fill showText />}\n      <Image onLoad={handleLoad} src={imageUrl} />\n    </Container>\n  )\n}\n","import {type ReferenceValue} from '@sanity/types'\n\nimport {FileReferencePreview} from './FileReferencePreview'\nimport {ImageReferencePreview} from './ImageReferencePreview'\n\ninterface AssetPreviewProps {\n  reference: ReferenceValue\n}\nexport function AssetPreview({reference}: AssetPreviewProps) {\n  if (!reference) {\n    return null\n  }\n  if (reference._type.startsWith('sanity.fileAsset')) {\n    return <FileReferencePreview reference={reference} />\n  }\n  if (reference._type.startsWith('sanity.imageAsset')) {\n    return <ImageReferencePreview reference={reference} />\n  }\n  return null\n}\n","import {ChevronDownIcon, ImageIcon, SearchIcon, UndoIcon} from '@sanity/icons'\nimport {type AssetFromSource, type AssetSource, type ReferenceValue} from '@sanity/types'\nimport {Box, Flex, Menu, Portal, Stack} from '@sanity/ui'\nimport {get, startCase} from 'lodash'\nimport {useCallback, useEffect, useId, useMemo, useState} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Button, MenuButton, MenuItem} from '../../../../../../../../../../ui-components'\nimport {type Source} from '../../../../../../../../../config'\nimport {FileSource, ImageSource} from '../../../../../../../../../form/studio/assetSourceDefault'\nimport {useClient} from '../../../../../../../../../hooks'\nimport {useTranslation} from '../../../../../../../../../i18n'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../../../../../../../../studioClient'\nimport {useSource} from '../../../../../../../../source'\nimport {useSearchState} from '../../../../../contexts/search/useSearchState'\nimport {type OperatorInputComponentProps} from '../../../../../definitions/operators/operatorTypes'\nimport {AssetSourceError} from './AssetSourceError'\nimport {AssetPreview} from './preview/AssetPreview'\n\ntype AssetType = keyof Pick<Source['form'], 'file' | 'image'>\n\nconst ASSET_TYPE: Record<AssetType, string> = {\n  file: 'sanity.fileAsset',\n  image: 'sanity.imageAsset',\n}\n\nconst ContainerBox = styled(Box)`\n  width: min(calc(100vw - 40px), 320px);\n`\n\nexport function SearchFilterAssetInput(type?: AssetType) {\n  return function FieldInputAssetWithType({\n    onChange,\n    value,\n  }: OperatorInputComponentProps<ReferenceValue>) {\n    const [selectedAssetSource, setSelectedAssetSource] = useState<AssetSource | null>(null)\n    const [selectedAssetFromSource, setSelectedAssetFromSource] = useState<AssetFromSource | null>(\n      null,\n    )\n\n    const {\n      state: {fullscreen},\n    } = useSearchState()\n\n    const {file, image} = useSource().form\n    const {t} = useTranslation()\n\n    // Get available asset sources\n    // NOTE: currently only the default studio asset source is supported\n    const assetSources = useMemo(() => {\n      switch (type) {\n        case 'file':\n          return file.assetSources.filter((a) => a.name === FileSource.name)\n        case 'image':\n          return image.assetSources.filter((a) => a.name === ImageSource.name)\n        default:\n          throw Error('Unknown asset source found')\n      }\n    }, [file.assetSources, image.assetSources])\n\n    const menuButtonId = useId()\n\n    const client = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n\n    const handleClear = useCallback(() => {\n      setSelectedAssetFromSource(null)\n      onChange(null)\n    }, [onChange])\n\n    const handleCloseAssetSource = useCallback(() => {\n      setSelectedAssetSource(null)\n    }, [])\n\n    const handleSelectAssetFromSource = useCallback(\n      (assetFromSource: AssetFromSource[]) => {\n        const firstAsset = assetFromSource[0]\n        setSelectedAssetFromSource(firstAsset)\n        handleCloseAssetSource()\n      },\n      [handleCloseAssetSource],\n    )\n\n    const handleSelectAssetSource = useCallback(\n      (source: AssetSource) => setSelectedAssetSource(source),\n      [],\n    )\n\n    useEffect(() => {\n      // TODO: add custom resolver to handle other source types in future\n      if (\n        selectedAssetFromSource?.kind === 'assetDocumentId' &&\n        typeof selectedAssetFromSource?.value === 'string'\n      ) {\n        if (type) {\n          onChange({\n            _ref: selectedAssetFromSource.value,\n            _type: ASSET_TYPE[type],\n          })\n        }\n      }\n    }, [client, onChange, selectedAssetFromSource])\n\n    const AssetSourceComponent = selectedAssetSource?.component\n\n    const fontSize = fullscreen ? 2 : 1\n\n    const buttonText = t(value ? 'search.filter-asset-change' : 'search.filter-asset-select', {\n      context: type,\n    })\n\n    const accept = get(type, 'options.accept', type === 'image' ? 'image/*' : '')\n\n    return (\n      <ContainerBox>\n        <Stack space={3}>\n          {/* Asset source component */}\n          {selectedAssetSource && AssetSourceComponent && (\n            <Portal>\n              <AssetSourceComponent\n                assetType={type}\n                dialogHeaderTitle={t('search.action.select-asset', {context: type})}\n                onClose={handleCloseAssetSource}\n                onSelect={handleSelectAssetFromSource}\n                selectedAssets={[]}\n                selectionType=\"single\"\n                accept={accept}\n              />\n            </Portal>\n          )}\n\n          {/* Selected asset preview */}\n          {value && <AssetPreview reference={value} />}\n\n          <Flex gap={2}>\n            {/* No asset sources found */}\n            {assetSources.length === 0 && <AssetSourceError padding={2} />}\n\n            {/* Asset source select */}\n            {assetSources.length > 0 && (\n              <>\n                {assetSources.length > 1 ? (\n                  <MenuButton\n                    button={\n                      <Button\n                        icon={value ? UndoIcon : SearchIcon}\n                        iconRight={ChevronDownIcon}\n                        mode=\"ghost\"\n                        width={value ? 'fill' : undefined}\n                        text={buttonText}\n                      />\n                    }\n                    id={menuButtonId}\n                    menu={\n                      <Menu>\n                        {assetSources.map((source) => (\n                          <MenuItem\n                            icon={source.icon || ImageIcon}\n                            key={source.name}\n                            // eslint-disable-next-line react/jsx-no-bind\n                            onClick={() => handleSelectAssetSource(source)}\n                            text={\n                              (source.i18nKey ? t(source.i18nKey) : source.title) ||\n                              startCase(source.name)\n                            }\n                          />\n                        ))}\n                      </Menu>\n                    }\n                    popover={{\n                      constrainSize: true,\n                      portal: false,\n                      radius: 2,\n                    }}\n                  />\n                ) : (\n                  <Button\n                    icon={value ? UndoIcon : SearchIcon}\n                    mode=\"ghost\"\n                    // eslint-disable-next-line react/jsx-no-bind\n                    onClick={() => handleSelectAssetSource(assetSources[0])}\n                    width={value ? 'fill' : undefined}\n                    text={buttonText}\n                  />\n                )}\n              </>\n            )}\n\n            {/* Clear selected asset */}\n            {value && (\n              <Button\n                mode=\"ghost\"\n                onClick={handleClear}\n                width=\"fill\"\n                text={t('search.filter-asset-clear')}\n                tone=\"critical\"\n              />\n            )}\n          </Flex>\n        </Stack>\n      </ContainerBox>\n    )\n  }\n}\n","import {type ReferenceValue} from '@sanity/types'\n\nimport {SearchButtonValueReference} from '../../components/filters/common/ButtonValue'\nimport {SearchFilterAssetInput} from '../../components/filters/filter/inputs/asset/Asset'\nimport {defineSearchOperator, type SearchOperatorButtonValue} from './operatorTypes'\nimport {toJSON} from './operatorUtils'\n\n// @todo: don't manually cast `buttonValueComponent` and `inputComponent` once\n// we understand why `npm run etl` fails with 'Unable to follow symbol' errors\nexport const assetOperators = {\n  assetFileEqual: defineSearchOperator({\n    nameKey: 'search.operator.asset-file-equal.name',\n    descriptionKey: 'search.operator.asset-file-equal.description',\n    buttonValueComponent: SearchButtonValueReference as SearchOperatorButtonValue<ReferenceValue>,\n    groqFilter: ({fieldPath, value}) =>\n      value?._ref && fieldPath ? `${fieldPath}.asset._ref == ${toJSON(value._ref)}` : null,\n    initialValue: null,\n    inputComponent: SearchFilterAssetInput('file'),\n    label: 'is',\n    type: 'assetFileEqual',\n  }),\n  assetFileNotEqual: defineSearchOperator({\n    nameKey: 'search.operator.asset-file-not-equal.name',\n    descriptionKey: 'search.operator.asset-file-not-equal.description',\n    buttonValueComponent: SearchButtonValueReference as SearchOperatorButtonValue<ReferenceValue>,\n    groqFilter: ({fieldPath, value}) =>\n      value?._ref && fieldPath ? `${fieldPath}.asset._ref != ${toJSON(value._ref)}` : null,\n    initialValue: null,\n    inputComponent: SearchFilterAssetInput('file'),\n    label: 'is not',\n    type: 'assetFileNotEqual',\n  }),\n  assetImageEqual: defineSearchOperator({\n    nameKey: 'search.operator.asset-image-equal.name',\n    descriptionKey: 'search.operator.asset-image-equal.description',\n    buttonValueComponent: SearchButtonValueReference as SearchOperatorButtonValue<ReferenceValue>,\n    groqFilter: ({fieldPath, value}) =>\n      value?._ref && fieldPath ? `${fieldPath}.asset._ref == ${toJSON(value._ref)}` : null,\n    initialValue: null,\n    inputComponent: SearchFilterAssetInput('image'),\n    label: 'is',\n    type: 'assetImageEqual',\n  }),\n  assetImageNotEqual: defineSearchOperator({\n    nameKey: 'search.operator.asset-image-not-equal.name',\n    descriptionKey: 'search.operator.asset-image-not-equal.description',\n    buttonValueComponent: SearchButtonValueReference as SearchOperatorButtonValue<ReferenceValue>,\n    groqFilter: ({fieldPath, value}) =>\n      value?._ref && fieldPath ? `${fieldPath}.asset._ref != ${toJSON(value._ref)}` : null,\n    initialValue: null,\n    inputComponent: SearchFilterAssetInput('image'),\n    label: 'is not',\n    type: 'assetImageNotEqual',\n  }),\n}\n","import {Select} from '@sanity/ui'\nimport {type ChangeEvent, useCallback} from 'react'\n\nimport {useTranslation} from '../../../../../../../../../i18n'\nimport {useSearchState} from '../../../../../contexts/search/useSearchState'\nimport {type OperatorInputComponentProps} from '../../../../../definitions/operators/operatorTypes'\n\nexport function SearchFilterBooleanInput({onChange, value}: OperatorInputComponentProps<boolean>) {\n  const {\n    state: {fullscreen},\n  } = useSearchState()\n  const {t} = useTranslation()\n\n  const handleChange = useCallback(\n    (event: ChangeEvent<HTMLSelectElement>) => {\n      onChange(event.currentTarget.value === 'true')\n    },\n    [onChange],\n  )\n\n  return (\n    <Select\n      fontSize={fullscreen ? 2 : 1}\n      onChange={handleChange}\n      radius={2}\n      value={String(value ?? true)}\n    >\n      <option value=\"true\">{t('search.filter-boolean-true')}</option>\n      <option value=\"false\">{t('search.filter-boolean-false')}</option>\n    </Select>\n  )\n}\n","import {SearchFilterBooleanInput} from '../../components/filters/filter/inputs/boolean/Boolean'\nimport {\n  defineSearchOperator,\n  type SearchOperatorInput,\n  type SearchOperatorParams,\n} from './operatorTypes'\nimport {toJSON} from './operatorUtils'\n\n// @todo: don't manually cast `buttonValueComponent` and `inputComponent` once\n// we understand why `npm run etl` fails with 'Unable to follow symbol' errors\nexport const booleanOperators = {\n  booleanEqual: defineSearchOperator({\n    nameKey: 'search.operator.boolean-equal.name',\n    descriptionKey: 'search.operator.boolean-equal.description',\n    groqFilter: ({fieldPath, value}: SearchOperatorParams<boolean>) =>\n      typeof value !== 'undefined' && fieldPath ? `${fieldPath} == ${toJSON(value)}` : null,\n    initialValue: true,\n    inputComponent: SearchFilterBooleanInput as SearchOperatorInput<boolean>,\n    type: 'booleanEqual',\n  }),\n}\n","import {Flex, Stack, Switch, Text} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {useTranslation} from '../../../../../../../../../../i18n'\n\ninterface DateIncludeTimeFooterProps {\n  onChange: () => void\n  value: boolean\n}\n\nconst TimeLabelText = styled(Text)`\n  cursor: default;\n`\n\nexport function DateIncludeTimeFooter({onChange, value}: DateIncludeTimeFooterProps) {\n  const {t} = useTranslation()\n  return (\n    <Flex align=\"center\" gap={2} justify=\"flex-end\" marginTop={1}>\n      <Stack>\n        <TimeLabelText muted onClick={onChange} size={1} weight=\"medium\">\n          {t('calendar.action.include-time-label')}\n        </TimeLabelText>\n      </Stack>\n      <Switch checked={value} label={t('calendar.action.include-time-label')} onChange={onChange} />\n    </Flex>\n  )\n}\n","import {useContext} from 'react'\nimport {CalendarContext} from 'sanity/_singletons'\n\nimport {type CalendarContextValue} from './CalendarContext'\n\nexport function useCalendar(): CalendarContextValue {\n  const context = useContext(CalendarContext)\n  if (context === undefined) {\n    throw new Error('useCalendar must be used within an CalendarContext.Provider')\n  }\n  return context\n}\n","import {ChevronLeftIcon, ChevronRightIcon} from '@sanity/icons'\nimport {Flex, Inline, Text} from '@sanity/ui'\nimport {upperFirst} from 'lodash'\nimport {useCallback} from 'react'\n\nimport {Button} from '../../../../../../../../../../../../ui-components'\nimport {useDateTimeFormat} from '../../../../../../../../../../../hooks/useDateTimeFormat'\nimport {useTranslation} from '../../../../../../../../../../../i18n'\nimport {useCalendar} from './contexts/useDatePicker'\n\nexport function CalendarHeader(props: {\n  moveFocusedDate: (by: number) => void\n  onNowClick: () => void\n}) {\n  const {t} = useTranslation()\n  const monthFormatter = useDateTimeFormat({month: 'long', year: 'numeric'})\n  const {focusedDate} = useCalendar()\n\n  const {moveFocusedDate, onNowClick} = props\n\n  const handlePrevMonthClick = useCallback(() => moveFocusedDate(-1), [moveFocusedDate])\n\n  const handleNextMonthClick = useCallback(() => moveFocusedDate(1), [moveFocusedDate])\n\n  return (\n    <Flex align=\"center\" flex={1} justify=\"space-between\">\n      <Inline paddingLeft={2} space={1}>\n        {/* Technically not correct to simply uppercase first here, but simplifying for now */}\n        <Text size={1} weight=\"medium\">\n          {upperFirst(monthFormatter.format(focusedDate))}\n        </Text>\n      </Inline>\n      <Flex align=\"center\">\n        <Button\n          aria-label={t('calendar.action.go-to-today-aria-label')}\n          mode=\"bleed\"\n          onClick={onNowClick}\n          text={t('calendar.action.go-to-today')}\n        />\n        <Button\n          icon={ChevronLeftIcon}\n          mode=\"bleed\"\n          onClick={handlePrevMonthClick}\n          tooltipProps={{content: t('calendar.action.go-to-previous-month')}}\n        />\n        <Button\n          icon={ChevronRightIcon}\n          mode=\"bleed\"\n          onClick={handleNextMonthClick}\n          tooltipProps={{content: t('calendar.action.go-to-next-month')}}\n        />\n      </Flex>\n    </Flex>\n  )\n}\n","import {Card, Text, type Theme} from '@sanity/ui'\nimport {isAfter, isBefore, isSameDay, isSameMonth} from 'date-fns'\nimport {useCallback} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {useCalendar} from './contexts/useDatePicker'\n\ninterface CalendarDayProps {\n  date: Date\n  onSelect: (date: Date) => void\n}\n\nconst CircleSvg = styled.svg(({theme}: {theme: Theme}) => {\n  return css`\n    bottom: 0;\n    left: 0;\n    position: absolute;\n    right: 0;\n    top: 0;\n\n    circle {\n      stroke: ${theme.sanity.color.card.enabled.border};\n      stroke-width: 3;\n      fill: none;\n    }\n  `\n})\n\nconst CustomCard = styled(Card)`\n  position: relative;\n\n  &[data-focused='true'] {\n    z-index: 1;\n  }\n\n  &[data-start-date='true'] {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n\n  &[data-end-date='true'] {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n\n  &[data-within-range='true'] {\n    border-radius: 0;\n  }\n`\n\nexport function CalendarDay({date, onSelect}: CalendarDayProps) {\n  const handleClick = useCallback(() => {\n    onSelect(date)\n  }, [date, onSelect])\n\n  const {date: selectedDate, endDate: selectedEndDate, focusedDate, selectRange} = useCalendar()\n\n  const isSelected = selectedDate && isSameDay(date, selectedDate)\n  const isStartDate = selectRange && selectedDate && isSameDay(date, selectedDate)\n  const isEndDate = selectRange && selectedEndDate && isSameDay(date, selectedEndDate)\n\n  const isCurrentMonth = isSameMonth(date, focusedDate)\n  const isFocused = focusedDate && isSameDay(date, focusedDate)\n  const isToday = isSameDay(date, new Date())\n\n  const isWithinRange =\n    selectedDate &&\n    selectedEndDate &&\n    !isStartDate &&\n    !isEndDate &&\n    isAfter(date, selectedDate) &&\n    isBefore(date, selectedEndDate)\n\n  return (\n    <CustomCard\n      __unstable_focusRing\n      aria-label={date.toDateString()}\n      aria-pressed={isSelected}\n      data-end-date={isEndDate ? true : undefined}\n      data-focused={isFocused ? 'true' : ''}\n      data-ui=\"CalendarDay\"\n      aria-selected={isSelected}\n      data-start-date={isStartDate ? true : undefined}\n      data-within-range={isWithinRange ? true : undefined}\n      forwardedAs=\"button\"\n      onClick={handleClick}\n      paddingX={3}\n      paddingY={2}\n      radius={2}\n      role=\"button\"\n      selected={isSelected || isStartDate || isEndDate}\n      tabIndex={-1}\n      tone={isWithinRange ? 'primary' : 'default'}\n    >\n      {isToday && (\n        <CircleSvg\n          height=\"100%\"\n          preserveAspectRatio=\"xMidYMid meet\"\n          vectorEffect=\"non-scaling-stroke\"\n          viewBox=\"0 0 100 100\"\n          width=\"100%\"\n        >\n          <circle cx=\"50\" cy=\"50\" r=\"40%\" />\n        </CircleSvg>\n      )}\n      <Text\n        align=\"center\"\n        muted={!isSelected && !isCurrentMonth}\n        size={1}\n        weight={isCurrentMonth ? 'medium' : 'regular'}\n      >\n        {date.getDate()}\n      </Text>\n    </CustomCard>\n  )\n}\n","import {range} from 'lodash'\n\nimport {type StudioLocaleResourceKeys} from '../../../../../../../../../../../i18n'\n\nexport const MONTH_NAME_KEYS: StudioLocaleResourceKeys[] = [\n  'calendar.month-names.january',\n  'calendar.month-names.february',\n  'calendar.month-names.march',\n  'calendar.month-names.april',\n  'calendar.month-names.may',\n  'calendar.month-names.june',\n  'calendar.month-names.july',\n  'calendar.month-names.august',\n  'calendar.month-names.september',\n  'calendar.month-names.october',\n  'calendar.month-names.november',\n  'calendar.month-names.december',\n]\n\nexport const SHORT_WEEK_DAY_KEYS: StudioLocaleResourceKeys[] = [\n  'calendar.weekday-names.short.monday',\n  'calendar.weekday-names.short.tuesday',\n  'calendar.weekday-names.short.wednesday',\n  'calendar.weekday-names.short.thursday',\n  'calendar.weekday-names.short.friday',\n  'calendar.weekday-names.short.saturday',\n  'calendar.weekday-names.short.sunday',\n]\n\nexport const HOURS_24 = range(0, 24)\n\nexport const ARROW_KEYS = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight']\n\n// all weekdays except first\nexport const TAIL_WEEKDAYS = [1, 2, 3, 4, 5, 6]\n","import {addDays, eachWeekOfInterval, getWeek, lastDayOfMonth, startOfMonth} from 'date-fns'\n\nimport {useCurrentLocale} from '../../../../../../../../../../../i18n/hooks/useLocale'\nimport {TAIL_WEEKDAYS} from './constants'\n\n/**\n * NOTE: `weekStartsOn` uses 1 for Monday, 7 for Sunday. date-fns wants 0 for Sunday, 6 for Saturday.\n */\nconst getWeekStartsOfMonth = (date: Date, weekStartsOn: 1 | 2 | 3 | 4 | 5 | 6 | 7): Date[] => {\n  const firstDay = startOfMonth(date)\n  return eachWeekOfInterval(\n    {\n      start: firstDay,\n      end: lastDayOfMonth(firstDay),\n    },\n    {\n      weekStartsOn: weekStartsOn === 7 ? 0 : weekStartsOn,\n    },\n  )\n}\n\nconst getWeekDaysFromWeekStarts = (weekStarts: Date[]): Date[][] => {\n  return weekStarts.map((weekStart) => [\n    weekStart,\n    ...TAIL_WEEKDAYS.map((d) => addDays(weekStart, d)),\n  ])\n}\n\ntype Week = {\n  number: number\n  days: Date[]\n}\n\nexport const useWeeksOfMonth = (date: Date): Week[] => {\n  const {weekInfo} = useCurrentLocale()\n  return getWeekDaysFromWeekStarts(getWeekStartsOfMonth(date, weekInfo.firstDay)).map(\n    (days): Week => ({\n      number: getWeek(days[0]),\n      days,\n    }),\n  )\n}\n\nexport const formatTime = (hours: number, minutes: number): string =>\n  `${`${hours}`.padStart(2, '0')}:${`${minutes}`.padStart(2, '0')}`\n","import {Box, Grid, Text} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {useTranslation} from '../../../../../../../../../../../i18n'\nimport {CalendarDay} from './CalendarDay'\nimport {SHORT_WEEK_DAY_KEYS} from './constants'\nimport {useCalendar} from './contexts/useDatePicker'\nimport {useWeeksOfMonth} from './utils'\n\nconst WEEK_DAY_NAME_KEYS = {\n  // Monday is start of the week\n  1: SHORT_WEEK_DAY_KEYS,\n\n  // Saturday is start of week\n  6: [...SHORT_WEEK_DAY_KEYS.slice(5), ...SHORT_WEEK_DAY_KEYS.slice(0, 5)],\n\n  // Sunday is start of the week\n  7: [SHORT_WEEK_DAY_KEYS[6], ...SHORT_WEEK_DAY_KEYS.slice(0, 6)],\n}\n\ninterface CalendarMonthProps {\n  hidden?: boolean\n  onSelect: (date: Date) => void\n}\n\nconst CustomGrid = styled(Grid)`\n  grid-template-columns: repeat(7, minmax(44px, auto));\n`\n\nexport function CalendarMonth({hidden, onSelect}: CalendarMonthProps) {\n  const {focusedDate, firstWeekDay} = useCalendar()\n  const {t} = useTranslation()\n\n  return (\n    <Box aria-hidden={hidden || false} data-ui=\"CalendarMonth\">\n      <CustomGrid gapY={1}>\n        {WEEK_DAY_NAME_KEYS[firstWeekDay].map((weekdayDay) => (\n          <Box key={weekdayDay} paddingBottom={3} paddingTop={2}>\n            <Text align=\"center\" size={1} weight=\"medium\">\n              {t(weekdayDay)}\n            </Text>\n          </Box>\n        ))}\n\n        {useWeeksOfMonth(focusedDate).map((week, weekIdx) =>\n          week.days.map((weekDayDate, dayIdx) => {\n            return (\n              <CalendarDay\n                date={weekDayDate}\n                // eslint-disable-next-line react/no-array-index-key\n                key={`${weekIdx}-${dayIdx}`}\n                onSelect={onSelect}\n              />\n            )\n          }),\n        )}\n      </CustomGrid>\n    </Box>\n  )\n}\n","import {Box, Flex} from '@sanity/ui'\nimport {addDays, addMonths, isAfter, isBefore, set} from 'date-fns'\nimport {\n  type ComponentProps,\n  type KeyboardEvent,\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from 'react'\nimport {CalendarContext} from 'sanity/_singletons'\n\nimport {useCurrentLocale} from '../../../../../../../../../../../i18n/hooks/useLocale'\nimport {CalendarHeader} from './CalendarHeader'\nimport {CalendarMonth} from './CalendarMonth'\nimport {ARROW_KEYS} from './constants'\n\ntype CalendarProps = Omit<ComponentProps<'div'>, 'onSelect'> & {\n  date?: Date\n  endDate?: Date\n  onSelect: ({date, endDate}: {date: Date | null; endDate?: Date | null}) => void\n  selectRange?: boolean\n  selectTime?: boolean\n}\n\n// This is used to maintain focus on a child element of the calendar-grid between re-renders\n// When using arrow keys to move focus from a day in one month to another we are setting focus at the button for the day\n// after it has changed but *only* if we *already* had focus inside the calendar grid (e.g not if focus was on the \"next\n// year\" button, or any of the other controls)\n// When moving from the last day of a month that displays 6 weeks in the grid to a month that displays 5 weeks, current\n// focus gets lost on render, so this provides us with a stable element to help us preserve focus on a child element of\n// the calendar grid between re-renders\nconst PRESERVE_FOCUS_ELEMENT = (\n  <span\n    data-preserve-focus\n    style={{overflow: 'hidden', position: 'absolute', outline: 'none'}}\n    tabIndex={-1}\n  />\n)\n\nexport function Calendar(props: CalendarProps) {\n  const {date, endDate, onSelect, selectRange, selectTime} = props\n\n  const [calendarElement, setCalendarElement] = useState<HTMLElement | null>(null)\n  const [selectEndValue, setSelectEndValue] = useState(false)\n  const [focusedDate, setFocusedDate] = useState(date || new Date())\n\n  const previousDate = useRef<Date | null>(date || null)\n  const previousEndDate = useRef<Date | null>(endDate || null)\n\n  const {\n    weekInfo: {firstDay: firstWeekDay},\n  } = useCurrentLocale()\n\n  const focusCurrentWeekDay = useCallback(() => {\n    calendarElement?.querySelector<HTMLElement>(`[data-focused=\"true\"]`)?.focus()\n  }, [calendarElement])\n\n  const handleDateChange = useCallback(\n    (d: Date) => {\n      const selectedDate = set(d, {\n        hours: d.getHours(),\n        minutes: d.getMinutes(),\n        seconds: 0,\n        milliseconds: 0,\n      })\n\n      const dateIsBeforeStartDate = date && isBefore(selectedDate, date)\n      const dateIsAfterEndDate = endDate && isAfter(selectedDate, endDate)\n\n      if (selectRange) {\n        // Update existing start date and clear end date\n        if (dateIsBeforeStartDate || dateIsAfterEndDate) {\n          onSelect({date: selectedDate, endDate: null})\n          return\n        }\n        if (selectEndValue) {\n          // Update end date, retain start date if present\n          onSelect({date: date || null, endDate: selectedDate})\n        } else {\n          // Update start date, retain end date only if no date is present\n          onSelect({date: selectedDate, endDate: date ? null : endDate || null})\n        }\n      } else {\n        onSelect({date: selectedDate})\n      }\n    },\n    [date, endDate, onSelect, selectEndValue, selectRange],\n  )\n\n  const handleNowClick = useCallback(() => {\n    const now = new Date()\n    if (selectRange) {\n      setFocusedDate(now)\n    } else {\n      onSelect({date: now})\n    }\n  }, [onSelect, selectRange, setFocusedDate])\n\n  const handleKeyDown = useCallback(\n    (event: KeyboardEvent) => {\n      if (!ARROW_KEYS.includes(event.key)) {\n        return\n      }\n      event.preventDefault()\n      if ((event.target as HTMLElement).hasAttribute('data-calendar-grid')) {\n        focusCurrentWeekDay()\n        return\n      }\n      if (event.key === 'ArrowUp') {\n        setFocusedDate(addDays(focusedDate, -7))\n      }\n      if (event.key === 'ArrowDown') {\n        setFocusedDate(addDays(focusedDate, 7))\n      }\n      if (event.key === 'ArrowLeft') {\n        setFocusedDate(addDays(focusedDate, -1))\n      }\n      if (event.key === 'ArrowRight') {\n        setFocusedDate(addDays(focusedDate, 1))\n      }\n      // set focus temporarily on this element to make sure focus is still inside the calendar-grid after re-render\n      calendarElement?.querySelector<HTMLElement>('[data-preserve-focus]')?.focus()\n    },\n    [calendarElement, focusCurrentWeekDay, focusedDate, setFocusedDate],\n  )\n\n  const moveFocusedDate = useCallback(\n    (by: number) => setFocusedDate(addMonths(focusedDate, by)),\n    [focusedDate, setFocusedDate],\n  )\n\n  useEffect(() => {\n    focusCurrentWeekDay()\n  }, [focusCurrentWeekDay])\n\n  useEffect(() => {\n    const currentFocusInCalendarGrid = document.activeElement?.matches(\n      '[data-calendar-grid], [data-calendar-grid] [data-preserve-focus]',\n    )\n    if (\n      // Only move focus if it's currently in the calendar grid\n      currentFocusInCalendarGrid\n    ) {\n      focusCurrentWeekDay()\n    }\n  }, [focusCurrentWeekDay, focusedDate])\n\n  useEffect(() => {\n    const dateChanged = date?.getTime() !== previousDate.current?.getTime()\n    const endDateChanged = endDate?.getTime() !== previousEndDate.current?.getTime()\n    const onlyDateChanged = dateChanged && !endDateChanged\n    const onlyEndDateChanged = !dateChanged && endDateChanged\n    const dateIsAfterEndDate = date && endDate && isAfter(date, endDate)\n\n    // Only date has changed\n    if (onlyDateChanged) {\n      if (dateIsAfterEndDate) {\n        setSelectEndValue(true)\n        onSelect({date, endDate: null})\n      }\n      setSelectEndValue(!!date)\n      // Focus start date\n      if (date) setFocusedDate(date)\n    }\n    // Only end date has changed\n    if (onlyEndDateChanged) {\n      if (dateIsAfterEndDate) {\n        setSelectEndValue(true)\n        onSelect({date: endDate, endDate: null})\n      }\n      // Switch to end value, only if we have an existing start date and no end date\n      setSelectEndValue(!!date && !endDate)\n      // Focus end date\n      if (endDate) setFocusedDate(endDate)\n    }\n    // Both dates have changed\n    if (dateChanged && endDateChanged) {\n      setSelectEndValue(true)\n      // Focus start date\n      if (date) setFocusedDate(date)\n    }\n\n    previousDate.current = date || null\n    previousEndDate.current = endDate || null\n  }, [date, endDate, onSelect])\n\n  const value = useMemo(\n    () => ({\n      date,\n      endDate,\n      focusedDate,\n      selectRange,\n      selectTime,\n      firstWeekDay,\n    }),\n    [date, endDate, firstWeekDay, focusedDate, selectRange, selectTime],\n  )\n\n  return (\n    <CalendarContext.Provider value={value}>\n      <Box data-ui=\"Calendar\" ref={setCalendarElement}>\n        {/* Select month and year */}\n        <Flex>\n          <Box flex={1}>\n            <CalendarHeader moveFocusedDate={moveFocusedDate} onNowClick={handleNowClick} />\n          </Box>\n        </Flex>\n\n        {/* Selected month (grid of days) */}\n        <Box\n          data-calendar-grid\n          onKeyDown={handleKeyDown}\n          marginTop={2}\n          overflow=\"hidden\"\n          tabIndex={0}\n        >\n          <CalendarMonth onSelect={handleDateChange} />\n          {PRESERVE_FOCUS_ELEMENT}\n        </Box>\n      </Box>\n    </CalendarContext.Provider>\n  )\n}\n","import {useCallback} from 'react'\n\nimport {Calendar} from './calendar/Calendar'\n\ninterface DatePickerProps {\n  date?: Date\n  endDate?: Date\n  onChange: ({date, endDate}: {date?: Date | null; endDate?: Date | null}) => void\n  selectRange?: boolean\n  selectTime?: boolean\n}\n\nexport function DatePicker({date, endDate, onChange, selectRange, selectTime}: DatePickerProps) {\n  const handleSelect = useCallback(\n    (dates: {date: Date | null; endDate?: Date | null}) => {\n      onChange(dates)\n    },\n    [onChange],\n  )\n\n  return (\n    <Calendar\n      date={date}\n      endDate={endDate}\n      onSelect={handleSelect}\n      selectRange={selectRange}\n      selectTime={selectTime}\n    />\n  )\n}\n","import {endOfDay, startOfDay} from 'date-fns'\n\nexport type RoundDayValue = 'end' | 'start'\n\n/**\n * Get the ISO 8601 string of a provided date.\n *\n * Returns a full ISO string if `datetime=true` (e.g. '2023-01-04T10:00:00.000Z')\n * Otherwise, returns a partial string containing only the date (e.g. '2023-01-04'),\n */\nexport function getDateISOString({\n  date,\n  dateOnly,\n  roundDay,\n}: {\n  date: Date\n  dateOnly?: boolean\n  roundDay?: RoundDayValue\n}): string {\n  let adjustedDate: Date\n  switch (roundDay) {\n    case 'end':\n      adjustedDate = endOfDay(date)\n      break\n    case 'start':\n      adjustedDate = startOfDay(date)\n      break\n    default:\n      adjustedDate = date\n      break\n  }\n\n  return dateOnly ? adjustedDate.toISOString().split('T')[0] : adjustedDate.toISOString()\n}\n","import {format, isValid, parse} from 'date-fns'\nimport {\n  type ChangeEvent,\n  type ComponentProps,\n  type KeyboardEvent,\n  useCallback,\n  useEffect,\n  useMemo,\n  useState,\n} from 'react'\n\nimport {Tooltip} from '../../../../../../../../../../ui-components'\nimport {useTranslation} from '../../../../../../../../../i18n'\nimport {CustomTextInput} from '../../../../common/CustomTextInput'\nimport {getDateISOString} from './utils/getDateISOString'\n\ninterface ParsedDateTextInputProps\n  extends Omit<ComponentProps<typeof CustomTextInput>, 'onChange' | 'value'> {\n  /**\n   * Determines whether `onChange` returns a full or partial ISO-8601 string.\n   * e.g. '2023-01-04T10:00:00.000Z' or '2023-01-04'\n   */\n  isDateTime: boolean\n  /**\n   * Determines whether dates are formatted with full or partial date format\n   * e.g. 'Feb 1, 2000 12:00 AM' vs 'Feb 1, 2000'\n   */\n  isDateTimeFormat?: boolean\n  onChange: (val: string | null) => void\n  placeholderDate?: Date\n  value?: string | null\n}\n\nconst FORMAT: Record<\n  'date' | 'datetime',\n  {\n    /** Displayed in validation errors */\n    exampleDate: string\n    pattern: string\n  }\n> = {\n  date: {\n    exampleDate: 'Jan 1, 2000',\n    pattern: 'MMM d, yyyy',\n  },\n  datetime: {\n    exampleDate: 'Jan 1, 2000 12:00 AM',\n    pattern: 'MMM d, yyyy p',\n  },\n}\n\nexport function ParsedDateTextInput({\n  isDateTime,\n  onChange,\n  placeholderDate,\n  isDateTimeFormat,\n  value,\n  ...rest\n}: ParsedDateTextInputProps) {\n  const {t} = useTranslation()\n  const dateFormat = isDateTimeFormat ? FORMAT.datetime.pattern : FORMAT.date.pattern\n\n  const [customValidity, setCustomValidity] = useState<string | undefined>(undefined)\n  const [inputValue, setInputValue] = useState<string>(() => {\n    if (!value) {\n      return ''\n    }\n    const inputValueDate = new Date(value)\n    return format(inputValueDate, dateFormat)\n  })\n\n  /**\n   * Conditionally create placeholder text\n   */\n  const formattedPlaceholder = useMemo(() => {\n    const date = placeholderDate || new Date()\n    return format(date, dateFormat)\n  }, [dateFormat, placeholderDate])\n\n  /**\n   * Process current input value:\n   * - If `useDateFormat = true`, parse custom date string format and create date object.\n   * (Otherwise assume ISO-8601 format).\n   * - Validate the parsed date, update `customValidity` state on <TextInput />\n   * - If valid, update local input value and optionally trigger onChange callback.\n   */\n  const processInputString = useCallback(\n    ({dateString, triggerOnChange}: {dateString: string; triggerOnChange?: boolean}) => {\n      if (!dateString) {\n        return\n      }\n      const dateParsed = parse(dateString, dateFormat, new Date())\n      const validDate = isValid(dateParsed)\n      if (validDate) {\n        if (triggerOnChange) {\n          onChange(getDateISOString({date: dateParsed, dateOnly: !isDateTime}))\n        }\n        setInputValue(format(dateParsed, dateFormat))\n      }\n      setCustomValidity(validDate ? undefined : `Invalid ${isDateTime ? 'datetime' : 'date'}`)\n    },\n    [dateFormat, isDateTime, onChange],\n  )\n\n  /**\n   * Re-process (parse, validate and update) current input value on blur\n   */\n  const handleTextInputBlur = useCallback(() => {\n    processInputString({dateString: inputValue, triggerOnChange: true})\n  }, [inputValue, processInputString])\n\n  const handleTextInputChange = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n    setInputValue(event.currentTarget.value)\n  }, [])\n\n  /**\n   * Reset state on input clear\n   */\n  const handleTextInputClear = useCallback(() => {\n    onChange(null)\n    setCustomValidity(undefined)\n    setInputValue('')\n  }, [onChange])\n\n  /**\n   * Re-process (parse, validate and update) current input value on ENTER\n   */\n  const handleTextInputKeyDown = useCallback(\n    (event: KeyboardEvent<HTMLInputElement>) => {\n      if (event.key === 'Enter') {\n        processInputString({dateString: inputValue, triggerOnChange: true})\n      }\n    },\n    [inputValue, processInputString],\n  )\n\n  /**\n   * Re-process input string when props value is updated\n   */\n  useEffect(() => {\n    const updatedDate = value && new Date(value)\n    if (updatedDate) {\n      processInputString({\n        dateString: format(updatedDate, dateFormat),\n        triggerOnChange: false,\n      })\n    }\n  }, [dateFormat, processInputString, isDateTimeFormat, value])\n\n  return (\n    <Tooltip\n      content={t('calendar.error.must-be-in-format', {\n        exampleDate: isDateTimeFormat ? FORMAT.datetime.exampleDate : FORMAT.date.exampleDate,\n      })}\n      disabled={!customValidity}\n      placement=\"top\"\n      portal\n    >\n      {/* HACK: Wrapping element required for <Tooltip> to function */}\n      <CustomTextInput\n        {...rest}\n        clearButton={!!inputValue}\n        customValidity={customValidity}\n        onBlur={handleTextInputBlur}\n        onChange={handleTextInputChange}\n        onClear={handleTextInputClear}\n        onKeyDown={handleTextInputKeyDown}\n        placeholder={formattedPlaceholder}\n        value={inputValue}\n      />\n    </Tooltip>\n  )\n}\n","import {Stack} from '@sanity/ui'\nimport {useCallback, useMemo} from 'react'\n\nimport {useTranslation} from '../../../../../../../../../i18n'\nimport {useSearchState} from '../../../../../contexts/search/useSearchState'\nimport {type OperatorDateDirectionValue} from '../../../../../definitions/operators/dateOperators'\nimport {type OperatorInputComponentProps} from '../../../../../definitions/operators/operatorTypes'\nimport {DateIncludeTimeFooter} from './dateIncludeTimeFooter/DateIncludeTimeFooter'\nimport {DatePicker} from './datePicker/DatePicker'\nimport {ParsedDateTextInput} from './ParsedDateTextInput'\nimport {getDateISOString} from './utils/getDateISOString'\n\nexport function CommonDateDirectionInput({\n  direction,\n  isDateTime,\n  onChange,\n  value,\n}: OperatorInputComponentProps<OperatorDateDirectionValue> & {\n  direction: 'after' | 'before'\n  isDateTime: boolean\n}) {\n  const {\n    state: {fullscreen},\n  } = useSearchState()\n  const {t} = useTranslation()\n\n  const roundDay = useMemo(() => {\n    switch (direction) {\n      case 'after':\n        return 'end'\n      case 'before':\n        return 'start'\n      default:\n        return undefined\n    }\n  }, [direction])\n\n  const handleDatePickerChange = useCallback(\n    ({date}: {date?: Date | null}) => {\n      let dateISOString: string | null = null\n      if (date) {\n        dateISOString = getDateISOString({\n          date,\n          dateOnly: !isDateTime,\n          roundDay: value?.includeTime ? undefined : roundDay,\n        })\n      }\n      onChange({\n        includeTime: value?.includeTime,\n        date: dateISOString,\n      })\n    },\n    [isDateTime, onChange, roundDay, value?.includeTime],\n  )\n\n  const handleIncludeTimeChange = useCallback(() => {\n    const includeTime = !value?.includeTime\n    const date = value?.date ? new Date(value.date) : null\n\n    let dateISOString: string | null = null\n    if (date) {\n      dateISOString = getDateISOString({\n        date,\n        dateOnly: !isDateTime,\n        roundDay: includeTime ? 'start' : roundDay,\n      })\n    }\n    onChange({includeTime, date: dateISOString})\n  }, [isDateTime, onChange, roundDay, value])\n\n  const handleTextDateChange = useCallback(\n    (date: string | null) => {\n      onChange({\n        includeTime: value?.includeTime,\n        date: date || null,\n      })\n    },\n    [onChange, value?.includeTime],\n  )\n\n  return (\n    <Stack space={3}>\n      <ParsedDateTextInput\n        aria-label={t('search.filter-date-aria-label')}\n        fontSize={fullscreen ? 2 : 1}\n        isDateTime={isDateTime}\n        isDateTimeFormat={isDateTime && value?.includeTime}\n        onChange={handleTextDateChange}\n        radius={2}\n        value={value?.date}\n      />\n      <DatePicker\n        date={value?.date ? new Date(value.date) : undefined}\n        onChange={handleDatePickerChange}\n        selectTime={isDateTime}\n      />\n      {/* Include time footer */}\n      {isDateTime && (\n        <DateIncludeTimeFooter onChange={handleIncludeTimeChange} value={!!value?.includeTime} />\n      )}\n    </Stack>\n  )\n}\n","import {type OperatorDateDirectionValue} from '../../../../../definitions/operators/dateOperators'\nimport {type OperatorInputComponentProps} from '../../../../../definitions/operators/operatorTypes'\nimport {CommonDateDirectionInput} from './CommonDateDirection'\n\nexport function SearchFilterDateAfterInput(\n  props: OperatorInputComponentProps<OperatorDateDirectionValue>,\n) {\n  return <CommonDateDirectionInput {...props} direction=\"after\" isDateTime={false} />\n}\n","import {type OperatorDateDirectionValue} from '../../../../../definitions/operators/dateOperators'\nimport {type OperatorInputComponentProps} from '../../../../../definitions/operators/operatorTypes'\nimport {CommonDateDirectionInput} from './CommonDateDirection'\n\nexport function SearchFilterDateBeforeInput(\n  props: OperatorInputComponentProps<OperatorDateDirectionValue>,\n) {\n  return <CommonDateDirectionInput {...props} direction=\"before\" isDateTime={false} />\n}\n","import {Stack} from '@sanity/ui'\nimport {useCallback} from 'react'\n\nimport {useTranslation} from '../../../../../../../../../i18n'\nimport {useSearchState} from '../../../../../contexts/search/useSearchState'\nimport {type OperatorDateEqualValue} from '../../../../../definitions/operators/dateOperators'\nimport {type OperatorInputComponentProps} from '../../../../../definitions/operators/operatorTypes'\nimport {DateIncludeTimeFooter} from './dateIncludeTimeFooter/DateIncludeTimeFooter'\nimport {DatePicker} from './datePicker/DatePicker'\nimport {ParsedDateTextInput} from './ParsedDateTextInput'\nimport {getDateISOString} from './utils/getDateISOString'\n\nexport function CommonDateEqualInput({\n  isDateTime,\n  onChange,\n  value,\n}: OperatorInputComponentProps<OperatorDateEqualValue> & {\n  isDateTime: boolean\n}) {\n  const {\n    state: {fullscreen},\n  } = useSearchState()\n  const {t} = useTranslation()\n\n  const handleDatePickerChange = useCallback(\n    ({date}: {date?: Date | null}) => {\n      if (date) {\n        const dateISOString = getDateISOString({date, dateOnly: !isDateTime})\n        onChange({\n          includeTime: value?.includeTime,\n          date: dateISOString,\n        })\n      } else {\n        onChange(null)\n      }\n    },\n    [isDateTime, onChange, value?.includeTime],\n  )\n\n  const handleIncludeTimeChange = useCallback(() => {\n    const includeTime = !value?.includeTime\n    const date = value?.date ? new Date(value.date) : null\n\n    let dateISOString: string | null = null\n    if (date) {\n      dateISOString = getDateISOString({\n        date,\n        dateOnly: !isDateTime,\n      })\n    }\n    onChange({includeTime, date: dateISOString})\n  }, [isDateTime, onChange, value])\n\n  const handleTextDateChange = useCallback(\n    (date: string | null) => {\n      onChange({\n        includeTime: value?.includeTime,\n        date: date || null,\n      })\n    },\n    [onChange, value?.includeTime],\n  )\n\n  return (\n    <Stack space={3}>\n      <ParsedDateTextInput\n        aria-label={t('search.filter-date-aria-label')}\n        fontSize={fullscreen ? 2 : 1}\n        isDateTime={isDateTime}\n        isDateTimeFormat={isDateTime && value?.includeTime}\n        onChange={handleTextDateChange}\n        radius={2}\n        value={value?.date}\n      />\n      <DatePicker\n        date={value?.date ? new Date(value.date) : undefined}\n        onChange={handleDatePickerChange}\n        selectTime={isDateTime}\n      />\n      {/* Include time footer */}\n      {isDateTime && (\n        <DateIncludeTimeFooter onChange={handleIncludeTimeChange} value={!!value?.includeTime} />\n      )}\n    </Stack>\n  )\n}\n","import {type OperatorDateEqualValue} from '../../../../../definitions/operators/dateOperators'\nimport {type OperatorInputComponentProps} from '../../../../../definitions/operators/operatorTypes'\nimport {CommonDateEqualInput} from './CommonDateEqual'\n\nexport function SearchFilterDateEqualInput(\n  props: OperatorInputComponentProps<OperatorDateEqualValue>,\n) {\n  return <CommonDateEqualInput {...props} isDateTime={false} />\n}\n","import {Box, Flex, Select, TextInput} from '@sanity/ui'\nimport {type ChangeEvent, useCallback, useRef, useState} from 'react'\n\nimport {type StudioLocaleResourceKeys, useTranslation} from '../../../../../../../../../i18n'\nimport {useSearchState} from '../../../../../contexts/search/useSearchState'\nimport {type OperatorDateLastValue} from '../../../../../definitions/operators/dateOperators'\nimport {type OperatorInputComponentProps} from '../../../../../definitions/operators/operatorTypes'\n\ntype UnitChoice = {\n  unit: OperatorDateLastValue['unit']\n  key: StudioLocaleResourceKeys\n}\n\nconst UNIT_CHOICES: UnitChoice[] = [\n  {unit: 'day', key: 'search.filter-date-unit_days'},\n  {unit: 'month', key: 'search.filter-date-unit_months'},\n  {unit: 'year', key: 'search.filter-date-unit_years'},\n]\n\nexport function SearchFilterDateLastInput({\n  onChange,\n  value,\n}: OperatorInputComponentProps<OperatorDateLastValue>) {\n  const [uncontrolledValue, setUncontrolledValue] = useState(value?.unitValue || '')\n  const dateUnit = useRef<OperatorDateLastValue['unit']>('day')\n  const dateValue = useRef<OperatorDateLastValue['unitValue']>(value?.unitValue || null)\n  const {t} = useTranslation()\n\n  const {\n    state: {fullscreen},\n  } = useSearchState()\n\n  const handleChange = useCallback(() => {\n    onChange({\n      unit: dateUnit?.current,\n      unitValue: dateValue?.current,\n    })\n  }, [onChange])\n\n  const handleUnitChange = useCallback(\n    (event: ChangeEvent<HTMLSelectElement>) => {\n      dateUnit.current = event.currentTarget.value as OperatorDateLastValue['unit']\n      handleChange()\n    },\n    [handleChange],\n  )\n  const handleValueChange = useCallback(\n    (event: ChangeEvent<HTMLInputElement>) => {\n      setUncontrolledValue(event.currentTarget.value)\n      const numValue = parseFloat(event.currentTarget.value)\n      dateValue.current = Number.isFinite(numValue) ? numValue : null\n      handleChange()\n    },\n    [handleChange],\n  )\n\n  return (\n    <Flex gap={2}>\n      <Box flex={1}>\n        <TextInput\n          aria-label={t('search.filter-date-value-aria-label')}\n          fontSize={fullscreen ? 2 : 1}\n          onChange={handleValueChange}\n          pattern=\"\\d*\"\n          radius={2}\n          step=\"1\"\n          type=\"number\"\n          value={uncontrolledValue}\n        />\n      </Box>\n      <Box flex={1}>\n        <Select\n          aria-label={t('search.filter-date-unit-aria-label')}\n          fontSize={fullscreen ? 2 : 1}\n          onChange={handleUnitChange}\n          radius={2}\n          value={value?.unit}\n        >\n          {UNIT_CHOICES.map((choice) => (\n            <option key={choice.key} value={choice.unit}>\n              {t(choice.key)}\n            </option>\n          ))}\n        </Select>\n      </Box>\n    </Flex>\n  )\n}\n","import {Flex, Stack} from '@sanity/ui'\nimport {addDays} from 'date-fns'\nimport {useCallback, useState} from 'react'\n\nimport {useTranslation} from '../../../../../../../../../i18n'\nimport {useSearchState} from '../../../../../contexts/search/useSearchState'\nimport {type OperatorDateRangeValue} from '../../../../../definitions/operators/dateOperators'\nimport {type OperatorInputComponentProps} from '../../../../../definitions/operators/operatorTypes'\nimport {DateIncludeTimeFooter} from './dateIncludeTimeFooter/DateIncludeTimeFooter'\nimport {DatePicker} from './datePicker/DatePicker'\nimport {ParsedDateTextInput} from './ParsedDateTextInput'\nimport {getDateISOString} from './utils/getDateISOString'\n\nconst PLACEHOLDER_START_DATE_OFFSET = -7 // days\n\nexport function CommonDateRangeInput({\n  isDateTime,\n  onChange,\n  value,\n}: OperatorInputComponentProps<OperatorDateRangeValue> & {\n  isDateTime: boolean\n}) {\n  const {t} = useTranslation()\n  const {\n    state: {fullscreen},\n  } = useSearchState()\n\n  /**\n   * For placeholder values: Use the current date for the end date input, and an arbitrary date\n   * in the past (e.g. -7 days from now) for the start date input.\n   */\n  const [placeholderStartDate] = useState(() => addDays(new Date(), PLACEHOLDER_START_DATE_OFFSET))\n  const [placeholderEndDate] = useState(() => new Date())\n\n  const handleDatePickerChange = useCallback(\n    ({date, endDate}: {date?: Date | null; endDate?: Date | null}) => {\n      onChange(\n        getStartAndEndDate({\n          date,\n          endDate,\n          includeTime: value?.includeTime,\n          isDateTime,\n        }),\n      )\n    },\n    [isDateTime, onChange, value?.includeTime],\n  )\n\n  const handleIncludeTimeChange = useCallback(() => {\n    const includeTime = !value?.includeTime\n    onChange(\n      getStartAndEndDate({\n        date: value?.from ? new Date(value.from) : null,\n        endDate: value?.to ? new Date(value.to) : null,\n        includeTime,\n        isDateTime,\n      }),\n    )\n  }, [isDateTime, onChange, value])\n\n  const handleTextEndDateChange = useCallback(\n    (date: string | null) => {\n      onChange({\n        includeTime: value?.includeTime,\n        to: date || null,\n        from: value?.from || null,\n      })\n    },\n    [onChange, value],\n  )\n\n  const handleTextStartDateChange = useCallback(\n    (date: string | null) => {\n      onChange({\n        includeTime: value?.includeTime,\n        to: value?.to || null,\n        from: date || null,\n      })\n    },\n    [onChange, value],\n  )\n\n  return (\n    <div>\n      <Stack space={3}>\n        <Flex direction=\"column\" gap={3}>\n          {/* Start date */}\n          <ParsedDateTextInput\n            aria-label={t('search.filter-date-range-start-date-aria-label')}\n            fontSize={fullscreen ? 2 : 1}\n            isDateTime={isDateTime}\n            isDateTimeFormat={isDateTime && value?.includeTime}\n            onChange={handleTextStartDateChange}\n            placeholderDate={placeholderStartDate}\n            radius={2}\n            value={value?.from}\n          />\n          {/* End date */}\n          <ParsedDateTextInput\n            aria-label={t('search.filter-date-range-end-date-aria-label')}\n            fontSize={fullscreen ? 2 : 1}\n            isDateTime={isDateTime}\n            isDateTimeFormat={isDateTime && value?.includeTime}\n            onChange={handleTextEndDateChange}\n            placeholderDate={placeholderEndDate}\n            radius={2}\n            value={value?.to}\n          />\n        </Flex>\n        <DatePicker\n          date={value?.from ? new Date(value.from) : undefined}\n          endDate={value?.to ? new Date(value.to) : undefined}\n          onChange={handleDatePickerChange}\n          selectRange\n          selectTime={isDateTime}\n        />\n        {/* Include time footer */}\n        {isDateTime && (\n          <DateIncludeTimeFooter onChange={handleIncludeTimeChange} value={!!value?.includeTime} />\n        )}\n      </Stack>\n    </div>\n  )\n}\n\nfunction getStartAndEndDate({\n  date,\n  endDate,\n  includeTime,\n  isDateTime,\n}: {\n  date?: Date | null\n  endDate?: Date | null\n  includeTime?: boolean\n  isDateTime?: boolean\n}): {\n  includeTime?: boolean\n  to: string | null\n  from: string | null\n} {\n  if (includeTime) {\n    return {\n      includeTime,\n      to: endDate\n        ? getDateISOString({date: endDate, dateOnly: !isDateTime, roundDay: 'start'})\n        : null,\n      from: date ? getDateISOString({date: date, dateOnly: !isDateTime, roundDay: 'start'}) : null,\n    }\n  }\n\n  return {\n    includeTime,\n    to: endDate ? getDateISOString({date: endDate, dateOnly: !isDateTime, roundDay: 'end'}) : null,\n    from: date ? getDateISOString({date, dateOnly: !isDateTime, roundDay: 'start'}) : null,\n  }\n}\n","import {type OperatorDateRangeValue} from '../../../../../definitions/operators/dateOperators'\nimport {type OperatorInputComponentProps} from '../../../../../definitions/operators/operatorTypes'\nimport {CommonDateRangeInput} from './CommonDateRange'\n\nexport function SearchFilterDateRangeInput(\n  props: OperatorInputComponentProps<OperatorDateRangeValue>,\n) {\n  return <CommonDateRangeInput {...props} isDateTime={false} />\n}\n","import {type OperatorDateDirectionValue} from '../../../../../definitions/operators/dateOperators'\nimport {type OperatorInputComponentProps} from '../../../../../definitions/operators/operatorTypes'\nimport {CommonDateDirectionInput} from './CommonDateDirection'\n\nexport function SearchFilterDateTimeAfterInput(\n  props: OperatorInputComponentProps<OperatorDateDirectionValue>,\n) {\n  return <CommonDateDirectionInput {...props} direction=\"after\" isDateTime />\n}\n","import {type OperatorDateDirectionValue} from '../../../../../definitions/operators/dateOperators'\nimport {type OperatorInputComponentProps} from '../../../../../definitions/operators/operatorTypes'\nimport {CommonDateDirectionInput} from './CommonDateDirection'\n\nexport function SearchFilterDateTimeBeforeInput(\n  props: OperatorInputComponentProps<OperatorDateDirectionValue>,\n) {\n  return <CommonDateDirectionInput {...props} direction=\"before\" isDateTime />\n}\n","import {type OperatorDateEqualValue} from '../../../../../definitions/operators/dateOperators'\nimport {type OperatorInputComponentProps} from '../../../../../definitions/operators/operatorTypes'\nimport {CommonDateEqualInput} from './CommonDateEqual'\n\nexport function SearchFilterDateTimeEqualInput(\n  props: OperatorInputComponentProps<OperatorDateEqualValue>,\n) {\n  return <CommonDateEqualInput {...props} isDateTime />\n}\n","import {type OperatorDateRangeValue} from '../../../../../definitions/operators/dateOperators'\nimport {type OperatorInputComponentProps} from '../../../../../definitions/operators/operatorTypes'\nimport {CommonDateRangeInput} from './CommonDateRange'\n\nexport function SearchFilterDateTimeRangeInput(\n  props: OperatorInputComponentProps<OperatorDateRangeValue>,\n) {\n  return <CommonDateRangeInput {...props} isDateTime />\n}\n","import {\n  endOfDay,\n  endOfMinute,\n  isValid,\n  startOfDay,\n  startOfMinute,\n  startOfToday,\n  sub,\n} from 'date-fns'\n\nimport {\n  SearchButtonValueDate,\n  SearchButtonValueDateLast,\n  SearchButtonValueDateRange,\n} from '../../components/filters/common/ButtonValue'\nimport {SearchFilterDateAfterInput} from '../../components/filters/filter/inputs/date/DateAfter'\nimport {SearchFilterDateBeforeInput} from '../../components/filters/filter/inputs/date/DateBefore'\nimport {SearchFilterDateEqualInput} from '../../components/filters/filter/inputs/date/DateEqual'\nimport {SearchFilterDateLastInput} from '../../components/filters/filter/inputs/date/DateLast'\nimport {SearchFilterDateRangeInput} from '../../components/filters/filter/inputs/date/DateRange'\nimport {SearchFilterDateTimeAfterInput} from '../../components/filters/filter/inputs/date/DateTimeAfter'\nimport {SearchFilterDateTimeBeforeInput} from '../../components/filters/filter/inputs/date/DateTimeBefore'\nimport {SearchFilterDateTimeEqualInput} from '../../components/filters/filter/inputs/date/DateTimeEqual'\nimport {SearchFilterDateTimeRangeInput} from '../../components/filters/filter/inputs/date/DateTimeRange'\nimport {\n  defineSearchOperator,\n  type SearchOperatorButtonValue,\n  type SearchOperatorInput,\n  type SearchOperatorParams,\n} from './operatorTypes'\nimport {toJSON} from './operatorUtils'\n\n// 'Before' and 'after' dates\nexport interface OperatorDateDirectionValue {\n  includeTime?: boolean\n  date: string | null\n}\n\nexport interface OperatorDateEqualValue {\n  includeTime?: boolean\n  date: string | null\n}\n\nexport interface OperatorDateRangeValue {\n  to: string | null\n  from: string | null\n  includeTime?: boolean\n}\n\nexport interface OperatorDateLastValue {\n  unit: 'day' | 'month' | 'year'\n  unitValue: number | null\n}\n\n// @todo: don't manually cast `buttonValueComponent` and `inputComponent` once\n// we understand why `npm run etl` fails with 'Unable to follow symbol' errors\n\n// Common values shared between date & datetime defs\nconst COMMON = {\n  dateAfter: {\n    buttonValueComponent:\n      SearchButtonValueDate as SearchOperatorButtonValue<OperatorDateDirectionValue>,\n    initialValue: null,\n  },\n  dateBefore: {\n    buttonValueComponent:\n      SearchButtonValueDate as SearchOperatorButtonValue<OperatorDateDirectionValue>,\n    initialValue: null,\n  },\n  dateEqual: {\n    buttonValueComponent:\n      SearchButtonValueDate as SearchOperatorButtonValue<OperatorDateEqualValue>,\n    initialValue: {\n      date: null,\n      includeTime: false,\n    },\n  },\n  dateLast: {\n    buttonValueComponent:\n      SearchButtonValueDateLast as SearchOperatorButtonValue<OperatorDateLastValue>,\n  },\n  dateNotEqual: {\n    buttonValueComponent:\n      SearchButtonValueDate as SearchOperatorButtonValue<OperatorDateEqualValue>,\n    initialValue: {\n      date: null,\n      includeTime: false,\n    },\n  },\n  dateRange: {\n    initialValue: null,\n  },\n}\n\nexport const dateOperators = {\n  dateAfter: defineSearchOperator({\n    ...COMMON.dateAfter,\n\n    nameKey: 'search.operator.date-after.name',\n    descriptionKey: 'search.operator.date-after.description',\n\n    groqFilter: ({fieldPath, value}: SearchOperatorParams<OperatorDateDirectionValue>) => {\n      return value?.date && fieldPath ? `${fieldPath} > ${toJSON(value?.date)}` : null\n    },\n    inputComponent: SearchFilterDateAfterInput as SearchOperatorInput<OperatorDateDirectionValue>,\n    type: 'dateAfter',\n  }),\n  dateBefore: defineSearchOperator({\n    ...COMMON.dateBefore,\n\n    nameKey: 'search.operator.date-before.name',\n    descriptionKey: 'search.operator.date-before.description',\n\n    groqFilter: ({fieldPath, value}: SearchOperatorParams<OperatorDateDirectionValue>) => {\n      return value?.date && fieldPath ? `${fieldPath} < ${toJSON(value?.date)}` : null\n    },\n    inputComponent: SearchFilterDateBeforeInput as SearchOperatorInput<OperatorDateDirectionValue>,\n    type: 'dateBefore',\n  }),\n  dateEqual: defineSearchOperator({\n    ...COMMON.dateEqual,\n\n    nameKey: 'search.operator.date-equal.name',\n    descriptionKey: 'search.operator.date-equal.description',\n\n    groqFilter: ({fieldPath, value}: SearchOperatorParams<OperatorDateEqualValue>) => {\n      return value?.date && fieldPath ? `${fieldPath} == ${toJSON(value.date)}` : null\n    },\n    inputComponent: SearchFilterDateEqualInput as SearchOperatorInput<OperatorDateEqualValue>,\n    type: 'dateEqual',\n  }),\n  dateLast: defineSearchOperator({\n    ...COMMON.dateLast,\n\n    nameKey: 'search.operator.date-last.name',\n    descriptionKey: 'search.operator.date-last.description',\n\n    groqFilter: ({fieldPath, value}: SearchOperatorParams<OperatorDateLastValue>) => {\n      const flooredValue =\n        typeof value?.unitValue === 'number' ? Math.floor(value.unitValue) : undefined\n      const timestampAgo = Number.isFinite(flooredValue)\n        ? sub(new Date(), {\n            days: value?.unit === 'day' ? flooredValue : 0,\n            months: value?.unit === 'month' ? flooredValue : 0,\n            years: value?.unit === 'year' ? flooredValue : 0,\n          })\n            .toISOString()\n            .split('T')[0] // only include date\n        : null\n      return timestampAgo && fieldPath ? `${fieldPath} > ${toJSON(timestampAgo)}` : null\n    },\n    inputComponent: SearchFilterDateLastInput as SearchOperatorInput<OperatorDateLastValue>,\n    initialValue: {\n      unit: 'day',\n      unitValue: 7,\n    },\n    type: 'dateLast',\n  }),\n  dateNotEqual: defineSearchOperator({\n    ...COMMON.dateNotEqual,\n\n    nameKey: 'search.operator.date-not-equal.name',\n    descriptionKey: 'search.operator.date-not-equal.description',\n\n    groqFilter: ({fieldPath, value}: SearchOperatorParams<OperatorDateEqualValue>) => {\n      return value?.date && fieldPath ? `${fieldPath} != ${toJSON(value.date)}` : null\n    },\n    inputComponent: SearchFilterDateEqualInput as SearchOperatorInput<OperatorDateEqualValue>,\n    type: 'dateNotEqual',\n  }),\n  dateRange: defineSearchOperator({\n    ...COMMON.dateRange,\n\n    nameKey: 'search.operator.date-range.name',\n    descriptionKey: 'search.operator.date-range.description',\n\n    buttonValueComponent:\n      SearchButtonValueDateRange as SearchOperatorButtonValue<OperatorDateRangeValue>,\n    groqFilter: ({fieldPath, value}: SearchOperatorParams<OperatorDateRangeValue>) => {\n      return value?.to && value?.from && fieldPath\n        ? `${fieldPath} >= ${toJSON(value.from)} && ${fieldPath} <= ${toJSON(value.to)}`\n        : null\n    },\n    initialValue: {\n      includeTime: false,\n      to: startOfToday().toISOString(),\n      from: null,\n    },\n    inputComponent: SearchFilterDateRangeInput as SearchOperatorInput<OperatorDateRangeValue>,\n    type: 'dateRange',\n  }),\n  dateTimeAfter: defineSearchOperator({\n    ...COMMON.dateAfter,\n\n    nameKey: 'search.operator.date-time-after.name',\n    descriptionKey: 'search.operator.date-time-after.description',\n\n    groqFilter: ({fieldPath, value}: SearchOperatorParams<OperatorDateDirectionValue>) => {\n      return value?.date && fieldPath\n        ? `dateTime(${fieldPath}) > dateTime(${toJSON(value.date)})`\n        : null\n    },\n    inputComponent:\n      SearchFilterDateTimeAfterInput as SearchOperatorInput<OperatorDateDirectionValue>,\n    type: 'dateTimeAfter',\n  }),\n  dateTimeBefore: defineSearchOperator({\n    ...COMMON.dateBefore,\n\n    nameKey: 'search.operator.date-time-before.name',\n    descriptionKey: 'search.operator.date-time-before.description',\n\n    groqFilter: ({fieldPath, value}: SearchOperatorParams<OperatorDateDirectionValue>) => {\n      return value?.date && fieldPath\n        ? `dateTime(${fieldPath}) < dateTime(${toJSON(value.date)})`\n        : null\n    },\n    inputComponent:\n      SearchFilterDateTimeBeforeInput as SearchOperatorInput<OperatorDateDirectionValue>,\n    type: 'dateTimeBefore',\n  }),\n  dateTimeEqual: defineSearchOperator({\n    ...COMMON.dateEqual,\n\n    nameKey: 'search.operator.date-time-equal.name',\n    descriptionKey: 'search.operator.date-time-equal.description',\n\n    groqFilter: ({fieldPath, value}: SearchOperatorParams<OperatorDateEqualValue>) => {\n      const date = value?.date && new Date(value.date)\n      if (!date || !isValid(date) || !fieldPath) {\n        return null\n      }\n      const dateStart = (value?.includeTime ? startOfMinute(date) : startOfDay(date)).toISOString()\n      const dateEnd = (value?.includeTime ? endOfMinute(date) : endOfDay(date)).toISOString()\n      return `dateTime(${fieldPath}) > dateTime(${toJSON(\n        dateStart,\n      )}) && dateTime(${fieldPath}) < dateTime(${toJSON(dateEnd)})`\n    },\n    inputComponent: SearchFilterDateTimeEqualInput as SearchOperatorInput<OperatorDateEqualValue>,\n    type: 'dateTimeEqual',\n  }),\n  dateTimeLast: defineSearchOperator({\n    ...COMMON.dateLast,\n\n    nameKey: 'search.operator.date-time-last.name',\n    descriptionKey: 'search.operator.date-time-last.description',\n\n    groqFilter: ({fieldPath, value}: SearchOperatorParams<OperatorDateLastValue>) => {\n      const flooredValue =\n        typeof value?.unitValue === 'number' ? Math.floor(value.unitValue) : undefined\n      const timestampAgo = Number.isFinite(flooredValue)\n        ? sub(new Date(), {\n            days: value?.unit === 'day' ? flooredValue : 0,\n            months: value?.unit === 'month' ? flooredValue : 0,\n            years: value?.unit === 'year' ? flooredValue : 0,\n          }).toISOString()\n        : null\n      return timestampAgo && fieldPath\n        ? `dateTime(${fieldPath}) > dateTime(${toJSON(timestampAgo)})`\n        : null\n    },\n    initialValue: {\n      unit: 'day',\n      unitValue: 7,\n    },\n    inputComponent: SearchFilterDateLastInput as SearchOperatorInput<OperatorDateLastValue>,\n    type: 'dateTimeLast',\n  }),\n  dateTimeNotEqual: defineSearchOperator({\n    ...COMMON.dateNotEqual,\n\n    nameKey: 'search.operator.date-time-not-equal.name',\n    descriptionKey: 'search.operator.date-time-not-equal.description',\n\n    groqFilter: ({fieldPath, value}: SearchOperatorParams<OperatorDateEqualValue>) => {\n      const date = value?.date && new Date(value.date)\n      if (!date || !isValid(date) || !fieldPath) {\n        return null\n      }\n      const dateStart = (value?.includeTime ? startOfMinute(date) : startOfDay(date)).toISOString()\n      const dateEnd = (value?.includeTime ? endOfMinute(date) : endOfDay(date)).toISOString()\n      return `dateTime(${fieldPath}) < dateTime(${toJSON(\n        dateStart,\n      )}) || dateTime(${fieldPath}) > dateTime(${toJSON(dateEnd)})`\n    },\n    inputComponent: SearchFilterDateTimeEqualInput as SearchOperatorInput<OperatorDateEqualValue>,\n    type: 'dateTimeNotEqual',\n  }),\n\n  dateTimeRange: defineSearchOperator({\n    ...COMMON.dateRange,\n\n    nameKey: 'search.operator.date-time-range.name',\n    descriptionKey: 'search.operator.date-time-range.description',\n\n    buttonValueComponent:\n      SearchButtonValueDateRange as SearchOperatorButtonValue<OperatorDateRangeValue>,\n    groqFilter: ({fieldPath, value}: SearchOperatorParams<OperatorDateRangeValue>) => {\n      return value?.to && value?.from && fieldPath\n        ? `dateTime(${fieldPath}) >= dateTime(${toJSON(\n            value.from,\n          )}) && dateTime(${fieldPath}) <= dateTime(${toJSON(value.to)})`\n        : null\n    },\n    initialValue: {\n      includeTime: false,\n      to: startOfToday().toISOString(),\n      from: null,\n    },\n    inputComponent: SearchFilterDateTimeRangeInput as SearchOperatorInput<OperatorDateRangeValue>,\n    type: 'dateTimeRange',\n  }),\n}\n","import {defineSearchOperator} from './operatorTypes'\n\nexport const definedOperators = {\n  defined: defineSearchOperator({\n    nameKey: 'search.operator.defined.name',\n    descriptionKey: 'search.operator.defined.description',\n\n    groqFilter: ({fieldPath}) => (fieldPath ? `defined(${fieldPath})` : null),\n    type: 'defined',\n  }),\n  notDefined: defineSearchOperator({\n    nameKey: 'search.operator.not-defined.name',\n    descriptionKey: 'search.operator.not-defined.description',\n\n    i18nKey: 'search.operator.not-defined',\n    groqFilter: ({fieldPath}) => (fieldPath ? `!defined(${fieldPath})` : null),\n    type: 'notDefined',\n  }),\n}\n","import {SearchFilterNumberInput} from '../../components/filters/filter/inputs/number/Number'\nimport {SearchFilterNumberRangeInput} from '../../components/filters/filter/inputs/number/NumberRange'\nimport {GteIcon} from '../../components/filters/icons/GteIcon'\nimport {GtIcon} from '../../components/filters/icons/GtIcon'\nimport {LteIcon} from '../../components/filters/icons/LteIcon'\nimport {LtIcon} from '../../components/filters/icons/LtIcon'\nimport {type OperatorNumberRangeValue} from './common'\nimport {defineSearchOperator, type SearchOperatorInput} from './operatorTypes'\nimport {toJSON} from './operatorUtils'\n\n// @todo: don't manually cast `buttonValueComponent` and `inputComponent` once\n// we understand why `npm etl` fails with 'Unable to follow symbol' errors\nexport const numberOperators = {\n  numberEqual: defineSearchOperator({\n    nameKey: 'search.operator.number-equal.name',\n    descriptionKey: 'search.operator.number-equal.description',\n    groqFilter: ({fieldPath, value}) =>\n      Number.isFinite(value) && fieldPath ? `${fieldPath} == ${toJSON(value)}` : null,\n    initialValue: null,\n    inputComponent: SearchFilterNumberInput as SearchOperatorInput<number>,\n    type: 'numberEqual',\n  }),\n  numberGt: defineSearchOperator({\n    nameKey: 'search.operator.number-gt.name',\n    descriptionKey: 'search.operator.number-gt.description',\n    groqFilter: ({fieldPath, value}) =>\n      Number.isFinite(value) && fieldPath ? `${fieldPath} > ${toJSON(value)}` : null,\n    icon: GtIcon,\n    initialValue: null,\n    inputComponent: SearchFilterNumberInput as SearchOperatorInput<number>,\n    type: 'numberGt',\n  }),\n  numberGte: defineSearchOperator({\n    nameKey: 'search.operator.number-gte.name',\n    descriptionKey: 'search.operator.number-gte.description',\n    groqFilter: ({fieldPath, value}) =>\n      Number.isFinite(value) && fieldPath ? `${fieldPath} >= ${toJSON(value)}` : null,\n    icon: GteIcon,\n    initialValue: null,\n    inputComponent: SearchFilterNumberInput as SearchOperatorInput<number>,\n    type: 'numberGte',\n  }),\n  numberLt: defineSearchOperator({\n    nameKey: 'search.operator.number-lt.name',\n    descriptionKey: 'search.operator.number-lt.description',\n    groqFilter: ({fieldPath, value}) =>\n      Number.isFinite(value) && fieldPath ? `${fieldPath} < ${toJSON(value)}` : null,\n    icon: LtIcon,\n    initialValue: null,\n    inputComponent: SearchFilterNumberInput as SearchOperatorInput<number>,\n    type: 'numberLt',\n  }),\n  numberLte: defineSearchOperator({\n    nameKey: 'search.operator.number-lte.name',\n    descriptionKey: 'search.operator.number-lte.description',\n    groqFilter: ({fieldPath, value}) =>\n      Number.isFinite(value) && fieldPath ? `${fieldPath} <= ${toJSON(value)}` : null,\n    icon: LteIcon,\n    initialValue: null,\n    inputComponent: SearchFilterNumberInput as SearchOperatorInput<number>,\n    type: 'numberLte',\n  }),\n  numberNotEqual: defineSearchOperator({\n    nameKey: 'search.operator.number-not-equal.name',\n    descriptionKey: 'search.operator.number-not-equal.description',\n    groqFilter: ({fieldPath, value}) =>\n      Number.isFinite(value) && fieldPath ? `${fieldPath} != ${toJSON(value)}` : null,\n    initialValue: null,\n    inputComponent: SearchFilterNumberInput as SearchOperatorInput<number>,\n    type: 'numberNotEqual',\n  }),\n  numberRange: defineSearchOperator({\n    nameKey: 'search.operator.number-range.name',\n    descriptionKey: 'search.operator.number-range.description',\n    groqFilter: ({fieldPath, value}) =>\n      Number.isFinite(value?.to) && Number.isFinite(value?.from) && fieldPath\n        ? `${fieldPath} > ${toJSON(value?.from)} && ${fieldPath} < ${toJSON(value?.to)}`\n        : '',\n    initialValue: null,\n    inputComponent: SearchFilterNumberRangeInput as SearchOperatorInput<OperatorNumberRangeValue>,\n    type: 'numberRange',\n  }),\n}\n","import {TextInput} from '@sanity/ui'\nimport {type ChangeEvent, useCallback} from 'react'\n\nimport {useTranslation} from '../../../../../../../../../i18n'\nimport {useSearchState} from '../../../../../contexts/search/useSearchState'\nimport {type OperatorInputComponentProps} from '../../../../../definitions/operators/operatorTypes'\n\nexport function SearchFilterStringInput({\n  onChange,\n  value,\n}: OperatorInputComponentProps<number | string>) {\n  const {\n    state: {fullscreen},\n  } = useSearchState()\n  const {t} = useTranslation()\n\n  const handleChange = useCallback(\n    (event: ChangeEvent<HTMLInputElement>) => onChange(event.currentTarget.value || null),\n    [onChange],\n  )\n\n  return (\n    <TextInput\n      fontSize={fullscreen ? 2 : 1}\n      onChange={handleChange}\n      placeholder={t('search.filter-string-value-placeholder')}\n      radius={2}\n      value={value || ''}\n    />\n  )\n}\n","import {SearchFilterStringInput} from '../../components/filters/filter/inputs/string/String'\nimport {defineSearchOperator, type SearchOperatorInput} from './operatorTypes'\nimport {toJSON} from './operatorUtils'\n\n// @todo: don't manually cast `buttonValueComponent` and `inputComponent` once\n// we understand why `npm etl` fails with 'Unable to follow symbol' errors\nexport const portableTextOperators = {\n  portableTextEqual: defineSearchOperator({\n    nameKey: 'search.operator.portable-text-equal.name',\n    descriptionKey: 'search.operator.portable-text-equal.description',\n    groqFilter: ({fieldPath, value}) =>\n      value && fieldPath ? `pt::text(${fieldPath}) == ${toJSON(value)}` : null,\n    initialValue: null,\n    inputComponent: SearchFilterStringInput as SearchOperatorInput<string | number>,\n    type: 'portableTextEqual',\n  }),\n  portableTextMatches: defineSearchOperator({\n    nameKey: 'search.operator.portable-text-contains.name',\n    descriptionKey: 'search.operator.portable-text-contains.description',\n    groqFilter: ({fieldPath, value}) =>\n      value && fieldPath ? `pt::text(${fieldPath}) match ${toJSON(value)}` : null,\n    initialValue: null,\n    inputComponent: SearchFilterStringInput as SearchOperatorInput<string | number>,\n    type: 'portableTextMatches',\n  }),\n  portableTextNotEqual: defineSearchOperator({\n    nameKey: 'search.operator.portable-text-not-equal.name',\n    descriptionKey: 'search.operator.portable-text-not-equal.description',\n    groqFilter: ({fieldPath, value}) =>\n      value && fieldPath ? `pt::text(${fieldPath}) != ${toJSON(value)}` : null,\n    initialValue: null,\n    inputComponent: SearchFilterStringInput as SearchOperatorInput<string | number>,\n    type: 'portableTextNotEqual',\n  }),\n  portableTextNotMatches: defineSearchOperator({\n    nameKey: 'search.operator.portable-text-not-contains.name',\n    descriptionKey: 'search.operator.portable-text-not-contains.description',\n    groqFilter: ({fieldPath, value}) =>\n      value && fieldPath ? `!(pt::text(${fieldPath}) match ${toJSON(value)})` : null,\n    initialValue: null,\n    inputComponent: SearchFilterStringInput as SearchOperatorInput<string | number>,\n    type: 'portableTextNotMatches',\n  }),\n}\n","import {type ReferenceValue} from '@sanity/types'\n\nimport {SearchButtonValueReference} from '../../components/filters/common/ButtonValue'\nimport {SearchFilterAssetInput} from '../../components/filters/filter/inputs/asset/Asset'\nimport {SearchFilterReferenceInput} from '../../components/filters/filter/inputs/reference/Reference'\nimport {\n  defineSearchOperator,\n  type SearchOperatorButtonValue,\n  type SearchOperatorInput,\n} from './operatorTypes'\nimport {toJSON} from './operatorUtils'\n\n// @todo: don't manually cast `buttonValueComponent` and `inputComponent` once\n// we understand why `npm etl` fails with 'Unable to follow symbol' errors\nexport const referenceOperators = {\n  referenceEqual: defineSearchOperator({\n    nameKey: 'search.operator.reference-equal.name',\n    descriptionKey: 'search.operator.reference-equal.description',\n    buttonValueComponent: SearchButtonValueReference as SearchOperatorButtonValue<ReferenceValue>,\n    groqFilter: ({fieldPath, value}) =>\n      value?._ref && fieldPath ? `${fieldPath}._ref == ${toJSON(value._ref)}` : null,\n    initialValue: null,\n    inputComponent: SearchFilterReferenceInput as SearchOperatorInput<ReferenceValue>,\n    type: 'referenceEqual',\n  }),\n  referenceNotEqual: defineSearchOperator({\n    nameKey: 'search.operator.reference-not-equal.name',\n    descriptionKey: 'search.operator.reference-not-equal.description',\n    buttonValueComponent: SearchButtonValueReference as SearchOperatorButtonValue<ReferenceValue>,\n    groqFilter: ({fieldPath, value}) =>\n      value?._ref && fieldPath ? `${fieldPath}._ref != ${toJSON(value._ref)}` : null,\n    initialValue: null,\n    inputComponent: SearchFilterReferenceInput as SearchOperatorInput<ReferenceValue>,\n    type: 'referenceNotEqual',\n  }),\n  referencesAssetFile: defineSearchOperator({\n    nameKey: 'search.operator.reference-asset-file.name',\n    descriptionKey: 'search.operator.reference-asset-file.description',\n    buttonValueComponent: SearchButtonValueReference as SearchOperatorButtonValue<ReferenceValue>,\n    groqFilter: ({value}) => (value?._ref ? `references(${toJSON(value._ref)})` : null),\n    initialValue: null,\n    inputComponent: SearchFilterAssetInput('file'),\n    type: 'referencesAssetFile',\n  }),\n  referencesAssetImage: defineSearchOperator({\n    nameKey: 'search.operator.reference-asset-image.name',\n    descriptionKey: 'search.operator.reference-asset-image.description',\n    buttonValueComponent: SearchButtonValueReference as SearchOperatorButtonValue<ReferenceValue>,\n    groqFilter: ({value}) => (value?._ref ? `references(${toJSON(value._ref)})` : null),\n    initialValue: null,\n    inputComponent: SearchFilterAssetInput('image'),\n    type: 'referencesAssetImage',\n  }),\n  referencesDocument: defineSearchOperator({\n    nameKey: 'search.operator.reference-document.name',\n    descriptionKey: 'search.operator.reference-document.description',\n    buttonValueComponent: SearchButtonValueReference as SearchOperatorButtonValue<ReferenceValue>,\n    groqFilter: ({value}) => (value?._ref ? `references(${toJSON(value._ref)})` : null),\n    initialValue: null,\n    inputComponent: SearchFilterReferenceInput as SearchOperatorInput<ReferenceValue>,\n    type: 'referencesDocument',\n  }),\n}\n","import {SearchFilterStringInput} from '../../components/filters/filter/inputs/string/String'\nimport {defineSearchOperator, type SearchOperatorInput} from './operatorTypes'\nimport {toJSON} from './operatorUtils'\n\n// @todo: don't manually cast `buttonValueComponent` and `inputComponent` once\n// we understand why `npm etl` fails with 'Unable to follow symbol' errors\nexport const slugOperators = {\n  slugEqual: defineSearchOperator({\n    nameKey: 'search.operator.slug-equal.name',\n    descriptionKey: 'search.operator.slug-equal.description',\n    groqFilter: ({fieldPath, value}) =>\n      value && fieldPath ? `${fieldPath}.current == ${toJSON(value)}` : null,\n    initialValue: null,\n    inputComponent: SearchFilterStringInput as SearchOperatorInput<string | number>,\n    type: 'slugEqual',\n  }),\n  slugMatches: defineSearchOperator({\n    nameKey: 'search.operator.slug-contains.name',\n    descriptionKey: 'search.operator.slug-contains.description',\n    groqFilter: ({fieldPath, value}) =>\n      value && fieldPath ? `${fieldPath}.current match ${toJSON(value)}` : null,\n    initialValue: null,\n    inputComponent: SearchFilterStringInput as SearchOperatorInput<string | number>,\n    label: 'contains',\n    type: 'slugMatches',\n  }),\n  slugNotEqual: defineSearchOperator({\n    nameKey: 'search.operator.slug-not-equal.name',\n    descriptionKey: 'search.operator.slug-not-equal.description',\n    groqFilter: ({fieldPath, value}) =>\n      value && fieldPath ? `${fieldPath}.current != ${toJSON(value)}` : null,\n    initialValue: null,\n    inputComponent: SearchFilterStringInput as SearchOperatorInput<string | number>,\n    type: 'slugNotEqual',\n  }),\n  slugNotMatches: defineSearchOperator({\n    nameKey: 'search.operator.slug-not-contains.name',\n    descriptionKey: 'search.operator.slug-not-contains.description',\n    groqFilter: ({fieldPath, value}) =>\n      value && fieldPath ? `!(${fieldPath}.current match ${toJSON(value)})` : null,\n    initialValue: null,\n    inputComponent: SearchFilterStringInput as SearchOperatorInput<string | number>,\n    type: 'slugNotMatches',\n  }),\n}\n","import {SearchFilterStringInput} from '../../components/filters/filter/inputs/string/String'\nimport {SearchFilterStringListInput} from '../../components/filters/filter/inputs/string/StringList'\nimport {defineSearchOperator, type SearchOperatorInput} from './operatorTypes'\nimport {toJSON} from './operatorUtils'\n\n// @todo: don't manually cast `buttonValueComponent` and `inputComponent` once\n// we understand why `npm etl` fails with 'Unable to follow symbol' errors\nexport const stringOperators = {\n  stringEqual: defineSearchOperator({\n    nameKey: 'search.operator.string-equal.name',\n    descriptionKey: 'search.operator.string-equal.description',\n    groqFilter: ({fieldPath, value}) =>\n      value && fieldPath ? `${fieldPath} == ${toJSON(value)}` : null,\n    initialValue: null,\n    inputComponent: SearchFilterStringInput as SearchOperatorInput<string | number>,\n    type: 'stringEqual',\n  }),\n  stringListEqual: defineSearchOperator({\n    nameKey: 'search.operator.string-list-equal.name',\n    descriptionKey: 'search.operator.string-list-equal.description',\n    groqFilter: ({fieldPath, value}) =>\n      value && fieldPath ? `${fieldPath} == ${toJSON(value)}` : null,\n    initialValue: null,\n    inputComponent: SearchFilterStringListInput as SearchOperatorInput<string | number>,\n    type: 'stringListEqual',\n  }),\n  stringListNotEqual: defineSearchOperator({\n    nameKey: 'search.operator.string-list-not-equal.name',\n    descriptionKey: 'search.operator.string-list-not-equal.description',\n    groqFilter: ({fieldPath, value}) =>\n      value && fieldPath ? `${fieldPath} != ${toJSON(value)}` : null,\n    initialValue: null,\n    inputComponent: SearchFilterStringListInput as SearchOperatorInput<string | number>,\n    type: 'stringListNotEqual',\n  }),\n  stringMatches: defineSearchOperator({\n    nameKey: 'search.operator.string-contains.name',\n    descriptionKey: 'search.operator.string-contains.description',\n    groqFilter: ({fieldPath, value}) =>\n      value && fieldPath ? `${fieldPath} match \"*${value}*\"` : null,\n    initialValue: null,\n    inputComponent: SearchFilterStringInput as SearchOperatorInput<string | number>,\n    type: 'stringMatches',\n  }),\n  stringNotEqual: defineSearchOperator({\n    nameKey: 'search.operator.string-not-equal.name',\n    descriptionKey: 'search.operator.string-not-equal.description',\n    groqFilter: ({fieldPath, value}) =>\n      value && fieldPath ? `${fieldPath} != ${toJSON(value)}` : null,\n    initialValue: null,\n    inputComponent: SearchFilterStringInput as SearchOperatorInput<string | number>,\n    type: 'stringNotEqual',\n  }),\n  stringNotMatches: defineSearchOperator({\n    nameKey: 'search.operator.string-not-contains.name',\n    descriptionKey: 'search.operator.string-not-contains.description',\n    groqFilter: ({fieldPath, value}) =>\n      value && fieldPath ? `!(${fieldPath} match \"*${value}*\")` : null,\n    initialValue: null,\n    inputComponent: SearchFilterStringInput as SearchOperatorInput<string | number>,\n    type: 'stringNotMatches',\n  }),\n}\n","import {arrayOperators} from './arrayOperators'\nimport {assetOperators} from './assetOperators'\nimport {booleanOperators} from './booleanOperators'\nimport {dateOperators} from './dateOperators'\nimport {definedOperators} from './definedOperators'\nimport {numberOperators} from './numberOperators'\nimport {portableTextOperators} from './portableTextOperators'\nimport {referenceOperators} from './referenceOperators'\nimport {slugOperators} from './slugOperators'\nimport {stringOperators} from './stringOperators'\n\nconst searchOperators = {\n  ...arrayOperators,\n  ...assetOperators,\n  ...booleanOperators,\n  ...dateOperators,\n  ...definedOperators,\n  ...numberOperators,\n  ...portableTextOperators,\n  ...referenceOperators,\n  ...slugOperators,\n  ...stringOperators,\n}\n\ntype DefaultOperators = typeof searchOperators\n\n/**\n * @alpha\n */\nexport type SearchOperatorType = keyof DefaultOperators\n\n/**\n * @internal\n */\nexport const operatorDefinitions = Object.values(searchOperators)\n","import {type LocaleResourceBundle} from '../../i18n'\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: LocaleResourceBundle = {\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 {type ReactNode, useCallback, useMemo, useState} from 'react'\nimport {CommentsAuthoringPathContext} from 'sanity/_singletons'\n\nimport {type CommentsAuthoringPathContextValue} from './types'\n\ninterface CommentsAuthoringPathProviderProps {\n  children: ReactNode\n}\n\n/**\n * @beta\n * @hidden\n * This provider keeps track of the path that the user is currently authoring a comment for.\n * This is needed to make sure that we consistently keep the editor open when the user is\n * authoring a comment. The state is kept in a context to make sure that it is preserved\n * across re-renders. If this state was kept in a component, it would be reset every time\n * the component re-renders, for example, when the form is temporarily set to `readOnly`\n * while reconnecting.\n */\nexport function CommentsAuthoringPathProvider(props: CommentsAuthoringPathProviderProps) {\n  const {children} = props\n  const [authoringPath, setAuthoringPath] = useState<string | null>(null)\n\n  const handleSetAuthoringPath = useCallback((nextAuthoringPath: string | null) => {\n    setAuthoringPath(nextAuthoringPath)\n  }, [])\n\n  const value = useMemo(\n    (): CommentsAuthoringPathContextValue => ({\n      authoringPath,\n      setAuthoringPath: handleSetAuthoringPath,\n    }),\n    [authoringPath, handleSetAuthoringPath],\n  )\n\n  return (\n    <CommentsAuthoringPathContext.Provider value={value}>\n      {children}\n    </CommentsAuthoringPathContext.Provider>\n  )\n}\n","import {useContext} from 'react'\nimport {CommentsIntentContext} from 'sanity/_singletons'\n\nimport {type CommentIntentGetter} from '../types'\n\n/**\n * @beta\n * @hidden\n */\nexport function useCommentsIntent(): CommentIntentGetter | undefined {\n  return useContext(CommentsIntentContext)\n}\n","import {useCallback, useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {of} from 'rxjs'\n\nimport {useSchema} from '../../hooks'\nimport {getPreviewStateObservable} from '../../preview'\nimport {useDocumentPreviewStore} from '../../store'\nimport {useWorkspace} from '../../studio'\nimport {type CommentContext} from '../types'\n\ninterface NotificationTargetHookOptions {\n  documentId: string\n  documentType: string\n  getCommentLink?: (commentId: string) => 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, getCommentLink} = opts || {}\n  const schemaType = useSchema().get(documentType)\n  const {title: workspaceTitle} = useWorkspace()\n\n  const documentPreviewStore = useDocumentPreviewStore()\n\n  const previewStateObservable = useMemo(() => {\n    if (!documentId || !schemaType) return of(null)\n    return getPreviewStateObservable(documentPreviewStore, schemaType, documentId)\n  }, [documentId, documentPreviewStore, schemaType])\n  const previewState = useObservable(previewStateObservable)\n\n  const {snapshot, original} = previewState || {}\n  const documentTitle = (snapshot?.title || original?.title || 'Sanity document') as string\n\n  const handleGetNotificationValue = useCallback(\n    ({commentId}: {commentId: string}) => ({\n      documentTitle,\n      url: getCommentLink?.(commentId),\n      workspaceTitle,\n    }),\n    [documentTitle, getCommentLink, workspaceTitle],\n  )\n\n  return {\n    getNotificationValue: handleGetNotificationValue,\n  }\n}\n","import {TextInput} from '@sanity/ui'\n\nimport {type StringInputProps} from '../types'\n\n/**\n *\n * @hidden\n * @beta\n */\nexport type TelephoneInputProps = StringInputProps\n\n/**\n *\n * @hidden\n * @beta\n */\nexport function TelephoneInput(props: TelephoneInputProps) {\n  const {schemaType, validationError, value, elementProps} = props\n\n  return (\n    <TextInput\n      type=\"tel\"\n      inputMode=\"tel\"\n      customValidity={validationError}\n      value={value || ''}\n      placeholder={schemaType.placeholder}\n      {...elementProps}\n    />\n  )\n}\n","/* eslint-disable no-nested-ternary */\nimport {type ConditionalProperty, type CurrentUser} from '@sanity/types'\n\n/**\n * @internal\n */\nexport interface ConditionalPropertyCallbackContext {\n  parent?: unknown\n  document?: Record<string, unknown>\n  currentUser: Omit<CurrentUser, 'role'> | null\n  value: unknown\n}\n\n/**\n * @internal\n */\nexport function resolveConditionalProperty(\n  property: ConditionalProperty,\n  context: ConditionalPropertyCallbackContext,\n) {\n  const {currentUser, document, parent, value} = context\n\n  if (typeof property === 'boolean' || property === undefined) {\n    return Boolean(property)\n  }\n\n  return (\n    property({\n      document: document as any,\n      parent,\n      value,\n      currentUser,\n    }) === true // note: we can't strictly \"trust\" the return value here, so the conditional property should probably be typed as unknown\n  )\n}\n","import {isKeySegment, type Path} from '@sanity/types'\n\nimport {type StateTree} from './types'\n\n/** @internal */\nexport function setAtPath<T>(\n  currentTree: StateTree<T> | undefined,\n  path: Path,\n  value: T,\n): StateTree<T> {\n  if (path.length === 0) {\n    return {...(currentTree || {}), value}\n  }\n  const [head, ...tail] = path\n  const key = isKeySegment(head) ? head._key : String(head)\n  const children = currentTree?.children ?? {}\n  return {\n    value: currentTree?.value,\n    children: {...children, [key]: setAtPath(children[key] || {}, tail, value)},\n  }\n}\n","import {type FieldGroup} from '@sanity/types'\n\nimport {studioLocaleNamespace} from '../../i18n/localeNamespaces'\n\n/**\n * Max supported field depth. Fields deeper than this will be considered hidden.\n */\nexport const MAX_FIELD_DEPTH = 20\n\n/**\n * Start auto-collapsing fields at this nesting level unless schema/field configuration says otherwise\n */\nexport const AUTO_COLLAPSE_DEPTH = 3\n\nexport const ALL_FIELDS_GROUP: FieldGroup = {\n  name: 'all-fields',\n  title: 'All fields',\n  hidden: false,\n  i18n: {\n    title: {\n      key: 'inputs.object.field-group-tabs.all-fields-title',\n      ns: studioLocaleNamespace,\n    },\n  },\n}\n","import {nanoid} from 'nanoid'\n\nconst idCache = new WeakMap<object, string>()\nconst undefinedKey = {key: 'GetIdUndefined'}\nconst nullKey = {key: 'GetIdNull'}\n\n/**\n * Generates a stable ID for various types of values, including `undefined`, `null`, objects, functions, and symbols.\n *\n * - **Primitives (string, number, boolean):** The value itself is used as the ID.\n * - **Undefined and null:** Special symbols (`undefinedKey` and `nullKey`) are used to generate unique IDs.\n * - **Objects and functions:** An ID is generated using the `nanoid` library and cached in a `WeakMap` for stable future retrieval.\n *\n * This function is used to reconcile inputs in `prepareFormState` immutably, allowing IDs to be generated and cached based\n * on the reference of the object. This ensures that memoization functions can use these IDs for consistent hashing without\n * recalculating on each call, as the inputs themselves are immutably edited.\n *\n * @internal\n */\nexport function getId(value: unknown): string {\n  switch (typeof value) {\n    case 'undefined': {\n      return getId(undefinedKey)\n    }\n    case 'function':\n    case 'object':\n    case 'symbol': {\n      if (value === null) return getId(nullKey)\n\n      const cached = idCache.get(value as object)\n      if (cached) return cached\n\n      const id = nanoid()\n      idCache.set(value as object, id)\n      return id\n    }\n    default: {\n      return `${value}`\n    }\n  }\n}\n","import {type CurrentUser, isKeyedObject, type SchemaType} from '@sanity/types'\n\nimport {EMPTY_ARRAY} from '../../../util/empty'\nimport {MAX_FIELD_DEPTH} from '../constants'\nimport {type StateTree} from '../types/state'\nimport {getId} from '../utils/getId'\nimport {getItemType} from '../utils/getItemType'\nimport {immutableReconcile} from '../utils/immutableReconcile'\nimport {\n  type ConditionalPropertyCallbackContext,\n  resolveConditionalProperty,\n} from './resolveConditionalProperty'\n\ninterface ResolveCallbackStateOptions {\n  property: 'readOnly' | 'hidden'\n  value: unknown\n  parent: unknown\n  document: unknown\n  currentUser: Omit<CurrentUser, 'role'> | null\n  schemaType: SchemaType\n  level: number\n}\n\nfunction resolveCallbackState({\n  value,\n  parent,\n  document,\n  currentUser,\n  schemaType,\n  level,\n  property,\n}: ResolveCallbackStateOptions): StateTree<boolean> | undefined {\n  const context: ConditionalPropertyCallbackContext = {\n    value,\n    parent,\n    document: document as ConditionalPropertyCallbackContext['document'],\n    currentUser,\n  }\n  const selfValue = resolveConditionalProperty(schemaType[property], context)\n\n  // we don't have to calculate the children if the current value is true\n  // because readOnly and hidden inherit. If the parent is readOnly or hidden\n  // then its children are assumed to also be readOnly or hidden respectively.\n  if (selfValue || level === MAX_FIELD_DEPTH) {\n    return {value: selfValue}\n  }\n\n  const children: Record<string, StateTree<boolean>> = {}\n\n  if (schemaType.jsonType === 'object') {\n    // note: this is needed because not all object types gets a ´fieldsets´ property during schema parsing.\n    // ideally members should be normalized as part of the schema parsing and not here\n    const normalizedSchemaMembers: typeof schemaType.fieldsets = schemaType.fieldsets\n      ? schemaType.fieldsets\n      : schemaType.fields.map((field) => ({single: true, field}))\n\n    for (const fieldset of normalizedSchemaMembers) {\n      if (fieldset.single) {\n        const childResult = resolveCallbackState({\n          currentUser,\n          document,\n          parent: value,\n          value: (value as any)?.[fieldset.field.name],\n          schemaType: fieldset.field.type,\n          level: level + 1,\n          property,\n        })\n        if (!childResult) continue\n\n        children[fieldset.field.name] = childResult\n        continue\n      }\n\n      const fieldsetValue = resolveConditionalProperty(fieldset.hidden, context)\n      if (fieldsetValue) {\n        children[`fieldset:${fieldset.name}`] = {\n          value: fieldsetValue,\n        }\n      }\n\n      for (const field of fieldset.fields) {\n        const childResult = resolveCallbackState({\n          currentUser,\n          document,\n          parent: value,\n          value: (value as any)?.[field.name],\n          schemaType: field.type,\n          level: level + 1,\n          property,\n        })\n        if (!childResult) continue\n\n        children[field.name] = childResult\n      }\n    }\n\n    for (const group of schemaType.groups ?? EMPTY_ARRAY) {\n      // should only be true for `'hidden'`\n      if (property in group) {\n        const groupResult = resolveConditionalProperty(group[property as 'hidden'], context)\n        if (!groupResult) continue\n\n        children[`group:${group.name}`] = {value: groupResult}\n      }\n    }\n  }\n\n  if (schemaType.jsonType === 'array' && Array.isArray(value)) {\n    if (value.every(isKeyedObject)) {\n      for (const item of value) {\n        const itemType = getItemType(schemaType, item)\n        if (!itemType) continue\n\n        const childResult = resolveCallbackState({\n          currentUser,\n          document,\n          level: level + 1,\n          value: item,\n          parent: value,\n          schemaType: itemType,\n          property,\n        })\n        if (!childResult) continue\n\n        children[item._key] = childResult\n      }\n    }\n  }\n\n  if (Object.keys(children).length) return {children}\n  return undefined\n}\n\nexport interface CreateCallbackResolverOptions<TProperty extends 'hidden' | 'readOnly'> {\n  property: TProperty\n}\n\nexport type ResolveRootCallbackStateOptions<TProperty extends 'hidden' | 'readOnly'> = {\n  documentValue: unknown\n  currentUser: Omit<CurrentUser, 'role'> | null\n  schemaType: SchemaType\n} & {[K in TProperty]?: boolean}\n\nexport type RootCallbackResolver<TProperty extends 'hidden' | 'readOnly'> = (\n  options: ResolveRootCallbackStateOptions<TProperty>,\n) => StateTree<boolean> | undefined\n\nexport function createCallbackResolver<TProperty extends 'hidden' | 'readOnly'>({\n  property,\n}: CreateCallbackResolverOptions<TProperty>): RootCallbackResolver<TProperty> {\n  const stableTrue = {value: true}\n  let last: {serializedHash: string; result: StateTree<boolean> | undefined} | null = null\n\n  function callbackResult({\n    currentUser,\n    documentValue,\n    schemaType,\n    ...options\n  }: ResolveRootCallbackStateOptions<TProperty>) {\n    const hash = {\n      currentUser: getId(currentUser),\n      schemaType: getId(schemaType),\n      document: getId(documentValue),\n    }\n    const serializedHash = JSON.stringify(hash)\n\n    if (property in options) {\n      if (options[property] === true) {\n        return stableTrue\n      }\n    }\n\n    if (last?.serializedHash === serializedHash) return last.result\n\n    const result = immutableReconcile(\n      last?.result ?? null,\n      resolveCallbackState({\n        currentUser,\n        document: documentValue,\n        level: 0,\n        parent: null,\n        schemaType,\n        value: documentValue,\n        property,\n      }),\n    )\n\n    last = {\n      result,\n      serializedHash,\n    }\n\n    return result\n  }\n\n  return callbackResult\n}\n","import {type Path} from '@sanity/types'\nimport {toString} from '@sanity/util/paths'\n\nexport type FunctionDecorator<TFunction extends (...args: never[]) => unknown> = (\n  fn: TFunction,\n) => TFunction\n\nexport interface MemoizerOptions<TFunction extends (...args: never[]) => unknown> {\n  getPath: (...args: Parameters<TFunction>) => Path\n  hashInput: (...args: Parameters<TFunction>) => unknown\n  decorator: ((fn: TFunction) => TFunction) | undefined\n}\n\nfunction identity<T>(t: T) {\n  return t\n}\n\nexport function createMemoizer<TFunction extends (...args: never[]) => unknown>({\n  getPath,\n  hashInput,\n  decorator = identity,\n}: MemoizerOptions<TFunction>): FunctionDecorator<TFunction> {\n  const cache = new Map<string, {serializedHash: string; result: ReturnType<TFunction>}>()\n\n  function memoizer(fn: TFunction): TFunction {\n    function memoizedFn(...args: Parameters<TFunction>) {\n      const path = toString(getPath(...args))\n      const hashed = hashInput(...args)\n      const serializedHash = JSON.stringify(hashed)\n      const cached = cache.get(path)\n      if (serializedHash === cached?.serializedHash) return cached.result\n\n      const result = fn(...args) as ReturnType<TFunction>\n      cache.set(path, {serializedHash, result})\n      return result\n    }\n\n    return decorator(memoizedFn as TFunction)\n  }\n\n  return memoizer\n}\n","import {type ObjectSchemaTypeWithOptions} from '@sanity/types'\n\nimport {AUTO_COLLAPSE_DEPTH} from '../constants'\n\ninterface CollapsibleOptions {\n  collapsible: boolean | undefined\n  // Initial collapsed state\n  collapsed: boolean | undefined\n}\n\n/**\n * Takes an option object that can optionally have a 'collapsed' property\n * (`{collapsed?: boolean, collapsible?: boolean}`)\n * and returns a resolved collapsed state based on configuration and whether it's below a certain nesting level threshold\n - collapsible: boolean - whether the field can be collapsed\n - collapsed: boolean - whether the field is initially collapsed\n * NOTE: If a field is configured with ´collapsed: true´, ignore any ´collapsible´ configuration and make it collapsible no matter what, otherwise it will be left forever collapsed.\n *\n * If the nesting level is deeper than or equal to AUTO_COLLAPSE_DEPTH, the default for the field/fieldset becomes \"collapsed\"\n *\n * @param options - Whether the field or fieldset should be collapsed\n * @param level - Nesting level\n */\nexport function getCollapsedWithDefaults(\n  options: ObjectSchemaTypeWithOptions['options'] = {},\n  level: number,\n): CollapsibleOptions {\n  if (options?.collapsible === false || options?.collapsable === false) {\n    return {collapsible: false, collapsed: false}\n  }\n\n  const collapsed =\n    // eslint-disable-next-line no-nested-ternary\n    typeof options?.collapsed === 'boolean'\n      ? options.collapsed\n      : level >= AUTO_COLLAPSE_DEPTH\n        ? true\n        : undefined\n\n  const collapsible =\n    options?.collapsible === true || options?.collapsable === true || collapsed === true\n      ? true\n      : undefined\n\n  return {\n    collapsible,\n    collapsed,\n  }\n}\n","/* eslint-disable complexity */\n/* eslint-disable max-nested-callbacks */\n/* eslint-disable max-statements */\n/* eslint-disable camelcase, no-else-return */\n\nimport {\n  type ArraySchemaType,\n  type BooleanSchemaType,\n  type CurrentUser,\n  isArrayOfObjectsSchemaType,\n  isArraySchemaType,\n  isKeyedObject,\n  isObjectSchemaType,\n  type NumberSchemaType,\n  type ObjectField,\n  type ObjectSchemaType,\n  type Path,\n  type StringSchemaType,\n  type ValidationMarker,\n} from '@sanity/types'\nimport {resolveTypeName} from '@sanity/util/content'\nimport {isEqual, pathFor, startsWith, toString, trimChildPath} from '@sanity/util/paths'\nimport {castArray, isEqual as _isEqual} from 'lodash'\n\nimport {type FIXME} from '../../FIXME'\nimport {type FormNodePresence} from '../../presence'\nimport {EMPTY_ARRAY, EMPTY_OBJECT, isRecord} from '../../util'\nimport {getFieldLevel} from '../studio/inputResolver/helpers'\nimport {ALL_FIELDS_GROUP, MAX_FIELD_DEPTH} from './constants'\nimport {\n  type FieldSetMember,\n  type HiddenField,\n  type ObjectArrayFormNode,\n  type PrimitiveFormNode,\n  type StateTree,\n} from './types'\nimport {type FormFieldGroup} from './types/fieldGroup'\nimport {type FieldError} from './types/memberErrors'\nimport {\n  type ArrayOfObjectsMember,\n  type ArrayOfPrimitivesMember,\n  type FieldMember,\n  type ObjectMember,\n} from './types/members'\nimport {\n  type ArrayOfObjectsFormNode,\n  type ArrayOfPrimitivesFormNode,\n  type ObjectFormNode,\n} from './types/nodes'\nimport {createMemoizer, type FunctionDecorator} from './utils/createMemoizer'\nimport {getCollapsedWithDefaults} from './utils/getCollapsibleOptions'\nimport {getId} from './utils/getId'\nimport {getItemType, getPrimitiveItemType} from './utils/getItemType'\n\ntype PrimitiveSchemaType = BooleanSchemaType | NumberSchemaType | StringSchemaType\n\ninterface FormStateOptions<TSchemaType, T> {\n  schemaType: TSchemaType\n  path: Path\n  value?: T\n  comparisonValue?: T | null\n  changed?: boolean\n  currentUser: Omit<CurrentUser, 'role'> | null\n  hidden?: true | StateTree<boolean> | undefined\n  readOnly?: true | StateTree<boolean> | undefined\n  openPath: Path\n  focusPath: Path\n  presence: FormNodePresence[]\n  validation: ValidationMarker[]\n  fieldGroupState?: StateTree<string>\n  collapsedPaths?: StateTree<boolean>\n  collapsedFieldSets?: StateTree<boolean>\n  // nesting level\n  level: number\n  changesOpen?: boolean\n}\n\ntype PrepareFieldMember = <T>(props: {\n  field: ObjectField\n  parent: FormStateOptions<ObjectSchemaType, T> & {\n    groups: FormFieldGroup[]\n    selectedGroup?: FormFieldGroup\n  }\n  index: number\n}) => ObjectMember | HiddenField | null\n\ntype PrepareObjectInputState = <T>(\n  props: FormStateOptions<ObjectSchemaType, T>,\n  enableHiddenCheck?: boolean,\n) => ObjectFormNode | null\n\ntype PrepareArrayOfPrimitivesInputState = <T extends (boolean | string | number)[]>(\n  props: FormStateOptions<ArraySchemaType, T>,\n) => ArrayOfPrimitivesFormNode | null\n\ntype PrepareArrayOfObjectsInputState = <T extends {_key: string}[]>(\n  props: FormStateOptions<ArraySchemaType, T>,\n) => ArrayOfObjectsFormNode | null\n\ntype PrepareArrayOfObjectsMember = (props: {\n  arrayItem: {_key: string}\n  parent: FormStateOptions<ArraySchemaType, unknown>\n  index: number\n}) => ArrayOfObjectsMember\n\ntype PrepareArrayOfPrimitivesMember = (props: {\n  arrayItem: unknown\n  parent: FormStateOptions<ArraySchemaType, unknown>\n  index: number\n}) => ArrayOfPrimitivesMember\n\ntype PreparePrimitiveInputState = <TSchemaType extends PrimitiveSchemaType>(\n  props: FormStateOptions<TSchemaType, unknown>,\n) => PrimitiveFormNode\n\nfunction isFieldEnabledByGroupFilter(\n  // the groups config for the \"enclosing object\" type\n  groupsConfig: FormFieldGroup[],\n  fieldGroup: string | string[] | undefined,\n  selectedGroup: FormFieldGroup | undefined,\n) {\n  if (!selectedGroup) {\n    return false\n  }\n\n  if (selectedGroup.name === ALL_FIELDS_GROUP.name) {\n    return true\n  }\n\n  // \"all fields\" is not the selected group and the field has no group config, so it should be hidden\n  if (fieldGroup === undefined) {\n    return false\n  }\n\n  // if there's no group config for the object type, all fields are visible\n  if (groupsConfig.length === 0 && selectedGroup.name === ALL_FIELDS_GROUP.name) {\n    return true\n  }\n\n  return castArray(fieldGroup).includes(selectedGroup.name)\n}\n\nfunction isAcceptedObjectValue(value: any): value is Record<string, unknown> | undefined {\n  return typeof value === 'undefined' || isRecord(value)\n}\n\nfunction isValidArrayOfObjectsValue(value: any): value is unknown[] | undefined {\n  return typeof value === 'undefined' || Array.isArray(value)\n}\n\nfunction isValidArrayOfPrimitivesValue(\n  value: any,\n): value is (boolean | number | string)[] | undefined {\n  return typeof value === 'undefined' || Array.isArray(value)\n}\n\nfunction everyItemIsObject(value: unknown[]): value is object[] {\n  return value.length === 0 || value.every((item) => isRecord(item))\n}\n\nfunction findDuplicateKeyEntries(array: {_key: string}[]) {\n  const seenKeys = new Set<string>()\n  return array.reduce((acc: [index: number, key: string][], item, index) => {\n    if (seenKeys.has(item._key)) {\n      acc.push([index, item._key])\n    }\n    seenKeys.add(item._key)\n    return acc\n  }, [])\n}\n\nfunction hasKey<T extends object>(value: T): value is T & {_key: string} {\n  return '_key' in value\n}\n\nfunction everyItemHasKey<T extends object>(array: T[]): array is (T & {_key: string})[] {\n  return array?.every((item) => isRecord(item) && hasKey(item))\n}\n\nfunction isChangedValue(value: any, comparisonValue: any) {\n  // changes panel is not being able to identify changes in array of objects\n  // (especially when it comes to unpublished changes)\n  // the main issue it fixes is in instances where the array removes a last item but instead of turning\n  // \"undefined\" it returns an empty array (and so the change indicator remains active when it shouldn't)\n  if (\n    (Array.isArray(value) && typeof comparisonValue === 'undefined') ||\n    (Array.isArray(comparisonValue) && typeof value === 'undefined')\n  ) {\n    return false\n  }\n\n  if (value && !comparisonValue) {\n    return true\n  }\n  return !_isEqual(value, comparisonValue)\n}\n\nexport interface CreatePrepareFormStateOptions {\n  decorators?: {\n    prepareFieldMember?: FunctionDecorator<PrepareFieldMember>\n    prepareObjectInputState?: FunctionDecorator<PrepareObjectInputState>\n    prepareArrayOfPrimitivesInputState?: FunctionDecorator<PrepareArrayOfPrimitivesInputState>\n    prepareArrayOfObjectsInputState?: FunctionDecorator<PrepareArrayOfObjectsInputState>\n    prepareArrayOfObjectsMember?: FunctionDecorator<PrepareArrayOfObjectsMember>\n    prepareArrayOfPrimitivesMember?: FunctionDecorator<PrepareArrayOfPrimitivesMember>\n    preparePrimitiveInputState?: FunctionDecorator<PreparePrimitiveInputState>\n  }\n}\n\nexport interface RootFormStateOptions {\n  schemaType: ObjectSchemaType\n  documentValue: unknown\n  comparisonValue: unknown\n  currentUser: Omit<CurrentUser, 'role'> | null\n  hidden: boolean | StateTree<boolean> | undefined\n  readOnly: boolean | StateTree<boolean> | undefined\n  openPath: Path\n  focusPath: Path\n  presence: FormNodePresence[]\n  validation: ValidationMarker[]\n  fieldGroupState: StateTree<string> | undefined\n  collapsedPaths: StateTree<boolean> | undefined\n  collapsedFieldSets: StateTree<boolean> | undefined\n  changesOpen?: boolean\n}\n\nexport interface PrepareFormState {\n  (options: RootFormStateOptions): ObjectFormNode | null\n\n  /** @internal */\n  _prepareFieldMember: PrepareFieldMember\n  /** @internal */\n  _prepareObjectInputState: PrepareObjectInputState\n  /** @internal */\n  _prepareArrayOfPrimitivesInputState: PrepareArrayOfPrimitivesInputState\n  /** @internal */\n  _prepareArrayOfObjectsInputState: PrepareArrayOfObjectsInputState\n  /** @internal */\n  _prepareArrayOfObjectsMember: PrepareArrayOfObjectsMember\n  /** @internal */\n  _prepareArrayOfPrimitivesMember: PrepareArrayOfPrimitivesMember\n  /** @internal */\n  _preparePrimitiveInputState: PreparePrimitiveInputState\n}\n\nexport function createPrepareFormState({\n  decorators = {},\n}: CreatePrepareFormStateOptions = {}): PrepareFormState {\n  const memoizePrepareFieldMember = createMemoizer<PrepareFieldMember>({\n    decorator: decorators.prepareFieldMember,\n    getPath: ({parent, field}) => [...parent.path, field.name],\n    hashInput: ({parent, field}) => {\n      const path = [...parent.path, field.name]\n      return {\n        changesOpen: parent.changesOpen,\n        presence: parent.presence.filter((p) => startsWith(path, p.path)),\n        validation: parent.validation.filter((v) => startsWith(path, v.path)),\n        focusPath: startsWith(path, parent.focusPath) ? parent.focusPath : [],\n        openPath: startsWith(path, parent.openPath) ? parent.openPath : [],\n        value: getId((parent.value as any)?.[field.name]),\n        comparisonValue: getId((parent.comparisonValue as any)?.[field.name]),\n        collapsedFieldSets: getId(parent.collapsedFieldSets?.children?.[field.name]),\n        collapsedPaths: getId(parent.collapsedPaths?.children?.[field.name]),\n        currentUser: getId(parent.currentUser),\n        fieldGroupState: getId(parent.fieldGroupState),\n        hidden:\n          parent.hidden === true ||\n          parent.hidden?.value ||\n          getId(parent.hidden?.children?.[field.name]),\n        readOnly:\n          parent.readOnly === true ||\n          parent.readOnly?.value ||\n          getId(parent.readOnly?.children?.[field.name]),\n        schemaType: getId(parent.schemaType),\n      }\n    },\n  })\n\n  const memoizePrepareObjectInputState = createMemoizer<PrepareObjectInputState>({\n    decorator: decorators.prepareObjectInputState,\n    getPath: ({path}) => path,\n    hashInput: (state) => ({\n      changesOpen: state.changesOpen,\n      presence: state.presence.filter((p) => startsWith(state.path, p.path)),\n      validation: state.validation.filter((v) => startsWith(state.path, v.path)),\n      focusPath: startsWith(state.path, state.focusPath) ? state.focusPath : [],\n      openPath: startsWith(state.path, state.openPath) ? state.openPath : [],\n      value: getId(state.value),\n      comparisonValue: getId(state.comparisonValue),\n      collapsedFieldSets: getId(state.collapsedFieldSets),\n      collapsedPaths: state.collapsedPaths,\n      currentUser: getId(state.currentUser),\n      fieldGroupState: getId(state.fieldGroupState),\n      hidden: state.hidden === true || state.hidden?.value || getId(state.hidden),\n      readOnly: state.readOnly === true || state.readOnly?.value || getId(state.readOnly),\n      schemaType: getId(state.schemaType),\n    }),\n  })\n\n  const memoizePrepareArrayOfPrimitivesInputState =\n    createMemoizer<PrepareArrayOfPrimitivesInputState>({\n      decorator: decorators.prepareArrayOfPrimitivesInputState,\n      getPath: ({path}) => path,\n      hashInput: (state) => ({\n        changesOpen: state.changesOpen,\n        presence: state.presence.filter((p) => startsWith(state.path, p.path)),\n        validation: state.validation.filter((v) => startsWith(state.path, v.path)),\n        focusPath: startsWith(state.path, state.focusPath) ? state.focusPath : [],\n        openPath: startsWith(state.path, state.openPath) ? state.openPath : [],\n        value: getId(state.value),\n        comparisonValue: getId(state.comparisonValue),\n        collapsedFieldSets: getId(state.collapsedFieldSets),\n        collapsedPaths: state.collapsedPaths,\n        currentUser: getId(state.currentUser),\n        fieldGroupState: getId(state.fieldGroupState),\n        hidden: state.hidden === true || state.hidden?.value || getId(state.hidden),\n        readOnly: state.readOnly === true || state.readOnly?.value || getId(state.readOnly),\n        schemaType: getId(state.schemaType),\n      }),\n    })\n\n  const memoizePrepareArrayOfObjectsInputState = createMemoizer<PrepareArrayOfObjectsInputState>({\n    decorator: decorators.prepareArrayOfObjectsInputState,\n    getPath: ({path}) => path,\n    hashInput: (state) => ({\n      changesOpen: state.changesOpen,\n      presence: state.presence.filter((p) => startsWith(state.path, p.path)),\n      validation: state.validation.filter((v) => startsWith(state.path, v.path)),\n      focusPath: startsWith(state.path, state.focusPath) ? state.focusPath : [],\n      openPath: startsWith(state.path, state.openPath) ? state.openPath : [],\n      value: getId(state.value),\n      comparisonValue: getId(state.comparisonValue),\n      collapsedFieldSets: getId(state.collapsedFieldSets),\n      collapsedPaths: state.collapsedPaths,\n      currentUser: getId(state.currentUser),\n      fieldGroupState: getId(state.fieldGroupState),\n      hidden: state.hidden === true || state.hidden?.value || getId(state.hidden),\n      readOnly: state.readOnly === true || state.readOnly?.value || getId(state.readOnly),\n      schemaType: getId(state.schemaType),\n    }),\n  })\n\n  const memoizePrepareArrayOfObjectsMember = createMemoizer<PrepareArrayOfObjectsMember>({\n    decorator: decorators.prepareArrayOfObjectsMember,\n    getPath: ({parent, arrayItem}) => [...parent.path, {_key: arrayItem._key}],\n    hashInput: ({parent, arrayItem}) => {\n      const comparisonValue = Array.isArray(parent.comparisonValue)\n        ? parent.comparisonValue.find((item) => isKeyedObject(item) && item._key === arrayItem._key)\n        : undefined\n\n      const key = arrayItem._key\n      const path: Path = [...parent.path, {_key: key}]\n\n      return {\n        changesOpen: parent.changesOpen,\n        presence: parent.presence.filter((p) => startsWith(path, p.path)),\n        validation: parent.validation.filter((v) => startsWith(path, v.path)),\n        focusPath: startsWith(path, parent.focusPath) ? parent.focusPath : [],\n        openPath: startsWith(path, parent.openPath) ? parent.openPath : [],\n        value: getId(arrayItem),\n        comparisonValue: getId(comparisonValue),\n        collapsedFieldSets: getId(parent.collapsedFieldSets?.children?.[key]),\n        collapsedPaths: getId(parent.collapsedPaths?.children?.[key]),\n        currentUser: getId(parent.currentUser),\n        fieldGroupState: getId(parent.fieldGroupState?.children?.[key]),\n        hidden:\n          parent.hidden === true || parent.hidden?.value || getId(parent.hidden?.children?.[key]),\n        readOnly:\n          parent.readOnly === true ||\n          parent.readOnly?.value ||\n          getId(parent.readOnly?.children?.[key]),\n        schemaType: getId(parent.schemaType),\n      }\n    },\n  })\n\n  const memoizePrepareArrayOfPrimitivesMember = createMemoizer<PrepareArrayOfPrimitivesMember>({\n    decorator: decorators.prepareArrayOfPrimitivesMember,\n    getPath: ({parent, index}) => [...parent.path, index],\n    hashInput: ({parent, index, arrayItem}) => {\n      const comparisonValue = Array.isArray(parent.comparisonValue)\n        ? parent.comparisonValue[index]\n        : undefined\n\n      const path: Path = [...parent.path, index]\n\n      return {\n        changesOpen: parent.changesOpen,\n        presence: parent.presence.filter((p) => startsWith(path, p.path)),\n        validation: parent.validation.filter((v) => startsWith(path, v.path)),\n        focusPath: startsWith(path, parent.focusPath) ? parent.focusPath : [],\n        openPath: startsWith(path, parent.openPath) ? parent.openPath : [],\n        collapsedFieldSets: getId(parent.collapsedFieldSets?.children?.[index]),\n        collapsedPaths: getId(parent.collapsedPaths?.children?.[index]),\n        currentUser: getId(parent.currentUser),\n        fieldGroupState: getId(parent.fieldGroupState?.children?.[index]),\n        hidden:\n          parent.hidden === true || parent.hidden?.value || getId(parent.hidden?.children?.[index]),\n        readOnly:\n          parent.readOnly === true ||\n          parent.readOnly?.value ||\n          getId(parent.readOnly?.children?.[index]),\n        schemaType: getId(parent.schemaType),\n        value: `${arrayItem}`,\n        comparisonValue: `${comparisonValue}`,\n      }\n    },\n  })\n\n  const memoizePreparePrimitiveInputState = createMemoizer<PreparePrimitiveInputState>({\n    decorator: decorators.preparePrimitiveInputState,\n    getPath: ({path}) => path,\n    hashInput: (state) => ({\n      changesOpen: state.changesOpen,\n      presence: state.presence.filter((p) => startsWith(state.path, p.path)),\n      validation: state.validation.filter((v) => startsWith(state.path, v.path)),\n      focusPath: startsWith(state.path, state.focusPath) ? state.focusPath : [],\n      openPath: startsWith(state.path, state.openPath) ? state.openPath : [],\n      value: getId(state.value),\n      comparisonValue: getId(state.comparisonValue),\n      collapsedFieldSets: getId(state.collapsedFieldSets),\n      collapsedPaths: state.collapsedPaths,\n      currentUser: getId(state.currentUser),\n      fieldGroupState: getId(state.fieldGroupState),\n      hidden: state.hidden === true || state.hidden?.value || getId(state.hidden),\n      readOnly: state.readOnly === true || state.readOnly?.value || getId(state.readOnly),\n      schemaType: getId(state.schemaType),\n    }),\n  })\n\n  /*\n   * Takes a field in context of a parent object and returns prepared props for it\n   */\n  const prepareFieldMember = memoizePrepareFieldMember(function _prepareFieldMember(props) {\n    const {field, index, parent} = props\n    const fieldPath = pathFor([...parent.path, field.name])\n    const fieldLevel = getFieldLevel(field.type, parent.level + 1)\n\n    const parentValue = parent.value\n    const parentComparisonValue = parent.comparisonValue\n    if (!isAcceptedObjectValue(parentValue)) {\n      // Note: we validate each field, before passing it recursively to this function so getting this error means that the\n      // ´prepareFormState´ function itself has been called with a non-object value\n      throw new Error('Unexpected non-object value')\n    }\n\n    const normalizedFieldGroupNames = field.group ? castArray(field.group) : []\n    const inSelectedGroup = isFieldEnabledByGroupFilter(\n      parent.groups,\n      field.group,\n      parent.selectedGroup,\n    )\n\n    if (isObjectSchemaType(field.type)) {\n      const fieldValue = parentValue?.[field.name]\n      const fieldComparisonValue = isRecord(parentComparisonValue)\n        ? parentComparisonValue?.[field.name]\n        : undefined\n\n      if (!isAcceptedObjectValue(fieldValue)) {\n        return {\n          kind: 'error',\n          key: field.name,\n          fieldName: field.name,\n          error: {\n            type: 'INCOMPATIBLE_TYPE',\n            expectedSchemaType: field.type,\n            resolvedValueType: resolveTypeName(fieldValue),\n            value: fieldValue,\n          },\n        }\n      }\n\n      const hidden =\n        parent.hidden === true ||\n        parent?.hidden?.value ||\n        parent.hidden?.children?.[field.name]?.value\n\n      if (hidden) {\n        return {\n          kind: 'hidden',\n          key: `field-${field.name}`,\n          name: field.name,\n          index: index,\n        }\n      }\n\n      // todo: consider requiring a _type annotation for object values on fields as well\n      // if (resolvedValueType !== field.type.name) {\n      //   return {\n      //     kind: 'error',\n      //     key: field.name,\n      //     error: {\n      //       type: 'TYPE_ANNOTATION_MISMATCH',\n      //       expectedSchemaType: field.type,\n      //       resolvedValueType,\n      //     },\n      //   }\n      // }\n\n      const fieldGroupState = parent.fieldGroupState?.children?.[field.name]\n      const scopedCollapsedPaths = parent.collapsedPaths?.children?.[field.name]\n      const scopedCollapsedFieldsets = parent.collapsedFieldSets?.children?.[field.name]\n      const scopedHidden =\n        parent.hidden === true || parent.hidden?.value || parent.hidden?.children?.[field.name]\n      const scopedReadOnly =\n        parent.readOnly === true ||\n        parent.readOnly?.value ||\n        parent.readOnly?.children?.[field.name]\n\n      const inputState = prepareObjectInputState({\n        schemaType: field.type,\n        currentUser: parent.currentUser,\n        value: fieldValue,\n        changed: isChangedValue(fieldValue, fieldComparisonValue),\n        comparisonValue: fieldComparisonValue,\n        presence: parent.presence,\n        validation: parent.validation,\n        fieldGroupState,\n        path: fieldPath,\n        level: fieldLevel,\n        focusPath: parent.focusPath,\n        openPath: parent.openPath,\n        collapsedPaths: scopedCollapsedPaths,\n        collapsedFieldSets: scopedCollapsedFieldsets,\n        hidden: scopedHidden,\n        readOnly: scopedReadOnly,\n        changesOpen: parent.changesOpen,\n      })\n\n      if (inputState === null) {\n        // if inputState is null is either because we reached max field depth or if it has no visible members\n        return null\n      }\n\n      const defaultCollapsedState = getCollapsedWithDefaults(field.type.options, fieldLevel)\n      const collapsed = scopedCollapsedPaths\n        ? scopedCollapsedPaths.value\n        : defaultCollapsedState.collapsed\n\n      return {\n        kind: 'field',\n        key: `field-${field.name}`,\n        name: field.name,\n        index: index,\n\n        inSelectedGroup,\n        groups: normalizedFieldGroupNames,\n\n        open: startsWith(fieldPath, parent.openPath),\n        field: inputState,\n        collapsed,\n        collapsible: defaultCollapsedState.collapsible,\n      }\n    } else if (isArraySchemaType(field.type)) {\n      const fieldValue = parentValue?.[field.name] as unknown[] | undefined\n      const fieldComparisonValue = isRecord(parentComparisonValue)\n        ? parentComparisonValue?.[field.name]\n        : undefined\n      if (isArrayOfObjectsSchemaType(field.type)) {\n        const hasValue = typeof fieldValue !== 'undefined'\n        if (hasValue && !isValidArrayOfObjectsValue(fieldValue)) {\n          const resolvedValueType = resolveTypeName(fieldValue)\n\n          return {\n            kind: 'error',\n            key: field.name,\n            fieldName: field.name,\n            error: {\n              type: 'INCOMPATIBLE_TYPE',\n              expectedSchemaType: field.type,\n              resolvedValueType,\n              value: fieldValue,\n            },\n          }\n        }\n\n        if (hasValue && !everyItemIsObject(fieldValue)) {\n          return {\n            kind: 'error',\n            key: field.name,\n            fieldName: field.name,\n            error: {\n              type: 'MIXED_ARRAY',\n              schemaType: field.type,\n              value: fieldValue,\n            },\n          }\n        }\n\n        if (hasValue && !everyItemHasKey(fieldValue)) {\n          return {\n            kind: 'error',\n            key: field.name,\n            fieldName: field.name,\n            error: {\n              type: 'MISSING_KEYS',\n              value: fieldValue,\n              schemaType: field.type,\n            },\n          }\n        }\n\n        const duplicateKeyEntries = hasValue ? findDuplicateKeyEntries(fieldValue) : []\n        if (duplicateKeyEntries.length > 0) {\n          return {\n            kind: 'error',\n            key: field.name,\n            fieldName: field.name,\n            error: {\n              type: 'DUPLICATE_KEYS',\n              duplicates: duplicateKeyEntries,\n              schemaType: field.type,\n            },\n          }\n        }\n\n        const fieldGroupState = parent.fieldGroupState?.children?.[field.name]\n        const scopedCollapsedPaths = parent.collapsedPaths?.children?.[field.name]\n        const scopedCollapsedFieldSets = parent.collapsedFieldSets?.children?.[field.name]\n        const scopedHidden =\n          parent.hidden === true || parent.hidden?.value || parent.hidden?.children?.[field.name]\n        const scopedReadOnly =\n          parent.readOnly === true ||\n          parent.readOnly?.value ||\n          parent.readOnly?.children?.[field.name]\n\n        const fieldState = prepareArrayOfObjectsInputState({\n          schemaType: field.type,\n          currentUser: parent.currentUser,\n          value: fieldValue,\n          changed: isChangedValue(fieldValue, fieldComparisonValue),\n          comparisonValue: fieldComparisonValue as FIXME,\n          fieldGroupState,\n          focusPath: parent.focusPath,\n          openPath: parent.openPath,\n          presence: parent.presence,\n          validation: parent.validation,\n          collapsedPaths: scopedCollapsedPaths,\n          collapsedFieldSets: scopedCollapsedFieldSets,\n          level: fieldLevel,\n          path: fieldPath,\n          readOnly: scopedReadOnly,\n          hidden: scopedHidden,\n          changesOpen: parent.changesOpen,\n        })\n\n        if (fieldState === null) {\n          return null\n        }\n\n        return {\n          kind: 'field',\n          key: `field-${field.name}`,\n          name: field.name,\n          index: index,\n\n          open: startsWith(fieldPath, parent.openPath),\n\n          inSelectedGroup,\n          groups: normalizedFieldGroupNames,\n\n          collapsible: false,\n          collapsed: false,\n          // note: this is what we actually end up passing down as to the next input component\n          field: fieldState,\n        }\n      } else {\n        // array of primitives\n        if (!isValidArrayOfPrimitivesValue(fieldValue)) {\n          const resolvedValueType = resolveTypeName(fieldValue)\n\n          return {\n            kind: 'error',\n            key: field.name,\n            fieldName: field.name,\n            error: {\n              type: 'INCOMPATIBLE_TYPE',\n              expectedSchemaType: field.type,\n              resolvedValueType,\n              value: fieldValue,\n            },\n          }\n        }\n\n        const fieldGroupState = parent.fieldGroupState?.children?.[field.name]\n        const scopedCollapsedPaths = parent.collapsedPaths?.children?.[field.name]\n        const scopedCollapsedFieldSets = parent.collapsedFieldSets?.children?.[field.name]\n        const scopedHidden =\n          parent.hidden === true || parent.hidden?.value || parent.hidden?.children?.[field.name]\n        const scopedReadOnly =\n          parent.readOnly === true ||\n          parent.readOnly?.value ||\n          parent.readOnly?.children?.[field.name]\n\n        const fieldState = prepareArrayOfPrimitivesInputState({\n          changed: isChangedValue(fieldValue, fieldComparisonValue),\n          comparisonValue: fieldComparisonValue as FIXME,\n          schemaType: field.type,\n          currentUser: parent.currentUser,\n          value: fieldValue,\n          fieldGroupState,\n          focusPath: parent.focusPath,\n          openPath: parent.openPath,\n          presence: parent.presence,\n          validation: parent.validation,\n          collapsedPaths: scopedCollapsedPaths,\n          collapsedFieldSets: scopedCollapsedFieldSets,\n          level: fieldLevel,\n          path: fieldPath,\n          readOnly: scopedReadOnly,\n          hidden: scopedHidden,\n          changesOpen: parent.changesOpen,\n        })\n\n        if (fieldState === null) {\n          return null\n        }\n\n        return {\n          kind: 'field',\n          key: `field-${field.name}`,\n          name: field.name,\n          index: index,\n\n          inSelectedGroup,\n          groups: normalizedFieldGroupNames,\n\n          open: startsWith(fieldPath, parent.openPath),\n\n          // todo: consider support for collapsible arrays\n          collapsible: false,\n          collapsed: false,\n          // note: this is what we actually end up passing down as to the next input component\n          field: fieldState,\n        }\n      }\n    } else {\n      // primitive fields\n\n      const fieldValue = parentValue?.[field.name] as undefined | boolean | string | number\n      const fieldComparisonValue = isRecord(parentComparisonValue)\n        ? parentComparisonValue?.[field.name]\n        : undefined\n\n      // note: we *only* want to call the conditional props here, as it's handled by the prepare<Object|Array>InputProps otherwise\n      const hidden =\n        parent.hidden === true ||\n        parent.hidden?.value ||\n        parent.hidden?.children?.[field.name]?.value\n\n      if (hidden) {\n        return null\n      }\n\n      const scopedHidden =\n        parent.hidden === true || parent.hidden?.value || parent.hidden?.children?.[field.name]\n      const scopedReadOnly =\n        parent.readOnly === true ||\n        parent.readOnly?.value ||\n        parent.readOnly?.children?.[field.name]\n\n      const fieldState = preparePrimitiveInputState({\n        ...parent,\n        comparisonValue: fieldComparisonValue,\n        value: fieldValue as boolean | string | number | undefined,\n        schemaType: field.type as PrimitiveSchemaType,\n        path: fieldPath,\n        readOnly: scopedReadOnly,\n        hidden: scopedHidden,\n      })\n\n      return {\n        kind: 'field',\n        key: `field-${field.name}`,\n        name: field.name,\n        index: index,\n        open: startsWith(fieldPath, parent.openPath),\n\n        inSelectedGroup,\n        groups: normalizedFieldGroupNames,\n\n        // todo: consider support for collapsible primitive fields\n        collapsible: false,\n        collapsed: false,\n        field: fieldState,\n      }\n    }\n  })\n\n  const prepareObjectInputState = memoizePrepareObjectInputState(function _prepareObjectInputState(\n    props,\n    enableHiddenCheck = true,\n  ) {\n    if (props.level === MAX_FIELD_DEPTH) {\n      return null\n    }\n\n    const readOnly = props.readOnly === true || props.readOnly?.value\n\n    const schemaTypeGroupConfig = props.schemaType.groups || []\n    const defaultGroupName = (schemaTypeGroupConfig.find((g) => g.default) || ALL_FIELDS_GROUP)\n      ?.name\n\n    const groups = [ALL_FIELDS_GROUP, ...schemaTypeGroupConfig].flatMap(\n      (group): FormFieldGroup[] => {\n        const groupHidden =\n          props.hidden === true ||\n          props.hidden?.value ||\n          props.hidden?.children?.[`group:${group.name}`]?.value\n        const isSelected = group.name === (props.fieldGroupState?.value || defaultGroupName)\n\n        // Set the \"all-fields\" group as selected when review changes is open to enable review of all\n        // fields and changes together. When review changes is closed - switch back to the selected tab.\n        const selected = props.changesOpen ? group.name === ALL_FIELDS_GROUP.name : isSelected\n        // Also disable non-selected groups when review changes is open\n        const disabled = props.changesOpen ? !selected : false\n\n        return groupHidden\n          ? []\n          : [\n              {\n                disabled,\n                icon: group?.icon,\n                name: group.name,\n                selected,\n                title: group.title,\n                i18n: group.i18n,\n              },\n            ]\n      },\n    )\n\n    const selectedGroup = groups.find((group) => group.selected)\n\n    // note: this is needed because not all object types gets a ´fieldsets´ property during schema parsing.\n    // ideally members should be normalized as part of the schema parsing and not here\n    const normalizedSchemaMembers: typeof props.schemaType.fieldsets = props.schemaType.fieldsets\n      ? props.schemaType.fieldsets\n      : props.schemaType.fields.map((field) => ({single: true, field}))\n\n    // create a members array for the object\n    const members = normalizedSchemaMembers.flatMap(\n      (fieldSet, index): (ObjectMember | HiddenField)[] => {\n        // \"single\" means not part of a fieldset\n        if (fieldSet.single) {\n          const field = fieldSet.field\n\n          const fieldMember = prepareFieldMember({\n            field: field,\n            parent: {...props, groups, selectedGroup},\n            index,\n          })\n\n          return fieldMember ? [fieldMember] : []\n        }\n\n        // it's an actual fieldset\n        const fieldsetHidden =\n          props.hidden === true ||\n          props.hidden?.value ||\n          props.hidden?.children?.[`fieldset:${fieldSet.name}`]?.value\n\n        const fieldsetMembers = fieldSet.fields.flatMap(\n          (field): (FieldMember | FieldError | HiddenField)[] => {\n            if (fieldsetHidden) {\n              return [\n                {\n                  kind: 'hidden',\n                  key: `field-${field.name}`,\n                  name: field.name,\n                  index: index,\n                },\n              ]\n            }\n            const fieldMember = prepareFieldMember({\n              field: field,\n              parent: {...props, groups, selectedGroup},\n              index,\n            }) as FieldMember | FieldError | HiddenField\n\n            return fieldMember ? [fieldMember] : []\n          },\n        )\n\n        const defaultCollapsedState = getCollapsedWithDefaults(fieldSet.options, props.level)\n\n        const collapsed =\n          (props.collapsedFieldSets?.children || {})[fieldSet.name]?.value ??\n          defaultCollapsedState.collapsed\n\n        return [\n          {\n            kind: 'fieldSet',\n            key: `fieldset-${fieldSet.name}`,\n            _inSelectedGroup: isFieldEnabledByGroupFilter(groups, fieldSet.group, selectedGroup),\n            groups: fieldSet.group ? castArray(fieldSet.group) : [],\n            fieldSet: {\n              path: pathFor(props.path.concat(fieldSet.name)),\n              name: fieldSet.name,\n              title: fieldSet.title,\n              description: fieldSet.description,\n              hidden: false,\n              level: props.level + 1,\n              members: fieldsetMembers.filter(\n                (member): member is FieldMember => member.kind !== 'hidden',\n              ),\n              collapsible: defaultCollapsedState?.collapsible,\n              collapsed,\n              columns: fieldSet?.options?.columns,\n            },\n          },\n        ]\n      },\n    )\n\n    const hasFieldGroups = schemaTypeGroupConfig.length > 0\n\n    const filteredPresence = props.presence.filter((item) => isEqual(item.path, props.path))\n    const presence = filteredPresence.length ? filteredPresence : EMPTY_ARRAY\n\n    const validation = props.validation\n      .filter((item) => isEqual(item.path, props.path))\n      .map((v) => ({level: v.level, message: v.message, path: v.path}))\n\n    const visibleMembers = members.filter(\n      (member): member is ObjectMember => member.kind !== 'hidden',\n    )\n\n    // Return null here only when enableHiddenCheck, or we end up with array members that have 'item: null' when they\n    // really should not be. One example is when a block object inside the PT-input have a type with one single hidden field.\n    // Then it should still be possible to see the member item, even though all of it's fields are null.\n    if (visibleMembers.length === 0 && enableHiddenCheck) {\n      return null\n    }\n\n    const visibleGroups = hasFieldGroups\n      ? groups.flatMap((group) => {\n          // The \"all fields\" group is always visible\n          if (group.name === ALL_FIELDS_GROUP.name) {\n            return group\n          }\n          const hasVisibleMembers = visibleMembers.some((member) => {\n            if (member.kind === 'error') {\n              return false\n            }\n            if (member.kind === 'field') {\n              return member.groups.includes(group.name)\n            }\n\n            return (\n              member.groups.includes(group.name) ||\n              member.fieldSet.members.some(\n                (fieldsetMember) =>\n                  fieldsetMember.kind !== 'error' && fieldsetMember.groups.includes(group.name),\n              )\n            )\n          })\n          return hasVisibleMembers ? group : []\n        })\n      : []\n\n    const filtereredMembers = visibleMembers.flatMap(\n      (member): (FieldError | FieldMember | FieldSetMember)[] => {\n        if (member.kind === 'error') {\n          return [member]\n        }\n        if (member.kind === 'field') {\n          return member.inSelectedGroup ? [member] : []\n        }\n\n        const filteredFieldsetMembers: ObjectMember[] = member.fieldSet.members.filter(\n          (fieldsetMember) => fieldsetMember.kind !== 'field' || fieldsetMember.inSelectedGroup,\n        )\n        return filteredFieldsetMembers.length > 0\n          ? [\n              {\n                ...member,\n                fieldSet: {...member.fieldSet, members: filteredFieldsetMembers},\n              } as FieldSetMember,\n            ]\n          : []\n      },\n    )\n\n    const node = {\n      value: props.value as Record<string, unknown> | undefined,\n      changed: isChangedValue(props.value, props.comparisonValue),\n      schemaType: props.schemaType,\n      readOnly,\n      path: props.path,\n      id: toString(props.path),\n      level: props.level,\n      focused: isEqual(props.path, props.focusPath),\n      focusPath: trimChildPath(props.path, props.focusPath),\n      presence,\n      validation,\n      // this is currently needed by getExpandOperations which needs to know about hidden members\n      // (e.g. members not matching current group filter) in order to determine what to expand\n      members: filtereredMembers,\n      groups: visibleGroups,\n    }\n    Object.defineProperty(node, '_allMembers', {\n      value: members,\n      enumerable: false,\n    })\n    return node\n  })\n\n  const prepareArrayOfPrimitivesInputState = memoizePrepareArrayOfPrimitivesInputState(\n    function _prepareArrayOfPrimitivesInputState(props) {\n      if (props.level === MAX_FIELD_DEPTH) {\n        return null\n      }\n\n      if (props.hidden === true || props.hidden?.value) {\n        return null\n      }\n\n      // Todo: improve error handling at the parent level so that the value here is either undefined or an array\n      const items = Array.isArray(props.value) ? props.value : []\n\n      const filteredPresence = props.presence.filter((item) => isEqual(item.path, props.path))\n      const presence = filteredPresence.length ? filteredPresence : EMPTY_ARRAY\n      const validation = props.validation\n        .filter((item) => isEqual(item.path, props.path))\n        .map((v) => ({level: v.level, message: v.message, path: v.path}))\n      const members = items.flatMap((item, index) =>\n        prepareArrayOfPrimitivesMember({arrayItem: item, parent: props, index}),\n      )\n      return {\n        // checks for changes not only on the array itself, but also on any of its items\n        changed: props.changed || members.some((m) => m.kind === 'item' && m.item.changed),\n        value: props.value,\n        readOnly: props.readOnly === true || props.readOnly?.value,\n        schemaType: props.schemaType,\n        focused: isEqual(props.path, props.focusPath),\n        focusPath: trimChildPath(props.path, props.focusPath),\n        path: props.path,\n        id: toString(props.path),\n        level: props.level,\n        validation,\n        presence,\n        members,\n      }\n    },\n  )\n\n  const prepareArrayOfObjectsInputState = memoizePrepareArrayOfObjectsInputState(\n    function _prepareArrayOfObjectsInputState(props) {\n      if (props.level === MAX_FIELD_DEPTH) {\n        return null\n      }\n\n      if (props.hidden === true || props.hidden?.value) {\n        return null\n      }\n\n      // Todo: improve error handling at the parent level so that the value here is either undefined or an array\n      const items = Array.isArray(props.value) ? props.value : []\n\n      const filteredPresence = props.presence.filter((item) => isEqual(item.path, props.path))\n      const presence = filteredPresence.length ? filteredPresence : EMPTY_ARRAY\n      const validation = props.validation\n        .filter((item) => isEqual(item.path, props.path))\n        .map((v) => ({level: v.level, message: v.message, path: v.path}))\n\n      const members = items.flatMap((item, index) =>\n        prepareArrayOfObjectsMember({\n          arrayItem: item,\n          parent: props,\n          index,\n        }),\n      )\n\n      return {\n        // checks for changes not only on the array itself, but also on any of its items\n        changed: props.changed || members.some((m) => m.kind === 'item' && m.item.changed),\n        value: props.value,\n        readOnly: props.readOnly === true || props.readOnly?.value,\n        schemaType: props.schemaType,\n        focused: isEqual(props.path, props.focusPath),\n        focusPath: trimChildPath(props.path, props.focusPath),\n        path: props.path,\n        id: toString(props.path),\n        level: props.level,\n        validation,\n        presence,\n        members,\n      }\n    },\n  )\n\n  /*\n   * Takes a field in context of a parent object and returns prepared props for it\n   */\n  const prepareArrayOfObjectsMember = memoizePrepareArrayOfObjectsMember(\n    function _prepareArrayOfObjectsMember(props) {\n      const {arrayItem, parent, index} = props\n\n      const itemType = getItemType(parent.schemaType, arrayItem) as ObjectSchemaType\n\n      const key = arrayItem._key\n\n      if (!itemType) {\n        const itemTypeName = resolveTypeName(arrayItem)\n        return {\n          kind: 'error',\n          key,\n          index,\n          error: {\n            type: 'INVALID_ITEM_TYPE',\n            resolvedValueType: itemTypeName,\n            value: arrayItem,\n            validTypes: parent.schemaType.of,\n          },\n        }\n      }\n\n      const itemPath = pathFor([...parent.path, {_key: key}])\n      const itemLevel = parent.level + 1\n\n      const fieldGroupState = parent.fieldGroupState?.children?.[key]\n      const scopedCollapsedPaths = parent.collapsedPaths?.children?.[key]\n      const scopedCollapsedFieldsets = parent.collapsedFieldSets?.children?.[key]\n\n      const scopedHidden =\n        parent.hidden === true || parent.hidden?.value || parent.hidden?.children?.[key]\n      const scopedReadOnly =\n        parent.readOnly === true || parent.readOnly?.value || parent.readOnly?.children?.[key]\n\n      const comparisonValue =\n        (Array.isArray(parent.comparisonValue) &&\n          parent.comparisonValue.find((i) => i._key === arrayItem._key)) ||\n        undefined\n\n      const itemState = prepareObjectInputState(\n        {\n          schemaType: itemType,\n          level: itemLevel,\n          value: arrayItem,\n          comparisonValue,\n          changed: isChangedValue(arrayItem, comparisonValue),\n          path: itemPath,\n          focusPath: parent.focusPath,\n          openPath: parent.openPath,\n          currentUser: parent.currentUser,\n          collapsedPaths: scopedCollapsedPaths,\n          collapsedFieldSets: scopedCollapsedFieldsets,\n          presence: parent.presence,\n          validation: parent.validation,\n          fieldGroupState,\n          readOnly: scopedReadOnly,\n          hidden: scopedHidden,\n        },\n        false,\n      ) as ObjectArrayFormNode\n\n      const defaultCollapsedState = getCollapsedWithDefaults(itemType.options, itemLevel)\n      const collapsed = scopedCollapsedPaths?.value ?? defaultCollapsedState.collapsed\n      return {\n        kind: 'item',\n        key,\n        index,\n        open: startsWith(itemPath, parent.openPath),\n        collapsed: collapsed,\n        collapsible: true,\n        parentSchemaType: parent.schemaType,\n        item: itemState,\n      }\n    },\n  )\n\n  /*\n   * Takes a field in contet of a parent object and returns prepared props for it\n   */\n  const prepareArrayOfPrimitivesMember = memoizePrepareArrayOfPrimitivesMember(\n    function _prepareArrayOfPrimitivesMember(props) {\n      const {arrayItem, parent, index} = props\n      const itemType = getPrimitiveItemType(parent.schemaType, arrayItem)\n\n      const itemPath = pathFor([...parent.path, index])\n      const itemValue = (parent.value as unknown[] | undefined)?.[index] as\n        | string\n        | boolean\n        | number\n      const itemComparisonValue = (parent.comparisonValue as unknown[] | undefined)?.[index] as\n        | string\n        | boolean\n        | number\n      const itemLevel = parent.level + 1\n\n      // Best effort attempt to make a stable key for each item in the array\n      // Since items may be reordered and change at any time, there's no way to reliably address each item uniquely\n      // This is a \"best effort\"-attempt at making sure we don't re-use internal state for item inputs\n      // when items are added to or removed from the array\n      const key = `${itemType?.name || 'invalid-type'}-${String(index)}`\n\n      if (!itemType) {\n        return {\n          kind: 'error',\n          key,\n          index,\n          error: {\n            type: 'INVALID_ITEM_TYPE',\n            validTypes: parent.schemaType.of,\n            resolvedValueType: resolveTypeName(itemType),\n            value: itemValue,\n          },\n        }\n      }\n\n      // const scopedHidden =\n      //   parent.hidden === true || parent.hidden?.value || parent.hidden?.children?.[field.name]\n      const scopedReadOnly =\n        parent.readOnly === true || parent.readOnly?.value || parent.readOnly?.children?.[index]\n\n      const item = preparePrimitiveInputState({\n        ...parent,\n        path: itemPath,\n        schemaType: itemType as PrimitiveSchemaType,\n        level: itemLevel,\n        value: itemValue,\n        comparisonValue: itemComparisonValue,\n        readOnly: scopedReadOnly,\n      })\n\n      return {\n        kind: 'item',\n        key,\n        index,\n        parentSchemaType: parent.schemaType,\n        open: isEqual(itemPath, parent.openPath),\n        item,\n      }\n    },\n  )\n\n  const preparePrimitiveInputState = memoizePreparePrimitiveInputState(\n    function _preparePrimitiveInputState(props) {\n      const filteredPresence = props.presence.filter((item) => isEqual(item.path, props.path))\n      const presence = filteredPresence.length ? filteredPresence : EMPTY_ARRAY\n\n      const validation = props.validation\n        .filter((item) => isEqual(item.path, props.path))\n        .map((v) => ({level: v.level, message: v.message, path: v.path}))\n      return {\n        schemaType: props.schemaType,\n        changed: isChangedValue(props.value, props.comparisonValue),\n        value: props.value,\n        level: props.level,\n        id: toString(props.path),\n        readOnly: props.readOnly === true || props.readOnly?.value,\n        focused: isEqual(props.path, props.focusPath),\n        path: props.path,\n        presence,\n        validation,\n      } as PrimitiveFormNode\n    },\n  )\n\n  function prepareFormState({\n    collapsedFieldSets,\n    collapsedPaths,\n    comparisonValue,\n    currentUser,\n    documentValue,\n    fieldGroupState,\n    focusPath,\n    hidden,\n    openPath,\n    presence,\n    readOnly,\n    schemaType,\n    validation,\n    changesOpen,\n  }: RootFormStateOptions): ObjectFormNode | null {\n    return prepareObjectInputState({\n      collapsedFieldSets,\n      collapsedPaths,\n      comparisonValue,\n      currentUser,\n      value: documentValue,\n      fieldGroupState,\n      focusPath,\n      hidden: hidden === false ? EMPTY_OBJECT : hidden,\n      openPath,\n      presence,\n      readOnly: readOnly === false ? EMPTY_OBJECT : readOnly,\n      schemaType,\n      validation,\n      changesOpen,\n      level: 0,\n      path: [],\n    })\n  }\n\n  prepareFormState._prepareFieldMember = prepareFieldMember\n  prepareFormState._prepareFieldMember = prepareFieldMember\n  prepareFormState._prepareObjectInputState = prepareObjectInputState\n  prepareFormState._prepareArrayOfPrimitivesInputState = prepareArrayOfPrimitivesInputState\n  prepareFormState._prepareArrayOfObjectsInputState = prepareArrayOfObjectsInputState\n  prepareFormState._prepareArrayOfObjectsMember = prepareArrayOfObjectsMember\n  prepareFormState._prepareArrayOfPrimitivesMember = prepareArrayOfPrimitivesMember\n  prepareFormState._preparePrimitiveInputState = preparePrimitiveInputState\n\n  return prepareFormState\n}\n","/* eslint-disable camelcase */\n\nimport {type ObjectSchemaType, type Path, type ValidationMarker} from '@sanity/types'\nimport {useMemo, useState} from 'react'\n\nimport {type FormNodePresence} from '../../presence'\nimport {useCurrentUser} from '../../store'\nimport {createCallbackResolver} from './conditional-property/createCallbackResolver'\nimport {createPrepareFormState} from './formState'\nimport {type ObjectFormNode, type StateTree} from './types'\nimport {immutableReconcile} from './utils/immutableReconcile'\n\n/** @internal */\nexport type FormState<\n  T extends {[key in string]: unknown} = {[key in string]: unknown},\n  S extends ObjectSchemaType = ObjectSchemaType,\n> = ObjectFormNode<T, S>\n\n/** @internal */\nexport interface UseFormStateOptions {\n  schemaType: ObjectSchemaType\n  documentValue: unknown\n  comparisonValue: unknown\n  openPath: Path\n  focusPath: Path\n  presence: FormNodePresence[]\n  validation: ValidationMarker[]\n  fieldGroupState?: StateTree<string> | undefined\n  collapsedFieldSets?: StateTree<boolean> | undefined\n  collapsedPaths?: StateTree<boolean> | undefined\n  readOnly?: boolean\n  changesOpen?: boolean\n}\n\n/** @internal */\nexport function useFormState<\n  T extends {[key in string]: unknown} = {[key in string]: unknown},\n  S extends ObjectSchemaType = ObjectSchemaType,\n>({\n  comparisonValue,\n  documentValue,\n  fieldGroupState,\n  collapsedFieldSets,\n  collapsedPaths,\n  focusPath,\n  openPath,\n  presence,\n  validation,\n  readOnly: inputReadOnly,\n  changesOpen,\n  schemaType,\n}: UseFormStateOptions): FormState<T, S> | null {\n  // note: feel free to move these state pieces out of this hook\n  const currentUser = useCurrentUser()\n\n  const [prepareHiddenState] = useState(() => createCallbackResolver({property: 'hidden'}))\n  const [prepareReadOnlyState] = useState(() => createCallbackResolver({property: 'readOnly'}))\n  const [prepareFormState] = useState(() => createPrepareFormState())\n\n  const [reconcileFieldGroupState] = useState(() => {\n    let last: StateTree<string> | undefined\n    return (state: StateTree<string> | undefined) => {\n      const result = immutableReconcile(last ?? null, state)\n      last = result\n      return result\n    }\n  })\n\n  const reconciledFieldGroupState = useMemo(() => {\n    return reconcileFieldGroupState(fieldGroupState)\n  }, [fieldGroupState, reconcileFieldGroupState])\n\n  const [reconcileCollapsedPaths] = useState(() => {\n    let last: StateTree<boolean> | undefined\n    return (state: StateTree<boolean> | undefined) => {\n      const result = immutableReconcile(last ?? null, state)\n      last = result\n      return result\n    }\n  })\n  const reconciledCollapsedPaths = useMemo(\n    () => reconcileCollapsedPaths(collapsedPaths),\n    [collapsedPaths, reconcileCollapsedPaths],\n  )\n\n  const [reconcileCollapsedFieldsets] = useState(() => {\n    let last: StateTree<boolean> | undefined\n    return (state: StateTree<boolean> | undefined) => {\n      const result = immutableReconcile(last ?? null, state)\n      last = result\n      return result\n    }\n  })\n  const reconciledCollapsedFieldsets = useMemo(\n    () => reconcileCollapsedFieldsets(collapsedFieldSets),\n    [collapsedFieldSets, reconcileCollapsedFieldsets],\n  )\n\n  const {hidden, readOnly} = useMemo(() => {\n    return {\n      hidden: prepareHiddenState({\n        currentUser,\n        documentValue: documentValue,\n        schemaType,\n      }),\n      readOnly: prepareReadOnlyState({\n        currentUser,\n        documentValue: documentValue,\n        schemaType,\n        readOnly: inputReadOnly,\n      }),\n    }\n  }, [\n    prepareHiddenState,\n    currentUser,\n    documentValue,\n    schemaType,\n    prepareReadOnlyState,\n    inputReadOnly,\n  ])\n\n  return useMemo(() => {\n    return prepareFormState({\n      schemaType,\n      fieldGroupState: reconciledFieldGroupState,\n      collapsedFieldSets: reconciledCollapsedFieldsets,\n      collapsedPaths: reconciledCollapsedPaths,\n      documentValue,\n      comparisonValue,\n      focusPath,\n      openPath,\n      readOnly,\n      hidden,\n      currentUser,\n      presence,\n      validation,\n      changesOpen,\n    }) as ObjectFormNode<T, S>\n  }, [\n    prepareFormState,\n    schemaType,\n    reconciledFieldGroupState,\n    reconciledCollapsedFieldsets,\n    reconciledCollapsedPaths,\n    documentValue,\n    comparisonValue,\n    focusPath,\n    openPath,\n    readOnly,\n    hidden,\n    currentUser,\n    presence,\n    validation,\n    changesOpen,\n  ])\n}\n","import {isArrayOfObjectsSchemaType, isObjectSchemaType} from '@sanity/types'\n\nimport {type ArrayOfObjectsFormNode, type BaseFormNode, type ObjectFormNode} from './nodes'\n\n/** @internal */\nexport function isObjectFormNode(formNode: BaseFormNode): formNode is ObjectFormNode {\n  return isObjectSchemaType(formNode.schemaType)\n}\n/** @internal */\nexport function isArrayOfObjectsFormNode(\n  formNode: BaseFormNode,\n): formNode is ArrayOfObjectsFormNode {\n  return isArrayOfObjectsSchemaType(formNode.schemaType)\n}\n","import {isKeySegment, type Path} from '@sanity/types'\nimport {castArray} from 'lodash'\n\nimport {isMemberArrayOfObjects, isMemberObject} from '../../members/object/fields/asserters'\nimport {ALL_FIELDS_GROUP} from '../constants'\nimport {\n  type ArrayOfObjectsFormNode,\n  type ArrayOfObjectsItemMember,\n  type BaseFormNode,\n  type FieldMember,\n  type FieldSetMember,\n  type ObjectFormNode,\n  type ObjectMember,\n} from '../types'\nimport {isArrayOfObjectsFormNode, isObjectFormNode} from '../types/asserters'\n\n/** @internal */\nexport interface ExpandPathOperation {\n  type: 'expandPath'\n  path: Path\n}\n\n/** @internal */\nexport interface ExpandFieldSetOperation {\n  type: 'expandFieldSet'\n  path: Path\n}\n\n/** @internal */\nexport interface SetActiveGroupOperation {\n  type: 'setSelectedGroup'\n  path: Path\n  groupName: string\n}\n\n/** @internal */\nexport type ExpandOperation =\n  | ExpandPathOperation\n  | ExpandFieldSetOperation\n  | SetActiveGroupOperation\n\nfunction hasAllMembers<T extends BaseFormNode>(value: T): value is HasAllMembers<T> {\n  return '_allMembers' in value && Array.isArray(value._allMembers)\n}\n\n/**\n * This takes a form state and returns a list of operations required to open a node at a particular path\n * @param node - The base form node (i.e. the form state node for the _document_)\n * @param path - The path to open\n *\n * @internal\n */\nexport function getExpandOperations(node: BaseFormNode, path: Path): ExpandOperation[] {\n  return [\n    // make sure to expand all intermediate paths\n    ...path.map((p, i): ExpandPathOperation => ({type: 'expandPath', path: path.slice(0, i + 1)})),\n    // make sure to expand all fieldsets and selects the groups that includes the intermediate nodes\n    ...getFieldsetAndFieldGroupOperations(node, path),\n  ]\n}\nfunction getFieldsetAndFieldGroupOperations(node: BaseFormNode, path: Path) {\n  if (path.length === 0) {\n    return []\n  }\n\n  if (isObjectFormNode(node) && hasAllMembers(node)) {\n    return getObjectFieldsetAndFieldGroupOperations(node, path)\n  }\n  if (isArrayOfObjectsFormNode(node)) {\n    return getArrayFieldsetAndFieldGroupOperations(node, path)\n  }\n  return []\n}\n\ntype HasAllMembers<T> = T & {_allMembers: ObjectMember[]}\n\nfunction getObjectFieldsetAndFieldGroupOperations(\n  node: HasAllMembers<ObjectFormNode>,\n  path: Path,\n): (ExpandFieldSetOperation | SetActiveGroupOperation)[] {\n  if (path.length === 0) {\n    return []\n  }\n  // extract the field name for the current level we're looking at\n  const [fieldName, ...tail] = path\n\n  const fieldsetMember = node._allMembers.find(\n    (member): member is FieldSetMember =>\n      member.kind === 'fieldSet' &&\n      member.fieldSet.members.some(\n        (field): field is FieldMember => field.kind === 'field' && field.name === fieldName,\n      ),\n  )\n\n  // if we found the field in a fieldset we need to recurse into this fieldset's members, otherwise we can use the node's members\n  const members = fieldsetMember\n    ? fieldsetMember.fieldSet.members\n    : // Note: we need to use the internal `_allMembers` array here instead of members since hidden/collapsed members are omitted from members\n      node._allMembers\n\n  // look for the field inside the members array\n  const fieldMember = members.find(\n    (member): member is FieldMember =>\n      member !== null && member.kind === 'field' && member.name === fieldName,\n  )\n\n  // Group handling\n  const schemaField = node.schemaType.fields.find((field) => field.name === fieldName)\n  const selectedGroupName = node.groups.find((group) => group.selected)?.name\n  const schemaFieldGroup = (schemaField && castArray(schemaField.group)) || []\n  const inSelectedGroup =\n    selectedGroupName &&\n    (selectedGroupName === ALL_FIELDS_GROUP.name || schemaFieldGroup.includes(selectedGroupName))\n\n  const ops: (ExpandFieldSetOperation | SetActiveGroupOperation)[] = []\n\n  if (!inSelectedGroup) {\n    const groupName =\n      node.groups.find((group) => schemaFieldGroup.includes(group.name))?.name ||\n      ALL_FIELDS_GROUP.name\n    ops.push({\n      type: 'setSelectedGroup',\n      path: node.path,\n      groupName,\n    })\n  }\n\n  if (fieldsetMember) {\n    // the field is inside a fieldset, make sure we expand it too\n    ops.push({type: 'expandFieldSet', path: fieldsetMember.fieldSet.path})\n  }\n\n  if (fieldMember && hasAllMembers(fieldMember.field)) {\n    if (isMemberArrayOfObjects(fieldMember)) {\n      ops.push(...getArrayFieldsetAndFieldGroupOperations(fieldMember.field, tail))\n    } else if (isMemberObject(fieldMember)) {\n      ops.push(...getObjectFieldsetAndFieldGroupOperations(fieldMember.field, tail))\n    }\n  }\n\n  return ops\n}\n\nfunction getArrayFieldsetAndFieldGroupOperations(\n  state: ArrayOfObjectsFormNode,\n  path: Path,\n): (ExpandFieldSetOperation | SetActiveGroupOperation)[] {\n  if (path.length === 0) {\n    return []\n  }\n\n  // start at the root and make sure all groups/paths are expanded/activated along the way\n  const [segment, ...rest] = path\n  if (!isKeySegment(segment)) {\n    throw new Error('Expected path segment to be an object with a _key property')\n  }\n\n  const foundMember = state.members.find(\n    (member): member is ArrayOfObjectsItemMember => member.key === segment._key,\n  )\n\n  if (!foundMember) {\n    // tried to open a member that does not exist in the form state - it's likely hidden\n    return []\n  }\n  return getFieldsetAndFieldGroupOperations(foundMember.item, rest)\n}\n","import {type BaseSchemaTypeOptions, type SanityDocumentLike, type SchemaType} from '@sanity/types'\n\nimport {type CreateLinkedSanityDocument, type CreateLinkMetadata} from './types'\n\n/**\n * @internal\n */\nexport function getSanityCreateLinkMetadata(\n  doc: SanityDocumentLike | undefined,\n): CreateLinkMetadata | undefined {\n  return (doc as CreateLinkedSanityDocument | undefined)?._create\n}\n\n/**\n * @internal\n */\nexport function isSanityCreateLinked(metadata: CreateLinkMetadata | undefined): boolean {\n  return metadata?.ejected === false\n}\n\n/**\n * @internal\n */\nexport function isSanityCreateLinkedDocument(doc: SanityDocumentLike | undefined): boolean {\n  return isSanityCreateLinked(getSanityCreateLinkMetadata(doc))\n}\n\n/**\n * @internal\n */\nexport function isSanityCreateExcludedType(schemaType: SchemaType): boolean {\n  const options = schemaType.options as BaseSchemaTypeOptions | undefined\n  if (typeof options?.sanityCreate?.exclude === 'boolean') {\n    return options?.sanityCreate?.exclude\n  }\n  if (schemaType?.type) {\n    return isSanityCreateExcludedType(schemaType?.type)\n  }\n  return false\n}\n\n/**\n * Documents with fields with a value (non-underscore-prefixed) are not supported by Start in Create yet,\n * because Create would overwrite them.\n * This includes pristine new documents with initialValues or created from initial value templates.\n * @internal\n */\nexport function isSanityCreateStartCompatibleDoc(doc: SanityDocumentLike): boolean {\n  const nonNullEntries = Object.entries(doc)\n    .filter(([key]) => !key.startsWith('_'))\n    /* we could possibly allow empty string and array, but its not for now */\n    .filter(([, value]) => !(value === null || value === undefined))\n\n  return !nonNullEntries.length\n}\n","import {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {of, timer} from 'rxjs'\nimport {distinctUntilChanged, map, mapTo, startWith, switchMap} from 'rxjs/operators'\n\nimport {useDocumentStore} from '../store'\n\n/** @internal */\nexport type ConnectionState = 'connecting' | 'reconnecting' | 'connected'\n\nconst INITIAL: ConnectionState = 'connecting'\n\n/** @internal */\nexport function useConnectionState(\n  publishedDocId: string,\n  docTypeName: string,\n  version?: string,\n): ConnectionState {\n  const documentStore = useDocumentStore()\n\n  const observable = useMemo(\n    () =>\n      documentStore.pair.documentEvents(publishedDocId, docTypeName, version).pipe(\n        map((ev: {type: string}) => ev.type),\n        map((eventType) => eventType !== 'reconnect'),\n        switchMap((isConnected) =>\n          isConnected ? of('connected') : timer(200).pipe(mapTo('reconnecting')),\n        ),\n        startWith(INITIAL as any),\n        distinctUntilChanged(),\n      ),\n    [docTypeName, documentStore.pair, publishedDocId, version],\n  )\n  return useObservable(observable, INITIAL)\n}\n","import {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\n\nimport {type OperationsAPI, useDocumentStore} from '../store'\n\n/** @internal */\nexport function useDocumentOperation(\n  publishedDocId: string,\n  docTypeName: string,\n  version?: string,\n): OperationsAPI {\n  const documentStore = useDocumentStore()\n  const observable = useMemo(\n    () => documentStore.pair.editOperations(publishedDocId, docTypeName, version),\n    [docTypeName, documentStore.pair, publishedDocId, version],\n  )\n  /**\n   * We know that since the observable has a startWith operator, it will always emit a value\n   * and that's why the non-null assertion is used here\n   */\n  return useObservable(observable)!\n}\n","import {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {debounce, merge, share, skip, take, timer} from 'rxjs'\n\nimport {type EditStateFor, useDocumentStore} from '../store'\n\n/** @internal */\nexport function useEditState(\n  publishedDocId: string,\n  docTypeName: string,\n  priority: 'default' | 'low' = 'default',\n  version?: string | undefined,\n): EditStateFor {\n  if (version === 'published' || version === 'draft') {\n    throw new Error('Version cannot be published or draft')\n  }\n  const documentStore = useDocumentStore()\n\n  const observable = useMemo(() => {\n    if (priority === 'low') {\n      const base = documentStore.pair.editState(publishedDocId, docTypeName, version).pipe(share())\n\n      return merge(\n        base.pipe(take(1)),\n        base.pipe(\n          skip(1),\n          debounce(() => timer(1000)),\n        ),\n      )\n    }\n\n    return documentStore.pair.editState(publishedDocId, docTypeName, version)\n  }, [docTypeName, documentStore.pair, priority, publishedDocId, version])\n  /**\n   * We know that since the observable has a startWith operator, it will always emit a value\n   * and that's why the non-null assertion is used here\n   */\n  return useObservable(observable)!\n}\n","import {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\n\nimport {useDocumentStore} from '../store'\nimport {type ValidationStatus} from '../validation'\n\nconst INITIAL: ValidationStatus = {validation: [], isValidating: false}\n\n/** @internal */\nexport function useValidationStatus(\n  publishedDocId: string,\n  docTypeName: string,\n  version?: string,\n): ValidationStatus {\n  const documentStore = useDocumentStore()\n\n  const observable = useMemo(\n    () => documentStore.pair.validation(publishedDocId, docTypeName, version),\n    [docTypeName, documentStore.pair, publishedDocId, version],\n  )\n  return useObservable(observable, INITIAL)\n}\n","import {type ReleaseDocument} from '../releases/store/types'\nimport {getReleaseIdFromReleaseDocumentId} from '../releases/util/getReleaseIdFromReleaseDocumentId'\nimport {type ReleaseId, type SelectedPerspective} from './types'\n\nexport function getSelectedPerspective(\n  selectedPerspectiveName: 'published' | ReleaseId | undefined,\n  releases: ReleaseDocument[],\n): SelectedPerspective {\n  if (!selectedPerspectiveName) return 'drafts'\n  if (selectedPerspectiveName === 'published') return 'published'\n  const selectedRelease = releases.find(\n    (release) => getReleaseIdFromReleaseDocumentId(release._id) === selectedPerspectiveName,\n  )\n  return selectedRelease || 'drafts'\n}\n","/* eslint-disable max-statements */\nimport {type SanityDocument} from '@sanity/client'\nimport {isActionEnabled} from '@sanity/schema/_internal'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {\n  type ObjectSchemaType,\n  type Path,\n  type SanityDocumentLike,\n  type ValidationMarker,\n} from '@sanity/types'\nimport {useToast} from '@sanity/ui'\nimport {pathFor} from '@sanity/util/paths'\nimport {throttle} from 'lodash'\nimport {\n  type RefObject,\n  useCallback,\n  useEffect,\n  useInsertionEffect,\n  useMemo,\n  useRef,\n  useState,\n} from 'react'\nimport deepEquals from 'react-fast-compare'\n\nimport {isSanityCreateLinkedDocument} from '../create/createUtils'\nimport {type ConnectionState, useConnectionState} from '../hooks/useConnectionState'\nimport {useDocumentOperation} from '../hooks/useDocumentOperation'\nimport {useEditState} from '../hooks/useEditState'\nimport {useSchema} from '../hooks/useSchema'\nimport {useValidationStatus} from '../hooks/useValidationStatus'\nimport {useTranslation} from '../i18n/hooks/useTranslation'\nimport {getSelectedPerspective} from '../perspective/getSelectedPerspective'\nimport {type ReleaseId} from '../perspective/types'\nimport {usePerspective} from '../perspective/usePerspective'\nimport {useDocumentVersions} from '../releases/hooks/useDocumentVersions'\nimport {useDocumentVersionTypeSortedList} from '../releases/hooks/useDocumentVersionTypeSortedList'\nimport {useOnlyHasVersions} from '../releases/hooks/useOnlyHasVersions'\nimport {isReleaseDocument} from '../releases/store/types'\nimport {useActiveReleases} from '../releases/store/useActiveReleases'\nimport {getReleaseIdFromReleaseDocumentId} from '../releases/util/getReleaseIdFromReleaseDocumentId'\nimport {isGoingToUnpublish} from '../releases/util/isGoingToUnpublish'\nimport {isPublishedPerspective, isReleaseScheduledOrScheduling} from '../releases/util/util'\nimport {\n  type DocumentPresence,\n  type EditStateFor,\n  type InitialValueState,\n  type PermissionCheckResult,\n  useDocumentValuePermissions,\n  usePresenceStore,\n} from '../store'\nimport {EMPTY_ARRAY, getDraftId, getPublishedId, getVersionFromId, useUnique} from '../util'\nimport {\n  type FormState,\n  getExpandOperations,\n  type OnPathFocusPayload,\n  type PatchEvent,\n  setAtPath,\n  type StateTree,\n  toMutationPatches,\n  useFormState,\n} from '.'\nimport {CreatedDraft} from './__telemetry__/form.telemetry'\n\ninterface DocumentFormOptions {\n  documentType: string\n  documentId: string\n  releaseId?: ReleaseId\n  initialValue?: InitialValueState\n  initialFocusPath?: Path\n  selectedPerspectiveName?: ReleaseId | 'published'\n  readOnly?: boolean | ((editState: EditStateFor) => boolean)\n  /**\n   * Usually the historical _rev value selected, if not defined, it will use the current document value\n   * so no comparison will be done.\n   */\n  comparisonValue?:\n    | Partial<SanityDocument>\n    | ((editState: EditStateFor) => Partial<SanityDocument>)\n    | null\n  onFocusPath?: (path: Path) => void\n  changesOpen?: boolean\n  /**\n   * Callback that allows to transform the value before it's passed to the form\n   * used by the <DocumentPaneProvider > to display the history values.\n   */\n  getFormDocumentValue?: (value: SanityDocumentLike) => SanityDocumentLike\n}\ninterface DocumentFormValue {\n  editState: EditStateFor\n  connectionState: ConnectionState\n  collapsedFieldSets: StateTree<boolean> | undefined\n  collapsedPaths: StateTree<boolean> | undefined\n  openPath: Path\n\n  ready: boolean\n  value: SanityDocumentLike\n  formState: FormState\n  focusPath: Path\n  validation: ValidationMarker[]\n  permissions: PermissionCheckResult | undefined\n  isPermissionsLoading: boolean\n  onBlur: (blurredPath: Path) => void\n  onFocus: (_nextFocusPath: Path, payload?: OnPathFocusPayload) => void\n  onSetCollapsedPath: (path: Path, collapsed: boolean) => void\n  onSetActiveFieldGroup: (path: Path, groupName: string) => void\n  onSetCollapsedFieldSet: (path: Path, collapsed: boolean) => void\n  onChange: (event: PatchEvent) => void\n  onPathOpen: (path: Path) => void\n  onProgrammaticFocus: (nextPath: Path) => void\n  formStateRef: RefObject<FormState>\n  schemaType: ObjectSchemaType\n}\n\n/**\n * @internal\n * Hook for creating a form state and combine it with the <FormBuilder>.\n * It will handle the connection state, edit state, validation, and presence.\n *\n * Use this as a base point to create your own form.\n */\n// eslint-disable-next-line max-statements\nexport function useDocumentForm(options: DocumentFormOptions): DocumentFormValue {\n  const {\n    documentType,\n    getFormDocumentValue,\n    documentId,\n    initialValue,\n    changesOpen = false,\n    comparisonValue: comparisonValueRaw,\n    releaseId,\n    initialFocusPath,\n    selectedPerspectiveName,\n    readOnly: readOnlyProp,\n    onFocusPath,\n  } = options\n  const schema = useSchema()\n  const presenceStore = usePresenceStore()\n  const {data: releases} = useActiveReleases()\n  const {data: documentVersions} = useDocumentVersions({documentId})\n  const {selectedReleaseId} = usePerspective()\n\n  const schemaType = schema.get(documentType) as ObjectSchemaType | undefined\n  if (!schemaType) {\n    throw new Error(`Schema type for '${documentType}' not found`)\n  }\n  const liveEdit = Boolean(schemaType.liveEdit)\n\n  const telemetry = useTelemetry()\n\n  const {validation: validationRaw} = useValidationStatus(documentId, documentType, releaseId)\n  const validation = useUnique(validationRaw)\n\n  // if it only has versions then we need to make sure that whatever the first document that is allowed\n  // is a version document, but also that it has the right order\n  // this will make sure that then the right document appears and so does the right chip within the document header\n  const {sortedDocumentList} = useDocumentVersionTypeSortedList({documentId})\n  const onlyHasVersions = useOnlyHasVersions({documentId})\n  const firstVersion =\n    sortedDocumentList.length > 0\n      ? documentVersions.find(\n          (id) =>\n            getVersionFromId(id) === getReleaseIdFromReleaseDocumentId(sortedDocumentList[0]._id),\n        )\n      : undefined\n\n  const activeDocumentReleaseId = useMemo(() => {\n    // if a document version exists with the selected release id, then it should use that\n    if (documentVersions.some((id) => getVersionFromId(id) === selectedReleaseId)) {\n      return selectedReleaseId\n    }\n\n    // check if the selected version is the only version, if it isn't and it doesn't exist in the release\n    // then it needs to use the documentVersions\n    if (selectedReleaseId && (!documentVersions || !onlyHasVersions)) {\n      return selectedReleaseId\n    }\n\n    return getVersionFromId(firstVersion ?? '')\n  }, [documentVersions, onlyHasVersions, selectedReleaseId, firstVersion])\n\n  const editState = useEditState(documentId, documentType, 'default', activeDocumentReleaseId)\n\n  const connectionState = useConnectionState(documentId, documentType, releaseId)\n  useConnectionToast(connectionState)\n\n  const [focusPath, setFocusPath] = useState<Path>(initialFocusPath || EMPTY_ARRAY)\n\n  const comparisonValue = useMemo(() => {\n    if (typeof comparisonValueRaw === 'function') {\n      return comparisonValueRaw(editState)\n    }\n    return comparisonValueRaw\n  }, [comparisonValueRaw, editState])\n\n  const value: SanityDocumentLike = useMemo(() => {\n    const baseValue = initialValue?.value || {_id: documentId, _type: documentType}\n    if (releaseId) {\n      return editState.version || editState.draft || editState.published || baseValue\n    }\n    if (selectedPerspectiveName && isPublishedPerspective(selectedPerspectiveName)) {\n      return (\n        editState.published ||\n        (liveEdit\n          ? // If it's live edit and published perspective, add the initialValue\n            baseValue\n          : // If it's not live edit, the form needs to be empty in the draft state, don't show the initialValue\n            {_id: documentId, _type: documentType})\n      )\n    }\n    // if no version is selected, but there is only version, it should default to the version it finds\n    if (!selectedPerspectiveName && onlyHasVersions) {\n      return editState.version || editState.draft || editState.published || baseValue\n    }\n    return editState?.draft || editState?.published || baseValue\n  }, [\n    documentId,\n    documentType,\n    editState.draft,\n    editState.published,\n    editState.version,\n    initialValue,\n    liveEdit,\n    releaseId,\n    selectedPerspectiveName,\n    onlyHasVersions,\n  ])\n\n  const [presence, setPresence] = useState<DocumentPresence[]>([])\n  useEffect(() => {\n    const subscription = presenceStore.documentPresence(value._id).subscribe((nextPresence) => {\n      setPresence(nextPresence)\n    })\n    return () => {\n      subscription.unsubscribe()\n    }\n  }, [presenceStore, value._id])\n\n  const [openPath, onSetOpenPath] = useState<Path>(EMPTY_ARRAY)\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 docPermissionsInput = useMemo(() => {\n    return {\n      ...value,\n      _id: liveEdit ? getPublishedId(documentId) : getDraftId(documentId),\n    }\n  }, [liveEdit, value, documentId])\n\n  const [permissions, isPermissionsLoading] = useDocumentValuePermissions({\n    document: docPermissionsInput,\n    permission: requiredPermission,\n  })\n\n  const isNonExistent = !value?._id\n  const isCreateLinked = isSanityCreateLinkedDocument(value)\n\n  const ready = connectionState === 'connected' && editState.ready && !initialValue?.loading\n\n  const selectedPerspective = useMemo(() => {\n    return getSelectedPerspective(selectedPerspectiveName, releases)\n  }, [selectedPerspectiveName, releases])\n\n  const isReleaseLocked = useMemo(\n    () =>\n      isReleaseDocument(selectedPerspective)\n        ? isReleaseScheduledOrScheduling(selectedPerspective)\n        : false,\n    [selectedPerspective],\n  )\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    const willBeUnpublished = value ? isGoingToUnpublish(value) : false\n\n    // in cases where the document has no draft or published, but has a version,\n    // and that version doesn't match current pinned version\n    // we disable editing\n    if (\n      editState.version &&\n      !editState.draft &&\n      !editState.published &&\n      onlyHasVersions &&\n      selectedPerspectiveName !== getVersionFromId(editState.version._id)\n    ) {\n      return true\n    }\n\n    // in cases where the document has drafts but the schema is live edit, there is a risk of data loss, so we disable editing in this case\n    if (liveEdit && editState.draft?._id) {\n      return true\n    }\n    if (!liveEdit && selectedPerspectiveName === 'published') {\n      return true\n    }\n\n    // If a release is selected, validate that the document id matches the selected release id\n    if (releaseId && getVersionFromId(value._id) !== releaseId) {\n      return true\n    }\n\n    const isReadOnly =\n      !ready ||\n      hasNoPermission ||\n      updateActionDisabled ||\n      createActionDisabled ||\n      reconnecting ||\n      isLocked ||\n      isCreateLinked ||\n      willBeUnpublished ||\n      isReleaseLocked\n\n    if (isReadOnly) return true\n    if (typeof readOnlyProp === 'function') return readOnlyProp(editState)\n    return Boolean(readOnlyProp)\n  }, [\n    isPermissionsLoading,\n    permissions?.granted,\n    schemaType,\n    isNonExistent,\n    connectionState,\n    editState,\n    value,\n    onlyHasVersions,\n    selectedPerspectiveName,\n    liveEdit,\n    releaseId,\n    ready,\n    isCreateLinked,\n    isReleaseLocked,\n    readOnlyProp,\n  ])\n\n  const {patch} = useDocumentOperation(documentId, documentType, releaseId)\n\n  const patchRef = useRef<(event: PatchEvent) => void>(() => {\n    throw new Error(\n      'Attempted to patch the Sanity document during initial render or in an `useInsertionEffect`. Input components should only call `onChange()` in a useEffect or an event handler.',\n    )\n  })\n  const handleChange = useCallback((event: PatchEvent) => patchRef.current(event), [])\n\n  useInsertionEffect(() => {\n    // Create-linked documents enter a read-only state in Studio. However, unlinking a Create-linked\n    // document necessitates patching it. This renders it impossible to unlink a Create-linked\n    // document.\n    //\n    // Excluding Create-linked documents from this check is a simple way to ensure they can be\n    // unlinked.\n    //\n    // This does mean `handleChange` can be used to patch any part of a Create-linked document,\n    // which would otherwise be read-only.\n    if (readOnly && !isCreateLinked) {\n      patchRef.current = () => {\n        throw new Error('Attempted to patch a read-only document')\n      }\n    } else {\n      // note: this needs to happen in an insertion effect to make sure we're ready to receive patches from child components when they run their effects initially\n      // in case they do e.g. `useEffect(() => props.onChange(set(\"foo\")), [])`\n      // Note: although we discourage patch-on-mount, we still support it.\n      patchRef.current = (event: PatchEvent) => {\n        // when creating a new draft\n        if (!editState.draft && !editState.published) {\n          telemetry.log(CreatedDraft)\n        }\n\n        patch.execute(toMutationPatches(event.patches), initialValue?.value)\n      }\n    }\n  }, [\n    editState.draft,\n    editState.published,\n    initialValue,\n    patch,\n    telemetry,\n    readOnly,\n    isCreateLinked,\n  ])\n\n  const formDocumentValue = useMemo(() => {\n    if (getFormDocumentValue) return getFormDocumentValue(value)\n    return value\n  }, [getFormDocumentValue, value])\n\n  const formState = useFormState({\n    schemaType,\n    documentValue: formDocumentValue,\n    readOnly,\n    comparisonValue: comparisonValue || value,\n    focusPath,\n    openPath,\n    collapsedPaths,\n    presence,\n    validation,\n    collapsedFieldSets,\n    fieldGroupState,\n    changesOpen,\n  })!\n\n  const formStateRef = useRef(formState)\n  useEffect(() => {\n    formStateRef.current = formState\n  }, [formState])\n\n  const handleSetOpenPath = 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 updatePresence = useCallback(\n    (nextFocusPath: Path, payload?: OnPathFocusPayload) => {\n      presenceStore.setLocation([\n        {\n          type: 'document',\n          documentId: value._id,\n          path: nextFocusPath,\n          lastActiveAt: new Date().toISOString(),\n          selection: payload?.selection,\n        },\n      ])\n    },\n    [presenceStore, value._id],\n  )\n\n  const updatePresenceThrottled = useMemo(\n    () => throttle(updatePresence, 1000, {leading: true, trailing: true}),\n    [updatePresence],\n  )\n  const focusPathRef = useRef<Path>([])\n\n  const handleFocus = useCallback(\n    (_nextFocusPath: Path, payload?: OnPathFocusPayload) => {\n      const nextFocusPath = pathFor(_nextFocusPath)\n      if (nextFocusPath !== focusPathRef.current) {\n        setFocusPath(pathFor(nextFocusPath))\n        handleSetOpenPath(pathFor(nextFocusPath.slice(0, -1)))\n        focusPathRef.current = nextFocusPath\n        onFocusPath?.(nextFocusPath)\n      }\n      updatePresenceThrottled(nextFocusPath, payload)\n    },\n    [onFocusPath, setFocusPath, handleSetOpenPath, updatePresenceThrottled],\n  )\n\n  const disableBlurRef = useRef(false)\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 handleProgrammaticFocus = useCallback(\n    (nextPath: Path) => {\n      // Supports changing the focus path not by a user interaction, but by a programmatic change, e.g. the url path changes.\n      // to avoid the blur event to be triggered, we set a flag to disable it for a short period of time.\n      disableBlurRef.current = true\n\n      if (!deepEquals(focusPathRef.current, nextPath)) {\n        setFocusPath(nextPath)\n        handleSetOpenPath(nextPath)\n        onFocusPath?.(nextPath)\n\n        focusPathRef.current = nextPath\n      }\n\n      const timeout = setTimeout(() => {\n        disableBlurRef.current = false\n      }, 0)\n      return () => clearTimeout(timeout)\n    },\n    [onFocusPath, handleSetOpenPath],\n  )\n  return {\n    editState,\n    connectionState,\n    focusPath,\n    validation,\n    ready,\n    value,\n    formState,\n    permissions,\n    isPermissionsLoading,\n    formStateRef,\n\n    collapsedFieldSets,\n    collapsedPaths,\n    openPath,\n    schemaType,\n    onChange: handleChange,\n    onPathOpen: handleSetOpenPath,\n    onProgrammaticFocus: handleProgrammaticFocus,\n    onBlur: handleBlur,\n    onFocus: handleFocus,\n    onSetActiveFieldGroup: handleSetActiveFieldGroup,\n    onSetCollapsedPath: handleOnSetCollapsedPath,\n    onSetCollapsedFieldSet: handleOnSetCollapsedFieldSet,\n  }\n}\n\nconst useConnectionToast = (connectionState: ConnectionState) => {\n  const {push: pushToast} = useToast()\n  const {t} = useTranslation('studio')\n\n  useEffect(() => {\n    let timeout: ReturnType<typeof setTimeout>\n    if (connectionState === 'reconnecting') {\n      timeout = setTimeout(() => {\n        pushToast({\n          id: 'sanity/reconnecting',\n          status: 'warning',\n          title: t('form.reconnecting.toast.title'),\n        })\n      }, 2000) // 2 seconds, we can iterate on the value\n    }\n    return () => {\n      if (timeout) clearTimeout(timeout)\n    }\n  }, [connectionState, pushToast, t])\n}\n","import {arrayToJSONMatchPath} from '@sanity/mutator'\nimport {type Path, type PathSegment} from '@sanity/types'\n\nconst IS_NUMERIC = /^\\d+$/\n\nfunction unquote(str: string) {\n  return str.replace(/^['\"]/, '').replace(/['\"]$/, '')\n}\n\nfunction splitAttr(segment: string) {\n  const [attr, key] = segment.split('==')\n  return {[attr]: unquote(key)}\n}\n\nfunction coerce(segment: string): PathSegment {\n  return IS_NUMERIC.test(segment) ? Number(segment) : segment\n}\n\nfunction parseGradientPath(focusPathStr: string): Path {\n  return focusPathStr\n    .split(/[[.\\]]/g)\n    .filter(Boolean)\n    .map((seg) => (seg.includes('==') ? splitAttr(seg) : coerce(seg))) as Path\n}\n\n/**\n * @internal\n */\nexport function encodePath(formBuilderPath: Path): string {\n  return arrayToJSONMatchPath(formBuilderPath)\n}\n\n/**\n * @internal\n */\nexport function decodePath(gradientPath: string): Path {\n  return parseGradientPath(gradientPath)\n}\n","import {arrayToJSONMatchPath} from '@sanity/mutator'\nimport {flatten} from 'lodash'\n\nimport {SANITY_PATCH_TYPE} from '../patch'\nimport {type FormPatch, type FormPatchOrigin} from '../patch/types'\nimport {decodePath} from './path'\n\n/**\n * @internal\n */\nexport type MutationPatch = Record<string, any> // @todo: complete this typing\n\n/**\n * @internal\n */\nexport function toMutationPatches(patches: FormPatch[]): MutationPatch[] {\n  return patches.map(toMutationPatch)\n}\n\n/**\n * @internal\n */\nexport function fromMutationPatches(\n  origin: FormPatchOrigin,\n  patches: MutationPatch[],\n): FormPatch[] {\n  return flatten(patches.map((patch) => toFormBuilderPatches(origin, patch)))\n}\n\nconst notIn = (values: unknown[]) => (value: unknown) => !values.includes(value)\n\nfunction toFormBuilderPatches(origin: FormPatchOrigin, patch: MutationPatch): FormPatch[] {\n  return flatten(\n    Object.keys(patch)\n      .filter(notIn(['id', 'ifRevisionID', 'query']))\n      .map((type) => {\n        if (type === 'unset') {\n          return patch.unset.map((path: any) => {\n            return {\n              type: 'unset',\n              path: decodePath(path),\n              origin,\n            }\n          })\n        }\n        if (type === 'insert') {\n          const position = 'before' in patch.insert ? 'before' : 'after'\n          return {\n            type: 'insert',\n            position: position,\n            path: decodePath(patch.insert[position]),\n            items: patch.insert.items,\n            origin,\n          }\n        }\n        return Object.keys(patch[type])\n          .map((gradientPath) => {\n            if (type === 'set') {\n              return {\n                type: 'set',\n                path: decodePath(gradientPath),\n                value: patch[type][gradientPath],\n                origin,\n              }\n            }\n            if (type === 'inc' || type === 'dec') {\n              return {\n                type: type,\n                path: decodePath(gradientPath),\n                value: patch[type][gradientPath],\n                origin,\n              }\n            }\n            if (type === 'setIfMissing') {\n              return {\n                type: 'setIfMissing',\n                path: decodePath(gradientPath),\n                value: patch[type][gradientPath],\n                origin,\n              }\n            }\n            if (type === 'diffMatchPatch') {\n              return {\n                type,\n                path: decodePath(gradientPath),\n                value: patch[type][gradientPath],\n                origin,\n              }\n            }\n            // eslint-disable-next-line no-console\n            console.warn(new Error(`Unsupported patch type: ${type}`))\n            return null\n          })\n          .filter(Boolean)\n      }),\n  )\n}\n\nfunction toMutationPatch(patch: FormPatch): MutationPatch {\n  if (patch.patchType !== SANITY_PATCH_TYPE && patch.type) {\n    throw new Error(\n      `Patch is missing \"patchType\" - import and use \"${patch.type}()\" from \"sanity/form\"`,\n    )\n  } else if (patch.patchType !== SANITY_PATCH_TYPE) {\n    throw new Error(\n      `Patch is missing \"patchType\" - import and use the patch method helpers from \"sanity/form\"`,\n    )\n  }\n\n  const matchPath = arrayToJSONMatchPath(patch.path || [])\n  if (patch.type === 'insert') {\n    const {position, items} = patch\n    return {\n      insert: {\n        [position]: matchPath,\n        items: items,\n      },\n    }\n  }\n\n  if (patch.type === 'unset') {\n    return {\n      unset: [matchPath],\n    }\n  }\n\n  if (!patch.type) {\n    throw new Error(`Missing patch type in patch ${JSON.stringify(patch)}`)\n  }\n  if (matchPath) {\n    return {\n      [patch.type]: {\n        [matchPath]: patch.value,\n      },\n    }\n  }\n  return {\n    [patch.type]: patch.value,\n  }\n}\n","import {memo, type ReactNode, useCallback, useMemo} from 'react'\nimport {FormCallbacksContext} from 'sanity/_singletons'\n\nimport {type FormPatch, PatchEvent} from '../patch'\nimport {useFormCallbacks} from '../studio'\n\ntype PatchTransformer = (patches: FormPatch[]) => FormPatch[]\n\n/**\n * @hidden\n * @beta */\nexport const TransformPatches = memo(function OnChangeProvider(\n  props: {transform: PatchTransformer} & {children: ReactNode},\n) {\n  const {transform} = props\n  const callbacks = useFormCallbacks()\n\n  const handleChange = useCallback(\n    (patchEvent: PatchEvent) => {\n      const patches = patchEvent.patches\n      const transformedPatches = transform(patches)\n      callbacks.onChange(PatchEvent.from(transformedPatches))\n    },\n    [callbacks, transform],\n  )\n\n  const contextValue = useMemo(\n    () => ({...callbacks, onChange: handleChange}),\n    [callbacks, handleChange],\n  )\n  return (\n    <FormCallbacksContext.Provider value={contextValue}>\n      {props.children}\n    </FormCallbacksContext.Provider>\n  )\n})\n","import {type SanityDocument} from '@sanity/client'\nimport {\n  type ArraySchemaType,\n  type ConditionalPropertyCallbackContext,\n  type CurrentUser,\n  isArraySchemaType,\n  isObjectSchemaType,\n  type ObjectField,\n  type ObjectFieldType,\n  type ObjectSchemaType,\n  type PathSegment,\n  type SchemaType,\n} from '@sanity/types'\nimport * as PathUtils from '@sanity/util/paths'\nimport {findIndex} from 'lodash'\n\nimport {getValueAtPath} from '../../field'\nimport {resolveConditionalProperty} from '../../form'\nimport {getSchemaTypeTitle} from '../../schema'\nimport {type CommentListBreadcrumbs} from '../types'\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 {isPortableTextSpan, isPortableTextTextBlock} from '@sanity/types'\nimport {isEqual} from 'lodash'\nimport {useMemo, useState} from 'react'\n\nimport {type CommentContext, type CommentDocument, type CommentMessage} from './types'\n\nexport function useCommentHasChanged(message: CommentMessage): boolean {\n  const [prevMessage] = useState<CommentMessage>(message)\n\n  return useMemo(() => !isEqual(prevMessage, message), [prevMessage, message])\n}\n\n/**\n * @internal\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\nexport function commentIntentIfDiffers(\n  parent?: CommentDocument,\n  comment?: CommentDocument,\n): CommentContext['intent'] | undefined {\n  const parentIntent = parent?.context?.intent\n  const intent = comment?.context?.intent\n  // If no intent, nothing to return\n  if (!intent) return undefined\n  // If no parent intent, no comparison necessary\n  if (!parentIntent) return intent\n  // If the preview param differs, return the intent\n  if (\n    'preview' in intent.params &&\n    'preview' in parentIntent.params &&\n    intent.params.preview !== parentIntent.params.preview\n  ) {\n    return intent\n  }\n  return undefined\n}\n\n/**\n * A function that checks whether a comment is a text selection comment\n * @internal\n */\nexport function isTextSelectionComment(comment: CommentDocument): boolean {\n  if (!comment) return false\n\n  return Boolean(\n    comment?.target?.path?.selection?.type === 'text' && comment?.target?.path?.selection?.value,\n  )\n}\n","import {type SanityDocument} from '@sanity/client'\nimport {type CurrentUser, type SchemaType} from '@sanity/types'\n\nimport {isTextSelectionComment} from '../helpers'\nimport {type CommentDocument, type CommentsType, type CommentThreadItem} from '../types'\nimport {buildCommentBreadcrumbs} from './buildCommentBreadcrumbs'\n\nconst EMPTY_ARRAY: [] = []\n\ninterface BuildCommentThreadItemsProps {\n  comments: CommentDocument[]\n  currentUser: CurrentUser\n  documentValue: Partial<SanityDocument> | null\n  schemaType: SchemaType\n  type: CommentsType\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, type} = props\n  const parentComments = comments?.filter((c) => !c.parentCommentId)\n\n  // If the comments are \"task\" comments, just group them together as thread items\n  // without any validation of the comments.\n  if (type === 'task') {\n    const taskCommentItems = parentComments.map((parentComment) => {\n      const replies = comments?.filter((r) => r.parentCommentId === parentComment._id)\n      const commentsCount = [parentComment, ...replies].length\n      const hasReferencedValue = false\n\n      const item: CommentThreadItem = {\n        commentsCount,\n        parentComment,\n        replies,\n        threadId: parentComment.threadId,\n        hasReferencedValue,\n        breadcrumbs: EMPTY_ARRAY,\n        fieldPath: '',\n      }\n\n      return item\n    })\n\n    return taskCommentItems\n  }\n\n  // If the comments are \"field\" comments, we want to validate them against\n  // the document value and schema type.\n  if (type === 'field') {\n    const fieldCommentItems = parentComments.map((parentComment) => {\n      const crumbs = buildCommentBreadcrumbs({\n        currentUser,\n        documentValue,\n        fieldPath: parentComment.target.path?.field || '',\n        schemaType,\n      })\n\n      // NOTE: Keep this code commented out for now as we might want to use it later.\n      let hasTextSelection = false\n\n      // If the comment is a text selection comment, we need to make sure that\n      // we can successfully build a range decoration selection from it.\n      if (isTextSelectionComment(parentComment)) {\n        hasTextSelection = Boolean(\n          parentComment.target.path?.selection &&\n            parentComment.target.path.selection.value.some((v) => v.text),\n        )\n      }\n\n      // Check if the comment has an invalid breadcrumb. The breadcrumbs can be invalid if:\n      // - The field is hidden by conditional fields\n      // - The field is not found in the schema type\n      // - The field is not found in the document value (array items only)\n      const hasInvalidBreadcrumb = crumbs.some((bc) => bc.invalid)\n\n      // If the comment has an invalid breadcrumb or selection, we will omit it from the list.\n      if (hasInvalidBreadcrumb) return undefined\n\n      const replies = comments?.filter((r) => r.parentCommentId === parentComment._id)\n      const commentsCount = [parentComment, ...replies].length\n      const hasReferencedValue = hasTextSelection\n\n      const item: CommentThreadItem = {\n        breadcrumbs: crumbs,\n        commentsCount,\n        fieldPath: parentComment.target.path?.field || '',\n        parentComment,\n        replies,\n        threadId: parentComment.threadId,\n        hasReferencedValue,\n      }\n\n      return item\n    })\n\n    // We use the `Boolean` function to filter out any `undefined` items from the array.\n    return fieldCommentItems.filter(Boolean) as CommentThreadItem[]\n  }\n\n  return EMPTY_ARRAY\n}\n","import {type RangeDecoration} from '@portabletext/editor'\nimport {\n  applyPatches,\n  cleanupEfficiency,\n  type Diff,\n  DIFF_DELETE,\n  DIFF_EQUAL,\n  DIFF_INSERT,\n  makeDiff,\n  makePatches,\n  type Patch,\n} from '@sanity/diff-match-patch'\nimport {\n  isPortableTextSpan,\n  isPortableTextTextBlock,\n  type PortableTextBlock,\n  type PortableTextTextBlock,\n} from '@sanity/types'\n\nimport {isTextSelectionComment} from '../../helpers'\nimport {type CommentDocument, type CommentsTextSelectionItem} from '../../types'\n\n// This must be set high to avoid false positives\n// (for example, when there are multiple occurrences of the same word, and you delete the original commented word)\n// Don't set it above 15, as it will cause performance issues\nconst DMP_MARGIN = 15\n\nfunction diffText(current: string, next: string) {\n  const diff = makeDiff(current, next)\n  const diffs = cleanupEfficiency(diff)\n  const levenshtein = diffsLevenshtein(diffs)\n  return {patches: makePatches(current, diffs, {margin: DMP_MARGIN}), levenshtein}\n}\n\nfunction diffApply(current: string, patches: Patch[]) {\n  return applyPatches(patches, current, {\n    allowExceedingIndices: true,\n    margin: DMP_MARGIN,\n  })[0]\n}\n\nexport const CHILD_SYMBOL = '\\uF0D0'\nfunction toPlainTextWithChildSeparators(inputBlock: PortableTextTextBlock) {\n  return inputBlock.children\n    .map((child) => (isPortableTextSpan(child) ? child.text.replaceAll(CHILD_SYMBOL, ' ') : ''))\n    .join(CHILD_SYMBOL)\n}\n\nexport const COMMENT_INDICATORS = ['\\uF000', '\\uF001']\nconst COMMENT_INDICATORS_REGEX = new RegExp(`[${COMMENT_INDICATORS.join('')}]`, 'g')\n\nconst EMPTY_ARRAY: [] = []\n\n/**\n * @internal\n */\nexport interface BuildCommentsRangeDecorationsProps {\n  value: PortableTextBlock[] | undefined\n  comments: CommentDocument[]\n}\n\n/**\n * @internal\n */\nexport interface BuildCommentsRangeDecorationsResultItem {\n  selection: RangeDecoration['selection']\n  comment: CommentDocument\n  range: CommentsTextSelectionItem\n}\n\n/**\n * A function that builds range decoration selections from comments and their associated text.\n * @internal\n */\nexport function buildRangeDecorationSelectionsFromComments(\n  props: BuildCommentsRangeDecorationsProps,\n): BuildCommentsRangeDecorationsResultItem[] {\n  const {value, comments} = props\n\n  if (!value || value.length === 0) return EMPTY_ARRAY\n\n  const textSelections = comments.filter(isTextSelectionComment)\n  const decorators: BuildCommentsRangeDecorationsResultItem[] = []\n\n  textSelections.forEach((comment) => {\n    comment.target.path?.selection?.value.forEach((selectionMember) => {\n      const matchedBlock = value.find((block) => block._key === selectionMember._key)\n      if (!matchedBlock || !isPortableTextTextBlock(matchedBlock)) {\n        return\n      }\n      const selectionText = selectionMember.text.replaceAll(COMMENT_INDICATORS_REGEX, '')\n      const textWithChildSeparators = toPlainTextWithChildSeparators(matchedBlock)\n      const {patches} = diffText(selectionText, selectionMember.text)\n      const diffedText = diffApply(textWithChildSeparators, patches)\n      const startIndex = diffedText.indexOf(COMMENT_INDICATORS[0])\n      const endIndex = diffedText\n        .replaceAll(COMMENT_INDICATORS[0], '')\n        .indexOf(COMMENT_INDICATORS[1])\n      const textWithoutCommentTags = diffedText.replaceAll(COMMENT_INDICATORS_REGEX, '')\n      const oldCommentedText = selectionMember.text.slice(\n        selectionMember.text.indexOf(COMMENT_INDICATORS[0]) + 1,\n        selectionMember.text.indexOf(COMMENT_INDICATORS[1]),\n      )\n      const newCommentedText = textWithoutCommentTags.slice(startIndex, endIndex)\n      const {levenshtein} = diffText(newCommentedText, oldCommentedText)\n      const threshold = Math.round(newCommentedText.length + oldCommentedText.length / 2)\n\n      let nullSelection = false\n\n      if (newCommentedText.length === 0) {\n        nullSelection = true\n      }\n\n      if (levenshtein > threshold) {\n        nullSelection = true\n      }\n\n      // If there no longer is any text within the range, we don't need to create a decoration\n      if (startIndex + 1 === endIndex) {\n        nullSelection = true\n      }\n\n      if (startIndex !== -1 && endIndex !== -1) {\n        let childIndexAnchor = 0\n        let anchorOffset = 0\n        let childIndexFocus = 0\n        let focusOffset = 0\n        for (let i = 0; i < textWithoutCommentTags.length; i++) {\n          if (textWithoutCommentTags[i] === CHILD_SYMBOL) {\n            if (i <= startIndex) {\n              anchorOffset = -1\n              childIndexAnchor++\n            }\n            focusOffset = -1\n            childIndexFocus++\n          }\n          if (i < startIndex) {\n            anchorOffset++\n          }\n          if (i < startIndex + newCommentedText.length) {\n            focusOffset++\n          }\n          if (i === startIndex + newCommentedText.length) {\n            break\n          }\n        }\n\n        decorators.push({\n          selection: {\n            anchor: {\n              path: [\n                {_key: matchedBlock._key},\n                'children',\n                {_key: matchedBlock.children[childIndexAnchor]._key},\n              ],\n              offset: anchorOffset,\n            },\n            focus: {\n              path: [\n                {_key: matchedBlock._key},\n                'children',\n                {_key: matchedBlock.children[childIndexFocus]._key},\n              ],\n              offset: focusOffset,\n            },\n          },\n          comment,\n          range: {_key: matchedBlock._key, text: nullSelection ? '' : diffedText},\n        })\n      }\n    })\n  })\n  if (decorators.length === 0) return EMPTY_ARRAY\n  return decorators\n}\n\nexport interface BuildCommentRangeDecorationsProps {\n  value: PortableTextBlock[] | undefined\n  comment: CommentDocument\n}\n\ninterface ValidateTextSelectionCommentProps {\n  comment: CommentDocument\n  value: PortableTextBlock[]\n}\n\nexport function validateTextSelectionComment(props: ValidateTextSelectionCommentProps): boolean {\n  const {comment, value} = props\n  if (!isTextSelectionComment(comment)) return false\n\n  const selections = buildRangeDecorationSelectionsFromComments({comments: [comment], value})\n\n  return selections.length > 0\n}\n\nfunction diffsLevenshtein(diffs: Diff[]): number {\n  let levenshtein = 0\n  let insertions = 0\n  let deletions = 0\n  for (let x = 0; x < diffs.length; x++) {\n    const op = diffs[x][0]\n    const data = diffs[x][1]\n    switch (op) {\n      case DIFF_INSERT:\n        insertions += data.length\n        break\n      case DIFF_DELETE:\n        deletions += data.length\n        break\n      case DIFF_EQUAL:\n        // A deletion and an insertion is one substitution.\n        levenshtein += Math.max(insertions, deletions)\n        insertions = 0\n        deletions = 0\n        break\n      default:\n      // Do nothing\n    }\n  }\n  levenshtein += Math.max(insertions, deletions)\n  return levenshtein\n}\n","import {type RangeDecoration, type RangeDecorationOnMovedDetails} from '@portabletext/editor'\nimport {type PortableTextBlock} from '@sanity/types'\nimport {memo, useCallback, useEffect, useRef, useState} from 'react'\n\nimport {CommentInlineHighlightSpan} from '../../components'\nimport {applyInlineCommentIdAttr} from '../../hooks'\nimport {type CommentDocument} from '../../types'\nimport {buildRangeDecorationSelectionsFromComments} from './buildRangeDecorationSelectionsFromComments'\n\ninterface CommentRangeDecorationProps {\n  children: React.ReactNode\n  commentId: string\n  currentHoveredCommentId: string | null\n  onClick: (commentId: string) => void\n  onHoverEnd: (commentId: null) => void\n  onHoverStart: (commentId: string) => void\n  selectedThreadId: string | null\n  threadId: string\n}\n\nconst CommentRangeDecoration = memo(function CommentRangeDecoration(\n  props: CommentRangeDecorationProps,\n) {\n  const {\n    children,\n    commentId,\n    currentHoveredCommentId,\n    onClick,\n    onHoverEnd,\n    onHoverStart,\n    selectedThreadId,\n    threadId,\n  } = props\n  const decoratorRef = useRef<HTMLSpanElement | null>(null)\n  const [isNested, setIsNested] = useState(false)\n  const [parentCommentId, setParentCommentId] = useState<string | null>(null)\n\n  useEffect(() => {\n    // Get the previous and next sibling of the decorator element\n    const prevEl = decoratorRef.current?.previousSibling as HTMLElement | null\n    const nextEl = decoratorRef.current?.nextSibling as HTMLElement | null\n\n    // If there is no previous or next sibling, then the decorator is not nested\n    if (!prevEl || !nextEl) {\n      setIsNested(false)\n      return\n    }\n\n    // We use the `applyInlineCommentIdAttr` to get the key of the data attribute\n    // used for the inline comment id on the decorator element.\n    const [key] = Object.keys(applyInlineCommentIdAttr(''))\n\n    const prevId = prevEl.getAttribute(key)\n    const nextId = nextEl.getAttribute(key)\n\n    const isEqual = prevId === nextId\n\n    const isNestedDecorator = Boolean(prevId && nextId && isEqual)\n    setParentCommentId(isNestedDecorator ? prevId : null)\n\n    setIsNested(isNestedDecorator)\n  }, [])\n\n  const handleMouseEnter = useCallback(() => onHoverStart(commentId), [commentId, onHoverStart])\n  const handleMouseLeave = useCallback(() => onHoverEnd(null), [onHoverEnd])\n  const handleClick = useCallback(() => onClick(commentId), [commentId, onClick])\n\n  const hovered =\n    currentHoveredCommentId === commentId ||\n    (currentHoveredCommentId === parentCommentId && isNested)\n\n  const selected = selectedThreadId === threadId\n\n  return (\n    <CommentInlineHighlightSpan\n      isAdded\n      isHovered={hovered || selected}\n      isNested={isNested}\n      onClick={handleClick}\n      onMouseEnter={handleMouseEnter}\n      onMouseLeave={handleMouseLeave}\n      ref={decoratorRef}\n      {...applyInlineCommentIdAttr(threadId)}\n    >\n      {children}\n    </CommentInlineHighlightSpan>\n  )\n})\nCommentRangeDecoration.displayName = 'Memo(CommentRangeDecoration)'\n\ninterface BuildRangeDecorationsProps {\n  comments: CommentDocument[]\n  currentHoveredCommentId: string | null\n  onDecorationClick: (commentId: string) => void\n  onDecorationHoverEnd: (commentId: null) => void\n  onDecorationHoverStart: (commentId: string) => void\n  onDecorationMoved: (details: RangeDecorationOnMovedDetails) => void\n  selectedThreadId: string | null\n  value: PortableTextBlock[] | undefined\n}\n\n/**\n * @internal\n */\nexport function buildCommentRangeDecorations(props: BuildRangeDecorationsProps) {\n  const {\n    comments,\n    currentHoveredCommentId,\n    onDecorationClick,\n    onDecorationHoverEnd,\n    onDecorationHoverStart,\n    onDecorationMoved,\n    selectedThreadId,\n    value,\n  } = props\n  const rangeSelections = buildRangeDecorationSelectionsFromComments({comments, value})\n\n  const decorations = rangeSelections.map(({selection, comment, range}) => {\n    const decoration: RangeDecoration = {\n      component: ({children}) => (\n        <CommentRangeDecoration\n          commentId={comment._id}\n          currentHoveredCommentId={currentHoveredCommentId}\n          onClick={onDecorationClick}\n          onHoverEnd={onDecorationHoverEnd}\n          onHoverStart={onDecorationHoverStart}\n          selectedThreadId={selectedThreadId}\n          threadId={comment.threadId}\n        >\n          {children}\n        </CommentRangeDecoration>\n      ),\n      onMoved: onDecorationMoved,\n      selection,\n      payload: {\n        commentId: comment._id,\n        range,\n      },\n    }\n    return decoration\n  })\n  return decorations\n}\n","import {type EditorSelection} from '@portabletext/editor'\nimport {toPlainText} from '@portabletext/react'\nimport {\n  isKeySegment,\n  isPortableTextSpan,\n  isPortableTextTextBlock,\n  type PortableTextBlock,\n} from '@sanity/types'\n\nimport {type CommentTextSelection} from '../../types'\nimport {COMMENT_INDICATORS} from './buildRangeDecorationSelectionsFromComments'\n\ninterface BuildSelectionFromFragmentProps {\n  fragment: PortableTextBlock[]\n  value: PortableTextBlock[]\n  selection: EditorSelection\n}\n\n/**\n * @internal\n */\nexport function buildTextSelectionFromFragment(\n  props: BuildSelectionFromFragmentProps,\n): CommentTextSelection {\n  const {fragment, value, selection} = props\n  if (!selection) {\n    throw new Error('Selection is required')\n  }\n  const normalizedSelection: EditorSelection = selection.backward\n    ? {backward: false, anchor: selection.focus, focus: selection.anchor}\n    : selection\n  const textSelection: CommentTextSelection = {\n    type: 'text',\n    value: fragment.map((fragmentBlock) => {\n      const originalBlock = value.find((b) => b._key === fragmentBlock._key)\n      if (!isPortableTextTextBlock(originalBlock)) {\n        return {\n          _key: fragmentBlock._key,\n          text: '',\n        }\n      }\n      const anchorBlockKey =\n        isKeySegment(normalizedSelection.anchor.path[0]) && normalizedSelection.anchor.path[0]._key\n      const focusBlockKey =\n        isKeySegment(normalizedSelection.focus.path[0]) && normalizedSelection.focus.path[0]._key\n      const fragmentBlockText = toPlainText([fragmentBlock])\n      const fragmentStartSpan = isPortableTextTextBlock(fragmentBlock)\n        ? fragmentBlock.children[0]\n        : undefined\n      const fragmentEndSpan = isPortableTextTextBlock(fragmentBlock)\n        ? fragmentBlock.children[fragmentBlock.children.length - 1]\n        : undefined\n      let originalTextBeforeSelection = ''\n      let startChildIndex = -1\n      if (anchorBlockKey === originalBlock._key) {\n        for (const child of originalBlock.children) {\n          startChildIndex++\n          if (child._key === fragmentStartSpan?._key) {\n            originalTextBeforeSelection +=\n              (isPortableTextSpan(child) &&\n                child.text.slice(0, Math.max(0, normalizedSelection.anchor.offset))) ||\n              ''\n            break\n          }\n          originalTextBeforeSelection += child.text\n        }\n      }\n      let originalTextAfterSelection = ''\n      if (focusBlockKey === originalBlock._key) {\n        for (const child of originalBlock.children.slice(startChildIndex).reverse()) {\n          if (child._key === fragmentEndSpan?._key) {\n            originalTextAfterSelection =\n              ((isPortableTextSpan(child) &&\n                child.text.slice(normalizedSelection.focus.offset, child.text.length)) ||\n                '') + originalTextAfterSelection\n            break\n          }\n          originalTextAfterSelection = child.text + originalTextAfterSelection\n        }\n      }\n      return {\n        _key: originalBlock._key,\n        text: `${originalTextBeforeSelection}${COMMENT_INDICATORS[0]}${fragmentBlockText}${COMMENT_INDICATORS[1]}${originalTextAfterSelection}`,\n      }\n    }),\n  }\n\n  return textSelection\n}\n","import {type 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 {type MouseEvent, type ReactNode} from 'react'\n\nimport {type Middleware} from './types'\n\nconst URL_REGEX = /\\b(https?:\\/\\/[^\\s,()]+(?:\\.[^\\s,()]+)*|www\\.[^\\s,()]+\\.[^\\s,()]{2,})\\b/g\n\nexport function onClick(event: MouseEvent<HTMLAnchorElement>): void {\n  event.stopPropagation()\n}\n\nfunction createLinkElement(url: string): ReactNode {\n  const href = url.startsWith('http') ? url : `https://${url}`\n\n  return (\n    <a key={url} href={href} target=\"_blank\" rel=\"noopener noreferrer\" onClick={onClick}>\n      {url}\n    </a>\n  )\n}\n\n/**\n * Middleware that creates link elements for URLs in the text\n */\nexport const linkMiddleware: Middleware = (node) => {\n  if (typeof node === 'string') {\n    const parts = node.split(URL_REGEX)\n\n    return parts.flatMap((part) => {\n      if (part.match(URL_REGEX)) {\n        return createLinkElement(part)\n      }\n\n      return part\n    })\n  }\n\n  return node\n}\n","import {type ReactNode} from 'react'\n\nimport {linkMiddleware} from './linkMiddleware'\nimport {type Middleware} from './types'\n\nconst middlewares: Middleware[] = [linkMiddleware]\n\n/**\n * A function that transforms a ReactNode using a set of middlewares\n */\nexport function transformChildren(node: ReactNode): ReactNode {\n  if (!Array.isArray(node)) return node\n\n  return node.flatMap((item) => {\n    let transformedItem: ReactNode[] = [item]\n\n    for (const middleware of middlewares) {\n      transformedItem = transformedItem.flatMap(middleware)\n    }\n\n    return transformedItem\n  })\n}\n","import {type CommentDocument} from '../types'\n\nfunction weakenReferences(node: unknown): unknown | undefined {\n  // Check if the node is directly a reference\n  if (node && typeof node === 'object' && node.hasOwnProperty('_ref')) {\n    // Return a new object with the _weak property added\n    return {...node, _weak: true}\n  } else if (Array.isArray(node)) {\n    // Check if the node is an array\n    // Process each item in the array\n    return node.map((item) => weakenReferences(item))\n  } else if (node && typeof node === 'object') {\n    // For all other objects, create a new object to accumulate the results\n    const result: Record<string, unknown> = {}\n\n    // Process each property in the object\n    Object.keys(node).forEach((key) => {\n      const value = (node as Record<string, unknown>)[key]\n      if (typeof value === 'object' && value !== null) {\n        // Recursively apply the function to object properties or array items\n        result[key] = weakenReferences(value)\n      } else {\n        // Directly copy other values\n        result[key] = value\n      }\n    })\n    return result\n  }\n\n  // Return the original value if it is not an object\n  return node\n}\n\n/**\n * @internal\n */\nexport function weakenReferencesInContentSnapshot(\n  snapshot: CommentDocument['contentSnapshot'],\n): CommentDocument['contentSnapshot'] {\n  return weakenReferences(snapshot)\n}\n","import {type SanityClient} from '@sanity/client'\nimport {type CurrentUser} from '@sanity/types'\nimport {uuid} from '@sanity/uuid'\n\nimport {type Tool} from '../../../config'\nimport {\n  type CommentContext,\n  type CommentCreatePayload,\n  type CommentDocument,\n  type CommentIntentGetter,\n  type CommentPostPayload,\n} from '../../types'\nimport {weakenReferencesInContentSnapshot} from '../../utils'\n\ninterface CreateOperationProps {\n  activeTool: Tool | undefined\n  client: SanityClient | null\n  comment: CommentCreatePayload\n  currentUser: CurrentUser\n  dataset: string\n  documentId: string\n  documentRevisionId?: string\n  documentType: string\n  documentVersionId?: string\n  getComment?: (id: string) => CommentDocument | undefined\n  getIntent?: CommentIntentGetter\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  createAddonDataset: () => Promise<SanityClient | null>\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    documentRevisionId,\n    documentType,\n    documentVersionId,\n    getIntent,\n    getNotificationValue,\n    getThreadLength,\n    onCreate,\n    onCreateError,\n    projectId,\n    createAddonDataset,\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  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  let nextComment: CommentPostPayload | undefined\n\n  if (comment.type === 'task') {\n    nextComment = {\n      _id: commentId,\n      _type: 'comment',\n      authorId,\n      message: comment.message,\n      lastEditedAt: undefined,\n      parentCommentId: comment.parentCommentId,\n      status: comment.status,\n      threadId: comment.threadId,\n      reactions: comment.reactions,\n\n      context: {\n        payload: {\n          workspace,\n        },\n        notification: comment.context.notification,\n        tool: activeTool?.name || '',\n      },\n\n      target: {\n        document: {\n          _ref: documentId,\n          _type: 'reference',\n          _weak: true,\n        },\n        documentVersionId,\n        documentType,\n      },\n    }\n  }\n\n  if (comment.type === 'field') {\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 intent = getIntent?.({id: documentId, type: documentType, path: comment.fieldPath})\n\n    // If the content snapshot contains a reference, we need to weaken it.\n    // This prevents Content Lake from validating the references, which could,\n    // for example, prevent the deletion of the document that the reference\n    // in the content snapshot points to.\n    const contentSnapshot = weakenReferencesInContentSnapshot(comment.contentSnapshot)\n\n    nextComment = {\n      _id: commentId,\n      _type: 'comment',\n      authorId,\n      message: comment.message,\n      lastEditedAt: undefined,\n      parentCommentId: comment.parentCommentId,\n      status: comment.status,\n      threadId: comment.threadId,\n      reactions: comment.reactions,\n\n      context: {\n        payload: {\n          workspace,\n        },\n        intent,\n        notification,\n        tool: activeTool?.name || '',\n      },\n\n      contentSnapshot,\n\n      target: {\n        documentRevisionId: documentRevisionId || '',\n\n        path: {\n          field: comment.fieldPath,\n          selection: comment.selection,\n        },\n        document: {\n          _dataset: dataset,\n          _projectId: projectId,\n          _ref: documentId,\n          _type: 'crossDatasetReference',\n          _weak: true,\n        },\n        documentType,\n        documentVersionId,\n      },\n    }\n  }\n\n  if (!nextComment) return\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      const newAddonClient = await createAddonDataset()\n      if (!newAddonClient) {\n        throw new Error('Failed to create addon dataset client')\n      }\n      await newAddonClient.create(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 {type SanityClient} from '@sanity/client'\nimport {type CurrentUser} from '@sanity/types'\n\nimport {\n  type CommentDocument,\n  type CommentReactionItem,\n  type CommentReactionOption,\n  type CommentReactionShortNames,\n  type CommentUpdatePayload,\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: CommentUpdatePayload) => 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 {type 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 {type SanityClient} from '@sanity/client'\nimport {uuid} from '@sanity/uuid'\nimport {throttle, type ThrottleSettings} from 'lodash'\n\nimport {type CommentUpdatePayload} from '../../types'\n\nconst THROTTLE_TIME_MS = 1000\n\nconst THROTTLE_SETTINGS: ThrottleSettings = {\n  trailing: true,\n  leading: false,\n}\n\nconst throttleFunctionsMap = new Map()\n\n/*\n * Retrieves or creates a unique throttled function for each comment based on its ID.\n * This is necessary because using a single throttled function for all updates would\n * mean subsequent calls within the throttle period could be ignored, which isn't ideal\n * when updates are not uniform across all operations. By creating a unique throttled\n * function for each ID, we ensure each comment update operation is individually throttled,\n * allowing for controlled execution while preventing rapid, consecutive calls from\n * bypassing the intended throttle behavior.\n */\nfunction getThrottledFunction(id: string) {\n  if (!throttleFunctionsMap.has(id)) {\n    const throttledFunction = throttle(postCommentUpdate, THROTTLE_TIME_MS, THROTTLE_SETTINGS)\n    throttleFunctionsMap.set(id, throttledFunction)\n    return throttledFunction\n  }\n  return throttleFunctionsMap.get(id)\n}\n\ninterface UpdateOperationProps {\n  client: SanityClient\n  comment: CommentUpdatePayload\n  throttled: boolean | undefined\n  id: string\n  onUpdate?: (id: string, comment: CommentUpdatePayload) => void\n  transactionId: string | undefined\n}\n\nasync function postCommentUpdate(props: UpdateOperationProps) {\n  const {client, id, comment, transactionId: transactionIdProp, onUpdate} = props\n\n  // Fall back to generating a new transaction id if none is provided\n  const transactionId = transactionIdProp || uuid()\n  const patch = client?.patch(id).set(comment)\n  const transaction = client.transaction().transactionId(transactionId).patch(patch)\n\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 transaction.commit()\n\n    await client\n      .patch({query: `*[_type == \"comment\" && parentCommentId == \"${id}\"]`})\n      .set({\n        status: comment.status,\n      })\n      .commit()\n  } else {\n    // Else we'll just update the comment itself\n    await transaction.commit()\n  }\n\n  // Remove the throttled function from the map when the operation is complete\n  // to prevent memory leaks.\n  throttleFunctionsMap.delete(id)\n}\n\nexport async function updateOperation(props: UpdateOperationProps): Promise<void> {\n  const {id, comment, throttled: throttledProp} = props\n\n  const hasEditedMessage = 'message' in comment\n\n  const editedComment: CommentUpdatePayload = {\n    ...comment,\n    lastEditedAt: new Date().toISOString(),\n  }\n\n  const nextComment: CommentUpdatePayload = hasEditedMessage ? editedComment : comment\n\n  if (!throttledProp) {\n    await postCommentUpdate({\n      ...props,\n      comment: nextComment,\n    })\n    return\n  }\n\n  const throttlePostCommentUpdate = getThrottledFunction(id)\n  await throttlePostCommentUpdate({\n    ...props,\n    comment: nextComment,\n  })\n}\n","import {type SanityClient} from '@sanity/client'\nimport {type CurrentUser, type SchemaType} from '@sanity/types'\nimport {uuid} from '@sanity/uuid'\nimport {useCallback, useMemo} from 'react'\nimport {useRouterState} from 'sanity/router'\n\nimport {useTools} from '../../../hooks'\nimport {\n  type CommentCreatePayload,\n  type CommentDocument,\n  type CommentOperations,\n  type CommentPostPayload,\n  type CommentReactionOption,\n  type CommentUpdateOperationOptions,\n  type CommentUpdatePayload,\n} from '../../types'\nimport {useCommentsIntent} from '../useCommentsIntent'\nimport {useNotificationTarget} from '../useNotificationTarget'\nimport {createOperation} from './createOperation'\nimport {reactOperation} from './reactOperation'\nimport {removeOperation} from './removeOperation'\nimport {updateOperation} from './updateOperation'\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  documentRevisionId?: string\n  documentType: string\n  documentVersionId?: 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  onRemove?: (id: string) => void\n  onTransactionStart: (commentDocumentId: string, transactionId: string) => void\n  onUpdate?: (id: string, comment: CommentUpdatePayload) => void\n  projectId: string\n  createAddonDataset: () => Promise<SanityClient | null>\n  schemaType: SchemaType | undefined\n  workspace: string\n  getCommentLink?: (commentId: string) => string\n}\n\nexport function useCommentOperations(\n  opts: CommentOperationsHookOptions,\n): CommentOperationsHookValue {\n  const {\n    client,\n    currentUser,\n    dataset,\n    documentId,\n    documentRevisionId,\n    documentType,\n    documentVersionId,\n    getComment,\n    getThreadLength,\n    onCreate,\n    onCreateError,\n    onRemove,\n    onTransactionStart,\n    onUpdate,\n    projectId,\n    createAddonDataset,\n    workspace,\n    getCommentLink,\n  } = opts\n\n  const getIntent = useCommentsIntent()\n\n  const activeToolName = useRouterState(\n    useCallback(\n      (routerState) => (typeof routerState.tool === 'string' ? routerState.tool : undefined),\n      [],\n    ),\n  )\n  const tools = useTools()\n\n  const activeTool = useMemo(\n    () => tools.find((tool) => tool.name === activeToolName),\n    [activeToolName, tools],\n  )\n  const {getNotificationValue} = useNotificationTarget({documentId, documentType, getCommentLink})\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        documentRevisionId,\n        documentType,\n        documentVersionId,\n        getIntent,\n        getNotificationValue,\n        getThreadLength,\n        onCreate,\n        onCreateError,\n        projectId,\n        createAddonDataset,\n        workspace,\n      })\n    },\n    [\n      activeTool,\n      client,\n      currentUser,\n      dataset,\n      documentId,\n      documentRevisionId,\n      documentType,\n      documentVersionId,\n      getIntent,\n      getNotificationValue,\n      getThreadLength,\n      onCreate,\n      onCreateError,\n      projectId,\n      createAddonDataset,\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 handleUpdate = useCallback(\n    async (\n      id: string,\n      comment: CommentUpdatePayload,\n      updateOpts?: CommentUpdateOperationOptions,\n    ) => {\n      if (!client) return\n      const {throttled} = updateOpts || {}\n\n      // Generate a new transaction ID to use for the update operation transaction\n      const nextTransactionId = uuid()\n\n      // Pass the ID of the comment document and the new transaction ID to the\n      // onTransactionStart callback. This is used by consumers to track the\n      // transaction state of the comment document. That is, when a real time\n      // listener event is received, the consumer can check if the received\n      // transaction ID is the latest for the received comment ID and determine\n      // whether the result in the real time event should be used to update the\n      // comment state or not.\n      onTransactionStart(id, nextTransactionId)\n\n      await updateOperation({\n        client,\n        comment,\n        throttled,\n        id,\n        onUpdate,\n        transactionId: nextTransactionId,\n      })\n    },\n    [client, onTransactionStart, 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        react: handleReact,\n        remove: handleRemove,\n        update: handleUpdate,\n      } satisfies CommentOperations,\n    }),\n    [handleCreate, handleRemove, handleUpdate, handleReact],\n  )\n}\n","import {useContext} from 'react'\nimport {CommentsContext} from 'sanity/_singletons'\n\nimport {type CommentsContextValue} from '../context/comments/types'\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 {CommentsAuthoringPathContext} from 'sanity/_singletons'\n\nimport {type CommentsAuthoringPathContextValue} from '../context'\n\n/**\n * @beta\n * @hidden\n */\nexport function useCommentsAuthoringPath(): CommentsAuthoringPathContextValue {\n  const value = useContext(CommentsAuthoringPathContext)\n\n  if (!value) {\n    throw new Error('useCommentsAuthoringPath: missing context value')\n  }\n\n  return value\n}\n","import {useContext} from 'react'\nimport {CommentsEnabledContext} from 'sanity/_singletons'\n\nimport {type CommentsEnabledContextValue} from '../context/enabled/types'\n\n/**\n * @beta\n * @hidden\n */\nexport function useCommentsEnabled(): CommentsEnabledContextValue {\n  return useContext(CommentsEnabledContext)\n}\n","import {useContext} from 'react'\nimport {CommentsOnboardingContext} from 'sanity/_singletons'\n\nimport {type 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 {useCallback, useEffect, useMemo, useState} from 'react'\nimport scrollIntoViewIfNeeded, {type StandardBehaviorOptions} from 'scroll-into-view-if-needed'\n\nconst BASE_SCROLL_OPTIONS: StandardBehaviorOptions = {\n  behavior: 'smooth',\n  inline: 'center',\n  scrollMode: 'if-needed',\n}\n\nconst GROUP_SCROLL_OPTIONS: StandardBehaviorOptions = {\n  ...BASE_SCROLL_OPTIONS,\n  block: 'start',\n}\n\nconst INLINE_COMMENT_SCROLL_OPTIONS: StandardBehaviorOptions = {\n  ...BASE_SCROLL_OPTIONS,\n  block: 'center',\n}\n\nconst SCROLL_TO_FIELD_OPTIONS: StandardBehaviorOptions = {\n  ...BASE_SCROLL_OPTIONS,\n  block: 'center',\n}\n\nconst SCROLL_TO_COMMENT_OPTIONS: StandardBehaviorOptions = {\n  ...BASE_SCROLL_OPTIONS,\n  block: 'center',\n}\n\nconst SCROLL_OPTIONS_BY_TYPE: Record<ScrollTargetTypes, StandardBehaviorOptions> = {\n  'comment': SCROLL_TO_COMMENT_OPTIONS,\n  'field': SCROLL_TO_FIELD_OPTIONS,\n  'group': GROUP_SCROLL_OPTIONS,\n  'inline-comment': INLINE_COMMENT_SCROLL_OPTIONS,\n}\n\n/**\n * A utility function that can be used to generate a valid attribute value\n * based on the given ID.\n *\n * Generate a value that can be used as an attribute value in HTML based\n * on the given ID. This is needed because, when we use the path of a field\n * as a data attribute value, we need to escape the value so that it can be\n * queried using `querySelector`.\n *\n * Example:\n *\n * ```js\n * const validId = generateValidAttrValue('[field[_key==\"title\"]')\n *\n * return <div data-field-id={validId}>...</div>\n * ```\n */\nfunction generateValidAttrValue(id: string): string {\n  const symbolsToRemove = /[[\\]_\"_=.]/g\n\n  const result = id.replace(symbolsToRemove, '')\n\n  return result\n}\n\nexport function applyCommentIdAttr(id: string): Record<'data-comments-comment-id', string> {\n  return {\n    'data-comments-comment-id': generateValidAttrValue(id),\n  }\n}\n\nexport function applyCommentsFieldAttr(id: string): Record<'data-comments-field-id', string> {\n  return {\n    'data-comments-field-id': generateValidAttrValue(id),\n  }\n}\n\nexport function applyCommentsGroupAttr(id: string): Record<'data-comments-group-id', string> {\n  return {\n    'data-comments-group-id': generateValidAttrValue(id),\n  }\n}\n\nexport function applyInlineCommentIdAttr(\n  id: string,\n): Record<'data-comments-inline-comment-id', string> {\n  return {\n    'data-comments-inline-comment-id': generateValidAttrValue(id),\n  }\n}\n\ninterface CommentsScrollHookValue {\n  /**\n   * Scroll to the comment with the given ID.\n   */\n  scrollToComment: (commentId: string) => void\n  /**\n   * Scroll to the field with the given ID.\n   */\n  scrollToField: (fieldId: string) => void\n  /**\n   * Scroll to the group with the given ID.\n   */\n  scrollToGroup: (groupId: string) => void\n  /**\n   * Scroll to the inline comment with the given ID.\n   */\n  scrollToInlineComment: (commentId: string) => void\n}\n\ninterface CommentsScrollHookOptions {\n  boundaryElement?: HTMLElement | null\n}\n\ntype ScrollTargetTypes = 'comment' | 'field' | 'group' | 'inline-comment'\ninterface ScrollTarget {\n  type: ScrollTargetTypes\n  id: string\n}\n\nexport function useCommentsScroll(opts?: CommentsScrollHookOptions): CommentsScrollHookValue {\n  const {boundaryElement} = opts || {}\n  const [scrollTarget, setScrollTarget] = useState<ScrollTarget | null>(null)\n\n  const scrollOpts: StandardBehaviorOptions = useMemo(() => {\n    const options = SCROLL_OPTIONS_BY_TYPE[scrollTarget?.type || 'comment']\n\n    return {\n      ...options,\n      boundary: boundaryElement,\n    }\n  }, [boundaryElement, scrollTarget?.type])\n\n  const handleScrollToComment = useCallback((commentId: string) => {\n    setScrollTarget({type: 'comment', id: commentId})\n  }, [])\n\n  const handleScrollToGroup = useCallback((threadId: string) => {\n    setScrollTarget({type: 'group', id: threadId})\n  }, [])\n\n  const handleScrollToField = useCallback((fieldPath: string) => {\n    setScrollTarget({type: 'field', id: fieldPath})\n  }, [])\n\n  const handleScrollToInlineComment = useCallback((commentId: string) => {\n    setScrollTarget({type: 'inline-comment', id: commentId})\n  }, [])\n\n  useEffect(() => {\n    const raf = requestAnimationFrame(() => {\n      if (!scrollTarget) return\n\n      const {type, id} = scrollTarget\n\n      const element = document?.querySelector(\n        `[data-comments-${type}-id=\"${generateValidAttrValue(id)}\"]`,\n      )\n\n      if (element) {\n        scrollIntoViewIfNeeded(element, scrollOpts)\n      }\n    })\n\n    return () => {\n      cancelAnimationFrame(raf)\n    }\n  }, [scrollOpts, scrollTarget])\n\n  const value = useMemo(\n    (): CommentsScrollHookValue => ({\n      scrollToComment: handleScrollToComment,\n      scrollToField: handleScrollToField,\n      scrollToGroup: handleScrollToGroup,\n      scrollToInlineComment: handleScrollToInlineComment,\n    }),\n    [handleScrollToComment, handleScrollToField, handleScrollToGroup, handleScrollToInlineComment],\n  )\n\n  return value\n}\n","import {useContext} from 'react'\nimport {CommentsSelectedPathContext} from 'sanity/_singletons'\n\nimport {type CommentsSelectedPathContextValue} from '../context'\n\n/**\n * @internal\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 {defineEvent} from '@sanity/telemetry'\n\nimport {type CommentStatus} from '../types'\n\nexport const CommentLinkCopied = defineEvent({\n  name: 'Comment Link Copied',\n  version: 1,\n  description: 'The link to a comment is copied',\n})\n\nexport const CommentViewedFromLink = defineEvent({\n  name: 'Comment Viewed From Link',\n  version: 1,\n  description: 'A comment is viewed from a link',\n})\n\nexport const CommentListViewChanged = defineEvent<{view: CommentStatus}>({\n  name: 'Comment List View Changed',\n  version: 1,\n  description: 'The view of the comment list is changed',\n})\n","import {useTelemetry} from '@sanity/telemetry/react'\nimport {useCallback, useMemo} from 'react'\n\nimport {\n  CommentLinkCopied,\n  CommentListViewChanged,\n  CommentViewedFromLink,\n} from '../__telemetry__/comments.telemetry'\nimport {type CommentStatus} from '../types'\n\ninterface CommentsTelemetryHookValue {\n  commentLinkCopied: () => void\n  commentListViewChanged: (view: CommentStatus) => void\n  commentViewedFromLink: () => void\n}\n\n/** @internal */\nexport function useCommentsTelemetry(): CommentsTelemetryHookValue {\n  const telemetry = useTelemetry()\n\n  const commentLinkCopied = useCallback(() => {\n    telemetry.log(CommentLinkCopied)\n  }, [telemetry])\n\n  const commentViewedFromLink = useCallback(() => {\n    telemetry.log(CommentViewedFromLink)\n  }, [telemetry])\n\n  const commentListViewChanged = useCallback(\n    (view: CommentStatus) => {\n      telemetry.log(CommentListViewChanged, {view})\n    },\n    [telemetry],\n  )\n\n  return useMemo(\n    (): CommentsTelemetryHookValue => ({\n      commentLinkCopied,\n      commentListViewChanged,\n      commentViewedFromLink,\n    }),\n    [commentLinkCopied, commentListViewChanged, commentViewedFromLink],\n  )\n}\n","import {useContext} from 'react'\nimport {CommentsUpsellContext} from 'sanity/_singletons'\n\nimport {type CommentsUpsellContextValue} from '../context/upsell/types'\n\nexport function useCommentsUpsell(): CommentsUpsellContextValue {\n  const value = useContext(CommentsUpsellContext)\n\n  if (!value) {\n    // Instead of throwing, we return a dummy value to avoid breaking the CommentsField implementation, given the context is optional.\n    return {\n      upsellData: null,\n      handleOpenDialog: () => null,\n      upsellDialogOpen: false,\n      telemetryLogs: {\n        dialogSecondaryClicked: () => null,\n        dialogPrimaryClicked: () => null,\n        panelViewed: () => null,\n        panelDismissed: () => null,\n        panelPrimaryClicked: () => null,\n        panelSecondaryClicked: () => null,\n      },\n    }\n  }\n\n  return value\n}\n","import {useMemo} from 'react'\n\nimport {useFeatureEnabled} from '../../hooks'\nimport {useSource} from '../../studio'\nimport {getPublishedId} from '../../util'\nimport {type CommentsUIMode} from '../types'\n\ntype ResolveCommentsEnabled =\n  | {\n      enabled: false\n      mode: null\n    }\n  | {\n      enabled: true\n      mode: CommentsUIMode\n    }\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(\n  documentId: string,\n  documentType: string,\n): ResolveCommentsEnabled {\n  // Check if the projects plan has the feature enabled\n  const {enabled: featureEnabled, isLoading, error} = useFeatureEnabled('studioComments')\n\n  const {enabled} = useSource().document.comments\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 value: ResolveCommentsEnabled = useMemo(() => {\n    // The feature is not enabled if:\n    // - the feature is loading (`isLoading` is true)\n    // - the feature is not enabled in the project (`enabledFromConfig` is false)\n    // - there's an error when fetching the list of enabled features (`error` is set)\n    if (isLoading || !enabledFromConfig || error) {\n      return {enabled: false, mode: null}\n    }\n\n    return {\n      enabled: true,\n      mode: featureEnabled ? 'default' : 'upsell',\n    }\n  }, [isLoading, enabledFromConfig, error, featureEnabled])\n\n  return value\n}\n","import {type CommentDocument, type 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 {type ListenEvent, type ListenOptions, type SanityClient} from '@sanity/client'\nimport {useCallback, useEffect, useMemo, useReducer, useRef, useState} from 'react'\nimport {catchError, of} from 'rxjs'\n\nimport {type ReleaseId} from '../../perspective/types'\nimport {getPublishedId} from '../../util'\nimport {type CommentDocument, type Loadable} from '../types'\nimport {commentsReducer, type CommentsReducerAction, type CommentsReducerState} from './reducer'\n\ntype DocumentId = string\ntype TransactionId = string\n\nexport interface CommentsStoreOptions {\n  client: SanityClient | null\n  documentId: string\n  onLatestTransactionIdReceived: (documentId: DocumentId) => void\n  transactionsIdMap: Map<DocumentId, TransactionId>\n  releaseId?: ReleaseId\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  includeAllVersions: true,\n  visibility: 'query',\n  tag: 'comments-store',\n}\n\nexport const SORT_FIELD = '_createdAt'\n\nexport const SORT_ORDER = 'desc'\n\nconst QUERY_FILTERS = [`_type == \"comment\"`, `target.document._ref == $documentId`]\nconst VERSION_FILTER = `target.documentVersionId==$documentVersionId`\nconst NO_VERSION_FILTER = `!defined(target.documentVersionId)`\n\nconst QUERY_PROJECTION = `{\n  _createdAt,\n  _id,\n  authorId,\n  contentSnapshot,\n  context,\n  lastEditedAt,\n  message,\n  parentCommentId,\n  reactions,\n  status,\n  target,\n  threadId\n}`\n\n// Newest comments first\nconst QUERY_SORT_ORDER = `order(${SORT_FIELD} ${SORT_ORDER})`\n\nexport function useCommentsStore(opts: CommentsStoreOptions): CommentsStoreReturnType {\n  const {client, documentId, onLatestTransactionIdReceived, transactionsIdMap, releaseId} = opts\n\n  const filters = [...QUERY_FILTERS, releaseId ? VERSION_FILTER : NO_VERSION_FILTER].join(' && ')\n  const query = useMemo(() => `*[${filters}] ${QUERY_PROJECTION} | ${QUERY_SORT_ORDER}`, [filters])\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 didInitialFetch = useRef<boolean>(false)\n\n  const params = useMemo(\n    () => ({\n      documentId: getPublishedId(documentId),\n      ...(releaseId ? {documentVersionId: releaseId} : {}),\n    }),\n    [documentId, releaseId],\n  )\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, query])\n\n  const handleListenerEvent = useCallback(\n    async (event: ListenEvent<Record<string, CommentDocument>>) => {\n      // Fetch all comments on initial connection\n      if (event.type === 'welcome' && !didInitialFetch.current) {\n        setLoading(true)\n        await initialFetch()\n        setLoading(false)\n        didInitialFetch.current = true\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        didInitialFetch.current = false\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          const id = event.result?._id || ''\n          const transactionId = event.transactionId\n          const latestTransactionId = transactionsIdMap.get(id)\n          const isLatestTransaction = transactionId === latestTransactionId\n\n          // If we have a transaction id stored for the received comment id, but the\n          // received transaction id is not the latest, we don't want to update the\n          // comment in the store. This is to avoid that the UI is updated with an old\n          // transaction id when multiple transactions are started in a short time span.\n          if (!isLatestTransaction && latestTransactionId) return\n\n          if (updatedComment) {\n            dispatch({\n              type: 'COMMENT_UPDATED',\n              payload: updatedComment,\n            })\n\n            // If the received transaction id is the latest, we'll call the\n            // `onLatestTransactionIdReceived` callback to let the parent consumer\n            // know that the transaction id has been received.\n            if (isLatestTransaction) {\n              onLatestTransactionIdReceived(id)\n            }\n          }\n        }\n      }\n    },\n    [initialFetch, onLatestTransactionIdReceived, transactionsIdMap],\n  )\n\n  const listener$ = useMemo(() => {\n    if (!client) return of()\n\n    const events$ = client.observable.listen(`*[${filters}]`, params, LISTEN_OPTIONS).pipe(\n      catchError((err) => {\n        setError(err)\n        return of(err)\n      }),\n    )\n\n    return events$\n  }, [client, filters, 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 {type Path} from '@sanity/types'\nimport {orderBy} from 'lodash'\nimport {memo, type ReactNode, useCallback, useMemo, useState} from 'react'\nimport {CommentsContext} from 'sanity/_singletons'\n\nimport {useEditState, useSchema, useUserListWithPermissions} from '../../../hooks'\nimport {type ReleaseId} from '../../../perspective/types'\nimport {useCurrentUser} from '../../../store'\nimport {useAddonDataset, useWorkspace} from '../../../studio'\nimport {getPublishedId} from '../../../util'\nimport {\n  type CommentOperationsHookOptions,\n  useCommentOperations,\n  useCommentsEnabled,\n} from '../../hooks'\nimport {useCommentsStore} from '../../store'\nimport {\n  type CommentPostPayload,\n  type CommentStatus,\n  type CommentsType,\n  type CommentThreadItem,\n  type CommentUpdatePayload,\n} from '../../types'\nimport {buildCommentThreadItems} from '../../utils/buildCommentThreadItems'\nimport {type CommentsContextValue} from './types'\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: ReactNode\n  documentId: string\n  documentType: string\n  releaseId?: ReleaseId\n  type: CommentsType\n  sortOrder: 'asc' | 'desc'\n\n  isCommentsOpen?: boolean\n  onCommentsOpen?: () => void\n  getCommentLink?: (id: string) => string\n\n  selectedCommentId?: string | undefined\n  onClearSelectedComment?: () => void\n\n  onPathOpen?: (path: Path) => void\n\n  isConnecting?: boolean\n\n  mentionsDisabled?: boolean\n}\n\ntype DocumentId = string\ntype TransactionId = string\n\n/**\n * @beta\n */\nexport const CommentsProvider = memo(function CommentsProvider(props: CommentsProviderProps) {\n  const {\n    children,\n    documentId,\n    documentType,\n    isCommentsOpen,\n    onCommentsOpen,\n    sortOrder,\n    type,\n    getCommentLink,\n    onClearSelectedComment,\n    selectedCommentId,\n    isConnecting,\n    onPathOpen,\n    releaseId,\n    mentionsDisabled,\n  } = props\n  const commentsEnabled = useCommentsEnabled()\n  const [status, setStatus] = useState<CommentStatus>('open')\n  const {client, createAddonDataset, isCreatingDataset} = useAddonDataset()\n  const publishedId = getPublishedId(documentId)\n\n  const editState = useEditState(publishedId, documentType, 'low', releaseId)\n  const schemaType = useSchema().get(documentType)\n  const currentUser = useCurrentUser()\n\n  const {name: workspaceName, dataset, projectId} = useWorkspace()\n\n  const documentValue = useMemo(() => {\n    if (releaseId) return editState.version\n    return editState.draft || editState.published\n  }, [editState.version, editState.draft, editState.published, releaseId])\n\n  const documentRevisionId = useMemo(() => documentValue?._rev, [documentValue])\n\n  // A map to keep track of the latest transaction ID for each comment document.\n  const transactionsIdMap = useMemo(() => new Map<DocumentId, TransactionId>(), [])\n\n  // When the latest transaction ID is received, we remove the transaction id from the map.\n  const handleOnLatestTransactionIdReceived = useCallback(\n    (commentDocumentId: string) => {\n      transactionsIdMap.delete(commentDocumentId)\n    },\n    [transactionsIdMap],\n  )\n\n  const {\n    dispatch,\n    data = EMPTY_ARRAY,\n    error,\n    loading,\n  } = useCommentsStore({\n    documentId,\n    releaseId,\n    client,\n    transactionsIdMap,\n    onLatestTransactionIdReceived: handleOnLatestTransactionIdReceived,\n  })\n\n  // When a comment update is started, we store the transaction id in a map.\n  // This is used to make sure that we only use the latest transaction received\n  // in the real time listener. See `useCommentsStore`.\n  // This is needed since we use optimistic updates in the UI, and we want to\n  // avoid that the UI is updated with an old transaction id when multiple\n  // transactions are started in a short time span.\n  const handleOnTransactionStart = useCallback(\n    (commentDocumentId: string, transactionId: string) => {\n      transactionsIdMap.set(commentDocumentId, transactionId)\n    },\n    [transactionsIdMap],\n  )\n\n  const handleSetStatus = useCallback(\n    (newStatus: CommentStatus) => {\n      // Avoids going to \"resolved\" when using links to comments\n      if (commentsEnabled.mode === 'upsell' && newStatus === 'resolved') {\n        return null\n      }\n      return setStatus(newStatus)\n    },\n    [setStatus, commentsEnabled],\n  )\n\n  const mentionOptions = useUserListWithPermissions(\n    useMemo(() => ({documentValue, permission: 'read'}), [documentValue]),\n  )\n\n  const threadItemsByStatus: ThreadItemsByStatus = useMemo(() => {\n    if (!schemaType || !currentUser) return EMPTY_COMMENTS_DATA\n    const sorted = orderBy(data, ['_createdAt'], [sortOrder])\n\n    const items = buildCommentThreadItems({\n      comments: sorted,\n      currentUser,\n      documentValue,\n      schemaType,\n      type,\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, sortOrder, type])\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: CommentUpdatePayload) => {\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        // use the current release id as document version id of the target\n        documentVersionId: releaseId,\n        documentRevisionId,\n        documentType,\n        getComment,\n        getThreadLength,\n        projectId,\n        schemaType,\n        workspace: workspaceName,\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        createAddonDataset,\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        onUpdate: handleOnUpdate,\n        onTransactionStart: handleOnTransactionStart,\n        getCommentLink,\n      }),\n      [\n        client,\n        currentUser,\n        dataset,\n        publishedId,\n        releaseId,\n        documentRevisionId,\n        documentType,\n        getComment,\n        getThreadLength,\n        projectId,\n        schemaType,\n        workspaceName,\n        createAddonDataset,\n        handleOnCreate,\n        handleOnCreateError,\n        handleOnUpdate,\n        handleOnTransactionStart,\n        getCommentLink,\n      ],\n    ),\n  )\n\n  const ctxValue = useMemo(\n    (): CommentsContextValue => ({\n      documentId,\n      documentType,\n\n      isCreatingDataset,\n      status,\n      setStatus: handleSetStatus,\n      getComment,\n      getCommentLink,\n      onClearSelectedComment,\n      selectedCommentId,\n\n      isCommentsOpen,\n      onCommentsOpen,\n\n      isConnecting,\n\n      onPathOpen,\n\n      comments: {\n        data: threadItemsByStatus,\n        error,\n        loading: loading || isCreatingDataset || isConnecting || false,\n      },\n\n      operation: {\n        create: operation.create,\n        react: operation.react,\n        remove: operation.remove,\n        update: operation.update,\n      },\n      mentionOptions: {\n        ...mentionOptions,\n        disabled: mentionsDisabled,\n      },\n    }),\n    [\n      documentId,\n      documentType,\n      isCreatingDataset,\n      status,\n      handleSetStatus,\n      getComment,\n      getCommentLink,\n      onClearSelectedComment,\n      selectedCommentId,\n      isCommentsOpen,\n      onCommentsOpen,\n      isConnecting,\n      onPathOpen,\n      threadItemsByStatus,\n      error,\n      loading,\n      operation.create,\n      operation.react,\n      operation.remove,\n      operation.update,\n      mentionOptions,\n      mentionsDisabled,\n    ],\n  )\n\n  return <CommentsContext.Provider value={ctxValue}>{children}</CommentsContext.Provider>\n})\n","import {memo, type ReactNode} from 'react'\nimport {CommentsEnabledContext} from 'sanity/_singletons'\n\nimport {useResolveCommentsEnabled} from '../../hooks'\n\ninterface CommentsEnabledProviderProps {\n  children: ReactNode\n  documentId: string\n  documentType: string\n}\n\n/**\n * @beta\n * @hidden\n */\nexport const CommentsEnabledProvider = memo(function CommentsEnabledProvider(\n  props: CommentsEnabledProviderProps,\n) {\n  const {children, documentId, documentType} = props\n\n  const value = useResolveCommentsEnabled(documentId, documentType)\n\n  return <CommentsEnabledContext.Provider value={value}>{children}</CommentsEnabledContext.Provider>\n})\n","import {memo, type ReactNode} from 'react'\nimport {CommentsIntentContext} from 'sanity/_singletons'\n\nimport {type CommentIntentGetter} from '../../types'\n\n/**\n * @beta\n * @hidden\n */\nexport interface CommentsIntentProviderProps {\n  children: ReactNode\n  getIntent: CommentIntentGetter\n}\n\n/**\n * @beta\n * @hidden\n */\nexport const CommentsIntentProvider = memo(function CommentsIntentProvider(\n  props: CommentsIntentProviderProps,\n) {\n  const {children, getIntent} = props\n\n  return (\n    <CommentsIntentContext.Provider value={getIntent}>{children}</CommentsIntentContext.Provider>\n  )\n})\n","import {type ReactNode, useCallback, useMemo, useState} from 'react'\nimport {CommentsOnboardingContext} from 'sanity/_singletons'\n\nimport {type 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: 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 {isEqual} from 'lodash'\nimport {memo, useCallback, useMemo, useState} from 'react'\nimport {CommentsSelectedPathContext} from 'sanity/_singletons'\n\nimport {type CommentsSelectedPath, type CommentsSelectedPathContextValue} from './types'\n\ninterface CommentsSelectedPathProviderProps {\n  children: React.ReactNode\n}\n\n/**\n * @internal\n */\nexport const CommentsSelectedPathProvider = memo(function CommentsSelectedPathProvider(\n  props: CommentsSelectedPathProviderProps,\n) {\n  const {children} = props\n  const [selectedPath, setSelectedPath] = useState<CommentsSelectedPath | null>(null)\n\n  const handleSelectPath = useCallback(\n    (nextPath: CommentsSelectedPath | null) => {\n      if (isEqual(selectedPath, nextPath)) return\n\n      setSelectedPath(nextPath)\n    },\n    [selectedPath],\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 {useTelemetry} from '@sanity/telemetry/react'\nimport {template} from 'lodash'\nimport {useCallback, useEffect, useMemo, useState} from 'react'\nimport {CommentsUpsellContext} from 'sanity/_singletons'\n\nimport {useClient, useProjectId} from '../../../hooks'\nimport {\n  UpsellDialogDismissed,\n  UpsellDialogLearnMoreCtaClicked,\n  UpsellDialogUpgradeCtaClicked,\n  UpsellDialogViewed,\n  type UpsellDialogViewedInfo,\n} from '../../../studio'\nimport {type UpsellData} from '../../../studio/upsell/types'\nimport {UpsellDialog} from '../../../studio/upsell/UpsellDialog'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../../studioClient'\nimport {type CommentsUpsellContextValue} from './types'\n\nconst FEATURE = 'comments'\nconst TEMPLATE_OPTIONS = {interpolate: /{{([\\s\\S]+?)}}/g}\nconst BASE_URL = 'www.sanity.io'\n\n/**\n * @beta\n * @hidden\n */\nexport function CommentsUpsellProvider(props: {children: React.ReactNode}) {\n  const [upsellDialogOpen, setUpsellDialogOpen] = useState(false)\n  const [upsellData, setUpsellData] = useState<UpsellData | null>(null)\n  const projectId = useProjectId()\n  const telemetry = useTelemetry()\n  const client = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n\n  const telemetryLogs = useMemo(\n    (): CommentsUpsellContextValue['telemetryLogs'] => ({\n      dialogSecondaryClicked: () =>\n        telemetry.log(UpsellDialogLearnMoreCtaClicked, {\n          feature: FEATURE,\n          type: 'modal',\n        }),\n      dialogPrimaryClicked: () =>\n        telemetry.log(UpsellDialogUpgradeCtaClicked, {\n          feature: FEATURE,\n          type: 'modal',\n        }),\n      panelViewed: (source) =>\n        telemetry.log(UpsellDialogViewed, {\n          feature: FEATURE,\n          type: 'inspector',\n          source,\n        }),\n      panelDismissed: () =>\n        telemetry.log(UpsellDialogDismissed, {\n          feature: FEATURE,\n          type: 'inspector',\n        }),\n      panelPrimaryClicked: () =>\n        telemetry.log(UpsellDialogUpgradeCtaClicked, {\n          feature: FEATURE,\n          type: 'inspector',\n        }),\n      panelSecondaryClicked: () =>\n        telemetry.log(UpsellDialogLearnMoreCtaClicked, {\n          feature: FEATURE,\n          type: 'inspector',\n        }),\n    }),\n    [telemetry],\n  )\n\n  const handlePrimaryButtonClick = useCallback(() => {\n    telemetryLogs.dialogPrimaryClicked()\n  }, [telemetryLogs])\n\n  const handleSecondaryButtonClick = useCallback(() => {\n    telemetryLogs.dialogSecondaryClicked()\n  }, [telemetryLogs])\n\n  const handleClose = useCallback(() => {\n    setUpsellDialogOpen(false)\n    telemetry.log(UpsellDialogDismissed, {\n      feature: FEATURE,\n      type: 'modal',\n    })\n  }, [telemetry])\n\n  useEffect(() => {\n    const data$ = client.observable.request<UpsellData | null>({\n      uri: '/journey/comments',\n    })\n\n    const sub = data$.subscribe({\n      next: (data) => {\n        if (!data) return\n        try {\n          const ctaUrl = template(data.ctaButton.url, TEMPLATE_OPTIONS)\n          data.ctaButton.url = ctaUrl({baseUrl: BASE_URL, projectId})\n\n          const secondaryUrl = template(data.secondaryButton.url, TEMPLATE_OPTIONS)\n          data.secondaryButton.url = secondaryUrl({baseUrl: BASE_URL, projectId})\n          setUpsellData(data)\n        } catch (e) {\n          // silently fail\n        }\n      },\n      error: () => {\n        // silently fail\n      },\n    })\n\n    return () => {\n      sub.unsubscribe()\n    }\n  }, [client, projectId])\n\n  const handleOpenDialog = useCallback(\n    (source: UpsellDialogViewedInfo['source']) => {\n      setUpsellDialogOpen(true)\n\n      telemetry.log(UpsellDialogViewed, {\n        feature: FEATURE,\n        type: 'modal',\n        source,\n      })\n    },\n    [telemetry],\n  )\n\n  const ctxValue = useMemo<CommentsUpsellContextValue>(\n    () => ({\n      upsellDialogOpen,\n      handleOpenDialog,\n      upsellData,\n      telemetryLogs,\n    }),\n    [handleOpenDialog, upsellDialogOpen, upsellData, telemetryLogs],\n  )\n\n  return (\n    <CommentsUpsellContext.Provider value={ctxValue}>\n      {props.children}\n      {upsellData && upsellDialogOpen && (\n        <UpsellDialog\n          data={upsellData}\n          onClose={handleClose}\n          onPrimaryClick={handlePrimaryButtonClick}\n          onSecondaryClick={handleSecondaryButtonClick}\n        />\n      )}\n    </CommentsUpsellContext.Provider>\n  )\n}\n","import {type DocumentLayoutProps} from '../../../config'\nimport {\n  CommentsAuthoringPathProvider,\n  CommentsEnabledProvider,\n  CommentsSelectedPathProvider,\n} from '../../context'\nimport {useCommentsEnabled} from '../../hooks'\n\nexport function CommentsDocumentLayout(props: DocumentLayoutProps) {\n  const {documentId, documentType} = props\n  const parentContext = useCommentsEnabled()\n\n  // If there is a parent context and the mode is not null, a parent provider is\n  // already checking if comments are enabled. In such cases, additional wrapping\n  // of the document layout in the `CommentsEnabledProvider` is unnecessary.\n  // The `DocumentPane` component within the `structureTool` handles this wrapping.\n  // However, as this plugin may be used in contexts outside of the `structureTool`,\n  // we must check for a parent context that checks if comments are enabled and\n  // conditionally apply the `CommentsEnabledProvider` wrapping if it is not present.\n  if (parentContext.mode !== null) {\n    return <CommentsDocumentLayoutInner {...props} />\n  }\n\n  return (\n    <CommentsEnabledProvider documentId={documentId} documentType={documentType}>\n      <CommentsDocumentLayoutInner {...props} />\n    </CommentsEnabledProvider>\n  )\n}\n\nfunction CommentsDocumentLayoutInner(props: DocumentLayoutProps) {\n  const commentsEnabled = useCommentsEnabled()\n\n  // If comments are not enabled, render the default document layout\n  if (!commentsEnabled.enabled) {\n    return props.renderDefault(props)\n  }\n\n  return (\n    <CommentsSelectedPathProvider>\n      <CommentsAuthoringPathProvider>{props.renderDefault(props)}</CommentsAuthoringPathProvider>\n    </CommentsSelectedPathProvider>\n  )\n}\n","import {type ColorHueKey} from '@sanity/color'\n\nimport {type CommentReactionOption, type CommentReactionShortNames} from './types'\n\n/**\n * @internal\n * @hidden\n */\nexport const COMMENTS_INSPECTOR_NAME = 'sanity/comments'\n\nexport const COMMENTS_HIGHLIGHT_HUE_KEY: ColorHueKey = 'yellow'\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 {AddCommentIcon, CommentIcon} from '@sanity/icons'\nimport {type CurrentUser, type PortableTextBlock} from '@sanity/types'\nimport {\n  // eslint-disable-next-line no-restricted-imports\n  Button as SanityUIButton,\n  Flex,\n  Stack,\n  Text,\n  useClickOutsideEvent,\n} from '@sanity/ui'\nimport {useCallback, useMemo, useRef, useState} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Button, Popover, Tooltip} from '../../../../ui-components'\nimport {type UserListWithPermissionsHookValue} from '../../../hooks'\nimport {Translate, useTranslation} from '../../../i18n'\nimport {CommentInput, type CommentInputHandle} from '../../components'\nimport {hasCommentMessageValue} from '../../helpers'\nimport {commentsLocaleNamespace} from '../../i18n'\nimport {type CommentMessage} from '../../types'\n\nconst ContentStack = styled(Stack)`\n  width: 320px;\n`\n\ninterface CommentsFieldButtonProps {\n  count: number\n  currentUser: CurrentUser\n  fieldTitle: string\n  isCreatingDataset: boolean\n  mentionOptions: UserListWithPermissionsHookValue\n  onChange: (value: PortableTextBlock[]) => void\n  onClick?: () => void\n  onClose: () => void\n  onCommentAdd: () => void\n  onDiscard: () => void\n  onInputKeyDown?: (event: React.KeyboardEvent<Element>) => void\n  open: boolean\n  value: CommentMessage\n}\n\nexport function CommentsFieldButton(props: CommentsFieldButtonProps) {\n  const {\n    count,\n    currentUser,\n    fieldTitle,\n    isCreatingDataset,\n    mentionOptions,\n    onChange,\n    onClick,\n    onClose,\n    onCommentAdd,\n    onDiscard,\n    onInputKeyDown,\n    open,\n    value,\n  } = props\n  const {t} = useTranslation(commentsLocaleNamespace)\n  const popoverRef = useRef<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    onClose()\n    addCommentButtonElement?.focus()\n  }, [addCommentButtonElement, open, onClose])\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  useClickOutsideEvent(!open && startDiscard, () => [popoverRef.current])\n\n  if (!hasComments) {\n    const placeholder = (\n      <Translate\n        t={t}\n        i18nKey=\"compose.add-comment-input-placeholder\"\n        values={{field: fieldTitle}}\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={isCreatingDataset}\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={popoverRef}\n        onKeyDown={handlePopoverKeyDown}\n      >\n        <div>\n          <Button\n            aria-label={t('field-button.aria-label-add')}\n            disabled={isCreatingDataset}\n            icon={AddCommentIcon}\n            mode=\"bleed\"\n            onClick={onClick}\n            ref={setAddCommentButtonElement}\n            selected={open}\n            tooltipProps={{\n              content: t('field-button.title'),\n              placement: 'top',\n            }}\n          />\n        </div>\n      </Popover>\n    )\n  }\n\n  return (\n    <Tooltip portal placement=\"top\" content={t('field-button.content', {count})}>\n      <SanityUIButton\n        aria-label={t('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 {hues} from '@sanity/color'\nimport {type PortableTextBlock} from '@sanity/types'\nimport {Stack, useBoundaryElement} from '@sanity/ui'\nimport * as PathUtils from '@sanity/util/paths'\nimport {uuid} from '@sanity/uuid'\nimport {AnimatePresence, motion, type Variants} from 'framer-motion'\nimport {useCallback, useMemo, useRef, useState} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {type FieldProps} from '../../../form'\nimport {getSchemaTypeTitle} from '../../../schema'\nimport {useCurrentUser} from '../../../store'\nimport {COMMENTS_HIGHLIGHT_HUE_KEY} from '../../constants'\nimport {isTextSelectionComment} from '../../helpers'\nimport {\n  applyCommentsFieldAttr,\n  useComments,\n  useCommentsAuthoringPath,\n  useCommentsEnabled,\n  useCommentsScroll,\n  useCommentsSelectedPath,\n  useCommentsUpsell,\n} from '../../hooks'\nimport {type CommentCreatePayload, type CommentMessage, type CommentsUIMode} from '../../types'\nimport {CommentsFieldButton} from './CommentsFieldButton'\n\n// When the form is temporarily set to `readOnly` while reconnecting, the form\n// will be re-rendered and any comment that is being authored will be lost.\n// To avoid this, we cache the comment message in a map and restore it when the\n// field is re-rendered.\nconst messageCache = new Map<string, CommentMessage>()\n\nconst EMPTY_ARRAY: [] = []\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 {enabled, mode} = useCommentsEnabled()\n\n  if (!enabled) {\n    return props.renderDefault(props)\n  }\n\n  return <CommentFieldInner {...props} mode={mode} />\n}\n\nconst HighlightDiv = styled(motion.div)(({theme}) => {\n  const {radius, space, color} = theme.sanity\n  const bg = hues[COMMENTS_HIGHLIGHT_HUE_KEY][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(\n  props: FieldProps & {\n    mode: CommentsUIMode\n  },\n) {\n  const {mode} = props\n\n  const currentUser = useCurrentUser()\n  const {element: boundaryElement} = useBoundaryElement()\n\n  const rootRef = useRef<HTMLDivElement | null>(null)\n\n  const {\n    comments,\n    isCommentsOpen,\n    isCreatingDataset,\n    mentionOptions,\n    onCommentsOpen,\n    operation,\n    setStatus,\n    status,\n  } = useComments()\n  const {upsellData, handleOpenDialog} = useCommentsUpsell()\n  const {selectedPath, setSelectedPath} = useCommentsSelectedPath()\n  const {authoringPath, setAuthoringPath} = useCommentsAuthoringPath()\n  const {scrollToGroup} = useCommentsScroll({\n    boundaryElement,\n  })\n\n  const fieldTitle = useMemo(() => getSchemaTypeTitle(props.schemaType), [props.schemaType])\n  const stringPath = useMemo(() => PathUtils.toString(props.path), [props.path])\n\n  // Use the cached value if it exists as the initial value\n  const cachedValue = messageCache.get(stringPath) || null\n\n  const [value, setValue] = useState<PortableTextBlock[] | null>(cachedValue)\n\n  // If the path of the field matches the authoring path, the comment input should be open.\n  const isOpen = useMemo(() => authoringPath === stringPath, [authoringPath, stringPath])\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 === stringPath\n  }, [isCommentsOpen, selectedPath?.fieldPath, selectedPath?.origin, stringPath])\n\n  const isInlineCommentThread = useMemo(() => {\n    return comments.data.open\n      .filter((c) => c.threadId === selectedPath?.threadId)\n      .some((x) => isTextSelectionComment(x.parentComment))\n  }, [comments.data.open, selectedPath?.threadId])\n\n  // Total number of comments for the current field\n  const count = useMemo(() => {\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, stringPath])\n\n  const hasComments = Boolean(count > 0)\n\n  const resetMessageValue = useCallback(() => {\n    // Reset the value and remove the message from the cache\n    setValue(null)\n    messageCache.delete(stringPath)\n  }, [stringPath])\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. Ensure that the authoring path is reset when clicking\n      //    the comment button when the field has comments.\n      setAuthoringPath(null)\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 latest thread ID as the selected thread ID\n      //    and scroll to the it.\n      if (scrollToThreadId) {\n        // handleSetThreadToScrollTo(scrollToThreadId)\n        setSelectedPath({\n          threadId: scrollToThreadId,\n          origin: 'form',\n          fieldPath: PathUtils.toString(props.path),\n        })\n\n        scrollToGroup(scrollToThreadId)\n      }\n\n      return\n    }\n\n    if (mode === 'upsell') {\n      if (upsellData) {\n        handleOpenDialog('field_action')\n      } else {\n        // Open the comments inspector\n        onCommentsOpen?.()\n      }\n      return\n    }\n\n    // If the field is open (i.e. the authoring path is set to the current field)\n    // we close the field by resetting the authoring path. If the field is not open,\n    // we set the authoring path to the current field so that the comment form is opened.\n    setAuthoringPath(isOpen ? null : stringPath)\n  }, [\n    comments.data.open,\n    handleOpenDialog,\n    hasComments,\n    isOpen,\n    mode,\n    onCommentsOpen,\n    props.path,\n    scrollToGroup,\n    setAuthoringPath,\n    setSelectedPath,\n    setStatus,\n    status,\n    stringPath,\n    upsellData,\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        type: 'field',\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: EMPTY_ARRAY,\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      resetMessageValue()\n\n      // Scroll to the thread\n      setSelectedPath({\n        threadId: newThreadId,\n        origin: 'form',\n        fieldPath: PathUtils.toString(props.path),\n      })\n\n      scrollToGroup(newThreadId)\n    }\n  }, [\n    onCommentsOpen,\n    operation,\n    props.path,\n    resetMessageValue,\n    scrollToGroup,\n    setSelectedPath,\n    setStatus,\n    status,\n    value,\n  ])\n\n  const handleClose = useCallback(() => setAuthoringPath(null), [setAuthoringPath])\n\n  const handleOnChange = useCallback(\n    (nextValue: CommentMessage) => {\n      setValue(nextValue)\n      messageCache.set(stringPath, nextValue)\n    },\n    [stringPath],\n  )\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          isCreatingDataset={isCreatingDataset}\n          mentionOptions={mentionOptions}\n          onChange={handleOnChange}\n          onClick={handleClick}\n          onClose={handleClose}\n          onCommentAdd={handleCommentAdd}\n          onDiscard={resetMessageValue}\n          open={isOpen}\n          value={value}\n        />\n      ),\n      hasComments,\n      isAddingComment: isOpen,\n    }),\n    [\n      currentUser,\n      count,\n      fieldTitle,\n      isCreatingDataset,\n      mentionOptions,\n      handleOnChange,\n      handleClick,\n      handleClose,\n      handleCommentAdd,\n      resetMessageValue,\n      isOpen,\n      value,\n      hasComments,\n    ],\n  )\n\n  return (\n    <FieldStack {...applyCommentsFieldAttr(PathUtils.toString(props.path))} ref={rootRef}>\n      {props.renderDefault({\n        ...props,\n        // eslint-disable-next-line camelcase\n        __internal_comments: internalComments,\n      })}\n\n      <AnimatePresence>\n        {isSelected && !isInlineCommentThread && (\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 {useCallback, useEffect, useMemo, useState} from 'react'\n\n/**\n * A function that creates a DOMRect from an array of elements.\n */\nexport function createDomRectFromElements(elements: Element[]): DOMRect | null {\n  if (!elements || !elements.length) return null\n\n  const rects = elements.map((el) => el.getBoundingClientRect())\n\n  const minX = Math.min(...rects.map((r) => r.x)) || 0\n  const minY = Math.min(...rects.map((r) => r.y)) || 0\n  const maxRight = Math.max(...rects.map((r) => r.right)) || 0\n  const maxBottom = Math.max(...rects.map((r) => r.bottom)) || 0\n\n  return {\n    x: minX,\n    y: minY,\n    width: maxRight - minX,\n    height: maxBottom - minY,\n    top: minY,\n    right: maxRight,\n    bottom: maxBottom,\n    left: minX,\n  } as DOMRect\n}\n\ninterface RectFromElementsHookOptions {\n  scrollElement: HTMLElement | null\n  disabled: boolean\n  selector: string\n}\n\n/**\n * A hook that returns a DOMRect from an array of elements.\n * This is needed because the Range Decoration API might render se\n */\nfunction useRectFromElements(props: RectFromElementsHookOptions): DOMRect | null {\n  const {scrollElement, disabled, selector} = props\n  const [rect, setRect] = useState<DOMRect | null>(null)\n\n  const handleSetRect = useCallback(() => {\n    if (disabled) return\n    const elements = document?.querySelectorAll(selector)\n    if (!elements) return\n\n    const nextRect = createDomRectFromElements(Array.from(elements))\n\n    setRect(nextRect)\n  }, [disabled, selector])\n\n  useEffect(handleSetRect, [handleSetRect])\n\n  useEffect(() => {\n    if (disabled || !scrollElement) return undefined\n\n    scrollElement.addEventListener('wheel', handleSetRect)\n\n    return () => {\n      scrollElement.removeEventListener('wheel', handleSetRect)\n    }\n  }, [handleSetRect, disabled, scrollElement])\n\n  return rect\n}\n\nexport interface ReferenceElementHookOptions {\n  scrollElement: HTMLElement | null\n  disabled: boolean\n  selector: string\n}\n\n/**\n * A hook that returns a reference element that can be used to position a popover.\n */\nexport function useAuthoringReferenceElement(\n  props: ReferenceElementHookOptions,\n): HTMLElement | null {\n  const {scrollElement, disabled, selector} = props\n\n  const rect = useRectFromElements({\n    scrollElement,\n    disabled,\n    selector,\n  })\n\n  const element = useMemo((): HTMLElement | null => {\n    if (!rect) return null\n\n    return {\n      getBoundingClientRect: () => rect,\n    } as HTMLElement\n  }, [rect])\n\n  return element\n}\n\nexport function getSelectionBoundingRect(): DOMRect | null {\n  const selection = window.getSelection()\n  let range = null\n\n  if (selection && selection.rangeCount > 0) {\n    range = selection.getRangeAt(0)\n  }\n  const rect = range?.getBoundingClientRect()\n\n  return rect || null\n}\n\nexport function isRangeInvalid(): boolean {\n  return false\n}\n","import {AddCommentIcon} from '@sanity/icons'\nimport {useClickOutsideEvent} from '@sanity/ui'\nimport {motion, type Variants} from 'framer-motion'\nimport {useRef} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Button, Popover, type PopoverProps} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n'\nimport {CommentDisabledIcon} from '../../../components'\nimport {commentsLocaleNamespace} from '../../../i18n'\n\nconst MotionPopover = styled(motion.create(Popover))`\n  user-select: none;\n`\n\nconst POPOVER_FALLBACK_PLACEMENTS: PopoverProps['fallbackPlacements'] = ['bottom', 'top']\n\nconst VARIANTS: Variants = {\n  hidden: {opacity: 0, y: -4},\n  visible: {opacity: 1, y: 0},\n}\n\ninterface FloatingButtonPopoverProps {\n  disabled: boolean\n  onClick: () => void\n  onClickOutside: (e: MouseEvent) => void\n  referenceElement: PopoverProps['referenceElement']\n}\n\nexport function FloatingButtonPopover(props: FloatingButtonPopoverProps) {\n  const {disabled, onClick, onClickOutside, referenceElement} = props\n  const buttonRef = useRef<HTMLButtonElement | null>(null)\n  const {t} = useTranslation(commentsLocaleNamespace)\n\n  useClickOutsideEvent(onClickOutside, () => [buttonRef.current])\n\n  const disabledText = t('inline-add-comment-button.disabled-overlap-title')\n  const enabledText = t('inline-add-comment-button.title')\n  const text = disabled ? disabledText : enabledText\n\n  const content = (\n    <Button\n      data-testid=\"inline-comment-button\"\n      disabled={disabled}\n      icon={disabled ? CommentDisabledIcon : AddCommentIcon}\n      mode=\"bleed\"\n      onClick={onClick}\n      ref={buttonRef}\n      text={text}\n    />\n  )\n\n  return (\n    <MotionPopover\n      animate=\"visible\"\n      content={content}\n      contentEditable={false}\n      fallbackPlacements={POPOVER_FALLBACK_PLACEMENTS}\n      initial=\"hidden\"\n      open\n      padding={1}\n      placement=\"bottom\"\n      portal\n      referenceElement={referenceElement}\n      variants={VARIANTS}\n    />\n  )\n}\n","import {type CurrentUser} from '@sanity/types'\nimport {Stack, useClickOutsideEvent} from '@sanity/ui'\nimport {motion, type Variants} from 'framer-motion'\nimport {useCallback, useRef} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Popover, type PopoverProps} from '../../../../../ui-components'\nimport {CommentInput, type CommentInputHandle, type CommentInputProps} from '../../../components'\nimport {hasCommentMessageValue} from '../../../helpers'\n\nconst POPOVER_FALLBACK_PLACEMENTS: PopoverProps['fallbackPlacements'] = ['bottom', 'top']\n\nconst MotionPopover = motion.create(Popover)\n\nconst RootStack = styled(Stack)`\n  width: 250px;\n`\n\nconst VARIANTS: Variants = {\n  hidden: {opacity: 0},\n  visible: {opacity: 1},\n}\n\ninterface InlineCommentInputPopoverProps {\n  currentUser: CurrentUser\n  mentionOptions: CommentInputProps['mentionOptions']\n  onChange: CommentInputProps['onChange']\n  onClickOutside: () => void\n  onDiscardConfirm: CommentInputProps['onDiscardConfirm']\n  onSubmit: CommentInputProps['onSubmit']\n  referenceElement?: HTMLElement | null\n  value: CommentInputProps['value']\n}\n\nexport function InlineCommentInputPopover(props: InlineCommentInputPopoverProps) {\n  const {\n    currentUser,\n    mentionOptions,\n    onChange,\n    onClickOutside,\n    onDiscardConfirm,\n    onSubmit,\n    referenceElement,\n    value,\n  } = props\n\n  const commentInputRef = useRef<CommentInputHandle | null>(null)\n  const contentElementRef = useRef<HTMLDivElement | null>(null)\n\n  const handleDiscardConfirm = useCallback(() => {\n    commentInputRef.current?.discardDialogController.close()\n    onDiscardConfirm()\n  }, [onDiscardConfirm])\n\n  const handleDiscardCancel = useCallback(() => {\n    commentInputRef.current?.discardDialogController.close()\n  }, [])\n\n  useClickOutsideEvent(\n    () => {\n      const hasValue = hasCommentMessageValue(value)\n\n      if (hasValue) {\n        commentInputRef.current?.discardDialogController.open()\n        return\n      }\n\n      onClickOutside()\n    },\n    () => [contentElementRef.current],\n  )\n\n  const content = (\n    <RootStack padding={2} ref={contentElementRef}>\n      <CommentInput\n        currentUser={currentUser}\n        focusLock\n        focusOnMount\n        mentionOptions={mentionOptions}\n        onChange={onChange}\n        onDiscardCancel={handleDiscardCancel}\n        onDiscardConfirm={handleDiscardConfirm}\n        onSubmit={onSubmit}\n        ref={commentInputRef}\n        value={value}\n      />\n    </RootStack>\n  )\n\n  return (\n    <MotionPopover\n      animate=\"visible\"\n      content={content}\n      data-ui=\"InlineCommentInputPopover\"\n      fallbackPlacements={POPOVER_FALLBACK_PLACEMENTS}\n      initial=\"hidden\"\n      open\n      placement=\"bottom\"\n      portal\n      referenceElement={referenceElement}\n      variants={VARIANTS}\n    />\n  )\n}\n","/* eslint-disable max-nested-callbacks */\nimport {\n  type EditorChange,\n  type EditorSelection,\n  PortableTextEditor,\n  type RangeDecoration,\n  type RangeDecorationOnMovedDetails,\n} from '@portabletext/editor'\nimport {isPortableTextTextBlock} from '@sanity/types'\nimport {BoundaryElementProvider, Stack, usePortal} from '@sanity/ui'\nimport * as PathUtils from '@sanity/util/paths'\nimport {uuid} from '@sanity/uuid'\nimport {AnimatePresence} from 'framer-motion'\nimport {debounce} from 'lodash'\nimport {memo, useCallback, useEffect, useMemo, useRef, useState} from 'react'\n\nimport {type PortableTextInputProps} from '../../../../form'\nimport {useCurrentUser} from '../../../../store'\nimport {CommentInlineHighlightSpan} from '../../../components'\nimport {isTextSelectionComment} from '../../../helpers'\nimport {\n  useComments,\n  useCommentsEnabled,\n  useCommentsScroll,\n  useCommentsSelectedPath,\n  useCommentsUpsell,\n} from '../../../hooks'\nimport {\n  type CommentDocument,\n  type CommentMessage,\n  type CommentsTextSelectionItem,\n  type CommentsUIMode,\n  type CommentUpdatePayload,\n} from '../../../types'\nimport {\n  buildCommentRangeDecorations,\n  buildRangeDecorationSelectionsFromComments,\n  buildTextSelectionFromFragment,\n} from '../../../utils'\nimport {getSelectionBoundingRect, useAuthoringReferenceElement} from '../helpers'\nimport {FloatingButtonPopover} from './FloatingButtonPopover'\nimport {InlineCommentInputPopover} from './InlineCommentInputPopover'\n\nconst EMPTY_ARRAY: [] = []\n\nconst AI_ASSIST_TYPE = 'sanity.assist.instruction.prompt'\n\nexport function CommentsPortableTextInput(props: PortableTextInputProps) {\n  const {enabled, mode} = useCommentsEnabled()\n\n  // This is a workaround solution to disable comments for the AI assist type.\n  // The AI assist uses the official PTE input which is composed from the\n  // Form Components API for the authoring of the prompt. Consequently, the input\n  // will get the comments functionality as well, which  we don't want.\n  // Therefore we disable the comments for the AI assist type.\n  const isAiAssist = props.schemaType.name === AI_ASSIST_TYPE\n\n  if (!enabled || isAiAssist) {\n    return props.renderDefault(props)\n  }\n\n  return <CommentsPortableTextInputInner {...props} mode={mode} />\n}\n\nexport const CommentsPortableTextInputInner = memo(function CommentsPortableTextInputInner(\n  props: PortableTextInputProps & {mode: CommentsUIMode},\n) {\n  const {mode} = props\n  const currentUser = useCurrentUser()\n  const portal = usePortal()\n\n  const {comments, getComment, mentionOptions, onCommentsOpen, operation, setStatus, status} =\n    useComments()\n  const {setSelectedPath, selectedPath} = useCommentsSelectedPath()\n  const {scrollToComment, scrollToGroup} = useCommentsScroll()\n  const {handleOpenDialog} = useCommentsUpsell()\n\n  const editorRef = useRef<PortableTextEditor | null>(null)\n  const mouseDownRef = useRef<boolean>(false)\n\n  // A reference to the authoring decoration element that highlights the selected text\n  // when starting to author a comment.\n  const [authoringDecorationElement, setAuthoringDecorationElement] =\n    useState<HTMLSpanElement | null>(null)\n\n  const [nextCommentValue, setNextCommentValue] = useState<CommentMessage | null>(null)\n  const [nextCommentSelection, setNextCommentSelection] = useState<EditorSelection | null>(null)\n\n  const [currentSelection, setCurrentSelection] = useState<EditorSelection | null>(null)\n  const [currentSelectionRect, setCurrenSelectionRect] = useState<DOMRect | null>(null)\n\n  const [currentHoveredCommentId, setCurrentHoveredCommentId] = useState<string | null>(null)\n\n  const [canSubmit, setCanSubmit] = useState<boolean>(false)\n\n  const [rootElement, setRootElement] = useState<HTMLDivElement | null>(null)\n  const [isFullScreen, setIsFullScreen] = useState<boolean>(false)\n  const [addedCommentsDecorations, setAddedCommentsDecorations] =\n    useState<RangeDecoration[]>(EMPTY_ARRAY)\n\n  const stringFieldPath = useMemo(() => PathUtils.toString(props.path), [props.path])\n\n  const handleSetCurrentSelectionRect = useCallback(() => {\n    const rect = getSelectionBoundingRect()\n    setCurrenSelectionRect(rect)\n  }, [])\n\n  const resetStates = useCallback(() => {\n    setCurrentSelection(null)\n    setCurrenSelectionRect(null)\n    setNextCommentSelection(null)\n    setNextCommentValue(null)\n    setCanSubmit(false)\n    setAuthoringDecorationElement(null)\n  }, [])\n\n  // Set the next comment selection to the current selection so that we can\n  // render the comment input popover on the current selection using a range decoration.\n  const handleSelectCurrentSelection = useCallback(() => {\n    // When trying to add a comment in \"upsell\" mode, we want to\n    // display the upsell dialog instead of the comment input popover.\n    if (mode === 'upsell') {\n      handleOpenDialog('pte')\n      return\n    }\n\n    setNextCommentSelection(currentSelection)\n  }, [currentSelection, handleOpenDialog, mode])\n\n  // Clear the selection and close the popover when discarding the comment\n  const handleCommentDiscardConfirm = useCallback(() => {\n    resetStates()\n  }, [resetStates])\n\n  const textComments = useMemo(() => {\n    return comments.data.open\n      .filter((comment) => comment.fieldPath === stringFieldPath)\n      .filter((c) => isTextSelectionComment(c.parentComment))\n      .map((c) => c.parentComment)\n  }, [comments.data.open, stringFieldPath])\n\n  const getFragment = useCallback(() => {\n    if (!editorRef.current) return EMPTY_ARRAY\n    return PortableTextEditor.getFragment(editorRef.current)\n  }, [])\n\n  const handleSubmit = useCallback(() => {\n    if (!nextCommentSelection || !editorRef.current) return\n\n    const fragment = getFragment() || EMPTY_ARRAY\n    const editorValue = PortableTextEditor.getValue(editorRef.current)\n\n    if (!editorValue) return\n\n    const textSelection = buildTextSelectionFromFragment({\n      fragment,\n      selection: nextCommentSelection,\n      value: editorValue,\n    })\n\n    const threadId = uuid()\n\n    operation.create({\n      type: 'field',\n      contentSnapshot: fragment,\n      fieldPath: stringFieldPath,\n      message: nextCommentValue,\n      parentCommentId: undefined,\n      reactions: EMPTY_ARRAY,\n      selection: textSelection,\n      status: 'open',\n      threadId,\n    })\n\n    // Open the inspector when a new comment is added\n    onCommentsOpen?.()\n\n    // Set the status to 'open' so that the comment is visible\n    if (status === 'resolved') {\n      setStatus('open')\n    }\n\n    // Set the selected path to the new comment\n    setSelectedPath({\n      fieldPath: stringFieldPath,\n      threadId,\n      origin: 'form',\n    })\n\n    // Scroll to the comment\n    scrollToGroup(threadId)\n\n    resetStates()\n  }, [\n    nextCommentSelection,\n    getFragment,\n    operation,\n    stringFieldPath,\n    nextCommentValue,\n    onCommentsOpen,\n    status,\n    setSelectedPath,\n    scrollToGroup,\n    resetStates,\n    setStatus,\n  ])\n\n  const handleDecoratorClick = useCallback(\n    (commentId: string) => {\n      const comment = getComment(commentId)\n      if (!comment) return\n\n      setSelectedPath({\n        fieldPath: comment.target.path?.field || '',\n        threadId: comment.threadId,\n        origin: 'form',\n      })\n\n      onCommentsOpen?.()\n\n      scrollToComment(comment._id)\n    },\n    [getComment, onCommentsOpen, scrollToComment, setSelectedPath],\n  )\n\n  const blurred = useRef<boolean>(false)\n\n  const handleSelectionChange = useCallback(\n    (selection: EditorSelection | null) => {\n      const isRangeSelected = selection?.anchor.offset !== selection?.focus.offset\n\n      const fragment = getFragment()\n      const isValidSelection = fragment?.every(isPortableTextTextBlock)\n\n      if (!isValidSelection || !isRangeSelected) {\n        setCanSubmit(false)\n        return\n      }\n      /**\n       * When the portable text editor loses focus we will save the blurred.current to true.\n       * Later, when it restores focus the editor will emit a selection change event, but we don't want to immediately show the comment input\n       * instead, we want to wait until the user selects a new range.\n       */\n      if (blurred.current) {\n        blurred.current = false\n        return\n      }\n      // If the mouse is not down, we want to set the current selection rect\n      // when the selection changes. Otherwise, we want to wait until the mouse\n      // is up to set the current selection rect (see `handleMouseUp`).\n      if (!mouseDownRef.current) {\n        handleSetCurrentSelectionRect()\n      }\n\n      setCurrentSelection(selection)\n      setCanSubmit(true)\n    },\n    [getFragment, handleSetCurrentSelectionRect],\n  )\n\n  const debounceSelectionChange = useMemo(\n    () => debounce(handleSelectionChange, 200),\n    [handleSelectionChange],\n  )\n\n  const handleMouseDown = useCallback(() => {\n    mouseDownRef.current = true\n  }, [])\n\n  const handleMouseUp = useCallback(() => {\n    mouseDownRef.current = false\n\n    // When the mouse is up, we want to set the current selection rect.\n    handleSetCurrentSelectionRect()\n  }, [handleSetCurrentSelectionRect])\n\n  const handleRangeDecorationMoved = useCallback((details: RangeDecorationOnMovedDetails) => {\n    const {rangeDecoration, newSelection} = details\n\n    const commentId = rangeDecoration.payload?.commentId as undefined | string\n\n    // Update the range decoration with the new selection.\n    setAddedCommentsDecorations((prev) => {\n      const next = prev.map((p) => {\n        if (p.payload?.commentId === commentId) {\n          const nextDecoration: RangeDecoration = {\n            ...rangeDecoration,\n            selection: newSelection,\n            payload: {...rangeDecoration.payload, dirty: true},\n          }\n          return nextDecoration\n        }\n        return p\n      })\n      return next\n    })\n  }, [])\n\n  const updateCommentRange = useCallback(() => {\n    const decoratorsToUpdate = addedCommentsDecorations.filter(\n      (decorator) => decorator.payload?.dirty,\n    )\n    if (decoratorsToUpdate.length === 0) return\n\n    decoratorsToUpdate.forEach((decorator) => {\n      const commentId = decorator.payload?.commentId as undefined | string\n      const comment = getComment(commentId || '')\n\n      // If the comment no longer exists, remove the range decoration.\n      if (!comment) {\n        return\n      }\n\n      // The below code will update the comment object to reflect the new selection\n      if (!editorRef.current) return\n      const editorValue = PortableTextEditor.getValue(editorRef.current) || EMPTY_ARRAY\n\n      const [updatedDecoration] = buildRangeDecorationSelectionsFromComments({\n        comments: [comment],\n        value: editorValue,\n      })\n\n      const nextRange = updatedDecoration?.range ? [updatedDecoration.range] : EMPTY_ARRAY\n\n      const nextValue: CommentsTextSelectionItem[] = updatedDecoration\n        ? [\n            ...(comment.target.path?.selection?.value\n              .filter((r) => r._key !== nextRange[0]?._key)\n              .concat(nextRange)\n              .flat() || EMPTY_ARRAY),\n          ]\n        : EMPTY_ARRAY\n\n      const nextComment: CommentUpdatePayload = {\n        target: {\n          ...comment.target,\n          path: {\n            ...(comment.target?.path || {}),\n            field: comment.target.path?.field || '',\n            selection: {\n              type: 'text',\n              value: nextValue,\n            },\n          },\n        },\n      }\n\n      operation.update(comment._id, nextComment)\n    })\n\n    // Mark the range decorations as not dirty\n    setAddedCommentsDecorations((prev) => {\n      const next = prev.map((p) => {\n        const isDirty = decoratorsToUpdate.find(\n          (d) => d.payload?.commentId === p.payload?.commentId,\n        )?.payload?.dirty\n\n        if (isDirty) {\n          const nextDecoration: RangeDecoration = {\n            ...p,\n            payload: {...p.payload, dirty: false},\n          }\n          return nextDecoration\n        }\n        return p\n      })\n      return next.filter((p) => p.selection !== null)\n    })\n  }, [addedCommentsDecorations, getComment, operation])\n\n  const handleBuildRangeDecorations = useCallback(\n    (commentsToDecorate: CommentDocument[]) => {\n      if (!editorRef.current) return EMPTY_ARRAY\n      const editorValue = PortableTextEditor.getValue(editorRef.current) || EMPTY_ARRAY\n\n      return buildCommentRangeDecorations({\n        comments: commentsToDecorate,\n        currentHoveredCommentId,\n        onDecorationClick: handleDecoratorClick,\n        onDecorationHoverEnd: setCurrentHoveredCommentId,\n        onDecorationHoverStart: setCurrentHoveredCommentId,\n        onDecorationMoved: handleRangeDecorationMoved,\n        selectedThreadId: selectedPath?.threadId || null,\n        value: editorValue,\n      })\n    },\n    [\n      currentHoveredCommentId,\n      handleDecoratorClick,\n      handleRangeDecorationMoved,\n      selectedPath?.threadId,\n    ],\n  )\n\n  const onEditorChange = useCallback(\n    (change: EditorChange) => {\n      if (change.type === 'mutation') {\n        updateCommentRange()\n      }\n      if (change.type === 'blur') {\n        blurred.current = true\n      }\n      if (change.type === 'selection') {\n        debounceSelectionChange(change.selection)\n      }\n    },\n    [debounceSelectionChange, updateCommentRange],\n  )\n\n  // The range decoration for the comment input. This is used to position the\n  // comment input popover on the current selection and to highlight the\n  // selected text.\n  const authoringDecoration = useMemo((): RangeDecoration | null => {\n    if (!nextCommentSelection) return null\n\n    return {\n      component: ({children}) => (\n        <CommentInlineHighlightSpan isAuthoring ref={setAuthoringDecorationElement}>\n          {children}\n        </CommentInlineHighlightSpan>\n      ),\n      selection: nextCommentSelection,\n    }\n  }, [nextCommentSelection])\n\n  // All the range decorations\n  const rangeDecorations = useMemo((): RangeDecoration[] => {\n    return [\n      // Existing range decorations\n      ...(props?.rangeDecorations || EMPTY_ARRAY),\n      // The range decoration when adding a comment\n      ...(authoringDecoration ? [authoringDecoration] : EMPTY_ARRAY),\n      // The range decorations for existing comments\n      ...addedCommentsDecorations,\n    ]\n  }, [addedCommentsDecorations, authoringDecoration, props?.rangeDecorations])\n\n  const currentSelectionIsOverlapping = useMemo(() => {\n    if (!currentSelection || addedCommentsDecorations.length === 0) return false\n\n    return addedCommentsDecorations.some((d) => {\n      if (!editorRef.current) return false\n\n      const testA = PortableTextEditor.isSelectionsOverlapping(\n        editorRef.current,\n        currentSelection,\n        d.selection,\n      )\n\n      const testB = PortableTextEditor.isSelectionsOverlapping(\n        editorRef.current,\n        d.selection,\n        currentSelection,\n      )\n\n      return testA || testB\n    })\n  }, [addedCommentsDecorations, currentSelection])\n\n  // The scroll element used to update the reference element for the\n  // popover on scroll.\n  const scrollElement = isFullScreen\n    ? document.body\n    : portal.elements?.documentScrollElement || document.body\n\n  // The boundary element used to position the popover properly\n  // inside the editor.\n  const boundaryElement = isFullScreen\n    ? portal.elements?.documentScrollElement || document.body\n    : rootElement\n\n  const popoverAuthoringReferenceElement = useAuthoringReferenceElement({\n    scrollElement,\n    disabled: !nextCommentSelection || !authoringDecorationElement,\n    selector: '[data-inline-comment-state=\"authoring\"]',\n  })\n\n  const selectionReferenceElement = useMemo(() => {\n    if (!currentSelectionRect) return null\n\n    return {\n      getBoundingClientRect: () => currentSelectionRect,\n    } as HTMLElement\n  }, [currentSelectionRect])\n\n  // This effect is needed to update the reference element for the popover\n  // when the current selection changes so that it is always positioned\n  // on the current selection.\n  useEffect(() => {\n    if (!currentSelection) return undefined\n    scrollElement?.addEventListener('wheel', handleSetCurrentSelectionRect)\n\n    return () => {\n      scrollElement?.removeEventListener('wheel', handleSetCurrentSelectionRect)\n    }\n  }, [currentSelection, scrollElement, handleSetCurrentSelectionRect])\n\n  // This is effect is needed to handle remote changes to the comments.\n  // That is, when another user adds, updates or deletes a comment, we need\n  // to update the range decorations to reflect these changes in the UI.\n  useEffect(() => {\n    const nextDecorations = handleBuildRangeDecorations(textComments)\n\n    // The `dirty` flag is used to keep track of range decorations that\n    // have been moved. When a range decoration is moved, we need to update\n    // the comment document. However, when receiving updates from the server,\n    // the `dirty` flag will be removed. Therefore, we need to make sure\n    // that the `dirty` flag is preserved so that we can update the comment.\n    setAddedCommentsDecorations((current) => {\n      return nextDecorations.map((nextDecoration) => {\n        const prevDecoration = current.find(\n          (p) => p.payload?.commentId === nextDecoration.payload?.commentId,\n        )\n\n        if (prevDecoration?.payload?.dirty) {\n          return {\n            ...nextDecoration,\n            payload: {...nextDecoration.payload, dirty: prevDecoration.payload.dirty},\n          }\n        }\n\n        return nextDecoration\n      })\n    })\n  }, [handleBuildRangeDecorations, textComments])\n\n  const showFloatingButton = Boolean(\n    currentSelection && canSubmit && selectionReferenceElement && !mouseDownRef.current,\n  )\n  const showFloatingInput = Boolean(nextCommentSelection && popoverAuthoringReferenceElement)\n\n  return (\n    <>\n      <BoundaryElementProvider element={boundaryElement}>\n        <AnimatePresence>\n          {showFloatingInput && currentUser && (\n            <InlineCommentInputPopover\n              currentUser={currentUser}\n              mentionOptions={mentionOptions}\n              onChange={setNextCommentValue}\n              onClickOutside={resetStates}\n              onDiscardConfirm={handleCommentDiscardConfirm}\n              onSubmit={handleSubmit}\n              referenceElement={popoverAuthoringReferenceElement}\n              value={nextCommentValue}\n            />\n          )}\n\n          {showFloatingButton && !showFloatingInput && (\n            <FloatingButtonPopover\n              disabled={currentSelectionIsOverlapping}\n              onClick={handleSelectCurrentSelection}\n              onClickOutside={resetStates}\n              referenceElement={selectionReferenceElement}\n            />\n          )}\n        </AnimatePresence>\n      </BoundaryElementProvider>\n\n      <Stack ref={setRootElement} onMouseDown={handleMouseDown} onMouseUp={handleMouseUp}>\n        {props.renderDefault({\n          ...props,\n          onEditorChange,\n          editorRef,\n          rangeDecorations,\n          onFullScreenChange: setIsFullScreen,\n        })}\n      </Stack>\n    </>\n  )\n})\n","import {isArrayOfBlocksSchemaType} from '@sanity/types'\n\nimport {type InputProps, type PortableTextInputProps} from '../../../form'\nimport {CommentsPortableTextInput} from './components'\n\nfunction isPortableTextInputProps(\n  inputProps: InputProps | Omit<InputProps, 'renderDefault'>,\n): inputProps is PortableTextInputProps {\n  return isArrayOfBlocksSchemaType(inputProps.schemaType)\n}\n\nexport function CommentsInput(props: InputProps) {\n  if (isPortableTextInputProps(props)) {\n    return <CommentsPortableTextInput {...props} />\n  }\n\n  return props.renderDefault(props)\n}\n","import {LaunchIcon} from '@sanity/icons'\nimport {Card, Text} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {useTranslation} from '../../../i18n'\nimport {commentsLocaleNamespace} from '../../i18n'\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('feature-feedback.title')}{' '}\n        <Link href={FEEDBACK_FORM_LINK} target=\"_blank\" rel=\"noreferrer\">\n          <Span>{t('feature-feedback.link')} </Span> <LaunchIcon />\n        </Link>\n      </Text>\n    </FooterCard>\n  )\n}\n","import {CheckmarkIcon, ChevronDownIcon, CloseIcon} from '@sanity/icons'\nimport {Card, Flex, Menu, Text} from '@sanity/ui'\nimport {forwardRef, useCallback} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Button, MenuButton, MenuItem} from '../../../../ui-components'\nimport {useTranslation} from '../../../i18n'\nimport {commentsLocaleNamespace} from '../../i18n'\nimport {type CommentStatus, type CommentsUIMode} from '../../types'\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  mode: CommentsUIMode\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, mode} = 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('feature-name')}\n          </Text>\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('status-filter.status-open')\n                    : t('status-filter.status-resolved')\n                }\n                mode=\"bleed\"\n                iconRight={ChevronDownIcon}\n              />\n            }\n            menu={\n              <Menu style={{width: '180px'}}>\n                <MenuItem\n                  iconRight={view === 'open' ? CheckmarkIcon : undefined}\n                  onClick={handleSetOpenView}\n                  text={t('status-filter.status-open-full')}\n                />\n                <MenuItem\n                  iconRight={view === 'resolved' ? CheckmarkIcon : undefined}\n                  onClick={handleSetResolvedView}\n                  text={t('status-filter.status-resolved-full')}\n                  tooltipProps={\n                    mode === 'upsell'\n                      ? {content: t('status-filter.status-resolved-full-upsell')}\n                      : undefined\n                  }\n                  disabled={mode === 'upsell'}\n                />\n              </Menu>\n            }\n            popover={{placement: 'bottom-end'}}\n          />\n\n          <Button\n            aria-label={t('close-pane-button-text-aria-label')}\n            icon={CloseIcon}\n            mode=\"bleed\"\n            onClick={onClose}\n            tooltipProps={{content: t('close-pane-button-text')}}\n          />\n        </Flex>\n      </Flex>\n    </Root>\n  )\n})\n","import {Flex, Layer, useClickOutsideEvent, useLayer, useToast} from '@sanity/ui'\nimport * as PathUtils from '@sanity/util/paths'\nimport {Fragment, useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {styled} from 'styled-components'\n\nimport {type DocumentInspectorProps} from '../../../config'\nimport {useTranslation} from '../../../i18n'\nimport {useCurrentUser} from '../../../store'\nimport {\n  CommentDeleteDialog,\n  CommentsList,\n  CommentsOnboardingPopover,\n  CommentsUpsellPanel,\n} from '../../components'\nimport {type CommentsSelectedPath} from '../../context'\nimport {isTextSelectionComment} from '../../helpers'\nimport {\n  useComments,\n  useCommentsEnabled,\n  useCommentsOnboarding,\n  useCommentsScroll,\n  useCommentsSelectedPath,\n  useCommentsTelemetry,\n  useCommentsUpsell,\n} from '../../hooks'\nimport {commentsLocaleNamespace} from '../../i18n'\nimport {\n  type CommentBaseCreatePayload,\n  type CommentReactionOption,\n  type CommentStatus,\n  type CommentsUIMode,\n  type CommentUpdatePayload,\n} from '../../types'\nimport {CommentsInspectorFeedbackFooter} from './CommentsInspectorFeedbackFooter'\nimport {CommentsInspectorHeader} from './CommentsInspectorHeader'\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 {enabled, mode} = useCommentsEnabled()\n\n  if (!enabled) 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} mode={mode} />\n    </RootLayer>\n  )\n}\n\nfunction CommentsInspectorInner(\n  props: DocumentInspectorProps & {\n    mode: CommentsUIMode\n  },\n) {\n  const {t} = useTranslation(commentsLocaleNamespace)\n  const {onClose, mode} = props\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\n  const rootRef = useRef<HTMLDivElement | null>(null)\n\n  const currentUser = useCurrentUser()\n  const {\n    comments,\n    getComment,\n    isCreatingDataset,\n    mentionOptions,\n    setStatus,\n    status,\n    operation,\n    selectedCommentId,\n    getCommentLink,\n    onClearSelectedComment,\n    onPathOpen,\n  } = useComments()\n  const commentIdParamRef = useRef<string | undefined>(selectedCommentId)\n\n  const didScrollToCommentFromParam = useRef<boolean>(false)\n\n  const pushToast = useToast().push\n  const {isTopLayer} = useLayer()\n\n  const {scrollToComment, scrollToField, scrollToInlineComment} = useCommentsScroll()\n  const {selectedPath, setSelectedPath} = useCommentsSelectedPath()\n  const {isDismissed, setDismissed} = useCommentsOnboarding()\n  const telemetry = useCommentsTelemetry()\n\n  const {upsellData, telemetryLogs: upsellTelemetryLogs} = useCommentsUpsell()\n\n  const currentComments = useMemo(() => comments.data[status], [comments, status])\n\n  const {loading} = comments\n\n  const handleChangeView = useCallback(\n    (nextView: CommentStatus) => {\n      setStatus(nextView)\n      setSelectedPath(null)\n\n      telemetry.commentListViewChanged(nextView)\n    },\n    [setSelectedPath, setStatus, telemetry],\n  )\n\n  const handleCloseInspector = useCallback(() => {\n    onClose()\n    setSelectedPath(null)\n  }, [onClose, setSelectedPath])\n\n  const handleCopyLink = useMemo(() => {\n    if (!getCommentLink) return undefined\n\n    const copyLink = (id: string) => {\n      navigator.clipboard.writeText(getCommentLink(id)).catch(() => {\n        pushToast({\n          closable: true,\n          status: 'error',\n          title: t('copy-link-error-message'),\n        })\n      })\n\n      telemetry.commentLinkCopied()\n    }\n\n    return copyLink\n  }, [getCommentLink, pushToast, t, telemetry])\n\n  const handleCreateRetry = useCallback(\n    (id: string) => {\n      const comment = getComment(id)\n      if (!comment) return\n\n      operation.create({\n        type: 'field',\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        scrollToField(nextPath.fieldPath)\n\n        const isInlineComment = comments.data.open\n          .filter((c) => c.threadId === nextPath?.threadId)\n          .some((x) => isTextSelectionComment(x.parentComment))\n\n        if (isInlineComment && nextPath.threadId) {\n          scrollToInlineComment(nextPath.threadId)\n        }\n      }\n    },\n    [comments.data.open, onPathOpen, scrollToField, scrollToInlineComment, setSelectedPath],\n  )\n\n  const handleNewThreadCreate = useCallback(\n    (nextComment: CommentBaseCreatePayload) => {\n      const fieldPath = nextComment?.payload?.fieldPath || ''\n\n      operation.create({\n        type: 'field',\n        fieldPath,\n        message: nextComment.message,\n        parentCommentId: nextComment.parentCommentId,\n        reactions: nextComment.reactions,\n        status: nextComment.status,\n        threadId: nextComment.threadId,\n      })\n\n      setSelectedPath({\n        fieldPath,\n        origin: 'inspector',\n        threadId: nextComment.threadId,\n      })\n    },\n    [operation, setSelectedPath],\n  )\n\n  const handleReply = useCallback(\n    (nextComment: CommentBaseCreatePayload) => {\n      operation.create({\n        ...nextComment,\n        type: 'field',\n        fieldPath: nextComment?.payload?.fieldPath || '',\n      })\n    },\n    [operation],\n  )\n\n  const handleEdit = useCallback(\n    (id: string, nextComment: CommentUpdatePayload) => {\n      operation.update(id, nextComment)\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 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\n        const comment = getComment(id)\n\n        if (!comment) return\n\n        setSelectedPath({\n          fieldPath: comment.target.path?.field || null,\n          origin: 'inspector',\n          threadId: comment.threadId || null,\n        })\n\n        scrollToComment(id)\n      }\n    },\n    [getComment, operation, scrollToComment, setSelectedPath, 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:\n    // - Clicking outside the inspector when it's the top layer\n    // - The target is not a slate editor string. This is needed because we do not want to\n    //   frequently deselect the selected path when clicking inside the editor.\n    if (selectedPath && isTopLayer) {\n      setSelectedPath(null)\n    }\n  }, [isTopLayer, selectedPath, setSelectedPath])\n\n  useClickOutsideEvent(\n    (event) => {\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      const isPTETarget =\n        event.target instanceof HTMLElement && event.target?.hasAttribute('data-slate-string')\n\n      if (!isPTETarget) {\n        handleDeselectPath()\n      }\n    },\n    () => [rootRef.current],\n  )\n\n  const [loggedTelemetry, setLoggedTelemetry] = useState(false)\n  useEffect(() => {\n    if (loggedTelemetry || mode !== 'upsell') return undefined\n    setLoggedTelemetry(true)\n    if (selectedPath?.origin === 'form') {\n      upsellTelemetryLogs.panelViewed('field_action')\n    } else if (commentIdParamRef.current) {\n      upsellTelemetryLogs.panelViewed('link')\n    } else {\n      upsellTelemetryLogs.panelViewed('document_action')\n    }\n    return () => {\n      upsellTelemetryLogs.panelDismissed()\n    }\n  }, [loggedTelemetry, mode, selectedPath?.origin, upsellTelemetryLogs])\n\n  // Handle scroll to comment from URL param\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      setSelectedPath({\n        fieldPath: commentToScrollTo.target.path?.field || null,\n        origin: 'url',\n        threadId: commentToScrollTo.threadId || null,\n      })\n\n      scrollToComment(commentToScrollTo._id)\n\n      didScrollToCommentFromParam.current = true\n      commentIdParamRef.current = undefined\n\n      onClearSelectedComment?.()\n\n      telemetry.commentViewedFromLink()\n    }\n  }, [\n    getComment,\n    loading,\n    onClearSelectedComment,\n    scrollToComment,\n    setSelectedPath,\n    setStatus,\n    telemetry,\n  ])\n\n  const beforeListNode = useMemo(() => {\n    if (mode === 'upsell' && upsellData) {\n      return (\n        <CommentsUpsellPanel\n          data={upsellData}\n          // eslint-disable-next-line react/jsx-handler-names\n          onPrimaryClick={upsellTelemetryLogs.panelPrimaryClicked}\n          // eslint-disable-next-line react/jsx-handler-names\n          onSecondaryClick={upsellTelemetryLogs.panelSecondaryClicked}\n        />\n      )\n    }\n\n    return null\n  }, [\n    mode,\n    upsellTelemetryLogs.panelPrimaryClicked,\n    upsellTelemetryLogs.panelSecondaryClicked,\n    upsellData,\n  ])\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            mode={mode}\n          />\n        </CommentsOnboardingPopover>\n\n        {currentUser && (\n          <CommentsList\n            beforeListNode={beforeListNode}\n            comments={currentComments}\n            currentUser={currentUser}\n            error={comments.error}\n            loading={loading}\n            mentionOptions={mentionOptions}\n            mode={mode}\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={isCreatingDataset}\n            selectedPath={selectedPath}\n            status={status}\n          />\n        )}\n        {mode === 'default' && <CommentsInspectorFeedbackFooter />}\n      </Flex>\n    </Fragment>\n  )\n}\n","import {CommentIcon} from '@sanity/icons'\n\nimport {defineDocumentInspector, type DocumentInspectorMenuItem} from '../../../config'\nimport {useTranslation} from '../../../i18n'\nimport {COMMENTS_INSPECTOR_NAME} from '../../constants'\nimport {useCommentsEnabled} from '../../hooks'\nimport {commentsLocaleNamespace} from '../../i18n'\nimport {CommentsInspector} from './CommentsInspector'\n\nfunction useMenuItem(): DocumentInspectorMenuItem {\n  const {t} = useTranslation(commentsLocaleNamespace)\n  const {enabled} = useCommentsEnabled()\n\n  return {\n    hidden: !enabled,\n    icon: CommentIcon,\n    showAsAction: true,\n    title: t('feature-name'),\n  }\n}\n\nexport const commentsInspector = defineDocumentInspector({\n  name: COMMENTS_INSPECTOR_NAME,\n  component: CommentsInspector,\n  useMenuItem,\n})\n","import {ConditionalWrapper} from '../../../../ui-components'\nimport {type LayoutProps} from '../../../config'\nimport {useFeatureEnabled} from '../../../hooks'\nimport {AddonDatasetProvider} from '../../../studio'\nimport {CommentsOnboardingProvider, CommentsUpsellProvider} from '../../context'\n\nexport function CommentsStudioLayout(props: LayoutProps) {\n  const {enabled, isLoading} = useFeatureEnabled('studioComments')\n\n  return (\n    <AddonDatasetProvider>\n      <CommentsOnboardingProvider>\n        <ConditionalWrapper\n          condition={!enabled && !isLoading}\n          // eslint-disable-next-line react/jsx-no-bind\n          wrapper={(children) => <CommentsUpsellProvider>{children}</CommentsUpsellProvider>}\n        >\n          {props.renderDefault(props)}\n        </ConditionalWrapper>\n      </CommentsOnboardingProvider>\n    </AddonDatasetProvider>\n  )\n}\n","import {definePlugin} from '../../config'\nimport {commentsUsEnglishLocaleBundle} from '../i18n'\nimport {CommentsDocumentLayout} from './document-layout'\nimport {CommentsField} from './field'\nimport {CommentsInput} from './input'\nimport {commentsInspector} from './inspector'\nimport {CommentsStudioLayout} from './studio-layout'\n\nexport const comments = definePlugin({\n  name: 'sanity/comments',\n\n  document: {\n    inspectors: [commentsInspector],\n    components: {\n      unstable_layout: CommentsDocumentLayout,\n    },\n  },\n\n  form: {\n    components: {\n      field: CommentsField,\n      input: CommentsInput,\n    },\n  },\n\n  studio: {\n    components: {\n      layout: CommentsStudioLayout,\n    },\n  },\n\n  i18n: {bundles: [commentsUsEnglishLocaleBundle]},\n})\n","import {type CreateLinkMetadata} from './types'\n\n// @ts-expect-error: __SANITY_STAGING__ is a global env variable set by the vite config\nconst isStaging = typeof __SANITY_STAGING__ !== 'undefined' && __SANITY_STAGING__ === true\n\nfunction getCreateBaseUrl(customHost?: string) {\n  const host = (customHost ?? isStaging) ? 'create-staging.sanity.build' : 'www.sanity.io'\n  return `https://${host}/app/create`\n}\n\nexport function getCreateLinkUrl(args: {\n  docId: string\n  documentType: string\n  appId: string\n  projectId: string\n  workspaceName: string\n  customHost?: string\n}): string | undefined {\n  const {docId, documentType, appId, projectId, workspaceName, customHost} = args\n  const params = new URLSearchParams()\n  params.append('projectId', projectId)\n  params.append('applicationId', appId)\n  params.append('workspaceName', workspaceName)\n  params.append('documentType', documentType)\n  params.append('documentId', docId)\n  return `${getCreateBaseUrl(customHost)}/studio-import?${params.toString()}`\n}\n\nexport function getCreateDocumentUrl(create: CreateLinkMetadata): string | undefined {\n  return `${getCreateBaseUrl(create.host)}/${create.dataset}/${create._id}`\n}\n","import {type LocaleResourceBundle} from '../../i18n'\n\n/**\n * The locale namespace for the Create integration plugin\n *\n * @public\n */\nexport const createLocaleNamespace = 'create' as const\n\n/**\n * The default locale bundle for the Create integration plugin, which is US English.\n *\n * @internal\n */\nexport const createUsEnglishLocaleBundle: LocaleResourceBundle = {\n  locale: 'en-US',\n  namespace: createLocaleNamespace,\n  resources: () => import('./resources'),\n}\n\n/**\n * The locale resource keys for the Create integration plugin.\n *\n * @alpha\n * @hidden\n */\nexport type {CreateLocaleResourceKeys} from './resources'\n","import {defineEvent} from '@sanity/telemetry'\n\nexport const CreateDocumentLinkCtaClicked = defineEvent({\n  name: 'Create Document Link CTA Clicked',\n  version: 1,\n  description: 'The \"Start in Sanity Create\" button is clicked.',\n})\n\nexport const CreateDocumentLinkAccepted = defineEvent({\n  name: 'Create Document Link Accepted',\n  version: 1,\n  description:\n    'Continue in the \"Start in Sanity Create\" dialog was pressed, or auto-confirm was enabled.',\n})\n\nexport const CreateDocumentUnlinkCtaClicked = defineEvent({\n  name: 'Create Document Unlink CTA Clicked',\n  version: 1,\n  description: 'The Unlink action was clicked',\n})\n\nexport const CreateDocumentUnlinkApproved = defineEvent({\n  name: 'Create Document Unlink Approved',\n  version: 1,\n  description: 'User confirmed that they want the Studio document unlinked',\n})\n\nexport const CreateDocumentOpened = defineEvent({\n  name: 'Create Document Opened',\n  version: 1,\n  description: 'User clicked \"Edit in Create\"',\n})\n","import {useTelemetry} from '@sanity/telemetry/react'\nimport {useCallback, useMemo} from 'react'\n\nimport {\n  CreateDocumentLinkAccepted,\n  CreateDocumentLinkCtaClicked,\n  CreateDocumentOpened,\n  CreateDocumentUnlinkApproved,\n  CreateDocumentUnlinkCtaClicked,\n} from './__telemetry__/create.telemetry'\n\ninterface SanityCreateTelemetryHookValue {\n  linkCtaClicked: () => void\n  linkAccepted: () => void\n  unlinkCtaClicked: () => void\n  unlinkApproved: () => void\n  documentOpened: () => void\n}\n\n/** @internal */\nexport function useSanityCreateTelemetry(): SanityCreateTelemetryHookValue {\n  const telemetry = useTelemetry()\n\n  const startInCreateClicked = useCallback(\n    () => telemetry.log(CreateDocumentLinkCtaClicked),\n    [telemetry],\n  )\n  const startInCreateAccepted = useCallback(\n    () => telemetry.log(CreateDocumentLinkAccepted),\n    [telemetry],\n  )\n  const unlinkClicked = useCallback(\n    () => telemetry.log(CreateDocumentUnlinkCtaClicked),\n    [telemetry],\n  )\n  const unlinkAccepted = useCallback(() => telemetry.log(CreateDocumentUnlinkApproved), [telemetry])\n  const editInCreateClicked = useCallback(() => telemetry.log(CreateDocumentOpened), [telemetry])\n\n  return useMemo(\n    (): SanityCreateTelemetryHookValue => ({\n      linkCtaClicked: startInCreateClicked,\n      linkAccepted: startInCreateAccepted,\n      unlinkCtaClicked: unlinkClicked,\n      unlinkApproved: unlinkAccepted,\n      documentOpened: editInCreateClicked,\n    }),\n    [\n      startInCreateClicked,\n      startInCreateAccepted,\n      unlinkClicked,\n      unlinkAccepted,\n      editInCreateClicked,\n    ],\n  )\n}\n","import {Stack, Text} from '@sanity/ui'\nimport {useCallback, useId, useState} from 'react'\n\nimport {Dialog} from '../../../ui-components'\nimport {PatchEvent, unset} from '../../form'\nimport {Translate, useTranslation} from '../../i18n'\nimport {createLocaleNamespace} from '../i18n'\nimport {useSanityCreateTelemetry} from '../useSanityCreateTelemetry'\n\nexport interface CreateUnlinkConfirmDialogProps {\n  onClose: () => void\n  onDocumentChange: (patchEvent: PatchEvent) => void\n  documentTitle?: string\n}\n\nexport function CreateUnlinkConfirmDialog(props: CreateUnlinkConfirmDialogProps) {\n  const {onClose, onDocumentChange, documentTitle} = props\n  const id = useId()\n  const [unlinking, setUnlinking] = useState(false)\n  const {t} = useTranslation(createLocaleNamespace)\n  const telemetry = useSanityCreateTelemetry()\n\n  const unlink = useCallback(() => {\n    setUnlinking(true)\n    onDocumentChange(PatchEvent.from(unset(['_create'])))\n    telemetry.unlinkApproved()\n    // on not calling onClose:\n    // when this mutation propagates down the render tree again, this dialog will me unmounted;\n    // the code-path leading here will no longer be rendered\n  }, [onDocumentChange, telemetry])\n\n  return (\n    <Dialog\n      footer={{\n        cancelButton: {\n          onClick: onClose,\n          text: t('unlink-from-create-dialog.cancel.text'),\n        },\n        confirmButton: {\n          disabled: unlinking,\n          onClick: unlink,\n          text: t('unlink-from-create-dialog.unlink.text'),\n          tone: 'primary',\n        },\n      }}\n      id={id}\n      header={t('unlink-from-create-dialog.header')}\n      onClose={onClose}\n    >\n      <Stack space={4}>\n        <Text size={1}>\n          <Translate\n            t={t}\n            i18nKey=\"unlink-from-create-dialog.first-paragraph\"\n            values={{title: documentTitle || t('unlink-from-create-dialog.document.untitled.text')}}\n          />\n        </Text>\n\n        <Text size={1}>{t('unlink-from-create-dialog.second-paragraph')}</Text>\n      </Stack>\n    </Dialog>\n  )\n}\n","import {PortalProvider, usePortal} from '@sanity/ui'\nimport {type ReactNode} from 'react'\n\nexport function DialogPortalProvider(props: {portalElementId: string; children: ReactNode}) {\n  const {children, portalElementId} = props\n  const {element, elements} = usePortal()\n  const portalElement = elements?.[portalElementId] || element\n\n  return <PortalProvider element={portalElement}>{children}</PortalProvider>\n}\n","import {LaunchIcon} from '@sanity/icons'\nimport {Flex} from '@sanity/ui'\nimport {useCallback, useState} from 'react'\n\nimport {Button} from '../../../ui-components'\nimport {useTranslation} from '../../i18n'\nimport {getCreateDocumentUrl} from '../createDocumentUrls'\nimport {createLocaleNamespace} from '../i18n'\nimport {type CreateLinkedActionsProps} from '../types'\nimport {useSanityCreateTelemetry} from '../useSanityCreateTelemetry'\nimport {CreateUnlinkConfirmDialog} from './CreateUnlinkConfirmDialog'\nimport {DialogPortalProvider} from './DialogPortalProvider'\n\nexport function CreateLinkedActions(props: CreateLinkedActionsProps) {\n  const {metadata, panelPortalElementId, onDocumentChange, documentTitle} = props\n  const {t} = useTranslation(createLocaleNamespace)\n  const href = getCreateDocumentUrl(metadata)\n\n  const telemetry = useSanityCreateTelemetry()\n\n  const onEditInCreateClicked = useCallback(() => telemetry.documentOpened(), [telemetry])\n\n  const [unlinkConfirm, setUnlinkConfirm] = useState(false)\n\n  const confirmUnlink = useCallback(() => {\n    setUnlinkConfirm(true)\n    telemetry.unlinkCtaClicked()\n  }, [telemetry])\n\n  const cancelUnlink = useCallback(() => setUnlinkConfirm(false), [])\n  return (\n    <Flex gap={2}>\n      <Button\n        as={'a'}\n        text={t('edit-in-create-button.text')}\n        iconRight={LaunchIcon}\n        mode=\"ghost\"\n        href={href}\n        target=\"_blank\"\n        onClick={onEditInCreateClicked}\n      />\n      <Button text={t('unlink-from-create-button.text')} onClick={confirmUnlink} />\n      {unlinkConfirm && (\n        <DialogPortalProvider portalElementId={panelPortalElementId}>\n          <CreateUnlinkConfirmDialog\n            onClose={cancelUnlink}\n            onDocumentChange={onDocumentChange}\n            documentTitle={documentTitle}\n          />\n        </DialogPortalProvider>\n      )}\n    </Flex>\n  )\n}\n","export const createUserDocumentationUrl = 'https://snty.link/create-docs?ref=studio'\n","import {LaunchIcon} from '@sanity/icons'\nimport {type ForwardedRef, forwardRef} from 'react'\n\nimport {Button} from '../../../ui-components'\nimport {useTranslation} from '../../i18n'\nimport {createLocaleNamespace} from '../i18n'\nimport {createUserDocumentationUrl} from './constants'\n\nexport const CreateLearnMoreButton = forwardRef(function CreateLearnMoreButton(\n  props,\n  ref: ForwardedRef<HTMLButtonElement>,\n) {\n  const {t} = useTranslation(createLocaleNamespace)\n  return (\n    <Button\n      as={'a'}\n      href={createUserDocumentationUrl}\n      target=\"_blank\"\n      ref={ref}\n      text={t('start-in-create-dialog.cta.learn-more')}\n      mode=\"bleed\"\n      tone=\"primary\"\n      iconRight={LaunchIcon}\n    />\n  )\n})\n","export function CreateSvg() {\n  return (\n    <svg\n      height=\"auto\"\n      width=\"100%\"\n      viewBox=\"0 0 307 201\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      preserveAspectRatio=\"xMinYMin\"\n      style={{display: 'block'}}\n    >\n      <g>\n        <rect width=\"307\" height=\"201\" fill=\"url(#paint0_radial_38_7016)\" />\n        <path\n          d=\"M168.5 -0.5V-1H167.5V-0.5H168.5ZM167.646 174.854C167.842 175.049 168.158 175.049 168.354 174.854L171.536 171.672C171.731 171.476 171.731 171.16 171.536 170.964C171.34 170.769 171.024 170.769 170.828 170.964L168 173.793L165.172 170.964C164.976 170.769 164.66 170.769 164.464 170.964C164.269 171.16 164.269 171.476 164.464 171.672L167.646 174.854ZM167.5 -0.5V174.5H168.5V-0.5H167.5Z\"\n          fill=\"url(#paint1_linear_38_7016)\"\n        />\n        <path\n          d=\"M251 37.5H352C353.381 37.5 354.5 38.6193 354.5 40V64C354.5 65.3807 353.381 66.5 352 66.5H251C249.619 66.5 248.5 65.3807 248.5 64V40C248.5 38.6193 249.619 37.5 251 37.5Z\"\n          fill=\"#181410\"\n          stroke=\"#F9BC15\"\n        />\n        <path\n          d=\"M251 104.5H352C353.381 104.5 354.5 105.619 354.5 107V210C354.5 211.381 353.381 212.5 352 212.5H251C249.619 212.5 248.5 211.381 248.5 210V107C248.5 105.619 249.619 104.5 251 104.5Z\"\n          fill=\"#071715\"\n          stroke=\"#0FF0A1\"\n        />\n        <path\n          d=\"M58.7803 20C58.7803 16.6863 61.4666 14 64.7803 14H135.484C138.797 14 141.484 16.6863 141.484 20V23.1429C141.484 26.4566 138.797 29.1429 135.484 29.1429H64.7803C61.4666 29.1429 58.7803 26.4566 58.7803 23.1429V20Z\"\n          fill=\"#0FF0A1\"\n        />\n        <path\n          d=\"M25 50.2857C25 46.972 27.6863 44.2857 31 44.2857H148.297C151.61 44.2857 154.297 46.972 154.297 50.2857V53.4286C154.297 56.7423 151.61 59.4286 148.297 59.4286H31C27.6863 59.4286 25 56.7423 25 53.4286V50.2857Z\"\n          fill=\"#F9BC15\"\n        />\n        <path\n          d=\"M25 80.5714C25 77.2577 27.6863 74.5714 31 74.5714H141.308C144.621 74.5714 147.308 77.2577 147.308 80.5714V114C147.308 117.314 144.621 120 141.308 120H31C27.6863 120 25 117.314 25 114V80.5714Z\"\n          fill=\"#0FF0A1\"\n        />\n        <path\n          d=\"M28.4941 21.5714C28.4941 19.3198 30.3194 17.4945 32.5711 17.4945H51.2084C53.46 17.4945 55.2853 19.3198 55.2853 21.5714V21.5714C55.2853 23.8231 53.46 25.6484 51.2084 25.6484H32.5711C30.3194 25.6484 28.4941 23.8231 28.4941 21.5714V21.5714Z\"\n          fill=\"#383D51\"\n        />\n        <path\n          d=\"M28.4941 82.1429C28.4941 79.8912 30.3194 78.0659 32.5711 78.0659H46.5491C48.8007 78.0659 50.626 79.8912 50.626 82.1429V82.1429C50.626 84.3945 48.8007 86.2198 46.5491 86.2198H32.5711C30.3194 86.2198 28.4941 84.3945 28.4941 82.1429V82.1429Z\"\n          fill=\"#015133\"\n        />\n        <path\n          d=\"M62.2744 21.5714C62.2744 19.3198 64.0997 17.4945 66.3513 17.4945H100.132C102.383 17.4945 104.208 19.3198 104.208 21.5714V21.5714C104.208 23.8231 102.383 25.6484 100.132 25.6484H66.3513C64.0997 25.6484 62.2744 23.8231 62.2744 21.5714V21.5714Z\"\n          fill=\"#015133\"\n        />\n        <path\n          d=\"M111.198 21.5714C111.198 19.3198 113.024 17.4945 115.275 17.4945H133.913C136.164 17.4945 137.989 19.3198 137.989 21.5714V21.5714C137.989 23.8231 136.164 25.6484 133.913 25.6484H115.275C113.024 25.6484 111.198 23.8231 111.198 21.5714V21.5714Z\"\n          fill=\"#015133\"\n        />\n        <path\n          d=\"M28.4941 36.7143C28.4941 34.4627 30.3194 32.6374 32.5711 32.6374H86.1535C88.4051 32.6374 90.2304 34.4627 90.2304 36.7143V36.7143C90.2304 38.9659 88.4051 40.7912 86.1535 40.7912H32.5711C30.3194 40.7912 28.4941 38.9659 28.4941 36.7143V36.7143Z\"\n          fill=\"#383D51\"\n        />\n        <path\n          d=\"M97.2197 36.7143C97.2197 34.4627 99.045 32.6374 101.297 32.6374H131.582C133.834 32.6374 135.659 34.4627 135.659 36.7143V36.7143C135.659 38.9659 133.834 40.7912 131.582 40.7912H101.297C99.045 40.7912 97.2197 38.9659 97.2197 36.7143V36.7143Z\"\n          fill=\"#383D51\"\n        />\n        <path\n          d=\"M28.4941 51.8571C28.4941 49.6055 30.3194 47.7802 32.5711 47.7802H66.3513C68.6029 47.7802 70.4282 49.6055 70.4282 51.8571V51.8571C70.4282 54.1088 68.6029 55.9341 66.3513 55.9341H32.5711C30.3194 55.9341 28.4941 54.1088 28.4941 51.8571V51.8571Z\"\n          fill=\"#965908\"\n        />\n        <path\n          d=\"M77.418 51.8571C77.418 49.6055 79.2433 47.7802 81.4949 47.7802H146.726C148.977 47.7802 150.803 49.6055 150.803 51.8571V51.8571C150.803 54.1088 148.977 55.9341 146.726 55.9341H81.4949C79.2433 55.9341 77.418 54.1088 77.418 51.8571V51.8571Z\"\n          fill=\"#965908\"\n        />\n        <path\n          d=\"M57.6152 82.1429C57.6152 79.8912 59.4405 78.0659 61.6922 78.0659H126.923C129.175 78.0659 131 79.8912 131 82.1429V82.1429C131 84.3945 129.175 86.2198 126.923 86.2198H61.6922C59.4405 86.2198 57.6152 84.3945 57.6152 82.1429V82.1429Z\"\n          fill=\"#015133\"\n        />\n        <path\n          d=\"M28.4941 67C28.4941 64.7484 30.3194 62.9231 32.5711 62.9231H57.0326C59.2842 62.9231 61.1095 64.7484 61.1095 67V67C61.1095 69.2516 59.2842 71.0769 57.0326 71.0769H32.5711C30.3194 71.0769 28.4941 69.2516 28.4941 67V67Z\"\n          fill=\"#383D51\"\n        />\n        <path\n          d=\"M28.4941 97.2857C28.4941 95.0341 30.3194 93.2088 32.5711 93.2088H93.1425C95.3941 93.2088 97.2194 95.0341 97.2194 97.2857V97.2857C97.2194 99.5373 95.3941 101.363 93.1425 101.363H32.5711C30.3194 101.363 28.4941 99.5373 28.4941 97.2857V97.2857Z\"\n          fill=\"#015133\"\n        />\n        <path\n          d=\"M28.4941 112.429C28.4941 110.177 30.3194 108.352 32.5711 108.352H135.077C137.328 108.352 139.153 110.177 139.153 112.429V112.429C139.153 114.68 137.328 116.505 135.077 116.505H32.5711C30.3194 116.505 28.4941 114.68 28.4941 112.429V112.429Z\"\n          fill=\"#015133\"\n        />\n        <path\n          d=\"M68.0986 67C68.0986 64.7484 69.9239 62.9231 72.1756 62.9231H109.45C111.702 62.9231 113.527 64.7484 113.527 67V67C113.527 69.2516 111.702 71.0769 109.45 71.0769H72.1756C69.9239 71.0769 68.0986 69.2516 68.0986 67V67Z\"\n          fill=\"#383D51\"\n        />\n        <path\n          d=\"M104.209 97.2857C104.209 95.0341 106.034 93.2088 108.286 93.2088H139.736C141.988 93.2088 143.813 95.0341 143.813 97.2857V97.2857C143.813 99.5373 141.988 101.363 139.736 101.363H108.286C106.034 101.363 104.209 99.5373 104.209 97.2857V97.2857Z\"\n          fill=\"#015133\"\n        />\n        <path\n          d=\"M120.517 67C120.517 64.7484 122.342 62.9231 124.594 62.9231H140.901C143.153 62.9231 144.978 64.7484 144.978 67V67C144.978 69.2516 143.153 71.0769 140.901 71.0769H124.594C122.342 71.0769 120.517 69.2516 120.517 67V67Z\"\n          fill=\"#383D51\"\n        />\n        <path\n          d=\"M28.4941 203.143C28.4941 200.891 30.3194 199.066 32.5711 199.066H46.5491C48.8007 199.066 50.626 200.891 50.626 203.143V203.143C50.626 205.394 48.8007 207.22 46.5491 207.22H32.5711C30.3194 207.22 28.4941 205.394 28.4941 203.143V203.143Z\"\n          fill=\"#383D51\"\n        />\n        <path\n          d=\"M28.4941 142.571C28.4941 140.32 30.3194 138.495 32.5711 138.495H133.912C136.163 138.495 137.988 140.32 137.988 142.571V142.571C137.988 144.823 136.163 146.648 133.912 146.648H32.5711C30.3194 146.648 28.4941 144.823 28.4941 142.571V142.571Z\"\n          fill=\"#383D51\"\n        />\n        <path\n          d=\"M28.4941 157.714C28.4941 155.463 30.3194 153.637 32.5711 153.637H51.2082C53.4599 153.637 55.2852 155.463 55.2852 157.714V157.714C55.2852 159.966 53.4599 161.791 51.2082 161.791H32.5711C30.3194 161.791 28.4941 159.966 28.4941 157.714V157.714Z\"\n          fill=\"#383D51\"\n        />\n        <path\n          d=\"M63.1094 157.714C63.1094 155.463 64.9347 153.637 67.1863 153.637H140.902C143.153 153.637 144.979 155.463 144.979 157.714V157.714C144.979 159.966 143.153 161.791 140.902 161.791H67.1863C64.9347 161.791 63.1094 159.966 63.1094 157.714V157.714Z\"\n          fill=\"#383D51\"\n        />\n        <path\n          d=\"M28.4941 172.857C28.4941 170.606 30.3194 168.78 32.5711 168.78H41.4231C43.6747 168.78 45.5 170.606 45.5 172.857V172.857C45.5 175.109 43.6747 176.934 41.4231 176.934H32.5711C30.3194 176.934 28.4941 175.109 28.4941 172.857V172.857Z\"\n          fill=\"#383D51\"\n        />\n        <path\n          d=\"M52.875 172.857C52.875 170.606 54.7003 168.78 56.9519 168.78H146.725C148.976 168.78 150.802 170.606 150.802 172.857V172.857C150.802 175.109 148.976 176.934 146.725 176.934H56.9519C54.7003 176.934 52.875 175.109 52.875 172.857V172.857Z\"\n          fill=\"#383D51\"\n        />\n        <path\n          d=\"M57.6152 203.143C57.6152 200.891 59.4405 199.066 61.6922 199.066H126.923C129.175 199.066 131 200.891 131 203.143V203.143C131 205.394 129.175 207.22 126.923 207.22H61.6922C59.4405 207.22 57.6152 205.394 57.6152 203.143V203.143Z\"\n          fill=\"#383D51\"\n        />\n        <path\n          d=\"M28.4941 188C28.4941 185.748 30.3194 183.923 32.5711 183.923H86.1537C88.4053 183.923 90.2306 185.748 90.2306 188V188C90.2306 190.252 88.4053 192.077 86.1537 192.077H32.5711C30.3194 192.077 28.4941 190.252 28.4941 188V188Z\"\n          fill=\"#383D51\"\n        />\n        <path\n          d=\"M97.2197 188C97.2197 185.748 99.045 183.923 101.297 183.923H138.571C140.823 183.923 142.648 185.748 142.648 188V188C142.648 190.252 140.823 192.077 138.571 192.077H101.297C99.045 192.077 97.2197 190.252 97.2197 188V188Z\"\n          fill=\"#383D51\"\n        />\n        <path\n          d=\"M254.062 29H251.145V19.5455H254.192C255.109 19.5455 255.894 19.7347 256.546 20.1133C257.199 20.4888 257.699 21.0289 258.047 21.7337C258.394 22.4354 258.568 23.2756 258.568 24.2543C258.568 25.2391 258.393 26.087 258.042 26.7979C257.691 27.5058 257.18 28.0505 256.509 28.4322C255.838 28.8107 255.023 29 254.062 29ZM252.29 27.9844H253.989C254.77 27.9844 255.418 27.8336 255.932 27.532C256.446 27.2304 256.829 26.801 257.082 26.244C257.334 25.6869 257.46 25.0237 257.46 24.2543C257.46 23.491 257.336 22.8339 257.086 22.283C256.837 21.729 256.465 21.3043 255.969 21.0089C255.474 20.7103 254.857 20.5611 254.118 20.5611H252.29V27.9844ZM263.314 29.1477C262.631 29.1477 262.041 28.9969 261.546 28.6953C261.053 28.3906 260.673 27.9659 260.406 27.4212C260.141 26.8733 260.009 26.2363 260.009 25.5099C260.009 24.7836 260.141 24.1435 260.406 23.5895C260.673 23.0324 261.046 22.5985 261.523 22.2876C262.003 21.9737 262.563 21.8168 263.203 21.8168C263.572 21.8168 263.937 21.8783 264.297 22.0014C264.657 22.1245 264.985 22.3246 265.281 22.6016C265.576 22.8755 265.811 23.2386 265.987 23.6911C266.162 24.1435 266.25 24.7005 266.25 25.3622V25.8239H260.784V24.8821H265.142C265.142 24.482 265.062 24.125 264.902 23.8111C264.745 23.4972 264.52 23.2494 264.228 23.0678C263.939 22.8862 263.597 22.7955 263.203 22.7955C262.769 22.7955 262.394 22.9032 262.077 23.1186C261.763 23.331 261.521 23.608 261.352 23.9496C261.183 24.2912 261.098 24.6574 261.098 25.0483V25.6761C261.098 26.2116 261.19 26.6656 261.375 27.038C261.563 27.4073 261.823 27.6889 262.155 27.8828C262.488 28.0736 262.874 28.169 263.314 28.169C263.6 28.169 263.859 28.129 264.089 28.049C264.323 27.9659 264.525 27.8428 264.694 27.6797C264.864 27.5135 264.994 27.3073 265.087 27.0611L266.139 27.3565C266.028 27.7135 265.842 28.0275 265.581 28.2983C265.319 28.5661 264.996 28.7753 264.611 28.9261C264.226 29.0739 263.794 29.1477 263.314 29.1477ZM272.93 23.4972L271.951 23.7741C271.89 23.611 271.799 23.4525 271.679 23.2987C271.562 23.1417 271.402 23.0124 271.199 22.9109C270.996 22.8093 270.736 22.7585 270.419 22.7585C269.985 22.7585 269.623 22.8585 269.334 23.0586C269.048 23.2556 268.904 23.5064 268.904 23.8111C268.904 24.0819 269.003 24.2958 269.2 24.4528C269.397 24.6097 269.705 24.7405 270.123 24.8452L271.176 25.1037C271.81 25.2576 272.282 25.493 272.593 25.81C272.904 26.1239 273.059 26.5286 273.059 27.0241C273.059 27.4304 272.942 27.7936 272.708 28.1136C272.478 28.4337 272.154 28.6861 271.739 28.8707C271.324 29.0554 270.84 29.1477 270.289 29.1477C269.566 29.1477 268.968 28.9908 268.494 28.6768C268.02 28.3629 267.72 27.9044 267.593 27.3011L268.627 27.0426C268.726 27.4242 268.912 27.7105 269.186 27.9013C269.463 28.0921 269.825 28.1875 270.271 28.1875C270.779 28.1875 271.182 28.0798 271.48 27.8643C271.782 27.6458 271.933 27.3842 271.933 27.0795C271.933 26.8333 271.847 26.6271 271.674 26.4609C271.502 26.2917 271.237 26.1655 270.88 26.0824L269.699 25.8054C269.049 25.6515 268.572 25.413 268.267 25.0898C267.966 24.7636 267.815 24.3558 267.815 23.8665C267.815 23.4664 267.927 23.1125 268.152 22.8047C268.38 22.4969 268.689 22.2553 269.08 22.0799C269.474 21.9045 269.92 21.8168 270.419 21.8168C271.12 21.8168 271.671 21.9706 272.071 22.2784C272.475 22.5862 272.761 22.9924 272.93 23.4972ZM277.58 29.1477C276.915 29.1477 276.343 28.9908 275.863 28.6768C275.383 28.3629 275.013 27.9305 274.755 27.3796C274.496 26.8287 274.367 26.1993 274.367 25.4915C274.367 24.7713 274.499 24.1358 274.764 23.5849C275.032 23.0309 275.404 22.5985 275.881 22.2876C276.361 21.9737 276.921 21.8168 277.562 21.8168C278.06 21.8168 278.509 21.9091 278.91 22.0938C279.31 22.2784 279.637 22.5369 279.893 22.8693C280.148 23.2017 280.307 23.5895 280.368 24.0327H279.279C279.196 23.7095 279.011 23.4233 278.725 23.174C278.442 22.9216 278.06 22.7955 277.58 22.7955C277.155 22.7955 276.783 22.9062 276.463 23.1278C276.146 23.3464 275.898 23.6557 275.72 24.0558C275.544 24.4528 275.456 24.919 275.456 25.4545C275.456 26.0024 275.543 26.4794 275.715 26.8857C275.89 27.2919 276.137 27.6074 276.454 27.832C276.774 28.0567 277.149 28.169 277.58 28.169C277.863 28.169 278.12 28.1198 278.351 28.0213C278.582 27.9228 278.777 27.7812 278.937 27.5966C279.097 27.4119 279.211 27.1903 279.279 26.9318H280.368C280.307 27.3504 280.154 27.7274 279.911 28.0629C279.671 28.3952 279.353 28.6599 278.956 28.8569C278.562 29.0508 278.103 29.1477 277.58 29.1477ZM281.961 29V21.9091H283.014V22.9801H283.087C283.217 22.6293 283.451 22.3446 283.789 22.1261C284.128 21.9076 284.509 21.7983 284.934 21.7983C285.014 21.7983 285.114 21.7998 285.234 21.8029C285.354 21.806 285.445 21.8106 285.506 21.8168V22.9247C285.47 22.9155 285.385 22.9016 285.253 22.8832C285.123 22.8616 284.986 22.8509 284.842 22.8509C284.497 22.8509 284.189 22.9232 283.918 23.0678C283.651 23.2094 283.438 23.4064 283.281 23.6587C283.127 23.908 283.051 24.1927 283.051 24.5128V29H281.961ZM286.798 29V21.9091H287.887V29H286.798ZM287.352 20.7273C287.14 20.7273 286.956 20.6549 286.803 20.5103C286.652 20.3656 286.576 20.1918 286.576 19.9886C286.576 19.7855 286.652 19.6116 286.803 19.467C286.956 19.3223 287.14 19.25 287.352 19.25C287.564 19.25 287.746 19.3223 287.897 19.467C288.051 19.6116 288.127 19.7855 288.127 19.9886C288.127 20.1918 288.051 20.3656 287.897 20.5103C287.746 20.6549 287.564 20.7273 287.352 20.7273ZM289.883 31.6591V21.9091H290.935V23.0355H291.065C291.145 22.9124 291.256 22.7554 291.397 22.5646C291.542 22.3707 291.748 22.1984 292.016 22.0476C292.287 21.8937 292.653 21.8168 293.114 21.8168C293.711 21.8168 294.238 21.966 294.693 22.2646C295.149 22.5631 295.504 22.9863 295.76 23.5341C296.015 24.0819 296.143 24.7282 296.143 25.473C296.143 26.224 296.015 26.8749 295.76 27.4258C295.504 27.9736 295.15 28.3983 294.698 28.6999C294.245 28.9985 293.724 29.1477 293.133 29.1477C292.677 29.1477 292.313 29.0723 292.039 28.9215C291.765 28.7676 291.554 28.5937 291.406 28.3999C291.259 28.2029 291.145 28.0398 291.065 27.9105H290.972V31.6591H289.883ZM290.954 25.4545C290.954 25.9901 291.032 26.4625 291.189 26.8718C291.346 27.2781 291.576 27.5966 291.877 27.8274C292.179 28.0552 292.548 28.169 292.985 28.169C293.441 28.169 293.821 28.049 294.125 27.8089C294.433 27.5658 294.664 27.2396 294.818 26.8303C294.975 26.4179 295.053 25.9593 295.053 25.4545C295.053 24.956 294.976 24.5066 294.823 24.1065C294.672 23.7034 294.442 23.3848 294.135 23.1509C293.83 22.9139 293.447 22.7955 292.985 22.7955C292.542 22.7955 292.17 22.9078 291.868 23.1325C291.566 23.354 291.339 23.6649 291.185 24.065C291.031 24.462 290.954 24.9252 290.954 25.4545ZM300.889 21.9091V22.8324H297.214V21.9091H300.889ZM298.285 20.2102H299.374V26.9688C299.374 27.2765 299.419 27.5073 299.508 27.6612C299.601 27.812 299.718 27.9136 299.859 27.9659C300.004 28.0152 300.156 28.0398 300.316 28.0398C300.436 28.0398 300.535 28.0336 300.612 28.0213C300.689 28.0059 300.75 27.9936 300.796 27.9844L301.018 28.9631C300.944 28.9908 300.841 29.0185 300.709 29.0462C300.576 29.0769 300.408 29.0923 300.205 29.0923C299.898 29.0923 299.596 29.0262 299.301 28.8938C299.008 28.7615 298.765 28.5599 298.571 28.2891C298.38 28.0182 298.285 27.6766 298.285 27.2642V20.2102ZM302.527 29V21.9091H303.617V29H302.527ZM303.081 20.7273C302.869 20.7273 302.686 20.6549 302.532 20.5103C302.381 20.3656 302.306 20.1918 302.306 19.9886C302.306 19.7855 302.381 19.6116 302.532 19.467C302.686 19.3223 302.869 19.25 303.081 19.25C303.294 19.25 303.475 19.3223 303.626 19.467C303.78 19.6116 303.857 19.7855 303.857 19.9886C303.857 20.1918 303.78 20.3656 303.626 20.5103C303.475 20.6549 303.294 20.7273 303.081 20.7273ZM308.493 29.1477C307.853 29.1477 307.291 28.9954 306.808 28.6907C306.328 28.386 305.952 27.9598 305.682 27.4119C305.414 26.8641 305.28 26.224 305.28 25.4915C305.28 24.7528 305.414 24.1081 305.682 23.5572C305.952 23.0063 306.328 22.5785 306.808 22.2738C307.291 21.9691 307.853 21.8168 308.493 21.8168C309.133 21.8168 309.693 21.9691 310.173 22.2738C310.657 22.5785 311.032 23.0063 311.3 23.5572C311.571 24.1081 311.706 24.7528 311.706 25.4915C311.706 26.224 311.571 26.8641 311.3 27.4119C311.032 27.9598 310.657 28.386 310.173 28.6907C309.693 28.9954 309.133 29.1477 308.493 29.1477ZM308.493 28.169C308.979 28.169 309.379 28.0444 309.693 27.7951C310.007 27.5458 310.24 27.218 310.39 26.8118C310.541 26.4055 310.617 25.9654 310.617 25.4915C310.617 25.0175 310.541 24.5759 310.39 24.1665C310.24 23.7572 310.007 23.4264 309.693 23.174C309.379 22.9216 308.979 22.7955 308.493 22.7955C308.007 22.7955 307.607 22.9216 307.293 23.174C306.979 23.4264 306.747 23.7572 306.596 24.1665C306.445 24.5759 306.369 25.0175 306.369 25.4915C306.369 25.9654 306.445 26.4055 306.596 26.8118C306.747 27.218 306.979 27.5458 307.293 27.7951C307.607 28.0444 308.007 28.169 308.493 28.169ZM314.459 24.7344V29H313.369V21.9091H314.422V23.017H314.514C314.68 22.657 314.933 22.3677 315.271 22.1491C315.61 21.9276 316.047 21.8168 316.582 21.8168C317.062 21.8168 317.483 21.9152 317.843 22.1122C318.203 22.3061 318.483 22.6016 318.683 22.9986C318.883 23.3925 318.983 23.8911 318.983 24.4943V29H317.893V24.5682C317.893 24.0111 317.749 23.5772 317.459 23.2663C317.17 22.9524 316.773 22.7955 316.268 22.7955C315.921 22.7955 315.61 22.8709 315.336 23.0217C315.065 23.1725 314.851 23.3925 314.694 23.6818C314.537 23.9711 314.459 24.322 314.459 24.7344Z\"\n          fill=\"#F9BC15\"\n        />\n        <path\n          d=\"M251.145 96V86.5455H254.45C255.109 86.5455 255.652 86.6593 256.08 86.8871C256.508 87.1117 256.826 87.4149 257.036 87.7965C257.245 88.1751 257.349 88.5952 257.349 89.0568C257.349 89.4631 257.277 89.7985 257.132 90.0632C256.991 90.3279 256.803 90.5372 256.569 90.6911C256.338 90.8449 256.088 90.9588 255.817 91.0327V91.125C256.106 91.1435 256.397 91.245 256.689 91.4297C256.982 91.6143 257.226 91.879 257.423 92.2237C257.62 92.5684 257.719 92.9901 257.719 93.4886C257.719 93.9626 257.611 94.3888 257.396 94.7674C257.18 95.146 256.84 95.446 256.375 95.6676C255.911 95.8892 255.306 96 254.561 96H251.145ZM252.29 94.9844H254.561C255.309 94.9844 255.84 94.8397 256.154 94.5504C256.471 94.258 256.629 93.9041 256.629 93.4886C256.629 93.1686 256.548 92.8731 256.385 92.6023C256.221 92.3284 255.989 92.1098 255.688 91.9467C255.386 91.7805 255.029 91.6974 254.616 91.6974H252.29V94.9844ZM252.29 90.7003H254.413C254.758 90.7003 255.069 90.6326 255.346 90.4972C255.626 90.3617 255.848 90.1709 256.011 89.9247C256.177 89.6785 256.26 89.3892 256.26 89.0568C256.26 88.6413 256.115 88.2889 255.826 87.9996C255.537 87.7073 255.078 87.5611 254.45 87.5611H252.29V90.7003ZM262.333 96.1477C261.693 96.1477 261.131 95.9954 260.648 95.6907C260.168 95.386 259.792 94.9598 259.521 94.4119C259.254 93.8641 259.12 93.224 259.12 92.4915C259.12 91.7528 259.254 91.1081 259.521 90.5572C259.792 90.0063 260.168 89.5785 260.648 89.2738C261.131 88.9691 261.693 88.8168 262.333 88.8168C262.973 88.8168 263.533 88.9691 264.013 89.2738C264.497 89.5785 264.872 90.0063 265.14 90.5572C265.411 91.1081 265.546 91.7528 265.546 92.4915C265.546 93.224 265.411 93.8641 265.14 94.4119C264.872 94.9598 264.497 95.386 264.013 95.6907C263.533 95.9954 262.973 96.1477 262.333 96.1477ZM262.333 95.169C262.819 95.169 263.219 95.0444 263.533 94.7951C263.847 94.5458 264.079 94.218 264.23 93.8118C264.381 93.4055 264.456 92.9654 264.456 92.4915C264.456 92.0175 264.381 91.5759 264.23 91.1665C264.079 90.7572 263.847 90.4264 263.533 90.174C263.219 89.9216 262.819 89.7955 262.333 89.7955C261.847 89.7955 261.447 89.9216 261.133 90.174C260.819 90.4264 260.586 90.7572 260.436 91.1665C260.285 91.5759 260.209 92.0175 260.209 92.4915C260.209 92.9654 260.285 93.4055 260.436 93.8118C260.586 94.218 260.819 94.5458 261.133 94.7951C261.447 95.0444 261.847 95.169 262.333 95.169ZM269.887 96.1477C269.296 96.1477 268.774 95.9985 268.322 95.6999C267.869 95.3983 267.515 94.9736 267.26 94.4258C267.004 93.8749 266.877 93.224 266.877 92.473C266.877 91.7282 267.004 91.0819 267.26 90.5341C267.515 89.9863 267.871 89.5631 268.326 89.2646C268.782 88.966 269.308 88.8168 269.905 88.8168C270.367 88.8168 270.731 88.8937 270.999 89.0476C271.27 89.1984 271.476 89.3707 271.618 89.5646C271.762 89.7554 271.875 89.9124 271.955 90.0355H272.047V86.5455H273.137V96H272.084V94.9105H271.955C271.875 95.0398 271.761 95.2029 271.613 95.3999C271.465 95.5937 271.255 95.7676 270.981 95.9215C270.707 96.0723 270.342 96.1477 269.887 96.1477ZM270.034 95.169C270.471 95.169 270.841 95.0552 271.142 94.8274C271.444 94.5966 271.673 94.2781 271.83 93.8718C271.987 93.4625 272.066 92.9901 272.066 92.4545C272.066 91.9252 271.989 91.462 271.835 91.065C271.681 90.6649 271.453 90.354 271.152 90.1325C270.85 89.9078 270.478 89.7955 270.034 89.7955C269.573 89.7955 269.188 89.9139 268.88 90.1509C268.576 90.3848 268.346 90.7034 268.192 91.1065C268.042 91.5066 267.966 91.956 267.966 92.4545C267.966 92.9593 268.043 93.4179 268.197 93.8303C268.354 94.2396 268.585 94.5658 268.889 94.8089C269.197 95.049 269.579 95.169 270.034 95.169ZM275.985 98.6591C275.8 98.6591 275.636 98.6437 275.491 98.6129C275.346 98.5852 275.246 98.5575 275.191 98.5298L275.468 97.5696C275.733 97.6373 275.967 97.6619 276.17 97.6435C276.373 97.625 276.553 97.5342 276.71 97.3711C276.87 97.2111 277.016 96.951 277.148 96.5909L277.351 96.0369L274.729 88.9091H275.911L277.869 94.5597H277.942L279.9 88.9091H281.082L278.072 97.0341C277.936 97.4003 277.768 97.7035 277.568 97.9435C277.368 98.1867 277.136 98.3667 276.871 98.4837C276.61 98.6006 276.314 98.6591 275.985 98.6591Z\"\n          fill=\"#04B97A\"\n        />\n        <path\n          d=\"M164 22C164 24.2091 165.791 26 168 26C170.209 26 172 24.2091 172 22C172 19.7909 170.209 18 168 18C165.791 18 164 19.7909 164 22ZM238.53 -14.9697C238.823 -15.2626 238.823 -15.7374 238.53 -16.0303L233.757 -20.8033C233.464 -21.0962 232.99 -21.0962 232.697 -20.8033C232.404 -20.5104 232.404 -20.0355 232.697 -19.7426L236.939 -15.5L232.697 -11.2574C232.404 -10.9645 232.404 -10.4896 232.697 -10.1967C232.99 -9.90381 233.464 -9.90381 233.757 -10.1967L238.53 -14.9697ZM168 22.75C168.007 22.75 168.013 22.75 168.02 22.75C168.026 22.75 168.033 22.75 168.039 22.75C168.046 22.75 168.052 22.75 168.059 22.75C168.066 22.75 168.072 22.75 168.079 22.75C168.086 22.75 168.092 22.75 168.099 22.75C168.106 22.75 168.112 22.75 168.119 22.75C168.126 22.75 168.133 22.75 168.139 22.75C168.146 22.75 168.153 22.75 168.16 22.75C168.167 22.75 168.173 22.75 168.18 22.75C168.187 22.75 168.194 22.75 168.201 22.75C168.208 22.75 168.215 22.75 168.222 22.75C168.229 22.75 168.235 22.75 168.242 22.75C168.249 22.75 168.256 22.75 168.263 22.75C168.27 22.75 168.277 22.75 168.284 22.75C168.291 22.75 168.298 22.75 168.306 22.75C168.313 22.75 168.32 22.75 168.327 22.75C168.334 22.75 168.341 22.75 168.348 22.75C168.355 22.75 168.362 22.75 168.37 22.75C168.377 22.75 168.384 22.75 168.391 22.75C168.398 22.75 168.406 22.75 168.413 22.75C168.42 22.75 168.427 22.75 168.435 22.75C168.442 22.75 168.449 22.75 168.457 22.75C168.464 22.75 168.471 22.75 168.479 22.75C168.486 22.75 168.493 22.75 168.501 22.75C168.508 22.75 168.516 22.75 168.523 22.75C168.53 22.75 168.538 22.75 168.545 22.75C168.553 22.75 168.56 22.75 168.568 22.75C168.575 22.75 168.583 22.75 168.59 22.75C168.598 22.75 168.605 22.75 168.613 22.75C168.621 22.75 168.628 22.75 168.636 22.75C168.643 22.75 168.651 22.75 168.659 22.75C168.666 22.75 168.674 22.75 168.682 22.75C168.689 22.75 168.697 22.75 168.705 22.75C168.712 22.75 168.72 22.75 168.728 22.75C168.736 22.75 168.743 22.75 168.751 22.75C168.759 22.75 168.767 22.75 168.775 22.75C168.782 22.75 168.79 22.75 168.798 22.75C168.806 22.75 168.814 22.75 168.822 22.75C168.83 22.75 168.838 22.75 168.845 22.75C168.853 22.75 168.861 22.75 168.869 22.75C168.877 22.75 168.885 22.75 168.893 22.75C168.901 22.75 168.909 22.75 168.917 22.75C168.925 22.75 168.933 22.75 168.941 22.75C168.949 22.75 168.958 22.75 168.966 22.75C168.974 22.75 168.982 22.75 168.99 22.75C168.998 22.75 169.006 22.75 169.014 22.75C169.023 22.75 169.031 22.75 169.039 22.75C169.047 22.75 169.055 22.75 169.064 22.75C169.072 22.75 169.08 22.75 169.088 22.75C169.097 22.75 169.105 22.75 169.113 22.75C169.122 22.75 169.13 22.75 169.138 22.75C169.147 22.75 169.155 22.75 169.163 22.75C169.172 22.75 169.18 22.75 169.188 22.75C169.197 22.75 169.205 22.75 169.214 22.75C169.222 22.75 169.231 22.75 169.239 22.75C169.248 22.75 169.256 22.75 169.265 22.75C169.273 22.75 169.282 22.75 169.29 22.75C169.299 22.75 169.307 22.75 169.316 22.75C169.324 22.75 169.333 22.75 169.342 22.75C169.35 22.75 169.359 22.75 169.367 22.75C169.376 22.75 169.385 22.75 169.393 22.75C169.402 22.75 169.411 22.75 169.419 22.75C169.428 22.75 169.437 22.75 169.446 22.75C169.454 22.75 169.463 22.75 169.472 22.75C169.481 22.75 169.489 22.75 169.498 22.75C169.507 22.75 169.516 22.75 169.525 22.75C169.534 22.75 169.542 22.75 169.551 22.75C169.56 22.75 169.569 22.75 169.578 22.75C169.587 22.75 169.596 22.75 169.605 22.75C169.614 22.75 169.623 22.75 169.632 22.75C169.641 22.75 169.65 22.75 169.659 22.75C169.668 22.75 169.677 22.75 169.686 22.75C169.695 22.75 169.704 22.75 169.713 22.75C169.722 22.75 169.731 22.75 169.74 22.75C169.749 22.75 169.758 22.75 169.767 22.75C169.776 22.75 169.786 22.75 169.795 22.75C169.804 22.75 169.813 22.75 169.822 22.75C169.832 22.75 169.841 22.75 169.85 22.75C169.859 22.75 169.868 22.75 169.878 22.75C169.887 22.75 169.896 22.75 169.906 22.75C169.915 22.75 169.924 22.75 169.933 22.75C169.943 22.75 169.952 22.75 169.961 22.75C169.971 22.75 169.98 22.75 169.99 22.75C169.999 22.75 170.008 22.75 170.018 22.75C170.027 22.75 170.037 22.75 170.046 22.75C170.056 22.75 170.065 22.75 170.075 22.75C170.084 22.75 170.093 22.75 170.103 22.75C170.113 22.75 170.122 22.75 170.132 22.75C170.141 22.75 170.151 22.75 170.16 22.75C170.17 22.75 170.179 22.75 170.189 22.75C170.199 22.75 170.208 22.75 170.218 22.75C170.228 22.75 170.237 22.75 170.247 22.75C170.257 22.75 170.266 22.75 170.276 22.75C170.286 22.75 170.295 22.75 170.305 22.75C170.315 22.75 170.325 22.75 170.334 22.75C170.344 22.75 170.354 22.75 170.364 22.75C170.373 22.75 170.383 22.75 170.393 22.75C170.403 22.75 170.413 22.75 170.423 22.75C170.432 22.75 170.442 22.75 170.452 22.75C170.462 22.75 170.472 22.75 170.482 22.75C170.492 22.75 170.502 22.75 170.512 22.75C170.522 22.75 170.532 22.75 170.542 22.75C170.552 22.75 170.562 22.75 170.572 22.75C170.582 22.75 170.592 22.75 170.602 22.75C170.612 22.75 170.622 22.75 170.632 22.75C170.642 22.75 170.652 22.75 170.662 22.75C170.672 22.75 170.682 22.75 170.692 22.75C170.703 22.75 170.713 22.75 170.723 22.75C170.733 22.75 170.743 22.75 170.753 22.75C170.764 22.75 170.774 22.75 170.784 22.75C170.794 22.75 170.804 22.75 170.815 22.75C170.825 22.75 170.835 22.75 170.845 22.75C170.856 22.75 170.866 22.75 170.876 22.75C170.887 22.75 170.897 22.75 170.907 22.75C170.918 22.75 170.928 22.75 170.938 22.75C170.949 22.75 170.959 22.75 170.969 22.75C170.98 22.75 170.99 22.75 171.001 22.75C171.011 22.75 171.022 22.75 171.032 22.75C171.042 22.75 171.053 22.75 171.063 22.75C171.074 22.75 171.084 22.75 171.095 22.75C171.105 22.75 171.116 22.75 171.127 22.75C171.137 22.75 171.148 22.75 171.158 22.75C171.169 22.75 171.179 22.75 171.19 22.75C171.201 22.75 171.211 22.75 171.222 22.75C171.232 22.75 171.243 22.75 171.254 22.75C171.264 22.75 171.275 22.75 171.286 22.75C171.296 22.75 171.307 22.75 171.318 22.75C171.329 22.75 171.339 22.75 171.35 22.75C171.361 22.75 171.371 22.75 171.382 22.75C171.393 22.75 171.404 22.75 171.415 22.75C171.425 22.75 171.436 22.75 171.447 22.75C171.458 22.75 171.469 22.75 171.48 22.75C171.49 22.75 171.501 22.75 171.512 22.75C171.523 22.75 171.534 22.75 171.545 22.75C171.556 22.75 171.567 22.75 171.578 22.75C171.589 22.75 171.6 22.75 171.611 22.75C171.621 22.75 171.632 22.75 171.643 22.75C171.654 22.75 171.665 22.75 171.677 22.75C171.688 22.75 171.699 22.75 171.71 22.75C171.721 22.75 171.732 22.75 171.743 22.75C171.754 22.75 171.765 22.75 171.776 22.75C171.787 22.75 171.798 22.75 171.809 22.75C171.821 22.75 171.832 22.75 171.843 22.75C171.854 22.75 171.865 22.75 171.876 22.75C171.888 22.75 171.899 22.75 171.91 22.75C171.921 22.75 171.932 22.75 171.944 22.75C171.955 22.75 171.966 22.75 171.977 22.75C171.989 22.75 172 22.75 172.011 22.75C172.023 22.75 172.034 22.75 172.045 22.75C172.057 22.75 172.068 22.75 172.079 22.75C172.091 22.75 172.102 22.75 172.113 22.75C172.125 22.75 172.136 22.75 172.148 22.75C172.159 22.75 172.17 22.75 172.182 22.75C172.193 22.75 172.205 22.75 172.216 22.75C172.228 22.75 172.239 22.75 172.251 22.75C172.262 22.75 172.274 22.75 172.285 22.75C172.297 22.75 172.308 22.75 172.32 22.75C172.331 22.75 172.343 22.75 172.354 22.75C172.366 22.75 172.377 22.75 172.389 22.75C172.401 22.75 172.412 22.75 172.424 22.75C172.435 22.75 172.447 22.75 172.459 22.75C172.47 22.75 172.482 22.75 172.494 22.75C172.505 22.75 172.517 22.75 172.529 22.75C172.54 22.75 172.552 22.75 172.564 22.75C172.576 22.75 172.587 22.75 172.599 22.75C172.611 22.75 172.623 22.75 172.634 22.75C172.646 22.75 172.658 22.75 172.67 22.75C172.681 22.75 172.693 22.75 172.705 22.75C172.717 22.75 172.729 22.75 172.741 22.75C172.752 22.75 172.764 22.75 172.776 22.75C172.788 22.75 172.8 22.75 172.812 22.75C172.824 22.75 172.836 22.75 172.848 22.75C172.86 22.75 172.872 22.75 172.883 22.75C172.895 22.75 172.907 22.75 172.919 22.75C172.931 22.75 172.943 22.75 172.955 22.75C172.967 22.75 172.979 22.75 172.991 22.75C173.003 22.75 173.015 22.75 173.027 22.75C173.04 22.75 173.052 22.75 173.064 22.75C173.076 22.75 173.088 22.75 173.1 22.75C173.112 22.75 173.124 22.75 173.136 22.75C173.148 22.75 173.161 22.75 173.173 22.75C173.185 22.75 173.197 22.75 173.209 22.75C173.221 22.75 173.234 22.75 173.246 22.75C173.258 22.75 173.27 22.75 173.282 22.75C173.295 22.75 173.307 22.75 173.319 22.75C173.331 22.75 173.344 22.75 173.356 22.75C173.368 22.75 173.38 22.75 173.393 22.75C173.405 22.75 173.417 22.75 173.43 22.75C173.442 22.75 173.454 22.75 173.467 22.75C173.479 22.75 173.491 22.75 173.504 22.75C173.516 22.75 173.529 22.75 173.541 22.75C173.553 22.75 173.566 22.75 173.578 22.75C173.591 22.75 173.603 22.75 173.615 22.75C173.628 22.75 173.64 22.75 173.653 22.75C173.665 22.75 173.678 22.75 173.69 22.75C173.703 22.75 173.715 22.75 173.728 22.75C173.74 22.75 173.753 22.75 173.765 22.75C173.778 22.75 173.79 22.75 173.803 22.75C173.816 22.75 173.828 22.75 173.841 22.75C173.853 22.75 173.866 22.75 173.878 22.75C173.891 22.75 173.904 22.75 173.916 22.75C173.929 22.75 173.942 22.75 173.954 22.75C173.967 22.75 173.98 22.75 173.992 22.75C174.005 22.75 174.018 22.75 174.03 22.75C174.043 22.75 174.056 22.75 174.068 22.75C174.081 22.75 174.094 22.75 174.107 22.75C174.119 22.75 174.132 22.75 174.145 22.75C174.158 22.75 174.17 22.75 174.183 22.75C174.196 22.75 174.209 22.75 174.222 22.75C174.234 22.75 174.247 22.75 174.26 22.75C174.273 22.75 174.286 22.75 174.299 22.75C174.312 22.75 174.324 22.75 174.337 22.75C174.35 22.75 174.363 22.75 174.376 22.75C174.389 22.75 174.402 22.75 174.415 22.75C174.428 22.75 174.441 22.75 174.454 22.75C174.466 22.75 174.479 22.75 174.492 22.75C174.505 22.75 174.518 22.75 174.531 22.75C174.544 22.75 174.557 22.75 174.57 22.75C174.583 22.75 174.596 22.75 174.609 22.75C174.623 22.75 174.636 22.75 174.649 22.75C174.662 22.75 174.675 22.75 174.688 22.75C174.701 22.75 174.714 22.75 174.727 22.75C174.74 22.75 174.753 22.75 174.766 22.75C174.78 22.75 174.793 22.75 174.806 22.75C174.819 22.75 174.832 22.75 174.845 22.75C174.859 22.75 174.872 22.75 174.885 22.75C174.898 22.75 174.911 22.75 174.924 22.75C174.938 22.75 174.951 22.75 174.964 22.75C174.977 22.75 174.991 22.75 175.004 22.75C175.017 22.75 175.03 22.75 175.044 22.75C175.057 22.75 175.07 22.75 175.084 22.75C175.097 22.75 175.11 22.75 175.123 22.75C175.137 22.75 175.15 22.75 175.163 22.75C175.177 22.75 175.19 22.75 175.203 22.75C175.217 22.75 175.23 22.75 175.244 22.75C175.257 22.75 175.27 22.75 175.284 22.75C175.297 22.75 175.311 22.75 175.324 22.75C175.337 22.75 175.351 22.75 175.364 22.75C175.378 22.75 175.391 22.75 175.405 22.75C175.418 22.75 175.432 22.75 175.445 22.75C175.459 22.75 175.472 22.75 175.486 22.75C175.499 22.75 175.513 22.75 175.526 22.75C175.54 22.75 175.553 22.75 175.567 22.75C175.58 22.75 175.594 22.75 175.607 22.75C175.621 22.75 175.635 22.75 175.648 22.75C175.662 22.75 175.675 22.75 175.689 22.75C175.702 22.75 175.716 22.75 175.73 22.75C175.743 22.75 175.757 22.75 175.771 22.75C175.784 22.75 175.798 22.75 175.812 22.75C175.825 22.75 175.839 22.75 175.853 22.75C175.866 22.75 175.88 22.75 175.894 22.75C175.907 22.75 175.921 22.75 175.935 22.75C175.949 22.75 175.962 22.75 175.976 22.75C175.99 22.75 176.004 22.75 176.017 22.75C176.031 22.75 176.045 22.75 176.059 22.75C176.072 22.75 176.086 22.75 176.1 22.75C176.114 22.75 176.128 22.75 176.141 22.75C176.155 22.75 176.169 22.75 176.183 22.75C176.197 22.75 176.211 22.75 176.224 22.75C176.238 22.75 176.252 22.75 176.266 22.75C176.28 22.75 176.294 22.75 176.308 22.75C176.322 22.75 176.336 22.75 176.349 22.75C176.363 22.75 176.377 22.75 176.391 22.75C176.405 22.75 176.419 22.75 176.433 22.75C176.447 22.75 176.461 22.75 176.475 22.75C176.489 22.75 176.503 22.75 176.517 22.75C176.531 22.75 176.545 22.75 176.559 22.75C176.573 22.75 176.587 22.75 176.601 22.75C176.615 22.75 176.629 22.75 176.643 22.75C176.657 22.75 176.671 22.75 176.685 22.75C176.699 22.75 176.713 22.75 176.727 22.75C176.742 22.75 176.756 22.75 176.77 22.75C176.784 22.75 176.798 22.75 176.812 22.75C176.826 22.75 176.84 22.75 176.854 22.75C176.869 22.75 176.883 22.75 176.897 22.75C176.911 22.75 176.925 22.75 176.939 22.75C176.954 22.75 176.968 22.75 176.982 22.75C176.996 22.75 177.01 22.75 177.025 22.75C177.039 22.75 177.053 22.75 177.067 22.75C177.081 22.75 177.096 22.75 177.11 22.75C177.124 22.75 177.138 22.75 177.153 22.75C177.167 22.75 177.181 22.75 177.196 22.75C177.21 22.75 177.224 22.75 177.238 22.75C177.253 22.75 177.267 22.75 177.281 22.75C177.296 22.75 177.31 22.75 177.324 22.75C177.339 22.75 177.353 22.75 177.367 22.75C177.382 22.75 177.396 22.75 177.41 22.75C177.425 22.75 177.439 22.75 177.454 22.75C177.468 22.75 177.482 22.75 177.497 22.75C177.511 22.75 177.526 22.75 177.54 22.75C177.554 22.75 177.569 22.75 177.583 22.75C177.598 22.75 177.612 22.75 177.627 22.75C177.641 22.75 177.655 22.75 177.67 22.75C177.684 22.75 177.699 22.75 177.713 22.75C177.728 22.75 177.742 22.75 177.757 22.75C177.771 22.75 177.786 22.75 177.8 22.75C177.815 22.75 177.829 22.75 177.844 22.75C177.858 22.75 177.873 22.75 177.888 22.75C177.902 22.75 177.917 22.75 177.931 22.75C177.946 22.75 177.96 22.75 177.975 22.75C177.99 22.75 178.004 22.75 178.019 22.75C178.033 22.75 178.048 22.75 178.063 22.75C178.077 22.75 178.092 22.75 178.106 22.75C178.121 22.75 178.136 22.75 178.15 22.75C178.165 22.75 178.18 22.75 178.194 22.75C178.209 22.75 178.224 22.75 178.238 22.75C178.253 22.75 178.268 22.75 178.282 22.75C178.297 22.75 178.312 22.75 178.326 22.75C178.341 22.75 178.356 22.75 178.371 22.75C178.385 22.75 178.4 22.75 178.415 22.75C178.43 22.75 178.444 22.75 178.459 22.75C178.474 22.75 178.489 22.75 178.503 22.75C178.518 22.75 178.533 22.75 178.548 22.75C178.563 22.75 178.577 22.75 178.592 22.75C178.607 22.75 178.622 22.75 178.637 22.75C178.651 22.75 178.666 22.75 178.681 22.75C178.696 22.75 178.711 22.75 178.726 22.75C178.74 22.75 178.755 22.75 178.77 22.75C178.785 22.75 178.8 22.75 178.815 22.75C178.83 22.75 178.844 22.75 178.859 22.75C178.874 22.75 178.889 22.75 178.904 22.75C178.919 22.75 178.934 22.75 178.949 22.75C178.964 22.75 178.979 22.75 178.994 22.75C179.009 22.75 179.023 22.75 179.038 22.75C179.053 22.75 179.068 22.75 179.083 22.75C179.098 22.75 179.113 22.75 179.128 22.75C179.143 22.75 179.158 22.75 179.173 22.75C179.188 22.75 179.203 22.75 179.218 22.75C179.233 22.75 179.248 22.75 179.263 22.75C179.278 22.75 179.293 22.75 179.308 22.75C179.323 22.75 179.338 22.75 179.353 22.75C179.369 22.75 179.384 22.75 179.399 22.75C179.414 22.75 179.429 22.75 179.444 22.75C179.459 22.75 179.474 22.75 179.489 22.75C179.504 22.75 179.519 22.75 179.534 22.75C179.55 22.75 179.565 22.75 179.58 22.75C179.595 22.75 179.61 22.75 179.625 22.75C179.64 22.75 179.655 22.75 179.671 22.75C179.686 22.75 179.701 22.75 179.716 22.75C179.731 22.75 179.746 22.75 179.761 22.75C179.777 22.75 179.792 22.75 179.807 22.75C179.822 22.75 179.837 22.75 179.853 22.75C179.868 22.75 179.883 22.75 179.898 22.75C179.913 22.75 179.929 22.75 179.944 22.75C179.959 22.75 179.974 22.75 179.99 22.75C180.005 22.75 180.02 22.75 180.035 22.75C180.051 22.75 180.066 22.75 180.081 22.75C180.096 22.75 180.112 22.75 180.127 22.75C180.142 22.75 180.157 22.75 180.173 22.75C180.188 22.75 180.203 22.75 180.219 22.75C180.234 22.75 180.249 22.75 180.265 22.75C180.28 22.75 180.295 22.75 180.311 22.75C180.326 22.75 180.341 22.75 180.357 22.75C180.372 22.75 180.387 22.75 180.403 22.75C180.418 22.75 180.433 22.75 180.449 22.75C180.464 22.75 180.479 22.75 180.495 22.75C180.51 22.75 180.526 22.75 180.541 22.75C180.556 22.75 180.572 22.75 180.587 22.75C180.603 22.75 180.618 22.75 180.633 22.75C180.649 22.75 180.664 22.75 180.68 22.75C180.695 22.75 180.71 22.75 180.726 22.75C180.741 22.75 180.757 22.75 180.772 22.75C180.788 22.75 180.803 22.75 180.819 22.75C180.834 22.75 180.85 22.75 180.865 22.75C180.88 22.75 180.896 22.75 180.911 22.75C180.927 22.75 180.942 22.75 180.958 22.75C180.973 22.75 180.989 22.75 181.004 22.75C181.02 22.75 181.035 22.75 181.051 22.75C181.066 22.75 181.082 22.75 181.097 22.75C181.113 22.75 181.129 22.75 181.144 22.75C181.16 22.75 181.175 22.75 181.191 22.75C181.206 22.75 181.222 22.75 181.237 22.75C181.253 22.75 181.269 22.75 181.284 22.75C181.3 22.75 181.315 22.75 181.331 22.75C181.346 22.75 181.362 22.75 181.378 22.75C181.393 22.75 181.409 22.75 181.424 22.75C181.44 22.75 181.456 22.75 181.471 22.75C181.487 22.75 181.503 22.75 181.518 22.75C181.534 22.75 181.549 22.75 181.565 22.75C181.581 22.75 181.596 22.75 181.612 22.75C181.628 22.75 181.643 22.75 181.659 22.75C181.675 22.75 181.69 22.75 181.706 22.75C181.722 22.75 181.737 22.75 181.753 22.75C181.769 22.75 181.784 22.75 181.8 22.75C181.816 22.75 181.831 22.75 181.847 22.75C181.863 22.75 181.878 22.75 181.894 22.75C181.91 22.75 181.926 22.75 181.941 22.75C181.957 22.75 181.973 22.75 181.989 22.75C182.004 22.75 182.02 22.75 182.036 22.75C182.051 22.75 182.067 22.75 182.083 22.75C182.099 22.75 182.114 22.75 182.13 22.75C182.146 22.75 182.162 22.75 182.178 22.75C182.193 22.75 182.209 22.75 182.225 22.75C182.241 22.75 182.256 22.75 182.272 22.75C182.288 22.75 182.304 22.75 182.32 22.75C182.335 22.75 182.351 22.75 182.367 22.75C182.383 22.75 182.399 22.75 182.414 22.75C182.43 22.75 182.446 22.75 182.462 22.75C182.478 22.75 182.494 22.75 182.509 22.75C182.525 22.75 182.541 22.75 182.557 22.75C182.573 22.75 182.589 22.75 182.604 22.75C182.62 22.75 182.636 22.75 182.652 22.75C182.668 22.75 182.684 22.75 182.7 22.75C182.715 22.75 182.731 22.75 182.747 22.75C182.763 22.75 182.779 22.75 182.795 22.75C182.811 22.75 182.827 22.75 182.843 22.75C182.858 22.75 182.874 22.75 182.89 22.75C182.906 22.75 182.922 22.75 182.938 22.75C182.954 22.75 182.97 22.75 182.986 22.75C183.002 22.75 183.018 22.75 183.034 22.75C183.049 22.75 183.065 22.75 183.081 22.75C183.097 22.75 183.113 22.75 183.129 22.75C183.145 22.75 183.161 22.75 183.177 22.75C183.193 22.75 183.209 22.75 183.225 22.75C183.241 22.75 183.257 22.75 183.273 22.75C183.289 22.75 183.305 22.75 183.321 22.75C183.337 22.75 183.353 22.75 183.369 22.75C183.385 22.75 183.401 22.75 183.417 22.75C183.433 22.75 183.449 22.75 183.465 22.75C183.481 22.75 183.497 22.75 183.513 22.75C183.529 22.75 183.545 22.75 183.561 22.75C183.577 22.75 183.593 22.75 183.609 22.75C183.625 22.75 183.641 22.75 183.657 22.75C183.673 22.75 183.689 22.75 183.705 22.75C183.721 22.75 183.737 22.75 183.753 22.75C183.769 22.75 183.785 22.75 183.801 22.75C183.817 22.75 183.833 22.75 183.849 22.75C183.865 22.75 183.882 22.75 183.898 22.75C183.914 22.75 183.93 22.75 183.946 22.75C183.962 22.75 183.978 22.75 183.994 22.75C184.01 22.75 184.026 22.75 184.042 22.75C184.058 22.75 184.074 22.75 184.091 22.75C184.107 22.75 184.123 22.75 184.139 22.75C184.155 22.75 184.171 22.75 184.187 22.75C184.203 22.75 184.219 22.75 184.236 22.75C184.252 22.75 184.268 22.75 184.284 22.75C184.3 22.75 184.316 22.75 184.332 22.75C184.348 22.75 184.365 22.75 184.381 22.75C184.397 22.75 184.413 22.75 184.429 22.75C184.445 22.75 184.461 22.75 184.478 22.75C184.494 22.75 184.51 22.75 184.526 22.75C184.542 22.75 184.558 22.75 184.574 22.75C184.591 22.75 184.607 22.75 184.623 22.75C184.639 22.75 184.655 22.75 184.671 22.75C184.688 22.75 184.704 22.75 184.72 22.75C184.736 22.75 184.752 22.75 184.768 22.75C184.785 22.75 184.801 22.75 184.817 22.75C184.833 22.75 184.849 22.75 184.866 22.75C184.882 22.75 184.898 22.75 184.914 22.75C184.93 22.75 184.947 22.75 184.963 22.75C184.979 22.75 184.995 22.75 185.011 22.75C185.028 22.75 185.044 22.75 185.06 22.75C185.076 22.75 185.093 22.75 185.109 22.75C185.125 22.75 185.141 22.75 185.157 22.75C185.174 22.75 185.19 22.75 185.206 22.75C185.222 22.75 185.239 22.75 185.255 22.75C185.271 22.75 185.287 22.75 185.304 22.75C185.32 22.75 185.336 22.75 185.352 22.75C185.369 22.75 185.385 22.75 185.401 22.75C185.417 22.75 185.434 22.75 185.45 22.75C185.466 22.75 185.482 22.75 185.499 22.75C185.515 22.75 185.531 22.75 185.547 22.75C185.564 22.75 185.58 22.75 185.596 22.75C185.612 22.75 185.629 22.75 185.645 22.75C185.661 22.75 185.678 22.75 185.694 22.75C185.71 22.75 185.726 22.75 185.743 22.75C185.759 22.75 185.775 22.75 185.792 22.75C185.808 22.75 185.824 22.75 185.84 22.75C185.857 22.75 185.873 22.75 185.889 22.75C185.906 22.75 185.922 22.75 185.938 22.75C185.954 22.75 185.971 22.75 185.987 22.75C186.003 22.75 186.02 22.75 186.036 22.75C186.052 22.75 186.069 22.75 186.085 22.75C186.101 22.75 186.118 22.75 186.134 22.75C186.15 22.75 186.166 22.75 186.183 22.75C186.199 22.75 186.215 22.75 186.232 22.75C186.248 22.75 186.264 22.75 186.281 22.75C186.297 22.75 186.313 22.75 186.33 22.75C186.346 22.75 186.362 22.75 186.379 22.75C186.395 22.75 186.411 22.75 186.428 22.75C186.444 22.75 186.46 22.75 186.477 22.75C186.493 22.75 186.509 22.75 186.526 22.75C186.542 22.75 186.558 22.75 186.575 22.75C186.591 22.75 186.608 22.75 186.624 22.75C186.64 22.75 186.657 22.75 186.673 22.75C186.689 22.75 186.706 22.75 186.722 22.75C186.738 22.75 186.755 22.75 186.771 22.75C186.787 22.75 186.804 22.75 186.82 22.75C186.836 22.75 186.853 22.75 186.869 22.75C186.886 22.75 186.902 22.75 186.918 22.75C186.935 22.75 186.951 22.75 186.967 22.75C186.984 22.75 187 22.75 187.017 22.75C187.033 22.75 187.049 22.75 187.066 22.75C187.082 22.75 187.098 22.75 187.115 22.75C187.131 22.75 187.148 22.75 187.164 22.75C187.18 22.75 187.197 22.75 187.213 22.75C187.229 22.75 187.246 22.75 187.262 22.75C187.279 22.75 187.295 22.75 187.311 22.75C187.328 22.75 187.344 22.75 187.36 22.75C187.377 22.75 187.393 22.75 187.41 22.75C187.426 22.75 187.442 22.75 187.459 22.75C187.475 22.75 187.492 22.75 187.508 22.75C187.524 22.75 187.541 22.75 187.557 22.75C187.574 22.75 187.59 22.75 187.606 22.75C187.623 22.75 187.639 22.75 187.656 22.75C187.672 22.75 187.688 22.75 187.705 22.75C187.721 22.75 187.738 22.75 187.754 22.75C187.77 22.75 187.787 22.75 187.803 22.75C187.82 22.75 187.836 22.75 187.852 22.75C187.869 22.75 187.885 22.75 187.902 22.75C187.918 22.75 187.934 22.75 187.951 22.75C187.967 22.75 187.984 22.75 188 22.75V21.25C187.984 21.25 187.967 21.25 187.951 21.25C187.934 21.25 187.918 21.25 187.902 21.25C187.885 21.25 187.869 21.25 187.852 21.25C187.836 21.25 187.82 21.25 187.803 21.25C187.787 21.25 187.77 21.25 187.754 21.25C187.738 21.25 187.721 21.25 187.705 21.25C187.688 21.25 187.672 21.25 187.656 21.25C187.639 21.25 187.623 21.25 187.606 21.25C187.59 21.25 187.574 21.25 187.557 21.25C187.541 21.25 187.524 21.25 187.508 21.25C187.492 21.25 187.475 21.25 187.459 21.25C187.442 21.25 187.426 21.25 187.41 21.25C187.393 21.25 187.377 21.25 187.36 21.25C187.344 21.25 187.328 21.25 187.311 21.25C187.295 21.25 187.279 21.25 187.262 21.25C187.246 21.25 187.229 21.25 187.213 21.25C187.197 21.25 187.18 21.25 187.164 21.25C187.148 21.25 187.131 21.25 187.115 21.25C187.098 21.25 187.082 21.25 187.066 21.25C187.049 21.25 187.033 21.25 187.017 21.25C187 21.25 186.984 21.25 186.967 21.25C186.951 21.25 186.935 21.25 186.918 21.25C186.902 21.25 186.886 21.25 186.869 21.25C186.853 21.25 186.836 21.25 186.82 21.25C186.804 21.25 186.787 21.25 186.771 21.25C186.755 21.25 186.738 21.25 186.722 21.25C186.706 21.25 186.689 21.25 186.673 21.25C186.657 21.25 186.64 21.25 186.624 21.25C186.608 21.25 186.591 21.25 186.575 21.25C186.558 21.25 186.542 21.25 186.526 21.25C186.509 21.25 186.493 21.25 186.477 21.25C186.46 21.25 186.444 21.25 186.428 21.25C186.411 21.25 186.395 21.25 186.379 21.25C186.362 21.25 186.346 21.25 186.33 21.25C186.313 21.25 186.297 21.25 186.281 21.25C186.264 21.25 186.248 21.25 186.232 21.25C186.215 21.25 186.199 21.25 186.183 21.25C186.166 21.25 186.15 21.25 186.134 21.25C186.118 21.25 186.101 21.25 186.085 21.25C186.069 21.25 186.052 21.25 186.036 21.25C186.02 21.25 186.003 21.25 185.987 21.25C185.971 21.25 185.954 21.25 185.938 21.25C185.922 21.25 185.906 21.25 185.889 21.25C185.873 21.25 185.857 21.25 185.84 21.25C185.824 21.25 185.808 21.25 185.792 21.25C185.775 21.25 185.759 21.25 185.743 21.25C185.726 21.25 185.71 21.25 185.694 21.25C185.678 21.25 185.661 21.25 185.645 21.25C185.629 21.25 185.612 21.25 185.596 21.25C185.58 21.25 185.564 21.25 185.547 21.25C185.531 21.25 185.515 21.25 185.499 21.25C185.482 21.25 185.466 21.25 185.45 21.25C185.434 21.25 185.417 21.25 185.401 21.25C185.385 21.25 185.369 21.25 185.352 21.25C185.336 21.25 185.32 21.25 185.304 21.25C185.287 21.25 185.271 21.25 185.255 21.25C185.239 21.25 185.222 21.25 185.206 21.25C185.19 21.25 185.174 21.25 185.157 21.25C185.141 21.25 185.125 21.25 185.109 21.25C185.093 21.25 185.076 21.25 185.06 21.25C185.044 21.25 185.028 21.25 185.011 21.25C184.995 21.25 184.979 21.25 184.963 21.25C184.947 21.25 184.93 21.25 184.914 21.25C184.898 21.25 184.882 21.25 184.866 21.25C184.849 21.25 184.833 21.25 184.817 21.25C184.801 21.25 184.785 21.25 184.768 21.25C184.752 21.25 184.736 21.25 184.72 21.25C184.704 21.25 184.688 21.25 184.671 21.25C184.655 21.25 184.639 21.25 184.623 21.25C184.607 21.25 184.591 21.25 184.574 21.25C184.558 21.25 184.542 21.25 184.526 21.25C184.51 21.25 184.494 21.25 184.478 21.25C184.461 21.25 184.445 21.25 184.429 21.25C184.413 21.25 184.397 21.25 184.381 21.25C184.365 21.25 184.348 21.25 184.332 21.25C184.316 21.25 184.3 21.25 184.284 21.25C184.268 21.25 184.252 21.25 184.236 21.25C184.219 21.25 184.203 21.25 184.187 21.25C184.171 21.25 184.155 21.25 184.139 21.25C184.123 21.25 184.107 21.25 184.091 21.25C184.074 21.25 184.058 21.25 184.042 21.25C184.026 21.25 184.01 21.25 183.994 21.25C183.978 21.25 183.962 21.25 183.946 21.25C183.93 21.25 183.914 21.25 183.898 21.25C183.882 21.25 183.865 21.25 183.849 21.25C183.833 21.25 183.817 21.25 183.801 21.25C183.785 21.25 183.769 21.25 183.753 21.25C183.737 21.25 183.721 21.25 183.705 21.25C183.689 21.25 183.673 21.25 183.657 21.25C183.641 21.25 183.625 21.25 183.609 21.25C183.593 21.25 183.577 21.25 183.561 21.25C183.545 21.25 183.529 21.25 183.513 21.25C183.497 21.25 183.481 21.25 183.465 21.25C183.449 21.25 183.433 21.25 183.417 21.25C183.401 21.25 183.385 21.25 183.369 21.25C183.353 21.25 183.337 21.25 183.321 21.25C183.305 21.25 183.289 21.25 183.273 21.25C183.257 21.25 183.241 21.25 183.225 21.25C183.209 21.25 183.193 21.25 183.177 21.25C183.161 21.25 183.145 21.25 183.129 21.25C183.113 21.25 183.097 21.25 183.081 21.25C183.065 21.25 183.049 21.25 183.034 21.25C183.018 21.25 183.002 21.25 182.986 21.25C182.97 21.25 182.954 21.25 182.938 21.25C182.922 21.25 182.906 21.25 182.89 21.25C182.874 21.25 182.858 21.25 182.843 21.25C182.827 21.25 182.811 21.25 182.795 21.25C182.779 21.25 182.763 21.25 182.747 21.25C182.731 21.25 182.715 21.25 182.7 21.25C182.684 21.25 182.668 21.25 182.652 21.25C182.636 21.25 182.62 21.25 182.604 21.25C182.589 21.25 182.573 21.25 182.557 21.25C182.541 21.25 182.525 21.25 182.509 21.25C182.494 21.25 182.478 21.25 182.462 21.25C182.446 21.25 182.43 21.25 182.414 21.25C182.399 21.25 182.383 21.25 182.367 21.25C182.351 21.25 182.335 21.25 182.32 21.25C182.304 21.25 182.288 21.25 182.272 21.25C182.256 21.25 182.241 21.25 182.225 21.25C182.209 21.25 182.193 21.25 182.178 21.25C182.162 21.25 182.146 21.25 182.13 21.25C182.114 21.25 182.099 21.25 182.083 21.25C182.067 21.25 182.051 21.25 182.036 21.25C182.02 21.25 182.004 21.25 181.989 21.25C181.973 21.25 181.957 21.25 181.941 21.25C181.926 21.25 181.91 21.25 181.894 21.25C181.878 21.25 181.863 21.25 181.847 21.25C181.831 21.25 181.816 21.25 181.8 21.25C181.784 21.25 181.769 21.25 181.753 21.25C181.737 21.25 181.722 21.25 181.706 21.25C181.69 21.25 181.675 21.25 181.659 21.25C181.643 21.25 181.628 21.25 181.612 21.25C181.596 21.25 181.581 21.25 181.565 21.25C181.549 21.25 181.534 21.25 181.518 21.25C181.503 21.25 181.487 21.25 181.471 21.25C181.456 21.25 181.44 21.25 181.424 21.25C181.409 21.25 181.393 21.25 181.378 21.25C181.362 21.25 181.346 21.25 181.331 21.25C181.315 21.25 181.3 21.25 181.284 21.25C181.269 21.25 181.253 21.25 181.237 21.25C181.222 21.25 181.206 21.25 181.191 21.25C181.175 21.25 181.16 21.25 181.144 21.25C181.129 21.25 181.113 21.25 181.097 21.25C181.082 21.25 181.066 21.25 181.051 21.25C181.035 21.25 181.02 21.25 181.004 21.25C180.989 21.25 180.973 21.25 180.958 21.25C180.942 21.25 180.927 21.25 180.911 21.25C180.896 21.25 180.88 21.25 180.865 21.25C180.85 21.25 180.834 21.25 180.819 21.25C180.803 21.25 180.788 21.25 180.772 21.25C180.757 21.25 180.741 21.25 180.726 21.25C180.71 21.25 180.695 21.25 180.68 21.25C180.664 21.25 180.649 21.25 180.633 21.25C180.618 21.25 180.603 21.25 180.587 21.25C180.572 21.25 180.556 21.25 180.541 21.25C180.526 21.25 180.51 21.25 180.495 21.25C180.479 21.25 180.464 21.25 180.449 21.25C180.433 21.25 180.418 21.25 180.403 21.25C180.387 21.25 180.372 21.25 180.357 21.25C180.341 21.25 180.326 21.25 180.311 21.25C180.295 21.25 180.28 21.25 180.265 21.25C180.249 21.25 180.234 21.25 180.219 21.25C180.203 21.25 180.188 21.25 180.173 21.25C180.157 21.25 180.142 21.25 180.127 21.25C180.112 21.25 180.096 21.25 180.081 21.25C180.066 21.25 180.051 21.25 180.035 21.25C180.02 21.25 180.005 21.25 179.99 21.25C179.974 21.25 179.959 21.25 179.944 21.25C179.929 21.25 179.913 21.25 179.898 21.25C179.883 21.25 179.868 21.25 179.853 21.25C179.837 21.25 179.822 21.25 179.807 21.25C179.792 21.25 179.777 21.25 179.761 21.25C179.746 21.25 179.731 21.25 179.716 21.25C179.701 21.25 179.686 21.25 179.671 21.25C179.655 21.25 179.64 21.25 179.625 21.25C179.61 21.25 179.595 21.25 179.58 21.25C179.565 21.25 179.55 21.25 179.534 21.25C179.519 21.25 179.504 21.25 179.489 21.25C179.474 21.25 179.459 21.25 179.444 21.25C179.429 21.25 179.414 21.25 179.399 21.25C179.384 21.25 179.369 21.25 179.353 21.25C179.338 21.25 179.323 21.25 179.308 21.25C179.293 21.25 179.278 21.25 179.263 21.25C179.248 21.25 179.233 21.25 179.218 21.25C179.203 21.25 179.188 21.25 179.173 21.25C179.158 21.25 179.143 21.25 179.128 21.25C179.113 21.25 179.098 21.25 179.083 21.25C179.068 21.25 179.053 21.25 179.038 21.25C179.023 21.25 179.009 21.25 178.994 21.25C178.979 21.25 178.964 21.25 178.949 21.25C178.934 21.25 178.919 21.25 178.904 21.25C178.889 21.25 178.874 21.25 178.859 21.25C178.844 21.25 178.83 21.25 178.815 21.25C178.8 21.25 178.785 21.25 178.77 21.25C178.755 21.25 178.74 21.25 178.726 21.25C178.711 21.25 178.696 21.25 178.681 21.25C178.666 21.25 178.651 21.25 178.637 21.25C178.622 21.25 178.607 21.25 178.592 21.25C178.577 21.25 178.563 21.25 178.548 21.25C178.533 21.25 178.518 21.25 178.503 21.25C178.489 21.25 178.474 21.25 178.459 21.25C178.444 21.25 178.43 21.25 178.415 21.25C178.4 21.25 178.385 21.25 178.371 21.25C178.356 21.25 178.341 21.25 178.326 21.25C178.312 21.25 178.297 21.25 178.282 21.25C178.268 21.25 178.253 21.25 178.238 21.25C178.224 21.25 178.209 21.25 178.194 21.25C178.18 21.25 178.165 21.25 178.15 21.25C178.136 21.25 178.121 21.25 178.106 21.25C178.092 21.25 178.077 21.25 178.063 21.25C178.048 21.25 178.033 21.25 178.019 21.25C178.004 21.25 177.99 21.25 177.975 21.25C177.96 21.25 177.946 21.25 177.931 21.25C177.917 21.25 177.902 21.25 177.888 21.25C177.873 21.25 177.858 21.25 177.844 21.25C177.829 21.25 177.815 21.25 177.8 21.25C177.786 21.25 177.771 21.25 177.757 21.25C177.742 21.25 177.728 21.25 177.713 21.25C177.699 21.25 177.684 21.25 177.67 21.25C177.655 21.25 177.641 21.25 177.627 21.25C177.612 21.25 177.598 21.25 177.583 21.25C177.569 21.25 177.554 21.25 177.54 21.25C177.526 21.25 177.511 21.25 177.497 21.25C177.482 21.25 177.468 21.25 177.454 21.25C177.439 21.25 177.425 21.25 177.41 21.25C177.396 21.25 177.382 21.25 177.367 21.25C177.353 21.25 177.339 21.25 177.324 21.25C177.31 21.25 177.296 21.25 177.281 21.25C177.267 21.25 177.253 21.25 177.238 21.25C177.224 21.25 177.21 21.25 177.196 21.25C177.181 21.25 177.167 21.25 177.153 21.25C177.138 21.25 177.124 21.25 177.11 21.25C177.096 21.25 177.081 21.25 177.067 21.25C177.053 21.25 177.039 21.25 177.025 21.25C177.01 21.25 176.996 21.25 176.982 21.25C176.968 21.25 176.954 21.25 176.939 21.25C176.925 21.25 176.911 21.25 176.897 21.25C176.883 21.25 176.869 21.25 176.854 21.25C176.84 21.25 176.826 21.25 176.812 21.25C176.798 21.25 176.784 21.25 176.77 21.25C176.756 21.25 176.742 21.25 176.727 21.25C176.713 21.25 176.699 21.25 176.685 21.25C176.671 21.25 176.657 21.25 176.643 21.25C176.629 21.25 176.615 21.25 176.601 21.25C176.587 21.25 176.573 21.25 176.559 21.25C176.545 21.25 176.531 21.25 176.517 21.25C176.503 21.25 176.489 21.25 176.475 21.25C176.461 21.25 176.447 21.25 176.433 21.25C176.419 21.25 176.405 21.25 176.391 21.25C176.377 21.25 176.363 21.25 176.349 21.25C176.336 21.25 176.322 21.25 176.308 21.25C176.294 21.25 176.28 21.25 176.266 21.25C176.252 21.25 176.238 21.25 176.224 21.25C176.211 21.25 176.197 21.25 176.183 21.25C176.169 21.25 176.155 21.25 176.141 21.25C176.128 21.25 176.114 21.25 176.1 21.25C176.086 21.25 176.072 21.25 176.059 21.25C176.045 21.25 176.031 21.25 176.017 21.25C176.004 21.25 175.99 21.25 175.976 21.25C175.962 21.25 175.949 21.25 175.935 21.25C175.921 21.25 175.907 21.25 175.894 21.25C175.88 21.25 175.866 21.25 175.853 21.25C175.839 21.25 175.825 21.25 175.812 21.25C175.798 21.25 175.784 21.25 175.771 21.25C175.757 21.25 175.743 21.25 175.73 21.25C175.716 21.25 175.702 21.25 175.689 21.25C175.675 21.25 175.662 21.25 175.648 21.25C175.635 21.25 175.621 21.25 175.607 21.25C175.594 21.25 175.58 21.25 175.567 21.25C175.553 21.25 175.54 21.25 175.526 21.25C175.513 21.25 175.499 21.25 175.486 21.25C175.472 21.25 175.459 21.25 175.445 21.25C175.432 21.25 175.418 21.25 175.405 21.25C175.391 21.25 175.378 21.25 175.364 21.25C175.351 21.25 175.337 21.25 175.324 21.25C175.311 21.25 175.297 21.25 175.284 21.25C175.27 21.25 175.257 21.25 175.244 21.25C175.23 21.25 175.217 21.25 175.203 21.25C175.19 21.25 175.177 21.25 175.163 21.25C175.15 21.25 175.137 21.25 175.123 21.25C175.11 21.25 175.097 21.25 175.084 21.25C175.07 21.25 175.057 21.25 175.044 21.25C175.03 21.25 175.017 21.25 175.004 21.25C174.991 21.25 174.977 21.25 174.964 21.25C174.951 21.25 174.938 21.25 174.924 21.25C174.911 21.25 174.898 21.25 174.885 21.25C174.872 21.25 174.859 21.25 174.845 21.25C174.832 21.25 174.819 21.25 174.806 21.25C174.793 21.25 174.78 21.25 174.766 21.25C174.753 21.25 174.74 21.25 174.727 21.25C174.714 21.25 174.701 21.25 174.688 21.25C174.675 21.25 174.662 21.25 174.649 21.25C174.636 21.25 174.623 21.25 174.609 21.25C174.596 21.25 174.583 21.25 174.57 21.25C174.557 21.25 174.544 21.25 174.531 21.25C174.518 21.25 174.505 21.25 174.492 21.25C174.479 21.25 174.466 21.25 174.454 21.25C174.441 21.25 174.428 21.25 174.415 21.25C174.402 21.25 174.389 21.25 174.376 21.25C174.363 21.25 174.35 21.25 174.337 21.25C174.324 21.25 174.312 21.25 174.299 21.25C174.286 21.25 174.273 21.25 174.26 21.25C174.247 21.25 174.234 21.25 174.222 21.25C174.209 21.25 174.196 21.25 174.183 21.25C174.17 21.25 174.158 21.25 174.145 21.25C174.132 21.25 174.119 21.25 174.107 21.25C174.094 21.25 174.081 21.25 174.068 21.25C174.056 21.25 174.043 21.25 174.03 21.25C174.018 21.25 174.005 21.25 173.992 21.25C173.98 21.25 173.967 21.25 173.954 21.25C173.942 21.25 173.929 21.25 173.916 21.25C173.904 21.25 173.891 21.25 173.878 21.25C173.866 21.25 173.853 21.25 173.841 21.25C173.828 21.25 173.816 21.25 173.803 21.25C173.79 21.25 173.778 21.25 173.765 21.25C173.753 21.25 173.74 21.25 173.728 21.25C173.715 21.25 173.703 21.25 173.69 21.25C173.678 21.25 173.665 21.25 173.653 21.25C173.64 21.25 173.628 21.25 173.615 21.25C173.603 21.25 173.591 21.25 173.578 21.25C173.566 21.25 173.553 21.25 173.541 21.25C173.529 21.25 173.516 21.25 173.504 21.25C173.491 21.25 173.479 21.25 173.467 21.25C173.454 21.25 173.442 21.25 173.43 21.25C173.417 21.25 173.405 21.25 173.393 21.25C173.38 21.25 173.368 21.25 173.356 21.25C173.344 21.25 173.331 21.25 173.319 21.25C173.307 21.25 173.295 21.25 173.282 21.25C173.27 21.25 173.258 21.25 173.246 21.25C173.234 21.25 173.221 21.25 173.209 21.25C173.197 21.25 173.185 21.25 173.173 21.25C173.161 21.25 173.148 21.25 173.136 21.25C173.124 21.25 173.112 21.25 173.1 21.25C173.088 21.25 173.076 21.25 173.064 21.25C173.052 21.25 173.04 21.25 173.027 21.25C173.015 21.25 173.003 21.25 172.991 21.25C172.979 21.25 172.967 21.25 172.955 21.25C172.943 21.25 172.931 21.25 172.919 21.25C172.907 21.25 172.895 21.25 172.883 21.25C172.872 21.25 172.86 21.25 172.848 21.25C172.836 21.25 172.824 21.25 172.812 21.25C172.8 21.25 172.788 21.25 172.776 21.25C172.764 21.25 172.752 21.25 172.741 21.25C172.729 21.25 172.717 21.25 172.705 21.25C172.693 21.25 172.681 21.25 172.67 21.25C172.658 21.25 172.646 21.25 172.634 21.25C172.623 21.25 172.611 21.25 172.599 21.25C172.587 21.25 172.576 21.25 172.564 21.25C172.552 21.25 172.54 21.25 172.529 21.25C172.517 21.25 172.505 21.25 172.494 21.25C172.482 21.25 172.47 21.25 172.459 21.25C172.447 21.25 172.435 21.25 172.424 21.25C172.412 21.25 172.401 21.25 172.389 21.25C172.377 21.25 172.366 21.25 172.354 21.25C172.343 21.25 172.331 21.25 172.32 21.25C172.308 21.25 172.297 21.25 172.285 21.25C172.274 21.25 172.262 21.25 172.251 21.25C172.239 21.25 172.228 21.25 172.216 21.25C172.205 21.25 172.193 21.25 172.182 21.25C172.17 21.25 172.159 21.25 172.148 21.25C172.136 21.25 172.125 21.25 172.113 21.25C172.102 21.25 172.091 21.25 172.079 21.25C172.068 21.25 172.057 21.25 172.045 21.25C172.034 21.25 172.023 21.25 172.011 21.25C172 21.25 171.989 21.25 171.977 21.25C171.966 21.25 171.955 21.25 171.944 21.25C171.932 21.25 171.921 21.25 171.91 21.25C171.899 21.25 171.888 21.25 171.876 21.25C171.865 21.25 171.854 21.25 171.843 21.25C171.832 21.25 171.821 21.25 171.809 21.25C171.798 21.25 171.787 21.25 171.776 21.25C171.765 21.25 171.754 21.25 171.743 21.25C171.732 21.25 171.721 21.25 171.71 21.25C171.699 21.25 171.688 21.25 171.677 21.25C171.665 21.25 171.654 21.25 171.643 21.25C171.632 21.25 171.621 21.25 171.611 21.25C171.6 21.25 171.589 21.25 171.578 21.25C171.567 21.25 171.556 21.25 171.545 21.25C171.534 21.25 171.523 21.25 171.512 21.25C171.501 21.25 171.49 21.25 171.48 21.25C171.469 21.25 171.458 21.25 171.447 21.25C171.436 21.25 171.425 21.25 171.415 21.25C171.404 21.25 171.393 21.25 171.382 21.25C171.371 21.25 171.361 21.25 171.35 21.25C171.339 21.25 171.329 21.25 171.318 21.25C171.307 21.25 171.296 21.25 171.286 21.25C171.275 21.25 171.264 21.25 171.254 21.25C171.243 21.25 171.232 21.25 171.222 21.25C171.211 21.25 171.201 21.25 171.19 21.25C171.179 21.25 171.169 21.25 171.158 21.25C171.148 21.25 171.137 21.25 171.127 21.25C171.116 21.25 171.105 21.25 171.095 21.25C171.084 21.25 171.074 21.25 171.063 21.25C171.053 21.25 171.042 21.25 171.032 21.25C171.022 21.25 171.011 21.25 171.001 21.25C170.99 21.25 170.98 21.25 170.969 21.25C170.959 21.25 170.949 21.25 170.938 21.25C170.928 21.25 170.918 21.25 170.907 21.25C170.897 21.25 170.887 21.25 170.876 21.25C170.866 21.25 170.856 21.25 170.845 21.25C170.835 21.25 170.825 21.25 170.815 21.25C170.804 21.25 170.794 21.25 170.784 21.25C170.774 21.25 170.764 21.25 170.753 21.25C170.743 21.25 170.733 21.25 170.723 21.25C170.713 21.25 170.703 21.25 170.692 21.25C170.682 21.25 170.672 21.25 170.662 21.25C170.652 21.25 170.642 21.25 170.632 21.25C170.622 21.25 170.612 21.25 170.602 21.25C170.592 21.25 170.582 21.25 170.572 21.25C170.562 21.25 170.552 21.25 170.542 21.25C170.532 21.25 170.522 21.25 170.512 21.25C170.502 21.25 170.492 21.25 170.482 21.25C170.472 21.25 170.462 21.25 170.452 21.25C170.442 21.25 170.432 21.25 170.423 21.25C170.413 21.25 170.403 21.25 170.393 21.25C170.383 21.25 170.373 21.25 170.364 21.25C170.354 21.25 170.344 21.25 170.334 21.25C170.325 21.25 170.315 21.25 170.305 21.25C170.295 21.25 170.286 21.25 170.276 21.25C170.266 21.25 170.257 21.25 170.247 21.25C170.237 21.25 170.228 21.25 170.218 21.25C170.208 21.25 170.199 21.25 170.189 21.25C170.179 21.25 170.17 21.25 170.16 21.25C170.151 21.25 170.141 21.25 170.132 21.25C170.122 21.25 170.113 21.25 170.103 21.25C170.093 21.25 170.084 21.25 170.075 21.25C170.065 21.25 170.056 21.25 170.046 21.25C170.037 21.25 170.027 21.25 170.018 21.25C170.008 21.25 169.999 21.25 169.99 21.25C169.98 21.25 169.971 21.25 169.961 21.25C169.952 21.25 169.943 21.25 169.933 21.25C169.924 21.25 169.915 21.25 169.906 21.25C169.896 21.25 169.887 21.25 169.878 21.25C169.868 21.25 169.859 21.25 169.85 21.25C169.841 21.25 169.832 21.25 169.822 21.25C169.813 21.25 169.804 21.25 169.795 21.25C169.786 21.25 169.776 21.25 169.767 21.25C169.758 21.25 169.749 21.25 169.74 21.25C169.731 21.25 169.722 21.25 169.713 21.25C169.704 21.25 169.695 21.25 169.686 21.25C169.677 21.25 169.668 21.25 169.659 21.25C169.65 21.25 169.641 21.25 169.632 21.25C169.623 21.25 169.614 21.25 169.605 21.25C169.596 21.25 169.587 21.25 169.578 21.25C169.569 21.25 169.56 21.25 169.551 21.25C169.542 21.25 169.534 21.25 169.525 21.25C169.516 21.25 169.507 21.25 169.498 21.25C169.489 21.25 169.481 21.25 169.472 21.25C169.463 21.25 169.454 21.25 169.446 21.25C169.437 21.25 169.428 21.25 169.419 21.25C169.411 21.25 169.402 21.25 169.393 21.25C169.385 21.25 169.376 21.25 169.367 21.25C169.359 21.25 169.35 21.25 169.342 21.25C169.333 21.25 169.324 21.25 169.316 21.25C169.307 21.25 169.299 21.25 169.29 21.25C169.282 21.25 169.273 21.25 169.265 21.25C169.256 21.25 169.248 21.25 169.239 21.25C169.231 21.25 169.222 21.25 169.214 21.25C169.205 21.25 169.197 21.25 169.188 21.25C169.18 21.25 169.172 21.25 169.163 21.25C169.155 21.25 169.147 21.25 169.138 21.25C169.13 21.25 169.122 21.25 169.113 21.25C169.105 21.25 169.097 21.25 169.088 21.25C169.08 21.25 169.072 21.25 169.064 21.25C169.055 21.25 169.047 21.25 169.039 21.25C169.031 21.25 169.023 21.25 169.014 21.25C169.006 21.25 168.998 21.25 168.99 21.25C168.982 21.25 168.974 21.25 168.966 21.25C168.958 21.25 168.949 21.25 168.941 21.25C168.933 21.25 168.925 21.25 168.917 21.25C168.909 21.25 168.901 21.25 168.893 21.25C168.885 21.25 168.877 21.25 168.869 21.25C168.861 21.25 168.853 21.25 168.845 21.25C168.838 21.25 168.83 21.25 168.822 21.25C168.814 21.25 168.806 21.25 168.798 21.25C168.79 21.25 168.782 21.25 168.775 21.25C168.767 21.25 168.759 21.25 168.751 21.25C168.743 21.25 168.736 21.25 168.728 21.25C168.72 21.25 168.712 21.25 168.705 21.25C168.697 21.25 168.689 21.25 168.682 21.25C168.674 21.25 168.666 21.25 168.659 21.25C168.651 21.25 168.643 21.25 168.636 21.25C168.628 21.25 168.621 21.25 168.613 21.25C168.605 21.25 168.598 21.25 168.59 21.25C168.583 21.25 168.575 21.25 168.568 21.25C168.56 21.25 168.553 21.25 168.545 21.25C168.538 21.25 168.53 21.25 168.523 21.25C168.516 21.25 168.508 21.25 168.501 21.25C168.493 21.25 168.486 21.25 168.479 21.25C168.471 21.25 168.464 21.25 168.457 21.25C168.449 21.25 168.442 21.25 168.435 21.25C168.427 21.25 168.42 21.25 168.413 21.25C168.406 21.25 168.398 21.25 168.391 21.25C168.384 21.25 168.377 21.25 168.37 21.25C168.362 21.25 168.355 21.25 168.348 21.25C168.341 21.25 168.334 21.25 168.327 21.25C168.32 21.25 168.313 21.25 168.306 21.25C168.298 21.25 168.291 21.25 168.284 21.25C168.277 21.25 168.27 21.25 168.263 21.25C168.256 21.25 168.249 21.25 168.242 21.25C168.235 21.25 168.229 21.25 168.222 21.25C168.215 21.25 168.208 21.25 168.201 21.25C168.194 21.25 168.187 21.25 168.18 21.25C168.173 21.25 168.167 21.25 168.16 21.25C168.153 21.25 168.146 21.25 168.139 21.25C168.133 21.25 168.126 21.25 168.119 21.25C168.112 21.25 168.106 21.25 168.099 21.25C168.092 21.25 168.086 21.25 168.079 21.25C168.072 21.25 168.066 21.25 168.059 21.25C168.052 21.25 168.046 21.25 168.039 21.25C168.033 21.25 168.026 21.25 168.02 21.25C168.013 21.25 168.007 21.25 168 21.25V22.75ZM188 22.75C190.117 22.75 191.864 22.2192 193.061 20.8733C194.239 19.5478 194.75 17.5766 194.75 15H193.25C193.25 17.4234 192.761 18.9522 191.939 19.8767C191.136 20.7808 189.883 21.25 188 21.25V22.75ZM194.75 15C194.75 14.9902 194.75 14.9804 194.75 14.9706C194.75 14.9608 194.75 14.9509 194.75 14.941C194.75 14.9312 194.75 14.9213 194.75 14.9113C194.75 14.9014 194.75 14.8914 194.75 14.8814C194.75 14.8714 194.75 14.8614 194.75 14.8514C194.75 14.8413 194.75 14.8312 194.75 14.8211C194.75 14.811 194.75 14.8009 194.75 14.7907C194.75 14.7806 194.75 14.7704 194.75 14.7602C194.75 14.7499 194.75 14.7397 194.75 14.7294C194.75 14.7192 194.75 14.7089 194.75 14.6985C194.75 14.6882 194.75 14.6778 194.75 14.6675C194.75 14.6571 194.75 14.6467 194.75 14.6362C194.75 14.6258 194.75 14.6153 194.75 14.6048C194.75 14.5943 194.75 14.5838 194.75 14.5733C194.75 14.5627 194.75 14.5521 194.75 14.5415C194.75 14.5309 194.75 14.5203 194.75 14.5097C194.75 14.499 194.75 14.4883 194.75 14.4776C194.75 14.4669 194.75 14.4562 194.75 14.4454C194.75 14.4346 194.75 14.4238 194.75 14.413C194.75 14.4022 194.75 14.3914 194.75 14.3805C194.75 14.3696 194.75 14.3587 194.75 14.3478C194.75 14.3369 194.75 14.3259 194.75 14.3149C194.75 14.304 194.75 14.293 194.75 14.2819C194.75 14.2709 194.75 14.2598 194.75 14.2488C194.75 14.2377 194.75 14.2266 194.75 14.2154C194.75 14.2043 194.75 14.1931 194.75 14.1819C194.75 14.1708 194.75 14.1595 194.75 14.1483C194.75 14.1371 194.75 14.1258 194.75 14.1145C194.75 14.1032 194.75 14.0919 194.75 14.0806C194.75 14.0692 194.75 14.0578 194.75 14.0464C194.75 14.0351 194.75 14.0236 194.75 14.0122C194.75 14.0007 194.75 13.9893 194.75 13.9778C194.75 13.9663 194.75 13.9547 194.75 13.9432C194.75 13.9317 194.75 13.9201 194.75 13.9085C194.75 13.8969 194.75 13.8853 194.75 13.8736C194.75 13.862 194.75 13.8503 194.75 13.8386C194.75 13.8269 194.75 13.8152 194.75 13.8034C194.75 13.7917 194.75 13.7799 194.75 13.7681C194.75 13.7563 194.75 13.7445 194.75 13.7326C194.75 13.7208 194.75 13.7089 194.75 13.697C194.75 13.6851 194.75 13.6732 194.75 13.6612C194.75 13.6493 194.75 13.6373 194.75 13.6253C194.75 13.6133 194.75 13.6013 194.75 13.5892C194.75 13.5772 194.75 13.5651 194.75 13.553C194.75 13.5409 194.75 13.5288 194.75 13.5166C194.75 13.5045 194.75 13.4923 194.75 13.4801C194.75 13.4679 194.75 13.4557 194.75 13.4435C194.75 13.4312 194.75 13.419 194.75 13.4067C194.75 13.3944 194.75 13.3821 194.75 13.3698C194.75 13.3574 194.75 13.3451 194.75 13.3327C194.75 13.3203 194.75 13.3079 194.75 13.2954C194.75 13.283 194.75 13.2706 194.75 13.2581C194.75 13.2456 194.75 13.2331 194.75 13.2206C194.75 13.208 194.75 13.1955 194.75 13.1829C194.75 13.1704 194.75 13.1578 194.75 13.1451C194.75 13.1325 194.75 13.1199 194.75 13.1072C194.75 13.0945 194.75 13.0818 194.75 13.0691C194.75 13.0564 194.75 13.0437 194.75 13.0309C194.75 13.0182 194.75 13.0054 194.75 12.9926C194.75 12.9798 194.75 12.967 194.75 12.9541C194.75 12.9413 194.75 12.9284 194.75 12.9155C194.75 12.9026 194.75 12.8897 194.75 12.8767C194.75 12.8638 194.75 12.8508 194.75 12.8378C194.75 12.8249 194.75 12.8118 194.75 12.7988C194.75 12.7858 194.75 12.7727 194.75 12.7597C194.75 12.7466 194.75 12.7335 194.75 12.7204C194.75 12.7072 194.75 12.6941 194.75 12.6809C194.75 12.6678 194.75 12.6546 194.75 12.6414C194.75 12.6282 194.75 12.6149 194.75 12.6017C194.75 12.5884 194.75 12.5752 194.75 12.5619C194.75 12.5486 194.75 12.5352 194.75 12.5219C194.75 12.5086 194.75 12.4952 194.75 12.4818C194.75 12.4684 194.75 12.455 194.75 12.4416C194.75 12.4282 194.75 12.4147 194.75 12.4013C194.75 12.3878 194.75 12.3743 194.75 12.3608C194.75 12.3473 194.75 12.3337 194.75 12.3202C194.75 12.3066 194.75 12.2931 194.75 12.2795C194.75 12.2659 194.75 12.2522 194.75 12.2386C194.75 12.225 194.75 12.2113 194.75 12.1976C194.75 12.1839 194.75 12.1702 194.75 12.1565C194.75 12.1428 194.75 12.129 194.75 12.1153C194.75 12.1015 194.75 12.0877 194.75 12.0739C194.75 12.0601 194.75 12.0463 194.75 12.0324C194.75 12.0186 194.75 12.0047 194.75 11.9908C194.75 11.9769 194.75 11.963 194.75 11.9491C194.75 11.9352 194.75 11.9212 194.75 11.9073C194.75 11.8933 194.75 11.8793 194.75 11.8653C194.75 11.8513 194.75 11.8372 194.75 11.8232C194.75 11.8091 194.75 11.7951 194.75 11.781C194.75 11.7669 194.75 11.7528 194.75 11.7386C194.75 11.7245 194.75 11.7104 194.75 11.6962C194.75 11.682 194.75 11.6678 194.75 11.6536C194.75 11.6394 194.75 11.6252 194.75 11.6109C194.75 11.5967 194.75 11.5824 194.75 11.5681C194.75 11.5538 194.75 11.5395 194.75 11.5252C194.75 11.5109 194.75 11.4965 194.75 11.4822C194.75 11.4678 194.75 11.4534 194.75 11.439C194.75 11.4246 194.75 11.4102 194.75 11.3957C194.75 11.3813 194.75 11.3668 194.75 11.3523C194.75 11.3379 194.75 11.3234 194.75 11.3088C194.75 11.2943 194.75 11.2798 194.75 11.2652C194.75 11.2507 194.75 11.2361 194.75 11.2215C194.75 11.2069 194.75 11.1923 194.75 11.1777C194.75 11.163 194.75 11.1484 194.75 11.1337C194.75 11.119 194.75 11.1044 194.75 11.0897C194.75 11.0749 194.75 11.0602 194.75 11.0455C194.75 11.0307 194.75 11.016 194.75 11.0012C194.75 10.9864 194.75 10.9716 194.75 10.9568C194.75 10.942 194.75 10.9272 194.75 10.9123C194.75 10.8975 194.75 10.8826 194.75 10.8677C194.75 10.8528 194.75 10.8379 194.75 10.823C194.75 10.8081 194.75 10.7931 194.75 10.7782C194.75 10.7632 194.75 10.7482 194.75 10.7332C194.75 10.7182 194.75 10.7032 194.75 10.6882C194.75 10.6732 194.75 10.6581 194.75 10.643C194.75 10.628 194.75 10.6129 194.75 10.5978C194.75 10.5827 194.75 10.5676 194.75 10.5524C194.75 10.5373 194.75 10.5222 194.75 10.507C194.75 10.4918 194.75 10.4766 194.75 10.4614C194.75 10.4462 194.75 10.431 194.75 10.4158C194.75 10.4005 194.75 10.3853 194.75 10.37C194.75 10.3547 194.75 10.3394 194.75 10.3241C194.75 10.3088 194.75 10.2935 194.75 10.2782C194.75 10.2628 194.75 10.2475 194.75 10.2321C194.75 10.2167 194.75 10.2014 194.75 10.1859C194.75 10.1705 194.75 10.1551 194.75 10.1397C194.75 10.1242 194.75 10.1088 194.75 10.0933C194.75 10.0779 194.75 10.0624 194.75 10.0469C194.75 10.0314 194.75 10.0158 194.75 10.0003C194.75 9.98477 194.75 9.96922 194.75 9.95365C194.75 9.93808 194.75 9.9225 194.75 9.9069C194.75 9.8913 194.75 9.87569 194.75 9.86005C194.75 9.84442 194.75 9.82878 194.75 9.81311C194.75 9.79745 194.75 9.78177 194.75 9.76608C194.75 9.75038 194.75 9.73468 194.75 9.71895C194.75 9.70322 194.75 9.68748 194.75 9.67173C194.75 9.65597 194.75 9.6402 194.75 9.62441C194.75 9.60863 194.75 9.59282 194.75 9.57701C194.75 9.56119 194.75 9.54536 194.75 9.52951C194.75 9.51366 194.75 9.4978 194.75 9.48192C194.75 9.46604 194.75 9.45015 194.75 9.43424C194.75 9.41833 194.75 9.40241 194.75 9.38647C194.75 9.37053 194.75 9.35458 194.75 9.33861C194.75 9.32265 194.75 9.30666 194.75 9.29067C194.75 9.27467 194.75 9.25866 194.75 9.24263C194.75 9.22661 194.75 9.21057 194.75 9.19451C194.75 9.17845 194.75 9.16239 194.75 9.1463C194.75 9.13022 194.75 9.11412 194.75 9.09801C194.75 9.08189 194.75 9.06577 194.75 9.04963C194.75 9.03348 194.75 9.01733 194.75 9.00116C194.75 8.98499 194.75 8.96881 194.75 8.95261C194.75 8.93641 194.75 8.9202 194.75 8.90397C194.75 8.88775 194.75 8.87151 194.75 8.85526C194.75 8.839 194.75 8.82274 194.75 8.80646C194.75 8.79018 194.75 8.77388 194.75 8.75757C194.75 8.74127 194.75 8.72495 194.75 8.70861C194.75 8.69228 194.75 8.67593 194.75 8.65957C194.75 8.6432 194.75 8.62683 194.75 8.61044C194.75 8.59405 194.75 8.57765 194.75 8.56123C194.75 8.54482 194.75 8.52839 194.75 8.51195C194.75 8.49551 194.75 8.47905 194.75 8.46259C194.75 8.44612 194.75 8.42964 194.75 8.41315C194.75 8.39665 194.75 8.38015 194.75 8.36363C194.75 8.34711 194.75 8.33058 194.75 8.31403C194.75 8.29749 194.75 8.28093 194.75 8.26436C194.75 8.24779 194.75 8.23121 194.75 8.21461C194.75 8.19802 194.75 8.18141 194.75 8.16479C194.75 8.14817 194.75 8.13153 194.75 8.11489C194.75 8.09824 194.75 8.08159 194.75 8.06492C194.75 8.04825 194.75 8.03157 194.75 8.01487C194.75 7.99818 194.75 7.98147 194.75 7.96475C194.75 7.94804 194.75 7.93131 194.75 7.91456C194.75 7.89782 194.75 7.88107 194.75 7.8643C194.75 7.84754 194.75 7.83076 194.75 7.81397C194.75 7.79718 194.75 7.78038 194.75 7.76357C194.75 7.74675 194.75 7.72993 194.75 7.71309C194.75 7.69626 194.75 7.67941 194.75 7.66255C194.75 7.64569 194.75 7.62882 194.75 7.61194C194.75 7.59505 194.75 7.57816 194.75 7.56126C194.75 7.54435 194.75 7.52744 194.75 7.51051C194.75 7.49358 194.75 7.47664 194.75 7.45969C194.75 7.44274 194.75 7.42578 194.75 7.40881C194.75 7.39184 194.75 7.37486 194.75 7.35787C194.75 7.34087 194.75 7.32387 194.75 7.30685C194.75 7.28984 194.75 7.27281 194.75 7.25578C194.75 7.23874 194.75 7.22169 194.75 7.20463C194.75 7.18758 194.75 7.17051 194.75 7.15343C194.75 7.13635 194.75 7.11926 194.75 7.10216C194.75 7.08506 194.75 7.06795 194.75 7.05083C194.75 7.03371 194.75 7.01658 194.75 6.99944C194.75 6.9823 194.75 6.96515 194.75 6.94799C194.75 6.93083 194.75 6.91365 194.75 6.89647C194.75 6.87929 194.75 6.8621 194.75 6.8449C194.75 6.8277 194.75 6.81049 194.75 6.79326C194.75 6.77604 194.75 6.75881 194.75 6.74157C194.75 6.72433 194.75 6.70708 194.75 6.68982C194.75 6.67256 194.75 6.65529 194.75 6.63801C194.75 6.62073 194.75 6.60344 194.75 6.58615C194.75 6.56885 194.75 6.55154 194.75 6.53422C194.75 6.51691 194.75 6.49958 194.75 6.48225C194.75 6.46491 194.75 6.44757 194.75 6.43021C194.75 6.41286 194.75 6.3955 194.75 6.37812C194.75 6.36075 194.75 6.34337 194.75 6.32598C194.75 6.30859 194.75 6.29119 194.75 6.27378C194.75 6.25638 194.75 6.23896 194.75 6.22153C194.75 6.20411 194.75 6.18667 194.75 6.16923C194.75 6.15179 194.75 6.13434 194.75 6.11688C194.75 6.09942 194.75 6.08195 194.75 6.06447C194.75 6.04699 194.75 6.02951 194.75 6.01202C194.75 5.99452 194.75 5.97702 194.75 5.95951C194.75 5.942 194.75 5.92448 194.75 5.90695C194.75 5.88943 194.75 5.87189 194.75 5.85435C194.75 5.8368 194.75 5.81925 194.75 5.80169C194.75 5.78413 194.75 5.76657 194.75 5.74899C194.75 5.73142 194.75 5.71383 194.75 5.69624C194.75 5.67865 194.75 5.66105 194.75 5.64345C194.75 5.62584 194.75 5.60823 194.75 5.59061C194.75 5.57298 194.75 5.55536 194.75 5.53772C194.75 5.52008 194.75 5.50244 194.75 5.48479C194.75 5.46714 194.75 5.44948 194.75 5.43181C194.75 5.41414 194.75 5.39647 194.75 5.37879C194.75 5.36111 194.75 5.34342 194.75 5.32573C194.75 5.30803 194.75 5.29033 194.75 5.27262C194.75 5.25491 194.75 5.23719 194.75 5.21947C194.75 5.20175 194.75 5.18402 194.75 5.16628C194.75 5.14854 194.75 5.1308 194.75 5.11305C194.75 5.0953 194.75 5.07754 194.75 5.05978C194.75 5.04202 194.75 5.02425 194.75 5.00647C194.75 4.98869 194.75 4.97091 194.75 4.95312C194.75 4.93533 194.75 4.91753 194.75 4.89973C194.75 4.88193 194.75 4.86412 194.75 4.8463C194.75 4.82849 194.75 4.81067 194.75 4.79284C194.75 4.77501 194.75 4.75718 194.75 4.73934C194.75 4.7215 194.75 4.70365 194.75 4.6858C194.75 4.66795 194.75 4.65009 194.75 4.63223C194.75 4.61437 194.75 4.5965 194.75 4.57862C194.75 4.56075 194.75 4.54287 194.75 4.52498C194.75 4.50709 194.75 4.4892 194.75 4.4713C194.75 4.4534 194.75 4.4355 194.75 4.41759C194.75 4.39968 194.75 4.38177 194.75 4.36385C194.75 4.34593 194.75 4.32801 194.75 4.31008C194.75 4.29215 194.75 4.27421 194.75 4.25627C194.75 4.23833 194.75 4.22038 194.75 4.20243C194.75 4.18448 194.75 4.16653 194.75 4.14856C194.75 4.1306 194.75 4.11264 194.75 4.09467C194.75 4.0767 194.75 4.05872 194.75 4.04074C194.75 4.02276 194.75 4.00477 194.75 3.98678C194.75 3.96879 194.75 3.9508 194.75 3.9328C194.75 3.9148 194.75 3.8968 194.75 3.87879C194.75 3.86078 194.75 3.84277 194.75 3.82475C194.75 3.80673 194.75 3.78871 194.75 3.77069C194.75 3.75266 194.75 3.73463 194.75 3.7166C194.75 3.69856 194.75 3.68052 194.75 3.66248C194.75 3.64444 194.75 3.62639 194.75 3.60834C194.75 3.59029 194.75 3.57224 194.75 3.55418C194.75 3.53612 194.75 3.51806 194.75 3.49999C194.75 3.48192 194.75 3.46385 194.75 3.44578C194.75 3.42771 194.75 3.40963 194.75 3.39155C194.75 3.37347 194.75 3.35538 194.75 3.33729C194.75 3.3192 194.75 3.30111 194.75 3.28302C194.75 3.26492 194.75 3.24682 194.75 3.22872C194.75 3.21062 194.75 3.19251 194.75 3.1744C194.75 3.15629 194.75 3.13818 194.75 3.12007C194.75 3.10195 194.75 3.08383 194.75 3.06571C194.75 3.04759 194.75 3.02947 194.75 3.01134C194.75 2.99321 194.75 2.97508 194.75 2.95695C194.75 2.93882 194.75 2.92068 194.75 2.90254C194.75 2.8844 194.75 2.86626 194.75 2.84812C194.75 2.82997 194.75 2.81183 194.75 2.79368C194.75 2.77553 194.75 2.75738 194.75 2.73922C194.75 2.72107 194.75 2.70291 194.75 2.68475C194.75 2.66659 194.75 2.64843 194.75 2.63027C194.75 2.61211 194.75 2.59394 194.75 2.57577C194.75 2.5576 194.75 2.53943 194.75 2.52126C194.75 2.50309 194.75 2.48491 194.75 2.46674C194.75 2.44856 194.75 2.43038 194.75 2.4122C194.75 2.39402 194.75 2.37584 194.75 2.35766C194.75 2.33947 194.75 2.32129 194.75 2.3031C194.75 2.28491 194.75 2.26672 194.75 2.24853C194.75 2.23034 194.75 2.21215 194.75 2.19396C194.75 2.17576 194.75 2.15757 194.75 2.13937C194.75 2.12117 194.75 2.10298 194.75 2.08478C194.75 2.06658 194.75 2.04838 194.75 2.03018C194.75 2.01197 194.75 1.99377 194.75 1.97557C194.75 1.95736 194.75 1.93916 194.75 1.92095C194.75 1.90274 194.75 1.88454 194.75 1.86633C194.75 1.84812 194.75 1.82991 194.75 1.8117C194.75 1.79349 194.75 1.77528 194.75 1.75707C194.75 1.73886 194.75 1.72065 194.75 1.70243C194.75 1.68422 194.75 1.66601 194.75 1.64779C194.75 1.62958 194.75 1.61137 194.75 1.59315C194.75 1.57494 194.75 1.55672 194.75 1.53851C194.75 1.52029 194.75 1.50207 194.75 1.48386C194.75 1.46564 194.75 1.44743 194.75 1.42921C194.75 1.41099 194.75 1.39278 194.75 1.37456C194.75 1.35634 194.75 1.33813 194.75 1.31991C194.75 1.30169 194.75 1.28348 194.75 1.26526C194.75 1.24704 194.75 1.22883 194.75 1.21061C194.75 1.1924 194.75 1.17418 194.75 1.15597C194.75 1.13775 194.75 1.11953 194.75 1.10132C194.75 1.08311 194.75 1.06489 194.75 1.04668C194.75 1.02846 194.75 1.01025 194.75 0.992039C194.75 0.973827 194.75 0.955615 194.75 0.937404C194.75 0.919193 194.75 0.900983 194.75 0.882773C194.75 0.864564 194.75 0.846355 194.75 0.828147C194.75 0.80994 194.75 0.791733 194.75 0.773527C194.75 0.755321 194.75 0.737117 194.75 0.718913C194.75 0.70071 194.75 0.682507 194.75 0.664306C194.75 0.646105 194.75 0.627905 194.75 0.609706C194.75 0.591507 194.75 0.57331 194.75 0.555114C194.75 0.536918 194.75 0.518724 194.75 0.500531C194.75 0.482338 194.75 0.464146 194.75 0.445956C194.75 0.427766 194.75 0.409578 194.75 0.391391C194.75 0.373205 194.75 0.35502 194.75 0.336837C194.75 0.318654 194.75 0.300473 194.75 0.282293C194.75 0.264114 194.75 0.245936 194.75 0.227761C194.75 0.209585 194.75 0.191412 194.75 0.173241C194.75 0.155069 194.75 0.1369 194.75 0.118733C194.75 0.100566 194.75 0.0824007 194.75 0.0642381C194.75 0.0460755 194.75 0.0279152 194.75 0.00975721C194.75 -0.00840074 194.75 -0.0265563 194.75 -0.0447094C194.75 -0.0628625 194.75 -0.0810131 194.75 -0.0991611C194.75 -0.117309 194.75 -0.135455 194.75 -0.153597C194.75 -0.17174 194.75 -0.18988 194.75 -0.208018C194.75 -0.226155 194.75 -0.244289 194.75 -0.262421C194.75 -0.280553 194.75 -0.298682 194.75 -0.316807C194.75 -0.334933 194.75 -0.353056 194.75 -0.371176C194.75 -0.389296 194.75 -0.407413 194.75 -0.425526C194.75 -0.44364 194.75 -0.46175 194.75 -0.479857C194.75 -0.497965 194.75 -0.516069 194.75 -0.534169C194.75 -0.55227 194.75 -0.570367 194.75 -0.588461C194.75 -0.606555 194.75 -0.624645 194.75 -0.642732C194.75 -0.660818 194.75 -0.678902 194.75 -0.696981C194.75 -0.715061 194.75 -0.733137 194.75 -0.751209C194.75 -0.769281 194.75 -0.78735 194.75 -0.805414C194.75 -0.823479 194.75 -0.84154 194.75 -0.859597C194.75 -0.877653 194.75 -0.895706 194.75 -0.913755C194.75 -0.931804 194.75 -0.949849 194.75 -0.96789C194.75 -0.985931 194.75 -1.00397 194.75 -1.022C194.75 -1.04003 194.75 -1.05806 194.75 -1.07608C194.75 -1.09411 194.75 -1.11213 194.75 -1.13014C194.75 -1.14816 194.75 -1.16617 194.75 -1.18417C194.75 -1.20218 194.75 -1.22018 194.75 -1.23818C194.75 -1.25618 194.75 -1.27417 194.75 -1.29216C194.75 -1.31014 194.75 -1.32813 194.75 -1.34611C194.75 -1.36408 194.75 -1.38206 194.75 -1.40003C194.75 -1.41799 194.75 -1.43596 194.75 -1.45392C194.75 -1.47187 194.75 -1.48983 194.75 -1.50778C194.75 -1.52573 194.75 -1.54367 194.75 -1.56161C194.75 -1.57955 194.75 -1.59748 194.75 -1.61541C194.75 -1.63333 194.75 -1.65126 194.75 -1.66917C194.75 -1.68709 194.75 -1.705 194.75 -1.72291C194.75 -1.74081 194.75 -1.75871 194.75 -1.77661C194.75 -1.79451 194.75 -1.81239 194.75 -1.83028C194.75 -1.84816 194.75 -1.86604 194.75 -1.88391C194.75 -1.90179 194.75 -1.91965 194.75 -1.93751C194.75 -1.95537 194.75 -1.97323 194.75 -1.99108C194.75 -2.00893 194.75 -2.02677 194.75 -2.04461C194.75 -2.06244 194.75 -2.08027 194.75 -2.0981C194.75 -2.11592 194.75 -2.13374 194.75 -2.15155C194.75 -2.16937 194.75 -2.18717 194.75 -2.20497C194.75 -2.22277 194.75 -2.24056 194.75 -2.25835C194.75 -2.27614 194.75 -2.29392 194.75 -2.31169C194.75 -2.32947 194.75 -2.34723 194.75 -2.36499C194.75 -2.38275 194.75 -2.40051 194.75 -2.41826C194.75 -2.436 194.75 -2.45374 194.75 -2.47148C194.75 -2.48921 194.75 -2.50694 194.75 -2.52466C194.75 -2.54238 194.75 -2.56009 194.75 -2.5778C194.75 -2.5955 194.75 -2.6132 194.75 -2.63089C194.75 -2.64858 194.75 -2.66627 194.75 -2.68395C194.75 -2.70162 194.75 -2.71929 194.75 -2.73696C194.75 -2.75462 194.75 -2.77228 194.75 -2.78992C194.75 -2.80757 194.75 -2.82521 194.75 -2.84285C194.75 -2.86048 194.75 -2.8781 194.75 -2.89572C194.75 -2.91334 194.75 -2.93095 194.75 -2.94855C194.75 -2.96616 194.75 -2.98375 194.75 -3.00134C194.75 -3.01893 194.75 -3.0365 194.75 -3.05408C194.75 -3.07165 194.75 -3.08921 194.75 -3.10677C194.75 -3.12432 194.75 -3.14187 194.75 -3.15941C194.75 -3.17695 194.75 -3.19448 194.75 -3.212C194.75 -3.22953 194.75 -3.24704 194.75 -3.26455C194.75 -3.28205 194.75 -3.29955 194.75 -3.31704C194.75 -3.33453 194.75 -3.35201 194.75 -3.36949C194.75 -3.38696 194.75 -3.40443 194.75 -3.42188C194.75 -3.43934 194.75 -3.45679 194.75 -3.47422C194.75 -3.49166 194.75 -3.50909 194.75 -3.52651C194.75 -3.54394 194.75 -3.56135 194.75 -3.57875C194.75 -3.59616 194.75 -3.61355 194.75 -3.63094C194.75 -3.64832 194.75 -3.6657 194.75 -3.68307C194.75 -3.70043 194.75 -3.71779 194.75 -3.73514C194.75 -3.75249 194.75 -3.76983 194.75 -3.78716C194.75 -3.8045 194.75 -3.82182 194.75 -3.83913C194.75 -3.85644 194.75 -3.87375 194.75 -3.89104C194.75 -3.90833 194.75 -3.92562 194.75 -3.94289C194.75 -3.96017 194.75 -3.97743 194.75 -3.99469C194.75 -4.01194 194.75 -4.02919 194.75 -4.04642C194.75 -4.06366 194.75 -4.08089 194.75 -4.0981C194.75 -4.11532 194.75 -4.13253 194.75 -4.14972C194.75 -4.16692 194.75 -4.18411 194.75 -4.20128C194.75 -4.21846 194.75 -4.23563 194.75 -4.25278C194.75 -4.26994 194.75 -4.28709 194.75 -4.30422C194.75 -4.32136 194.75 -4.33849 194.75 -4.3556C194.75 -4.37272 194.75 -4.38982 194.75 -4.40692C194.75 -4.42401 194.75 -4.4411 194.75 -4.45817C194.75 -4.47524 194.75 -4.49231 194.75 -4.50936C194.75 -4.52641 194.75 -4.54346 194.75 -4.56049C194.75 -4.57752 194.75 -4.59454 194.75 -4.61155C194.75 -4.62856 194.75 -4.64556 194.75 -4.66255C194.75 -4.67954 194.75 -4.69651 194.75 -4.71348C194.75 -4.73045 194.75 -4.7474 194.75 -4.76434C194.75 -4.78129 194.75 -4.79822 194.75 -4.81514C194.75 -4.83207 194.75 -4.84898 194.75 -4.86588C194.75 -4.88278 194.75 -4.89966 194.75 -4.91654C194.75 -4.93342 194.75 -4.95028 194.75 -4.96714C194.75 -4.98399 194.75 -5.00083 194.75 -5.01766C194.75 -5.03449 194.75 -5.05131 194.75 -5.06812C194.75 -5.08493 194.75 -5.10172 194.75 -5.11851C194.75 -5.13529 194.75 -5.15207 194.75 -5.16883C194.75 -5.18559 194.75 -5.20233 194.75 -5.21907C194.75 -5.23581 194.75 -5.25253 194.75 -5.26925C194.75 -5.28596 194.75 -5.30266 194.75 -5.31935C194.75 -5.33603 194.75 -5.35271 194.75 -5.36937C194.75 -5.38604 194.75 -5.40269 194.75 -5.41933C194.75 -5.43597 194.75 -5.4526 194.75 -5.46921C194.75 -5.48582 194.75 -5.50243 194.75 -5.51902C194.75 -5.53561 194.75 -5.55218 194.75 -5.56875C194.75 -5.58531 194.75 -5.60186 194.75 -5.6184C194.75 -5.63494 194.75 -5.65147 194.75 -5.66798C194.75 -5.68449 194.75 -5.70099 194.75 -5.71748C194.75 -5.73397 194.75 -5.75044 194.75 -5.7669C194.75 -5.78336 194.75 -5.79981 194.75 -5.81625C194.75 -5.83268 194.75 -5.84911 194.75 -5.86551C194.75 -5.88192 194.75 -5.89832 194.75 -5.9147C194.75 -5.93108 194.75 -5.94745 194.75 -5.96381C194.75 -5.98016 194.75 -5.99651 194.75 -6.01284C194.75 -6.02916 194.75 -6.04548 194.75 -6.06178C194.75 -6.07808 194.75 -6.09437 194.75 -6.11064C194.75 -6.12692 194.75 -6.14318 194.75 -6.15943C194.75 -6.17567 194.75 -6.1919 194.75 -6.20812C194.75 -6.22434 194.75 -6.24055 194.75 -6.25674C194.75 -6.27293 194.75 -6.28911 194.75 -6.30527C194.75 -6.32143 194.75 -6.33758 194.75 -6.35372C194.75 -6.36985 194.75 -6.38597 194.75 -6.40208C194.75 -6.41818 194.75 -6.43427 194.75 -6.45035C194.75 -6.46643 194.75 -6.48249 194.75 -6.49854C194.75 -6.51459 194.75 -6.53062 194.75 -6.54664C194.75 -6.56266 194.75 -6.57867 194.75 -6.59466C194.75 -6.61065 194.75 -6.62662 194.75 -6.64258C194.75 -6.65854 194.75 -6.67449 194.75 -6.69042C194.75 -6.70635 194.75 -6.72227 194.75 -6.73817C194.75 -6.75407 194.75 -6.76996 194.75 -6.78583C194.75 -6.8017 194.75 -6.81756 194.75 -6.8334C194.75 -6.84924 194.75 -6.86506 194.75 -6.88087C194.75 -6.89668 194.75 -6.91248 194.75 -6.92826C194.75 -6.94404 194.75 -6.9598 194.75 -6.97555C194.75 -6.9913 194.75 -7.00703 194.75 -7.02275C194.75 -7.03847 194.75 -7.05417 194.75 -7.06986C194.75 -7.08555 194.75 -7.10122 194.75 -7.11687C194.75 -7.13253 194.75 -7.14817 194.75 -7.16379C194.75 -7.17942 194.75 -7.19502 194.75 -7.21062C194.75 -7.22621 194.75 -7.24178 194.75 -7.25734C194.75 -7.2729 194.75 -7.28845 194.75 -7.30398C194.75 -7.3195 194.75 -7.33501 194.75 -7.35051C194.75 -7.36601 194.75 -7.38148 194.75 -7.39695C194.75 -7.41241 194.75 -7.42786 194.75 -7.44329C194.75 -7.45872 194.75 -7.47413 194.75 -7.48953C194.75 -7.50493 194.75 -7.52031 194.75 -7.53567C194.75 -7.55103 194.75 -7.56638 194.75 -7.58171C194.75 -7.59704 194.75 -7.61236 194.75 -7.62765C194.75 -7.64295 194.75 -7.65823 194.75 -7.67349C194.75 -7.68876 194.75 -7.704 194.75 -7.71923C194.75 -7.73446 194.75 -7.74968 194.75 -7.76487C194.75 -7.78007 194.75 -7.79524 194.75 -7.81041C194.75 -7.82557 194.75 -7.84071 194.75 -7.85584C194.75 -7.87096 194.75 -7.88607 194.75 -7.90117C194.75 -7.91626 194.75 -7.93133 194.75 -7.94639C194.75 -7.96145 194.75 -7.97648 194.75 -7.99151C194.75 -8.00653 194.75 -8.02153 194.75 -8.03652C194.75 -8.05151 194.75 -8.06647 194.75 -8.08143C194.75 -8.09638 194.75 -8.11131 194.75 -8.12623C194.75 -8.14114 194.75 -8.15604 194.75 -8.17092C194.75 -8.1858 194.75 -8.20066 194.75 -8.2155C194.75 -8.23035 194.75 -8.24517 194.75 -8.25998C194.75 -8.27479 194.75 -8.28958 194.75 -8.30435C194.75 -8.31912 194.75 -8.33387 194.75 -8.3486C194.75 -8.36334 194.75 -8.37805 194.75 -8.39275C194.75 -8.40745 194.75 -8.42213 194.75 -8.43679C194.75 -8.45145 194.75 -8.46609 194.75 -8.48071C194.75 -8.49534 194.75 -8.50994 194.75 -8.52453C194.75 -8.53911 194.75 -8.55368 194.75 -8.56823C194.75 -8.58278 194.75 -8.59731 194.75 -8.61182C194.75 -8.62633 194.75 -8.64082 194.75 -8.65529C194.75 -8.66976 194.75 -8.68422 194.75 -8.69865C194.75 -8.71308 194.75 -8.7275 194.75 -8.7419C194.75 -8.75629 194.75 -8.77067 194.75 -8.78503C194.75 -8.79938 194.75 -8.81372 194.75 -8.82804C194.75 -8.84236 194.75 -8.85666 194.75 -8.87094C194.75 -8.88522 194.75 -8.89948 194.75 -8.91372C194.75 -8.92796 194.75 -8.94218 194.75 -8.95638C194.75 -8.97058 194.75 -8.98476 194.75 -8.99892C194.75 -9.01308 194.75 -9.02722 194.75 -9.04135C194.75 -9.05547 194.75 -9.06957 194.75 -9.08365C194.75 -9.09773 194.75 -9.1118 194.75 -9.12584C194.75 -9.13988 194.75 -9.1539 194.75 -9.1679C194.75 -9.1819 194.75 -9.19588 194.75 -9.20984C194.75 -9.22381 194.75 -9.23775 194.75 -9.25167C194.75 -9.26559 194.75 -9.27949 194.75 -9.29337C194.75 -9.30724 194.75 -9.3211 194.75 -9.33494C194.75 -9.34878 194.75 -9.3626 194.75 -9.37639C194.75 -9.39019 194.75 -9.40397 194.75 -9.41772C194.75 -9.43148 194.75 -9.44521 194.75 -9.45893C194.75 -9.47264 194.75 -9.48633 194.75 -9.50001H193.25C193.25 -9.48633 193.25 -9.47264 193.25 -9.45893C193.25 -9.44521 193.25 -9.43148 193.25 -9.41772C193.25 -9.40397 193.25 -9.39019 193.25 -9.37639C193.25 -9.3626 193.25 -9.34878 193.25 -9.33494C193.25 -9.3211 193.25 -9.30724 193.25 -9.29337C193.25 -9.27949 193.25 -9.26559 193.25 -9.25167C193.25 -9.23775 193.25 -9.22381 193.25 -9.20984C193.25 -9.19588 193.25 -9.1819 193.25 -9.1679C193.25 -9.1539 193.25 -9.13988 193.25 -9.12584C193.25 -9.1118 193.25 -9.09773 193.25 -9.08365C193.25 -9.06957 193.25 -9.05547 193.25 -9.04135C193.25 -9.02722 193.25 -9.01308 193.25 -8.99892C193.25 -8.98476 193.25 -8.97058 193.25 -8.95638C193.25 -8.94218 193.25 -8.92796 193.25 -8.91372C193.25 -8.89948 193.25 -8.88522 193.25 -8.87094C193.25 -8.85666 193.25 -8.84236 193.25 -8.82804C193.25 -8.81372 193.25 -8.79938 193.25 -8.78503C193.25 -8.77067 193.25 -8.75629 193.25 -8.7419C193.25 -8.7275 193.25 -8.71308 193.25 -8.69865C193.25 -8.68422 193.25 -8.66976 193.25 -8.65529C193.25 -8.64082 193.25 -8.62633 193.25 -8.61182C193.25 -8.59731 193.25 -8.58278 193.25 -8.56823C193.25 -8.55368 193.25 -8.53911 193.25 -8.52453C193.25 -8.50994 193.25 -8.49534 193.25 -8.48071C193.25 -8.46609 193.25 -8.45145 193.25 -8.43679C193.25 -8.42213 193.25 -8.40745 193.25 -8.39275C193.25 -8.37805 193.25 -8.36334 193.25 -8.3486C193.25 -8.33387 193.25 -8.31912 193.25 -8.30435C193.25 -8.28958 193.25 -8.27479 193.25 -8.25998C193.25 -8.24517 193.25 -8.23035 193.25 -8.2155C193.25 -8.20066 193.25 -8.1858 193.25 -8.17092C193.25 -8.15604 193.25 -8.14114 193.25 -8.12623C193.25 -8.11131 193.25 -8.09638 193.25 -8.08143C193.25 -8.06647 193.25 -8.05151 193.25 -8.03652C193.25 -8.02153 193.25 -8.00653 193.25 -7.99151C193.25 -7.97648 193.25 -7.96145 193.25 -7.94639C193.25 -7.93133 193.25 -7.91626 193.25 -7.90117C193.25 -7.88607 193.25 -7.87096 193.25 -7.85584C193.25 -7.84071 193.25 -7.82557 193.25 -7.81041C193.25 -7.79524 193.25 -7.78007 193.25 -7.76487C193.25 -7.74968 193.25 -7.73446 193.25 -7.71923C193.25 -7.704 193.25 -7.68876 193.25 -7.67349C193.25 -7.65823 193.25 -7.64295 193.25 -7.62765C193.25 -7.61236 193.25 -7.59704 193.25 -7.58171C193.25 -7.56638 193.25 -7.55103 193.25 -7.53567C193.25 -7.52031 193.25 -7.50493 193.25 -7.48953C193.25 -7.47413 193.25 -7.45872 193.25 -7.44329C193.25 -7.42786 193.25 -7.41241 193.25 -7.39695C193.25 -7.38148 193.25 -7.36601 193.25 -7.35051C193.25 -7.33501 193.25 -7.3195 193.25 -7.30398C193.25 -7.28845 193.25 -7.2729 193.25 -7.25734C193.25 -7.24178 193.25 -7.22621 193.25 -7.21062C193.25 -7.19502 193.25 -7.17942 193.25 -7.16379C193.25 -7.14817 193.25 -7.13253 193.25 -7.11687C193.25 -7.10122 193.25 -7.08555 193.25 -7.06986C193.25 -7.05417 193.25 -7.03847 193.25 -7.02275C193.25 -7.00703 193.25 -6.9913 193.25 -6.97555C193.25 -6.9598 193.25 -6.94404 193.25 -6.92826C193.25 -6.91248 193.25 -6.89668 193.25 -6.88087C193.25 -6.86506 193.25 -6.84924 193.25 -6.8334C193.25 -6.81756 193.25 -6.8017 193.25 -6.78583C193.25 -6.76996 193.25 -6.75407 193.25 -6.73817C193.25 -6.72227 193.25 -6.70635 193.25 -6.69042C193.25 -6.67449 193.25 -6.65854 193.25 -6.64258C193.25 -6.62662 193.25 -6.61065 193.25 -6.59466C193.25 -6.57867 193.25 -6.56266 193.25 -6.54664C193.25 -6.53062 193.25 -6.51459 193.25 -6.49854C193.25 -6.48249 193.25 -6.46643 193.25 -6.45035C193.25 -6.43427 193.25 -6.41818 193.25 -6.40208C193.25 -6.38597 193.25 -6.36985 193.25 -6.35372C193.25 -6.33758 193.25 -6.32143 193.25 -6.30527C193.25 -6.28911 193.25 -6.27293 193.25 -6.25674C193.25 -6.24055 193.25 -6.22434 193.25 -6.20812C193.25 -6.1919 193.25 -6.17567 193.25 -6.15943C193.25 -6.14318 193.25 -6.12692 193.25 -6.11064C193.25 -6.09437 193.25 -6.07808 193.25 -6.06178C193.25 -6.04548 193.25 -6.02916 193.25 -6.01284C193.25 -5.99651 193.25 -5.98016 193.25 -5.96381C193.25 -5.94745 193.25 -5.93108 193.25 -5.9147C193.25 -5.89832 193.25 -5.88192 193.25 -5.86551C193.25 -5.84911 193.25 -5.83268 193.25 -5.81625C193.25 -5.79981 193.25 -5.78336 193.25 -5.7669C193.25 -5.75044 193.25 -5.73397 193.25 -5.71748C193.25 -5.70099 193.25 -5.68449 193.25 -5.66798C193.25 -5.65147 193.25 -5.63494 193.25 -5.6184C193.25 -5.60186 193.25 -5.58531 193.25 -5.56875C193.25 -5.55218 193.25 -5.53561 193.25 -5.51902C193.25 -5.50243 193.25 -5.48582 193.25 -5.46921C193.25 -5.4526 193.25 -5.43597 193.25 -5.41933C193.25 -5.40269 193.25 -5.38604 193.25 -5.36937C193.25 -5.35271 193.25 -5.33603 193.25 -5.31935C193.25 -5.30266 193.25 -5.28596 193.25 -5.26925C193.25 -5.25253 193.25 -5.23581 193.25 -5.21907C193.25 -5.20233 193.25 -5.18559 193.25 -5.16883C193.25 -5.15207 193.25 -5.13529 193.25 -5.11851C193.25 -5.10172 193.25 -5.08493 193.25 -5.06812C193.25 -5.05131 193.25 -5.03449 193.25 -5.01766C193.25 -5.00083 193.25 -4.98399 193.25 -4.96714C193.25 -4.95028 193.25 -4.93342 193.25 -4.91654C193.25 -4.89966 193.25 -4.88278 193.25 -4.86588C193.25 -4.84898 193.25 -4.83207 193.25 -4.81514C193.25 -4.79822 193.25 -4.78129 193.25 -4.76434C193.25 -4.7474 193.25 -4.73045 193.25 -4.71348C193.25 -4.69651 193.25 -4.67954 193.25 -4.66255C193.25 -4.64556 193.25 -4.62856 193.25 -4.61155C193.25 -4.59454 193.25 -4.57752 193.25 -4.56049C193.25 -4.54346 193.25 -4.52641 193.25 -4.50936C193.25 -4.49231 193.25 -4.47524 193.25 -4.45817C193.25 -4.4411 193.25 -4.42401 193.25 -4.40692C193.25 -4.38982 193.25 -4.37272 193.25 -4.3556C193.25 -4.33849 193.25 -4.32136 193.25 -4.30422C193.25 -4.28709 193.25 -4.26994 193.25 -4.25278C193.25 -4.23563 193.25 -4.21846 193.25 -4.20128C193.25 -4.18411 193.25 -4.16692 193.25 -4.14972C193.25 -4.13253 193.25 -4.11532 193.25 -4.0981C193.25 -4.08089 193.25 -4.06366 193.25 -4.04642C193.25 -4.02919 193.25 -4.01194 193.25 -3.99469C193.25 -3.97743 193.25 -3.96017 193.25 -3.94289C193.25 -3.92562 193.25 -3.90833 193.25 -3.89104C193.25 -3.87375 193.25 -3.85644 193.25 -3.83913C193.25 -3.82182 193.25 -3.8045 193.25 -3.78716C193.25 -3.76983 193.25 -3.75249 193.25 -3.73514C193.25 -3.71779 193.25 -3.70043 193.25 -3.68307C193.25 -3.6657 193.25 -3.64832 193.25 -3.63094C193.25 -3.61355 193.25 -3.59616 193.25 -3.57875C193.25 -3.56135 193.25 -3.54394 193.25 -3.52651C193.25 -3.50909 193.25 -3.49166 193.25 -3.47422C193.25 -3.45679 193.25 -3.43934 193.25 -3.42188C193.25 -3.40443 193.25 -3.38696 193.25 -3.36949C193.25 -3.35201 193.25 -3.33453 193.25 -3.31704C193.25 -3.29955 193.25 -3.28205 193.25 -3.26455C193.25 -3.24704 193.25 -3.22953 193.25 -3.212C193.25 -3.19448 193.25 -3.17695 193.25 -3.15941C193.25 -3.14187 193.25 -3.12432 193.25 -3.10677C193.25 -3.08921 193.25 -3.07165 193.25 -3.05408C193.25 -3.0365 193.25 -3.01893 193.25 -3.00134C193.25 -2.98375 193.25 -2.96616 193.25 -2.94855C193.25 -2.93095 193.25 -2.91334 193.25 -2.89572C193.25 -2.8781 193.25 -2.86048 193.25 -2.84285C193.25 -2.82521 193.25 -2.80757 193.25 -2.78992C193.25 -2.77228 193.25 -2.75462 193.25 -2.73696C193.25 -2.71929 193.25 -2.70162 193.25 -2.68395C193.25 -2.66627 193.25 -2.64858 193.25 -2.63089C193.25 -2.6132 193.25 -2.5955 193.25 -2.5778C193.25 -2.56009 193.25 -2.54238 193.25 -2.52466C193.25 -2.50694 193.25 -2.48921 193.25 -2.47148C193.25 -2.45374 193.25 -2.436 193.25 -2.41826C193.25 -2.40051 193.25 -2.38275 193.25 -2.36499C193.25 -2.34723 193.25 -2.32947 193.25 -2.31169C193.25 -2.29392 193.25 -2.27614 193.25 -2.25835C193.25 -2.24056 193.25 -2.22277 193.25 -2.20497C193.25 -2.18717 193.25 -2.16937 193.25 -2.15155C193.25 -2.13374 193.25 -2.11592 193.25 -2.0981C193.25 -2.08027 193.25 -2.06244 193.25 -2.04461C193.25 -2.02677 193.25 -2.00893 193.25 -1.99108C193.25 -1.97323 193.25 -1.95537 193.25 -1.93751C193.25 -1.91965 193.25 -1.90179 193.25 -1.88391C193.25 -1.86604 193.25 -1.84816 193.25 -1.83028C193.25 -1.81239 193.25 -1.79451 193.25 -1.77661C193.25 -1.75871 193.25 -1.74081 193.25 -1.72291C193.25 -1.705 193.25 -1.68709 193.25 -1.66917C193.25 -1.65126 193.25 -1.63333 193.25 -1.61541C193.25 -1.59748 193.25 -1.57955 193.25 -1.56161C193.25 -1.54367 193.25 -1.52573 193.25 -1.50778C193.25 -1.48983 193.25 -1.47187 193.25 -1.45392C193.25 -1.43596 193.25 -1.41799 193.25 -1.40003C193.25 -1.38206 193.25 -1.36408 193.25 -1.34611C193.25 -1.32813 193.25 -1.31014 193.25 -1.29216C193.25 -1.27417 193.25 -1.25618 193.25 -1.23818C193.25 -1.22018 193.25 -1.20218 193.25 -1.18417C193.25 -1.16617 193.25 -1.14816 193.25 -1.13014C193.25 -1.11213 193.25 -1.09411 193.25 -1.07608C193.25 -1.05806 193.25 -1.04003 193.25 -1.022C193.25 -1.00397 193.25 -0.985931 193.25 -0.96789C193.25 -0.949849 193.25 -0.931804 193.25 -0.913755C193.25 -0.895706 193.25 -0.877653 193.25 -0.859597C193.25 -0.84154 193.25 -0.823479 193.25 -0.805414C193.25 -0.78735 193.25 -0.769281 193.25 -0.751209C193.25 -0.733137 193.25 -0.715061 193.25 -0.696981C193.25 -0.678902 193.25 -0.660818 193.25 -0.642732C193.25 -0.624645 193.25 -0.606555 193.25 -0.588461C193.25 -0.570367 193.25 -0.55227 193.25 -0.534169C193.25 -0.516069 193.25 -0.497965 193.25 -0.479857C193.25 -0.46175 193.25 -0.44364 193.25 -0.425526C193.25 -0.407413 193.25 -0.389296 193.25 -0.371176C193.25 -0.353056 193.25 -0.334933 193.25 -0.316807C193.25 -0.298682 193.25 -0.280553 193.25 -0.262421C193.25 -0.244289 193.25 -0.226155 193.25 -0.208018C193.25 -0.18988 193.25 -0.17174 193.25 -0.153597C193.25 -0.135455 193.25 -0.117309 193.25 -0.0991611C193.25 -0.0810131 193.25 -0.0628625 193.25 -0.0447094C193.25 -0.0265563 193.25 -0.00840074 193.25 0.00975721C193.25 0.0279152 193.25 0.0460755 193.25 0.0642381C193.25 0.0824007 193.25 0.100566 193.25 0.118733C193.25 0.1369 193.25 0.155069 193.25 0.173241C193.25 0.191412 193.25 0.209585 193.25 0.227761C193.25 0.245936 193.25 0.264114 193.25 0.282293C193.25 0.300473 193.25 0.318654 193.25 0.336837C193.25 0.35502 193.25 0.373205 193.25 0.391391C193.25 0.409578 193.25 0.427766 193.25 0.445956C193.25 0.464146 193.25 0.482338 193.25 0.500531C193.25 0.518724 193.25 0.536918 193.25 0.555114C193.25 0.57331 193.25 0.591507 193.25 0.609706C193.25 0.627905 193.25 0.646105 193.25 0.664306C193.25 0.682507 193.25 0.70071 193.25 0.718913C193.25 0.737117 193.25 0.755321 193.25 0.773527C193.25 0.791733 193.25 0.80994 193.25 0.828147C193.25 0.846355 193.25 0.864564 193.25 0.882773C193.25 0.900983 193.25 0.919193 193.25 0.937404C193.25 0.955615 193.25 0.973827 193.25 0.992039C193.25 1.01025 193.25 1.02846 193.25 1.04668C193.25 1.06489 193.25 1.08311 193.25 1.10132C193.25 1.11953 193.25 1.13775 193.25 1.15597C193.25 1.17418 193.25 1.1924 193.25 1.21061C193.25 1.22883 193.25 1.24704 193.25 1.26526C193.25 1.28348 193.25 1.30169 193.25 1.31991C193.25 1.33813 193.25 1.35634 193.25 1.37456C193.25 1.39278 193.25 1.41099 193.25 1.42921C193.25 1.44743 193.25 1.46564 193.25 1.48386C193.25 1.50207 193.25 1.52029 193.25 1.53851C193.25 1.55672 193.25 1.57494 193.25 1.59315C193.25 1.61137 193.25 1.62958 193.25 1.64779C193.25 1.66601 193.25 1.68422 193.25 1.70243C193.25 1.72065 193.25 1.73886 193.25 1.75707C193.25 1.77528 193.25 1.79349 193.25 1.8117C193.25 1.82991 193.25 1.84812 193.25 1.86633C193.25 1.88454 193.25 1.90274 193.25 1.92095C193.25 1.93916 193.25 1.95736 193.25 1.97557C193.25 1.99377 193.25 2.01197 193.25 2.03018C193.25 2.04838 193.25 2.06658 193.25 2.08478C193.25 2.10298 193.25 2.12117 193.25 2.13937C193.25 2.15757 193.25 2.17576 193.25 2.19396C193.25 2.21215 193.25 2.23034 193.25 2.24853C193.25 2.26672 193.25 2.28491 193.25 2.3031C193.25 2.32129 193.25 2.33947 193.25 2.35766C193.25 2.37584 193.25 2.39402 193.25 2.4122C193.25 2.43038 193.25 2.44856 193.25 2.46674C193.25 2.48491 193.25 2.50309 193.25 2.52126C193.25 2.53943 193.25 2.5576 193.25 2.57577C193.25 2.59394 193.25 2.61211 193.25 2.63027C193.25 2.64843 193.25 2.66659 193.25 2.68475C193.25 2.70291 193.25 2.72107 193.25 2.73922C193.25 2.75738 193.25 2.77553 193.25 2.79368C193.25 2.81183 193.25 2.82997 193.25 2.84812C193.25 2.86626 193.25 2.8844 193.25 2.90254C193.25 2.92068 193.25 2.93882 193.25 2.95695C193.25 2.97508 193.25 2.99321 193.25 3.01134C193.25 3.02947 193.25 3.04759 193.25 3.06571C193.25 3.08383 193.25 3.10195 193.25 3.12007C193.25 3.13818 193.25 3.15629 193.25 3.1744C193.25 3.19251 193.25 3.21062 193.25 3.22872C193.25 3.24682 193.25 3.26492 193.25 3.28302C193.25 3.30111 193.25 3.3192 193.25 3.33729C193.25 3.35538 193.25 3.37347 193.25 3.39155C193.25 3.40963 193.25 3.42771 193.25 3.44578C193.25 3.46385 193.25 3.48192 193.25 3.49999C193.25 3.51806 193.25 3.53612 193.25 3.55418C193.25 3.57224 193.25 3.59029 193.25 3.60834C193.25 3.62639 193.25 3.64444 193.25 3.66248C193.25 3.68052 193.25 3.69856 193.25 3.7166C193.25 3.73463 193.25 3.75266 193.25 3.77069C193.25 3.78871 193.25 3.80673 193.25 3.82475C193.25 3.84277 193.25 3.86078 193.25 3.87879C193.25 3.8968 193.25 3.9148 193.25 3.9328C193.25 3.9508 193.25 3.96879 193.25 3.98678C193.25 4.00477 193.25 4.02276 193.25 4.04074C193.25 4.05872 193.25 4.0767 193.25 4.09467C193.25 4.11264 193.25 4.1306 193.25 4.14856C193.25 4.16653 193.25 4.18448 193.25 4.20243C193.25 4.22038 193.25 4.23833 193.25 4.25627C193.25 4.27421 193.25 4.29215 193.25 4.31008C193.25 4.32801 193.25 4.34593 193.25 4.36385C193.25 4.38177 193.25 4.39968 193.25 4.41759C193.25 4.4355 193.25 4.4534 193.25 4.4713C193.25 4.4892 193.25 4.50709 193.25 4.52498C193.25 4.54287 193.25 4.56075 193.25 4.57862C193.25 4.5965 193.25 4.61437 193.25 4.63223C193.25 4.65009 193.25 4.66795 193.25 4.6858C193.25 4.70365 193.25 4.7215 193.25 4.73934C193.25 4.75718 193.25 4.77501 193.25 4.79284C193.25 4.81067 193.25 4.82849 193.25 4.8463C193.25 4.86412 193.25 4.88193 193.25 4.89973C193.25 4.91753 193.25 4.93533 193.25 4.95312C193.25 4.97091 193.25 4.98869 193.25 5.00647C193.25 5.02425 193.25 5.04202 193.25 5.05978C193.25 5.07754 193.25 5.0953 193.25 5.11305C193.25 5.1308 193.25 5.14854 193.25 5.16628C193.25 5.18402 193.25 5.20175 193.25 5.21947C193.25 5.23719 193.25 5.25491 193.25 5.27262C193.25 5.29033 193.25 5.30803 193.25 5.32573C193.25 5.34342 193.25 5.36111 193.25 5.37879C193.25 5.39647 193.25 5.41414 193.25 5.43181C193.25 5.44948 193.25 5.46714 193.25 5.48479C193.25 5.50244 193.25 5.52008 193.25 5.53772C193.25 5.55536 193.25 5.57298 193.25 5.59061C193.25 5.60823 193.25 5.62584 193.25 5.64345C193.25 5.66105 193.25 5.67865 193.25 5.69624C193.25 5.71383 193.25 5.73142 193.25 5.74899C193.25 5.76657 193.25 5.78413 193.25 5.80169C193.25 5.81925 193.25 5.8368 193.25 5.85435C193.25 5.87189 193.25 5.88943 193.25 5.90695C193.25 5.92448 193.25 5.942 193.25 5.95951C193.25 5.97702 193.25 5.99452 193.25 6.01202C193.25 6.02951 193.25 6.04699 193.25 6.06447C193.25 6.08195 193.25 6.09942 193.25 6.11688C193.25 6.13434 193.25 6.15179 193.25 6.16923C193.25 6.18667 193.25 6.20411 193.25 6.22153C193.25 6.23896 193.25 6.25638 193.25 6.27378C193.25 6.29119 193.25 6.30859 193.25 6.32598C193.25 6.34337 193.25 6.36075 193.25 6.37812C193.25 6.3955 193.25 6.41286 193.25 6.43021C193.25 6.44757 193.25 6.46491 193.25 6.48225C193.25 6.49958 193.25 6.51691 193.25 6.53422C193.25 6.55154 193.25 6.56885 193.25 6.58615C193.25 6.60344 193.25 6.62073 193.25 6.63801C193.25 6.65529 193.25 6.67256 193.25 6.68982C193.25 6.70708 193.25 6.72433 193.25 6.74157C193.25 6.75881 193.25 6.77604 193.25 6.79326C193.25 6.81049 193.25 6.8277 193.25 6.8449C193.25 6.8621 193.25 6.87929 193.25 6.89647C193.25 6.91365 193.25 6.93083 193.25 6.94799C193.25 6.96515 193.25 6.9823 193.25 6.99944C193.25 7.01658 193.25 7.03371 193.25 7.05083C193.25 7.06795 193.25 7.08506 193.25 7.10216C193.25 7.11926 193.25 7.13635 193.25 7.15343C193.25 7.17051 193.25 7.18758 193.25 7.20463C193.25 7.22169 193.25 7.23874 193.25 7.25578C193.25 7.27281 193.25 7.28984 193.25 7.30685C193.25 7.32387 193.25 7.34087 193.25 7.35787C193.25 7.37486 193.25 7.39184 193.25 7.40881C193.25 7.42578 193.25 7.44274 193.25 7.45969C193.25 7.47664 193.25 7.49358 193.25 7.51051C193.25 7.52744 193.25 7.54435 193.25 7.56126C193.25 7.57816 193.25 7.59505 193.25 7.61194C193.25 7.62882 193.25 7.64569 193.25 7.66255C193.25 7.67941 193.25 7.69626 193.25 7.71309C193.25 7.72993 193.25 7.74675 193.25 7.76357C193.25 7.78038 193.25 7.79718 193.25 7.81397C193.25 7.83076 193.25 7.84754 193.25 7.8643C193.25 7.88107 193.25 7.89782 193.25 7.91456C193.25 7.93131 193.25 7.94804 193.25 7.96475C193.25 7.98147 193.25 7.99818 193.25 8.01487C193.25 8.03157 193.25 8.04825 193.25 8.06492C193.25 8.08159 193.25 8.09824 193.25 8.11489C193.25 8.13153 193.25 8.14817 193.25 8.16479C193.25 8.18141 193.25 8.19802 193.25 8.21461C193.25 8.23121 193.25 8.24779 193.25 8.26436C193.25 8.28093 193.25 8.29749 193.25 8.31403C193.25 8.33058 193.25 8.34711 193.25 8.36363C193.25 8.38015 193.25 8.39665 193.25 8.41315C193.25 8.42964 193.25 8.44612 193.25 8.46259C193.25 8.47905 193.25 8.49551 193.25 8.51195C193.25 8.52839 193.25 8.54482 193.25 8.56123C193.25 8.57765 193.25 8.59405 193.25 8.61044C193.25 8.62683 193.25 8.6432 193.25 8.65957C193.25 8.67593 193.25 8.69228 193.25 8.70861C193.25 8.72495 193.25 8.74127 193.25 8.75757C193.25 8.77388 193.25 8.79018 193.25 8.80646C193.25 8.82274 193.25 8.839 193.25 8.85526C193.25 8.87151 193.25 8.88775 193.25 8.90397C193.25 8.9202 193.25 8.93641 193.25 8.95261C193.25 8.96881 193.25 8.98499 193.25 9.00116C193.25 9.01733 193.25 9.03348 193.25 9.04963C193.25 9.06577 193.25 9.08189 193.25 9.09801C193.25 9.11412 193.25 9.13022 193.25 9.1463C193.25 9.16239 193.25 9.17845 193.25 9.19451C193.25 9.21057 193.25 9.22661 193.25 9.24263C193.25 9.25866 193.25 9.27467 193.25 9.29067C193.25 9.30666 193.25 9.32265 193.25 9.33861C193.25 9.35458 193.25 9.37053 193.25 9.38647C193.25 9.40241 193.25 9.41833 193.25 9.43424C193.25 9.45015 193.25 9.46604 193.25 9.48192C193.25 9.4978 193.25 9.51366 193.25 9.52951C193.25 9.54536 193.25 9.56119 193.25 9.57701C193.25 9.59282 193.25 9.60863 193.25 9.62441C193.25 9.6402 193.25 9.65597 193.25 9.67173C193.25 9.68748 193.25 9.70322 193.25 9.71895C193.25 9.73468 193.25 9.75038 193.25 9.76608C193.25 9.78177 193.25 9.79745 193.25 9.81311C193.25 9.82878 193.25 9.84442 193.25 9.86005C193.25 9.87569 193.25 9.8913 193.25 9.9069C193.25 9.9225 193.25 9.93808 193.25 9.95365C193.25 9.96922 193.25 9.98477 193.25 10.0003C193.25 10.0158 193.25 10.0314 193.25 10.0469C193.25 10.0624 193.25 10.0779 193.25 10.0933C193.25 10.1088 193.25 10.1242 193.25 10.1397C193.25 10.1551 193.25 10.1705 193.25 10.1859C193.25 10.2014 193.25 10.2167 193.25 10.2321C193.25 10.2475 193.25 10.2628 193.25 10.2782C193.25 10.2935 193.25 10.3088 193.25 10.3241C193.25 10.3394 193.25 10.3547 193.25 10.37C193.25 10.3853 193.25 10.4005 193.25 10.4158C193.25 10.431 193.25 10.4462 193.25 10.4614C193.25 10.4766 193.25 10.4918 193.25 10.507C193.25 10.5222 193.25 10.5373 193.25 10.5524C193.25 10.5676 193.25 10.5827 193.25 10.5978C193.25 10.6129 193.25 10.628 193.25 10.643C193.25 10.6581 193.25 10.6732 193.25 10.6882C193.25 10.7032 193.25 10.7182 193.25 10.7332C193.25 10.7482 193.25 10.7632 193.25 10.7782C193.25 10.7931 193.25 10.8081 193.25 10.823C193.25 10.8379 193.25 10.8528 193.25 10.8677C193.25 10.8826 193.25 10.8975 193.25 10.9123C193.25 10.9272 193.25 10.942 193.25 10.9568C193.25 10.9716 193.25 10.9864 193.25 11.0012C193.25 11.016 193.25 11.0307 193.25 11.0455C193.25 11.0602 193.25 11.0749 193.25 11.0897C193.25 11.1044 193.25 11.119 193.25 11.1337C193.25 11.1484 193.25 11.163 193.25 11.1777C193.25 11.1923 193.25 11.2069 193.25 11.2215C193.25 11.2361 193.25 11.2507 193.25 11.2652C193.25 11.2798 193.25 11.2943 193.25 11.3088C193.25 11.3234 193.25 11.3379 193.25 11.3523C193.25 11.3668 193.25 11.3813 193.25 11.3957C193.25 11.4102 193.25 11.4246 193.25 11.439C193.25 11.4534 193.25 11.4678 193.25 11.4822C193.25 11.4965 193.25 11.5109 193.25 11.5252C193.25 11.5395 193.25 11.5538 193.25 11.5681C193.25 11.5824 193.25 11.5967 193.25 11.6109C193.25 11.6252 193.25 11.6394 193.25 11.6536C193.25 11.6678 193.25 11.682 193.25 11.6962C193.25 11.7104 193.25 11.7245 193.25 11.7386C193.25 11.7528 193.25 11.7669 193.25 11.781C193.25 11.7951 193.25 11.8091 193.25 11.8232C193.25 11.8372 193.25 11.8513 193.25 11.8653C193.25 11.8793 193.25 11.8933 193.25 11.9073C193.25 11.9212 193.25 11.9352 193.25 11.9491C193.25 11.963 193.25 11.9769 193.25 11.9908C193.25 12.0047 193.25 12.0186 193.25 12.0324C193.25 12.0463 193.25 12.0601 193.25 12.0739C193.25 12.0877 193.25 12.1015 193.25 12.1153C193.25 12.129 193.25 12.1428 193.25 12.1565C193.25 12.1702 193.25 12.1839 193.25 12.1976C193.25 12.2113 193.25 12.225 193.25 12.2386C193.25 12.2522 193.25 12.2659 193.25 12.2795C193.25 12.2931 193.25 12.3066 193.25 12.3202C193.25 12.3337 193.25 12.3473 193.25 12.3608C193.25 12.3743 193.25 12.3878 193.25 12.4013C193.25 12.4147 193.25 12.4282 193.25 12.4416C193.25 12.455 193.25 12.4684 193.25 12.4818C193.25 12.4952 193.25 12.5086 193.25 12.5219C193.25 12.5352 193.25 12.5486 193.25 12.5619C193.25 12.5752 193.25 12.5884 193.25 12.6017C193.25 12.6149 193.25 12.6282 193.25 12.6414C193.25 12.6546 193.25 12.6678 193.25 12.6809C193.25 12.6941 193.25 12.7072 193.25 12.7204C193.25 12.7335 193.25 12.7466 193.25 12.7597C193.25 12.7727 193.25 12.7858 193.25 12.7988C193.25 12.8118 193.25 12.8249 193.25 12.8378C193.25 12.8508 193.25 12.8638 193.25 12.8767C193.25 12.8897 193.25 12.9026 193.25 12.9155C193.25 12.9284 193.25 12.9413 193.25 12.9541C193.25 12.967 193.25 12.9798 193.25 12.9926C193.25 13.0054 193.25 13.0182 193.25 13.0309C193.25 13.0437 193.25 13.0564 193.25 13.0691C193.25 13.0818 193.25 13.0945 193.25 13.1072C193.25 13.1199 193.25 13.1325 193.25 13.1451C193.25 13.1578 193.25 13.1704 193.25 13.1829C193.25 13.1955 193.25 13.208 193.25 13.2206C193.25 13.2331 193.25 13.2456 193.25 13.2581C193.25 13.2706 193.25 13.283 193.25 13.2954C193.25 13.3079 193.25 13.3203 193.25 13.3327C193.25 13.3451 193.25 13.3574 193.25 13.3698C193.25 13.3821 193.25 13.3944 193.25 13.4067C193.25 13.419 193.25 13.4312 193.25 13.4435C193.25 13.4557 193.25 13.4679 193.25 13.4801C193.25 13.4923 193.25 13.5045 193.25 13.5166C193.25 13.5288 193.25 13.5409 193.25 13.553C193.25 13.5651 193.25 13.5772 193.25 13.5892C193.25 13.6013 193.25 13.6133 193.25 13.6253C193.25 13.6373 193.25 13.6493 193.25 13.6612C193.25 13.6732 193.25 13.6851 193.25 13.697C193.25 13.7089 193.25 13.7208 193.25 13.7326C193.25 13.7445 193.25 13.7563 193.25 13.7681C193.25 13.7799 193.25 13.7917 193.25 13.8034C193.25 13.8152 193.25 13.8269 193.25 13.8386C193.25 13.8503 193.25 13.862 193.25 13.8736C193.25 13.8853 193.25 13.8969 193.25 13.9085C193.25 13.9201 193.25 13.9317 193.25 13.9432C193.25 13.9547 193.25 13.9663 193.25 13.9778C193.25 13.9893 193.25 14.0007 193.25 14.0122C193.25 14.0236 193.25 14.0351 193.25 14.0464C193.25 14.0578 193.25 14.0692 193.25 14.0806C193.25 14.0919 193.25 14.1032 193.25 14.1145C193.25 14.1258 193.25 14.1371 193.25 14.1483C193.25 14.1595 193.25 14.1708 193.25 14.1819C193.25 14.1931 193.25 14.2043 193.25 14.2154C193.25 14.2266 193.25 14.2377 193.25 14.2488C193.25 14.2598 193.25 14.2709 193.25 14.2819C193.25 14.293 193.25 14.304 193.25 14.3149C193.25 14.3259 193.25 14.3369 193.25 14.3478C193.25 14.3587 193.25 14.3696 193.25 14.3805C193.25 14.3914 193.25 14.4022 193.25 14.413C193.25 14.4238 193.25 14.4346 193.25 14.4454C193.25 14.4562 193.25 14.4669 193.25 14.4776C193.25 14.4883 193.25 14.499 193.25 14.5097C193.25 14.5203 193.25 14.5309 193.25 14.5415C193.25 14.5521 193.25 14.5627 193.25 14.5733C193.25 14.5838 193.25 14.5943 193.25 14.6048C193.25 14.6153 193.25 14.6258 193.25 14.6362C193.25 14.6467 193.25 14.6571 193.25 14.6675C193.25 14.6778 193.25 14.6882 193.25 14.6985C193.25 14.7089 193.25 14.7192 193.25 14.7294C193.25 14.7397 193.25 14.7499 193.25 14.7602C193.25 14.7704 193.25 14.7806 193.25 14.7907C193.25 14.8009 193.25 14.811 193.25 14.8211C193.25 14.8312 193.25 14.8413 193.25 14.8514C193.25 14.8614 193.25 14.8714 193.25 14.8814C193.25 14.8914 193.25 14.9014 193.25 14.9113C193.25 14.9213 193.25 14.9312 193.25 14.941C193.25 14.9509 193.25 14.9608 193.25 14.9706C193.25 14.9804 193.25 14.9902 193.25 15H194.75ZM194.75 -9.50001C194.75 -11.1105 195.208 -12.3974 196.093 -13.2822C196.976 -14.1655 198.387 -14.75 200.5 -14.75V-16.25C198.113 -16.25 196.274 -15.5845 195.032 -14.3428C193.792 -13.1026 193.25 -11.3895 193.25 -9.50001H194.75ZM200.5 -14.75C200.511 -14.75 200.522 -14.75 200.533 -14.75C200.544 -14.75 200.555 -14.75 200.566 -14.75C200.578 -14.75 200.589 -14.75 200.6 -14.75C200.611 -14.75 200.623 -14.75 200.634 -14.75C200.646 -14.75 200.657 -14.75 200.669 -14.75C200.68 -14.75 200.692 -14.75 200.703 -14.75C200.715 -14.75 200.727 -14.75 200.739 -14.75C200.75 -14.75 200.762 -14.75 200.774 -14.75C200.786 -14.75 200.798 -14.75 200.81 -14.75C200.822 -14.75 200.834 -14.75 200.846 -14.75C200.859 -14.75 200.871 -14.75 200.883 -14.75C200.895 -14.75 200.908 -14.75 200.92 -14.75C200.932 -14.75 200.945 -14.75 200.957 -14.75C200.97 -14.75 200.982 -14.75 200.995 -14.75C201.008 -14.75 201.02 -14.75 201.033 -14.75C201.046 -14.75 201.059 -14.75 201.071 -14.75C201.084 -14.75 201.097 -14.75 201.11 -14.75C201.123 -14.75 201.136 -14.75 201.149 -14.75C201.162 -14.75 201.175 -14.75 201.189 -14.75C201.202 -14.75 201.215 -14.75 201.228 -14.75C201.242 -14.75 201.255 -14.75 201.269 -14.75C201.282 -14.75 201.295 -14.75 201.309 -14.75C201.323 -14.75 201.336 -14.75 201.35 -14.75C201.364 -14.75 201.377 -14.75 201.391 -14.75C201.405 -14.75 201.419 -14.75 201.432 -14.75C201.446 -14.75 201.46 -14.75 201.474 -14.75C201.488 -14.75 201.502 -14.75 201.516 -14.75C201.531 -14.75 201.545 -14.75 201.559 -14.75C201.573 -14.75 201.587 -14.75 201.602 -14.75C201.616 -14.75 201.631 -14.75 201.645 -14.75C201.659 -14.75 201.674 -14.75 201.688 -14.75C201.703 -14.75 201.718 -14.75 201.732 -14.75C201.747 -14.75 201.762 -14.75 201.776 -14.75C201.791 -14.75 201.806 -14.75 201.821 -14.75C201.836 -14.75 201.851 -14.75 201.866 -14.75C201.881 -14.75 201.896 -14.75 201.911 -14.75C201.926 -14.75 201.941 -14.75 201.956 -14.75C201.972 -14.75 201.987 -14.75 202.002 -14.75C202.017 -14.75 202.033 -14.75 202.048 -14.75C202.064 -14.75 202.079 -14.75 202.095 -14.75C202.11 -14.75 202.126 -14.75 202.141 -14.75C202.157 -14.75 202.173 -14.75 202.189 -14.75C202.204 -14.75 202.22 -14.75 202.236 -14.75C202.252 -14.75 202.268 -14.75 202.284 -14.75C202.3 -14.75 202.316 -14.75 202.332 -14.75C202.348 -14.75 202.364 -14.75 202.38 -14.75C202.396 -14.75 202.412 -14.75 202.429 -14.75C202.445 -14.75 202.461 -14.75 202.478 -14.75C202.494 -14.75 202.51 -14.75 202.527 -14.75C202.543 -14.75 202.56 -14.75 202.576 -14.75C202.593 -14.75 202.61 -14.75 202.626 -14.75C202.643 -14.75 202.66 -14.75 202.676 -14.75C202.693 -14.75 202.71 -14.75 202.727 -14.75C202.744 -14.75 202.761 -14.75 202.778 -14.75C202.795 -14.75 202.812 -14.75 202.829 -14.75C202.846 -14.75 202.863 -14.75 202.88 -14.75C202.897 -14.75 202.915 -14.75 202.932 -14.75C202.949 -14.75 202.967 -14.75 202.984 -14.75C203.001 -14.75 203.019 -14.75 203.036 -14.75C203.054 -14.75 203.071 -14.75 203.089 -14.75C203.106 -14.75 203.124 -14.75 203.142 -14.75C203.159 -14.75 203.177 -14.75 203.195 -14.75C203.213 -14.75 203.231 -14.75 203.248 -14.75C203.266 -14.75 203.284 -14.75 203.302 -14.75C203.32 -14.75 203.338 -14.75 203.356 -14.75C203.374 -14.75 203.392 -14.75 203.411 -14.75C203.429 -14.75 203.447 -14.75 203.465 -14.75C203.483 -14.75 203.502 -14.75 203.52 -14.75C203.538 -14.75 203.557 -14.75 203.575 -14.75C203.594 -14.75 203.612 -14.75 203.631 -14.75C203.649 -14.75 203.668 -14.75 203.687 -14.75C203.705 -14.75 203.724 -14.75 203.743 -14.75C203.761 -14.75 203.78 -14.75 203.799 -14.75C203.818 -14.75 203.837 -14.75 203.856 -14.75C203.874 -14.75 203.893 -14.75 203.912 -14.75C203.931 -14.75 203.95 -14.75 203.97 -14.75C203.989 -14.75 204.008 -14.75 204.027 -14.75C204.046 -14.75 204.065 -14.75 204.085 -14.75C204.104 -14.75 204.123 -14.75 204.143 -14.75C204.162 -14.75 204.182 -14.75 204.201 -14.75C204.22 -14.75 204.24 -14.75 204.259 -14.75C204.279 -14.75 204.299 -14.75 204.318 -14.75C204.338 -14.75 204.358 -14.75 204.377 -14.75C204.397 -14.75 204.417 -14.75 204.437 -14.75C204.457 -14.75 204.476 -14.75 204.496 -14.75C204.516 -14.75 204.536 -14.75 204.556 -14.75C204.576 -14.75 204.596 -14.75 204.616 -14.75C204.636 -14.75 204.656 -14.75 204.677 -14.75C204.697 -14.75 204.717 -14.75 204.737 -14.75C204.758 -14.75 204.778 -14.75 204.798 -14.75C204.819 -14.75 204.839 -14.75 204.859 -14.75C204.88 -14.75 204.9 -14.75 204.921 -14.75C204.941 -14.75 204.962 -14.75 204.982 -14.75C205.003 -14.75 205.024 -14.75 205.044 -14.75C205.065 -14.75 205.086 -14.75 205.107 -14.75C205.127 -14.75 205.148 -14.75 205.169 -14.75C205.19 -14.75 205.211 -14.75 205.232 -14.75C205.253 -14.75 205.274 -14.75 205.295 -14.75C205.316 -14.75 205.337 -14.75 205.358 -14.75C205.379 -14.75 205.4 -14.75 205.421 -14.75C205.442 -14.75 205.464 -14.75 205.485 -14.75C205.506 -14.75 205.527 -14.75 205.549 -14.75C205.57 -14.75 205.591 -14.75 205.613 -14.75C205.634 -14.75 205.656 -14.75 205.677 -14.75C205.699 -14.75 205.72 -14.75 205.742 -14.75C205.764 -14.75 205.785 -14.75 205.807 -14.75C205.829 -14.75 205.85 -14.75 205.872 -14.75C205.894 -14.75 205.915 -14.75 205.937 -14.75C205.959 -14.75 205.981 -14.75 206.003 -14.75C206.025 -14.75 206.047 -14.75 206.069 -14.75C206.091 -14.75 206.113 -14.75 206.135 -14.75C206.157 -14.75 206.179 -14.75 206.201 -14.75C206.223 -14.75 206.245 -14.75 206.268 -14.75C206.29 -14.75 206.312 -14.75 206.334 -14.75C206.357 -14.75 206.379 -14.75 206.401 -14.75C206.424 -14.75 206.446 -14.75 206.469 -14.75C206.491 -14.75 206.513 -14.75 206.536 -14.75C206.558 -14.75 206.581 -14.75 206.604 -14.75C206.626 -14.75 206.649 -14.75 206.671 -14.75C206.694 -14.75 206.717 -14.75 206.74 -14.75C206.762 -14.75 206.785 -14.75 206.808 -14.75C206.831 -14.75 206.854 -14.75 206.876 -14.75C206.899 -14.75 206.922 -14.75 206.945 -14.75C206.968 -14.75 206.991 -14.75 207.014 -14.75C207.037 -14.75 207.06 -14.75 207.083 -14.75C207.106 -14.75 207.13 -14.75 207.153 -14.75C207.176 -14.75 207.199 -14.75 207.222 -14.75C207.246 -14.75 207.269 -14.75 207.292 -14.75C207.315 -14.75 207.339 -14.75 207.362 -14.75C207.386 -14.75 207.409 -14.75 207.432 -14.75C207.456 -14.75 207.479 -14.75 207.503 -14.75C207.526 -14.75 207.55 -14.75 207.574 -14.75C207.597 -14.75 207.621 -14.75 207.644 -14.75C207.668 -14.75 207.692 -14.75 207.716 -14.75C207.739 -14.75 207.763 -14.75 207.787 -14.75C207.811 -14.75 207.834 -14.75 207.858 -14.75C207.882 -14.75 207.906 -14.75 207.93 -14.75C207.954 -14.75 207.978 -14.75 208.002 -14.75C208.026 -14.75 208.05 -14.75 208.074 -14.75C208.098 -14.75 208.122 -14.75 208.146 -14.75C208.17 -14.75 208.194 -14.75 208.219 -14.75C208.243 -14.75 208.267 -14.75 208.291 -14.75C208.316 -14.75 208.34 -14.75 208.364 -14.75C208.389 -14.75 208.413 -14.75 208.437 -14.75C208.462 -14.75 208.486 -14.75 208.511 -14.75C208.535 -14.75 208.559 -14.75 208.584 -14.75C208.608 -14.75 208.633 -14.75 208.658 -14.75C208.682 -14.75 208.707 -14.75 208.731 -14.75C208.756 -14.75 208.781 -14.75 208.805 -14.75C208.83 -14.75 208.855 -14.75 208.88 -14.75C208.904 -14.75 208.929 -14.75 208.954 -14.75C208.979 -14.75 209.004 -14.75 209.028 -14.75C209.053 -14.75 209.078 -14.75 209.103 -14.75C209.128 -14.75 209.153 -14.75 209.178 -14.75C209.203 -14.75 209.228 -14.75 209.253 -14.75C209.278 -14.75 209.303 -14.75 209.328 -14.75C209.354 -14.75 209.379 -14.75 209.404 -14.75C209.429 -14.75 209.454 -14.75 209.479 -14.75C209.505 -14.75 209.53 -14.75 209.555 -14.75C209.581 -14.75 209.606 -14.75 209.631 -14.75C209.657 -14.75 209.682 -14.75 209.707 -14.75C209.733 -14.75 209.758 -14.75 209.784 -14.75C209.809 -14.75 209.835 -14.75 209.86 -14.75C209.886 -14.75 209.911 -14.75 209.937 -14.75C209.962 -14.75 209.988 -14.75 210.014 -14.75C210.039 -14.75 210.065 -14.75 210.091 -14.75C210.116 -14.75 210.142 -14.75 210.168 -14.75C210.193 -14.75 210.219 -14.75 210.245 -14.75C210.271 -14.75 210.297 -14.75 210.322 -14.75C210.348 -14.75 210.374 -14.75 210.4 -14.75C210.426 -14.75 210.452 -14.75 210.478 -14.75C210.504 -14.75 210.53 -14.75 210.556 -14.75C210.582 -14.75 210.608 -14.75 210.634 -14.75C210.66 -14.75 210.686 -14.75 210.712 -14.75C210.738 -14.75 210.764 -14.75 210.79 -14.75C210.817 -14.75 210.843 -14.75 210.869 -14.75C210.895 -14.75 210.921 -14.75 210.948 -14.75C210.974 -14.75 211 -14.75 211.027 -14.75C211.053 -14.75 211.079 -14.75 211.106 -14.75C211.132 -14.75 211.158 -14.75 211.185 -14.75C211.211 -14.75 211.238 -14.75 211.264 -14.75C211.29 -14.75 211.317 -14.75 211.343 -14.75C211.37 -14.75 211.396 -14.75 211.423 -14.75C211.45 -14.75 211.476 -14.75 211.503 -14.75C211.529 -14.75 211.556 -14.75 211.583 -14.75C211.609 -14.75 211.636 -14.75 211.663 -14.75C211.689 -14.75 211.716 -14.75 211.743 -14.75C211.769 -14.75 211.796 -14.75 211.823 -14.75C211.85 -14.75 211.877 -14.75 211.903 -14.75C211.93 -14.75 211.957 -14.75 211.984 -14.75C212.011 -14.75 212.038 -14.75 212.065 -14.75C212.092 -14.75 212.119 -14.75 212.146 -14.75C212.172 -14.75 212.199 -14.75 212.226 -14.75C212.253 -14.75 212.28 -14.75 212.308 -14.75C212.335 -14.75 212.362 -14.75 212.389 -14.75C212.416 -14.75 212.443 -14.75 212.47 -14.75C212.497 -14.75 212.524 -14.75 212.552 -14.75C212.579 -14.75 212.606 -14.75 212.633 -14.75C212.66 -14.75 212.688 -14.75 212.715 -14.75C212.742 -14.75 212.769 -14.75 212.797 -14.75C212.824 -14.75 212.851 -14.75 212.879 -14.75C212.906 -14.75 212.933 -14.75 212.961 -14.75C212.988 -14.75 213.016 -14.75 213.043 -14.75C213.07 -14.75 213.098 -14.75 213.125 -14.75C213.153 -14.75 213.18 -14.75 213.208 -14.75C213.235 -14.75 213.263 -14.75 213.29 -14.75C213.318 -14.75 213.345 -14.75 213.373 -14.75C213.4 -14.75 213.428 -14.75 213.456 -14.75C213.483 -14.75 213.511 -14.75 213.539 -14.75C213.566 -14.75 213.594 -14.75 213.622 -14.75C213.649 -14.75 213.677 -14.75 213.705 -14.75C213.732 -14.75 213.76 -14.75 213.788 -14.75C213.816 -14.75 213.843 -14.75 213.871 -14.75C213.899 -14.75 213.927 -14.75 213.955 -14.75C213.982 -14.75 214.01 -14.75 214.038 -14.75C214.066 -14.75 214.094 -14.75 214.122 -14.75C214.15 -14.75 214.178 -14.75 214.206 -14.75C214.233 -14.75 214.261 -14.75 214.289 -14.75C214.317 -14.75 214.345 -14.75 214.373 -14.75C214.401 -14.75 214.429 -14.75 214.457 -14.75C214.485 -14.75 214.513 -14.75 214.541 -14.75C214.57 -14.75 214.598 -14.75 214.626 -14.75C214.654 -14.75 214.682 -14.75 214.71 -14.75C214.738 -14.75 214.766 -14.75 214.794 -14.75C214.823 -14.75 214.851 -14.75 214.879 -14.75C214.907 -14.75 214.935 -14.75 214.964 -14.75C214.992 -14.75 215.02 -14.75 215.048 -14.75C215.076 -14.75 215.105 -14.75 215.133 -14.75C215.161 -14.75 215.19 -14.75 215.218 -14.75C215.246 -14.75 215.275 -14.75 215.303 -14.75C215.331 -14.75 215.36 -14.75 215.388 -14.75C215.416 -14.75 215.445 -14.75 215.473 -14.75C215.501 -14.75 215.53 -14.75 215.558 -14.75C215.587 -14.75 215.615 -14.75 215.643 -14.75C215.672 -14.75 215.7 -14.75 215.729 -14.75C215.757 -14.75 215.786 -14.75 215.814 -14.75C215.843 -14.75 215.871 -14.75 215.9 -14.75C215.928 -14.75 215.957 -14.75 215.985 -14.75C216.014 -14.75 216.042 -14.75 216.071 -14.75C216.1 -14.75 216.128 -14.75 216.157 -14.75C216.185 -14.75 216.214 -14.75 216.243 -14.75C216.271 -14.75 216.3 -14.75 216.328 -14.75C216.357 -14.75 216.386 -14.75 216.414 -14.75C216.443 -14.75 216.472 -14.75 216.5 -14.75C216.529 -14.75 216.558 -14.75 216.586 -14.75C216.615 -14.75 216.644 -14.75 216.673 -14.75C216.701 -14.75 216.73 -14.75 216.759 -14.75C216.788 -14.75 216.816 -14.75 216.845 -14.75C216.874 -14.75 216.903 -14.75 216.931 -14.75C216.96 -14.75 216.989 -14.75 217.018 -14.75C217.047 -14.75 217.076 -14.75 217.104 -14.75C217.133 -14.75 217.162 -14.75 217.191 -14.75C217.22 -14.75 217.249 -14.75 217.277 -14.75C217.306 -14.75 217.335 -14.75 217.364 -14.75C217.393 -14.75 217.422 -14.75 217.451 -14.75C217.48 -14.75 217.509 -14.75 217.537 -14.75C217.566 -14.75 217.595 -14.75 217.624 -14.75C217.653 -14.75 217.682 -14.75 217.711 -14.75C217.74 -14.75 217.769 -14.75 217.798 -14.75C217.827 -14.75 217.856 -14.75 217.885 -14.75C217.914 -14.75 217.943 -14.75 217.972 -14.75C218.001 -14.75 218.03 -14.75 218.059 -14.75C218.088 -14.75 218.117 -14.75 218.146 -14.75C218.175 -14.75 218.204 -14.75 218.233 -14.75C218.262 -14.75 218.291 -14.75 218.32 -14.75C218.349 -14.75 218.379 -14.75 218.408 -14.75C218.437 -14.75 218.466 -14.75 218.495 -14.75C218.524 -14.75 218.553 -14.75 218.582 -14.75C218.611 -14.75 218.64 -14.75 218.669 -14.75C218.699 -14.75 218.728 -14.75 218.757 -14.75C218.786 -14.75 218.815 -14.75 218.844 -14.75C218.873 -14.75 218.902 -14.75 218.932 -14.75C218.961 -14.75 218.99 -14.75 219.019 -14.75C219.048 -14.75 219.077 -14.75 219.107 -14.75C219.136 -14.75 219.165 -14.75 219.194 -14.75C219.223 -14.75 219.252 -14.75 219.282 -14.75C219.311 -14.75 219.34 -14.75 219.369 -14.75C219.398 -14.75 219.428 -14.75 219.457 -14.75C219.486 -14.75 219.515 -14.75 219.544 -14.75C219.574 -14.75 219.603 -14.75 219.632 -14.75C219.661 -14.75 219.691 -14.75 219.72 -14.75C219.749 -14.75 219.778 -14.75 219.807 -14.75C219.837 -14.75 219.866 -14.75 219.895 -14.75C219.924 -14.75 219.954 -14.75 219.983 -14.75C220.012 -14.75 220.041 -14.75 220.071 -14.75C220.1 -14.75 220.129 -14.75 220.158 -14.75C220.188 -14.75 220.217 -14.75 220.246 -14.75C220.276 -14.75 220.305 -14.75 220.334 -14.75C220.363 -14.75 220.393 -14.75 220.422 -14.75C220.451 -14.75 220.48 -14.75 220.51 -14.75C220.539 -14.75 220.568 -14.75 220.598 -14.75C220.627 -14.75 220.656 -14.75 220.685 -14.75C220.715 -14.75 220.744 -14.75 220.773 -14.75C220.803 -14.75 220.832 -14.75 220.861 -14.75C220.89 -14.75 220.92 -14.75 220.949 -14.75C220.978 -14.75 221.008 -14.75 221.037 -14.75C221.066 -14.75 221.095 -14.75 221.125 -14.75C221.154 -14.75 221.183 -14.75 221.213 -14.75C221.242 -14.75 221.271 -14.75 221.3 -14.75C221.33 -14.75 221.359 -14.75 221.388 -14.75C221.418 -14.75 221.447 -14.75 221.476 -14.75C221.505 -14.75 221.535 -14.75 221.564 -14.75C221.593 -14.75 221.623 -14.75 221.652 -14.75C221.681 -14.75 221.71 -14.75 221.74 -14.75C221.769 -14.75 221.798 -14.75 221.828 -14.75C221.857 -14.75 221.886 -14.75 221.915 -14.75C221.945 -14.75 221.974 -14.75 222.003 -14.75C222.033 -14.75 222.062 -14.75 222.091 -14.75C222.12 -14.75 222.15 -14.75 222.179 -14.75C222.208 -14.75 222.237 -14.75 222.267 -14.75C222.296 -14.75 222.325 -14.75 222.354 -14.75C222.384 -14.75 222.413 -14.75 222.442 -14.75C222.471 -14.75 222.501 -14.75 222.53 -14.75C222.559 -14.75 222.588 -14.75 222.618 -14.75C222.647 -14.75 222.676 -14.75 222.705 -14.75C222.735 -14.75 222.764 -14.75 222.793 -14.75C222.822 -14.75 222.851 -14.75 222.881 -14.75C222.91 -14.75 222.939 -14.75 222.968 -14.75C222.998 -14.75 223.027 -14.75 223.056 -14.75C223.085 -14.75 223.114 -14.75 223.144 -14.75C223.173 -14.75 223.202 -14.75 223.231 -14.75C223.26 -14.75 223.289 -14.75 223.319 -14.75C223.348 -14.75 223.377 -14.75 223.406 -14.75C223.435 -14.75 223.464 -14.75 223.494 -14.75C223.523 -14.75 223.552 -14.75 223.581 -14.75C223.61 -14.75 223.639 -14.75 223.668 -14.75C223.698 -14.75 223.727 -14.75 223.756 -14.75C223.785 -14.75 223.814 -14.75 223.843 -14.75C223.872 -14.75 223.901 -14.75 223.93 -14.75C223.96 -14.75 223.989 -14.75 224.018 -14.75C224.047 -14.75 224.076 -14.75 224.105 -14.75C224.134 -14.75 224.163 -14.75 224.192 -14.75C224.221 -14.75 224.25 -14.75 224.279 -14.75C224.308 -14.75 224.337 -14.75 224.366 -14.75C224.395 -14.75 224.424 -14.75 224.453 -14.75C224.482 -14.75 224.511 -14.75 224.54 -14.75C224.569 -14.75 224.598 -14.75 224.627 -14.75C224.656 -14.75 224.685 -14.75 224.714 -14.75C224.743 -14.75 224.772 -14.75 224.801 -14.75C224.83 -14.75 224.859 -14.75 224.888 -14.75C224.917 -14.75 224.946 -14.75 224.975 -14.75C225.004 -14.75 225.033 -14.75 225.062 -14.75C225.09 -14.75 225.119 -14.75 225.148 -14.75C225.177 -14.75 225.206 -14.75 225.235 -14.75C225.264 -14.75 225.292 -14.75 225.321 -14.75C225.35 -14.75 225.379 -14.75 225.408 -14.75C225.437 -14.75 225.465 -14.75 225.494 -14.75C225.523 -14.75 225.552 -14.75 225.581 -14.75C225.609 -14.75 225.638 -14.75 225.667 -14.75C225.696 -14.75 225.724 -14.75 225.753 -14.75C225.782 -14.75 225.811 -14.75 225.839 -14.75C225.868 -14.75 225.897 -14.75 225.925 -14.75C225.954 -14.75 225.983 -14.75 226.011 -14.75C226.04 -14.75 226.069 -14.75 226.097 -14.75C226.126 -14.75 226.155 -14.75 226.183 -14.75C226.212 -14.75 226.241 -14.75 226.269 -14.75C226.298 -14.75 226.326 -14.75 226.355 -14.75C226.384 -14.75 226.412 -14.75 226.441 -14.75C226.469 -14.75 226.498 -14.75 226.526 -14.75C226.555 -14.75 226.583 -14.75 226.612 -14.75C226.64 -14.75 226.669 -14.75 226.697 -14.75C226.726 -14.75 226.754 -14.75 226.783 -14.75C226.811 -14.75 226.84 -14.75 226.868 -14.75C226.896 -14.75 226.925 -14.75 226.953 -14.75C226.982 -14.75 227.01 -14.75 227.038 -14.75C227.067 -14.75 227.095 -14.75 227.123 -14.75C227.152 -14.75 227.18 -14.75 227.208 -14.75C227.237 -14.75 227.265 -14.75 227.293 -14.75C227.322 -14.75 227.35 -14.75 227.378 -14.75C227.406 -14.75 227.435 -14.75 227.463 -14.75C227.491 -14.75 227.519 -14.75 227.547 -14.75C227.576 -14.75 227.604 -14.75 227.632 -14.75C227.66 -14.75 227.688 -14.75 227.716 -14.75C227.745 -14.75 227.773 -14.75 227.801 -14.75C227.829 -14.75 227.857 -14.75 227.885 -14.75C227.913 -14.75 227.941 -14.75 227.969 -14.75C227.997 -14.75 228.025 -14.75 228.053 -14.75C228.081 -14.75 228.109 -14.75 228.137 -14.75C228.165 -14.75 228.193 -14.75 228.221 -14.75C228.249 -14.75 228.277 -14.75 228.305 -14.75C228.333 -14.75 228.361 -14.75 228.389 -14.75C228.417 -14.75 228.444 -14.75 228.472 -14.75C228.5 -14.75 228.528 -14.75 228.556 -14.75C228.584 -14.75 228.611 -14.75 228.639 -14.75C228.667 -14.75 228.695 -14.75 228.722 -14.75C228.75 -14.75 228.778 -14.75 228.805 -14.75C228.833 -14.75 228.861 -14.75 228.889 -14.75C228.916 -14.75 228.944 -14.75 228.971 -14.75C228.999 -14.75 229.027 -14.75 229.054 -14.75C229.082 -14.75 229.109 -14.75 229.137 -14.75C229.165 -14.75 229.192 -14.75 229.22 -14.75C229.247 -14.75 229.275 -14.75 229.302 -14.75C229.33 -14.75 229.357 -14.75 229.384 -14.75C229.412 -14.75 229.439 -14.75 229.467 -14.75C229.494 -14.75 229.521 -14.75 229.549 -14.75C229.576 -14.75 229.603 -14.75 229.631 -14.75C229.658 -14.75 229.685 -14.75 229.713 -14.75C229.74 -14.75 229.767 -14.75 229.794 -14.75C229.822 -14.75 229.849 -14.75 229.876 -14.75C229.903 -14.75 229.93 -14.75 229.958 -14.75C229.985 -14.75 230.012 -14.75 230.039 -14.75C230.066 -14.75 230.093 -14.75 230.12 -14.75C230.147 -14.75 230.174 -14.75 230.201 -14.75C230.228 -14.75 230.255 -14.75 230.282 -14.75C230.309 -14.75 230.336 -14.75 230.363 -14.75C230.39 -14.75 230.417 -14.75 230.444 -14.75C230.471 -14.75 230.498 -14.75 230.525 -14.75C230.551 -14.75 230.578 -14.75 230.605 -14.75C230.632 -14.75 230.659 -14.75 230.685 -14.75C230.712 -14.75 230.739 -14.75 230.766 -14.75C230.792 -14.75 230.819 -14.75 230.846 -14.75C230.872 -14.75 230.899 -14.75 230.926 -14.75C230.952 -14.75 230.979 -14.75 231.005 -14.75C231.032 -14.75 231.059 -14.75 231.085 -14.75C231.112 -14.75 231.138 -14.75 231.165 -14.75C231.191 -14.75 231.217 -14.75 231.244 -14.75C231.27 -14.75 231.297 -14.75 231.323 -14.75C231.35 -14.75 231.376 -14.75 231.402 -14.75C231.429 -14.75 231.455 -14.75 231.481 -14.75C231.507 -14.75 231.534 -14.75 231.56 -14.75C231.586 -14.75 231.612 -14.75 231.638 -14.75C231.665 -14.75 231.691 -14.75 231.717 -14.75C231.743 -14.75 231.769 -14.75 231.795 -14.75C231.821 -14.75 231.847 -14.75 231.873 -14.75C231.899 -14.75 231.925 -14.75 231.951 -14.75C231.977 -14.75 232.003 -14.75 232.029 -14.75C232.055 -14.75 232.081 -14.75 232.107 -14.75C232.133 -14.75 232.159 -14.75 232.184 -14.75C232.21 -14.75 232.236 -14.75 232.262 -14.75C232.288 -14.75 232.313 -14.75 232.339 -14.75C232.365 -14.75 232.39 -14.75 232.416 -14.75C232.442 -14.75 232.467 -14.75 232.493 -14.75C232.518 -14.75 232.544 -14.75 232.57 -14.75C232.595 -14.75 232.621 -14.75 232.646 -14.75C232.672 -14.75 232.697 -14.75 232.722 -14.75C232.748 -14.75 232.773 -14.75 232.799 -14.75C232.824 -14.75 232.849 -14.75 232.875 -14.75C232.9 -14.75 232.925 -14.75 232.951 -14.75C232.976 -14.75 233.001 -14.75 233.026 -14.75C233.051 -14.75 233.077 -14.75 233.102 -14.75C233.127 -14.75 233.152 -14.75 233.177 -14.75C233.202 -14.75 233.227 -14.75 233.252 -14.75C233.277 -14.75 233.302 -14.75 233.327 -14.75C233.352 -14.75 233.377 -14.75 233.402 -14.75C233.427 -14.75 233.452 -14.75 233.477 -14.75C233.501 -14.75 233.526 -14.75 233.551 -14.75C233.576 -14.75 233.601 -14.75 233.625 -14.75C233.65 -14.75 233.675 -14.75 233.699 -14.75C233.724 -14.75 233.749 -14.75 233.773 -14.75C233.798 -14.75 233.822 -14.75 233.847 -14.75C233.872 -14.75 233.896 -14.75 233.921 -14.75C233.945 -14.75 233.969 -14.75 233.994 -14.75C234.018 -14.75 234.043 -14.75 234.067 -14.75C234.091 -14.75 234.116 -14.75 234.14 -14.75C234.164 -14.75 234.188 -14.75 234.213 -14.75C234.237 -14.75 234.261 -14.75 234.285 -14.75C234.309 -14.75 234.333 -14.75 234.358 -14.75C234.382 -14.75 234.406 -14.75 234.43 -14.75C234.454 -14.75 234.478 -14.75 234.502 -14.75C234.526 -14.75 234.55 -14.75 234.573 -14.75C234.597 -14.75 234.621 -14.75 234.645 -14.75C234.669 -14.75 234.693 -14.75 234.716 -14.75C234.74 -14.75 234.764 -14.75 234.788 -14.75C234.811 -14.75 234.835 -14.75 234.858 -14.75C234.882 -14.75 234.906 -14.75 234.929 -14.75C234.953 -14.75 234.976 -14.75 235 -14.75C235.023 -14.75 235.047 -14.75 235.07 -14.75C235.094 -14.75 235.117 -14.75 235.14 -14.75C235.164 -14.75 235.187 -14.75 235.21 -14.75C235.233 -14.75 235.257 -14.75 235.28 -14.75C235.303 -14.75 235.326 -14.75 235.349 -14.75C235.372 -14.75 235.396 -14.75 235.419 -14.75C235.442 -14.75 235.465 -14.75 235.488 -14.75C235.511 -14.75 235.534 -14.75 235.557 -14.75C235.579 -14.75 235.602 -14.75 235.625 -14.75C235.648 -14.75 235.671 -14.75 235.694 -14.75C235.716 -14.75 235.739 -14.75 235.762 -14.75C235.784 -14.75 235.807 -14.75 235.83 -14.75C235.852 -14.75 235.875 -14.75 235.897 -14.75C235.92 -14.75 235.942 -14.75 235.965 -14.75C235.987 -14.75 236.01 -14.75 236.032 -14.75C236.055 -14.75 236.077 -14.75 236.099 -14.75C236.122 -14.75 236.144 -14.75 236.166 -14.75C236.188 -14.75 236.211 -14.75 236.233 -14.75C236.255 -14.75 236.277 -14.75 236.299 -14.75C236.321 -14.75 236.343 -14.75 236.365 -14.75C236.387 -14.75 236.409 -14.75 236.431 -14.75C236.453 -14.75 236.475 -14.75 236.497 -14.75C236.519 -14.75 236.541 -14.75 236.562 -14.75C236.584 -14.75 236.606 -14.75 236.628 -14.75C236.649 -14.75 236.671 -14.75 236.693 -14.75C236.714 -14.75 236.736 -14.75 236.757 -14.75C236.779 -14.75 236.8 -14.75 236.822 -14.75C236.843 -14.75 236.865 -14.75 236.886 -14.75C236.907 -14.75 236.929 -14.75 236.95 -14.75C236.971 -14.75 236.993 -14.75 237.014 -14.75C237.035 -14.75 237.056 -14.75 237.077 -14.75C237.098 -14.75 237.12 -14.75 237.141 -14.75C237.162 -14.75 237.183 -14.75 237.204 -14.75C237.225 -14.75 237.246 -14.75 237.266 -14.75C237.287 -14.75 237.308 -14.75 237.329 -14.75C237.35 -14.75 237.371 -14.75 237.391 -14.75C237.412 -14.75 237.433 -14.75 237.453 -14.75C237.474 -14.75 237.495 -14.75 237.515 -14.75C237.536 -14.75 237.556 -14.75 237.577 -14.75C237.597 -14.75 237.617 -14.75 237.638 -14.75C237.658 -14.75 237.679 -14.75 237.699 -14.75C237.719 -14.75 237.739 -14.75 237.76 -14.75C237.78 -14.75 237.8 -14.75 237.82 -14.75C237.84 -14.75 237.86 -14.75 237.88 -14.75C237.9 -14.75 237.92 -14.75 237.94 -14.75C237.96 -14.75 237.98 -14.75 238 -14.75V-16.25C237.98 -16.25 237.96 -16.25 237.94 -16.25C237.92 -16.25 237.9 -16.25 237.88 -16.25C237.86 -16.25 237.84 -16.25 237.82 -16.25C237.8 -16.25 237.78 -16.25 237.76 -16.25C237.739 -16.25 237.719 -16.25 237.699 -16.25C237.679 -16.25 237.658 -16.25 237.638 -16.25C237.617 -16.25 237.597 -16.25 237.577 -16.25C237.556 -16.25 237.536 -16.25 237.515 -16.25C237.495 -16.25 237.474 -16.25 237.453 -16.25C237.433 -16.25 237.412 -16.25 237.391 -16.25C237.371 -16.25 237.35 -16.25 237.329 -16.25C237.308 -16.25 237.287 -16.25 237.266 -16.25C237.246 -16.25 237.225 -16.25 237.204 -16.25C237.183 -16.25 237.162 -16.25 237.141 -16.25C237.12 -16.25 237.098 -16.25 237.077 -16.25C237.056 -16.25 237.035 -16.25 237.014 -16.25C236.993 -16.25 236.971 -16.25 236.95 -16.25C236.929 -16.25 236.907 -16.25 236.886 -16.25C236.865 -16.25 236.843 -16.25 236.822 -16.25C236.8 -16.25 236.779 -16.25 236.757 -16.25C236.736 -16.25 236.714 -16.25 236.693 -16.25C236.671 -16.25 236.649 -16.25 236.628 -16.25C236.606 -16.25 236.584 -16.25 236.562 -16.25C236.541 -16.25 236.519 -16.25 236.497 -16.25C236.475 -16.25 236.453 -16.25 236.431 -16.25C236.409 -16.25 236.387 -16.25 236.365 -16.25C236.343 -16.25 236.321 -16.25 236.299 -16.25C236.277 -16.25 236.255 -16.25 236.233 -16.25C236.211 -16.25 236.188 -16.25 236.166 -16.25C236.144 -16.25 236.122 -16.25 236.099 -16.25C236.077 -16.25 236.055 -16.25 236.032 -16.25C236.01 -16.25 235.987 -16.25 235.965 -16.25C235.942 -16.25 235.92 -16.25 235.897 -16.25C235.875 -16.25 235.852 -16.25 235.83 -16.25C235.807 -16.25 235.784 -16.25 235.762 -16.25C235.739 -16.25 235.716 -16.25 235.694 -16.25C235.671 -16.25 235.648 -16.25 235.625 -16.25C235.602 -16.25 235.579 -16.25 235.557 -16.25C235.534 -16.25 235.511 -16.25 235.488 -16.25C235.465 -16.25 235.442 -16.25 235.419 -16.25C235.396 -16.25 235.372 -16.25 235.349 -16.25C235.326 -16.25 235.303 -16.25 235.28 -16.25C235.257 -16.25 235.233 -16.25 235.21 -16.25C235.187 -16.25 235.164 -16.25 235.14 -16.25C235.117 -16.25 235.094 -16.25 235.07 -16.25C235.047 -16.25 235.023 -16.25 235 -16.25C234.976 -16.25 234.953 -16.25 234.929 -16.25C234.906 -16.25 234.882 -16.25 234.858 -16.25C234.835 -16.25 234.811 -16.25 234.788 -16.25C234.764 -16.25 234.74 -16.25 234.716 -16.25C234.693 -16.25 234.669 -16.25 234.645 -16.25C234.621 -16.25 234.597 -16.25 234.573 -16.25C234.55 -16.25 234.526 -16.25 234.502 -16.25C234.478 -16.25 234.454 -16.25 234.43 -16.25C234.406 -16.25 234.382 -16.25 234.358 -16.25C234.333 -16.25 234.309 -16.25 234.285 -16.25C234.261 -16.25 234.237 -16.25 234.213 -16.25C234.188 -16.25 234.164 -16.25 234.14 -16.25C234.116 -16.25 234.091 -16.25 234.067 -16.25C234.043 -16.25 234.018 -16.25 233.994 -16.25C233.969 -16.25 233.945 -16.25 233.921 -16.25C233.896 -16.25 233.872 -16.25 233.847 -16.25C233.822 -16.25 233.798 -16.25 233.773 -16.25C233.749 -16.25 233.724 -16.25 233.699 -16.25C233.675 -16.25 233.65 -16.25 233.625 -16.25C233.601 -16.25 233.576 -16.25 233.551 -16.25C233.526 -16.25 233.501 -16.25 233.477 -16.25C233.452 -16.25 233.427 -16.25 233.402 -16.25C233.377 -16.25 233.352 -16.25 233.327 -16.25C233.302 -16.25 233.277 -16.25 233.252 -16.25C233.227 -16.25 233.202 -16.25 233.177 -16.25C233.152 -16.25 233.127 -16.25 233.102 -16.25C233.077 -16.25 233.051 -16.25 233.026 -16.25C233.001 -16.25 232.976 -16.25 232.951 -16.25C232.925 -16.25 232.9 -16.25 232.875 -16.25C232.849 -16.25 232.824 -16.25 232.799 -16.25C232.773 -16.25 232.748 -16.25 232.722 -16.25C232.697 -16.25 232.672 -16.25 232.646 -16.25C232.621 -16.25 232.595 -16.25 232.57 -16.25C232.544 -16.25 232.518 -16.25 232.493 -16.25C232.467 -16.25 232.442 -16.25 232.416 -16.25C232.39 -16.25 232.365 -16.25 232.339 -16.25C232.313 -16.25 232.288 -16.25 232.262 -16.25C232.236 -16.25 232.21 -16.25 232.184 -16.25C232.159 -16.25 232.133 -16.25 232.107 -16.25C232.081 -16.25 232.055 -16.25 232.029 -16.25C232.003 -16.25 231.977 -16.25 231.951 -16.25C231.925 -16.25 231.899 -16.25 231.873 -16.25C231.847 -16.25 231.821 -16.25 231.795 -16.25C231.769 -16.25 231.743 -16.25 231.717 -16.25C231.691 -16.25 231.665 -16.25 231.638 -16.25C231.612 -16.25 231.586 -16.25 231.56 -16.25C231.534 -16.25 231.507 -16.25 231.481 -16.25C231.455 -16.25 231.429 -16.25 231.402 -16.25C231.376 -16.25 231.35 -16.25 231.323 -16.25C231.297 -16.25 231.27 -16.25 231.244 -16.25C231.217 -16.25 231.191 -16.25 231.165 -16.25C231.138 -16.25 231.112 -16.25 231.085 -16.25C231.059 -16.25 231.032 -16.25 231.005 -16.25C230.979 -16.25 230.952 -16.25 230.926 -16.25C230.899 -16.25 230.872 -16.25 230.846 -16.25C230.819 -16.25 230.792 -16.25 230.766 -16.25C230.739 -16.25 230.712 -16.25 230.685 -16.25C230.659 -16.25 230.632 -16.25 230.605 -16.25C230.578 -16.25 230.551 -16.25 230.525 -16.25C230.498 -16.25 230.471 -16.25 230.444 -16.25C230.417 -16.25 230.39 -16.25 230.363 -16.25C230.336 -16.25 230.309 -16.25 230.282 -16.25C230.255 -16.25 230.228 -16.25 230.201 -16.25C230.174 -16.25 230.147 -16.25 230.12 -16.25C230.093 -16.25 230.066 -16.25 230.039 -16.25C230.012 -16.25 229.985 -16.25 229.958 -16.25C229.93 -16.25 229.903 -16.25 229.876 -16.25C229.849 -16.25 229.822 -16.25 229.794 -16.25C229.767 -16.25 229.74 -16.25 229.713 -16.25C229.685 -16.25 229.658 -16.25 229.631 -16.25C229.603 -16.25 229.576 -16.25 229.549 -16.25C229.521 -16.25 229.494 -16.25 229.467 -16.25C229.439 -16.25 229.412 -16.25 229.384 -16.25C229.357 -16.25 229.33 -16.25 229.302 -16.25C229.275 -16.25 229.247 -16.25 229.22 -16.25C229.192 -16.25 229.165 -16.25 229.137 -16.25C229.109 -16.25 229.082 -16.25 229.054 -16.25C229.027 -16.25 228.999 -16.25 228.971 -16.25C228.944 -16.25 228.916 -16.25 228.889 -16.25C228.861 -16.25 228.833 -16.25 228.805 -16.25C228.778 -16.25 228.75 -16.25 228.722 -16.25C228.695 -16.25 228.667 -16.25 228.639 -16.25C228.611 -16.25 228.584 -16.25 228.556 -16.25C228.528 -16.25 228.5 -16.25 228.472 -16.25C228.444 -16.25 228.417 -16.25 228.389 -16.25C228.361 -16.25 228.333 -16.25 228.305 -16.25C228.277 -16.25 228.249 -16.25 228.221 -16.25C228.193 -16.25 228.165 -16.25 228.137 -16.25C228.109 -16.25 228.081 -16.25 228.053 -16.25C228.025 -16.25 227.997 -16.25 227.969 -16.25C227.941 -16.25 227.913 -16.25 227.885 -16.25C227.857 -16.25 227.829 -16.25 227.801 -16.25C227.773 -16.25 227.745 -16.25 227.716 -16.25C227.688 -16.25 227.66 -16.25 227.632 -16.25C227.604 -16.25 227.576 -16.25 227.547 -16.25C227.519 -16.25 227.491 -16.25 227.463 -16.25C227.435 -16.25 227.406 -16.25 227.378 -16.25C227.35 -16.25 227.322 -16.25 227.293 -16.25C227.265 -16.25 227.237 -16.25 227.208 -16.25C227.18 -16.25 227.152 -16.25 227.123 -16.25C227.095 -16.25 227.067 -16.25 227.038 -16.25C227.01 -16.25 226.982 -16.25 226.953 -16.25C226.925 -16.25 226.896 -16.25 226.868 -16.25C226.84 -16.25 226.811 -16.25 226.783 -16.25C226.754 -16.25 226.726 -16.25 226.697 -16.25C226.669 -16.25 226.64 -16.25 226.612 -16.25C226.583 -16.25 226.555 -16.25 226.526 -16.25C226.498 -16.25 226.469 -16.25 226.441 -16.25C226.412 -16.25 226.384 -16.25 226.355 -16.25C226.326 -16.25 226.298 -16.25 226.269 -16.25C226.241 -16.25 226.212 -16.25 226.183 -16.25C226.155 -16.25 226.126 -16.25 226.097 -16.25C226.069 -16.25 226.04 -16.25 226.011 -16.25C225.983 -16.25 225.954 -16.25 225.925 -16.25C225.897 -16.25 225.868 -16.25 225.839 -16.25C225.811 -16.25 225.782 -16.25 225.753 -16.25C225.724 -16.25 225.696 -16.25 225.667 -16.25C225.638 -16.25 225.609 -16.25 225.581 -16.25C225.552 -16.25 225.523 -16.25 225.494 -16.25C225.465 -16.25 225.437 -16.25 225.408 -16.25C225.379 -16.25 225.35 -16.25 225.321 -16.25C225.292 -16.25 225.264 -16.25 225.235 -16.25C225.206 -16.25 225.177 -16.25 225.148 -16.25C225.119 -16.25 225.09 -16.25 225.062 -16.25C225.033 -16.25 225.004 -16.25 224.975 -16.25C224.946 -16.25 224.917 -16.25 224.888 -16.25C224.859 -16.25 224.83 -16.25 224.801 -16.25C224.772 -16.25 224.743 -16.25 224.714 -16.25C224.685 -16.25 224.656 -16.25 224.627 -16.25C224.598 -16.25 224.569 -16.25 224.54 -16.25C224.511 -16.25 224.482 -16.25 224.453 -16.25C224.424 -16.25 224.395 -16.25 224.366 -16.25C224.337 -16.25 224.308 -16.25 224.279 -16.25C224.25 -16.25 224.221 -16.25 224.192 -16.25C224.163 -16.25 224.134 -16.25 224.105 -16.25C224.076 -16.25 224.047 -16.25 224.018 -16.25C223.989 -16.25 223.96 -16.25 223.93 -16.25C223.901 -16.25 223.872 -16.25 223.843 -16.25C223.814 -16.25 223.785 -16.25 223.756 -16.25C223.727 -16.25 223.698 -16.25 223.668 -16.25C223.639 -16.25 223.61 -16.25 223.581 -16.25C223.552 -16.25 223.523 -16.25 223.494 -16.25C223.464 -16.25 223.435 -16.25 223.406 -16.25C223.377 -16.25 223.348 -16.25 223.319 -16.25C223.289 -16.25 223.26 -16.25 223.231 -16.25C223.202 -16.25 223.173 -16.25 223.144 -16.25C223.114 -16.25 223.085 -16.25 223.056 -16.25C223.027 -16.25 222.998 -16.25 222.968 -16.25C222.939 -16.25 222.91 -16.25 222.881 -16.25C222.851 -16.25 222.822 -16.25 222.793 -16.25C222.764 -16.25 222.735 -16.25 222.705 -16.25C222.676 -16.25 222.647 -16.25 222.618 -16.25C222.588 -16.25 222.559 -16.25 222.53 -16.25C222.501 -16.25 222.471 -16.25 222.442 -16.25C222.413 -16.25 222.384 -16.25 222.354 -16.25C222.325 -16.25 222.296 -16.25 222.267 -16.25C222.237 -16.25 222.208 -16.25 222.179 -16.25C222.15 -16.25 222.12 -16.25 222.091 -16.25C222.062 -16.25 222.033 -16.25 222.003 -16.25C221.974 -16.25 221.945 -16.25 221.915 -16.25C221.886 -16.25 221.857 -16.25 221.828 -16.25C221.798 -16.25 221.769 -16.25 221.74 -16.25C221.71 -16.25 221.681 -16.25 221.652 -16.25C221.623 -16.25 221.593 -16.25 221.564 -16.25C221.535 -16.25 221.505 -16.25 221.476 -16.25C221.447 -16.25 221.418 -16.25 221.388 -16.25C221.359 -16.25 221.33 -16.25 221.3 -16.25C221.271 -16.25 221.242 -16.25 221.213 -16.25C221.183 -16.25 221.154 -16.25 221.125 -16.25C221.095 -16.25 221.066 -16.25 221.037 -16.25C221.008 -16.25 220.978 -16.25 220.949 -16.25C220.92 -16.25 220.89 -16.25 220.861 -16.25C220.832 -16.25 220.803 -16.25 220.773 -16.25C220.744 -16.25 220.715 -16.25 220.685 -16.25C220.656 -16.25 220.627 -16.25 220.598 -16.25C220.568 -16.25 220.539 -16.25 220.51 -16.25C220.48 -16.25 220.451 -16.25 220.422 -16.25C220.393 -16.25 220.363 -16.25 220.334 -16.25C220.305 -16.25 220.276 -16.25 220.246 -16.25C220.217 -16.25 220.188 -16.25 220.158 -16.25C220.129 -16.25 220.1 -16.25 220.071 -16.25C220.041 -16.25 220.012 -16.25 219.983 -16.25C219.954 -16.25 219.924 -16.25 219.895 -16.25C219.866 -16.25 219.837 -16.25 219.807 -16.25C219.778 -16.25 219.749 -16.25 219.72 -16.25C219.691 -16.25 219.661 -16.25 219.632 -16.25C219.603 -16.25 219.574 -16.25 219.544 -16.25C219.515 -16.25 219.486 -16.25 219.457 -16.25C219.428 -16.25 219.398 -16.25 219.369 -16.25C219.34 -16.25 219.311 -16.25 219.282 -16.25C219.252 -16.25 219.223 -16.25 219.194 -16.25C219.165 -16.25 219.136 -16.25 219.107 -16.25C219.077 -16.25 219.048 -16.25 219.019 -16.25C218.99 -16.25 218.961 -16.25 218.932 -16.25C218.902 -16.25 218.873 -16.25 218.844 -16.25C218.815 -16.25 218.786 -16.25 218.757 -16.25C218.728 -16.25 218.699 -16.25 218.669 -16.25C218.64 -16.25 218.611 -16.25 218.582 -16.25C218.553 -16.25 218.524 -16.25 218.495 -16.25C218.466 -16.25 218.437 -16.25 218.408 -16.25C218.379 -16.25 218.349 -16.25 218.32 -16.25C218.291 -16.25 218.262 -16.25 218.233 -16.25C218.204 -16.25 218.175 -16.25 218.146 -16.25C218.117 -16.25 218.088 -16.25 218.059 -16.25C218.03 -16.25 218.001 -16.25 217.972 -16.25C217.943 -16.25 217.914 -16.25 217.885 -16.25C217.856 -16.25 217.827 -16.25 217.798 -16.25C217.769 -16.25 217.74 -16.25 217.711 -16.25C217.682 -16.25 217.653 -16.25 217.624 -16.25C217.595 -16.25 217.566 -16.25 217.537 -16.25C217.509 -16.25 217.48 -16.25 217.451 -16.25C217.422 -16.25 217.393 -16.25 217.364 -16.25C217.335 -16.25 217.306 -16.25 217.277 -16.25C217.249 -16.25 217.22 -16.25 217.191 -16.25C217.162 -16.25 217.133 -16.25 217.104 -16.25C217.076 -16.25 217.047 -16.25 217.018 -16.25C216.989 -16.25 216.96 -16.25 216.931 -16.25C216.903 -16.25 216.874 -16.25 216.845 -16.25C216.816 -16.25 216.788 -16.25 216.759 -16.25C216.73 -16.25 216.701 -16.25 216.673 -16.25C216.644 -16.25 216.615 -16.25 216.586 -16.25C216.558 -16.25 216.529 -16.25 216.5 -16.25C216.472 -16.25 216.443 -16.25 216.414 -16.25C216.386 -16.25 216.357 -16.25 216.328 -16.25C216.3 -16.25 216.271 -16.25 216.243 -16.25C216.214 -16.25 216.185 -16.25 216.157 -16.25C216.128 -16.25 216.1 -16.25 216.071 -16.25C216.042 -16.25 216.014 -16.25 215.985 -16.25C215.957 -16.25 215.928 -16.25 215.9 -16.25C215.871 -16.25 215.843 -16.25 215.814 -16.25C215.786 -16.25 215.757 -16.25 215.729 -16.25C215.7 -16.25 215.672 -16.25 215.643 -16.25C215.615 -16.25 215.587 -16.25 215.558 -16.25C215.53 -16.25 215.501 -16.25 215.473 -16.25C215.445 -16.25 215.416 -16.25 215.388 -16.25C215.36 -16.25 215.331 -16.25 215.303 -16.25C215.275 -16.25 215.246 -16.25 215.218 -16.25C215.19 -16.25 215.161 -16.25 215.133 -16.25C215.105 -16.25 215.076 -16.25 215.048 -16.25C215.02 -16.25 214.992 -16.25 214.964 -16.25C214.935 -16.25 214.907 -16.25 214.879 -16.25C214.851 -16.25 214.823 -16.25 214.794 -16.25C214.766 -16.25 214.738 -16.25 214.71 -16.25C214.682 -16.25 214.654 -16.25 214.626 -16.25C214.598 -16.25 214.57 -16.25 214.541 -16.25C214.513 -16.25 214.485 -16.25 214.457 -16.25C214.429 -16.25 214.401 -16.25 214.373 -16.25C214.345 -16.25 214.317 -16.25 214.289 -16.25C214.261 -16.25 214.233 -16.25 214.206 -16.25C214.178 -16.25 214.15 -16.25 214.122 -16.25C214.094 -16.25 214.066 -16.25 214.038 -16.25C214.01 -16.25 213.982 -16.25 213.955 -16.25C213.927 -16.25 213.899 -16.25 213.871 -16.25C213.843 -16.25 213.816 -16.25 213.788 -16.25C213.76 -16.25 213.732 -16.25 213.705 -16.25C213.677 -16.25 213.649 -16.25 213.622 -16.25C213.594 -16.25 213.566 -16.25 213.539 -16.25C213.511 -16.25 213.483 -16.25 213.456 -16.25C213.428 -16.25 213.4 -16.25 213.373 -16.25C213.345 -16.25 213.318 -16.25 213.29 -16.25C213.263 -16.25 213.235 -16.25 213.208 -16.25C213.18 -16.25 213.153 -16.25 213.125 -16.25C213.098 -16.25 213.07 -16.25 213.043 -16.25C213.016 -16.25 212.988 -16.25 212.961 -16.25C212.933 -16.25 212.906 -16.25 212.879 -16.25C212.851 -16.25 212.824 -16.25 212.797 -16.25C212.769 -16.25 212.742 -16.25 212.715 -16.25C212.688 -16.25 212.66 -16.25 212.633 -16.25C212.606 -16.25 212.579 -16.25 212.552 -16.25C212.524 -16.25 212.497 -16.25 212.47 -16.25C212.443 -16.25 212.416 -16.25 212.389 -16.25C212.362 -16.25 212.335 -16.25 212.308 -16.25C212.28 -16.25 212.253 -16.25 212.226 -16.25C212.199 -16.25 212.172 -16.25 212.146 -16.25C212.119 -16.25 212.092 -16.25 212.065 -16.25C212.038 -16.25 212.011 -16.25 211.984 -16.25C211.957 -16.25 211.93 -16.25 211.903 -16.25C211.877 -16.25 211.85 -16.25 211.823 -16.25C211.796 -16.25 211.769 -16.25 211.743 -16.25C211.716 -16.25 211.689 -16.25 211.663 -16.25C211.636 -16.25 211.609 -16.25 211.583 -16.25C211.556 -16.25 211.529 -16.25 211.503 -16.25C211.476 -16.25 211.45 -16.25 211.423 -16.25C211.396 -16.25 211.37 -16.25 211.343 -16.25C211.317 -16.25 211.29 -16.25 211.264 -16.25C211.238 -16.25 211.211 -16.25 211.185 -16.25C211.158 -16.25 211.132 -16.25 211.106 -16.25C211.079 -16.25 211.053 -16.25 211.027 -16.25C211 -16.25 210.974 -16.25 210.948 -16.25C210.921 -16.25 210.895 -16.25 210.869 -16.25C210.843 -16.25 210.817 -16.25 210.79 -16.25C210.764 -16.25 210.738 -16.25 210.712 -16.25C210.686 -16.25 210.66 -16.25 210.634 -16.25C210.608 -16.25 210.582 -16.25 210.556 -16.25C210.53 -16.25 210.504 -16.25 210.478 -16.25C210.452 -16.25 210.426 -16.25 210.4 -16.25C210.374 -16.25 210.348 -16.25 210.322 -16.25C210.297 -16.25 210.271 -16.25 210.245 -16.25C210.219 -16.25 210.193 -16.25 210.168 -16.25C210.142 -16.25 210.116 -16.25 210.091 -16.25C210.065 -16.25 210.039 -16.25 210.014 -16.25C209.988 -16.25 209.962 -16.25 209.937 -16.25C209.911 -16.25 209.886 -16.25 209.86 -16.25C209.835 -16.25 209.809 -16.25 209.784 -16.25C209.758 -16.25 209.733 -16.25 209.707 -16.25C209.682 -16.25 209.657 -16.25 209.631 -16.25C209.606 -16.25 209.581 -16.25 209.555 -16.25C209.53 -16.25 209.505 -16.25 209.479 -16.25C209.454 -16.25 209.429 -16.25 209.404 -16.25C209.379 -16.25 209.354 -16.25 209.328 -16.25C209.303 -16.25 209.278 -16.25 209.253 -16.25C209.228 -16.25 209.203 -16.25 209.178 -16.25C209.153 -16.25 209.128 -16.25 209.103 -16.25C209.078 -16.25 209.053 -16.25 209.028 -16.25C209.004 -16.25 208.979 -16.25 208.954 -16.25C208.929 -16.25 208.904 -16.25 208.88 -16.25C208.855 -16.25 208.83 -16.25 208.805 -16.25C208.781 -16.25 208.756 -16.25 208.731 -16.25C208.707 -16.25 208.682 -16.25 208.658 -16.25C208.633 -16.25 208.608 -16.25 208.584 -16.25C208.559 -16.25 208.535 -16.25 208.511 -16.25C208.486 -16.25 208.462 -16.25 208.437 -16.25C208.413 -16.25 208.389 -16.25 208.364 -16.25C208.34 -16.25 208.316 -16.25 208.291 -16.25C208.267 -16.25 208.243 -16.25 208.219 -16.25C208.194 -16.25 208.17 -16.25 208.146 -16.25C208.122 -16.25 208.098 -16.25 208.074 -16.25C208.05 -16.25 208.026 -16.25 208.002 -16.25C207.978 -16.25 207.954 -16.25 207.93 -16.25C207.906 -16.25 207.882 -16.25 207.858 -16.25C207.834 -16.25 207.811 -16.25 207.787 -16.25C207.763 -16.25 207.739 -16.25 207.716 -16.25C207.692 -16.25 207.668 -16.25 207.644 -16.25C207.621 -16.25 207.597 -16.25 207.574 -16.25C207.55 -16.25 207.526 -16.25 207.503 -16.25C207.479 -16.25 207.456 -16.25 207.432 -16.25C207.409 -16.25 207.386 -16.25 207.362 -16.25C207.339 -16.25 207.315 -16.25 207.292 -16.25C207.269 -16.25 207.246 -16.25 207.222 -16.25C207.199 -16.25 207.176 -16.25 207.153 -16.25C207.13 -16.25 207.106 -16.25 207.083 -16.25C207.06 -16.25 207.037 -16.25 207.014 -16.25C206.991 -16.25 206.968 -16.25 206.945 -16.25C206.922 -16.25 206.899 -16.25 206.876 -16.25C206.854 -16.25 206.831 -16.25 206.808 -16.25C206.785 -16.25 206.762 -16.25 206.74 -16.25C206.717 -16.25 206.694 -16.25 206.671 -16.25C206.649 -16.25 206.626 -16.25 206.604 -16.25C206.581 -16.25 206.558 -16.25 206.536 -16.25C206.513 -16.25 206.491 -16.25 206.469 -16.25C206.446 -16.25 206.424 -16.25 206.401 -16.25C206.379 -16.25 206.357 -16.25 206.334 -16.25C206.312 -16.25 206.29 -16.25 206.268 -16.25C206.245 -16.25 206.223 -16.25 206.201 -16.25C206.179 -16.25 206.157 -16.25 206.135 -16.25C206.113 -16.25 206.091 -16.25 206.069 -16.25C206.047 -16.25 206.025 -16.25 206.003 -16.25C205.981 -16.25 205.959 -16.25 205.937 -16.25C205.915 -16.25 205.894 -16.25 205.872 -16.25C205.85 -16.25 205.829 -16.25 205.807 -16.25C205.785 -16.25 205.764 -16.25 205.742 -16.25C205.72 -16.25 205.699 -16.25 205.677 -16.25C205.656 -16.25 205.634 -16.25 205.613 -16.25C205.591 -16.25 205.57 -16.25 205.549 -16.25C205.527 -16.25 205.506 -16.25 205.485 -16.25C205.464 -16.25 205.442 -16.25 205.421 -16.25C205.4 -16.25 205.379 -16.25 205.358 -16.25C205.337 -16.25 205.316 -16.25 205.295 -16.25C205.274 -16.25 205.253 -16.25 205.232 -16.25C205.211 -16.25 205.19 -16.25 205.169 -16.25C205.148 -16.25 205.127 -16.25 205.107 -16.25C205.086 -16.25 205.065 -16.25 205.044 -16.25C205.024 -16.25 205.003 -16.25 204.982 -16.25C204.962 -16.25 204.941 -16.25 204.921 -16.25C204.9 -16.25 204.88 -16.25 204.859 -16.25C204.839 -16.25 204.819 -16.25 204.798 -16.25C204.778 -16.25 204.758 -16.25 204.737 -16.25C204.717 -16.25 204.697 -16.25 204.677 -16.25C204.656 -16.25 204.636 -16.25 204.616 -16.25C204.596 -16.25 204.576 -16.25 204.556 -16.25C204.536 -16.25 204.516 -16.25 204.496 -16.25C204.476 -16.25 204.457 -16.25 204.437 -16.25C204.417 -16.25 204.397 -16.25 204.377 -16.25C204.358 -16.25 204.338 -16.25 204.318 -16.25C204.299 -16.25 204.279 -16.25 204.259 -16.25C204.24 -16.25 204.22 -16.25 204.201 -16.25C204.182 -16.25 204.162 -16.25 204.143 -16.25C204.123 -16.25 204.104 -16.25 204.085 -16.25C204.065 -16.25 204.046 -16.25 204.027 -16.25C204.008 -16.25 203.989 -16.25 203.97 -16.25C203.95 -16.25 203.931 -16.25 203.912 -16.25C203.893 -16.25 203.874 -16.25 203.856 -16.25C203.837 -16.25 203.818 -16.25 203.799 -16.25C203.78 -16.25 203.761 -16.25 203.743 -16.25C203.724 -16.25 203.705 -16.25 203.687 -16.25C203.668 -16.25 203.649 -16.25 203.631 -16.25C203.612 -16.25 203.594 -16.25 203.575 -16.25C203.557 -16.25 203.538 -16.25 203.52 -16.25C203.502 -16.25 203.483 -16.25 203.465 -16.25C203.447 -16.25 203.429 -16.25 203.411 -16.25C203.392 -16.25 203.374 -16.25 203.356 -16.25C203.338 -16.25 203.32 -16.25 203.302 -16.25C203.284 -16.25 203.266 -16.25 203.248 -16.25C203.231 -16.25 203.213 -16.25 203.195 -16.25C203.177 -16.25 203.159 -16.25 203.142 -16.25C203.124 -16.25 203.106 -16.25 203.089 -16.25C203.071 -16.25 203.054 -16.25 203.036 -16.25C203.019 -16.25 203.001 -16.25 202.984 -16.25C202.967 -16.25 202.949 -16.25 202.932 -16.25C202.915 -16.25 202.897 -16.25 202.88 -16.25C202.863 -16.25 202.846 -16.25 202.829 -16.25C202.812 -16.25 202.795 -16.25 202.778 -16.25C202.761 -16.25 202.744 -16.25 202.727 -16.25C202.71 -16.25 202.693 -16.25 202.676 -16.25C202.66 -16.25 202.643 -16.25 202.626 -16.25C202.61 -16.25 202.593 -16.25 202.576 -16.25C202.56 -16.25 202.543 -16.25 202.527 -16.25C202.51 -16.25 202.494 -16.25 202.478 -16.25C202.461 -16.25 202.445 -16.25 202.429 -16.25C202.412 -16.25 202.396 -16.25 202.38 -16.25C202.364 -16.25 202.348 -16.25 202.332 -16.25C202.316 -16.25 202.3 -16.25 202.284 -16.25C202.268 -16.25 202.252 -16.25 202.236 -16.25C202.22 -16.25 202.204 -16.25 202.189 -16.25C202.173 -16.25 202.157 -16.25 202.141 -16.25C202.126 -16.25 202.11 -16.25 202.095 -16.25C202.079 -16.25 202.064 -16.25 202.048 -16.25C202.033 -16.25 202.017 -16.25 202.002 -16.25C201.987 -16.25 201.972 -16.25 201.956 -16.25C201.941 -16.25 201.926 -16.25 201.911 -16.25C201.896 -16.25 201.881 -16.25 201.866 -16.25C201.851 -16.25 201.836 -16.25 201.821 -16.25C201.806 -16.25 201.791 -16.25 201.776 -16.25C201.762 -16.25 201.747 -16.25 201.732 -16.25C201.718 -16.25 201.703 -16.25 201.688 -16.25C201.674 -16.25 201.659 -16.25 201.645 -16.25C201.631 -16.25 201.616 -16.25 201.602 -16.25C201.587 -16.25 201.573 -16.25 201.559 -16.25C201.545 -16.25 201.531 -16.25 201.516 -16.25C201.502 -16.25 201.488 -16.25 201.474 -16.25C201.46 -16.25 201.446 -16.25 201.432 -16.25C201.419 -16.25 201.405 -16.25 201.391 -16.25C201.377 -16.25 201.364 -16.25 201.35 -16.25C201.336 -16.25 201.323 -16.25 201.309 -16.25C201.295 -16.25 201.282 -16.25 201.269 -16.25C201.255 -16.25 201.242 -16.25 201.228 -16.25C201.215 -16.25 201.202 -16.25 201.189 -16.25C201.175 -16.25 201.162 -16.25 201.149 -16.25C201.136 -16.25 201.123 -16.25 201.11 -16.25C201.097 -16.25 201.084 -16.25 201.071 -16.25C201.059 -16.25 201.046 -16.25 201.033 -16.25C201.02 -16.25 201.008 -16.25 200.995 -16.25C200.982 -16.25 200.97 -16.25 200.957 -16.25C200.945 -16.25 200.932 -16.25 200.92 -16.25C200.908 -16.25 200.895 -16.25 200.883 -16.25C200.871 -16.25 200.859 -16.25 200.846 -16.25C200.834 -16.25 200.822 -16.25 200.81 -16.25C200.798 -16.25 200.786 -16.25 200.774 -16.25C200.762 -16.25 200.75 -16.25 200.739 -16.25C200.727 -16.25 200.715 -16.25 200.703 -16.25C200.692 -16.25 200.68 -16.25 200.669 -16.25C200.657 -16.25 200.646 -16.25 200.634 -16.25C200.623 -16.25 200.611 -16.25 200.6 -16.25C200.589 -16.25 200.578 -16.25 200.566 -16.25C200.555 -16.25 200.544 -16.25 200.533 -16.25C200.522 -16.25 200.511 -16.25 200.5 -16.25V-14.75Z\"\n          fill=\"url(#paint2_linear_38_7016)\"\n        />\n        <path\n          d=\"M164 82C164 79.7909 165.791 78 168 78C170.209 78 172 79.7909 172 82C172 84.2091 170.209 86 168 86C165.791 86 164 84.2091 164 82ZM238.53 118.97C238.823 119.263 238.823 119.737 238.53 120.03L233.757 124.803C233.464 125.096 232.99 125.096 232.697 124.803C232.404 124.51 232.404 124.036 232.697 123.743L236.939 119.5L232.697 115.257C232.404 114.964 232.404 114.49 232.697 114.197C232.99 113.904 233.464 113.904 233.757 114.197L238.53 118.97ZM168 81.25C168.006 81.25 168.013 81.25 168.019 81.25C168.026 81.25 168.033 81.25 168.039 81.25C168.046 81.25 168.052 81.25 168.059 81.25C168.065 81.25 168.072 81.25 168.079 81.25C168.085 81.25 168.092 81.25 168.099 81.25C168.105 81.25 168.112 81.25 168.119 81.25C168.125 81.25 168.132 81.25 168.139 81.25C168.146 81.25 168.152 81.25 168.159 81.25C168.166 81.25 168.173 81.25 168.18 81.25C168.186 81.25 168.193 81.25 168.2 81.25C168.207 81.25 168.214 81.25 168.221 81.25C168.228 81.25 168.235 81.25 168.242 81.25C168.249 81.25 168.256 81.25 168.263 81.25C168.27 81.25 168.277 81.25 168.284 81.25C168.291 81.25 168.298 81.25 168.305 81.25C168.312 81.25 168.319 81.25 168.326 81.25C168.333 81.25 168.34 81.25 168.347 81.25C168.355 81.25 168.362 81.25 168.369 81.25C168.376 81.25 168.383 81.25 168.391 81.25C168.398 81.25 168.405 81.25 168.412 81.25C168.42 81.25 168.427 81.25 168.434 81.25C168.442 81.25 168.449 81.25 168.456 81.25C168.464 81.25 168.471 81.25 168.478 81.25C168.486 81.25 168.493 81.25 168.501 81.25C168.508 81.25 168.515 81.25 168.523 81.25C168.53 81.25 168.538 81.25 168.545 81.25C168.553 81.25 168.56 81.25 168.568 81.25C168.575 81.25 168.583 81.25 168.591 81.25C168.598 81.25 168.606 81.25 168.613 81.25C168.621 81.25 168.629 81.25 168.636 81.25C168.644 81.25 168.652 81.25 168.659 81.25C168.667 81.25 168.675 81.25 168.683 81.25C168.69 81.25 168.698 81.25 168.706 81.25C168.714 81.25 168.721 81.25 168.729 81.25C168.737 81.25 168.745 81.25 168.753 81.25C168.761 81.25 168.768 81.25 168.776 81.25C168.784 81.25 168.792 81.25 168.8 81.25C168.808 81.25 168.816 81.25 168.824 81.25C168.832 81.25 168.84 81.25 168.848 81.25C168.856 81.25 168.864 81.25 168.872 81.25C168.88 81.25 168.888 81.25 168.896 81.25C168.904 81.25 168.912 81.25 168.92 81.25C168.928 81.25 168.937 81.25 168.945 81.25C168.953 81.25 168.961 81.25 168.969 81.25C168.977 81.25 168.986 81.25 168.994 81.25C169.002 81.25 169.01 81.25 169.019 81.25C169.027 81.25 169.035 81.25 169.043 81.25C169.052 81.25 169.06 81.25 169.068 81.25C169.077 81.25 169.085 81.25 169.093 81.25C169.102 81.25 169.11 81.25 169.119 81.25C169.127 81.25 169.135 81.25 169.144 81.25C169.152 81.25 169.161 81.25 169.169 81.25C169.178 81.25 169.186 81.25 169.195 81.25C169.203 81.25 169.212 81.25 169.22 81.25C169.229 81.25 169.238 81.25 169.246 81.25C169.255 81.25 169.263 81.25 169.272 81.25C169.281 81.25 169.289 81.25 169.298 81.25C169.307 81.25 169.315 81.25 169.324 81.25C169.333 81.25 169.341 81.25 169.35 81.25C169.359 81.25 169.368 81.25 169.376 81.25C169.385 81.25 169.394 81.25 169.403 81.25C169.412 81.25 169.42 81.25 169.429 81.25C169.438 81.25 169.447 81.25 169.456 81.25C169.465 81.25 169.474 81.25 169.483 81.25C169.492 81.25 169.5 81.25 169.509 81.25C169.518 81.25 169.527 81.25 169.536 81.25C169.545 81.25 169.554 81.25 169.563 81.25C169.572 81.25 169.581 81.25 169.59 81.25C169.6 81.25 169.609 81.25 169.618 81.25C169.627 81.25 169.636 81.25 169.645 81.25C169.654 81.25 169.663 81.25 169.672 81.25C169.682 81.25 169.691 81.25 169.7 81.25C169.709 81.25 169.718 81.25 169.728 81.25C169.737 81.25 169.746 81.25 169.755 81.25C169.765 81.25 169.774 81.25 169.783 81.25C169.793 81.25 169.802 81.25 169.811 81.25C169.821 81.25 169.83 81.25 169.839 81.25C169.849 81.25 169.858 81.25 169.867 81.25C169.877 81.25 169.886 81.25 169.896 81.25C169.905 81.25 169.915 81.25 169.924 81.25C169.934 81.25 169.943 81.25 169.953 81.25C169.962 81.25 169.972 81.25 169.981 81.25C169.991 81.25 170 81.25 170.01 81.25C170.019 81.25 170.029 81.25 170.039 81.25C170.048 81.25 170.058 81.25 170.068 81.25C170.077 81.25 170.087 81.25 170.097 81.25C170.106 81.25 170.116 81.25 170.126 81.25C170.135 81.25 170.145 81.25 170.155 81.25C170.165 81.25 170.174 81.25 170.184 81.25C170.194 81.25 170.204 81.25 170.213 81.25C170.223 81.25 170.233 81.25 170.243 81.25C170.253 81.25 170.263 81.25 170.273 81.25C170.282 81.25 170.292 81.25 170.302 81.25C170.312 81.25 170.322 81.25 170.332 81.25C170.342 81.25 170.352 81.25 170.362 81.25C170.372 81.25 170.382 81.25 170.392 81.25C170.402 81.25 170.412 81.25 170.422 81.25C170.432 81.25 170.442 81.25 170.452 81.25C170.462 81.25 170.472 81.25 170.482 81.25C170.493 81.25 170.503 81.25 170.513 81.25C170.523 81.25 170.533 81.25 170.543 81.25C170.553 81.25 170.564 81.25 170.574 81.25C170.584 81.25 170.594 81.25 170.605 81.25C170.615 81.25 170.625 81.25 170.635 81.25C170.646 81.25 170.656 81.25 170.666 81.25C170.676 81.25 170.687 81.25 170.697 81.25C170.707 81.25 170.718 81.25 170.728 81.25C170.739 81.25 170.749 81.25 170.759 81.25C170.77 81.25 170.78 81.25 170.791 81.25C170.801 81.25 170.811 81.25 170.822 81.25C170.832 81.25 170.843 81.25 170.853 81.25C170.864 81.25 170.874 81.25 170.885 81.25C170.895 81.25 170.906 81.25 170.916 81.25C170.927 81.25 170.938 81.25 170.948 81.25C170.959 81.25 170.969 81.25 170.98 81.25C170.991 81.25 171.001 81.25 171.012 81.25C171.023 81.25 171.033 81.25 171.044 81.25C171.055 81.25 171.065 81.25 171.076 81.25C171.087 81.25 171.097 81.25 171.108 81.25C171.119 81.25 171.13 81.25 171.14 81.25C171.151 81.25 171.162 81.25 171.173 81.25C171.184 81.25 171.194 81.25 171.205 81.25C171.216 81.25 171.227 81.25 171.238 81.25C171.249 81.25 171.26 81.25 171.27 81.25C171.281 81.25 171.292 81.25 171.303 81.25C171.314 81.25 171.325 81.25 171.336 81.25C171.347 81.25 171.358 81.25 171.369 81.25C171.38 81.25 171.391 81.25 171.402 81.25C171.413 81.25 171.424 81.25 171.435 81.25C171.446 81.25 171.457 81.25 171.468 81.25C171.479 81.25 171.49 81.25 171.502 81.25C171.513 81.25 171.524 81.25 171.535 81.25C171.546 81.25 171.557 81.25 171.568 81.25C171.58 81.25 171.591 81.25 171.602 81.25C171.613 81.25 171.624 81.25 171.636 81.25C171.647 81.25 171.658 81.25 171.669 81.25C171.681 81.25 171.692 81.25 171.703 81.25C171.714 81.25 171.726 81.25 171.737 81.25C171.748 81.25 171.76 81.25 171.771 81.25C171.782 81.25 171.794 81.25 171.805 81.25C171.816 81.25 171.828 81.25 171.839 81.25C171.851 81.25 171.862 81.25 171.873 81.25C171.885 81.25 171.896 81.25 171.908 81.25C171.919 81.25 171.931 81.25 171.942 81.25C171.954 81.25 171.965 81.25 171.977 81.25C171.988 81.25 172 81.25 172.011 81.25C172.023 81.25 172.034 81.25 172.046 81.25C172.058 81.25 172.069 81.25 172.081 81.25C172.092 81.25 172.104 81.25 172.116 81.25C172.127 81.25 172.139 81.25 172.151 81.25C172.162 81.25 172.174 81.25 172.186 81.25C172.197 81.25 172.209 81.25 172.221 81.25C172.232 81.25 172.244 81.25 172.256 81.25C172.268 81.25 172.279 81.25 172.291 81.25C172.303 81.25 172.315 81.25 172.326 81.25C172.338 81.25 172.35 81.25 172.362 81.25C172.374 81.25 172.386 81.25 172.397 81.25C172.409 81.25 172.421 81.25 172.433 81.25C172.445 81.25 172.457 81.25 172.469 81.25C172.481 81.25 172.493 81.25 172.505 81.25C172.516 81.25 172.528 81.25 172.54 81.25C172.552 81.25 172.564 81.25 172.576 81.25C172.588 81.25 172.6 81.25 172.612 81.25C172.624 81.25 172.636 81.25 172.648 81.25C172.66 81.25 172.673 81.25 172.685 81.25C172.697 81.25 172.709 81.25 172.721 81.25C172.733 81.25 172.745 81.25 172.757 81.25C172.769 81.25 172.781 81.25 172.794 81.25C172.806 81.25 172.818 81.25 172.83 81.25C172.842 81.25 172.854 81.25 172.867 81.25C172.879 81.25 172.891 81.25 172.903 81.25C172.916 81.25 172.928 81.25 172.94 81.25C172.952 81.25 172.965 81.25 172.977 81.25C172.989 81.25 173.002 81.25 173.014 81.25C173.026 81.25 173.038 81.25 173.051 81.25C173.063 81.25 173.075 81.25 173.088 81.25C173.1 81.25 173.113 81.25 173.125 81.25C173.137 81.25 173.15 81.25 173.162 81.25C173.175 81.25 173.187 81.25 173.199 81.25C173.212 81.25 173.224 81.25 173.237 81.25C173.249 81.25 173.262 81.25 173.274 81.25C173.287 81.25 173.299 81.25 173.312 81.25C173.324 81.25 173.337 81.25 173.349 81.25C173.362 81.25 173.374 81.25 173.387 81.25C173.4 81.25 173.412 81.25 173.425 81.25C173.437 81.25 173.45 81.25 173.463 81.25C173.475 81.25 173.488 81.25 173.501 81.25C173.513 81.25 173.526 81.25 173.539 81.25C173.551 81.25 173.564 81.25 173.577 81.25C173.589 81.25 173.602 81.25 173.615 81.25C173.627 81.25 173.64 81.25 173.653 81.25C173.666 81.25 173.678 81.25 173.691 81.25C173.704 81.25 173.717 81.25 173.729 81.25C173.742 81.25 173.755 81.25 173.768 81.25C173.781 81.25 173.794 81.25 173.806 81.25C173.819 81.25 173.832 81.25 173.845 81.25C173.858 81.25 173.871 81.25 173.884 81.25C173.897 81.25 173.909 81.25 173.922 81.25C173.935 81.25 173.948 81.25 173.961 81.25C173.974 81.25 173.987 81.25 174 81.25C174.013 81.25 174.026 81.25 174.039 81.25C174.052 81.25 174.065 81.25 174.078 81.25C174.091 81.25 174.104 81.25 174.117 81.25C174.13 81.25 174.143 81.25 174.156 81.25C174.169 81.25 174.182 81.25 174.195 81.25C174.208 81.25 174.222 81.25 174.235 81.25C174.248 81.25 174.261 81.25 174.274 81.25C174.287 81.25 174.3 81.25 174.313 81.25C174.327 81.25 174.34 81.25 174.353 81.25C174.366 81.25 174.379 81.25 174.392 81.25C174.406 81.25 174.419 81.25 174.432 81.25C174.445 81.25 174.459 81.25 174.472 81.25C174.485 81.25 174.498 81.25 174.512 81.25C174.525 81.25 174.538 81.25 174.551 81.25C174.565 81.25 174.578 81.25 174.591 81.25C174.605 81.25 174.618 81.25 174.631 81.25C174.645 81.25 174.658 81.25 174.671 81.25C174.685 81.25 174.698 81.25 174.711 81.25C174.725 81.25 174.738 81.25 174.752 81.25C174.765 81.25 174.778 81.25 174.792 81.25C174.805 81.25 174.819 81.25 174.832 81.25C174.846 81.25 174.859 81.25 174.873 81.25C174.886 81.25 174.9 81.25 174.913 81.25C174.926 81.25 174.94 81.25 174.954 81.25C174.967 81.25 174.981 81.25 174.994 81.25C175.008 81.25 175.021 81.25 175.035 81.25C175.048 81.25 175.062 81.25 175.075 81.25C175.089 81.25 175.103 81.25 175.116 81.25C175.13 81.25 175.143 81.25 175.157 81.25C175.171 81.25 175.184 81.25 175.198 81.25C175.212 81.25 175.225 81.25 175.239 81.25C175.253 81.25 175.266 81.25 175.28 81.25C175.294 81.25 175.307 81.25 175.321 81.25C175.335 81.25 175.348 81.25 175.362 81.25C175.376 81.25 175.39 81.25 175.403 81.25C175.417 81.25 175.431 81.25 175.445 81.25C175.458 81.25 175.472 81.25 175.486 81.25C175.5 81.25 175.514 81.25 175.527 81.25C175.541 81.25 175.555 81.25 175.569 81.25C175.583 81.25 175.597 81.25 175.61 81.25C175.624 81.25 175.638 81.25 175.652 81.25C175.666 81.25 175.68 81.25 175.694 81.25C175.708 81.25 175.722 81.25 175.735 81.25C175.749 81.25 175.763 81.25 175.777 81.25C175.791 81.25 175.805 81.25 175.819 81.25C175.833 81.25 175.847 81.25 175.861 81.25C175.875 81.25 175.889 81.25 175.903 81.25C175.917 81.25 175.931 81.25 175.945 81.25C175.959 81.25 175.973 81.25 175.987 81.25C176.001 81.25 176.015 81.25 176.029 81.25C176.043 81.25 176.057 81.25 176.071 81.25C176.085 81.25 176.1 81.25 176.114 81.25C176.128 81.25 176.142 81.25 176.156 81.25C176.17 81.25 176.184 81.25 176.198 81.25C176.212 81.25 176.227 81.25 176.241 81.25C176.255 81.25 176.269 81.25 176.283 81.25C176.297 81.25 176.312 81.25 176.326 81.25C176.34 81.25 176.354 81.25 176.368 81.25C176.383 81.25 176.397 81.25 176.411 81.25C176.425 81.25 176.44 81.25 176.454 81.25C176.468 81.25 176.482 81.25 176.497 81.25C176.511 81.25 176.525 81.25 176.539 81.25C176.554 81.25 176.568 81.25 176.582 81.25C176.597 81.25 176.611 81.25 176.625 81.25C176.64 81.25 176.654 81.25 176.668 81.25C176.683 81.25 176.697 81.25 176.711 81.25C176.726 81.25 176.74 81.25 176.754 81.25C176.769 81.25 176.783 81.25 176.798 81.25C176.812 81.25 176.826 81.25 176.841 81.25C176.855 81.25 176.87 81.25 176.884 81.25C176.898 81.25 176.913 81.25 176.927 81.25C176.942 81.25 176.956 81.25 176.971 81.25C176.985 81.25 177 81.25 177.014 81.25C177.029 81.25 177.043 81.25 177.058 81.25C177.072 81.25 177.087 81.25 177.101 81.25C177.116 81.25 177.13 81.25 177.145 81.25C177.159 81.25 177.174 81.25 177.188 81.25C177.203 81.25 177.218 81.25 177.232 81.25C177.247 81.25 177.261 81.25 177.276 81.25C177.29 81.25 177.305 81.25 177.32 81.25C177.334 81.25 177.349 81.25 177.364 81.25C177.378 81.25 177.393 81.25 177.407 81.25C177.422 81.25 177.437 81.25 177.451 81.25C177.466 81.25 177.481 81.25 177.495 81.25C177.51 81.25 177.525 81.25 177.539 81.25C177.554 81.25 177.569 81.25 177.584 81.25C177.598 81.25 177.613 81.25 177.628 81.25C177.642 81.25 177.657 81.25 177.672 81.25C177.687 81.25 177.701 81.25 177.716 81.25C177.731 81.25 177.746 81.25 177.76 81.25C177.775 81.25 177.79 81.25 177.805 81.25C177.82 81.25 177.834 81.25 177.849 81.25C177.864 81.25 177.879 81.25 177.894 81.25C177.909 81.25 177.923 81.25 177.938 81.25C177.953 81.25 177.968 81.25 177.983 81.25C177.998 81.25 178.012 81.25 178.027 81.25C178.042 81.25 178.057 81.25 178.072 81.25C178.087 81.25 178.102 81.25 178.117 81.25C178.132 81.25 178.146 81.25 178.161 81.25C178.176 81.25 178.191 81.25 178.206 81.25C178.221 81.25 178.236 81.25 178.251 81.25C178.266 81.25 178.281 81.25 178.296 81.25C178.311 81.25 178.326 81.25 178.341 81.25C178.356 81.25 178.371 81.25 178.386 81.25C178.401 81.25 178.416 81.25 178.431 81.25C178.446 81.25 178.461 81.25 178.476 81.25C178.491 81.25 178.506 81.25 178.521 81.25C178.536 81.25 178.551 81.25 178.566 81.25C178.581 81.25 178.596 81.25 178.611 81.25C178.626 81.25 178.641 81.25 178.657 81.25C178.672 81.25 178.687 81.25 178.702 81.25C178.717 81.25 178.732 81.25 178.747 81.25C178.762 81.25 178.777 81.25 178.793 81.25C178.808 81.25 178.823 81.25 178.838 81.25C178.853 81.25 178.868 81.25 178.883 81.25C178.899 81.25 178.914 81.25 178.929 81.25C178.944 81.25 178.959 81.25 178.974 81.25C178.99 81.25 179.005 81.25 179.02 81.25C179.035 81.25 179.05 81.25 179.066 81.25C179.081 81.25 179.096 81.25 179.111 81.25C179.126 81.25 179.142 81.25 179.157 81.25C179.172 81.25 179.187 81.25 179.203 81.25C179.218 81.25 179.233 81.25 179.248 81.25C179.264 81.25 179.279 81.25 179.294 81.25C179.31 81.25 179.325 81.25 179.34 81.25C179.355 81.25 179.371 81.25 179.386 81.25C179.401 81.25 179.417 81.25 179.432 81.25C179.447 81.25 179.463 81.25 179.478 81.25C179.493 81.25 179.509 81.25 179.524 81.25C179.539 81.25 179.555 81.25 179.57 81.25C179.585 81.25 179.601 81.25 179.616 81.25C179.632 81.25 179.647 81.25 179.662 81.25C179.678 81.25 179.693 81.25 179.709 81.25C179.724 81.25 179.739 81.25 179.755 81.25C179.77 81.25 179.786 81.25 179.801 81.25C179.816 81.25 179.832 81.25 179.847 81.25C179.863 81.25 179.878 81.25 179.894 81.25C179.909 81.25 179.925 81.25 179.94 81.25C179.955 81.25 179.971 81.25 179.986 81.25C180.002 81.25 180.017 81.25 180.033 81.25C180.048 81.25 180.064 81.25 180.079 81.25C180.095 81.25 180.11 81.25 180.126 81.25C180.141 81.25 180.157 81.25 180.172 81.25C180.188 81.25 180.203 81.25 180.219 81.25C180.234 81.25 180.25 81.25 180.266 81.25C180.281 81.25 180.297 81.25 180.312 81.25C180.328 81.25 180.343 81.25 180.359 81.25C180.374 81.25 180.39 81.25 180.406 81.25C180.421 81.25 180.437 81.25 180.452 81.25C180.468 81.25 180.484 81.25 180.499 81.25C180.515 81.25 180.53 81.25 180.546 81.25C180.562 81.25 180.577 81.25 180.593 81.25C180.608 81.25 180.624 81.25 180.64 81.25C180.655 81.25 180.671 81.25 180.687 81.25C180.702 81.25 180.718 81.25 180.734 81.25C180.749 81.25 180.765 81.25 180.781 81.25C180.796 81.25 180.812 81.25 180.828 81.25C180.843 81.25 180.859 81.25 180.875 81.25C180.89 81.25 180.906 81.25 180.922 81.25C180.937 81.25 180.953 81.25 180.969 81.25C180.985 81.25 181 81.25 181.016 81.25C181.032 81.25 181.047 81.25 181.063 81.25C181.079 81.25 181.095 81.25 181.11 81.25C181.126 81.25 181.142 81.25 181.158 81.25C181.173 81.25 181.189 81.25 181.205 81.25C181.221 81.25 181.236 81.25 181.252 81.25C181.268 81.25 181.284 81.25 181.3 81.25C181.315 81.25 181.331 81.25 181.347 81.25C181.363 81.25 181.378 81.25 181.394 81.25C181.41 81.25 181.426 81.25 181.442 81.25C181.457 81.25 181.473 81.25 181.489 81.25C181.505 81.25 181.521 81.25 181.537 81.25C181.552 81.25 181.568 81.25 181.584 81.25C181.6 81.25 181.616 81.25 181.632 81.25C181.647 81.25 181.663 81.25 181.679 81.25C181.695 81.25 181.711 81.25 181.727 81.25C181.743 81.25 181.758 81.25 181.774 81.25C181.79 81.25 181.806 81.25 181.822 81.25C181.838 81.25 181.854 81.25 181.87 81.25C181.886 81.25 181.901 81.25 181.917 81.25C181.933 81.25 181.949 81.25 181.965 81.25C181.981 81.25 181.997 81.25 182.013 81.25C182.029 81.25 182.045 81.25 182.061 81.25C182.076 81.25 182.092 81.25 182.108 81.25C182.124 81.25 182.14 81.25 182.156 81.25C182.172 81.25 182.188 81.25 182.204 81.25C182.22 81.25 182.236 81.25 182.252 81.25C182.268 81.25 182.284 81.25 182.3 81.25C182.316 81.25 182.332 81.25 182.348 81.25C182.364 81.25 182.38 81.25 182.396 81.25C182.412 81.25 182.428 81.25 182.444 81.25C182.46 81.25 182.476 81.25 182.492 81.25C182.508 81.25 182.524 81.25 182.54 81.25C182.556 81.25 182.572 81.25 182.588 81.25C182.604 81.25 182.62 81.25 182.636 81.25C182.652 81.25 182.668 81.25 182.684 81.25C182.7 81.25 182.716 81.25 182.732 81.25C182.748 81.25 182.764 81.25 182.78 81.25C182.796 81.25 182.812 81.25 182.828 81.25C182.844 81.25 182.86 81.25 182.876 81.25C182.892 81.25 182.908 81.25 182.924 81.25C182.94 81.25 182.956 81.25 182.973 81.25C182.989 81.25 183.005 81.25 183.021 81.25C183.037 81.25 183.053 81.25 183.069 81.25C183.085 81.25 183.101 81.25 183.117 81.25C183.133 81.25 183.149 81.25 183.166 81.25C183.182 81.25 183.198 81.25 183.214 81.25C183.23 81.25 183.246 81.25 183.262 81.25C183.278 81.25 183.294 81.25 183.311 81.25C183.327 81.25 183.343 81.25 183.359 81.25C183.375 81.25 183.391 81.25 183.407 81.25C183.423 81.25 183.439 81.25 183.456 81.25C183.472 81.25 183.488 81.25 183.504 81.25C183.52 81.25 183.536 81.25 183.552 81.25C183.569 81.25 183.585 81.25 183.601 81.25C183.617 81.25 183.633 81.25 183.649 81.25C183.666 81.25 183.682 81.25 183.698 81.25C183.714 81.25 183.73 81.25 183.746 81.25C183.763 81.25 183.779 81.25 183.795 81.25C183.811 81.25 183.827 81.25 183.843 81.25C183.86 81.25 183.876 81.25 183.892 81.25C183.908 81.25 183.924 81.25 183.94 81.25C183.957 81.25 183.973 81.25 183.989 81.25C184.005 81.25 184.021 81.25 184.038 81.25C184.054 81.25 184.07 81.25 184.086 81.25C184.102 81.25 184.119 81.25 184.135 81.25C184.151 81.25 184.167 81.25 184.183 81.25C184.2 81.25 184.216 81.25 184.232 81.25C184.248 81.25 184.265 81.25 184.281 81.25C184.297 81.25 184.313 81.25 184.329 81.25C184.346 81.25 184.362 81.25 184.378 81.25C184.394 81.25 184.411 81.25 184.427 81.25C184.443 81.25 184.459 81.25 184.476 81.25C184.492 81.25 184.508 81.25 184.524 81.25C184.541 81.25 184.557 81.25 184.573 81.25C184.589 81.25 184.605 81.25 184.622 81.25C184.638 81.25 184.654 81.25 184.671 81.25C184.687 81.25 184.703 81.25 184.719 81.25C184.736 81.25 184.752 81.25 184.768 81.25C184.784 81.25 184.801 81.25 184.817 81.25C184.833 81.25 184.849 81.25 184.866 81.25C184.882 81.25 184.898 81.25 184.914 81.25C184.931 81.25 184.947 81.25 184.963 81.25C184.98 81.25 184.996 81.25 185.012 81.25C185.028 81.25 185.045 81.25 185.061 81.25C185.077 81.25 185.094 81.25 185.11 81.25C185.126 81.25 185.142 81.25 185.159 81.25C185.175 81.25 185.191 81.25 185.208 81.25C185.224 81.25 185.24 81.25 185.256 81.25C185.273 81.25 185.289 81.25 185.305 81.25C185.322 81.25 185.338 81.25 185.354 81.25C185.371 81.25 185.387 81.25 185.403 81.25C185.419 81.25 185.436 81.25 185.452 81.25C185.468 81.25 185.485 81.25 185.501 81.25C185.517 81.25 185.534 81.25 185.55 81.25C185.566 81.25 185.582 81.25 185.599 81.25C185.615 81.25 185.631 81.25 185.648 81.25C185.664 81.25 185.68 81.25 185.697 81.25C185.713 81.25 185.729 81.25 185.746 81.25C185.762 81.25 185.778 81.25 185.795 81.25C185.811 81.25 185.827 81.25 185.844 81.25C185.86 81.25 185.876 81.25 185.893 81.25C185.909 81.25 185.925 81.25 185.941 81.25C185.958 81.25 185.974 81.25 185.99 81.25C186.007 81.25 186.023 81.25 186.039 81.25C186.056 81.25 186.072 81.25 186.088 81.25C186.105 81.25 186.121 81.25 186.137 81.25C186.154 81.25 186.17 81.25 186.186 81.25C186.203 81.25 186.219 81.25 186.235 81.25C186.252 81.25 186.268 81.25 186.284 81.25C186.301 81.25 186.317 81.25 186.333 81.25C186.35 81.25 186.366 81.25 186.382 81.25C186.399 81.25 186.415 81.25 186.431 81.25C186.448 81.25 186.464 81.25 186.48 81.25C186.497 81.25 186.513 81.25 186.529 81.25C186.546 81.25 186.562 81.25 186.578 81.25C186.595 81.25 186.611 81.25 186.627 81.25C186.644 81.25 186.66 81.25 186.676 81.25C186.693 81.25 186.709 81.25 186.726 81.25C186.742 81.25 186.758 81.25 186.775 81.25C186.791 81.25 186.807 81.25 186.824 81.25C186.84 81.25 186.856 81.25 186.873 81.25C186.889 81.25 186.905 81.25 186.922 81.25C186.938 81.25 186.954 81.25 186.971 81.25C186.987 81.25 187.003 81.25 187.02 81.25C187.036 81.25 187.052 81.25 187.069 81.25C187.085 81.25 187.101 81.25 187.118 81.25C187.134 81.25 187.15 81.25 187.167 81.25C187.183 81.25 187.199 81.25 187.216 81.25C187.232 81.25 187.248 81.25 187.265 81.25C187.281 81.25 187.297 81.25 187.314 81.25C187.33 81.25 187.346 81.25 187.363 81.25C187.379 81.25 187.395 81.25 187.412 81.25C187.428 81.25 187.444 81.25 187.461 81.25C187.477 81.25 187.493 81.25 187.51 81.25C187.526 81.25 187.542 81.25 187.559 81.25C187.575 81.25 187.591 81.25 187.608 81.25C187.624 81.25 187.64 81.25 187.657 81.25C187.673 81.25 187.689 81.25 187.706 81.25C187.722 81.25 187.738 81.25 187.755 81.25C187.771 81.25 187.787 81.25 187.804 81.25C187.82 81.25 187.836 81.25 187.853 81.25C187.869 81.25 187.885 81.25 187.902 81.25C187.918 81.25 187.934 81.25 187.95 81.25C187.967 81.25 187.983 81.25 187.999 81.25C188.016 81.25 188.032 81.25 188.048 81.25C188.065 81.25 188.081 81.25 188.097 81.25C188.114 81.25 188.13 81.25 188.146 81.25C188.163 81.25 188.179 81.25 188.195 81.25C188.212 81.25 188.228 81.25 188.244 81.25C188.26 81.25 188.277 81.25 188.293 81.25C188.309 81.25 188.326 81.25 188.342 81.25V82.75C188.326 82.75 188.309 82.75 188.293 82.75C188.277 82.75 188.26 82.75 188.244 82.75C188.228 82.75 188.212 82.75 188.195 82.75C188.179 82.75 188.163 82.75 188.146 82.75C188.13 82.75 188.114 82.75 188.097 82.75C188.081 82.75 188.065 82.75 188.048 82.75C188.032 82.75 188.016 82.75 187.999 82.75C187.983 82.75 187.967 82.75 187.95 82.75C187.934 82.75 187.918 82.75 187.902 82.75C187.885 82.75 187.869 82.75 187.853 82.75C187.836 82.75 187.82 82.75 187.804 82.75C187.787 82.75 187.771 82.75 187.755 82.75C187.738 82.75 187.722 82.75 187.706 82.75C187.689 82.75 187.673 82.75 187.657 82.75C187.64 82.75 187.624 82.75 187.608 82.75C187.591 82.75 187.575 82.75 187.559 82.75C187.542 82.75 187.526 82.75 187.51 82.75C187.493 82.75 187.477 82.75 187.461 82.75C187.444 82.75 187.428 82.75 187.412 82.75C187.395 82.75 187.379 82.75 187.363 82.75C187.346 82.75 187.33 82.75 187.314 82.75C187.297 82.75 187.281 82.75 187.265 82.75C187.248 82.75 187.232 82.75 187.216 82.75C187.199 82.75 187.183 82.75 187.167 82.75C187.15 82.75 187.134 82.75 187.118 82.75C187.101 82.75 187.085 82.75 187.069 82.75C187.052 82.75 187.036 82.75 187.02 82.75C187.003 82.75 186.987 82.75 186.971 82.75C186.954 82.75 186.938 82.75 186.922 82.75C186.905 82.75 186.889 82.75 186.873 82.75C186.856 82.75 186.84 82.75 186.824 82.75C186.807 82.75 186.791 82.75 186.775 82.75C186.758 82.75 186.742 82.75 186.726 82.75C186.709 82.75 186.693 82.75 186.676 82.75C186.66 82.75 186.644 82.75 186.627 82.75C186.611 82.75 186.595 82.75 186.578 82.75C186.562 82.75 186.546 82.75 186.529 82.75C186.513 82.75 186.497 82.75 186.48 82.75C186.464 82.75 186.448 82.75 186.431 82.75C186.415 82.75 186.399 82.75 186.382 82.75C186.366 82.75 186.35 82.75 186.333 82.75C186.317 82.75 186.301 82.75 186.284 82.75C186.268 82.75 186.252 82.75 186.235 82.75C186.219 82.75 186.203 82.75 186.186 82.75C186.17 82.75 186.154 82.75 186.137 82.75C186.121 82.75 186.105 82.75 186.088 82.75C186.072 82.75 186.056 82.75 186.039 82.75C186.023 82.75 186.007 82.75 185.99 82.75C185.974 82.75 185.958 82.75 185.941 82.75C185.925 82.75 185.909 82.75 185.893 82.75C185.876 82.75 185.86 82.75 185.844 82.75C185.827 82.75 185.811 82.75 185.795 82.75C185.778 82.75 185.762 82.75 185.746 82.75C185.729 82.75 185.713 82.75 185.697 82.75C185.68 82.75 185.664 82.75 185.648 82.75C185.631 82.75 185.615 82.75 185.599 82.75C185.582 82.75 185.566 82.75 185.55 82.75C185.534 82.75 185.517 82.75 185.501 82.75C185.485 82.75 185.468 82.75 185.452 82.75C185.436 82.75 185.419 82.75 185.403 82.75C185.387 82.75 185.371 82.75 185.354 82.75C185.338 82.75 185.322 82.75 185.305 82.75C185.289 82.75 185.273 82.75 185.256 82.75C185.24 82.75 185.224 82.75 185.208 82.75C185.191 82.75 185.175 82.75 185.159 82.75C185.142 82.75 185.126 82.75 185.11 82.75C185.094 82.75 185.077 82.75 185.061 82.75C185.045 82.75 185.028 82.75 185.012 82.75C184.996 82.75 184.98 82.75 184.963 82.75C184.947 82.75 184.931 82.75 184.914 82.75C184.898 82.75 184.882 82.75 184.866 82.75C184.849 82.75 184.833 82.75 184.817 82.75C184.801 82.75 184.784 82.75 184.768 82.75C184.752 82.75 184.736 82.75 184.719 82.75C184.703 82.75 184.687 82.75 184.671 82.75C184.654 82.75 184.638 82.75 184.622 82.75C184.605 82.75 184.589 82.75 184.573 82.75C184.557 82.75 184.541 82.75 184.524 82.75C184.508 82.75 184.492 82.75 184.476 82.75C184.459 82.75 184.443 82.75 184.427 82.75C184.411 82.75 184.394 82.75 184.378 82.75C184.362 82.75 184.346 82.75 184.329 82.75C184.313 82.75 184.297 82.75 184.281 82.75C184.265 82.75 184.248 82.75 184.232 82.75C184.216 82.75 184.2 82.75 184.183 82.75C184.167 82.75 184.151 82.75 184.135 82.75C184.119 82.75 184.102 82.75 184.086 82.75C184.07 82.75 184.054 82.75 184.038 82.75C184.021 82.75 184.005 82.75 183.989 82.75C183.973 82.75 183.957 82.75 183.94 82.75C183.924 82.75 183.908 82.75 183.892 82.75C183.876 82.75 183.86 82.75 183.843 82.75C183.827 82.75 183.811 82.75 183.795 82.75C183.779 82.75 183.763 82.75 183.746 82.75C183.73 82.75 183.714 82.75 183.698 82.75C183.682 82.75 183.666 82.75 183.649 82.75C183.633 82.75 183.617 82.75 183.601 82.75C183.585 82.75 183.569 82.75 183.552 82.75C183.536 82.75 183.52 82.75 183.504 82.75C183.488 82.75 183.472 82.75 183.456 82.75C183.439 82.75 183.423 82.75 183.407 82.75C183.391 82.75 183.375 82.75 183.359 82.75C183.343 82.75 183.327 82.75 183.311 82.75C183.294 82.75 183.278 82.75 183.262 82.75C183.246 82.75 183.23 82.75 183.214 82.75C183.198 82.75 183.182 82.75 183.166 82.75C183.149 82.75 183.133 82.75 183.117 82.75C183.101 82.75 183.085 82.75 183.069 82.75C183.053 82.75 183.037 82.75 183.021 82.75C183.005 82.75 182.989 82.75 182.973 82.75C182.956 82.75 182.94 82.75 182.924 82.75C182.908 82.75 182.892 82.75 182.876 82.75C182.86 82.75 182.844 82.75 182.828 82.75C182.812 82.75 182.796 82.75 182.78 82.75C182.764 82.75 182.748 82.75 182.732 82.75C182.716 82.75 182.7 82.75 182.684 82.75C182.668 82.75 182.652 82.75 182.636 82.75C182.62 82.75 182.604 82.75 182.588 82.75C182.572 82.75 182.556 82.75 182.54 82.75C182.524 82.75 182.508 82.75 182.492 82.75C182.476 82.75 182.46 82.75 182.444 82.75C182.428 82.75 182.412 82.75 182.396 82.75C182.38 82.75 182.364 82.75 182.348 82.75C182.332 82.75 182.316 82.75 182.3 82.75C182.284 82.75 182.268 82.75 182.252 82.75C182.236 82.75 182.22 82.75 182.204 82.75C182.188 82.75 182.172 82.75 182.156 82.75C182.14 82.75 182.124 82.75 182.108 82.75C182.092 82.75 182.076 82.75 182.061 82.75C182.045 82.75 182.029 82.75 182.013 82.75C181.997 82.75 181.981 82.75 181.965 82.75C181.949 82.75 181.933 82.75 181.917 82.75C181.901 82.75 181.886 82.75 181.87 82.75C181.854 82.75 181.838 82.75 181.822 82.75C181.806 82.75 181.79 82.75 181.774 82.75C181.758 82.75 181.743 82.75 181.727 82.75C181.711 82.75 181.695 82.75 181.679 82.75C181.663 82.75 181.647 82.75 181.632 82.75C181.616 82.75 181.6 82.75 181.584 82.75C181.568 82.75 181.552 82.75 181.537 82.75C181.521 82.75 181.505 82.75 181.489 82.75C181.473 82.75 181.457 82.75 181.442 82.75C181.426 82.75 181.41 82.75 181.394 82.75C181.378 82.75 181.363 82.75 181.347 82.75C181.331 82.75 181.315 82.75 181.3 82.75C181.284 82.75 181.268 82.75 181.252 82.75C181.236 82.75 181.221 82.75 181.205 82.75C181.189 82.75 181.173 82.75 181.158 82.75C181.142 82.75 181.126 82.75 181.11 82.75C181.095 82.75 181.079 82.75 181.063 82.75C181.047 82.75 181.032 82.75 181.016 82.75C181 82.75 180.985 82.75 180.969 82.75C180.953 82.75 180.937 82.75 180.922 82.75C180.906 82.75 180.89 82.75 180.875 82.75C180.859 82.75 180.843 82.75 180.828 82.75C180.812 82.75 180.796 82.75 180.781 82.75C180.765 82.75 180.749 82.75 180.734 82.75C180.718 82.75 180.702 82.75 180.687 82.75C180.671 82.75 180.655 82.75 180.64 82.75C180.624 82.75 180.608 82.75 180.593 82.75C180.577 82.75 180.562 82.75 180.546 82.75C180.53 82.75 180.515 82.75 180.499 82.75C180.484 82.75 180.468 82.75 180.452 82.75C180.437 82.75 180.421 82.75 180.406 82.75C180.39 82.75 180.374 82.75 180.359 82.75C180.343 82.75 180.328 82.75 180.312 82.75C180.297 82.75 180.281 82.75 180.266 82.75C180.25 82.75 180.234 82.75 180.219 82.75C180.203 82.75 180.188 82.75 180.172 82.75C180.157 82.75 180.141 82.75 180.126 82.75C180.11 82.75 180.095 82.75 180.079 82.75C180.064 82.75 180.048 82.75 180.033 82.75C180.017 82.75 180.002 82.75 179.986 82.75C179.971 82.75 179.955 82.75 179.94 82.75C179.925 82.75 179.909 82.75 179.894 82.75C179.878 82.75 179.863 82.75 179.847 82.75C179.832 82.75 179.816 82.75 179.801 82.75C179.786 82.75 179.77 82.75 179.755 82.75C179.739 82.75 179.724 82.75 179.709 82.75C179.693 82.75 179.678 82.75 179.662 82.75C179.647 82.75 179.632 82.75 179.616 82.75C179.601 82.75 179.585 82.75 179.57 82.75C179.555 82.75 179.539 82.75 179.524 82.75C179.509 82.75 179.493 82.75 179.478 82.75C179.463 82.75 179.447 82.75 179.432 82.75C179.417 82.75 179.401 82.75 179.386 82.75C179.371 82.75 179.355 82.75 179.34 82.75C179.325 82.75 179.31 82.75 179.294 82.75C179.279 82.75 179.264 82.75 179.248 82.75C179.233 82.75 179.218 82.75 179.203 82.75C179.187 82.75 179.172 82.75 179.157 82.75C179.142 82.75 179.126 82.75 179.111 82.75C179.096 82.75 179.081 82.75 179.066 82.75C179.05 82.75 179.035 82.75 179.02 82.75C179.005 82.75 178.99 82.75 178.974 82.75C178.959 82.75 178.944 82.75 178.929 82.75C178.914 82.75 178.899 82.75 178.883 82.75C178.868 82.75 178.853 82.75 178.838 82.75C178.823 82.75 178.808 82.75 178.793 82.75C178.777 82.75 178.762 82.75 178.747 82.75C178.732 82.75 178.717 82.75 178.702 82.75C178.687 82.75 178.672 82.75 178.657 82.75C178.641 82.75 178.626 82.75 178.611 82.75C178.596 82.75 178.581 82.75 178.566 82.75C178.551 82.75 178.536 82.75 178.521 82.75C178.506 82.75 178.491 82.75 178.476 82.75C178.461 82.75 178.446 82.75 178.431 82.75C178.416 82.75 178.401 82.75 178.386 82.75C178.371 82.75 178.356 82.75 178.341 82.75C178.326 82.75 178.311 82.75 178.296 82.75C178.281 82.75 178.266 82.75 178.251 82.75C178.236 82.75 178.221 82.75 178.206 82.75C178.191 82.75 178.176 82.75 178.161 82.75C178.146 82.75 178.132 82.75 178.117 82.75C178.102 82.75 178.087 82.75 178.072 82.75C178.057 82.75 178.042 82.75 178.027 82.75C178.012 82.75 177.998 82.75 177.983 82.75C177.968 82.75 177.953 82.75 177.938 82.75C177.923 82.75 177.909 82.75 177.894 82.75C177.879 82.75 177.864 82.75 177.849 82.75C177.834 82.75 177.82 82.75 177.805 82.75C177.79 82.75 177.775 82.75 177.76 82.75C177.746 82.75 177.731 82.75 177.716 82.75C177.701 82.75 177.687 82.75 177.672 82.75C177.657 82.75 177.642 82.75 177.628 82.75C177.613 82.75 177.598 82.75 177.584 82.75C177.569 82.75 177.554 82.75 177.539 82.75C177.525 82.75 177.51 82.75 177.495 82.75C177.481 82.75 177.466 82.75 177.451 82.75C177.437 82.75 177.422 82.75 177.407 82.75C177.393 82.75 177.378 82.75 177.364 82.75C177.349 82.75 177.334 82.75 177.32 82.75C177.305 82.75 177.29 82.75 177.276 82.75C177.261 82.75 177.247 82.75 177.232 82.75C177.218 82.75 177.203 82.75 177.188 82.75C177.174 82.75 177.159 82.75 177.145 82.75C177.13 82.75 177.116 82.75 177.101 82.75C177.087 82.75 177.072 82.75 177.058 82.75C177.043 82.75 177.029 82.75 177.014 82.75C177 82.75 176.985 82.75 176.971 82.75C176.956 82.75 176.942 82.75 176.927 82.75C176.913 82.75 176.898 82.75 176.884 82.75C176.87 82.75 176.855 82.75 176.841 82.75C176.826 82.75 176.812 82.75 176.798 82.75C176.783 82.75 176.769 82.75 176.754 82.75C176.74 82.75 176.726 82.75 176.711 82.75C176.697 82.75 176.683 82.75 176.668 82.75C176.654 82.75 176.64 82.75 176.625 82.75C176.611 82.75 176.597 82.75 176.582 82.75C176.568 82.75 176.554 82.75 176.539 82.75C176.525 82.75 176.511 82.75 176.497 82.75C176.482 82.75 176.468 82.75 176.454 82.75C176.44 82.75 176.425 82.75 176.411 82.75C176.397 82.75 176.383 82.75 176.368 82.75C176.354 82.75 176.34 82.75 176.326 82.75C176.312 82.75 176.297 82.75 176.283 82.75C176.269 82.75 176.255 82.75 176.241 82.75C176.227 82.75 176.212 82.75 176.198 82.75C176.184 82.75 176.17 82.75 176.156 82.75C176.142 82.75 176.128 82.75 176.114 82.75C176.1 82.75 176.085 82.75 176.071 82.75C176.057 82.75 176.043 82.75 176.029 82.75C176.015 82.75 176.001 82.75 175.987 82.75C175.973 82.75 175.959 82.75 175.945 82.75C175.931 82.75 175.917 82.75 175.903 82.75C175.889 82.75 175.875 82.75 175.861 82.75C175.847 82.75 175.833 82.75 175.819 82.75C175.805 82.75 175.791 82.75 175.777 82.75C175.763 82.75 175.749 82.75 175.735 82.75C175.722 82.75 175.708 82.75 175.694 82.75C175.68 82.75 175.666 82.75 175.652 82.75C175.638 82.75 175.624 82.75 175.61 82.75C175.597 82.75 175.583 82.75 175.569 82.75C175.555 82.75 175.541 82.75 175.527 82.75C175.514 82.75 175.5 82.75 175.486 82.75C175.472 82.75 175.458 82.75 175.445 82.75C175.431 82.75 175.417 82.75 175.403 82.75C175.39 82.75 175.376 82.75 175.362 82.75C175.348 82.75 175.335 82.75 175.321 82.75C175.307 82.75 175.294 82.75 175.28 82.75C175.266 82.75 175.253 82.75 175.239 82.75C175.225 82.75 175.212 82.75 175.198 82.75C175.184 82.75 175.171 82.75 175.157 82.75C175.143 82.75 175.13 82.75 175.116 82.75C175.103 82.75 175.089 82.75 175.075 82.75C175.062 82.75 175.048 82.75 175.035 82.75C175.021 82.75 175.008 82.75 174.994 82.75C174.981 82.75 174.967 82.75 174.954 82.75C174.94 82.75 174.926 82.75 174.913 82.75C174.9 82.75 174.886 82.75 174.873 82.75C174.859 82.75 174.846 82.75 174.832 82.75C174.819 82.75 174.805 82.75 174.792 82.75C174.778 82.75 174.765 82.75 174.752 82.75C174.738 82.75 174.725 82.75 174.711 82.75C174.698 82.75 174.685 82.75 174.671 82.75C174.658 82.75 174.645 82.75 174.631 82.75C174.618 82.75 174.605 82.75 174.591 82.75C174.578 82.75 174.565 82.75 174.551 82.75C174.538 82.75 174.525 82.75 174.512 82.75C174.498 82.75 174.485 82.75 174.472 82.75C174.459 82.75 174.445 82.75 174.432 82.75C174.419 82.75 174.406 82.75 174.392 82.75C174.379 82.75 174.366 82.75 174.353 82.75C174.34 82.75 174.327 82.75 174.313 82.75C174.3 82.75 174.287 82.75 174.274 82.75C174.261 82.75 174.248 82.75 174.235 82.75C174.222 82.75 174.208 82.75 174.195 82.75C174.182 82.75 174.169 82.75 174.156 82.75C174.143 82.75 174.13 82.75 174.117 82.75C174.104 82.75 174.091 82.75 174.078 82.75C174.065 82.75 174.052 82.75 174.039 82.75C174.026 82.75 174.013 82.75 174 82.75C173.987 82.75 173.974 82.75 173.961 82.75C173.948 82.75 173.935 82.75 173.922 82.75C173.909 82.75 173.897 82.75 173.884 82.75C173.871 82.75 173.858 82.75 173.845 82.75C173.832 82.75 173.819 82.75 173.806 82.75C173.794 82.75 173.781 82.75 173.768 82.75C173.755 82.75 173.742 82.75 173.729 82.75C173.717 82.75 173.704 82.75 173.691 82.75C173.678 82.75 173.666 82.75 173.653 82.75C173.64 82.75 173.627 82.75 173.615 82.75C173.602 82.75 173.589 82.75 173.577 82.75C173.564 82.75 173.551 82.75 173.539 82.75C173.526 82.75 173.513 82.75 173.501 82.75C173.488 82.75 173.475 82.75 173.463 82.75C173.45 82.75 173.437 82.75 173.425 82.75C173.412 82.75 173.4 82.75 173.387 82.75C173.374 82.75 173.362 82.75 173.349 82.75C173.337 82.75 173.324 82.75 173.312 82.75C173.299 82.75 173.287 82.75 173.274 82.75C173.262 82.75 173.249 82.75 173.237 82.75C173.224 82.75 173.212 82.75 173.199 82.75C173.187 82.75 173.175 82.75 173.162 82.75C173.15 82.75 173.137 82.75 173.125 82.75C173.113 82.75 173.1 82.75 173.088 82.75C173.075 82.75 173.063 82.75 173.051 82.75C173.038 82.75 173.026 82.75 173.014 82.75C173.002 82.75 172.989 82.75 172.977 82.75C172.965 82.75 172.952 82.75 172.94 82.75C172.928 82.75 172.916 82.75 172.903 82.75C172.891 82.75 172.879 82.75 172.867 82.75C172.854 82.75 172.842 82.75 172.83 82.75C172.818 82.75 172.806 82.75 172.794 82.75C172.781 82.75 172.769 82.75 172.757 82.75C172.745 82.75 172.733 82.75 172.721 82.75C172.709 82.75 172.697 82.75 172.685 82.75C172.673 82.75 172.66 82.75 172.648 82.75C172.636 82.75 172.624 82.75 172.612 82.75C172.6 82.75 172.588 82.75 172.576 82.75C172.564 82.75 172.552 82.75 172.54 82.75C172.528 82.75 172.516 82.75 172.505 82.75C172.493 82.75 172.481 82.75 172.469 82.75C172.457 82.75 172.445 82.75 172.433 82.75C172.421 82.75 172.409 82.75 172.397 82.75C172.386 82.75 172.374 82.75 172.362 82.75C172.35 82.75 172.338 82.75 172.326 82.75C172.315 82.75 172.303 82.75 172.291 82.75C172.279 82.75 172.268 82.75 172.256 82.75C172.244 82.75 172.232 82.75 172.221 82.75C172.209 82.75 172.197 82.75 172.186 82.75C172.174 82.75 172.162 82.75 172.151 82.75C172.139 82.75 172.127 82.75 172.116 82.75C172.104 82.75 172.092 82.75 172.081 82.75C172.069 82.75 172.058 82.75 172.046 82.75C172.034 82.75 172.023 82.75 172.011 82.75C172 82.75 171.988 82.75 171.977 82.75C171.965 82.75 171.954 82.75 171.942 82.75C171.931 82.75 171.919 82.75 171.908 82.75C171.896 82.75 171.885 82.75 171.873 82.75C171.862 82.75 171.851 82.75 171.839 82.75C171.828 82.75 171.816 82.75 171.805 82.75C171.794 82.75 171.782 82.75 171.771 82.75C171.76 82.75 171.748 82.75 171.737 82.75C171.726 82.75 171.714 82.75 171.703 82.75C171.692 82.75 171.681 82.75 171.669 82.75C171.658 82.75 171.647 82.75 171.636 82.75C171.624 82.75 171.613 82.75 171.602 82.75C171.591 82.75 171.58 82.75 171.568 82.75C171.557 82.75 171.546 82.75 171.535 82.75C171.524 82.75 171.513 82.75 171.502 82.75C171.49 82.75 171.479 82.75 171.468 82.75C171.457 82.75 171.446 82.75 171.435 82.75C171.424 82.75 171.413 82.75 171.402 82.75C171.391 82.75 171.38 82.75 171.369 82.75C171.358 82.75 171.347 82.75 171.336 82.75C171.325 82.75 171.314 82.75 171.303 82.75C171.292 82.75 171.281 82.75 171.27 82.75C171.26 82.75 171.249 82.75 171.238 82.75C171.227 82.75 171.216 82.75 171.205 82.75C171.194 82.75 171.184 82.75 171.173 82.75C171.162 82.75 171.151 82.75 171.14 82.75C171.13 82.75 171.119 82.75 171.108 82.75C171.097 82.75 171.087 82.75 171.076 82.75C171.065 82.75 171.055 82.75 171.044 82.75C171.033 82.75 171.023 82.75 171.012 82.75C171.001 82.75 170.991 82.75 170.98 82.75C170.969 82.75 170.959 82.75 170.948 82.75C170.938 82.75 170.927 82.75 170.916 82.75C170.906 82.75 170.895 82.75 170.885 82.75C170.874 82.75 170.864 82.75 170.853 82.75C170.843 82.75 170.832 82.75 170.822 82.75C170.811 82.75 170.801 82.75 170.791 82.75C170.78 82.75 170.77 82.75 170.759 82.75C170.749 82.75 170.739 82.75 170.728 82.75C170.718 82.75 170.707 82.75 170.697 82.75C170.687 82.75 170.676 82.75 170.666 82.75C170.656 82.75 170.646 82.75 170.635 82.75C170.625 82.75 170.615 82.75 170.605 82.75C170.594 82.75 170.584 82.75 170.574 82.75C170.564 82.75 170.553 82.75 170.543 82.75C170.533 82.75 170.523 82.75 170.513 82.75C170.503 82.75 170.493 82.75 170.482 82.75C170.472 82.75 170.462 82.75 170.452 82.75C170.442 82.75 170.432 82.75 170.422 82.75C170.412 82.75 170.402 82.75 170.392 82.75C170.382 82.75 170.372 82.75 170.362 82.75C170.352 82.75 170.342 82.75 170.332 82.75C170.322 82.75 170.312 82.75 170.302 82.75C170.292 82.75 170.282 82.75 170.273 82.75C170.263 82.75 170.253 82.75 170.243 82.75C170.233 82.75 170.223 82.75 170.213 82.75C170.204 82.75 170.194 82.75 170.184 82.75C170.174 82.75 170.165 82.75 170.155 82.75C170.145 82.75 170.135 82.75 170.126 82.75C170.116 82.75 170.106 82.75 170.097 82.75C170.087 82.75 170.077 82.75 170.068 82.75C170.058 82.75 170.048 82.75 170.039 82.75C170.029 82.75 170.019 82.75 170.01 82.75C170 82.75 169.991 82.75 169.981 82.75C169.972 82.75 169.962 82.75 169.953 82.75C169.943 82.75 169.934 82.75 169.924 82.75C169.915 82.75 169.905 82.75 169.896 82.75C169.886 82.75 169.877 82.75 169.867 82.75C169.858 82.75 169.849 82.75 169.839 82.75C169.83 82.75 169.821 82.75 169.811 82.75C169.802 82.75 169.793 82.75 169.783 82.75C169.774 82.75 169.765 82.75 169.755 82.75C169.746 82.75 169.737 82.75 169.728 82.75C169.718 82.75 169.709 82.75 169.7 82.75C169.691 82.75 169.682 82.75 169.672 82.75C169.663 82.75 169.654 82.75 169.645 82.75C169.636 82.75 169.627 82.75 169.618 82.75C169.609 82.75 169.6 82.75 169.59 82.75C169.581 82.75 169.572 82.75 169.563 82.75C169.554 82.75 169.545 82.75 169.536 82.75C169.527 82.75 169.518 82.75 169.509 82.75C169.5 82.75 169.492 82.75 169.483 82.75C169.474 82.75 169.465 82.75 169.456 82.75C169.447 82.75 169.438 82.75 169.429 82.75C169.42 82.75 169.412 82.75 169.403 82.75C169.394 82.75 169.385 82.75 169.376 82.75C169.368 82.75 169.359 82.75 169.35 82.75C169.341 82.75 169.333 82.75 169.324 82.75C169.315 82.75 169.307 82.75 169.298 82.75C169.289 82.75 169.281 82.75 169.272 82.75C169.263 82.75 169.255 82.75 169.246 82.75C169.238 82.75 169.229 82.75 169.22 82.75C169.212 82.75 169.203 82.75 169.195 82.75C169.186 82.75 169.178 82.75 169.169 82.75C169.161 82.75 169.152 82.75 169.144 82.75C169.135 82.75 169.127 82.75 169.119 82.75C169.11 82.75 169.102 82.75 169.093 82.75C169.085 82.75 169.077 82.75 169.068 82.75C169.06 82.75 169.052 82.75 169.043 82.75C169.035 82.75 169.027 82.75 169.019 82.75C169.01 82.75 169.002 82.75 168.994 82.75C168.986 82.75 168.977 82.75 168.969 82.75C168.961 82.75 168.953 82.75 168.945 82.75C168.937 82.75 168.928 82.75 168.92 82.75C168.912 82.75 168.904 82.75 168.896 82.75C168.888 82.75 168.88 82.75 168.872 82.75C168.864 82.75 168.856 82.75 168.848 82.75C168.84 82.75 168.832 82.75 168.824 82.75C168.816 82.75 168.808 82.75 168.8 82.75C168.792 82.75 168.784 82.75 168.776 82.75C168.768 82.75 168.761 82.75 168.753 82.75C168.745 82.75 168.737 82.75 168.729 82.75C168.721 82.75 168.714 82.75 168.706 82.75C168.698 82.75 168.69 82.75 168.683 82.75C168.675 82.75 168.667 82.75 168.659 82.75C168.652 82.75 168.644 82.75 168.636 82.75C168.629 82.75 168.621 82.75 168.613 82.75C168.606 82.75 168.598 82.75 168.591 82.75C168.583 82.75 168.575 82.75 168.568 82.75C168.56 82.75 168.553 82.75 168.545 82.75C168.538 82.75 168.53 82.75 168.523 82.75C168.515 82.75 168.508 82.75 168.501 82.75C168.493 82.75 168.486 82.75 168.478 82.75C168.471 82.75 168.464 82.75 168.456 82.75C168.449 82.75 168.442 82.75 168.434 82.75C168.427 82.75 168.42 82.75 168.412 82.75C168.405 82.75 168.398 82.75 168.391 82.75C168.383 82.75 168.376 82.75 168.369 82.75C168.362 82.75 168.355 82.75 168.347 82.75C168.34 82.75 168.333 82.75 168.326 82.75C168.319 82.75 168.312 82.75 168.305 82.75C168.298 82.75 168.291 82.75 168.284 82.75C168.277 82.75 168.27 82.75 168.263 82.75C168.256 82.75 168.249 82.75 168.242 82.75C168.235 82.75 168.228 82.75 168.221 82.75C168.214 82.75 168.207 82.75 168.2 82.75C168.193 82.75 168.186 82.75 168.18 82.75C168.173 82.75 168.166 82.75 168.159 82.75C168.152 82.75 168.146 82.75 168.139 82.75C168.132 82.75 168.125 82.75 168.119 82.75C168.112 82.75 168.105 82.75 168.099 82.75C168.092 82.75 168.085 82.75 168.079 82.75C168.072 82.75 168.065 82.75 168.059 82.75C168.052 82.75 168.046 82.75 168.039 82.75C168.033 82.75 168.026 82.75 168.019 82.75C168.013 82.75 168.006 82.75 168 82.75V81.25ZM188.342 81.25C190.447 81.25 192.186 81.7816 193.375 83.1285C194.546 84.4539 195.053 86.4243 195.053 89H193.553C193.553 86.5757 193.067 85.0461 192.251 84.1215C191.453 83.2184 190.211 82.75 188.342 82.75V81.25ZM195.053 89C195.053 89.75 195.053 95.25 195.053 100.875C195.053 106.5 195.053 112.25 195.053 113.5H193.553C193.553 112.25 193.553 106.5 193.553 100.875C193.553 95.25 193.553 89.75 193.553 89H195.053ZM195.053 113.5C195.053 115.112 195.509 116.399 196.388 117.284C197.264 118.166 198.664 118.75 200.761 118.75V120.25C198.388 120.25 196.558 119.584 195.324 118.341C194.091 117.101 193.553 115.388 193.553 113.5H195.053ZM200.761 118.75C200.772 118.75 200.783 118.75 200.794 118.75C200.805 118.75 200.816 118.75 200.827 118.75C200.838 118.75 200.85 118.75 200.861 118.75C200.872 118.75 200.883 118.75 200.895 118.75C200.906 118.75 200.917 118.75 200.929 118.75C200.94 118.75 200.952 118.75 200.964 118.75C200.975 118.75 200.987 118.75 200.999 118.75C201.01 118.75 201.022 118.75 201.034 118.75C201.046 118.75 201.058 118.75 201.07 118.75C201.081 118.75 201.093 118.75 201.106 118.75C201.118 118.75 201.13 118.75 201.142 118.75C201.154 118.75 201.166 118.75 201.179 118.75C201.191 118.75 201.203 118.75 201.216 118.75C201.228 118.75 201.241 118.75 201.253 118.75C201.266 118.75 201.278 118.75 201.291 118.75C201.304 118.75 201.316 118.75 201.329 118.75C201.342 118.75 201.355 118.75 201.368 118.75C201.38 118.75 201.393 118.75 201.406 118.75C201.419 118.75 201.432 118.75 201.446 118.75C201.459 118.75 201.472 118.75 201.485 118.75C201.498 118.75 201.512 118.75 201.525 118.75C201.538 118.75 201.552 118.75 201.565 118.75C201.579 118.75 201.592 118.75 201.606 118.75C201.619 118.75 201.633 118.75 201.647 118.75C201.66 118.75 201.674 118.75 201.688 118.75C201.702 118.75 201.715 118.75 201.729 118.75C201.743 118.75 201.757 118.75 201.771 118.75C201.785 118.75 201.799 118.75 201.813 118.75C201.828 118.75 201.842 118.75 201.856 118.75C201.87 118.75 201.884 118.75 201.899 118.75C201.913 118.75 201.928 118.75 201.942 118.75C201.956 118.75 201.971 118.75 201.986 118.75C202 118.75 202.015 118.75 202.029 118.75C202.044 118.75 202.059 118.75 202.074 118.75C202.088 118.75 202.103 118.75 202.118 118.75C202.133 118.75 202.148 118.75 202.163 118.75C202.178 118.75 202.193 118.75 202.208 118.75C202.223 118.75 202.238 118.75 202.254 118.75C202.269 118.75 202.284 118.75 202.299 118.75C202.315 118.75 202.33 118.75 202.345 118.75C202.361 118.75 202.376 118.75 202.392 118.75C202.407 118.75 202.423 118.75 202.439 118.75C202.454 118.75 202.47 118.75 202.486 118.75C202.501 118.75 202.517 118.75 202.533 118.75C202.549 118.75 202.565 118.75 202.581 118.75C202.597 118.75 202.613 118.75 202.629 118.75C202.645 118.75 202.661 118.75 202.677 118.75C202.693 118.75 202.709 118.75 202.726 118.75C202.742 118.75 202.758 118.75 202.775 118.75C202.791 118.75 202.807 118.75 202.824 118.75C202.84 118.75 202.857 118.75 202.873 118.75C202.89 118.75 202.907 118.75 202.923 118.75C202.94 118.75 202.957 118.75 202.973 118.75C202.99 118.75 203.007 118.75 203.024 118.75C203.041 118.75 203.058 118.75 203.075 118.75C203.092 118.75 203.109 118.75 203.126 118.75C203.143 118.75 203.16 118.75 203.177 118.75C203.194 118.75 203.211 118.75 203.229 118.75C203.246 118.75 203.263 118.75 203.281 118.75C203.298 118.75 203.315 118.75 203.333 118.75C203.35 118.75 203.368 118.75 203.385 118.75C203.403 118.75 203.42 118.75 203.438 118.75C203.456 118.75 203.474 118.75 203.491 118.75C203.509 118.75 203.527 118.75 203.545 118.75C203.562 118.75 203.58 118.75 203.598 118.75C203.616 118.75 203.634 118.75 203.652 118.75C203.67 118.75 203.688 118.75 203.707 118.75C203.725 118.75 203.743 118.75 203.761 118.75C203.779 118.75 203.798 118.75 203.816 118.75C203.834 118.75 203.853 118.75 203.871 118.75C203.889 118.75 203.908 118.75 203.926 118.75C203.945 118.75 203.963 118.75 203.982 118.75C204.001 118.75 204.019 118.75 204.038 118.75C204.057 118.75 204.075 118.75 204.094 118.75C204.113 118.75 204.132 118.75 204.151 118.75C204.17 118.75 204.188 118.75 204.207 118.75C204.226 118.75 204.245 118.75 204.264 118.75C204.284 118.75 204.303 118.75 204.322 118.75C204.341 118.75 204.36 118.75 204.379 118.75C204.399 118.75 204.418 118.75 204.437 118.75C204.457 118.75 204.476 118.75 204.495 118.75C204.515 118.75 204.534 118.75 204.554 118.75C204.573 118.75 204.593 118.75 204.612 118.75C204.632 118.75 204.652 118.75 204.671 118.75C204.691 118.75 204.711 118.75 204.73 118.75C204.75 118.75 204.77 118.75 204.79 118.75C204.81 118.75 204.83 118.75 204.85 118.75C204.87 118.75 204.89 118.75 204.91 118.75C204.93 118.75 204.95 118.75 204.97 118.75C204.99 118.75 205.01 118.75 205.03 118.75C205.05 118.75 205.071 118.75 205.091 118.75C205.111 118.75 205.132 118.75 205.152 118.75C205.172 118.75 205.193 118.75 205.213 118.75C205.234 118.75 205.254 118.75 205.275 118.75C205.295 118.75 205.316 118.75 205.336 118.75C205.357 118.75 205.378 118.75 205.398 118.75C205.419 118.75 205.44 118.75 205.461 118.75C205.481 118.75 205.502 118.75 205.523 118.75C205.544 118.75 205.565 118.75 205.586 118.75C205.607 118.75 205.628 118.75 205.649 118.75C205.67 118.75 205.691 118.75 205.712 118.75C205.733 118.75 205.754 118.75 205.776 118.75C205.797 118.75 205.818 118.75 205.839 118.75C205.861 118.75 205.882 118.75 205.903 118.75C205.925 118.75 205.946 118.75 205.967 118.75C205.989 118.75 206.01 118.75 206.032 118.75C206.053 118.75 206.075 118.75 206.097 118.75C206.118 118.75 206.14 118.75 206.161 118.75C206.183 118.75 206.205 118.75 206.227 118.75C206.248 118.75 206.27 118.75 206.292 118.75C206.314 118.75 206.336 118.75 206.357 118.75C206.379 118.75 206.401 118.75 206.423 118.75C206.445 118.75 206.467 118.75 206.489 118.75C206.511 118.75 206.534 118.75 206.556 118.75C206.578 118.75 206.6 118.75 206.622 118.75C206.644 118.75 206.667 118.75 206.689 118.75C206.711 118.75 206.733 118.75 206.756 118.75C206.778 118.75 206.801 118.75 206.823 118.75C206.845 118.75 206.868 118.75 206.89 118.75C206.913 118.75 206.935 118.75 206.958 118.75C206.981 118.75 207.003 118.75 207.026 118.75C207.049 118.75 207.071 118.75 207.094 118.75C207.117 118.75 207.139 118.75 207.162 118.75C207.185 118.75 207.208 118.75 207.231 118.75C207.254 118.75 207.276 118.75 207.299 118.75C207.322 118.75 207.345 118.75 207.368 118.75C207.391 118.75 207.414 118.75 207.437 118.75C207.46 118.75 207.484 118.75 207.507 118.75C207.53 118.75 207.553 118.75 207.576 118.75C207.599 118.75 207.623 118.75 207.646 118.75C207.669 118.75 207.693 118.75 207.716 118.75C207.739 118.75 207.763 118.75 207.786 118.75C207.81 118.75 207.833 118.75 207.857 118.75C207.88 118.75 207.904 118.75 207.927 118.75C207.951 118.75 207.974 118.75 207.998 118.75C208.021 118.75 208.045 118.75 208.069 118.75C208.093 118.75 208.116 118.75 208.14 118.75C208.164 118.75 208.188 118.75 208.211 118.75C208.235 118.75 208.259 118.75 208.283 118.75C208.307 118.75 208.331 118.75 208.355 118.75C208.379 118.75 208.403 118.75 208.427 118.75C208.451 118.75 208.475 118.75 208.499 118.75C208.523 118.75 208.547 118.75 208.571 118.75C208.595 118.75 208.62 118.75 208.644 118.75C208.668 118.75 208.692 118.75 208.716 118.75C208.741 118.75 208.765 118.75 208.789 118.75C208.814 118.75 208.838 118.75 208.862 118.75C208.887 118.75 208.911 118.75 208.936 118.75C208.96 118.75 208.985 118.75 209.009 118.75C209.034 118.75 209.058 118.75 209.083 118.75C209.107 118.75 209.132 118.75 209.157 118.75C209.181 118.75 209.206 118.75 209.231 118.75C209.255 118.75 209.28 118.75 209.305 118.75C209.33 118.75 209.354 118.75 209.379 118.75C209.404 118.75 209.429 118.75 209.454 118.75C209.479 118.75 209.504 118.75 209.529 118.75C209.554 118.75 209.578 118.75 209.603 118.75C209.628 118.75 209.653 118.75 209.679 118.75C209.704 118.75 209.729 118.75 209.754 118.75C209.779 118.75 209.804 118.75 209.829 118.75C209.854 118.75 209.88 118.75 209.905 118.75C209.93 118.75 209.955 118.75 209.981 118.75C210.006 118.75 210.031 118.75 210.056 118.75C210.082 118.75 210.107 118.75 210.133 118.75C210.158 118.75 210.183 118.75 210.209 118.75C210.234 118.75 210.26 118.75 210.285 118.75C210.311 118.75 210.336 118.75 210.362 118.75C210.387 118.75 210.413 118.75 210.439 118.75C210.464 118.75 210.49 118.75 210.515 118.75C210.541 118.75 210.567 118.75 210.593 118.75C210.618 118.75 210.644 118.75 210.67 118.75C210.696 118.75 210.721 118.75 210.747 118.75C210.773 118.75 210.799 118.75 210.825 118.75C210.851 118.75 210.876 118.75 210.902 118.75C210.928 118.75 210.954 118.75 210.98 118.75C211.006 118.75 211.032 118.75 211.058 118.75C211.084 118.75 211.11 118.75 211.136 118.75C211.162 118.75 211.189 118.75 211.215 118.75C211.241 118.75 211.267 118.75 211.293 118.75C211.319 118.75 211.345 118.75 211.372 118.75C211.398 118.75 211.424 118.75 211.45 118.75C211.477 118.75 211.503 118.75 211.529 118.75C211.556 118.75 211.582 118.75 211.608 118.75C211.635 118.75 211.661 118.75 211.687 118.75C211.714 118.75 211.74 118.75 211.767 118.75C211.793 118.75 211.82 118.75 211.846 118.75C211.873 118.75 211.899 118.75 211.926 118.75C211.952 118.75 211.979 118.75 212.005 118.75C212.032 118.75 212.059 118.75 212.085 118.75C212.112 118.75 212.139 118.75 212.165 118.75C212.192 118.75 212.219 118.75 212.245 118.75C212.272 118.75 212.299 118.75 212.326 118.75C212.352 118.75 212.379 118.75 212.406 118.75C212.433 118.75 212.46 118.75 212.487 118.75C212.513 118.75 212.54 118.75 212.567 118.75C212.594 118.75 212.621 118.75 212.648 118.75C212.675 118.75 212.702 118.75 212.729 118.75C212.756 118.75 212.783 118.75 212.81 118.75C212.837 118.75 212.864 118.75 212.891 118.75C212.918 118.75 212.945 118.75 212.972 118.75C212.999 118.75 213.026 118.75 213.054 118.75C213.081 118.75 213.108 118.75 213.135 118.75C213.162 118.75 213.189 118.75 213.217 118.75C213.244 118.75 213.271 118.75 213.298 118.75C213.326 118.75 213.353 118.75 213.38 118.75C213.408 118.75 213.435 118.75 213.462 118.75C213.49 118.75 213.517 118.75 213.544 118.75C213.572 118.75 213.599 118.75 213.626 118.75C213.654 118.75 213.681 118.75 213.709 118.75C213.736 118.75 213.764 118.75 213.791 118.75C213.819 118.75 213.846 118.75 213.874 118.75C213.901 118.75 213.929 118.75 213.956 118.75C213.984 118.75 214.011 118.75 214.039 118.75C214.067 118.75 214.094 118.75 214.122 118.75C214.15 118.75 214.177 118.75 214.205 118.75C214.232 118.75 214.26 118.75 214.288 118.75C214.316 118.75 214.343 118.75 214.371 118.75C214.399 118.75 214.426 118.75 214.454 118.75C214.482 118.75 214.51 118.75 214.538 118.75C214.565 118.75 214.593 118.75 214.621 118.75C214.649 118.75 214.677 118.75 214.705 118.75C214.732 118.75 214.76 118.75 214.788 118.75C214.816 118.75 214.844 118.75 214.872 118.75C214.9 118.75 214.928 118.75 214.956 118.75C214.984 118.75 215.012 118.75 215.04 118.75C215.068 118.75 215.096 118.75 215.124 118.75C215.152 118.75 215.18 118.75 215.208 118.75C215.236 118.75 215.264 118.75 215.292 118.75C215.32 118.75 215.348 118.75 215.376 118.75C215.404 118.75 215.432 118.75 215.46 118.75C215.489 118.75 215.517 118.75 215.545 118.75C215.573 118.75 215.601 118.75 215.629 118.75C215.658 118.75 215.686 118.75 215.714 118.75C215.742 118.75 215.77 118.75 215.799 118.75C215.827 118.75 215.855 118.75 215.883 118.75C215.912 118.75 215.94 118.75 215.968 118.75C215.997 118.75 216.025 118.75 216.053 118.75C216.081 118.75 216.11 118.75 216.138 118.75C216.166 118.75 216.195 118.75 216.223 118.75C216.252 118.75 216.28 118.75 216.308 118.75C216.337 118.75 216.365 118.75 216.394 118.75C216.422 118.75 216.45 118.75 216.479 118.75C216.507 118.75 216.536 118.75 216.564 118.75C216.593 118.75 216.621 118.75 216.65 118.75C216.678 118.75 216.707 118.75 216.735 118.75C216.764 118.75 216.792 118.75 216.821 118.75C216.849 118.75 216.878 118.75 216.906 118.75C216.935 118.75 216.963 118.75 216.992 118.75C217.02 118.75 217.049 118.75 217.078 118.75C217.106 118.75 217.135 118.75 217.163 118.75C217.192 118.75 217.221 118.75 217.249 118.75C217.278 118.75 217.306 118.75 217.335 118.75C217.364 118.75 217.392 118.75 217.421 118.75C217.45 118.75 217.478 118.75 217.507 118.75C217.536 118.75 217.564 118.75 217.593 118.75C217.622 118.75 217.651 118.75 217.679 118.75C217.708 118.75 217.737 118.75 217.765 118.75C217.794 118.75 217.823 118.75 217.852 118.75C217.88 118.75 217.909 118.75 217.938 118.75C217.967 118.75 217.995 118.75 218.024 118.75C218.053 118.75 218.082 118.75 218.111 118.75C218.139 118.75 218.168 118.75 218.197 118.75C218.226 118.75 218.255 118.75 218.284 118.75C218.312 118.75 218.341 118.75 218.37 118.75C218.399 118.75 218.428 118.75 218.457 118.75C218.485 118.75 218.514 118.75 218.543 118.75C218.572 118.75 218.601 118.75 218.63 118.75C218.659 118.75 218.688 118.75 218.716 118.75C218.745 118.75 218.774 118.75 218.803 118.75C218.832 118.75 218.861 118.75 218.89 118.75C218.919 118.75 218.948 118.75 218.977 118.75C219.006 118.75 219.035 118.75 219.063 118.75C219.092 118.75 219.121 118.75 219.15 118.75C219.179 118.75 219.208 118.75 219.237 118.75C219.266 118.75 219.295 118.75 219.324 118.75C219.353 118.75 219.382 118.75 219.411 118.75C219.44 118.75 219.469 118.75 219.498 118.75C219.527 118.75 219.556 118.75 219.585 118.75C219.614 118.75 219.643 118.75 219.672 118.75C219.701 118.75 219.73 118.75 219.759 118.75C219.788 118.75 219.817 118.75 219.846 118.75C219.875 118.75 219.904 118.75 219.933 118.75C219.962 118.75 219.991 118.75 220.02 118.75C220.049 118.75 220.078 118.75 220.107 118.75C220.136 118.75 220.165 118.75 220.194 118.75C220.224 118.75 220.253 118.75 220.282 118.75C220.311 118.75 220.34 118.75 220.369 118.75C220.398 118.75 220.427 118.75 220.456 118.75C220.485 118.75 220.514 118.75 220.543 118.75C220.572 118.75 220.601 118.75 220.63 118.75C220.659 118.75 220.688 118.75 220.718 118.75C220.747 118.75 220.776 118.75 220.805 118.75C220.834 118.75 220.863 118.75 220.892 118.75C220.921 118.75 220.95 118.75 220.979 118.75C221.008 118.75 221.037 118.75 221.066 118.75C221.096 118.75 221.125 118.75 221.154 118.75C221.183 118.75 221.212 118.75 221.241 118.75C221.27 118.75 221.299 118.75 221.328 118.75C221.357 118.75 221.386 118.75 221.415 118.75C221.445 118.75 221.474 118.75 221.503 118.75C221.532 118.75 221.561 118.75 221.59 118.75C221.619 118.75 221.648 118.75 221.677 118.75C221.706 118.75 221.735 118.75 221.764 118.75C221.794 118.75 221.823 118.75 221.852 118.75C221.881 118.75 221.91 118.75 221.939 118.75C221.968 118.75 221.997 118.75 222.026 118.75C222.055 118.75 222.084 118.75 222.113 118.75C222.142 118.75 222.171 118.75 222.201 118.75C222.23 118.75 222.259 118.75 222.288 118.75C222.317 118.75 222.346 118.75 222.375 118.75C222.404 118.75 222.433 118.75 222.462 118.75C222.491 118.75 222.52 118.75 222.549 118.75C222.578 118.75 222.607 118.75 222.636 118.75C222.665 118.75 222.694 118.75 222.723 118.75C222.752 118.75 222.781 118.75 222.81 118.75C222.839 118.75 222.869 118.75 222.898 118.75C222.927 118.75 222.956 118.75 222.985 118.75C223.014 118.75 223.043 118.75 223.072 118.75C223.101 118.75 223.13 118.75 223.159 118.75C223.188 118.75 223.217 118.75 223.246 118.75C223.275 118.75 223.304 118.75 223.333 118.75C223.361 118.75 223.39 118.75 223.419 118.75C223.448 118.75 223.477 118.75 223.506 118.75C223.535 118.75 223.564 118.75 223.593 118.75C223.622 118.75 223.651 118.75 223.68 118.75C223.709 118.75 223.738 118.75 223.767 118.75C223.796 118.75 223.825 118.75 223.854 118.75C223.882 118.75 223.911 118.75 223.94 118.75C223.969 118.75 223.998 118.75 224.027 118.75C224.056 118.75 224.085 118.75 224.114 118.75C224.142 118.75 224.171 118.75 224.2 118.75C224.229 118.75 224.258 118.75 224.287 118.75C224.316 118.75 224.344 118.75 224.373 118.75C224.402 118.75 224.431 118.75 224.46 118.75C224.489 118.75 224.517 118.75 224.546 118.75C224.575 118.75 224.604 118.75 224.633 118.75C224.661 118.75 224.69 118.75 224.719 118.75C224.748 118.75 224.777 118.75 224.805 118.75C224.834 118.75 224.863 118.75 224.892 118.75C224.92 118.75 224.949 118.75 224.978 118.75C225.006 118.75 225.035 118.75 225.064 118.75C225.093 118.75 225.121 118.75 225.15 118.75C225.179 118.75 225.207 118.75 225.236 118.75C225.265 118.75 225.293 118.75 225.322 118.75C225.351 118.75 225.379 118.75 225.408 118.75C225.437 118.75 225.465 118.75 225.494 118.75C225.522 118.75 225.551 118.75 225.58 118.75C225.608 118.75 225.637 118.75 225.665 118.75C225.694 118.75 225.723 118.75 225.751 118.75C225.78 118.75 225.808 118.75 225.837 118.75C225.865 118.75 225.894 118.75 225.922 118.75C225.951 118.75 225.979 118.75 226.008 118.75C226.036 118.75 226.065 118.75 226.093 118.75C226.122 118.75 226.15 118.75 226.179 118.75C226.207 118.75 226.236 118.75 226.264 118.75C226.292 118.75 226.321 118.75 226.349 118.75C226.378 118.75 226.406 118.75 226.434 118.75C226.463 118.75 226.491 118.75 226.519 118.75C226.548 118.75 226.576 118.75 226.604 118.75C226.633 118.75 226.661 118.75 226.689 118.75C226.718 118.75 226.746 118.75 226.774 118.75C226.803 118.75 226.831 118.75 226.859 118.75C226.887 118.75 226.916 118.75 226.944 118.75C226.972 118.75 227 118.75 227.028 118.75C227.057 118.75 227.085 118.75 227.113 118.75C227.141 118.75 227.169 118.75 227.197 118.75C227.226 118.75 227.254 118.75 227.282 118.75C227.31 118.75 227.338 118.75 227.366 118.75C227.394 118.75 227.422 118.75 227.45 118.75C227.478 118.75 227.506 118.75 227.534 118.75C227.563 118.75 227.591 118.75 227.619 118.75C227.647 118.75 227.675 118.75 227.702 118.75C227.73 118.75 227.758 118.75 227.786 118.75C227.814 118.75 227.842 118.75 227.87 118.75C227.898 118.75 227.926 118.75 227.954 118.75C227.982 118.75 228.01 118.75 228.037 118.75C228.065 118.75 228.093 118.75 228.121 118.75C228.149 118.75 228.176 118.75 228.204 118.75C228.232 118.75 228.26 118.75 228.288 118.75C228.315 118.75 228.343 118.75 228.371 118.75C228.398 118.75 228.426 118.75 228.454 118.75C228.482 118.75 228.509 118.75 228.537 118.75C228.564 118.75 228.592 118.75 228.62 118.75C228.647 118.75 228.675 118.75 228.702 118.75C228.73 118.75 228.758 118.75 228.785 118.75C228.813 118.75 228.84 118.75 228.868 118.75C228.895 118.75 228.923 118.75 228.95 118.75C228.978 118.75 229.005 118.75 229.033 118.75C229.06 118.75 229.087 118.75 229.115 118.75C229.142 118.75 229.17 118.75 229.197 118.75C229.224 118.75 229.252 118.75 229.279 118.75C229.306 118.75 229.334 118.75 229.361 118.75C229.388 118.75 229.415 118.75 229.443 118.75C229.47 118.75 229.497 118.75 229.524 118.75C229.552 118.75 229.579 118.75 229.606 118.75C229.633 118.75 229.66 118.75 229.687 118.75C229.714 118.75 229.742 118.75 229.769 118.75C229.796 118.75 229.823 118.75 229.85 118.75C229.877 118.75 229.904 118.75 229.931 118.75C229.958 118.75 229.985 118.75 230.012 118.75C230.039 118.75 230.066 118.75 230.093 118.75C230.12 118.75 230.147 118.75 230.173 118.75C230.2 118.75 230.227 118.75 230.254 118.75C230.281 118.75 230.308 118.75 230.334 118.75C230.361 118.75 230.388 118.75 230.415 118.75C230.442 118.75 230.468 118.75 230.495 118.75C230.522 118.75 230.548 118.75 230.575 118.75C230.602 118.75 230.628 118.75 230.655 118.75C230.682 118.75 230.708 118.75 230.735 118.75C230.761 118.75 230.788 118.75 230.814 118.75C230.841 118.75 230.867 118.75 230.894 118.75C230.92 118.75 230.947 118.75 230.973 118.75C231 118.75 231.026 118.75 231.052 118.75C231.079 118.75 231.105 118.75 231.132 118.75C231.158 118.75 231.184 118.75 231.211 118.75C231.237 118.75 231.263 118.75 231.289 118.75C231.316 118.75 231.342 118.75 231.368 118.75C231.394 118.75 231.42 118.75 231.446 118.75C231.473 118.75 231.499 118.75 231.525 118.75C231.551 118.75 231.577 118.75 231.603 118.75C231.629 118.75 231.655 118.75 231.681 118.75C231.707 118.75 231.733 118.75 231.759 118.75C231.785 118.75 231.811 118.75 231.837 118.75C231.863 118.75 231.889 118.75 231.914 118.75C231.94 118.75 231.966 118.75 231.992 118.75C232.018 118.75 232.043 118.75 232.069 118.75C232.095 118.75 232.121 118.75 232.146 118.75C232.172 118.75 232.198 118.75 232.223 118.75C232.249 118.75 232.275 118.75 232.3 118.75C232.326 118.75 232.351 118.75 232.377 118.75C232.402 118.75 232.428 118.75 232.453 118.75C232.479 118.75 232.504 118.75 232.53 118.75C232.555 118.75 232.58 118.75 232.606 118.75C232.631 118.75 232.657 118.75 232.682 118.75C232.707 118.75 232.732 118.75 232.758 118.75C232.783 118.75 232.808 118.75 232.833 118.75C232.859 118.75 232.884 118.75 232.909 118.75C232.934 118.75 232.959 118.75 232.984 118.75C233.009 118.75 233.034 118.75 233.059 118.75C233.084 118.75 233.109 118.75 233.134 118.75C233.159 118.75 233.184 118.75 233.209 118.75C233.234 118.75 233.259 118.75 233.284 118.75C233.309 118.75 233.334 118.75 233.358 118.75C233.383 118.75 233.408 118.75 233.433 118.75C233.457 118.75 233.482 118.75 233.507 118.75C233.531 118.75 233.556 118.75 233.581 118.75C233.605 118.75 233.63 118.75 233.654 118.75C233.679 118.75 233.704 118.75 233.728 118.75C233.752 118.75 233.777 118.75 233.801 118.75C233.826 118.75 233.85 118.75 233.875 118.75C233.899 118.75 233.923 118.75 233.948 118.75C233.972 118.75 233.996 118.75 234.02 118.75C234.045 118.75 234.069 118.75 234.093 118.75C234.117 118.75 234.141 118.75 234.165 118.75C234.19 118.75 234.214 118.75 234.238 118.75C234.262 118.75 234.286 118.75 234.31 118.75C234.334 118.75 234.358 118.75 234.382 118.75C234.406 118.75 234.429 118.75 234.453 118.75C234.477 118.75 234.501 118.75 234.525 118.75C234.549 118.75 234.572 118.75 234.596 118.75C234.62 118.75 234.644 118.75 234.667 118.75C234.691 118.75 234.714 118.75 234.738 118.75C234.762 118.75 234.785 118.75 234.809 118.75C234.832 118.75 234.856 118.75 234.879 118.75C234.903 118.75 234.926 118.75 234.949 118.75C234.973 118.75 234.996 118.75 235.02 118.75C235.043 118.75 235.066 118.75 235.089 118.75C235.113 118.75 235.136 118.75 235.159 118.75C235.182 118.75 235.205 118.75 235.229 118.75C235.252 118.75 235.275 118.75 235.298 118.75C235.321 118.75 235.344 118.75 235.367 118.75C235.39 118.75 235.413 118.75 235.436 118.75C235.458 118.75 235.481 118.75 235.504 118.75C235.527 118.75 235.55 118.75 235.573 118.75C235.595 118.75 235.618 118.75 235.641 118.75C235.663 118.75 235.686 118.75 235.709 118.75C235.731 118.75 235.754 118.75 235.776 118.75C235.799 118.75 235.821 118.75 235.844 118.75C235.866 118.75 235.889 118.75 235.911 118.75C235.934 118.75 235.956 118.75 235.978 118.75C236.001 118.75 236.023 118.75 236.045 118.75C236.067 118.75 236.09 118.75 236.112 118.75C236.134 118.75 236.156 118.75 236.178 118.75C236.2 118.75 236.222 118.75 236.244 118.75C236.266 118.75 236.288 118.75 236.31 118.75C236.332 118.75 236.354 118.75 236.376 118.75C236.398 118.75 236.42 118.75 236.441 118.75C236.463 118.75 236.485 118.75 236.507 118.75C236.528 118.75 236.55 118.75 236.572 118.75C236.593 118.75 236.615 118.75 236.637 118.75C236.658 118.75 236.68 118.75 236.701 118.75C236.723 118.75 236.744 118.75 236.765 118.75C236.787 118.75 236.808 118.75 236.829 118.75C236.851 118.75 236.872 118.75 236.893 118.75C236.915 118.75 236.936 118.75 236.957 118.75C236.978 118.75 236.999 118.75 237.02 118.75C237.041 118.75 237.062 118.75 237.083 118.75C237.104 118.75 237.125 118.75 237.146 118.75C237.167 118.75 237.188 118.75 237.209 118.75C237.23 118.75 237.25 118.75 237.271 118.75C237.292 118.75 237.313 118.75 237.333 118.75C237.354 118.75 237.375 118.75 237.395 118.75C237.416 118.75 237.436 118.75 237.457 118.75C237.477 118.75 237.498 118.75 237.518 118.75C237.539 118.75 237.559 118.75 237.579 118.75C237.6 118.75 237.62 118.75 237.64 118.75C237.66 118.75 237.681 118.75 237.701 118.75C237.721 118.75 237.741 118.75 237.761 118.75C237.781 118.75 237.801 118.75 237.821 118.75C237.841 118.75 237.861 118.75 237.881 118.75C237.901 118.75 237.921 118.75 237.941 118.75C237.96 118.75 237.98 118.75 238 118.75V120.25C237.98 120.25 237.96 120.25 237.941 120.25C237.921 120.25 237.901 120.25 237.881 120.25C237.861 120.25 237.841 120.25 237.821 120.25C237.801 120.25 237.781 120.25 237.761 120.25C237.741 120.25 237.721 120.25 237.701 120.25C237.681 120.25 237.66 120.25 237.64 120.25C237.62 120.25 237.6 120.25 237.579 120.25C237.559 120.25 237.539 120.25 237.518 120.25C237.498 120.25 237.477 120.25 237.457 120.25C237.436 120.25 237.416 120.25 237.395 120.25C237.375 120.25 237.354 120.25 237.333 120.25C237.313 120.25 237.292 120.25 237.271 120.25C237.25 120.25 237.23 120.25 237.209 120.25C237.188 120.25 237.167 120.25 237.146 120.25C237.125 120.25 237.104 120.25 237.083 120.25C237.062 120.25 237.041 120.25 237.02 120.25C236.999 120.25 236.978 120.25 236.957 120.25C236.936 120.25 236.915 120.25 236.893 120.25C236.872 120.25 236.851 120.25 236.829 120.25C236.808 120.25 236.787 120.25 236.765 120.25C236.744 120.25 236.723 120.25 236.701 120.25C236.68 120.25 236.658 120.25 236.637 120.25C236.615 120.25 236.593 120.25 236.572 120.25C236.55 120.25 236.528 120.25 236.507 120.25C236.485 120.25 236.463 120.25 236.441 120.25C236.42 120.25 236.398 120.25 236.376 120.25C236.354 120.25 236.332 120.25 236.31 120.25C236.288 120.25 236.266 120.25 236.244 120.25C236.222 120.25 236.2 120.25 236.178 120.25C236.156 120.25 236.134 120.25 236.112 120.25C236.09 120.25 236.067 120.25 236.045 120.25C236.023 120.25 236.001 120.25 235.978 120.25C235.956 120.25 235.934 120.25 235.911 120.25C235.889 120.25 235.866 120.25 235.844 120.25C235.821 120.25 235.799 120.25 235.776 120.25C235.754 120.25 235.731 120.25 235.709 120.25C235.686 120.25 235.663 120.25 235.641 120.25C235.618 120.25 235.595 120.25 235.573 120.25C235.55 120.25 235.527 120.25 235.504 120.25C235.481 120.25 235.458 120.25 235.436 120.25C235.413 120.25 235.39 120.25 235.367 120.25C235.344 120.25 235.321 120.25 235.298 120.25C235.275 120.25 235.252 120.25 235.229 120.25C235.205 120.25 235.182 120.25 235.159 120.25C235.136 120.25 235.113 120.25 235.089 120.25C235.066 120.25 235.043 120.25 235.02 120.25C234.996 120.25 234.973 120.25 234.949 120.25C234.926 120.25 234.903 120.25 234.879 120.25C234.856 120.25 234.832 120.25 234.809 120.25C234.785 120.25 234.762 120.25 234.738 120.25C234.714 120.25 234.691 120.25 234.667 120.25C234.644 120.25 234.62 120.25 234.596 120.25C234.572 120.25 234.549 120.25 234.525 120.25C234.501 120.25 234.477 120.25 234.453 120.25C234.429 120.25 234.406 120.25 234.382 120.25C234.358 120.25 234.334 120.25 234.31 120.25C234.286 120.25 234.262 120.25 234.238 120.25C234.214 120.25 234.19 120.25 234.165 120.25C234.141 120.25 234.117 120.25 234.093 120.25C234.069 120.25 234.045 120.25 234.02 120.25C233.996 120.25 233.972 120.25 233.948 120.25C233.923 120.25 233.899 120.25 233.875 120.25C233.85 120.25 233.826 120.25 233.801 120.25C233.777 120.25 233.752 120.25 233.728 120.25C233.704 120.25 233.679 120.25 233.654 120.25C233.63 120.25 233.605 120.25 233.581 120.25C233.556 120.25 233.531 120.25 233.507 120.25C233.482 120.25 233.457 120.25 233.433 120.25C233.408 120.25 233.383 120.25 233.358 120.25C233.334 120.25 233.309 120.25 233.284 120.25C233.259 120.25 233.234 120.25 233.209 120.25C233.184 120.25 233.159 120.25 233.134 120.25C233.109 120.25 233.084 120.25 233.059 120.25C233.034 120.25 233.009 120.25 232.984 120.25C232.959 120.25 232.934 120.25 232.909 120.25C232.884 120.25 232.859 120.25 232.833 120.25C232.808 120.25 232.783 120.25 232.758 120.25C232.732 120.25 232.707 120.25 232.682 120.25C232.657 120.25 232.631 120.25 232.606 120.25C232.58 120.25 232.555 120.25 232.53 120.25C232.504 120.25 232.479 120.25 232.453 120.25C232.428 120.25 232.402 120.25 232.377 120.25C232.351 120.25 232.326 120.25 232.3 120.25C232.275 120.25 232.249 120.25 232.223 120.25C232.198 120.25 232.172 120.25 232.146 120.25C232.121 120.25 232.095 120.25 232.069 120.25C232.043 120.25 232.018 120.25 231.992 120.25C231.966 120.25 231.94 120.25 231.914 120.25C231.889 120.25 231.863 120.25 231.837 120.25C231.811 120.25 231.785 120.25 231.759 120.25C231.733 120.25 231.707 120.25 231.681 120.25C231.655 120.25 231.629 120.25 231.603 120.25C231.577 120.25 231.551 120.25 231.525 120.25C231.499 120.25 231.473 120.25 231.446 120.25C231.42 120.25 231.394 120.25 231.368 120.25C231.342 120.25 231.316 120.25 231.289 120.25C231.263 120.25 231.237 120.25 231.211 120.25C231.184 120.25 231.158 120.25 231.132 120.25C231.105 120.25 231.079 120.25 231.052 120.25C231.026 120.25 231 120.25 230.973 120.25C230.947 120.25 230.92 120.25 230.894 120.25C230.867 120.25 230.841 120.25 230.814 120.25C230.788 120.25 230.761 120.25 230.735 120.25C230.708 120.25 230.682 120.25 230.655 120.25C230.628 120.25 230.602 120.25 230.575 120.25C230.548 120.25 230.522 120.25 230.495 120.25C230.468 120.25 230.442 120.25 230.415 120.25C230.388 120.25 230.361 120.25 230.334 120.25C230.308 120.25 230.281 120.25 230.254 120.25C230.227 120.25 230.2 120.25 230.173 120.25C230.147 120.25 230.12 120.25 230.093 120.25C230.066 120.25 230.039 120.25 230.012 120.25C229.985 120.25 229.958 120.25 229.931 120.25C229.904 120.25 229.877 120.25 229.85 120.25C229.823 120.25 229.796 120.25 229.769 120.25C229.742 120.25 229.714 120.25 229.687 120.25C229.66 120.25 229.633 120.25 229.606 120.25C229.579 120.25 229.552 120.25 229.524 120.25C229.497 120.25 229.47 120.25 229.443 120.25C229.415 120.25 229.388 120.25 229.361 120.25C229.334 120.25 229.306 120.25 229.279 120.25C229.252 120.25 229.224 120.25 229.197 120.25C229.17 120.25 229.142 120.25 229.115 120.25C229.087 120.25 229.06 120.25 229.033 120.25C229.005 120.25 228.978 120.25 228.95 120.25C228.923 120.25 228.895 120.25 228.868 120.25C228.84 120.25 228.813 120.25 228.785 120.25C228.758 120.25 228.73 120.25 228.702 120.25C228.675 120.25 228.647 120.25 228.62 120.25C228.592 120.25 228.564 120.25 228.537 120.25C228.509 120.25 228.482 120.25 228.454 120.25C228.426 120.25 228.398 120.25 228.371 120.25C228.343 120.25 228.315 120.25 228.288 120.25C228.26 120.25 228.232 120.25 228.204 120.25C228.176 120.25 228.149 120.25 228.121 120.25C228.093 120.25 228.065 120.25 228.037 120.25C228.01 120.25 227.982 120.25 227.954 120.25C227.926 120.25 227.898 120.25 227.87 120.25C227.842 120.25 227.814 120.25 227.786 120.25C227.758 120.25 227.73 120.25 227.702 120.25C227.675 120.25 227.647 120.25 227.619 120.25C227.591 120.25 227.563 120.25 227.534 120.25C227.506 120.25 227.478 120.25 227.45 120.25C227.422 120.25 227.394 120.25 227.366 120.25C227.338 120.25 227.31 120.25 227.282 120.25C227.254 120.25 227.226 120.25 227.197 120.25C227.169 120.25 227.141 120.25 227.113 120.25C227.085 120.25 227.057 120.25 227.028 120.25C227 120.25 226.972 120.25 226.944 120.25C226.916 120.25 226.887 120.25 226.859 120.25C226.831 120.25 226.803 120.25 226.774 120.25C226.746 120.25 226.718 120.25 226.689 120.25C226.661 120.25 226.633 120.25 226.604 120.25C226.576 120.25 226.548 120.25 226.519 120.25C226.491 120.25 226.463 120.25 226.434 120.25C226.406 120.25 226.378 120.25 226.349 120.25C226.321 120.25 226.292 120.25 226.264 120.25C226.236 120.25 226.207 120.25 226.179 120.25C226.15 120.25 226.122 120.25 226.093 120.25C226.065 120.25 226.036 120.25 226.008 120.25C225.979 120.25 225.951 120.25 225.922 120.25C225.894 120.25 225.865 120.25 225.837 120.25C225.808 120.25 225.78 120.25 225.751 120.25C225.723 120.25 225.694 120.25 225.665 120.25C225.637 120.25 225.608 120.25 225.58 120.25C225.551 120.25 225.522 120.25 225.494 120.25C225.465 120.25 225.437 120.25 225.408 120.25C225.379 120.25 225.351 120.25 225.322 120.25C225.293 120.25 225.265 120.25 225.236 120.25C225.207 120.25 225.179 120.25 225.15 120.25C225.121 120.25 225.093 120.25 225.064 120.25C225.035 120.25 225.006 120.25 224.978 120.25C224.949 120.25 224.92 120.25 224.892 120.25C224.863 120.25 224.834 120.25 224.805 120.25C224.777 120.25 224.748 120.25 224.719 120.25C224.69 120.25 224.661 120.25 224.633 120.25C224.604 120.25 224.575 120.25 224.546 120.25C224.517 120.25 224.489 120.25 224.46 120.25C224.431 120.25 224.402 120.25 224.373 120.25C224.344 120.25 224.316 120.25 224.287 120.25C224.258 120.25 224.229 120.25 224.2 120.25C224.171 120.25 224.142 120.25 224.114 120.25C224.085 120.25 224.056 120.25 224.027 120.25C223.998 120.25 223.969 120.25 223.94 120.25C223.911 120.25 223.882 120.25 223.854 120.25C223.825 120.25 223.796 120.25 223.767 120.25C223.738 120.25 223.709 120.25 223.68 120.25C223.651 120.25 223.622 120.25 223.593 120.25C223.564 120.25 223.535 120.25 223.506 120.25C223.477 120.25 223.448 120.25 223.419 120.25C223.39 120.25 223.361 120.25 223.333 120.25C223.304 120.25 223.275 120.25 223.246 120.25C223.217 120.25 223.188 120.25 223.159 120.25C223.13 120.25 223.101 120.25 223.072 120.25C223.043 120.25 223.014 120.25 222.985 120.25C222.956 120.25 222.927 120.25 222.898 120.25C222.869 120.25 222.839 120.25 222.81 120.25C222.781 120.25 222.752 120.25 222.723 120.25C222.694 120.25 222.665 120.25 222.636 120.25C222.607 120.25 222.578 120.25 222.549 120.25C222.52 120.25 222.491 120.25 222.462 120.25C222.433 120.25 222.404 120.25 222.375 120.25C222.346 120.25 222.317 120.25 222.288 120.25C222.259 120.25 222.23 120.25 222.201 120.25C222.171 120.25 222.142 120.25 222.113 120.25C222.084 120.25 222.055 120.25 222.026 120.25C221.997 120.25 221.968 120.25 221.939 120.25C221.91 120.25 221.881 120.25 221.852 120.25C221.823 120.25 221.794 120.25 221.764 120.25C221.735 120.25 221.706 120.25 221.677 120.25C221.648 120.25 221.619 120.25 221.59 120.25C221.561 120.25 221.532 120.25 221.503 120.25C221.474 120.25 221.445 120.25 221.415 120.25C221.386 120.25 221.357 120.25 221.328 120.25C221.299 120.25 221.27 120.25 221.241 120.25C221.212 120.25 221.183 120.25 221.154 120.25C221.125 120.25 221.096 120.25 221.066 120.25C221.037 120.25 221.008 120.25 220.979 120.25C220.95 120.25 220.921 120.25 220.892 120.25C220.863 120.25 220.834 120.25 220.805 120.25C220.776 120.25 220.747 120.25 220.718 120.25C220.688 120.25 220.659 120.25 220.63 120.25C220.601 120.25 220.572 120.25 220.543 120.25C220.514 120.25 220.485 120.25 220.456 120.25C220.427 120.25 220.398 120.25 220.369 120.25C220.34 120.25 220.311 120.25 220.282 120.25C220.253 120.25 220.224 120.25 220.194 120.25C220.165 120.25 220.136 120.25 220.107 120.25C220.078 120.25 220.049 120.25 220.02 120.25C219.991 120.25 219.962 120.25 219.933 120.25C219.904 120.25 219.875 120.25 219.846 120.25C219.817 120.25 219.788 120.25 219.759 120.25C219.73 120.25 219.701 120.25 219.672 120.25C219.643 120.25 219.614 120.25 219.585 120.25C219.556 120.25 219.527 120.25 219.498 120.25C219.469 120.25 219.44 120.25 219.411 120.25C219.382 120.25 219.353 120.25 219.324 120.25C219.295 120.25 219.266 120.25 219.237 120.25C219.208 120.25 219.179 120.25 219.15 120.25C219.121 120.25 219.092 120.25 219.063 120.25C219.035 120.25 219.006 120.25 218.977 120.25C218.948 120.25 218.919 120.25 218.89 120.25C218.861 120.25 218.832 120.25 218.803 120.25C218.774 120.25 218.745 120.25 218.716 120.25C218.688 120.25 218.659 120.25 218.63 120.25C218.601 120.25 218.572 120.25 218.543 120.25C218.514 120.25 218.485 120.25 218.457 120.25C218.428 120.25 218.399 120.25 218.37 120.25C218.341 120.25 218.312 120.25 218.284 120.25C218.255 120.25 218.226 120.25 218.197 120.25C218.168 120.25 218.139 120.25 218.111 120.25C218.082 120.25 218.053 120.25 218.024 120.25C217.995 120.25 217.967 120.25 217.938 120.25C217.909 120.25 217.88 120.25 217.852 120.25C217.823 120.25 217.794 120.25 217.765 120.25C217.737 120.25 217.708 120.25 217.679 120.25C217.651 120.25 217.622 120.25 217.593 120.25C217.564 120.25 217.536 120.25 217.507 120.25C217.478 120.25 217.45 120.25 217.421 120.25C217.392 120.25 217.364 120.25 217.335 120.25C217.306 120.25 217.278 120.25 217.249 120.25C217.221 120.25 217.192 120.25 217.163 120.25C217.135 120.25 217.106 120.25 217.078 120.25C217.049 120.25 217.02 120.25 216.992 120.25C216.963 120.25 216.935 120.25 216.906 120.25C216.878 120.25 216.849 120.25 216.821 120.25C216.792 120.25 216.764 120.25 216.735 120.25C216.707 120.25 216.678 120.25 216.65 120.25C216.621 120.25 216.593 120.25 216.564 120.25C216.536 120.25 216.507 120.25 216.479 120.25C216.45 120.25 216.422 120.25 216.394 120.25C216.365 120.25 216.337 120.25 216.308 120.25C216.28 120.25 216.252 120.25 216.223 120.25C216.195 120.25 216.166 120.25 216.138 120.25C216.11 120.25 216.081 120.25 216.053 120.25C216.025 120.25 215.997 120.25 215.968 120.25C215.94 120.25 215.912 120.25 215.883 120.25C215.855 120.25 215.827 120.25 215.799 120.25C215.77 120.25 215.742 120.25 215.714 120.25C215.686 120.25 215.658 120.25 215.629 120.25C215.601 120.25 215.573 120.25 215.545 120.25C215.517 120.25 215.489 120.25 215.46 120.25C215.432 120.25 215.404 120.25 215.376 120.25C215.348 120.25 215.32 120.25 215.292 120.25C215.264 120.25 215.236 120.25 215.208 120.25C215.18 120.25 215.152 120.25 215.124 120.25C215.096 120.25 215.068 120.25 215.04 120.25C215.012 120.25 214.984 120.25 214.956 120.25C214.928 120.25 214.9 120.25 214.872 120.25C214.844 120.25 214.816 120.25 214.788 120.25C214.76 120.25 214.732 120.25 214.705 120.25C214.677 120.25 214.649 120.25 214.621 120.25C214.593 120.25 214.565 120.25 214.538 120.25C214.51 120.25 214.482 120.25 214.454 120.25C214.426 120.25 214.399 120.25 214.371 120.25C214.343 120.25 214.316 120.25 214.288 120.25C214.26 120.25 214.232 120.25 214.205 120.25C214.177 120.25 214.15 120.25 214.122 120.25C214.094 120.25 214.067 120.25 214.039 120.25C214.011 120.25 213.984 120.25 213.956 120.25C213.929 120.25 213.901 120.25 213.874 120.25C213.846 120.25 213.819 120.25 213.791 120.25C213.764 120.25 213.736 120.25 213.709 120.25C213.681 120.25 213.654 120.25 213.626 120.25C213.599 120.25 213.572 120.25 213.544 120.25C213.517 120.25 213.49 120.25 213.462 120.25C213.435 120.25 213.408 120.25 213.38 120.25C213.353 120.25 213.326 120.25 213.298 120.25C213.271 120.25 213.244 120.25 213.217 120.25C213.189 120.25 213.162 120.25 213.135 120.25C213.108 120.25 213.081 120.25 213.054 120.25C213.026 120.25 212.999 120.25 212.972 120.25C212.945 120.25 212.918 120.25 212.891 120.25C212.864 120.25 212.837 120.25 212.81 120.25C212.783 120.25 212.756 120.25 212.729 120.25C212.702 120.25 212.675 120.25 212.648 120.25C212.621 120.25 212.594 120.25 212.567 120.25C212.54 120.25 212.513 120.25 212.487 120.25C212.46 120.25 212.433 120.25 212.406 120.25C212.379 120.25 212.352 120.25 212.326 120.25C212.299 120.25 212.272 120.25 212.245 120.25C212.219 120.25 212.192 120.25 212.165 120.25C212.139 120.25 212.112 120.25 212.085 120.25C212.059 120.25 212.032 120.25 212.005 120.25C211.979 120.25 211.952 120.25 211.926 120.25C211.899 120.25 211.873 120.25 211.846 120.25C211.82 120.25 211.793 120.25 211.767 120.25C211.74 120.25 211.714 120.25 211.687 120.25C211.661 120.25 211.635 120.25 211.608 120.25C211.582 120.25 211.556 120.25 211.529 120.25C211.503 120.25 211.477 120.25 211.45 120.25C211.424 120.25 211.398 120.25 211.372 120.25C211.345 120.25 211.319 120.25 211.293 120.25C211.267 120.25 211.241 120.25 211.215 120.25C211.189 120.25 211.162 120.25 211.136 120.25C211.11 120.25 211.084 120.25 211.058 120.25C211.032 120.25 211.006 120.25 210.98 120.25C210.954 120.25 210.928 120.25 210.902 120.25C210.876 120.25 210.851 120.25 210.825 120.25C210.799 120.25 210.773 120.25 210.747 120.25C210.721 120.25 210.696 120.25 210.67 120.25C210.644 120.25 210.618 120.25 210.593 120.25C210.567 120.25 210.541 120.25 210.515 120.25C210.49 120.25 210.464 120.25 210.439 120.25C210.413 120.25 210.387 120.25 210.362 120.25C210.336 120.25 210.311 120.25 210.285 120.25C210.26 120.25 210.234 120.25 210.209 120.25C210.183 120.25 210.158 120.25 210.133 120.25C210.107 120.25 210.082 120.25 210.056 120.25C210.031 120.25 210.006 120.25 209.981 120.25C209.955 120.25 209.93 120.25 209.905 120.25C209.88 120.25 209.854 120.25 209.829 120.25C209.804 120.25 209.779 120.25 209.754 120.25C209.729 120.25 209.704 120.25 209.679 120.25C209.653 120.25 209.628 120.25 209.603 120.25C209.578 120.25 209.554 120.25 209.529 120.25C209.504 120.25 209.479 120.25 209.454 120.25C209.429 120.25 209.404 120.25 209.379 120.25C209.354 120.25 209.33 120.25 209.305 120.25C209.28 120.25 209.255 120.25 209.231 120.25C209.206 120.25 209.181 120.25 209.157 120.25C209.132 120.25 209.107 120.25 209.083 120.25C209.058 120.25 209.034 120.25 209.009 120.25C208.985 120.25 208.96 120.25 208.936 120.25C208.911 120.25 208.887 120.25 208.862 120.25C208.838 120.25 208.814 120.25 208.789 120.25C208.765 120.25 208.741 120.25 208.716 120.25C208.692 120.25 208.668 120.25 208.644 120.25C208.62 120.25 208.595 120.25 208.571 120.25C208.547 120.25 208.523 120.25 208.499 120.25C208.475 120.25 208.451 120.25 208.427 120.25C208.403 120.25 208.379 120.25 208.355 120.25C208.331 120.25 208.307 120.25 208.283 120.25C208.259 120.25 208.235 120.25 208.211 120.25C208.188 120.25 208.164 120.25 208.14 120.25C208.116 120.25 208.093 120.25 208.069 120.25C208.045 120.25 208.021 120.25 207.998 120.25C207.974 120.25 207.951 120.25 207.927 120.25C207.904 120.25 207.88 120.25 207.857 120.25C207.833 120.25 207.81 120.25 207.786 120.25C207.763 120.25 207.739 120.25 207.716 120.25C207.693 120.25 207.669 120.25 207.646 120.25C207.623 120.25 207.599 120.25 207.576 120.25C207.553 120.25 207.53 120.25 207.507 120.25C207.484 120.25 207.46 120.25 207.437 120.25C207.414 120.25 207.391 120.25 207.368 120.25C207.345 120.25 207.322 120.25 207.299 120.25C207.276 120.25 207.254 120.25 207.231 120.25C207.208 120.25 207.185 120.25 207.162 120.25C207.139 120.25 207.117 120.25 207.094 120.25C207.071 120.25 207.049 120.25 207.026 120.25C207.003 120.25 206.981 120.25 206.958 120.25C206.935 120.25 206.913 120.25 206.89 120.25C206.868 120.25 206.845 120.25 206.823 120.25C206.801 120.25 206.778 120.25 206.756 120.25C206.733 120.25 206.711 120.25 206.689 120.25C206.667 120.25 206.644 120.25 206.622 120.25C206.6 120.25 206.578 120.25 206.556 120.25C206.534 120.25 206.511 120.25 206.489 120.25C206.467 120.25 206.445 120.25 206.423 120.25C206.401 120.25 206.379 120.25 206.357 120.25C206.336 120.25 206.314 120.25 206.292 120.25C206.27 120.25 206.248 120.25 206.227 120.25C206.205 120.25 206.183 120.25 206.161 120.25C206.14 120.25 206.118 120.25 206.097 120.25C206.075 120.25 206.053 120.25 206.032 120.25C206.01 120.25 205.989 120.25 205.967 120.25C205.946 120.25 205.925 120.25 205.903 120.25C205.882 120.25 205.861 120.25 205.839 120.25C205.818 120.25 205.797 120.25 205.776 120.25C205.754 120.25 205.733 120.25 205.712 120.25C205.691 120.25 205.67 120.25 205.649 120.25C205.628 120.25 205.607 120.25 205.586 120.25C205.565 120.25 205.544 120.25 205.523 120.25C205.502 120.25 205.481 120.25 205.461 120.25C205.44 120.25 205.419 120.25 205.398 120.25C205.378 120.25 205.357 120.25 205.336 120.25C205.316 120.25 205.295 120.25 205.275 120.25C205.254 120.25 205.234 120.25 205.213 120.25C205.193 120.25 205.172 120.25 205.152 120.25C205.132 120.25 205.111 120.25 205.091 120.25C205.071 120.25 205.05 120.25 205.03 120.25C205.01 120.25 204.99 120.25 204.97 120.25C204.95 120.25 204.93 120.25 204.91 120.25C204.89 120.25 204.87 120.25 204.85 120.25C204.83 120.25 204.81 120.25 204.79 120.25C204.77 120.25 204.75 120.25 204.73 120.25C204.711 120.25 204.691 120.25 204.671 120.25C204.652 120.25 204.632 120.25 204.612 120.25C204.593 120.25 204.573 120.25 204.554 120.25C204.534 120.25 204.515 120.25 204.495 120.25C204.476 120.25 204.457 120.25 204.437 120.25C204.418 120.25 204.399 120.25 204.379 120.25C204.36 120.25 204.341 120.25 204.322 120.25C204.303 120.25 204.284 120.25 204.264 120.25C204.245 120.25 204.226 120.25 204.207 120.25C204.188 120.25 204.17 120.25 204.151 120.25C204.132 120.25 204.113 120.25 204.094 120.25C204.075 120.25 204.057 120.25 204.038 120.25C204.019 120.25 204.001 120.25 203.982 120.25C203.963 120.25 203.945 120.25 203.926 120.25C203.908 120.25 203.889 120.25 203.871 120.25C203.853 120.25 203.834 120.25 203.816 120.25C203.798 120.25 203.779 120.25 203.761 120.25C203.743 120.25 203.725 120.25 203.707 120.25C203.688 120.25 203.67 120.25 203.652 120.25C203.634 120.25 203.616 120.25 203.598 120.25C203.58 120.25 203.562 120.25 203.545 120.25C203.527 120.25 203.509 120.25 203.491 120.25C203.474 120.25 203.456 120.25 203.438 120.25C203.42 120.25 203.403 120.25 203.385 120.25C203.368 120.25 203.35 120.25 203.333 120.25C203.315 120.25 203.298 120.25 203.281 120.25C203.263 120.25 203.246 120.25 203.229 120.25C203.211 120.25 203.194 120.25 203.177 120.25C203.16 120.25 203.143 120.25 203.126 120.25C203.109 120.25 203.092 120.25 203.075 120.25C203.058 120.25 203.041 120.25 203.024 120.25C203.007 120.25 202.99 120.25 202.973 120.25C202.957 120.25 202.94 120.25 202.923 120.25C202.907 120.25 202.89 120.25 202.873 120.25C202.857 120.25 202.84 120.25 202.824 120.25C202.807 120.25 202.791 120.25 202.775 120.25C202.758 120.25 202.742 120.25 202.726 120.25C202.709 120.25 202.693 120.25 202.677 120.25C202.661 120.25 202.645 120.25 202.629 120.25C202.613 120.25 202.597 120.25 202.581 120.25C202.565 120.25 202.549 120.25 202.533 120.25C202.517 120.25 202.501 120.25 202.486 120.25C202.47 120.25 202.454 120.25 202.439 120.25C202.423 120.25 202.407 120.25 202.392 120.25C202.376 120.25 202.361 120.25 202.345 120.25C202.33 120.25 202.315 120.25 202.299 120.25C202.284 120.25 202.269 120.25 202.254 120.25C202.238 120.25 202.223 120.25 202.208 120.25C202.193 120.25 202.178 120.25 202.163 120.25C202.148 120.25 202.133 120.25 202.118 120.25C202.103 120.25 202.088 120.25 202.074 120.25C202.059 120.25 202.044 120.25 202.029 120.25C202.015 120.25 202 120.25 201.986 120.25C201.971 120.25 201.956 120.25 201.942 120.25C201.928 120.25 201.913 120.25 201.899 120.25C201.884 120.25 201.87 120.25 201.856 120.25C201.842 120.25 201.828 120.25 201.813 120.25C201.799 120.25 201.785 120.25 201.771 120.25C201.757 120.25 201.743 120.25 201.729 120.25C201.715 120.25 201.702 120.25 201.688 120.25C201.674 120.25 201.66 120.25 201.647 120.25C201.633 120.25 201.619 120.25 201.606 120.25C201.592 120.25 201.579 120.25 201.565 120.25C201.552 120.25 201.538 120.25 201.525 120.25C201.512 120.25 201.498 120.25 201.485 120.25C201.472 120.25 201.459 120.25 201.446 120.25C201.432 120.25 201.419 120.25 201.406 120.25C201.393 120.25 201.38 120.25 201.368 120.25C201.355 120.25 201.342 120.25 201.329 120.25C201.316 120.25 201.304 120.25 201.291 120.25C201.278 120.25 201.266 120.25 201.253 120.25C201.241 120.25 201.228 120.25 201.216 120.25C201.203 120.25 201.191 120.25 201.179 120.25C201.166 120.25 201.154 120.25 201.142 120.25C201.13 120.25 201.118 120.25 201.106 120.25C201.093 120.25 201.081 120.25 201.07 120.25C201.058 120.25 201.046 120.25 201.034 120.25C201.022 120.25 201.01 120.25 200.999 120.25C200.987 120.25 200.975 120.25 200.964 120.25C200.952 120.25 200.94 120.25 200.929 120.25C200.917 120.25 200.906 120.25 200.895 120.25C200.883 120.25 200.872 120.25 200.861 120.25C200.85 120.25 200.838 120.25 200.827 120.25C200.816 120.25 200.805 120.25 200.794 120.25C200.783 120.25 200.772 120.25 200.761 120.25V118.75Z\"\n          fill=\"url(#paint3_linear_38_7016)\"\n        />\n        <path\n          d=\"M164 52C164 49.7909 165.791 48 168 48C170.209 48 172 49.7909 172 52C172 54.2091 170.209 56 168 56C165.791 56 164 54.2091 164 52ZM238.53 51.4697C238.823 51.7626 238.823 52.2374 238.53 52.5303L233.757 57.3033C233.464 57.5962 232.99 57.5962 232.697 57.3033C232.404 57.0104 232.404 56.5355 232.697 56.2426L236.939 52L232.697 47.7574C232.404 47.4645 232.404 46.9896 232.697 46.6967C232.99 46.4038 233.464 46.4038 233.757 46.6967L238.53 51.4697ZM168 51.25C168.006 51.25 168.013 51.25 168.02 51.25C168.027 51.25 168.034 51.25 168.041 51.25C168.049 51.25 168.056 51.25 168.064 51.25C168.072 51.25 168.08 51.25 168.088 51.25C168.096 51.25 168.104 51.25 168.113 51.25C168.121 51.25 168.13 51.25 168.139 51.25C168.148 51.25 168.157 51.25 168.166 51.25C168.176 51.25 168.185 51.25 168.195 51.25C168.205 51.25 168.215 51.25 168.225 51.25C168.235 51.25 168.246 51.25 168.256 51.25C168.267 51.25 168.278 51.25 168.289 51.25C168.3 51.25 168.311 51.25 168.322 51.25C168.334 51.25 168.345 51.25 168.357 51.25C168.369 51.25 168.381 51.25 168.393 51.25C168.405 51.25 168.418 51.25 168.43 51.25C168.443 51.25 168.456 51.25 168.469 51.25C168.481 51.25 168.495 51.25 168.508 51.25C168.521 51.25 168.535 51.25 168.549 51.25C168.563 51.25 168.577 51.25 168.591 51.25C168.605 51.25 168.619 51.25 168.634 51.25C168.648 51.25 168.663 51.25 168.678 51.25C168.693 51.25 168.708 51.25 168.723 51.25C168.739 51.25 168.754 51.25 168.77 51.25C168.786 51.25 168.802 51.25 168.818 51.25C168.834 51.25 168.85 51.25 168.867 51.25C168.883 51.25 168.9 51.25 168.917 51.25C168.933 51.25 168.95 51.25 168.968 51.25C168.985 51.25 169.002 51.25 169.02 51.25C169.038 51.25 169.055 51.25 169.073 51.25C169.091 51.25 169.109 51.25 169.128 51.25C169.146 51.25 169.165 51.25 169.183 51.25C169.202 51.25 169.221 51.25 169.24 51.25C169.259 51.25 169.279 51.25 169.298 51.25C169.318 51.25 169.337 51.25 169.357 51.25C169.377 51.25 169.397 51.25 169.417 51.25C169.437 51.25 169.458 51.25 169.478 51.25C169.499 51.25 169.52 51.25 169.541 51.25C169.561 51.25 169.583 51.25 169.604 51.25C169.625 51.25 169.647 51.25 169.668 51.25C169.69 51.25 169.712 51.25 169.734 51.25C169.756 51.25 169.778 51.25 169.8 51.25C169.823 51.25 169.845 51.25 169.868 51.25C169.891 51.25 169.914 51.25 169.937 51.25C169.96 51.25 169.983 51.25 170.006 51.25C170.03 51.25 170.053 51.25 170.077 51.25C170.101 51.25 170.125 51.25 170.149 51.25C170.173 51.25 170.198 51.25 170.222 51.25C170.246 51.25 170.271 51.25 170.296 51.25C170.321 51.25 170.346 51.25 170.371 51.25C170.396 51.25 170.421 51.25 170.447 51.25C170.472 51.25 170.498 51.25 170.524 51.25C170.55 51.25 170.576 51.25 170.602 51.25C170.628 51.25 170.654 51.25 170.681 51.25C170.708 51.25 170.734 51.25 170.761 51.25C170.788 51.25 170.815 51.25 170.842 51.25C170.869 51.25 170.897 51.25 170.924 51.25C170.952 51.25 170.979 51.25 171.007 51.25C171.035 51.25 171.063 51.25 171.091 51.25C171.12 51.25 171.148 51.25 171.176 51.25C171.205 51.25 171.234 51.25 171.262 51.25C171.291 51.25 171.32 51.25 171.349 51.25C171.379 51.25 171.408 51.25 171.437 51.25C171.467 51.25 171.497 51.25 171.526 51.25C171.556 51.25 171.586 51.25 171.616 51.25C171.646 51.25 171.677 51.25 171.707 51.25C171.738 51.25 171.768 51.25 171.799 51.25C171.83 51.25 171.861 51.25 171.892 51.25C171.923 51.25 171.954 51.25 171.986 51.25C172.017 51.25 172.049 51.25 172.08 51.25C172.112 51.25 172.144 51.25 172.176 51.25C172.208 51.25 172.24 51.25 172.272 51.25C172.305 51.25 172.337 51.25 172.37 51.25C172.402 51.25 172.435 51.25 172.468 51.25C172.501 51.25 172.534 51.25 172.568 51.25C172.601 51.25 172.634 51.25 172.668 51.25C172.701 51.25 172.735 51.25 172.769 51.25C172.803 51.25 172.837 51.25 172.871 51.25C172.905 51.25 172.939 51.25 172.974 51.25C173.008 51.25 173.043 51.25 173.078 51.25C173.112 51.25 173.147 51.25 173.182 51.25C173.217 51.25 173.253 51.25 173.288 51.25C173.323 51.25 173.359 51.25 173.394 51.25C173.43 51.25 173.466 51.25 173.502 51.25C173.538 51.25 173.574 51.25 173.61 51.25C173.646 51.25 173.683 51.25 173.719 51.25C173.756 51.25 173.792 51.25 173.829 51.25C173.866 51.25 173.903 51.25 173.94 51.25C173.977 51.25 174.014 51.25 174.051 51.25C174.089 51.25 174.126 51.25 174.164 51.25C174.201 51.25 174.239 51.25 174.277 51.25C174.315 51.25 174.353 51.25 174.391 51.25C174.43 51.25 174.468 51.25 174.506 51.25C174.545 51.25 174.583 51.25 174.622 51.25C174.661 51.25 174.7 51.25 174.739 51.25C174.778 51.25 174.817 51.25 174.856 51.25C174.896 51.25 174.935 51.25 174.975 51.25C175.014 51.25 175.054 51.25 175.094 51.25C175.134 51.25 175.173 51.25 175.214 51.25C175.254 51.25 175.294 51.25 175.334 51.25C175.375 51.25 175.415 51.25 175.456 51.25C175.496 51.25 175.537 51.25 175.578 51.25C175.619 51.25 175.66 51.25 175.701 51.25C175.742 51.25 175.784 51.25 175.825 51.25C175.866 51.25 175.908 51.25 175.95 51.25C175.991 51.25 176.033 51.25 176.075 51.25C176.117 51.25 176.159 51.25 176.201 51.25C176.243 51.25 176.286 51.25 176.328 51.25C176.37 51.25 176.413 51.25 176.456 51.25C176.498 51.25 176.541 51.25 176.584 51.25C176.627 51.25 176.67 51.25 176.713 51.25C176.757 51.25 176.8 51.25 176.843 51.25C176.887 51.25 176.93 51.25 176.974 51.25C177.018 51.25 177.061 51.25 177.105 51.25C177.149 51.25 177.193 51.25 177.237 51.25C177.282 51.25 177.326 51.25 177.37 51.25C177.415 51.25 177.459 51.25 177.504 51.25C177.548 51.25 177.593 51.25 177.638 51.25C177.683 51.25 177.728 51.25 177.773 51.25C177.818 51.25 177.863 51.25 177.909 51.25C177.954 51.25 178 51.25 178.045 51.25C178.091 51.25 178.136 51.25 178.182 51.25C178.228 51.25 178.274 51.25 178.32 51.25C178.366 51.25 178.412 51.25 178.459 51.25C178.505 51.25 178.551 51.25 178.598 51.25C178.644 51.25 178.691 51.25 178.738 51.25C178.784 51.25 178.831 51.25 178.878 51.25C178.925 51.25 178.972 51.25 179.019 51.25C179.066 51.25 179.114 51.25 179.161 51.25C179.208 51.25 179.256 51.25 179.304 51.25C179.351 51.25 179.399 51.25 179.447 51.25C179.495 51.25 179.542 51.25 179.59 51.25C179.639 51.25 179.687 51.25 179.735 51.25C179.783 51.25 179.832 51.25 179.88 51.25C179.928 51.25 179.977 51.25 180.026 51.25C180.074 51.25 180.123 51.25 180.172 51.25C180.221 51.25 180.27 51.25 180.319 51.25C180.368 51.25 180.417 51.25 180.467 51.25C180.516 51.25 180.565 51.25 180.615 51.25C180.664 51.25 180.714 51.25 180.764 51.25C180.813 51.25 180.863 51.25 180.913 51.25C180.963 51.25 181.013 51.25 181.063 51.25C181.113 51.25 181.163 51.25 181.214 51.25C181.264 51.25 181.314 51.25 181.365 51.25C181.415 51.25 181.466 51.25 181.517 51.25C181.567 51.25 181.618 51.25 181.669 51.25C181.72 51.25 181.771 51.25 181.822 51.25C181.873 51.25 181.924 51.25 181.976 51.25C182.027 51.25 182.078 51.25 182.13 51.25C182.181 51.25 182.233 51.25 182.284 51.25C182.336 51.25 182.388 51.25 182.44 51.25C182.492 51.25 182.544 51.25 182.596 51.25C182.648 51.25 182.7 51.25 182.752 51.25C182.804 51.25 182.856 51.25 182.909 51.25C182.961 51.25 183.014 51.25 183.066 51.25C183.119 51.25 183.171 51.25 183.224 51.25C183.277 51.25 183.33 51.25 183.383 51.25C183.436 51.25 183.489 51.25 183.542 51.25C183.595 51.25 183.648 51.25 183.701 51.25C183.755 51.25 183.808 51.25 183.861 51.25C183.915 51.25 183.968 51.25 184.022 51.25C184.076 51.25 184.129 51.25 184.183 51.25C184.237 51.25 184.291 51.25 184.345 51.25C184.399 51.25 184.453 51.25 184.507 51.25C184.561 51.25 184.615 51.25 184.669 51.25C184.724 51.25 184.778 51.25 184.832 51.25C184.887 51.25 184.941 51.25 184.996 51.25C185.05 51.25 185.105 51.25 185.16 51.25C185.215 51.25 185.27 51.25 185.324 51.25C185.379 51.25 185.434 51.25 185.489 51.25C185.545 51.25 185.6 51.25 185.655 51.25C185.71 51.25 185.765 51.25 185.821 51.25C185.876 51.25 185.932 51.25 185.987 51.25C186.043 51.25 186.098 51.25 186.154 51.25C186.21 51.25 186.265 51.25 186.321 51.25C186.377 51.25 186.433 51.25 186.489 51.25C186.545 51.25 186.601 51.25 186.657 51.25C186.713 51.25 186.769 51.25 186.826 51.25C186.882 51.25 186.938 51.25 186.995 51.25C187.051 51.25 187.108 51.25 187.164 51.25C187.221 51.25 187.277 51.25 187.334 51.25C187.391 51.25 187.447 51.25 187.504 51.25C187.561 51.25 187.618 51.25 187.675 51.25C187.732 51.25 187.789 51.25 187.846 51.25C187.903 51.25 187.96 51.25 188.018 51.25C188.075 51.25 188.132 51.25 188.189 51.25C188.247 51.25 188.304 51.25 188.362 51.25C188.419 51.25 188.477 51.25 188.534 51.25C188.592 51.25 188.65 51.25 188.707 51.25C188.765 51.25 188.823 51.25 188.881 51.25C188.939 51.25 188.997 51.25 189.055 51.25C189.113 51.25 189.171 51.25 189.229 51.25C189.287 51.25 189.345 51.25 189.403 51.25C189.462 51.25 189.52 51.25 189.578 51.25C189.637 51.25 189.695 51.25 189.753 51.25C189.812 51.25 189.87 51.25 189.929 51.25C189.988 51.25 190.046 51.25 190.105 51.25C190.164 51.25 190.222 51.25 190.281 51.25C190.34 51.25 190.399 51.25 190.458 51.25C190.517 51.25 190.576 51.25 190.635 51.25C190.694 51.25 190.753 51.25 190.812 51.25C190.871 51.25 190.93 51.25 190.989 51.25C191.049 51.25 191.108 51.25 191.167 51.25C191.227 51.25 191.286 51.25 191.346 51.25C191.405 51.25 191.465 51.25 191.524 51.25C191.584 51.25 191.643 51.25 191.703 51.25C191.763 51.25 191.822 51.25 191.882 51.25C191.942 51.25 192.002 51.25 192.061 51.25C192.121 51.25 192.181 51.25 192.241 51.25C192.301 51.25 192.361 51.25 192.421 51.25C192.481 51.25 192.541 51.25 192.601 51.25C192.661 51.25 192.722 51.25 192.782 51.25C192.842 51.25 192.902 51.25 192.963 51.25C193.023 51.25 193.083 51.25 193.144 51.25C193.204 51.25 193.265 51.25 193.325 51.25C193.385 51.25 193.446 51.25 193.507 51.25C193.567 51.25 193.628 51.25 193.688 51.25C193.749 51.25 193.81 51.25 193.87 51.25C193.931 51.25 193.992 51.25 194.053 51.25C194.114 51.25 194.174 51.25 194.235 51.25C194.296 51.25 194.357 51.25 194.418 51.25C194.479 51.25 194.54 51.25 194.601 51.25C194.662 51.25 194.723 51.25 194.784 51.25C194.845 51.25 194.907 51.25 194.968 51.25C195.029 51.25 195.09 51.25 195.151 51.25C195.213 51.25 195.274 51.25 195.335 51.25C195.397 51.25 195.458 51.25 195.519 51.25C195.581 51.25 195.642 51.25 195.704 51.25C195.765 51.25 195.826 51.25 195.888 51.25C195.949 51.25 196.011 51.25 196.073 51.25C196.134 51.25 196.196 51.25 196.257 51.25C196.319 51.25 196.381 51.25 196.442 51.25C196.504 51.25 196.566 51.25 196.628 51.25C196.689 51.25 196.751 51.25 196.813 51.25C196.875 51.25 196.937 51.25 196.998 51.25C197.06 51.25 197.122 51.25 197.184 51.25C197.246 51.25 197.308 51.25 197.37 51.25C197.432 51.25 197.494 51.25 197.556 51.25C197.618 51.25 197.68 51.25 197.742 51.25C197.804 51.25 197.866 51.25 197.928 51.25C197.991 51.25 198.053 51.25 198.115 51.25C198.177 51.25 198.239 51.25 198.301 51.25C198.364 51.25 198.426 51.25 198.488 51.25C198.55 51.25 198.613 51.25 198.675 51.25C198.737 51.25 198.799 51.25 198.862 51.25C198.924 51.25 198.986 51.25 199.049 51.25C199.111 51.25 199.174 51.25 199.236 51.25C199.298 51.25 199.361 51.25 199.423 51.25C199.486 51.25 199.548 51.25 199.61 51.25C199.673 51.25 199.735 51.25 199.798 51.25C199.86 51.25 199.923 51.25 199.985 51.25C200.048 51.25 200.111 51.25 200.173 51.25C200.236 51.25 200.298 51.25 200.361 51.25C200.423 51.25 200.486 51.25 200.549 51.25C200.611 51.25 200.674 51.25 200.736 51.25C200.799 51.25 200.862 51.25 200.924 51.25C200.987 51.25 201.05 51.25 201.112 51.25C201.175 51.25 201.238 51.25 201.3 51.25C201.363 51.25 201.426 51.25 201.488 51.25C201.551 51.25 201.614 51.25 201.677 51.25C201.739 51.25 201.802 51.25 201.865 51.25C201.927 51.25 201.99 51.25 202.053 51.25C202.116 51.25 202.178 51.25 202.241 51.25C202.304 51.25 202.367 51.25 202.429 51.25C202.492 51.25 202.555 51.25 202.618 51.25C202.68 51.25 202.743 51.25 202.806 51.25C202.869 51.25 202.932 51.25 202.994 51.25C203.057 51.25 203.12 51.25 203.183 51.25C203.246 51.25 203.308 51.25 203.371 51.25C203.434 51.25 203.497 51.25 203.559 51.25C203.622 51.25 203.685 51.25 203.748 51.25C203.811 51.25 203.873 51.25 203.936 51.25C203.999 51.25 204.062 51.25 204.124 51.25C204.187 51.25 204.25 51.25 204.313 51.25C204.376 51.25 204.438 51.25 204.501 51.25C204.564 51.25 204.627 51.25 204.689 51.25C204.752 51.25 204.815 51.25 204.878 51.25C204.94 51.25 205.003 51.25 205.066 51.25C205.128 51.25 205.191 51.25 205.254 51.25C205.317 51.25 205.379 51.25 205.442 51.25C205.505 51.25 205.567 51.25 205.63 51.25C205.693 51.25 205.755 51.25 205.818 51.25C205.881 51.25 205.943 51.25 206.006 51.25C206.069 51.25 206.131 51.25 206.194 51.25C206.257 51.25 206.319 51.25 206.382 51.25C206.444 51.25 206.507 51.25 206.569 51.25C206.632 51.25 206.695 51.25 206.757 51.25C206.82 51.25 206.882 51.25 206.945 51.25C207.007 51.25 207.07 51.25 207.132 51.25C207.195 51.25 207.257 51.25 207.32 51.25C207.382 51.25 207.444 51.25 207.507 51.25C207.569 51.25 207.632 51.25 207.694 51.25C207.756 51.25 207.819 51.25 207.881 51.25C207.943 51.25 208.006 51.25 208.068 51.25C208.13 51.25 208.193 51.25 208.255 51.25C208.317 51.25 208.379 51.25 208.442 51.25C208.504 51.25 208.566 51.25 208.628 51.25C208.691 51.25 208.753 51.25 208.815 51.25C208.877 51.25 208.939 51.25 209.001 51.25C209.063 51.25 209.125 51.25 209.187 51.25C209.249 51.25 209.311 51.25 209.373 51.25C209.435 51.25 209.497 51.25 209.559 51.25C209.621 51.25 209.683 51.25 209.745 51.25C209.807 51.25 209.869 51.25 209.931 51.25C209.993 51.25 210.054 51.25 210.116 51.25C210.178 51.25 210.24 51.25 210.301 51.25C210.363 51.25 210.425 51.25 210.487 51.25C210.548 51.25 210.61 51.25 210.671 51.25C210.733 51.25 210.795 51.25 210.856 51.25C210.918 51.25 210.979 51.25 211.041 51.25C211.102 51.25 211.164 51.25 211.225 51.25C211.287 51.25 211.348 51.25 211.409 51.25C211.471 51.25 211.532 51.25 211.593 51.25C211.655 51.25 211.716 51.25 211.777 51.25C211.838 51.25 211.899 51.25 211.961 51.25C212.022 51.25 212.083 51.25 212.144 51.25C212.205 51.25 212.266 51.25 212.327 51.25C212.388 51.25 212.449 51.25 212.51 51.25C212.571 51.25 212.632 51.25 212.693 51.25C212.753 51.25 212.814 51.25 212.875 51.25C212.936 51.25 212.997 51.25 213.057 51.25C213.118 51.25 213.179 51.25 213.239 51.25C213.3 51.25 213.36 51.25 213.421 51.25C213.481 51.25 213.542 51.25 213.602 51.25C213.663 51.25 213.723 51.25 213.784 51.25C213.844 51.25 213.904 51.25 213.964 51.25C214.025 51.25 214.085 51.25 214.145 51.25C214.205 51.25 214.265 51.25 214.325 51.25C214.386 51.25 214.446 51.25 214.506 51.25C214.566 51.25 214.626 51.25 214.685 51.25C214.745 51.25 214.805 51.25 214.865 51.25C214.925 51.25 214.985 51.25 215.044 51.25C215.104 51.25 215.164 51.25 215.223 51.25C215.283 51.25 215.342 51.25 215.402 51.25C215.461 51.25 215.521 51.25 215.58 51.25C215.64 51.25 215.699 51.25 215.758 51.25C215.818 51.25 215.877 51.25 215.936 51.25C215.995 51.25 216.054 51.25 216.114 51.25C216.173 51.25 216.232 51.25 216.291 51.25C216.35 51.25 216.409 51.25 216.467 51.25C216.526 51.25 216.585 51.25 216.644 51.25C216.703 51.25 216.761 51.25 216.82 51.25C216.879 51.25 216.937 51.25 216.996 51.25C217.054 51.25 217.113 51.25 217.171 51.25C217.23 51.25 217.288 51.25 217.346 51.25C217.404 51.25 217.463 51.25 217.521 51.25C217.579 51.25 217.637 51.25 217.695 51.25C217.753 51.25 217.811 51.25 217.869 51.25C217.927 51.25 217.985 51.25 218.043 51.25C218.101 51.25 218.158 51.25 218.216 51.25C218.274 51.25 218.331 51.25 218.389 51.25C218.447 51.25 218.504 51.25 218.561 51.25C218.619 51.25 218.676 51.25 218.734 51.25C218.791 51.25 218.848 51.25 218.905 51.25C218.962 51.25 219.02 51.25 219.077 51.25C219.134 51.25 219.191 51.25 219.247 51.25C219.304 51.25 219.361 51.25 219.418 51.25C219.475 51.25 219.531 51.25 219.588 51.25C219.645 51.25 219.701 51.25 219.758 51.25C219.814 51.25 219.871 51.25 219.927 51.25C219.983 51.25 220.04 51.25 220.096 51.25C220.152 51.25 220.208 51.25 220.264 51.25C220.32 51.25 220.376 51.25 220.432 51.25C220.488 51.25 220.544 51.25 220.6 51.25C220.655 51.25 220.711 51.25 220.767 51.25C220.822 51.25 220.878 51.25 220.933 51.25C220.989 51.25 221.044 51.25 221.099 51.25C221.155 51.25 221.21 51.25 221.265 51.25C221.32 51.25 221.375 51.25 221.43 51.25C221.485 51.25 221.54 51.25 221.595 51.25C221.65 51.25 221.705 51.25 221.759 51.25C221.814 51.25 221.869 51.25 221.923 51.25C221.978 51.25 222.032 51.25 222.087 51.25C222.141 51.25 222.195 51.25 222.249 51.25C222.304 51.25 222.358 51.25 222.412 51.25C222.466 51.25 222.52 51.25 222.574 51.25C222.628 51.25 222.681 51.25 222.735 51.25C222.789 51.25 222.842 51.25 222.896 51.25C222.949 51.25 223.003 51.25 223.056 51.25C223.11 51.25 223.163 51.25 223.216 51.25C223.269 51.25 223.322 51.25 223.375 51.25C223.428 51.25 223.481 51.25 223.534 51.25C223.587 51.25 223.64 51.25 223.692 51.25C223.745 51.25 223.798 51.25 223.85 51.25C223.903 51.25 223.955 51.25 224.007 51.25C224.06 51.25 224.112 51.25 224.164 51.25C224.216 51.25 224.268 51.25 224.32 51.25C224.372 51.25 224.424 51.25 224.476 51.25C224.527 51.25 224.579 51.25 224.631 51.25C224.682 51.25 224.734 51.25 224.785 51.25C224.836 51.25 224.888 51.25 224.939 51.25C224.99 51.25 225.041 51.25 225.092 51.25C225.143 51.25 225.194 51.25 225.245 51.25C225.296 51.25 225.346 51.25 225.397 51.25C225.448 51.25 225.498 51.25 225.549 51.25C225.599 51.25 225.649 51.25 225.699 51.25C225.75 51.25 225.8 51.25 225.85 51.25C225.9 51.25 225.95 51.25 226 51.25C226.049 51.25 226.099 51.25 226.149 51.25C226.198 51.25 226.248 51.25 226.297 51.25C226.347 51.25 226.396 51.25 226.445 51.25C226.494 51.25 226.544 51.25 226.593 51.25C226.642 51.25 226.69 51.25 226.739 51.25C226.788 51.25 226.837 51.25 226.885 51.25C226.934 51.25 226.982 51.25 227.031 51.25C227.079 51.25 227.127 51.25 227.175 51.25C227.224 51.25 227.272 51.25 227.32 51.25C227.368 51.25 227.415 51.25 227.463 51.25C227.511 51.25 227.558 51.25 227.606 51.25C227.653 51.25 227.701 51.25 227.748 51.25C227.795 51.25 227.843 51.25 227.89 51.25C227.937 51.25 227.984 51.25 228.031 51.25C228.077 51.25 228.124 51.25 228.171 51.25C228.217 51.25 228.264 51.25 228.31 51.25C228.357 51.25 228.403 51.25 228.449 51.25C228.495 51.25 228.541 51.25 228.587 51.25C228.633 51.25 228.679 51.25 228.725 51.25C228.77 51.25 228.816 51.25 228.862 51.25C228.907 51.25 228.952 51.25 228.998 51.25C229.043 51.25 229.088 51.25 229.133 51.25C229.178 51.25 229.223 51.25 229.268 51.25C229.312 51.25 229.357 51.25 229.402 51.25C229.446 51.25 229.491 51.25 229.535 51.25C229.579 51.25 229.623 51.25 229.667 51.25C229.711 51.25 229.755 51.25 229.799 51.25C229.843 51.25 229.887 51.25 229.93 51.25C229.974 51.25 230.017 51.25 230.06 51.25C230.104 51.25 230.147 51.25 230.19 51.25C230.233 51.25 230.276 51.25 230.319 51.25C230.362 51.25 230.404 51.25 230.447 51.25C230.49 51.25 230.532 51.25 230.574 51.25C230.617 51.25 230.659 51.25 230.701 51.25C230.743 51.25 230.785 51.25 230.827 51.25C230.869 51.25 230.91 51.25 230.952 51.25C230.993 51.25 231.035 51.25 231.076 51.25C231.117 51.25 231.158 51.25 231.199 51.25C231.241 51.25 231.281 51.25 231.322 51.25C231.363 51.25 231.404 51.25 231.444 51.25C231.485 51.25 231.525 51.25 231.565 51.25C231.605 51.25 231.646 51.25 231.686 51.25C231.726 51.25 231.765 51.25 231.805 51.25C231.845 51.25 231.884 51.25 231.924 51.25C231.963 51.25 232.003 51.25 232.042 51.25C232.081 51.25 232.12 51.25 232.159 51.25C232.198 51.25 232.236 51.25 232.275 51.25C232.314 51.25 232.352 51.25 232.391 51.25C232.429 51.25 232.467 51.25 232.505 51.25C232.543 51.25 232.581 51.25 232.619 51.25C232.657 51.25 232.694 51.25 232.732 51.25C232.769 51.25 232.807 51.25 232.844 51.25C232.881 51.25 232.918 51.25 232.955 51.25C232.992 51.25 233.029 51.25 233.066 51.25C233.102 51.25 233.139 51.25 233.175 51.25C233.212 51.25 233.248 51.25 233.284 51.25C233.32 51.25 233.356 51.25 233.392 51.25C233.427 51.25 233.463 51.25 233.499 51.25C233.534 51.25 233.569 51.25 233.605 51.25C233.64 51.25 233.675 51.25 233.71 51.25C233.745 51.25 233.78 51.25 233.814 51.25C233.849 51.25 233.883 51.25 233.918 51.25C233.952 51.25 233.986 51.25 234.02 51.25C234.054 51.25 234.088 51.25 234.122 51.25C234.155 51.25 234.189 51.25 234.222 51.25C234.256 51.25 234.289 51.25 234.322 51.25C234.355 51.25 234.388 51.25 234.421 51.25C234.454 51.25 234.486 51.25 234.519 51.25C234.551 51.25 234.584 51.25 234.616 51.25C234.648 51.25 234.68 51.25 234.712 51.25C234.744 51.25 234.776 51.25 234.807 51.25C234.839 51.25 234.87 51.25 234.902 51.25C234.933 51.25 234.964 51.25 234.995 51.25C235.026 51.25 235.057 51.25 235.087 51.25C235.118 51.25 235.148 51.25 235.179 51.25C235.209 51.25 235.239 51.25 235.269 51.25C235.299 51.25 235.329 51.25 235.358 51.25C235.388 51.25 235.418 51.25 235.447 51.25C235.476 51.25 235.506 51.25 235.535 51.25C235.564 51.25 235.592 51.25 235.621 51.25C235.65 51.25 235.678 51.25 235.707 51.25C235.735 51.25 235.763 51.25 235.791 51.25C235.819 51.25 235.847 51.25 235.875 51.25C235.903 51.25 235.93 51.25 235.958 51.25C235.985 51.25 236.012 51.25 236.039 51.25C236.066 51.25 236.093 51.25 236.12 51.25C236.146 51.25 236.173 51.25 236.199 51.25C236.226 51.25 236.252 51.25 236.278 51.25C236.304 51.25 236.33 51.25 236.356 51.25C236.381 51.25 236.407 51.25 236.432 51.25C236.457 51.25 236.483 51.25 236.508 51.25C236.533 51.25 236.557 51.25 236.582 51.25C236.607 51.25 236.631 51.25 236.656 51.25C236.68 51.25 236.704 51.25 236.728 51.25C236.752 51.25 236.776 51.25 236.799 51.25C236.823 51.25 236.846 51.25 236.87 51.25C236.893 51.25 236.916 51.25 236.939 51.25C236.962 51.25 236.985 51.25 237.007 51.25C237.03 51.25 237.052 51.25 237.074 51.25C237.097 51.25 237.119 51.25 237.14 51.25C237.162 51.25 237.184 51.25 237.205 51.25C237.227 51.25 237.248 51.25 237.269 51.25C237.29 51.25 237.311 51.25 237.332 51.25C237.353 51.25 237.373 51.25 237.394 51.25C237.414 51.25 237.435 51.25 237.455 51.25C237.475 51.25 237.494 51.25 237.514 51.25C237.534 51.25 237.553 51.25 237.573 51.25C237.592 51.25 237.611 51.25 237.63 51.25C237.649 51.25 237.668 51.25 237.686 51.25C237.705 51.25 237.723 51.25 237.741 51.25C237.759 51.25 237.777 51.25 237.795 51.25C237.813 51.25 237.831 51.25 237.848 51.25C237.866 51.25 237.883 51.25 237.9 51.25C237.917 51.25 237.934 51.25 237.951 51.25C237.967 51.25 237.984 51.25 238 51.25V52.75C237.984 52.75 237.967 52.75 237.951 52.75C237.934 52.75 237.917 52.75 237.9 52.75C237.883 52.75 237.866 52.75 237.848 52.75C237.831 52.75 237.813 52.75 237.795 52.75C237.777 52.75 237.759 52.75 237.741 52.75C237.723 52.75 237.705 52.75 237.686 52.75C237.668 52.75 237.649 52.75 237.63 52.75C237.611 52.75 237.592 52.75 237.573 52.75C237.553 52.75 237.534 52.75 237.514 52.75C237.494 52.75 237.475 52.75 237.455 52.75C237.435 52.75 237.414 52.75 237.394 52.75C237.373 52.75 237.353 52.75 237.332 52.75C237.311 52.75 237.29 52.75 237.269 52.75C237.248 52.75 237.227 52.75 237.205 52.75C237.184 52.75 237.162 52.75 237.14 52.75C237.119 52.75 237.097 52.75 237.074 52.75C237.052 52.75 237.03 52.75 237.007 52.75C236.985 52.75 236.962 52.75 236.939 52.75C236.916 52.75 236.893 52.75 236.87 52.75C236.846 52.75 236.823 52.75 236.799 52.75C236.776 52.75 236.752 52.75 236.728 52.75C236.704 52.75 236.68 52.75 236.656 52.75C236.631 52.75 236.607 52.75 236.582 52.75C236.557 52.75 236.533 52.75 236.508 52.75C236.483 52.75 236.457 52.75 236.432 52.75C236.407 52.75 236.381 52.75 236.356 52.75C236.33 52.75 236.304 52.75 236.278 52.75C236.252 52.75 236.226 52.75 236.199 52.75C236.173 52.75 236.146 52.75 236.12 52.75C236.093 52.75 236.066 52.75 236.039 52.75C236.012 52.75 235.985 52.75 235.958 52.75C235.93 52.75 235.903 52.75 235.875 52.75C235.847 52.75 235.819 52.75 235.791 52.75C235.763 52.75 235.735 52.75 235.707 52.75C235.678 52.75 235.65 52.75 235.621 52.75C235.592 52.75 235.564 52.75 235.535 52.75C235.506 52.75 235.476 52.75 235.447 52.75C235.418 52.75 235.388 52.75 235.358 52.75C235.329 52.75 235.299 52.75 235.269 52.75C235.239 52.75 235.209 52.75 235.179 52.75C235.148 52.75 235.118 52.75 235.087 52.75C235.057 52.75 235.026 52.75 234.995 52.75C234.964 52.75 234.933 52.75 234.902 52.75C234.87 52.75 234.839 52.75 234.807 52.75C234.776 52.75 234.744 52.75 234.712 52.75C234.68 52.75 234.648 52.75 234.616 52.75C234.584 52.75 234.551 52.75 234.519 52.75C234.486 52.75 234.454 52.75 234.421 52.75C234.388 52.75 234.355 52.75 234.322 52.75C234.289 52.75 234.256 52.75 234.222 52.75C234.189 52.75 234.155 52.75 234.122 52.75C234.088 52.75 234.054 52.75 234.02 52.75C233.986 52.75 233.952 52.75 233.918 52.75C233.883 52.75 233.849 52.75 233.814 52.75C233.78 52.75 233.745 52.75 233.71 52.75C233.675 52.75 233.64 52.75 233.605 52.75C233.569 52.75 233.534 52.75 233.499 52.75C233.463 52.75 233.427 52.75 233.392 52.75C233.356 52.75 233.32 52.75 233.284 52.75C233.248 52.75 233.212 52.75 233.175 52.75C233.139 52.75 233.102 52.75 233.066 52.75C233.029 52.75 232.992 52.75 232.955 52.75C232.918 52.75 232.881 52.75 232.844 52.75C232.807 52.75 232.769 52.75 232.732 52.75C232.694 52.75 232.657 52.75 232.619 52.75C232.581 52.75 232.543 52.75 232.505 52.75C232.467 52.75 232.429 52.75 232.391 52.75C232.352 52.75 232.314 52.75 232.275 52.75C232.236 52.75 232.198 52.75 232.159 52.75C232.12 52.75 232.081 52.75 232.042 52.75C232.003 52.75 231.963 52.75 231.924 52.75C231.884 52.75 231.845 52.75 231.805 52.75C231.765 52.75 231.726 52.75 231.686 52.75C231.646 52.75 231.605 52.75 231.565 52.75C231.525 52.75 231.485 52.75 231.444 52.75C231.404 52.75 231.363 52.75 231.322 52.75C231.281 52.75 231.241 52.75 231.199 52.75C231.158 52.75 231.117 52.75 231.076 52.75C231.035 52.75 230.993 52.75 230.952 52.75C230.91 52.75 230.869 52.75 230.827 52.75C230.785 52.75 230.743 52.75 230.701 52.75C230.659 52.75 230.617 52.75 230.574 52.75C230.532 52.75 230.49 52.75 230.447 52.75C230.404 52.75 230.362 52.75 230.319 52.75C230.276 52.75 230.233 52.75 230.19 52.75C230.147 52.75 230.104 52.75 230.06 52.75C230.017 52.75 229.974 52.75 229.93 52.75C229.887 52.75 229.843 52.75 229.799 52.75C229.755 52.75 229.711 52.75 229.667 52.75C229.623 52.75 229.579 52.75 229.535 52.75C229.491 52.75 229.446 52.75 229.402 52.75C229.357 52.75 229.312 52.75 229.268 52.75C229.223 52.75 229.178 52.75 229.133 52.75C229.088 52.75 229.043 52.75 228.998 52.75C228.952 52.75 228.907 52.75 228.862 52.75C228.816 52.75 228.77 52.75 228.725 52.75C228.679 52.75 228.633 52.75 228.587 52.75C228.541 52.75 228.495 52.75 228.449 52.75C228.403 52.75 228.357 52.75 228.31 52.75C228.264 52.75 228.217 52.75 228.171 52.75C228.124 52.75 228.077 52.75 228.031 52.75C227.984 52.75 227.937 52.75 227.89 52.75C227.843 52.75 227.795 52.75 227.748 52.75C227.701 52.75 227.653 52.75 227.606 52.75C227.558 52.75 227.511 52.75 227.463 52.75C227.415 52.75 227.368 52.75 227.32 52.75C227.272 52.75 227.224 52.75 227.175 52.75C227.127 52.75 227.079 52.75 227.031 52.75C226.982 52.75 226.934 52.75 226.885 52.75C226.837 52.75 226.788 52.75 226.739 52.75C226.69 52.75 226.642 52.75 226.593 52.75C226.544 52.75 226.494 52.75 226.445 52.75C226.396 52.75 226.347 52.75 226.297 52.75C226.248 52.75 226.198 52.75 226.149 52.75C226.099 52.75 226.049 52.75 226 52.75C225.95 52.75 225.9 52.75 225.85 52.75C225.8 52.75 225.75 52.75 225.699 52.75C225.649 52.75 225.599 52.75 225.549 52.75C225.498 52.75 225.448 52.75 225.397 52.75C225.346 52.75 225.296 52.75 225.245 52.75C225.194 52.75 225.143 52.75 225.092 52.75C225.041 52.75 224.99 52.75 224.939 52.75C224.888 52.75 224.836 52.75 224.785 52.75C224.734 52.75 224.682 52.75 224.631 52.75C224.579 52.75 224.527 52.75 224.476 52.75C224.424 52.75 224.372 52.75 224.32 52.75C224.268 52.75 224.216 52.75 224.164 52.75C224.112 52.75 224.06 52.75 224.007 52.75C223.955 52.75 223.903 52.75 223.85 52.75C223.798 52.75 223.745 52.75 223.692 52.75C223.64 52.75 223.587 52.75 223.534 52.75C223.481 52.75 223.428 52.75 223.375 52.75C223.322 52.75 223.269 52.75 223.216 52.75C223.163 52.75 223.11 52.75 223.056 52.75C223.003 52.75 222.949 52.75 222.896 52.75C222.842 52.75 222.789 52.75 222.735 52.75C222.681 52.75 222.628 52.75 222.574 52.75C222.52 52.75 222.466 52.75 222.412 52.75C222.358 52.75 222.304 52.75 222.249 52.75C222.195 52.75 222.141 52.75 222.087 52.75C222.032 52.75 221.978 52.75 221.923 52.75C221.869 52.75 221.814 52.75 221.759 52.75C221.705 52.75 221.65 52.75 221.595 52.75C221.54 52.75 221.485 52.75 221.43 52.75C221.375 52.75 221.32 52.75 221.265 52.75C221.21 52.75 221.155 52.75 221.099 52.75C221.044 52.75 220.989 52.75 220.933 52.75C220.878 52.75 220.822 52.75 220.767 52.75C220.711 52.75 220.655 52.75 220.6 52.75C220.544 52.75 220.488 52.75 220.432 52.75C220.376 52.75 220.32 52.75 220.264 52.75C220.208 52.75 220.152 52.75 220.096 52.75C220.04 52.75 219.983 52.75 219.927 52.75C219.871 52.75 219.814 52.75 219.758 52.75C219.701 52.75 219.645 52.75 219.588 52.75C219.531 52.75 219.475 52.75 219.418 52.75C219.361 52.75 219.304 52.75 219.247 52.75C219.191 52.75 219.134 52.75 219.077 52.75C219.02 52.75 218.962 52.75 218.905 52.75C218.848 52.75 218.791 52.75 218.734 52.75C218.676 52.75 218.619 52.75 218.561 52.75C218.504 52.75 218.447 52.75 218.389 52.75C218.331 52.75 218.274 52.75 218.216 52.75C218.158 52.75 218.101 52.75 218.043 52.75C217.985 52.75 217.927 52.75 217.869 52.75C217.811 52.75 217.753 52.75 217.695 52.75C217.637 52.75 217.579 52.75 217.521 52.75C217.463 52.75 217.404 52.75 217.346 52.75C217.288 52.75 217.23 52.75 217.171 52.75C217.113 52.75 217.054 52.75 216.996 52.75C216.937 52.75 216.879 52.75 216.82 52.75C216.761 52.75 216.703 52.75 216.644 52.75C216.585 52.75 216.526 52.75 216.467 52.75C216.409 52.75 216.35 52.75 216.291 52.75C216.232 52.75 216.173 52.75 216.114 52.75C216.054 52.75 215.995 52.75 215.936 52.75C215.877 52.75 215.818 52.75 215.758 52.75C215.699 52.75 215.64 52.75 215.58 52.75C215.521 52.75 215.461 52.75 215.402 52.75C215.342 52.75 215.283 52.75 215.223 52.75C215.164 52.75 215.104 52.75 215.044 52.75C214.985 52.75 214.925 52.75 214.865 52.75C214.805 52.75 214.745 52.75 214.685 52.75C214.626 52.75 214.566 52.75 214.506 52.75C214.446 52.75 214.386 52.75 214.325 52.75C214.265 52.75 214.205 52.75 214.145 52.75C214.085 52.75 214.025 52.75 213.964 52.75C213.904 52.75 213.844 52.75 213.784 52.75C213.723 52.75 213.663 52.75 213.602 52.75C213.542 52.75 213.481 52.75 213.421 52.75C213.36 52.75 213.3 52.75 213.239 52.75C213.179 52.75 213.118 52.75 213.057 52.75C212.997 52.75 212.936 52.75 212.875 52.75C212.814 52.75 212.753 52.75 212.693 52.75C212.632 52.75 212.571 52.75 212.51 52.75C212.449 52.75 212.388 52.75 212.327 52.75C212.266 52.75 212.205 52.75 212.144 52.75C212.083 52.75 212.022 52.75 211.961 52.75C211.899 52.75 211.838 52.75 211.777 52.75C211.716 52.75 211.655 52.75 211.593 52.75C211.532 52.75 211.471 52.75 211.409 52.75C211.348 52.75 211.287 52.75 211.225 52.75C211.164 52.75 211.102 52.75 211.041 52.75C210.979 52.75 210.918 52.75 210.856 52.75C210.795 52.75 210.733 52.75 210.671 52.75C210.61 52.75 210.548 52.75 210.487 52.75C210.425 52.75 210.363 52.75 210.301 52.75C210.24 52.75 210.178 52.75 210.116 52.75C210.054 52.75 209.993 52.75 209.931 52.75C209.869 52.75 209.807 52.75 209.745 52.75C209.683 52.75 209.621 52.75 209.559 52.75C209.497 52.75 209.435 52.75 209.373 52.75C209.311 52.75 209.249 52.75 209.187 52.75C209.125 52.75 209.063 52.75 209.001 52.75C208.939 52.75 208.877 52.75 208.815 52.75C208.753 52.75 208.691 52.75 208.628 52.75C208.566 52.75 208.504 52.75 208.442 52.75C208.379 52.75 208.317 52.75 208.255 52.75C208.193 52.75 208.13 52.75 208.068 52.75C208.006 52.75 207.943 52.75 207.881 52.75C207.819 52.75 207.756 52.75 207.694 52.75C207.632 52.75 207.569 52.75 207.507 52.75C207.444 52.75 207.382 52.75 207.32 52.75C207.257 52.75 207.195 52.75 207.132 52.75C207.07 52.75 207.007 52.75 206.945 52.75C206.882 52.75 206.82 52.75 206.757 52.75C206.695 52.75 206.632 52.75 206.569 52.75C206.507 52.75 206.444 52.75 206.382 52.75C206.319 52.75 206.257 52.75 206.194 52.75C206.131 52.75 206.069 52.75 206.006 52.75C205.943 52.75 205.881 52.75 205.818 52.75C205.755 52.75 205.693 52.75 205.63 52.75C205.567 52.75 205.505 52.75 205.442 52.75C205.379 52.75 205.317 52.75 205.254 52.75C205.191 52.75 205.128 52.75 205.066 52.75C205.003 52.75 204.94 52.75 204.878 52.75C204.815 52.75 204.752 52.75 204.689 52.75C204.627 52.75 204.564 52.75 204.501 52.75C204.438 52.75 204.376 52.75 204.313 52.75C204.25 52.75 204.187 52.75 204.124 52.75C204.062 52.75 203.999 52.75 203.936 52.75C203.873 52.75 203.811 52.75 203.748 52.75C203.685 52.75 203.622 52.75 203.559 52.75C203.497 52.75 203.434 52.75 203.371 52.75C203.308 52.75 203.246 52.75 203.183 52.75C203.12 52.75 203.057 52.75 202.994 52.75C202.932 52.75 202.869 52.75 202.806 52.75C202.743 52.75 202.68 52.75 202.618 52.75C202.555 52.75 202.492 52.75 202.429 52.75C202.367 52.75 202.304 52.75 202.241 52.75C202.178 52.75 202.116 52.75 202.053 52.75C201.99 52.75 201.927 52.75 201.865 52.75C201.802 52.75 201.739 52.75 201.677 52.75C201.614 52.75 201.551 52.75 201.488 52.75C201.426 52.75 201.363 52.75 201.3 52.75C201.238 52.75 201.175 52.75 201.112 52.75C201.05 52.75 200.987 52.75 200.924 52.75C200.862 52.75 200.799 52.75 200.736 52.75C200.674 52.75 200.611 52.75 200.549 52.75C200.486 52.75 200.423 52.75 200.361 52.75C200.298 52.75 200.236 52.75 200.173 52.75C200.111 52.75 200.048 52.75 199.985 52.75C199.923 52.75 199.86 52.75 199.798 52.75C199.735 52.75 199.673 52.75 199.61 52.75C199.548 52.75 199.486 52.75 199.423 52.75C199.361 52.75 199.298 52.75 199.236 52.75C199.174 52.75 199.111 52.75 199.049 52.75C198.986 52.75 198.924 52.75 198.862 52.75C198.799 52.75 198.737 52.75 198.675 52.75C198.613 52.75 198.55 52.75 198.488 52.75C198.426 52.75 198.364 52.75 198.301 52.75C198.239 52.75 198.177 52.75 198.115 52.75C198.053 52.75 197.991 52.75 197.928 52.75C197.866 52.75 197.804 52.75 197.742 52.75C197.68 52.75 197.618 52.75 197.556 52.75C197.494 52.75 197.432 52.75 197.37 52.75C197.308 52.75 197.246 52.75 197.184 52.75C197.122 52.75 197.06 52.75 196.998 52.75C196.937 52.75 196.875 52.75 196.813 52.75C196.751 52.75 196.689 52.75 196.628 52.75C196.566 52.75 196.504 52.75 196.442 52.75C196.381 52.75 196.319 52.75 196.257 52.75C196.196 52.75 196.134 52.75 196.073 52.75C196.011 52.75 195.949 52.75 195.888 52.75C195.826 52.75 195.765 52.75 195.704 52.75C195.642 52.75 195.581 52.75 195.519 52.75C195.458 52.75 195.397 52.75 195.335 52.75C195.274 52.75 195.213 52.75 195.151 52.75C195.09 52.75 195.029 52.75 194.968 52.75C194.907 52.75 194.845 52.75 194.784 52.75C194.723 52.75 194.662 52.75 194.601 52.75C194.54 52.75 194.479 52.75 194.418 52.75C194.357 52.75 194.296 52.75 194.235 52.75C194.174 52.75 194.114 52.75 194.053 52.75C193.992 52.75 193.931 52.75 193.87 52.75C193.81 52.75 193.749 52.75 193.688 52.75C193.628 52.75 193.567 52.75 193.507 52.75C193.446 52.75 193.385 52.75 193.325 52.75C193.265 52.75 193.204 52.75 193.144 52.75C193.083 52.75 193.023 52.75 192.963 52.75C192.902 52.75 192.842 52.75 192.782 52.75C192.722 52.75 192.661 52.75 192.601 52.75C192.541 52.75 192.481 52.75 192.421 52.75C192.361 52.75 192.301 52.75 192.241 52.75C192.181 52.75 192.121 52.75 192.061 52.75C192.002 52.75 191.942 52.75 191.882 52.75C191.822 52.75 191.763 52.75 191.703 52.75C191.643 52.75 191.584 52.75 191.524 52.75C191.465 52.75 191.405 52.75 191.346 52.75C191.286 52.75 191.227 52.75 191.167 52.75C191.108 52.75 191.049 52.75 190.989 52.75C190.93 52.75 190.871 52.75 190.812 52.75C190.753 52.75 190.694 52.75 190.635 52.75C190.576 52.75 190.517 52.75 190.458 52.75C190.399 52.75 190.34 52.75 190.281 52.75C190.222 52.75 190.164 52.75 190.105 52.75C190.046 52.75 189.988 52.75 189.929 52.75C189.87 52.75 189.812 52.75 189.753 52.75C189.695 52.75 189.637 52.75 189.578 52.75C189.52 52.75 189.462 52.75 189.403 52.75C189.345 52.75 189.287 52.75 189.229 52.75C189.171 52.75 189.113 52.75 189.055 52.75C188.997 52.75 188.939 52.75 188.881 52.75C188.823 52.75 188.765 52.75 188.707 52.75C188.65 52.75 188.592 52.75 188.534 52.75C188.477 52.75 188.419 52.75 188.362 52.75C188.304 52.75 188.247 52.75 188.189 52.75C188.132 52.75 188.075 52.75 188.018 52.75C187.96 52.75 187.903 52.75 187.846 52.75C187.789 52.75 187.732 52.75 187.675 52.75C187.618 52.75 187.561 52.75 187.504 52.75C187.447 52.75 187.391 52.75 187.334 52.75C187.277 52.75 187.221 52.75 187.164 52.75C187.108 52.75 187.051 52.75 186.995 52.75C186.938 52.75 186.882 52.75 186.826 52.75C186.769 52.75 186.713 52.75 186.657 52.75C186.601 52.75 186.545 52.75 186.489 52.75C186.433 52.75 186.377 52.75 186.321 52.75C186.265 52.75 186.21 52.75 186.154 52.75C186.098 52.75 186.043 52.75 185.987 52.75C185.932 52.75 185.876 52.75 185.821 52.75C185.765 52.75 185.71 52.75 185.655 52.75C185.6 52.75 185.545 52.75 185.489 52.75C185.434 52.75 185.379 52.75 185.324 52.75C185.27 52.75 185.215 52.75 185.16 52.75C185.105 52.75 185.05 52.75 184.996 52.75C184.941 52.75 184.887 52.75 184.832 52.75C184.778 52.75 184.724 52.75 184.669 52.75C184.615 52.75 184.561 52.75 184.507 52.75C184.453 52.75 184.399 52.75 184.345 52.75C184.291 52.75 184.237 52.75 184.183 52.75C184.129 52.75 184.076 52.75 184.022 52.75C183.968 52.75 183.915 52.75 183.861 52.75C183.808 52.75 183.755 52.75 183.701 52.75C183.648 52.75 183.595 52.75 183.542 52.75C183.489 52.75 183.436 52.75 183.383 52.75C183.33 52.75 183.277 52.75 183.224 52.75C183.171 52.75 183.119 52.75 183.066 52.75C183.014 52.75 182.961 52.75 182.909 52.75C182.856 52.75 182.804 52.75 182.752 52.75C182.7 52.75 182.648 52.75 182.596 52.75C182.544 52.75 182.492 52.75 182.44 52.75C182.388 52.75 182.336 52.75 182.284 52.75C182.233 52.75 182.181 52.75 182.13 52.75C182.078 52.75 182.027 52.75 181.976 52.75C181.924 52.75 181.873 52.75 181.822 52.75C181.771 52.75 181.72 52.75 181.669 52.75C181.618 52.75 181.567 52.75 181.517 52.75C181.466 52.75 181.415 52.75 181.365 52.75C181.314 52.75 181.264 52.75 181.214 52.75C181.163 52.75 181.113 52.75 181.063 52.75C181.013 52.75 180.963 52.75 180.913 52.75C180.863 52.75 180.813 52.75 180.764 52.75C180.714 52.75 180.664 52.75 180.615 52.75C180.565 52.75 180.516 52.75 180.467 52.75C180.417 52.75 180.368 52.75 180.319 52.75C180.27 52.75 180.221 52.75 180.172 52.75C180.123 52.75 180.074 52.75 180.026 52.75C179.977 52.75 179.928 52.75 179.88 52.75C179.832 52.75 179.783 52.75 179.735 52.75C179.687 52.75 179.639 52.75 179.59 52.75C179.542 52.75 179.495 52.75 179.447 52.75C179.399 52.75 179.351 52.75 179.304 52.75C179.256 52.75 179.208 52.75 179.161 52.75C179.114 52.75 179.066 52.75 179.019 52.75C178.972 52.75 178.925 52.75 178.878 52.75C178.831 52.75 178.784 52.75 178.738 52.75C178.691 52.75 178.644 52.75 178.598 52.75C178.551 52.75 178.505 52.75 178.459 52.75C178.412 52.75 178.366 52.75 178.32 52.75C178.274 52.75 178.228 52.75 178.182 52.75C178.136 52.75 178.091 52.75 178.045 52.75C178 52.75 177.954 52.75 177.909 52.75C177.863 52.75 177.818 52.75 177.773 52.75C177.728 52.75 177.683 52.75 177.638 52.75C177.593 52.75 177.548 52.75 177.504 52.75C177.459 52.75 177.415 52.75 177.37 52.75C177.326 52.75 177.282 52.75 177.237 52.75C177.193 52.75 177.149 52.75 177.105 52.75C177.061 52.75 177.018 52.75 176.974 52.75C176.93 52.75 176.887 52.75 176.843 52.75C176.8 52.75 176.757 52.75 176.713 52.75C176.67 52.75 176.627 52.75 176.584 52.75C176.541 52.75 176.498 52.75 176.456 52.75C176.413 52.75 176.37 52.75 176.328 52.75C176.286 52.75 176.243 52.75 176.201 52.75C176.159 52.75 176.117 52.75 176.075 52.75C176.033 52.75 175.991 52.75 175.95 52.75C175.908 52.75 175.866 52.75 175.825 52.75C175.784 52.75 175.742 52.75 175.701 52.75C175.66 52.75 175.619 52.75 175.578 52.75C175.537 52.75 175.496 52.75 175.456 52.75C175.415 52.75 175.375 52.75 175.334 52.75C175.294 52.75 175.254 52.75 175.214 52.75C175.173 52.75 175.134 52.75 175.094 52.75C175.054 52.75 175.014 52.75 174.975 52.75C174.935 52.75 174.896 52.75 174.856 52.75C174.817 52.75 174.778 52.75 174.739 52.75C174.7 52.75 174.661 52.75 174.622 52.75C174.583 52.75 174.545 52.75 174.506 52.75C174.468 52.75 174.43 52.75 174.391 52.75C174.353 52.75 174.315 52.75 174.277 52.75C174.239 52.75 174.201 52.75 174.164 52.75C174.126 52.75 174.089 52.75 174.051 52.75C174.014 52.75 173.977 52.75 173.94 52.75C173.903 52.75 173.866 52.75 173.829 52.75C173.792 52.75 173.756 52.75 173.719 52.75C173.683 52.75 173.646 52.75 173.61 52.75C173.574 52.75 173.538 52.75 173.502 52.75C173.466 52.75 173.43 52.75 173.394 52.75C173.359 52.75 173.323 52.75 173.288 52.75C173.253 52.75 173.217 52.75 173.182 52.75C173.147 52.75 173.112 52.75 173.078 52.75C173.043 52.75 173.008 52.75 172.974 52.75C172.939 52.75 172.905 52.75 172.871 52.75C172.837 52.75 172.803 52.75 172.769 52.75C172.735 52.75 172.701 52.75 172.668 52.75C172.634 52.75 172.601 52.75 172.568 52.75C172.534 52.75 172.501 52.75 172.468 52.75C172.435 52.75 172.402 52.75 172.37 52.75C172.337 52.75 172.305 52.75 172.272 52.75C172.24 52.75 172.208 52.75 172.176 52.75C172.144 52.75 172.112 52.75 172.08 52.75C172.049 52.75 172.017 52.75 171.986 52.75C171.954 52.75 171.923 52.75 171.892 52.75C171.861 52.75 171.83 52.75 171.799 52.75C171.768 52.75 171.738 52.75 171.707 52.75C171.677 52.75 171.646 52.75 171.616 52.75C171.586 52.75 171.556 52.75 171.526 52.75C171.497 52.75 171.467 52.75 171.437 52.75C171.408 52.75 171.379 52.75 171.349 52.75C171.32 52.75 171.291 52.75 171.262 52.75C171.234 52.75 171.205 52.75 171.176 52.75C171.148 52.75 171.12 52.75 171.091 52.75C171.063 52.75 171.035 52.75 171.007 52.75C170.979 52.75 170.952 52.75 170.924 52.75C170.897 52.75 170.869 52.75 170.842 52.75C170.815 52.75 170.788 52.75 170.761 52.75C170.734 52.75 170.708 52.75 170.681 52.75C170.654 52.75 170.628 52.75 170.602 52.75C170.576 52.75 170.55 52.75 170.524 52.75C170.498 52.75 170.472 52.75 170.447 52.75C170.421 52.75 170.396 52.75 170.371 52.75C170.346 52.75 170.321 52.75 170.296 52.75C170.271 52.75 170.246 52.75 170.222 52.75C170.198 52.75 170.173 52.75 170.149 52.75C170.125 52.75 170.101 52.75 170.077 52.75C170.053 52.75 170.03 52.75 170.006 52.75C169.983 52.75 169.96 52.75 169.937 52.75C169.914 52.75 169.891 52.75 169.868 52.75C169.845 52.75 169.823 52.75 169.8 52.75C169.778 52.75 169.756 52.75 169.734 52.75C169.712 52.75 169.69 52.75 169.668 52.75C169.647 52.75 169.625 52.75 169.604 52.75C169.583 52.75 169.561 52.75 169.541 52.75C169.52 52.75 169.499 52.75 169.478 52.75C169.458 52.75 169.437 52.75 169.417 52.75C169.397 52.75 169.377 52.75 169.357 52.75C169.337 52.75 169.318 52.75 169.298 52.75C169.279 52.75 169.259 52.75 169.24 52.75C169.221 52.75 169.202 52.75 169.183 52.75C169.165 52.75 169.146 52.75 169.128 52.75C169.109 52.75 169.091 52.75 169.073 52.75C169.055 52.75 169.038 52.75 169.02 52.75C169.002 52.75 168.985 52.75 168.968 52.75C168.95 52.75 168.933 52.75 168.917 52.75C168.9 52.75 168.883 52.75 168.867 52.75C168.85 52.75 168.834 52.75 168.818 52.75C168.802 52.75 168.786 52.75 168.77 52.75C168.754 52.75 168.739 52.75 168.723 52.75C168.708 52.75 168.693 52.75 168.678 52.75C168.663 52.75 168.648 52.75 168.634 52.75C168.619 52.75 168.605 52.75 168.591 52.75C168.577 52.75 168.563 52.75 168.549 52.75C168.535 52.75 168.521 52.75 168.508 52.75C168.495 52.75 168.481 52.75 168.469 52.75C168.456 52.75 168.443 52.75 168.43 52.75C168.418 52.75 168.405 52.75 168.393 52.75C168.381 52.75 168.369 52.75 168.357 52.75C168.345 52.75 168.334 52.75 168.322 52.75C168.311 52.75 168.3 52.75 168.289 52.75C168.278 52.75 168.267 52.75 168.256 52.75C168.246 52.75 168.235 52.75 168.225 52.75C168.215 52.75 168.205 52.75 168.195 52.75C168.185 52.75 168.176 52.75 168.166 52.75C168.157 52.75 168.148 52.75 168.139 52.75C168.13 52.75 168.121 52.75 168.113 52.75C168.104 52.75 168.096 52.75 168.088 52.75C168.08 52.75 168.072 52.75 168.064 52.75C168.056 52.75 168.049 52.75 168.041 52.75C168.034 52.75 168.027 52.75 168.02 52.75C168.013 52.75 168.006 52.75 168 52.75V51.25Z\"\n          fill=\"url(#paint4_linear_38_7016)\"\n        />\n        <path\n          d=\"M258.724 115.263V114.091H266.906V115.263H263.476V125H262.155V115.263H258.724ZM270.912 125.17C270.173 125.17 269.525 124.995 268.968 124.643C268.414 124.292 267.98 123.8 267.668 123.168C267.359 122.536 267.205 121.797 267.205 120.952C267.205 120.099 267.359 119.355 267.668 118.72C267.98 118.084 268.414 117.591 268.968 117.239C269.525 116.887 270.173 116.712 270.912 116.712C271.651 116.712 272.297 116.887 272.851 117.239C273.408 117.591 273.842 118.084 274.151 118.72C274.463 119.355 274.619 120.099 274.619 120.952C274.619 121.797 274.463 122.536 274.151 123.168C273.842 123.8 273.408 124.292 272.851 124.643C272.297 124.995 271.651 125.17 270.912 125.17ZM270.912 124.041C271.473 124.041 271.935 123.897 272.297 123.61C272.659 123.322 272.927 122.944 273.101 122.475C273.275 122.006 273.362 121.499 273.362 120.952C273.362 120.405 273.275 119.895 273.101 119.423C272.927 118.951 272.659 118.569 272.297 118.278C271.935 117.987 271.473 117.841 270.912 117.841C270.351 117.841 269.889 117.987 269.527 118.278C269.165 118.569 268.897 118.951 268.723 119.423C268.549 119.895 268.462 120.405 268.462 120.952C268.462 121.499 268.549 122.006 268.723 122.475C268.897 122.944 269.165 123.322 269.527 123.61C269.889 123.897 270.351 124.041 270.912 124.041ZM279.628 125.17C278.946 125.17 278.344 124.998 277.822 124.654C277.3 124.306 276.892 123.816 276.597 123.184C276.302 122.548 276.155 121.797 276.155 120.93C276.155 120.071 276.302 119.325 276.597 118.693C276.892 118.061 277.302 117.573 277.827 117.228C278.353 116.884 278.96 116.712 279.649 116.712C280.182 116.712 280.603 116.8 280.911 116.978C281.224 117.152 281.462 117.351 281.625 117.575C281.792 117.795 281.922 117.976 282.014 118.118H282.121V114.091H283.378V125H282.163V123.743H282.014C281.922 123.892 281.79 124.08 281.62 124.308C281.449 124.531 281.206 124.732 280.89 124.909C280.574 125.083 280.153 125.17 279.628 125.17ZM279.798 124.041C280.302 124.041 280.729 123.91 281.077 123.647C281.425 123.381 281.689 123.013 281.87 122.544C282.051 122.072 282.142 121.527 282.142 120.909C282.142 120.298 282.053 119.764 281.876 119.306C281.698 118.844 281.435 118.485 281.087 118.23C280.739 117.971 280.31 117.841 279.798 117.841C279.266 117.841 278.822 117.978 278.467 118.251C278.115 118.521 277.85 118.888 277.673 119.354C277.499 119.815 277.412 120.334 277.412 120.909C277.412 121.491 277.501 122.021 277.678 122.496C277.859 122.969 278.126 123.345 278.477 123.626C278.832 123.903 279.273 124.041 279.798 124.041ZM288.262 125.192C287.744 125.192 287.273 125.094 286.851 124.899C286.428 124.7 286.093 124.414 285.844 124.041C285.595 123.665 285.471 123.21 285.471 122.678C285.471 122.209 285.563 121.829 285.748 121.538C285.933 121.243 286.18 121.012 286.489 120.845C286.797 120.678 287.138 120.554 287.511 120.472C287.888 120.387 288.266 120.32 288.646 120.27C289.143 120.206 289.546 120.158 289.855 120.126C290.168 120.091 290.395 120.032 290.537 119.95C290.682 119.869 290.755 119.727 290.755 119.524V119.482C290.755 118.956 290.611 118.548 290.324 118.256C290.04 117.965 289.608 117.82 289.029 117.82C288.429 117.82 287.959 117.951 287.618 118.214C287.277 118.477 287.037 118.757 286.899 119.055L285.706 118.629C285.919 118.132 286.203 117.745 286.558 117.468C286.916 117.187 287.307 116.992 287.73 116.882C288.156 116.768 288.575 116.712 288.987 116.712C289.25 116.712 289.551 116.744 289.892 116.808C290.237 116.868 290.569 116.994 290.888 117.186C291.212 117.377 291.48 117.667 291.693 118.054C291.906 118.441 292.012 118.96 292.012 119.609V125H290.755V123.892H290.691C290.606 124.07 290.464 124.26 290.265 124.462C290.066 124.664 289.802 124.837 289.472 124.979C289.141 125.121 288.738 125.192 288.262 125.192ZM288.454 124.062C288.951 124.062 289.37 123.965 289.711 123.77C290.056 123.574 290.315 123.322 290.489 123.013C290.666 122.704 290.755 122.379 290.755 122.038V120.888C290.702 120.952 290.585 121.01 290.404 121.064C290.226 121.113 290.02 121.158 289.786 121.197C289.555 121.232 289.329 121.264 289.109 121.293C288.893 121.317 288.717 121.339 288.582 121.357C288.255 121.399 287.95 121.468 287.666 121.564C287.385 121.657 287.158 121.797 286.984 121.985C286.813 122.17 286.728 122.422 286.728 122.741C286.728 123.178 286.89 123.509 287.213 123.732C287.54 123.952 287.953 124.062 288.454 124.062ZM294.824 128.068C294.61 128.068 294.42 128.05 294.254 128.015C294.087 127.983 293.971 127.951 293.907 127.919L294.227 126.811C294.532 126.889 294.802 126.918 295.037 126.896C295.271 126.875 295.479 126.77 295.66 126.582C295.844 126.397 296.013 126.097 296.166 125.682L296.4 125.043L293.375 116.818H294.738L296.997 123.338H297.082L299.341 116.818H300.704L297.231 126.193C297.075 126.616 296.881 126.966 296.651 127.243C296.42 127.523 296.152 127.731 295.846 127.866C295.544 128.001 295.203 128.068 294.824 128.068ZM303.726 123.509L303.641 124.084C303.58 124.489 303.488 124.922 303.364 125.384C303.243 125.845 303.117 126.28 302.985 126.689C302.854 127.097 302.746 127.422 302.66 127.663H301.702C301.748 127.436 301.808 127.136 301.883 126.763C301.957 126.39 302.032 125.973 302.106 125.511C302.185 125.053 302.248 124.585 302.298 124.105L302.362 123.509H303.726ZM312.127 125L309.634 116.818H310.955L312.724 123.082H312.809L314.556 116.818H315.899L317.624 123.061H317.71L319.478 116.818H320.799L318.306 125H317.07L315.281 118.714H315.153L313.363 125H312.127ZM325.613 125.17C324.825 125.17 324.145 124.996 323.573 124.648C323.005 124.297 322.566 123.807 322.257 123.178C321.952 122.546 321.799 121.811 321.799 120.973C321.799 120.135 321.952 119.396 322.257 118.757C322.566 118.114 322.996 117.614 323.546 117.255C324.1 116.893 324.747 116.712 325.485 116.712C325.911 116.712 326.332 116.783 326.748 116.925C327.163 117.067 327.541 117.298 327.882 117.617C328.223 117.933 328.495 118.352 328.697 118.874C328.9 119.396 329.001 120.039 329.001 120.803V121.335H322.694V120.249H327.723C327.723 119.787 327.63 119.375 327.446 119.013C327.264 118.651 327.005 118.365 326.668 118.155C326.334 117.946 325.94 117.841 325.485 117.841C324.985 117.841 324.551 117.965 324.186 118.214C323.823 118.459 323.545 118.778 323.349 119.173C323.154 119.567 323.056 119.989 323.056 120.44V121.165C323.056 121.783 323.163 122.306 323.376 122.736C323.593 123.162 323.893 123.487 324.276 123.711C324.66 123.931 325.105 124.041 325.613 124.041C325.943 124.041 326.242 123.995 326.508 123.903C326.778 123.807 327.011 123.665 327.206 123.477C327.401 123.285 327.552 123.047 327.659 122.763L328.873 123.104C328.745 123.516 328.53 123.878 328.229 124.19C327.927 124.499 327.554 124.741 327.11 124.915C326.666 125.085 326.167 125.17 325.613 125.17ZM332.021 114.091V115.05C332.021 115.341 331.968 115.652 331.861 115.982C331.758 116.309 331.606 116.626 331.403 116.935C331.204 117.241 330.963 117.507 330.679 117.734L329.997 117.18C330.221 116.861 330.414 116.529 330.578 116.184C330.745 115.836 330.828 115.465 330.828 115.071V114.091H332.021ZM333.36 125V116.818H334.574V118.054H334.659C334.808 117.649 335.078 117.321 335.469 117.069C335.86 116.816 336.3 116.69 336.79 116.69C336.882 116.69 336.998 116.692 337.136 116.696C337.275 116.699 337.379 116.705 337.45 116.712V117.99C337.408 117.979 337.31 117.963 337.157 117.942C337.008 117.917 336.85 117.905 336.683 117.905C336.286 117.905 335.931 117.988 335.618 118.155C335.309 118.319 335.064 118.546 334.883 118.837C334.705 119.125 334.617 119.453 334.617 119.822V125H333.36ZM342.122 125.17C341.334 125.17 340.654 124.996 340.082 124.648C339.514 124.297 339.075 123.807 338.766 123.178C338.461 122.546 338.308 121.811 338.308 120.973C338.308 120.135 338.461 119.396 338.766 118.757C339.075 118.114 339.505 117.614 340.055 117.255C340.609 116.893 341.256 116.712 341.994 116.712C342.42 116.712 342.841 116.783 343.257 116.925C343.672 117.067 344.05 117.298 344.391 117.617C344.732 117.933 345.004 118.352 345.206 118.874C345.409 119.396 345.51 120.039 345.51 120.803V121.335H339.203V120.249H344.231C344.231 119.787 344.139 119.375 343.954 119.013C343.773 118.651 343.514 118.365 343.177 118.155C342.843 117.946 342.449 117.841 341.994 117.841C341.493 117.841 341.06 117.965 340.694 118.214C340.332 118.459 340.053 118.778 339.858 119.173C339.663 119.567 339.565 119.989 339.565 120.44V121.165C339.565 121.783 339.672 122.306 339.885 122.736C340.101 123.162 340.401 123.487 340.785 123.711C341.169 123.931 341.614 124.041 342.122 124.041C342.452 124.041 342.751 123.995 343.017 123.903C343.287 123.807 343.519 123.665 343.715 123.477C343.91 123.285 344.061 123.047 344.167 122.763L345.382 123.104C345.254 123.516 345.039 123.878 344.737 124.19C344.436 124.499 344.063 124.741 343.619 124.915C343.175 125.085 342.676 125.17 342.122 125.17ZM354.048 125.192C353.53 125.192 353.059 125.094 352.637 124.899C352.214 124.7 351.879 124.414 351.63 124.041C351.382 123.665 351.257 123.21 351.257 122.678C351.257 122.209 351.35 121.829 351.534 121.538C351.719 121.243 351.966 121.012 352.275 120.845C352.584 120.678 352.925 120.554 353.297 120.472C353.674 120.387 354.052 120.32 354.432 120.27C354.929 120.206 355.332 120.158 355.641 120.126C355.954 120.091 356.181 120.032 356.323 119.95C356.469 119.869 356.541 119.727 356.541 119.524V119.482C356.541 118.956 356.398 118.548 356.11 118.256C355.826 117.965 355.394 117.82 354.816 117.82C354.215 117.82 353.745 117.951 353.404 118.214C353.063 118.477 352.823 118.757 352.685 119.055L351.492 118.629C351.705 118.132 351.989 117.745 352.344 117.468C352.703 117.187 353.093 116.992 353.516 116.882C353.942 116.768 354.361 116.712 354.773 116.712C355.036 116.712 355.338 116.744 355.678 116.808C356.023 116.868 356.355 116.994 356.675 117.186C356.998 117.377 357.266 117.667 357.479 118.054C357.692 118.441 357.798 118.96 357.798 119.609V125H356.541V123.892H356.477C356.392 124.07 356.25 124.26 356.051 124.462C355.852 124.664 355.588 124.837 355.258 124.979C354.927 125.121 354.524 125.192 354.048 125.192ZM354.24 124.062C354.737 124.062 355.156 123.965 355.497 123.77C355.842 123.574 356.101 123.322 356.275 123.013C356.453 122.704 356.541 122.379 356.541 122.038V120.888C356.488 120.952 356.371 121.01 356.19 121.064C356.012 121.113 355.806 121.158 355.572 121.197C355.341 121.232 355.116 121.264 354.895 121.293C354.679 121.317 354.503 121.339 354.368 121.357C354.041 121.399 353.736 121.468 353.452 121.564C353.171 121.657 352.944 121.797 352.77 121.985C352.6 122.17 352.514 122.422 352.514 122.741C352.514 123.178 352.676 123.509 352.999 123.732C353.326 123.952 353.74 124.062 354.24 124.062ZM361.35 120.078V125H360.093V116.818H361.307V118.097H361.414C361.606 117.681 361.897 117.347 362.288 117.095C362.678 116.839 363.182 116.712 363.8 116.712C364.354 116.712 364.839 116.825 365.255 117.053C365.67 117.276 365.993 117.617 366.224 118.075C366.455 118.53 366.57 119.105 366.57 119.801V125H365.313V119.886C365.313 119.244 365.146 118.743 364.812 118.384C364.479 118.022 364.021 117.841 363.438 117.841C363.037 117.841 362.678 117.928 362.362 118.102C362.05 118.276 361.803 118.53 361.622 118.864C361.441 119.197 361.35 119.602 361.35 120.078ZM262.453 151.239C261.846 151.239 261.324 151.161 260.887 151.004C260.45 150.852 260.086 150.649 259.795 150.397C259.507 150.148 259.278 149.882 259.108 149.598L260.109 148.895C260.223 149.044 260.367 149.214 260.541 149.406C260.715 149.602 260.953 149.77 261.255 149.912C261.56 150.058 261.96 150.131 262.453 150.131C263.114 150.131 263.659 149.971 264.088 149.651C264.518 149.332 264.733 148.831 264.733 148.149V146.487H264.626C264.534 146.636 264.403 146.821 264.232 147.041C264.065 147.258 263.824 147.451 263.508 147.622C263.195 147.789 262.773 147.872 262.24 147.872C261.58 147.872 260.987 147.716 260.461 147.403C259.939 147.091 259.525 146.636 259.22 146.04C258.918 145.443 258.767 144.719 258.767 143.866C258.767 143.028 258.914 142.299 259.209 141.677C259.504 141.052 259.914 140.569 260.44 140.228C260.965 139.884 261.572 139.712 262.261 139.712C262.794 139.712 263.217 139.8 263.529 139.978C263.845 140.152 264.087 140.351 264.254 140.575C264.424 140.795 264.555 140.976 264.648 141.118H264.776V139.818H265.99V148.234C265.99 148.938 265.83 149.509 265.511 149.95C265.195 150.393 264.768 150.718 264.232 150.924C263.7 151.134 263.107 151.239 262.453 151.239ZM262.411 146.743C262.915 146.743 263.341 146.627 263.689 146.397C264.037 146.166 264.301 145.834 264.483 145.401C264.664 144.967 264.754 144.449 264.754 143.845C264.754 143.256 264.665 142.735 264.488 142.284C264.31 141.833 264.048 141.48 263.7 141.224C263.352 140.969 262.922 140.841 262.411 140.841C261.878 140.841 261.434 140.976 261.079 141.246C260.727 141.516 260.463 141.878 260.285 142.332C260.111 142.787 260.024 143.291 260.024 143.845C260.024 144.413 260.113 144.916 260.29 145.353C260.472 145.786 260.738 146.127 261.089 146.375C261.445 146.62 261.885 146.743 262.411 146.743ZM268.291 148V139.818H269.548V148H268.291ZM268.93 138.455C268.685 138.455 268.474 138.371 268.297 138.204C268.123 138.037 268.036 137.837 268.036 137.602C268.036 137.368 268.123 137.167 268.297 137C268.474 136.833 268.685 136.75 268.93 136.75C269.175 136.75 269.385 136.833 269.559 137C269.737 137.167 269.825 137.368 269.825 137.602C269.825 137.837 269.737 138.037 269.559 138.204C269.385 138.371 269.175 138.455 268.93 138.455ZM278.541 139.818L275.516 148H274.237L271.212 139.818H272.575L274.834 146.338H274.919L277.177 139.818H278.541ZM280.2 148V139.818H281.457V148H280.2ZM280.84 138.455C280.595 138.455 280.383 138.371 280.206 138.204C280.032 138.037 279.945 137.837 279.945 137.602C279.945 137.368 280.032 137.167 280.206 137C280.383 136.833 280.595 136.75 280.84 136.75C281.085 136.75 281.294 136.833 281.468 137C281.646 137.167 281.734 137.368 281.734 137.602C281.734 137.837 281.646 138.037 281.468 138.204C281.294 138.371 281.085 138.455 280.84 138.455ZM285.017 143.078V148H283.76V139.818H284.974V141.097H285.081C285.273 140.681 285.564 140.347 285.955 140.095C286.345 139.839 286.849 139.712 287.467 139.712C288.021 139.712 288.506 139.825 288.922 140.053C289.337 140.276 289.66 140.617 289.891 141.075C290.122 141.53 290.237 142.105 290.237 142.801V148H288.98V142.886C288.98 142.244 288.813 141.743 288.479 141.384C288.146 141.022 287.688 140.841 287.105 140.841C286.704 140.841 286.345 140.928 286.029 141.102C285.717 141.276 285.47 141.53 285.289 141.864C285.108 142.197 285.017 142.602 285.017 143.078ZM295.837 151.239C295.23 151.239 294.708 151.161 294.271 151.004C293.834 150.852 293.47 150.649 293.179 150.397C292.891 150.148 292.662 149.882 292.492 149.598L293.493 148.895C293.607 149.044 293.751 149.214 293.925 149.406C294.099 149.602 294.337 149.77 294.638 149.912C294.944 150.058 295.343 150.131 295.837 150.131C296.497 150.131 297.043 149.971 297.472 149.651C297.902 149.332 298.117 148.831 298.117 148.149V146.487H298.01C297.918 146.636 297.786 146.821 297.616 147.041C297.449 147.258 297.208 147.451 296.892 147.622C296.579 147.789 296.157 147.872 295.624 147.872C294.963 147.872 294.37 147.716 293.845 147.403C293.323 147.091 292.909 146.636 292.604 146.04C292.302 145.443 292.151 144.719 292.151 143.866C292.151 143.028 292.298 142.299 292.593 141.677C292.888 141.052 293.298 140.569 293.823 140.228C294.349 139.884 294.956 139.712 295.645 139.712C296.178 139.712 296.6 139.8 296.913 139.978C297.229 140.152 297.47 140.351 297.637 140.575C297.808 140.795 297.939 140.976 298.032 141.118H298.159V139.818H299.374V148.234C299.374 148.938 299.214 149.509 298.894 149.95C298.578 150.393 298.152 150.718 297.616 150.924C297.083 151.134 296.49 151.239 295.837 151.239ZM295.794 146.743C296.299 146.743 296.725 146.627 297.073 146.397C297.421 146.166 297.685 145.834 297.866 145.401C298.047 144.967 298.138 144.449 298.138 143.845C298.138 143.256 298.049 142.735 297.872 142.284C297.694 141.833 297.431 141.48 297.083 141.224C296.735 140.969 296.306 140.841 295.794 140.841C295.262 140.841 294.818 140.976 294.463 141.246C294.111 141.516 293.847 141.878 293.669 142.332C293.495 142.787 293.408 143.291 293.408 143.845C293.408 144.413 293.497 144.916 293.674 145.353C293.855 145.786 294.122 146.127 294.473 146.375C294.828 146.62 295.269 146.743 295.794 146.743ZM309.452 139.818V140.884H305.212V139.818H309.452ZM306.448 137.858H307.705V145.656C307.705 146.011 307.756 146.278 307.859 146.455C307.966 146.629 308.101 146.746 308.264 146.807C308.431 146.864 308.607 146.892 308.791 146.892C308.93 146.892 309.044 146.885 309.132 146.871C309.221 146.853 309.292 146.839 309.345 146.828L309.601 147.957C309.516 147.989 309.397 148.021 309.244 148.053C309.092 148.089 308.898 148.107 308.664 148.107C308.309 148.107 307.96 148.03 307.62 147.877C307.282 147.725 307.002 147.492 306.778 147.18C306.558 146.867 306.448 146.473 306.448 145.997V137.858ZM312.776 143.078V148H311.519V137.091H312.776V141.097H312.882C313.074 140.674 313.362 140.338 313.745 140.09C314.132 139.838 314.647 139.712 315.29 139.712C315.848 139.712 316.336 139.824 316.755 140.047C317.174 140.267 317.499 140.607 317.73 141.065C317.964 141.519 318.081 142.098 318.081 142.801V148H316.824V142.886C316.824 142.237 316.655 141.734 316.318 141.379C315.984 141.02 315.521 140.841 314.928 140.841C314.516 140.841 314.147 140.928 313.82 141.102C313.497 141.276 313.241 141.53 313.053 141.864C312.868 142.197 312.776 142.602 312.776 143.078ZM323.811 148.17C323.023 148.17 322.343 147.996 321.771 147.648C321.203 147.297 320.765 146.807 320.456 146.178C320.15 145.546 319.998 144.811 319.998 143.973C319.998 143.135 320.15 142.396 320.456 141.757C320.765 141.114 321.194 140.614 321.745 140.255C322.299 139.893 322.945 139.712 323.684 139.712C324.11 139.712 324.531 139.783 324.946 139.925C325.362 140.067 325.74 140.298 326.081 140.617C326.422 140.933 326.693 141.352 326.896 141.874C327.098 142.396 327.199 143.039 327.199 143.803V144.335H320.892V143.249H325.921C325.921 142.787 325.828 142.375 325.644 142.013C325.463 141.651 325.203 141.365 324.866 141.155C324.532 140.946 324.138 140.841 323.684 140.841C323.183 140.841 322.75 140.965 322.384 141.214C322.022 141.459 321.743 141.778 321.548 142.173C321.352 142.567 321.255 142.989 321.255 143.44V144.165C321.255 144.783 321.361 145.306 321.574 145.736C321.791 146.162 322.091 146.487 322.474 146.711C322.858 146.931 323.304 147.041 323.811 147.041C324.142 147.041 324.44 146.995 324.706 146.903C324.976 146.807 325.209 146.665 325.404 146.477C325.599 146.285 325.75 146.047 325.857 145.763L327.071 146.104C326.944 146.516 326.729 146.878 326.427 147.19C326.125 147.499 325.752 147.741 325.308 147.915C324.864 148.085 324.365 148.17 323.811 148.17ZM262.709 162.818V163.884H258.469V162.818H262.709ZM259.705 160.858H260.962V168.656C260.962 169.011 261.013 169.278 261.116 169.455C261.223 169.629 261.358 169.746 261.521 169.807C261.688 169.864 261.864 169.892 262.048 169.892C262.187 169.892 262.3 169.885 262.389 169.871C262.478 169.853 262.549 169.839 262.602 169.828L262.858 170.957C262.773 170.989 262.654 171.021 262.501 171.053C262.348 171.089 262.155 171.107 261.92 171.107C261.565 171.107 261.217 171.03 260.876 170.877C260.539 170.725 260.259 170.492 260.035 170.18C259.815 169.867 259.705 169.473 259.705 168.997V160.858ZM264.6 171V162.818H265.814V164.054H265.9C266.049 163.649 266.319 163.321 266.709 163.069C267.1 162.816 267.54 162.69 268.03 162.69C268.123 162.69 268.238 162.692 268.376 162.696C268.515 162.699 268.62 162.705 268.691 162.712V163.99C268.648 163.979 268.55 163.963 268.398 163.942C268.249 163.917 268.091 163.905 267.924 163.905C267.526 163.905 267.171 163.988 266.858 164.155C266.549 164.319 266.304 164.546 266.123 164.837C265.946 165.125 265.857 165.453 265.857 165.822V171H264.6ZM275.337 167.655V162.818H276.594V171H275.337V169.615H275.252C275.06 170.031 274.762 170.384 274.357 170.675C273.952 170.963 273.441 171.107 272.823 171.107C272.312 171.107 271.857 170.995 271.459 170.771C271.062 170.544 270.749 170.203 270.522 169.748C270.294 169.29 270.181 168.713 270.181 168.017V162.818H271.438V167.932C271.438 168.528 271.605 169.004 271.939 169.359C272.276 169.714 272.706 169.892 273.228 169.892C273.54 169.892 273.858 169.812 274.181 169.652C274.508 169.493 274.781 169.248 275.002 168.917C275.225 168.587 275.337 168.166 275.337 167.655ZM284.692 164.651L283.563 164.97C283.492 164.782 283.387 164.599 283.249 164.422C283.114 164.24 282.929 164.091 282.695 163.974C282.46 163.857 282.16 163.798 281.794 163.798C281.294 163.798 280.876 163.914 280.543 164.145C280.212 164.372 280.047 164.661 280.047 165.013C280.047 165.325 280.161 165.572 280.388 165.753C280.615 165.934 280.971 166.085 281.453 166.206L282.668 166.504C283.4 166.682 283.945 166.953 284.303 167.319C284.662 167.681 284.841 168.148 284.841 168.72C284.841 169.189 284.706 169.608 284.436 169.977C284.17 170.347 283.797 170.638 283.318 170.851C282.838 171.064 282.281 171.17 281.645 171.17C280.811 171.17 280.12 170.989 279.573 170.627C279.026 170.265 278.68 169.736 278.534 169.04L279.728 168.741C279.841 169.182 280.056 169.512 280.372 169.732C280.692 169.952 281.109 170.062 281.624 170.062C282.21 170.062 282.675 169.938 283.02 169.69C283.368 169.437 283.542 169.136 283.542 168.784C283.542 168.5 283.442 168.262 283.243 168.07C283.044 167.875 282.739 167.729 282.327 167.634L280.963 167.314C280.214 167.136 279.664 166.861 279.312 166.488C278.964 166.112 278.79 165.641 278.79 165.077C278.79 164.615 278.92 164.207 279.179 163.852C279.442 163.496 279.799 163.218 280.25 163.015C280.704 162.813 281.219 162.712 281.794 162.712C282.604 162.712 283.24 162.889 283.701 163.244C284.167 163.599 284.497 164.068 284.692 164.651ZM290.292 162.818V163.884H286.052V162.818H290.292ZM287.288 160.858H288.545V168.656C288.545 169.011 288.596 169.278 288.699 169.455C288.806 169.629 288.941 169.746 289.104 169.807C289.271 169.864 289.447 169.892 289.631 169.892C289.77 169.892 289.883 169.885 289.972 169.871C290.061 169.853 290.132 169.839 290.185 169.828L290.441 170.957C290.356 170.989 290.237 171.021 290.084 171.053C289.931 171.089 289.738 171.107 289.503 171.107C289.148 171.107 288.8 171.03 288.459 170.877C288.122 170.725 287.842 170.492 287.618 170.18C287.398 169.867 287.288 169.473 287.288 168.997V160.858ZM294.036 171L291.544 162.818H292.865L294.633 169.082H294.718L296.465 162.818H297.808L299.534 169.061H299.619L301.387 162.818H302.708L300.215 171H298.98L297.19 164.714H297.062L295.272 171H294.036ZM307.416 171.17C306.677 171.17 306.029 170.995 305.472 170.643C304.918 170.292 304.484 169.8 304.172 169.168C303.863 168.536 303.708 167.797 303.708 166.952C303.708 166.099 303.863 165.355 304.172 164.72C304.484 164.084 304.918 163.591 305.472 163.239C306.029 162.887 306.677 162.712 307.416 162.712C308.154 162.712 308.801 162.887 309.355 163.239C309.912 163.591 310.346 164.084 310.654 164.72C310.967 165.355 311.123 166.099 311.123 166.952C311.123 167.797 310.967 168.536 310.654 169.168C310.346 169.8 309.912 170.292 309.355 170.643C308.801 170.995 308.154 171.17 307.416 171.17ZM307.416 170.041C307.977 170.041 308.439 169.897 308.801 169.61C309.163 169.322 309.431 168.944 309.605 168.475C309.779 168.006 309.866 167.499 309.866 166.952C309.866 166.405 309.779 165.895 309.605 165.423C309.431 164.951 309.163 164.569 308.801 164.278C308.439 163.987 307.977 163.841 307.416 163.841C306.855 163.841 306.393 163.987 306.031 164.278C305.669 164.569 305.401 164.951 305.227 165.423C305.053 165.895 304.966 166.405 304.966 166.952C304.966 167.499 305.053 168.006 305.227 168.475C305.401 168.944 305.669 169.322 306.031 169.61C306.393 169.897 306.855 170.041 307.416 170.041ZM313.042 171V162.818H314.257V164.054H314.342C314.491 163.649 314.761 163.321 315.152 163.069C315.542 162.816 315.983 162.69 316.473 162.69C316.565 162.69 316.68 162.692 316.819 162.696C316.957 162.699 317.062 162.705 317.133 162.712V163.99C317.09 163.979 316.993 163.963 316.84 163.942C316.691 163.917 316.533 163.905 316.366 163.905C315.968 163.905 315.613 163.988 315.301 164.155C314.992 164.319 314.747 164.546 314.566 164.837C314.388 165.125 314.299 165.453 314.299 165.822V171H313.042ZM322.694 162.818V163.884H318.454V162.818H322.694ZM319.69 160.858H320.947V168.656C320.947 169.011 320.998 169.278 321.101 169.455C321.208 169.629 321.343 169.746 321.506 169.807C321.673 169.864 321.849 169.892 322.034 169.892C322.172 169.892 322.286 169.885 322.375 169.871C322.463 169.853 322.534 169.839 322.588 169.828L322.843 170.957C322.758 170.989 322.639 171.021 322.486 171.053C322.334 171.089 322.14 171.107 321.906 171.107C321.551 171.107 321.203 171.03 320.862 170.877C320.524 170.725 320.244 170.492 320.02 170.18C319.8 169.867 319.69 169.473 319.69 168.997V160.858ZM326.018 166.078V171H324.761V160.091H326.018V164.097H326.125C326.316 163.674 326.604 163.338 326.987 163.09C327.375 162.838 327.889 162.712 328.532 162.712C329.09 162.712 329.578 162.824 329.997 163.047C330.416 163.267 330.741 163.607 330.972 164.065C331.206 164.519 331.323 165.098 331.323 165.801V171H330.066V165.886C330.066 165.237 329.898 164.734 329.56 164.379C329.226 164.02 328.763 163.841 328.17 163.841C327.758 163.841 327.389 163.928 327.062 164.102C326.739 164.276 326.483 164.53 326.295 164.864C326.11 165.197 326.018 165.602 326.018 166.078ZM262.474 194.17C261.736 194.17 261.088 193.995 260.53 193.643C259.976 193.292 259.543 192.8 259.23 192.168C258.922 191.536 258.767 190.797 258.767 189.952C258.767 189.099 258.922 188.355 259.23 187.72C259.543 187.084 259.976 186.591 260.53 186.239C261.088 185.887 261.736 185.712 262.474 185.712C263.213 185.712 263.859 185.887 264.413 186.239C264.971 186.591 265.404 187.084 265.713 187.72C266.026 188.355 266.182 189.099 266.182 189.952C266.182 190.797 266.026 191.536 265.713 192.168C265.404 192.8 264.971 193.292 264.413 193.643C263.859 193.995 263.213 194.17 262.474 194.17ZM262.474 193.041C263.036 193.041 263.497 192.897 263.859 192.61C264.222 192.322 264.49 191.944 264.664 191.475C264.838 191.006 264.925 190.499 264.925 189.952C264.925 189.405 264.838 188.895 264.664 188.423C264.49 187.951 264.222 187.569 263.859 187.278C263.497 186.987 263.036 186.841 262.474 186.841C261.913 186.841 261.452 186.987 261.089 187.278C260.727 187.569 260.459 187.951 260.285 188.423C260.111 188.895 260.024 189.405 260.024 189.952C260.024 190.499 260.111 191.006 260.285 191.475C260.459 191.944 260.727 192.322 261.089 192.61C261.452 192.897 261.913 193.041 262.474 193.041ZM268.101 197.068V185.818H269.315V187.118H269.464C269.557 186.976 269.685 186.795 269.848 186.575C270.015 186.351 270.253 186.152 270.562 185.978C270.874 185.8 271.297 185.712 271.829 185.712C272.518 185.712 273.126 185.884 273.651 186.228C274.177 186.573 274.587 187.061 274.882 187.693C275.176 188.325 275.324 189.071 275.324 189.93C275.324 190.797 275.176 191.548 274.882 192.184C274.587 192.816 274.179 193.306 273.657 193.654C273.134 193.998 272.533 194.17 271.851 194.17C271.325 194.17 270.904 194.083 270.588 193.909C270.272 193.732 270.029 193.531 269.859 193.308C269.688 193.08 269.557 192.892 269.464 192.743H269.358V197.068H268.101ZM269.337 189.909C269.337 190.527 269.427 191.072 269.608 191.544C269.789 192.013 270.054 192.381 270.402 192.647C270.75 192.91 271.176 193.041 271.68 193.041C272.206 193.041 272.644 192.903 272.996 192.626C273.351 192.345 273.617 191.969 273.795 191.496C273.976 191.021 274.067 190.491 274.067 189.909C274.067 189.334 273.978 188.815 273.8 188.354C273.626 187.888 273.362 187.521 273.007 187.251C272.655 186.978 272.213 186.841 271.68 186.841C271.169 186.841 270.739 186.971 270.391 187.23C270.043 187.485 269.78 187.844 269.603 188.306C269.425 188.764 269.337 189.298 269.337 189.909ZM280.672 194.17C279.883 194.17 279.203 193.996 278.632 193.648C278.063 193.297 277.625 192.807 277.316 192.178C277.011 191.546 276.858 190.811 276.858 189.973C276.858 189.135 277.011 188.396 277.316 187.757C277.625 187.114 278.055 186.614 278.605 186.255C279.159 185.893 279.805 185.712 280.544 185.712C280.97 185.712 281.391 185.783 281.806 185.925C282.222 186.067 282.6 186.298 282.941 186.617C283.282 186.933 283.554 187.352 283.756 187.874C283.958 188.396 284.06 189.039 284.06 189.803V190.335H277.753V189.249H282.781C282.781 188.787 282.689 188.375 282.504 188.013C282.323 187.651 282.064 187.365 281.726 187.155C281.393 186.946 280.998 186.841 280.544 186.841C280.043 186.841 279.61 186.965 279.244 187.214C278.882 187.459 278.603 187.778 278.408 188.173C278.213 188.567 278.115 188.989 278.115 189.44V190.165C278.115 190.783 278.222 191.306 278.435 191.736C278.651 192.162 278.951 192.487 279.335 192.711C279.718 192.931 280.164 193.041 280.672 193.041C281.002 193.041 281.3 192.995 281.567 192.903C281.837 192.807 282.069 192.665 282.264 192.477C282.46 192.285 282.611 192.047 282.717 191.763L283.932 192.104C283.804 192.516 283.589 192.878 283.287 193.19C282.985 193.499 282.612 193.741 282.169 193.915C281.725 194.085 281.226 194.17 280.672 194.17ZM285.972 194V185.818H287.186V187.054H287.272C287.421 186.649 287.691 186.321 288.081 186.069C288.472 185.816 288.912 185.69 289.402 185.69C289.495 185.69 289.61 185.692 289.748 185.696C289.887 185.699 289.992 185.705 290.063 185.712V186.99C290.02 186.979 289.922 186.963 289.77 186.942C289.621 186.917 289.463 186.905 289.296 186.905C288.898 186.905 288.543 186.988 288.23 187.155C287.921 187.319 287.676 187.546 287.495 187.837C287.318 188.125 287.229 188.453 287.229 188.822V194H285.972ZM293.961 194.192C293.442 194.192 292.972 194.094 292.549 193.899C292.126 193.7 291.791 193.414 291.542 193.041C291.294 192.665 291.169 192.21 291.169 191.678C291.169 191.209 291.262 190.829 291.446 190.538C291.631 190.243 291.878 190.012 292.187 189.845C292.496 189.678 292.837 189.554 293.21 189.472C293.586 189.387 293.964 189.32 294.344 189.27C294.841 189.206 295.244 189.158 295.553 189.126C295.866 189.091 296.093 189.032 296.235 188.95C296.381 188.869 296.453 188.727 296.453 188.524V188.482C296.453 187.956 296.31 187.548 296.022 187.256C295.738 186.965 295.306 186.82 294.728 186.82C294.127 186.82 293.657 186.951 293.316 187.214C292.975 187.477 292.735 187.757 292.597 188.055L291.404 187.629C291.617 187.132 291.901 186.745 292.256 186.468C292.615 186.187 293.005 185.992 293.428 185.882C293.854 185.768 294.273 185.712 294.685 185.712C294.948 185.712 295.25 185.744 295.591 185.808C295.935 185.868 296.267 185.994 296.587 186.186C296.91 186.377 297.178 186.667 297.391 187.054C297.604 187.441 297.711 187.96 297.711 188.609V194H296.453V192.892H296.39C296.304 193.07 296.162 193.26 295.963 193.462C295.765 193.664 295.5 193.837 295.17 193.979C294.839 194.121 294.436 194.192 293.961 194.192ZM294.152 193.062C294.65 193.062 295.069 192.965 295.409 192.77C295.754 192.574 296.013 192.322 296.187 192.013C296.365 191.704 296.453 191.379 296.453 191.038V189.888C296.4 189.952 296.283 190.01 296.102 190.064C295.924 190.113 295.718 190.158 295.484 190.197C295.253 190.232 295.028 190.264 294.808 190.293C294.591 190.317 294.415 190.339 294.28 190.357C293.953 190.399 293.648 190.468 293.364 190.564C293.083 190.657 292.856 190.797 292.682 190.985C292.512 191.17 292.426 191.422 292.426 191.741C292.426 192.178 292.588 192.509 292.911 192.732C293.238 192.952 293.652 193.062 294.152 193.062ZM303.563 185.818V186.884H299.323V185.818H303.563ZM300.559 183.858H301.816V191.656C301.816 192.011 301.868 192.278 301.971 192.455C302.077 192.629 302.212 192.746 302.375 192.807C302.542 192.864 302.718 192.892 302.903 192.892C303.041 192.892 303.155 192.885 303.244 192.871C303.332 192.853 303.403 192.839 303.457 192.828L303.712 193.957C303.627 193.989 303.508 194.021 303.356 194.053C303.203 194.089 303.009 194.107 302.775 194.107C302.42 194.107 302.072 194.03 301.731 193.877C301.394 193.725 301.113 193.492 300.889 193.18C300.669 192.867 300.559 192.473 300.559 191.997V183.858ZM305.454 194V185.818H306.711V194H305.454ZM306.093 184.455C305.848 184.455 305.637 184.371 305.46 184.204C305.286 184.037 305.199 183.837 305.199 183.602C305.199 183.368 305.286 183.167 305.46 183C305.637 182.833 305.848 182.75 306.093 182.75C306.339 182.75 306.548 182.833 306.722 183C306.9 183.167 306.988 183.368 306.988 183.602C306.988 183.837 306.9 184.037 306.722 184.204C306.548 184.371 306.339 184.455 306.093 184.455ZM312.338 194.17C311.599 194.17 310.951 193.995 310.393 193.643C309.839 193.292 309.406 192.8 309.094 192.168C308.785 191.536 308.63 190.797 308.63 189.952C308.63 189.099 308.785 188.355 309.094 187.72C309.406 187.084 309.839 186.591 310.393 186.239C310.951 185.887 311.599 185.712 312.338 185.712C313.076 185.712 313.723 185.887 314.277 186.239C314.834 186.591 315.267 187.084 315.576 187.72C315.889 188.355 316.045 189.099 316.045 189.952C316.045 190.797 315.889 191.536 315.576 192.168C315.267 192.8 314.834 193.292 314.277 193.643C313.723 193.995 313.076 194.17 312.338 194.17ZM312.338 193.041C312.899 193.041 313.36 192.897 313.723 192.61C314.085 192.322 314.353 191.944 314.527 191.475C314.701 191.006 314.788 190.499 314.788 189.952C314.788 189.405 314.701 188.895 314.527 188.423C314.353 187.951 314.085 187.569 313.723 187.278C313.36 186.987 312.899 186.841 312.338 186.841C311.777 186.841 311.315 186.987 310.953 187.278C310.591 187.569 310.322 187.951 310.148 188.423C309.974 188.895 309.887 189.405 309.887 189.952C309.887 190.499 309.974 191.006 310.148 191.475C310.322 191.944 310.591 192.322 310.953 192.61C311.315 192.897 311.777 193.041 312.338 193.041ZM319.221 189.078V194H317.964V185.818H319.179V187.097H319.285C319.477 186.681 319.768 186.347 320.159 186.095C320.549 185.839 321.054 185.712 321.671 185.712C322.225 185.712 322.71 185.825 323.126 186.053C323.541 186.276 323.864 186.617 324.095 187.075C324.326 187.53 324.441 188.105 324.441 188.801V194H323.184V188.886C323.184 188.244 323.017 187.743 322.684 187.384C322.35 187.022 321.892 186.841 321.309 186.841C320.908 186.841 320.549 186.928 320.233 187.102C319.921 187.276 319.674 187.53 319.493 187.864C319.312 188.197 319.221 188.602 319.221 189.078Z\"\n          fill=\"#04B97A\"\n        />\n        <path\n          d=\"M259.321 57V46.0909H265.905V47.2628H260.642V50.9489H265.564V52.1207H260.642V55.8281H265.99V57H259.321ZM273.698 60.0682V55.7429H273.591C273.499 55.892 273.368 56.0803 273.197 56.3075C273.027 56.5312 272.783 56.7319 272.467 56.9094C272.151 57.0835 271.73 57.1705 271.205 57.1705C270.523 57.1705 269.921 56.9982 269.399 56.6538C268.877 56.3058 268.469 55.8157 268.174 55.1836C267.879 54.5479 267.732 53.7969 267.732 52.9304C267.732 52.071 267.879 51.3253 268.174 50.6932C268.469 50.0611 268.879 49.5728 269.404 49.2283C269.93 48.8839 270.537 48.7116 271.226 48.7116C271.759 48.7116 272.18 48.8004 272.489 48.978C272.801 49.152 273.039 49.3509 273.202 49.5746C273.369 49.7947 273.499 49.9759 273.591 50.1179H273.74V48.8182H274.955V60.0682H273.698ZM271.375 56.0412C271.88 56.0412 272.306 55.9098 272.654 55.647C273.002 55.3807 273.266 55.0131 273.447 54.5444C273.629 54.0721 273.719 53.527 273.719 52.9091C273.719 52.2983 273.63 51.7638 273.453 51.3058C273.275 50.8441 273.012 50.4854 272.664 50.2298C272.316 49.9705 271.887 49.8409 271.375 49.8409C270.843 49.8409 270.399 49.9776 270.044 50.2511C269.692 50.521 269.428 50.8885 269.25 51.3537C269.076 51.8153 268.989 52.3338 268.989 52.9091C268.989 53.4915 269.078 54.0206 269.255 54.4964C269.436 54.9687 269.703 55.3452 270.054 55.6257C270.409 55.9027 270.85 56.0412 271.375 56.0412ZM282.412 53.6548V48.8182H283.669V57H282.412V55.6151H282.327C282.135 56.0305 281.837 56.3839 281.432 56.6751C281.027 56.9627 280.516 57.1065 279.898 57.1065C279.387 57.1065 278.932 56.9947 278.534 56.771C278.137 56.5437 277.824 56.2028 277.597 55.7482C277.37 55.2901 277.256 54.7131 277.256 54.017V48.8182H278.513V53.9318C278.513 54.5284 278.68 55.0043 279.014 55.3594C279.351 55.7145 279.781 55.892 280.303 55.892C280.615 55.892 280.933 55.8121 281.256 55.6523C281.583 55.4925 281.857 55.2475 282.077 54.9173C282.3 54.587 282.412 54.1662 282.412 53.6548ZM285.972 57V48.8182H287.229V57H285.972ZM286.611 47.4545C286.366 47.4545 286.155 47.3711 285.977 47.2042C285.803 47.0373 285.716 46.8366 285.716 46.6023C285.716 46.3679 285.803 46.1673 285.977 46.0004C286.155 45.8335 286.366 45.75 286.611 45.75C286.856 45.75 287.066 45.8335 287.24 46.0004C287.417 46.1673 287.506 46.3679 287.506 46.6023C287.506 46.8366 287.417 47.0373 287.24 47.2042C287.066 47.3711 286.856 47.4545 286.611 47.4545ZM289.531 60.0682V48.8182H290.746V50.1179H290.895C290.987 49.9759 291.115 49.7947 291.279 49.5746C291.445 49.3509 291.683 49.152 291.992 48.978C292.305 48.8004 292.727 48.7116 293.26 48.7116C293.949 48.7116 294.556 48.8839 295.082 49.2283C295.607 49.5728 296.018 50.0611 296.312 50.6932C296.607 51.3253 296.754 52.071 296.754 52.9304C296.754 53.7969 296.607 54.5479 296.312 55.1836C296.018 55.8157 295.609 56.3058 295.087 56.6538C294.565 56.9982 293.963 57.1705 293.281 57.1705C292.756 57.1705 292.335 57.0835 292.019 56.9094C291.703 56.7319 291.46 56.5312 291.289 56.3075C291.119 56.0803 290.987 55.892 290.895 55.7429H290.789V60.0682H289.531ZM290.767 52.9091C290.767 53.527 290.858 54.0721 291.039 54.5444C291.22 55.0131 291.485 55.3807 291.833 55.647C292.181 55.9098 292.607 56.0412 293.111 56.0412C293.637 56.0412 294.075 55.9027 294.427 55.6257C294.782 55.3452 295.048 54.9687 295.226 54.4964C295.407 54.0206 295.497 53.4915 295.497 52.9091C295.497 52.3338 295.409 51.8153 295.231 51.3537C295.057 50.8885 294.792 50.521 294.437 50.2511C294.086 49.9776 293.644 49.8409 293.111 49.8409C292.6 49.8409 292.17 49.9705 291.822 50.2298C291.474 50.4854 291.211 50.8441 291.034 51.3058C290.856 51.7638 290.767 52.2983 290.767 52.9091ZM298.672 60.0682V48.8182H299.887V50.1179H300.036C300.128 49.9759 300.256 49.7947 300.419 49.5746C300.586 49.3509 300.824 49.152 301.133 48.978C301.445 48.8004 301.868 48.7116 302.401 48.7116C303.09 48.7116 303.697 48.8839 304.222 49.2283C304.748 49.5728 305.158 50.0611 305.453 50.6932C305.748 51.3253 305.895 52.071 305.895 52.9304C305.895 53.7969 305.748 54.5479 305.453 55.1836C305.158 55.8157 304.75 56.3058 304.228 56.6538C303.706 56.9982 303.104 57.1705 302.422 57.1705C301.896 57.1705 301.476 57.0835 301.16 56.9094C300.844 56.7319 300.6 56.5312 300.43 56.3075C300.259 56.0803 300.128 55.892 300.036 55.7429H299.929V60.0682H298.672ZM299.908 52.9091C299.908 53.527 299.998 54.0721 300.18 54.5444C300.361 55.0131 300.625 55.3807 300.973 55.647C301.321 55.9098 301.747 56.0412 302.252 56.0412C302.777 56.0412 303.216 55.9027 303.567 55.6257C303.922 55.3452 304.189 54.9687 304.366 54.4964C304.547 54.0206 304.638 53.4915 304.638 52.9091C304.638 52.3338 304.549 51.8153 304.372 51.3537C304.198 50.8885 303.933 50.521 303.578 50.2511C303.226 49.9776 302.784 49.8409 302.252 49.8409C301.74 49.8409 301.311 49.9705 300.963 50.2298C300.615 50.4854 300.352 50.8441 300.174 51.3058C299.997 51.7638 299.908 52.2983 299.908 52.9091ZM311.243 57.1705C310.455 57.1705 309.775 56.9964 309.203 56.6484C308.635 56.2969 308.196 55.8068 307.887 55.1783C307.582 54.5462 307.429 53.8111 307.429 52.973C307.429 52.1349 307.582 51.3963 307.887 50.7571C308.196 50.1143 308.626 49.6136 309.176 49.255C309.73 48.8928 310.377 48.7116 311.115 48.7116C311.541 48.7116 311.962 48.7827 312.378 48.9247C312.793 49.0668 313.171 49.2976 313.512 49.6172C313.853 49.9332 314.125 50.3523 314.327 50.8743C314.53 51.3963 314.631 52.0391 314.631 52.8026V53.3352H308.324V52.2486H313.352C313.352 51.7869 313.26 51.375 313.075 51.0128C312.894 50.6506 312.635 50.3647 312.298 50.1552C311.964 49.9457 311.57 49.8409 311.115 49.8409C310.615 49.8409 310.181 49.9652 309.816 50.2138C309.453 50.4588 309.175 50.7784 308.979 51.1726C308.784 51.5668 308.686 51.9893 308.686 52.4403V53.1648C308.686 53.7827 308.793 54.3065 309.006 54.7362C309.222 55.1623 309.523 55.4872 309.906 55.7109C310.29 55.9311 310.735 56.0412 311.243 56.0412C311.573 56.0412 311.872 55.995 312.138 55.9027C312.408 55.8068 312.64 55.6648 312.836 55.4766C313.031 55.2848 313.182 55.0469 313.289 54.7628L314.503 55.1037C314.375 55.5156 314.16 55.8778 313.858 56.1903C313.557 56.4993 313.184 56.7408 312.74 56.9148C312.296 57.0852 311.797 57.1705 311.243 57.1705ZM319.633 57.1705C318.951 57.1705 318.349 56.9982 317.827 56.6538C317.305 56.3058 316.896 55.8157 316.602 55.1836C316.307 54.5479 316.16 53.7969 316.16 52.9304C316.16 52.071 316.307 51.3253 316.602 50.6932C316.896 50.0611 317.307 49.5728 317.832 49.2283C318.358 48.8839 318.965 48.7116 319.654 48.7116C320.187 48.7116 320.607 48.8004 320.916 48.978C321.229 49.152 321.467 49.3509 321.63 49.5746C321.797 49.7947 321.927 49.9759 322.019 50.1179H322.126V46.0909H323.383V57H322.168V55.7429H322.019C321.927 55.892 321.795 56.0803 321.625 56.3075C321.454 56.5312 321.211 56.7319 320.895 56.9094C320.579 57.0835 320.158 57.1705 319.633 57.1705ZM319.803 56.0412C320.307 56.0412 320.733 55.9098 321.081 55.647C321.43 55.3807 321.694 55.0131 321.875 54.5444C322.056 54.0721 322.147 53.527 322.147 52.9091C322.147 52.2983 322.058 51.7638 321.881 51.3058C321.703 50.8441 321.44 50.4854 321.092 50.2298C320.744 49.9705 320.314 49.8409 319.803 49.8409C319.27 49.8409 318.827 49.9776 318.471 50.2511C318.12 50.521 317.855 50.8885 317.678 51.3537C317.504 51.8153 317.417 52.3338 317.417 52.9091C317.417 53.4915 317.506 54.0206 317.683 54.4964C317.864 54.9687 318.131 55.3452 318.482 55.6257C318.837 55.9027 319.278 56.0412 319.803 56.0412Z\"\n          fill=\"#D28A04\"\n        />\n      </g>\n      <defs>\n        <radialGradient\n          id=\"paint0_radial_38_7016\"\n          cx=\"0\"\n          cy=\"0\"\n          r=\"1\"\n          gradientUnits=\"userSpaceOnUse\"\n          gradientTransform=\"translate(153.5 100.5) rotate(90) scale(158.5 242.087)\"\n        >\n          <stop stopColor=\"#252837\" />\n          <stop offset=\"1\" stopColor=\"#0D0E12\" />\n        </radialGradient>\n        <linearGradient\n          id=\"paint1_linear_38_7016\"\n          x1=\"168.5\"\n          y1=\"-21.875\"\n          x2=\"168.5\"\n          y2=\"183\"\n          gradientUnits=\"userSpaceOnUse\"\n        >\n          <stop stopColor=\"#13141B\" />\n          <stop offset=\"1\" stopColor=\"#9499AD\" />\n        </linearGradient>\n        <linearGradient\n          id=\"paint2_linear_38_7016\"\n          x1=\"241\"\n          y1=\"3.25\"\n          x2=\"163.5\"\n          y2=\"3.25\"\n          gradientUnits=\"userSpaceOnUse\"\n        >\n          <stop stopColor=\"#A9F9DC\" />\n          <stop offset=\"1\" stopColor=\"#0FF0A1\" />\n        </linearGradient>\n        <linearGradient\n          id=\"paint3_linear_38_7016\"\n          x1=\"241\"\n          y1=\"108.25\"\n          x2=\"168\"\n          y2=\"108.25\"\n          gradientUnits=\"userSpaceOnUse\"\n        >\n          <stop stopColor=\"#A9F9DC\" />\n          <stop offset=\"1\" stopColor=\"#0FF0A1\" />\n        </linearGradient>\n        <linearGradient\n          id=\"paint4_linear_38_7016\"\n          x1=\"241\"\n          y1=\"63.25\"\n          x2=\"168\"\n          y2=\"63.25\"\n          gradientUnits=\"userSpaceOnUse\"\n        >\n          <stop stopColor=\"#F9E994\" />\n          <stop offset=\"1\" stopColor=\"#F9BC15\" />\n        </linearGradient>\n      </defs>\n    </svg>\n  )\n}\n","import {InfoOutlineIcon, ReadOnlyIcon} from '@sanity/icons'\nimport {\n  Badge,\n  Box,\n  Card,\n  Flex,\n  Heading,\n  Stack,\n  Text,\n  useClickOutsideEvent,\n  useGlobalKeyDown,\n} from '@sanity/ui'\nimport {useCallback, useRef, useState} from 'react'\n\nimport {Button, Popover} from '../../../ui-components'\nimport {useTranslation} from '../../i18n'\nimport {createLocaleNamespace} from '../i18n'\nimport {type CreateLinkedDocumentBannerContentProps} from '../types'\nimport {CreateLearnMoreButton} from './CreateLearnMoreButton'\nimport {CreateSvg} from './media/CreateSvg'\n\nconst POPOVER_RADIUS = 3\n\nexport function CreateLinkedDocumentBannerContent(props: CreateLinkedDocumentBannerContentProps) {\n  const {metadata} = props\n  const [infoOpen, setInfoOpen] = useState(false)\n  const popoverRef = useRef<HTMLDivElement | null>(null)\n  const infoButtonRef = useRef<HTMLButtonElement | null>(null)\n  const {t} = useTranslation(createLocaleNamespace)\n  const toggleOpen = useCallback(() => setInfoOpen((current) => !current), [])\n\n  useClickOutsideEvent(\n    () => setInfoOpen(false),\n    () => [popoverRef.current, infoButtonRef.current],\n  )\n\n  useGlobalKeyDown(\n    useCallback(\n      (event: KeyboardEvent) => {\n        if (event.key === 'Escape' && infoOpen) {\n          setInfoOpen(false)\n        }\n      },\n      [infoOpen],\n    ),\n  )\n\n  if (metadata?.ejected !== false) {\n    return null\n  }\n\n  const popoverContent = (\n    <Card overflow=\"hidden\" radius={POPOVER_RADIUS} ref={popoverRef}>\n      <CreateSvg />\n      <Stack space={3} paddingX={4} paddingY={3}>\n        <Flex gap={1} align=\"center\">\n          <Text size={1} weight=\"semibold\">\n            {t('create-link-info-popover.eyebrow-title')}\n          </Text>\n          <Badge fontSize={1}>{t('create-link-info-popover.eyebrow-badge')}</Badge>\n        </Flex>\n        <Stack space={4}>\n          <Heading size={2}>{t('create-link-info-popover.header')}</Heading>\n          <Text size={1}>{t('create-link-info-popover.text')}</Text>\n          <Flex flex={1} justify=\"flex-end\">\n            <CreateLearnMoreButton />\n          </Flex>\n        </Stack>\n      </Stack>\n    </Card>\n  )\n\n  return (\n    <Flex gap={1} align=\"center\">\n      <Flex gap={2} align=\"center\">\n        <Text size={0} weight=\"medium\">\n          <ReadOnlyIcon />\n        </Text>\n        <Box>\n          <Text size={1} weight=\"medium\">\n            {t('studio-create-link-banner.text')}\n          </Text>\n        </Box>\n      </Flex>\n      <Popover\n        content={popoverContent}\n        open={infoOpen}\n        radius={POPOVER_RADIUS}\n        style={{width: 320}}\n        tone=\"default\"\n        placement=\"bottom-start\"\n        fallbackPlacements={['bottom', 'bottom-end', 'right-start', 'right', 'right-end']}\n      >\n        <Button\n          ref={infoButtonRef}\n          icon={InfoOutlineIcon}\n          mode=\"bleed\"\n          onClick={toggleOpen}\n          // Negative margins added to prevent the button from blowing out banner height\n          style={{marginBottom: '-0.5em', marginTop: '-0.5em'}}\n          tooltipProps={{content: t('create-link-info.tooltip')}}\n        />\n      </Popover>\n    </Flex>\n  )\n}\n","import {type ComponentType, useContext} from 'react'\nimport {SanityCreateConfigContext} from 'sanity/_singletons'\n\nimport {type AppIdCache} from '../studio-app/appIdCache'\nimport {\n  type CreateLinkedActionsProps,\n  type CreateLinkedDocumentBannerContentProps,\n  type StartInCreateBannerProps,\n} from '../types'\n\n/**\n * @internal\n */\nexport interface SanityCreateConfigContextValue {\n  /**\n   * A boolean indicating whether \"Start in Create\" new document pane footer should be shown, when available.\n   */\n  startInCreateEnabled: boolean\n\n  fallbackStudioOrigin?: string\n\n  appIdCache?: AppIdCache\n\n  components?: {\n    documentLinkedBannerContent: ComponentType<CreateLinkedDocumentBannerContentProps> | undefined\n    documentLinkedActions: ComponentType<CreateLinkedActionsProps> | undefined\n    startInCreateBanner: ComponentType<StartInCreateBannerProps> | undefined\n  }\n}\n\n/**\n * @internal\n */\nexport function useSanityCreateConfig(): SanityCreateConfigContextValue {\n  const context = useContext(SanityCreateConfigContext)\n  if (!context) {\n    throw new Error('useSanityCreateConfig must be used within a SanityCreateConfigProvider')\n  }\n  return context\n}\n","import {ChevronDownIcon, ChevronUpIcon, InfoOutlineIcon} from '@sanity/icons'\nimport {\n  Box,\n  // eslint-disable-next-line no-restricted-imports\n  Button,\n  Card,\n  Flex,\n  Stack,\n  Text,\n} from '@sanity/ui'\nimport {useCallback, useId, useState} from 'react'\n\nimport {Dialog} from '../../../ui-components'\nimport {useTranslation} from '../../i18n'\nimport {createLocaleNamespace} from '../i18n'\n\nexport function CreateLinkingDialog() {\n  const {t} = useTranslation(createLocaleNamespace)\n  const id = useId()\n\n  const [troubleshootingOpen, setTroubleshootingOpen] = useState(false)\n\n  const handleToggleTroubleshooting = useCallback(() => {\n    setTroubleshootingOpen((prev) => !prev)\n  }, [])\n\n  return (\n    <Dialog header={t('linking-in-progress-dialog.header')} id={id} width={0}>\n      <Stack space={4}>\n        <Text size={1} weight=\"semibold\">\n          {t('linking-in-progress-dialog.lede')}\n        </Text>\n        <Text size={1}>{t('linking-in-progress-dialog.details')}</Text>\n        <Card border marginTop={2} padding={1} radius={2} tone=\"caution\">\n          <Stack space={2}>\n            <Button\n              mode=\"bleed\"\n              onClick={handleToggleTroubleshooting}\n              padding={2}\n              tone=\"caution\"\n              width=\"fill\"\n            >\n              <Flex align=\"center\" flex={1} justify=\"space-between\">\n                <Flex align=\"center\" gap={2}>\n                  <Text size={0} weight=\"medium\">\n                    <InfoOutlineIcon />\n                  </Text>\n                  <Text size={1} weight=\"medium\">\n                    {t('linking-in-progress-dialog.troubleshooting.button.title')}\n                  </Text>\n                </Flex>\n                <Text size={1} weight=\"medium\">\n                  {troubleshootingOpen ? <ChevronUpIcon /> : <ChevronDownIcon />}\n                </Text>\n              </Flex>\n            </Button>\n            {troubleshootingOpen && (\n              <Box padding={2}>\n                <Text muted size={1}>\n                  {t('linking-in-progress-dialog.troubleshooting.content')}\n                </Text>\n              </Box>\n            )}\n          </Stack>\n        </Card>\n      </Stack>\n    </Dialog>\n  )\n}\n","export async function checkStudioManifestExists(studioHostUrl: string): Promise<boolean> {\n  const url = `${studioHostUrl}/static/create-manifest.json`\n  try {\n    const response = await fetch(url, {\n      method: 'HEAD',\n    })\n\n    if (response.status == 404) {\n      return false\n    }\n\n    if (response.status > 299) {\n      console.error(`Failed to get manifest from ${url}`, response)\n      return false\n    }\n\n    return true\n  } catch (e) {\n    console.error(`Failed to fetch from ${url}`, e)\n    return false\n  }\n}\n","import {type SanityClient} from '@sanity/client'\n\nimport {checkStudioManifestExists} from './checkStudioManifestExists'\n\nexport interface StudioAppResponse {\n  id: string\n  title?: string\n  type: 'studio' | string\n  urlType: 'internal' | 'external' | string\n  appHost: string\n}\n\nexport interface StudioApp extends StudioAppResponse {\n  studioUrl: string\n}\n\nexport interface CompatibleStudioAppId {\n  /**\n   * AppId to use for the current origin\n   */\n  appId: string | undefined\n\n  /**\n   * All available studio apps\n   */\n  studioApps: StudioApp[]\n}\n\n// @ts-expect-error: __SANITY_STAGING__ is a global env variable set by the vite config\nconst isStaging = typeof __SANITY_STAGING__ !== 'undefined' && __SANITY_STAGING__ === true\nconst internalUrlSuffix = isStaging ? 'studio.sanity.work' : 'sanity.studio'\n\nasync function fetchStudiosWithUrl(\n  client: SanityClient,\n  projectId: string,\n  internalSuffix: string,\n) {\n  const apps = (await client.request({\n    method: 'GET',\n    url: `/projects/${projectId}/user-applications`,\n  })) as StudioAppResponse[]\n\n  return apps.map((app) => ({\n    ...app,\n    studioUrl: getStudioUrl(app, internalSuffix),\n  }))\n}\n\nexport async function fetchCreateCompatibleAppId(args: {\n  projectId: string\n  client: SanityClient\n  fallbackOrigin?: string\n  internalSuffix?: string\n  checkStudioManifest?: (studioHost: string) => Promise<boolean>\n  origin?: string\n}): Promise<CompatibleStudioAppId> {\n  const {\n    projectId,\n    client,\n    fallbackOrigin,\n    internalSuffix = internalUrlSuffix,\n    checkStudioManifest = checkStudioManifestExists,\n    origin = window.location?.origin,\n  } = args\n  const appsWithStudioUrl = await fetchStudiosWithUrl(client, projectId, internalSuffix)\n\n  const appMatchingOrigin = appsWithStudioUrl.find((app) => {\n    return app && origin && app.studioUrl?.startsWith(origin)\n  })\n\n  if (appMatchingOrigin?.appHost) {\n    const manifest = await checkStudioManifest(getStudioUrl(appMatchingOrigin, internalSuffix))\n    if (manifest) {\n      return {\n        appId: appMatchingOrigin.id,\n        studioApps: appsWithStudioUrl,\n      }\n    }\n  }\n\n  const appMatchingFallback = appsWithStudioUrl.find((app) => {\n    return app && fallbackOrigin && app.studioUrl?.startsWith(`https://${fallbackOrigin}`)\n  })\n\n  return {\n    appId: appMatchingFallback?.id,\n    studioApps: appsWithStudioUrl,\n  }\n}\n\nfunction getStudioUrl(app: StudioAppResponse, internalSuffix: string): string {\n  return app.urlType === 'internal' ? `https://${app.appHost}.${internalSuffix}` : app.appHost\n}\n","import {useEffect, useMemo, useState} from 'react'\n\nimport {useClient} from '../../hooks/useClient'\nimport {useSource} from '../../studio/source'\nimport {useSanityCreateConfig} from '../context/useSanityCreateConfig'\nimport {type AppIdCache, type AppIdFetcher} from './appIdCache'\nimport {type CompatibleStudioAppId, fetchCreateCompatibleAppId} from './fetchCreateCompatibleAppId'\n\nexport interface ResolvedStudioApp {\n  loading: boolean\n  studioApp?: CompatibleStudioAppId\n}\n\n/**\n * Fetches & caches the Studio appId for the current origin.\n *\n * @internal\n */\nexport function useStudioAppIdStore(cache: AppIdCache): ResolvedStudioApp {\n  const client = useClient({apiVersion: '2024-09-01'})\n  const config = useSanityCreateConfig()\n  const {projectId} = useSource()\n\n  const appIdFetcher: AppIdFetcher = useMemo(() => {\n    return (pId) =>\n      fetchCreateCompatibleAppId({\n        projectId: pId,\n        client,\n        fallbackOrigin: config.fallbackStudioOrigin,\n      })\n  }, [client, config.fallbackStudioOrigin])\n\n  return useStudioAppIdStoreInner({\n    projectId,\n    cache,\n    appIdFetcher,\n    enabled: config.startInCreateEnabled,\n  })\n}\n\nexport function useStudioAppIdStoreInner(props: {\n  cache: AppIdCache\n  projectId: string\n  enabled: boolean\n  appIdFetcher: AppIdFetcher\n}): ResolvedStudioApp {\n  const {cache, enabled, appIdFetcher, projectId} = props\n  const [loading, setLoading] = useState(false)\n\n  const [studioApp, setStudioApp] = useState<CompatibleStudioAppId | undefined>()\n\n  useEffect(() => {\n    let mounted = true\n    async function getAppId() {\n      if (!projectId) {\n        return\n      }\n      setLoading(true)\n\n      try {\n        const entry = await cache.get({projectId, appIdFetcher})\n        if (mounted) setStudioApp(entry)\n      } catch (err) {\n        if (mounted) setStudioApp(undefined)\n      } finally {\n        if (mounted) setLoading(false)\n      }\n    }\n\n    if (enabled) {\n      getAppId().catch(console.error)\n    }\n    return () => {\n      mounted = false\n      setLoading(false)\n    }\n  }, [setLoading, appIdFetcher, cache, enabled, projectId])\n\n  return {\n    loading,\n    studioApp,\n  }\n}\n","//these texts dont need to be translated – dev only\n/* eslint-disable i18next/no-literal-string */\nimport {InfoOutlineIcon, WarningOutlineIcon} from '@sanity/icons'\nimport {Badge, Card, Stack, Text, useClickOutsideEvent, useGlobalKeyDown} from '@sanity/ui'\nimport {useCallback, useMemo, useRef, useState} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Button, Popover} from '../../../ui-components'\nimport {useSanityCreateConfig} from '../context'\nimport {type CompatibleStudioAppId, type StudioApp} from '../studio-app/fetchCreateCompatibleAppId'\n\nconst WrapperCard = styled(Card)`\n  max-width: 450px;\n  max-height: 400px;\n  overflow-y: auto;\n`\n\nexport function StartInCreateDevInfoButton(props: {studioApp?: CompatibleStudioAppId}) {\n  const {studioApp} = props\n\n  const [open, setOpen] = useState(false)\n  const toggleOpen = useCallback(() => setOpen((current) => !current), [])\n\n  const popoverRef = useRef<HTMLDivElement | null>(null)\n  const infoButtonRef = useRef<HTMLButtonElement | null>(null)\n\n  const {fallbackStudioOrigin} = useSanityCreateConfig()\n\n  useClickOutsideEvent(\n    () => setOpen(false),\n    () => [popoverRef.current, infoButtonRef.current],\n  )\n\n  useGlobalKeyDown(\n    useCallback(\n      (event: KeyboardEvent) => {\n        if (event.key === 'Escape' && open) {\n          setOpen(false)\n        }\n      },\n      [open],\n    ),\n  )\n\n  const defaultStudio = useMemo(\n    () => studioApp?.studioApps.find((s) => s.id === studioApp?.appId),\n    [studioApp],\n  )\n\n  const noFallbackOrigin = !studioApp?.appId && !fallbackStudioOrigin\n  const invalidFallbackOrigin = fallbackStudioOrigin && !defaultStudio\n  const activeFallbackOrigin = fallbackStudioOrigin && defaultStudio\n\n  return (\n    <Popover\n      ref={popoverRef}\n      open={open}\n      placement=\"top\"\n      fallbackPlacements={['top-start', 'top-end', 'left', 'right']}\n      tone=\"default\"\n      content={\n        <WrapperCard radius={3} tone=\"default\">\n          <Stack padding={4} space={4}>\n            <Text muted size={1}>\n              This info button is only visible in development mode.\n            </Text>\n\n            {noFallbackOrigin && (\n              <Card border padding={3} radius={3}>\n                <Stack space={4}>\n                  <div>\n                    <Badge tone=\"caution\">No fallback origin defined</Badge>\n                  </div>\n                  <Text muted size={1}>\n                    The Start in Create button has been disabled in development as{' '}\n                    <code>beta.create.fallbackStudioOrigin</code> is not defined in{' '}\n                    <code>sanity.config</code>.\n                  </Text>\n                  <DeployedApps studioApps={studioApp?.studioApps} />\n                </Stack>\n              </Card>\n            )}\n\n            {activeFallbackOrigin && (\n              <>\n                <Card border padding={3} radius={3}>\n                  <Stack space={2}>\n                    <div>\n                      <Badge tone=\"positive\">Fallback studio origin</Badge>\n                    </div>\n                    <Text size={1} weight=\"medium\">\n                      <code>{fallbackStudioOrigin}</code>\n                    </Text>\n                  </Stack>\n                </Card>\n              </>\n            )}\n\n            {invalidFallbackOrigin && (\n              <Card border padding={3} radius={3}>\n                <Stack space={4}>\n                  <div>\n                    <Badge tone=\"critical\">Invalid fallback origin</Badge>\n                  </div>\n                  <Text size={1}>\n                    Fallback origin <code>{fallbackStudioOrigin}</code> set in{' '}\n                    <code>beta.create.fallbackStudioOrigin</code> is invalid.\n                  </Text>\n                  <DeployedApps studioApps={studioApp?.studioApps} />\n                </Stack>\n              </Card>\n            )}\n\n            <Text muted size={1}>\n              This banner is displayed in new documents on Studios deployed with a manifest.\n              Documents containing initial values are ignored.\n            </Text>\n\n            <Text size={1} weight=\"medium\">\n              For more details, please refer to{' '}\n              <a\n                href=\"https://snty.link/create-config-guide?ref=studio\"\n                target=\"_blank\"\n                rel=\"noreferrer\"\n              >\n                our configuration guide\n              </a>\n              .\n            </Text>\n          </Stack>\n        </WrapperCard>\n      }\n    >\n      <Button\n        ref={infoButtonRef}\n        icon={invalidFallbackOrigin ? WarningOutlineIcon : InfoOutlineIcon}\n        mode=\"bleed\"\n        selected={open}\n        tone={invalidFallbackOrigin ? 'critical' : 'default'}\n        onClick={toggleOpen}\n        tooltipProps={{\n          content: 'Developer info',\n          placement: 'top',\n        }}\n      />\n    </Popover>\n  )\n}\n\nfunction DeployedApps(props: {studioApps?: StudioApp[]}) {\n  const {studioApps} = props\n  if (!studioApps?.length) {\n    return <Text size={1}>There are no deployed studios available.</Text>\n  }\n\n  return (\n    <Stack space={4}>\n      <Text size={1} weight=\"medium\">\n        Available studio origin{studioApps.length > 1 ? 's' : ''}\n      </Text>\n      <Stack space={2}>\n        {studioApps.map((app) => {\n          return (\n            <Text key={app.id} size={1}>\n              <code>• {app.studioUrl?.replace(`https://`, '')}</code>\n            </Text>\n          )\n        })}\n      </Stack>\n      <Text muted size={1}>\n        To enable integration with Sanity Create, a deployed studio must have an accessible\n        manifest.\n      </Text>\n    </Stack>\n  )\n}\n","import {LaunchIcon, SparklesIcon} from '@sanity/icons'\nimport {Badge, Card, Flex, Inline, Stack, Text, useToast} from '@sanity/ui'\nimport {useCallback, useState} from 'react'\n\nimport {Button} from '../../../ui-components/button/Button'\nimport {TextWithTone} from '../../components/textWithTone/TextWithTone'\nimport {isDev} from '../../environment'\nimport {useTranslation} from '../../i18n'\nimport {usePerspective} from '../../perspective/usePerspective'\nimport {useWorkspace} from '../../studio'\nimport {useSanityCreateConfig} from '../context'\nimport {getCreateLinkUrl} from '../createDocumentUrls'\nimport {isSanityCreateExcludedType, isSanityCreateStartCompatibleDoc} from '../createUtils'\nimport {createLocaleNamespace} from '../i18n'\nimport {CreateLinkingDialog} from '../start-in-create/CreateLinkingDialog'\nimport {type AppIdCache} from '../studio-app/appIdCache'\nimport {type CompatibleStudioAppId} from '../studio-app/fetchCreateCompatibleAppId'\nimport {useStudioAppIdStore} from '../studio-app/useStudioAppIdStore'\nimport {type StartInCreateBannerProps} from '../types'\nimport {useSanityCreateTelemetry} from '../useSanityCreateTelemetry'\nimport {createUserDocumentationUrl} from './constants'\nimport {DialogPortalProvider} from './DialogPortalProvider'\nimport {StartInCreateDevInfoButton} from './StartInCreateDevInfoButton'\n\nexport function StartInCreateBanner(props: StartInCreateBannerProps) {\n  const {document, isInitialValueLoading} = props\n  const {appIdCache, startInCreateEnabled} = useSanityCreateConfig()\n  const {selectedPerspectiveName} = usePerspective()\n  const isExcludedByOption = isSanityCreateExcludedType(props.documentType)\n  const isNewPristineDoc = !document._createdAt\n  const isStartCreateCompatible = isSanityCreateStartCompatibleDoc(props.document)\n\n  const liveEdit = Boolean(props.documentType?.liveEdit)\n\n  const excludeOnPublished = selectedPerspectiveName === 'published' && !liveEdit\n  if (\n    excludeOnPublished ||\n    !isNewPristineDoc ||\n    !startInCreateEnabled ||\n    isExcludedByOption ||\n    !appIdCache ||\n    !isStartCreateCompatible ||\n    isInitialValueLoading\n  ) {\n    return null\n  }\n\n  return <StartInCreateBannerInner {...props} appIdCache={appIdCache} />\n}\n\nfunction StartInCreateBannerInner(props: StartInCreateBannerProps & {appIdCache: AppIdCache}) {\n  const {studioApp} = useStudioAppIdStore(props.appIdCache)\n\n  // we check documentReady here and not in the top wrapper, to allow the cache code to run while the document is loading\n  if (!studioApp || !props.documentReady) {\n    return null\n  }\n  return <StartInCreateBannerStudioApp {...props} studioApp={studioApp} />\n}\n\nfunction StartInCreateBannerStudioApp(\n  props: StartInCreateBannerProps & {\n    studioApp: CompatibleStudioAppId\n  },\n) {\n  const {documentId, documentType, panelPortalElementId, studioApp} = props\n  const appId = studioApp.appId\n\n  const {t} = useTranslation(createLocaleNamespace)\n  const telemetry = useSanityCreateTelemetry()\n  const workspace = useWorkspace()\n  const {push: pushToast} = useToast()\n\n  const [isLinking, setLinking] = useState(false)\n\n  const startLinking = useCallback(() => {\n    if (!appId) {\n      return\n    }\n\n    const createLinkId = documentType.liveEdit ? documentId : `drafts.${documentId}`\n\n    const createUrl = getCreateLinkUrl({\n      projectId: workspace.projectId,\n      appId,\n      workspaceName: workspace.name,\n      documentType: documentType.name,\n      docId: createLinkId,\n    })\n\n    if (!createUrl) {\n      pushToast({\n        title: t('start-in-create-dialog.error-toast.unresolved-url'),\n        status: 'warning',\n      })\n      return\n    }\n\n    window?.open(createUrl, '_blank')?.focus()\n    setLinking(true)\n    telemetry.linkAccepted()\n  }, [pushToast, t, telemetry, appId, workspace, documentType, documentId])\n\n  if (isLinking) {\n    return (\n      <DialogPortalProvider portalElementId={panelPortalElementId}>\n        <CreateLinkingDialog />\n      </DialogPortalProvider>\n    )\n  }\n\n  return (\n    <Flex>\n      <Card radius={3} padding={3} flex={1} tone=\"primary\">\n        <Flex justify=\"space-between\" align=\"center\" gap={4}>\n          <Flex gap={3} align=\"flex-start\" flex={1} paddingY={1}>\n            <Text size={1}>\n              <SparklesIcon />\n            </Text>\n            <Stack space={3}>\n              <Flex align=\"center\" gap={2} wrap=\"wrap\">\n                <TextWithTone size={1} weight=\"semibold\" tone=\"primary\">\n                  {t('start-in-create-banner.title')}\n                </TextWithTone>\n                <Badge\n                  fontSize={1}\n                  style={{marginTop: '-0.25em', marginBottom: '-0.25em'}}\n                  tone=\"default\"\n                >\n                  {t('start-in-create-banner.title-badge')}\n                </Badge>\n              </Flex>\n              <Inline>\n                <Text size={1} weight=\"medium\">\n                  {t('start-in-create-banner.subtitle')}{' '}\n                  <a target=\"_blank\" href={createUserDocumentationUrl} rel=\"noreferrer\">\n                    {t('start-in-create-dialog.cta.learn-more')}\n                  </a>\n                </Text>\n              </Inline>\n            </Stack>\n          </Flex>\n          <Flex gap={2}>\n            {isDev && <StartInCreateDevInfoButton studioApp={studioApp} />}\n            <Button\n              disabled={!appId}\n              iconRight={LaunchIcon}\n              onClick={startLinking}\n              text={t('start-in-create-link.label')}\n              tone=\"primary\"\n            />\n          </Flex>\n        </Flex>\n      </Card>\n    </Flex>\n  )\n}\n","import {type CompatibleStudioAppId} from './fetchCreateCompatibleAppId'\n\nexport interface AppIdCache {\n  get: (args: {\n    projectId: string\n    appIdFetcher: AppIdFetcher\n  }) => Promise<CompatibleStudioAppId | undefined>\n}\nexport type AppIdFetcher = (projectId: string) => Promise<CompatibleStudioAppId>\n\nexport function createAppIdCache(): AppIdCache {\n  const appIdCache: {\n    [key: string]: CompatibleStudioAppId | Promise<CompatibleStudioAppId | undefined> | undefined\n  } = {}\n\n  return {\n    get: async (args) => {\n      const {projectId, appIdFetcher} = args\n      let cacheElement = appIdCache[projectId]\n      if (!cacheElement) {\n        cacheElement = (async () => {\n          try {\n            return await appIdFetcher(projectId)\n          } catch (error) {\n            console.error(error)\n            appIdCache[projectId] = undefined\n            return undefined\n          }\n        })()\n        appIdCache[projectId] = cacheElement\n        return cacheElement\n      }\n\n      return cacheElement\n    },\n  }\n}\n","import {type ReactNode, useMemo, useState} from 'react'\nimport {SanityCreateConfigContext} from 'sanity/_singletons'\n\nimport {useSource} from '../../studio'\nimport {CreateLinkedActions} from '../components/CreateLinkedActions'\nimport {CreateLinkedDocumentBannerContent} from '../components/CreateLinkedDocumentBannerContent'\nimport {StartInCreateBanner} from '../components/StartInCreateBanner'\nimport {createAppIdCache} from '../studio-app/appIdCache'\nimport {type SanityCreateConfigContextValue} from './useSanityCreateConfig'\n\ninterface SanityCreateConfigProviderProps {\n  children: ReactNode\n}\n\n/**\n * @internal\n */\nexport function SanityCreateConfigProvider(\n  props: SanityCreateConfigProviderProps,\n): React.JSX.Element {\n  const {children} = props\n  const {beta} = useSource()\n\n  const [appIdCache] = useState(() => createAppIdCache())\n\n  const value = useMemo((): SanityCreateConfigContextValue => {\n    return {\n      ...beta?.create,\n      startInCreateEnabled: !!beta?.create?.startInCreateEnabled,\n      appIdCache,\n      components: {\n        documentLinkedBannerContent: CreateLinkedDocumentBannerContent,\n        documentLinkedActions: CreateLinkedActions,\n        startInCreateBanner: StartInCreateBanner,\n      },\n    }\n  }, [beta?.create, appIdCache])\n\n  return (\n    <SanityCreateConfigContext.Provider value={value}>\n      {children}\n    </SanityCreateConfigContext.Provider>\n  )\n}\n","import {type LayoutProps} from '../../config'\nimport {SanityCreateConfigProvider} from '../context/SanityCreateConfigProvider'\n\nexport function CreateIntegrationWrapper(props: LayoutProps) {\n  return <SanityCreateConfigProvider>{props.renderDefault(props)}</SanityCreateConfigProvider>\n}\n","import {definePlugin} from '../config'\nimport {CreateIntegrationWrapper} from './components/CreateIntegrationWrapper'\nimport {createUsEnglishLocaleBundle} from './i18n'\n\nexport const createIntegration = definePlugin(() => {\n  return {\n    name: 'sanity/create-integration',\n\n    studio: {\n      components: {\n        layout: CreateIntegrationWrapper,\n      },\n    },\n\n    i18n: {\n      bundles: [createUsEnglishLocaleBundle],\n    },\n  }\n})\n","import {ErrorOutlineIcon} from '@sanity/icons'\nimport {Card, Flex, Inline, Text} from '@sanity/ui'\n\ninterface Props {\n  description?: string\n  title: string\n}\n\nconst ErrorCallout = (props: Props) => {\n  const {description, title} = props\n\n  return (\n    <Card overflow=\"hidden\" padding={4} radius={2} shadow={1} tone=\"critical\">\n      <Flex align=\"center\" gap={4}>\n        <Text size={2}>\n          <ErrorOutlineIcon />\n        </Text>\n        <Inline space={2}>\n          <Text size={1} weight=\"semibold\">\n            {title}\n          </Text>\n          {description && <Text size={1}>{description}</Text>}\n        </Inline>\n      </Flex>\n    </Card>\n  )\n}\n\nexport default ErrorCallout\n","import {InfoOutlineIcon} from '@sanity/icons'\nimport {Card, Flex, Inline, Stack, Text} from '@sanity/ui'\n\nimport {RELEASES_DOCS_URL} from '../../constants'\n\n// TODO: TBC with design and growth\n\nconst InfoCallout = () => {\n  return (\n    <Card overflow=\"hidden\" padding={4} radius={2} shadow={1} tone=\"suggest\">\n      <Flex align=\"center\" gap={4}>\n        <Text size={2}>\n          <InfoOutlineIcon />\n        </Text>\n        <Inline space={3}>\n          <Text size={1} weight=\"semibold\">\n            Schedule Publishing is not enabled\n          </Text>\n          <Stack space={3} marginTop={2}>\n            <Text size={1}>\n              We recommend using{' '}\n              <a target=\"_blank\" href={RELEASES_DOCS_URL} rel=\"noreferrer\">\n                Releases\n              </a>\n              .\n            </Text>\n\n            <Text size={1}>\n              Scheduled Publishing is not enabled by default. It can be enabled in the config by\n              setting <code>scheduledPublishing.enabled = true</code>\n            </Text>\n            <Text size={1}>\n              <a\n                target=\"_blank\"\n                href={'https://www.sanity.io/docs/scheduled-publishing'}\n                rel=\"noreferrer\"\n              >\n                Read the docs\n              </a>\n            </Text>\n          </Stack>\n        </Inline>\n      </Flex>\n    </Card>\n  )\n}\n\nexport default InfoCallout\n","import {EarthAmericasIcon} from '@sanity/icons'\nimport {Box} from '@sanity/ui'\n\nimport {Button, Tooltip} from '../../../../ui-components'\nimport useDialogTimeZone from '../../hooks/useDialogTimeZone'\nimport useTimeZone from '../../hooks/useTimeZone'\n\nexport interface ButtonTimeZoneProps {\n  useElementQueries?: boolean\n}\n\nconst ButtonTimeZone = (props: ButtonTimeZoneProps) => {\n  const {useElementQueries} = props\n\n  const {timeZone} = useTimeZone()\n  const {DialogTimeZone, dialogProps, dialogTimeZoneShow} = useDialogTimeZone()\n\n  return (\n    <>\n      {/* Dialog */}\n      {DialogTimeZone && <DialogTimeZone {...dialogProps} />}\n\n      <Tooltip\n        content={`Displaying schedules in ${timeZone.alternativeName} (GMT${timeZone.offset})`}\n        portal\n      >\n        <div>\n          {/*\n          If `useElementQueries` is enabled, dates will be conditionally toggled at different element\n          breakpoints - provided this `<ButtonTimeZone>` is wrapped in a `<ButtonTimeZoneElementQuery>` component.\n        */}\n          {useElementQueries ? (\n            <>\n              <Box className=\"button-small\">\n                <Button\n                  icon={EarthAmericasIcon}\n                  mode=\"bleed\"\n                  onClick={dialogTimeZoneShow}\n                  text={`${timeZone.abbreviation}`}\n                />\n              </Box>\n              <Box className=\"button-large\">\n                <Button\n                  icon={EarthAmericasIcon}\n                  mode=\"bleed\"\n                  onClick={dialogTimeZoneShow}\n                  text={`${timeZone.alternativeName} (${timeZone.namePretty})`}\n                />\n              </Box>\n            </>\n          ) : (\n            <Button\n              icon={EarthAmericasIcon}\n              mode=\"bleed\"\n              onClick={dialogTimeZoneShow}\n              text={`${timeZone.alternativeName} (${timeZone.namePretty})`}\n            />\n          )}\n        </div>\n      </Tooltip>\n    </>\n  )\n}\n\nexport default ButtonTimeZone\n","import {ElementQuery} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nconst ButtonTimeZoneElementQuery = styled(ElementQuery)`\n  .button-small {\n    display: block;\n  }\n  .button-large {\n    display: none;\n  }\n\n  &[data-eq-min~='2'] {\n    .button-small {\n      display: none;\n    }\n    .button-large {\n      display: block;\n    }\n  }\n`\n\nexport default ButtonTimeZoneElementQuery\n","import {ArrowRightIcon, WarningOutlineIcon} from '@sanity/icons'\nimport {Card, Flex, rem, Text, useMediaIndex} from '@sanity/ui'\n// eslint-disable-next-line camelcase\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {css, styled} from 'styled-components'\n\nimport {RELEASES_DOCS_URL} from '../../constants'\n\n/**\n * Updates the size of the icon to be used inside a Text size=1 to a Text size=0, without having to add a new\n * Text element, allowing to sit inline in the same anchor element.\n */\nconst SmallIcon = styled(ArrowRightIcon)((props) => {\n  const {font} = getTheme_v2(props.theme)\n  const {ascenderHeight, descenderHeight, lineHeight, iconSize} = font.text.sizes[0]\n  const negHeight = ascenderHeight + descenderHeight\n  const capHeight = lineHeight - negHeight\n  const iconOffset = (capHeight - iconSize) / 2\n\n  return css`\n    &[data-sanity-icon] {\n      color: var(--card-link-color);\n      font-size: calc(${iconSize} / 16 * 1rem);\n      margin: ${rem(iconOffset)};\n      margin-bottom: ${rem(iconOffset)};\n    }\n  `\n})\n\nexport function WarningBanner() {\n  const mediaIndex = useMediaIndex()\n  const showWarningIcon = mediaIndex >= 2\n\n  return (\n    <Card padding={4} tone=\"caution\" width=\"fill\">\n      <Flex gap={3} align=\"center\" justify=\"center\">\n        <Text hidden={!showWarningIcon}>\n          <WarningOutlineIcon />\n        </Text>\n\n        <Text size={1} weight=\"medium\">\n          You are running both the new Releases and Scheduled Publishing\n        </Text>\n        <Text size={1} style={{whiteSpace: 'nowrap'}}>\n          <a href={RELEASES_DOCS_URL} target=\"_blank\" rel=\"noreferrer\">\n            Read more {` `}\n            <SmallIcon />\n          </a>\n        </Text>\n      </Flex>\n    </Card>\n  )\n}\n","import React, { useEffect, useLayoutEffect, createContext, useContext, useMemo, useRef, createElement } from 'react';\n\n// Shared state between server components and client components\nconst noop = ()=>{};\n// Using noop() as the undefined value as undefined can be replaced\n// by something else. Prettier ignore and extra parentheses are necessary here\n// to ensure that tsc doesn't remove the __NOINLINE__ comment.\n// prettier-ignore\nconst UNDEFINED = /*#__NOINLINE__*/ noop();\nconst OBJECT = Object;\nconst isUndefined = (v)=>v === UNDEFINED;\nconst isFunction = (v)=>typeof v == 'function';\nconst mergeObjects = (a, b)=>({\n        ...a,\n        ...b\n    });\nconst isPromiseLike = (x)=>isFunction(x.then);\n\n// use WeakMap to store the object->key mapping\n// so the objects can be garbage collected.\n// WeakMap uses a hashtable under the hood, so the lookup\n// complexity is almost O(1).\nconst table = new WeakMap();\n// counter of the key\nlet counter = 0;\n// A stable hash implementation that supports:\n// - Fast and ensures unique hash properties\n// - Handles unserializable values\n// - Handles object key ordering\n// - Generates short results\n//\n// This is not a serialization function, and the result is not guaranteed to be\n// parsable.\nconst stableHash = (arg)=>{\n    const type = typeof arg;\n    const constructor = arg && arg.constructor;\n    const isDate = constructor == Date;\n    let result;\n    let index;\n    if (OBJECT(arg) === arg && !isDate && constructor != RegExp) {\n        // Object/function, not null/date/regexp. Use WeakMap to store the id first.\n        // If it's already hashed, directly return the result.\n        result = table.get(arg);\n        if (result) return result;\n        // Store the hash first for circular reference detection before entering the\n        // recursive `stableHash` calls.\n        // For other objects like set and map, we use this id directly as the hash.\n        result = ++counter + '~';\n        table.set(arg, result);\n        if (constructor == Array) {\n            // Array.\n            result = '@';\n            for(index = 0; index < arg.length; index++){\n                result += stableHash(arg[index]) + ',';\n            }\n            table.set(arg, result);\n        }\n        if (constructor == OBJECT) {\n            // Object, sort keys.\n            result = '#';\n            const keys = OBJECT.keys(arg).sort();\n            while(!isUndefined(index = keys.pop())){\n                if (!isUndefined(arg[index])) {\n                    result += index + ':' + stableHash(arg[index]) + ',';\n                }\n            }\n            table.set(arg, result);\n        }\n    } else {\n        result = isDate ? arg.toJSON() : type == 'symbol' ? arg.toString() : type == 'string' ? JSON.stringify(arg) : '' + arg;\n    }\n    return result;\n};\n\n// Global state used to deduplicate requests and store listeners\nconst SWRGlobalState = new WeakMap();\n\nconst EMPTY_CACHE = {};\nconst INITIAL_CACHE = {};\nconst STR_UNDEFINED = 'undefined';\n// NOTE: Use the function to guarantee it's re-evaluated between jsdom and node runtime for tests.\nconst isWindowDefined = typeof window != STR_UNDEFINED;\nconst isDocumentDefined = typeof document != STR_UNDEFINED;\nconst hasRequestAnimationFrame = ()=>isWindowDefined && typeof window['requestAnimationFrame'] != STR_UNDEFINED;\nconst createCacheHelper = (cache, key)=>{\n    const state = SWRGlobalState.get(cache);\n    return [\n        // Getter\n        ()=>!isUndefined(key) && cache.get(key) || EMPTY_CACHE,\n        // Setter\n        (info)=>{\n            if (!isUndefined(key)) {\n                const prev = cache.get(key);\n                // Before writing to the store, we keep the value in the initial cache\n                // if it's not there yet.\n                if (!(key in INITIAL_CACHE)) {\n                    INITIAL_CACHE[key] = prev;\n                }\n                state[5](key, mergeObjects(prev, info), prev || EMPTY_CACHE);\n            }\n        },\n        // Subscriber\n        state[6],\n        // Get server cache snapshot\n        ()=>{\n            if (!isUndefined(key)) {\n                // If the cache was updated on the client, we return the stored initial value.\n                if (key in INITIAL_CACHE) return INITIAL_CACHE[key];\n            }\n            // If we haven't done any client-side updates, we return the current value.\n            return !isUndefined(key) && cache.get(key) || EMPTY_CACHE;\n        }\n    ];\n} // export { UNDEFINED, OBJECT, isUndefined, isFunction, mergeObjects, isPromiseLike }\n;\n\n/**\n * Due to the bug https://bugs.chromium.org/p/chromium/issues/detail?id=678075,\n * it's not reliable to detect if the browser is currently online or offline\n * based on `navigator.onLine`.\n * As a workaround, we always assume it's online on the first load, and change\n * the status upon `online` or `offline` events.\n */ let online = true;\nconst isOnline = ()=>online;\n// For node and React Native, `add/removeEventListener` doesn't exist on window.\nconst [onWindowEvent, offWindowEvent] = isWindowDefined && window.addEventListener ? [\n    window.addEventListener.bind(window),\n    window.removeEventListener.bind(window)\n] : [\n    noop,\n    noop\n];\nconst isVisible = ()=>{\n    const visibilityState = isDocumentDefined && document.visibilityState;\n    return isUndefined(visibilityState) || visibilityState !== 'hidden';\n};\nconst initFocus = (callback)=>{\n    // focus revalidate\n    if (isDocumentDefined) {\n        document.addEventListener('visibilitychange', callback);\n    }\n    onWindowEvent('focus', callback);\n    return ()=>{\n        if (isDocumentDefined) {\n            document.removeEventListener('visibilitychange', callback);\n        }\n        offWindowEvent('focus', callback);\n    };\n};\nconst initReconnect = (callback)=>{\n    // revalidate on reconnected\n    const onOnline = ()=>{\n        online = true;\n        callback();\n    };\n    // nothing to revalidate, just update the status\n    const onOffline = ()=>{\n        online = false;\n    };\n    onWindowEvent('online', onOnline);\n    onWindowEvent('offline', onOffline);\n    return ()=>{\n        offWindowEvent('online', onOnline);\n        offWindowEvent('offline', onOffline);\n    };\n};\nconst preset = {\n    isOnline,\n    isVisible\n};\nconst defaultConfigOptions = {\n    initFocus,\n    initReconnect\n};\n\nconst IS_REACT_LEGACY = !React.useId;\nconst IS_SERVER = !isWindowDefined || 'Deno' in window;\n// Polyfill requestAnimationFrame\nconst rAF = (f)=>hasRequestAnimationFrame() ? window['requestAnimationFrame'](f) : setTimeout(f, 1);\n// React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser.\nconst useIsomorphicLayoutEffect = IS_SERVER ? useEffect : useLayoutEffect;\n// This assignment is to extend the Navigator type to use effectiveType.\nconst navigatorConnection = typeof navigator !== 'undefined' && navigator.connection;\n// Adjust the config based on slow connection status (<= 70Kbps).\nconst slowConnection = !IS_SERVER && navigatorConnection && ([\n    'slow-2g',\n    '2g'\n].includes(navigatorConnection.effectiveType) || navigatorConnection.saveData);\n\nconst serialize = (key)=>{\n    if (isFunction(key)) {\n        try {\n            key = key();\n        } catch (err) {\n            // dependencies not ready\n            key = '';\n        }\n    }\n    // Use the original key as the argument of fetcher. This can be a string or an\n    // array of values.\n    const args = key;\n    // If key is not falsy, or not an empty array, hash it.\n    key = typeof key == 'string' ? key : (Array.isArray(key) ? key.length : key) ? stableHash(key) : '';\n    return [\n        key,\n        args\n    ];\n};\n\n// Global timestamp.\nlet __timestamp = 0;\nconst getTimestamp = ()=>++__timestamp;\n\nconst FOCUS_EVENT = 0;\nconst RECONNECT_EVENT = 1;\nconst MUTATE_EVENT = 2;\nconst ERROR_REVALIDATE_EVENT = 3;\n\nvar events = {\n  __proto__: null,\n  ERROR_REVALIDATE_EVENT: ERROR_REVALIDATE_EVENT,\n  FOCUS_EVENT: FOCUS_EVENT,\n  MUTATE_EVENT: MUTATE_EVENT,\n  RECONNECT_EVENT: RECONNECT_EVENT\n};\n\nasync function internalMutate(...args) {\n    const [cache, _key, _data, _opts] = args;\n    // When passing as a boolean, it's explicitly used to disable/enable\n    // revalidation.\n    const options = mergeObjects({\n        populateCache: true,\n        throwOnError: true\n    }, typeof _opts === 'boolean' ? {\n        revalidate: _opts\n    } : _opts || {});\n    let populateCache = options.populateCache;\n    const rollbackOnErrorOption = options.rollbackOnError;\n    let optimisticData = options.optimisticData;\n    const rollbackOnError = (error)=>{\n        return typeof rollbackOnErrorOption === 'function' ? rollbackOnErrorOption(error) : rollbackOnErrorOption !== false;\n    };\n    const throwOnError = options.throwOnError;\n    // If the second argument is a key filter, return the mutation results for all\n    // filtered keys.\n    if (isFunction(_key)) {\n        const keyFilter = _key;\n        const matchedKeys = [];\n        const it = cache.keys();\n        for (const key of it){\n            if (// Skip the special useSWRInfinite and useSWRSubscription keys.\n            !/^\\$(inf|sub)\\$/.test(key) && keyFilter(cache.get(key)._k)) {\n                matchedKeys.push(key);\n            }\n        }\n        return Promise.all(matchedKeys.map(mutateByKey));\n    }\n    return mutateByKey(_key);\n    async function mutateByKey(_k) {\n        // Serialize key\n        const [key] = serialize(_k);\n        if (!key) return;\n        const [get, set] = createCacheHelper(cache, key);\n        const [EVENT_REVALIDATORS, MUTATION, FETCH, PRELOAD] = SWRGlobalState.get(cache);\n        const startRevalidate = ()=>{\n            const revalidators = EVENT_REVALIDATORS[key];\n            const revalidate = isFunction(options.revalidate) ? options.revalidate(get().data, _k) : options.revalidate !== false;\n            if (revalidate) {\n                // Invalidate the key by deleting the concurrent request markers so new\n                // requests will not be deduped.\n                delete FETCH[key];\n                delete PRELOAD[key];\n                if (revalidators && revalidators[0]) {\n                    return revalidators[0](MUTATE_EVENT).then(()=>get().data);\n                }\n            }\n            return get().data;\n        };\n        // If there is no new data provided, revalidate the key with current state.\n        if (args.length < 3) {\n            // Revalidate and broadcast state.\n            return startRevalidate();\n        }\n        let data = _data;\n        let error;\n        // Update global timestamps.\n        const beforeMutationTs = getTimestamp();\n        MUTATION[key] = [\n            beforeMutationTs,\n            0\n        ];\n        const hasOptimisticData = !isUndefined(optimisticData);\n        const state = get();\n        // `displayedData` is the current value on screen. It could be the optimistic value\n        // that is going to be overridden by a `committedData`, or get reverted back.\n        // `committedData` is the validated value that comes from a fetch or mutation.\n        const displayedData = state.data;\n        const currentData = state._c;\n        const committedData = isUndefined(currentData) ? displayedData : currentData;\n        // Do optimistic data update.\n        if (hasOptimisticData) {\n            optimisticData = isFunction(optimisticData) ? optimisticData(committedData, displayedData) : optimisticData;\n            // When we set optimistic data, backup the current committedData data in `_c`.\n            set({\n                data: optimisticData,\n                _c: committedData\n            });\n        }\n        if (isFunction(data)) {\n            // `data` is a function, call it passing current cache value.\n            try {\n                data = data(committedData);\n            } catch (err) {\n                // If it throws an error synchronously, we shouldn't update the cache.\n                error = err;\n            }\n        }\n        // `data` is a promise/thenable, resolve the final data first.\n        if (data && isPromiseLike(data)) {\n            // This means that the mutation is async, we need to check timestamps to\n            // avoid race conditions.\n            data = await data.catch((err)=>{\n                error = err;\n            });\n            // Check if other mutations have occurred since we've started this mutation.\n            // If there's a race we don't update cache or broadcast the change,\n            // just return the data.\n            if (beforeMutationTs !== MUTATION[key][0]) {\n                if (error) throw error;\n                return data;\n            } else if (error && hasOptimisticData && rollbackOnError(error)) {\n                // Rollback. Always populate the cache in this case but without\n                // transforming the data.\n                populateCache = true;\n                // Reset data to be the latest committed data, and clear the `_c` value.\n                set({\n                    data: committedData,\n                    _c: UNDEFINED\n                });\n            }\n        }\n        // If we should write back the cache after request.\n        if (populateCache) {\n            if (!error) {\n                // Transform the result into data.\n                if (isFunction(populateCache)) {\n                    const populateCachedData = populateCache(data, committedData);\n                    set({\n                        data: populateCachedData,\n                        error: UNDEFINED,\n                        _c: UNDEFINED\n                    });\n                } else {\n                    // Only update cached data and reset the error if there's no error. Data can be `undefined` here.\n                    set({\n                        data,\n                        error: UNDEFINED,\n                        _c: UNDEFINED\n                    });\n                }\n            }\n        }\n        // Reset the timestamp to mark the mutation has ended.\n        MUTATION[key][1] = getTimestamp();\n        // Update existing SWR Hooks' internal states:\n        Promise.resolve(startRevalidate()).then(()=>{\n            // The mutation and revalidation are ended, we can clear it since the data is\n            // not an optimistic value anymore.\n            set({\n                _c: UNDEFINED\n            });\n        });\n        // Throw error or return data\n        if (error) {\n            if (throwOnError) throw error;\n            return;\n        }\n        return data;\n    }\n}\n\nconst revalidateAllKeys = (revalidators, type)=>{\n    for(const key in revalidators){\n        if (revalidators[key][0]) revalidators[key][0](type);\n    }\n};\nconst initCache = (provider, options)=>{\n    // The global state for a specific provider will be used to deduplicate\n    // requests and store listeners. As well as a mutate function that is bound to\n    // the cache.\n    // The provider's global state might be already initialized. Let's try to get the\n    // global state associated with the provider first.\n    if (!SWRGlobalState.has(provider)) {\n        const opts = mergeObjects(defaultConfigOptions, options);\n        // If there's no global state bound to the provider, create a new one with the\n        // new mutate function.\n        const EVENT_REVALIDATORS = {};\n        const mutate = internalMutate.bind(UNDEFINED, provider);\n        let unmount = noop;\n        const subscriptions = {};\n        const subscribe = (key, callback)=>{\n            const subs = subscriptions[key] || [];\n            subscriptions[key] = subs;\n            subs.push(callback);\n            return ()=>subs.splice(subs.indexOf(callback), 1);\n        };\n        const setter = (key, value, prev)=>{\n            provider.set(key, value);\n            const subs = subscriptions[key];\n            if (subs) {\n                for (const fn of subs){\n                    fn(value, prev);\n                }\n            }\n        };\n        const initProvider = ()=>{\n            if (!SWRGlobalState.has(provider)) {\n                // Update the state if it's new, or if the provider has been extended.\n                SWRGlobalState.set(provider, [\n                    EVENT_REVALIDATORS,\n                    {},\n                    {},\n                    {},\n                    mutate,\n                    setter,\n                    subscribe\n                ]);\n                if (!IS_SERVER) {\n                    // When listening to the native events for auto revalidations,\n                    // we intentionally put a delay (setTimeout) here to make sure they are\n                    // fired after immediate JavaScript executions, which can be\n                    // React's state updates.\n                    // This avoids some unnecessary revalidations such as\n                    // https://github.com/vercel/swr/issues/1680.\n                    const releaseFocus = opts.initFocus(setTimeout.bind(UNDEFINED, revalidateAllKeys.bind(UNDEFINED, EVENT_REVALIDATORS, FOCUS_EVENT)));\n                    const releaseReconnect = opts.initReconnect(setTimeout.bind(UNDEFINED, revalidateAllKeys.bind(UNDEFINED, EVENT_REVALIDATORS, RECONNECT_EVENT)));\n                    unmount = ()=>{\n                        releaseFocus && releaseFocus();\n                        releaseReconnect && releaseReconnect();\n                        // When un-mounting, we need to remove the cache provider from the state\n                        // storage too because it's a side-effect. Otherwise, when re-mounting we\n                        // will not re-register those event listeners.\n                        SWRGlobalState.delete(provider);\n                    };\n                }\n            }\n        };\n        initProvider();\n        // This is a new provider, we need to initialize it and setup DOM events\n        // listeners for `focus` and `reconnect` actions.\n        // We might want to inject an extra layer on top of `provider` in the future,\n        // such as key serialization, auto GC, etc.\n        // For now, it's just a `Map` interface without any modifications.\n        return [\n            provider,\n            mutate,\n            initProvider,\n            unmount\n        ];\n    }\n    return [\n        provider,\n        SWRGlobalState.get(provider)[4]\n    ];\n};\n\n// error retry\nconst onErrorRetry = (_, __, config, revalidate, opts)=>{\n    const maxRetryCount = config.errorRetryCount;\n    const currentRetryCount = opts.retryCount;\n    // Exponential backoff\n    const timeout = ~~((Math.random() + 0.5) * (1 << (currentRetryCount < 8 ? currentRetryCount : 8))) * config.errorRetryInterval;\n    if (!isUndefined(maxRetryCount) && currentRetryCount > maxRetryCount) {\n        return;\n    }\n    setTimeout(revalidate, timeout, opts);\n};\nconst compare = (currentData, newData)=>stableHash(currentData) == stableHash(newData);\n// Default cache provider\nconst [cache, mutate] = initCache(new Map());\n// Default config\nconst defaultConfig = mergeObjects({\n    // events\n    onLoadingSlow: noop,\n    onSuccess: noop,\n    onError: noop,\n    onErrorRetry,\n    onDiscarded: noop,\n    // switches\n    revalidateOnFocus: true,\n    revalidateOnReconnect: true,\n    revalidateIfStale: true,\n    shouldRetryOnError: true,\n    // timeouts\n    errorRetryInterval: slowConnection ? 10000 : 5000,\n    focusThrottleInterval: 5 * 1000,\n    dedupingInterval: 2 * 1000,\n    loadingTimeout: slowConnection ? 5000 : 3000,\n    // providers\n    compare,\n    isPaused: ()=>false,\n    cache,\n    mutate,\n    fallback: {}\n}, // use web preset by default\npreset);\n\nconst mergeConfigs = (a, b)=>{\n    // Need to create a new object to avoid mutating the original here.\n    const v = mergeObjects(a, b);\n    // If two configs are provided, merge their `use` and `fallback` options.\n    if (b) {\n        const { use: u1, fallback: f1 } = a;\n        const { use: u2, fallback: f2 } = b;\n        if (u1 && u2) {\n            v.use = u1.concat(u2);\n        }\n        if (f1 && f2) {\n            v.fallback = mergeObjects(f1, f2);\n        }\n    }\n    return v;\n};\n\nconst SWRConfigContext = createContext({});\nconst SWRConfig = (props)=>{\n    const { value } = props;\n    const parentConfig = useContext(SWRConfigContext);\n    const isFunctionalConfig = isFunction(value);\n    const config = useMemo(()=>isFunctionalConfig ? value(parentConfig) : value, [\n        isFunctionalConfig,\n        parentConfig,\n        value\n    ]);\n    // Extend parent context values and middleware.\n    const extendedConfig = useMemo(()=>isFunctionalConfig ? config : mergeConfigs(parentConfig, config), [\n        isFunctionalConfig,\n        parentConfig,\n        config\n    ]);\n    // Should not use the inherited provider.\n    const provider = config && config.provider;\n    // initialize the cache only on first access.\n    const cacheContextRef = useRef(UNDEFINED);\n    if (provider && !cacheContextRef.current) {\n        cacheContextRef.current = initCache(provider(extendedConfig.cache || cache), config);\n    }\n    const cacheContext = cacheContextRef.current;\n    // Override the cache if a new provider is given.\n    if (cacheContext) {\n        extendedConfig.cache = cacheContext[0];\n        extendedConfig.mutate = cacheContext[1];\n    }\n    // Unsubscribe events.\n    useIsomorphicLayoutEffect(()=>{\n        if (cacheContext) {\n            cacheContext[2] && cacheContext[2]();\n            return cacheContext[3];\n        }\n    }, []);\n    return createElement(SWRConfigContext.Provider, mergeObjects(props, {\n        value: extendedConfig\n    }));\n};\n\nconst INFINITE_PREFIX = '$inf$';\n\n// @ts-expect-error\nconst enableDevtools = isWindowDefined && window.__SWR_DEVTOOLS_USE__;\nconst use = enableDevtools ? window.__SWR_DEVTOOLS_USE__ : [];\nconst setupDevTools = ()=>{\n    if (enableDevtools) {\n        // @ts-expect-error\n        window.__SWR_DEVTOOLS_REACT__ = React;\n    }\n};\n\nconst normalize = (args)=>{\n    return isFunction(args[1]) ? [\n        args[0],\n        args[1],\n        args[2] || {}\n    ] : [\n        args[0],\n        null,\n        (args[1] === null ? args[2] : args[1]) || {}\n    ];\n};\n\nconst useSWRConfig = ()=>{\n    return mergeObjects(defaultConfig, useContext(SWRConfigContext));\n};\n\nconst preload = (key_, fetcher)=>{\n    const [key, fnArg] = serialize(key_);\n    const [, , , PRELOAD] = SWRGlobalState.get(cache);\n    // Prevent preload to be called multiple times before used.\n    if (PRELOAD[key]) return PRELOAD[key];\n    const req = fetcher(fnArg);\n    PRELOAD[key] = req;\n    return req;\n};\nconst middleware = (useSWRNext)=>(key_, fetcher_, config)=>{\n        // fetcher might be a sync function, so this should not be an async function\n        const fetcher = fetcher_ && ((...args)=>{\n            const [key] = serialize(key_);\n            const [, , , PRELOAD] = SWRGlobalState.get(cache);\n            if (key.startsWith(INFINITE_PREFIX)) {\n                // we want the infinite fetcher to be called.\n                // handling of the PRELOAD cache happens there.\n                return fetcher_(...args);\n            }\n            const req = PRELOAD[key];\n            if (isUndefined(req)) return fetcher_(...args);\n            delete PRELOAD[key];\n            return req;\n        });\n        return useSWRNext(key_, fetcher, config);\n    };\n\nconst BUILT_IN_MIDDLEWARE = use.concat(middleware);\n\n// It's tricky to pass generic types as parameters, so we just directly override\n// the types here.\nconst withArgs = (hook)=>{\n    return function useSWRArgs(...args) {\n        // Get the default and inherited configuration.\n        const fallbackConfig = useSWRConfig();\n        // Normalize arguments.\n        const [key, fn, _config] = normalize(args);\n        // Merge configurations.\n        const config = mergeConfigs(fallbackConfig, _config);\n        // Apply middleware\n        let next = hook;\n        const { use } = config;\n        const middleware = (use || []).concat(BUILT_IN_MIDDLEWARE);\n        for(let i = middleware.length; i--;){\n            next = middleware[i](next);\n        }\n        return next(key, fn || config.fetcher || null, config);\n    };\n};\n\n// Add a callback function to a list of keyed callback functions and return\n// the unsubscribe function.\nconst subscribeCallback = (key, callbacks, callback)=>{\n    const keyedRevalidators = callbacks[key] || (callbacks[key] = []);\n    keyedRevalidators.push(callback);\n    return ()=>{\n        const index = keyedRevalidators.indexOf(callback);\n        if (index >= 0) {\n            // O(1): faster than splice\n            keyedRevalidators[index] = keyedRevalidators[keyedRevalidators.length - 1];\n            keyedRevalidators.pop();\n        }\n    };\n};\n\n// Create a custom hook with a middleware\nconst withMiddleware = (useSWR, middleware)=>{\n    return (...args)=>{\n        const [key, fn, config] = normalize(args);\n        const uses = (config.use || []).concat(middleware);\n        return useSWR(key, fn, {\n            ...config,\n            use: uses\n        });\n    };\n};\n\nsetupDevTools();\n\nexport { INFINITE_PREFIX, IS_REACT_LEGACY, IS_SERVER, OBJECT, SWRConfig, SWRGlobalState, UNDEFINED, cache, compare, createCacheHelper, defaultConfig, defaultConfigOptions, getTimestamp, hasRequestAnimationFrame, initCache, internalMutate, isDocumentDefined, isFunction, isPromiseLike, isUndefined, isWindowDefined, mergeConfigs, mergeObjects, mutate, noop, normalize, preload, preset, rAF, events as revalidateEvents, serialize, slowConnection, stableHash, subscribeCallback, useIsomorphicLayoutEffect, useSWRConfig, withArgs, withMiddleware };\n","import 'client-only';\nimport ReactExports, { useRef, useMemo, useCallback, useDebugValue } from 'react';\nimport { useSyncExternalStore } from 'use-sync-external-store/shim/index.js';\nimport { serialize, OBJECT, SWRConfig as SWRConfig$1, defaultConfig, withArgs, SWRGlobalState, createCacheHelper, isUndefined, getTimestamp, UNDEFINED, isFunction, revalidateEvents, internalMutate, useIsomorphicLayoutEffect, subscribeCallback, IS_SERVER, rAF, IS_REACT_LEGACY, mergeObjects } from 'swr/_internal';\nexport { mutate, preload, useSWRConfig } from 'swr/_internal';\n\nconst unstable_serialize = (key)=>serialize(key)[0];\n\n/// <reference types=\"react/experimental\" />\nconst use = ReactExports.use || ((promise)=>{\n    if (promise.status === 'pending') {\n        throw promise;\n    } else if (promise.status === 'fulfilled') {\n        return promise.value;\n    } else if (promise.status === 'rejected') {\n        throw promise.reason;\n    } else {\n        promise.status = 'pending';\n        promise.then((v)=>{\n            promise.status = 'fulfilled';\n            promise.value = v;\n        }, (e)=>{\n            promise.status = 'rejected';\n            promise.reason = e;\n        });\n        throw promise;\n    }\n});\nconst WITH_DEDUPE = {\n    dedupe: true\n};\nconst useSWRHandler = (_key, fetcher, config)=>{\n    const { cache, compare, suspense, fallbackData, revalidateOnMount, revalidateIfStale, refreshInterval, refreshWhenHidden, refreshWhenOffline, keepPreviousData } = config;\n    const [EVENT_REVALIDATORS, MUTATION, FETCH, PRELOAD] = SWRGlobalState.get(cache);\n    // `key` is the identifier of the SWR internal state,\n    // `fnArg` is the argument/arguments parsed from the key, which will be passed\n    // to the fetcher.\n    // All of them are derived from `_key`.\n    const [key, fnArg] = serialize(_key);\n    // If it's the initial render of this hook.\n    const initialMountedRef = useRef(false);\n    // If the hook is unmounted already. This will be used to prevent some effects\n    // to be called after unmounting.\n    const unmountedRef = useRef(false);\n    // Refs to keep the key and config.\n    const keyRef = useRef(key);\n    const fetcherRef = useRef(fetcher);\n    const configRef = useRef(config);\n    const getConfig = ()=>configRef.current;\n    const isActive = ()=>getConfig().isVisible() && getConfig().isOnline();\n    const [getCache, setCache, subscribeCache, getInitialCache] = createCacheHelper(cache, key);\n    const stateDependencies = useRef({}).current;\n    const fallback = isUndefined(fallbackData) ? config.fallback[key] : fallbackData;\n    const isEqual = (prev, current)=>{\n        for(const _ in stateDependencies){\n            const t = _;\n            if (t === 'data') {\n                if (!compare(prev[t], current[t])) {\n                    if (!isUndefined(prev[t])) {\n                        return false;\n                    }\n                    if (!compare(returnedData, current[t])) {\n                        return false;\n                    }\n                }\n            } else {\n                if (current[t] !== prev[t]) {\n                    return false;\n                }\n            }\n        }\n        return true;\n    };\n    const getSnapshot = useMemo(()=>{\n        const shouldStartRequest = (()=>{\n            if (!key) return false;\n            if (!fetcher) return false;\n            // If `revalidateOnMount` is set, we take the value directly.\n            if (!isUndefined(revalidateOnMount)) return revalidateOnMount;\n            // If it's paused, we skip revalidation.\n            if (getConfig().isPaused()) return false;\n            if (suspense) return false;\n            if (!isUndefined(revalidateIfStale)) return revalidateIfStale;\n            return true;\n        })();\n        // Get the cache and merge it with expected states.\n        const getSelectedCache = (state)=>{\n            // We only select the needed fields from the state.\n            const snapshot = mergeObjects(state);\n            delete snapshot._k;\n            if (!shouldStartRequest) {\n                return snapshot;\n            }\n            return {\n                isValidating: true,\n                isLoading: true,\n                ...snapshot\n            };\n        };\n        const cachedData = getCache();\n        const initialData = getInitialCache();\n        const clientSnapshot = getSelectedCache(cachedData);\n        const serverSnapshot = cachedData === initialData ? clientSnapshot : getSelectedCache(initialData);\n        // To make sure that we are returning the same object reference to avoid\n        // unnecessary re-renders, we keep the previous snapshot and use deep\n        // comparison to check if we need to return a new one.\n        let memorizedSnapshot = clientSnapshot;\n        return [\n            ()=>{\n                const newSnapshot = getSelectedCache(getCache());\n                const compareResult = isEqual(newSnapshot, memorizedSnapshot);\n                if (compareResult) {\n                    // Mentally, we should always return the `memorizedSnapshot` here\n                    // as there's no change between the new and old snapshots.\n                    // However, since the `isEqual` function only compares selected fields,\n                    // the values of the unselected fields might be changed. That's\n                    // simply because we didn't track them.\n                    // To support the case in https://github.com/vercel/swr/pull/2576,\n                    // we need to update these fields in the `memorizedSnapshot` too\n                    // with direct mutations to ensure the snapshot is always up-to-date\n                    // even for the unselected fields, but only trigger re-renders when\n                    // the selected fields are changed.\n                    memorizedSnapshot.data = newSnapshot.data;\n                    memorizedSnapshot.isLoading = newSnapshot.isLoading;\n                    memorizedSnapshot.isValidating = newSnapshot.isValidating;\n                    memorizedSnapshot.error = newSnapshot.error;\n                    return memorizedSnapshot;\n                } else {\n                    memorizedSnapshot = newSnapshot;\n                    return newSnapshot;\n                }\n            },\n            ()=>serverSnapshot\n        ];\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [\n        cache,\n        key\n    ]);\n    // Get the current state that SWR should return.\n    const cached = useSyncExternalStore(useCallback((callback)=>subscribeCache(key, (current, prev)=>{\n            if (!isEqual(prev, current)) callback();\n        }), // eslint-disable-next-line react-hooks/exhaustive-deps\n    [\n        cache,\n        key\n    ]), getSnapshot[0], getSnapshot[1]);\n    const isInitialMount = !initialMountedRef.current;\n    const hasRevalidator = EVENT_REVALIDATORS[key] && EVENT_REVALIDATORS[key].length > 0;\n    const cachedData = cached.data;\n    const data = isUndefined(cachedData) ? fallback : cachedData;\n    const error = cached.error;\n    // Use a ref to store previously returned data. Use the initial data as its initial value.\n    const laggyDataRef = useRef(data);\n    const returnedData = keepPreviousData ? isUndefined(cachedData) ? laggyDataRef.current : cachedData : data;\n    // - Suspense mode and there's stale data for the initial render.\n    // - Not suspense mode and there is no fallback data and `revalidateIfStale` is enabled.\n    // - `revalidateIfStale` is enabled but `data` is not defined.\n    const shouldDoInitialRevalidation = (()=>{\n        // if a key already has revalidators and also has error, we should not trigger revalidation\n        if (hasRevalidator && !isUndefined(error)) return false;\n        // If `revalidateOnMount` is set, we take the value directly.\n        if (isInitialMount && !isUndefined(revalidateOnMount)) return revalidateOnMount;\n        // If it's paused, we skip revalidation.\n        if (getConfig().isPaused()) return false;\n        // Under suspense mode, it will always fetch on render if there is no\n        // stale data so no need to revalidate immediately mount it again.\n        // If data exists, only revalidate if `revalidateIfStale` is true.\n        if (suspense) return isUndefined(data) ? false : revalidateIfStale;\n        // If there is no stale data, we need to revalidate when mount;\n        // If `revalidateIfStale` is set to true, we will always revalidate.\n        return isUndefined(data) || revalidateIfStale;\n    })();\n    // Resolve the default validating state:\n    // If it's able to validate, and it should revalidate when mount, this will be true.\n    const defaultValidatingState = !!(key && fetcher && isInitialMount && shouldDoInitialRevalidation);\n    const isValidating = isUndefined(cached.isValidating) ? defaultValidatingState : cached.isValidating;\n    const isLoading = isUndefined(cached.isLoading) ? defaultValidatingState : cached.isLoading;\n    // The revalidation function is a carefully crafted wrapper of the original\n    // `fetcher`, to correctly handle the many edge cases.\n    const revalidate = useCallback(async (revalidateOpts)=>{\n        const currentFetcher = fetcherRef.current;\n        if (!key || !currentFetcher || unmountedRef.current || getConfig().isPaused()) {\n            return false;\n        }\n        let newData;\n        let startAt;\n        let loading = true;\n        const opts = revalidateOpts || {};\n        // If there is no ongoing concurrent request, or `dedupe` is not set, a\n        // new request should be initiated.\n        const shouldStartNewRequest = !FETCH[key] || !opts.dedupe;\n        /*\n         For React 17\n         Do unmount check for calls:\n         If key has changed during the revalidation, or the component has been\n         unmounted, old dispatch and old event callbacks should not take any\n         effect\n\n        For React 18\n        only check if key has changed\n        https://github.com/reactwg/react-18/discussions/82\n      */ const callbackSafeguard = ()=>{\n            if (IS_REACT_LEGACY) {\n                return !unmountedRef.current && key === keyRef.current && initialMountedRef.current;\n            }\n            return key === keyRef.current;\n        };\n        // The final state object when the request finishes.\n        const finalState = {\n            isValidating: false,\n            isLoading: false\n        };\n        const finishRequestAndUpdateState = ()=>{\n            setCache(finalState);\n        };\n        const cleanupState = ()=>{\n            // Check if it's still the same request before deleting it.\n            const requestInfo = FETCH[key];\n            if (requestInfo && requestInfo[1] === startAt) {\n                delete FETCH[key];\n            }\n        };\n        // Start fetching. Change the `isValidating` state, update the cache.\n        const initialState = {\n            isValidating: true\n        };\n        // It is in the `isLoading` state, if and only if there is no cached data.\n        // This bypasses fallback data and laggy data.\n        if (isUndefined(getCache().data)) {\n            initialState.isLoading = true;\n        }\n        try {\n            if (shouldStartNewRequest) {\n                setCache(initialState);\n                // If no cache is being rendered currently (it shows a blank page),\n                // we trigger the loading slow event.\n                if (config.loadingTimeout && isUndefined(getCache().data)) {\n                    setTimeout(()=>{\n                        if (loading && callbackSafeguard()) {\n                            getConfig().onLoadingSlow(key, config);\n                        }\n                    }, config.loadingTimeout);\n                }\n                // Start the request and save the timestamp.\n                // Key must be truthy if entering here.\n                FETCH[key] = [\n                    currentFetcher(fnArg),\n                    getTimestamp()\n                ];\n            }\n            [newData, startAt] = FETCH[key];\n            newData = await newData;\n            if (shouldStartNewRequest) {\n                // If the request isn't interrupted, clean it up after the\n                // deduplication interval.\n                setTimeout(cleanupState, config.dedupingInterval);\n            }\n            // If there're other ongoing request(s), started after the current one,\n            // we need to ignore the current one to avoid possible race conditions:\n            //   req1------------------>res1        (current one)\n            //        req2---------------->res2\n            // the request that fired later will always be kept.\n            // The timestamp maybe be `undefined` or a number\n            if (!FETCH[key] || FETCH[key][1] !== startAt) {\n                if (shouldStartNewRequest) {\n                    if (callbackSafeguard()) {\n                        getConfig().onDiscarded(key);\n                    }\n                }\n                return false;\n            }\n            // Clear error.\n            finalState.error = UNDEFINED;\n            // If there're other mutations(s), that overlapped with the current revalidation:\n            // case 1:\n            //   req------------------>res\n            //       mutate------>end\n            // case 2:\n            //         req------------>res\n            //   mutate------>end\n            // case 3:\n            //   req------------------>res\n            //       mutate-------...---------->\n            // we have to ignore the revalidation result (res) because it's no longer fresh.\n            // meanwhile, a new revalidation should be triggered when the mutation ends.\n            const mutationInfo = MUTATION[key];\n            if (!isUndefined(mutationInfo) && // case 1\n            (startAt <= mutationInfo[0] || // case 2\n            startAt <= mutationInfo[1] || // case 3\n            mutationInfo[1] === 0)) {\n                finishRequestAndUpdateState();\n                if (shouldStartNewRequest) {\n                    if (callbackSafeguard()) {\n                        getConfig().onDiscarded(key);\n                    }\n                }\n                return false;\n            }\n            // Deep compare with the latest state to avoid extra re-renders.\n            // For local state, compare and assign.\n            const cacheData = getCache().data;\n            // Since the compare fn could be custom fn\n            // cacheData might be different from newData even when compare fn returns True\n            finalState.data = compare(cacheData, newData) ? cacheData : newData;\n            // Trigger the successful callback if it's the original request.\n            if (shouldStartNewRequest) {\n                if (callbackSafeguard()) {\n                    getConfig().onSuccess(newData, key, config);\n                }\n            }\n        } catch (err) {\n            cleanupState();\n            const currentConfig = getConfig();\n            const { shouldRetryOnError } = currentConfig;\n            // Not paused, we continue handling the error. Otherwise, discard it.\n            if (!currentConfig.isPaused()) {\n                // Get a new error, don't use deep comparison for errors.\n                finalState.error = err;\n                // Error event and retry logic. Only for the actual request, not\n                // deduped ones.\n                if (shouldStartNewRequest && callbackSafeguard()) {\n                    currentConfig.onError(err, key, currentConfig);\n                    if (shouldRetryOnError === true || isFunction(shouldRetryOnError) && shouldRetryOnError(err)) {\n                        if (!getConfig().revalidateOnFocus || !getConfig().revalidateOnReconnect || isActive()) {\n                            // If it's inactive, stop. It will auto-revalidate when\n                            // refocusing or reconnecting.\n                            // When retrying, deduplication is always enabled.\n                            currentConfig.onErrorRetry(err, key, currentConfig, (_opts)=>{\n                                const revalidators = EVENT_REVALIDATORS[key];\n                                if (revalidators && revalidators[0]) {\n                                    revalidators[0](revalidateEvents.ERROR_REVALIDATE_EVENT, _opts);\n                                }\n                            }, {\n                                retryCount: (opts.retryCount || 0) + 1,\n                                dedupe: true\n                            });\n                        }\n                    }\n                }\n            }\n        }\n        // Mark loading as stopped.\n        loading = false;\n        // Update the current hook's state.\n        finishRequestAndUpdateState();\n        return true;\n    }, // `setState` is immutable, and `eventsCallback`, `fnArg`, and\n    // `keyValidating` are depending on `key`, so we can exclude them from\n    // the deps array.\n    //\n    // FIXME:\n    // `fn` and `config` might be changed during the lifecycle,\n    // but they might be changed every render like this.\n    // `useSWR('key', () => fetch('/api/'), { suspense: true })`\n    // So we omit the values from the deps array\n    // even though it might cause unexpected behaviors.\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [\n        key,\n        cache\n    ]);\n    // Similar to the global mutate but bound to the current cache and key.\n    // `cache` isn't allowed to change during the lifecycle.\n    const boundMutate = useCallback(// Use callback to make sure `keyRef.current` returns latest result every time\n    (...args)=>{\n        return internalMutate(cache, keyRef.current, ...args);\n    }, // eslint-disable-next-line react-hooks/exhaustive-deps\n    []);\n    // The logic for updating refs.\n    useIsomorphicLayoutEffect(()=>{\n        fetcherRef.current = fetcher;\n        configRef.current = config;\n        // Handle laggy data updates. If there's cached data of the current key,\n        // it'll be the correct reference.\n        if (!isUndefined(cachedData)) {\n            laggyDataRef.current = cachedData;\n        }\n    });\n    // After mounted or key changed.\n    useIsomorphicLayoutEffect(()=>{\n        if (!key) return;\n        const softRevalidate = revalidate.bind(UNDEFINED, WITH_DEDUPE);\n        // Expose revalidators to global event listeners. So we can trigger\n        // revalidation from the outside.\n        let nextFocusRevalidatedAt = 0;\n        const onRevalidate = (type, opts = {})=>{\n            if (type == revalidateEvents.FOCUS_EVENT) {\n                const now = Date.now();\n                if (getConfig().revalidateOnFocus && now > nextFocusRevalidatedAt && isActive()) {\n                    nextFocusRevalidatedAt = now + getConfig().focusThrottleInterval;\n                    softRevalidate();\n                }\n            } else if (type == revalidateEvents.RECONNECT_EVENT) {\n                if (getConfig().revalidateOnReconnect && isActive()) {\n                    softRevalidate();\n                }\n            } else if (type == revalidateEvents.MUTATE_EVENT) {\n                return revalidate();\n            } else if (type == revalidateEvents.ERROR_REVALIDATE_EVENT) {\n                return revalidate(opts);\n            }\n            return;\n        };\n        const unsubEvents = subscribeCallback(key, EVENT_REVALIDATORS, onRevalidate);\n        // Mark the component as mounted and update corresponding refs.\n        unmountedRef.current = false;\n        keyRef.current = key;\n        initialMountedRef.current = true;\n        // Keep the original key in the cache.\n        setCache({\n            _k: fnArg\n        });\n        // Trigger a revalidation\n        if (shouldDoInitialRevalidation) {\n            if (isUndefined(data) || IS_SERVER) {\n                // Revalidate immediately.\n                softRevalidate();\n            } else {\n                // Delay the revalidate if we have data to return so we won't block\n                // rendering.\n                rAF(softRevalidate);\n            }\n        }\n        return ()=>{\n            // Mark it as unmounted.\n            unmountedRef.current = true;\n            unsubEvents();\n        };\n    }, [\n        key\n    ]);\n    // Polling\n    useIsomorphicLayoutEffect(()=>{\n        let timer;\n        function next() {\n            // Use the passed interval\n            // ...or invoke the function with the updated data to get the interval\n            const interval = isFunction(refreshInterval) ? refreshInterval(getCache().data) : refreshInterval;\n            // We only start the next interval if `refreshInterval` is not 0, and:\n            // - `force` is true, which is the start of polling\n            // - or `timer` is not 0, which means the effect wasn't canceled\n            if (interval && timer !== -1) {\n                timer = setTimeout(execute, interval);\n            }\n        }\n        function execute() {\n            // Check if it's OK to execute:\n            // Only revalidate when the page is visible, online, and not errored.\n            if (!getCache().error && (refreshWhenHidden || getConfig().isVisible()) && (refreshWhenOffline || getConfig().isOnline())) {\n                revalidate(WITH_DEDUPE).then(next);\n            } else {\n                // Schedule the next interval to check again.\n                next();\n            }\n        }\n        next();\n        return ()=>{\n            if (timer) {\n                clearTimeout(timer);\n                timer = -1;\n            }\n        };\n    }, [\n        refreshInterval,\n        refreshWhenHidden,\n        refreshWhenOffline,\n        key\n    ]);\n    // Display debug info in React DevTools.\n    useDebugValue(returnedData);\n    // In Suspense mode, we can't return the empty `data` state.\n    // If there is an `error`, the `error` needs to be thrown to the error boundary.\n    // If there is no `error`, the `revalidation` promise needs to be thrown to\n    // the suspense boundary.\n    if (suspense && isUndefined(data) && key) {\n        // SWR should throw when trying to use Suspense on the server with React 18,\n        // without providing any initial data. See:\n        // https://github.com/vercel/swr/issues/1832\n        if (!IS_REACT_LEGACY && IS_SERVER) {\n            throw new Error('Fallback data is required when using suspense in SSR.');\n        }\n        // Always update fetcher and config refs even with the Suspense mode.\n        fetcherRef.current = fetcher;\n        configRef.current = config;\n        unmountedRef.current = false;\n        const req = PRELOAD[key];\n        if (!isUndefined(req)) {\n            const promise = boundMutate(req);\n            use(promise);\n        }\n        if (isUndefined(error)) {\n            const promise = revalidate(WITH_DEDUPE);\n            if (!isUndefined(returnedData)) {\n                promise.status = 'fulfilled';\n                promise.value = true;\n            }\n            use(promise);\n        } else {\n            throw error;\n        }\n    }\n    return {\n        mutate: boundMutate,\n        get data () {\n            stateDependencies.data = true;\n            return returnedData;\n        },\n        get error () {\n            stateDependencies.error = true;\n            return error;\n        },\n        get isValidating () {\n            stateDependencies.isValidating = true;\n            return isValidating;\n        },\n        get isLoading () {\n            stateDependencies.isLoading = true;\n            return isLoading;\n        }\n    };\n};\nconst SWRConfig = OBJECT.defineProperty(SWRConfig$1, 'defaultValue', {\n    value: defaultConfig\n});\n/**\n * A hook to fetch data.\n *\n * @link https://swr.vercel.app\n * @example\n * ```jsx\n * import useSWR from 'swr'\n * function Profile() {\n *   const { data, error, isLoading } = useSWR('/api/user', fetcher)\n *   if (error) return <div>failed to load</div>\n *   if (isLoading) return <div>loading...</div>\n *   return <div>hello {data.name}!</div>\n * }\n * ```\n */ const useSWR = withArgs(useSWRHandler);\n\nexport { SWRConfig, useSWR as default, unstable_serialize };\n","import {type SanityClient} from '@sanity/client'\nimport {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {catchError, map, type Observable, of, shareReplay} from 'rxjs'\n\nimport {useClient} from '../../../hooks/useClient'\nimport {useWorkspace} from '../../../studio/workspace'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../../studioClient'\nimport {type Schedule} from '../../types'\n\nexport interface HasUsedScheduledPublishing {\n  used: boolean\n  loading: boolean\n}\n\nconst HAS_USED_SCHEDULED_PUBLISHING: HasUsedScheduledPublishing = {used: false, loading: true}\n\nexport const cachedUsedScheduledPublishing = new Map<\n  string,\n  Observable<HasUsedScheduledPublishing>\n>()\n\nfunction fetchUsedScheduledPublishing(\n  client: SanityClient,\n): Observable<HasUsedScheduledPublishing> {\n  const {dataset, projectId} = client.config()\n  return client.observable\n    .request<{\n      schedules: Schedule[]\n    }>({uri: `/schedules/${projectId}/${dataset}?limit=1`, tag: 'scheduled-publishing-used'})\n    .pipe(\n      map((res) => {\n        return {used: res.schedules?.length > 0, loading: false}\n      }),\n      catchError(() => of({used: false, loading: false})),\n    )\n}\n\nexport function useHasUsedScheduledPublishing({\n  explicitEnabled,\n  isWorkspaceEnabled,\n}: {\n  explicitEnabled?: boolean\n  isWorkspaceEnabled?: boolean\n}) {\n  const client = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n  const {projectId, dataset} = useWorkspace()\n  const key = `${projectId}-${dataset}`\n  if (!cachedUsedScheduledPublishing.get(key)) {\n    const hasUsed = fetchUsedScheduledPublishing(client).pipe(shareReplay())\n    cachedUsedScheduledPublishing.set(key, hasUsed)\n  }\n  const hasUsedScheduledPublishing$ = useMemo(() => {\n    // If the feature is explicitly enabled, we don't need to check if it has been used\n    if (explicitEnabled) {\n      return of({used: true, loading: false})\n    }\n    // If the workspace has turned off the feature is explicitly enabled, we don't need to check if it has been used\n    if (!isWorkspaceEnabled) {\n      return of({used: false, loading: false})\n    }\n\n    return cachedUsedScheduledPublishing.get(key) || of(HAS_USED_SCHEDULED_PUBLISHING)\n  }, [key, explicitEnabled, isWorkspaceEnabled])\n\n  return useObservable(hasUsedScheduledPublishing$, HAS_USED_SCHEDULED_PUBLISHING)\n}\n","import {useContext, useMemo} from 'react'\nimport {ScheduledPublishingEnabledContext} from 'sanity/_singletons'\n\nimport {useFeatureEnabled} from '../../../hooks/useFeatureEnabled'\nimport {useWorkspace} from '../../../studio/workspace'\nimport {\n  type HasUsedScheduledPublishing,\n  useHasUsedScheduledPublishing,\n} from './useHasUsedScheduledPublishing'\n\n/**\n * @internal\n */\nexport type ScheduledPublishingEnabledContextValue =\n  | {\n      enabled: false\n      mode: null\n      hasUsedScheduledPublishing: HasUsedScheduledPublishing\n    }\n  | {\n      enabled: true\n      mode: 'default' | 'upsell'\n      hasUsedScheduledPublishing: HasUsedScheduledPublishing\n    }\n\ninterface ScheduledPublishingEnabledProviderProps {\n  children: React.ReactNode\n}\n\n/**\n * @internal\n */\n\nexport function ScheduledPublishingEnabledProvider({\n  children,\n}: ScheduledPublishingEnabledProviderProps) {\n  const {enabled, isLoading, error} = useFeatureEnabled('scheduledPublishing')\n  const {scheduledPublishing} = useWorkspace()\n\n  const isWorkspaceEnabled = scheduledPublishing.enabled\n  const explicitEnabled = scheduledPublishing.__internal__workspaceEnabled\n  const hasUsedScheduledPublishing = useHasUsedScheduledPublishing({\n    explicitEnabled,\n    isWorkspaceEnabled,\n  })\n\n  const value: ScheduledPublishingEnabledContextValue = useMemo(() => {\n    if (!isWorkspaceEnabled || isLoading || error) {\n      return {\n        enabled: false,\n        mode: null,\n        hasUsedScheduledPublishing,\n      }\n    }\n    if (explicitEnabled) {\n      return {\n        enabled: true,\n        mode: enabled ? 'default' : 'upsell',\n        hasUsedScheduledPublishing,\n      }\n    }\n    if (!hasUsedScheduledPublishing.used) {\n      return {\n        enabled: false,\n        mode: null,\n        hasUsedScheduledPublishing,\n      }\n    }\n    return {\n      enabled: true,\n      mode: enabled ? 'default' : 'upsell',\n      hasUsedScheduledPublishing,\n    }\n  }, [enabled, isLoading, isWorkspaceEnabled, error, hasUsedScheduledPublishing, explicitEnabled])\n\n  return (\n    <ScheduledPublishingEnabledContext.Provider value={value}>\n      {children}\n    </ScheduledPublishingEnabledContext.Provider>\n  )\n}\n\n/**\n * @internal\n */\nexport function useScheduledPublishingEnabled(): ScheduledPublishingEnabledContextValue {\n  const context = useContext(ScheduledPublishingEnabledContext)\n  return context\n}\n","import {type Schedule} from '../types'\n\n/**\n * Return a schedule's `executedAt` date if it exists, otherwise just return `executeAt`.\n *\n * When dealing with schedules that may have differing values for `executeAt` and\n * `executedAt` (e.g. schedules force-published ahead of time), for the purposes of\n * rendering and sorting we only care about the _final_ date a schedule was executed.\n *\n * Note that it's possible for both `executedAt` and `executeAt` to be null\n * (if creating Schedules via the Scheduling API without dates).\n */\nexport function getLastExecuteDate(schedule: Schedule): string | null {\n  return schedule?.executedAt || schedule?.executeAt\n}\n","import {type Schedule} from '../types'\nimport {getLastExecuteDate} from './scheduleUtils'\n\nexport function sortByExecuteDate({reverseOrder}: {reverseOrder: boolean} = {reverseOrder: false}) {\n  return function (a: Schedule, b: Schedule): number {\n    const aExecuteDate = getLastExecuteDate(a)\n    const bExecuteDate = getLastExecuteDate(b)\n\n    if (aExecuteDate === bExecuteDate) {\n      return 0\n    }\n    if (aExecuteDate === null) {\n      return 1\n    }\n    if (bExecuteDate === null) {\n      return -1\n    }\n    return (aExecuteDate > bExecuteDate ? 1 : -1) * (reverseOrder ? -1 : 1)\n  }\n}\n","import {type SanityClient} from '@sanity/client'\nimport {useMemo} from 'react'\n\nimport {useClient} from '../../hooks/useClient'\nimport {type Schedule} from '../types'\nimport {debugWithName} from '../utils/debug'\n\nconst debug = debugWithName('useScheduleOperation')\n\nexport function useScheduleApi(): ReturnType<typeof createScheduleApi> {\n  const client = useClient({apiVersion: '2022-09-01'})\n  return useMemo(() => createScheduleApi(client), [client])\n}\n\nfunction createScheduleApi(client: SanityClient) {\n  const {dataset, projectId} = client.config()\n  function _create({date, documentId}: {date: string; documentId: string}) {\n    debug('_create:', documentId)\n\n    // Round date to nearest second (mutate)\n    const roundedDate = new Date(date)\n    roundedDate.setSeconds(0)\n    roundedDate.setMilliseconds(0)\n\n    return client.request<Schedule>({\n      body: {\n        documents: [{documentId}],\n        executeAt: roundedDate,\n        name: roundedDate,\n      },\n      method: 'POST',\n      uri: `/schedules/${projectId}/${dataset}`,\n    })\n  }\n\n  function _delete({scheduleId}: {scheduleId: string}) {\n    debug('_delete:', scheduleId)\n    return client.request<void>({\n      method: 'DELETE',\n      uri: `/schedules/${projectId}/${dataset}/${scheduleId}`,\n    })\n  }\n\n  function _deleteMultiple({scheduleIds}: {scheduleIds: string[]}) {\n    debug('_deleteMultiple:', scheduleIds)\n    const requests = scheduleIds.map((scheduleId) => _delete({scheduleId}))\n    return Promise.allSettled(requests)\n  }\n\n  function _publish({scheduleId}: {scheduleId: string}) {\n    debug('_publish:', scheduleId)\n\n    return client.request<{transactionId: string}>({\n      method: 'POST',\n      uri: `/schedules/${projectId}/${dataset}/${scheduleId}/publish`,\n    })\n  }\n\n  function _update({\n    documentSchedule,\n    scheduleId,\n  }: {\n    documentSchedule: Partial<Schedule>\n    scheduleId: string\n  }) {\n    debug('_update:', scheduleId, documentSchedule)\n    return client.request<{transactionId: string}>({\n      body: documentSchedule,\n      method: 'PATCH',\n      uri: `/schedules/${projectId}/${dataset}/${scheduleId}`,\n    })\n  }\n\n  return {\n    create: _create,\n    delete: _delete,\n    deleteMultiple: _deleteMultiple,\n    publish: _publish,\n    update: _update,\n  }\n}\n","import {useToast} from '@sanity/ui'\n\nimport ToastDescription from '../components/toastDescription/ToastDescription'\nimport {type Schedule} from '../types'\nimport getErrorMessage from '../utils/getErrorMessage'\nimport {useScheduleApi} from './useScheduleApi'\nimport useTimeZone from './useTimeZone'\n\n// Custom events\nexport enum ScheduleEvents {\n  create = 'scheduleCreate',\n  delete = 'scheduleDelete',\n  deleteMultiple = 'scheduleDeleteMultiple',\n  publish = 'schedulePublish',\n  update = 'scheduleUpdate',\n}\n\nexport type ScheduleCreateEvent = {\n  date: string\n  documentId: string\n}\n\nexport type ScheduleDeleteEvent = {\n  scheduleId: string\n}\n\nexport type ScheduleDeleteMultipleEvent = {\n  scheduleIds: string[]\n}\n\nexport type SchedulePublishEvent = {\n  scheduleId: string\n}\n\nexport type ScheduleUpdateEvent = {\n  date: string\n  scheduleId: string\n}\n\n// Add our custom events to `WindowEventMap`, providing typing when using `addEventListener`\ndeclare global {\n  interface WindowEventMap {\n    [ScheduleEvents.create]: CustomEvent<ScheduleCreateEvent>\n    [ScheduleEvents.delete]: CustomEvent<ScheduleDeleteEvent>\n    [ScheduleEvents.deleteMultiple]: CustomEvent<ScheduleDeleteMultipleEvent>\n    [ScheduleEvents.publish]: CustomEvent<SchedulePublishEvent>\n    [ScheduleEvents.update]: CustomEvent<ScheduleUpdateEvent>\n  }\n}\n\ntype UnpackCustomEventPayload<T> = T extends CustomEvent<infer U> ? U : never\n\nfunction pluralize(word: string, count: number) {\n  return `${count} ${word}${count === 1 ? '' : 's'}`\n}\n// Proxy that generates type safe CustomEvents.\n// We infer our CustomEvent's `detail` using `UnpackCustomEventPayload`\nexport const scheduleCustomEvent = <\n  T extends ScheduleEvents,\n  D extends UnpackCustomEventPayload<WindowEventMap[T]>,\n>(\n  name: T,\n  // override `detail` in `CustomEventInit` with our own custom payload\n  payload: Omit<CustomEventInit<D>, 'detail'> & {\n    detail: D\n  },\n): CustomEvent<D> => new CustomEvent(name, payload)\n\nexport default function useScheduleOperation() {\n  const toast = useToast()\n  const {formatDateTz} = useTimeZone()\n  const api = useScheduleApi()\n\n  async function createSchedule({\n    date,\n    displayToast = true,\n    documentId,\n  }: {\n    date: string\n    displayToast?: boolean\n    documentId: string\n  }) {\n    try {\n      const data = await api.create({date, documentId})\n\n      window.dispatchEvent(\n        scheduleCustomEvent(ScheduleEvents.create, {\n          detail: {\n            date,\n            documentId,\n          },\n        }),\n      )\n\n      if (displayToast && data?.executeAt) {\n        toast.push({\n          closable: true,\n          description: (\n            <ToastDescription\n              body={formatDateTz({\n                date: new Date(data.executeAt),\n                includeTimeZone: true,\n                prefix: 'Publishing on ',\n              })}\n              title=\"Schedule created\"\n            />\n          ),\n          duration: 15000, // 15s\n          status: 'success',\n        })\n      }\n    } catch (err) {\n      if (displayToast) {\n        toast.push({\n          closable: true,\n          description: (\n            <ToastDescription body={getErrorMessage(err)} title=\"Unable to create schedule\" />\n          ),\n          duration: 15000, // 15s\n          status: 'error',\n        })\n      }\n    }\n  }\n\n  async function deleteSchedule({\n    displayToast = true,\n    schedule,\n  }: {\n    displayToast?: boolean\n    schedule: Schedule\n  }) {\n    try {\n      await api.delete({scheduleId: schedule?.id})\n\n      window.dispatchEvent(\n        scheduleCustomEvent(ScheduleEvents.delete, {\n          detail: {\n            scheduleId: schedule?.id,\n          },\n        }),\n      )\n\n      if (displayToast) {\n        toast.push({\n          closable: true,\n          description: <ToastDescription title=\"Schedule deleted\" />,\n          status: 'success',\n        })\n      }\n    } catch (err) {\n      if (displayToast) {\n        toast.push({\n          closable: true,\n          description: (\n            <ToastDescription body={getErrorMessage(err)} title=\"Unable to delete schedule\" />\n          ),\n          duration: 15000, // 15s\n          status: 'error',\n        })\n      }\n    }\n  }\n\n  async function deleteSchedules({\n    displayToast = true,\n    schedules,\n  }: {\n    displayToast?: boolean\n    schedules: Schedule[]\n  }) {\n    try {\n      const scheduleIds = schedules.map((schedule) => schedule.id)\n      const response = await api.deleteMultiple({scheduleIds})\n\n      const {fulfilledIds, rejectedReasons} = response.reduce<{\n        fulfilledIds: string[]\n        rejectedReasons: string[]\n      }>(\n        (acc, v, index) => {\n          if (v.status === 'fulfilled') {\n            acc.fulfilledIds.push(schedules[index].id)\n          }\n\n          if (v.status === 'rejected') {\n            acc.rejectedReasons.push(`[${schedules[index].id}]: ${v.reason}`)\n          }\n\n          return acc\n        },\n        {fulfilledIds: [], rejectedReasons: []},\n      )\n      const numFulfilledIds = fulfilledIds.length\n      const numRejectedReasons = rejectedReasons.length\n\n      if (fulfilledIds?.length > 0) {\n        window.dispatchEvent(\n          scheduleCustomEvent(ScheduleEvents.deleteMultiple, {\n            detail: {scheduleIds: fulfilledIds},\n          }),\n        )\n      }\n\n      if (displayToast) {\n        if (fulfilledIds?.length > 0) {\n          toast.push({\n            closable: true,\n            description: (\n              <ToastDescription title={`${pluralize('schedule', numFulfilledIds)} deleted`} />\n            ),\n            status: 'success',\n          })\n        }\n        if (rejectedReasons?.length > 0) {\n          toast.push({\n            closable: true,\n            description: (\n              <ToastDescription\n                body={rejectedReasons?.toString()}\n                title={`Unable to delete ${pluralize('schedule', numRejectedReasons)}`}\n              />\n            ),\n            duration: 15000, // 15s\n            status: 'error',\n          })\n        }\n      }\n    } catch (err) {\n      if (displayToast) {\n        toast.push({\n          closable: true,\n          description: (\n            <ToastDescription body={getErrorMessage(err)} title=\"Unable to delete schedules\" />\n          ),\n          duration: 15000, // 15s\n          status: 'error',\n        })\n      }\n    }\n  }\n\n  async function publishSchedule({\n    displayToast = true,\n    schedule,\n  }: {\n    displayToast?: boolean\n    schedule: Schedule\n  }) {\n    try {\n      const scheduleId = schedule.id\n      await api.publish({scheduleId})\n\n      window.dispatchEvent(scheduleCustomEvent(ScheduleEvents.publish, {detail: {scheduleId}}))\n\n      if (displayToast) {\n        toast.push({\n          closable: true,\n          description: <ToastDescription title=\"Document published\" />,\n          status: 'success',\n        })\n      }\n    } catch (err) {\n      if (displayToast) {\n        toast.push({\n          closable: true,\n          description: (\n            <ToastDescription body={getErrorMessage(err)} title=\"Unable to publish schedule\" />\n          ),\n          duration: 15000, // 15s\n          status: 'error',\n        })\n      }\n    }\n  }\n\n  async function updateSchedule({\n    date,\n    displayToast = true,\n    scheduleId,\n  }: {\n    date: string\n    displayToast?: boolean\n    scheduleId: string\n  }) {\n    try {\n      await api.update({documentSchedule: {executeAt: date}, scheduleId})\n\n      window.dispatchEvent(scheduleCustomEvent(ScheduleEvents.update, {detail: {date, scheduleId}}))\n\n      if (displayToast) {\n        toast.push({\n          closable: true,\n          description: (\n            <ToastDescription\n              body={formatDateTz({\n                date: new Date(date),\n                includeTimeZone: true,\n                prefix: 'Publishing on ',\n              })}\n              title=\"Schedule updated\"\n            />\n          ),\n          duration: 15000, // 15s\n          status: 'success',\n        })\n      }\n    } catch (err) {\n      if (displayToast) {\n        toast.push({\n          closable: true,\n          description: (\n            <ToastDescription body={getErrorMessage(err)} title=\"Unable to update schedule\" />\n          ),\n          duration: 15000, // 15s\n          status: 'error',\n        })\n      }\n    }\n  }\n\n  return {\n    createSchedule,\n    deleteSchedule,\n    deleteSchedules,\n    publishSchedule,\n    updateSchedule,\n  }\n}\n","import {useCallback, useEffect, useMemo} from 'react'\nimport useSWR from 'swr'\n\nimport {useClient} from '../../hooks/useClient'\nimport {useScheduledPublishingEnabled} from '../tool/contexts/ScheduledPublishingEnabledProvider'\nimport {type Schedule, type ScheduleState} from '../types'\nimport {sortByExecuteDate} from '../utils/sortByExecuteDate'\nimport {\n  type ScheduleDeleteEvent,\n  type ScheduleDeleteMultipleEvent,\n  ScheduleEvents,\n  type SchedulePublishEvent,\n  type ScheduleUpdateEvent,\n} from './useScheduleOperation'\n\ntype QueryKey = {\n  params?: {\n    documentIds?: string\n    state?: ScheduleState\n  }\n  url: string\n}\n\nfunction useScheduleBaseUrl() {\n  const client = useClient({apiVersion: '2022-09-01'})\n  const {dataset, projectId} = client.config()\n  return `/schedules/${projectId}/${dataset}`\n}\n\nfunction useFetcher(queryKey: QueryKey) {\n  const client = useClient({apiVersion: '2022-09-01'})\n  return useCallback(\n    () =>\n      client.request<{schedules: Schedule[] | undefined}>({\n        query: queryKey.params,\n        method: 'GET',\n        uri: queryKey.url,\n      }),\n    [client, queryKey],\n  )\n}\n\nconst NO_SCHEDULES: Schedule[] = []\n\n/**\n * Poll for all schedules\n */\nfunction usePollSchedules({documentId, state}: {documentId?: string; state?: ScheduleState} = {}): {\n  error: Error\n  isInitialLoading: boolean\n  schedules: Schedule[]\n} {\n  const {mode, enabled} = useScheduledPublishingEnabled()\n\n  const swrOptions = useMemo(() => {\n    const SWR_OPTIONS = {\n      refreshWhenHidden: false,\n      refreshWhenOffline: false,\n      revalidateOnFocus: false,\n      shouldRetryOnError: false,\n      // Revalidate data only on default mode, upsell mode should not poll given the data won't change.\n      refreshInterval: mode === 'default' ? 10000 : undefined, // 10s\n      revalidateIfStale: mode === 'default',\n      revalidateOnReconnect: mode === 'default',\n    }\n    return SWR_OPTIONS\n  }, [mode])\n  const url = useScheduleBaseUrl()\n  const queryKey: QueryKey = useMemo(\n    () => ({params: {documentIds: documentId, state}, url}),\n    [url, documentId, state],\n  )\n\n  const fetcher = useFetcher(queryKey)\n\n  // Disables SWR if scheduled publishing is not enabled by not providing a key\n  const {data, error, mutate} = useSWR(enabled ? queryKey : null, fetcher, swrOptions)\n\n  // Immediately remove schedule from SWR cache and revalidate\n  const handleDelete = useCallback(\n    (event: CustomEvent<ScheduleDeleteEvent>) => {\n      mutate(\n        (currentData) => ({\n          schedules: currentData?.schedules?.filter(\n            (schedule) => schedule.id !== event.detail.scheduleId,\n          ),\n        }),\n        true, // revalidate SWR\n      )\n    },\n    [mutate],\n  )\n\n  // Immediately remove schedules from SWR cache and revalidate\n  const handleDeleteMultiple = useCallback(\n    (event: CustomEvent<ScheduleDeleteMultipleEvent>) => {\n      mutate(\n        (currentData) => ({\n          schedules: currentData?.schedules?.filter(\n            (schedule) => !event.detail.scheduleIds.includes(schedule.id),\n          ),\n        }),\n        true, // revalidate SWR\n      )\n    },\n    [mutate],\n  )\n\n  // Immediately publish schedule in SWR cache and revalidate\n  const handlePublish = useCallback(\n    (event: CustomEvent<SchedulePublishEvent>) => {\n      mutate(\n        (currentData) => {\n          const currentSchedules = currentData?.schedules || []\n          const index = currentSchedules.findIndex(\n            (schedule) => schedule.id === event.detail.scheduleId,\n          )\n          return {\n            schedules: [\n              ...currentSchedules.slice(0, index),\n              {\n                ...currentSchedules[index],\n                executeAt: new Date().toISOString(),\n                state: 'succeeded',\n              },\n              ...currentSchedules.slice(index + 1),\n            ],\n          }\n        },\n        true, // revalidate SWR\n      )\n    },\n    [mutate],\n  )\n\n  // Immediately update schedule in SWR cache and revalidate\n  const handleUpdate = useCallback(\n    (event: CustomEvent<ScheduleUpdateEvent>) => {\n      mutate(\n        (currentData) => {\n          const currentSchedules = currentData?.schedules || []\n          const index = currentSchedules.findIndex(\n            (schedule) => schedule.id === event.detail.scheduleId,\n          )\n\n          return {\n            schedules: [\n              ...currentSchedules.slice(0, index),\n              {\n                ...currentSchedules[index],\n                executeAt: event.detail.date,\n              },\n              ...currentSchedules.slice(index + 1),\n            ],\n          }\n        },\n        true, // revalidate SWR\n      )\n    },\n    [mutate],\n  )\n\n  // Listen to schedule events\n  useEffect(() => {\n    window.addEventListener(ScheduleEvents.delete, handleDelete)\n    window.addEventListener(ScheduleEvents.deleteMultiple, handleDeleteMultiple)\n    window.addEventListener(ScheduleEvents.publish, handlePublish)\n    window.addEventListener(ScheduleEvents.update, handleUpdate)\n    return () => {\n      window.removeEventListener(ScheduleEvents.delete, handleDelete)\n      window.removeEventListener(ScheduleEvents.deleteMultiple, handleDeleteMultiple)\n      window.removeEventListener(ScheduleEvents.publish, handlePublish)\n      window.removeEventListener(ScheduleEvents.update, handleUpdate)\n    }\n  }, [handleDelete, handleDeleteMultiple, handlePublish, handleUpdate])\n\n  // By default: sort schedules by last execute date (executedAt || executeAt)\n  const sortedSchedules = useMemo(\n    () => data?.schedules?.sort(sortByExecuteDate()),\n    [data?.schedules],\n  )\n\n  return {\n    error,\n    isInitialLoading: !error && !data,\n    schedules: sortedSchedules || NO_SCHEDULES,\n  }\n}\n\nexport default usePollSchedules\n","import {isSameDay} from 'date-fns'\nimport {type ReactNode, useCallback, useContext, useMemo, useState} from 'react'\nimport {SchedulesContext} from 'sanity/_singletons'\n\nimport useTimeZone from '../../hooks/useTimeZone'\nimport {type Schedule, type ScheduleSort, type ScheduleState} from '../../types'\nimport {getLastExecuteDate} from '../../utils/scheduleUtils'\nimport {sortByExecuteDate} from '../../utils/sortByExecuteDate'\n\n/**\n * @internal\n */\nexport interface SchedulesContextValue {\n  activeSchedules: Schedule[]\n  schedules: Schedule[]\n  schedulesByDate: (date: Date) => Schedule[]\n  scheduleState?: ScheduleState\n  selectedDate?: Date\n  setSortBy: (sortBy: ScheduleSort) => void\n  sortBy?: ScheduleSort\n}\n\nconst EMPTY_SCHEDULE: Schedule[] = []\n\nfunction SchedulesProvider({\n  children,\n  value,\n}: {\n  children: ReactNode\n  value: {\n    schedules: Schedule[]\n    scheduleState: ScheduleState\n    selectedDate?: Date\n    sortBy?: ScheduleSort\n  }\n}) {\n  const [sortBy, setSortBy] = useState<ScheduleSort>(value.sortBy || 'executeAt')\n  const {utcToCurrentZoneDate} = useTimeZone()\n\n  const filterByDate = useCallback(\n    (wallDate: Date) => {\n      return function (schedule: Schedule) {\n        const executeDate = getLastExecuteDate(schedule)\n        if (!executeDate) {\n          return false\n        }\n        const scheduleDate = new Date(executeDate) // UTC\n        const zonedScheduleDate = utcToCurrentZoneDate(scheduleDate)\n        return isSameDay(zonedScheduleDate, wallDate)\n      }\n    },\n    [utcToCurrentZoneDate],\n  )\n\n  const filterByState = useCallback((scheduleState: ScheduleState) => {\n    return function (schedule: Schedule) {\n      return schedule.state === scheduleState\n    }\n  }, [])\n\n  /**\n   * Return all schedules if no date is currently selected, otherwise return all schedules for the\n   * selected calendar date.\n   *\n   * By default, all schedules are displayed in reverse chronlogical order\n   * except when filtering by upcoming schedules, or a date has been selected in the calendar.\n   *\n   * If a schedule as an `executedAt` date, sort by that instead.\n   * This is because schedules may have differing values for `executeAt` and `executedAt` if\n   * they've been force-published ahead of time, and we only care about the final execution date.\n   *\n   * Schedules with a null value for `executeAt` (possible if created externally via the Scheduling API)\n   * should always be placed after all other results.\n   */\n  const activeSchedules = useMemo(() => {\n    return (\n      value.schedules\n        .filter((scheduleState) => {\n          if (value.selectedDate) {\n            return filterByDate(value.selectedDate)(scheduleState)\n          }\n          return filterByState(value.scheduleState)(scheduleState)\n        })\n        .sort((a, b) => {\n          if (sortBy === 'createdAt') {\n            return a[sortBy] < b[sortBy] ? 1 : -1\n          }\n          if (sortBy === 'executeAt') {\n            const reverseOrder = !(value.scheduleState === 'scheduled' || value.selectedDate)\n            return sortByExecuteDate({reverseOrder})(a, b)\n          }\n          return 1\n        }) || []\n    )\n  }, [\n    filterByState,\n    value.schedules,\n    value.scheduleState,\n    value.selectedDate,\n    sortBy,\n    filterByDate,\n  ])\n\n  /**\n   * Return all matching schedules with specified date (in clock time).\n   *\n   * Scheduled are sorted chronologically by executed + execute date.\n   *\n   * Schedules with a null value for `executeAt` (possible if created externally via the Scheduling API)\n   * should always be placed after all other results.\n   */\n  const schedulesByDate = useCallback(\n    (wallDate: Date) => {\n      return value.schedules\n        .filter(filterByDate(wallDate)) //\n        .sort(sortByExecuteDate())\n    },\n    [value.schedules, filterByDate],\n  )\n\n  const context = useMemo(\n    () => ({\n      activeSchedules,\n      schedules: value.schedules || EMPTY_SCHEDULE,\n      schedulesByDate,\n      scheduleState: value.scheduleState,\n      selectedDate: value.selectedDate,\n      setSortBy,\n      sortBy,\n    }),\n    [\n      activeSchedules,\n      schedulesByDate,\n      sortBy,\n      value.scheduleState,\n      value.schedules,\n      value.selectedDate,\n    ],\n  )\n\n  return <SchedulesContext.Provider value={context}>{children}</SchedulesContext.Provider>\n}\n\nfunction useSchedules() {\n  const context = useContext(SchedulesContext)\n  if (context === undefined) {\n    throw new Error('useSchedules must be used within a SchedulesProvider')\n  }\n  return context\n}\n\nexport {SchedulesProvider, useSchedules}\n","import {useMemo} from 'react'\n\nimport {type Schedule, type ScheduleState} from '../types'\n\nexport function useFilteredSchedules(schedules: Schedule[], filter?: ScheduleState): Schedule[] {\n  return useMemo(\n    () => schedules.filter((schedule) => schedule.state === filter),\n    [schedules, filter],\n  )\n}\n","import {\n  // eslint-disable-next-line no-restricted-imports\n  Button,\n  Flex,\n  Text,\n} from '@sanity/ui'\nimport {useStateLink} from 'sanity/router'\n\nimport {SCHEDULE_STATE_DICTIONARY} from '../../constants'\nimport {useFilteredSchedules} from '../../hooks/useFilteredSchedules'\nimport {type Schedule, type ScheduleState} from '../../types'\n\ninterface Props {\n  schedules: Schedule[]\n  selected?: boolean\n  state: ScheduleState\n}\n\nconst ScheduleFilter = (props: Props) => {\n  const {selected, schedules, state} = props\n\n  const count = useFilteredSchedules(schedules, state).length\n\n  const hasItems = count > 0\n\n  const critical = state === 'cancelled'\n\n  const {href, onClick} = useStateLink({\n    state: {state},\n  })\n\n  return (\n    <Button\n      as=\"a\"\n      href={href}\n      mode=\"bleed\"\n      onClick={onClick}\n      selected={selected}\n      tone={critical ? 'critical' : 'default'}\n      padding={2}\n    >\n      <Flex gap={2} align={'center'}>\n        <Text size={1} weight=\"medium\">\n          {SCHEDULE_STATE_DICTIONARY[state].title}\n        </Text>\n        {hasItems && <Text size={0}>{count}</Text>}\n      </Flex>\n    </Button>\n  )\n}\n\nexport default ScheduleFilter\n","import {CheckmarkIcon, CloseIcon, SelectIcon} from '@sanity/icons'\nimport {Box, Flex, Menu} from '@sanity/ui'\nimport {format} from 'date-fns'\nimport {useRouter} from 'sanity/router'\n\nimport {Button, MenuButton, MenuItem} from '../../../../ui-components'\nimport {SCHEDULE_FILTERS, SCHEDULE_STATE_DICTIONARY} from '../../constants'\nimport {useFilteredSchedules} from '../../hooks/useFilteredSchedules'\nimport {useSchedules} from '../contexts/schedules'\nimport ScheduleFilter from './ScheduleFilter'\n\nexport interface ScheduleFiltersProps {\n  onClearDate: () => void\n  selectedDate?: Date\n}\n\nexport const ScheduleFilters = (props: ScheduleFiltersProps) => {\n  const {onClearDate, selectedDate} = props\n  const {navigate} = useRouter()\n  const {schedules, scheduleState} = useSchedules()\n\n  const handleMenuClick = (state: Record<string, unknown>) => {\n    navigate(state)\n  }\n\n  const currentSchedules = useFilteredSchedules(schedules, scheduleState)\n\n  return (\n    <>\n      {/* Small breakpoints: Menu button */}\n      <Box display={['block', 'block', 'none']}>\n        {selectedDate && (\n          <Button\n            iconRight={CloseIcon}\n            onClick={onClearDate}\n            text={format(selectedDate, 'd MMMM yyyy')}\n            tone=\"primary\"\n          />\n        )}\n\n        {scheduleState && (\n          <MenuButton\n            button={\n              <Button\n                iconRight={SelectIcon}\n                mode=\"ghost\"\n                text={`${SCHEDULE_STATE_DICTIONARY[scheduleState].title} (${\n                  currentSchedules?.length || 0\n                })`}\n                tone=\"default\"\n              />\n            }\n            id=\"state\"\n            menu={\n              <Menu style={{minWidth: '175px'}}>\n                {SCHEDULE_FILTERS.map((filter) => (\n                  <MenuItem\n                    iconRight={filter === scheduleState ? CheckmarkIcon : undefined}\n                    key={filter}\n                    onClick={handleMenuClick.bind(undefined, {state: filter})}\n                    text={SCHEDULE_STATE_DICTIONARY[filter].title}\n                  />\n                ))}\n              </Menu>\n            }\n            placement=\"bottom\"\n          />\n        )}\n      </Box>\n\n      {/* Larger breakpoints: Horizontal tabs */}\n      <Box display={['none', 'none', 'block']}>\n        {selectedDate && (\n          <Button\n            iconRight={CloseIcon}\n            onClick={onClearDate}\n            text={format(selectedDate, 'd MMMM yyyy')}\n            tone=\"primary\"\n          />\n        )}\n\n        {scheduleState && (\n          <Flex gap={2}>\n            {SCHEDULE_FILTERS.map((filter) => (\n              <ScheduleFilter\n                key={filter}\n                schedules={schedules}\n                selected={scheduleState === filter}\n                state={filter}\n              />\n            ))}\n          </Flex>\n        )}\n      </Box>\n    </>\n  )\n}\n","import {LaunchIcon} from '@sanity/icons'\nimport {_responsive, Box, Card, Flex, type FlexDirection, Stack} from '@sanity/ui'\n// eslint-disable-next-line camelcase\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {css, styled} from 'styled-components'\n\nimport {Button} from '../../../ui-components'\nimport {type UpsellData} from './types'\nimport {UpsellDescriptionSerializer} from './upsellDescriptionSerializer/UpsellDescriptionSerializer'\n\ntype Layout = 'vertical' | 'horizontal'\nconst Image = styled.img<{$direction: FlexDirection[]}>((props) => {\n  const {media} = getTheme_v2(props.theme)\n\n  const responsiveStyles = _responsive(media, props.$direction, (val) => {\n    return {\n      width: val === 'row' ? '50%' : '100%',\n      height: val === 'row' ? 'auto' : '180px',\n    }\n  })\n\n  return css`\n    object-fit: cover;\n    ${responsiveStyles}\n  `\n})\n\nconst DescriptionRoot = styled(Box)`\n  margin: auto 0;\n`\n\ninterface CommentsUpsellPanelProps {\n  data: UpsellData\n  onPrimaryClick: () => void\n  onSecondaryClick: () => void\n  layout?: Layout\n}\n\n/**\n * First 2 viewport sizes are always vertical, 3rd is horizontal\n */\nconst HORIZONTAL_PADDING_Y = [3, 3, 5]\n\nexport function UpsellPanel(props: CommentsUpsellPanelProps) {\n  const {data, onPrimaryClick, onSecondaryClick, layout = 'vertical'} = props\n  const direction: FlexDirection[] = [\n    'column',\n    'column',\n    layout === 'horizontal' ? 'row' : 'column',\n  ]\n\n  return (\n    <Card radius={3} overflow={'hidden'} border>\n      <Flex direction={direction} gap={2}>\n        {data.image && (\n          <Image\n            src={data.image.asset.url}\n            alt={data.image.asset.altText ?? ''}\n            $direction={direction}\n          />\n        )}\n        <DescriptionRoot paddingX={3} paddingY={layout === 'horizontal' ? HORIZONTAL_PADDING_Y : 3}>\n          <Stack space={4}>\n            <UpsellDescriptionSerializer blocks={data.descriptionText} />\n          </Stack>\n          <Flex gap={2} justify={'flex-end'} marginTop={5}>\n            {data.secondaryButton.text && (\n              <Button\n                mode=\"bleed\"\n                text={data.secondaryButton.text}\n                tone=\"primary\"\n                iconRight={LaunchIcon}\n                {...(data.secondaryButton.url && {\n                  target: '_blank',\n                  rel: 'noopener noreferrer',\n                  as: 'a',\n                  href: data.secondaryButton.url,\n                })}\n                onClick={onSecondaryClick}\n              />\n            )}\n            <Button\n              text={data.ctaButton.text}\n              tone=\"primary\"\n              {...(data.ctaButton.url && {\n                target: '_blank',\n                rel: 'noopener noreferrer',\n                as: 'a',\n                href: data.ctaButton.url,\n              })}\n              onClick={onPrimaryClick}\n            />\n          </Flex>\n        </DescriptionRoot>\n      </Flex>\n    </Card>\n  )\n}\n","import {useSource} from '../studio'\n\n/**\n * React hook that returns the current project id\n *\n * @public\n * @returns The current project id\n * @example Using the `useProjectId` hook\n * ```ts\n * function MyComponent() {\n *   const projectId = useProjectId()\n *   // ... do something with the project id ...\n * }\n * ```\n */\nexport function useProjectId(): string {\n  return useSource().projectId\n}\n","import {defineEvent} from '@sanity/telemetry'\n\ninterface UpsellDialogActionsInfo {\n  feature: 'comments' | 'scheduled_publishing' | 'ai_assist' | 'tasks'\n  type: 'modal' | 'inspector'\n}\n\n/** @internal */\nexport interface UpsellDialogViewedInfo extends UpsellDialogActionsInfo {\n  source: 'field_action' | 'document_toolbar' | 'document_action' | 'navbar' | 'link' | 'pte'\n}\n\n/**\n * @internal\n */\nexport const UpsellDialogViewed = defineEvent<UpsellDialogViewedInfo>({\n  name: 'Upsell Dialog Viewed',\n  version: 1,\n  description: 'User viewed the upsell dialog',\n})\n\n/**\n * @internal\n */\nexport const UpsellDialogDismissed = defineEvent<UpsellDialogActionsInfo>({\n  name: 'Upsell Dialog Dismissed',\n  version: 1,\n  description: 'User dismissed the upsell dialog',\n})\n\n/**\n * @internal\n */\nexport const UpsellDialogUpgradeCtaClicked = defineEvent<UpsellDialogActionsInfo>({\n  name: 'Upsell Dialog Upgrade CTA Clicked',\n  version: 1,\n  description: 'User clicked the \"Upgrade\" CTA in the upsell dialog',\n})\n\n/**\n * @internal\n */\nexport const UpsellDialogLearnMoreCtaClicked = defineEvent<UpsellDialogActionsInfo>({\n  name: 'Upsell Dialog Learn More CTA Clicked',\n  version: 1,\n  description: 'User clicked the \"Learn More\" CTA in the upsell dialog',\n})\n","import {useTelemetry} from '@sanity/telemetry/react'\nimport {template} from 'lodash'\nimport {useCallback, useContext, useEffect, useMemo, useState} from 'react'\nimport {SchedulePublishUpsellContext} from 'sanity/_singletons'\n\nimport {useClient} from '../../../hooks/useClient'\nimport {useProjectId} from '../../../hooks/useProjectId'\nimport {\n  UpsellDialogDismissed,\n  UpsellDialogLearnMoreCtaClicked,\n  UpsellDialogUpgradeCtaClicked,\n  UpsellDialogViewed,\n  type UpsellDialogViewedInfo,\n} from '../../../studio/upsell'\nimport {type UpsellData} from '../../../studio/upsell/types'\nimport {UpsellDialog} from '../../../studio/upsell/UpsellDialog'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../../studioClient'\n\nexport interface SchedulePublishUpsellContextValue {\n  upsellDialogOpen: boolean\n  handleOpenDialog: (source: UpsellDialogViewedInfo['source']) => void\n  upsellData: UpsellData | null\n  telemetryLogs: {\n    dialogSecondaryClicked: () => void\n    dialogPrimaryClicked: () => void\n    panelViewed: (source: UpsellDialogViewedInfo['source']) => void\n    panelDismissed: () => void\n    panelPrimaryClicked: () => void\n    panelSecondaryClicked: () => void\n  }\n}\n\nconst FEATURE = 'scheduled_publishing' as const\nconst TEMPLATE_OPTIONS = {interpolate: /{{([\\s\\S]+?)}}/g}\nconst BASE_URL = 'www.sanity.io'\n\n/**\n * @beta\n * @hidden\n */\nexport function SchedulePublishingUpsellProvider(props: {children: React.ReactNode}) {\n  const [upsellDialogOpen, setUpsellDialogOpen] = useState(false)\n  const [upsellData, setUpsellData] = useState<UpsellData | null>(null)\n  const projectId = useProjectId()\n  const telemetry = useTelemetry()\n  const client = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n\n  const telemetryLogs = useMemo(\n    (): SchedulePublishUpsellContextValue['telemetryLogs'] => ({\n      dialogSecondaryClicked: () =>\n        telemetry.log(UpsellDialogLearnMoreCtaClicked, {\n          feature: FEATURE,\n          type: 'modal',\n        }),\n      dialogPrimaryClicked: () =>\n        telemetry.log(UpsellDialogUpgradeCtaClicked, {\n          feature: FEATURE,\n          type: 'modal',\n        }),\n      panelViewed: (source) =>\n        telemetry.log(UpsellDialogViewed, {\n          feature: FEATURE,\n          type: 'inspector',\n          source,\n        }),\n      panelDismissed: () =>\n        telemetry.log(UpsellDialogDismissed, {\n          feature: FEATURE,\n          type: 'inspector',\n        }),\n      panelPrimaryClicked: () =>\n        telemetry.log(UpsellDialogUpgradeCtaClicked, {\n          feature: FEATURE,\n          type: 'inspector',\n        }),\n      panelSecondaryClicked: () =>\n        telemetry.log(UpsellDialogLearnMoreCtaClicked, {\n          feature: FEATURE,\n          type: 'inspector',\n        }),\n    }),\n    [telemetry],\n  )\n\n  const handlePrimaryButtonClick = useCallback(() => {\n    telemetryLogs.dialogPrimaryClicked()\n  }, [telemetryLogs])\n\n  const handleSecondaryButtonClick = useCallback(() => {\n    telemetryLogs.dialogSecondaryClicked()\n  }, [telemetryLogs])\n\n  const handleClose = useCallback(() => {\n    setUpsellDialogOpen(false)\n    telemetry.log(UpsellDialogDismissed, {\n      feature: FEATURE,\n      type: 'modal',\n    })\n  }, [telemetry])\n\n  useEffect(() => {\n    const data$ = client.observable.request<UpsellData | null>({\n      uri: '/journey/scheduled-publishing',\n    })\n\n    const sub = data$.subscribe({\n      next: (data) => {\n        if (!data) return\n        try {\n          const ctaUrl = template(data.ctaButton.url, TEMPLATE_OPTIONS)\n          data.ctaButton.url = ctaUrl({baseUrl: BASE_URL, projectId})\n\n          const secondaryUrl = template(data.secondaryButton.url, TEMPLATE_OPTIONS)\n          data.secondaryButton.url = secondaryUrl({baseUrl: BASE_URL, projectId})\n          setUpsellData(data)\n        } catch (e) {\n          // silently fail\n        }\n      },\n      error: () => {\n        // silently fail\n      },\n    })\n\n    return () => {\n      sub.unsubscribe()\n    }\n  }, [client, projectId])\n\n  const handleOpenDialog = useCallback(\n    (source: UpsellDialogViewedInfo['source']) => {\n      setUpsellDialogOpen(true)\n\n      telemetry.log(UpsellDialogViewed, {\n        feature: FEATURE,\n        type: 'modal',\n        source,\n      })\n    },\n    [telemetry],\n  )\n\n  const ctxValue = useMemo<SchedulePublishUpsellContextValue>(\n    () => ({\n      upsellDialogOpen,\n      handleOpenDialog,\n      upsellData,\n      telemetryLogs,\n    }),\n    [handleOpenDialog, upsellDialogOpen, upsellData, telemetryLogs],\n  )\n\n  return (\n    <SchedulePublishUpsellContext.Provider value={ctxValue}>\n      {props.children}\n      {upsellData && upsellDialogOpen && (\n        <UpsellDialog\n          data={upsellData}\n          onClose={handleClose}\n          onPrimaryClick={handlePrimaryButtonClick}\n          onSecondaryClick={handleSecondaryButtonClick}\n        />\n      )}\n    </SchedulePublishUpsellContext.Provider>\n  )\n}\n\nexport function useSchedulePublishingUpsell(): SchedulePublishUpsellContextValue {\n  const context = useContext(SchedulePublishUpsellContext)\n  return context\n}\n","import {type SVGProps} from 'react'\n\ninterface Props {\n  props?: SVGProps<SVGSVGElement>\n}\n\nconst BigIconComingSoon = (props: Props) => {\n  return (\n    <svg\n      width=\"100\"\n      height=\"100\"\n      viewBox=\"0 0 100 100\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <path\n        d=\"M54 26C54 28.7614 49.0751 31 43 31C36.9249 31 32 28.7614 32 26C32 23.2386 36.9249 7 43 7C49.0751 7 54 23.2386 54 26Z\"\n        stroke=\"#7B8CA8\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        d=\"M65 71.5V57M65 71.5L60.5789 69.0132M65 71.5L60.5789 73.9868M65 57L57 52.5L54 54.1875M65 57V42.5M65 57L57 47M65 57L58.1586 60.8483M65 57L60.5789 67.5M65 42.5L57 38L54 39.6875M65 42.5L57 47M65 42.5V27.5M57 47L65 27.5M57 47L54 39.6875M57 47L54 45.3125M57 47L54 50.75M57 23L65 27.5M57 23L54 24.6875V39.6875M57 23V60M65 27.5L57 32L54 30.3125\"\n        stroke=\"#7B8CA8\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        d=\"M54 76C54 78.7614 49.0751 81 43 81C36.9249 81 32 78.7614 32 76M54 76H60.5V63L54 57M54 76V57M32 76H25V63L32 57M32 76V57M32 26V57M54 26V57M54 45C54 47.7614 49.0751 50 43 50V35C49.0751 35 54 32.7614 54 30\"\n        stroke=\"#7B8CA8\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        d=\"M43 45.5701H44.8976L45.8465 43.1981L46.9679 42.7335L49.3162 43.7399L50.658 42.3981L49.6516 40.0499L50.1161 38.9284L52.4882 37.9795V36.0819L50.1161 35.1331L49.6516 34.0116M47.1334 34.9653C47.5197 35.5597 47.7441 36.269 47.7441 37.0307C47.7441 39.1268 46.0449 40.826 43.9488 40.826C43.6212 40.826 43.3033 40.7845 43 40.7064\"\n        stroke=\"#7B8CA8\"\n        strokeWidth=\"1.2\"\n        strokeLinejoin=\"round\"\n      />\n      <path\n        d=\"M63.5464 78.6739L64.9606 78.0321L67.4355 78.5135L68.6174 78.2913L69.6174 77.1566H71.6174L72.6174 78.2913L73.7994 78.5135L76.2743 78.0321L77.6885 78.6739M63.5464 78.6739L64.607 79.7972L64.1174 80.3336L63.5464 80.4373M63.5464 78.6739V80.4373M77.6885 78.6739L76.6278 79.7972L77.1174 80.3336L77.6885 80.4373M77.6885 78.6739V80.4373M63.5464 80.4373L61.6174 80.7875V81.6952L64.1174 82.1491L64.607 82.6855L63.5464 83.8088L64.9606 84.4506L67.4355 83.9693L68.6174 84.1915L69.6174 85.3261H71.6174L72.6174 84.1915L73.7994 83.9693L76.2743 84.4506L77.6885 83.8088L76.6278 82.6855L77.1174 82.1491L79.6174 81.6952V80.7875L77.6885 80.4373\"\n        stroke=\"#7B8CA8\"\n        strokeWidth=\"1.2\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n      <path\n        d=\"M79.6174 81.4647V84.7162L77.6885 85.0664M76.2743 87.4716L77.6885 86.8298V85.0664M76.2743 87.4716L73.7994 86.9902L72.6174 87.2124L71.6174 88.3471M76.2743 87.4716V84.7162M61.6174 81.4647V84.7162L63.5464 85.0664M71.6174 88.3471H69.6174M71.6174 88.3471V85.3261M69.6174 88.3471L68.6174 87.2124L67.4355 86.9902L64.9606 87.4716M69.6174 88.3471V85.3261M64.9606 87.4716L64.2535 87.1507L63.5464 86.8298V85.0664M64.9606 87.4716V84.6825M63.5464 84.039V85.0664M77.6885 84.039V85.0664\"\n        stroke=\"#7B8CA8\"\n        strokeWidth=\"1.2\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n      <path\n        d=\"M73.6174 81.2412C73.6174 81.9932 72.2743 82.6028 70.6174 82.6028C68.9606 82.6028 67.6174 81.9932 67.6174 81.2412C67.6174 80.4892 68.9606 79.8796 70.6174 79.8796C72.2743 79.8796 73.6174 80.4892 73.6174 81.2412Z\"\n        stroke=\"#7B8CA8\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        d=\"M90 85.3616C90 86.1136 88.6569 86.7232 87 86.7232C85.3431 86.7232 84 86.1136 84 85.3616M90 85.3616C90 84.6096 88.6569 84 87 84C85.3431 84 84 84.6096 84 85.3616M90 85.3616V87.3616C90 88.1136 88.6569 88.7232 87 88.7232C85.3431 88.7232 84 88.1136 84 87.3616V85.3616\"\n        stroke=\"#7B8CA8\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        d=\"M82 89.8648C82 90.3425 81.3284 90.7297 80.5 90.7297C79.6716 90.7297 79 90.3425 79 89.8648M82 89.8648C82 89.3872 81.3284 89 80.5 89C79.6716 89 79 89.3872 79 89.8648M82 89.8648V91.1352C82 91.6128 81.3284 92 80.5 92C79.6716 92 79 91.6128 79 91.1352V89.8648\"\n        stroke=\"#7B8CA8\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        d=\"M52.7555 46.7289L52.5381 45.0136L51.2951 44.6903L50.2695 46.0824L49.4558 46.1956L48.0892 45.1364L46.9817 45.7867L47.2408 47.4962L46.7455 48.1517L45.0302 48.3691L44.7069 49.612M51.1084 47.9593C49.8968 47.6442 48.6622 48.2485 48.1434 49.3385\"\n        stroke=\"#7B8CA8\"\n        strokeWidth=\"1.2\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n      <path\n        d=\"M39 80.5L38 83.5C38 84.8807 40.2386 86 43 86C45.7614 86 48 84.8807 48 83.5L47 80.5\"\n        stroke=\"#7B8CA8\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        d=\"M32 77L31 80C31 81.3807 33.2386 82.5 36 82.5C36.9107 82.5 37.7646 82.3783 38.5 82.1655\"\n        stroke=\"#7B8CA8\"\n        strokeWidth=\"1.2\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n      <path\n        d=\"M54 77L55 80C55 81.3807 52.7614 82.5 50 82.5C49.0893 82.5 48.2354 82.3783 47.5 82.1655\"\n        stroke=\"#7B8CA8\"\n        strokeWidth=\"1.2\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n    </svg>\n  )\n}\n\nexport default BigIconComingSoon\n","import {type SVGProps} from 'react'\n\ninterface Props {\n  props?: SVGProps<SVGSVGElement>\n}\n\nconst BigIconScreen = (props: Props) => {\n  return (\n    <svg\n      width=\"100\"\n      height=\"100\"\n      viewBox=\"0 0 100 100\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <path\n        d=\"M35 84.5L41.7308 67H50V69.5M65 84.5L58.2692 67M32 65H42.5H50H57.5H81V23H19V65H24\"\n        stroke=\"#7B8CA8\"\n        strokeWidth=\"1.2\"\n      />\n      <path d=\"M84 16V23H16V16M84 16H16M84 16L82 14H18L16 16\" stroke=\"#7B8CA8\" strokeWidth=\"1.2\" />\n      <path d=\"M24 65H18L17 67H83L82 65H32\" stroke=\"#7B8CA8\" strokeWidth=\"1.2\" />\n      <circle cx=\"50\" cy=\"72\" r=\"2\" stroke=\"#7B8CA8\" strokeWidth=\"1.2\" />\n      <path\n        d=\"M24 63C24 61.8954 24.8954 61 26 61H30C31.1046 61 32 61.8954 32 63V67H24V63Z\"\n        stroke=\"#7B8CA8\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        d=\"M24 65C24 63.8954 24.8954 63 26 63H30C31.1046 63 32 63.8954 32 65V67H24V65Z\"\n        stroke=\"#7B8CA8\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        d=\"M28 44.9975C31.0617 44.62 33.5601 42.4793 35.2478 39.995C36.199 38.5947 36.9116 37.0761 36.9653 35.3597C36.9973 34.3355 36.8332 33.1459 35.8944 32.5454C35.3035 32.1675 34.4935 32.0285 33.8044 32.0022C32.7788 31.9631 32.1643 32.4357 31.8489 33.4197C30.3123 38.2145 33.0184 42.7025 36.3911 45.8977C38.1152 47.531 40.0746 48.9275 42.1179 50.1294C43.9867 51.2287 46.003 52.2595 48.1189 52.7885C48.9466 52.9954 50.4951 53.3913 51.3211 52.954C52.3579 52.4051 51.8285 49.7323 51.7091 48.9809C51.3862 46.9486 50.7293 45.0311 49.8726 43.1662C49.3791 42.0918 48.7948 40.8004 47.9999 39.8967C47.4959 39.3237 47.1331 39.4889 47.1101 40.2278C47.0699 41.5204 47.5768 42.7535 48.3103 43.7973C50.633 47.1024 54.4924 49.4656 58.2792 50.6985C59.9643 51.2471 61.8953 51.7306 63.6853 51.6193C65.3845 51.5137 65.6225 50.1321 65.7287 48.655C65.9958 44.9405 64.9629 40.7695 62.6403 37.7963C61.615 36.4839 60.3547 35.6334 58.6879 35.4476C57.7554 35.3437 56.665 35.3303 55.7391 35.5097C54.8073 35.6903 54.0162 36.297 54.3371 37.3462C54.6464 38.3572 55.8044 39.0666 56.6444 39.5759C57.983 40.3876 59.4813 40.9898 61.0262 41.2624C63.2658 41.6576 65.1745 41.1715 67.141 40.1346C67.9966 39.6835 68.8825 39.1795 69.4379 38.3861\"\n        stroke=\"#7B8CA8\"\n        strokeWidth=\"1.2\"\n      />\n    </svg>\n  )\n}\n\nexport default BigIconScreen\n","import {type SVGProps} from 'react'\n\ninterface Props {\n  props?: SVGProps<SVGSVGElement>\n}\n\nconst BigIconSuccess = (props: Props) => {\n  return (\n    <svg\n      width=\"100\"\n      height=\"100\"\n      viewBox=\"0 0 100 100\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <path\n        d=\"M35.5034 34.5961C35.6531 34.1763 35.8628 33.792 36.1352 33.4478C37.6813 31.4827 40.9503 31.2145 44.9898 32.3554M35.5034 34.5961L24.12 78.5806C23.4656 81.1092 26.1309 83.2083 28.4357 81.9796L68.4485 60.6484M35.5034 34.5961C34.2315 38.1622 37.2902 44.2842 43.0792 50.0342M68.4485 60.6484C68.8174 60.4078 69.1391 60.118 69.4084 59.7777C70.9736 57.7883 70.4521 54.4677 68.3472 50.7308M68.4485 60.6484C65.1795 62.7806 58.1999 61.0522 51.0413 56.4338M49.3164 55.2667C48.6043 54.7622 47.8933 54.2299 47.1867 53.6707C46.3331 52.9953 45.5161 52.3044 44.7387 51.6037M49.3164 55.2667C49.8913 55.674 50.4669 56.0632 51.0413 56.4338M49.3164 55.2667C52.3445 53.1871 58.7283 49.8329 66.4965 47.8874M51.0413 56.4338C55.9305 53.432 62.4593 51.6876 68.3472 50.7308M43.0792 50.0342C43.6098 50.5612 44.1634 51.0852 44.7387 51.6037M43.0792 50.0342C44.4006 45.7138 45.8116 38.387 44.9898 32.3554M44.7387 51.6037C47.6743 44.2968 48.7135 38.3712 48.6643 33.6916M63.9622 36.487C63.2905 34.23 62.35 29.5386 63.9622 28.8293C65.9774 27.9426 68.5569 33.5045 70.8139 32.2148C73.0709 30.9251 69.4435 27.7814 70.8139 25.2019C72.1842 22.6224 79.6002 28.4262 81.2123 23.4285C82.502 19.4304 79.7614 16.6574 78.2298 15.7708M66.4965 47.8874C70.7697 46.8171 75.462 46.1731 80.2449 46.4019L80.2449 49.7068C77.5329 49.6936 73.1535 49.9498 68.3472 50.7308M66.4965 47.8874C64.45 45.1054 61.6564 42.2264 58.3003 39.5859C55.0633 37.039 51.7429 35.0416 48.6643 33.6916M48.6643 33.6916C48.5822 25.8794 45.4671 21.5396 43.0792 20.043L39.941 23.4285C42.9851 25.0774 44.4569 28.4441 44.9898 32.3554\"\n        stroke=\"#7B8CA8\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        d=\"M32.2094 47.3001C31.0515 50.5465 34.6857 56.6214 40.9597 61.5862C47.2404 66.5562 53.9958 68.696 56.8839 66.8122\"\n        stroke=\"#7B8CA8\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        d=\"M28.8867 60.1903C28.1245 62.3275 30.5169 66.3267 34.6472 69.595C38.7818 72.8669 43.229 74.2755 45.1303 73.0354\"\n        stroke=\"#7B8CA8\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        d=\"M26.2718 70.2225C25.8147 71.5039 27.2491 73.9016 29.7254 75.8611C32.2044 77.8228 34.8707 78.6673 36.0106 77.9238\"\n        stroke=\"#7B8CA8\"\n        strokeWidth=\"1.2\"\n      />\n      <path\n        d=\"M28.0529 44.1724C29.5354 43.1981 32.3735 40.6904 31.8652 38.4538C31.2298 35.6581 22.8425 38.9622 22.7155 36.5477C22.5884 34.1331 27.0361 30.575 26.909 28.6688C26.7819 26.7626 18.6489 30.8291 18.6489 26.8896C18.6489 23.738 21.36 22.1029 22.7155 21.6793\"\n        stroke=\"#7B8CA8\"\n        strokeWidth=\"1.2\"\n      />\n      <rect\n        x=\"21.8833\"\n        y=\"50.1122\"\n        width=\"3.03077\"\n        height=\"3.03077\"\n        transform=\"rotate(-24.7154 21.8833 50.1122)\"\n        stroke=\"#7B8CA8\"\n        strokeWidth=\"1.2\"\n      />\n      <rect\n        x=\"16.0527\"\n        y=\"36.722\"\n        width=\"3.03077\"\n        height=\"3.03077\"\n        transform=\"rotate(4.36851 16.0527 36.722)\"\n        stroke=\"#7B8CA8\"\n        strokeWidth=\"1.2\"\n      />\n      <rect\n        x=\"27.9448\"\n        y=\"22.8353\"\n        width=\"3.03077\"\n        height=\"3.03077\"\n        transform=\"rotate(-24.7154 27.9448 22.8353)\"\n        stroke=\"#7B8CA8\"\n        strokeWidth=\"1.2\"\n      />\n      <rect\n        x=\"53.7065\"\n        y=\"33.443\"\n        width=\"3.03077\"\n        height=\"3.03077\"\n        transform=\"rotate(-24.7154 53.7065 33.443)\"\n        stroke=\"#7B8CA8\"\n        strokeWidth=\"1.2\"\n      />\n      <rect\n        x=\"67.3447\"\n        y=\"13.743\"\n        width=\"3.03077\"\n        height=\"3.03077\"\n        transform=\"rotate(-24.7154 67.3447 13.743)\"\n        stroke=\"#7B8CA8\"\n        strokeWidth=\"1.2\"\n      />\n      <rect\n        x=\"74.9219\"\n        y=\"54.6584\"\n        width=\"3.03077\"\n        height=\"3.03077\"\n        transform=\"rotate(-24.7154 74.9219 54.6584)\"\n        stroke=\"#7B8CA8\"\n        strokeWidth=\"1.2\"\n      />\n      <rect\n        x=\"70.3755\"\n        y=\"66.7814\"\n        width=\"3.03077\"\n        height=\"3.03077\"\n        transform=\"rotate(-24.7154 70.3755 66.7814)\"\n        stroke=\"#7B8CA8\"\n        strokeWidth=\"1.2\"\n      />\n      <rect\n        x=\"77.9526\"\n        y=\"78.9045\"\n        width=\"3.03077\"\n        height=\"3.03077\"\n        transform=\"rotate(-24.7154 77.9526 78.9045)\"\n        stroke=\"#7B8CA8\"\n        strokeWidth=\"1.2\"\n      />\n      <rect\n        x=\"82.4985\"\n        y=\"62.2353\"\n        width=\"3.03077\"\n        height=\"3.03077\"\n        transform=\"rotate(-24.7154 82.4985 62.2353)\"\n        stroke=\"#7B8CA8\"\n        strokeWidth=\"1.2\"\n      />\n    </svg>\n  )\n}\n\nexport default BigIconSuccess\n","import {Card, Flex, Heading, Stack, Text} from '@sanity/ui'\nimport {format} from 'date-fns'\n\nimport {type ScheduleState} from '../../types'\nimport BigIconComingSoon from './BigIconComingSoon'\nimport BigIconScreen from './BigIconScreen'\nimport BigIconSuccess from './BigIconSuccess'\n\ninterface Props {\n  scheduleState?: ScheduleState\n  selectedDate?: Date\n}\n\nconst EmptySchedules = (props: Props) => {\n  const {scheduleState, selectedDate} = props\n\n  let BigIcon\n  let description\n  let heading\n  switch (scheduleState) {\n    case 'succeeded': {\n      description =\n        'When a scheduled document is successfully published it moves to this list view.'\n      heading = 'No completed scheduled publications ... yet'\n      BigIcon = BigIconComingSoon\n      break\n    }\n    case 'cancelled': {\n      description =\n        'Schedules can fail for several reasons, for example when their documents are deleted. When they do, they show up here.'\n      heading = 'No failed scheduled publications'\n      BigIcon = BigIconSuccess\n      break\n    }\n    case 'scheduled': {\n      description =\n        'When editing a document, create a new scheduled publication from the menu next to the Publish button.'\n      heading = 'No upcoming scheduled publications'\n      BigIcon = BigIconScreen\n      break\n    }\n    default:\n      break\n  }\n\n  if (selectedDate) {\n    description = 'No schedules for this date.'\n    heading = format(selectedDate, 'd MMMM yyyy')\n    BigIcon = BigIconScreen\n  }\n\n  return (\n    <Card paddingX={6} paddingBottom={8} paddingTop={7} radius={2} shadow={1}>\n      <Stack space={4}>\n        <Flex justify=\"center\">{BigIcon && <BigIcon />}</Flex>\n        <Stack space={4}>\n          {heading && (\n            <Heading align=\"center\" size={1}>\n              {heading}\n            </Heading>\n          )}\n          {description && (\n            <Text align=\"center\" size={1}>\n              {description}\n            </Text>\n          )}\n        </Stack>\n      </Stack>\n    </Card>\n  )\n}\n\nexport default EmptySchedules\n","// Based off: https://github.com/sanity-io/sanity/blob/next/packages/@sanity/desk-tool/src/components/paneItem/helpers.tsx\nimport {type SanityDocument} from '@sanity/client'\nimport {WarningOutlineIcon} from '@sanity/icons'\nimport {type SchemaType} from '@sanity/types'\nimport {type ComponentType, type ReactNode} from 'react'\nimport {combineLatest, type Observable, of} from 'rxjs'\nimport {map, startWith} from 'rxjs/operators'\n\nimport {type DocumentPreviewStore} from '../../preview'\nimport {getDraftId, getPublishedId} from '../../util/draftUtils'\nimport {type Schedule} from '../types'\n\nexport interface PaneItemPreviewState {\n  isLoading?: boolean\n  draft?: SanityDocument | null\n  published?: SanityDocument | null\n}\n\nexport interface PreviewValue {\n  id?: string\n  subtitle?: ReactNode\n  title?: ReactNode\n  media?: ReactNode | ComponentType\n  icon?: boolean\n  type?: string\n  displayOptions?: {showIcon?: boolean}\n  schemaType?: {name?: string}\n}\n\nconst isLiveEditEnabled = (schemaType: any) => schemaType.liveEdit === true\n\nexport const getMissingDocumentFallback = (item: SanityDocument): PreviewValue => ({\n  title: (\n    <span style={{fontStyle: 'italic'}}>\n      {item.title ? String(item.title) : 'Missing document'}\n    </span>\n  ),\n  subtitle: (\n    <span style={{fontStyle: 'italic'}}>\n      {item.title ? `Missing document ID: ${item._id}` : `Document ID: ${item._id}`}\n    </span>\n  ),\n  media: WarningOutlineIcon,\n})\n\nexport function getPreviewStateObservable(\n  documentPreviewStore: DocumentPreviewStore,\n  schemaType: SchemaType,\n  documentId: string,\n  title: ReactNode,\n): Observable<PaneItemPreviewState> {\n  const draft$ = isLiveEditEnabled(schemaType)\n    ? of({snapshot: null})\n    : documentPreviewStore.observeForPreview(\n        {_type: 'reference', _ref: getDraftId(documentId)},\n        schemaType,\n      )\n\n  const published$ = documentPreviewStore.observeForPreview(\n    {_type: 'reference', _ref: getPublishedId(documentId)},\n    schemaType,\n  )\n\n  return combineLatest([draft$, published$]).pipe(\n    map(([draft, published]: any) => ({\n      draft: draft.snapshot ? {title, ...(draft.snapshot || {})} : null,\n      isLoading: false,\n      published: published.snapshot ? {title, ...(published.snapshot || {})} : null,\n    })),\n    startWith({draft: null, isLoading: true, published: null}),\n  )\n}\n\n/**\n * Whilst schedules can contain multiple documents, this plugin specifically limits schedules to one document only\n */\nexport function getScheduledDocument(schedule: Schedule) {\n  return schedule.documents?.[0]\n}\n\n/**\n * Whilst schedules can contain multiple documents, this plugin specifically limits schedules to one document only\n */\nexport function getScheduledDocumentId(schedule: Schedule): string | undefined {\n  return getScheduledDocument(schedule)?.documentId.replaceAll('drafts.', '')\n}\n","import {type SchemaType} from '@sanity/types'\nimport {useEffect, useState} from 'react'\n\nimport {useDocumentPreviewStore} from '../../store'\nimport {getPreviewStateObservable, type PaneItemPreviewState} from '../utils/paneItemHelpers'\n\nexport default function usePreviewState(\n  documentId: string,\n  schemaType?: SchemaType,\n): PaneItemPreviewState {\n  const documentPreviewStore = useDocumentPreviewStore()\n  const [paneItemPreview, setPaneItemPreview] = useState<PaneItemPreviewState>({})\n\n  useEffect(() => {\n    if (!schemaType) {\n      return undefined\n    }\n    const subscription = getPreviewStateObservable(\n      documentPreviewStore,\n      schemaType,\n      documentId,\n      '',\n    ).subscribe((state) => {\n      setPaneItemPreview(state)\n    })\n\n    return () => {\n      subscription?.unsubscribe()\n    }\n  }, [documentPreviewStore, schemaType, documentId])\n\n  return paneItemPreview\n}\n","import {type SchemaType} from '@sanity/types'\nimport {useMemo} from 'react'\n\nimport {useSchema} from '../../hooks/useSchema'\nimport {type Schedule} from '../types'\nimport {getScheduledDocument} from '../utils/paneItemHelpers'\n\nexport function useScheduleSchemaType(schedule: Schedule): SchemaType | undefined {\n  const firstDocument = getScheduledDocument(schedule)\n  const schema = useSchema()\n  const schemaName = firstDocument.documentType\n\n  return useMemo(() => {\n    if (!schemaName) {\n      return undefined\n    }\n    return schema.get(schemaName) as SchemaType\n  }, [schemaName, schema])\n}\n\nexport function useSchemaType(schemaName: string): SchemaType {\n  const schema = useSchema()\n  return useMemo(() => schema.get(schemaName) as SchemaType, [schemaName, schema])\n}\n","import {ElementQuery} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nconst DateWithTooltipElementQuery: typeof ElementQuery = styled(ElementQuery)`\n  .date-small {\n    display: inline;\n  }\n  .date-medium {\n    display: none;\n  }\n  .date-large {\n    display: none;\n  }\n\n  &[data-eq-min~='1'] {\n    .date-small {\n      display: none;\n    }\n    .date-medium {\n      display: inline;\n    }\n    .date-large {\n      display: none;\n    }\n  }\n\n  &[data-eq-min~='2'] {\n    .date-small {\n      display: none;\n    }\n    .date-medium {\n      display: none;\n    }\n    .date-large {\n      display: inline;\n    }\n  }\n`\n\nexport default DateWithTooltipElementQuery\n","import {type ReactNode, useContext} from 'react'\nimport {DocumentActionPropsContext} from 'sanity/_singletons'\n\nimport {type DocumentActionProps} from '../../config/document/actions'\n\nfunction DocumentActionPropsProvider({\n  children,\n  value,\n}: {\n  children: ReactNode\n  value: DocumentActionProps\n}) {\n  return (\n    <DocumentActionPropsContext.Provider value={value}>\n      {children}\n    </DocumentActionPropsContext.Provider>\n  )\n}\n\nfunction useDocumentActionProps() {\n  const context = useContext(DocumentActionPropsContext)\n  if (context === undefined) {\n    throw new Error('useDocumentActionProps must be used within a DocumentActionPropsProvider')\n  }\n  return context\n}\n\nexport {DocumentActionPropsProvider, useDocumentActionProps}\n","import {useCallback, useState} from 'react'\n\nimport {type Schedule, type ScheduleFormData} from '../types'\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport default function useScheduleForm(schedule?: Schedule) {\n  const [isDirty, setIsDirty] = useState(false)\n  const [formData, setFormData] = useState<ScheduleFormData | null>(\n    schedule && schedule?.executeAt\n      ? {\n          date: schedule.executeAt,\n        }\n      : null,\n  )\n\n  const handleFormChange = useCallback(\n    (form: ScheduleFormData) => {\n      const equalDates =\n        schedule?.executeAt &&\n        new Date(schedule.executeAt).getTime() === new Date(form?.date).getTime()\n\n      setFormData(form)\n      setIsDirty(!equalDates)\n    },\n    [schedule?.executeAt],\n  )\n\n  return {\n    formData,\n    isDirty,\n    onFormChange: handleFormChange,\n  }\n}\n","import {Card, Text} from '@sanity/ui'\nimport {endOfDay} from 'date-fns'\nimport {useCallback, useMemo} from 'react'\n\ninterface CalendarDayProps {\n  date: Date\n  focused?: boolean\n  onSelect: (date: Date) => void\n  isCurrentMonth?: boolean\n  isToday: boolean\n  customValidation?: (selectedDate: Date) => boolean\n  selected?: boolean\n}\n\nexport function CalendarDay(props: CalendarDayProps) {\n  const {date, focused, isCurrentMonth, isToday, customValidation, onSelect, selected} = props\n\n  // Round date to the end of day when passing to custom validate function.\n  // Remember that all calendar days are in UTC, but comparison is done with 'wall clock' time.\n  const isValid = useMemo(() => {\n    if (!customValidation) {\n      return true\n    }\n    return customValidation(endOfDay(date))\n  }, [date, customValidation])\n\n  const handleClick = useCallback(() => {\n    if (isValid) {\n      onSelect(date)\n    }\n  }, [date, isValid, onSelect])\n\n  return (\n    <div aria-selected={selected} data-ui=\"CalendarDay\">\n      <Card\n        aria-label={date.toDateString()}\n        aria-pressed={selected}\n        as=\"button\"\n        __unstable_focusRing\n        data-weekday\n        data-focused={focused ? 'true' : ''}\n        disabled={!isValid}\n        role=\"button\"\n        tabIndex={-1}\n        onClick={handleClick}\n        padding={3}\n        radius={2}\n        selected={selected}\n        tone={isToday || selected ? 'primary' : 'default'}\n      >\n        <Text\n          muted={!selected && !isCurrentMonth}\n          style={{textAlign: 'center'}}\n          weight={isCurrentMonth ? 'medium' : 'regular'}\n        >\n          {date.getDate()}\n        </Text>\n      </Card>\n    </div>\n  )\n}\n","import {range} from 'lodash'\n\nexport const MONTH_NAMES = [\n  'January',\n  'February',\n  'March',\n  'April',\n  'May',\n  'June',\n  'July',\n  'August',\n  'September',\n  'October',\n  'November',\n  'December',\n]\n\nexport const WEEK_DAY_NAMES = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']\n\nexport const HOURS_24 = range(0, 24)\n\nexport const ARROW_KEYS = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight']\n\nexport const DEFAULT_TIME_PRESETS = [\n  [0, 0],\n  [6, 0],\n  [12, 0],\n  [18, 0],\n  [23, 59],\n]\n\n// all weekdays except first\nexport const TAIL_WEEKDAYS = [1, 2, 3, 4, 5, 6]\n","import {addDays, eachWeekOfInterval, getWeek, lastDayOfMonth, startOfMonth} from 'date-fns'\n\nimport {TAIL_WEEKDAYS} from './constants'\n\nexport const getWeekStartsOfMonth = (date: Date): Date[] => {\n  const firstDay = startOfMonth(date)\n  return eachWeekOfInterval({\n    start: firstDay,\n    end: lastDayOfMonth(firstDay),\n  })\n}\n\nexport const getWeekDaysFromWeekStarts = (weekStarts: Date[]): Date[][] => {\n  return weekStarts.map((weekStart) => [\n    weekStart,\n    ...TAIL_WEEKDAYS.map((d) => addDays(weekStart, d)),\n  ])\n}\n\ntype Week = {\n  number: number\n  days: Date[]\n}\n\nexport const getWeeksOfMonth = (date: Date): Week[] =>\n  getWeekDaysFromWeekStarts(getWeekStartsOfMonth(date)).map(\n    (days): Week => ({\n      number: getWeek(days[0]),\n      days,\n    }),\n  )\n\nexport const formatTime = (hours: number, minutes: number): string =>\n  `${`${hours}`.padStart(2, '0')}:${`${minutes}`.padStart(2, '0')}`\n","import {Box, Grid, Text} from '@sanity/ui'\nimport {isSameDay, isSameMonth} from 'date-fns'\n\nimport useTimeZone from '../../../../hooks/useTimeZone'\nimport {CalendarDay} from './CalendarDay'\nimport {WEEK_DAY_NAMES} from './constants'\nimport {getWeeksOfMonth} from './utils'\n\ninterface CalendarMonthProps {\n  date: Date\n  focused?: Date\n  selected?: Date\n  onSelect: (date: Date) => void\n  hidden?: boolean\n  customValidation?: (selectedDate: Date) => boolean\n}\n\nexport function CalendarMonth(props: CalendarMonthProps) {\n  const {getCurrentZoneDate} = useTimeZone()\n  const {customValidation} = props\n  return (\n    <Box aria-hidden={props.hidden || false} data-ui=\"CalendarMonth\">\n      <Grid gap={1} style={{gridTemplateColumns: 'repeat(7, minmax(44px, 46px))'}}>\n        {WEEK_DAY_NAMES.map((weekday) => (\n          <Box key={weekday} paddingY={2}>\n            <Text size={1} weight=\"medium\" style={{textAlign: 'center'}}>\n              {weekday}\n            </Text>\n          </Box>\n        ))}\n\n        {/* Note: UTC dates are passed to each Calendar day but we use 'wall time' for comparison */}\n        {getWeeksOfMonth(props.date).map((week, weekIdx) =>\n          week.days.map((date, dayIdx) => {\n            const focused = props.focused && isSameDay(date, props.focused)\n            const selected = props.selected && isSameDay(date, props.selected)\n            const isToday = isSameDay(date, getCurrentZoneDate())\n            const isCurrentMonth = props.focused && isSameMonth(date, props.focused)\n\n            return (\n              <CalendarDay\n                date={date}\n                focused={focused}\n                isCurrentMonth={isCurrentMonth}\n                isToday={isToday}\n                customValidation={customValidation}\n                // eslint-disable-next-line react/no-array-index-key\n                key={`${weekIdx}-${dayIdx}`}\n                onSelect={props.onSelect}\n                selected={selected}\n              />\n            )\n          }),\n        )}\n      </Grid>\n    </Box>\n  )\n}\n","export const features = {\n  dayPresets: false,\n  timePresets: false,\n}\n","import {type ChangeEvent, type ComponentProps, type FocusEvent, useCallback} from 'react'\n\nimport {LazyTextInput} from '../../../../../components/inputs/DateInputs/LazyTextInput'\n\ntype Props = Omit<ComponentProps<typeof LazyTextInput>, 'onChange' | 'value'> & {\n  value?: number\n  onChange: (year: number) => void\n}\n\nexport const YearInput = ({onChange, ...props}: Props) => {\n  const handleChange = useCallback(\n    (event: FocusEvent<HTMLInputElement> | ChangeEvent<HTMLInputElement>) => {\n      const numericValue = parseInt(event.currentTarget.value, 10)\n      if (!isNaN(numericValue)) {\n        onChange(numericValue)\n      }\n    },\n    [onChange],\n  )\n\n  return (\n    <LazyTextInput\n      data-testid=\"date-input\"\n      {...props}\n      onChange={handleChange}\n      inputMode=\"numeric\"\n    />\n  )\n}\n","import {ChevronLeftIcon, ChevronRightIcon} from '@sanity/icons'\nimport {\n  Box,\n  // eslint-disable-next-line no-restricted-imports\n  Button,\n  Flex,\n  Select,\n  Text,\n} from '@sanity/ui'\nimport {addDays, addMonths, setDate, setHours, setMinutes, setMonth, setYear} from 'date-fns'\nimport {range} from 'lodash'\nimport {\n  type ComponentProps,\n  type FormEvent,\n  type ForwardedRef,\n  forwardRef,\n  type KeyboardEvent,\n  useCallback,\n  useEffect,\n  useImperativeHandle,\n  useRef,\n} from 'react'\n\nimport useTimeZone from '../../../../hooks/useTimeZone'\nimport {CalendarMonth} from './CalendarMonth'\nimport {ARROW_KEYS, DEFAULT_TIME_PRESETS, HOURS_24, MONTH_NAMES} from './constants'\nimport {features} from './features'\nimport {formatTime} from './utils'\nimport {YearInput} from './YearInput'\n\nexport type CalendarProps = Omit<ComponentProps<'div'>, 'onSelect'> & {\n  selectTime?: boolean\n  selectedDate?: Date\n  timeStep?: number\n  onSelect: (date: Date) => void\n  focusedDate: Date\n  onFocusedDateChange: (index: Date) => void\n  customValidation?: (selectedDate: Date) => boolean\n}\n\n// This is used to maintain focus on a child element of the calendar-grid between re-renders\n// When using arrow keys to move focus from a day in one month to another we are setting focus at the button for the day\n// after it has changed but *only* if we *already* had focus inside the calendar grid (e.g not if focus was on the \"next\n// year\" button, or any of the other controls)\n// When moving from the last day of a month that displays 6 weeks in the grid to a month that displays 5 weeks, current\n// focus gets lost on render, so this provides us with a stable element to help us preserve focus on a child element of\n// the calendar grid between re-renders\nconst PRESERVE_FOCUS_ELEMENT = (\n  <span\n    data-preserve-focus\n    style={{overflow: 'hidden', position: 'absolute', outline: 'none'}}\n    tabIndex={-1}\n  />\n)\n\nexport const Calendar = forwardRef(function Calendar(\n  props: CalendarProps,\n  forwardedRef: ForwardedRef<HTMLDivElement>,\n) {\n  const {getCurrentZoneDate, zoneDateToUtc} = useTimeZone()\n\n  const {\n    selectTime,\n    onFocusedDateChange,\n    selectedDate = getCurrentZoneDate(),\n    focusedDate = selectedDate,\n    timeStep = 1,\n    onSelect,\n    customValidation,\n    ...restProps\n  } = props\n\n  const setFocusedDate = useCallback(\n    (date: Date) => onFocusedDateChange(zoneDateToUtc(date)),\n    [onFocusedDateChange, zoneDateToUtc],\n  )\n\n  const setFocusedDateMonth = useCallback(\n    (month: number) => setFocusedDate(setDate(setMonth(focusedDate, month), 1)),\n    [focusedDate, setFocusedDate],\n  )\n\n  const handleFocusedMonthChange = useCallback(\n    (e: FormEvent<HTMLSelectElement>) => setFocusedDateMonth(Number(e.currentTarget.value)),\n    [setFocusedDateMonth],\n  )\n\n  const moveFocusedDate = useCallback(\n    (by: number) => setFocusedDate(addMonths(focusedDate, by)),\n    [focusedDate, setFocusedDate],\n  )\n\n  const setFocusedDateYear = useCallback(\n    (year: number) => setFocusedDate(setYear(focusedDate, year)),\n    [focusedDate, setFocusedDate],\n  )\n\n  const handleDateChange = useCallback(\n    (date: Date) => {\n      onSelect(\n        zoneDateToUtc(\n          setMinutes(setHours(date, selectedDate.getHours()), selectedDate.getMinutes()),\n        ),\n      )\n    },\n    [onSelect, selectedDate, zoneDateToUtc],\n  )\n\n  const handleMinutesChange = useCallback(\n    (event: FormEvent<HTMLSelectElement>) => {\n      const m = Number(event.currentTarget.value)\n      onSelect(zoneDateToUtc(setMinutes(selectedDate, m)))\n    },\n    [onSelect, selectedDate, zoneDateToUtc],\n  )\n\n  const handleHoursChange = useCallback(\n    (event: FormEvent<HTMLSelectElement>) => {\n      const m = Number(event.currentTarget.value)\n      onSelect(zoneDateToUtc(setHours(selectedDate, m)))\n    },\n    [onSelect, selectedDate, zoneDateToUtc],\n  )\n\n  const handleTimeChange = useCallback(\n    (hours: number, mins: number) => {\n      onSelect(zoneDateToUtc(setHours(setMinutes(selectedDate, mins), hours)))\n    },\n    [onSelect, selectedDate, zoneDateToUtc],\n  )\n\n  const ref = useRef<HTMLDivElement | null>(null)\n  useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(forwardedRef, () => ref.current)\n\n  const focusCurrentWeekDay = useCallback(() => {\n    ref.current?.querySelector<HTMLElement>(`[data-focused=\"true\"]`)?.focus()\n  }, [ref])\n\n  const handleKeyDown = useCallback(\n    (event: KeyboardEvent<HTMLDivElement>) => {\n      if (!ARROW_KEYS.includes(event.key)) {\n        return\n      }\n      event.preventDefault()\n      if (event.currentTarget.hasAttribute('data-calendar-grid')) {\n        focusCurrentWeekDay()\n        return\n      }\n      if (event.key === 'ArrowUp') {\n        onFocusedDateChange(zoneDateToUtc(addDays(focusedDate, -7)))\n      }\n      if (event.key === 'ArrowDown') {\n        onFocusedDateChange(zoneDateToUtc(addDays(focusedDate, 7)))\n      }\n      if (event.key === 'ArrowLeft') {\n        onFocusedDateChange(zoneDateToUtc(addDays(focusedDate, -1)))\n      }\n      if (event.key === 'ArrowRight') {\n        onFocusedDateChange(zoneDateToUtc(addDays(focusedDate, 1)))\n      }\n      // set focus temporarily on this element to make sure focus is still inside the calendar-grid after re-render\n      ref.current?.querySelector<HTMLElement>('[data-preserve-focus]')?.focus()\n    },\n    [zoneDateToUtc, ref, focusCurrentWeekDay, onFocusedDateChange, focusedDate],\n  )\n\n  useEffect(() => {\n    focusCurrentWeekDay()\n  }, [focusCurrentWeekDay])\n\n  useEffect(() => {\n    const currentFocusInCalendarGrid = document.activeElement?.matches(\n      '[data-calendar-grid], [data-calendar-grid] [data-preserve-focus]',\n    )\n    if (\n      // Only move focus if it's currently in the calendar grid\n      currentFocusInCalendarGrid\n    ) {\n      focusCurrentWeekDay()\n    }\n  }, [ref, focusCurrentWeekDay, focusedDate])\n\n  const handleNowClick = useCallback(() => onSelect(new Date()), [onSelect])\n\n  return (\n    <Box data-ui=\"Calendar\" {...restProps} ref={ref}>\n      {/* Select date */}\n      <Box padding={2}>\n        {/* Select month and year */}\n        <Flex>\n          <Box flex={1}>\n            <CalendarMonthSelect\n              moveFocusedDate={moveFocusedDate}\n              onChange={handleFocusedMonthChange}\n              value={focusedDate?.getMonth()}\n            />\n          </Box>\n          <Box marginLeft={2}>\n            <CalendarYearSelect\n              moveFocusedDate={moveFocusedDate}\n              onChange={setFocusedDateYear}\n              value={focusedDate.getFullYear()}\n            />\n          </Box>\n        </Flex>\n\n        {/* Selected month (grid of days) */}\n        <Box\n          data-calendar-grid\n          onKeyDown={handleKeyDown}\n          marginTop={2}\n          overflow=\"hidden\"\n          tabIndex={0}\n        >\n          <CalendarMonth\n            date={focusedDate}\n            focused={focusedDate}\n            customValidation={customValidation}\n            onSelect={handleDateChange}\n            selected={selectedDate}\n          />\n          {PRESERVE_FOCUS_ELEMENT}\n        </Box>\n      </Box>\n\n      {/* Select time */}\n      {selectTime && (\n        <Box padding={2} style={{borderTop: '1px solid var(--card-border-color)'}}>\n          <Flex align=\"center\">\n            <Flex align=\"center\" flex={1}>\n              <Box>\n                <Select\n                  aria-label=\"Select hour\"\n                  value={selectedDate?.getHours()}\n                  onChange={handleHoursChange}\n                >\n                  {HOURS_24.map((h) => (\n                    <option key={h} value={h}>\n                      {`${h}`.padStart(2, '0')}\n                    </option>\n                  ))}\n                </Select>\n              </Box>\n\n              <Box paddingX={1}>\n                <Text>:</Text>\n              </Box>\n\n              <Box>\n                <Select\n                  aria-label=\"Select minutes\"\n                  value={selectedDate?.getMinutes()}\n                  onChange={handleMinutesChange}\n                >\n                  {range(0, 60, timeStep).map((m) => (\n                    <option key={m} value={m}>\n                      {`${m}`.padStart(2, '0')}\n                    </option>\n                  ))}\n                </Select>\n              </Box>\n            </Flex>\n\n            <Box marginLeft={2}>\n              <Button text=\"Set to current time\" mode=\"bleed\" onClick={handleNowClick} />\n            </Box>\n          </Flex>\n\n          {features.timePresets && (\n            <Flex direction=\"row\" justify=\"center\" align=\"center\" style={{marginTop: 5}}>\n              {DEFAULT_TIME_PRESETS.map(([hours, minutes]) => {\n                return (\n                  <CalendarTimePresetButton\n                    key={`${hours}-${minutes}`}\n                    hours={hours}\n                    minutes={minutes}\n                    onTimeChange={handleTimeChange}\n                    selectedDate={selectedDate}\n                  />\n                )\n              })}\n            </Flex>\n          )}\n        </Box>\n      )}\n    </Box>\n  )\n})\n\nfunction CalendarTimePresetButton(props: {\n  hours: number\n  minutes: number\n  onTimeChange: (hours: number, minutes: number) => void\n  selectedDate: Date\n}) {\n  const {hours, minutes, onTimeChange, selectedDate} = props\n  const formatted = formatTime(hours, minutes)\n\n  const handleClick = useCallback(() => {\n    onTimeChange(hours, minutes)\n  }, [hours, minutes, onTimeChange])\n\n  return (\n    <Button\n      text={formatted}\n      aria-label={`${formatted} on ${selectedDate.toDateString()}`}\n      mode=\"bleed\"\n      fontSize={1}\n      onClick={handleClick}\n    />\n  )\n}\n\nfunction CalendarMonthSelect(props: {\n  moveFocusedDate: (by: number) => void\n  onChange: (e: FormEvent<HTMLSelectElement>) => void\n  value?: number\n}) {\n  const {moveFocusedDate, onChange, value} = props\n\n  const handlePrevMonthClick = useCallback(() => moveFocusedDate(-1), [moveFocusedDate])\n\n  const handleNextMonthClick = useCallback(() => moveFocusedDate(1), [moveFocusedDate])\n\n  return (\n    <Flex flex={1}>\n      <Button\n        aria-label=\"Go to previous month\"\n        onClick={handlePrevMonthClick}\n        mode=\"bleed\"\n        icon={ChevronLeftIcon}\n        paddingX={2}\n        radius={0}\n      />\n      <Box flex={1}>\n        <Select radius={0} value={value} onChange={onChange}>\n          {MONTH_NAMES.map((m, i) => (\n            // eslint-disable-next-line react/no-array-index-key\n            <option key={i} value={i}>\n              {m}\n            </option>\n          ))}\n        </Select>\n      </Box>\n      <Button\n        aria-label=\"Go to next month\"\n        mode=\"bleed\"\n        icon={ChevronRightIcon}\n        onClick={handleNextMonthClick}\n        paddingX={2}\n        radius={0}\n      />\n    </Flex>\n  )\n}\n\nfunction CalendarYearSelect(props: {\n  moveFocusedDate: (by: number) => void\n  onChange: (year: number) => void\n  value?: number\n}) {\n  const {moveFocusedDate, onChange, value} = props\n\n  const handlePrevYearClick = useCallback(() => moveFocusedDate(-12), [moveFocusedDate])\n\n  const handleNextYearClick = useCallback(() => moveFocusedDate(12), [moveFocusedDate])\n\n  return (\n    <Flex>\n      <Button\n        aria-label=\"Previous year\"\n        onClick={handlePrevYearClick}\n        mode=\"bleed\"\n        icon={ChevronLeftIcon}\n        paddingX={2}\n        radius={0}\n      />\n      <YearInput value={value} onChange={onChange} radius={0} style={{width: 65}} />\n      <Button\n        aria-label=\"Next year\"\n        onClick={handleNextYearClick}\n        mode=\"bleed\"\n        icon={ChevronRightIcon}\n        paddingX={2}\n        radius={0}\n      />\n    </Flex>\n  )\n}\n","import {type ComponentProps, type ForwardedRef, forwardRef, useCallback, useState} from 'react'\n\nimport useTimeZone from '../../../hooks/useTimeZone'\nimport {Calendar} from './calendar/Calendar'\n\nexport const DatePicker = forwardRef(function DatePicker(\n  props: Omit<ComponentProps<'div'>, 'onChange'> & {\n    value?: Date\n    onChange: (nextDate: Date) => void\n    selectTime?: boolean\n    timeStep?: number\n    customValidation?: (selectedDate: Date) => boolean\n  },\n  ref: ForwardedRef<HTMLDivElement>,\n) {\n  const {utcToCurrentZoneDate} = useTimeZone()\n  const {value = new Date(), onChange, customValidation, ...rest} = props\n  const [focusedDate, setFocusedDay] = useState<Date>()\n\n  const handleSelect = useCallback(\n    (nextDate: Date) => {\n      onChange(nextDate)\n      setFocusedDay(undefined)\n    },\n    [onChange],\n  )\n\n  return (\n    <Calendar\n      {...rest}\n      ref={ref}\n      selectedDate={utcToCurrentZoneDate(value)}\n      onSelect={handleSelect}\n      focusedDate={utcToCurrentZoneDate(focusedDate || value)}\n      onFocusedDateChange={setFocusedDay}\n      customValidation={customValidation}\n    />\n  )\n})\n","import {CalendarIcon} from '@sanity/icons'\nimport {\n  Box,\n  // eslint-disable-next-line no-restricted-imports\n  Button,\n  LayerProvider,\n  useClickOutsideEvent,\n  usePortal,\n} from '@sanity/ui'\nimport {\n  type FocusEvent,\n  type ForwardedRef,\n  forwardRef,\n  type KeyboardEvent,\n  useCallback,\n  useImperativeHandle,\n  useRef,\n  useState,\n} from 'react'\nimport FocusLock from 'react-focus-lock'\n\nimport {Popover} from '../../../../../ui-components'\nimport {LazyTextInput} from '../../../../components/inputs/DateInputs/LazyTextInput'\nimport {DatePicker} from './DatePicker'\n\ntype Props = {\n  value?: Date\n  id?: string\n  readOnly?: boolean\n  selectTime?: boolean\n  timeStep?: number\n  customValidity?: string\n  placeholder?: string\n  onInputChange?: (event: FocusEvent<HTMLInputElement>) => void\n  inputValue?: string\n  onChange: (date: Date | null) => void\n  customValidation?: (selectedDate: Date) => boolean\n}\n\nexport const DateTimeInput = forwardRef(function DateTimeInput(\n  props: Props,\n  forwardedRef: ForwardedRef<HTMLInputElement>,\n) {\n  const {\n    value,\n    inputValue,\n    customValidation,\n    onInputChange,\n    onChange,\n    selectTime,\n    timeStep,\n    ...rest\n  } = props\n\n  const popoverRef = useRef<HTMLDivElement | null>(null)\n\n  const inputRef = useRef<HTMLInputElement | null>(null)\n  const buttonRef = useRef(null)\n\n  useImperativeHandle<HTMLInputElement | null, HTMLInputElement | null>(\n    forwardedRef,\n    () => inputRef.current,\n  )\n\n  const [isPickerOpen, setPickerOpen] = useState(false)\n\n  const portal = usePortal()\n\n  useClickOutsideEvent(\n    () => setPickerOpen(false),\n    () => [popoverRef.current],\n  )\n\n  const handleDeactivation = useCallback(() => {\n    inputRef.current?.focus()\n    inputRef.current?.select()\n  }, [inputRef])\n\n  const handleKeyUp = useCallback((e: KeyboardEvent) => {\n    if (e.key === 'Escape') {\n      setPickerOpen(false)\n    }\n  }, [])\n\n  const handleClick = useCallback(() => setPickerOpen(true), [])\n\n  const suffix = (\n    <Box style={{padding: '5px'}}>\n      <Button\n        ref={buttonRef}\n        icon={CalendarIcon}\n        mode=\"bleed\"\n        padding={2}\n        onClick={handleClick}\n        style={{display: 'block'}}\n        data-testid=\"select-date-button\"\n      />\n    </Box>\n  )\n\n  return (\n    <LazyTextInput\n      data-testid=\"date-input\"\n      ref={inputRef}\n      {...rest}\n      value={inputValue}\n      onChange={onInputChange}\n      suffix={\n        isPickerOpen ? (\n          // Note: we're conditionally inserting the popover here due to an\n          // issue with popovers rendering incorrectly on subsequent renders\n          // see https://github.com/sanity-io/design/issues/519\n          <LayerProvider zOffset={1000}>\n            <Popover\n              constrainSize\n              content={\n                <Box overflow=\"auto\">\n                  <FocusLock onDeactivation={handleDeactivation}>\n                    <DatePicker\n                      selectTime={selectTime}\n                      timeStep={timeStep}\n                      onKeyUp={handleKeyUp}\n                      value={value}\n                      onChange={onChange}\n                      customValidation={customValidation}\n                    />\n                  </FocusLock>\n                </Box>\n              }\n              data-testid=\"date-input-dialog\"\n              fallbackPlacements={['bottom', 'bottom-start', 'top-end', 'top', 'top-start']}\n              floatingBoundary={portal.element}\n              open\n              placement=\"bottom-end\"\n              portal\n              radius={2}\n              ref={popoverRef}\n            >\n              {suffix}\n            </Popover>\n          </LayerProvider>\n        ) : (\n          suffix\n        )\n      }\n    />\n  )\n})\n","/* eslint-disable no-nested-ternary */\nimport {TextInput} from '@sanity/ui'\nimport {\n  type FocusEvent,\n  type ForwardedRef,\n  forwardRef,\n  useCallback,\n  useEffect,\n  useId,\n  useImperativeHandle,\n  useMemo,\n  useRef,\n  useState,\n} from 'react'\n\nimport {FormField} from '../../../form/components/formField'\nimport useTimeZone from '../../hooks/useTimeZone'\nimport {DateTimeInput} from './base/DateTimeInput'\nimport {type CommonProps, type ParseResult} from './types'\n\ntype Props = CommonProps & {\n  title: string\n  description?: string\n  parseInputValue: (inputValue: string) => ParseResult\n  formatInputValue: (date: Date) => string\n  deserialize: (value: string) => ParseResult\n  serialize: (date: Date) => string\n  onChange: (nextDate: string | null) => void\n  selectTime?: boolean\n  placeholder?: string\n  timeStep?: number\n  customValidation?: (selectedDate: Date) => boolean\n}\n\nexport const CommonDateTimeInput = forwardRef(function CommonDateTimeInput(\n  props: Props,\n  forwardedRef: ForwardedRef<HTMLInputElement>,\n) {\n  const {\n    value,\n    markers,\n    title,\n    description,\n    placeholder,\n    parseInputValue,\n    formatInputValue,\n    deserialize,\n    serialize,\n    selectTime,\n    timeStep,\n    readOnly,\n    level,\n    onChange,\n    customValidation,\n    ...rest\n  } = props\n\n  const [localValue, setLocalValue] = useState<string | null>(null)\n\n  useEffect(() => {\n    setLocalValue(null)\n  }, [value])\n\n  const {zoneDateToUtc} = useTimeZone()\n  const undefinedValue = typeof value === 'undefined'\n  // Text input changes ('wall time')\n  const handleDatePickerInputChange = useCallback(\n    (event: FocusEvent<HTMLInputElement>) => {\n      const nextInputValue = event.currentTarget.value\n      const result = nextInputValue === '' ? null : parseInputValue(nextInputValue)\n\n      if (result === null) {\n        onChange(null)\n\n        // If the field value is undefined, and we are clearing the invalid value\n        // the above useEffect won't trigger, so we do some extra clean up here\n        if (undefinedValue && localValue) {\n          setLocalValue(null)\n        }\n      } else if (result.isValid) {\n        // Convert zone time to UTC\n        onChange(serialize(zoneDateToUtc(result.date)))\n      } else {\n        setLocalValue(nextInputValue)\n      }\n    },\n    [undefinedValue, zoneDateToUtc, localValue, serialize, onChange, parseInputValue],\n  )\n\n  // Calendar changes (UTC)\n  const handleDatePickerChange = useCallback(\n    (nextDate: Date | null) => {\n      onChange(nextDate ? serialize(nextDate) : null)\n    },\n    [serialize, onChange],\n  )\n\n  const inputRef = useRef<HTMLInputElement | null>(null)\n\n  useImperativeHandle<HTMLInputElement | null, HTMLInputElement | null>(\n    forwardedRef,\n    () => inputRef.current,\n  )\n\n  const id = useId()\n\n  const parseResult = localValue ? parseInputValue(localValue) : value ? deserialize(value) : null\n\n  const inputValue = localValue\n    ? localValue\n    : parseResult?.isValid\n      ? formatInputValue(parseResult.date)\n      : value\n\n  const nodeValidations = useMemo(\n    () =>\n      markers.map((m) => ({\n        level: m.level,\n        path: m.path,\n        message: m.message ?? m.item?.message,\n      })),\n    [markers],\n  )\n  return (\n    <FormField\n      validation={\n        parseResult?.error\n          ? [\n              ...nodeValidations,\n              {\n                level: 'error',\n                message: parseResult.error,\n                path: [],\n              }, // casting to marker to avoid having to implement cloneWithMessage on item\n            ]\n          : nodeValidations\n      }\n      title={title}\n      level={level}\n      description={description}\n      inputId={id}\n    >\n      {readOnly ? (\n        <TextInput value={inputValue} readOnly />\n      ) : (\n        <DateTimeInput\n          {...rest}\n          id={id}\n          selectTime={selectTime}\n          timeStep={timeStep}\n          placeholder={placeholder || `e.g. ${formatInputValue(new Date())}`}\n          ref={inputRef}\n          value={parseResult?.date}\n          inputValue={inputValue || ''}\n          readOnly={Boolean(readOnly)}\n          onInputChange={handleDatePickerInputChange}\n          onChange={handleDatePickerChange}\n          customValidity={parseResult?.error}\n          customValidation={customValidation}\n        />\n      )}\n    </FormField>\n  )\n})\n","export function isValidDate(date: Date): boolean {\n  return date instanceof Date && !isNaN(date.valueOf())\n}\n","import {getMinutes, isValid, parse, parseISO, setMinutes} from 'date-fns'\nimport {formatInTimeZone} from 'date-fns-tz'\nimport {type ForwardedRef, forwardRef, useCallback} from 'react'\n\nimport {useWorkspace} from '../../../studio/workspace'\nimport useTimeZone from '../../hooks/useTimeZone'\nimport {CommonDateTimeInput} from './CommonDateTimeInput'\nimport {type CommonProps, type ParseResult} from './types'\nimport {isValidDate} from './utils'\n\ntype ParsedOptions = {\n  calendarTodayLabel: string\n  customValidation: (selectedDate: Date) => boolean\n  customValidationMessage?: string\n  timeStep: number\n}\ntype SchemaOptions = {\n  calendarTodayLabel?: string\n  customValidation?: (selectedDate: Date) => boolean\n  customValidationMessage?: string\n  timeStep?: number\n}\nexport type Props = CommonProps & {\n  onChange: (date: string | null) => void\n  type: {\n    name: string\n    title: string\n    description?: string\n    options?: SchemaOptions\n    placeholder?: string\n  }\n}\n\nfunction parseOptions(options: SchemaOptions = {}): ParsedOptions {\n  return {\n    customValidation:\n      options.customValidation ||\n      function () {\n        return true\n      },\n    customValidationMessage: options.customValidationMessage || 'Invalid date.',\n    calendarTodayLabel: options.calendarTodayLabel || 'Today',\n    timeStep: ('timeStep' in options && Number(options.timeStep)) || 1,\n  }\n}\n\nfunction serialize(date: Date) {\n  return date.toISOString()\n}\nfunction deserialize(isoString: string): ParseResult {\n  const deserialized = new Date(isoString)\n  if (isValidDate(deserialized)) {\n    return {isValid: true, date: deserialized}\n  }\n  return {isValid: false, error: `Invalid date value: \"${isoString}\"`}\n}\n\n// enforceTimeStep takes a dateString and datetime schema options and enforces the time\n// to be within the configured timeStep\nfunction enforceTimeStep(dateString: string, timeStep: number) {\n  if (!timeStep || timeStep === 1) {\n    return dateString\n  }\n\n  const date = parseISO(dateString)\n  const minutes = getMinutes(date)\n  const leftOver = minutes % timeStep\n  if (leftOver !== 0) {\n    return serialize(setMinutes(date, minutes - leftOver))\n  }\n\n  return serialize(date)\n}\n\nexport const DateTimeInput = forwardRef(function DateTimeInput(\n  props: Props,\n  forwardedRef: ForwardedRef<HTMLInputElement>,\n) {\n  const {type, onChange, ...rest} = props\n  const {title, description, placeholder} = type\n\n  const {scheduledPublishing} = useWorkspace()\n  const inputDateTimeFormat = scheduledPublishing.inputDateTimeFormat\n\n  const {getCurrentZoneDate, timeZone} = useTimeZone()\n\n  const {customValidation, customValidationMessage, timeStep} = parseOptions(type.options)\n\n  // Returns date in UTC string\n  const handleChange = useCallback(\n    (nextDate: string | null) => {\n      let date = nextDate\n      if (date !== null && timeStep > 1) {\n        date = enforceTimeStep(date, timeStep)\n      }\n\n      onChange(date)\n    },\n    [onChange, timeStep],\n  )\n\n  const formatInputValue = useCallback(\n    (date: Date) => formatInTimeZone(date, timeZone.name, `${inputDateTimeFormat}`),\n    [inputDateTimeFormat, timeZone.name],\n  )\n\n  const parseInputValue = useCallback(\n    (inputValue: string) => {\n      const parsed = parse(inputValue, `${inputDateTimeFormat}`, getCurrentZoneDate())\n\n      // Check is value is a valid date\n      if (!isValid(parsed)) {\n        return {\n          isValid: false,\n          error: `Invalid date. Must be in the format \"${inputDateTimeFormat}\"`,\n        } as ParseResult\n      }\n\n      // Check if value adheres to custom validation rules\n      if (!customValidation(parsed)) {\n        return {\n          isValid: false,\n          error: customValidationMessage,\n        } as ParseResult\n      }\n\n      return {\n        isValid: true,\n        date: parsed,\n      } as ParseResult\n    },\n    [customValidation, customValidationMessage, getCurrentZoneDate, inputDateTimeFormat],\n  )\n\n  return (\n    <CommonDateTimeInput\n      {...rest}\n      onChange={handleChange}\n      ref={forwardedRef}\n      selectTime\n      timeStep={timeStep}\n      title={title}\n      description={description}\n      placeholder={placeholder}\n      serialize={serialize}\n      deserialize={deserialize}\n      formatInputValue={formatInputValue}\n      customValidation={customValidation}\n      parseInputValue={parseInputValue}\n    />\n  )\n})\n","import {Card, Stack} from '@sanity/ui'\nimport {useState} from 'react'\n\nimport useTimeZone from '../../hooks/useTimeZone'\nimport {type ScheduleFormData} from '../../types'\nimport {DateTimeInput} from '../dateInputs'\n\ninterface Props {\n  onChange?: (formData: ScheduleFormData) => void\n  value?: ScheduleFormData | null\n}\n\nconst ScheduleForm = (props: Props) => {\n  const {onChange, value} = props\n\n  const {getCurrentZoneDate} = useTimeZone()\n\n  // Date input is stored locally to handle behaviour of the studio's `<LazyTextInput />` component.\n  // If we don't keep this local state (and only rely on the canonical value of `ScheduleFormData`),\n  // you'll see an unsightly flash when text inputs are blurred / lose focus, as `<LazyTextInput />`\n  // clears its internal value before it's had a chance to re-render as a result of its own props changing.\n  const [inputValue, setInputValue] = useState<string>()\n\n  const handleChange = (date: string | null) => {\n    if (date && onChange) {\n      onChange({date})\n      setInputValue(date)\n    }\n  }\n\n  // Only allow dates in the future (`selectedDate` is UTC)\n  const handleCustomValidation = (selectedDate: Date): boolean => {\n    return selectedDate > getCurrentZoneDate()\n  }\n\n  return (\n    <Stack space={4}>\n      <Card>\n        <DateTimeInput\n          level={0}\n          markers={[]}\n          onChange={handleChange}\n          type={{\n            name: 'date',\n            options: {\n              customValidation: handleCustomValidation,\n              customValidationMessage: 'Date cannot be in the past.',\n            },\n            title: 'Date and time',\n          }}\n          value={inputValue === undefined ? value?.date : inputValue}\n        />\n      </Card>\n    </Stack>\n  )\n}\n\nexport default ScheduleForm\n","import {Stack} from '@sanity/ui'\nimport {type PropsWithChildren} from 'react'\n\nimport {type ScheduleFormData} from '../../types'\nimport ScheduleForm from './ScheduleForm'\n\ninterface Props {\n  onChange?: (formData: ScheduleFormData) => void\n  value?: ScheduleFormData | null\n}\n\n/**\n * Form for editing a schedule for a document when scheduled publishing is enabled.\n * @internal\n */\nexport function EditScheduleForm(props: PropsWithChildren<Props>) {\n  const {onChange, value} = props\n\n  return (\n    <Stack space={4}>\n      {props.children}\n      <ScheduleForm onChange={onChange} value={value} />\n    </Stack>\n  )\n}\n","import {Box, Flex} from '@sanity/ui'\n\nimport ButtonTimeZone from '../timeZoneButton/TimeZoneButton'\nimport ButtonTimeZoneElementQuery from '../timeZoneButton/TimeZoneButtonElementQuery'\n\ninterface Props {\n  title: string\n}\n\nconst DialogHeader = (props: Props) => {\n  const {title} = props\n  return (\n    <ButtonTimeZoneElementQuery>\n      <Flex align=\"center\">\n        {title}\n        {/*\n        HACK: Sanity UI will attempt to focus the first 'focusable' descendant of any dialog.\n        Typically this is fine, but since our first focusable element is a button with a tooltip, this\n        default behaviour causes the tooltip to appear whenever the dialog is opened, which we don't want!\n\n        To get around this, we include a pseudo-hidden input to ensure our tooltip-enabled button remains\n        unfocused on initial mount.\n        */}\n        <input style={{opacity: 0, position: 'absolute', width: 0}} tabIndex={-1} type=\"button\" />\n        <Box marginLeft={2} style={{marginTop: '-1em', marginBottom: '-1em'}}>\n          <ButtonTimeZone useElementQueries />\n        </Box>\n      </Flex>\n    </ButtonTimeZoneElementQuery>\n  )\n}\n\nexport default DialogHeader\n","import {useCallback} from 'react'\n\nimport {Dialog} from '../../../../ui-components'\nimport useScheduleForm from '../../hooks/useScheduleForm'\nimport useScheduleOperation from '../../hooks/useScheduleOperation'\nimport {type Schedule} from '../../types'\nimport {EditScheduleForm} from '../editScheduleForm/EditScheduleForm'\nimport DialogHeader from './DialogHeader'\n\nexport interface DialogScheduleEditProps {\n  onClose: () => void\n  schedule: Schedule\n}\n\nconst DialogScheduleEdit = (props: DialogScheduleEditProps) => {\n  const {onClose, schedule} = props\n\n  const {updateSchedule} = useScheduleOperation()\n  const {formData, isDirty, onFormChange} = useScheduleForm(schedule)\n\n  // Callbacks\n  const handleScheduleUpdate = useCallback(() => {\n    if (!formData?.date) {\n      return\n    }\n    // Update schedule then close self\n    updateSchedule({\n      date: formData.date,\n      scheduleId: schedule.id,\n    }).then(onClose)\n  }, [schedule.id, updateSchedule, onClose, formData?.date])\n\n  return (\n    <Dialog\n      footer={{\n        confirmButton: {\n          text: 'Update',\n          disabled: !isDirty,\n          onClick: handleScheduleUpdate,\n        },\n      }}\n      header={<DialogHeader title=\"Edit schedule\" />}\n      id=\"time-zone\"\n      onClose={onClose}\n      width={1}\n    >\n      <EditScheduleForm onChange={onFormChange} value={formData} />\n    </Dialog>\n  )\n}\n\nexport default DialogScheduleEdit\n","import DialogScheduleEdit from '../components/dialogs/DialogScheduleEdit'\nimport {type Schedule} from '../types'\nimport {useDialogVisible} from './useDialogVisibile'\n\nfunction useDialogScheduleEdit(schedule: Schedule) {\n  const {visible, show, hide} = useDialogVisible()\n\n  const dialogProps = {\n    onClose: hide,\n    schedule,\n    visible,\n  }\n\n  return {\n    DialogScheduleEdit: visible ? DialogScheduleEdit : null,\n    dialogProps,\n    dialogScheduleEditShow: show,\n    hide,\n  }\n}\n\nexport default useDialogScheduleEdit\n","import {type CurrentUser} from '@sanity/types'\nimport {Box, type SelectableTone} from '@sanity/ui'\nimport {type ComponentType, type ReactNode} from 'react'\n\nimport {MenuItem, Tooltip} from '../../../../ui-components'\nimport {\n  InsufficientPermissionsMessage,\n  type InsufficientPermissionsMessageProps,\n} from '../../../components/InsufficientPermissionsMessage'\n\ninterface Props {\n  currentUser?: CurrentUser\n  hasPermission?: boolean\n  icon: ComponentType | ReactNode\n  onClick: () => void\n  permissionsOperationLabel: InsufficientPermissionsMessageProps['context']\n  title: string\n  tone?: SelectableTone\n  disabled?: boolean\n}\n\nconst MenuItemWithPermissionsTooltip = (props: Props) => {\n  const {\n    currentUser,\n    hasPermission,\n    icon,\n    onClick,\n    permissionsOperationLabel,\n    title,\n    tone,\n    disabled,\n  } = props\n  return (\n    <Tooltip\n      content={\n        <Box paddingX={2} paddingY={1}>\n          <InsufficientPermissionsMessage\n            currentUser={currentUser}\n            context={permissionsOperationLabel}\n          />\n        </Box>\n      }\n      disabled={hasPermission}\n      placement=\"left\"\n      portal\n    >\n      {/* Wrapper element to allow disabled menu items to trigger tooltips */}\n      <div>\n        <MenuItem\n          disabled={!hasPermission || disabled}\n          icon={icon}\n          onClick={onClick}\n          text={title}\n          tone={tone}\n        />\n      </div>\n    </Tooltip>\n  )\n}\n\nexport default MenuItemWithPermissionsTooltip\n","import {CalendarIcon, CheckmarkCircleIcon, PublishIcon, TrashIcon} from '@sanity/icons'\nimport {type SchemaType} from '@sanity/types'\n\nimport {useCurrentUser, useDocumentPairPermissions} from '../../../store'\nimport useScheduleOperation from '../../hooks/useScheduleOperation'\nimport {useScheduledPublishingEnabled} from '../../tool/contexts/ScheduledPublishingEnabledProvider'\nimport {type Schedule} from '../../types'\nimport {getScheduledDocument} from '../../utils/paneItemHelpers'\nimport MenuItemWithPermissionsTooltip from './MenuItemWithPermissionsTooltip'\n\ninterface Props {\n  actions?: {\n    clear?: boolean\n    delete?: boolean\n    edit?: boolean\n    execute?: boolean\n  }\n  onDelete?: () => void\n  onEdit?: () => void\n  schedule: Schedule\n  schemaType: SchemaType\n}\n\nconst ContextMenuItems = (props: Props) => {\n  const {actions, onDelete, onEdit, schedule, schemaType} = props\n  const {mode} = useScheduledPublishingEnabled()\n  const firstDocument = getScheduledDocument(schedule)\n\n  const currentUser = useCurrentUser()\n  const [permissions, isPermissionsLoading] = useDocumentPairPermissions({\n    id: firstDocument.documentId,\n    type: schemaType?.name,\n    permission: 'publish',\n  })\n  const {deleteSchedule, publishSchedule} = useScheduleOperation()\n\n  const insufficientPermissions = !isPermissionsLoading && !permissions?.granted\n\n  // Callbacks\n  const handleEdit = () => {\n    onEdit?.()\n  }\n\n  const handleDelete = () => {\n    deleteSchedule({schedule}).then(() => onDelete?.())\n  }\n\n  const handleExecute = () => {\n    publishSchedule({schedule})\n  }\n\n  if (!currentUser) {\n    return null\n  }\n\n  return (\n    <>\n      {actions?.edit && (\n        <MenuItemWithPermissionsTooltip\n          currentUser={currentUser}\n          hasPermission={!insufficientPermissions}\n          icon={CalendarIcon}\n          onClick={handleEdit}\n          permissionsOperationLabel=\"edit-schedules\"\n          title=\"Edit schedule\"\n          disabled={mode === 'upsell'}\n        />\n      )}\n      {actions?.execute && (\n        <MenuItemWithPermissionsTooltip\n          currentUser={currentUser}\n          hasPermission={!insufficientPermissions}\n          icon={PublishIcon}\n          onClick={handleExecute}\n          permissionsOperationLabel=\"execute-schedules\"\n          title=\"Publish now\"\n          disabled={mode === 'upsell'}\n        />\n      )}\n      {actions?.delete && (\n        <MenuItemWithPermissionsTooltip\n          currentUser={currentUser}\n          hasPermission={!insufficientPermissions}\n          icon={TrashIcon}\n          onClick={handleDelete}\n          permissionsOperationLabel=\"delete-schedules\"\n          title=\"Delete schedule\"\n          tone=\"critical\"\n          disabled={mode === 'upsell'}\n        />\n      )}\n      {actions?.clear && (\n        <MenuItemWithPermissionsTooltip\n          currentUser={currentUser}\n          hasPermission={!insufficientPermissions}\n          icon={CheckmarkCircleIcon}\n          onClick={handleDelete}\n          permissionsOperationLabel=\"delete-schedules\"\n          title=\"Clear completed schedule\"\n          disabled={mode === 'upsell'}\n        />\n      )}\n    </>\n  )\n}\n\nexport default ContextMenuItems\n","import {type SchemaType} from '@sanity/types'\nimport {Menu} from '@sanity/ui'\n\nimport {MenuButton} from '../../../../ui-components'\nimport {ContextMenuButton} from '../../../components/contextMenuButton'\nimport {type Schedule} from '../../types'\nimport ContextMenuItems from './ContextMenuItems'\n\ninterface Props {\n  actions?: {\n    clear?: boolean\n    delete?: boolean\n    edit?: boolean\n    execute?: boolean\n  }\n  onDelete?: () => void\n  onEdit?: () => void\n  schedule: Schedule\n  schemaType: SchemaType\n}\n\nexport const ScheduleContextMenu = (props: Props) => {\n  const {actions, onDelete, onEdit, schedule, schemaType} = props\n\n  return (\n    <MenuButton\n      button={<ContextMenuButton />}\n      id=\"contextMenu\"\n      menu={\n        <Menu>\n          <ContextMenuItems\n            actions={actions}\n            onDelete={onDelete}\n            onEdit={onEdit}\n            schedule={schedule}\n            schemaType={schemaType}\n          />\n        </Menu>\n      }\n      placement=\"left\"\n      popover={{portal: true, tone: 'default'}}\n    />\n  )\n}\n","import {\n  isValidationErrorMarker,\n  isValidationWarningMarker,\n  type ValidationMarker,\n} from '@sanity/types'\nimport {type ButtonTone} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nimport {type ValidationStatus} from '../types'\n\nexport const EMPTY_VALIDATION_STATUS: ValidationStatus = {\n  validation: [],\n  isValidating: false,\n}\n\ninterface ValidationState {\n  markers: ValidationMarker[]\n  validationTone: ButtonTone\n  hasError: boolean\n  hasWarning: boolean\n}\n\nexport function getValidationState(\n  validationMarkers: ValidationMarker[] = EMPTY_VALIDATION_STATUS.validation,\n): ValidationState {\n  const hasError = validationMarkers.filter(isValidationErrorMarker).length > 0\n  const hasWarning = validationMarkers.filter(isValidationWarningMarker).length > 0\n\n  let validationTone: ButtonTone = 'default'\n  if (hasWarning) {\n    validationTone = 'default' //not using 'caution' for now\n  }\n  if (hasError) {\n    validationTone = 'critical'\n  }\n\n  return {\n    markers: validationMarkers,\n    validationTone,\n    hasError,\n    hasWarning,\n  }\n}\n\nexport function useValidationState(markers: ValidationMarker[]): ValidationState {\n  return useMemo(() => getValidationState(markers), [markers])\n}\n","import {useEffect, useState} from 'react'\n\nimport {useValidationStatus} from '../../../hooks/useValidationStatus'\nimport {useScheduleSchemaType} from '../../hooks/useSchemaType'\nimport {type Schedule, type ValidationStatus} from '../../types'\nimport {getScheduledDocumentId} from '../../utils/paneItemHelpers'\n\ninterface Props {\n  schedule: Schedule\n  updateValidation: (status: ValidationStatus) => void\n}\n\n// Duration to wait before validating (after this component has mounted)\nconst VALIDATION_DELAY_MS = 1500\n\n/**\n * useValidationStatus requires a published id, and we dont always have that\n *\n * This a boilerplate wrapper component around it,\n * so we conditionally call back with updated status whenver it is possible.\n * */\nexport function ValidateScheduleDoc({schedule, updateValidation}: Props) {\n  const schemaType = useScheduleSchemaType(schedule)\n  const id = getScheduledDocumentId(schedule)\n\n  if (!id || !schemaType?.name) {\n    return null\n  }\n  return (\n    <DelayedValidationRunner\n      id={id}\n      schemaName={schemaType.name}\n      updateValidation={updateValidation}\n    />\n  )\n}\n\ninterface ValidationRunnerProps {\n  id: string\n  schemaName: string\n  updateValidation: (status: ValidationStatus) => void\n}\n\nfunction DelayedValidationRunner({id, schemaName, updateValidation}: ValidationRunnerProps) {\n  const [ready, setReady] = useState(false)\n\n  useEffect(() => {\n    const timeout = setTimeout(() => {\n      setReady(true)\n    }, VALIDATION_DELAY_MS)\n\n    return () => {\n      clearTimeout(timeout)\n    }\n  }, [])\n\n  if (!ready) {\n    return null\n  }\n\n  return <ValidationRunner id={id} schemaName={schemaName} updateValidation={updateValidation} />\n}\n\nfunction ValidationRunner({id, schemaName, updateValidation}: ValidationRunnerProps) {\n  const validationStatus = useValidationStatus(id, schemaName)\n\n  useEffect(() => {\n    if (!validationStatus.isValidating) {\n      updateValidation(validationStatus)\n    }\n  }, [updateValidation, validationStatus])\n\n  return null\n}\n","import {useMemo} from 'react'\n\nexport function usePublishedId<T extends string | undefined>(id: T): T {\n  return useMemo(() => (id ? id.replaceAll('drafts.', '') : undefined) as T, [id])\n}\n","import {ErrorOutlineIcon, InfoOutlineIcon, WarningOutlineIcon} from '@sanity/icons'\nimport {type Path, type ValidationMarker} from '@sanity/types'\n// eslint-disable-next-line no-restricted-imports\nimport {Box, type ButtonTone, Flex, MenuItem, Stack, Text} from '@sanity/ui'\nimport {useCallback} from 'react'\nimport {styled} from 'styled-components'\n\nconst StyledText = styled(Text)`\n  white-space: initial;\n`\n\nconst MENU_ITEM_TONES: Record<'error' | 'warning' | 'info', ButtonTone> = {\n  error: 'critical',\n  warning: 'caution',\n  info: 'primary',\n}\n\n/**\n * @internal\n */\nexport interface ValidationListItemProps {\n  marker: ValidationMarker\n  onClick?: (path?: Path) => void\n  path: string\n  truncate?: boolean\n}\n\n/**\n * @internal\n */\nexport function ValidationListItem(props: ValidationListItemProps) {\n  const {marker, onClick, path, truncate} = props\n\n  const handleClick = useCallback(() => {\n    if (onClick) {\n      onClick(marker.path)\n    }\n  }, [marker.path, onClick])\n\n  const menuItemTone = MENU_ITEM_TONES[marker?.level] || undefined\n  const message = marker.message ?? marker.item?.message\n  const children = (\n    <Flex>\n      <Box>\n        <Text size={1}>\n          {marker.level === 'error' && <ErrorOutlineIcon />}\n          {marker.level === 'warning' && <WarningOutlineIcon />}\n          {marker.level === 'info' && <InfoOutlineIcon />}\n        </Text>\n      </Box>\n\n      <Stack space={2} flex={1} paddingLeft={3}>\n        {path && (\n          <StyledText size={1} weight=\"semibold\">\n            {path}\n          </StyledText>\n        )}\n        {message && (\n          <StyledText muted size={1} textOverflow={truncate ? 'ellipsis' : undefined}>\n            {message}\n          </StyledText>\n        )}\n      </Stack>\n    </Flex>\n  )\n  return (\n    <MenuItem padding={1} onClick={handleClick} radius={2} tone={menuItemTone}>\n      <Box padding={2}>{children}</Box>\n    </MenuItem>\n  )\n}\n","import {\n  isValidationErrorMarker,\n  isValidationInfoMarker,\n  isValidationWarningMarker,\n  type ObjectSchemaType,\n  type Path,\n  type ValidationMarker,\n} from '@sanity/types'\nimport {Container} from '@sanity/ui'\nimport {useCallback} from 'react'\n\nimport {ValidationListItem} from './ValidationListItem'\n\n/** @internal */\nexport interface ValidationListProps {\n  documentType?: ObjectSchemaType\n  kind?: 'simple'\n  validation: ValidationMarker[]\n  onFocus?: (path: Path) => void\n  onClose?: () => void\n  truncate?: boolean\n}\n\n/** @internal */\nexport function ValidationList(props: ValidationListProps) {\n  const {documentType, kind, validation, onFocus, onClose, truncate} = props\n  const errors = validation.filter(isValidationErrorMarker)\n  const warnings = validation.filter(isValidationWarningMarker)\n  const info = validation.filter(isValidationInfoMarker)\n\n  const handleClick = useCallback(\n    (path: Path = []) => {\n      if (onFocus) onFocus(path)\n      if (onClose) onClose()\n    },\n    [onFocus, onClose],\n  )\n\n  const resolvePathTitle = (path: Path) => {\n    const fields = documentType && documentType.fields\n    const field = fields && fields.find((curr) => curr.name === path[0])\n\n    return (field && field.type.title) || ''\n  }\n\n  const hasErrors = errors.length > 0\n  const hasWarnings = warnings.length > 0\n  const hasInfo = info.length > 0\n\n  if (!hasErrors && !hasWarnings && !hasInfo) {\n    return null\n  }\n\n  return (\n    <Container width={0} data-kind={kind} data-testid=\"validation-list\">\n      {hasErrors &&\n        errors.map((_error, i) => (\n          <ValidationListItem\n            // eslint-disable-next-line react/no-array-index-key\n            key={i}\n            truncate={truncate}\n            path={resolvePathTitle(_error.path)}\n            marker={_error}\n            onClick={handleClick}\n          />\n        ))}\n      {hasWarnings &&\n        warnings.map((_warning, i) => (\n          <ValidationListItem\n            // eslint-disable-next-line react/no-array-index-key\n            key={i}\n            truncate={truncate}\n            path={resolvePathTitle(_warning.path)}\n            marker={_warning}\n            onClick={handleClick}\n          />\n        ))}\n      {hasInfo &&\n        info.map((_info, i) => (\n          <ValidationListItem\n            // eslint-disable-next-line react/no-array-index-key\n            key={i}\n            truncate={truncate}\n            path={resolvePathTitle(_info.path)}\n            marker={_info}\n            onClick={handleClick}\n          />\n        ))}\n    </Container>\n  )\n}\n","import {ErrorOutlineIcon, WarningOutlineIcon} from '@sanity/icons'\nimport {\n  type ObjectSchemaType,\n  type Path,\n  type SchemaType,\n  type ValidationMarker,\n} from '@sanity/types'\nimport {type CardTone, Container, Menu, Stack} from '@sanity/ui'\nimport * as PathUtils from '@sanity/util/paths'\nimport {type ReactNode, useCallback, useId} from 'react'\nimport {useRouter} from 'sanity/router'\n\nimport {Button, MenuButton} from '../../../../ui-components'\nimport {usePublishedId} from '../../hooks/usePublishedId'\nimport {useValidationState} from '../../utils/validationUtils'\nimport {ValidationList} from './ValidationList'\n\ninterface ValidationProps {\n  documentId?: string\n  markers: ValidationMarker[]\n  type?: SchemaType\n  menuHeader?: ReactNode\n}\n\nconst POPOVER_PROPS = {\n  portal: true,\n  constrainSize: true,\n  preventOverflow: true,\n  tone: 'default' as CardTone,\n  width: 0,\n  placement: 'bottom-end',\n} as const\n\nexport function ValidationInfo(props: ValidationProps) {\n  const {type, markers, menuHeader, documentId} = props\n  const router = useRouter()\n  const {hasError, hasWarning} = useValidationState(markers)\n  // use visibility so we can occupy the space equally for all states\n  const visibility = hasError || hasWarning ? 'visible' : 'hidden'\n  const id = useId() || ''\n  const publishId = usePublishedId(documentId)\n\n  const onFocus = useCallback(\n    (path: Path) => {\n      if (!publishId) {\n        return\n      }\n      router.navigateIntent('edit', {\n        id: publishId,\n        path: encodeURIComponent(PathUtils.toString(path)),\n      })\n    },\n    [router, publishId],\n  )\n\n  return (\n    <MenuButton\n      id={id || ''}\n      button={\n        <Button\n          tooltipProps={{content: 'Show validation issues'}}\n          mode=\"bleed\"\n          data-testid=\"schedule-validation-list-button\"\n          icon={hasError ? ErrorOutlineIcon : WarningOutlineIcon}\n          style={{visibility}}\n          tone={hasError ? 'critical' : 'default'}\n        />\n      }\n      menu={\n        <Menu padding={1}>\n          <Container width={0}>\n            <Stack space={1}>\n              {menuHeader ?? null}\n              <ValidationList\n                documentType={type as ObjectSchemaType}\n                validation={markers}\n                onFocus={onFocus}\n              />\n            </Stack>\n          </Container>\n        </Menu>\n      }\n      popover={POPOVER_PROPS}\n    />\n  )\n}\n","import {Text} from '@sanity/ui'\nimport {formatDistance} from 'date-fns'\n\nimport {Tooltip} from '../../../../../ui-components'\nimport {DATE_FORMAT} from '../../../constants'\nimport useTimeZone from '../../../hooks/useTimeZone'\n\ninterface Props {\n  date: Date // local date in UTC\n  useElementQueries?: boolean\n}\n\n/**\n * If `useElementQueries` is enabled, dates will be conditionally toggled at different element\n * breakpoints, provided this `<DateWithTooltip>` is wrapped in a `<DateElementQuery>` component.\n */\nconst DateWithTooltip = (props: Props) => {\n  const {date, useElementQueries} = props\n\n  const {formatDateTz} = useTimeZone()\n\n  // Get distance between both dates\n  const distance = formatDistance(date, new Date(), {\n    addSuffix: true,\n  })\n\n  const dateTimeLarge = formatDateTz({date, format: DATE_FORMAT.LARGE})\n  const dateTimeMedium = formatDateTz({date, format: DATE_FORMAT.MEDIUM})\n  const dateTimeSmall = formatDateTz({date, format: DATE_FORMAT.SMALL})\n\n  return (\n    <Text size={1} textOverflow=\"ellipsis\">\n      <Tooltip content={distance} portal>\n        <span>\n          {useElementQueries ? (\n            <>\n              <span className=\"date-small\">{dateTimeSmall}</span>\n              <span className=\"date-medium\">{dateTimeMedium}</span>\n              <span className=\"date-large\">{dateTimeLarge}</span>\n            </>\n          ) : (\n            dateTimeLarge\n          )}\n        </span>\n      </Tooltip>\n    </Text>\n  )\n}\n\nexport default DateWithTooltip\n","import {red} from '@sanity/color'\nimport {ErrorOutlineIcon} from '@sanity/icons'\nimport {type CardTone, Container, Flex, Menu, Text} from '@sanity/ui'\n\nimport {Button, MenuButton} from '../../../../ui-components'\nimport {SCHEDULE_FAILED_TEXT} from '../../constants'\n\ninterface Props {\n  stateReason: string\n}\n\nconst POPOVER_PROPS = {\n  portal: true,\n  constrainSize: true,\n  preventOverflow: true,\n  tone: 'default' as CardTone,\n  width: 0,\n}\n\nconst StateReasonFailedInfo = (props: Props) => {\n  const {stateReason} = props\n\n  return (\n    <MenuButton\n      id=\"stateReason\"\n      button={\n        <Button\n          tooltipProps={{content: 'Schedule failed'}}\n          mode=\"bleed\"\n          data-testid=\"schedule-validation-list-button\"\n          icon={ErrorOutlineIcon}\n          tone=\"critical\"\n        />\n      }\n      menu={\n        <Menu padding={1}>\n          <Container padding={2} width={0}>\n            <Text size={1}>{SCHEDULE_FAILED_TEXT}</Text>\n            <Flex gap={3} marginTop={4} padding={1}>\n              <Text size={1} style={{color: red[700].hex}}>\n                <ErrorOutlineIcon />\n              </Text>\n              <Text size={1} style={{color: red[700].hex}} weight=\"medium\">\n                {stateReason}\n              </Text>\n            </Flex>\n          </Container>\n        </Menu>\n      }\n      popover={POPOVER_PROPS}\n    />\n  )\n}\n\nexport default StateReasonFailedInfo\n","import {UserAvatar} from '../../../components/userAvatar'\n\ninterface Props {\n  id: string\n}\n\nconst User = (props: Props) => {\n  const {id} = props\n  return <UserAvatar user={id} withTooltip />\n}\n\nexport default User\n","import {type SchemaType} from '@sanity/types'\nimport {Badge, Box, Card, Flex, Stack, Text} from '@sanity/ui'\nimport {type ElementType, type ReactNode, useState} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Tooltip} from '../../../../ui-components/tooltip'\nimport {DocumentStatus} from '../../../components/documentStatus'\nimport {DocumentStatusIndicator} from '../../../components/documentStatusIndicator'\nimport {SanityDefaultPreview} from '../../../preview/components/SanityDefaultPreview'\nimport {useDocumentVersionInfo} from '../../../releases'\nimport {\n  DOCUMENT_HAS_ERRORS_TEXT,\n  DOCUMENT_HAS_WARNINGS_TEXT,\n  SCHEDULE_ACTION_DICTIONARY,\n} from '../../constants'\nimport useTimeZone from '../../hooks/useTimeZone'\nimport {useScheduledPublishingEnabled} from '../../tool/contexts/ScheduledPublishingEnabledProvider'\nimport {type Schedule} from '../../types'\nimport {type PaneItemPreviewState} from '../../utils/paneItemHelpers'\nimport {getLastExecuteDate} from '../../utils/scheduleUtils'\nimport {EMPTY_VALIDATION_STATUS, useValidationState} from '../../utils/validationUtils'\nimport {ValidateScheduleDoc} from '../validation/SchedulesValidation'\nimport {ValidationInfo} from '../validation/ValidationInfo'\nimport DateWithTooltip from './dateWithTooltip/DateWithTooltip'\nimport StateReasonFailedInfo from './StateReasonFailedInfo'\nimport User from './User'\n\nconst StatusDotPlaceholder = styled(Box)`\n  width: 9px;\n`\ninterface Props {\n  children?: ReactNode\n  contextMenu?: ReactNode\n  // eslint-disable-next-line no-undef\n  linkComponent?: ElementType | keyof React.JSX.IntrinsicElements\n  onClick?: () => void\n  previewState?: PaneItemPreviewState\n  publishedDocumentId?: string\n  schedule: Schedule\n  schemaType?: SchemaType\n  useElementQueries?: boolean\n}\n\nconst PreviewWrapper = (props: Props) => {\n  const {\n    children,\n    contextMenu,\n    linkComponent,\n    onClick,\n    previewState,\n    publishedDocumentId,\n    schedule,\n    schemaType,\n    useElementQueries,\n  } = props\n  const {mode} = useScheduledPublishingEnabled()\n  const [validationStatus, setValidationStatus] = useState(EMPTY_VALIDATION_STATUS)\n  const {validation} = validationStatus\n  const {hasError, validationTone} = useValidationState(validation)\n  const {formatDateTz} = useTimeZone()\n\n  const executeDate = getLastExecuteDate(schedule)\n  const scheduleDate = executeDate ? new Date(executeDate) : null\n\n  return (\n    <Card\n      padding={1}\n      radius={2}\n      shadow={1}\n      tone={validationTone}\n      style={mode === 'upsell' && schedule.state === 'scheduled' ? {opacity: 0.7} : undefined}\n    >\n      <Flex align=\"center\" gap={1} justify=\"space-between\">\n        <Tooltip\n          delay={{open: 400}}\n          placement=\"bottom-end\"\n          content={\n            <DocumentStatus draft={previewState?.draft} published={previewState?.published} />\n          }\n          disabled={!previewState?.draft && !previewState?.published}\n        >\n          <Card\n            __unstable_focusRing\n            as={linkComponent ? linkComponent : undefined}\n            data-as={onClick || linkComponent ? 'a' : undefined}\n            flex={1}\n            onClick={onClick}\n            padding={1}\n            radius={2}\n            tabIndex={0}\n            tone={validationTone}\n          >\n            <Flex align=\"center\" gap={3} justify=\"flex-start\" paddingLeft={children ? 0 : [1, 2]}>\n              {children && <Box style={{flexBasis: 'auto', flexGrow: 1}}>{children}</Box>}\n\n              {/* Badge */}\n              {schedule.action === 'unpublish' && (\n                <Flex style={{flexShrink: 0}}>\n                  <Badge\n                    fontSize={0}\n                    mode=\"outline\"\n                    tone={SCHEDULE_ACTION_DICTIONARY[schedule.action].badgeTone}\n                  >\n                    {schedule.action}\n                  </Badge>\n                </Flex>\n              )}\n\n              {/* Schedule date */}\n              <Box display={['block', 'none']} style={{flexShrink: 0, width: '90px'}}>\n                <Stack space={2}>\n                  {scheduleDate ? (\n                    <>\n                      <Text size={1}>\n                        {formatDateTz({date: scheduleDate, format: 'dd/MM/yyyy'})}\n                      </Text>\n                      <Text size={1}>{formatDateTz({date: scheduleDate, format: 'p'})}</Text>\n                    </>\n                  ) : (\n                    <Text muted size={1}>\n                      <em>No date specified</em>\n                    </Text>\n                  )}\n                </Stack>\n              </Box>\n              <Box\n                display={['none', 'block']}\n                style={{flexShrink: 0, maxWidth: '250px', width: children ? '35%' : 'auto'}}\n              >\n                {scheduleDate ? (\n                  <DateWithTooltip date={scheduleDate} useElementQueries={useElementQueries} />\n                ) : (\n                  <Text muted size={1}>\n                    <em>No date specified</em>\n                  </Text>\n                )}\n              </Box>\n\n              {/* HACK: render invisible preview wrapper when no children are provided to ensure consistent height */}\n              {!children && (\n                <Box style={{visibility: 'hidden'}}>\n                  <SanityDefaultPreview isPlaceholder />\n                </Box>\n              )}\n\n              <Flex align=\"center\" style={{flexShrink: 0, marginLeft: 'auto'}}>\n                {/* Avatar */}\n                <Box display={['none', 'none', 'block']} marginX={3} style={{flexShrink: 0}}>\n                  <User id={schedule?.author} />\n                </Box>\n\n                {/* Document status */}\n                <Box display={['none', 'block']} marginX={[2, 2, 3]} style={{flexShrink: 0}}>\n                  {publishedDocumentId ? (\n                    <DocumentVersionsStatus publishedDocumentId={publishedDocumentId} />\n                  ) : (\n                    <StatusDotPlaceholder />\n                  )}\n                </Box>\n              </Flex>\n            </Flex>\n          </Card>\n        </Tooltip>\n\n        <Flex justify=\"center\" style={{width: '38px'}}>\n          {/* Validation status (only displayed on upcoming schedules) */}\n          {schedule.state === 'scheduled' && (\n            <Box>\n              <ValidateScheduleDoc schedule={schedule} updateValidation={setValidationStatus} />\n              <ValidationInfo\n                markers={validation}\n                type={schemaType}\n                documentId={publishedDocumentId}\n                menuHeader={\n                  <Box padding={2}>\n                    <Text size={1}>\n                      {hasError ? DOCUMENT_HAS_ERRORS_TEXT : DOCUMENT_HAS_WARNINGS_TEXT}\n                    </Text>\n                  </Box>\n                }\n              />\n            </Box>\n          )}\n\n          {/* Failed state reason (only displayed on cancelled schedules) */}\n          {schedule.state === 'cancelled' && (\n            <StateReasonFailedInfo stateReason={schedule.stateReason} />\n          )}\n        </Flex>\n\n        {/* Failed state reason (only displayed on cancelled schedules) */}\n        {schedule.state === 'cancelled' && (\n          <StateReasonFailedInfo stateReason={schedule.stateReason} />\n        )}\n\n        {/* Context menu */}\n        {contextMenu && (\n          <Box style={{flexShrink: 0}} paddingRight={2}>\n            {contextMenu}\n          </Box>\n        )}\n      </Flex>\n    </Card>\n  )\n}\n\nexport default PreviewWrapper\n\nfunction DocumentVersionsStatus({publishedDocumentId}: {publishedDocumentId: string}) {\n  const versionsInfo = useDocumentVersionInfo(publishedDocumentId)\n  return <DocumentStatusIndicator draft={versionsInfo.draft} published={versionsInfo.published} />\n}\n","import {type SchemaType} from '@sanity/types'\nimport {useMemo} from 'react'\n\nimport {useDocumentActionProps} from '../../contexts/documentActionProps'\nimport useDialogScheduleEdit from '../../hooks/useDialogScheduleEdit'\nimport {type Schedule} from '../../types'\nimport {getScheduledDocumentId} from '../../utils/paneItemHelpers'\nimport {ScheduleContextMenu} from '../scheduleContextMenu'\nimport PreviewWrapper from './PreviewWrapper'\n\ninterface Props {\n  schedule: Schedule\n  schemaType: SchemaType\n}\n\nconst DocumentPreview = (props: Props) => {\n  const {schedule, schemaType} = props\n\n  const {DialogScheduleEdit, dialogProps, dialogScheduleEditShow} = useDialogScheduleEdit(schedule)\n  const {onComplete} = useDocumentActionProps()\n  const publishedId = useMemo(() => getScheduledDocumentId(schedule), [schedule])\n\n  return (\n    <>\n      {/* Dialogs (rendered outside of cards so they don't infer card colors) */}\n      {DialogScheduleEdit && <DialogScheduleEdit {...dialogProps} />}\n\n      <PreviewWrapper\n        contextMenu={\n          <ScheduleContextMenu\n            actions={{\n              delete: true,\n              edit: true,\n            }}\n            onDelete={onComplete}\n            onEdit={dialogScheduleEditShow}\n            schedule={schedule}\n            schemaType={schemaType}\n          />\n        }\n        onClick={dialogScheduleEditShow}\n        publishedDocumentId={publishedId}\n        schedule={schedule}\n        schemaType={schemaType}\n      />\n    </>\n  )\n}\n\nexport default DocumentPreview\n","import {TrashIcon} from '@sanity/icons'\nimport {Menu} from '@sanity/ui'\n\nimport {MenuButton, MenuItem} from '../../../../ui-components'\nimport {ContextMenuButton} from '../../../components/contextMenuButton'\nimport useScheduleOperation from '../../hooks/useScheduleOperation'\nimport {type Schedule} from '../../types'\n\ninterface Props {\n  onDelete?: () => void\n  schedule: Schedule\n}\n\n/**\n * 'Fallback' context menu used with schedules that don't have any valid associated documentType.\n * Currently, all users can delete schedules that don't have any associated documents, so we don't need to check for permissions here.\n */\nexport const FallbackContextMenu = (props: Props) => {\n  const {onDelete, schedule} = props\n  const {deleteSchedule} = useScheduleOperation()\n\n  const handleDelete = () => {\n    deleteSchedule({schedule}).then(() => onDelete?.())\n  }\n\n  return (\n    <MenuButton\n      button={<ContextMenuButton />}\n      id=\"contextMenu\"\n      menu={\n        <Menu>\n          <MenuItem\n            icon={TrashIcon}\n            onClick={handleDelete}\n            text=\"Delete schedule\"\n            tone=\"critical\"\n          />\n        </Menu>\n      }\n      placement=\"left\"\n      popover={{portal: true, tone: 'default'}}\n    />\n  )\n}\n","import {red} from '@sanity/color'\nimport {UnknownIcon} from '@sanity/icons'\n\nimport {SanityDefaultPreview} from '../../../preview/components/SanityDefaultPreview'\nimport {type Schedule} from '../../types'\nimport {FallbackContextMenu} from '../scheduleContextMenu/FallbackContextMenu'\nimport PreviewWrapper from './PreviewWrapper'\n\nconst NoSchemaItem = ({schedule}: {schedule: Schedule}) => {\n  return (\n    <PreviewWrapper\n      contextMenu={<FallbackContextMenu schedule={schedule} />}\n      schedule={schedule}\n      useElementQueries\n    >\n      <SanityDefaultPreview\n        icon={UnknownIcon}\n        layout=\"default\"\n        subtitle={<em>It may have been deleted</em>}\n        title={<em style={{color: red[600].hex}}>Document not found</em>}\n      />\n    </PreviewWrapper>\n  )\n}\n\nexport default NoSchemaItem\n","import {type SchemaType} from '@sanity/types'\nimport {type ComponentType, forwardRef, useMemo} from 'react'\nimport {IntentLink} from 'sanity/router'\n\nimport {Preview} from '../../../preview/components/Preview'\nimport {SanityDefaultPreview} from '../../../preview/components/SanityDefaultPreview'\nimport {getPublishedId} from '../../../util'\nimport useDialogScheduleEdit from '../../hooks/useDialogScheduleEdit'\nimport {usePublishedId} from '../../hooks/usePublishedId'\nimport {type Schedule} from '../../types'\nimport {type PaneItemPreviewState} from '../../utils/paneItemHelpers'\nimport {ScheduleContextMenu} from '../scheduleContextMenu'\nimport PreviewWrapper from './PreviewWrapper'\n\ninterface Props {\n  previewState: PaneItemPreviewState\n  schedule: Schedule\n  schemaType: SchemaType\n}\n\nconst ToolPreview = (props: Props) => {\n  const {previewState, schedule, schemaType} = props\n\n  const visibleDocument = previewState.draft || previewState.published\n  const isCompleted = schedule.state === 'succeeded'\n  const isScheduled = schedule.state === 'scheduled'\n\n  const {DialogScheduleEdit, dialogProps, dialogScheduleEditShow} = useDialogScheduleEdit(schedule)\n\n  const publishedId = usePublishedId(visibleDocument?._id)\n\n  const LinkComponent = useMemo(() => {\n    const Component = forwardRef((linkProps: any, ref: any) => (\n      <IntentLink\n        {...linkProps}\n        intent=\"edit\"\n        params={{\n          type: schemaType.name,\n          id: visibleDocument && getPublishedId(visibleDocument?._id),\n        }}\n        ref={ref}\n      />\n    ))\n    Component.displayName = 'ForwardRef(LinkComponent)'\n    return Component\n  }, [schemaType, visibleDocument])\n\n  return (\n    <>\n      {/* Dialogs (rendered outside of cards so they don't infer card colors) */}\n      {DialogScheduleEdit && <DialogScheduleEdit {...dialogProps} />}\n      <PreviewWrapper\n        contextMenu={\n          <ScheduleContextMenu\n            actions={{\n              clear: isCompleted,\n              delete: !isCompleted,\n              edit: isScheduled,\n              execute: isScheduled,\n            }}\n            onEdit={dialogScheduleEditShow}\n            schedule={schedule}\n            schemaType={schemaType}\n          />\n        }\n        linkComponent={LinkComponent}\n        previewState={previewState}\n        publishedDocumentId={publishedId}\n        schedule={schedule}\n        schemaType={schemaType}\n        useElementQueries\n      >\n        {previewState.isLoading ? (\n          <SanityDefaultPreview\n            icon={schemaType?.icon as ComponentType}\n            isPlaceholder={previewState.isLoading}\n            layout=\"default\"\n          />\n        ) : (\n          <Preview layout=\"default\" schemaType={schemaType} value={visibleDocument} />\n        )}\n      </PreviewWrapper>\n    </>\n  )\n}\n\nexport default ToolPreview\n","import {useMemo} from 'react'\n\nimport usePreviewState from '../../hooks/usePreviewState'\nimport {useScheduleSchemaType} from '../../hooks/useSchemaType'\nimport {type Schedule} from '../../types'\nimport {getScheduledDocument} from '../../utils/paneItemHelpers'\nimport DateWithTooltipElementQuery from './dateWithTooltip/DateWithTooltipElementQuery'\nimport DocumentPreview from './DocumentPreview'\nimport NoSchemaItem from './NoSchemaItem'\nimport ToolPreview from './ToolPreview'\n\ninterface Props {\n  schedule: Schedule\n  type: 'document' | 'tool'\n}\n\nexport const ScheduleItem = (props: Props) => {\n  const {schedule, type} = props\n\n  const firstDocument = getScheduledDocument(schedule)\n\n  const schemaType = useScheduleSchemaType(schedule)\n  const previewState = usePreviewState(firstDocument?.documentId, schemaType)\n\n  const visibleDocument = previewState.draft || previewState.published\n  const invalidDocument = !visibleDocument && !previewState.isLoading\n\n  const preview = useMemo(() => {\n    if (!schemaType || invalidDocument) {\n      return <NoSchemaItem schedule={schedule} />\n    }\n\n    if (type === 'document') {\n      return <DocumentPreview schedule={schedule} schemaType={schemaType} />\n    }\n\n    if (type === 'tool') {\n      return <ToolPreview previewState={previewState} schedule={schedule} schemaType={schemaType} />\n    }\n\n    return null\n  }, [invalidDocument, type, previewState, schedule, schemaType])\n\n  return <DateWithTooltipElementQuery>{preview}</DateWithTooltipElementQuery>\n}\n","'use no memo'\n// The `use no memo` directive is due to a known issue with react-virtual and react compiler: https://github.com/TanStack/virtual/issues/736\n\nimport {Box, Card, Flex, Label} from '@sanity/ui'\nimport {type VirtualItem, type Virtualizer} from '@tanstack/react-virtual'\nimport {type CSSProperties, useEffect, useMemo, useState} from 'react'\n\nimport {SanityDefaultPreview} from '../../../preview/components/SanityDefaultPreview'\nimport {ScheduleItem} from '../../components/scheduleItem'\nimport {type Schedule} from '../../types'\n\nexport interface ListItem {\n  content: Schedule | string\n  key: string\n  virtualRow: VirtualItem\n}\n\ninterface Props {\n  item: ListItem\n  measureElement: Virtualizer<HTMLDivElement, Element>['measureElement']\n}\n\n/** Putting this too low will result in 429 too many requests when scrolling in big lists */\nconst SCHEDULE_RENDER_DELAY_MS = 200\n\nexport function VirtualListItem(props: Props) {\n  const {\n    item: {content, virtualRow},\n    measureElement,\n  } = props\n  const style: CSSProperties = useMemo(\n    () => ({\n      position: 'absolute',\n      top: 0,\n      left: 0,\n      width: '100%',\n      transform: `translateY(${virtualRow.start}px)`,\n    }),\n    [virtualRow],\n  )\n\n  return (\n    <Box\n      data-index={virtualRow.index}\n      key={virtualRow.key}\n      paddingBottom={2}\n      ref={measureElement}\n      style={style}\n    >\n      {typeof content === 'string' ? (\n        <MonthHeading content={content} />\n      ) : (\n        <DelayedScheduleItem schedule={content} />\n      )}\n    </Box>\n  )\n}\n\n/**\n * ScheduleItem is a bit on the heavy side for rendering speed. This component defers rendering ScheduleItem\n * until \"some time after\" mounting, so scrolling in the virtualized Schedule-list gives better UX.\n */\nfunction DelayedScheduleItem({schedule}: {schedule: Schedule}) {\n  const [delayedScheduleItem, setDelayedScheduleItem] = useState(<PlaceholderScheduleItem />)\n\n  useEffect(() => {\n    let canUpdate = true\n    const timeout = setTimeout(() => {\n      if (!canUpdate) {\n        return\n      }\n      setDelayedScheduleItem(<ScheduleItem schedule={schedule} type=\"tool\" />)\n    }, SCHEDULE_RENDER_DELAY_MS)\n\n    return () => {\n      canUpdate = false\n      clearTimeout(timeout)\n    }\n  }, [schedule])\n\n  return delayedScheduleItem\n}\n\nfunction MonthHeading({content}: {content: string}) {\n  return (\n    <Flex align=\"flex-end\" paddingBottom={2} paddingTop={4}>\n      <Label muted size={1}>\n        {content}\n      </Label>\n    </Flex>\n  )\n}\n\nfunction PlaceholderScheduleItem() {\n  return (\n    <Card padding={1} radius={2} shadow={1}>\n      <Card padding={1}>\n        <SanityDefaultPreview isPlaceholder />\n      </Card>\n    </Card>\n  )\n}\n","'use no memo'\n// The `use no memo` directive is due to a known issue with react-virtual and react compiler: https://github.com/TanStack/virtual/issues/736\n\nimport {CheckmarkCircleIcon} from '@sanity/icons'\nimport {Box, Flex} from '@sanity/ui'\nimport {useVirtualizer} from '@tanstack/react-virtual'\nimport {useEffect, useMemo, useRef} from 'react'\n\nimport {Button} from '../../../../ui-components'\nimport useScheduleOperation from '../../hooks/useScheduleOperation'\nimport {type Schedule, type ScheduleSort} from '../../types'\nimport {getLastExecuteDate} from '../../utils/scheduleUtils'\nimport {useSchedules} from '../contexts/schedules'\nimport {type ListItem, VirtualListItem} from './VirtualListItem'\n\nfunction getLocalizedDate(date: string) {\n  return new Date(date).toLocaleString('default', {\n    month: 'long',\n    year: 'numeric',\n  })\n}\n\nconst VirtualList = () => {\n  const {activeSchedules, scheduleState, sortBy} = useSchedules()\n  const {measureElement, virtualList, totalSize, containerRef} = useVirtualizedSchedules(\n    activeSchedules,\n    sortBy,\n  )\n\n  const {deleteSchedules} = useScheduleOperation()\n\n  const handleClearSchedules = () => {\n    deleteSchedules({schedules: activeSchedules || []})\n  }\n\n  // Reset virtual list scroll position on state changes\n  useEffect(() => {\n    containerRef?.current?.scrollTo(0, 0)\n  }, [scheduleState, sortBy, containerRef])\n\n  return (\n    <Box paddingBottom={6} paddingTop={1} paddingX={4} ref={containerRef} overflow=\"hidden\">\n      <Box\n        style={{\n          height: `${totalSize}px`,\n          width: '100%',\n          position: 'relative',\n        }}\n      >\n        {virtualList.map((item) => (\n          <VirtualListItem key={item.key} item={item} measureElement={measureElement} />\n        ))}\n      </Box>\n      {/* Clear completed schedules */}\n      {scheduleState === 'succeeded' && (\n        <Flex justify=\"center\" marginTop={6}>\n          <Button\n            icon={CheckmarkCircleIcon}\n            mode=\"ghost\"\n            onClick={handleClearSchedules}\n            text=\"Clear all completed schedules\"\n          />\n        </Flex>\n      )}\n    </Box>\n  )\n}\n\nexport default VirtualList\n\nfunction useVirtualizedSchedules(activeSchedules: Schedule[], sortBy?: ScheduleSort) {\n  const containerRef = useRef<HTMLDivElement>(null)\n\n  const listSourceItems = useMemo(() => {\n    const items: (Schedule | string)[] = []\n\n    activeSchedules.forEach((schedule, index) => {\n      if (sortBy == 'executeAt') {\n        // Get localised date string for current and previous schedules (e.g. 'February 2025')\n        const previousSchedule = activeSchedules[index - 1]\n        const previousExecuteDate = getLastExecuteDate(previousSchedule)\n        const datePrevious =\n          index > 0 && previousExecuteDate ? getLocalizedDate(previousExecuteDate) : null\n\n        const currentExecuteDate = getLastExecuteDate(schedule)\n        const dateCurrent = currentExecuteDate ? getLocalizedDate(currentExecuteDate) : null\n\n        if (dateCurrent !== datePrevious) {\n          items.push(dateCurrent ? dateCurrent : 'No date specified')\n        }\n      }\n      items.push(schedule)\n    })\n\n    return items\n  }, [activeSchedules, sortBy])\n\n  const virtualizer = useVirtualizer({\n    count: listSourceItems.length,\n    getScrollElement: () => containerRef.current,\n    estimateSize: () => 50,\n    overscan: 5,\n  })\n\n  const virtualList: ListItem[] = virtualizer.getVirtualItems().map((virtualRow) => {\n    const item = listSourceItems[virtualRow.index]\n    return {\n      content: item,\n      key: typeof item === 'string' ? item : item.id,\n      virtualRow,\n    }\n  })\n\n  return {\n    containerRef,\n    measureElement: virtualizer.measureElement,\n    totalSize: virtualizer.getTotalSize(),\n    virtualList,\n  }\n}\n","/* eslint-disable react/jsx-handler-names */\nimport {WarningOutlineIcon} from '@sanity/icons'\nimport {Box, Card, Container, Flex, Text} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {UpsellPanel} from '../../../studio/upsell/UpsellPanel'\nimport {useScheduledPublishingEnabled} from '../contexts/ScheduledPublishingEnabledProvider'\nimport {useSchedulePublishingUpsell} from '../contexts/SchedulePublishingUpsellProvider'\nimport {useSchedules} from '../contexts/schedules'\nimport EmptySchedules from './EmptySchedules'\nimport VirtualList from './VirtualList'\n\nconst Panel = styled(Container)`\n  width: auto;\n`\n\nexport const Schedules = () => {\n  const {activeSchedules, selectedDate, scheduleState} = useSchedules()\n  const {upsellData, telemetryLogs} = useSchedulePublishingUpsell()\n  const {mode} = useScheduledPublishingEnabled()\n  const showWarning = mode === 'upsell' && scheduleState === 'scheduled'\n  return (\n    <Box style={{height: '100%'}}>\n      {mode === 'upsell' && upsellData && (\n        <Panel width={1} padding={4} paddingBottom={1}>\n          <UpsellPanel\n            layout=\"horizontal\"\n            data={upsellData}\n            onPrimaryClick={telemetryLogs.panelPrimaryClicked}\n            onSecondaryClick={telemetryLogs.panelSecondaryClicked}\n          />\n        </Panel>\n      )}\n      {activeSchedules.length === 0 ? (\n        <Panel width={1} padding={4} paddingTop={4}>\n          <EmptySchedules scheduleState={scheduleState} selectedDate={selectedDate} />\n        </Panel>\n      ) : (\n        <>\n          {showWarning && (\n            <Card margin={4} marginBottom={2} padding={3} tone=\"caution\" radius={3} shadow={1}>\n              <Flex gap={3} align={'center'}>\n                <Text size={1}>\n                  <WarningOutlineIcon />\n                </Text>\n                <Text size={1}>\n                  Your scheduled documents won't be published automatically unless you upgrade your\n                  plan. You can still publish them manually.\n                </Text>\n              </Flex>\n            </Card>\n          )}\n          <Box paddingTop={showWarning ? 0 : 4}>\n            <VirtualList />\n          </Box>\n        </>\n      )}\n    </Box>\n  )\n}\n","import {CheckmarkIcon, SortIcon} from '@sanity/icons'\nimport {Menu} from '@sanity/ui'\n\nimport {MenuItem} from '../../../../ui-components'\nimport {MenuButton} from '../../../../ui-components/menuButton'\nimport {ContextMenuButton} from '../../../components/contextMenuButton'\nimport {useSchedules} from '../contexts/schedules'\n\nconst SchedulesContextMenu = () => {\n  const {setSortBy, sortBy} = useSchedules()\n\n  // Callbacks\n  const handleSortByCreateAt = () => setSortBy('createdAt')\n  const handleSortByExecuteAt = () => setSortBy('executeAt')\n\n  return (\n    <MenuButton\n      button={<ContextMenuButton />}\n      id=\"sort\"\n      menu={\n        <Menu style={{minWidth: '250px'}}>\n          <MenuItem\n            icon={SortIcon}\n            iconRight={sortBy === 'createdAt' ? CheckmarkIcon : undefined}\n            onClick={handleSortByCreateAt}\n            text=\"Sort by time added\"\n          />\n          <MenuItem\n            icon={SortIcon}\n            iconRight={sortBy === 'executeAt' ? CheckmarkIcon : undefined}\n            onClick={handleSortByExecuteAt}\n            text=\"Sort by time scheduled\"\n          />\n        </Menu>\n      }\n    />\n  )\n}\n\nexport default SchedulesContextMenu\n","import {gray, red} from '@sanity/color'\nimport {Box} from '@sanity/ui'\n\ninterface Props {\n  mode?: 'default' | 'failed'\n  selected?: boolean\n}\nconst Pip = (props: Props) => {\n  const {mode = 'default', selected} = props\n  return (\n    <Box\n      style={{\n        ...(mode === 'default'\n          ? {\n              background: gray[selected ? 100 : 300].hex,\n            }\n          : {}),\n        ...(mode === 'failed'\n          ? {\n              background: red[500].hex,\n            }\n          : {}),\n        borderRadius: '2px',\n        height: '2px',\n        width: '100%',\n      }}\n    />\n  )\n}\n\nexport default Pip\n","import {CloseIcon} from '@sanity/icons'\nimport {Badge, Box, Card, type CardTone, Flex, Inline, Label, Stack, Text} from '@sanity/ui'\nimport {format, isWeekend} from 'date-fns'\nimport {useCallback, useMemo} from 'react'\n\nimport {Tooltip} from '../../../../ui-components'\nimport {SCHEDULE_ACTION_DICTIONARY, SCHEDULE_STATE_DICTIONARY} from '../../constants'\nimport useTimeZone from '../../hooks/useTimeZone'\nimport {type Schedule, type ScheduleState} from '../../types'\nimport {getLastExecuteDate} from '../../utils/scheduleUtils'\nimport {useSchedules} from '../contexts/schedules'\nimport Pip from './Pip'\n\ninterface CalendarDayProps {\n  date: Date // clock time\n  focused?: boolean\n  onSelect: (date?: Date) => void\n  isCurrentMonth?: boolean\n  isToday: boolean\n  selected?: boolean\n}\n\nexport function CalendarDay(props: CalendarDayProps) {\n  const {date, focused, isCurrentMonth, isToday, onSelect, selected} = props\n\n  const {schedulesByDate} = useSchedules()\n\n  const schedules = schedulesByDate(date)\n\n  const handleClick = useCallback(() => {\n    if (selected) {\n      onSelect(undefined)\n    } else {\n      onSelect(date)\n    }\n  }, [date, onSelect, selected])\n\n  let tone: CardTone\n  if (isToday || selected) {\n    tone = 'primary'\n  } else if (isWeekend(date)) {\n    // tone = 'transparent'\n    tone = 'default'\n  } else {\n    tone = 'default'\n  }\n\n  const hasSchedules = schedules.length > 0\n\n  // Parition schedules by state\n  const {completed, failed, upcoming} = useMemo(() => {\n    return {\n      completed: schedules.filter((s) => s.state === 'succeeded'),\n      failed: schedules.filter((s) => s.state === 'cancelled'),\n      upcoming: schedules.filter((s) => s.state === 'scheduled'),\n    }\n  }, [schedules])\n\n  return (\n    <div aria-selected={selected} data-ui=\"CalendarDay\">\n      <Tooltip\n        content={<TooltipContent date={date} schedules={schedules} />}\n        disabled={!hasSchedules}\n        portal\n      >\n        <Card\n          aria-label={date.toDateString()}\n          aria-pressed={selected}\n          as=\"button\"\n          __unstable_focusRing\n          data-weekday\n          data-focused={focused ? 'true' : ''}\n          role=\"button\"\n          tabIndex={-1}\n          onClick={handleClick}\n          paddingX={3}\n          paddingY={4}\n          radius={2}\n          selected={selected}\n          style={{position: 'relative'}}\n          tone={tone}\n        >\n          <Text\n            size={1}\n            style={{\n              opacity: !selected && !isCurrentMonth ? 0.35 : 1,\n              textAlign: 'center',\n            }}\n          >\n            {selected ? <CloseIcon /> : date.getDate()}\n          </Text>\n\n          {/* Pips */}\n          <Box\n            style={{\n              bottom: 2,\n              left: 2,\n              position: 'absolute',\n              right: 2,\n            }}\n          >\n            <Flex align=\"center\" gap={1} justify=\"center\">\n              {completed.length > 0 && <Pip selected={selected} />}\n              {upcoming.length > 0 && <Pip selected={selected} />}\n              {failed.length > 0 && <Pip mode=\"failed\" selected={selected} />}\n            </Flex>\n          </Box>\n        </Card>\n      </Tooltip>\n    </div>\n  )\n}\n\ninterface TooltipContentProps {\n  date: Date\n  schedules?: Schedule[]\n}\n\ntype SchedulesByState = Record<ScheduleState, Schedule[]>\n\nfunction TooltipContent(props: TooltipContentProps) {\n  const {date, schedules = []} = props\n  const {formatDateTz} = useTimeZone()\n\n  const schedulesByState = schedules.reduce<SchedulesByState>(\n    (acc, val) => {\n      acc[val.state].push(val)\n      return acc\n    },\n    {\n      cancelled: [],\n      succeeded: [],\n      scheduled: [],\n    },\n  )\n\n  return (\n    <Box padding={3}>\n      <Box marginBottom={4}>\n        <Text size={1} weight=\"medium\">\n          {format(date, 'd MMMM yyyy')}\n        </Text>\n      </Box>\n      <Stack space={3}>\n        {(Object.keys(schedulesByState) as Array<keyof typeof schedulesByState>).map((key) => {\n          const stateSchedules = schedulesByState[key]\n          if (stateSchedules.length === 0) {\n            return null\n          }\n          return (\n            <Stack key={key} space={2}>\n              <Label muted size={0}>\n                {SCHEDULE_STATE_DICTIONARY[key].title}\n              </Label>\n              <Stack space={1}>\n                {stateSchedules\n                  .filter((schedule) => schedule.executeAt)\n                  .map((schedule) => {\n                    const executeDate = getLastExecuteDate(schedule)\n                    if (!executeDate) {\n                      return null\n                    }\n\n                    return (\n                      <Inline key={schedule.id} space={2}>\n                        <Box style={{width: '60px'}}>\n                          <Text size={1} weight=\"regular\">\n                            {formatDateTz({date: new Date(executeDate), format: 'p'})}\n                          </Text>\n                        </Box>\n                        {/* HACK: Hide non unpublish schedules to maintain layout */}\n                        <Flex\n                          align=\"center\"\n                          style={{flexShrink: 0, opacity: schedule.action === 'unpublish' ? 1 : 0}}\n                        >\n                          <Badge\n                            fontSize={0}\n                            mode=\"outline\"\n                            tone={SCHEDULE_ACTION_DICTIONARY[schedule.action].badgeTone}\n                          >\n                            {schedule.action}\n                          </Badge>\n                        </Flex>\n                      </Inline>\n                    )\n                  })}\n              </Stack>\n            </Stack>\n          )\n        })}\n      </Stack>\n    </Box>\n  )\n}\n","import {useCallback, useState} from 'react'\n\nimport {CalendarFilter} from '../../../components/inputs/DateFilters/calendar/CalendarFilter'\nimport useTimeZone from '../../hooks/useTimeZone'\nimport {CalendarDay} from './CalendarDay'\n\nexport interface ToolCalendarProps {\n  onSelect: (date?: Date) => void\n  selectedDate?: Date\n}\n\nexport const ToolCalendar = (props: ToolCalendarProps) => {\n  const {onSelect, selectedDate} = props\n\n  const {getCurrentZoneDate, utcToCurrentZoneDate} = useTimeZone()\n\n  // Focus selected date (if routed) or user's current date (in stored time zone)\n  const [focusedDate, setFocusedDate] = useState<Date>(selectedDate || getCurrentZoneDate())\n\n  const handleFocusDateChange = useCallback(\n    (date: Date) => {\n      setFocusedDate(utcToCurrentZoneDate(date))\n    },\n    [utcToCurrentZoneDate],\n  )\n\n  return (\n    <CalendarFilter\n      focusedDate={focusedDate}\n      onFocusedDateChange={handleFocusDateChange}\n      onSelect={onSelect}\n      selectedDate={selectedDate}\n      renderCalendarDay={CalendarDay}\n    />\n  )\n}\n","import {Box, Container, Flex, Text, useTheme} from '@sanity/ui'\nimport {parse} from 'date-fns'\nimport {useEffect, useMemo, useRef} from 'react'\nimport {type RouterContextValue, useRouter} from 'sanity/router'\nimport {styled} from 'styled-components'\n\nimport {LoadingBlock} from '../../components/loadingBlock/LoadingBlock'\nimport {useReleasesToolAvailable} from '../../releases/hooks/useReleasesToolAvailable'\nimport {useWorkspace} from '../../studio/workspace'\nimport ErrorCallout from '../components/errorCallout/ErrorCallout'\nimport InfoCallout from '../components/infoCallout/InfoCallout'\nimport ButtonTimeZone from '../components/timeZoneButton/TimeZoneButton'\nimport ButtonTimeZoneElementQuery from '../components/timeZoneButton/TimeZoneButtonElementQuery'\nimport {WarningBanner} from '../components/warningBanner/WarningBanner'\nimport {SCHEDULE_FILTERS, TOOL_HEADER_HEIGHT} from '../constants'\nimport usePollSchedules from '../hooks/usePollSchedules'\nimport useTimeZone from '../hooks/useTimeZone'\nimport {type Schedule, type ScheduleState} from '../types'\nimport {useScheduledPublishingEnabled} from './contexts/ScheduledPublishingEnabledProvider'\nimport {SchedulesProvider} from './contexts/schedules'\nimport {ScheduleFilters} from './scheduleFilters'\nimport {Schedules} from './schedules'\nimport SchedulesContextMenu from './schedulesContextMenu/SchedulesContextMenu'\nimport {ToolCalendar} from './toolCalendar'\n\nconst Column = styled(Box)`\n  flex-direction: column;\n  &:not(:last-child) {\n    border-right: 1px solid var(--card-border-color);\n  }\n`\n\nconst NO_SCHEDULE: Schedule[] = []\nconst DATE_SLUG_FORMAT = 'yyyy-MM-dd' // date-fns format\n\nexport default function Tool() {\n  const router = useRouter()\n  const {scheduledPublishing, releases} = useWorkspace()\n  const releasesToolAvailable = useReleasesToolAvailable()\n\n  const {sanity: theme} = useTheme()\n  const {error, isInitialLoading, schedules = NO_SCHEDULE} = usePollSchedules()\n  const {enabled, hasUsedScheduledPublishing} = useScheduledPublishingEnabled()\n\n  const lastScheduleState = useRef<ScheduleState | undefined>(undefined)\n\n  const scheduleState: ScheduleState = router.state.state as ScheduleState\n  const selectedDate = router.state.date\n    ? parse(router.state.date as string, DATE_SLUG_FORMAT, new Date())\n    : undefined\n\n  //Store last active schedule state\n  useEffect(() => {\n    if (router.state.state) {\n      lastScheduleState.current = router.state.state as ScheduleState\n    }\n  }, [router.state.state])\n\n  // Default to first filter type ('upcoming') if no existing schedule state or\n  // selected date can be inferred from current route.\n  useFallbackNavigation(router, scheduleState, selectedDate)\n\n  const {formatDateTz} = useTimeZone()\n\n  const schedulesContext = useMemo(\n    () => ({\n      schedules,\n      scheduleState,\n      selectedDate,\n    }),\n    [schedules, scheduleState, selectedDate],\n  )\n\n  const handleClearDate = () => {\n    router.navigate({state: lastScheduleState?.current || SCHEDULE_FILTERS[0]})\n  }\n\n  const handleSelectDate = (date?: Date) => {\n    if (date) {\n      router.navigate({date: formatDateTz({date, format: DATE_SLUG_FORMAT})})\n    } else {\n      router.navigate({state: lastScheduleState?.current || SCHEDULE_FILTERS[0]})\n    }\n  }\n\n  if (!enabled) {\n    if (scheduledPublishing.__internal__workspaceEnabled) {\n      return (\n        <Container width={1} paddingTop={4}>\n          <Box paddingTop={4} paddingX={4}>\n            <ErrorCallout\n              description=\"Something went wrong loading permissions, please try again.\"\n              title=\"Permissions check failed\"\n            />\n          </Box>\n        </Container>\n      )\n    }\n    // This is for the case users lands in the tool rout without having the feature enabled.\n    return (\n      <Container width={1} paddingTop={4}>\n        <Box paddingTop={4} paddingX={4}>\n          {hasUsedScheduledPublishing.loading ? <LoadingBlock /> : <InfoCallout />}\n        </Box>\n      </Container>\n    )\n  }\n\n  return (\n    <SchedulesProvider value={schedulesContext}>\n      {releasesToolAvailable && scheduledPublishing.showReleasesBanner && <WarningBanner />}\n      <Flex direction=\"column\" height=\"fill\" flex={1} overflow=\"hidden\">\n        <Flex flex={1} height=\"fill\">\n          {/* LHS Column */}\n          <Column\n            display={['none', null, null, 'flex'] as any}\n            style={{\n              position: 'sticky',\n              top: 0,\n              width: '350px',\n            }}\n          >\n            <ToolCalendar onSelect={handleSelectDate} selectedDate={selectedDate} />\n          </Column>\n          {/* RHS Column */}\n          <Column display=\"flex\" flex={1} overflow=\"hidden\">\n            <ButtonTimeZoneElementQuery\n              style={{\n                background: theme.color.card.enabled.bg,\n                position: 'sticky',\n                top: 0,\n                zIndex: 1,\n              }}\n            >\n              {/* Header */}\n              <Flex\n                align=\"center\"\n                paddingLeft={4}\n                paddingRight={3}\n                style={{\n                  borderBottom: '1px solid var(--card-border-color)',\n                  minHeight: `${TOOL_HEADER_HEIGHT}px`,\n                }}\n              >\n                <Flex align=\"center\" flex={1} justify=\"space-between\">\n                  {/* Filters */}\n                  <ScheduleFilters onClearDate={handleClearDate} selectedDate={selectedDate} />\n\n                  {/* Time zone select + context menu */}\n                  <Flex align=\"center\" gap={1}>\n                    <ButtonTimeZone useElementQueries />\n                    <SchedulesContextMenu />\n                  </Flex>\n                </Flex>\n              </Flex>\n            </ButtonTimeZoneElementQuery>\n            <Flex direction=\"column\" flex={1}>\n              {/* Error */}\n              {error && (\n                <Box paddingTop={4} paddingX={4}>\n                  <ErrorCallout\n                    description=\"More information in the developer console.\"\n                    title=\"Something went wrong, unable to retrieve schedules.\"\n                  />\n                </Box>\n              )}\n\n              <Box flex={1} overflow=\"auto\">\n                {isInitialLoading ? (\n                  <Box padding={4}>\n                    <Text muted>Loading...</Text>\n                  </Box>\n                ) : (\n                  // Loaded schedules\n                  <Schedules />\n                )}\n              </Box>\n            </Flex>\n          </Column>\n        </Flex>\n      </Flex>\n    </SchedulesProvider>\n  )\n}\n\nfunction useFallbackNavigation(\n  router: RouterContextValue,\n  filter?: ScheduleState,\n  selectedDate?: Date,\n) {\n  useEffect(() => {\n    if (!filter && !selectedDate) {\n      router.navigate({state: SCHEDULE_FILTERS[0]}, {replace: true})\n    }\n  }, [selectedDate, router, filter])\n}\n","import {type ButtonTone, Flex} from '@sanity/ui'\nimport {type ComponentType, type ReactNode} from 'react'\n\nimport {Button} from '../../../../ui-components'\n\ninterface Props {\n  buttonText?: string\n  disabled?: boolean\n  icon?: ComponentType | ReactNode\n  onAction?: () => void\n  onComplete?: () => void\n  tone?: ButtonTone\n}\n\nconst DialogFooter = (props: Props) => {\n  const {buttonText = 'Action', disabled, icon, onAction, onComplete, tone = 'positive'} = props\n  return (\n    <Flex width=\"full\" gap={3} justify=\"flex-end\">\n      <Button mode=\"bleed\" onClick={onComplete} text=\"Cancel\" />\n      {onAction && (\n        <Button disabled={disabled} icon={icon} onClick={onAction} text={buttonText} tone={tone} />\n      )}\n    </Flex>\n  )\n}\n\nexport default DialogFooter\n","import {Card, Flex, Stack, Text} from '@sanity/ui'\n\nimport {useValidationStatus} from '../../../../hooks/useValidationStatus'\nimport {ValidationInfo} from '../../../components/validation/ValidationInfo'\nimport {DOCUMENT_HAS_ERRORS_TEXT} from '../../../constants'\nimport {usePublishedId} from '../../../hooks/usePublishedId'\nimport {useSchemaType} from '../../../hooks/useSchemaType'\nimport {useValidationState} from '../../../utils/validationUtils'\n\ninterface Props {\n  id: string\n  schemaType: string\n}\n\nexport function NewScheduleInfo({id, schemaType}: Props) {\n  return (\n    <Stack space={4}>\n      <Text size={1}>\n        Schedule this document to be published at any time in the future.\n        <br />\n        Any edits in the meantime will be added to the scheduled document.\n      </Text>\n      <Text size={1}>Visit the Schedules page to get an overview of all schedules.</Text>\n      <ValidationWarning id={id} type={schemaType} />\n    </Stack>\n  )\n}\n\nfunction ValidationWarning({id, type}: {id: string; type: string}) {\n  const publishedId = usePublishedId(id)\n  const schema = useSchemaType(type)\n  const validationStatus = useValidationStatus(publishedId, type)\n  const {hasError} = useValidationState(validationStatus.validation)\n\n  if (!hasError) {\n    return null\n  }\n\n  return (\n    <Card padding={2} radius={1} shadow={1} tone=\"critical\">\n      <Flex gap={1} align=\"center\">\n        <ValidationInfo\n          markers={validationStatus.validation}\n          type={schema}\n          documentId={publishedId}\n        />\n        <Text size={1}>{DOCUMENT_HAS_ERRORS_TEXT}</Text>\n      </Flex>\n    </Card>\n  )\n}\n","import {Box, Stack, Text} from '@sanity/ui'\n\nimport {ScheduleItem} from '../../../components/scheduleItem'\nimport {type Schedule} from '../../../types'\n\ninterface Props {\n  schedules: Schedule[]\n}\n\nconst Schedules = (props: Props) => {\n  const {schedules} = props\n\n  return (\n    <Stack space={4}>\n      {schedules.length === 0 ? (\n        <Box>\n          <Text size={1}>No schedules</Text>\n        </Box>\n      ) : (\n        <Stack space={2}>\n          {schedules.map((schedule) => (\n            <ScheduleItem key={schedule.id} schedule={schedule} type=\"document\" />\n          ))}\n        </Stack>\n      )}\n    </Stack>\n  )\n}\n\nexport default Schedules\n","import {CalendarIcon, ClockIcon} from '@sanity/icons'\nimport {Box, Text} from '@sanity/ui'\nimport {useCallback, useState} from 'react'\n\nimport {InsufficientPermissionsMessage} from '../../../../components/InsufficientPermissionsMessage'\nimport {\n  type DocumentActionDescription,\n  type DocumentActionDialogProps,\n  type DocumentActionProps,\n} from '../../../../config/document/actions'\nimport {useCurrentUser, useDocumentPairPermissions} from '../../../../store'\nimport DialogFooter from '../../../components/dialogs/DialogFooter'\nimport DialogHeader from '../../../components/dialogs/DialogHeader'\nimport {EditScheduleForm} from '../../../components/editScheduleForm'\nimport ErrorCallout from '../../../components/errorCallout/ErrorCallout'\nimport {DocumentActionPropsProvider} from '../../../contexts/documentActionProps'\nimport usePollSchedules from '../../../hooks/usePollSchedules'\nimport useScheduleForm from '../../../hooks/useScheduleForm'\nimport useScheduleOperation from '../../../hooks/useScheduleOperation'\nimport {useScheduledPublishingEnabled} from '../../../tool/contexts/ScheduledPublishingEnabledProvider'\nimport {useSchedulePublishingUpsell} from '../../../tool/contexts/SchedulePublishingUpsellProvider'\nimport {debugWithName} from '../../../utils/debug'\nimport {NewScheduleInfo} from './NewScheduleInfo'\nimport Schedules from './Schedules'\n\nconst debug = debugWithName('ScheduleAction')\n\n/*\n * NOTE: Document actions are re-run whenever `onComplete` is called.\n *\n * The `onComplete` callback prop is used to typically denote that an action is 'finished',\n * and default behavior means that `useEffect` and other hooks are immediately re-run upon 'completion'.\n *\n * This particular custom action has a hook that polls an endpoint (`usePollSchedules`) and any\n * triggered `onComplete` action (typically done when a dialog is closed) will automatically query\n * this endpoint by virtue of the hook re-running and in turn, revalidate our data.\n *\n * In this case, this is exactly what we want (we want to revalidate once a schedule has been created,\n * updated or deleted) - just be mindful that any hooks here can and will run multiple times, even with\n * empty dependency arrays.\n */\n\n/**\n * @beta\n */\nexport const ScheduleAction = (props: DocumentActionProps): DocumentActionDescription | null => {\n  const {draft, id, liveEdit, onComplete, published, type} = props\n\n  const currentUser = useCurrentUser()\n  const [permissions, isPermissionsLoading] = useDocumentPairPermissions({\n    id,\n    type,\n    permission: 'publish',\n  })\n  const {createSchedule} = useScheduleOperation()\n  const {enabled, mode} = useScheduledPublishingEnabled()\n  const {handleOpenDialog} = useSchedulePublishingUpsell()\n  // Check if the current project supports Scheduled Publishing\n\n  const [dialogOpen, setDialogOpen] = useState(false)\n  const {formData, onFormChange} = useScheduleForm()\n\n  // Poll for document schedules\n  const {\n    error: fetchError,\n    isInitialLoading,\n    schedules,\n  } = usePollSchedules({\n    documentId: id,\n    state: 'scheduled',\n  })\n\n  debug('schedules', schedules)\n\n  const hasExistingSchedules = schedules && schedules.length > 0\n\n  // Check to see if the document 'exists' (has either been published OR has draft content).\n  // When creating a new document, despite having an ID assigned it won't exist in your dataset\n  // until the document has been edited / dirtied in any way.\n  const documentExists = draft !== null || published !== null\n\n  const insufficientPermissions = !isPermissionsLoading && !permissions?.granted\n\n  // Callbacks\n  const handleDialogOpen = useCallback(() => {\n    if (mode === 'upsell') {\n      handleOpenDialog('document_action')\n    } else {\n      setDialogOpen(true)\n    }\n  }, [mode, handleOpenDialog])\n\n  const handleScheduleCreate = useCallback(() => {\n    if (!formData?.date) {\n      return\n    }\n\n    // Create schedule then close dialog\n    createSchedule({date: formData.date, documentId: id}).then(onComplete)\n  }, [onComplete, createSchedule, id, formData?.date])\n\n  const title = hasExistingSchedules ? 'Edit Schedule' : 'Schedule'\n\n  if (insufficientPermissions) {\n    return {\n      disabled: true,\n      icon: CalendarIcon,\n      label: title,\n      title: <InsufficientPermissionsMessage currentUser={currentUser} context=\"edit-schedules\" />,\n    }\n  }\n\n  let tooltip: string | null = `This document doesn't exist yet`\n  if (documentExists) {\n    tooltip = null\n  }\n  if (isInitialLoading) {\n    tooltip = 'Loading schedules'\n  }\n  if (liveEdit) {\n    tooltip =\n      'Live Edit is enabled for this content type and publishing happens automatically as you make changes'\n  }\n\n  const dialog: DocumentActionDialogProps = {\n    content: fetchError ? (\n      <ErrorCallout\n        description=\"More information in the developer console.\"\n        title=\"Something went wrong, unable to retrieve schedules.\"\n      />\n    ) : (\n      <DocumentActionPropsProvider value={props}>\n        {hasExistingSchedules ? (\n          <Schedules schedules={schedules} />\n        ) : (\n          <EditScheduleForm onChange={onFormChange} value={formData}>\n            <NewScheduleInfo id={id} schemaType={type} />\n          </EditScheduleForm>\n        )}\n      </DocumentActionPropsProvider>\n    ),\n    footer: !hasExistingSchedules && (\n      <DialogFooter\n        buttonText=\"Schedule\"\n        disabled={!formData?.date}\n        icon={ClockIcon}\n        onAction={handleScheduleCreate}\n        onComplete={onComplete}\n        tone=\"primary\"\n      />\n    ),\n    header: <DialogHeader title={title} />,\n    onClose: onComplete,\n    type: 'dialog',\n  }\n\n  if (!enabled) return null\n  return {\n    dialog: dialogOpen && dialog,\n    disabled: isInitialLoading || !documentExists || liveEdit,\n    label: title,\n    icon: CalendarIcon,\n    onHandle: handleDialogOpen,\n    title: tooltip && (\n      <Box style={{maxWidth: '315px'}}>\n        <Text size={1}>{tooltip}</Text>\n      </Box>\n    ),\n  }\n}\n","import {type DocumentActionComponent, type DocumentActionsContext} from '../../../../config'\nimport {ScheduleAction} from './ScheduleAction'\n\ntype Action = DocumentActionComponent\n\nexport default function resolveDocumentActions(\n  existingActions: Action[],\n  context: DocumentActionsContext,\n): Action[] {\n  if (context.versionType === 'published') {\n    return existingActions\n  }\n\n  // Add schedule action after default publish action\n  const index = existingActions.findIndex((a) => a.action === 'publish')\n  if (index < 0) {\n    return [ScheduleAction, ...existingActions]\n  }\n  return existingActions.flatMap((action) =>\n    action.action === 'publish' ? [action, ScheduleAction] : action,\n  )\n}\n","import {format} from 'date-fns'\n\nimport {type DocumentBadgeComponent} from '../../../../config/document/badges'\nimport {DATE_FORMAT, SCHEDULE_ACTION_DICTIONARY} from '../../../constants'\nimport usePollSchedules from '../../../hooks/usePollSchedules'\nimport {debugWithName} from '../../../utils/debug'\n\nconst debug = debugWithName('ScheduledBadge')\n\n/**\n * @beta\n */\nexport const ScheduledBadge: DocumentBadgeComponent = (props) => {\n  // Poll for document schedules\n  const {schedules} = usePollSchedules({documentId: props.id, state: 'scheduled'})\n  debug('schedules', schedules)\n\n  const upcomingSchedule = schedules?.[0]\n\n  if (!upcomingSchedule || !upcomingSchedule.executeAt || !upcomingSchedule.action) {\n    return null\n  }\n\n  const formattedDateTime = format(new Date(upcomingSchedule.executeAt), DATE_FORMAT.LARGE)\n\n  return {\n    color: SCHEDULE_ACTION_DICTIONARY[upcomingSchedule.action].badgeColor,\n    label: `Scheduled`,\n    title: `${\n      SCHEDULE_ACTION_DICTIONARY[upcomingSchedule.action].actionName\n    } on ${formattedDateTime} (local time)`,\n  }\n}\n","import {type DocumentBadgeComponent} from '../../../../config'\nimport {ScheduledBadge} from './ScheduledBadge'\n\nexport default function resolveDocumentBadges(\n  existingBadges: DocumentBadgeComponent[],\n): DocumentBadgeComponent[] {\n  return [...existingBadges, ScheduledBadge]\n}\n","import {CalendarIcon, WarningOutlineIcon} from '@sanity/icons'\nimport {type ValidationMarker} from '@sanity/types'\nimport {Badge, Box, Card, Flex, Inline, Stack, Text} from '@sanity/ui'\nimport {format} from 'date-fns'\n\nimport {DATE_FORMAT, DOCUMENT_HAS_ERRORS_TEXT} from '../../constants'\nimport usePollSchedules from '../../hooks/usePollSchedules'\nimport {usePublishedId} from '../../hooks/usePublishedId'\nimport {useScheduledPublishingEnabled} from '../../tool/contexts/ScheduledPublishingEnabledProvider'\nimport {useValidationState} from '../../utils/validationUtils'\n\ninterface Props {\n  id: string\n  markers: ValidationMarker[]\n}\n\nexport function ScheduleBanner(props: Props) {\n  const {id, markers} = props\n  const publishedId = usePublishedId(id)\n  const {hasError} = useValidationState(markers)\n  const {schedules} = usePollSchedules({documentId: publishedId, state: 'scheduled'})\n  const {mode} = useScheduledPublishingEnabled()\n\n  const hasSchedules = schedules.length > 0\n  if (!hasSchedules) {\n    return null\n  }\n\n  return (\n    <Box marginBottom={4}>\n      {mode === 'upsell' && (\n        <Card tone=\"caution\" padding={3} radius={3} shadow={1} marginBottom={3}>\n          <Flex align=\"center\" gap={3} padding={1}>\n            <Text muted size={1}>\n              <WarningOutlineIcon />\n            </Text>\n            <Text muted size={1} weight=\"medium\">\n              Scheduled publishing is not available on your current plan\n            </Text>\n          </Flex>\n        </Card>\n      )}\n      <Card\n        padding={3}\n        radius={1}\n        shadow={1}\n        tone={hasError ? 'critical' : 'primary'}\n        style={mode === 'upsell' ? {opacity: 0.7} : undefined}\n      >\n        <Stack space={2}>\n          <Flex align=\"center\" gap={3} marginBottom={1} padding={1}>\n            <Text muted size={1}>\n              <CalendarIcon />\n            </Text>\n            <Text muted size={1}>\n              <span style={{fontWeight: 600}}>Upcoming schedule</span> (local time)\n            </Text>\n          </Flex>\n\n          <Stack space={2}>\n            {schedules.map((schedule) => {\n              if (!schedule.executeAt) {\n                return null\n              }\n              const formattedDateTime = format(new Date(schedule.executeAt), DATE_FORMAT.LARGE)\n              return (\n                <Inline key={schedule.id} space={2}>\n                  <Text muted size={1}>\n                    {formattedDateTime}\n                  </Text>\n                  {/* HACK: Hide non unpublish schedules to maintain layout */}\n                  <Flex style={{opacity: schedule.action === 'unpublish' ? 1 : 0}}>\n                    <Badge fontSize={0} mode=\"outline\">\n                      {schedule.action}\n                    </Badge>\n                  </Flex>\n                </Inline>\n              )\n            })}\n          </Stack>\n\n          {hasError && (\n            <Box marginTop={3}>\n              <Text muted size={1} weight=\"regular\">\n                {DOCUMENT_HAS_ERRORS_TEXT}\n              </Text>\n            </Box>\n          )}\n        </Stack>\n      </Card>\n    </Box>\n  )\n}\n","import {type ValidationMarker} from '@sanity/types'\nimport {type PropsWithChildren, useMemo} from 'react'\n\nimport {type InputProps} from '../../../form/types'\nimport {ScheduleBanner} from './ScheduleBanner'\n\nexport function ScheduledDocumentInput(props: PropsWithChildren<InputProps>) {\n  const {value, validation, children} = props\n  const doc: {_id?: string} = value as unknown as {_id: string}\n\n  const markers: ValidationMarker[] = useMemo(\n    () =>\n      validation.map((v) => ({\n        level: v.level,\n        path: v.path,\n        item: {message: v.message},\n        message: v.message,\n      })),\n    [validation],\n  )\n\n  return (\n    <>\n      {doc?._id ? <ScheduleBanner id={doc._id} markers={markers} /> : null}\n      {children}\n    </>\n  )\n}\n","import {type ComponentType} from 'react'\n\nimport {type InputProps} from '../../form'\nimport {ScheduledDocumentInput} from '../components/documentWrapper/ScheduledDocumentInput'\n\nexport const DocumentBannerInput: ComponentType<InputProps> = (props) => {\n  const {schemaType} = props\n  const rootType = getRootType(schemaType)\n  if (rootType.name === 'document') {\n    return <ScheduledDocumentInput {...props}>{props.renderDefault(props)}</ScheduledDocumentInput>\n  }\n  return props.renderDefault(props)\n}\n\nfunction getRootType(type: any): any {\n  if (!type.type) {\n    return type\n  }\n  return getRootType(type.type)\n}\n","import {ConditionalWrapper} from '../../../ui-components/conditionalWrapper'\nimport {type LayoutProps} from '../../config/studio/types'\nimport {\n  ScheduledPublishingEnabledProvider,\n  useScheduledPublishingEnabled,\n} from '../tool/contexts/ScheduledPublishingEnabledProvider'\nimport {SchedulePublishingUpsellProvider} from '../tool/contexts/SchedulePublishingUpsellProvider'\n\nfunction SchedulePublishingStudioLayoutInner(props: LayoutProps) {\n  const {enabled, mode} = useScheduledPublishingEnabled()\n  if (!enabled) {\n    return props.renderDefault(props)\n  }\n\n  return (\n    <ConditionalWrapper\n      condition={mode === 'upsell'}\n      // eslint-disable-next-line react/jsx-no-bind\n      wrapper={(children) => (\n        <SchedulePublishingUpsellProvider>{children}</SchedulePublishingUpsellProvider>\n      )}\n    >\n      {props.renderDefault(props)}\n    </ConditionalWrapper>\n  )\n}\n\nexport function SchedulePublishingStudioLayout(props: LayoutProps) {\n  return (\n    <ScheduledPublishingEnabledProvider>\n      <SchedulePublishingStudioLayoutInner {...props} />\n    </ScheduledPublishingEnabledProvider>\n  )\n}\n","import {CalendarIcon} from '@sanity/icons'\nimport {route} from 'sanity/router'\n\nimport {definePlugin} from '../../config'\nimport {SCHEDULED_PUBLISHING_TOOL_NAME, TOOL_TITLE} from '../constants'\nimport Tool from '../tool/Tool'\nimport resolveDocumentActions from './documentActions/schedule'\nimport resolveDocumentBadges from './documentBadges/scheduled'\nimport {DocumentBannerInput} from './inputResolver'\nimport {SchedulePublishingStudioLayout} from './SchedulePublishingStudioLayout'\n\nexport {EditScheduleForm} from '../components/editScheduleForm/EditScheduleForm'\nexport {resolveDocumentActions, resolveDocumentBadges}\nexport {type Schedule} from '../types'\n\n/**\n * @internal\n */\nexport const SCHEDULED_PUBLISHING_NAME = 'sanity/scheduled-publishing'\n\n/**\n * @internal\n */\nexport const scheduledPublishing = definePlugin({\n  // Renamed from 'scheduled-publishing' to 'sanity/scheduled-publishing' to avoid duplicates, see packages/sanity/src/core/config/flattenConfig.ts - DEPRECATED_PLUGINS.\n  name: SCHEDULED_PUBLISHING_NAME,\n\n  document: {\n    actions: (prev, context) => resolveDocumentActions(prev, context),\n    badges: (prev) => resolveDocumentBadges(prev),\n  },\n\n  form: {\n    components: {\n      input: DocumentBannerInput,\n    },\n  },\n  studio: {\n    components: {\n      layout: SchedulePublishingStudioLayout,\n    },\n  },\n\n  tools: (prev) => {\n    return [\n      ...prev,\n      {\n        name: SCHEDULED_PUBLISHING_TOOL_NAME,\n        title: TOOL_TITLE,\n        icon: CalendarIcon,\n        component: Tool,\n        router: route.create('/', [route.create('/state/:state'), route.create('/date/:date')]),\n        __internalApplicationType: 'sanity/scheduled-publishing',\n      },\n    ]\n  },\n})\n","import {type LocaleResourceBundle} from '../../i18n'\n\n/**\n * The locale namespace for the task tool\n *\n * @public\n */\nexport const tasksLocaleNamespace = 'tasks' as const\n\n/**\n * The default locale bundle for the task tool, which is US English.\n *\n * @internal\n */\nexport const tasksUsEnglishLocaleBundle: LocaleResourceBundle = {\n  locale: 'en-US',\n  namespace: tasksLocaleNamespace,\n  resources: () => import('./resources'),\n}\n\n/**\n * The locale resource keys for the task tool.\n *\n * @alpha\n * @hidden\n */\nexport type {TasksLocaleResourceKeys} from './resources'\n","import {useMemo} from 'react'\nimport {TasksEnabledContext} from 'sanity/_singletons'\n\nimport {useFeatureEnabled} from '../../../hooks/useFeatureEnabled'\nimport {useWorkspace} from '../../../studio/workspace'\nimport {type TasksEnabledContextValue} from './types'\n\ninterface TaksEnabledProviderProps {\n  children: React.ReactNode\n}\n\n/**\n * @internal\n */\nexport function TasksEnabledProvider({children}: TaksEnabledProviderProps) {\n  const {enabled, isLoading, error} = useFeatureEnabled('sanityTasks')\n\n  const isWorkspaceEnabled = useWorkspace().tasks?.enabled\n\n  const value: TasksEnabledContextValue = useMemo(() => {\n    if (!isWorkspaceEnabled || isLoading || error) {\n      return {\n        enabled: false,\n        mode: null,\n      }\n    }\n    return {\n      enabled: true,\n      mode: enabled ? 'default' : 'upsell',\n    }\n  }, [enabled, isLoading, isWorkspaceEnabled, error])\n\n  return <TasksEnabledContext.Provider value={value}>{children}</TasksEnabledContext.Provider>\n}\n","import {useContext} from 'react'\nimport {TasksEnabledContext} from 'sanity/_singletons'\n\nimport {type TasksEnabledContextValue} from './types'\n\n/**\n * @internal\n */\nexport function useTasksEnabled(): TasksEnabledContextValue {\n  return useContext(TasksEnabledContext)\n}\n","import {IsLastPaneContext} from 'sanity/_singletons'\n\ninterface IsLastPaneProviderProps {\n  isLastPane: boolean\n  children: React.ReactNode\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function IsLastPaneProvider({\n  children,\n  isLastPane,\n}: IsLastPaneProviderProps): React.JSX.Element {\n  return <IsLastPaneContext.Provider value={isLastPane}>{children}</IsLastPaneContext.Provider>\n}\n","import {useContext} from 'react'\nimport {IsLastPaneContext} from 'sanity/_singletons'\n\n/**\n * @internal\n * @hidden\n */\nexport function useIsLastPane(): boolean {\n  return useContext(IsLastPaneContext)\n}\n","import {type SanityDocument} from '@sanity/client'\nimport {useMemo, useState} from 'react'\nimport {MentionUserContext} from 'sanity/_singletons'\n\nimport {useUserListWithPermissions} from '../../../hooks'\n\n/**\n * @internal\n */\nexport function MentionUserProvider(props: {children: React.ReactNode}) {\n  const [selectedDocument, setSelectedDocument] = useState<SanityDocument | null>(null)\n  const mentionOptions = useUserListWithPermissions({\n    documentValue: selectedDocument,\n    permission: 'read',\n  })\n\n  const value = useMemo(\n    () => ({\n      mentionOptions,\n      selectedDocument,\n      setSelectedDocument,\n    }),\n    [mentionOptions, selectedDocument, setSelectedDocument],\n  )\n\n  return <MentionUserContext.Provider value={value}>{props.children}</MentionUserContext.Provider>\n}\n","import {useContext} from 'react'\nimport {MentionUserContext} from 'sanity/_singletons'\n\nimport {type MentionUserContextValue} from './types'\n\n/**\n * @internal\n */\nexport function useMentionUser(): MentionUserContextValue {\n  const context = useContext(MentionUserContext)\n  if (!context) {\n    throw new Error('useMentionUser must be used within a MentionUserProvider')\n  }\n  return context\n}\n","import {defineEvent} from '@sanity/telemetry'\n\n// Task is created.\nexport const TaskCreated = defineEvent({\n  name: 'Task Created',\n  version: 1,\n  description: 'A task is created',\n})\n\n// Task status changed. %from% - %to%\nexport const TaskStatusChanged = defineEvent<{\n  from: string\n  to: string\n}>({\n  name: 'Task Status Changed',\n  version: 1,\n  description: 'Task status changed',\n})\n\n// A task is duplicated\nexport const TaskDuplicated = defineEvent({\n  name: 'Task Duplicated',\n  version: 1,\n  description: 'A task is duplicated',\n})\n\n// A task is removed\nexport const TaskRemoved = defineEvent({\n  name: 'Task Removed',\n  version: 1,\n  description: 'A task is removed',\n})\n\n// The link to a task is copied\nexport const TaskLinkCopied = defineEvent({\n  name: 'Task Link Copied',\n  version: 1,\n  description: 'The link to a task is copied',\n})\n\n// User visited the studio through a link with a task\nexport const TaskLinkOpened = defineEvent({\n  name: 'Task Link Opened',\n  version: 1,\n  description: 'User visited the studio through a link with a task',\n})\n","import {useTelemetry} from '@sanity/telemetry/react'\nimport {useToast} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {type ReactNode, useCallback, useEffect, useMemo, useReducer} from 'react'\nimport {TasksNavigationContext} from 'sanity/_singletons'\nimport {useRouter} from 'sanity/router'\n\nimport {TaskLinkCopied, TaskLinkOpened} from '../../__telemetry__/tasks.telemetry'\nimport {type Action, type SidebarTabsIds, type State, type ViewModeOptions} from './types'\n\nconst initialState: State = {\n  viewMode: 'list',\n  selectedTask: null,\n  activeTabId: 'assigned',\n  duplicateTaskValues: null,\n  isOpen: false,\n}\n\nfunction reducer(state: State, action: Action): State {\n  switch (action.type) {\n    case 'TOGGLE_TASKS_VIEW': {\n      if (action.payload === false) {\n        return {\n          ...initialState,\n          isOpen: action.payload,\n        }\n      }\n      return {\n        ...state,\n        isOpen: action.payload,\n      }\n    }\n    case 'CREATE_TASK':\n      return {\n        ...state,\n        viewMode: 'create',\n        selectedTask: uuid(),\n      }\n    case 'EDIT_TASK':\n      return {\n        ...state,\n        viewMode: 'edit',\n        selectedTask: action.payload.id,\n      }\n    case 'EDIT_DRAFT':\n      return {\n        ...state,\n        viewMode: 'draft',\n        selectedTask: action.payload.id,\n      }\n    case 'DUPLICATE_TASK':\n      return {\n        ...state,\n        viewMode: 'duplicate',\n        selectedTask: uuid(),\n        duplicateTaskValues: action.payload.duplicateTaskValues,\n      }\n    case 'SET_ACTIVE_TAB':\n      return {\n        ...state,\n        viewMode: 'list',\n        activeTabId: action.payload,\n      }\n    case 'NAVIGATE_TO_LIST':\n      return {\n        ...state,\n        viewMode: 'list',\n      }\n    default:\n      return state\n  }\n}\n\nexport const TasksNavigationProvider = ({children}: {children: ReactNode}) => {\n  const [state, dispatch] = useReducer(reducer, initialState)\n  const router = useRouter()\n  const toast = useToast()\n  const telemetry = useTelemetry()\n\n  const setViewMode = useCallback((viewMode: ViewModeOptions) => {\n    switch (viewMode.type) {\n      case 'list':\n        dispatch({type: 'NAVIGATE_TO_LIST'})\n        break\n      case 'create':\n        dispatch({type: 'CREATE_TASK'})\n        break\n      case 'edit':\n        dispatch({type: 'EDIT_TASK', payload: {id: viewMode.id}})\n        break\n      case 'duplicate':\n        dispatch({\n          type: 'DUPLICATE_TASK',\n          payload: {duplicateTaskValues: viewMode.duplicateTaskValues},\n        })\n        break\n      case 'draft':\n        dispatch({type: 'EDIT_DRAFT', payload: {id: viewMode.id}})\n        break\n      default:\n        break\n    }\n  }, [])\n\n  const setActiveTab = useCallback((tabId: SidebarTabsIds) => {\n    dispatch({type: 'SET_ACTIVE_TAB', payload: tabId})\n  }, [])\n\n  const handleCloseTasks = useCallback(() => {\n    dispatch({type: 'TOGGLE_TASKS_VIEW', payload: false})\n  }, [])\n\n  const handleOpenTasks = useCallback(() => {\n    dispatch({type: 'TOGGLE_TASKS_VIEW', payload: true})\n  }, [])\n\n  const handleCopyLinkToTask = useCallback(() => {\n    const url = new URL(window.location.href)\n    url.searchParams.set('sidebar', 'tasks')\n    url.searchParams.set('viewMode', state.viewMode)\n    if (state.selectedTask) {\n      url.searchParams.set('selectedTask', state.selectedTask)\n    }\n    navigator.clipboard\n      .writeText(url.toString())\n      .then(() => {\n        telemetry.log(TaskLinkCopied)\n      })\n      .catch(() => {\n        toast.push({\n          closable: true,\n          status: 'error',\n          title: 'Failed to copy link to clipboard',\n        })\n      })\n  }, [state.selectedTask, state.viewMode, telemetry, toast])\n\n  const searchParams = new URLSearchParams(router.state._searchParams)\n  const sidebar = searchParams.get('sidebar')\n  const viewMode = searchParams.get('viewMode')\n  const selectedTask = searchParams.get('selectedTask')\n\n  useEffect(() => {\n    // listen to the URL to open the tasks view if the sidebar is set to task.\n    if (sidebar !== 'tasks') {\n      return\n    }\n    dispatch({type: 'TOGGLE_TASKS_VIEW', payload: true})\n    if (viewMode === 'edit' && selectedTask) {\n      dispatch({type: 'EDIT_TASK', payload: {id: selectedTask}})\n      telemetry.log(TaskLinkOpened)\n    }\n  }, [selectedTask, sidebar, telemetry, viewMode])\n\n  const value = useMemo(\n    () => ({\n      state,\n      setViewMode,\n      setActiveTab,\n      handleCloseTasks,\n      handleOpenTasks,\n      handleCopyLinkToTask,\n    }),\n    [handleCloseTasks, handleCopyLinkToTask, handleOpenTasks, setActiveTab, setViewMode, state],\n  )\n\n  return <TasksNavigationContext.Provider value={value}>{children}</TasksNavigationContext.Provider>\n}\n","import {useContext} from 'react'\nimport {TasksNavigationContext} from 'sanity/_singletons'\n\nimport {type TasksNavigationContextValue} from './types'\n\nexport function useTasksNavigation(): TasksNavigationContextValue {\n  const context = useContext(TasksNavigationContext)\n\n  if (!context) {\n    // Providers are not mounted when tasks enabled is disabled, but we still need to provide a\n    // default value for the context to avoid runtime errors in `TasksFooterAction` and `TaskCreateAction`\n    return FALLBACK_CONTEXT_VALUE\n  }\n\n  return context\n}\n\nconst FALLBACK_CONTEXT_VALUE = {\n  state: {\n    activeTabId: 'assigned',\n    viewMode: 'list',\n    selectedTask: null,\n    isOpen: false,\n    duplicateTaskValues: null,\n  },\n  setActiveTab: () => null,\n  setViewMode: () => null,\n  handleCloseTasks: () => null,\n  handleCopyLinkToTask: () => null,\n  handleOpenTasks: () => null,\n} satisfies TasksNavigationContextValue\n","import {type TaskDocument, type TaskPostPayload} from '../types'\n\ninterface TaskAddedAction {\n  payload: TaskDocument | TaskPostPayload\n  type: 'TASK_ADDED'\n}\n\ninterface TaskDeletedAction {\n  id: string\n  type: 'TASK_DELETED'\n}\n\ninterface TaskUpdatedAction {\n  payload: TaskDocument | Partial<TaskPostPayload>\n  type: 'TASK_UPDATED'\n}\n\ninterface TasksSetAction {\n  tasks: TaskDocument[]\n  type: 'TASKS_SET'\n}\n\ninterface TaskReceivedAction {\n  payload: TaskDocument\n  type: 'TASK_RECEIVED'\n}\n\nexport type TasksReducerAction =\n  | TaskAddedAction\n  | TaskDeletedAction\n  | TaskUpdatedAction\n  | TasksSetAction\n  | TaskReceivedAction\n\nexport interface TasksReducerState {\n  tasks: Record<string, TaskDocument>\n}\n\n/**\n * Transform an array of tasks into an object with the task id as key:\n * ```\n * {\n *  'task-1': { _id: 'task-1', ... },\n *  'task-2': { _id: 'task-2', ... },\n * }\n * ```\n */\nfunction createTasksSet(tasks: TaskDocument[]) {\n  const tasksById = tasks.reduce((acc, task) => ({...acc, [task._id]: task}), {})\n  return tasksById\n}\n\nexport function tasksReducer(\n  state: TasksReducerState,\n  action: TasksReducerAction,\n): TasksReducerState {\n  switch (action.type) {\n    case 'TASKS_SET': {\n      // Create an object with the task id as key\n      const tasksById = createTasksSet(action.tasks)\n\n      return {\n        ...state,\n        tasks: tasksById,\n      }\n    }\n\n    case 'TASK_ADDED': {\n      const nextTaskResult = action.payload as TaskDocument\n      const nextTaskValue = nextTaskResult satisfies TaskDocument\n\n      const nextTask = {\n        [nextTaskResult._id]: {\n          ...state.tasks[nextTaskResult._id],\n          ...nextTaskValue,\n          _state: nextTaskResult._state || undefined,\n          // If the task 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 tasks correctly.\n          // Therefore, we set the createdAt date to the current date here if it's missing while creating the task.\n          // Once the task is created and received from the server, the createdAt date will be updated to the correct value.\n          _createdAt: nextTaskResult._createdAt || new Date().toISOString(),\n        } satisfies TaskDocument,\n      }\n\n      return {\n        ...state,\n        tasks: {\n          ...state.tasks,\n          ...nextTask,\n        },\n      }\n    }\n\n    case 'TASK_RECEIVED': {\n      const nextTaskResult = action.payload as TaskDocument\n\n      return {\n        ...state,\n        tasks: {\n          ...state.tasks,\n          [nextTaskResult._id]: nextTaskResult,\n        },\n      }\n    }\n\n    case 'TASK_DELETED': {\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      const {[action.id]: _, ...restTasks} = state.tasks\n\n      return {\n        ...state,\n        tasks: restTasks,\n      }\n    }\n\n    case 'TASK_UPDATED': {\n      const updatedTask = action.payload\n      const id = updatedTask._id as string\n      const task = state.tasks[id]\n\n      const nextTask = {\n        // Add existing task data\n        ...task,\n        // Add incoming task data\n        ...updatedTask,\n      } satisfies TaskDocument\n\n      return {\n        ...state,\n        tasks: {\n          ...state.tasks,\n          [id]: nextTask,\n        },\n      }\n    }\n\n    default:\n      return state\n  }\n}\n","import {type ListenEvent, type ListenOptions} from '@sanity/client'\nimport {useCallback, useEffect, useMemo, useReducer, useState} from 'react'\nimport {catchError, of} from 'rxjs'\n\nimport {useAddonDataset} from '../../studio'\nimport {getPublishedId} from '../../util'\nimport {type Loadable, type TaskDocument} from '../types'\nimport {tasksReducer, type TasksReducerAction, type TasksReducerState} from './reducer'\n\nexport interface TasksStoreOptions {\n  documentId?: string\n}\n\ninterface TasksStoreReturnType extends Loadable<TaskDocument[]> {\n  dispatch: React.Dispatch<TasksReducerAction>\n}\n\nconst INITIAL_STATE: TasksReducerState = {\n  tasks: {},\n}\n\nconst LISTEN_OPTIONS: ListenOptions = {\n  events: ['welcome', 'mutation', 'reconnect'],\n  includeResult: true,\n  visibility: 'query',\n  includeAllVersions: true,\n  tag: 'tasks-store',\n}\n\nexport const SORT_FIELD = '_createdAt'\nexport const SORT_ORDER = 'desc'\n\nconst QUERY_FILTERS = [`_type == \"tasks.task\"`]\n\nconst QUERY_PROJECTION = `{\n  ...,\n}`\n\n// Newest tasks first\nconst QUERY_SORT_ORDER = `order(${SORT_FIELD} ${SORT_ORDER})`\n\nconst QUERY = `*[${QUERY_FILTERS.join(' && ')}] ${QUERY_PROJECTION} | ${QUERY_SORT_ORDER}`\n\nexport function useTasksStore(opts: TasksStoreOptions): TasksStoreReturnType {\n  const {client} = useAddonDataset()\n  const {documentId} = opts\n\n  const [state, dispatch] = useReducer(tasksReducer, INITIAL_STATE)\n  const [isLoading, setIsLoading] = useState<boolean>(client !== null)\n  const [error, setError] = useState<Error | null>(null)\n\n  const params = useMemo(\n    () => ({documentId: documentId ? getPublishedId(documentId) : null}),\n    [documentId],\n  )\n\n  const initialFetch = useCallback(async () => {\n    if (!client) {\n      setIsLoading(false)\n      return\n    }\n\n    try {\n      const res = await client.fetch(QUERY, params)\n      dispatch({type: 'TASKS_SET', tasks: res})\n      setIsLoading(false)\n    } catch (err) {\n      setError(err)\n    }\n  }, [client, params])\n\n  const handleListenerEvent = useCallback(\n    async (event: ListenEvent<Record<string, TaskDocument>>) => {\n      // Fetch all tasks on initial connection\n      if (event.type === 'welcome') {\n        setIsLoading(true)\n        await initialFetch()\n        setIsLoading(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 tasks again (above).\n      if (event.type === 'reconnect') {\n        setIsLoading(true)\n      }\n\n      // Handle mutations (create, update, delete) from the realtime listener\n      // and update the tasks store accordingly\n      if (event.type === 'mutation') {\n        if (event.transition === 'appear') {\n          const nextTask = event.result as TaskDocument | undefined\n\n          if (nextTask) {\n            dispatch({\n              type: 'TASK_RECEIVED',\n              payload: nextTask,\n            })\n          }\n        }\n\n        if (event.transition === 'disappear') {\n          dispatch({type: 'TASK_DELETED', id: event.documentId})\n        }\n\n        if (event.transition === 'update') {\n          const updatedTask = event.result as TaskDocument | undefined\n\n          if (updatedTask) {\n            dispatch({\n              type: 'TASK_UPDATED',\n              payload: updatedTask,\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 tasks object to array\n  const tasksAsArray = useMemo(() => Object.values(state.tasks), [state.tasks])\n\n  return {\n    data: tasksAsArray,\n    dispatch,\n    error,\n    isLoading,\n  }\n}\n","import {debounce} from 'lodash'\nimport {useMemo, useState} from 'react'\nimport {TasksContext} from 'sanity/_singletons'\n\nimport {useTasksStore} from '../../store'\nimport {type ActiveDocument, type TasksContextValue} from './types'\n\ninterface TasksProviderProps {\n  children: React.ReactNode\n}\n\nconst EMPTY_ARRAY: [] = []\n\n/**\n * @internal\n */\nexport function TasksProvider(props: TasksProviderProps) {\n  const {children} = props\n  const [activeDocument, setActiveDocument] = useState<ActiveDocument | null>(null)\n  const {data = EMPTY_ARRAY, isLoading} = useTasksStore({})\n\n  // This change is debounced to wait until the next document loads if we are switching between documents.\n  const debouncedSetActiveDocument = useMemo(() => debounce(setActiveDocument, 1000), [])\n\n  const value: TasksContextValue = useMemo(\n    () => ({\n      activeDocument,\n      setActiveDocument: debouncedSetActiveDocument,\n      isLoading,\n      data: data ?? [],\n    }),\n    [activeDocument, data, isLoading, debouncedSetActiveDocument],\n  )\n\n  return <TasksContext.Provider value={value}>{children}</TasksContext.Provider>\n}\n","import {useContext} from 'react'\nimport {TasksContext} from 'sanity/_singletons'\n\nimport {type TasksContextValue} from './types'\n\n/**\n * @internal\n */\nexport function useTasks(): TasksContextValue {\n  const context = useContext(TasksContext)\n  if (!context) {\n    // Providers are not mounted when tasks enabled is disabled, but we still need to provide a\n    // default value for the context to avoid runtime errors in `TasksFooterAction` and `TaskCreateAction`\n    return {\n      activeDocument: null,\n      setActiveDocument: () => null,\n      data: [],\n      isLoading: false,\n    }\n  }\n\n  return context\n}\n","import {useTelemetry} from '@sanity/telemetry/react'\nimport {template} from 'lodash'\nimport {useCallback, useEffect, useMemo, useState} from 'react'\nimport {TasksUpsellContext} from 'sanity/_singletons'\n\nimport {useClient, useProjectId} from '../../../hooks'\nimport {\n  UpsellDialogDismissed,\n  UpsellDialogLearnMoreCtaClicked,\n  UpsellDialogUpgradeCtaClicked,\n  UpsellDialogViewed,\n  type UpsellDialogViewedInfo,\n} from '../../../studio'\nimport {type UpsellData} from '../../../studio/upsell/types'\nimport {UpsellDialog} from '../../../studio/upsell/UpsellDialog'\nimport {type TasksUpsellContextValue} from './types'\n\nconst FEATURE = 'tasks'\nconst TEMPLATE_OPTIONS = {interpolate: /{{([\\s\\S]+?)}}/g}\nconst BASE_URL = 'www.sanity.io'\n// Date when the change from array to object in the data returned was introduced.\nconst API_VERSION = '2024-04-19'\n\n/**\n * @beta\n * @hidden\n */\nexport function TasksUpsellProvider(props: {children: React.ReactNode}) {\n  const [upsellDialogOpen, setUpsellDialogOpen] = useState(false)\n  const [upsellData, setUpsellData] = useState<UpsellData | null>(null)\n  const projectId = useProjectId()\n  const telemetry = useTelemetry()\n  const client = useClient({apiVersion: API_VERSION})\n\n  const telemetryLogs = useMemo(\n    (): TasksUpsellContextValue['telemetryLogs'] => ({\n      dialogSecondaryClicked: () =>\n        telemetry.log(UpsellDialogLearnMoreCtaClicked, {\n          feature: FEATURE,\n          type: 'modal',\n        }),\n      dialogPrimaryClicked: () =>\n        telemetry.log(UpsellDialogUpgradeCtaClicked, {\n          feature: FEATURE,\n          type: 'modal',\n        }),\n      panelViewed: (source) =>\n        telemetry.log(UpsellDialogViewed, {\n          feature: FEATURE,\n          type: 'inspector',\n          source,\n        }),\n      panelDismissed: () =>\n        telemetry.log(UpsellDialogDismissed, {\n          feature: FEATURE,\n          type: 'inspector',\n        }),\n      panelPrimaryClicked: () =>\n        telemetry.log(UpsellDialogUpgradeCtaClicked, {\n          feature: FEATURE,\n          type: 'inspector',\n        }),\n      panelSecondaryClicked: () =>\n        telemetry.log(UpsellDialogLearnMoreCtaClicked, {\n          feature: FEATURE,\n          type: 'inspector',\n        }),\n    }),\n    [telemetry],\n  )\n\n  const handlePrimaryButtonClick = useCallback(() => {\n    telemetryLogs.dialogPrimaryClicked()\n  }, [telemetryLogs])\n\n  const handleSecondaryButtonClick = useCallback(() => {\n    telemetryLogs.dialogSecondaryClicked()\n  }, [telemetryLogs])\n\n  const handleClose = useCallback(() => {\n    setUpsellDialogOpen(false)\n    telemetry.log(UpsellDialogDismissed, {\n      feature: FEATURE,\n      type: 'modal',\n    })\n  }, [telemetry])\n\n  useEffect(() => {\n    const data$ = client.observable.request<UpsellData | null>({\n      uri: '/journey/tasks',\n    })\n\n    const sub = data$.subscribe({\n      next: (data) => {\n        if (!data) return\n        try {\n          const ctaUrl = template(data.ctaButton.url, TEMPLATE_OPTIONS)\n          data.ctaButton.url = ctaUrl({baseUrl: BASE_URL, projectId})\n\n          const secondaryUrl = template(data.secondaryButton.url, TEMPLATE_OPTIONS)\n          data.secondaryButton.url = secondaryUrl({baseUrl: BASE_URL, projectId})\n          setUpsellData(data)\n        } catch (e) {\n          // silently fail\n        }\n      },\n      error: () => {\n        // silently fail\n      },\n    })\n\n    return () => {\n      sub.unsubscribe()\n    }\n  }, [client, projectId])\n\n  const handleOpenDialog = useCallback(\n    (source: UpsellDialogViewedInfo['source']) => {\n      setUpsellDialogOpen(true)\n\n      telemetry.log(UpsellDialogViewed, {\n        feature: FEATURE,\n        type: 'modal',\n        source,\n      })\n    },\n    [telemetry],\n  )\n\n  const ctxValue = useMemo<TasksUpsellContextValue>(\n    () => ({\n      upsellDialogOpen,\n      handleOpenDialog,\n      upsellData,\n      telemetryLogs,\n    }),\n    [handleOpenDialog, upsellDialogOpen, upsellData, telemetryLogs],\n  )\n\n  return (\n    <TasksUpsellContext.Provider value={ctxValue}>\n      {props.children}\n      {upsellData && upsellDialogOpen && (\n        <UpsellDialog\n          data={upsellData}\n          onClose={handleClose}\n          onPrimaryClick={handlePrimaryButtonClick}\n          onSecondaryClick={handleSecondaryButtonClick}\n        />\n      )}\n    </TasksUpsellContext.Provider>\n  )\n}\n","import {useContext} from 'react'\nimport {TasksUpsellContext} from 'sanity/_singletons'\n\nimport {type TasksUpsellContextValue} from './types'\n\n/**\n * @beta\n * @hidden\n */\nexport function useTasksUpsell(): TasksUpsellContextValue {\n  const value = useContext(TasksUpsellContext)\n\n  if (!value) {\n    // Instead of throwing, we return a dummy value to avoid breaking the tasks create action implementation, given the context is optional.\n    return FALLBACK_CONTEXT_VALUE\n  }\n  return value\n}\n\nconst FALLBACK_CONTEXT_VALUE = {\n  upsellData: null,\n  handleOpenDialog: () => null,\n  upsellDialogOpen: false,\n  telemetryLogs: {\n    dialogSecondaryClicked: () => null,\n    dialogPrimaryClicked: () => null,\n    panelViewed: () => null,\n    panelDismissed: () => null,\n    panelPrimaryClicked: () => null,\n    panelSecondaryClicked: () => null,\n  },\n} satisfies TasksUpsellContextValue\n","import {TaskIcon} from '@sanity/icons'\nimport {useCallback, useMemo} from 'react'\n\nimport {type DocumentActionDescription} from '../../config'\nimport {useTranslation} from '../../i18n'\nimport {useTasksEnabled, useTasksNavigation, useTasksUpsell} from '../context'\nimport {tasksLocaleNamespace} from '../i18n'\n\nexport function TaskCreateAction(): DocumentActionDescription | null {\n  const {handleOpenTasks, setViewMode} = useTasksNavigation()\n  const {enabled, mode} = useTasksEnabled()\n  const {handleOpenDialog} = useTasksUpsell()\n\n  const handleCreateTaskFromDocument = useCallback(() => {\n    if (mode === 'upsell') {\n      handleOpenDialog('document_action')\n    } else {\n      handleOpenTasks()\n      setViewMode({type: 'create'})\n    }\n  }, [handleOpenTasks, setViewMode, mode, handleOpenDialog])\n\n  const {t} = useTranslation(tasksLocaleNamespace)\n\n  return useMemo(() => {\n    if (!enabled) return null\n\n    return {\n      icon: TaskIcon,\n      label: t('actions.create.text'),\n      title: t('actions.create.text'),\n      group: ['paneActions'],\n      onHandle: handleCreateTaskFromDocument,\n    }\n  }, [enabled, handleCreateTaskFromDocument, t])\n}\nTaskCreateAction.displayName = 'TaskCreateAction'\n","import {useEffect} from 'react'\n\nimport {getPublishedId, isVersionId} from '../../../util'\nimport {type ActiveDocument, useIsLastPane, useTasks, useTasksEnabled} from '../../context'\n\nfunction SetActiveDocumentInner(document: ActiveDocument) {\n  const {documentId, documentType} = document\n  const isLast = useIsLastPane()\n  const {setActiveDocument} = useTasks()\n\n  useEffect(() => {\n    if (documentId && isLast && documentType) {\n      setActiveDocument?.({\n        // Use the version id if it's a version document.\n        documentId: isVersionId(documentId) ? documentId : getPublishedId(documentId),\n        documentType,\n      })\n    }\n\n    return () => {\n      if (isLast) {\n        setActiveDocument?.(null)\n      }\n    }\n  }, [documentId, documentType, isLast, setActiveDocument])\n\n  return null\n}\n\nexport function SetActiveDocument(document: ActiveDocument) {\n  const {enabled} = useTasksEnabled()\n  if (!enabled) return null\n  return <SetActiveDocumentInner {...document} />\n}\n","import {type ObjectInputProps} from '../../form'\nimport {SetActiveDocument} from './structure/SetActiveDocument'\n\nexport function TasksDocumentInputLayout(props: ObjectInputProps) {\n  const documentId = props.value?._id\n  const documentType = props.value?._type\n\n  return (\n    <>\n      <SetActiveDocument documentId={documentId} documentType={documentType} />\n      {props.renderDefault(props)}\n    </>\n  )\n}\n","import {TaskIcon} from '@sanity/icons'\nimport {Badge, useMediaIndex} from '@sanity/ui'\nimport {useCallback, useMemo} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Button} from '../../../ui-components'\nimport {useTranslation} from '../../i18n'\nimport {useTasks, useTasksNavigation} from '../context'\nimport {tasksLocaleNamespace} from '../i18n'\n\nconst ButtonContainer = styled.div`\n  position: relative;\n  [data-ui='Badge'] {\n    position: absolute;\n    top: -2px;\n    right: -2px;\n  }\n`\n\n/**\n * Button that shows how many pending tasks are assigned to the current document.\n * Clicking it will open the task sidebar, showing the open tasks related to the document.\n * @internal\n */\nexport function TasksFooterOpenTasks() {\n  const {data, activeDocument} = useTasks()\n  const {handleOpenTasks, setActiveTab} = useTasksNavigation()\n  const mediaIndex = useMediaIndex()\n  const pendingTasks = useMemo(\n    () =>\n      activeDocument?.documentId\n        ? data.filter((item) => {\n            return (\n              item.target?.document._ref === activeDocument.documentId &&\n              item.status === 'open' &&\n              item.createdByUser\n            )\n          })\n        : [],\n    [activeDocument, data],\n  )\n  const handleOnClick = useCallback(() => {\n    handleOpenTasks()\n    setActiveTab('document')\n  }, [handleOpenTasks, setActiveTab])\n\n  const {t} = useTranslation(tasksLocaleNamespace)\n\n  if (pendingTasks.length === 0) return null\n\n  if (mediaIndex < 3) {\n    return (\n      <ButtonContainer>\n        <Button\n          mode=\"bleed\"\n          icon={TaskIcon}\n          size={'large'}\n          onClick={handleOnClick}\n          tooltipProps={{\n            content: t('document.footer.open-tasks.placeholder', {\n              count: pendingTasks.length,\n            }),\n          }}\n        />\n        <Badge data-testid=\"tasks-badge\" tone=\"primary\" fontSize={0}>\n          {pendingTasks.length}\n        </Badge>\n      </ButtonContainer>\n    )\n  }\n  return (\n    <Button\n      mode=\"bleed\"\n      tooltipProps={{\n        content: t('document.footer.open-tasks.placeholder', {\n          count: pendingTasks.length,\n        }),\n      }}\n      text={t('document.footer.open-tasks.text', {count: pendingTasks.length})}\n      onClick={handleOnClick}\n    />\n  )\n}\n","import {isPortableTextTextBlock} from '@sanity/types'\n\nimport {getPublishedId} from '../../../util'\nimport {type TaskDocument, type TaskTarget} from '../../types'\n\ninterface GetTargetValueOptions {\n  documentId: string\n  documentType: string\n  dataset: string\n  projectId: string\n}\nexport function getTargetValue({\n  documentId,\n  documentType,\n  dataset,\n  projectId,\n}: GetTargetValueOptions): TaskTarget {\n  return {\n    documentType,\n    document: {\n      _ref: getPublishedId(documentId),\n      _type: 'crossDatasetReference',\n      _dataset: dataset,\n      _projectId: projectId,\n      _weak: true,\n    },\n  }\n}\n\n/**\n * Finds in the description if there are any mentioned user.\n */\nexport function getMentionedUsers(description?: TaskDocument['description']): string[] {\n  if (!description) return []\n  const subscribers: string[] = []\n  description?.forEach((block) => {\n    if (isPortableTextTextBlock(block)) {\n      block.children.forEach((child) => {\n        if (\n          child._type === 'mention' &&\n          typeof child.userId === 'string' &&\n          !subscribers.includes(child.userId)\n        ) {\n          subscribers.push(child.userId)\n        }\n      })\n    }\n  })\n\n  return subscribers\n}\n","import {CalendarIcon, CircleIcon, EditIcon, LinkIcon, UserIcon} from '@sanity/icons'\nimport {TextSkeleton} from '@sanity/ui'\nimport {IntentLink} from 'sanity/router'\nimport {styled} from 'styled-components'\n\nimport {\n  type RelativeTimeOptions,\n  useDateTimeFormat,\n  type UseDateTimeFormatOptions,\n  useRelativeTime,\n  useSchema,\n} from '../../../../hooks'\nimport {useUser} from '../../../../store'\nimport {TASK_STATUS} from '../../../constants'\nimport {useDocumentPreviewValues} from '../../../hooks'\nimport {type TaskTarget} from '../../../types'\nimport {type FieldChange} from './parseTransactions'\n\nconst DATE_FORMAT_OPTIONS: UseDateTimeFormatOptions = {\n  month: 'long',\n  day: '2-digit',\n  minute: '2-digit',\n  hour: '2-digit',\n  second: '2-digit',\n}\n\nconst RELATIVE_TIME_OPTIONS: RelativeTimeOptions = {\n  minimal: true,\n  useTemporalPhrase: true,\n}\n\nconst Strong = styled.strong`\n  font-weight: 600;\n`\nexport const NoWrap = styled.span`\n  white-space: nowrap;\n`\n\nexport function useUpdatedTimeAgo(timestamp: string) {\n  const date = new Date(timestamp)\n  const dateFormatter = useDateTimeFormat(DATE_FORMAT_OPTIONS)\n  const formattedDate = dateFormatter.format(date)\n\n  const updatedTimeAgo = useRelativeTime(date || '', RELATIVE_TIME_OPTIONS)\n\n  return {timeAgo: updatedTimeAgo, formattedDate}\n}\n\nexport function UserName({userId}: {userId: string}) {\n  const [user, isLoading] = useUser(userId)\n  return isLoading ? <TextSkeleton style={{width: '15ch'}} /> : <Strong>{user?.displayName}</Strong>\n}\n\nconst DUE_BY_DATE_OPTIONS: UseDateTimeFormatOptions = {\n  month: 'short',\n  day: 'numeric',\n}\n\nfunction DueByChange({date}: {date: string}) {\n  const dueBy = new Date(date)\n  const dateFormatter = useDateTimeFormat(DUE_BY_DATE_OPTIONS)\n  const formattedDate = dateFormatter.format(dueBy)\n  return (\n    <Strong>\n      <NoWrap>{formattedDate}</NoWrap>\n    </Strong>\n  )\n}\n\nconst LinkWrapper = styled.span`\n  > a {\n    color: var(--card-fg-muted-color);\n    text-decoration: underline;\n    text-underline-offset: 1px;\n    font-weight: 600;\n  }\n`\n\nfunction TargetContentChange({target}: {target: TaskTarget}) {\n  const schema = useSchema()\n  const documentId = target.document._ref\n  const documentType = target.documentType\n  const documentSchema = schema.get(documentType)\n  const {isLoading, value} = useDocumentPreviewValues({\n    documentId,\n    documentType,\n  })\n\n  if (isLoading) {\n    return <TextSkeleton style={{width: '15ch'}} />\n  }\n  if (!documentSchema) {\n    return null\n  }\n\n  return (\n    <LinkWrapper>\n      <IntentLink intent=\"edit\" params={{id: documentId, type: documentType}}>\n        {value?.title}\n      </IntentLink>\n    </LinkWrapper>\n  )\n}\n\nexport function getChangeDetails(activity: FieldChange): {\n  text: string\n  icon: React.JSX.Element\n  changeTo?: React.JSX.Element\n} {\n  switch (activity.field) {\n    case 'status': {\n      const statusTitle = TASK_STATUS.find((s) => s.value === activity.to)?.title\n      return {\n        text: 'changed status to',\n        icon: TASK_STATUS.find((s) => s.value === activity.to)?.icon || <CircleIcon />,\n        changeTo: <Strong>{statusTitle}</Strong>,\n      }\n    }\n    case 'target':\n      if (!activity.to)\n        return {\n          text: 'removed target content',\n          icon: <LinkIcon />,\n          changeTo: undefined,\n        }\n      return {\n        text: 'set target content to',\n        icon: <LinkIcon />,\n        changeTo: <TargetContentChange target={activity.to} />,\n      }\n    case 'dueBy':\n      if (!activity.from) {\n        return {\n          text: 'set the due date to',\n          icon: <CalendarIcon />,\n          changeTo: <DueByChange date={activity.to} />,\n        }\n      }\n      if (!activity.to) {\n        return {\n          text: 'removed the due date',\n          icon: <CalendarIcon />,\n          changeTo: undefined,\n        }\n      }\n      return {\n        text: 'changed the due date to',\n        icon: <CalendarIcon />,\n        changeTo: <DueByChange date={activity.to} />,\n      }\n    case 'assignedTo':\n      if (!activity.to) {\n        return {\n          text: 'unassigned this task',\n          icon: <UserIcon />,\n          changeTo: undefined,\n        }\n      }\n      return {\n        text: 'assigned to',\n        icon: <UserIcon />,\n        changeTo: <UserName userId={activity.to} />,\n      }\n    case 'description':\n      return {\n        text: 'updated the task description',\n        icon: <EditIcon />,\n        changeTo: undefined,\n      }\n    case 'title':\n      return {\n        text: 'updated the task title',\n        icon: <EditIcon />,\n        changeTo: undefined,\n      }\n    default:\n      return {\n        text: '',\n        icon: <CircleIcon />,\n      }\n  }\n}\n","import {Box, Flex, Text} from '@sanity/ui'\nimport {memo} from 'react'\n\nimport {Tooltip} from '../../../../ui-components'\nimport {getChangeDetails, NoWrap, UserName, useUpdatedTimeAgo} from './helpers'\nimport {type FieldChange} from './helpers/parseTransactions'\n\ninterface EditedAtProps {\n  activity: FieldChange\n}\n\nexport const EditedAt = memo(\n  function EditedAt(props: EditedAtProps) {\n    const {activity} = props\n    const {formattedDate, timeAgo} = useUpdatedTimeAgo(activity.timestamp)\n    const {icon, text, changeTo} = getChangeDetails(activity)\n\n    return (\n      <Flex gap={1}>\n        <Box marginTop={1} marginLeft={1} marginRight={3}>\n          <Box marginRight={1}>\n            <Text>{icon}</Text>\n          </Box>\n        </Box>\n        <Text muted size={1}>\n          <UserName userId={activity.author} /> {text} {changeTo} •{' '}\n          <Tooltip content={formattedDate} placement=\"top-end\">\n            <NoWrap>\n              <time dateTime={formattedDate}>{timeAgo}</time>\n            </NoWrap>\n          </Tooltip>\n        </Text>\n      </Flex>\n    )\n  },\n  (prevProps, nextProps) => {\n    return prevProps.activity.timestamp === nextProps.activity.timestamp\n  },\n)\n","import {UserIcon} from '@sanity/icons'\nimport {type User} from '@sanity/types'\nimport {type AvatarSize, Text} from '@sanity/ui'\n// eslint-disable-next-line camelcase\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {css, styled} from 'styled-components'\n\nimport {Tooltip} from '../../../ui-components'\nimport {AvatarSkeleton, UserAvatar} from '../../components'\nimport {useUser} from '../../store'\n\nconst AvatarRoot = styled.div<{$size: AvatarSize; $border?: boolean; $removeBg?: boolean}>(\n  (props) => {\n    const theme = getTheme_v2(props.theme)\n    return css`\n      min-height: ${theme.avatar.sizes[props.$size]?.size}px;\n      min-width: ${theme.avatar.sizes[props.$size]?.size}px;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      border-radius: 50%;\n      ${props.$border ? 'box-shadow: inset 0 0 0 1px var(--card-border-color);' : ''};\n      ${props.$removeBg ? '--card-avatar-gray-bg-color: transparent;' : ''}\n    `\n  },\n)\n\nexport function TasksUserAvatar(props: {\n  user?: User\n  size?: AvatarSize\n  border?: boolean\n  withTooltip?: boolean\n}) {\n  const {user, size = 0, border = true} = props\n  const [loadedUser, loading] = useUser(user?.id || '')\n\n  if (loading) {\n    return <AvatarSkeleton $size={size} animated />\n  }\n\n  if (!user || !loadedUser) {\n    return (\n      <AvatarRoot $size={size} $border={border}>\n        <Text size={size}>\n          <UserIcon />\n        </Text>\n      </AvatarRoot>\n    )\n  }\n\n  return (\n    <Tooltip\n      content={loadedUser.displayName}\n      disabled={!props.withTooltip}\n      portal\n      fallbackPlacements={['top', 'top-start']}\n      placement=\"top-end\"\n    >\n      <AvatarRoot $size={size} $removeBg={!!loadedUser?.imageUrl}>\n        <UserAvatar\n          user={loadedUser}\n          size={size}\n          {...(loadedUser?.imageUrl ? {color: undefined} : {})}\n          {...(props.withTooltip ? {title: null} : {})}\n        />\n      </AvatarRoot>\n    </Tooltip>\n  )\n}\n","import {Box, Flex} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {TasksUserAvatar} from '../TasksUserAvatar'\n\nconst ActivityChildrenRoot = styled(Flex)`\n  height: 100%;\n`\nconst ActivityItemChildrenContainer = styled.div`\n  width: 100%;\n`\n\ninterface ActivityItemProps {\n  userId: string\n  children: React.ReactNode\n  avatarPaddingTop?: number\n}\nexport function ActivityItem({avatarPaddingTop = 1, userId, children}: ActivityItemProps) {\n  return (\n    <Flex>\n      <Box marginRight={3} paddingTop={avatarPaddingTop}>\n        <TasksUserAvatar user={{id: userId}} size={0} />\n      </Box>\n      <ActivityChildrenRoot align=\"center\" flex={1}>\n        <ActivityItemChildrenContainer>{children}</ActivityItemChildrenContainer>\n      </ActivityChildrenRoot>\n    </Flex>\n  )\n}\n","import {Card} from '@sanity/ui'\nimport {useCallback, useMemo, useRef, useState} from 'react'\n\nimport {\n  CommentInput,\n  type CommentInputHandle,\n  type CommentInputProps,\n  hasCommentMessageValue,\n} from '../../../comments'\nimport {useTranslation} from '../../../i18n'\nimport {useTasksEnabled} from '../../context'\nimport {tasksLocaleNamespace} from '../../i18n'\nimport {ActivityItem} from './TasksActivityItem'\n\ninterface TasksCommentActivityInputProps {\n  currentUser: CommentInputProps['currentUser']\n  mentionOptions: CommentInputProps['mentionOptions']\n  onSubmit: (message: CommentInputProps['value']) => void\n}\n\nexport function TasksActivityCommentInput(props: TasksCommentActivityInputProps) {\n  const {mentionOptions, currentUser, onSubmit} = props\n  const {mode} = useTasksEnabled()\n  const [value, setValue] = useState<CommentInputProps['value']>(null)\n  const editorRef = useRef<CommentInputHandle>(null)\n\n  const hasValue = useMemo(() => hasCommentMessageValue(value), [value])\n\n  const handleChange = useCallback((nextValue: CommentInputProps['value']) => {\n    setValue(nextValue)\n  }, [])\n\n  const handleSubmit = useCallback(() => {\n    if (hasValue) {\n      onSubmit(value)\n      setValue(null)\n    }\n  }, [hasValue, onSubmit, value])\n\n  const handleDiscardCancel = useCallback(() => {\n    editorRef.current?.discardDialogController.close()\n  }, [])\n\n  const handleDiscardConfirm = useCallback(() => {\n    editorRef.current?.discardDialogController.close()\n    setValue(null)\n  }, [])\n\n  const handleKeyDown = useCallback(\n    (e: React.KeyboardEvent<Element>) => {\n      if (e.key === 'Escape') {\n        e.preventDefault()\n        e.stopPropagation()\n\n        if (hasValue) {\n          editorRef.current?.discardDialogController.open()\n        } else {\n          editorRef.current?.discardDialogController.close()\n          setValue(null)\n        }\n      }\n    },\n    [hasValue],\n  )\n  const {t} = useTranslation(tasksLocaleNamespace)\n\n  return (\n    <ActivityItem userId={currentUser.id} avatarPaddingTop={3}>\n      <Card tone=\"transparent\" radius={3} padding={2}>\n        <CommentInput\n          withAvatar={false}\n          currentUser={currentUser}\n          expandOnFocus\n          mentionOptions={mentionOptions}\n          onChange={handleChange}\n          onDiscardConfirm={handleDiscardConfirm}\n          onDiscardCancel={handleDiscardCancel}\n          onKeyDown={handleKeyDown}\n          onSubmit={handleSubmit}\n          readOnly={mode === 'upsell'}\n          placeholder={\n            mode === 'upsell'\n              ? t('panel.comment.placeholder.upsell')\n              : t('panel.comment.placeholder')\n          }\n          ref={editorRef}\n          value={value}\n        />\n      </Card>\n    </ActivityItem>\n  )\n}\n","// eslint-disable-next-line camelcase\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {css, styled} from 'styled-components'\n\nimport {CommentsListItem, type CommentsListItemProps} from '../../../comments/components'\nimport {useTasksEnabled} from '../../context'\nimport {ActivityItem} from './TasksActivityItem'\n\nconst COMMENTS_LIST_ITEM_AVATAR_CONFIG: CommentsListItemProps['avatarConfig'] = {\n  parentCommentAvatar: false,\n  threadCommentsAvatar: true,\n  replyAvatar: true,\n  avatarSize: 0,\n}\n\ninterface TasksActivityCommentItemProps extends Omit<CommentsListItemProps, 'mode' | 'isSelected'> {\n  // ...\n}\n\nconst CommentListItemRoot = styled.div((props) => {\n  const theme = getTheme_v2(props.theme)\n  return css`\n    [data-ui='CommentsListItem'] {\n      padding-right: ${theme.space[2]}px;\n    }\n\n    // Increase the padding when the comment input is focused\n    [data-ui='CommentInputEditableWrap']:focus-within {\n      padding-bottom: ${theme.space[2]}px;\n    }\n  `\n})\nexport function TasksActivityCommentItem(props: TasksActivityCommentItemProps) {\n  const {parentComment} = props\n  const {mode} = useTasksEnabled()\n\n  return (\n    <ActivityItem userId={parentComment.authorId} avatarPaddingTop={3}>\n      <CommentListItemRoot>\n        <CommentsListItem\n          {...props}\n          avatarConfig={COMMENTS_LIST_ITEM_AVATAR_CONFIG}\n          canReply\n          isSelected={false}\n          mode={mode ?? 'default'}\n        />\n      </CommentListItemRoot>\n    </ActivityItem>\n  )\n}\n","import {Flex, Text, TextSkeleton} from '@sanity/ui'\nimport {memo} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Tooltip} from '../../../../ui-components'\nimport {useTranslation} from '../../../i18n'\nimport {useUser} from '../../../store'\nimport {tasksLocaleNamespace} from '../../i18n'\nimport {NoWrap, useUpdatedTimeAgo} from './helpers'\nimport {ActivityItem} from './TasksActivityItem'\n\nconst UserSkeleton = styled(TextSkeleton)`\n  max-width: 15ch;\n  width: '100%';\n`\n\ninterface TasksActivityCreatedAtProps {\n  createdAt: string\n  authorId: string\n}\n\nexport const TasksActivityCreatedAt = memo(\n  function TasksActivityCreatedAt(props: TasksActivityCreatedAtProps) {\n    const {createdAt, authorId} = props\n    const [user, loading] = useUser(authorId)\n    const {timeAgo, formattedDate} = useUpdatedTimeAgo(createdAt)\n    const {t} = useTranslation(tasksLocaleNamespace)\n    return (\n      <ActivityItem userId={authorId}>\n        <Flex align=\"center\" paddingTop={1}>\n          <Text size={1} muted>\n            <strong style={{fontWeight: 600}}>\n              {loading ? (\n                <UserSkeleton />\n              ) : (\n                (user?.displayName ?? t('panel.activity.unknown-user'))\n              )}{' '}\n            </strong>\n            {t('panel.activity.created-fragment')} •{' '}\n            <Tooltip content={formattedDate} placement=\"top-end\">\n              <NoWrap>\n                <time dateTime={createdAt}>{timeAgo}</time>\n              </NoWrap>\n            </Tooltip>\n          </Text>\n        </Flex>\n      </ActivityItem>\n    )\n  },\n  (prevProps, nextProps) => {\n    return prevProps.createdAt === nextProps.createdAt\n  },\n)\n","import {type Path} from '@sanity/types'\nimport {AvatarStack, Flex} from '@sanity/ui'\nimport {AnimatePresence, motion} from 'framer-motion'\nimport {useCallback, useMemo} from 'react'\n\nimport {Button} from '../../../../ui-components'\nimport {type FormPatch, type PatchEvent, set} from '../../../form/patch'\nimport {type TaskDocument} from '../../types'\nimport {TasksUserAvatar} from '../TasksUserAvatar'\n\ninterface TasksSubscriberProps {\n  value: TaskDocument\n  path?: Path\n  onChange: (patch: FormPatch | PatchEvent | FormPatch[]) => void\n  currentUserId: string\n}\n\nexport function TasksSubscribers(props: TasksSubscriberProps) {\n  const {value, onChange, path, currentUserId} = props\n\n  const userIsSubscribed = value.subscribers?.includes(currentUserId)\n\n  const buttonText = userIsSubscribed ? 'Unsubscribe' : 'Subscribe'\n\n  const handleToggleSubscribe = useCallback(() => {\n    const subscribers = value.subscribers || []\n\n    if (!subscribers.includes(currentUserId)) {\n      onChange(set(subscribers.concat(currentUserId), path))\n    }\n    if (subscribers.includes(currentUserId)) {\n      onChange(\n        set(\n          subscribers.filter((subscriberId) => subscriberId !== currentUserId),\n          path,\n        ),\n      )\n    }\n  }, [value.subscribers, currentUserId, onChange, path])\n\n  return (\n    <Flex gap={1} align=\"center\">\n      <Button mode=\"bleed\" text={buttonText} onClick={handleToggleSubscribe} />\n      {value.subscribers && value.subscribers?.length > 0 && (\n        <TasksSubscriberAvatars subscriberIds={value.subscribers} />\n      )}\n    </Flex>\n  )\n}\n\nconst EMPTY_ARRAY: [] = []\n\ninterface TasksSubscriberAvatarsProps {\n  subscriberIds?: string[]\n}\n\nexport function TasksSubscriberAvatars(props: TasksSubscriberAvatarsProps) {\n  const {subscriberIds: subscriberIdsProp} = props\n\n  const subscriberIds = useMemo(() => {\n    // Make sure we have valid subscriber IDs\n    return subscriberIdsProp?.filter(Boolean) || EMPTY_ARRAY\n  }, [subscriberIdsProp])\n\n  return (\n    <AnimatePresence initial={false}>\n      <AvatarStack maxLength={3} size={0}>\n        {subscriberIds.map((subscriberId) => (\n          <motion.div\n            key={subscriberId}\n            exit={{opacity: 0, translateX: '2px', scale: 0.9}}\n            animate={{\n              opacity: 1,\n              translateX: 0,\n              scale: 1,\n              transition: {type: 'just', duration: 0.2},\n            }}\n            initial={{opacity: 0, translateX: '2px', scale: 0.9}}\n          >\n            <TasksUserAvatar user={{id: subscriberId}} size={0} />\n          </motion.div>\n        ))}\n      </AvatarStack>\n    </AnimatePresence>\n  )\n}\n","import {type Path} from '@sanity/types'\nimport {Box, Flex, Stack, Text} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {AnimatePresence, motion, type Variants} from 'framer-motion'\nimport {useCallback, useMemo, useState} from 'react'\nimport {styled} from 'styled-components'\n\nimport {\n  type CommentBaseCreatePayload,\n  type CommentCreatePayload,\n  type CommentInputProps,\n  type CommentReactionOption,\n  type CommentThreadItem,\n  type CommentUpdatePayload,\n  useComments,\n} from '../../../comments'\nimport {CommentDeleteDialog} from '../../../comments/components'\nimport {LoadingBlock} from '../../../components'\nimport {type FormPatch, type PatchEvent, set} from '../../../form'\nimport {useTranslation} from '../../../i18n'\nimport {useCurrentUser} from '../../../store'\nimport {useWorkspace} from '../../../studio'\nimport {tasksLocaleNamespace} from '../../i18n'\nimport {type TaskDocument} from '../../types'\nimport {getMentionedUsers} from '../form/utils'\nimport {type FieldChange} from './helpers/parseTransactions'\nimport {EditedAt} from './TaskActivityEditedAt'\nimport {TasksActivityCommentInput} from './TasksActivityCommentInput'\nimport {TasksActivityCommentItem} from './TasksActivityCommentItem'\nimport {TasksActivityCreatedAt} from './TasksActivityCreatedAt'\nimport {TasksSubscribers} from './TasksSubscribers'\n\nconst EMPTY_ARRAY: [] = []\n\nconst VARIANTS: Variants = {\n  hidden: {opacity: 0, x: 0},\n  visible: {opacity: 1, x: 0},\n}\n\nconst MotionStack = styled(motion.create(Stack))``\n\ninterface TasksActivityLogProps {\n  onChange: (patch: FormPatch | PatchEvent | FormPatch[]) => void\n  path?: Path\n  value: TaskDocument\n  activityData: FieldChange[]\n}\n\ntype Activity =\n  | {\n      _type: 'comment'\n      payload: CommentThreadItem\n      timestamp: string\n    }\n  | {\n      _type: 'activity'\n      payload: FieldChange\n      timestamp: string\n    }\n\nexport function TasksActivityLog(props: TasksActivityLogProps) {\n  const {value, onChange, path, activityData = []} = props\n  const currentUser = useCurrentUser()\n\n  const {title: workspaceTitle, basePath} = useWorkspace()\n  const {comments, mentionOptions, operation, getComment} = useComments()\n  const [commentToDeleteId, setCommentToDeleteId] = useState<string | null>(null)\n  const [commentDeleteError, setCommentDeleteError] = useState<Error | null>(null)\n  const [commentDeleteLoading, setCommentDeleteLoading] = useState(false)\n\n  const loading = comments.loading\n  const taskComments = comments.data.open\n  const handleGetNotificationValue = useCallback(\n    (message: CommentInputProps['value'], commentId: string) => {\n      const studioUrl = new URL(`${window.location.origin}${basePath ? `${basePath}/` : ''}`)\n\n      studioUrl.searchParams.set('sidebar', 'tasks')\n      studioUrl.searchParams.set('selectedTask', value?._id)\n      studioUrl.searchParams.set('viewMode', 'edit')\n      studioUrl.searchParams.set('commentId', commentId)\n\n      const mentionedUsers = getMentionedUsers(message)\n      const subscribers = Array.from(new Set([...(value.subscribers || []), ...mentionedUsers]))\n\n      return {\n        documentTitle: value.title || 'Sanity task',\n        url: studioUrl.toString(),\n        workspaceTitle: workspaceTitle,\n        subscribers: subscribers,\n      }\n    },\n    [basePath, value?._id, value.title, workspaceTitle, value.subscribers],\n  )\n\n  const handleCommentCreate = useCallback(\n    (message: CommentInputProps['value']) => {\n      const commentId = uuid()\n      const notification = handleGetNotificationValue(message, commentId)\n\n      const nextComment: CommentCreatePayload = {\n        id: commentId,\n        type: 'task',\n        message,\n        parentCommentId: undefined,\n        reactions: EMPTY_ARRAY,\n        status: 'open',\n        threadId: uuid(),\n        context: {\n          notification,\n        },\n      }\n\n      onChange(set(notification.subscribers, ['subscribers']))\n\n      operation.create(nextComment)\n    },\n    [operation, handleGetNotificationValue, onChange],\n  )\n\n  const handleCommentReply = useCallback(\n    (nextComment: CommentBaseCreatePayload) => {\n      const commentId = uuid()\n\n      const notification = handleGetNotificationValue(nextComment.message, commentId)\n\n      onChange(set(notification.subscribers, ['subscribers']))\n\n      operation.create({\n        id: commentId,\n        type: 'task',\n        message: nextComment.message,\n        parentCommentId: nextComment.parentCommentId,\n        reactions: EMPTY_ARRAY,\n        status: 'open',\n        threadId: nextComment.threadId,\n        context: {\n          notification,\n        },\n      })\n    },\n    [operation, handleGetNotificationValue, onChange],\n  )\n\n  const handleCommentCreateRetry = useCallback(\n    (id: string) => {\n      // Get the optimistically created comment and use it\n      // when retrying the creation.\n      const comment = getComment(id)\n      if (!comment) return\n\n      const notification = handleGetNotificationValue(comment.message, comment._id)\n\n      onChange(set(notification.subscribers, ['subscribers']))\n\n      operation.create({\n        type: 'task',\n        id: comment._id,\n        message: comment.message,\n        parentCommentId: comment.parentCommentId,\n        reactions: comment.reactions || EMPTY_ARRAY,\n        status: comment.status,\n        threadId: comment.threadId,\n        context: {\n          notification,\n        },\n      })\n    },\n    [getComment, operation, handleGetNotificationValue, onChange],\n  )\n\n  const handleCommentReact = useCallback(\n    (id: string, reaction: CommentReactionOption) => {\n      operation.react(id, reaction)\n    },\n    [operation],\n  )\n\n  const handleDeleteCommentStart = useCallback((id: string) => setCommentToDeleteId(id), [])\n  const handleDeleteCommentCancel = useCallback(() => setCommentToDeleteId(null), [])\n\n  const handleDeleteCommentConfirm = useCallback(\n    async (id: string) => {\n      try {\n        setCommentDeleteLoading(true)\n        setCommentDeleteError(null)\n        await operation.remove(id)\n        setCommentToDeleteId(null)\n      } catch (err) {\n        setCommentDeleteError(err)\n      } finally {\n        setCommentDeleteLoading(false)\n      }\n    },\n    [operation],\n  )\n\n  const handleCommentEdit = useCallback(\n    (id: string, next: CommentUpdatePayload) => {\n      operation.update(id, next)\n    },\n    [operation],\n  )\n\n  const activity: Activity[] = useMemo(() => {\n    const taskActivity: Activity[] = activityData.map((item) => ({\n      _type: 'activity' as const,\n      payload: item,\n      timestamp: item.timestamp,\n    }))\n    const commentsActivity: Activity[] = taskComments.map((comment) => ({\n      _type: 'comment' as const,\n      payload: comment,\n      timestamp: comment.parentComment._createdAt,\n    }))\n\n    return taskActivity\n      .concat(commentsActivity)\n      .sort((a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime())\n  }, [activityData, taskComments])\n  const {t} = useTranslation(tasksLocaleNamespace)\n\n  const commentToDeleteIsParent = useMemo(() => {\n    const parent = taskComments.find((c) => c.parentComment?._id === commentToDeleteId)\n    const isParent = Boolean(parent && parent?.replies?.length > 0)\n\n    return isParent\n  }, [commentToDeleteId, taskComments])\n\n  return (\n    <>\n      {commentToDeleteId && (\n        <CommentDeleteDialog\n          commentId={commentToDeleteId}\n          error={commentDeleteError}\n          isParent={commentToDeleteIsParent}\n          loading={commentDeleteLoading}\n          onClose={handleDeleteCommentCancel}\n          onConfirm={handleDeleteCommentConfirm}\n        />\n      )}\n\n      <Stack space={5}>\n        <Flex align=\"center\">\n          <Box flex={1}>\n            <Text size={2} weight=\"semibold\">\n              {t('panel.activity.title')}\n            </Text>\n          </Box>\n\n          {currentUser?.id && (\n            <TasksSubscribers\n              currentUserId={currentUser.id}\n              value={value}\n              onChange={onChange}\n              path={path}\n            />\n          )}\n        </Flex>\n\n        {loading && <LoadingBlock showText title=\"Loading activity\" />}\n\n        <AnimatePresence>\n          {!loading && (\n            <MotionStack animate=\"visible\" initial=\"hidden\" space={4} variants={VARIANTS}>\n              {value.createdByUser && (\n                <Stack paddingBottom={1}>\n                  <TasksActivityCreatedAt\n                    createdAt={value.createdByUser}\n                    authorId={value.authorId}\n                  />\n                </Stack>\n              )}\n\n              {currentUser && (\n                <Stack space={4} marginTop={1}>\n                  {activity.map((item) => {\n                    if (item._type === 'activity') {\n                      return <EditedAt key={item.timestamp} activity={item.payload} />\n                    }\n\n                    return (\n                      <TasksActivityCommentItem\n                        currentUser={currentUser}\n                        key={item.payload.parentComment._id}\n                        mentionOptions={mentionOptions}\n                        onCreateRetry={handleCommentCreateRetry}\n                        onDelete={handleDeleteCommentStart}\n                        onEdit={handleCommentEdit}\n                        onReactionSelect={handleCommentReact}\n                        onReply={handleCommentReply}\n                        parentComment={item.payload.parentComment}\n                        replies={item.payload.replies}\n                      />\n                    )\n                  })}\n\n                  <TasksActivityCommentInput\n                    currentUser={currentUser}\n                    mentionOptions={mentionOptions}\n                    onSubmit={handleCommentCreate}\n                  />\n                </Stack>\n              )}\n            </MotionStack>\n          )}\n        </AnimatePresence>\n      </Stack>\n    </>\n  )\n}\n","import {UserIcon} from '@sanity/icons'\nimport {\n  Badge,\n  Box,\n  Container,\n  Flex,\n  Menu,\n  // eslint-disable-next-line no-restricted-imports\n  MenuItem,\n  Text,\n  TextInput,\n  VirtualList,\n} from '@sanity/ui'\nimport {deburr} from 'lodash'\nimport {type ChangeEvent, type KeyboardEvent, useCallback, useMemo, useRef, useState} from 'react'\nimport {styled} from 'styled-components'\n\nimport {MenuButton} from '../../../../../../ui-components'\nimport {LoadingBlock} from '../../../../../components'\nimport {type UserWithPermission} from '../../../../../hooks'\nimport {useTranslation} from '../../../../../i18n'\nimport {useMentionUser} from '../../../../context'\nimport {tasksLocaleNamespace} from '../../../../i18n'\nimport {TasksUserAvatar} from '../../../TasksUserAvatar'\n\ntype SelectItemHandler = (id: string) => void\n\nfunction MentionUserMenuItem(props: {\n  user: UserWithPermission\n  onSelect: SelectItemHandler\n  pressed: boolean\n}) {\n  const {user, onSelect, pressed} = props\n  const {t} = useTranslation(tasksLocaleNamespace)\n  const handleSelect = useCallback(() => onSelect(user.id), [user, onSelect])\n  return (\n    <MenuItem onClick={handleSelect} padding={1} disabled={!user.granted} pressed={pressed}>\n      <Flex align=\"center\" gap={3}>\n        <Flex align=\"center\" gap={2} flex={1}>\n          <TasksUserAvatar user={user.id ? user : undefined} size={1} />\n          <Text size={1} textOverflow=\"ellipsis\" title={user.displayName}>\n            {user.displayName}\n          </Text>\n        </Flex>\n\n        {!user.granted && (\n          <Badge fontSize={1} mode=\"outline\">\n            {t('form.input.assignee.unauthorized.text')}\n          </Badge>\n        )}\n      </Flex>\n    </MenuItem>\n  )\n}\n\nconst StyledMenu = styled(Menu)`\n  width: 308px;\n  border-radius: 3px;\n`\n\nconst IGNORED_KEYS = [\n  'Control',\n  'Shift',\n  'Alt',\n  'Enter',\n  'Home',\n  'End',\n  'PageUp',\n  'PageDown',\n  'Meta',\n  'Tab',\n  'CapsLock',\n]\n\nconst NO_ASSIGNEE_OPTION: UserWithPermission = {\n  id: '',\n  displayName: 'No assignee',\n  granted: true,\n}\nfunction MentionsMenu({onSelect, value = ''}: {onSelect: SelectItemHandler; value?: string}) {\n  const [searchTerm, setSearchTerm] = useState<string>('')\n  const {mentionOptions} = useMentionUser()\n  const inputRef = useRef<HTMLInputElement | null>(null)\n  const options = [NO_ASSIGNEE_OPTION].concat(mentionOptions.data || [])\n  const handleSearchChange = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n    setSearchTerm(event.currentTarget.value)\n  }, [])\n\n  const filteredOptions = useMemo(() => {\n    if (!searchTerm) return options || []\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      searchName: deburr(option.displayName || '').toLocaleLowerCase(),\n    }))\n\n    const filtered = deburredOptions\n      ?.filter((option) => {\n        return option?.searchName.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.searchName.startsWith(deburredSearchTerm)\n        const matchB = b.searchName.startsWith(deburredSearchTerm)\n\n        if (matchA && !matchB) return -1\n        if (!matchA && matchB) return 1\n\n        return 0\n      })\n\n    return filtered || []\n  }, [options, searchTerm])\n\n  const renderItem = useCallback(\n    (user: UserWithPermission) => {\n      return (\n        <MentionUserMenuItem\n          user={user}\n          onSelect={onSelect}\n          key={user.id}\n          pressed={user.id === value}\n        />\n      )\n    },\n    [onSelect, value],\n  )\n  const handleKeyDown = useCallback((event: KeyboardEvent<HTMLElement>) => {\n    // If target is input don't do anything\n    if (event.target === inputRef.current) {\n      return\n    }\n\n    if (!IGNORED_KEYS.includes(event.key)) {\n      inputRef.current?.focus()\n    }\n  }, [])\n\n  const {t} = useTranslation(tasksLocaleNamespace)\n\n  if (mentionOptions.loading) {\n    return (\n      <Container width={0}>\n        <LoadingBlock showText />\n      </Container>\n    )\n  }\n\n  return (\n    <div onKeyDown={handleKeyDown}>\n      <TextInput\n        placeholder={t('form.input.assignee.search.placeholder')}\n        autoFocus\n        border={false}\n        onChange={handleSearchChange}\n        value={searchTerm}\n        fontSize={1}\n        icon={UserIcon}\n        ref={inputRef}\n        name=\"assigneeSearch\"\n        autoComplete=\"off\"\n      />\n\n      <div style={{maxHeight: '320px', overflowY: 'scroll', paddingTop: '8px'}}>\n        {filteredOptions.length === 0 ? (\n          <Box padding={3}>\n            <Text align=\"center\" size={1} muted>\n              {t('form.input.assignee.search.no-users.text')}\n            </Text>\n          </Box>\n        ) : (\n          <VirtualList items={filteredOptions} renderItem={renderItem} />\n        )}\n      </div>\n    </div>\n  )\n}\n\nexport function AssigneeSelectionMenu(props: {\n  onSelect: (userId: string) => void\n  menuButton: React.JSX.Element\n  value?: string\n}) {\n  const {onSelect, menuButton, value} = props\n\n  return (\n    <MenuButton\n      button={menuButton}\n      id=\"assign-user-menu\"\n      menu={\n        <StyledMenu>\n          <MentionsMenu onSelect={onSelect} value={value} />\n        </StyledMenu>\n      }\n      popover={{\n        placement: 'bottom',\n        fallbackPlacements: ['bottom'],\n        portal: true,\n        constrainSize: true,\n      }}\n    />\n  )\n}\n","import {Badge, Card, Flex, Text, TextSkeleton} from '@sanity/ui'\n// eslint-disable-next-line camelcase\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {useCallback, useMemo} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {set, type StringInputProps} from '../../../../../form'\nimport {useTranslation} from '../../../../../i18n'\nimport {useMentionUser} from '../../../../context'\nimport {tasksLocaleNamespace} from '../../../../i18n'\nimport {TasksUserAvatar} from '../../../TasksUserAvatar'\nimport {AssigneeSelectionMenu} from './AssigneeSelectionMenu'\n\nconst FocusableCard = styled(Card)((props) => {\n  const theme = getTheme_v2(props.theme)\n  return css`\n    &[data-as='button'] {\n      border: 1px solid var(--card-border-color);\n      &:focus-within {\n        border: 1px solid var(--card-focus-ring-color);\n      }\n      --card-muted-fg-color: ${theme.color.input.default.enabled.placeholder};\n    }\n  `\n})\n\nexport function AssigneeCreateFormField(props: StringInputProps) {\n  const {value, onChange} = props\n  const {mentionOptions} = useMentionUser()\n  const mentionedUser = useMemo(\n    () => mentionOptions.data?.find((u) => u.id === value),\n    [mentionOptions.data, value],\n  )\n\n  const onSelect = useCallback((userId: string) => onChange(set(userId)), [onChange])\n  const {t} = useTranslation(tasksLocaleNamespace)\n  const displayText = useMemo(() => {\n    if (value) {\n      if (mentionOptions.loading) return <TextSkeleton animated style={{width: '10ch'}} />\n      if (mentionedUser) return mentionedUser.displayName || mentionedUser.email\n      if (!mentionedUser) return t('form.input.assignee.user-not-found.text')\n    }\n    return t('form.input.assignee.search.placeholder')\n  }, [mentionOptions.loading, mentionedUser, value, t])\n\n  return (\n    <AssigneeSelectionMenu\n      onSelect={onSelect}\n      value={value}\n      menuButton={\n        <FocusableCard data-as=\"button\" padding={1} radius={2} tabIndex={0}>\n          <Flex align=\"center\" gap={3}>\n            <Flex align=\"center\" gap={1} flex={1}>\n              <TasksUserAvatar user={mentionedUser} size={1} border={false} />\n              <Text size={1} textOverflow=\"ellipsis\" muted={!mentionedUser}>\n                {displayText}\n              </Text>\n            </Flex>\n\n            {value && mentionedUser && !mentionedUser.granted && (\n              <Badge fontSize={1} mode=\"outline\">\n                {t('form.input.assignee.unauthorized.text')}\n              </Badge>\n            )}\n          </Flex>\n        </FocusableCard>\n      }\n    />\n  )\n}\n","import {type Path} from '@sanity/types'\nimport {\n  Badge,\n  Box,\n  // eslint-disable-next-line no-restricted-imports\n  Button,\n  Flex,\n  Text,\n  TextSkeleton,\n} from '@sanity/ui'\nimport {useCallback, useMemo} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Tooltip} from '../../../../../../ui-components'\nimport {type FormPatch, type PatchEvent, set, useFormValue} from '../../../../../form'\nimport {useTranslation} from '../../../../../i18n'\nimport {useMentionUser} from '../../../../context'\nimport {tasksLocaleNamespace} from '../../../../i18n'\nimport {TasksUserAvatar} from '../../../TasksUserAvatar'\nimport {AssigneeSelectionMenu} from './AssigneeSelectionMenu'\n\nconst StyledButton = styled(Button)`\n  padding: 3px 6px;\n`\n\ninterface AssigneeEditFormFieldProps {\n  value: string | undefined\n  path: Path\n  onChange: (patch: FormPatch | PatchEvent | FormPatch[]) => void\n}\n\nexport function AssigneeEditFormField(props: AssigneeEditFormFieldProps) {\n  const {value, onChange, path} = props\n  const subscribers = useFormValue(['subscribers']) as string[] | undefined\n  const {mentionOptions} = useMentionUser()\n  const mentionedUser = useMemo(\n    () => mentionOptions.data?.find((u) => u.id === value),\n    [mentionOptions.data, value],\n  )\n  const {t} = useTranslation(tasksLocaleNamespace)\n\n  const onSelect = useCallback(\n    (userId: string) => {\n      onChange(set(userId, path))\n      if (subscribers && !subscribers.includes(userId) && userId) {\n        onChange(set([...subscribers, userId], ['subscribers']))\n      }\n    },\n    [onChange, path, subscribers],\n  )\n\n  const displayText = useMemo(() => {\n    if (value) {\n      if (mentionOptions.loading) return <TextSkeleton animated style={{width: '10ch'}} />\n      if (mentionedUser) return mentionedUser.displayName || mentionedUser.email\n      if (!mentionedUser) return t('form.input.assignee.user-not-found.text')\n    }\n    return t('form.input.assignee.no-user-assigned.text')\n  }, [mentionOptions.loading, mentionedUser, value, t])\n\n  return (\n    <AssigneeSelectionMenu\n      onSelect={onSelect}\n      value={value}\n      menuButton={\n        <StyledButton mode=\"ghost\" padding={0}>\n          <Tooltip\n            content={\n              value\n                ? t('form.input.assignee.user-assigned.tooltip')\n                : t('form.input.assignee.no-user-assigned.tooltip')\n            }\n          >\n            <Flex align=\"center\" gap={3}>\n              <Flex align=\"center\" gap={2} flex={1}>\n                <TasksUserAvatar user={mentionedUser} size={0} />\n                <Box>\n                  <Text size={1} textOverflow=\"ellipsis\">\n                    {displayText}\n                  </Text>\n                </Box>\n              </Flex>\n\n              {value && mentionedUser && !mentionedUser.granted && (\n                <Badge fontSize={1} mode=\"outline\">\n                  {t('form.input.assignee.unauthorized.text')}\n                </Badge>\n              )}\n            </Flex>\n          </Tooltip>\n        </StyledButton>\n      }\n    />\n  )\n}\n","import {CalendarIcon} from '@sanity/icons'\nimport {type Path} from '@sanity/types'\nimport {Box, Flex, useClickOutsideEvent} from '@sanity/ui'\nimport {DEFAULT_DATE_FORMAT, format, parse} from '@sanity/util/legacyDateFormat'\nimport {type KeyboardEvent, useCallback, useMemo, useRef, useState} from 'react'\nimport ReactFocusLock from 'react-focus-lock'\n\nimport {Button, Popover} from '../../../../../ui-components'\nimport {type CalendarLabels} from '../../../../components/inputs/DateInputs/calendar/types'\nimport {DatePicker} from '../../../../components/inputs/DateInputs/DatePicker'\nimport {type FormPatch, type PatchEvent, set, unset} from '../../../../form'\nimport {getCalendarLabels} from '../../../../form/inputs/DateInputs/utils'\nimport {useDateTimeFormat} from '../../../../hooks'\nimport {useTranslation} from '../../../../i18n'\nimport {tasksLocaleNamespace} from '../../../i18n'\n\nconst serialize = (date: Date) => format(date, DEFAULT_DATE_FORMAT)\nconst deserialize = (value: string) => parse(value, DEFAULT_DATE_FORMAT)\n\nexport function DateEditFormField(props: {\n  value: string\n  onChange: (patch: FormPatch | PatchEvent | FormPatch[]) => void\n  path: Path\n}) {\n  const {value, onChange, path} = props\n  const {t: coreT} = useTranslation()\n  const {t} = useTranslation(tasksLocaleNamespace)\n\n  const [pickerOpen, setPickerOpen] = useState(false)\n  const popoverRef = useRef<HTMLDivElement | null>(null)\n  const buttonRef = useRef<HTMLButtonElement | null>(null)\n  const dateFormatter = useDateTimeFormat({dateStyle: 'long'})\n  const dueByeDisplayValue = useMemo(() => {\n    if (!value) return {short: '----', full: '----'}\n    const dueFormated = dateFormatter.format(new Date(value))\n    const [monthAndDay] = dueFormated.split(',')\n    return {short: monthAndDay, full: dueFormated}\n  }, [dateFormatter, value])\n\n  useClickOutsideEvent(\n    () => setPickerOpen(false),\n    () => [popoverRef.current],\n  )\n\n  const handleKeyUp = useCallback((e: KeyboardEvent<HTMLDivElement>) => {\n    if (e.key === 'Escape') {\n      setPickerOpen(false)\n    }\n  }, [])\n  const handleClick = useCallback(() => setPickerOpen((p) => !p), [])\n  const calendarLabels: CalendarLabels = useMemo(() => getCalendarLabels(coreT), [coreT])\n  const handleChange = useCallback(\n    (nextDate: Date | null) => {\n      if (nextDate) {\n        onChange(set(serialize(nextDate), path))\n      } else {\n        onChange(unset(path))\n      }\n      setPickerOpen(false)\n    },\n    [onChange, path],\n  )\n\n  const deserializedValue = deserialize(value)\n  const handleDeactivation = useCallback(() => {\n    buttonRef.current?.focus()\n  }, [buttonRef])\n  const dueDateIsThisYear = deserializedValue?.date?.getFullYear() === new Date().getFullYear()\n\n  return (\n    <Popover\n      constrainSize\n      data-testid=\"date-input-dialog\"\n      portal\n      ref={popoverRef}\n      content={\n        <Box overflow=\"auto\">\n          <ReactFocusLock onDeactivation={handleDeactivation}>\n            <DatePicker\n              calendarLabels={calendarLabels}\n              selectTime={false}\n              timeStep={1}\n              onKeyUp={handleKeyUp}\n              value={deserializedValue.date}\n              onChange={handleChange}\n            />\n            {value && (\n              <Flex justify={'flex-start'} padding={3} paddingTop={0}>\n                <Button\n                  mode=\"bleed\"\n                  text={t('form.input.date.buttons.remove.text')}\n                  onClick={() => handleChange(null)}\n                  tone=\"critical\"\n                />\n              </Flex>\n            )}\n          </ReactFocusLock>\n        </Box>\n      }\n      open={pickerOpen}\n      placement=\"bottom\"\n      fallbackPlacements={['bottom-start', 'bottom-end']}\n    >\n      <Button\n        icon={CalendarIcon}\n        mode=\"ghost\"\n        text={dueDateIsThisYear ? dueByeDisplayValue.short : dueByeDisplayValue.full}\n        onClick={handleClick}\n        ref={buttonRef}\n        tooltipProps={{\n          content: value\n            ? t('form.input.date.buttons.tooltip')\n            : t('form.input.date.buttons.empty.tooltip'),\n        }}\n      />\n    </Popover>\n  )\n}\n","import {Box, Text} from '@sanity/ui'\nimport {type ReactNode} from 'react'\nimport {styled} from 'styled-components'\n\nconst NormalText = styled(Text)`\n  word-break: break-word;\n`\n\ninterface NormalBlockProps {\n  children: ReactNode\n}\n\nexport function DescriptionInputBlock(props: NormalBlockProps) {\n  const {children} = props\n\n  return (\n    <Box paddingTop={2} paddingBottom={3}>\n      <NormalText size={1}>{children}</NormalText>\n    </Box>\n  )\n}\n","import {type RenderBlockFunction} from '@portabletext/editor'\n\nimport {DescriptionInputBlock} from '../blocks'\n\nexport const renderBlock: RenderBlockFunction = (blockProps) => {\n  const {children} = blockProps\n\n  return <DescriptionInputBlock>{children}</DescriptionInputBlock>\n}\n","import {type PortableTextBlock} from '@sanity/types'\n// eslint-disable-next-line camelcase\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {startTransition, useCallback, useEffect, useState} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {CommentInput} from '../../../../../comments'\nimport {type ArrayFieldProps, set} from '../../../../../form'\nimport {useTranslation} from '../../../../../i18n'\nimport {useCurrentUser} from '../../../../../store'\nimport {useMentionUser} from '../../../../context'\nimport {tasksLocaleNamespace} from '../../../../i18n'\nimport {type FormMode} from '../../../../types'\nimport {renderBlock} from './render'\n\nconst DescriptionInputRoot = styled.div<{$mode: FormMode; $minHeight: number}>((props) => {\n  const theme = getTheme_v2(props.theme)\n  const verticalPadding = props.$mode === 'edit' ? theme.space[1] : theme.space[3]\n  const minHeight = props.$mode === 'edit' ? 120 : 200\n  return css`\n    /* select CommentInputEditableWrap and change the padding */\n    [data-ui='CommentInputEditableWrap'] {\n      overflow: hidden;\n      padding: ${props.$mode === 'edit'\n        ? `${verticalPadding}px 0px`\n        : `${verticalPadding}px ${theme.space[2]}px`};\n      min-height: ${Math.max(props.$minHeight + verticalPadding, minHeight)}px !important;\n    }\n    #comment-input-root {\n      box-shadow: ${props.$mode === 'edit' ? 'none' : ''};\n    }\n    [data-ui='CommentInputActions'] {\n      display: none !important;\n    }\n  `\n})\n\nexport function DescriptionInput(props: ArrayFieldProps & {mode: FormMode}) {\n  const {\n    value: _propValue,\n    mode,\n    inputProps: {onChange},\n  } = props\n  const value = _propValue as PortableTextBlock[] | undefined\n  const currentUser = useCurrentUser()\n  const {mentionOptions} = useMentionUser()\n\n  const handleChange = useCallback((next: PortableTextBlock[]) => onChange(set(next)), [onChange])\n\n  const [rootRef, setRootRef] = useState<HTMLDivElement | null>(null)\n  const [textBoxScrollHeight, setTextBoxScrollHeight] = useState<number>(200)\n  const setTextboxHeight = useCallback((ref: HTMLDivElement) => {\n    const textBox = ref.querySelector('[role=\"textbox\"]')\n    if (!textBox) return\n\n    const height = textBox.scrollHeight\n    setTextBoxScrollHeight(height)\n  }, [])\n\n  const handleSetRootRef = useCallback((ref: HTMLDivElement) => {\n    if (!ref) return\n    startTransition(() => {\n      setRootRef(ref)\n    })\n  }, [])\n\n  const {t} = useTranslation(tasksLocaleNamespace)\n\n  useEffect(() => {\n    if (!rootRef) return\n    setTextboxHeight(rootRef)\n  }, [value, setTextboxHeight, rootRef])\n\n  if (!currentUser) return null\n  return (\n    <DescriptionInputRoot $mode={mode} ref={handleSetRootRef} $minHeight={textBoxScrollHeight}>\n      <CommentInput\n        expandOnFocus={false}\n        currentUser={currentUser}\n        mentionOptions={mentionOptions}\n        onChange={handleChange}\n        value={value ?? []}\n        withAvatar={false}\n        placeholder={t('form.input.description.placeholder')}\n        // eslint-disable-next-line react/jsx-no-bind\n        onDiscardConfirm={() => null}\n        renderBlock={renderBlock}\n      />\n    </DescriptionInputRoot>\n  )\n}\n","// eslint-disable-next-line camelcase\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {css, styled} from 'styled-components'\n\nimport {type StringFieldProps} from '../../../../form'\n\n/**\n * @internal\n * Updates the padding and font weight of the field header content box.\n */\nexport const FieldWrapperRoot = styled.div((props) => {\n  const theme = getTheme_v2(props.theme)\n\n  return css`\n    // Reset the padding of the field header content box\n    [data-ui='fieldHeaderContentBox'] {\n      padding: 0;\n      label {\n        font-weight: ${theme.font.text.weights.regular};\n      }\n    }\n  `\n})\n\nexport function FieldWrapper(props: StringFieldProps) {\n  return <FieldWrapperRoot>{props.renderDefault(props)}</FieldWrapperRoot>\n}\n","import {CheckmarkIcon, CircleIcon} from '@sanity/icons'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {type Path, type TitledListValue} from '@sanity/types'\nimport {Menu} from '@sanity/ui'\nimport {type ForwardedRef, forwardRef, useCallback} from 'react'\n\nimport {Button, MenuButton, MenuItem} from '../../../../../ui-components'\nimport {type FormPatch, type PatchEvent, set} from '../../../../form'\nimport {useTranslation} from '../../../../i18n'\nimport {TaskStatusChanged} from '../../../__telemetry__/tasks.telemetry'\nimport {TASK_STATUS} from '../../../constants/TaskStatus'\nimport {tasksLocaleNamespace} from '../../../i18n'\n\nexport const StatusMenuButton = forwardRef(function StatusMenuButton(\n  props: {value: string | undefined; options: TitledListValue<string>[]},\n  ref: ForwardedRef<HTMLButtonElement>,\n) {\n  const {t} = useTranslation(tasksLocaleNamespace)\n  const {value, options, ...rest} = props\n  const selectedOption = options.find((option) => option.value === value)\n  const icon = TASK_STATUS.find((status) => status.value === value)?.icon\n  return (\n    <Button\n      {...rest}\n      ref={ref}\n      tooltipProps={{content: t('form.input.status.button.tooltip')}}\n      icon={icon}\n      text={selectedOption?.title || value}\n      tone=\"default\"\n      mode=\"ghost\"\n    />\n  )\n})\n\ninterface StatusSelectorProps {\n  value: string | undefined\n  path: Path\n  options: TitledListValue<string>[]\n  onChange: (patch: FormPatch | PatchEvent | FormPatch[]) => void\n}\n\nexport function StatusSelector(props: StatusSelectorProps) {\n  const {value, onChange, options, path} = props\n  const telemetry = useTelemetry()\n\n  const handleStatusChange = useCallback(\n    (next?: string) => {\n      onChange(set(next, path))\n      telemetry.log(TaskStatusChanged, {from: value, to: next})\n    },\n    [onChange, path, telemetry, value],\n  )\n\n  return (\n    <MenuButton\n      button={<StatusMenuButton value={value} options={options} />}\n      id={`reference-menuButton`}\n      menu={\n        <Menu>\n          {options.map((option) => {\n            const isSelected = value === option.value\n            const icon = TASK_STATUS.find((status) => status.value === option.value)?.icon\n            return (\n              <MenuItem\n                key={option.title}\n                icon={typeof option.value === 'string' ? icon || CircleIcon : CircleIcon}\n                text={option.title || option.value}\n                pressed={isSelected}\n                iconRight={isSelected && <CheckmarkIcon />}\n                // eslint-disable-next-line react/jsx-no-bind\n                onClick={() => handleStatusChange(option.value)}\n              />\n            )\n          })}\n        </Menu>\n      }\n    />\n  )\n}\n","import {LoadingBlock} from '../../../components'\nimport {WorkspaceLoader} from '../../../studio'\n\nfunction ConfigErrorsScreen() {\n  // eslint-disable-next-line i18next/no-literal-string\n  return <div>Config errors</div>\n}\n\nexport function CurrentWorkspaceProvider({children}: {children: React.ReactNode}) {\n  return (\n    <WorkspaceLoader LoadingComponent={LoadingBlock} ConfigErrorsComponent={ConfigErrorsScreen}>\n      {children}\n    </WorkspaceLoader>\n  )\n}\n","import {CloseIcon, DocumentIcon} from '@sanity/icons'\nimport {Box, Card, Flex, LayerProvider, Stack, Text} from '@sanity/ui'\n// eslint-disable-next-line camelcase\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {type ForwardedRef, forwardRef, useCallback, useMemo, useState} from 'react'\nimport {IntentLink} from 'sanity/router'\nimport {css, styled} from 'styled-components'\n\nimport {Button} from '../../../../../ui-components'\nimport {FormFieldHeaderText, type ObjectFieldProps, set, unset} from '../../../../form'\nimport {useSchema} from '../../../../hooks'\nimport {useTranslation} from '../../../../i18n'\nimport {useDocumentPresence} from '../../../../store'\nimport {\n  SearchPopover,\n  SearchProvider,\n  SearchResultItemPreview,\n  useWorkspace,\n} from '../../../../studio'\nimport {getPublishedId, getVersionFromId} from '../../../../util/draftUtils'\nimport {tasksLocaleNamespace} from '../../../i18n'\nimport {type FormMode, type TaskTarget} from '../../../types'\nimport {CurrentWorkspaceProvider} from '../CurrentWorkspaceProvider'\nimport {getTargetValue} from '../utils'\nimport {FieldWrapperRoot} from './FieldWrapper'\n\nconst EmptyReferenceRoot = styled(Card)((props) => {\n  const theme = getTheme_v2(props.theme)\n\n  return css`\n    &:focus {\n      border: 1px solid var(--card-focus-ring-color);\n    }\n    &:focus-visible {\n      outline: none;\n      border: 1px solid var(--card-focus-ring-color);\n    }\n    &:hover {\n      border-color: ${theme.color.input.default.hovered.border};\n    }\n  `\n})\n\nconst Placeholder = styled(Text)((props) => {\n  const theme = getTheme_v2(props.theme)\n  return `\n      color: ${theme.color.input.default.enabled.placeholder};\n      margin-left: 3px;\n  `\n})\n\n// This allows to hide and show the remove button on hover or focus.\nconst TargetRoot = styled(Card)`\n  position: relative;\n  [data-ui='show-on-hover'] {\n    opacity: 0;\n    position: absolute;\n    right: 6px;\n    top: 4px;\n    display: flex;\n  }\n  &:focus-within,\n  &:hover {\n    padding-right: 36px;\n    /* Hides the preview status dot, the button will take it's position. */\n    [data-testid='compact-preview__status'] {\n      opacity: 0;\n    }\n    [data-ui='show-on-hover'] {\n      transition: opacity 200ms;\n      opacity: 1;\n    }\n  }\n`\nconst StyledIntentLink = styled(IntentLink)(() => {\n  return css`\n    text-decoration: none;\n    width: 100%;\n    overflow: hidden;\n    cursor: pointer;\n    &:focus {\n      box-shadow: 0 0 0 1px var(--card-focus-ring-color);\n    }\n    &:focus-visible {\n      outline: none;\n      box-shadow: 0 0 0 1px var(--card-focus-ring-color);\n    }\n  `\n})\n\nfunction Preview(props: {value: TaskTarget; handleRemove: () => void}) {\n  const {value, handleRemove} = props\n  const documentId = value.document._ref\n  const documentType = value.documentType\n  const schema = useSchema()\n  const schemaType = schema.get(value.documentType)\n  const documentPresence = useDocumentPresence(documentId)\n  const {t} = useTranslation(tasksLocaleNamespace)\n  const CardLink = useMemo(\n    () =>\n      forwardRef(function LinkComponent(linkProps, ref: ForwardedRef<HTMLAnchorElement>) {\n        const versionId = getVersionFromId(documentId)\n\n        return (\n          <StyledIntentLink\n            {...linkProps}\n            intent=\"edit\"\n            params={{id: getPublishedId(documentId), type: documentType}}\n            ref={ref}\n            searchParams={versionId ? [['perspective', versionId]] : undefined}\n          />\n        )\n      }),\n    [documentId, documentType],\n  )\n  if (!schemaType) {\n    return <Text>{t('form.input.target.error.schema-not-found')}</Text>\n  }\n\n  return (\n    <TargetRoot border radius={2}>\n      <Flex gap={1} align={'center'} justify={'space-between'}>\n        <Card as={CardLink} radius={2} data-as=\"button\">\n          <SearchResultItemPreview\n            documentType={documentType}\n            documentId={value.document._ref}\n            layout={'compact'}\n            presence={documentPresence}\n            schemaType={schemaType}\n            showBadge={false}\n          />\n        </Card>\n\n        <div data-ui=\"show-on-hover\">\n          <Button\n            icon={CloseIcon}\n            mode=\"bleed\"\n            onClick={handleRemove}\n            tooltipProps={{content: t('form.input.target.buttons.remove.text')}}\n          />\n        </div>\n      </Flex>\n    </TargetRoot>\n  )\n}\n\nexport function TargetField(\n  props: ObjectFieldProps & {\n    mode: FormMode\n  },\n) {\n  const [open, setOpen] = useState(false)\n  const {dataset, projectId} = useWorkspace()\n  const {\n    mode,\n    inputProps: {onChange},\n    value: _propValue,\n  } = props\n\n  const value = _propValue as unknown as TaskTarget | undefined\n\n  const handleItemSelect = useCallback(\n    (item: {_id: string; _type: string}) => {\n      onChange(\n        set(\n          getTargetValue({\n            documentId: item._id,\n            documentType: item._type,\n            dataset,\n            projectId,\n          }),\n        ),\n      )\n    },\n    [dataset, projectId, onChange],\n  )\n\n  const handleRemove = useCallback(() => {\n    onChange(unset())\n  }, [onChange])\n\n  const handleOpenSearch = useCallback(() => {\n    setOpen(true)\n  }, [setOpen])\n\n  const handleCloseSearch = useCallback(() => {\n    setOpen(false)\n  }, [setOpen])\n\n  const handleKeyDown = useCallback((event: React.KeyboardEvent) => {\n    if (event.key === 'Enter' || event.key === ' ') setOpen(true)\n  }, [])\n\n  const {t} = useTranslation(tasksLocaleNamespace)\n\n  return (\n    <Card borderBottom={mode === 'edit'} paddingBottom={mode === 'edit' ? 4 : 0}>\n      <FieldWrapperRoot>\n        <LayerProvider zOffset={100}>\n          <CurrentWorkspaceProvider>\n            <SearchProvider>\n              <Stack space={2}>\n                {mode === 'create' && (\n                  <Box data-ui=\"fieldHeaderContentBox\">\n                    <FormFieldHeaderText\n                      description={props.description}\n                      inputId={props.inputId}\n                      title={props.title}\n                      validation={props.validation}\n                      deprecated={undefined}\n                    />\n                  </Box>\n                )}\n\n                {value ? (\n                  <Preview value={value} handleRemove={handleRemove} />\n                ) : (\n                  <EmptyReferenceRoot\n                    border\n                    radius={2}\n                    paddingX={2}\n                    paddingY={3}\n                    onClick={handleOpenSearch}\n                    onKeyDown={handleKeyDown}\n                    tabIndex={0}\n                  >\n                    <Flex gap={1} justify={'flex-start'} align={'center'}>\n                      <Box paddingX={1}>\n                        <Text size={1}>\n                          <DocumentIcon />\n                        </Text>\n                      </Box>\n                      <Placeholder size={1}>\n                        {t('form.input.target.search.placeholder')}\n                      </Placeholder>\n                    </Flex>\n                  </EmptyReferenceRoot>\n                )}\n              </Stack>\n              <SearchPopover\n                open={open}\n                onClose={handleCloseSearch}\n                onItemSelect={handleItemSelect}\n                disableIntentLink\n              />\n            </SearchProvider>\n          </CurrentWorkspaceProvider>\n        </LayerProvider>\n      </FieldWrapperRoot>\n    </Card>\n  )\n}\n","import {type Path} from '@sanity/types'\n// eslint-disable-next-line camelcase\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {type ChangeEvent, useCallback, useEffect, useRef} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {type FormPatch, type PatchEvent, set, type StringFieldProps, unset} from '../../../../form'\n\nconst Root = styled.div((props) => {\n  const theme = getTheme_v2(props.theme)\n  return `\n      display: grid;\n      grid-template-columns: 1fr;\n      padding-top: ${theme.space[3]}px;\n    `\n})\nconst TitleInput = styled.textarea((props) => {\n  const {color, font} = getTheme_v2(props.theme)\n\n  return css`\n    resize: none;\n    overflow: hidden;\n    appearance: none;\n    background: none;\n    border: 0;\n    padding: 0;\n    border-radius: 0;\n    outline: none;\n    width: 100%;\n    box-sizing: border-box;\n    font-family: ${font.text.family};\n    font-weight: ${font.text.weights.semibold};\n    font-size: ${font.text.sizes[3].fontSize}px;\n    line-height: ${font.text.sizes[3].lineHeight}px;\n    margin: 0;\n    position: relative;\n    z-index: 1;\n    display: block;\n    transition: height 500ms;\n    /* NOTE: This is a hack to disable Chrome’s autofill styles */\n    &:-webkit-autofill,\n    &:-webkit-autofill:hover,\n    &:-webkit-autofill:focus,\n    &:-webkit-autofill:active {\n      -webkit-text-fill-color: var(--input-fg-color) !important;\n      transition: background-color 5000s;\n      transition-delay: 86400s /* 24h */;\n    }\n\n    color: ${color.input.default.enabled.fg};\n\n    &::placeholder {\n      color: ${color.input.default.enabled.placeholder};\n    }\n  `\n})\n\nexport function Title(props: {\n  value: string | undefined\n  path?: Path\n  onChange: (patch: FormPatch | PatchEvent | FormPatch[]) => void\n  placeholder?: string\n}) {\n  const {value, onChange, placeholder, path} = props\n  const ref = useRef<HTMLTextAreaElement | null>(null)\n\n  useEffect(() => {\n    // Set the height of the title to make it auto grow.\n    if (!ref.current) return\n    ref.current.style.height = 'auto'\n    ref.current.style.height = `${ref.current.scrollHeight}px`\n  }, [value])\n\n  const handleChange = useCallback(\n    (event: ChangeEvent<HTMLTextAreaElement>) => {\n      const inputValue = event.currentTarget.value\n      if (!inputValue) onChange(unset(path))\n      return onChange(set(inputValue.replace(/\\n/g, ''), path))\n    },\n    [onChange, path],\n  )\n\n  return (\n    <Root>\n      <TitleInput\n        ref={ref}\n        autoFocus={!value}\n        value={value}\n        placeholder={placeholder}\n        onChange={handleChange}\n        rows={1}\n      />\n    </Root>\n  )\n}\n\nexport function TitleField(props: StringFieldProps) {\n  const {value, inputProps} = props\n  const {onChange, schemaType} = inputProps\n\n  return <Title value={value} onChange={onChange} placeholder={schemaType.placeholder} />\n}\n","import {TrashIcon} from '@sanity/icons'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {Box, Flex, Switch, Text, useToast} from '@sanity/ui'\nimport {useCallback, useEffect, useState} from 'react'\nimport {useEffectEvent} from 'use-effect-event'\n\nimport {Button} from '../../../../../ui-components'\nimport {type ObjectInputProps, set} from '../../../../form'\nimport {useTranslation} from '../../../../i18n'\nimport {TaskCreated} from '../../../__telemetry__/tasks.telemetry'\nimport {useTasks, useTasksNavigation} from '../../../context'\nimport {useRemoveTask} from '../../../hooks'\nimport {tasksLocaleNamespace} from '../../../i18n'\nimport {type TaskDocument} from '../../../types'\nimport {getMentionedUsers} from '../utils'\n\nconst getTaskSubscribers = (task: TaskDocument): string[] => {\n  const subscribers = task.subscribers || []\n\n  getMentionedUsers(task.description).forEach((user) => {\n    if (!subscribers.includes(user)) subscribers.push(user)\n  })\n\n  // Check if the task has been assigned, add the assignee to the subscribers list.\n  if (task.assignedTo) {\n    if (!subscribers.includes(task.assignedTo)) {\n      subscribers.push(task.assignedTo)\n    }\n  }\n  return subscribers\n}\nexport function FormCreate(props: ObjectInputProps) {\n  const [creating, setCreating] = useState(false)\n  const {onChange} = props\n  const {setViewMode, setActiveTab} = useTasksNavigation()\n  const toast = useToast()\n  const telemetry = useTelemetry()\n\n  const [createMore, setCreateMore] = useState(false)\n  const handleCreateMore = useCallback(() => setCreateMore((p) => !p), [])\n\n  const value = props.value as TaskDocument\n  const onRemove = useCallback(() => {\n    setViewMode({type: 'list'})\n  }, [setViewMode])\n  const {handleRemove, removeStatus} = useRemoveTask({id: value._id, onRemoved: onRemove})\n  const {t} = useTranslation(tasksLocaleNamespace)\n  const {data} = useTasks()\n  const savedTask = data.find((task) => task._id === value._id)\n\n  const handleCreatingSuccess = useEffectEvent(() => {\n    telemetry.log(TaskCreated)\n    toast.push({\n      closable: true,\n      status: 'success',\n      title: t('form.status.success'),\n    })\n\n    setCreating(false)\n    if (createMore) {\n      setViewMode({type: 'create'})\n    } else {\n      setActiveTab('subscribed')\n    }\n  })\n  useEffect(() => {\n    // This useEffect takes care of closing the form when a task entered the \"creation\" state.\n    // That action is async and we don't have access to the promise, once the value is updated in the form we will close the form.\n    if (creating && savedTask?.createdByUser) {\n      handleCreatingSuccess()\n    }\n  }, [creating, savedTask?.createdByUser])\n\n  const handleCreatingTimeout = useEffectEvent(() => {\n    setCreating(false)\n    toast.push({\n      closable: true,\n      status: 'error',\n      title: t('form.status.error.creation-failed'),\n    })\n  })\n  useEffect(() => {\n    // If after 10 seconds the task is still in the \"creating\" state, show an error and reset the creating state.\n    let timeoutId: ReturnType<typeof setTimeout> | null = null\n    if (creating) {\n      timeoutId = setTimeout(() => handleCreatingTimeout(), 10000)\n    }\n    // Cleanup function to clear the timeout\n    return () => {\n      if (timeoutId) clearTimeout(timeoutId)\n    }\n  }, [creating])\n\n  const handleCreate = useCallback(async () => {\n    setCreating(true)\n    if (!value?.title) {\n      toast.push({\n        closable: true,\n        status: 'error',\n        title: t('form.status.error.title-required'),\n      })\n      return\n    }\n    onChange([\n      set(getTaskSubscribers(value), ['subscribers']),\n      set(new Date().toISOString(), ['createdByUser']),\n    ])\n  }, [value, onChange, t, toast])\n\n  return (\n    <>\n      {props.renderDefault(props)}\n\n      <Box paddingY={5}>\n        <Flex paddingTop={1} gap={4}>\n          {value._rev && (\n            <Button\n              onClick={handleRemove}\n              mode=\"bleed\"\n              icon={TrashIcon}\n              tooltipProps={{\n                content: t('buttons.discard.text'),\n              }}\n              disabled={removeStatus === 'loading'}\n              loading={removeStatus === 'loading'}\n            />\n          )}\n\n          <Flex align=\"center\" gap={2} justify={'flex-end'} flex={1}>\n            <Switch onChange={handleCreateMore} checked={createMore} />\n            <Text size={1} muted>\n              {t('form.input.create-more.text')}\n            </Text>\n          </Flex>\n\n          <Button\n            text={t('buttons.create.text')}\n            onClick={handleCreate}\n            disabled={creating}\n            loading={creating}\n          />\n        </Flex>\n      </Box>\n    </>\n  )\n}\n","import {Stack, Text} from '@sanity/ui'\n\nimport {Dialog} from '../../../../ui-components'\nimport {useTranslation} from '../../../i18n'\nimport {type useRemoveTask} from '../../hooks'\nimport {tasksLocaleNamespace} from '../../i18n'\n\nexport function RemoveTaskDialog(props: ReturnType<typeof useRemoveTask>) {\n  const {handleCloseDialog, handleRemove, removeStatus, showDialog} = props\n  const {t} = useTranslation(tasksLocaleNamespace)\n  if (showDialog) {\n    return (\n      <Dialog\n        id=\"remove-task\"\n        header={t('dialog.remove-task.title')}\n        onClose={handleCloseDialog}\n        footer={{\n          cancelButton: {\n            text: t('dialog.remove-task.buttons.cancel.text'),\n            onClick: handleCloseDialog,\n          },\n          confirmButton: {\n            text: t('dialog.remove-task.buttons.confirm.text'),\n            tone: 'critical',\n            onClick: handleRemove,\n            loading: removeStatus === 'loading',\n          },\n        }}\n      >\n        <Stack space={3}>\n          <Text as=\"p\">{t('dialog.remove-task.body')}</Text>\n        </Stack>\n      </Dialog>\n    )\n  }\n  return null\n}\n","import {CopyIcon, LinkIcon, TrashIcon} from '@sanity/icons'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {type PortableTextBlock} from '@sanity/types'\nimport {Box, Card, Flex, Menu, MenuDivider, Stack} from '@sanity/ui'\n// eslint-disable-next-line camelcase\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {useCallback} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {MenuButton, MenuItem, TooltipDelayGroupProvider} from '../../../../../ui-components'\nimport {CommentsProvider} from '../../../../comments'\nimport {ContextMenuButton, LoadingBlock} from '../../../../components'\nimport {\n  type FormPatch,\n  type ObjectInputProps,\n  type PatchEvent,\n  set,\n  TransformPatches,\n} from '../../../../form'\nimport {useTranslation} from '../../../../i18n'\nimport {useCurrentUser} from '../../../../store'\nimport {TaskDuplicated, TaskRemoved} from '../../../__telemetry__/tasks.telemetry'\nimport {useTasksEnabled, useTasksNavigation} from '../../../context'\nimport {useActivityLog, useRemoveTask} from '../../../hooks'\nimport {tasksLocaleNamespace} from '../../../i18n'\nimport {type TaskDocument} from '../../../types'\nimport {TasksActivityLog} from '../../activity'\nimport {CurrentWorkspaceProvider} from '../CurrentWorkspaceProvider'\nimport {AssigneeEditFormField, DateEditFormField, StatusSelector, Title} from '../fields'\nimport {RemoveTaskDialog} from '../RemoveTaskDialog'\nimport {getMentionedUsers} from '../utils'\n\nconst FirstRow = styled(Flex)((props) => {\n  const theme = getTheme_v2(props.theme)\n  return css`\n    column-gap: ${theme.space[2]}px;\n    row-gap: ${theme.space[3]}px;\n  `\n})\n\nfunction FormActionsMenu({id, value}: {id: string; value: TaskDocument}) {\n  const {setViewMode, handleCopyLinkToTask} = useTasksNavigation()\n  const {mode} = useTasksEnabled()\n  const telemetry = useTelemetry()\n\n  const onTaskRemoved = useCallback(() => {\n    setViewMode({type: 'list'})\n    telemetry.log(TaskRemoved)\n  }, [setViewMode, telemetry])\n  const removeTask = useRemoveTask({id, onRemoved: onTaskRemoved})\n\n  const duplicateTask = useCallback(() => {\n    setViewMode({type: 'duplicate', duplicateTaskValues: value})\n    telemetry.log(TaskDuplicated)\n  }, [setViewMode, telemetry, value])\n\n  const {t} = useTranslation(tasksLocaleNamespace)\n\n  return (\n    <>\n      <Box paddingTop={3}>\n        <MenuButton\n          id=\"edit-task-menu\"\n          button={<ContextMenuButton />}\n          popover={{\n            placement: 'bottom',\n            fallbackPlacements: ['bottom-end', 'bottom-start'],\n          }}\n          menu={\n            <Menu>\n              <MenuItem\n                text={t('menuitem.duplicate.text')}\n                icon={CopyIcon}\n                onClick={duplicateTask}\n                tooltipProps={\n                  mode === 'upsell' ? {content: t('menuitem.duplicate.upsell-tooltip')} : undefined\n                }\n                disabled={mode === 'upsell'}\n              />\n              <MenuItem\n                text={t('menuitem.copylink.text')}\n                icon={LinkIcon}\n                onClick={handleCopyLinkToTask}\n              />\n              <MenuDivider />\n              <MenuItem\n                text={t('menuitem.delete.text')}\n                icon={TrashIcon}\n                onClick={removeTask.handleOpenDialog}\n                tone=\"critical\"\n              />\n            </Menu>\n          }\n        />\n      </Box>\n      <RemoveTaskDialog {...removeTask} />\n    </>\n  )\n}\n\nfunction FormEditInner(props: ObjectInputProps) {\n  const statusField = props.schemaType.fields.find((f) => f.name === 'status')\n  const value = props.value as TaskDocument\n  const currentUser = useCurrentUser()\n  const {t} = useTranslation(tasksLocaleNamespace)\n  const activityData = useActivityLog(value).changes\n  const handleChangeAndSubscribe = useCallback(\n    (patch: FormPatch | PatchEvent | FormPatch[]) => {\n      const subscribers = value.subscribers || []\n      props.onChange(patch)\n      if (!currentUser) return\n      if (!subscribers.includes(currentUser.id)) {\n        props.onChange(set([...subscribers, currentUser.id], ['subscribers']))\n      }\n    },\n    [currentUser, props, value.subscribers],\n  )\n  if (!statusField) {\n    throw new Error('Status field not found')\n  }\n  if (!props.value?._id) {\n    return <LoadingBlock />\n  }\n\n  return (\n    <>\n      <Flex align=\"flex-start\" gap={3}>\n        <Stack flex={1}>\n          <Title\n            onChange={handleChangeAndSubscribe}\n            value={props.value?.title}\n            path={['title']}\n            placeholder={t('form.input.title.placeholder')}\n          />\n        </Stack>\n        <FormActionsMenu id={props.value?._id} value={value} />\n      </Flex>\n\n      <Card borderTop marginTop={3}>\n        <FirstRow\n          paddingBottom={3}\n          paddingTop={4}\n          align=\"flex-start\"\n          justify=\"flex-start\"\n          wrap=\"wrap\"\n        >\n          <TooltipDelayGroupProvider>\n            <StatusSelector\n              value={props.value?.status}\n              path={['status']}\n              onChange={handleChangeAndSubscribe}\n              options={statusField.type.options.list}\n            />\n            <AssigneeEditFormField\n              value={props.value?.assignedTo}\n              onChange={handleChangeAndSubscribe}\n              path={['assignedTo']}\n            />\n            <DateEditFormField\n              value={props.value?.dueBy}\n              onChange={handleChangeAndSubscribe}\n              path={['dueBy']}\n            />\n          </TooltipDelayGroupProvider>\n        </FirstRow>\n      </Card>\n\n      {props.renderDefault(props)}\n      <CommentsProvider\n        documentId={value._id}\n        documentType=\"tasks.task\"\n        sortOrder=\"asc\"\n        type=\"task\"\n      >\n        <CurrentWorkspaceProvider>\n          <Card borderTop paddingTop={4} marginTop={4} paddingBottom={6}>\n            <TasksActivityLog\n              value={value}\n              onChange={props.onChange}\n              path={['subscribers']}\n              activityData={activityData}\n            />\n          </Card>\n        </CurrentWorkspaceProvider>\n      </CommentsProvider>\n    </>\n  )\n}\n\nexport function FormEdit(props: ObjectInputProps) {\n  const value = props.value as TaskDocument\n  const currentUser = useCurrentUser()\n\n  const transformPatches = useCallback(\n    (patches: FormPatch[]) => {\n      if (!currentUser) return patches\n      if (patches.some((patch) => patch.path[0] === 'subscribers')) {\n        return patches\n      }\n      if (\n        patches.some((patch) => patch.path[0] === 'context' && patch.path[1] === 'notification')\n      ) {\n        return patches\n      }\n\n      const subscribers = value.subscribers || []\n      const newSubscribers = [...subscribers]\n\n      // If the assignee field is changing, we should subscribe the new assignee to the task.\n      const changeAssigneePatch = patches.find((patch) => patch.path[0] === 'assignedTo')\n      if (\n        changeAssigneePatch &&\n        changeAssigneePatch.type === 'set' &&\n        typeof changeAssigneePatch.value === 'string' &&\n        !newSubscribers.includes(changeAssigneePatch.value)\n      ) {\n        newSubscribers.push(changeAssigneePatch.value)\n      }\n\n      // When the user edits the form it should be subscribed to it, unless he is changing the subscribers list.\n      if (!newSubscribers.includes(currentUser.id)) {\n        newSubscribers.push(currentUser.id)\n      }\n\n      // Check if the description field changed, and new mentions have been added.\n      const changedDescriptionPatch = patches.find(\n        (patch) => patch.path[0] === 'description' && patch.type === 'set',\n      )\n      if (changedDescriptionPatch) {\n        const prevMentionedUser = getMentionedUsers(value.description)\n        const newDescription =\n          changedDescriptionPatch.type === 'set'\n            ? (changedDescriptionPatch.value as PortableTextBlock[] | undefined)\n            : undefined\n\n        const newMentionedUser = getMentionedUsers(newDescription)\n\n        const diff = newMentionedUser.filter((user) => !prevMentionedUser.includes(user))\n        diff.forEach((user) => {\n          if (!newSubscribers.includes(user)) {\n            newSubscribers.push(user)\n          }\n        })\n      }\n\n      // If the subscribers list has changed, we should update the subscribers list.\n      if (newSubscribers.length !== subscribers.length) {\n        patches.push(set(newSubscribers, ['subscribers']))\n      }\n\n      return patches\n    },\n    [currentUser, value.subscribers, value.description],\n  )\n\n  return (\n    <TransformPatches transform={transformPatches}>\n      <FormEditInner {...props} />\n    </TransformPatches>\n  )\n}\n","import {isImageSource} from '@sanity/asset-utils'\nimport imageUrlBuilder from '@sanity/image-url'\nimport {useCallback, useEffect, useMemo} from 'react'\nimport deepEquals from 'react-fast-compare'\nimport {useRouterState} from 'sanity/router'\n\nimport {isDev} from '../../../../environment'\nimport {type ObjectFieldProps, set, useFormValue} from '../../../../form'\nimport {useClient} from '../../../../hooks'\nimport {useWorkspace} from '../../../../studio'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../../../studioClient'\nimport {useDocumentPreviewValues} from '../../../hooks'\nimport {type TaskContext, type TaskDocument} from '../../../types'\nimport {CurrentWorkspaceProvider} from '../CurrentWorkspaceProvider'\n\nexport function getTaskURL(taskId: string, basePath?: string, toolName: string = ''): string {\n  let path = window.location.origin\n  if (basePath) path += basePath\n  if (toolName) path += `/${toolName}`\n\n  const currentUrl = new URL(`${path}/`)\n\n  currentUrl.searchParams.set('sidebar', 'tasks')\n  currentUrl.searchParams.set('selectedTask', taskId)\n  currentUrl.searchParams.set('viewMode', 'edit')\n  return currentUrl.toString()\n}\n\nfunction TasksNotificationTargetInner(props: ObjectFieldProps<TaskDocument>) {\n  const {inputProps} = props\n  const {onChange} = inputProps\n  const activeToolName = useRouterState(\n    useCallback(\n      (routerState) => (typeof routerState.tool === 'string' ? routerState.tool : undefined),\n      [],\n    ),\n  )\n  const {target, _id, context, _rev} = useFormValue([]) as TaskDocument\n  const {title: workspaceTitle, basePath} = useWorkspace()\n  const client = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n  const imageBuilder = useMemo(() => imageUrlBuilder(client), [client])\n  const documentId = target?.document?._ref ?? ''\n  const documentType = target?.documentType ?? ''\n\n  const {isLoading: previewValuesLoading, value} = useDocumentPreviewValues({\n    documentId,\n    documentType,\n  })\n  const targetContentTitle = value?.title || null\n  const imageUrl = isImageSource(value?.media)\n    ? imageBuilder.image(value.media).width(96).height(96).url()\n    : null\n\n  const notificationTarget: TaskContext['notification'] = useMemo(() => {\n    const contextUrl = context?.notification?.url\n    const studioUrl =\n      // Avoid updating the contextURL in dev mode if it already exists, persist the deployed one.\n      contextUrl && isDev ? contextUrl : getTaskURL(_id, basePath, activeToolName)\n\n    return {\n      url: studioUrl,\n      workspaceTitle,\n      targetContentImageUrl: imageUrl,\n      targetContentTitle: targetContentTitle,\n    }\n  }, [\n    context?.notification?.url,\n    _id,\n    basePath,\n    activeToolName,\n    workspaceTitle,\n    imageUrl,\n    targetContentTitle,\n  ])\n\n  useEffect(() => {\n    if (documentId && documentType && previewValuesLoading) {\n      // Wait until the preview values are loaded\n      return\n    }\n\n    // If the task doesn't have a _rev it means it's not created, don't add the notification target yet.\n    if (!_rev) {\n      return\n    }\n\n    if (deepEquals(context?.notification, notificationTarget)) {\n      return\n    }\n    // Something changed, update the notification target\n    onChange(set(notificationTarget, ['notification']))\n  }, [_rev, context, documentId, documentType, notificationTarget, previewValuesLoading, onChange])\n\n  return null\n}\n\n// This component is listening to the changes to the form value and will update the notification target in the task document.\nexport function TasksNotificationTarget(props: ObjectFieldProps<TaskDocument>) {\n  return (\n    <CurrentWorkspaceProvider>\n      <TasksNotificationTargetInner {...props} />\n    </CurrentWorkspaceProvider>\n  )\n}\n","import {defineField, defineType} from '@sanity/types'\n\nimport {type ArrayFieldProps, type ObjectFieldProps} from '../../../../form'\nimport {TASK_STATUS} from '../../../constants/TaskStatus'\nimport {type FormMode} from '../../../types'\nimport {\n  AssigneeCreateFormField,\n  DescriptionInput,\n  FieldWrapper,\n  TargetField,\n  TitleField,\n} from '../fields'\nimport {FormCreate} from '../tasksFormBuilder/FormCreate'\nimport {FormEdit} from '../tasksFormBuilder/FormEdit'\nimport {TasksNotificationTarget} from '../tasksFormBuilder/TasksNotificationTarget'\n\nconst targetContentField = (mode: FormMode) =>\n  defineField({\n    type: 'object',\n    name: 'target',\n    title: 'Target',\n    components: {\n      field: (props: ObjectFieldProps) => <TargetField {...props} mode={mode} />,\n    },\n    fields: [\n      {\n        name: 'document',\n        type: 'crossDatasetReference',\n        dataset: 'playground',\n        weak: true,\n        studioUrl: ({id, type}) => `intent/edit/id=${id};type=${type}/`,\n        to: [\n          {\n            type: 'any_document',\n            preview: {\n              select: {title: 'title'},\n            },\n          },\n        ],\n      },\n      {\n        name: 'documentType',\n        type: 'string',\n        title: 'Document type',\n      },\n    ],\n  })\n\nconst descriptionInputField = (mode: FormMode) =>\n  defineField({\n    type: 'array',\n    name: 'description',\n    title: 'Description',\n    components: {\n      field: (props: ArrayFieldProps) => <DescriptionInput {...props} mode={mode} />,\n    },\n    of: [\n      {\n        type: 'block',\n        name: 'block',\n        of: [\n          {\n            name: 'mention',\n            type: 'object',\n            fields: [\n              {\n                name: 'userId',\n                type: 'string',\n              },\n            ],\n          },\n        ],\n        marks: {\n          annotations: [],\n        },\n        styles: [{title: 'Normal', value: 'normal'}],\n        lists: [],\n      },\n    ],\n  })\nexport const taskSchema = (mode: FormMode) =>\n  defineType({\n    type: 'document',\n    name: 'tasks.task',\n    liveEdit: true,\n    components: {\n      input: mode === 'edit' ? FormEdit : FormCreate,\n    },\n    fields: [\n      {\n        type: 'string',\n        title: 'Title',\n        name: 'title',\n        placeholder: 'Task title',\n        components: {\n          field: TitleField,\n        },\n        hidden: mode === 'edit',\n      },\n      ...(mode === 'edit'\n        ? [targetContentField(mode), descriptionInputField(mode)]\n        : [descriptionInputField(mode), targetContentField(mode)]),\n      {\n        type: 'string',\n        name: 'assignedTo',\n        title: 'Assign to',\n        placeholder: 'Select assignee',\n        components: {\n          field: FieldWrapper,\n          input: AssigneeCreateFormField,\n        },\n        hidden: mode === 'edit',\n      },\n      {\n        type: 'date',\n        name: 'dueBy',\n        title: 'Deadline',\n        placeholder: 'yyyy-mm-dd',\n        components: {\n          field: FieldWrapper,\n        },\n        hidden: mode === 'edit',\n      },\n      {\n        type: 'string',\n        name: 'authorId',\n        hidden: true,\n      },\n      {\n        type: 'string',\n        name: 'createdByUser',\n        hidden: true,\n      },\n      {\n        type: 'array',\n        of: [{type: 'string'}],\n        name: 'subscribers',\n        hidden: true,\n      },\n      {\n        type: 'string',\n        name: 'status',\n        title: 'Status',\n        options: {\n          list: TASK_STATUS.map((s) => ({value: s.value, title: s.title})),\n        },\n        hidden: true,\n      },\n      {\n        type: 'object',\n        name: 'context',\n        components: {\n          field: TasksNotificationTarget,\n        },\n        fields: [\n          {\n            type: 'object',\n            name: 'notification',\n            fields: [\n              {\n                type: 'string',\n                name: 'url',\n              },\n              {\n                type: 'string',\n                name: 'workspaceTitle',\n              },\n              {\n                type: 'string',\n                name: 'targetContentImageUrl',\n              },\n              {\n                type: 'string',\n                name: 'targetContentTitle',\n              },\n            ],\n          },\n        ],\n      },\n    ],\n  })\n","import {useEffect, useMemo} from 'react'\n\nimport {LoadingBlock} from '../../../../components'\nimport {type Config, prepareConfig} from '../../../../config'\nimport {useClient} from '../../../../hooks'\nimport {ResourceCacheProvider} from '../../../../store'\nimport {\n  SourceProvider,\n  useAddonDataset,\n  useSource,\n  useWorkspaceLoader,\n  WorkspaceProvider,\n} from '../../../../studio'\nimport {API_VERSION} from '../../../constants'\nimport {type FormMode} from '../../../types'\nimport {taskSchema} from './taskSchema'\n\nfunction TasksAddonWorkspaceProviderInner({\n  children,\n  mode,\n  addonDataset,\n}: {\n  addonDataset: string\n  children: React.ReactNode\n  mode: FormMode\n}) {\n  const client = useClient({apiVersion: API_VERSION})\n  const apiHost = client.config().apiHost\n  // TODO: Is basePath necessary here?\n  const basePath = ''\n\n  // Parent workspace source, we want to use the same project id\n  const source = useSource()\n  const addonDatasetConfig: Config = useMemo(\n    () => ({\n      basePath,\n      dataset: addonDataset,\n      name: `addon-dataset-${addonDataset}`,\n      projectId: source.projectId,\n      apiHost,\n      schema: {\n        types: [taskSchema(mode)],\n      },\n    }),\n    [source.projectId, mode, apiHost, addonDataset, basePath],\n  )\n\n  const {workspaces} = useMemo(\n    () => prepareConfig(addonDatasetConfig, {basePath}),\n    [addonDatasetConfig, basePath],\n  )\n  const addonWorkspace = useWorkspaceLoader(workspaces[0])\n  if (!addonWorkspace) return null\n  return (\n    <WorkspaceProvider workspace={addonWorkspace}>\n      <SourceProvider source={addonWorkspace.unstable_sources[0]}>\n        <ResourceCacheProvider>{children}</ResourceCacheProvider>\n      </SourceProvider>\n    </WorkspaceProvider>\n  )\n}\n\n/**\n * Provides a workspace for the addon dataset, with the correct schema for tasks.\n * It also, creates the addon dataset if it doesn't exist.\n */\nexport function TasksAddonWorkspaceProvider(props: {children: React.ReactNode; mode: FormMode}) {\n  const {client: addonDatasetClient, ready, createAddonDataset} = useAddonDataset()\n  const addonDataset = addonDatasetClient?.config().dataset\n\n  useEffect(() => {\n    if (!addonDataset && ready) {\n      // The user is trying to use the addon dataset form, but it hasn't been created yet.\n      // We should create it.\n      createAddonDataset()\n    }\n  }, [addonDataset, ready, createAddonDataset])\n\n  if (!addonDataset) {\n    return <LoadingBlock />\n  }\n\n  return <TasksAddonWorkspaceProviderInner {...props} addonDataset={addonDataset} />\n}\n","import {type SanityDocument, type SanityDocumentLike} from '@sanity/types'\nimport {Box, rem} from '@sanity/ui'\n// eslint-disable-next-line camelcase\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {motion, type Variants} from 'framer-motion'\nimport {useEffect, useMemo, useState} from 'react'\nimport {styled} from 'styled-components'\n\nimport {LoadingBlock} from '../../../../components'\nimport {createPatchChannel, FormBuilder, useDocumentForm} from '../../../../form'\nimport {useCurrentUser} from '../../../../store'\nimport {useWorkspace} from '../../../../studio'\nimport {MentionUserProvider, useMentionUser, useTasks, useTasksNavigation} from '../../../context'\nimport {type TaskDocument, type TaskTarget} from '../../../types'\nimport {TasksAddonWorkspaceProvider} from '../addonWorkspace'\nimport {getTargetValue} from '../utils'\n\nconst VARIANTS: Variants = {\n  hidden: {opacity: 0},\n  visible: {\n    opacity: 1,\n    transition: {duration: 0.2, delay: 0.2},\n  },\n}\n\nconst FormBuilderRoot = styled(motion.div)((props) => {\n  const theme = getTheme_v2(props.theme)\n\n  return `\n    // Update spacing for the form builder\n    & > [data-ui='Stack'] {\n      grid-gap: ${rem(theme.space[4])};\n    }\n`\n})\n\n/**\n * A partial task document with the `_id` and `_type` fields.\n */\ntype TaskDocumentInitialValue = Partial<TaskDocument> & SanityDocumentLike\n\nconst TasksFormBuilderInner = ({\n  documentId,\n  initialValue,\n}: {\n  documentId: string\n  initialValue?: TaskDocumentInitialValue\n}) => {\n  const [patchChannel] = useState(() => createPatchChannel())\n\n  const {\n    formState,\n    onChange,\n    onPathOpen,\n    onFocus,\n    onBlur,\n    onSetActiveFieldGroup,\n    onSetCollapsedFieldSet,\n    onSetCollapsedPath,\n    collapsedFieldSets,\n    ready,\n    collapsedPaths,\n    schemaType,\n    value,\n  } = useDocumentForm({\n    documentId,\n    documentType: 'tasks.task',\n    initialValue: initialValue\n      ? {\n          loading: false,\n          value: initialValue,\n          error: null,\n        }\n      : undefined,\n  })\n\n  const isLoading = formState === null || !ready\n\n  // Updates the selected document in the mention user context - to verify the user permissions.\n  const {setSelectedDocument} = useMentionUser()\n\n  const target = isLoading ? undefined : (value?.target as TaskTarget)\n\n  const targetId = target?.document?._ref\n  const targetType = target?.documentType\n\n  useEffect(() => {\n    const documentValue =\n      targetId && targetType ? ({_id: targetId, _type: targetType} as SanityDocument) : null\n\n    setSelectedDocument(documentValue)\n  }, [targetId, targetType, setSelectedDocument])\n\n  return (\n    <Box>\n      {isLoading ? (\n        <LoadingBlock showText />\n      ) : (\n        <FormBuilderRoot id=\"wrapper\" initial=\"hidden\" animate=\"visible\" variants={VARIANTS}>\n          <FormBuilder\n            // eslint-disable-next-line camelcase\n            __internal_patchChannel={patchChannel}\n            id=\"root\"\n            onChange={onChange}\n            onPathFocus={onFocus}\n            onPathOpen={onPathOpen}\n            onPathBlur={onBlur}\n            onFieldGroupSelect={onSetActiveFieldGroup}\n            onSetFieldSetCollapsed={onSetCollapsedFieldSet}\n            onSetPathCollapsed={onSetCollapsedPath}\n            collapsedPaths={collapsedPaths}\n            collapsedFieldSets={collapsedFieldSets}\n            focusPath={formState.focusPath}\n            changed={formState.changed}\n            focused={formState.focused}\n            groups={formState.groups}\n            validation={formState.validation}\n            members={formState.members}\n            presence={formState.presence}\n            schemaType={schemaType}\n            value={value}\n          />\n        </FormBuilderRoot>\n      )}\n    </Box>\n  )\n}\n\n/**\n * @internal\n */\nexport function TasksFormBuilder() {\n  const currentUser = useCurrentUser()\n  const {activeDocument} = useTasks()\n  const {dataset, projectId} = useWorkspace()\n  const {\n    state: {selectedTask, viewMode, duplicateTaskValues},\n  } = useTasksNavigation()\n\n  const initialValue: TaskDocumentInitialValue | undefined = useMemo(() => {\n    if (!currentUser) return undefined\n    if (!selectedTask) return undefined\n    if (viewMode === 'duplicate') {\n      return {\n        ...duplicateTaskValues,\n        title: `${duplicateTaskValues?.title} (copy)`, // Set the new task title\n        createdByUser: undefined, // Remove the createdByUser field\n        _id: selectedTask, // Set the new task ID\n        _type: 'tasks.task',\n        authorId: currentUser.id, // Set the author ID\n        status: 'open',\n      }\n    }\n    if (viewMode === 'create') {\n      return {\n        _id: selectedTask,\n        _type: 'tasks.task',\n        authorId: currentUser.id,\n        status: 'open',\n        subscribers: [currentUser.id],\n        target: activeDocument\n          ? getTargetValue({\n              documentId: activeDocument.documentId,\n              documentType: activeDocument.documentType,\n              dataset,\n              projectId,\n            })\n          : undefined,\n      }\n    }\n    // For edit and draft mode, the initial value is undefined.\n    return undefined\n  }, [activeDocument, currentUser, dataset, duplicateTaskValues, projectId, selectedTask, viewMode])\n  if (!currentUser) return <LoadingBlock showText title=\"Loading current user\" />\n  if (!selectedTask) return null\n\n  return (\n    // This provider needs to be mounted before the TasksAddonWorkspaceProvider.\n    <MentionUserProvider>\n      <TasksAddonWorkspaceProvider mode={viewMode === 'edit' ? 'edit' : 'create'}>\n        <TasksFormBuilderInner documentId={selectedTask} initialValue={initialValue} />\n      </TasksAddonWorkspaceProvider>\n    </MentionUserProvider>\n  )\n}\n","import {AddIcon} from '@sanity/icons'\nimport {Box, Flex, Stack, Text} from '@sanity/ui'\nimport {useCallback} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Button} from '../../../../ui-components'\nimport {useTranslation} from '../../../i18n'\nimport {type SidebarTabsIds, useTasks, useTasksEnabled, useTasksNavigation} from '../../context'\nimport {tasksLocaleNamespace} from '../../i18n'\nimport {type TaskStatus} from '../../types'\n\nconst HEADING_BY_STATUS: Record<\n  TaskStatus,\n  Record<\n    SidebarTabsIds,\n    {\n      heading: string\n      text: string\n    }\n  >\n> = {\n  open: {\n    assigned: {\n      heading: 'empty-state.status.list.open.assigned.heading',\n      text: 'empty-state.status.list.open.assigned.text',\n    },\n    document: {heading: 'empty-state.status.list.open.document.heading', text: ''},\n    subscribed: {\n      heading: 'empty-state.status.list.open.subscribed.heading',\n      text: 'empty-state.status.list.open.subscribed.text',\n    },\n  },\n  closed: {\n    assigned: {\n      heading: 'empty-state.status.list.closed.assigned.heading',\n      text: 'empty-state.status.list.closed.assigned.text',\n    },\n    document: {heading: 'empty-state.status.list.closed.document.heading', text: ''},\n    subscribed: {\n      heading: 'empty-state.status.list.closed.subscribed.heading',\n      text: 'empty-state.status.list.closed.subscribed.text',\n    },\n  },\n}\n\nexport function EmptyStatusListState({status}: {status: TaskStatus}) {\n  const {\n    state: {activeTabId},\n  } = useTasksNavigation()\n  const {t} = useTranslation(tasksLocaleNamespace)\n  const {heading, text} = HEADING_BY_STATUS[status][activeTabId]\n  return (\n    <Stack space={3}>\n      <Text size={1} weight=\"semibold\">\n        {t(heading)}\n      </Text>\n      <Text size={1}>{t(text)}</Text>\n    </Stack>\n  )\n}\n\nconst EMPTY_TASK_LIST: Record<\n  SidebarTabsIds | 'noActiveDocument',\n  {\n    heading: string\n    text: string\n  }\n> = {\n  assigned: {\n    heading: 'empty-state.list.assigned.heading',\n    text: 'empty-state.list.assigned.text',\n  },\n  subscribed: {\n    heading: 'empty-state.list.subscribed.heading',\n    text: 'empty-state.list.subscribed.text',\n  },\n  document: {\n    heading: 'empty-state.list.document.heading',\n    text: 'empty-state.list.document.text',\n  },\n  noActiveDocument: {\n    heading: 'empty-state.list.no-active-document.heading',\n    text: 'empty-state.list.no-active-document.text',\n  },\n}\n\nconst Root = styled.div`\n  max-width: 268px;\n  margin: 0 auto;\n  height: 100%;\n  margin-top: 40%;\n`\n\nconst AnimatedText = styled(Text)`\n  @keyframes fadeIn {\n    from {\n      opacity: 0;\n    }\n    to {\n      opacity: 1;\n    }\n  }\n  animation: fadeIn 0.2s ease-in-out;\n`\n\nexport function EmptyTasksListState() {\n  const {activeDocument} = useTasks()\n  const {mode} = useTasksEnabled()\n  const {\n    state: {activeTabId},\n    setViewMode,\n  } = useTasksNavigation()\n\n  const key = !activeDocument && activeTabId === 'document' ? 'noActiveDocument' : activeTabId\n\n  const {heading, text} = EMPTY_TASK_LIST[key]\n  const {t} = useTranslation(tasksLocaleNamespace)\n\n  const handleTaskCreate = useCallback(() => {\n    setViewMode({type: 'create'})\n  }, [setViewMode])\n  return (\n    <Root>\n      <Flex direction={'column'} gap={3} align={'center'} flex={1} justify={'center'}>\n        <AnimatedText key={key} size={1} weight=\"semibold\">\n          {t(heading)}\n        </AnimatedText>\n        <Box paddingBottom={6} paddingTop={1}>\n          <AnimatedText key={key} size={1} align=\"center\">\n            {t(text)}\n          </AnimatedText>\n        </Box>\n        {mode !== 'upsell' && (\n          <Button\n            icon={AddIcon}\n            text={t('empty-state.list.create-new')}\n            onClick={handleTaskCreate}\n          />\n        )}\n      </Flex>\n    </Root>\n  )\n}\n","import {DocumentIcon} from '@sanity/icons'\nimport {Flex, Text, TextSkeleton} from '@sanity/ui'\n// eslint-disable-next-line camelcase\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {forwardRef, useMemo} from 'react'\nimport {IntentLink} from 'sanity/router'\nimport {styled} from 'styled-components'\n\nimport {useSchema} from '../../../hooks'\nimport {useDocumentPreviewValues} from '../../hooks'\n\nconst StyledIntentLink = styled(IntentLink)((props) => {\n  const theme = getTheme_v2(props.theme)\n\n  return `\n  text-decoration: underline;\n  text-decoration-color: ${theme.color.input.default.enabled.border};\n  text-underline-offset: 2px;\n`\n})\nexport function DocumentPreview({\n  documentId,\n  documentType,\n}: {\n  documentId: string\n  documentType: string\n}) {\n  const schema = useSchema()\n  const documentSchema = schema.get(documentType)\n  const {isLoading, value} = useDocumentPreviewValues({\n    documentId,\n    documentType,\n  })\n\n  const Link = useMemo(\n    () =>\n      forwardRef(function LinkComponent(linkProps, ref: React.ForwardedRef<HTMLAnchorElement>) {\n        return (\n          <StyledIntentLink\n            {...linkProps}\n            intent=\"edit\"\n            params={{id: documentId, type: documentType}}\n            ref={ref}\n          />\n        )\n      }),\n    [documentId, documentType],\n  )\n\n  if (!documentSchema) {\n    return null\n  }\n\n  return (\n    <Flex align=\"center\" gap={2}>\n      <Text size={1}>\n        <DocumentIcon />\n      </Text>\n      {isLoading ? (\n        <TextSkeleton size={1} muted />\n      ) : (\n        <Text size={1} as={Link} weight=\"medium\" style={{maxWidth: '20ch'}} textOverflow=\"ellipsis\">\n          {value?.title || 'Untitled'}\n        </Text>\n      )}\n    </Flex>\n  )\n}\n","import {Checkbox, Flex, Spinner} from '@sanity/ui'\nimport {useCallback, useState} from 'react'\n\nimport {useTaskOperations} from '../../hooks/useTaskOperations'\n\ninterface TasksStatusProps {\n  documentId: string\n  status?: string\n}\n\nexport function TasksStatus(props: TasksStatusProps) {\n  const operations = useTaskOperations()\n  const {documentId, status} = props\n\n  const [checkboxValue, setCheckboxValue] = useState(status === 'closed')\n  const [isLoading, setIsLoading] = useState(false)\n\n  const handleCheckboxChange = useCallback(\n    async (event: React.ChangeEvent<HTMLInputElement>) => {\n      const isChecked = event.target.checked\n      setCheckboxValue(isChecked)\n      setIsLoading(true)\n\n      try {\n        if (isChecked) {\n          await operations.edit(documentId, {status: 'closed'})\n        } else if (!isChecked) {\n          await operations.edit(documentId, {status: 'open'})\n        }\n      } catch (error) {\n        console.error('An error occurred while updating the task status', error)\n      } finally {\n        setIsLoading(false)\n      }\n    },\n    [documentId, operations],\n  )\n\n  return (\n    <Flex>\n      {isLoading ? (\n        <div style={{height: '17px', width: '17px'}}>\n          <Spinner style={{marginLeft: '3.5px', marginRight: '3.5px', marginTop: '3.5px'}} />\n        </div>\n      ) : (\n        <Checkbox onChange={handleCheckboxChange} checked={checkboxValue} disabled={isLoading} />\n      )}\n    </Flex>\n  )\n}\n","import {\n  Box,\n  // eslint-disable-next-line no-restricted-imports\n  Button as UIButton,\n  Card,\n  Flex,\n  Stack,\n  Text,\n} from '@sanity/ui'\nimport {isThisISOWeek, isToday} from 'date-fns'\nimport {useMemo} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Tooltip} from '../../../../ui-components'\nimport {useDateTimeFormat} from '../../../hooks'\nimport {type TaskDocument} from '../../types'\nimport {TasksUserAvatar} from '../TasksUserAvatar'\nimport {DocumentPreview} from './DocumentPreview'\nimport {TasksStatus} from './TasksStatus'\n\ninterface TasksListItemProps\n  extends Pick<TaskDocument, 'title' | 'assignedTo' | 'dueBy' | 'target' | 'status'> {\n  documentId: string\n  onSelect: () => void\n}\n\nconst TitleButton = styled(UIButton)`\n  width: 100%;\n  max-width: 100%;\n`\n\nconst TaskDetailsRoot = styled(Flex)`\n  /* Checkbox width is 17px and first row gap is 12px. */\n  margin-left: 29px;\n`\n\nfunction getTargetDocumentMeta(target?: TaskDocument['target']) {\n  if (!target?.document?._ref) {\n    return undefined\n  }\n\n  return {\n    _ref: target?.document._ref,\n    _type: target?.documentType,\n  }\n}\n\nfunction TaskDueDate({dueBy}: {dueBy: string}) {\n  const fullDateFormatter = useDateTimeFormat({dateStyle: 'medium'})\n  const monthAndDayFormatter = useDateTimeFormat({month: 'short', day: 'numeric'})\n  const dayFormatter = useDateTimeFormat({weekday: 'long'})\n\n  const dateOptions = useMemo(() => {\n    const date = new Date(dueBy)\n    return {\n      fullDate: fullDateFormatter.format(date),\n      monthAndDay: monthAndDayFormatter.format(date),\n      day: dayFormatter.format(date),\n      isDueByToday: isToday(date),\n      isDueThisWeek: isThisISOWeek(date),\n    }\n  }, [dayFormatter, dueBy, fullDateFormatter, monthAndDayFormatter])\n  const {fullDate, monthAndDay, day, isDueByToday, isDueThisWeek} = dateOptions\n\n  return (\n    <Tooltip content={fullDate}>\n      <Card tone={isDueByToday ? 'critical' : 'transparent'} padding={1} radius={2}>\n        <Flex align=\"center\" gap={2}>\n          <Text as=\"time\" size={1} dateTime={dueBy} muted>\n            {\n              // eslint-disable-next-line no-nested-ternary\n              isDueByToday ? 'Today' : isDueThisWeek ? day : monthAndDay\n            }\n          </Text>\n        </Flex>\n      </Card>\n    </Tooltip>\n  )\n}\n\nexport function TasksListItem(props: TasksListItemProps) {\n  const {assignedTo, title, dueBy, target, onSelect, documentId, status} = props\n  const targetDocument = useMemo(() => getTargetDocumentMeta(target), [target])\n\n  return (\n    <Stack space={3}>\n      <Flex align=\"center\" gap={1}>\n        <Box>\n          <TasksStatus documentId={documentId} status={status} />\n        </Box>\n\n        <Flex flex={1}>\n          <TitleButton onClick={onSelect} mode=\"bleed\" padding={2}>\n            <Text size={1} textOverflow=\"ellipsis\" weight=\"semibold\">\n              {title || 'Untitled'}\n            </Text>\n          </TitleButton>\n        </Flex>\n\n        <TasksUserAvatar user={assignedTo ? {id: assignedTo} : undefined} withTooltip />\n      </Flex>\n\n      {(dueBy || targetDocument) && (\n        <TaskDetailsRoot align=\"center\" gap={2} paddingX={0}>\n          {dueBy && <TaskDueDate dueBy={dueBy} />}\n\n          {targetDocument && (\n            <Box marginLeft={1}>\n              <DocumentPreview\n                documentId={targetDocument._ref}\n                documentType={targetDocument._type}\n              />\n            </Box>\n          )}\n        </TaskDetailsRoot>\n      )}\n    </Stack>\n  )\n}\n","import {ChevronDownIcon} from '@sanity/icons'\nimport {Box, Flex, MenuDivider, Stack, Text} from '@sanity/ui'\nimport {Fragment, useMemo} from 'react'\nimport {styled} from 'styled-components'\n\nimport {TASK_STATUS} from '../../constants/TaskStatus'\nimport {type TaskDocument, type TaskStatus} from '../../types'\nimport {EmptyStatusListState, EmptyTasksListState} from './EmptyStates'\nimport {TasksListItem} from './TasksListItem'\n\nconst EMPTY_ARRAY: [] = []\n\nconst getLabelForStatus = (status: string) => {\n  const statusConfig = TASK_STATUS.find((item) => item.value === status)\n  return statusConfig?.title\n}\n\nconst DetailsFlex = styled(Flex)`\n  [data-ui='summary-icon'] {\n    transition: transform 0.2s;\n    transform: rotate(-90deg);\n  }\n  &[open] [data-ui='summary-icon'] {\n    transform: rotate(0);\n  }\n  > summary::-webkit-details-marker {\n    display: none;\n  }\n`\nconst SummaryBox = styled(Box)`\n  list-style: none;\n`\n\ninterface TaskListProps {\n  status: TaskStatus\n  tasks: TaskDocument[]\n  onTaskSelect: (id: string) => void\n}\n\nfunction TaskList(props: TaskListProps) {\n  const {status, tasks, onTaskSelect} = props\n\n  return (\n    <DetailsFlex forwardedAs=\"details\" direction=\"column\" open={status === 'open'}>\n      <SummaryBox forwardedAs=\"summary\" paddingY={1}>\n        <Flex align=\"center\" gap={1} paddingY={1}>\n          <Text size={1} weight=\"medium\" muted>\n            {getLabelForStatus(status)}\n          </Text>\n\n          <Text muted size={1}>\n            <ChevronDownIcon data-ui=\"summary-icon\" />\n          </Text>\n        </Flex>\n      </SummaryBox>\n\n      <Stack space={4} marginTop={3} paddingBottom={5}>\n        {tasks?.length > 0 ? (\n          tasks.map((task, index) => {\n            const showDivider = index < tasks.length - 1\n\n            return (\n              <Fragment key={task._id}>\n                <TasksListItem\n                  documentId={task._id}\n                  title={task.title}\n                  dueBy={task.dueBy}\n                  assignedTo={task.assignedTo}\n                  target={task.target}\n                  // eslint-disable-next-line react/jsx-no-bind\n                  onSelect={() => onTaskSelect(task._id)}\n                  status={task.status}\n                />\n\n                {showDivider && <MenuDivider />}\n              </Fragment>\n            )\n          })\n        ) : (\n          <EmptyStatusListState status={status} />\n        )}\n      </Stack>\n    </DetailsFlex>\n  )\n}\n\ninterface TasksListProps {\n  onTaskSelect: (id: string) => void\n  items: TaskDocument[]\n}\n\n/**\n * @internal\n */\nexport function TasksList(props: TasksListProps) {\n  const {items = EMPTY_ARRAY, onTaskSelect} = props\n\n  const tasksByStatus = useMemo(\n    () =>\n      items.reduce((acc: Record<string, TaskDocument[]>, task) => {\n        if (!acc[task.status]) {\n          acc[task.status] = []\n        }\n        acc[task.status].push(task)\n        return acc\n      }, {}),\n    [items],\n  )\n\n  const hasOpenTasks = tasksByStatus.open?.length > 0\n  const hasClosedTasks = tasksByStatus.closed?.length > 0\n\n  return (\n    <Stack space={4} flex={1}>\n      {!hasOpenTasks && !hasClosedTasks ? (\n        <EmptyTasksListState />\n      ) : (\n        <>\n          <TaskList status=\"open\" tasks={tasksByStatus.open} onTaskSelect={onTaskSelect} />\n\n          <TaskList status=\"closed\" tasks={tasksByStatus.closed} onTaskSelect={onTaskSelect} />\n        </>\n      )}\n    </Stack>\n  )\n}\n","import {Box, Container} from '@sanity/ui'\n\nimport {UpsellPanel} from '../../../studio/upsell/UpsellPanel'\nimport {useTasksUpsell} from '../../context'\n\nexport function TasksUpsellPanel() {\n  const {\n    upsellData: data,\n    telemetryLogs: {panelPrimaryClicked: onPrimaryClick, panelSecondaryClicked: onSecondaryClick},\n  } = useTasksUpsell()\n\n  if (!data) return null\n  return (\n    <Container width={1}>\n      <Box marginBottom={6}>\n        <UpsellPanel\n          data={data}\n          onPrimaryClick={onPrimaryClick}\n          onSecondaryClick={onSecondaryClick}\n        />\n      </Box>\n    </Container>\n  )\n}\n","import {LaunchIcon} from '@sanity/icons'\nimport {Box, Text} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {Translate, useTranslation} from '../../../i18n'\nimport {tasksLocaleNamespace} from '../../i18n'\n\nconst FEEDBACK_FORM_LINK = 'https://snty.link/tasks-feedback'\n\nconst Span = styled.span`\n  margin-right: 0.2em;\n`\n\nconst Link = styled.a`\n  white-space: nowrap;\n  > [data-sanity-icon] {\n    --card-icon-color: var(--card-link-color);\n  }\n`\n\nfunction LinkComponent(props: {children?: React.ReactNode}) {\n  return (\n    <Link href={FEEDBACK_FORM_LINK} target=\"_blank\" rel=\"noreferrer\">\n      <Span>{props.children}</Span> <LaunchIcon />\n    </Link>\n  )\n}\n\nexport function TasksListFeedbackFooter() {\n  const {t} = useTranslation(tasksLocaleNamespace)\n  return (\n    <Box padding={4}>\n      <Text muted size={1}>\n        <Translate i18nKey=\"list.feedback.text\" t={t} components={{Link: LinkComponent}} />\n      </Text>\n    </Box>\n  )\n}\n","import {TabList, Text} from '@sanity/ui'\nimport {useCallback, useMemo} from 'react'\nimport {type CSSProperties} from 'styled-components'\n\nimport {Tab} from '../../../../ui-components'\nimport {useTranslation} from '../../../i18n'\nimport {type SidebarTabsIds} from '../../context'\nimport {tasksLocaleNamespace} from '../../i18n'\n\nconst LIST_STYLES: CSSProperties = {\n  marginLeft: '-0.5em',\n  justifyContent: 'space-between',\n  display: 'flex',\n}\n\ninterface TasksListTabsProps {\n  activeTabId: string\n  onChange: (id: SidebarTabsIds) => void\n}\n\ninterface TasksListTab {\n  id: SidebarTabsIds\n  label: string\n}\n\n/**\n * @internal\n */\nexport function TasksListTabs({activeTabId, onChange}: TasksListTabsProps) {\n  const {t} = useTranslation(tasksLocaleNamespace)\n\n  const tabs: TasksListTab[] = useMemo(\n    () => [\n      {\n        id: 'assigned',\n        label: t('tab.assigned.label'),\n      },\n      {\n        id: 'subscribed',\n        label: t('tab.subscribed.label'),\n      },\n      {\n        id: 'document',\n        label: t('tab.document.label'),\n      },\n    ],\n    [t],\n  )\n\n  const handleTabChange = useCallback(\n    (tab: TasksListTab) => {\n      onChange(tab.id)\n    },\n    [onChange],\n  )\n\n  return (\n    <TabList space={2} style={LIST_STYLES}>\n      {tabs.map((tab) => (\n        <Tab\n          key={`${tab.id}-tab`}\n          aria-controls={`${tab.id}-panel`}\n          id={`${tab.id}-tab`}\n          // eslint-disable-next-line react/jsx-no-bind\n          onClick={() => handleTabChange(tab)}\n          selected={tab.id === activeTabId}\n        >\n          <Text size={1} weight=\"medium\">\n            {tab.label}\n          </Text>\n        </Tab>\n      ))}\n    </TabList>\n  )\n}\n","import {ChevronLeftIcon, ChevronRightIcon} from '@sanity/icons'\nimport {Box, Flex, Text} from '@sanity/ui'\n// eslint-disable-next-line camelcase\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {useCallback} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Button, Tooltip, TooltipDelayGroupProvider} from '../../../../ui-components'\nimport {useTranslation} from '../../../i18n'\nimport {useTasksNavigation} from '../../context'\nimport {tasksLocaleNamespace} from '../../i18n'\nimport {type TaskDocument} from '../../types'\n\ninterface TasksActiveTabNavigationProps {\n  items: TaskDocument[]\n}\n\nconst Divider = styled.div((props) => {\n  const theme = getTheme_v2(props.theme)\n\n  return `\n    height: 25px;\n    width: 1px;\n    background-color: ${theme.color.input.default.enabled.border};\n  `\n})\n\n/**\n * @internal\n * Navigation buttons for the active tab the user selected, will be shown when editing a task.\n */\nexport function TasksActiveTabNavigation(props: TasksActiveTabNavigationProps) {\n  const {items: allItems} = props\n  const {state, setViewMode} = useTasksNavigation()\n  const {selectedTask} = state\n  const items = allItems.filter((t) => t.status === 'open')\n  const currentItemIndex = items.findIndex((item) => item._id === selectedTask)\n\n  const goToPreviousTask = useCallback(() => {\n    const prevTaskId =\n      currentItemIndex > 0 ? items[currentItemIndex - 1]._id : items[items.length - 1]._id\n    setViewMode({type: 'edit', id: prevTaskId})\n  }, [currentItemIndex, items, setViewMode])\n\n  const goToNextTask = useCallback(() => {\n    const nextTaskId =\n      currentItemIndex < items.length - 1 ? items[currentItemIndex + 1]._id : items[0]._id\n    setViewMode({type: 'edit', id: nextTaskId})\n  }, [currentItemIndex, items, setViewMode])\n\n  const {t} = useTranslation(tasksLocaleNamespace)\n\n  if (!items.length) return null\n  return (\n    <TooltipDelayGroupProvider>\n      <Flex gap={1} align=\"center\">\n        <Button\n          tooltipProps={{content: t('buttons.previous.tooltip')}}\n          mode=\"bleed\"\n          icon={ChevronLeftIcon}\n          onClick={goToPreviousTask}\n        />\n        <Tooltip content={t('panel.navigation.tooltip')}>\n          <Box paddingY={2}>\n            <Text size={1}>\n              {currentItemIndex + 1} / {items.length}\n            </Text>\n          </Box>\n        </Tooltip>\n        <Button\n          tooltipProps={{content: t('buttons.next.tooltip')}}\n          mode=\"bleed\"\n          icon={ChevronRightIcon}\n          onClick={goToNextTask}\n        />\n        <Divider />\n      </Flex>\n    </TooltipDelayGroupProvider>\n  )\n}\n","import {CheckmarkIcon, ChevronDownIcon} from '@sanity/icons'\nimport {Box, Menu, MenuDivider, Text} from '@sanity/ui'\nimport {useCallback, useMemo} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Button, MenuButton, type MenuButtonProps, MenuItem} from '../../../../ui-components'\nimport {useTranslation} from '../../../i18n'\nimport {useCurrentUser} from '../../../store'\nimport {useTasks, useTasksNavigation} from '../../context'\nimport {tasksLocaleNamespace} from '../../i18n'\nimport {type TaskDocument} from '../../types'\n\nconst MENU_BUTTON_POPOVER_PROPS: MenuButtonProps['popover'] = {\n  constrainSize: true,\n  fallbackPlacements: ['bottom-end'],\n  placement: 'bottom-end',\n  portal: true,\n}\n\nconst StyledMenu = styled(Menu)`\n  width: 220px;\n`\n\ninterface TasksDraftsMenuItemProps {\n  isSelected: boolean\n  item: TaskDocument\n  onSelect: (id: string) => void\n}\n\nfunction TasksDraftsMenuItem(props: TasksDraftsMenuItemProps) {\n  const {isSelected, item, onSelect} = props\n\n  const handleClick = useCallback(() => {\n    onSelect(item._id)\n  }, [item._id, onSelect])\n\n  const iconRight = isSelected ? CheckmarkIcon : undefined\n  const text = item.title || 'Untitled'\n\n  return (\n    <MenuItem\n      iconRight={iconRight}\n      onClick={handleClick}\n      pressed={isSelected}\n      selected={isSelected}\n      text={text}\n    />\n  )\n}\n\nexport function TasksHeaderDraftsMenu() {\n  const {data} = useTasks()\n  const {state, setViewMode} = useTasksNavigation()\n  const {viewMode, selectedTask} = state\n\n  const currentUser = useCurrentUser()\n\n  const draftTasks = useMemo(() => {\n    if (!currentUser?.id) return []\n\n    return data.filter((task) => {\n      const isAuthoredByUser = task.authorId === currentUser.id\n      const isDraft = !task.createdByUser\n      const hasEdits = task._updatedAt !== task._createdAt\n      const isNotTheTaskBeingCreated = viewMode === 'create' ? task._id !== selectedTask : true\n      return isAuthoredByUser && isDraft && isNotTheTaskBeingCreated && hasEdits\n    })\n  }, [data, selectedTask, currentUser?.id, viewMode])\n\n  const handleSelectTask = useCallback(\n    (id: string) => {\n      setViewMode({type: 'draft', id})\n    },\n    [setViewMode],\n  )\n\n  const {t} = useTranslation(tasksLocaleNamespace)\n\n  if (!draftTasks.length) return null\n\n  return (\n    <MenuButton\n      button={<Button text={t('buttons.draft.text')} mode=\"ghost\" iconRight={ChevronDownIcon} />}\n      id=\"edit-task-menu\"\n      menu={\n        <StyledMenu>\n          <Box padding={3}>\n            <Text size={1} weight=\"semibold\">\n              {t('panel.drafts.title')}\n            </Text>\n          </Box>\n\n          <MenuDivider />\n\n          {draftTasks?.map((task) => {\n            return (\n              <TasksDraftsMenuItem\n                isSelected={selectedTask === task._id}\n                item={task}\n                key={task._id}\n                onSelect={handleSelectTask}\n              />\n            )\n          })}\n        </StyledMenu>\n      }\n      popover={MENU_BUTTON_POPOVER_PROPS}\n    />\n  )\n}\n","import {AddIcon, ChevronRightIcon, CloseIcon} from '@sanity/icons'\nimport {\n  Box,\n  // eslint-disable-next-line no-restricted-imports\n  Button as UIButton,\n  Flex,\n  Text,\n} from '@sanity/ui'\n// eslint-disable-next-line camelcase\nimport {useCallback} from 'react'\n\nimport {Button} from '../../../../ui-components'\nimport {useTranslation} from '../../../i18n'\nimport {useTasksEnabled, useTasksNavigation} from '../../context'\nimport {tasksLocaleNamespace} from '../../i18n'\nimport {type TaskDocument} from '../../types'\nimport {TasksActiveTabNavigation} from './TasksActiveTabNavigation'\nimport {TasksHeaderDraftsMenu} from './TasksHeaderDraftsMenu'\n\ninterface TasksSidebarHeaderProps {\n  items: TaskDocument[]\n}\n\n/**\n * @internal\n */\nexport function TasksSidebarHeader(props: TasksSidebarHeaderProps) {\n  const {items: allItems} = props\n  const {mode} = useTasksEnabled()\n  const {state, setViewMode, handleCloseTasks} = useTasksNavigation()\n  const {viewMode, activeTabId} = state\n\n  const handleTaskCreate = useCallback(() => {\n    setViewMode({type: 'create'})\n  }, [setViewMode])\n\n  const handleGoBack = useCallback(() => {\n    setViewMode({type: 'list'})\n  }, [setViewMode])\n\n  const {t} = useTranslation(tasksLocaleNamespace)\n\n  return (\n    <Flex justify=\"space-between\" align=\"center\" gap={1}>\n      <Flex align=\"center\" flex={1}>\n        {viewMode === 'list' ? (\n          <Box padding={2}>\n            <Text size={2} weight=\"semibold\">\n              {t('panel.title')}\n            </Text>\n          </Box>\n        ) : (\n          <>\n            <UIButton mode=\"bleed\" space={2} padding={2} onClick={handleGoBack}>\n              <Text size={1}>{t('panel.title')}</Text>\n            </UIButton>\n            <ChevronRightIcon />\n            <Box paddingX={2}>\n              <Text size={1} weight=\"semibold\" style={{textTransform: 'capitalize'}}>\n                {viewMode === 'create' || viewMode === 'draft'\n                  ? t('panel.create.title')\n                  : activeTabId}\n              </Text>\n            </Box>\n          </>\n        )}\n      </Flex>\n      {(viewMode === 'create' || viewMode === 'draft') && <TasksHeaderDraftsMenu />}\n      {viewMode === 'edit' && <TasksActiveTabNavigation items={allItems} />}\n      <Flex gap={1}>\n        {viewMode === 'list' && (\n          <Button\n            icon={AddIcon}\n            onClick={handleTaskCreate}\n            mode=\"bleed\"\n            text={t('buttons.new.text')}\n            disabled={mode === 'upsell'}\n            tooltipProps={\n              mode === 'upsell'\n                ? {\n                    content: t('buttons.new.upsell-tooltip'),\n                  }\n                : undefined\n            }\n          />\n        )}\n\n        <Button\n          tooltipProps={{\n            content: t('panel.close.tooltip'),\n          }}\n          iconRight={CloseIcon}\n          mode=\"bleed\"\n          onClick={handleCloseTasks}\n        />\n      </Flex>\n    </Flex>\n  )\n}\n","import {Card, Flex, Spinner, Stack} from '@sanity/ui'\nimport {useCallback, useMemo} from 'react'\nimport {styled} from 'styled-components'\n\nimport {useCurrentUser} from '../../../store'\nimport {useTasks, useTasksEnabled, useTasksNavigation} from '../../context'\nimport {TasksFormBuilder} from '../form'\nimport {TasksList} from '../list/TasksList'\nimport {TasksUpsellPanel} from '../upsell'\nimport {TasksListFeedbackFooter} from './TaskListFeedbackFooter'\nimport {TasksListTabs} from './TasksListTabs'\nimport {TasksSidebarHeader} from './TasksSidebarHeader'\n\nconst RootCard = styled(Card)`\n  flex: 1;\n  flex-direction: column;\n`\n\nconst HeaderStack = styled(Stack)`\n  border-bottom: 1px solid var(--card-border-color);\n`\n\nconst ContentFlex = styled(Flex)`\n  overflow-y: scroll;\n  overflow-x: hidden;\n`\n\n/**\n * @internal\n */\nexport function TasksStudioSidebarInner() {\n  const {mode} = useTasksEnabled()\n  const {activeDocument, data, isLoading} = useTasks()\n  const {state, setActiveTab, setViewMode} = useTasksNavigation()\n  const {activeTabId, viewMode, selectedTask} = state\n  const currentUser = useCurrentUser()\n\n  const onTaskSelect = useCallback((id: string) => setViewMode({type: 'edit', id}), [setViewMode])\n\n  const filteredList = useMemo(() => {\n    return data.filter((item) => {\n      if (!item.createdByUser) return false\n      if (activeTabId === 'assigned') {\n        return item.assignedTo === currentUser?.id\n      }\n      if (activeTabId === 'subscribed') {\n        return currentUser?.id && item.subscribers?.includes(currentUser.id)\n      }\n      if (activeTabId === 'document') {\n        return (\n          activeDocument?.documentId && item.target?.document._ref === activeDocument.documentId\n        )\n      }\n      return false\n    })\n  }, [activeDocument?.documentId, activeTabId, data, currentUser])\n\n  const content = useMemo(() => {\n    if (viewMode !== 'list') {\n      return <TasksFormBuilder key={selectedTask} />\n    }\n\n    if (isLoading) {\n      return (\n        <Flex align=\"center\" justify=\"center\">\n          <Spinner />\n        </Flex>\n      )\n    }\n\n    return (\n      <>\n        {mode === 'upsell' && <TasksUpsellPanel />}\n        <TasksList items={filteredList} onTaskSelect={onTaskSelect} />\n      </>\n    )\n  }, [filteredList, isLoading, onTaskSelect, selectedTask, viewMode, mode])\n\n  return (\n    <RootCard display=\"flex\" height=\"fill\" flex={1} overflow=\"hidden\">\n      <HeaderStack space={3} padding={3} sizing=\"border\">\n        <TasksSidebarHeader items={filteredList} />\n        {viewMode === 'list' && !isLoading && (\n          <TasksListTabs activeTabId={activeTabId} onChange={setActiveTab} />\n        )}\n      </HeaderStack>\n\n      <ContentFlex\n        direction=\"column\"\n        flex={1}\n        overflow=\"auto\"\n        padding={3}\n        paddingTop={4}\n        paddingX={4}\n        sizing=\"border\"\n      >\n        {content}\n      </ContentFlex>\n      {viewMode === 'list' && <TasksListFeedbackFooter />}\n    </RootCard>\n  )\n}\n\n/**\n * @internal\n */\nexport function TasksStudioSidebar() {\n  const {enabled} = useTasksEnabled()\n\n  if (!enabled) {\n    return null\n  }\n\n  return <TasksStudioSidebarInner />\n}\n","import {Box, Flex, Layer, useMediaIndex} from '@sanity/ui'\nimport {AnimatePresence, motion, type Transition, type Variants} from 'framer-motion'\nimport {css, styled} from 'styled-components'\n\nimport {type ActiveToolLayoutProps} from '../../config'\nimport {TasksStudioSidebar} from '../components'\nimport {useTasksEnabled, useTasksNavigation} from '../context'\n\nconst VARIANTS: Variants = {\n  hidden: {opacity: 0},\n  visible: {opacity: 1},\n}\n\nconst TRANSITION: Transition = {duration: 0.2}\n\nconst FULLSCREEN_MEDIA_INDEX = 1\nconst POSITION_ABSOLUTE_MEDIA_INDEX = 3\n\nconst RootFlex = styled(Flex)(({theme}) => {\n  const media = theme.sanity.media\n\n  return css`\n    min-height: 100%;\n\n    @media (max-width: ${media[POSITION_ABSOLUTE_MEDIA_INDEX]}px) {\n      position: relative;\n    }\n  `\n})\n\nconst SidebarMotionLayer = styled(motion.create(Layer))(({theme}) => {\n  const media = theme.sanity.media\n\n  return css`\n    display: flex;\n    flex-direction: column;\n    height: 100%;\n    width: 360px;\n    border-left: 1px solid var(--card-border-color);\n    box-sizing: border-box;\n    overflow: hidden;\n\n    box-shadow:\n      0px 6px 8px -4px var(--card-shadow-umbra-color),\n      0px 12px 17px -1px var(--card-shadow-penumbra-color);\n\n    @media (max-width: ${media[POSITION_ABSOLUTE_MEDIA_INDEX]}px) {\n      bottom: 0;\n      position: absolute;\n      right: 0;\n      top: 0;\n    }\n\n    @media (max-width: ${media[FULLSCREEN_MEDIA_INDEX]}px) {\n      border-left: 0;\n      min-width: 100%;\n      left: 0;\n    }\n  `\n})\n\nfunction TasksStudioActiveToolLayoutInner(props: ActiveToolLayoutProps) {\n  const mediaIndex = useMediaIndex()\n  const {\n    state: {isOpen},\n  } = useTasksNavigation()\n\n  // Lock the scroll when the sidebar is open in fullscreen mode\n  const scrollLock = mediaIndex <= FULLSCREEN_MEDIA_INDEX && isOpen\n  return (\n    <RootFlex sizing=\"border\" height=\"fill\">\n      <Box flex={1} height=\"fill\" overflow={scrollLock ? 'hidden' : 'auto'}>\n        {props.renderDefault(props)}\n      </Box>\n\n      <AnimatePresence initial={false}>\n        {isOpen && (\n          <SidebarMotionLayer\n            animate=\"visible\"\n            zOffset={100}\n            height=\"fill\"\n            initial=\"hidden\"\n            transition={TRANSITION}\n            variants={VARIANTS}\n          >\n            <TasksStudioSidebar />\n          </SidebarMotionLayer>\n        )}\n      </AnimatePresence>\n    </RootFlex>\n  )\n}\n\nexport function TasksStudioActiveToolLayout(props: ActiveToolLayoutProps) {\n  const {enabled} = useTasksEnabled()\n  if (!enabled) {\n    return props.renderDefault(props)\n  }\n\n  return <TasksStudioActiveToolLayoutInner {...props} />\n}\n","import {ConditionalWrapper} from '../../../ui-components'\nimport {type LayoutProps} from '../../config'\nimport {AddonDatasetProvider} from '../../studio'\nimport {\n  TasksEnabledProvider,\n  TasksNavigationProvider,\n  TasksProvider,\n  TasksUpsellProvider,\n  useTasksEnabled,\n} from '../context'\n\nconst TasksStudioLayoutInner = (props: LayoutProps) => {\n  const {enabled, mode} = useTasksEnabled()\n\n  if (!enabled) {\n    return props.renderDefault(props)\n  }\n  return (\n    <AddonDatasetProvider>\n      <ConditionalWrapper\n        condition={mode === 'upsell'}\n        // eslint-disable-next-line react/jsx-no-bind\n        wrapper={(children) => <TasksUpsellProvider>{children}</TasksUpsellProvider>}\n      >\n        <TasksProvider>\n          <TasksNavigationProvider>{props.renderDefault(props)}</TasksNavigationProvider>\n        </TasksProvider>\n      </ConditionalWrapper>\n    </AddonDatasetProvider>\n  )\n}\n\nexport function TasksStudioLayout(props: LayoutProps) {\n  return (\n    <TasksEnabledProvider>\n      <TasksStudioLayoutInner {...props} />\n    </TasksEnabledProvider>\n  )\n}\n","import {CheckmarkCircleIcon} from '@sanity/icons'\nimport {useCallback, useMemo} from 'react'\n\nimport {Button} from '../../../ui-components'\nimport {type NavbarProps} from '../../config'\nimport {useTranslation} from '../../i18n'\nimport {useTasksEnabled, useTasksNavigation} from '../context'\nimport {tasksLocaleNamespace} from '../i18n'\n\nconst EMPTY_ARRAY: [] = []\n\nconst TasksToolbar = ({onClick, isOpen}: {onClick: () => void; isOpen: boolean}) => {\n  const {t} = useTranslation(tasksLocaleNamespace)\n\n  return (\n    <Button\n      tooltipProps={{\n        content: t('toolbar.tooltip'),\n      }}\n      icon={CheckmarkCircleIcon}\n      mode=\"bleed\"\n      onClick={onClick}\n      selected={isOpen}\n      data-testid=\"tasks-toolbar\"\n    />\n  )\n}\n\nfunction TasksStudioNavbarInner(props: NavbarProps) {\n  const {\n    handleOpenTasks,\n    handleCloseTasks,\n    state: {isOpen},\n  } = useTasksNavigation()\n\n  const {t} = useTranslation(tasksLocaleNamespace)\n\n  const handleClick = useCallback(() => {\n    if (isOpen) {\n      handleCloseTasks()\n    } else {\n      handleOpenTasks()\n    }\n  }, [isOpen, handleOpenTasks, handleCloseTasks])\n\n  const renderTasksNav = useCallback(\n    () => <TasksToolbar onClick={handleClick} isOpen={isOpen} />,\n    [handleClick, isOpen],\n  )\n\n  const actions = useMemo((): NavbarProps['__internal_actions'] => {\n    return [\n      ...(props?.__internal_actions || EMPTY_ARRAY),\n      {\n        location: 'topbar',\n        name: 'tasks-topbar',\n        render: renderTasksNav,\n      },\n      {\n        icon: CheckmarkCircleIcon,\n        location: 'sidebar',\n        name: 'tasks-sidebar',\n        onAction: handleClick,\n        selected: isOpen,\n        title: t('actions.open.text'),\n      },\n    ]\n  }, [handleClick, isOpen, props?.__internal_actions, renderTasksNav, t])\n\n  return props.renderDefault({\n    ...props,\n    // eslint-disable-next-line camelcase\n    __internal_actions: actions,\n  })\n}\n\nexport function TasksStudioNavbar(props: NavbarProps) {\n  const {enabled} = useTasksEnabled()\n\n  if (!enabled) {\n    return props.renderDefault(props)\n  }\n\n  return <TasksStudioNavbarInner {...props} />\n}\n","import {definePlugin} from '../../config'\nimport {type ObjectInputProps} from '../../form'\nimport {tasksUsEnglishLocaleBundle} from '../i18n'\nimport {TaskCreateAction} from './TaskCreateAction'\nimport {TasksDocumentInputLayout} from './TasksDocumentInputLayout'\nimport {TasksFooterOpenTasks} from './TasksFooterOpenTasks'\nimport {TasksStudioActiveToolLayout} from './TasksStudioActiveToolLayout'\nimport {TasksStudioLayout} from './TasksStudioLayout'\nimport {TasksStudioNavbar} from './TasksStudioNavbar'\n\n/**\n * @internal\n */\nexport const TASKS_NAME = 'sanity/tasks'\n\n/**\n * @internal\n * @beta\n */\nexport const tasks = definePlugin({\n  name: TASKS_NAME,\n  // eslint-disable-next-line camelcase\n  __internal_tasks: {\n    footerAction: <TasksFooterOpenTasks />,\n  },\n  document: {\n    actions: (prev) => {\n      return [...prev, TaskCreateAction].filter(Boolean)\n    },\n  },\n  studio: {\n    components: {\n      layout: TasksStudioLayout,\n      navbar: TasksStudioNavbar,\n      activeToolLayout: TasksStudioActiveToolLayout,\n    },\n  },\n  form: {\n    components: {\n      input: (props) => {\n        if (props.id === 'root' && props.schemaType.type?.name === 'document') {\n          return <TasksDocumentInputLayout {...(props as ObjectInputProps)} />\n        }\n\n        return props.renderDefault(props)\n      },\n    },\n  },\n  i18n: {\n    bundles: [tasksUsEnglishLocaleBundle],\n  },\n})\n","import {comments} from '../comments/plugin'\nimport {createIntegration} from '../create/createIntegrationPlugin'\nimport {releases, RELEASES_NAME} from '../releases/plugin'\nimport {DEFAULT_SCHEDULED_PUBLISH_PLUGIN_OPTIONS} from '../scheduledPublishing/constants'\nimport {SCHEDULED_PUBLISHING_NAME, scheduledPublishing} from '../scheduledPublishing/plugin'\nimport {tasks, TASKS_NAME} from '../tasks/plugin'\nimport {\n  type DefaultPluginsWorkspaceOptions,\n  type PluginOptions,\n  type SingleWorkspace,\n  type WorkspaceOptions,\n} from './types'\n\nconst defaultPlugins = [comments(), tasks(), scheduledPublishing(), createIntegration(), releases()]\n\nexport function getDefaultPlugins(\n  options: DefaultPluginsWorkspaceOptions,\n  plugins?: PluginOptions[],\n) {\n  return defaultPlugins.filter((plugin) => {\n    if (plugin.name === SCHEDULED_PUBLISHING_NAME) {\n      // The scheduled publishing plugin is only included if other plugin is included by the user.\n      return options.scheduledPublishing.enabled && !!plugins?.length\n    }\n    if (plugin.name === TASKS_NAME) {\n      return options.tasks.enabled\n    }\n    if (plugin.name === RELEASES_NAME) {\n      return options.releases.enabled\n    }\n    return true\n  })\n}\n\nexport function getDefaultPluginsOptions(\n  workspace: WorkspaceOptions | SingleWorkspace,\n): DefaultPluginsWorkspaceOptions {\n  return {\n    tasks: {\n      enabled: true,\n      ...workspace.unstable_tasks,\n      ...workspace.tasks,\n    },\n    scheduledPublishing: {\n      ...DEFAULT_SCHEDULED_PUBLISH_PLUGIN_OPTIONS,\n      ...workspace.scheduledPublishing,\n      // If the user has explicitly enabled scheduled publishing, we should respect that\n      // eslint-disable-next-line camelcase\n      __internal__workspaceEnabled: workspace.scheduledPublishing?.enabled ?? false,\n    },\n    releases: {\n      ...workspace.releases,\n      enabled: workspace.releases?.enabled ?? true,\n    },\n  }\n}\n","import {type SchemaTypeDefinition} from '@sanity/types'\n\nimport {schemaTypesReducer} from './configPropertyReducers'\nimport {resolveConfigProperty} from './resolveConfigProperty'\nimport {type ConfigPropertyReducer, type PluginOptions} from './types'\n\ntype ConfigContext<T> = T extends ConfigPropertyReducer<any, infer TContext> ? TContext : never\ntype SchemaTypeContext = ConfigContext<typeof schemaTypesReducer>\n\ninterface ResolveSchemaTypesOptions {\n  config: PluginOptions\n  context: SchemaTypeContext\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function resolveSchemaTypes({\n  config,\n  context,\n}: ResolveSchemaTypesOptions): SchemaTypeDefinition[] {\n  return resolveConfigProperty({\n    propertyName: 'schema.types',\n    config,\n    context,\n    initialValue: [],\n    reducer: schemaTypesReducer,\n  })\n}\n","import {type Schema} from '@sanity/types'\n\n/** @internal */\n// TODO: consider removing this error in favor of the `ConfigResolutionError`\nexport class SchemaError extends Error {\n  constructor(public schema: Schema) {\n    super('SchemaError')\n    this.name = 'SchemaError'\n  }\n}\n","import {fromUrl} from '@sanity/bifur-client'\nimport {createClient, type SanityClient} from '@sanity/client'\nimport {type CurrentUser, type Schema, type SchemaValidationProblem} from '@sanity/types'\nimport {studioTheme} from '@sanity/ui'\nimport {type i18n} from 'i18next'\nimport {startCase} from 'lodash'\nimport {type ComponentType, type ElementType, type ErrorInfo, isValidElement} from 'react'\nimport {isValidElementType} from 'react-is'\nimport {map, shareReplay} from 'rxjs/operators'\n\nimport {\n  FileSource as DefaultFileSource,\n  ImageSource as DefaultImageSource,\n} from '../form/studio/assetSourceDefault'\nimport {\n  createSanityMediaLibraryFileSource,\n  createSanityMediaLibraryImageSource,\n} from '../form/studio/assetSourceMediaLibrary'\nimport {type LocaleSource} from '../i18n'\nimport {prepareI18n} from '../i18n/i18nConfig'\nimport {createSchema} from '../schema'\nimport {type AuthStore, createAuthStore, isAuthStore} from '../store/_legacy'\nimport {validateWorkspaces} from '../studio'\nimport {filterDefinitions} from '../studio/components/navbar/search/definitions/defaultFilters'\nimport {operatorDefinitions} from '../studio/components/navbar/search/definitions/operators/defaultOperators'\nimport {type InitialValueTemplateItem, type Template, type TemplateItem} from '../templates'\nimport {EMPTY_ARRAY, isNonNullable} from '../util'\nimport {\n  announcementsEnabledReducer,\n  createFallbackOriginReducer,\n  documentActionsReducer,\n  documentBadgesReducer,\n  documentCommentsEnabledReducer,\n  documentInspectorsReducer,\n  documentLanguageFilterReducer,\n  eventsAPIReducer,\n  fileAssetSourceResolver,\n  imageAssetSourceResolver,\n  initialDocumentActions,\n  initialDocumentBadges,\n  initialLanguageFilter,\n  internalTasksReducer,\n  legacySearchEnabledReducer,\n  mediaLibraryEnabledReducer,\n  mediaLibraryLibraryIdReducer,\n  newDocumentOptionsResolver,\n  onUncaughtErrorResolver,\n  partialIndexingEnabledReducer,\n  resolveProductionUrlReducer,\n  schemaTemplatesReducer,\n  searchStrategyReducer,\n  serverDocumentActionsReducer,\n  startInCreateEnabledReducer,\n  toolsReducer,\n} from './configPropertyReducers'\nimport {ConfigResolutionError} from './ConfigResolutionError'\nimport {createDefaultIcon} from './createDefaultIcon'\nimport {documentFieldActionsReducer, initialDocumentFieldActions} from './document'\nimport {resolveConfigProperty} from './resolveConfigProperty'\nimport {getDefaultPlugins, getDefaultPluginsOptions} from './resolveDefaultPlugins'\nimport {resolveSchemaTypes} from './resolveSchemaTypes'\nimport {SchemaError} from './SchemaError'\nimport {\n  type Config,\n  type ConfigContext,\n  type MissingConfigFile,\n  type PluginOptions,\n  type PreparedConfig,\n  type SingleWorkspace,\n  type Source,\n  type SourceClientOptions,\n  type SourceOptions,\n  type WorkspaceOptions,\n  type WorkspaceSummary,\n} from './types'\n\ntype InternalSource = WorkspaceSummary['__internal']['sources'][number]\n\nconst isError = (p: SchemaValidationProblem) => p.severity === 'error'\n\nfunction normalizeIcon(\n  Icon: ComponentType | ElementType | undefined,\n  title: string,\n  subtitle = '',\n): React.JSX.Element {\n  if (isValidElementType(Icon)) return <Icon />\n  if (isValidElement(Icon)) return Icon\n  return createDefaultIcon(title, subtitle)\n}\n\nconst preparedWorkspaces = new WeakMap<SingleWorkspace | WorkspaceOptions, WorkspaceSummary>()\n\n// Create media library sources with configuration\nconst createMediaLibrarySources = (config: PluginOptions) => {\n  const libraryId = mediaLibraryLibraryIdReducer({config, initialValue: undefined})\n  const enabled = mediaLibraryEnabledReducer({config, initialValue: false})\n\n  // Only create sources if media library is enabled\n  if (!enabled) {\n    return {fileSource: null, imageSource: null}\n  }\n\n  const fileSource = createSanityMediaLibraryFileSource({\n    name: 'sanity-media-library-file-source',\n    libraryId: libraryId || null,\n  })\n\n  const imageSource = createSanityMediaLibraryImageSource({\n    name: 'sanity-media-library-image-source',\n    libraryId: libraryId || null,\n  })\n\n  return {fileSource, imageSource}\n}\n\n/**\n * Takes in a config (created from the `defineConfig` function) and returns\n * an array of `WorkspaceSummary`. Note: this only partially resolves a config.\n *\n * For usage inside the Studio, it's preferred to pull the pre-resolved\n * workspaces and sources via `useWorkspace` or `useSource`. For usage outside\n * the Studio or for testing, use `resolveConfig`.\n *\n * @internal\n */\nexport function prepareConfig(\n  config: Config | MissingConfigFile,\n  options?: {basePath?: string},\n): PreparedConfig {\n  if (!Array.isArray(config) && 'missingConfigFile' in config) {\n    throw new ConfigResolutionError({\n      name: '',\n      type: 'configuration file',\n      causes: ['No `sanity.config.ts` file found', 'No `sanity.config.js` file found'],\n    })\n  }\n\n  const rootPath = getRootPath(options?.basePath)\n  const workspaceOptions: WorkspaceOptions[] | [SingleWorkspace] = Array.isArray(config)\n    ? config\n    : [{...config, name: config.name ?? 'default'}]\n\n  try {\n    validateWorkspaces({workspaces: workspaceOptions})\n  } catch (e) {\n    throw new ConfigResolutionError({\n      name: '',\n      type: 'workspace',\n      causes: [e.message],\n    })\n  }\n\n  const workspaces = workspaceOptions.map((rawWorkspace): WorkspaceSummary => {\n    if (preparedWorkspaces.has(rawWorkspace)) {\n      return preparedWorkspaces.get(rawWorkspace)!\n    }\n    const defaultPluginsOptions = getDefaultPluginsOptions(rawWorkspace)\n\n    const {unstable_sources: nestedSources = [], ...rootSource} = rawWorkspace\n    const sources = [rootSource as SourceOptions, ...nestedSources].map(({plugins, ...source}) => {\n      return {\n        ...source,\n        plugins: [...(plugins ?? []), ...getDefaultPlugins(defaultPluginsOptions, plugins)]\n          /*\n           * @FIXME: with the introduction of global references, @sanity/assist broke\n           * As a quickfix the plugins was released with a know property on the plugin definition.\n           * This checks for that property: if it is missing, the plugin is not compatible with this version of the studio.\n           * This ensures auto updating studios can start, albeit without assist, it it is old.\n           */\n          .filter((plugin) => {\n            const validPlugin =\n              plugin.name !== '@sanity/assist' ||\n              (plugin as unknown as {handlesGDR?: boolean}).handlesGDR\n            if (!validPlugin) {\n              console.warn(\n                'Found an incompatible version of @sanity/assist plugin. It has been disabled.\\n' +\n                  'To re-enable the plugin, please upgrade to https://github.com/sanity-io/assist/releases/tag/v3.2.2 or later.',\n              )\n            }\n\n            return validPlugin\n          }),\n      }\n    })\n\n    const resolvedSources = sources.map((source): InternalSource => {\n      const {projectId, dataset} = source\n\n      let schemaTypes\n      try {\n        schemaTypes = resolveSchemaTypes({\n          config: source,\n          context: {projectId, dataset},\n        })\n      } catch (e) {\n        throw new ConfigResolutionError({\n          name: source.name,\n          type: 'source',\n          causes: [e],\n        })\n      }\n\n      const schema = createSchema({\n        name: source.name,\n        types: schemaTypes,\n      })\n\n      const schemaValidationProblemGroups = schema._validation\n      const schemaErrors = schemaValidationProblemGroups?.filter((msg) =>\n        msg.problems.some(isError),\n      )\n\n      if (schemaValidationProblemGroups && schemaErrors?.length) {\n        // TODO: consider using the `ConfigResolutionError`\n        throw new SchemaError(schema)\n      }\n\n      const auth = getAuthStore(source)\n      const i18n = prepareI18n(source)\n      const source$ = auth.state.pipe(\n        map(({client, authenticated, currentUser}) => {\n          return resolveSource({\n            config: source,\n            client,\n            currentUser,\n            schema,\n            authenticated,\n            auth,\n            i18n,\n          })\n        }),\n        shareReplay(1),\n      )\n\n      return {\n        name: source.name,\n        projectId: source.projectId,\n        dataset: source.dataset,\n        title: source.title || startCase(source.name),\n        auth,\n        schema,\n        i18n: i18n.source,\n        source: source$,\n      }\n    })\n\n    const title = rootSource.title || startCase(rootSource.name)\n\n    const workspaceSummary: WorkspaceSummary = {\n      type: 'workspace-summary',\n      auth: resolvedSources[0].auth,\n      basePath: joinBasePath(rootPath, rootSource.basePath),\n      dataset: rootSource.dataset,\n      schema: resolvedSources[0].schema,\n      i18n: resolvedSources[0].i18n,\n      customIcon: !!rootSource.icon,\n      icon: normalizeIcon(rootSource.icon, title, `${rootSource.projectId} ${rootSource.dataset}`),\n      name: rootSource.name || 'default',\n      projectId: rootSource.projectId,\n      theme: rootSource.theme || studioTheme,\n      title,\n      subtitle: rootSource.subtitle,\n      __internal: {\n        sources: resolvedSources,\n      },\n      ...defaultPluginsOptions,\n    }\n    preparedWorkspaces.set(rawWorkspace, workspaceSummary)\n    return workspaceSummary\n  })\n\n  return {type: 'prepared-config', workspaces}\n}\n\nfunction getAuthStore(source: SourceOptions): AuthStore {\n  if (isAuthStore(source.auth)) {\n    return source.auth\n  }\n\n  const clientFactory = source.unstable_clientFactory || createClient\n  const {projectId, dataset, apiHost} = source\n  return createAuthStore({apiHost, ...source.auth, clientFactory, dataset, projectId})\n}\n\ninterface ResolveSourceOptions {\n  config: SourceOptions\n  schema: Schema\n  client: SanityClient\n  currentUser: CurrentUser | null\n  authenticated: boolean\n  auth: AuthStore\n  i18n: {i18next: i18n; source: LocaleSource}\n}\n\nfunction getBifurClient(client: SanityClient, auth: AuthStore) {\n  const bifurVersionedClient = client.withConfig({apiVersion: '2022-06-30'})\n  const {dataset, url: baseUrl, requestTagPrefix = 'sanity.studio'} = bifurVersionedClient.config()\n  const url = `${baseUrl.replace(/\\/+$/, '')}/socket/${dataset}`.replace(/^http/, 'ws')\n  const urlWithTag = `${url}?tag=${requestTagPrefix}`\n\n  const options = auth.token ? {token$: auth.token} : {}\n  return fromUrl(urlWithTag, options)\n}\n\nfunction resolveSource({\n  config,\n  client,\n  currentUser,\n  schema,\n  authenticated,\n  auth,\n  i18n,\n}: ResolveSourceOptions): Source {\n  const {dataset, projectId} = config\n  const bifur = getBifurClient(client, auth)\n  const errors: unknown[] = []\n  const clients: Record<string, SanityClient> = {}\n  const getClient = (options: SourceClientOptions): SanityClient => {\n    if (!options || !options.apiVersion) {\n      throw new Error('Missing required `apiVersion` option')\n    }\n\n    if (!clients[options.apiVersion]) {\n      clients[options.apiVersion] = client.withConfig(options)\n    }\n\n    return clients[options.apiVersion]\n  }\n\n  const context: ConfigContext & {client: SanityClient} = {\n    client,\n    getClient,\n    currentUser,\n    dataset,\n    projectId,\n    schema,\n    i18n: i18n.source,\n  }\n\n  // <TEMPORARY UGLY HACK TO PRINT DEPRECATION WARNINGS ON USE>\n  /* eslint-disable no-proto */\n  const wrappedClient = client as any\n  context.client = [...Object.keys(client), ...Object.keys(wrappedClient.__proto__)].reduce(\n    (acc, key) => {\n      const original = Object.hasOwnProperty.call(client, key)\n        ? wrappedClient[key]\n        : wrappedClient.__proto__[key]\n\n      return Object.defineProperty(acc, key, {\n        get() {\n          console.warn(\n            '`configContext.client` is deprecated and will be removed in the next release! Use `context.getClient({apiVersion: \"2021-06-07\"})` instead',\n          )\n          return original\n        },\n      })\n    },\n    {},\n  ) as any as SanityClient\n  /* eslint-enable no-proto */\n  // </TEMPORARY UGLY HACK TO PRINT DEPRECATION WARNINGS ON USE>\n\n  const mediaLibrarySources = createMediaLibrarySources(config)\n\n  let templates!: Source['templates']\n  try {\n    templates = resolveConfigProperty({\n      config,\n      context,\n      propertyName: 'schema.templates',\n      reducer: schemaTemplatesReducer,\n      initialValue: schema\n        .getTypeNames()\n        .filter((typeName) => !/^sanity\\./.test(typeName))\n        .map((typeName) => schema.get(typeName))\n        .filter(isNonNullable)\n        .filter((schemaType) => schemaType.type?.name === 'document')\n        .map((schemaType) => {\n          const template: Template = {\n            id: schemaType.name,\n            schemaType: schemaType.name,\n            title: schemaType.title || schemaType.name,\n            icon: schemaType.icon,\n            value: schemaType.initialValue || {_type: schemaType.name},\n          }\n\n          return template\n        }),\n    })\n    // TODO: validate templates\n    // TODO: validate that each one has a unique template ID\n  } catch (e) {\n    throw new ConfigResolutionError({\n      name: config.name,\n      type: 'source',\n      causes: [e],\n    })\n  }\n\n  let tools!: Source['tools']\n  try {\n    tools = resolveConfigProperty({\n      config,\n      context,\n      initialValue: [],\n      propertyName: 'tools',\n      reducer: toolsReducer,\n    })\n  } catch (e) {\n    throw new ConfigResolutionError({\n      name: config.name,\n      type: 'source',\n      causes: [e],\n    })\n  }\n\n  // In this case we want to throw an error because it is not possible to have\n  // a tool with the name \"tool\" due to logic that happens in the router.\n  if (tools.some(({name}) => name === 'tool')) {\n    throw new Error('A tool cannot have the name \"tool\". Please enter a different name.')\n  }\n\n  const initialTemplatesResponses = templates\n    // filter out the ones with parameters to fill\n    .filter((template) => !template.parameters?.length)\n    .map(\n      (template): TemplateItem => ({\n        templateId: template.id,\n        description: template.description,\n        icon: template.icon,\n        title: template.title,\n      }),\n    )\n\n  const templateMap = templates.reduce((acc, template) => {\n    acc.set(template.id, template)\n    return acc\n  }, new Map<string, Template>())\n\n  // TODO: extract this function\n  const resolveNewDocumentOptions: Source['document']['resolveNewDocumentOptions'] = (\n    creationContext,\n  ) => {\n    const {schemaType: schemaTypeName} = creationContext\n\n    const templateResponses = resolveConfigProperty({\n      config,\n      context: {...context, creationContext},\n      initialValue: initialTemplatesResponses,\n      propertyName: 'document.resolveNewDocumentOptions',\n      reducer: newDocumentOptionsResolver,\n    })\n\n    const templateErrors: unknown[] = []\n\n    // TODO: validate template responses\n    // ensure there is a matching template per each one\n    if (templateErrors.length) {\n      throw new ConfigResolutionError({\n        name: config.name,\n        type: 'source',\n        causes: templateErrors,\n      })\n    }\n\n    return (\n      templateResponses\n        // take the template responses and transform them into the formal\n        // `InitialValueTemplateItem`\n        .map((response, index): InitialValueTemplateItem => {\n          const template = templateMap.get(response.templateId)\n          if (!template) {\n            throw new Error(`Could not find template with ID \\`${response.templateId}\\``)\n          }\n\n          const schemaType = schema.get(template.schemaType)\n\n          if (!schemaType) {\n            throw new Error(\n              `Could not find matching schema type \\`${template.schemaType}\\` for template \\`${template.id}\\``,\n            )\n          }\n\n          const title = response.title || template.title\n          // Don't show the type name as subtitle if it's the same as the template name\n          const defaultSubtitle = schemaType?.title === title ? undefined : schemaType?.title\n\n          return {\n            id: `${response.templateId}-${index}`,\n            templateId: response.templateId,\n            type: 'initialValueTemplateItem',\n            title,\n            i18n: response.i18n || template.i18n,\n            subtitle: response.subtitle || defaultSubtitle,\n            description: response.description || template.description,\n            icon: response.icon || template.icon || schemaType?.icon,\n            initialDocumentId: response.initialDocumentId,\n            parameters: response.parameters,\n            schemaType: template.schemaType,\n          }\n        })\n        .filter((item) => {\n          // if we are in a creationContext where there is no schema type,\n          // then keep everything\n          if (!schemaTypeName) return true\n\n          // If we are in a 'document' creationContext then keep everything\n          if (creationContext.type === 'document') return true\n\n          // else only keep the `schemaType`s that match the creationContext\n          return schemaTypeName === templateMap.get(item.templateId)?.schemaType\n        })\n    )\n  }\n\n  let staticInitialValueTemplateItems!: InitialValueTemplateItem[]\n  try {\n    staticInitialValueTemplateItems = resolveNewDocumentOptions({type: 'global'})\n  } catch (e) {\n    errors.push(e)\n  }\n\n  if (errors.length) {\n    throw new ConfigResolutionError({\n      name: config.name,\n      type: 'source',\n      causes: errors,\n    })\n  }\n\n  const source: Source = {\n    type: 'source',\n    name: config.name,\n    title: config.title || startCase(config.name),\n    schema,\n    getClient,\n    dataset,\n    projectId,\n    tools,\n    currentUser,\n    authenticated,\n    templates,\n    auth,\n    i18n: i18n.source,\n    // eslint-disable-next-line camelcase\n    __internal_tasks: internalTasksReducer({\n      config,\n    }),\n    document: {\n      actions: (partialContext) =>\n        resolveConfigProperty({\n          config,\n          context: {...context, ...partialContext},\n          initialValue: initialDocumentActions,\n          propertyName: 'document.actions',\n          reducer: documentActionsReducer,\n        }),\n      badges: (partialContext) =>\n        resolveConfigProperty({\n          config,\n          context: {...context, ...partialContext},\n          initialValue: initialDocumentBadges,\n          propertyName: 'document.badges',\n          reducer: documentBadgesReducer,\n        }),\n      unstable_fieldActions: (partialContext) =>\n        resolveConfigProperty({\n          config,\n          context: {...context, ...partialContext},\n          initialValue: initialDocumentFieldActions,\n          propertyName: 'document.unstable_fieldActions',\n          reducer: documentFieldActionsReducer,\n        }),\n      inspectors: (partialContext) =>\n        resolveConfigProperty({\n          config,\n          context: {...context, ...partialContext},\n          initialValue: EMPTY_ARRAY,\n          propertyName: 'document.inspectors',\n          reducer: documentInspectorsReducer,\n        }),\n      resolveProductionUrl: (partialContext) =>\n        resolveConfigProperty({\n          config,\n          context: {...context, ...partialContext},\n          initialValue: undefined,\n          propertyName: 'resolveProductionUrl',\n          asyncReducer: resolveProductionUrlReducer,\n        }),\n      resolveNewDocumentOptions,\n      unstable_languageFilter: (partialContext) =>\n        resolveConfigProperty({\n          config,\n          context: {...context, ...partialContext},\n          initialValue: initialLanguageFilter,\n          propertyName: 'document.unstable_languageFilter',\n          reducer: documentLanguageFilterReducer,\n        }),\n      /** @todo this is deprecated so it will eventually be removed */\n      unstable_comments: {\n        enabled: (partialContext) => {\n          return documentCommentsEnabledReducer({\n            context: partialContext,\n            config,\n            initialValue: true,\n          })\n        },\n      },\n      comments: {\n        enabled: (partialContext) => {\n          return documentCommentsEnabledReducer({\n            context: partialContext,\n            config,\n            initialValue: true,\n          })\n        },\n      },\n    },\n\n    form: {\n      file: {\n        assetSources: resolveConfigProperty({\n          config,\n          context,\n          initialValue: mediaLibrarySources.fileSource\n            ? [DefaultFileSource, mediaLibrarySources.fileSource]\n            : [DefaultFileSource],\n          propertyName: 'formBuilder.file.assetSources',\n          reducer: fileAssetSourceResolver,\n        }),\n        directUploads:\n          // TODO: consider refactoring this to `noDirectUploads` or similar\n          // default value for this is `true`\n          config.form?.file?.directUploads === undefined ? true : config.form.file.directUploads,\n      },\n      image: {\n        assetSources: resolveConfigProperty({\n          config,\n          context,\n          initialValue: mediaLibrarySources.imageSource\n            ? [DefaultImageSource, mediaLibrarySources.imageSource]\n            : [DefaultImageSource],\n          propertyName: 'formBuilder.image.assetSources',\n          reducer: imageAssetSourceResolver,\n        }),\n        directUploads:\n          // TODO: consider refactoring this to `noDirectUploads` or similar\n          // default value for this is `true`\n          config.form?.image?.directUploads === undefined ? true : config.form.image.directUploads,\n      },\n    },\n\n    search: {\n      filters: filterDefinitions,\n      operators: operatorDefinitions,\n      unstable_partialIndexing: {\n        enabled: partialIndexingEnabledReducer({\n          config,\n          initialValue: config.search?.unstable_partialIndexing?.enabled ?? false,\n        }),\n      },\n      strategy: searchStrategyReducer({\n        config,\n        initialValue: 'groqLegacy',\n      }),\n      enableLegacySearch: resolveConfigProperty({\n        config,\n        context,\n        reducer: legacySearchEnabledReducer,\n        propertyName: 'enableLegacySearch',\n        initialValue: true,\n      }),\n      // we will use this when we add search config to PluginOptions\n      /*filters: resolveConfigProperty({\n        config,\n        context: context,\n        initialValue: filterDefinitions,\n        propertyName: 'search.filters',\n        reducer: searchFilterReducer,\n      }),\n      operators: resolveConfigProperty({\n        config,\n        context: context,\n        initialValue: operatorDefinitions as SearchOperatorDefinition[],\n        propertyName: 'search.operators',\n        reducer: searchOperatorsReducer,\n      }),*/\n    },\n\n    __internal: {\n      bifur,\n      i18next: i18n.i18next,\n      staticInitialValueTemplateItems,\n      options: config,\n    },\n    onUncaughtError: (error: Error, errorInfo: ErrorInfo) => {\n      return onUncaughtErrorResolver({\n        config,\n        context: {\n          error: error,\n          errorInfo: errorInfo,\n        },\n      })\n    },\n\n    beta: {\n      eventsAPI: {\n        documents: eventsAPIReducer({config, initialValue: true, key: 'documents'}),\n        releases: eventsAPIReducer({config, initialValue: false, key: 'releases'}),\n      },\n      treeArrayEditing: {\n        // This beta feature is no longer available.\n        enabled: false,\n      },\n      create: {\n        startInCreateEnabled: startInCreateEnabledReducer({config, initialValue: true}),\n        fallbackStudioOrigin: createFallbackOriginReducer(config),\n      },\n    },\n    // eslint-disable-next-line camelcase\n    __internal_serverDocumentActions: {\n      enabled: serverDocumentActionsReducer({config, initialValue: undefined}),\n    },\n\n    announcements: {\n      enabled: announcementsEnabledReducer({config, initialValue: true}),\n    },\n\n    mediaLibrary: {\n      enabled: mediaLibraryEnabledReducer({config, initialValue: false}),\n      libraryId: mediaLibraryLibraryIdReducer({config, initialValue: undefined}),\n    },\n  }\n\n  return source\n}\n\n/**\n * Validate and normalize the `basePath` option.\n * The root path will be used to prepend workspace-specific base paths.\n * For instance, a `/studio` root path is joined with `/design` to become `/studio/design`.\n *\n * @param basePath - The base path to validate. If not set, an empty string will be returned.\n * @returns A normalized string\n * @throws ConfigResolutionError if the basePath is invalid\n * @internal\n */\nfunction getRootPath(basePath?: string) {\n  const rootPath = basePath || ''\n  if (typeof rootPath !== 'string' || (rootPath.length > 0 && !rootPath.startsWith('/'))) {\n    throw new ConfigResolutionError({\n      name: '',\n      type: 'options',\n      causes: ['basePath must be a string, and must start with a slash'],\n    })\n  }\n\n  // Since we'll be appending other base paths, we don't want to end up with double slashes\n  return rootPath === '/' ? '' : rootPath\n}\n\n/**\n * Join the root path of the studio with a workspace base path\n *\n * @param rootPath - The root path to prepend to the base path\n * @param basePath - The base path of the workspace (can be empty)\n * @returns A normalized and joined, complete base path for a workspace\n * @internal\n */\nfunction joinBasePath(rootPath: string, basePath?: string) {\n  const joined = [rootPath, basePath || '']\n    // Remove leading/trailing slashes\n    .map((path) => path.replace(/^\\/+/g, '').replace(/\\/+$/g, ''))\n    // Remove empty segments\n    .filter(Boolean)\n    // Join the segments\n    .join('/')\n\n  return `/${joined}`\n}\n","import {type SanityClient} from '@sanity/client'\nimport {type CurrentUser} from '@sanity/types'\nimport {combineLatest, firstValueFrom, type Observable} from 'rxjs'\nimport {map} from 'rxjs/operators'\n\nimport {createMockAuthStore} from '../store'\nimport {prepareConfig} from './prepareConfig'\nimport {\n  type Config,\n  type SchemaPluginOptions,\n  type SingleWorkspace,\n  type Source,\n  type Workspace,\n} from './types'\n\n/**\n * Fully resolves a configuration including subscribing to all sources and\n * workspaces from a config. Returns an `Observable` that waits till all sources\n * emit once before emitting an array of fully resolved sources and workspaces.\n *\n * @internal\n */\nexport function resolveConfig(config: Config): Observable<Workspace[]> {\n  const {workspaces} = prepareConfig(config)\n\n  return combineLatest(\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    workspaces.flatMap((workspaceSummary) =>\n      combineLatest(workspaceSummary.__internal.sources.map(({source}) => source)).pipe(\n        map(\n          (sources): Workspace => ({\n            ...workspaceSummary,\n            ...sources[0],\n            unstable_sources: sources,\n            type: 'workspace',\n          }),\n        ),\n      ),\n    ),\n  )\n}\n\n/** @internal */\nexport type CreateWorkspaceFromConfigOptions =\n  | SingleWorkspace\n  | (SingleWorkspace & {\n      currentUser: CurrentUser\n      getClient: (options: {apiVersion: string}) => SanityClient\n      schema?: SchemaPluginOptions\n    })\n\n/**\n * PRIMARILY FOR TESTING PURPOSES.\n *\n * This will create a fully resolved workspace from a config and optionally\n * allows a `client` and `currentUser` override. This exists primarily for\n * testing purposes. If you need to use a workspace, we recommend using the\n * `useWorkspace` hook to grab the fully resolved workspace from the\n * `StudioProvider`\n *\n * @internal\n */\nexport async function createWorkspaceFromConfig(\n  options: CreateWorkspaceFromConfigOptions,\n): Promise<Workspace> {\n  const client = 'getClient' in options ? options.getClient({apiVersion: '2023-11-13'}) : undefined\n  const [workspace] = await firstValueFrom(\n    resolveConfig({\n      ...options,\n      ...(client &&\n        'currentUser' in options && {\n          auth: createMockAuthStore({...options, client}),\n        }),\n    }),\n  )\n\n  return workspace\n}\n\n/**\n * PRIMARILY FOR TESTING PURPOSES.\n *\n * This will create a fully resolved source from a config and optionally\n * allows a `client` and `currentUser` override. This exists primarily for\n * testing purposes. If you need to use a source, we recommend using the\n * `useSource` hook to grab the fully resolved source from the `StudioProvider`\n *\n * @internal\n */\nexport async function createSourceFromConfig(\n  options: CreateWorkspaceFromConfigOptions,\n): Promise<Source> {\n  const workspace = await createWorkspaceFromConfig(options)\n  return workspace.unstable_sources[0]\n}\n","import {useMemo} from 'react'\n\nimport {type ConfigContext, type Source} from './types'\n\n/**\n * Reduce a {@link Source} down to a {@link ConfigContext}, memoizing using `useMemo`\n *\n * @param source - Source to convert\n * @returns A config context containing only the defined properties of that interface\n * @internal\n */\nexport function useConfigContextFromSource(source: Source): ConfigContext {\n  const {projectId, dataset, schema, currentUser, getClient, i18n} = source\n  return useMemo(() => {\n    return {projectId, dataset, schema, currentUser, getClient, i18n}\n  }, [projectId, dataset, schema, currentUser, getClient, i18n])\n}\n\n/**\n * Reduce a {@link Source} down to a {@link ConfigContext}, without memoization - use for non-react contexts\n *\n * @param source - Source to convert\n * @returns A config context containing only the defined properties of that interface\n * @internal\n */\nexport function getConfigContextFromSource(source: Source): ConfigContext {\n  const {projectId, dataset, schema, currentUser, getClient, i18n} = source\n  return {projectId, dataset, schema, currentUser, getClient, i18n}\n}\n","import {type ComponentType, type ReactNode, useEffect, useState} from 'react'\nimport {WorkspacesContext} from 'sanity/_singletons'\n\nimport {type Config, prepareConfig} from '../../config'\nimport {type WorkspacesContextValue} from './WorkspacesContext'\n\n/** @internal */\nexport interface WorkspacesProviderProps {\n  config: Config\n  children: ReactNode\n  basePath?: string\n  LoadingComponent: ComponentType\n}\n\n/** @internal */\nexport function WorkspacesProvider({\n  config,\n  children,\n  basePath,\n  LoadingComponent,\n}: WorkspacesProviderProps) {\n  const [workspaces, setWorkspaces] = useState<WorkspacesContextValue | null>(null)\n\n  useEffect(() => {\n    setWorkspaces(prepareConfig(config, {basePath}).workspaces)\n  }, [basePath, config])\n\n  if (workspaces === null) {\n    return <LoadingComponent />\n  }\n\n  return <WorkspacesContext.Provider value={workspaces}>{children}</WorkspacesContext.Provider>\n}\n","import {type ReactNode, useContext} from 'react'\nimport {RouterHistoryContext} from 'sanity/_singletons'\n\nimport {type RouterHistory} from './types'\n\n/** @internal */\nexport function RouterHistoryProvider({\n  children,\n  history,\n}: {\n  children: ReactNode\n  history: RouterHistory\n}) {\n  return <RouterHistoryContext.Provider value={history}>{children}</RouterHistoryContext.Provider>\n}\n\n/** @internal */\nexport function useRouterHistory(): RouterHistory {\n  const value = useContext(RouterHistoryContext)\n  if (!value) throw new Error('Could not find `RouterHistoryProvider` context')\n  return value\n}\n","import {memo, type ReactNode, useMemo} from 'react'\nimport {ActiveWorkspaceMatcherContext} from 'sanity/_singletons'\n\nimport {type RouterHistory} from '../router'\nimport {RouterHistoryProvider} from '../router/RouterHistoryContext'\nimport {type WorkspacesContextValue} from '../workspaces'\nimport {type ActiveWorkspaceMatcherContextValue} from './ActiveWorkspaceMatcherContext'\n\n/** @internal */\nexport const ActiveWorkspaceMatcherProvider = memo(function ActiveWorkspaceMatcherContextProvider({\n  children,\n  history,\n  activeWorkspace,\n  setActiveWorkspace,\n}: {\n  children: ReactNode\n  history: RouterHistory\n  activeWorkspace: WorkspacesContextValue[number]\n  setActiveWorkspace: (workspaceName: string) => void\n}) {\n  const value = useMemo(\n    () =>\n      ({\n        activeWorkspace,\n        setActiveWorkspace,\n      }) satisfies ActiveWorkspaceMatcherContextValue,\n    [activeWorkspace, setActiveWorkspace],\n  )\n\n  return (\n    <ActiveWorkspaceMatcherContext.Provider value={value}>\n      <RouterHistoryProvider history={history}>{children}</RouterHistoryProvider>\n    </ActiveWorkspaceMatcherContext.Provider>\n  )\n})\n","import {escapeRegExp} from 'lodash'\n\nimport {type NormalizedWorkspace} from './types'\n\n/**\n * Recursively creates a matching expression.\n * A list over normalized workspaces, like\n * ```\n * [\n *  {workspace: {…}, name: 'default', basePath: '/studio/deep/shared/test'},\n *  {workspace: {…}, name: 'playground', basePath: '/studio/deep/shared/playground'}\n *  {workspace: {…}, name: 'staging', basePath: '/studio/deep/shared/staging'}\n * ]\n * ```\n * Becomes a Regex like `/^(\\/studio(\\/deep(\\/shared(\\/|$))?(\\/|$))?(\\/|$))?$/i`\n * @internal\n */\nexport function createCommonBasePathRegex(workspaces: NormalizedWorkspace[]): RegExp {\n  const workspaceSegments = workspaces.map((workspace) =>\n    // gets the segments from the basePath\n    workspace.basePath\n      // removes the leading `/`\n      .slice(1)\n      .split('/'),\n  )\n\n  // this common base path is used to check if we should redirect. it's the base\n  // path that is common between all the workspaces.\n  const commonBasePath = workspaceSegments.reduce((commonSegments, segments) => {\n    for (let i = 0; i < commonSegments.length; i++) {\n      const commonSegment = commonSegments[i]\n      const segment = segments[i].toLowerCase()\n\n      if (commonSegment !== segment) {\n        return commonSegments.slice(0, i)\n      }\n    }\n\n    return commonSegments\n  })\n\n  // recursively creates a matching expression\n  // `/foo/bar/baz` becomes `(\\/foo(\\/bar(\\/baz(\\/|$))?(\\/|$))?(\\/|$))?`\n  function createCommonBasePathRegexRecursively([first, ...rest]: string[]): string {\n    if (!first) return ''\n    return `(\\\\/${escapeRegExp(first)}${createCommonBasePathRegexRecursively(rest)}(\\\\/|$))?`\n  }\n\n  return new RegExp(`^${createCommonBasePathRegexRecursively(commonBasePath)}$`, 'i')\n}\n","import {type WorkspacesContextValue} from '../workspaces'\nimport {type NormalizedWorkspace} from './types'\n\n/** @internal */\nexport interface MatchWorkspaceOptions {\n  workspaces: NormalizedWorkspace[]\n  pathname: string\n  basePathRegex: RegExp\n}\n\n/** @internal */\nexport type MatchWorkspaceResult =\n  | {type: 'match'; workspace: WorkspacesContextValue[number]}\n  | {type: 'redirect'; pathname: string}\n  | {type: 'not-found'}\n\n/**\n * Given a pathname and a list of workspaces, returns either a workspace match,\n * a redirect, or not-found.\n *\n * @internal\n */\nexport function matchWorkspace({\n  pathname,\n  workspaces,\n  basePathRegex,\n}: MatchWorkspaceOptions): MatchWorkspaceResult {\n  const [firstWorkspace] = workspaces\n  // eslint-disable-next-line @typescript-eslint/no-shadow\n  for (const {workspace, basePath, basePathRegex} of workspaces) {\n    // this regex ends with a `(\\\\/|$)` (forward slash or end) to prevent false\n    // matches where the pathname is a false subset of the current pathname.\n    // e.g. if the `workspace.basePath` is `/base/foobar` and the current\n    // pathname is `/base/foo`, then that should not be a match\n    if (basePathRegex.test(pathname) || basePath === '/') {\n      return {type: 'match', workspace}\n    }\n  }\n\n  // if the pathname is only a leading slash, then return a redirect\n  if (pathname === '/') {\n    return {type: 'redirect', pathname: firstWorkspace.basePath}\n  }\n\n  if (basePathRegex.test(pathname)) {\n    // redirect to the first workspace configured\n    return {type: 'redirect', pathname: firstWorkspace.basePath}\n  }\n\n  // if the pathname was not a subset of the common base path, then the route\n  // the user is looking for is not present and we should show some sort of 404\n  // screen\n  return {type: 'not-found'}\n}\n","import {escapeRegExp} from 'lodash'\nimport {useMemo} from 'react'\n\nimport {type WorkspacesContextValue} from '../workspaces'\nimport {type NormalizedWorkspace} from './types'\n\n/** @internal */\nexport function useNormalizedWorkspaces(workspaces: WorkspacesContextValue): NormalizedWorkspace[] {\n  return useMemo(\n    () => normalizedWorkspaces(workspaces) satisfies NormalizedWorkspace[],\n    [workspaces],\n  )\n}\n\n/** @internal */\nexport function normalizedWorkspaces(workspaces: WorkspacesContextValue): NormalizedWorkspace[] {\n  return workspaces.map((workspace) => {\n    const basePath = workspace.basePath || '/'\n    return {\n      workspace,\n      name: workspace.name,\n      basePath,\n      // this regex ends with a `(\\\\/|$)` (forward slash or end) to prevent false\n      // matches where the pathname is a false subset of the current pathname.\n      // e.g. if the `workspace.basePath` is `/base/foobar` and the current\n      // pathname is `/base/foo`, then that should not be a match\n      basePathRegex: new RegExp(`^${escapeRegExp(basePath)}(\\\\/|$)`, 'i'),\n    } satisfies NormalizedWorkspace\n  })\n}\n","import {useMemo, useState} from 'react'\nimport {useSyncExternalStoreWithSelector} from 'use-sync-external-store/with-selector.js'\n\nimport {type RouterHistory} from '../router'\nimport {type WorkspacesContextValue} from '../workspaces'\nimport {createCommonBasePathRegex} from './createCommonBasePathRegex'\nimport {matchWorkspace, type MatchWorkspaceResult} from './matchWorkspace'\nimport {useNormalizedWorkspaces} from './useNormalizedWorkspaces'\n\n/**\n * Reads the `history` pathname and responds to changes, returns matching workspace\n *  @internal\n */\nexport function useSyncPathnameWithWorkspace(\n  history: RouterHistory,\n  _workspaces: WorkspacesContextValue,\n): MatchWorkspaceResult {\n  // Workspaces changes infrequently, but router matching can fire a lot. And so there's value in memoizing the normalized\n  // to avoid creating new arrays on every render.\n  const workspaces = useNormalizedWorkspaces(_workspaces)\n  // As with `workspaces` there's value in only create the recursive basePath regex if there's `workspaces` have at all changed\n  const basePathRegex = useMemo(() => createCommonBasePathRegex(workspaces), [workspaces])\n  // history.location is mutable, so we snapshot it with useState to preserve the original pathname\n  const [serverSnapshot] = useState(() => history.location.pathname)\n\n  // React will only re-subscribe if store.subscribe changes identity, so by memoizing the whole store\n  // we ensure that if any of the dependencies used by store.selector changes, we'll re-subscribe.\n  // If we don't, we risk hot reload seeing stale workspace configs as the user is editing them.\n  const store = useMemo(() => {\n    return {\n      subscribe: (onStoreChange: () => void) => history.listen(onStoreChange),\n      getSnapshot: () => history.location.pathname,\n      getServerSnapshot: () => serverSnapshot,\n      selector: (pathname: string) => matchWorkspace({basePathRegex, pathname, workspaces}),\n      isEqual: (a: MatchWorkspaceResult, b: MatchWorkspaceResult) => {\n        if (a.type !== b.type) return false\n        switch (a.type) {\n          case 'match':\n            return a.workspace === (b as typeof a).workspace\n          case 'redirect':\n            return a.pathname === (b as typeof a).pathname\n          case 'not-found':\n            return true\n          default:\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any -- TS thinks this will never happen, but the point of the error is if it somehow did\n            throw new Error(`Unknown type: ${(a as any).type}`)\n        }\n      },\n    }\n  }, [basePathRegex, history, serverSnapshot, workspaces])\n\n  return useSyncExternalStoreWithSelector<string, MatchWorkspaceResult>(\n    store.subscribe,\n    store.getSnapshot,\n    store.getServerSnapshot,\n    store.selector,\n    store.isEqual,\n  )\n}\n","import {createBrowserHistory, createMemoryHistory} from 'history'\nimport {type ComponentType, type ReactNode, useCallback, useEffect, useMemo} from 'react'\n\nimport {type RouterHistory} from '../router'\nimport {useWorkspaces} from '../workspaces'\nimport {ActiveWorkspaceMatcherProvider} from './ActiveWorkspaceMatcherProvider'\nimport {useSyncPathnameWithWorkspace} from './useSyncPathnameWithWorkspace'\n\n/** @internal */\nexport interface ActiveWorkspaceMatcherProps {\n  children: ReactNode\n  unstable_history?: RouterHistory\n  NotFoundComponent: ComponentType<{onNavigateToDefaultWorkspace: () => void}>\n  LoadingComponent: ComponentType\n}\n\nconst createHistory = () =>\n  typeof document === 'undefined' ? createMemoryHistory() : createBrowserHistory()\n\n/** @internal */\nexport function ActiveWorkspaceMatcher({\n  children,\n  LoadingComponent,\n  NotFoundComponent,\n  unstable_history: historyProp,\n}: ActiveWorkspaceMatcherProps) {\n  const workspaces = useWorkspaces()\n  const history = useMemo(() => historyProp || createHistory(), [historyProp])\n\n  const setActiveWorkspaceName = useCallback(\n    (workspaceName: string) => {\n      const foundWorkspace = workspaces.find((workspace) => workspace.name === workspaceName)\n      if (foundWorkspace) {\n        history.push(foundWorkspace.basePath)\n      }\n    },\n    [history, workspaces],\n  )\n  const handleNavigateToDefaultWorkspace = useCallback(() => {\n    setActiveWorkspaceName(workspaces[0].name)\n  }, [setActiveWorkspaceName, workspaces])\n\n  const result = useSyncPathnameWithWorkspace(history, workspaces)\n\n  useEffect(() => {\n    if (result.type === 'redirect') {\n      history.replace(result.pathname)\n    }\n  }, [history, result])\n\n  switch (result.type) {\n    case 'match':\n      return (\n        <ActiveWorkspaceMatcherProvider\n          activeWorkspace={result.workspace}\n          history={history}\n          setActiveWorkspace={setActiveWorkspaceName}\n        >\n          {children}\n        </ActiveWorkspaceMatcherProvider>\n      )\n    case 'redirect':\n      return <LoadingComponent />\n    case 'not-found':\n      return <NotFoundComponent onNavigateToDefaultWorkspace={handleNavigateToDefaultWorkspace} />\n    default:\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any -- TS thinks this will never happen, but the point of the error is if it somehow did\n      throw new Error(`Unknown type: ${(result as any).type}`)\n  }\n}\n","import {useContext} from 'react'\nimport {ActiveWorkspaceMatcherContext} from 'sanity/_singletons'\n\nimport {type ActiveWorkspaceMatcherContextValue} from './ActiveWorkspaceMatcherContext'\n\n/** @internal */\nexport function useActiveWorkspace(): ActiveWorkspaceMatcherContextValue {\n  const value = useContext(ActiveWorkspaceMatcherContext)\n  if (!value) throw new Error('Could not find `ActiveWorkspaceMatcher` context')\n  return value\n}\n","import {type SanityClient} from '@sanity/client'\nimport {useCallback, useContext, useEffect, useMemo, useState} from 'react'\nimport {AddonDatasetContext} from 'sanity/_singletons'\n\nimport {useClient} from '../../hooks'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../studioClient'\nimport {useWorkspace} from '../workspace'\nimport {type AddonDatasetContextValue} from './types'\n\nconst API_VERSION = 'v2023-11-13'\n\ninterface AddonDatasetSetupProviderProps {\n  children: React.ReactNode\n}\n\nfunction AddonDatasetProviderInner(props: AddonDatasetSetupProviderProps) {\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 [isCreatingDataset, setIsCreatingDataset] = useState<boolean>(false)\n  const [ready, setReady] = 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      })\n\n      return client\n    },\n    [originalClient, projectId],\n  )\n\n  const handleCreateAddonDataset = useCallback(async (): Promise<SanityClient | null> => {\n    setIsCreatingDataset(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        setIsCreatingDataset(false)\n        return client\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        setIsCreatingDataset(false)\n        return null\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. Return the client so that the caller can use it to execute operations\n      return client\n    } catch (err) {\n      throw err\n    } finally {\n      setIsCreatingDataset(false)\n    }\n  }, [dataset, getAddonDatasetName, handleCreateClient, originalClient])\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()\n      .then((addonDatasetName) => {\n        if (!addonDatasetName) return\n        const client = handleCreateClient(addonDatasetName)\n        setAddonDatasetClient(client)\n      })\n      .finally(() => {\n        setReady(true)\n      })\n  }, [getAddonDatasetName, handleCreateClient])\n\n  const ctxValue = useMemo(\n    (): AddonDatasetContextValue => ({\n      client: addonDatasetClient,\n      createAddonDataset: handleCreateAddonDataset,\n      isCreatingDataset,\n      ready,\n    }),\n    [addonDatasetClient, handleCreateAddonDataset, isCreatingDataset, ready],\n  )\n\n  return <AddonDatasetContext.Provider value={ctxValue}>{children}</AddonDatasetContext.Provider>\n}\n\n/**\n * This provider sets the addon dataset client, currently called `comments` dataset.\n * It also exposes a `createAddonDataset` function that can be used to create the addon dataset if it does not exist.\n * @beta\n * @hidden\n */\nexport function AddonDatasetProvider(props: AddonDatasetSetupProviderProps) {\n  const context = useContext(AddonDatasetContext)\n  // Avoid mounting the provider if it's already provided by a parent\n  if (context) return props.children\n  return <AddonDatasetProviderInner {...props} />\n}\n","import {useContext} from 'react'\nimport {AddonDatasetContext} from 'sanity/_singletons'\n\nimport {type AddonDatasetContextValue} from './types'\n\n/**\n * @beta\n * @hidden\n */\nexport function useAddonDataset(): AddonDatasetContextValue {\n  const ctx = useContext(AddonDatasetContext)\n\n  if (!ctx) {\n    throw new Error('useAddonDataset: missing context value')\n  }\n\n  return ctx\n}\n","import {type StudioThemeColorSchemeKey} from '../theme/types'\n\nfunction getScheme(scheme: unknown): StudioThemeColorSchemeKey {\n  switch (scheme) {\n    case 'dark':\n    case 'light':\n      return scheme\n    default:\n      return 'system'\n  }\n}\n\n/** @internal */\nexport const LOCAL_STORAGE_KEY = 'sanityStudio:ui:colorScheme'\n\nlet snapshot: StudioThemeColorSchemeKey\nconst subscribers = new Set<() => void>()\n\n/** @internal */\nexport const subscribe = (onStoreChange: () => void) => {\n  if (!snapshot) {\n    snapshot = getScheme(localStorage.getItem(LOCAL_STORAGE_KEY)) || 'system'\n  }\n  subscribers.add(onStoreChange)\n  return (): void => {\n    subscribers.delete(onStoreChange)\n  }\n}\n/** @internal */\nexport function getSnapshot(): StudioThemeColorSchemeKey {\n  return snapshot\n}\n/** @internal */\nexport function setSnapshot(nextScheme: StudioThemeColorSchemeKey): void {\n  snapshot = getScheme(nextScheme)\n  for (const subscription of subscribers) {\n    subscription()\n  }\n}\n","import {DesktopIcon, MoonIcon, SunIcon} from '@sanity/icons'\nimport {studioTheme, type ThemeColorSchemeKey, ThemeProvider, usePrefersDark} from '@sanity/ui'\nimport {\n  type ComponentType,\n  type ReactNode,\n  useContext,\n  useEffect,\n  useMemo,\n  useSyncExternalStore,\n} from 'react'\nimport {ColorSchemeSetValueContext, ColorSchemeValueContext} from 'sanity/_singletons'\n\nimport {type TFunction} from '../i18n'\nimport {type StudioThemeColorSchemeKey} from '../theme/types'\nimport {getSnapshot, setSnapshot, subscribe} from './colorSchemeStore'\n\n/** @internal */\nfunction useSystemScheme(): ThemeColorSchemeKey {\n  const prefersDark = usePrefersDark()\n  return prefersDark ? 'dark' : 'light'\n}\n\nfunction ColorThemeProvider({\n  children,\n  scheme: _scheme,\n}: {\n  children: ReactNode\n  scheme: StudioThemeColorSchemeKey\n}) {\n  const systemScheme = useSystemScheme()\n  const scheme = _scheme === 'system' ? systemScheme : _scheme\n\n  return (\n    <ThemeProvider scheme={scheme} theme={studioTheme}>\n      {/* Note: this is a fallback ThemeProvider that is for any components */}\n      {/* that may render before the StudioThemeProvider renders. this is */}\n      {/* required because the StudioThemeProvider has a dependence on the */}\n      {/* active workspace provided via the ActiveWorkspaceMatcher */}\n      {children}\n    </ThemeProvider>\n  )\n}\n\nconst LOCAL_STORAGE_KEY = 'sanityStudio:ui:colorScheme'\n\n/** @internal */\nexport interface ColorSchemeProviderProps {\n  children: ReactNode\n  onSchemeChange?: (nextScheme: StudioThemeColorSchemeKey) => void\n  scheme?: StudioThemeColorSchemeKey\n}\n\n/** @internal */\nexport function ColorSchemeProvider({\n  children,\n  onSchemeChange,\n  scheme: schemeProp,\n}: ColorSchemeProviderProps) {\n  if (schemeProp) {\n    return (\n      <ColorSchemeCustomProvider scheme={schemeProp} onSchemeChange={onSchemeChange}>\n        {children}\n      </ColorSchemeCustomProvider>\n    )\n  }\n\n  return (\n    <ColorSchemeLocalStorageProvider onSchemeChange={onSchemeChange}>\n      {children}\n    </ColorSchemeLocalStorageProvider>\n  )\n}\n\n/**\n * Uses useSyncExternalStore to ensure that localStorage is accessed in a SSR hydration compatible way\n * @internal\n */\nexport function ColorSchemeLocalStorageProvider({\n  children,\n  onSchemeChange,\n}: Pick<ColorSchemeProviderProps, 'children' | 'onSchemeChange'>) {\n  const scheme = useSyncExternalStore<StudioThemeColorSchemeKey>(\n    subscribe,\n    getSnapshot,\n    // Only called during server-side rendering, and hydration if using hydrateRoot\n    // https://beta.reactjs.org/apis/react/useSyncExternalStore#adding-support-for-server-rendering\n    () => 'system',\n  )\n\n  useEffect(() => {\n    if (typeof onSchemeChange === 'function') {\n      onSchemeChange(scheme)\n    }\n    localStorage.setItem(LOCAL_STORAGE_KEY, scheme)\n  }, [onSchemeChange, scheme])\n\n  return (\n    <ColorSchemeSetValueContext.Provider value={setSnapshot}>\n      <ColorSchemeValueContext.Provider value={scheme}>\n        <ColorThemeProvider scheme={scheme}>{children}</ColorThemeProvider>\n      </ColorSchemeValueContext.Provider>\n    </ColorSchemeSetValueContext.Provider>\n  )\n}\n\n/**\n * If the `scheme` prop is provided we don't need to setup any logic to handle localStorage\n * @internal\n */\nexport function ColorSchemeCustomProvider({\n  children,\n  onSchemeChange,\n  scheme,\n}: Pick<ColorSchemeProviderProps, 'children' | 'onSchemeChange'> & {\n  scheme: StudioThemeColorSchemeKey\n}): React.JSX.Element {\n  return (\n    <ColorSchemeSetValueContext.Provider\n      value={typeof onSchemeChange === 'function' ? onSchemeChange : false}\n    >\n      <ColorSchemeValueContext.Provider value={scheme}>\n        <ColorThemeProvider scheme={scheme}>{children}</ColorThemeProvider>\n      </ColorSchemeValueContext.Provider>\n    </ColorSchemeSetValueContext.Provider>\n  )\n}\n\n/** @alpha */\nexport function useColorSchemeSetValue():\n  | false\n  | ((nextScheme: StudioThemeColorSchemeKey) => void) {\n  const setValue = useContext(ColorSchemeSetValueContext)\n  if (setValue === null) throw new Error('Could not find `ColorSchemeSetValueContext` context')\n  return setValue\n}\n\n/** @internal */\nexport function useColorSchemeInternalValue(): StudioThemeColorSchemeKey {\n  const value = useContext(ColorSchemeValueContext)\n  if (value === null) throw new Error('Could not find `ColorSchemeValueContext` context')\n  return value\n}\n\n/** @alpha */\nexport function useColorSchemeValue(): ThemeColorSchemeKey {\n  const scheme = useColorSchemeInternalValue()\n  const systemScheme = useSystemScheme()\n  return scheme === 'system' ? systemScheme : scheme\n}\n\n/**\n * @deprecated Use `useColorSchemeValue` or `useColorSchemeSetValue` instead\n * @internal\n */\nexport function useColorScheme() {\n  useEffect(() => {\n    console.warn(\n      'useColorScheme() is deprecated, use useColorSchemeValue() or useColorSchemeSetValue() instead',\n    )\n  }, [])\n\n  const scheme = useColorSchemeValue()\n  const setScheme = useColorSchemeSetValue()\n  return useMemo(() => ({scheme, setScheme}), [scheme, setScheme])\n}\n\ninterface ColorSchemeOption {\n  icon: ComponentType\n  label: string\n  name: StudioThemeColorSchemeKey\n  onSelect: () => void\n  selected: boolean\n  title: string\n}\n/**\n * @internal\n */\nexport function useColorSchemeOptions(\n  setScheme: (nextScheme: StudioThemeColorSchemeKey) => void,\n  t: TFunction<'studio', undefined>,\n) {\n  const scheme = useColorSchemeInternalValue()\n\n  return useMemo<ColorSchemeOption[]>(() => {\n    return [\n      {\n        title: t('user-menu.color-scheme.system-title'),\n        name: 'system',\n        label: t('user-menu.color-scheme.system-description'),\n        selected: scheme === 'system',\n        onSelect: () => setScheme('system'),\n        icon: DesktopIcon,\n      },\n      {\n        title: t('user-menu.color-scheme.dark-title'),\n        name: 'dark',\n        label: t('user-menu.color-scheme.dark-description'),\n        selected: scheme === 'dark',\n        onSelect: () => setScheme('dark'),\n        icon: MoonIcon,\n      },\n      {\n        title: t('user-menu.color-scheme.light-title'),\n        name: 'light',\n        label: t('user-menu.color-scheme.light-description'),\n        selected: scheme === 'light',\n        onSelect: () => setScheme('light'),\n        icon: SunIcon,\n      },\n    ]\n  }, [scheme, setScheme, t])\n}\n","import {SearchIcon} from '@sanity/icons'\nimport {type ForwardedRef, forwardRef} from 'react'\n\nimport {Button} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n'\nimport {GLOBAL_SEARCH_KEY, GLOBAL_SEARCH_KEY_MODIFIER} from './constants'\n\ninterface SearchButtonProps {\n  onClick: () => void\n}\n\n/**\n * @internal\n */\nexport const SearchButton = forwardRef(function SearchButton(\n  {onClick}: SearchButtonProps,\n  ref: ForwardedRef<HTMLButtonElement>,\n) {\n  const {t} = useTranslation()\n\n  return (\n    <Button\n      aria-label={t('search.action-open-aria-label')}\n      data-testid=\"studio-search\"\n      icon={SearchIcon}\n      tooltipProps={{\n        content: t('search.button.tooltip'),\n        hotkeys: [GLOBAL_SEARCH_KEY_MODIFIER, GLOBAL_SEARCH_KEY.toUpperCase()],\n        portal: true,\n      }}\n      onClick={onClick}\n      mode=\"bleed\"\n      ref={ref}\n    />\n  )\n})\n","import {Box, Card, Portal} from '@sanity/ui'\nimport {useState} from 'react'\nimport FocusLock from 'react-focus-lock'\nimport {styled} from 'styled-components'\n\nimport {supportsTouch} from '../../../../util'\nimport {useColorSchemeValue} from '../../../colorScheme'\nimport {SearchWrapper} from './components/common/SearchWrapper'\nimport {Filters} from './components/filters/Filters'\nimport {RecentSearches} from './components/recentSearches/RecentSearches'\nimport {SearchHeader} from './components/SearchHeader'\nimport {SearchResults} from './components/searchResults/SearchResults'\nimport {useSearchState} from './contexts/search/useSearchState'\nimport {hasSearchableTerms} from './utils/hasSearchableTerms'\n\ninterface SearchDialogProps {\n  onClose: () => void\n  onOpen: () => void\n  open: boolean\n}\n\nconst InnerCard = styled(Card)`\n  flex-direction: column;\n  overflow: hidden;\n  overflow: clip;\n  pointer-events: all;\n  position: relative;\n`\n\nconst SearchDialogBox = styled(Box)`\n  height: 100%;\n  left: 0;\n  overflow: hidden;\n  overflow: clip;\n  pointer-events: none;\n  position: fixed;\n  top: 0;\n  width: 100%;\n  z-index: 1;\n`\n\n/**\n * @internal\n */\nexport function SearchDialog({onClose, onOpen, open}: SearchDialogProps) {\n  const [inputElement, setInputElement] = useState<HTMLInputElement | null>(null)\n  const scheme = useColorSchemeValue()\n\n  const {\n    state: {filtersVisible, terms},\n  } = useSearchState()\n\n  const hasValidTerms = hasSearchableTerms({terms})\n\n  return (\n    <SearchWrapper hasValidTerms={hasValidTerms} onClose={onClose} onOpen={onOpen} open={open}>\n      {open && (\n        <Portal>\n          <FocusLock autoFocus={!supportsTouch} returnFocus>\n            <SearchDialogBox>\n              <InnerCard display=\"flex\" height=\"fill\" scheme={scheme} tone=\"default\">\n                <SearchHeader onClose={onClose} ref={setInputElement} />\n                {filtersVisible && (\n                  <Card borderTop flex=\"none\">\n                    <Filters />\n                  </Card>\n                )}\n                {hasValidTerms ? (\n                  <SearchResults inputElement={inputElement} />\n                ) : (\n                  <RecentSearches inputElement={inputElement} />\n                )}\n              </InnerCard>\n            </SearchDialogBox>\n          </FocusLock>\n        </Portal>\n      )}\n    </SearchWrapper>\n  )\n}\n","import {Box, Text} from '@sanity/ui'\n\nimport {type LogoProps} from '../../../config'\n\n/**\n * @hidden\n * @beta */\nexport function StudioLogo(props: LogoProps) {\n  const {title} = props\n\n  return (\n    <Box padding={3} data-testid=\"studio-logo\">\n      <Text weight=\"medium\">{title}</Text>\n    </Box>\n  )\n}\n","import {type ComponentType, type PropsWithChildren} from 'react'\nimport {useObservable} from 'react-rx'\n\nimport {useRenderingContextStore} from '../store/_legacy/datastores'\nimport {type Capability} from '../store/renderingContext/types'\n\ntype Props = PropsWithChildren<{\n  capability: Capability\n}>\n\n/**\n * `CapabilityGate` only renders its children if the current Studio rendering context does not\n * provide the specified capability.\n *\n * This allows consumers of the component to conveniently mark a portion of the React tree as\n * providing a capability that may be overriden by the Studio rendering context. If the rendering\n * context provides this capability, the local implementation will not be rendered.\n */\nexport const CapabilityGate: ComponentType<Props> = ({children, capability}) => {\n  const renderingContextStore = useRenderingContextStore()\n  const renderingContextCapabilities = useObservable(renderingContextStore.capabilities, {})\n  const renderingContextHasCapability = renderingContextCapabilities[capability] === true\n\n  if (renderingContextHasCapability) {\n    return null\n  }\n\n  return children\n}\n","import {type ForwardedRef, forwardRef, type HTMLProps, type ReactNode, useCallback} from 'react'\nimport {StateLink, useRouterState} from 'sanity/router'\n\n/**\n * @hidden\n * @beta */\nexport interface ToolLinkProps {\n  children: ReactNode\n  name: string\n}\n\n/**\n * @hidden\n * @beta */\nexport const ToolLink = forwardRef(function ToolLink(\n  props: ToolLinkProps & Omit<HTMLProps<HTMLAnchorElement>, 'href' | 'name'>,\n  ref: ForwardedRef<HTMLAnchorElement>,\n) {\n  const {name, ...rest} = props\n  const state = useRouterState(\n    useCallback(\n      () => ({\n        tool: name,\n        // make sure to clear tool state when navigating to another tool\n        [name]: undefined,\n      }),\n      [name],\n    ),\n  )\n\n  return <StateLink state={state} {...rest} ref={ref} />\n})\n","import {css} from 'styled-components'\n\n/**\n * A CSS helper that extends the clickable area of a component by adding a pseudo-element.\n * This creates a larger hit area for better usability without affecting the visual size.\n */\nexport const oversizedButtonStyle = css`\n  position: relative;\n  cursor: default;\n  &::before {\n    content: '';\n    position: absolute;\n    display: block;\n    inset: -4px;\n    border-radius: 9999px;\n  }\n`\n","import {CalendarIcon} from '@sanity/icons'\n// eslint-disable-next-line no-restricted-imports -- Bundle Button requires more fine-grained styling than studio button\nimport {Button} from '@sanity/ui'\nimport {useCallback} from 'react'\nimport {useTranslation} from 'react-i18next'\nimport {useObservable} from 'react-rx'\nimport {useRouterState} from 'sanity/router'\nimport {styled} from 'styled-components'\n\nimport {Tooltip} from '../../ui-components/tooltip/Tooltip'\nimport {RELEASES_TOOL_NAME} from '../releases/plugin'\nimport {useReleasesStore} from '../releases/store/useReleasesStore'\nimport {ToolLink} from '../studio/components/navbar/tools/ToolLink'\nimport {oversizedButtonStyle} from './styles'\n\nconst Dot = styled.div({\n  width: 4,\n  height: 4,\n  borderRadius: 3,\n  boxShadow: '0 0 0 1px var(--card-bg-color)',\n})\n\nconst OversizedButton = styled(ToolLink)`\n  ${oversizedButtonStyle}\n`\n\n/**\n * represents the calendar icon for the releases tool.\n * It will be hidden if users have turned off releases.\n */\nexport function ReleasesToolLink(): React.JSX.Element {\n  const {t} = useTranslation()\n  const {errorCount$} = useReleasesStore()\n  const errorCount = useObservable(errorCount$)\n  const hasError = errorCount !== 0\n\n  const activeToolName = useRouterState(\n    useCallback(\n      (routerState) => (typeof routerState.tool === 'string' ? routerState.tool : undefined),\n      [],\n    ),\n  )\n\n  return (\n    <Tooltip content={t('release.navbar.tooltip')}>\n      <Button\n        as={OversizedButton}\n        name={RELEASES_TOOL_NAME}\n        data-as=\"a\"\n        icon={CalendarIcon}\n        mode=\"bleed\"\n        padding={2}\n        radius=\"full\"\n        data-testid=\"releases-tool-link\"\n        selected={activeToolName === RELEASES_TOOL_NAME}\n      >\n        {hasError && (\n          <Dot\n            data-ui=\"error-status-icon\"\n            style={{\n              backgroundColor: `var(--card-badge-critical-dot-color)`,\n            }}\n          />\n        )}\n      </Button>\n    </Tooltip>\n  )\n}\n","// eslint-disable-next-line no-restricted-imports -- Bundle Button requires more fine-grained styling than studio button\nimport {Button, Card, Text} from '@sanity/ui'\nimport {motion} from 'framer-motion'\nimport {\n  type ForwardedRef,\n  forwardRef,\n  type ReactNode,\n  useCallback,\n  useLayoutEffect,\n  useMemo,\n  useRef,\n  useState,\n} from 'react'\nimport {IntentLink} from 'sanity/router'\nimport {styled} from 'styled-components'\n\nimport {useTranslation} from '../../i18n/hooks/useTranslation'\nimport {RELEASES_INTENT} from '../../releases/plugin'\nimport {isReleaseDocument, type ReleaseDocument} from '../../releases/store/types'\nimport {getReleaseIdFromReleaseDocumentId} from '../../releases/util/getReleaseIdFromReleaseDocumentId'\nimport {isDraftPerspective, isPublishedPerspective} from '../../releases/util/util'\nimport {oversizedButtonStyle} from '../styles'\nimport {type SelectedPerspective} from '../types'\n\nconst OversizedButton = styled(IntentLink)`\n  ${oversizedButtonStyle}\n`\n\nfunction AnimatedTextWidth({children, text}: {children: ReactNode; text: string}) {\n  const textRef = useRef<HTMLDivElement>(null)\n  const [containerWidth, setContainerWidth] = useState<null | number>(null) // in pixels\n  const [isAnimating, setIsAnimating] = useState(false)\n\n  useLayoutEffect(() => {\n    if (!textRef.current) return\n    const newWidth = textRef.current.offsetWidth\n    setContainerWidth(newWidth)\n  }, [text])\n\n  const onAnimationStart = useCallback(() => {\n    setIsAnimating(true)\n  }, [])\n  const onAnimationComplete = useCallback(() => {\n    setIsAnimating(false)\n  }, [])\n\n  return (\n    <motion.div\n      style={{\n        display: 'inline-block',\n        width: containerWidth === null ? 'auto' : containerWidth, // use auto on first render\n        overflow: isAnimating ? 'hidden' : 'visible',\n      }}\n      animate={{width: containerWidth || 'auto'}}\n      transition={{type: 'spring', bounce: 0, duration: 0.3}}\n      onAnimationStart={onAnimationStart}\n      onAnimationComplete={onAnimationComplete}\n    >\n      <div ref={textRef} style={{display: 'inline-block', whiteSpace: 'nowrap'}}>\n        {children}\n      </div>\n    </motion.div>\n  )\n}\n\nconst ReleasesLink = ({selectedPerspective}: {selectedPerspective: ReleaseDocument}) => {\n  const {t} = useTranslation()\n\n  const ReleasesIntentLink = useMemo(\n    () =>\n      // eslint-disable-next-line @typescript-eslint/no-shadow\n      forwardRef(function ReleasesIntentLink(\n        {children, ...intentProps}: {children: ReactNode},\n        linkRef: ForwardedRef<HTMLAnchorElement>,\n      ) {\n        return (\n          <OversizedButton\n            {...intentProps}\n            ref={linkRef}\n            intent={RELEASES_INTENT}\n            params={{id: getReleaseIdFromReleaseDocumentId(selectedPerspective._id)}}\n          >\n            {children}\n          </OversizedButton>\n        )\n      }),\n    [selectedPerspective],\n  )\n\n  return (\n    <Button\n      as={ReleasesIntentLink}\n      data-as=\"a\"\n      rel=\"noopener noreferrer\"\n      mode=\"bleed\"\n      padding={2}\n      radius=\"full\"\n      style={{maxWidth: '180px', textOverflow: 'ellipsis'}}\n      text={selectedPerspective.metadata?.title || t('release.placeholder-untitled-release')}\n    />\n  )\n}\n\nexport function CurrentGlobalPerspectiveLabel({\n  selectedPerspective,\n}: {\n  selectedPerspective: SelectedPerspective\n}): React.JSX.Element | null {\n  const {t} = useTranslation()\n\n  return (\n    <AnimatedTextWidth\n      text={isReleaseDocument(selectedPerspective) ? selectedPerspective._id : selectedPerspective}\n    >\n      {isPublishedPerspective(selectedPerspective) || isDraftPerspective(selectedPerspective) ? (\n        <Card tone=\"inherit\" padding={2} style={{userSelect: 'none', overflow: 'hidden'}}>\n          <Text size={1} textOverflow=\"ellipsis\" weight=\"medium\">\n            {isPublishedPerspective(selectedPerspective)\n              ? t('release.chip.published')\n              : t('release.chip.global.drafts')}\n          </Text>\n        </Card>\n      ) : (\n        <ReleasesLink selectedPerspective={selectedPerspective} />\n      )}\n    </AnimatedTextWidth>\n  )\n}\n","import {useCallback, useMemo} from 'react'\nimport {useRouter} from 'sanity/router'\n\nimport {usePerspective} from './usePerspective'\n\nexport interface ExcludedPerspectiveValue {\n  /* The excluded perspectives */\n  excludedPerspectives: string[]\n  /* Add/remove excluded perspectives */\n  toggleExcludedPerspective: (perspectiveId: string) => void\n  /* Check if a perspective is excluded */\n  isPerspectiveExcluded: (perspectiveId: string) => boolean\n}\n\n/**\n * Gets the excluded perspectives.\n \n * @internal\n */\nexport function useExcludedPerspective(): ExcludedPerspectiveValue {\n  const {navigate} = useRouter()\n  const {excludedPerspectives} = usePerspective()\n\n  const toggleExcludedPerspective = useCallback(\n    (excluded: string) => {\n      const existingPerspectives = excludedPerspectives || []\n\n      const nextExcludedPerspectives = existingPerspectives.includes(excluded)\n        ? existingPerspectives.filter((id) => id !== excluded)\n        : [...existingPerspectives, excluded]\n\n      navigate({stickyParams: {excludedPerspectives: nextExcludedPerspectives.toString()}})\n    },\n    [excludedPerspectives, navigate],\n  )\n\n  const isPerspectiveExcluded = useCallback(\n    (perspectiveId: string) => Boolean(excludedPerspectives?.includes(perspectiveId)),\n    [excludedPerspectives],\n  )\n\n  return useMemo(\n    () => ({excludedPerspectives, toggleExcludedPerspective, isPerspectiveExcluded}),\n    [excludedPerspectives, toggleExcludedPerspective, isPerspectiveExcluded],\n  )\n}\n","import {Box} from '@sanity/ui'\nimport {css, styled} from 'styled-components'\n\nconst INDICATOR_LEFT_OFFSET = 18\nconst INDICATOR_WIDTH = 5\nconst INDICATOR_COLOR_VAR_NAME = '--card-border-color'\nconst INDICATOR_BOTTOM_OFFSET = 4\n\nexport const GlobalPerspectiveMenuItemIndicator = styled.div<{\n  $inRange: boolean\n  $last: boolean\n  $first: boolean\n  $isDraft: boolean\n}>(\n  ({$inRange, $last, $first, $isDraft}) => css`\n    position: relative;\n\n    --indicator-left: ${INDICATOR_LEFT_OFFSET}px;\n    --indicator-width: ${INDICATOR_WIDTH}px;\n    --indicator-color: var(${INDICATOR_COLOR_VAR_NAME});\n    --indicator-bottom: ${INDICATOR_BOTTOM_OFFSET}px;\n\n    --indicator-in-range-height: 16.5px;\n\n    ${$inRange &&\n    !$last &&\n    css`\n      &:after {\n        content: '';\n        display: block;\n        position: absolute;\n        left: var(--indicator-left);\n        bottom: -var(--indicator-bottom);\n        width: var(--indicator-width);\n        height: ${$isDraft ? 'calc(var(--indicator-bottom) + 12px)' : 'var(--indicator-bottom)'};\n        background-color: var(--card-border-color);\n      }\n    `}\n\n    ${$inRange &&\n    css`\n      > [data-ui='MenuItem'] {\n        position: relative;\n\n        &:before,\n        &:after {\n          content: '';\n          display: block;\n          position: absolute;\n          left: var(--indicator-left);\n          width: var(--indicator-width);\n          background-color: var(--card-border-color);\n        }\n\n        &:before {\n          top: 0;\n          height: var(--indicator-in-range-height);\n        }\n\n        &:after {\n          top: var(--indicator-in-range-height);\n          bottom: 0;\n        }\n      }\n    `}\n\n    ${$first &&\n    css`\n      > [data-ui='MenuItem']:after {\n        margin-top: -3px;\n        border-top-left-radius: ${INDICATOR_WIDTH}px;\n        border-top-right-radius: ${INDICATOR_WIDTH}px;\n      }\n      > [data-ui='MenuItem']:before {\n        display: none;\n      }\n    `}\n\n    ${$last &&\n    css`\n      > [data-ui='MenuItem']:before {\n        // dot diameter (5px) - 1.6px stroke divided by 2\n        padding-bottom: 1.7px;\n        border-bottom-left-radius: ${INDICATOR_WIDTH}px;\n        border-bottom-right-radius: ${INDICATOR_WIDTH}px;\n      }\n      > [data-ui='MenuItem']:after {\n        display: none;\n      }\n    `}\n  `,\n)\n\nexport const GlobalPerspectiveMenuLabelIndicator = styled(Box)<{$withinRange: boolean}>(\n  ({$withinRange}) => css`\n    position: relative;\n    // 4px padding + 33px release indicator width + 4px gap\n    padding-left: 41px;\n\n    ${$withinRange &&\n    css`\n      &:before {\n        content: '';\n        display: block;\n        position: absolute;\n        left: ${INDICATOR_LEFT_OFFSET}px;\n        top: 0;\n        bottom: -${INDICATOR_BOTTOM_OFFSET}px;\n        width: ${INDICATOR_WIDTH}px;\n        background-color: var(${INDICATOR_COLOR_VAR_NAME});\n      }\n    `}\n  `,\n)\n","import {DotIcon, ErrorOutlineIcon, EyeClosedIcon, EyeOpenIcon, LockIcon} from '@sanity/icons'\n// eslint-disable-next-line no-restricted-imports -- custom use for MenuItem & Button not supported by ui-components\nimport {Box, Button, Flex, MenuItem, Stack, Text} from '@sanity/ui'\nimport {type CSSProperties, forwardRef, type MouseEvent, useCallback, useMemo} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {ToneIcon} from '../../../ui-components/toneIcon/ToneIcon'\nimport {Tooltip} from '../../../ui-components/tooltip'\nimport {useTranslation} from '../../i18n/hooks/useTranslation'\nimport {useExcludedPerspective} from '../../perspective/useExcludedPerspective'\nimport {usePerspective} from '../../perspective/usePerspective'\nimport {useSetPerspective} from '../../perspective/useSetPerspective'\nimport {ReleaseAvatar} from '../../releases/components/ReleaseAvatar'\nimport {isReleaseDocument, type ReleaseDocument} from '../../releases/store/types'\nimport {type LATEST} from '../../releases/util/const'\nimport {getReleaseIdFromReleaseDocumentId} from '../../releases/util/getReleaseIdFromReleaseDocumentId'\nimport {getReleaseTone} from '../../releases/util/getReleaseTone'\nimport {\n  formatRelativeLocalePublishDate,\n  isDraftPerspective,\n  isPublishedPerspective,\n  isReleaseScheduledOrScheduling,\n} from '../../releases/util/util'\nimport {GlobalPerspectiveMenuItemIndicator} from './PerspectiveLayerIndicator'\n\nexport interface LayerRange {\n  lastIndex: number\n  offsets: {\n    asap: number\n    scheduled: number\n    undecided: number\n  }\n}\n\nconst ToggleLayerButton = styled(Button)<{$visible: boolean}>(\n  ({$visible}) => css`\n    --card-fg-color: inherit;\n    --card-icon-color: inherit;\n\n    background-color: inherit;\n    opacity: ${$visible ? 0 : 1};\n\n    @media (hover: hover) {\n      &:not([data-disabled='true']):hover {\n        --card-fg-color: inherit;\n        --card-icon-color: inherit;\n      }\n    }\n\n    [data-ui='MenuItem']:hover & {\n      opacity: 1;\n    }\n  `,\n)\n\nconst ExcludedLayerDot = () => (\n  <Box padding={3}>\n    <Text size={1}>\n      <DotIcon\n        style={\n          {\n            opacity: 0,\n          } as CSSProperties\n        }\n      />\n    </Text>\n  </Box>\n)\n\ntype rangePosition = 'first' | 'within' | 'last' | undefined\n\nexport function getRangePosition(range: LayerRange, index: number): rangePosition {\n  const {lastIndex} = range\n\n  if (lastIndex === 0) return undefined\n  if (index === 0) return 'first'\n  if (index === lastIndex) return 'last'\n  if (index > 0 && index < lastIndex) return 'within'\n\n  return undefined\n}\n\nexport const GlobalPerspectiveMenuItem = forwardRef<\n  HTMLDivElement,\n  {\n    release: ReleaseDocument | 'published' | typeof LATEST\n    rangePosition: rangePosition\n  }\n>((props, ref) => {\n  const {release, rangePosition} = props\n  const {selectedPerspective, selectedPerspectiveName} = usePerspective()\n  const setPerspective = useSetPerspective()\n  const {toggleExcludedPerspective, isPerspectiveExcluded} = useExcludedPerspective()\n  const releaseId = isReleaseDocument(release)\n    ? getReleaseIdFromReleaseDocumentId(release._id)\n    : release\n\n  const active = selectedPerspectiveName\n    ? releaseId === selectedPerspectiveName\n    : isDraftPerspective(release)\n\n  const isReleasePerspectiveExcluded = isPerspectiveExcluded(releaseId)\n\n  const {t} = useTranslation()\n\n  const displayTitle = useMemo(() => {\n    if (isPublishedPerspective(release)) return t('release.navbar.published')\n    if (isDraftPerspective(release)) return t('release.navbar.drafts')\n\n    return release.metadata.title || t('release.placeholder-untitled-release')\n  }, [release, t])\n\n  const handleToggleReleaseVisibility = useCallback(\n    (event: MouseEvent<HTMLDivElement>) => {\n      event.stopPropagation()\n      toggleExcludedPerspective(releaseId)\n    },\n    [toggleExcludedPerspective, releaseId],\n  )\n\n  const handleOnReleaseClick = useCallback(\n    () => setPerspective(releaseId),\n    [releaseId, setPerspective],\n  )\n\n  const canReleaseBeExcluded = useMemo(() => {\n    if (release === 'published') return false\n    if (isDraftPerspective(release)) return isReleaseDocument(selectedPerspective)\n    if (isReleaseScheduledOrScheduling(release)) return false\n    return rangePosition && ['first', 'within'].includes(rangePosition)\n  }, [rangePosition, release, selectedPerspective])\n\n  return (\n    <GlobalPerspectiveMenuItemIndicator\n      $isDraft={isDraftPerspective(release)}\n      $first={rangePosition === 'first'}\n      $last={rangePosition === 'last'}\n      $inRange={Boolean(rangePosition)}\n      ref={ref}\n    >\n      <MenuItem\n        onClick={handleOnReleaseClick}\n        padding={1}\n        pressed={active}\n        data-testid={`release-${releaseId}`}\n      >\n        <Flex align=\"flex-start\" gap={1}>\n          <Box\n            flex=\"none\"\n            style={{\n              position: 'relative',\n              zIndex: 1,\n            }}\n          >\n            <Text size={1}>\n              {isReleasePerspectiveExcluded ? (\n                <ExcludedLayerDot />\n              ) : (\n                <ReleaseAvatar tone={getReleaseTone(release)} />\n              )}\n            </Text>\n          </Box>\n          <Stack\n            flex={1}\n            paddingY={2}\n            paddingRight={2}\n            space={2}\n            style={{\n              opacity: isReleasePerspectiveExcluded ? 0.5 : undefined,\n            }}\n          >\n            <Flex gap={3} align=\"center\">\n              <Text size={1} weight=\"medium\">\n                {displayTitle}\n              </Text>\n              {isReleaseDocument(release) &&\n                typeof release.error !== 'undefined' &&\n                release.state === 'active' && (\n                  <Text size={1} data-testid=\"release-error-icon\">\n                    <ToneIcon icon={ErrorOutlineIcon} tone=\"critical\" />\n                  </Text>\n                )}\n            </Flex>\n            {isReleaseDocument(release) &&\n              release.metadata.releaseType === 'scheduled' &&\n              (release.publishAt || release.metadata.intendedPublishAt) && (\n                <Text muted size={1}>\n                  {formatRelativeLocalePublishDate(release)}\n                </Text>\n              )}\n          </Stack>\n          <Box flex=\"none\">\n            {canReleaseBeExcluded && (\n              <Tooltip portal content={t('release.layer.hide')} placement=\"bottom\">\n                <ToggleLayerButton\n                  $visible={!isReleasePerspectiveExcluded}\n                  forwardedAs=\"div\"\n                  icon={isReleasePerspectiveExcluded ? EyeClosedIcon : EyeOpenIcon}\n                  mode=\"bleed\"\n                  onClick={handleToggleReleaseVisibility}\n                  padding={2}\n                  data-testid=\"release-toggle-visibility\"\n                />\n              </Tooltip>\n            )}\n            {isReleaseDocument(release) && isReleaseScheduledOrScheduling(release) && (\n              <Box padding={2}>\n                <Text size={1} data-testid=\"release-lock-icon\">\n                  <LockIcon />\n                </Text>\n              </Box>\n            )}\n          </Box>\n        </Flex>\n      </MenuItem>\n    </GlobalPerspectiveMenuItemIndicator>\n  )\n})\n\nGlobalPerspectiveMenuItem.displayName = 'GlobalPerspectiveMenuItem'\n","import {Flex, Label} from '@sanity/ui'\nimport {useCallback} from 'react'\n\nimport {useTranslation} from '../../i18n/hooks/useTranslation'\nimport {usePerspective} from '../../perspective/usePerspective'\nimport {type ReleaseDocument, type ReleaseType} from '../../releases/store/types'\nimport {getReleaseIdFromReleaseDocumentId} from '../../releases/util/getReleaseIdFromReleaseDocumentId'\nimport {type ReleaseId} from '../types'\nimport {\n  getRangePosition,\n  GlobalPerspectiveMenuItem,\n  type LayerRange,\n} from './GlobalPerspectiveMenuItem'\nimport {GlobalPerspectiveMenuLabelIndicator} from './PerspectiveLayerIndicator'\nimport {type ScrollElement} from './useScrollIndicatorVisibility'\n\nconst RELEASE_TYPE_LABELS: Record<ReleaseType, string> = {\n  asap: 'release.type.asap',\n  scheduled: 'release.type.scheduled',\n  undecided: 'release.type.undecided',\n}\n\nexport function ReleaseTypeMenuSection({\n  releaseType,\n  releases,\n  range,\n  currentGlobalBundleMenuItemRef,\n}: {\n  releaseType: ReleaseType\n  releases: ReleaseDocument[]\n  range: LayerRange\n  currentGlobalBundleMenuItemRef: React.RefObject<ScrollElement>\n}): React.JSX.Element | null {\n  const {t} = useTranslation()\n  const {selectedReleaseId} = usePerspective()\n\n  const getMenuItemRef = useCallback(\n    (releaseId: ReleaseId) =>\n      selectedReleaseId === releaseId\n        ? (currentGlobalBundleMenuItemRef as React.RefObject<HTMLDivElement>)\n        : undefined,\n    [currentGlobalBundleMenuItemRef, selectedReleaseId],\n  )\n\n  if (releases.length === 0) return null\n\n  const {lastIndex, offsets} = range\n  const releaseTypeOffset = offsets[releaseType]\n\n  return (\n    <>\n      <GlobalPerspectiveMenuLabelIndicator\n        $withinRange={releaseTypeOffset > 0 && lastIndex >= releaseTypeOffset}\n        paddingRight={2}\n        paddingTop={releaseType === 'asap' ? 1 : 4}\n        paddingBottom={2}\n      >\n        <Label muted style={{textTransform: 'uppercase'}} size={1}>\n          {t(RELEASE_TYPE_LABELS[releaseType])}\n        </Label>\n      </GlobalPerspectiveMenuLabelIndicator>\n      <Flex direction=\"column\" gap={1}>\n        {releases.map((release, index) => (\n          <GlobalPerspectiveMenuItem\n            release={release}\n            key={release._id}\n            ref={getMenuItemRef(getReleaseIdFromReleaseDocumentId(release._id))}\n            rangePosition={getRangePosition(range, releaseTypeOffset + index)}\n          />\n        ))}\n      </Flex>\n    </>\n  )\n}\n","import {AddIcon} from '@sanity/icons'\nimport {Box, Flex, MenuDivider, Spinner} from '@sanity/ui'\nimport {type RefObject, useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {MenuItem} from '../../../ui-components/menuItem/MenuItem'\nimport {useTranslation} from '../../i18n/hooks/useTranslation'\nimport {useReleasesUpsell} from '../../releases/contexts/upsell/useReleasesUpsell'\nimport {useCreateReleaseMetadata} from '../../releases/hooks/useCreateReleaseMetadata'\nimport {type ReleaseDocument, type ReleaseType} from '../../releases/store/types'\nimport {useActiveReleases} from '../../releases/store/useActiveReleases'\nimport {useReleaseOperations} from '../../releases/store/useReleaseOperations'\nimport {useReleasePermissions} from '../../releases/store/useReleasePermissions'\nimport {LATEST} from '../../releases/util/const'\nimport {getReleaseIdFromReleaseDocumentId} from '../../releases/util/getReleaseIdFromReleaseDocumentId'\nimport {getReleaseDefaults} from '../../releases/util/util'\nimport {usePerspective} from '../usePerspective'\nimport {\n  getRangePosition,\n  GlobalPerspectiveMenuItem,\n  type LayerRange,\n} from './GlobalPerspectiveMenuItem'\nimport {ReleaseTypeMenuSection} from './ReleaseTypeMenuSection'\nimport {type ScrollElement} from './useScrollIndicatorVisibility'\n\nconst orderedReleaseTypes: ReleaseType[] = ['asap', 'scheduled', 'undecided']\n\nconst ASAP_RANGE_OFFSET = 2\n\nconst StyledBox = styled(Box)`\n  overflow: auto;\n  max-height: 75vh;\n`\n\nconst StyledPublishedBox = styled(Box)<{$reducePadding: boolean; $removePadding?: boolean}>(({\n  $reducePadding,\n  $removePadding,\n}) => {\n  const padding = $reducePadding ? '4px' : '16px'\n  return css`\n    position: sticky;\n    top: 0;\n    background-color: var(--card-bg-color);\n    z-index: 10;\n    padding-bottom: ${$removePadding ? '0px' : padding};\n  `\n})\n\nexport function ReleasesList({\n  areReleasesEnabled,\n  setScrollContainer,\n  onScroll,\n  isRangeVisible,\n  selectedReleaseId,\n  setCreateBundleDialogOpen,\n  scrollElementRef,\n}: {\n  areReleasesEnabled: boolean\n  setScrollContainer: (el: HTMLDivElement) => void\n  onScroll: (event: React.UIEvent<HTMLDivElement>) => void\n  isRangeVisible: boolean\n  selectedReleaseId: string | undefined\n  setCreateBundleDialogOpen: (open: boolean) => void\n  scrollElementRef: RefObject<ScrollElement>\n}): React.JSX.Element {\n  const {guardWithReleaseLimitUpsell, mode} = useReleasesUpsell()\n  const {loading, data: releases} = useActiveReleases()\n  const {createRelease} = useReleaseOperations()\n  const {checkWithPermissionGuard} = useReleasePermissions()\n  const [hasCreatePermission, setHasCreatePermission] = useState<boolean | null>(null)\n  const createReleaseMetadata = useCreateReleaseMetadata()\n  const {selectedPerspectiveName} = usePerspective()\n\n  const {t} = useTranslation()\n\n  const isMounted = useRef(false)\n  useEffect(() => {\n    isMounted.current = true\n\n    checkWithPermissionGuard(createRelease, createReleaseMetadata(getReleaseDefaults())).then(\n      (hasPermission) => {\n        if (isMounted.current) setHasCreatePermission(hasPermission)\n      },\n    )\n\n    return () => {\n      isMounted.current = false\n    }\n  }, [checkWithPermissionGuard, createRelease, createReleaseMetadata])\n\n  const handleCreateBundleClick = useCallback(\n    () => guardWithReleaseLimitUpsell(() => setCreateBundleDialogOpen(true)),\n    [guardWithReleaseLimitUpsell, setCreateBundleDialogOpen],\n  )\n\n  const sortedReleaseTypeReleases = useMemo(\n    () =>\n      orderedReleaseTypes.reduce<Record<ReleaseType, ReleaseDocument[]>>(\n        (ReleaseTypeReleases, releaseType) => ({\n          ...ReleaseTypeReleases,\n          [releaseType]: releases.filter(({metadata}) => metadata.releaseType === releaseType),\n        }),\n        {} as Record<ReleaseType, ReleaseDocument[]>,\n      ),\n    [releases],\n  )\n\n  const range: LayerRange = useMemo(() => {\n    const isDraftsPerspective = typeof selectedPerspectiveName === 'undefined'\n    let lastIndex = isDraftsPerspective ? 1 : 0\n\n    const {asap, scheduled} = sortedReleaseTypeReleases\n    const countAsapReleases = asap.length\n    const countScheduledReleases = scheduled.length\n\n    const offsets = {\n      asap: ASAP_RANGE_OFFSET,\n      scheduled: ASAP_RANGE_OFFSET + countAsapReleases,\n      undecided: ASAP_RANGE_OFFSET + countAsapReleases + countScheduledReleases,\n    }\n\n    const adjustIndexForReleaseType = (type: ReleaseType) => {\n      const groupSubsetReleases = sortedReleaseTypeReleases[type]\n      const offset = offsets[type]\n\n      groupSubsetReleases.forEach((release, groupReleaseIndex) => {\n        const index = offset + groupReleaseIndex\n\n        if (selectedReleaseId === getReleaseIdFromReleaseDocumentId(release._id)) {\n          lastIndex = index\n        }\n      })\n    }\n\n    orderedReleaseTypes.forEach(adjustIndexForReleaseType)\n\n    return {\n      lastIndex,\n      offsets,\n    }\n  }, [selectedPerspectiveName, selectedReleaseId, sortedReleaseTypeReleases])\n\n  if (loading) {\n    return (\n      <Flex padding={4} justify=\"center\" data-testid=\"spinner\">\n        <Spinner muted />\n      </Flex>\n    )\n  }\n\n  return (\n    <>\n      <StyledBox ref={setScrollContainer} onScroll={onScroll}>\n        <StyledPublishedBox\n          $reducePadding={!releases.length || !areReleasesEnabled}\n          $removePadding={!areReleasesEnabled}\n        >\n          <GlobalPerspectiveMenuItem\n            rangePosition={isRangeVisible ? getRangePosition(range, 0) : undefined}\n            release={'published'}\n          />\n          <GlobalPerspectiveMenuItem\n            rangePosition={isRangeVisible ? getRangePosition(range, 1) : undefined}\n            release={LATEST}\n          />\n        </StyledPublishedBox>\n        {areReleasesEnabled && (\n          <>\n            {orderedReleaseTypes.map((releaseType) => (\n              <ReleaseTypeMenuSection\n                key={releaseType}\n                releaseType={releaseType}\n                releases={sortedReleaseTypeReleases[releaseType]}\n                range={range}\n                currentGlobalBundleMenuItemRef={scrollElementRef}\n              />\n            ))}\n          </>\n        )}\n      </StyledBox>\n      {areReleasesEnabled && (\n        <>\n          <MenuDivider />\n          <MenuItem\n            icon={AddIcon}\n            disabled={!hasCreatePermission || mode === 'disabled'}\n            onClick={handleCreateBundleClick}\n            text={t('release.action.create-new')}\n            data-testid=\"create-new-release-button\"\n            tooltipProps={{\n              disabled: hasCreatePermission === true,\n              content: t('release.action.permission.error'),\n            }}\n          />\n        </>\n      )}\n    </>\n  )\n}\n","import {useCallback, useMemo, useRef, useState} from 'react'\n\nexport type ScrollElement = HTMLDivElement | null\n\nfunction isElementVisibleInContainer(container: ScrollElement, element: ScrollElement) {\n  if (!container || !element) return true\n\n  const containerRect = container.getBoundingClientRect()\n  const elementRect = element.getBoundingClientRect()\n\n  // 32.5px is padding on published/draft element + padding of perspective/draft menu item\n  const isVisible = elementRect.top >= containerRect.top + 32.5 * 2\n\n  return isVisible\n}\n\nexport const useScrollIndicatorVisibility = () => {\n  const scrollContainerRef = useRef<ScrollElement>(null)\n  const scrollElementRef = useRef<ScrollElement>(null)\n\n  const [isRangeVisible, setIsRangeVisible] = useState(true)\n\n  const handleScroll = useCallback(\n    () =>\n      setIsRangeVisible(\n        isElementVisibleInContainer(scrollContainerRef.current, scrollElementRef.current),\n      ),\n    [],\n  )\n\n  const setScrollContainer = useCallback((container: HTMLDivElement) => {\n    scrollContainerRef.current = container\n  }, [])\n\n  const resetRangeVisibility = useCallback(() => setIsRangeVisible(true), [])\n\n  return useMemo(\n    () => ({\n      resetRangeVisibility,\n      onScroll: handleScroll,\n      isRangeVisible,\n      setScrollContainer,\n      scrollElementRef,\n    }),\n    [handleScroll, isRangeVisible, resetRangeVisibility, setScrollContainer],\n  )\n}\n","import {ChevronDownIcon} from '@sanity/icons'\n// eslint-disable-next-line no-restricted-imports -- Button requires props, only supported by @sanity/ui\nimport {Button, Menu} from '@sanity/ui'\nimport {useCallback, useRef, useState} from 'react'\nimport {styled} from 'styled-components'\n\nimport {MenuButton} from '../../../ui-components'\nimport {CreateReleaseDialog} from '../../releases/components/dialog/CreateReleaseDialog'\nimport {oversizedButtonStyle} from '../styles'\nimport {type ReleaseId} from '../types'\nimport {ReleasesList} from './ReleasesList'\nimport {useScrollIndicatorVisibility} from './useScrollIndicatorVisibility'\n\nconst StyledMenu = styled(Menu)`\n  min-width: 200px;\n  max-width: 320px;\n`\nconst OversizedButton = styled(Button)`\n  ${oversizedButtonStyle}\n`\n\nexport function GlobalPerspectiveMenu({\n  selectedReleaseId,\n  areReleasesEnabled = true,\n}: {\n  selectedReleaseId: ReleaseId | undefined\n  areReleasesEnabled: boolean\n}): React.JSX.Element {\n  const [createBundleDialogOpen, setCreateBundleDialogOpen] = useState(false)\n  const styledMenuRef = useRef<HTMLDivElement>(null)\n\n  const {isRangeVisible, onScroll, resetRangeVisibility, setScrollContainer, scrollElementRef} =\n    useScrollIndicatorVisibility()\n\n  const handleClose = useCallback(() => {\n    setCreateBundleDialogOpen(false)\n  }, [])\n\n  return (\n    <>\n      <MenuButton\n        button={\n          <OversizedButton\n            data-testid=\"global-perspective-menu-button\"\n            iconRight={ChevronDownIcon}\n            mode=\"bleed\"\n            padding={2}\n            radius=\"full\"\n          />\n        }\n        id=\"releases-menu\"\n        onClose={resetRangeVisibility}\n        menu={\n          <StyledMenu data-testid=\"release-menu\" ref={styledMenuRef}>\n            <ReleasesList\n              areReleasesEnabled={areReleasesEnabled}\n              setScrollContainer={setScrollContainer}\n              onScroll={onScroll}\n              isRangeVisible={isRangeVisible}\n              scrollElementRef={scrollElementRef}\n              selectedReleaseId={selectedReleaseId}\n              setCreateBundleDialogOpen={setCreateBundleDialogOpen}\n            />\n          </StyledMenu>\n        }\n        popover={{\n          constrainSize: true,\n          fallbackPlacements: ['bottom-end'],\n          placement: 'bottom-end',\n          portal: true,\n          tone: 'default',\n          zOffset: 3000,\n        }}\n      />\n      {createBundleDialogOpen && (\n        <CreateReleaseDialog onCancel={handleClose} onSubmit={handleClose} origin=\"structure\" />\n      )}\n    </>\n  )\n}\n","import {Card} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {usePerspective} from '../../perspective/usePerspective'\nimport {useReleasesToolAvailable} from '../../releases/hooks/useReleasesToolAvailable'\nimport {ReleasesToolLink} from '../ReleasesToolLink'\nimport {CurrentGlobalPerspectiveLabel} from './currentGlobalPerspectiveLabel'\nimport {GlobalPerspectiveMenu} from './GlobalPerspectiveMenu'\n\nconst ReleasesNavContainer = styled(Card)`\n  position: relative;\n  display: flex;\n  &:not([hidden]) {\n    display: flex;\n  }\n  align-items: center;\n  gap: 2px;\n  padding: 2px;\n\n  // The children in button is rendered inside a span, we need to absolutely position the dot for the error.\n  span:has(> [data-ui='error-status-icon']) {\n    position: absolute;\n    top: 6px;\n    right: 6px;\n    padding: 0;\n  }\n\n  a:hover,\n  button:hover {\n    position: relative;\n    z-index: 2;\n  }\n`\nexport function ReleasesNav(): React.JSX.Element {\n  const releasesToolAvailable = useReleasesToolAvailable()\n  const {selectedPerspective, selectedReleaseId} = usePerspective()\n\n  return (\n    <ReleasesNavContainer flex=\"none\" tone=\"inherit\" radius=\"full\" data-ui=\"ReleasesNav\" border>\n      {releasesToolAvailable && <ReleasesToolLink />}\n      <CurrentGlobalPerspectiveLabel selectedPerspective={selectedPerspective} />\n      <GlobalPerspectiveMenu\n        selectedReleaseId={selectedReleaseId}\n        areReleasesEnabled={releasesToolAvailable}\n      />\n    </ReleasesNavContainer>\n  )\n}\n","import {type Tool} from '../../../config'\n\ninterface StudioActiveToolLayoutProps {\n  activeTool: Tool\n}\n\nexport function StudioActiveToolLayout(props: StudioActiveToolLayoutProps) {\n  const {activeTool} = props\n  const Component = activeTool.component\n  return <Component tool={activeTool} />\n}\n","/* eslint-disable i18next/no-literal-string,@sanity/i18n/no-attribute-string-literals */\nimport {WarningOutlineIcon} from '@sanity/icons'\nimport {Box, Card, Container, Flex, Stack, Text} from '@sanity/ui'\n\nexport function NoToolsScreen() {\n  return (\n    <Card height=\"fill\">\n      <Flex align=\"center\" height=\"fill\" justify=\"center\" padding={4} sizing=\"border\">\n        <Container width={0}>\n          <Card padding={4} radius={2} shadow={1} tone=\"caution\">\n            <Flex>\n              <Box>\n                <Text size={1}>\n                  <WarningOutlineIcon />\n                </Text>\n              </Box>\n              <Stack flex={1} marginLeft={3} space={3}>\n                <Text as=\"h1\" size={1} weight=\"medium\">\n                  No configured tools\n                </Text>\n                <Text as=\"p\" muted size={1}>\n                  Please configure a tool in your Studio configuration.\n                </Text>\n                <Text as=\"p\" muted size={1}>\n                  <a\n                    href=\"https://www.sanity.io/docs/studio-tools\"\n                    rel=\"noreferrer\"\n                    target=\"_blank\"\n                  >\n                    Learn how to add a tool &rarr;\n                  </a>\n                </Text>\n              </Stack>\n            </Flex>\n          </Card>\n        </Container>\n      </Flex>\n    </Card>\n  )\n}\n","import {DoubleChevronRightIcon} from '@sanity/icons'\nimport {Box, Card, Container, Flex, Stack, Text} from '@sanity/ui'\n\nexport function RedirectingScreen(props: {reason?: string}) {\n  const {reason = 'Redirecting…'} = props\n\n  return (\n    <Card height=\"fill\">\n      <Flex align=\"center\" height=\"fill\" justify=\"center\" padding={4} sizing=\"border\">\n        <Container width={0}>\n          <Card padding={4} radius={2} shadow={1} tone=\"primary\">\n            <Flex>\n              <Box>\n                <Text size={1}>\n                  <DoubleChevronRightIcon />\n                </Text>\n              </Box>\n              <Stack flex={1} marginLeft={3} space={3}>\n                <Text as=\"h1\" size={1} weight=\"bold\">\n                  {reason}\n                </Text>\n              </Stack>\n            </Flex>\n          </Card>\n        </Container>\n      </Flex>\n    </Card>\n  )\n}\n","/* eslint-disable i18next/no-literal-string,@sanity/i18n/no-attribute-string-literals */\nimport {WarningOutlineIcon} from '@sanity/icons'\nimport {Box, Card, Container, Flex, Stack, Text} from '@sanity/ui'\n\nexport function ToolNotFoundScreen(props: {toolName: string}) {\n  const {toolName} = props\n\n  return (\n    <Card height=\"fill\">\n      <Flex align=\"center\" height=\"fill\" justify=\"center\" padding={4} sizing=\"border\">\n        <Container width={0}>\n          <Card padding={4} radius={2} shadow={1} tone=\"caution\">\n            <Flex>\n              <Box>\n                <Text size={1}>\n                  <WarningOutlineIcon />\n                </Text>\n              </Box>\n              <Stack flex={1} marginLeft={3} space={3}>\n                <Text as=\"h1\" size={1} weight=\"medium\">\n                  Tool not found: <code>{toolName}</code>\n                </Text>\n              </Stack>\n            </Flex>\n          </Card>\n        </Container>\n      </Flex>\n    </Card>\n  )\n}\n","// These strings are not internationalized because `ErrorActions` is used inside\n// `StudioErrorBoundary`, which is rendered outside of `LocaleProvider`.\nexport const strings = {\n  'retry.title': 'Retry',\n  'copy-error-details.description': 'These technical details may be useful for developers.',\n  'copy-error-details.title': 'Copy error details',\n  'copy-error-details.toast.get-failed': 'Failed to get error details',\n  'copy-error-details.toast.copy-failed': 'Failed to copy error details',\n} as const\n","import {useToast} from '@sanity/ui'\nimport {pick} from 'lodash'\nimport {useCallback} from 'react'\nimport {catchError, EMPTY, map, of, type OperatorFunction, tap} from 'rxjs'\n\nimport {isRecord} from '../../util'\nimport {strings} from './strings'\nimport {type ErrorWithId} from './types'\n\nconst TOAST_ID = 'copyErrorDetails'\n\n/**\n * @internal\n */\nexport function useCopyErrorDetails(error: unknown, eventId?: string | null): () => void {\n  const toast = useToast()\n\n  return useCallback(() => {\n    of<ErrorWithId>({error, eventId})\n      .pipe(\n        serializeError(),\n        catchError((serializeErrorError) => {\n          console.error(serializeErrorError)\n          toast.push({\n            status: 'error',\n            title: strings['copy-error-details.toast.get-failed'],\n            id: TOAST_ID,\n          })\n          return EMPTY\n        }),\n        tap((errorDetailsString) => navigator.clipboard.writeText(errorDetailsString)),\n        catchError((copyErrorError) => {\n          console.error(copyErrorError)\n          toast.push({\n            status: 'error',\n            title: strings['copy-error-details.toast.copy-failed'],\n            id: TOAST_ID,\n          })\n          return EMPTY\n        }),\n      )\n      .subscribe()\n  }, [error, eventId, toast])\n}\n\n/**\n * @internal\n */\nexport function serializeError(): OperatorFunction<ErrorWithId, string> {\n  return map<ErrorWithId, string>(({error, eventId}) => {\n    // Extract the non-enumerable properties of the provided `error` object. This is particularly\n    // useful if the provided `error` value is an instance of `Error`, whose properties are\n    // non-enumerable.\n    const errorInfo = isRecord(error) ? pick(error, Object.getOwnPropertyNames(error)) : undefined\n    return JSON.stringify({error: errorInfo, eventId}, null, 2)\n  })\n}\n","import {CopyIcon, SyncIcon} from '@sanity/icons'\nimport {Inline} from '@sanity/ui'\nimport {type ComponentProps, type ComponentType} from 'react'\n\nimport {Button, Tooltip} from '../../../ui-components'\nimport {strings} from './strings'\nimport {useCopyErrorDetails} from './useCopyErrorDetails'\n\n/**\n * @internal\n */\nexport interface ErrorActionsProps extends Pick<ComponentProps<typeof Button>, 'size'> {\n  error: unknown\n  eventId: string | null\n  onRetry?: () => void\n}\n\n/**\n * @internal\n */\nexport const ErrorActions: ComponentType<ErrorActionsProps> = ({error, eventId, onRetry, size}) => {\n  const copyErrorDetails = useCopyErrorDetails(error, eventId)\n\n  return (\n    <Inline space={3}>\n      {onRetry && (\n        <Button\n          onClick={onRetry}\n          text={strings['retry.title']}\n          tone=\"primary\"\n          icon={SyncIcon}\n          size={size}\n        />\n      )}\n      <Tooltip content={strings['copy-error-details.description']}>\n        <Button\n          onClick={copyErrorDetails}\n          text={strings['copy-error-details.title']}\n          tone=\"default\"\n          mode=\"ghost\"\n          icon={CopyIcon}\n          size={size}\n        />\n      </Tooltip>\n    </Inline>\n  )\n}\n","/**\n * Returns whether or not there is a `sanity` entry in an import map in the current document,\n * which usually means that this studio is \"auto updating\".\n * @internal\n */\nexport const hasSanityPackageInImportMap = () => {\n  if (typeof document === 'undefined' || !('querySelectorAll' in document)) {\n    return false\n  }\n  const importMapEntries = document.querySelectorAll('script[type=\"importmap\"]')\n  return Array.from(importMapEntries).some((entry) => {\n    if (!entry.textContent) return false\n    const importMap = JSON.parse(entry.textContent)\n    const imports = importMap.imports || {}\n    return 'sanity' in imports\n  })\n}\n","import {makeFetchTransport} from '@sentry/react'\nimport {type EventEnvelope, type Transport, type TransportMakeRequestResponse} from '@sentry/types'\n\n/**\n * @internal\n */\nexport type BufferedTransport = Transport & {\n  setConsent: (consentGiven: boolean) => Promise<void>\n}\n\n/**\n * Because we want to buffer events until the user has given consent to telemetry,\n * we need to implement a custom transport, but mostly wrap the fetch transport.\n * @internal\n */\nexport function makeBufferedTransport(options: any): BufferedTransport {\n  let buffer: EventEnvelope[] = []\n  let consentGiven: boolean | undefined\n  const fetchTransport = makeFetchTransport(options)\n\n  const send = async (event: EventEnvelope) => {\n    if (consentGiven) {\n      return sendImmediately(event)\n    }\n\n    //we may not have received consent yet. Buffer the event until we know what to do.\n    if (typeof consentGiven === 'undefined') {\n      buffer.push(event)\n    }\n    // consent not given, skip sending the event\n    return {}\n  }\n\n  const sendImmediately = async (event: EventEnvelope): Promise<TransportMakeRequestResponse> => {\n    return fetchTransport.send(event)\n  }\n\n  const setConsent = async (consent: boolean) => {\n    consentGiven = consent\n    //we clear the buffer if consent is given (since we've sent the buffered events)\n    //and we clear the buffer if consent is revoked (since the events should not be sent)\n    if (consent) {\n      await flushBuffer()\n    }\n    buffer = []\n  }\n\n  const flushBuffer = async () => {\n    await Promise.all(buffer.map(sendImmediately)).catch((err) => {\n      console.error('Failed to send buffered events from transport: ', err)\n    })\n  }\n\n  const flush = async () => {\n    return fetchTransport.flush()\n  }\n\n  return {\n    flush,\n    send,\n    setConsent,\n  }\n}\n","import {\n  breadcrumbsIntegration,\n  browserApiErrorsIntegration,\n  BrowserClient,\n  type BrowserOptions,\n  captureException,\n  dedupeIntegration,\n  defaultStackParser,\n  type ErrorEvent,\n  type Event,\n  functionToStringIntegration,\n  getClient,\n  getCurrentScope,\n  globalHandlersIntegration,\n  httpContextIntegration,\n  inboundFiltersIntegration,\n  init,\n  isInitialized as sentryIsInitialized,\n  linkedErrorsIntegration,\n  Scope,\n  withScope,\n} from '@sentry/react'\nimport {type Transport} from '@sentry/types'\n\nimport {isDev} from '../../environment'\nimport {hasSanityPackageInImportMap} from '../../environment/hasSanityPackageInImportMap'\nimport {globalScope} from '../../util/globalScope'\nimport {supportsLocalStorage} from '../../util/supportsLocalStorage'\nimport {SANITY_VERSION} from '../../version'\nimport {type ErrorInfo, type ErrorReporter} from '../errorReporter'\nimport {type BufferedTransport, makeBufferedTransport} from './makeBufferedTransport'\n\nconst SANITY_DSN = 'https://8914c8dde7e1ebce191f15af8bf6b7b9@sentry.sanity.io/4507342122123264'\n\nconst IS_EMBEDDED_STUDIO = !('__sanityErrorChannel' in globalScope)\n\nconst DEBUG_ERROR_REPORTING =\n  supportsLocalStorage && Boolean(localStorage.getItem('SANITY_DEBUG_ERROR_REPORTING'))\n\nconst IS_BROWSER = typeof window !== 'undefined'\n\nconst clientOptions: BrowserOptions = {\n  dsn: SANITY_DSN,\n  release: SANITY_VERSION,\n  environment: isDev ? 'development' : 'production',\n  debug: DEBUG_ERROR_REPORTING,\n  enabled: IS_BROWSER && (!isDev || DEBUG_ERROR_REPORTING),\n  transport: makeBufferedTransport,\n}\n\nconst integrations = [\n  inboundFiltersIntegration(),\n  functionToStringIntegration(),\n  browserApiErrorsIntegration({eventTarget: false}),\n  breadcrumbsIntegration({console: false}),\n  globalHandlersIntegration({onerror: true, onunhandledrejection: true}),\n  linkedErrorsIntegration(),\n  dedupeIntegration(),\n  sanityDedupeIntegration(),\n  httpContextIntegration(),\n]\n\n/**\n * Get an instance of the Sentry error reporter\n *\n * @internal\n */\nexport function getSentryErrorReporter(): ErrorReporter {\n  let client: BrowserClient | undefined\n  let scope: Scope | undefined\n\n  // Keep tabs of events reported before initialized.\n  const preInitErrors: {\n    error: Error\n    options: ErrorInfo\n  }[] = []\n\n  function _initialize() {\n    // If this _Sanity_ implementation of the reporter is already initialized, do not re-instantiate\n    if (client) {\n      return\n    }\n\n    // For now, we only want to run error reporting for auto-updating studios in production.\n    // This may change in the future, but for now this will help us control the amount of errors.\n    if (!DEBUG_ERROR_REPORTING && !hasSanityPackageInImportMap()) {\n      return\n    }\n\n    // For now, we also want to avoid running error reporting in embedded studios,\n    // even if it has a Sanity package in the import map (eg. is auto updating).\n    if (!DEBUG_ERROR_REPORTING && IS_EMBEDDED_STUDIO) {\n      return\n    }\n\n    // This normally shouldn't happen, but if we're initialized and already using the Sanity DSN,\n    // then assume we can reuse the global client\n    const isSentryInitialized = sentryIsInitialized()\n    const hasThirdPartySentry = isSentryInitialized && getClient()?.getOptions().dsn === SANITY_DSN\n    if (isSentryInitialized && !hasThirdPartySentry) {\n      client = getClient()\n      scope = getCurrentScope()\n      return\n    }\n\n    // \"Third party\" means the customer already has an instance of the Sentry SDK on the page,\n    // but it is not configured to use the Sanity DSN. In this case, we'll create a new client\n    // for ourselves, and try to avoid the global scope.\n    if (hasThirdPartySentry) {\n      client = new BrowserClient({\n        ...clientOptions,\n        stackParser: defaultStackParser,\n        integrations,\n        beforeSend,\n        transport: makeBufferedTransport,\n      })\n\n      scope = new Scope()\n      scope.setClient(client)\n\n      // Initializing has to be done after setting the client on the scope\n      client.init()\n      return\n    }\n\n    // There is no active client on the page, so assume we can take ownership of the\n    // global scope and client. This is the default, recommended behavior for the Sentry client,\n    // and as such is what we primarily want to rely on.\n    init({\n      ...clientOptions,\n      defaultIntegrations: false,\n      integrations,\n      beforeSend,\n    })\n\n    client = getClient()\n    scope = getCurrentScope()\n  }\n\n  function initialize() {\n    _initialize()\n    if (client && preInitErrors.length > 0) {\n      preInitErrors.forEach(({error, options}) => reportError(error, options))\n      preInitErrors.length = 0\n    }\n  }\n\n  function reportError(error: Error, options: ErrorInfo = {}) {\n    if (!client) {\n      preInitErrors.push({error, options})\n      return null\n    }\n\n    const {reactErrorInfo = {}, errorBoundary} = options\n    const {componentStack} = reactErrorInfo\n\n    // Decorate the error report with relevant context and tags\n    const contexts: Record<string, Record<string, unknown> | undefined> = {}\n    if (componentStack) {\n      contexts.react = {componentStack}\n    }\n\n    const tags: {[key: string]: number | string | boolean | null | undefined} = {\n      handled: 'no',\n    }\n\n    if (errorBoundary) {\n      tags.errorBoundary = errorBoundary\n    }\n\n    let eventId: string | null = null\n    withScope(() => {\n      if (componentStack && isError(error)) {\n        const errorBoundaryError = new Error(error.message)\n        errorBoundaryError.name = `${errorBoundary || 'ErrorBoundary'} ${error.name}`\n        errorBoundaryError.stack = componentStack\n\n        // Using the `LinkedErrors` integration to link the errors together.\n        setCause(error, errorBoundaryError)\n      }\n\n      eventId = captureException(error, {\n        mechanism: {handled: false},\n        captureContext: {contexts, tags},\n      })\n    })\n\n    return eventId ? {eventId} : null\n  }\n\n  function isBufferedTransport(transport: Transport | undefined): transport is BufferedTransport {\n    return !!transport && 'setConsent' in transport && typeof transport.setConsent === 'function'\n  }\n\n  function enable() {\n    const transport = client?.getTransport()\n    if (isBufferedTransport(transport)) {\n      transport.setConsent(true)\n    }\n  }\n  function disable() {\n    const transport = client?.getTransport()\n    if (isBufferedTransport(transport)) {\n      transport.setConsent(false)\n    }\n  }\n\n  return {\n    initialize,\n    reportError,\n    enable,\n    disable,\n  }\n}\n\nconst objectToString = Object.prototype.toString\n\n/**\n * Checks whether given value's type is one of a few Error or Error-like\n *\n * @param thing - A value to be checked\n * @returns A boolean representing the result\n * @internal\n */\nfunction isError(thing: unknown): thing is Error & {cause?: Error} {\n  switch (objectToString.call(thing)) {\n    case '[object Error]':\n    case '[object Exception]':\n    case '[object DOMException]':\n      return true\n    default:\n      return isInstanceOf(thing, Error)\n  }\n}\n\n/**\n * Checks whether given value's type is an instance of provided constructor.\n *\n * @param thing - A value to be checked.\n * @param base - A constructor to be used in a check.\n * @returns A boolean representing the result.\n * @internal\n */\nfunction isInstanceOf(thing: unknown, base: any): boolean {\n  try {\n    return thing instanceof base\n  } catch (_e) {\n    return false\n  }\n}\n\n/**\n * Set the `cause` property on an error object\n *\n * @param error - The error to set the cause on\n * @param cause - The cause of the error\n * @internal\n */\nfunction setCause(error: Error & {cause?: Error}, cause: Error): void {\n  const seenErrors = new WeakMap<Error, boolean>()\n\n  function recurse(err: Error & {cause?: Error | unknown}, subCause: Error): void {\n    // If we've already seen the error, there is a recursive loop somewhere in the error's\n    // cause chain. Let's just bail out then to prevent a stack overflow.\n    if (seenErrors.has(err)) {\n      return\n    }\n\n    if (isError(err.cause)) {\n      seenErrors.set(err, true)\n      recurse(err.cause, subCause)\n      return\n    }\n    err.cause = subCause\n  }\n\n  recurse(error, cause)\n}\n\n/**\n * Sentry treats errors that are caught in an error boundary as \"handled\", which we don't want.\n * It gives a false sense of security, as the error is only caught to show a more helpful error\n * than a blank page. This function sets the `handled` prop on the error's mechanism to `false`.\n * Note: This _mutates_ the event, in order to avoid having to deep-clone.\n *\n * @param event - The event to mark as unhandled\n * @internal\n */\nfunction setAsUnhandled(event: ErrorEvent) {\n  for (const exception of event.exception?.values || []) {\n    if (exception.mechanism) {\n      exception.mechanism.handled = false\n    }\n  }\n}\n\n/**\n * \"Before send\" event handler, which sets the error as unhandled.\n * @see setAsUnhandled for a clearer rationale.\n *\n * @param event - The event to be sent\n * @returns The event to be sent\n * @internal\n */\nfunction beforeSend(event: ErrorEvent): ErrorEvent {\n  setAsUnhandled(event)\n  return event\n}\n\n/**\n * We'll want a more aggressive dedupe strategy than the default one, as the default is very\n * fine grained, needing the same exact stack and message to be considered a duplicate.\n * We want to be more conservative.\n *\n * @internal\n */\nfunction sanityDedupeIntegration() {\n  const previousEvents: Event[] = []\n\n  return {\n    name: 'SanityDedupe',\n    processEvent(currentEvent: Event): Event | null | PromiseLike<Event | null> {\n      // We want to ignore any non-error type events, e.g. transactions or replays\n      // These should never be deduped, and also not be compared against _previousEvent.\n      if (currentEvent.type) {\n        return currentEvent\n      }\n\n      // Juuust in case something goes wrong\n      try {\n        if (shouldDropEvent(currentEvent, previousEvents)) {\n          if (DEBUG_ERROR_REPORTING) {\n            console.warn(\n              '[sanity/sentry] Dropping error from being reported because it is a duplicate',\n            )\n          }\n          return null\n        }\n      } catch (_) {\n        /* empty */\n      }\n\n      // Keep the last 10 events around for comparison\n      if (previousEvents.length > 10) {\n        previousEvents.shift()\n      }\n\n      previousEvents.push(currentEvent)\n      return currentEvent\n    },\n  }\n}\n\n/**\n * Determines whether or not the given event should be dropped or not, based on a window of\n * previously reported events.\n *\n * @param currentEvent - The event to check\n * @param previousEvents - An array of previously reported events\n * @returns True if event should be dropped, false otherwise\n * @internal\n */\nfunction shouldDropEvent(currentEvent: Event, previousEvents: Event[]): boolean {\n  for (const previousEvent of previousEvents) {\n    const currentMessage = getMessageFromEvent(currentEvent)\n    const previousMessage = getMessageFromEvent(previousEvent)\n\n    if (currentMessage && previousMessage && currentMessage !== previousMessage) {\n      continue\n    }\n\n    // Sentry timestamps are in fractional seconds, not milliseconds\n    const currentTimestamp = Math.floor(currentEvent.timestamp || 0)\n    const previousTimestamp = Math.floor(previousEvent.timestamp || 0)\n\n    // If the events are within 5 minutes of each other, we consider them duplicates.\n    // 5 minutes is a bit much, but if an error occurs every 5 minutes, we better be\n    // investigating it - and reporting the same error from the same user every 5 minutes\n    // is not really helpful.\n    if (Math.abs(currentTimestamp - previousTimestamp) < 300) {\n      return true\n    }\n  }\n\n  return false\n}\n\n/**\n * Extract the `message` string from a Sentry event. Sometimes this is not available on the `event`\n * itself, but buried inside of the `event.exception` property.\n *\n * @param event - The Sentry event to extract the message from\n * @returns A string representing the message, or `undefined` if not found\n * @internal\n */\nfunction getMessageFromEvent(event: Event): string | undefined {\n  if (event.message) {\n    return event.message\n  }\n\n  if (event.exception) {\n    for (const exception of event.exception.values || []) {\n      if (exception.value) {\n        return exception.value\n      }\n    }\n  }\n\n  return undefined\n}\n","import {type ErrorInfo as ReactErrorInfo} from 'react'\n\nimport {getSentryErrorReporter} from './sentry/sentryErrorReporter'\n\n/**\n * @internal\n */\nexport interface ErrorInfo {\n  reactErrorInfo?: ReactErrorInfo\n  errorBoundary?: string\n}\n\n/**\n * @internal\n */\nexport interface ErrorReporter {\n  /** Call to prepare the error reporter for use */\n  initialize: () => void\n\n  /**\n   * Reports an error, as caught by an error handler or a React boundary.\n   *\n   * @param error - The error that is caught. Note that while typed as `Error` by Reacts `componentDidCatch`, it can also be invoked with non-error objects.\n   * @param options - Additional options for the error report\n   * @returns An object containing information on the reported error, or `null` if ignored\n   */\n  reportError: (error: Error, options?: ErrorInfo) => {eventId: string} | null\n  /**\n   * In some cases (for example, when we are respecting telemetry consent and not sending data to 3rd parties),\n   * we may start the error reporter in a pending state, where it will not report errors.\n   * This method can be used to activate the error reporter.\n   */\n  enable: () => void\n  disable: () => void\n}\n\n/**\n * Singleton instance of an error reporter, that will send errors encountered during execution or\n * rendering to Sanity (potentially to a third party error tracking service).\n *\n * @internal\n */\nexport const errorReporter = getSentryErrorReporter()\n","export const WORKSPACES_DOCS_URL = 'https://www.sanity.io/docs/workspaces'\n","import {combineLatest} from 'rxjs'\nimport {map} from 'rxjs/operators'\n\nimport {type WorkspaceSummary} from '../../../../../config'\nimport {createHookFromObservableFactory} from '../../../../../util'\n\nexport const useWorkspaceAuthStates = createHookFromObservableFactory(\n  (workspaces: WorkspaceSummary[]) =>\n    combineLatest(\n      workspaces.map((workspace) =>\n        // eslint-disable-next-line max-nested-callbacks\n        workspace.auth.state.pipe(map((state) => [workspace.name, state] as const)),\n      ),\n    ).pipe(map((entries) => Object.fromEntries(entries))),\n)\n","import {CheckmarkIcon} from '@sanity/icons'\nimport {Box, Flex, Stack, Text} from '@sanity/ui'\nimport {type ComponentType, isValidElement, type ReactNode, useMemo} from 'react'\nimport {isValidElementType} from 'react-is'\nimport {styled} from 'styled-components'\n\nexport const STATE_TITLES = {\n  'logged-in': '',\n  'logged-out': 'Signed out',\n  'no-access': '',\n}\n\ntype PreviewIconSize = 'small' | 'large'\ninterface MediaProps {\n  $size: PreviewIconSize\n}\n\nexport const Media = styled.div<MediaProps>`\n  width: ${(props) => (props.$size === 'small' ? '25px' : '41px')};\n  height: ${(props) => (props.$size === 'small' ? '25px' : '41px')};\n\n  svg {\n    width: 100%;\n    height: 100%;\n  }\n`\n\nexport const WorkspacePreviewIcon = ({\n  icon,\n  size = 'small',\n}: {\n  icon: ComponentType | ReactNode\n  size: PreviewIconSize\n}) => {\n  const iconComponent = useMemo(() => createIcon(icon), [icon])\n\n  return <Media $size={size}>{iconComponent}</Media>\n}\n\nconst createIcon = (Icon: ComponentType | ReactNode) => {\n  if (isValidElementType(Icon)) return <Icon />\n  if (isValidElement(Icon)) return Icon\n  return undefined\n}\n\nexport interface WorkspacePreviewProps {\n  icon?: ComponentType | ReactNode\n  iconRight?: ComponentType | ReactNode\n  selected?: boolean\n  state?: 'logged-in' | 'logged-out' | 'no-access'\n  subtitle?: string\n  title: string\n}\n\nexport function WorkspacePreview(props: WorkspacePreviewProps) {\n  const {state, subtitle, selected, title, icon, iconRight} = props\n\n  const iconRightComponent = useMemo(() => createIcon(iconRight), [iconRight])\n\n  return (\n    <Flex align=\"center\" flex=\"none\" gap={3}>\n      <WorkspacePreviewIcon icon={icon} size=\"small\" />\n\n      <Stack flex={1} space={2}>\n        <Text size={1} textOverflow=\"ellipsis\" weight=\"medium\">\n          {title}\n        </Text>\n\n        {subtitle && (\n          <Text muted size={1} textOverflow=\"ellipsis\">\n            {subtitle}\n          </Text>\n        )}\n      </Stack>\n\n      {state && STATE_TITLES[state] && (\n        <Box paddingLeft={1}>\n          <Text size={1} muted textOverflow=\"ellipsis\">\n            {STATE_TITLES[state]}\n          </Text>\n        </Box>\n      )}\n\n      {(selected || iconRightComponent) && (\n        <Flex align=\"center\" gap={4} paddingLeft={3} paddingRight={2}>\n          {selected && (\n            <Text>\n              <CheckmarkIcon />\n            </Text>\n          )}\n\n          {iconRightComponent && <Text muted>{iconRightComponent}</Text>}\n        </Flex>\n      )}\n    </Flex>\n  )\n}\n","import {SanityLogo} from '@sanity/logos'\nimport {Box, Card, Flex, Heading, Stack, Text, usePrefersDark} from '@sanity/ui'\nimport {Fragment, type ReactNode} from 'react'\nimport {styled} from 'styled-components'\n\nconst LINKS = [\n  {\n    url: 'https://slack.sanity.io/',\n    i18nKey: 'workspaces.community-title',\n    title: 'Community',\n  },\n  {\n    url: 'https://www.sanity.io/docs',\n    i18nKey: 'workspaces.docs-title',\n    title: 'Docs',\n  },\n  {\n    url: 'https://www.sanity.io/legal/privacy',\n    i18nKey: 'workspaces.privacy-title',\n    title: 'Privacy',\n  },\n  {\n    url: 'https://www.sanity.io',\n    i18nKey: 'workspaces.sanity-io-title',\n    title: 'sanity.io',\n  },\n]\n\nconst StyledText = styled(Text)`\n  a {\n    color: inherit;\n  }\n`\n\ninterface LayoutProps {\n  header?: ReactNode\n  children: ReactNode\n  footer?: ReactNode\n}\n\nexport function Layout(props: LayoutProps) {\n  const {children, footer, header} = props\n  const prefersDark = usePrefersDark()\n\n  return (\n    <Stack space={6}>\n      <Card border radius={3} overflow=\"auto\">\n        <Stack>\n          {typeof header === 'object' && <Box>{header}</Box>}\n          {typeof header === 'string' && (\n            <Box paddingY={4}>\n              <Heading align=\"center\" size={1}>\n                {header}\n              </Heading>\n            </Box>\n          )}\n\n          <Box paddingX={1}>\n            <Card borderTop={Boolean(header)} borderBottom={Boolean(footer)}>\n              {children}\n            </Card>\n          </Box>\n\n          {footer && <Box>{footer}</Box>}\n        </Stack>\n      </Card>\n\n      <Flex direction=\"column\" gap={4} justify=\"center\" align=\"center\" paddingBottom={4}>\n        <Text size={3}>\n          <SanityLogo dark={prefersDark} />\n        </Text>\n\n        <Flex align=\"center\" gap={2}>\n          {LINKS.map((link, index) => (\n            <Fragment key={link.title}>\n              <StyledText muted size={1}>\n                <a href={link.url} target=\"_blank\" rel=\"noopener noreferrer\">\n                  {link.title}\n                </a>\n              </StyledText>\n\n              {index < LINKS.length - 1 && (\n                <Text size={1} muted>\n                  •\n                </Text>\n              )}\n            </Fragment>\n          ))}\n        </Flex>\n      </Flex>\n    </Stack>\n  )\n}\n","import {AddIcon, ArrowLeftIcon, ChevronRightIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Stack} from '@sanity/ui'\nimport {useCallback, useState} from 'react'\n\nimport {Button} from '../../../../../../ui-components'\nimport {LoadingBlock} from '../../../../../components/loadingBlock'\nimport {useTranslation} from '../../../../../i18n'\nimport {useActiveWorkspace} from '../../../../activeWorkspaceMatcher'\nimport {useWorkspaces} from '../../../../workspaces'\nimport {WORKSPACES_DOCS_URL} from '../constants'\nimport {useWorkspaceAuthStates} from '../hooks'\nimport {WorkspacePreview} from '../WorkspacePreview'\nimport {Layout} from './Layout'\n\nexport function WorkspaceAuth() {\n  const workspaces = useWorkspaces()\n  const {activeWorkspace, setActiveWorkspace} = useActiveWorkspace()\n  const [authStates] = useWorkspaceAuthStates(workspaces)\n  const [selectedWorkspaceName, setSelectedWorkspaceName] = useState<string | null>(\n    activeWorkspace?.name || null,\n  )\n  const selectedWorkspace =\n    workspaces.length === 1\n      ? workspaces[0]\n      : workspaces.find((workspace) => workspace.name === selectedWorkspaceName)\n  const LoginComponent = selectedWorkspace?.auth?.LoginComponent\n\n  const handleBack = useCallback(() => setSelectedWorkspaceName(null), [])\n  const {t} = useTranslation()\n\n  if (!authStates) return <LoadingBlock showText />\n\n  if (LoginComponent && selectedWorkspace) {\n    return (\n      <Stack space={2}>\n        {workspaces.length > 1 && (\n          <Flex>\n            <Button\n              icon={ArrowLeftIcon}\n              mode=\"bleed\"\n              onClick={handleBack}\n              text={t('workspaces.action.choose-another-workspace')}\n            />\n          </Flex>\n        )}\n\n        <Layout\n          header={\n            <Box padding={3}>\n              <WorkspacePreview\n                icon={selectedWorkspace.icon}\n                title={selectedWorkspace.title}\n                subtitle={selectedWorkspace?.subtitle}\n              />\n            </Box>\n          }\n        >\n          <Stack padding={2} paddingBottom={3} paddingTop={4}>\n            <LoginComponent\n              projectId={selectedWorkspace.projectId}\n              redirectPath={\n                window.location.pathname.startsWith(selectedWorkspace.basePath)\n                  ? // NOTE: the fragment cannot be preserved because it's used\n                    // to transfer an sid to a token\n                    `${window.location.pathname}${window.location.search}`\n                  : selectedWorkspace.basePath\n              }\n              key={selectedWorkspaceName}\n            />\n          </Stack>\n        </Layout>\n      </Stack>\n    )\n  }\n\n  return (\n    <Layout\n      header={t('workspaces.choose-your-workspace-label')}\n      footer={\n        <Stack padding={1}>\n          <Button\n            as=\"a\"\n            href={WORKSPACES_DOCS_URL}\n            icon={AddIcon}\n            mode=\"bleed\"\n            rel=\"noopener noreferrer\"\n            size=\"large\"\n            target=\"__blank\"\n            text={t('workspaces.action.add-workspace')}\n          />\n        </Stack>\n      }\n    >\n      <Stack space={1} paddingX={1} paddingY={2}>\n        {workspaces.map((workspace) => {\n          const authState = authStates[workspace.name]\n          // eslint-disable-next-line no-nested-ternary\n          const state = authState.authenticated\n            ? 'logged-in'\n            : workspace.auth.LoginComponent\n              ? 'logged-out'\n              : 'no-access'\n\n          const handleSelectWorkspace = () => {\n            if (state === 'logged-in' && workspace.name !== activeWorkspace.name) {\n              setActiveWorkspace(workspace.name)\n            }\n\n            if (state === 'logged-out') {\n              setSelectedWorkspaceName(workspace.name)\n            }\n          }\n\n          return (\n            <Card\n              as=\"button\"\n              radius={2}\n              key={workspace.name}\n              padding={2}\n              // eslint-disable-next-line react/jsx-no-bind\n              onClick={handleSelectWorkspace}\n            >\n              <WorkspacePreview\n                icon={workspace?.icon}\n                iconRight={ChevronRightIcon}\n                state={state}\n                subtitle={workspace?.subtitle}\n                title={workspace?.title || workspace.name}\n              />\n            </Card>\n          )\n        })}\n      </Stack>\n    </Layout>\n  )\n}\n","import {CheckmarkIcon, ChevronDownIcon} from '@sanity/icons'\nimport {\n  Box,\n  // eslint-disable-next-line no-restricted-imports\n  Button as UIButton,\n  Flex,\n  Menu,\n  Text,\n} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {MenuButton, type MenuButtonProps, MenuItem, Tooltip} from '../../../../../ui-components'\nimport {CapabilityGate} from '../../../../components/CapabilityGate'\nimport {useTranslation} from '../../../../i18n'\nimport {useActiveWorkspace} from '../../../activeWorkspaceMatcher'\nimport {useWorkspaces} from '../../../workspaces'\nimport {useWorkspaceAuthStates} from './hooks'\nimport {STATE_TITLES, WorkspacePreviewIcon} from './WorkspacePreview'\n\nconst StyledMenu = styled(Menu)`\n  max-width: 350px;\n  min-width: 250px;\n`\nconst POPOVER_PROPS: MenuButtonProps['popover'] = {\n  constrainSize: true,\n  fallbackPlacements: ['bottom-end', 'bottom'],\n  placement: 'bottom-end',\n  tone: 'default',\n}\n\nexport function WorkspaceMenuButton() {\n  const workspaces = useWorkspaces()\n  const {activeWorkspace} = useActiveWorkspace()\n  const [authStates] = useWorkspaceAuthStates(workspaces)\n  const {t} = useTranslation()\n\n  const multipleWorkspaces = workspaces.length > 1\n\n  if (!multipleWorkspaces) {\n    return null\n  }\n\n  const disabled = !authStates\n\n  return (\n    <MenuButton\n      button={\n        <Flex>\n          <Tooltip content={t('workspaces.select-workspace-tooltip')} disabled={disabled} portal>\n            <UIButton disabled={disabled} mode=\"bleed\" padding={2} width=\"fill\">\n              <Flex align=\"center\" gap={2}>\n                <Box>\n                  <Text size={1} textOverflow=\"ellipsis\" weight=\"medium\">\n                    {activeWorkspace.title}\n                  </Text>\n                </Box>\n                <CapabilityGate capability=\"globalWorkspaceControl\">\n                  <Text size={1}>\n                    <ChevronDownIcon />\n                  </Text>\n                </CapabilityGate>\n              </Flex>\n            </UIButton>\n          </Tooltip>\n        </Flex>\n      }\n      id=\"workspace-menu\"\n      menu={\n        !disabled && authStates ? (\n          <CapabilityGate capability=\"globalWorkspaceControl\">\n            <StyledMenu>\n              {workspaces.map((workspace) => {\n                const authState = authStates[workspace.name]\n\n                // eslint-disable-next-line no-nested-ternary\n                const state = authState.authenticated\n                  ? 'logged-in'\n                  : workspace.auth.LoginComponent\n                    ? 'logged-out'\n                    : 'no-access'\n\n                const isSelected = workspace.name === activeWorkspace.name\n\n                // we have a temporary need to make a hard direct link to the workspace\n                // because of possibly shared context between workspaces. When this is resolved,\n                // we can remove this and use setActiveWorkspace instead\n                return (\n                  <MenuItem\n                    as=\"a\"\n                    href={workspace.basePath}\n                    badgeText={STATE_TITLES[state]}\n                    iconRight={isSelected ? CheckmarkIcon : undefined}\n                    key={workspace.name}\n                    pressed={isSelected}\n                    preview={<WorkspacePreviewIcon icon={workspace.icon} size=\"small\" />}\n                    selected={isSelected}\n                    __unstable_subtitle={workspace.subtitle}\n                    __unstable_space={1}\n                    text={workspace?.title || workspace.name}\n                  />\n                )\n              })}\n            </StyledMenu>\n          </CapabilityGate>\n        ) : undefined\n      }\n      popover={POPOVER_PROPS}\n    />\n  )\n}\n","import {Card, Container, Flex} from '@sanity/ui'\n\nimport {WorkspaceAuth} from '../components/navbar/workspace'\n\nexport function AuthenticateScreen() {\n  return (\n    <Card height=\"fill\" overflow=\"auto\" paddingX={4}>\n      <Flex height=\"fill\" direction=\"column\" align=\"center\" justify=\"center\" paddingTop={4}>\n        <Container width={0}>\n          <WorkspaceAuth />\n        </Container>\n      </Flex>\n    </Card>\n  )\n}\n","export function ConfigErrorsScreen() {\n  /* This screen is not currently being used anywhere. We're keeping it as a basis for future work */\n  /* eslint-disable-next-line i18next/no-literal-string */\n  return <>TODO: implement config errors screen</>\n  // return (\n  //   <Root forwardedAs={Flex}>\n  //     <Content forwardedAs={Flex} direction=\"column\" gap={4}>\n  //       <Flex direction=\"column\" gap={2}>\n  //         <Box>\n  //           <Heading as=\"h1\">Configuration Error</Heading>\n  //         </Box>\n  //         <Box muted>\n  //           <Text>An error occurred while trying to resolve your Studio's configuration.</Text>\n  //         </Box>\n  //         <Box>\n  //           <Text size={1} muted>\n  //             Note: the design of this page may change.\n  //           </Text>\n  //         </Box>\n  //       </Flex>\n  //       <Card shadow={1}>\n  //         {errors.map((errorInfo, index) => (\n  //           // eslint-disable-next-line react/no-array-index-key\n  //           <ErrorMessage key={index} {...errorInfo} />\n  //         ))}\n  //       </Card>\n  //       <Button\n  //         tone=\"primary\"\n  //         // eslint-disable-next-line react/jsx-no-bind\n  //         onClick={() => window.location.reload()}\n  //         type=\"button\"\n  //         text=\"Retry\"\n  //       />\n  //     </Content>\n  //   </Root>\n  // )\n}\n","/* eslint-disable i18next/no-literal-string,@sanity/i18n/no-attribute-string-literals */\nimport {LaunchIcon} from '@sanity/icons'\nimport {Card, Stack, Text, TextInput} from '@sanity/ui'\nimport {useEffect, useMemo} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Dialog} from '../../../ui-components'\n\ninterface CorsOriginErrorScreenProps {\n  projectId?: string\n}\n\nexport const ScreenReaderLabel = styled.label`\n  clip: rect(0 0 0 0);\n  clip-path: inset(50%);\n  height: 1px;\n  overflow: hidden;\n  overflow: clip;\n  position: absolute;\n  white-space: nowrap;\n  width: 1px;\n`\n\nexport function CorsOriginErrorScreen(props: CorsOriginErrorScreenProps) {\n  const {projectId} = props\n\n  const origin = window.location.origin\n  const corsUrl = useMemo(() => {\n    const url = new URL(`https://sanity.io/manage/project/${projectId}/api`)\n    url.searchParams.set('cors', 'add')\n    url.searchParams.set('origin', origin)\n    url.searchParams.set('credentials', '')\n\n    return url.toString()\n  }, [origin, projectId])\n\n  useEffect(() => {\n    const handleFocus = () => {\n      window.location.reload()\n    }\n    window.addEventListener('focus', handleFocus)\n    return () => {\n      window.removeEventListener('focus', handleFocus)\n    }\n  }, [])\n\n  return (\n    <Card height=\"fill\">\n      <Dialog\n        id=\"cors-error-dialog\"\n        header=\"Before you continue...\"\n        width={1}\n        footer={{\n          confirmButton: {\n            text: 'Continue',\n            iconRight: LaunchIcon,\n            as: 'a',\n            href: corsUrl,\n            target: '_blank',\n            rel: 'noopener noreferrer',\n            tone: 'primary',\n          },\n        }}\n      >\n        <Stack space={4}>\n          <Text>\n            To access your content, you need to <b>add the following URL as a CORS origin</b> to\n            your Sanity project.\n          </Text>\n\n          {/* added for accessibility */}\n          <ScreenReaderLabel aria-hidden=\"true\">CORS URL to be added</ScreenReaderLabel>\n          <TextInput value={origin} readOnly />\n        </Stack>\n      </Dialog>\n    </Card>\n  )\n}\n","/* eslint-disable i18next/no-literal-string,@sanity/i18n/no-attribute-string-literals */\nimport {type CurrentUser} from '@sanity/types'\nimport {Card, Stack, Text} from '@sanity/ui'\nimport {useCallback, useEffect, useState} from 'react'\n\nimport {Dialog} from '../../../ui-components'\nimport {getProviderTitle} from '../../store'\nimport {useActiveWorkspace} from '../activeWorkspaceMatcher'\n\nexport function NotAuthenticatedScreen() {\n  const [currentUser, setCurrentUser] = useState<CurrentUser | null>(null)\n  const [error, handleError] = useState<unknown>(null)\n\n  if (error) throw error\n\n  const {activeWorkspace} = useActiveWorkspace()\n\n  const handleLogout = useCallback(() => {\n    activeWorkspace.auth.logout?.()\n  }, [activeWorkspace])\n\n  useEffect(() => {\n    const subscription = activeWorkspace.auth.state.subscribe({\n      next: ({currentUser: user}) => {\n        setCurrentUser(user)\n      },\n      error: handleError,\n    })\n\n    return () => {\n      subscription.unsubscribe()\n    }\n  }, [activeWorkspace])\n\n  const providerTitle = getProviderTitle(currentUser?.provider)\n  const providerHelp = providerTitle ? ` through ${providerTitle}` : ''\n\n  return (\n    <Card height=\"fill\">\n      <Dialog\n        id=\"not-authorized-dialog\"\n        header=\"Not authorized\"\n        width={1}\n        footer={{\n          confirmButton: {\n            text: 'Sign out',\n            onClick: handleLogout,\n            tone: 'default',\n          },\n        }}\n      >\n        <Stack space={4}>\n          <Text>\n            You are not authorized to access this studio. Please contact someone with access to\n            invite you to this project.\n          </Text>\n\n          <Text>\n            If you think this is an error, verify that you are signed in with the correct account.\n            You are currently signed in as{' '}\n            <strong>\n              {currentUser?.name} ({currentUser?.email})\n            </strong>\n            {providerHelp}.\n          </Text>\n        </Stack>\n      </Dialog>\n    </Card>\n  )\n}\n","/* eslint-disable i18next/no-literal-string,@sanity/i18n/no-attribute-string-literals */\nimport {Card, Flex, Heading, Inline, Stack} from '@sanity/ui'\n\nimport {Button} from '../../../ui-components'\n\nexport function NotFoundScreen(props: {onNavigateToDefaultWorkspace: () => void}) {\n  return (\n    <Card height=\"fill\" sizing=\"border\" tone=\"caution\" display=\"flex\">\n      <Flex direction=\"row\" justify=\"center\" flex={1} align=\"center\">\n        <Stack space={4}>\n          <Heading as=\"h1\">Workspace not found</Heading>\n          <Inline>\n            <Button\n              text=\"Go to default workspace\"\n              onClick={props.onNavigateToDefaultWorkspace}\n              mode=\"ghost\"\n            />\n          </Inline>\n        </Stack>\n      </Flex>\n    </Card>\n  )\n}\n","/* eslint-disable i18next/no-literal-string,@sanity/i18n/no-attribute-string-literals */\nimport {type SanityClient} from '@sanity/client'\nimport {type CurrentUser} from '@sanity/types'\nimport {Box, Card, Flex, Stack, Text, TextInput, useToast} from '@sanity/ui'\nimport {addWeeks, isAfter, isBefore} from 'date-fns'\nimport {useCallback, useEffect, useState} from 'react'\nimport {finalize} from 'rxjs'\n\nimport {Button, Dialog} from '../../../ui-components'\nimport {LoadingBlock} from '../../components/loadingBlock/LoadingBlock'\nimport {getProviderTitle} from '../../store/_legacy/authStore/providerTitle'\nimport {useActiveWorkspace} from '../activeWorkspaceMatcher/useActiveWorkspace'\nimport {NotAuthenticatedScreen} from './NotAuthenticatedScreen'\n\n/** @internal */\nexport interface AccessRequest {\n  id: string\n  status: 'pending' | 'accepted' | 'declined'\n  resourceId: string\n  resourceType: 'project'\n  createdAt: string\n  updatedAt: string\n  updatedByUserId: string\n  requestedByUserId: string\n  requestedRole: string\n  type: 'access' | 'role'\n  note: string\n}\n\nconst MAX_NOTE_LENGTH = 150\n\nexport function RequestAccessScreen() {\n  const [currentUser, setCurrentUser] = useState<CurrentUser | null>(null)\n  const [client, setClient] = useState<SanityClient | undefined>()\n  const [projectId, setProjectId] = useState<string | undefined>()\n  const toast = useToast()\n\n  const [error, setError] = useState<unknown>(null)\n  const [msgError, setMsgError] = useState<string | undefined>()\n  const [loading, setLoading] = useState(true)\n  const [isSubmitting, setIsSubmitting] = useState(false)\n\n  const [hasPendingRequest, setHasPendingRequest] = useState<boolean>(false)\n  const [hasExpiredPendingRequest, setExpiredHasPendingRequest] = useState<boolean>(false)\n  const [hasTooManyRequests, setHasTooManyRequests] = useState<boolean>(false)\n  const [hasBeenDenied, setHasBeenDenied] = useState<boolean>(false)\n\n  const [note, setNote] = useState<string | undefined>()\n  const [noteLength, setNoteLength] = useState<number>(0)\n\n  const {activeWorkspace} = useActiveWorkspace()\n\n  const handleLogout = useCallback(() => {\n    activeWorkspace.auth.logout?.()\n  }, [activeWorkspace])\n\n  // Get config info from active workspace\n  useEffect(() => {\n    const subscription = activeWorkspace.auth.state.subscribe({\n      next: ({client: sanityClient, currentUser: user}) => {\n        // Need to get the client, projectId, and user from workspace\n        // because this screen is outside the SourceContext\n        setProjectId(sanityClient.config().projectId)\n        setClient(sanityClient.withConfig({apiVersion: '2024-07-01'}))\n        setCurrentUser(user)\n      },\n      error: setError,\n    })\n\n    return () => {\n      subscription.unsubscribe()\n    }\n  }, [activeWorkspace])\n\n  // Check if user has a pending access request for this project\n  useEffect(() => {\n    if (!client || !projectId) return () => {}\n    const request$ = client.observable\n      .request<AccessRequest[] | null>({\n        url: '/access/requests/me',\n        tag: 'request-access',\n      })\n      .pipe(finalize(() => setLoading(false)))\n      .subscribe({\n        next: (requests) => {\n          if (!requests || !requests.length) return\n\n          const projectRequests = requests.filter((request) => request.resourceId === projectId)\n          const declinedRequest = projectRequests.find((request) => request.status === 'declined')\n          if (\n            declinedRequest &&\n            isAfter(addWeeks(new Date(declinedRequest.createdAt), 2), new Date())\n          ) {\n            setHasBeenDenied(true)\n            return\n          }\n          const pendingRequest = projectRequests.find(\n            (request) =>\n              request.status === 'pending' &&\n              // Access request is less than 2 weeks old\n              isAfter(addWeeks(new Date(request.createdAt), 2), new Date()),\n          )\n          if (pendingRequest) {\n            setHasPendingRequest(true)\n            return\n          }\n          const oldPendingRequest = projectRequests.find(\n            (request) =>\n              request.status === 'pending' &&\n              // Access request is more than 2 weeks old\n              isBefore(addWeeks(new Date(request.createdAt), 2), new Date()),\n          )\n          if (oldPendingRequest) {\n            setExpiredHasPendingRequest(true)\n          }\n        },\n        error: (err) => {\n          console.error(err)\n          setError(true)\n        },\n      })\n\n    return () => {\n      request$.unsubscribe()\n    }\n  }, [client, projectId])\n\n  const handleSubmitRequest = useCallback(() => {\n    // If we haven't loaded the client or projectId from\n    // current worspace, return early\n    if (!client || !projectId) return\n\n    setIsSubmitting(true)\n\n    client\n      .request<AccessRequest | null>({\n        url: `/access/project/${projectId}/requests`,\n        method: 'post',\n        body: {note, requestUrl: window?.location.href, type: 'access'},\n      })\n      .then((request) => {\n        if (request) setHasPendingRequest(true)\n      })\n      .catch((err) => {\n        const statusCode = err?.response?.statusCode\n        const errMessage = err?.response?.body?.message\n        if (statusCode === 429) {\n          // User is over their cross-project request limit\n          setHasTooManyRequests(true)\n          setMsgError(errMessage)\n        }\n        if (statusCode === 409) {\n          // If we get a 409, user has been denied on this project or has a valid pending request\n          // valid pending request should be handled by GET request above\n          setHasBeenDenied(true)\n          setMsgError(errMessage)\n        } else {\n          toast.push({\n            title: 'There was a problem submitting your request.',\n            status: 'error',\n          })\n        }\n      })\n      .finally(() => {\n        setIsSubmitting(false)\n      })\n  }, [note, projectId, client, toast])\n\n  const providerTitle = getProviderTitle(currentUser?.provider)\n  const providerHelp = providerTitle ? ` through ${providerTitle}` : ''\n\n  if (loading) return <LoadingBlock />\n  // Fallback to the old not authorized screen\n  // if error communicating with Access API\n  if (error) return <NotAuthenticatedScreen />\n  return (\n    <Card height=\"fill\">\n      <Dialog id=\"not-authorized-dialog\" header=\"Not authorized\" width={1}>\n        <Box>\n          <Stack space={4}>\n            <Text>\n              You are not authorized to access this studio (currently signed in as{' '}\n              <strong>\n                {currentUser?.name} ({currentUser?.email})\n              </strong>\n              {providerHelp}\n              ).\n            </Text>\n            {hasTooManyRequests || hasPendingRequest || hasBeenDenied ? (\n              <Card\n                tone={hasPendingRequest ? 'transparent' : 'caution'}\n                padding={3}\n                radius={2}\n                shadow={1}\n              >\n                <Text size={1}>\n                  {hasTooManyRequests && !hasPendingRequest && (\n                    <>\n                      {msgError ??\n                        `You've reached the limit for access requests across all projects. Please wait\n                      before submitting more requests or contact an admin for assistance.`}\n                    </>\n                  )}\n                  {hasPendingRequest && (\n                    <>Your request to access this project is pending approval.</>\n                  )}\n                  {hasBeenDenied && (\n                    <>{msgError ?? `Your request to access this project has been declined.`}</>\n                  )}\n                </Text>\n              </Card>\n            ) : (\n              <>\n                <Text>\n                  {hasExpiredPendingRequest ? (\n                    <>\n                      Your previous request has expired. You may again request access below with an\n                      optional note. The administrator(s) will receive an email letting them know\n                      that you are requesting access.\n                    </>\n                  ) : (\n                    <>\n                      You can request access below with an optional note. The administrator(s) will\n                      receive an email letting them know that you are requesting access.\n                    </>\n                  )}\n                </Text>\n                <Stack space={3} paddingBottom={0}>\n                  <TextInput\n                    maxLength={MAX_NOTE_LENGTH}\n                    disabled={isSubmitting}\n                    onKeyDown={(e) => {\n                      if (e.key === 'Enter') handleSubmitRequest()\n                    }}\n                    onChange={(e) => {\n                      setNote(e.currentTarget.value)\n                      setNoteLength(e.currentTarget.value.length)\n                    }}\n                    value={note}\n                    placeholder=\"Add your note…\"\n                  />\n                  <Text align=\"right\" muted size={1}>{`${noteLength}/${MAX_NOTE_LENGTH}`}</Text>\n                </Stack>\n              </>\n            )}\n          </Stack>\n          <Flex align={'center'} justify={'space-between'} paddingTop={4}>\n            <Button\n              mode=\"bleed\"\n              text={'Sign out'}\n              tone=\"default\"\n              onClick={handleLogout}\n              size=\"large\"\n            />\n            {!hasTooManyRequests && !hasBeenDenied && (\n              <Button\n                mode=\"default\"\n                text={hasPendingRequest ? 'Request sent' : 'Request access'}\n                disabled={hasPendingRequest || isSubmitting}\n                loading={isSubmitting}\n                tone=\"default\"\n                onClick={handleSubmitRequest}\n                size=\"large\"\n              />\n            )}\n          </Flex>\n        </Box>\n      </Dialog>\n    </Card>\n  )\n}\n","import {type SchemaValidationProblemPath} from '@sanity/types'\n\nexport function renderPath(path: SchemaValidationProblemPath) {\n  return path\n    .map((segment) => {\n      if (segment.kind === 'type') {\n        return `${segment.name || '<unnamed>'}(${segment.type})`\n      }\n\n      if (segment.kind === 'property') {\n        return segment.name\n      }\n\n      return null\n    })\n    .filter(Boolean)\n    .join(' > ')\n}\n","import {type Schema} from '@sanity/types'\n\nimport {renderPath} from './utils'\n\nexport function reportWarnings(schema: Schema) {\n  /* eslint-disable no-console */\n  const problemGroups = schema._validation\n\n  const groupsWithWarnings = problemGroups?.filter((group) =>\n    group.problems.some((problem) => problem.severity === 'warning'),\n  )\n  if (groupsWithWarnings?.length === 0) {\n    return\n  }\n  console.groupCollapsed(`⚠️ Schema has ${groupsWithWarnings?.length} warnings`)\n  groupsWithWarnings?.forEach((group) => {\n    const path = renderPath(group.path)\n\n    console.group(`%cAt ${path}`, 'color: #FF7636')\n\n    group.problems.forEach((problem) => {\n      console.log(problem.message)\n    })\n\n    console.groupEnd()\n  })\n  console.groupEnd()\n  /* eslint-enable no-console */\n}\n","/* eslint-disable i18next/no-literal-string,@sanity/i18n/no-attribute-string-literals */\nimport {generateHelpUrl} from '@sanity/generate-help-url'\nimport {ErrorOutlineIcon, WarningOutlineIcon} from '@sanity/icons'\nimport {type SchemaValidationProblemGroup} from '@sanity/types'\nimport {Box, Breadcrumbs, Card, Flex, Stack, Text, type ThemeColorToneKey} from '@sanity/ui'\nimport {capitalize} from 'lodash'\nimport {useMemo} from 'react'\nimport {styled} from 'styled-components'\n\nimport {useTranslation} from '../../../i18n'\n\nconst TONES: Record<'error' | 'warning', ThemeColorToneKey> = {\n  error: 'critical',\n  warning: 'caution',\n}\n\nconst SegmentSpan = styled.code`\n  && {\n    background: none;\n    color: inherit;\n  }\n`\n\nconst ErrorMessageText = styled(Text)`\n  white-space: pre-line;\n`\n\nexport function SchemaProblemGroups(props: {problemGroups: SchemaValidationProblemGroup[]}) {\n  const {problemGroups} = props\n  const {t} = useTranslation()\n\n  const items = useMemo(() => {\n    const ret = []\n\n    for (const problemGroup of problemGroups) {\n      for (const problem of problemGroup.problems) {\n        ret.push({group: problemGroup, problem})\n      }\n    }\n\n    return ret\n  }, [problemGroups])\n\n  return (\n    <Stack as=\"ul\" space={4}>\n      {items.map(({group, problem}, i) => {\n        const isError = problem.severity === 'error'\n        const isWarning = problem.severity === 'warning'\n        const schemaType = getTypeInfo(group)\n        return (\n          <Card border key={i} padding={4} radius={2} tone={TONES[problem.severity]}>\n            <Flex>\n              <Box marginRight={3}>\n                <Text muted size={1}>\n                  {isError && <ErrorOutlineIcon />}\n                  {isWarning && <WarningOutlineIcon />}\n                </Text>\n              </Box>\n\n              <Box flex={1}>\n                <Text size={1} weight=\"medium\">\n                  {schemaType ? (\n                    <>\n                      {capitalize(schemaType.type)} type \"{schemaType.name}\"\n                    </>\n                  ) : null}\n                </Text>\n              </Box>\n            </Flex>\n            <Box marginTop={4}>\n              <Card border overflow=\"auto\" padding={2} tone=\"inherit\">\n                <Breadcrumbs\n                  separator={\n                    <Text muted size={1}>\n                      &rarr;\n                    </Text>\n                  }\n                >\n                  {group.path.map((segment, j) => {\n                    if (segment.kind === 'type') {\n                      const text = `${_renderSegmentName(\n                        segment.name || `<anonymous ${segment.type}>`,\n                      )}:${segment.type}`\n                      return (\n                        <Text title={text} key={j} size={1} textOverflow=\"ellipsis\">\n                          <SegmentSpan>{text}</SegmentSpan>\n                        </Text>\n                      )\n                    }\n\n                    if (segment.kind === 'property') {\n                      return (\n                        <Text title={segment.name} key={j} size={1} textOverflow=\"ellipsis\">\n                          <SegmentSpan>{segment.name}</SegmentSpan>\n                        </Text>\n                      )\n                    }\n\n                    return null\n                  })}\n                </Breadcrumbs>\n              </Card>\n            </Box>\n\n            <Box as=\"ul\" marginTop={4}>\n              <Box as=\"li\">\n                <Stack space={3}>\n                  <ErrorMessageText muted size={1}>\n                    {problem.message}\n                  </ErrorMessageText>\n\n                  {problem.helpId && (\n                    <Text muted size={1}>\n                      <a\n                        href={generateHelpUrl(problem.helpId)}\n                        target=\"_blank\"\n                        rel=\"noopener noreferrer\"\n                      >\n                        View documentation &rarr;\n                      </a>\n                    </Text>\n                  )}\n                </Stack>\n              </Box>\n            </Box>\n          </Card>\n        )\n      })}\n    </Stack>\n  )\n}\n\nfunction getTypeInfo(problem: SchemaValidationProblemGroup): {name: string; type: string} | null {\n  // note: unsure if the first segment here can ever be anything else than a type\n  // a possible API improvement is to add schemaType info to the problem group interface itself\n  const first = problem.path[0]\n  if (first.kind === 'type') {\n    return {name: first.name || `<anonymous ${first.type}>`, type: first.type}\n  }\n  return null\n}\n\nfunction _renderSegmentName(str: string) {\n  if (str?.startsWith('<unnamed_type_@_index')) {\n    const parts = str.slice(1, -1).split('_')\n\n    return `[${parts[4]}]`\n  }\n\n  return str\n}\n","/* eslint-disable i18next/no-literal-string,@sanity/i18n/no-attribute-string-literals */\nimport {type Schema} from '@sanity/types'\nimport {Card, Container, Heading, Stack} from '@sanity/ui'\nimport {useEffect} from 'react'\n\nimport {reportWarnings} from './reportWarnings'\nimport {SchemaProblemGroups} from './SchemaProblemGroups'\n\ninterface SchemaErrorsScreenProps {\n  schema: Schema\n}\n\nexport function SchemaErrorsScreen({schema}: SchemaErrorsScreenProps) {\n  const groupsWithErrors =\n    schema._validation?.filter((group) =>\n      group.problems.some((problem) => problem.severity === 'error'),\n    ) || []\n\n  useEffect(() => reportWarnings(schema), [schema])\n\n  return (\n    <Card height=\"fill\" overflow=\"auto\" paddingY={[4, 5, 6, 7]} paddingX={4} sizing=\"border\">\n      <Container width={1}>\n        <Stack space={5}>\n          <Heading as=\"h1\">Schema errors</Heading>\n          <SchemaProblemGroups problemGroups={groupsWithErrors} />\n        </Stack>\n      </Container>\n    </Card>\n  )\n}\n","/* eslint-disable i18next/no-literal-string */\n/* eslint-disable @sanity/i18n/no-attribute-string-literals */\nimport {Box, Card, Code, Container, type ErrorBoundaryProps, Heading, Stack, Text} from '@sanity/ui'\nimport {isObject} from 'lodash'\nimport {\n  type ComponentType,\n  type ErrorInfo,\n  lazy,\n  type ReactNode,\n  useCallback,\n  useState,\n} from 'react'\nimport {styled} from 'styled-components'\nimport {useHotModuleReload} from 'use-hot-module-reload'\n\nimport {ErrorBoundary} from '../../ui-components'\nimport {ErrorActions} from '../components/errorActions/ErrorActions'\nimport {SchemaError} from '../config'\nimport {isDev, isProd} from '../environment'\nimport {errorReporter} from '../error/errorReporter'\nimport {CorsOriginError} from '../store'\nimport {isRecord} from '../util'\nimport {CorsOriginErrorScreen, SchemaErrorsScreen} from './screens'\n\n/**\n * The DevServerStoppedErrorScreen will always have been lazy loaded to client\n * in instances where it is used, since DevServerStoppedError is only thrown\n * when this module is loaded, and this screen is also conditional on this error type\n */\nconst DevServerStoppedErrorScreen = lazy(() =>\n  import('./ViteDevServerStopped').then((DevServerStopped) => ({\n    default: DevServerStopped.DevServerStoppedErrorScreen,\n  })),\n)\n\ninterface StudioErrorBoundaryProps {\n  children: ReactNode\n  heading?: string\n}\n\ntype ErrorBoundaryState =\n  | {\n      componentStack: null\n      error: null\n      eventId: null\n    }\n  | {\n      componentStack: ErrorInfo['componentStack']\n      error: Error\n      eventId: string | null\n    }\n\nconst INITIAL_STATE = {\n  componentStack: null,\n  error: null,\n  eventId: null,\n} satisfies ErrorBoundaryState\n\nconst View = styled(Box)`\n  align-items: center;\n`\n\nexport const StudioErrorBoundary: ComponentType<StudioErrorBoundaryProps> = ({\n  children,\n  heading = 'An error occurred',\n}) => {\n  const [{error, eventId}, setError] = useState<ErrorBoundaryState>(INITIAL_STATE)\n  const message = isRecord(error) && typeof error.message === 'string' && error.message\n  const stack = isRecord(error) && typeof error.stack === 'string' && error.stack\n  const handleResetError = useCallback(() => setError(INITIAL_STATE), [])\n  const handleCatchError: ErrorBoundaryProps['onCatch'] = useCallback((params) => {\n    const report = errorReporter.reportError(params.error, {\n      reactErrorInfo: params.info,\n      errorBoundary: 'StudioErrorBoundary',\n    })\n\n    setError({\n      error: params.error,\n      componentStack: params.info.componentStack,\n      eventId: report?.eventId || null,\n    })\n  }, [])\n\n  useHotModuleReload(handleResetError)\n\n  if (error instanceof CorsOriginError) {\n    return <CorsOriginErrorScreen projectId={error?.projectId} />\n  }\n\n  if (error instanceof SchemaError) {\n    return <SchemaErrorsScreen schema={error.schema} />\n  }\n\n  if (\n    error &&\n    isObject(error) &&\n    'ViteDevServerStoppedError' in error &&\n    error.ViteDevServerStoppedError\n  ) {\n    return <DevServerStoppedErrorScreen />\n  }\n\n  if (!error) {\n    return <ErrorBoundary onCatch={handleCatchError}>{children}</ErrorBoundary>\n  }\n\n  return (\n    <Card height=\"fill\" overflow=\"auto\" paddingY={[4, 5, 6, 7]} paddingX={4} sizing=\"border\">\n      <View display=\"flex\" height=\"fill\">\n        <Container width={3}>\n          <Stack space={6}>\n            <Stack space={4}>\n              <Heading>{heading}</Heading>\n              <Text>An error occurred that Sanity Studio was unable to recover from.</Text>\n              {isProd && (\n                <Text>\n                  <strong>To report this error,</strong> copy the error details and share them with\n                  your development team or Sanity Support.\n                </Text>\n              )}\n              {isDev && (\n                <Card border radius={2} overflow=\"auto\" padding={4} tone=\"critical\">\n                  <Stack space={4}>\n                    {message && (\n                      <Code weight={'bold'} size={1}>\n                        {message}\n                      </Code>\n                    )}\n                    {stack && <Code size={1}>{stack}</Code>}\n                    {eventId && <Code size={1}>Event ID: {eventId}</Code>}\n                  </Stack>\n                </Card>\n              )}\n            </Stack>\n            <ErrorActions error={error} eventId={eventId} onRetry={handleResetError} size=\"large\" />\n          </Stack>\n        </Container>\n      </View>\n    </Card>\n  )\n}\n","/* eslint-disable i18next/no-literal-string, @sanity/i18n/no-attribute-template-literals */\nimport {Card, Flex} from '@sanity/ui'\nimport {startCase} from 'lodash'\nimport {lazy, Suspense, useCallback, useEffect, useMemo, useState} from 'react'\nimport {NavbarContext} from 'sanity/_singletons'\nimport {RouteScope, useRouter, useRouterState} from 'sanity/router'\nimport {styled} from 'styled-components'\n\nimport {LoadingBlock} from '../components/loadingBlock'\nimport {NoToolsScreen} from './screens/NoToolsScreen'\nimport {RedirectingScreen} from './screens/RedirectingScreen'\nimport {ToolNotFoundScreen} from './screens/ToolNotFoundScreen'\nimport {\n  useActiveToolLayoutComponent,\n  useLayoutComponent,\n  useNavbarComponent,\n} from './studio-components-hooks'\nimport {StudioErrorBoundary} from './StudioErrorBoundary'\nimport {useWorkspace} from './workspace'\n\nconst DetectViteDevServerStopped = lazy(() =>\n  import('./ViteDevServerStopped').then((DevServerStopped) => ({\n    default: DevServerStopped.DetectViteDevServerStopped,\n  })),\n)\n\nconst detectViteDevServerStopped = import.meta.hot && process.env.NODE_ENV === 'development'\n\nconst SearchFullscreenPortalCard = styled(Card)`\n  height: 100%;\n  left: 0;\n  overflow: hidden;\n  overflow: clip;\n  position: fixed;\n  top: 0;\n  width: 100%;\n  z-index: 200;\n`\n\n/** @internal */\nexport interface NavbarContextValue {\n  onSearchFullscreenOpenChange: (open: boolean) => void\n  onSearchOpenChange: (open: boolean) => void\n  searchFullscreenOpen: boolean\n  searchFullscreenPortalEl: HTMLElement | null\n  searchOpen: boolean\n}\n\n/**\n * The Studio Layout component is the root component of the Sanity Studio UI.\n * It renders the navbar, the active tool, and the search modal as well as the error boundary.\n *\n * @public\n * @returns A Studio Layout element that renders the navbar, the active tool, and the search modal as well as the error boundary\n * @remarks This component should be used as a child component to the StudioProvider\n * @example Rendering a Studio Layout\n * ```ts\n * <StudioProvider\n *  basePath={basePath}\n *  config={config}\n *  onSchemeChange={onSchemeChange}\n *  scheme={scheme}\n *  unstable_history={unstable_history}\n *  unstable_noAuthBoundary={unstable_noAuthBoundary}\n * >\n *   <StudioLayout />\n *</StudioProvider>\n * ```\n */\nexport function StudioLayout() {\n  // Use the layout component that is resolved by the Components API (`studio.components.layout`).\n  // The default component is the `StudioLayoutComponent` defined below.\n  const Layout = useLayoutComponent()\n\n  return <Layout />\n}\n\n/**\n * @internal\n * The default Studio Layout component\n * */\nexport function StudioLayoutComponent() {\n  const {name, title, tools} = useWorkspace()\n  const router = useRouter()\n  const activeToolName = useRouterState(\n    useCallback(\n      (routerState) => (typeof routerState.tool === 'string' ? routerState.tool : undefined),\n      [],\n    ),\n  )\n  const activeTool = useMemo(\n    () => tools.find((tool) => tool.name === activeToolName),\n    [activeToolName, tools],\n  )\n  const [searchFullscreenOpen, setSearchFullscreenOpen] = useState<boolean>(false)\n  const [searchFullscreenPortalEl, setSearchFullscreenPortalEl] = useState<HTMLDivElement | null>(\n    null,\n  )\n  const [searchOpen, setSearchOpen] = useState<boolean>(false)\n\n  const documentTitle = useMemo(() => {\n    const mainTitle = title || startCase(name)\n\n    if (activeToolName) {\n      return `${startCase(activeToolName)} | ${mainTitle}`\n    }\n\n    return mainTitle\n  }, [activeToolName, name, title])\n  const toolControlsDocumentTitle = !!activeTool?.controlsDocumentTitle\n\n  useEffect(() => {\n    if (toolControlsDocumentTitle) {\n      return\n    }\n    document.title = documentTitle\n  }, [documentTitle, toolControlsDocumentTitle])\n\n  const handleSearchFullscreenOpenChange = useCallback((open: boolean) => {\n    setSearchFullscreenOpen(open)\n  }, [])\n\n  const handleSearchOpenChange = useCallback((open: boolean) => {\n    setSearchOpen(open)\n  }, [])\n\n  const navbarContextValue = useMemo(\n    () => ({\n      searchFullscreenOpen,\n      searchFullscreenPortalEl,\n      searchOpen,\n      onSearchFullscreenOpenChange: handleSearchFullscreenOpenChange,\n      onSearchOpenChange: handleSearchOpenChange,\n    }),\n    [\n      searchFullscreenOpen,\n      searchFullscreenPortalEl,\n      searchOpen,\n      handleSearchFullscreenOpenChange,\n      handleSearchOpenChange,\n    ],\n  )\n\n  const Navbar = useNavbarComponent()\n  const ActiveToolLayout = useActiveToolLayoutComponent()\n\n  /**\n   * Handle legacy URL redirects from `/desk` to `/structure`\n   */\n  const isLegacyDeskRedirect =\n    !activeTool &&\n    (activeToolName === 'desk' || !activeToolName) &&\n    typeof window !== 'undefined' &&\n    /\\/desk(\\/|$)/.test(window.location.pathname) &&\n    tools.some((tool) => tool.name === 'structure')\n\n  useEffect(() => {\n    if (!isLegacyDeskRedirect) {\n      return\n    }\n\n    router.navigateUrl({\n      path: window.location.pathname.replace(/\\/desk/, '/structure'),\n      replace: true,\n    })\n  }, [isLegacyDeskRedirect, router])\n\n  return (\n    <Flex data-ui=\"ToolScreen\" direction=\"column\" height=\"fill\" data-testid=\"studio-layout\">\n      <NavbarContext.Provider value={navbarContextValue}>\n        <Navbar />\n      </NavbarContext.Provider>\n      {isLegacyDeskRedirect && <RedirectingScreen />}\n      {tools.length === 0 && <NoToolsScreen />}\n      {tools.length > 0 && !activeTool && activeToolName && !isLegacyDeskRedirect && (\n        <ToolNotFoundScreen toolName={activeToolName} />\n      )}\n      {searchFullscreenOpen && (\n        <SearchFullscreenPortalCard ref={setSearchFullscreenPortalEl} overflow=\"auto\" />\n      )}\n      {/* By using the tool name as the key on the error boundary, we force it to re-render\n          when switching tools, which ensures we don't show the wrong tool having crashed */}\n      <StudioErrorBoundary key={activeTool?.name} heading={`The ${activeTool?.name} tool crashed`}>\n        {detectViteDevServerStopped && <DetectViteDevServerStopped />}\n        <Card flex={1} hidden={searchFullscreenOpen}>\n          {activeTool && activeToolName && (\n            <RouteScope\n              scope={activeToolName}\n              __unsafe_disableScopedSearchParams={\n                activeTool.router?.__unsafe_disableScopedSearchParams\n              }\n            >\n              <Suspense fallback={<LoadingBlock showText />}>\n                <ActiveToolLayout activeTool={activeTool} />\n              </Suspense>\n            </RouteScope>\n          )}\n        </Card>\n      </StudioErrorBoundary>\n    </Flex>\n  )\n}\n","import {type ComponentType} from 'react'\n\nimport {\n  type ActiveToolLayoutProps,\n  type LayoutProps,\n  type LogoProps,\n  type NavbarProps,\n  type PluginOptions,\n  type ToolMenuProps,\n} from '../../config'\n\nexport function pickToolMenuComponent(\n  plugin: PluginOptions,\n): ComponentType<Omit<ToolMenuProps, 'renderDefault'>> {\n  return plugin.studio?.components?.toolMenu as ComponentType<Omit<ToolMenuProps, 'renderDefault'>>\n}\n\nexport function pickNavbarComponent(\n  plugin: PluginOptions,\n): ComponentType<Omit<NavbarProps, 'renderDefault'>> {\n  return plugin.studio?.components?.navbar as ComponentType<Omit<NavbarProps, 'renderDefault'>>\n}\n\nexport function pickLayoutComponent(\n  plugin: PluginOptions,\n): ComponentType<Omit<LayoutProps, 'renderDefault'>> {\n  return plugin.studio?.components?.layout as ComponentType<Omit<LayoutProps, 'renderDefault'>>\n}\n\nexport function pickLogoComponent(\n  plugin: PluginOptions,\n): ComponentType<Omit<LogoProps, 'renderDefault'>> {\n  return plugin.studio?.components?.logo as ComponentType<Omit<LogoProps, 'renderDefault'>>\n}\n\nexport function pickActiveToolLayoutComponent(\n  plugin: PluginOptions,\n): ComponentType<Omit<ActiveToolLayoutProps, 'renderDefault'>> {\n  return plugin.studio?.components?.activeToolLayout as ComponentType<\n    Omit<ActiveToolLayoutProps, 'renderDefault'>\n  >\n}\n","import {type ComponentType} from 'react'\n\nimport {useMiddlewareComponents} from '../../config'\nimport {\n  type ActiveToolLayoutProps,\n  type LayoutProps,\n  type LogoProps,\n  type NavbarProps,\n  type ToolMenuProps,\n} from '../../config/studio'\nimport {StudioLogo, StudioNavbar, StudioToolMenu} from '../components'\nimport {StudioActiveToolLayout} from '../components/navbar/StudioActiveToolLayout'\nimport {StudioLayoutComponent} from '../StudioLayout'\nimport {\n  pickActiveToolLayoutComponent,\n  pickLayoutComponent,\n  pickLogoComponent,\n  pickNavbarComponent,\n  pickToolMenuComponent,\n} from './picks'\n\n/**\n * @internal\n */\nexport function useToolMenuComponent(): ComponentType<Omit<ToolMenuProps, 'renderDefault'>> {\n  return useMiddlewareComponents({\n    defaultComponent: StudioToolMenu as ComponentType<Omit<ToolMenuProps, 'renderDefault'>>,\n    pick: pickToolMenuComponent,\n  })\n}\n\n/**\n * @internal\n */\nexport function useNavbarComponent(): ComponentType<Omit<NavbarProps, 'renderDefault'>> {\n  return useMiddlewareComponents({\n    defaultComponent: StudioNavbar as ComponentType<Omit<NavbarProps, 'renderDefault'>>,\n    pick: pickNavbarComponent,\n  })\n}\n\n/**\n * @internal\n * @deprecated Use `useLogoMarkComponent` instead.\n */\nexport function useLogoComponent(): ComponentType<Omit<LogoProps, 'renderDefault'>> {\n  return useMiddlewareComponents({\n    defaultComponent: StudioLogo as ComponentType<Omit<LogoProps, 'renderDefault'>>,\n    pick: pickLogoComponent,\n  })\n}\n\n/**\n * @internal\n */\nexport function useLayoutComponent(): ComponentType<Omit<LayoutProps, 'renderDefault'>> {\n  return useMiddlewareComponents({\n    defaultComponent: StudioLayoutComponent as ComponentType<Omit<LayoutProps, 'renderDefault'>>,\n    pick: pickLayoutComponent,\n  })\n}\n\n/**\n * @internal\n */\nexport function useActiveToolLayoutComponent(): ComponentType<\n  Omit<ActiveToolLayoutProps, 'renderDefault'>\n> {\n  return useMiddlewareComponents({\n    defaultComponent: StudioActiveToolLayout as ComponentType<\n      Omit<ActiveToolLayoutProps, 'renderDefault'>\n    >,\n    pick: pickActiveToolLayoutComponent,\n  })\n}\n","/* eslint-disable i18next/no-literal-string,@sanity/i18n/no-attribute-string-literals */\nimport {WarningOutlineIcon} from '@sanity/icons'\nimport {Stack, Text} from '@sanity/ui'\nimport {useCallback, useId, useState} from 'react'\n\nimport {Dialog} from '../../../../../ui-components'\nimport {StatusButton} from '../../../../components'\nimport {useSchema} from '../../../../hooks'\nimport {useTranslation} from '../../../../i18n'\nimport {useColorSchemeValue} from '../../../colorScheme'\nimport {SchemaProblemGroups} from '../../../screens/schemaErrors/SchemaProblemGroups'\n\nexport function ConfigIssuesButton() {\n  const schema = useSchema()\n  const groupsWithWarnings =\n    schema._validation?.filter((group) =>\n      group.problems.some((problem) => problem.severity === 'warning'),\n    ) || []\n\n  // get root scheme\n  const scheme = useColorSchemeValue()\n  const {t} = useTranslation()\n\n  const dialogId = useId()\n\n  const [isDialogOpen, setDialogOpen] = useState(false)\n  const [buttonElement, setButtonElement] = useState<HTMLButtonElement | null>(null)\n  const handleOpen = useCallback(() => setDialogOpen(true), [])\n\n  const handleClose = useCallback(() => {\n    setDialogOpen(false)\n\n    if (buttonElement) {\n      buttonElement.focus()\n    }\n  }, [buttonElement])\n\n  if (groupsWithWarnings.length === 0) {\n    return null\n  }\n\n  return (\n    <>\n      <StatusButton\n        icon={WarningOutlineIcon}\n        mode=\"bleed\"\n        onClick={handleOpen}\n        ref={setButtonElement}\n        selected={isDialogOpen}\n        tone=\"caution\"\n        aria-label={t('configuration-issues.button.label')}\n        tooltipProps={{scheme, content: t('configuration-issues.button.tooltip')}}\n      />\n\n      {isDialogOpen && (\n        <Dialog\n          header=\"Configuration issues\"\n          width={2}\n          onClickOutside={handleClose}\n          onClose={handleClose}\n          // force root scheme here to \"break out\" of the navbar's dark scheme\n          scheme={scheme}\n          id={dialogId}\n        >\n          <Stack space={4}>\n            <Stack space={3}>\n              <Text as=\"h2\" size={1} weight=\"medium\">\n                Found {groupsWithWarnings.length} schema warnings\n              </Text>{' '}\n              <Text muted size={1}>\n                Configuration checks are only performed during development and will not be visible\n                in production builds\n              </Text>\n            </Stack>\n            <SchemaProblemGroups problemGroups={groupsWithWarnings} />\n          </Stack>\n        </Dialog>\n      )}\n    </>\n  )\n}\n","import {defineEvent} from '@sanity/telemetry'\n\ntype TrialStage = 'trialStarted' | 'trialActive' | 'trialEndingSoon' | 'trialEnded' | 'postTrial'\n\ntype BaseDialogEventAttributes = {\n  source: 'studio'\n  trialDaysLeft: number\n  dialogType: 'modal' | 'popover'\n  dialogId: string\n  dialogRevision: string\n  dialogTrialStage: TrialStage\n}\n\nexport interface TrialDialogViewedInfo extends BaseDialogEventAttributes {\n  dialogTrigger: 'fromClick' | 'auto'\n}\n\nexport const TrialDialogViewed = defineEvent<TrialDialogViewedInfo>({\n  name: 'Trial Dialog Viewed',\n  version: 1,\n  description: 'User viewed a dialog or popover related to free trial',\n})\n\nexport interface TrialDialogDismissedInfo extends BaseDialogEventAttributes {\n  dialogDismissAction: 'ctaClicked' | 'xClick' | 'outsideClick'\n}\n\nexport const TrialDialogDismissed = defineEvent<TrialDialogDismissedInfo>({\n  name: 'Trial Dialog Dismissed',\n  version: 1,\n  description: 'User dismissed a dialog or popover related to free trial',\n})\n\nexport interface TrialDialogCTAClickedInfo extends BaseDialogEventAttributes {\n  dialogCtaType: 'upgrade' | 'learnMore'\n}\n\nexport const TrialDialogCTAClicked = defineEvent<TrialDialogCTAClickedInfo>({\n  name: 'Trial Dialog CTA Clicked',\n  version: 1,\n  description: 'User clicked a CTA in a dialog or popover related to free trial',\n})\n\nexport function getTrialStage({\n  showOnLoad,\n  dialogId,\n}: {\n  showOnLoad: boolean\n  dialogId: string\n}): TrialStage {\n  // Note: some of the ids in the trial experience studio have uppercase letters\n  // so the toLowerCase is important here\n  if (showOnLoad && dialogId.toLowerCase() === 'free-upgrade-popover') return 'trialStarted'\n  if (showOnLoad && dialogId.toLowerCase() === 'trial-ending-popover') return 'trialEndingSoon'\n  if (showOnLoad && dialogId.toLowerCase() === 'project-downgraded-to-free') return 'trialEnded'\n  if (!showOnLoad && dialogId.toLowerCase() === 'after-trial-upgrade') return 'postTrial'\n  return 'trialActive'\n}\n","import {CloseIcon} from '@sanity/icons'\nimport {Box, Flex, Heading} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {Button, Dialog} from '../../../../../ui-components'\nimport {useColorSchemeValue} from '../../../colorScheme'\nimport {UpsellDescriptionSerializer} from '../../../upsell'\nimport {type TrialDialogDismissedInfo} from './__telemetry__/trialDialogEvents.telemetry'\nimport {type FreeTrialDialog} from './types'\n\n/**\n * Absolute positioned button to close the dialog.\n */\nconst StyledButton = styled(Button)`\n  position: absolute;\n  top: 12px;\n  right: 12px;\n  z-index: 20;\n  background: transparent;\n  border-radius: 9999px;\n  box-shadow: none;\n  color: white;\n  --card-fg-color: white;\n  :hover {\n    --card-fg-color: white;\n  }\n`\n\nconst Image = styled.img`\n  object-fit: cover;\n  width: 100%;\n  height: 100%;\n  height: 196px;\n`\n\nconst StyledDialog = styled(Dialog)`\n  > [data-ui='DialogCard'] {\n    max-width: 22.5rem;\n  }\n`\ninterface ModalContentProps {\n  content: FreeTrialDialog\n  onClose: (action?: TrialDialogDismissedInfo['dialogDismissAction']) => void\n  onOpenNext: () => void\n  onOpenUrlCallback: () => void\n  open: boolean\n}\n\nexport function DialogContent({\n  onClose,\n  onOpenNext,\n  onOpenUrlCallback,\n  content,\n  open,\n}: ModalContentProps) {\n  function handleClose() {\n    onClose('xClick')\n  }\n  function handleClickOutside() {\n    onClose('outsideClick')\n  }\n  function handleCTAClose() {\n    onClose('ctaClicked')\n  }\n  const schemeValue = useColorSchemeValue()\n  if (!open) return null\n  return (\n    <StyledDialog\n      id=\"free-trial-modal\"\n      onClose={onClose}\n      onClickOutside={handleClickOutside}\n      padding={false}\n      __unstable_hideCloseButton\n      scheme={schemeValue}\n      footer={{\n        cancelButton: content.secondaryButton?.text\n          ? {\n              text: content.secondaryButton.text,\n              mode: 'bleed',\n              tone: 'default',\n              onClick: handleClose,\n            }\n          : undefined,\n        confirmButton: {\n          text: content.ctaButton?.text,\n          mode: 'default',\n          tone: 'primary',\n          ...(content.ctaButton?.action === 'openUrl'\n            ? {\n                href: content.ctaButton.url,\n                target: '_blank',\n                rel: 'noopener noreferrer',\n                as: 'a',\n                onClick: onOpenUrlCallback,\n              }\n            : {\n                onClick: content.ctaButton?.action === 'openNext' ? onOpenNext : handleCTAClose,\n              }),\n        },\n      }}\n    >\n      <StyledButton\n        icon={CloseIcon}\n        mode=\"bleed\"\n        tone=\"default\"\n        onClick={handleClose}\n        tabIndex={-1}\n        tooltipProps={null}\n      />\n      {content.image && (\n        <Image src={content.image.asset.url} alt={content.image.asset.altText ?? ''} />\n      )}\n      <Flex padding={3} direction={'column'}>\n        <Box paddingX={2} marginTop={3}>\n          <Heading size={2}>{content.headingText}</Heading>\n        </Box>\n        <Box marginTop={4} paddingBottom={3}>\n          <UpsellDescriptionSerializer blocks={content.descriptionText} />\n        </Box>\n      </Flex>\n    </StyledDialog>\n  )\n}\n","import {purple, yellow} from '@sanity/color'\nimport {BoltIcon} from '@sanity/icons'\nimport {Card, Text} from '@sanity/ui'\nimport {forwardRef, type Ref} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Button} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n'\n\nconst CenteredStroke = styled.div`\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n`\n\ninterface OutlineProps {\n  daysLeft: number\n  totalDays: number\n}\n\nconst SvgFilledOutline = ({daysLeft, totalDays}: OutlineProps) => {\n  const progress = totalDays - daysLeft\n\n  const percentage = Math.round((progress / totalDays) * 100)\n  const radius = 10\n  const strokeDasharray = 2 * Math.PI * radius\n  const strokeDashOffset = strokeDasharray * ((100 - percentage) / 100)\n  const strokeWidth = 1.2\n  const size = radius * 2 + strokeWidth\n\n  return (\n    <Card>\n      <CenteredStroke>\n        <svg\n          xmlns=\"http://www.w3.org/2000/svg\"\n          width={size}\n          height={size}\n          viewBox={`0 0 ${size} ${size}`}\n          style={{transform: 'rotate(-90deg)'}}\n        >\n          <circle\n            r={radius}\n            cx={size / 2}\n            cy={size / 2}\n            fill=\"transparent\"\n            strokeWidth={strokeWidth}\n            stroke={percentage > 75 ? yellow['600'].hex : purple['400'].hex}\n          />\n          <circle\n            r={radius}\n            cx={size / 2}\n            cy={size / 2}\n            fill=\"transparent\"\n            strokeWidth={strokeWidth}\n            stroke=\"var(--card-border-color)\"\n            strokeDasharray={strokeDasharray}\n            strokeDashoffset={strokeDashOffset}\n          />\n        </svg>\n      </CenteredStroke>\n    </Card>\n  )\n}\n\ninterface FreeTrialButtonProps extends OutlineProps {\n  toggleShowContent: () => void\n}\n\nexport const FreeTrialButtonTopbar = forwardRef(function FreeTrialButtonTopbar(\n  {toggleShowContent, daysLeft, totalDays}: FreeTrialButtonProps,\n  ref: Ref<HTMLButtonElement>,\n) {\n  const {t} = useTranslation()\n\n  return (\n    <Button\n      mode=\"bleed\"\n      onClick={toggleShowContent}\n      ref={ref}\n      tooltipProps={{\n        content: daysLeft\n          ? t('free-trial.tooltip.days-count', {count: daysLeft})\n          : t('free-trial.tooltip.trial-finished'),\n      }}\n    >\n      <Text size={0}>\n        <BoltIcon />\n      </Text>\n      {daysLeft > 0 && <SvgFilledOutline daysLeft={daysLeft} totalDays={totalDays} />}\n    </Button>\n  )\n})\n\nexport const FreeTrialButtonSidebar = forwardRef(function FreeTrialButtonSidebar(\n  {toggleShowContent, daysLeft}: Pick<FreeTrialButtonProps, 'toggleShowContent' | 'daysLeft'>,\n  ref: Ref<HTMLButtonElement>,\n) {\n  const {t} = useTranslation()\n\n  return (\n    <Button\n      ref={ref}\n      icon={BoltIcon}\n      justify=\"flex-start\"\n      mode=\"bleed\"\n      size=\"large\"\n      onClick={toggleShowContent}\n      text={\n        daysLeft\n          ? t('user-menu.action.free-trial', {count: daysLeft})\n          : t('user-menu.action.free-trial-finished')\n      }\n    />\n  )\n})\n","import {useContext} from 'react'\nimport {FreeTrialContext} from 'sanity/_singletons'\n\nimport {type FreeTrialResponse} from './types'\n\n/**\n * @internal\n */\nexport interface FreeTrialContextProps {\n  data: FreeTrialResponse | null\n  showDialog: boolean\n  showOnLoad: boolean\n  /**\n   * If the user is seeing the `showOnLoad` popover or modal, and clicks on the pricing button the `showOnClick` modal should be triggered.\n   */\n  toggleShowContent: (closeAndReOpen?: boolean) => void\n}\n\n/**\n * @internal\n */\nexport const useFreeTrialContext = (): FreeTrialContextProps => {\n  const context = useContext(FreeTrialContext)\n  if (!context) {\n    throw new Error('useFreeTrial must be used within a FreeTrialProvider')\n  }\n  return context\n}\n","import {Box, Card, Container, Flex, Heading} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {Button} from '../../../../../ui-components'\nimport {UpsellDescriptionSerializer} from '../../../upsell'\nimport {type TrialDialogDismissedInfo} from './__telemetry__/trialDialogEvents.telemetry'\nimport {type FreeTrialDialog} from './types'\n\nconst Image = styled.img`\n  object-fit: cover;\n  width: 100%;\n  height: 100%;\n  height: 180px;\n`\n\ninterface PopoverContentProps {\n  content: FreeTrialDialog\n  handleClose: (action?: TrialDialogDismissedInfo['dialogDismissAction']) => void\n  handleOpenNext: () => void\n}\n\nexport function PopoverContent({content, handleClose, handleOpenNext}: PopoverContentProps) {\n  return (\n    <Card radius={3} overflow={'hidden'} width={0}>\n      <Container width={0}>\n        {content.image && (\n          <Image src={content.image.asset.url} alt={content.image.asset.altText ?? ''} />\n        )}\n        <Flex padding={3} direction={'column'}>\n          <Box paddingX={2} marginTop={3}>\n            <Heading size={1}>{content.headingText}</Heading>\n          </Box>\n          <Box marginTop={4}>\n            <UpsellDescriptionSerializer blocks={content.descriptionText} />\n          </Box>\n        </Flex>\n        <Flex width=\"full\" gap={3} justify=\"flex-end\" padding={3}>\n          {content.secondaryButton?.text && (\n            <Button\n              mode=\"bleed\"\n              text={content.secondaryButton.text}\n              tone=\"default\"\n              onClick={() => handleClose('xClick')}\n            />\n          )}\n          <Button\n            mode=\"default\"\n            tooltipProps={null}\n            text={content.ctaButton?.text}\n            autoFocus\n            tone=\"primary\"\n            {...(content.ctaButton?.action === 'openUrl'\n              ? {\n                  href: content.ctaButton.url,\n                  target: '_blank',\n                  rel: 'noopener noreferrer',\n                  as: 'a',\n                }\n              : {\n                  onClick:\n                    content.ctaButton?.action === 'openNext'\n                      ? handleOpenNext\n                      : () => handleClose('ctaClicked'),\n                })}\n          />\n        </Flex>\n      </Container>\n    </Card>\n  )\n}\n","import {useTelemetry} from '@sanity/telemetry/react'\nimport {useCallback, useEffect, useState} from 'react'\n\nimport {Popover} from '../../../../../ui-components'\nimport {useColorSchemeValue} from '../../../colorScheme'\nimport {\n  getTrialStage,\n  TrialDialogCTAClicked,\n  TrialDialogDismissed,\n  type TrialDialogDismissedInfo,\n  TrialDialogViewed,\n} from './__telemetry__/trialDialogEvents.telemetry'\nimport {DialogContent} from './DialogContent'\nimport {FreeTrialButtonSidebar, FreeTrialButtonTopbar} from './FreeTrialButton'\nimport {useFreeTrialContext} from './FreeTrialContext'\nimport {PopoverContent} from './PopoverContent'\n\ninterface FreeTrialProps {\n  type: 'sidebar' | 'topbar'\n}\n\nexport function FreeTrial({type}: FreeTrialProps) {\n  const {data, showDialog, showOnLoad, toggleShowContent} = useFreeTrialContext()\n  const scheme = useColorSchemeValue()\n  const telemetry = useTelemetry()\n\n  // Use callback refs to get the element handle when it's ready/changed\n  const [ref, setRef] = useState<HTMLButtonElement | null>(null)\n\n  const [showPopover, setShowPopover] = useState(false)\n\n  useEffect(() => {\n    if (ref) {\n      // set popover visible when the ref has been set (i.e. the element is ready)\n      setShowPopover(true)\n    }\n  }, [ref])\n  const closeAndReOpen = useCallback(() => toggleShowContent(true), [toggleShowContent])\n  const toggleDialog = useCallback(() => {\n    ref?.focus()\n    toggleShowContent(false)\n  }, [toggleShowContent, ref])\n\n  const handleClose = useCallback(\n    (dialogType?: 'modal' | 'popover') => {\n      return (action?: TrialDialogDismissedInfo['dialogDismissAction']) => {\n        const dialog = data?.showOnLoad || data?.showOnClick\n\n        if (dialog)\n          telemetry.log(TrialDialogDismissed, {\n            dialogId: dialog.id,\n            dialogRevision: dialog._rev,\n            dialogType,\n            source: 'studio',\n            trialDaysLeft: data.daysLeft,\n            dialogTrialStage: getTrialStage({showOnLoad, dialogId: dialog.id}),\n            dialogDismissAction: action,\n          })\n\n        toggleDialog()\n      }\n    },\n    [data, toggleDialog, showOnLoad, telemetry],\n  )\n\n  const handleDialogCTAClick = useCallback(\n    (action?: 'openURL' | 'openNext') => {\n      return () => {\n        const dialog = data?.showOnLoad || data?.showOnClick\n        if (dialog)\n          telemetry.log(TrialDialogCTAClicked, {\n            dialogId: dialog.id,\n            dialogRevision: dialog._rev,\n            dialogType: 'modal',\n            source: 'studio',\n            trialDaysLeft: data.daysLeft,\n            dialogTrialStage: getTrialStage({showOnLoad, dialogId: dialog.id}),\n            dialogCtaType: action === 'openURL' ? 'upgrade' : 'learnMore',\n          })\n        closeAndReOpen()\n      }\n    },\n    [data, closeAndReOpen, telemetry, showOnLoad],\n  )\n\n  const handlePopoverCTAClick = useCallback(() => {\n    if (data?.showOnLoad)\n      telemetry.log(TrialDialogCTAClicked, {\n        dialogId: data.showOnLoad.id,\n        dialogRevision: data.showOnLoad._rev,\n        dialogType: 'popover',\n        source: 'studio',\n        trialDaysLeft: data.daysLeft,\n        dialogTrialStage: getTrialStage({showOnLoad: true, dialogId: data.showOnLoad.id}),\n        dialogCtaType: 'learnMore',\n      })\n    closeAndReOpen()\n  }, [data?.showOnLoad, data?.daysLeft, closeAndReOpen, telemetry])\n\n  const handleOnTrialButtonClick = useCallback(() => {\n    if (data?.showOnClick)\n      telemetry.log(TrialDialogViewed, {\n        dialogId: data.showOnClick.id,\n        dialogRevision: data.showOnClick._rev,\n        dialogTrigger: 'fromClick',\n        dialogType: 'modal',\n        source: 'studio',\n        trialDaysLeft: data.daysLeft,\n        dialogTrialStage: getTrialStage({showOnLoad: true, dialogId: data.showOnClick.id}),\n      })\n    closeAndReOpen()\n  }, [data?.showOnClick, data?.daysLeft, telemetry, closeAndReOpen])\n\n  if (!data?.id) return null\n  const dialogToRender = showOnLoad ? data.showOnLoad : data.showOnClick\n  if (!dialogToRender) return null\n\n  const button =\n    type === 'sidebar' ? (\n      <FreeTrialButtonSidebar\n        toggleShowContent={handleOnTrialButtonClick}\n        daysLeft={data.daysLeft}\n        ref={setRef}\n      />\n    ) : (\n      <FreeTrialButtonTopbar\n        toggleShowContent={handleOnTrialButtonClick}\n        daysLeft={data.daysLeft}\n        totalDays={data.totalDays}\n        ref={setRef}\n      />\n    )\n\n  if (dialogToRender?.dialogType === 'popover') {\n    return (\n      <Popover\n        open={showDialog && showPopover}\n        size={0}\n        scheme={scheme}\n        radius={3}\n        tone=\"default\"\n        portal\n        placement={type === 'sidebar' ? 'top' : 'bottom-end'}\n        content={\n          <PopoverContent\n            content={dialogToRender}\n            handleClose={handleClose('popover')}\n            handleOpenNext={handlePopoverCTAClick}\n          />\n        }\n      >\n        {button}\n      </Popover>\n    )\n  }\n\n  return (\n    <>\n      {button}\n      <DialogContent\n        content={dialogToRender}\n        onClose={handleClose('modal')}\n        onOpenNext={handleDialogCTAClick('openNext')}\n        onOpenUrlCallback={handleDialogCTAClick('openURL')}\n        open={showDialog}\n      />\n    </>\n  )\n}\n","import {useTelemetry} from '@sanity/telemetry/react'\nimport {type ReactNode, useCallback, useEffect, useMemo, useState} from 'react'\nimport {FreeTrialContext} from 'sanity/_singletons'\nimport {useRouter} from 'sanity/router'\n\nimport {useClient} from '../../../../hooks'\nimport {SANITY_VERSION} from '../../../../version'\nimport {getTrialStage, TrialDialogViewed} from './__telemetry__/trialDialogEvents.telemetry'\nimport {type FreeTrialResponse} from './types'\n/**\n * @internal\n */\nexport interface FreeTrialProviderProps {\n  children: ReactNode\n}\n\n/**\n * @internal\n */\nexport const FreeTrialProvider = ({children}: FreeTrialProviderProps) => {\n  const router = useRouter()\n  const [data, setData] = useState<FreeTrialResponse | null>(null)\n  const [showDialog, setShowDialog] = useState(false)\n  const [showOnLoad, setShowOnLoad] = useState(false)\n  const client = useClient({apiVersion: '2023-12-11'})\n  const telemetry = useTelemetry()\n\n  // Whenever showDialog changes, run effect to track\n  // the dialog view\n  useEffect(() => {\n    const dialog = data?.showOnLoad\n    if (showDialog && showOnLoad && dialog) {\n      telemetry.log(TrialDialogViewed, {\n        dialogId: dialog.id,\n        dialogRevision: dialog._rev,\n        dialogTrialStage: getTrialStage({showOnLoad, dialogId: dialog.id}),\n        dialogTrigger: showOnLoad ? 'auto' : 'fromClick',\n        dialogType: dialog.dialogType,\n        source: 'studio',\n        trialDaysLeft: data.daysLeft,\n      })\n    }\n  }, [showDialog, data, showOnLoad, telemetry])\n\n  // See if we have any parameters from the current route\n  // to pass onto our query\n  const searchParams = new URLSearchParams(router.state._searchParams)\n  // Allows us to override the current state of the trial to\n  // get back certain modals based on the current experience\n  // can be 'growth-trial', 'growth-trial-ending', or 'post-growth-trial'\n  const trialState = searchParams.get('trialState')\n  // Allows us to set whether we've seen the modals before\n  // or whether this is our first time seeing them (i.e. show a popup)\n  const seenBefore = searchParams.get('seenBefore')\n\n  useEffect(() => {\n    const queryParams = new URLSearchParams()\n    queryParams.append('studioVersion', SANITY_VERSION)\n    if (trialState) queryParams.append('trialState', trialState)\n    if (seenBefore) queryParams.append('seenBefore', seenBefore)\n    // If we have trialState, query the override endpoint so that we\n    // get back trial modals for that state\n    const queryURL = queryParams.get('trialState') ? `/journey/trial/override` : `/journey/trial`\n    const request = client.observable\n      .request<FreeTrialResponse | null>({\n        url: `${queryURL}?${queryParams.toString()}`,\n      })\n      .subscribe(\n        (response) => {\n          setData(response)\n          if (response?.showOnLoad) {\n            setShowOnLoad(true)\n            setShowDialog(true)\n          }\n        },\n        () => {\n          /* silently ignore any error */\n        },\n      )\n\n    return () => {\n      request.unsubscribe()\n    }\n  }, [client, seenBefore, trialState])\n\n  const toggleShowContent = useCallback(\n    (closeAndReOpen = false) => {\n      if (showOnLoad) {\n        setShowOnLoad(false)\n        // If the user clicks on the button, while the show on load is open, we want to trigger the modal.\n        setShowDialog(closeAndReOpen)\n        if (data?.showOnLoad?.id) {\n          client.request({url: `/journey/trial/${data?.showOnLoad.id}`, method: 'POST'})\n        }\n      } else {\n        setShowDialog((p) => !p)\n      }\n    },\n    [client, showOnLoad, data?.showOnLoad?.id],\n  )\n\n  const value = useMemo(\n    () => ({data, showDialog, toggleShowContent, showOnLoad}),\n    [data, showDialog, showOnLoad, toggleShowContent],\n  )\n\n  return <FreeTrialContext.Provider value={value}>{children}</FreeTrialContext.Provider>\n}\n","export function SanityLogo() {\n  return (\n    <svg\n      width=\"100%\"\n      height=\"100%\"\n      viewBox=\"0 0 33 33\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <rect width=\"100%\" height=\"100%\" fill=\"#EC5446\" />\n      <path\n        d=\"M10.1637 8.5498C10.1637 11.3854 11.9461 13.0725 15.5143 13.9622L19.2955 14.8235C22.6725 15.5855 24.729 17.4783 24.729 20.5619C24.7553 21.9053 24.3107 23.2168 23.4698 24.2765C23.4698 21.1999 21.8499 19.5376 17.9425 18.538L14.2299 17.7086C11.257 17.0423 8.9623 15.4863 8.9623 12.1368C8.94666 10.8433 9.36932 9.58143 10.1637 8.5498Z\"\n        fill=\"white\"\n      />\n      <path\n        d=\"M21.1463 19.8069C22.7591 20.8206 23.4662 22.2384 23.4662 24.2729C22.1313 25.953 19.7861 26.8958 17.0297 26.8958C12.3899 26.8958 9.1427 24.6521 8.42111 20.7533H12.8769C13.4506 22.5432 14.9695 23.3726 16.9972 23.3726C19.4722 23.3726 21.1175 22.0753 21.1499 19.7998\"\n        fill=\"#F8B1AA\"\n      />\n      <path\n        d=\"M12.4801 12.7536C11.7436 12.3236 11.1394 11.7057 10.7316 10.9656C10.3238 10.2255 10.1276 9.3907 10.1638 8.54984C11.4518 6.88396 13.6923 5.8667 16.4235 5.8667C21.1499 5.8667 23.8848 8.31945 24.5595 11.7717H20.2732C19.8006 10.4107 18.6172 9.35089 16.4596 9.35089C14.1541 9.35089 12.5811 10.6694 12.4909 12.7536\"\n        fill=\"#F8B1AA\"\n      />\n    </svg>\n  )\n}\n","import {Box, Card, Flex, rem, Text} from '@sanity/ui'\nimport {useStateLink} from 'sanity/router'\nimport {styled} from 'styled-components'\n\nimport {focusRingStyle} from '../../../../form/components/withFocusRing/helpers'\nimport {useActiveWorkspace} from '../../../activeWorkspaceMatcher'\nimport {useWorkspaces} from '../../../workspaces'\nimport {SanityLogo} from '../SanityLogo'\nimport {WorkspacePreviewIcon} from '../workspace'\n\nconst LOGO_MARK_SIZE = 25 // width and height, px\nconst RADIUS = 2\n\nconst LogoMarkContainer = styled(Card).attrs({\n  overflow: 'hidden',\n  radius: RADIUS,\n})`\n  height: ${LOGO_MARK_SIZE}px;\n  width: ${LOGO_MARK_SIZE}px;\n`\n\nconst StyledCard = styled(Card)`\n  border-radius: ${({theme}) => rem(theme.sanity.radius[RADIUS])};\n  display: flex;\n  outline: none;\n  text-decoration: none;\n  &:focus-visible {\n    box-shadow: ${({theme}) =>\n      focusRingStyle({\n        base: theme.sanity.color.base,\n        focusRing: {...theme.sanity.focusRing, offset: 1},\n      })};\n  }\n`\n\n/**\n * Home button in the main navbar.\n *\n * If only one workspace is available:\n * - Displays the workspace icon (if defined), otherwise falls back to the Sanity logo.\n * - Displays the active workspace title.\n *\n * If multiple workspaces are available:\n * - Displays the workspace icon only.\n */\nexport function HomeButton() {\n  const workspaces = useWorkspaces()\n  const {activeWorkspace} = useActiveWorkspace()\n  const {href: rootHref, onClick: handleRootClick} = useStateLink({state: {}})\n\n  const multipleWorkspaces = workspaces.length > 1\n\n  return (\n    <StyledCard as=\"a\" href={rootHref} onClick={handleRootClick}>\n      <Flex align=\"center\">\n        <LogoMarkContainer>\n          <Flex align=\"center\" height=\"fill\" justify=\"center\">\n            {multipleWorkspaces || activeWorkspace.customIcon ? (\n              <WorkspacePreviewIcon icon={activeWorkspace.icon} size=\"small\" />\n            ) : (\n              <SanityLogo />\n            )}\n          </Flex>\n        </LogoMarkContainer>\n        {!multipleWorkspaces && (\n          <Box paddingX={2}>\n            <Text size={1} weight=\"medium\">\n              {activeWorkspace.title}\n            </Text>\n          </Box>\n        )}\n      </Flex>\n    </StyledCard>\n  )\n}\n","import {CheckmarkIcon} from '@sanity/icons'\nimport {Card, Stack} from '@sanity/ui'\n\nimport {Button} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n'\nimport {type StudioThemeColorSchemeKey} from '../../../../theme'\nimport {useColorSchemeOptions} from '../../../colorScheme'\n\nexport function AppearanceMenu({\n  setScheme,\n}: {\n  setScheme: (nextScheme: StudioThemeColorSchemeKey) => void\n}) {\n  const {t} = useTranslation()\n  // Subscribe to just what we need, if the menu isn't shown then we're not subscribed to these contexts\n  const options = useColorSchemeOptions(setScheme, t)\n\n  return (\n    <Card borderTop flex=\"none\" padding={2} overflow=\"auto\">\n      <Stack as=\"ul\" space={1}>\n        {options.map(({icon, label, name, onSelect, selected, title}) => (\n          <Stack as=\"li\" key={name}>\n            <Button\n              aria-label={label}\n              icon={icon}\n              iconRight={selected && <CheckmarkIcon />}\n              justify=\"flex-start\"\n              mode=\"bleed\"\n              onClick={onSelect}\n              selected={selected}\n              size=\"large\"\n              text={title}\n            />\n          </Stack>\n        ))}\n      </Stack>\n    </Card>\n  )\n}\n","import {CheckmarkIcon} from '@sanity/icons'\nimport {Card, Stack} from '@sanity/ui'\nimport {useCallback} from 'react'\n\nimport {Button} from '../../../../../ui-components'\nimport {useLocale} from '../../../../i18n/hooks/useLocale'\n\n// TODO: re-enable locale selection once schema localization is available\nconst LOCALE_SELECTION_DISABLED = true\n\nexport function LocaleMenu() {\n  const {changeLocale, currentLocale, locales} = useLocale()\n\n  if (LOCALE_SELECTION_DISABLED) {\n    return null\n  }\n\n  if (!locales || locales.length < 2) {\n    return null\n  }\n\n  return (\n    <Card borderTop flex=\"none\" padding={2} overflow=\"auto\">\n      <Stack as=\"ul\" space={1}>\n        {locales.map((item) => (\n          <LocaleItem\n            key={item.id}\n            locale={item}\n            changeLocale={changeLocale}\n            selectedLocale={currentLocale.id}\n          />\n        ))}\n      </Stack>\n    </Card>\n  )\n}\n\nfunction LocaleItem(props: {\n  locale: {id: string; title: string}\n  changeLocale: (lang: string) => void\n  selectedLocale: string\n}) {\n  const {locale, changeLocale, selectedLocale: selectedLang} = props\n  const localeId = locale.id\n  const onClick = useCallback(() => changeLocale(localeId), [localeId, changeLocale])\n  const selected = selectedLang == localeId\n\n  return (\n    <Button\n      aria-label={locale.title}\n      iconRight={selected && <CheckmarkIcon />}\n      justify=\"flex-start\"\n      mode=\"bleed\"\n      onClick={onClick}\n      selected={selected}\n      size=\"large\"\n      text={locale.title}\n    />\n  )\n}\n","import {AddUserIcon, CogIcon} from '@sanity/icons'\nimport {Card, Stack} from '@sanity/ui'\n\nimport {Button} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n'\nimport {userHasRole} from '../../../../util'\nimport {useWorkspace} from '../../../workspace'\nimport {FreeTrial} from '../free-trial'\n\nexport function ManageMenu() {\n  const {currentUser, projectId} = useWorkspace()\n  const isAdmin = Boolean(currentUser && userHasRole(currentUser, 'administrator'))\n\n  const {t} = useTranslation()\n\n  return (\n    <Card borderTop flex=\"none\" padding={2}>\n      <Stack as=\"ul\" space={1}>\n        <Stack as=\"li\">\n          <FreeTrial type=\"sidebar\" />\n        </Stack>\n\n        <Stack as=\"li\">\n          <Button\n            aria-label={t('user-menu.action.manage-project-aria-label')}\n            as=\"a\"\n            href={`https://sanity.io/manage/project/${projectId}`}\n            icon={CogIcon}\n            justify=\"flex-start\"\n            mode=\"bleed\"\n            size=\"large\"\n            target=\"_blank\"\n            text={t('user-menu.action.manage-project')}\n          />\n        </Stack>\n\n        {isAdmin && (\n          <Stack as=\"li\">\n            <Button\n              aria-label={t('user-menu.action.invite-members-aria-label')}\n              as=\"a\"\n              href={`https://www.sanity.io/manage/project/${projectId}/members?invite=true`}\n              icon={AddUserIcon}\n              justify=\"flex-start\"\n              mode=\"bleed\"\n              size=\"large\"\n              target=\"_blank\"\n              text={t('user-menu.action.invite-members')}\n            />\n          </Stack>\n        )}\n      </Stack>\n    </Card>\n  )\n}\n","import {CloseIcon, LeaveIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Layer, Stack, Text} from '@sanity/ui'\nimport {AnimatePresence, motion, type Transition, type Variants} from 'framer-motion'\nimport {type KeyboardEvent, memo, useCallback, useMemo} from 'react'\nimport TrapFocus from 'react-focus-lock'\nimport {styled} from 'styled-components'\n\nimport {Button} from '../../../../../ui-components'\nimport {UserAvatar} from '../../../../components'\nimport {CapabilityGate} from '../../../../components/CapabilityGate'\nimport {type NavbarAction, type Tool} from '../../../../config'\nimport {useTranslation} from '../../../../i18n'\nimport {useColorSchemeSetValue} from '../../../colorScheme'\nimport {useToolMenuComponent} from '../../../studio-components-hooks'\nimport {useWorkspace} from '../../../workspace'\nimport {useWorkspaces} from '../../../workspaces'\nimport {HomeButton} from '../home/HomeButton'\nimport {WorkspaceMenuButton} from '../workspace'\nimport {AppearanceMenu} from './ApperanceMenu'\nimport {LocaleMenu} from './LocaleMenu'\nimport {ManageMenu} from './ManageMenu'\n\nconst ANIMATION_TRANSITION: Transition = {\n  bounce: 0,\n  damping: 20,\n  mass: 0.5,\n  stiffness: 200,\n  type: 'spring',\n}\n\nconst BACKDROP_VARIANTS: Variants = {\n  open: {\n    opacity: 1,\n  },\n  closed: {\n    opacity: 0,\n  },\n}\n\nconst INNER_CARD_VARIANTS: Variants = {\n  open: {\n    x: '0%',\n  },\n  closed: {\n    x: '-100%',\n  },\n}\n\nconst Root = styled(Layer)`\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n`\n\nconst BackdropMotion = styled(motion.create(Card))`\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  background: var(--card-shadow-penumbra-color);\n`\n\nconst InnerCardMotion = styled(motion.create(Card))`\n  position: relative;\n  pointer-events: all;\n  flex-direction: column;\n  height: 100%;\n  min-width: 200px;\n  max-width: 280px;\n  overflow: auto;\n`\n\ninterface NavDrawerProps {\n  __internal_actions?: NavbarAction[]\n  activeToolName?: string\n  isOpen: boolean\n  onClose: () => void\n  tools: Tool[]\n}\n\nexport const NavDrawer = memo(function NavDrawer(props: NavDrawerProps) {\n  const {__internal_actions: actions, activeToolName, isOpen, onClose, tools} = props\n\n  const setScheme = useColorSchemeSetValue()\n  const {auth, currentUser} = useWorkspace()\n  const workspaces = useWorkspaces()\n  const ToolMenu = useToolMenuComponent()\n\n  const {t} = useTranslation()\n\n  const handleKeyDown = useCallback(\n    (event: KeyboardEvent<HTMLDivElement>) => {\n      if (event.key === 'Escape') {\n        onClose()\n      }\n    },\n    [onClose],\n  )\n\n  const handleActionClick = useCallback(\n    (action: () => void) => {\n      action?.()\n      onClose()\n    },\n    [onClose],\n  )\n\n  const actionNodes = useMemo(() => {\n    return actions\n      ?.filter((v) => v.location === 'sidebar')\n      ?.map((action) => {\n        const {render: ActionComponent} = action\n\n        if (ActionComponent) return <ActionComponent key={action.name} />\n\n        return (\n          <Button\n            icon={action?.icon}\n            justify=\"flex-start\"\n            key={action.name}\n            mode=\"bleed\"\n            // eslint-disable-next-line react/jsx-no-bind\n            onClick={() => handleActionClick(action.onAction)}\n            selected={action.selected}\n            size=\"large\"\n            text={action.title}\n            width=\"fill\"\n          />\n        )\n      })\n  }, [actions, handleActionClick])\n\n  return (\n    <AnimatePresence>\n      {isOpen && (\n        <TrapFocus returnFocus>\n          <Root onKeyDown={handleKeyDown}>\n            <BackdropMotion\n              animate=\"open\"\n              data-open={isOpen}\n              exit=\"closed\"\n              initial=\"closed\"\n              onClick={onClose}\n              transition={ANIMATION_TRANSITION}\n              variants={BACKDROP_VARIANTS}\n            />\n            <InnerCardMotion\n              animate=\"open\"\n              data-open={isOpen}\n              display=\"flex\"\n              exit=\"closed\"\n              height=\"fill\"\n              initial=\"closed\"\n              shadow={1}\n              transition={ANIMATION_TRANSITION}\n              variants={INNER_CARD_VARIANTS}\n            >\n              <Card borderBottom>\n                <Stack space={3} padding={3}>\n                  <Flex align=\"center\">\n                    {/* Current user */}\n                    <Flex flex={1} align=\"center\" paddingRight={2}>\n                      <CapabilityGate capability=\"globalUserMenu\">\n                        <Flex flex={1} align=\"center\">\n                          <UserAvatar size={1} user=\"me\" />\n                          <Box\n                            flex={1}\n                            marginLeft={3}\n                            title={currentUser?.name || currentUser?.email}\n                          >\n                            <Text size={1} textOverflow=\"ellipsis\" weight=\"medium\">\n                              {currentUser?.name || currentUser?.email}\n                            </Text>\n                          </Box>\n                        </Flex>\n                      </CapabilityGate>\n                    </Flex>\n\n                    <Button\n                      icon={CloseIcon}\n                      mode=\"bleed\"\n                      onClick={onClose}\n                      tooltipProps={{content: t('user-menu.close-menu')}}\n                    />\n                  </Flex>\n\n                  {workspaces.length > 1 && (\n                    <Flex flex={1} gap={1}>\n                      <HomeButton />\n                      <WorkspaceMenuButton />\n                    </Flex>\n                  )}\n                </Stack>\n              </Card>\n\n              <Flex direction=\"column\" flex={1} justify=\"space-between\" overflow=\"auto\">\n                {/* Tools */}\n                <Card flex=\"none\" padding={2}>\n                  <ToolMenu\n                    activeToolName={activeToolName}\n                    closeSidebar={onClose}\n                    context=\"sidebar\"\n                    isSidebarOpen={isOpen}\n                    tools={tools}\n                  />\n                </Card>\n\n                <Flex direction=\"column\">\n                  {actionNodes && (\n                    <Card flex=\"none\" padding={2}>\n                      <Stack space={1}>{actionNodes}</Stack>\n                    </Card>\n                  )}\n\n                  {setScheme && <AppearanceMenu setScheme={setScheme} />}\n                  <LocaleMenu />\n                  <ManageMenu />\n                </Flex>\n              </Flex>\n\n              {auth.logout && (\n                <Card flex=\"none\" padding={2} borderTop>\n                  <Stack>\n                    <Button\n                      iconRight={LeaveIcon}\n                      justify=\"flex-start\"\n                      mode=\"bleed\"\n                      // eslint-disable-next-line react/jsx-handler-names\n                      onClick={auth.logout}\n                      size=\"large\"\n                      text={t('user-menu.action.sign-out')}\n                    />\n                  </Stack>\n                </Card>\n              )}\n            </InnerCardMotion>\n          </Root>\n        </TrapFocus>\n      )}\n    </AnimatePresence>\n  )\n})\n","import {type NewDocumentOption} from './types'\n\nfunction isQueryMatch(query: string, option: NewDocumentOption): boolean {\n  const lowercaseTitle = option.title.toLowerCase()\n  const lowercaseQuery = query.trim().toLowerCase()\n\n  // Split the query into words (separated by spaces, dashes or underscores)\n  const words = lowercaseQuery.split(/[\\s\\-_]+/)\n\n  return words.every((word) => lowercaseTitle.includes(word))\n}\n\n// Sort the results based on relevance. The result should be sorted based on the following criteria:\n// 1. If the title starts with the query, it should be first\n// 2. If the title includes the query, it should be second\nfunction sortResultRelevance(query: string, a: NewDocumentOption, b: NewDocumentOption): number {\n  const titleA = a.title.toLowerCase()\n  const titleB = b.title.toLowerCase()\n  const lowercaseQuery = query.trim().toLowerCase()\n\n  if (titleA.startsWith(lowercaseQuery) && !titleB.startsWith(lowercaseQuery)) {\n    return -1\n  }\n\n  if (titleB.startsWith(lowercaseQuery) && !titleA.startsWith(lowercaseQuery)) {\n    return 1\n  }\n\n  if (titleA.includes(lowercaseQuery) && !titleB.includes(lowercaseQuery)) {\n    return -1\n  }\n\n  if (titleB.includes(lowercaseQuery) && !titleA.includes(lowercaseQuery)) {\n    return 1\n  }\n\n  return 0\n}\n\nexport function filterOptions(\n  options: NewDocumentOption[],\n  query: string,\n  getI18nText: (option: NewDocumentOption) => NewDocumentOption,\n): NewDocumentOption[] {\n  const optionsWithTitle = options.map((option) => ({\n    ...option,\n    title: getI18nText({...option, title: option?.title || option.id}).title,\n  }))\n\n  const alphabetized = optionsWithTitle.sort((a, b) => a.title.localeCompare(b.title))\n\n  return alphabetized\n    .filter((option) => isQueryMatch(query, option))\n    .sort((a, b) => sortResultRelevance(query, a, b))\n}\n","import {Card, Flex} from '@sanity/ui'\nimport {css, styled} from 'styled-components'\n\nimport {Dialog, Popover} from '../../../../../ui-components'\n\nexport const StyledPopover = styled(Popover)(() => {\n  return css`\n    [data-ui='Popover__wrapper'] {\n      width: 320px;\n      display: flex;\n      flex-direction: column;\n      border-radius: ${({theme}) => theme.sanity.radius[3]}px;\n      position: relative;\n      overflow: hidden;\n      overflow: clip;\n    }\n  `\n})\n\n// We are using `flex-start` to make sure that the dialogs doesn't jump around when\n// the content changes. This is because the dialog is centered by default, and\n// when the content changes, the dialog will jump to the center of the screen.\nexport const StyledDialog = styled(Dialog)(() => {\n  return css`\n    [data-ui='DialogCard'] {\n      justify-content: flex-start;\n    }\n  `\n})\n\nexport const RootFlex = styled(Flex)``\n\nexport const PopoverHeaderCard = styled(Card)`\n  min-height: max-content;\n`\n\nexport const DialogHeaderCard = styled(Card)`\n  min-height: max-content;\n`\n\nexport const PopoverListFlex = styled(Flex)<{\n  $maxDisplayedItems: number\n  $itemHeight: number\n}>((props) => {\n  const {$maxDisplayedItems, $itemHeight} = props\n\n  // Calculate the max height of the list.\n  // We want the max height to be the height of the list items multiplied by the max number of items.\n  return css`\n    --item-height: ${$itemHeight}px;\n    --max-items: ${$maxDisplayedItems};\n    --list-padding: 0.5rem;\n\n    position: relative;\n    max-height: calc(var(--item-height) * var(--max-items) + var(--list-padding));\n    min-height: calc((var(--item-height) * 1));\n  `\n})\n","import {type CurrentUser} from '@sanity/types'\nimport {Card, Text} from '@sanity/ui'\nimport {type MouseEvent, useCallback, useMemo} from 'react'\nimport {useIntentLink} from 'sanity/router'\n\nimport {Tooltip} from '../../../../../ui-components'\nimport {InsufficientPermissionsMessage} from '../../../../components'\nimport {useI18nText} from '../../../../i18n'\nimport {usePerspective} from '../../../../perspective/usePerspective'\nimport {type NewDocumentOption, type PreviewLayout} from './types'\n\n// This value is used to calculate the max-height of the popover and for the virtual list item size.\n// This value is not used anywhere in this file, but it is exported\n// from here to make it easier to maintain the value in the future\n// if the design changes.\nexport const INLINE_PREVIEW_HEIGHT = 33\n\ninterface NewDocumentListOptionProps {\n  currentUser: CurrentUser | null\n  onClick: (option: NewDocumentOption) => void\n  option: NewDocumentOption\n  preview: PreviewLayout\n}\n\nexport function NewDocumentListOption(props: NewDocumentListOptionProps) {\n  const {option, currentUser, onClick, preview} = props\n  const {selectedReleaseId} = usePerspective()\n  const params = useMemo(\n    () => ({template: option.templateId, type: option.schemaType, version: selectedReleaseId}),\n    [option.schemaType, option.templateId, selectedReleaseId],\n  )\n  const {onClick: onIntentClick, href} = useIntentLink({\n    intent: 'create',\n    params,\n  })\n\n  const handleDocumentClick = useCallback(\n    (event: MouseEvent<HTMLElement>) => {\n      onIntentClick(event)\n      onClick(option)\n    },\n    [onIntentClick, onClick, option],\n  )\n\n  const {title} = useI18nText(option)\n\n  return (\n    <Tooltip\n      disabled={option.hasPermission}\n      key={option.id}\n      portal\n      content={\n        <InsufficientPermissionsMessage currentUser={currentUser} context=\"create-document\" />\n      }\n    >\n      <div>\n        <Card\n          as={option.hasPermission ? 'a' : 'button'}\n          data-testid={`create-new-${option.templateId}`}\n          disabled={!option.hasPermission}\n          href={href}\n          marginBottom={1}\n          onClick={handleDocumentClick}\n          padding={preview === 'inline' ? 3 : 4}\n          radius={2}\n        >\n          <Text size={preview === 'inline' ? 1 : undefined}>{title}</Text>\n        </Card>\n      </div>\n    </Tooltip>\n  )\n}\n","import {type CurrentUser} from '@sanity/types'\nimport {Flex, Text} from '@sanity/ui'\nimport {useCallback} from 'react'\nimport {styled} from 'styled-components'\n\nimport {CommandList} from '../../../../components'\nimport {LoadingBlock} from '../../../../components/loadingBlock'\nimport {Translate, useTranslation} from '../../../../i18n'\nimport {supportsTouch} from '../../../../util'\nimport {INLINE_PREVIEW_HEIGHT, NewDocumentListOption} from './NewDocumentListOption'\nimport {type NewDocumentOption, type PreviewLayout} from './types'\n\nconst ContentFlex = styled(Flex)`\n  min-height: 100px;\n`\n\nexport interface NewDocumentListProps {\n  currentUser: CurrentUser | null\n  loading: boolean\n  onDocumentClick: () => void\n  options: NewDocumentOption[]\n  preview: PreviewLayout\n  searchQuery: string\n  textInputElement: HTMLInputElement | null\n}\n\nexport function NewDocumentList(props: NewDocumentListProps) {\n  const {currentUser, loading, onDocumentClick, options, preview, searchQuery, textInputElement} =\n    props\n  const {t} = useTranslation()\n  const hasOptions = options.length > 0 && !loading\n\n  const handleDocumentClick = useCallback(() => {\n    onDocumentClick()\n  }, [onDocumentClick])\n\n  const getItemDisabled = useCallback(\n    (index: number) => options[index]?.hasPermission === false,\n    [options],\n  )\n\n  const renderItem = useCallback(\n    (item: NewDocumentOption) => {\n      return (\n        <NewDocumentListOption\n          currentUser={currentUser}\n          key={item.id}\n          onClick={handleDocumentClick}\n          option={item}\n          preview={preview}\n        />\n      )\n    },\n    [currentUser, handleDocumentClick, preview],\n  )\n\n  // Render loading state\n  if (loading) {\n    return <LoadingBlock showText />\n  }\n\n  // Render no search results state\n  if (!hasOptions && searchQuery) {\n    return (\n      <ContentFlex\n        align=\"center\"\n        flex={1}\n        height=\"fill\"\n        justify=\"center\"\n        padding={4}\n        sizing=\"border\"\n      >\n        <Text align=\"center\" muted size={1}>\n          <Translate t={t} i18nKey=\"new-document.no-results\" values={{searchQuery}} />\n        </Text>\n      </ContentFlex>\n    )\n  }\n\n  // Render no options state\n  if (!hasOptions) {\n    return (\n      <ContentFlex\n        align=\"center\"\n        flex={1}\n        height=\"fill\"\n        justify=\"center\"\n        padding={4}\n        sizing=\"border\"\n      >\n        <Text align=\"center\" muted size={1}>\n          {t('new-document.no-document-types-found')}\n        </Text>\n      </ContentFlex>\n    )\n  }\n\n  return (\n    <CommandList\n      activeItemDataAttr=\"data-hovered\"\n      ariaLabel={t('new-document.new-document')}\n      autoFocus={supportsTouch ? undefined : 'input'}\n      getItemDisabled={getItemDisabled}\n      inputElement={textInputElement}\n      itemHeight={INLINE_PREVIEW_HEIGHT}\n      items={options}\n      overscan={5}\n      padding={preview === 'inline' ? 1 : 2}\n      paddingBottom={0}\n      renderItem={renderItem}\n    />\n  )\n}\n","import {AddIcon, SearchIcon} from '@sanity/icons'\nimport {isDeprecatedSchemaType} from '@sanity/types'\nimport {\n  Card,\n  Flex,\n  Stack,\n  Text,\n  TextInput,\n  type TextInputProps,\n  useClickOutsideEvent,\n} from '@sanity/ui'\nimport {type ChangeEvent, type KeyboardEvent, useCallback, useMemo, useRef, useState} from 'react'\nimport ReactFocusLock from 'react-focus-lock'\n\nimport {Button, type ButtonProps, Tooltip, type TooltipProps} from '../../../../../ui-components'\nimport {InsufficientPermissionsMessage} from '../../../../components'\nimport {useSchema} from '../../../../hooks'\nimport {useGetI18nText, useTranslation} from '../../../../i18n'\nimport {usePerspective} from '../../../../perspective/usePerspective'\nimport {useIsReleaseActive} from '../../../../releases/hooks/useIsReleaseActive'\nimport {isPublishedPerspective} from '../../../../releases/util/util'\nimport {useCurrentUser} from '../../../../store'\nimport {useColorSchemeValue} from '../../../colorScheme'\nimport {filterOptions} from './filter'\nimport {\n  DialogHeaderCard,\n  PopoverHeaderCard,\n  PopoverListFlex,\n  RootFlex,\n  StyledDialog,\n  StyledPopover,\n} from './NewDocumentButton.style'\nimport {NewDocumentList, type NewDocumentListProps} from './NewDocumentList'\nimport {INLINE_PREVIEW_HEIGHT} from './NewDocumentListOption'\nimport {type ModalType, type NewDocumentOption} from './types'\n\nconst MAX_DISPLAYED_ITEMS = 10\n\ninterface NewDocumentButtonProps {\n  canCreateDocument: boolean\n  loading: boolean\n  modal?: ModalType\n  options: NewDocumentOption[]\n}\n\n/**\n * @internal\n */\nexport function NewDocumentButton(props: NewDocumentButtonProps) {\n  const {canCreateDocument, modal = 'popover', loading, options} = props\n\n  const isReleaseActive = useIsReleaseActive()\n  const {selectedPerspective} = usePerspective()\n  const [open, setOpen] = useState<boolean>(false)\n  const [searchQuery, setSearchQuery] = useState<string>('')\n  const popoverRef = useRef<HTMLDivElement | null>(null)\n  const dialogRef = useRef<HTMLDivElement | null>(null)\n  const [buttonElement, setButtonElement] = useState<HTMLButtonElement | null>(null)\n  const [searchInputElement, setSearchInputElement] = useState<HTMLInputElement | null>(null)\n  const {t} = useTranslation()\n  const getI18nText = useGetI18nText(options)\n\n  const scheme = useColorSchemeValue()\n  const currentUser = useCurrentUser()\n  const schema = useSchema()\n\n  const hasNewDocumentOptions = options.length > 0\n  const disabled = !canCreateDocument || !hasNewDocumentOptions || !isReleaseActive\n  const placeholder = t('new-document.filter-placeholder')\n  const title = t('new-document.title')\n  const openDialogAriaLabel = t('new-document.open-dialog-aria-label')\n\n  const validOptions = useMemo(\n    () =>\n      options.filter((option) => {\n        const optionSchema = schema.get(option.schemaType)\n        return optionSchema && !isDeprecatedSchemaType(optionSchema)\n      }),\n    [options, schema],\n  )\n\n  // Filter options based on search query\n  const filteredOptions = useMemo(\n    () => filterOptions(validOptions, searchQuery, getI18nText),\n    [validOptions, searchQuery, getI18nText],\n  )\n\n  const handleSearchChange = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n    setSearchQuery(event.currentTarget.value)\n  }, [])\n\n  const handleToggleOpen = useCallback(() => setOpen((v) => !v), [])\n\n  const handleClose = useCallback(() => {\n    setOpen(false)\n    setSearchQuery('')\n    buttonElement?.focus()\n  }, [buttonElement])\n\n  // Open popover on arrow down\n  const handleOpenButtonKeyDown = useCallback(\n    (e: KeyboardEvent<HTMLButtonElement>) => {\n      if (e.key === 'ArrowDown' && !open) {\n        setOpen(true)\n      }\n    },\n    [open],\n  )\n\n  // Close popover on escape or tab\n  const handlePopoverKeyDown = useCallback(\n    (e: KeyboardEvent<HTMLDivElement>) => {\n      if ((e.key === 'Escape' || e.key === 'Tab') && open) {\n        handleClose()\n      }\n    },\n    [handleClose, open],\n  )\n\n  // Close popover on click outside\n  useClickOutsideEvent(open && handleClose, () => [\n    buttonElement,\n    dialogRef.current,\n    popoverRef.current,\n  ])\n\n  const sharedListProps: NewDocumentListProps = useMemo(\n    () => ({\n      currentUser,\n      loading: loading,\n      onDocumentClick: handleToggleOpen,\n      options: filteredOptions,\n      searchQuery: searchQuery,\n      preview: modal === 'popover' ? 'inline' : 'default',\n      textInputElement: searchInputElement,\n    }),\n    [\n      currentUser,\n      filteredOptions,\n      handleToggleOpen,\n      loading,\n      modal,\n      searchInputElement,\n      searchQuery,\n    ],\n  )\n\n  // Shared text input props for the popover and dialog\n  const sharedTextInputProps: TextInputProps = useMemo(\n    () => ({\n      '__unstable_disableFocusRing': true,\n      'border': false,\n      'data-testid': 'new-document-button-search-input',\n      'defaultValue': searchQuery,\n      'disabled': loading,\n      'icon': SearchIcon,\n      'onChange': handleSearchChange,\n      'placeholder': placeholder,\n      'ref': setSearchInputElement,\n    }),\n    [handleSearchChange, loading, placeholder, searchQuery],\n  )\n\n  // Shared open button props for the popover and dialog\n  const sharedOpenButtonProps: ButtonProps = useMemo(\n    () => ({\n      'aria-label': openDialogAriaLabel,\n      'data-testid': 'new-document-button',\n      'disabled': disabled || loading,\n      'icon': AddIcon,\n      'text': '',\n      'mode': 'bleed',\n      'onClick': handleToggleOpen,\n      'ref': setButtonElement,\n      'selected': open,\n    }),\n    [disabled, handleToggleOpen, loading, open, openDialogAriaLabel],\n  )\n\n  // Tooltip content for the open button\n  const tooltipContent: TooltipProps['content'] = useMemo(() => {\n    if (!isReleaseActive) {\n      const tooltipText = isPublishedPerspective(selectedPerspective)\n        ? t('new-document.disabled-published.tooltip')\n        : t('new-document.disabled-release.tooltip')\n\n      return <Text size={1}>{tooltipText}</Text>\n    }\n    if (!hasNewDocumentOptions) {\n      return <Text size={1}>{t('new-document.no-document-types-label')}</Text>\n    }\n\n    if (canCreateDocument) {\n      return <Text size={1}>{t('new-document.create-new-document-label')}</Text>\n    }\n\n    return (\n      <InsufficientPermissionsMessage currentUser={currentUser} context=\"create-any-document\" />\n    )\n  }, [\n    canCreateDocument,\n    currentUser,\n    hasNewDocumentOptions,\n    isReleaseActive,\n    selectedPerspective,\n    t,\n  ])\n\n  // Shared tooltip props for the popover and dialog\n  const sharedTooltipProps: TooltipProps = useMemo(\n    () => ({\n      content: tooltipContent,\n      disabled: loading || open,\n      scheme: scheme,\n    }),\n    [loading, open, scheme, tooltipContent],\n  )\n\n  // Dialog\n  if (modal === 'dialog') {\n    return (\n      <>\n        <Tooltip {...sharedTooltipProps}>\n          <div>\n            <Button {...sharedOpenButtonProps} />\n          </div>\n        </Tooltip>\n\n        {open && (\n          <StyledDialog\n            header={title}\n            id=\"create-new-document-dialog\"\n            onClickOutside={handleClose}\n            onClose={handleClose}\n            ref={dialogRef}\n            scheme={scheme}\n            width={1}\n          >\n            <RootFlex direction=\"column\" flex={1} height=\"fill\">\n              <DialogHeaderCard padding={2} borderBottom>\n                <TextInput\n                  data-testid=\"new-document-button-search-input\"\n                  {...sharedTextInputProps}\n                />\n              </DialogHeaderCard>\n\n              <Flex direction=\"column\" overflow=\"hidden\">\n                <NewDocumentList {...sharedListProps} />\n              </Flex>\n            </RootFlex>\n          </StyledDialog>\n        )}\n      </>\n    )\n  }\n\n  // Popover\n  return (\n    <StyledPopover\n      constrainSize\n      onKeyDown={handlePopoverKeyDown}\n      open={open}\n      tone=\"default\"\n      portal\n      radius={3}\n      ref={popoverRef}\n      scheme={scheme}\n      content={\n        <RootFlex\n          direction=\"column\"\n          flex={1}\n          forwardedAs={ReactFocusLock}\n          height=\"fill\"\n          returnFocus\n        >\n          <PopoverHeaderCard sizing=\"border\">\n            <Stack>\n              <Card borderBottom padding={1}>\n                <TextInput {...sharedTextInputProps} fontSize={1} radius={1} />\n              </Card>\n            </Stack>\n          </PopoverHeaderCard>\n\n          <PopoverListFlex\n            $itemHeight={INLINE_PREVIEW_HEIGHT}\n            $maxDisplayedItems={MAX_DISPLAYED_ITEMS}\n            direction=\"column\"\n            overflow=\"hidden\"\n          >\n            <NewDocumentList {...sharedListProps} />\n          </PopoverListFlex>\n        </RootFlex>\n      }\n    >\n      <div>\n        <Tooltip {...sharedTooltipProps}>\n          <div>\n            <Button\n              {...sharedOpenButtonProps}\n              aria-expanded={open}\n              aria-haspopup=\"true\"\n              onKeyDown={handleOpenButtonKeyDown}\n            />\n          </div>\n        </Tooltip>\n      </div>\n    </StyledPopover>\n  )\n}\n","import {useMemo} from 'react'\n\nimport {useTemplatePermissions} from '../../../../store'\nimport {useSource} from '../../../source'\nimport {type NewDocumentOption} from './types'\n\ninterface NewDocumentOptionsValue {\n  canCreateDocument: boolean\n  loading: boolean\n  options: NewDocumentOption[]\n}\n\n/**\n * @internal\n */\nexport function useNewDocumentOptions(): NewDocumentOptionsValue {\n  const {\n    __internal: {staticInitialValueTemplateItems},\n  } = useSource()\n\n  const [permissions, loading] = useTemplatePermissions({\n    templateItems: staticInitialValueTemplateItems,\n  })\n\n  const canCreateDocument =\n    permissions?.some((p) => staticInitialValueTemplateItems.some((t) => t.id === p.id)) || false\n\n  const optionsWithPermissions = useMemo(() => {\n    return staticInitialValueTemplateItems.map((item) => {\n      return {\n        ...item,\n        title: item?.title || item.id,\n        hasPermission: permissions?.find((p) => p.id === item.id)?.granted || false,\n      }\n    })\n  }, [permissions, staticInitialValueTemplateItems])\n\n  return {\n    canCreateDocument,\n    loading,\n    options: optionsWithPermissions,\n  }\n}\n","import * as PathUtils from '@sanity/util/paths'\nimport {orderBy} from 'lodash'\nimport {memo, useCallback, useEffect, useState} from 'react'\nimport {IntentLink} from 'sanity/router'\n\nimport {MenuItem} from '../../../../../ui-components'\nimport {UserAvatar} from '../../../../components'\nimport {useTranslation} from '../../../../i18n'\nimport {type GlobalPresence} from '../../../../store'\n\ninterface PresenceListRowProps {\n  focused: boolean\n  onFocus: (id: string) => void\n  locations: GlobalPresence['locations']\n  user: GlobalPresence['user']\n}\n\nexport const PresenceMenuItem = memo(function PresenceMenuItem(props: PresenceListRowProps) {\n  const {locations, user, focused, onFocus} = props\n  const [menuItemElement, setMenuItemElement] = useState<HTMLElement | null>(null)\n  const {t} = useTranslation()\n\n  /**\n   * This is a workaround to keep focus on the selected menu item\n   * when the list of users in the menu is updated\n   */\n  useEffect(() => {\n    if (focused && menuItemElement) {\n      menuItemElement.focus()\n      menuItemElement.setAttribute('data-selected', '')\n    }\n\n    if (!focused) {\n      menuItemElement?.removeAttribute('data-selected')\n    }\n  }, [menuItemElement, focused])\n\n  const handleFocus = useCallback(() => {\n    onFocus(user.id)\n  }, [onFocus, user.id])\n\n  const lastActiveLocation = orderBy(locations || [], ['lastActiveAt'], ['desc']).find(\n    (location) => location.documentId,\n  )\n  const hasLink = Boolean(lastActiveLocation?.documentId)\n\n  if (lastActiveLocation) {\n    return (\n      <MenuItem\n        as={IntentLink}\n        // @ts-expect-error - `intent` is valid when using `IntentLink`\n        intent=\"edit\"\n        params={{\n          id: lastActiveLocation.documentId,\n          path: PathUtils.toString(lastActiveLocation.path),\n        }}\n        // Shared props\n        data-as=\"a\"\n        onFocus={handleFocus}\n        preview={<UserAvatar size={1} user={user} />}\n        ref={setMenuItemElement}\n        text={user.displayName}\n      />\n    )\n  }\n\n  return (\n    <MenuItem\n      as=\"div\"\n      disabled={!hasLink}\n      tooltipProps={\n        hasLink ? undefined : {content: t('presence.not-in-a-document'), placement: 'left'}\n      }\n      // Shared props\n      data-as=\"a\"\n      onFocus={handleFocus}\n      preview={<UserAvatar size={1} user={user} />}\n      ref={setMenuItemElement}\n      text={user.displayName}\n    />\n  )\n})\n","import {AddUserIcon, UsersIcon} from '@sanity/icons'\nimport {Box, Menu, MenuDivider, Stack, Text} from '@sanity/ui'\nimport {useCallback, useMemo, useState} from 'react'\nimport {styled} from 'styled-components'\n\nimport {MenuButton, type MenuButtonProps, MenuItem} from '../../../../../ui-components'\nimport {StatusButton} from '../../../../components'\nimport {useTranslation} from '../../../../i18n'\nimport {useGlobalPresence} from '../../../../store'\nimport {useColorSchemeValue} from '../../../colorScheme'\nimport {useWorkspace} from '../../../workspace'\nimport {PresenceMenuItem} from './PresenceMenuItem'\n\nconst StyledMenu = styled(Menu)`\n  max-width: 260px;\n`\n\nconst FooterStack = styled(Stack)`\n  position: sticky;\n  bottom: 0;\n  background-color: var(--card-bg-color);\n`\n\nexport function PresenceMenu() {\n  const presence = useGlobalPresence()\n  const {projectId} = useWorkspace()\n  const scheme = useColorSchemeValue()\n  const {t} = useTranslation()\n  const hasPresence = presence.length > 0\n\n  /**\n   * This id is used as a workaround to keep focus on the selected menu item\n   * when the list of users in the menu is updated\n   */\n  const [focusedId, setFocusedId] = useState<string>()\n\n  const handleItemFocus = useCallback((id: string) => {\n    setFocusedId(id)\n  }, [])\n\n  const handleClearFocusedItem = useCallback(() => {\n    setFocusedId('')\n  }, [])\n\n  const handleClose = useCallback(() => {\n    setFocusedId('')\n  }, [])\n\n  const button = useMemo(() => {\n    return (\n      <StatusButton\n        icon={UsersIcon}\n        aria-label={t('presence.aria-label')}\n        mode=\"bleed\"\n        tone={hasPresence ? 'positive' : undefined}\n        tooltipProps={{\n          content: t('presence.tooltip-content'),\n        }}\n      />\n    )\n  }, [hasPresence, t])\n\n  const popoverProps = useMemo(\n    (): MenuButtonProps['popover'] => ({\n      constrainSize: true,\n      fallbackPlacements: ['bottom'],\n      placement: 'bottom',\n      portal: true,\n      scheme: scheme,\n      tone: 'default',\n    }),\n    [scheme],\n  )\n\n  return (\n    <MenuButton\n      button={button}\n      aria-label={t('presence.aria-label')}\n      id=\"global-presence-menu\"\n      menu={\n        <StyledMenu>\n          {hasPresence &&\n            presence.map((item) => (\n              <PresenceMenuItem\n                focused={focusedId === item.user.id}\n                key={item.user.id}\n                onFocus={handleItemFocus}\n                locations={item.locations}\n                user={item.user}\n              />\n            ))}\n\n          {!hasPresence && (\n            <Box padding={3}>\n              <Stack space={3}>\n                <Text weight=\"medium\" size={1}>\n                  {t('presence.no-one-else-title')}\n                </Text>\n\n                <Text size={1} muted>\n                  {t('presence.no-one-else-description')}\n                </Text>\n              </Stack>\n            </Box>\n          )}\n\n          <FooterStack space={1}>\n            <MenuDivider />\n\n            <MenuItem\n              as=\"a\"\n              href={`https://www.sanity.io/manage/project/${projectId}/members?invite=true`}\n              icon={AddUserIcon}\n              onFocus={handleClearFocusedItem}\n              rel=\"noopener noreferrer\"\n              target=\"_blank\"\n              text={t('presence.action.manage-members')}\n            />\n          </FooterStack>\n        </StyledMenu>\n      }\n      onClose={handleClose}\n      popover={popoverProps}\n    />\n  )\n}\n","import {type SanityClient} from '@sanity/client'\nimport {type Observable} from 'rxjs'\n\nimport {SANITY_VERSION} from '../../../../../version'\nimport {type ResourcesResponse} from './types'\n\n/**\n * @internal Not a stable API yet\n * @hidden\n */\nexport function getHelpResources(\n  client: SanityClient,\n  locale: string,\n): Observable<ResourcesResponse> {\n  return client.withConfig({apiVersion: '1'}).observable.request<ResourcesResponse>({\n    url: '/help',\n    /*\n      query and tag is used by analytics for tracking.\n      Builds to: `{m: ['sanity@3.0.2']}' and serializes to: `?m=sanity@3.0.2`.\n      Final format will be e.g. https://api.sanity.io/v1/help?tag=sanity.studio.module.version-check&m=sanity%403.0.2\n      */\n    query: {m: [`sanity@${SANITY_VERSION}`], locale},\n    tag: 'module.version-check',\n    json: true,\n  })\n}\n","import {useMemo} from 'react'\n\nimport {useClient} from '../../../../../hooks'\nimport {useCurrentLocale} from '../../../../../i18n/hooks/useLocale'\nimport {type LoadableState, useLoadable} from '../../../../../util'\nimport {getHelpResources} from './helpResources'\nimport {type ResourcesResponse} from './types'\n\n/**\n * Fetch help resources (content for the navbar help menu) from `/help`.\n *\n * @internal\n * @hidden\n */\nexport function useGetHelpResources(): LoadableState<ResourcesResponse | undefined> {\n  const client = useClient({apiVersion: '1'})\n  const locale = useCurrentLocale().id\n\n  const moduleStatus$ = useMemo(() => getHelpResources(client, locale), [client, locale])\n\n  return useLoadable(moduleStatus$)\n}\n","import {defineEvent} from '@sanity/telemetry'\n\ninterface ProductAnnouncementSharedProperties {\n  announcement_id: string\n  announcement_title: string\n  announcement_internal_name: string\n  source: 'studio'\n  studio_version?: string\n}\n\ntype origin = 'card' | 'help_menu'\n\nexport const ProductAnnouncementCardSeen = defineEvent<ProductAnnouncementSharedProperties>({\n  name: 'Product Announcement Card Seen',\n  version: 1,\n  description: 'User viewed the product announcement card',\n})\n\nexport const ProductAnnouncementCardClicked = defineEvent<ProductAnnouncementSharedProperties>({\n  name: 'Product Announcement Card Clicked',\n  version: 1,\n  description: 'User clicked the product announcement card',\n})\n\nexport const ProductAnnouncementCardDismissed = defineEvent<ProductAnnouncementSharedProperties>({\n  name: 'Product Announcement Card Dismissed',\n  version: 1,\n  description: 'User dismissed the product announcement card',\n})\n\nexport const ProductAnnouncementViewed = defineEvent<\n  ProductAnnouncementSharedProperties & {scrolled_into_view: boolean; origin: origin}\n>({\n  name: 'Product Announcement Viewed',\n  version: 1,\n  description: 'User viewed the product announcement',\n})\n\nexport const ProductAnnouncementLinkClicked = defineEvent<\n  ProductAnnouncementSharedProperties & {\n    link_url: string\n    link_title: string\n    origin: origin\n  }\n>({\n  name: 'Product Announcement Link Clicked',\n  version: 1,\n  description: 'User clicked the link in the product announcement ',\n})\n\nexport const ProductAnnouncementModalDismissed = defineEvent<\n  ProductAnnouncementSharedProperties & {\n    origin: origin\n  }\n>({\n  name: 'Product Announcement Dismissed',\n  version: 1,\n  description: 'User dismissed the product announcement modal ',\n})\n\nexport const WhatsNewHelpMenuItemClicked = defineEvent<ProductAnnouncementSharedProperties>({\n  name: 'Whats New Help Menu Item Clicked',\n  version: 1,\n  description: 'User clicked the \"Whats new\" help menu item',\n})\n","import {useContext} from 'react'\nimport {StudioAnnouncementContext} from 'sanity/_singletons'\n\nimport {type StudioAnnouncementsContextValue} from './types'\n\nexport function useStudioAnnouncements(): StudioAnnouncementsContextValue {\n  const context = useContext(StudioAnnouncementContext)\n\n  if (!context) {\n    return {\n      studioAnnouncements: [],\n      unseenAnnouncements: [],\n      onDialogOpen: () => {},\n    }\n  }\n\n  return context\n}\n","/* eslint-disable camelcase */\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {useCallback} from 'react'\n\nimport {MenuItem} from '../../../ui-components'\nimport {SANITY_VERSION} from '../../version'\nimport {WhatsNewHelpMenuItemClicked} from './__telemetry__/studioAnnouncements.telemetry'\nimport {useStudioAnnouncements} from './useStudioAnnouncements'\n\nexport function StudioAnnouncementsMenuItem({text}: {text: string}) {\n  const {onDialogOpen, studioAnnouncements} = useStudioAnnouncements()\n  const telemetry = useTelemetry()\n\n  const handleOpenDialog = useCallback(() => {\n    onDialogOpen('help_menu')\n    telemetry.log(WhatsNewHelpMenuItemClicked, {\n      source: 'studio',\n      announcement_id: studioAnnouncements[0]?._id,\n      announcement_title: studioAnnouncements[0]?.title,\n      announcement_internal_name: studioAnnouncements[0]?.name,\n      studio_version: SANITY_VERSION,\n    })\n  }, [onDialogOpen, studioAnnouncements, telemetry])\n\n  if (studioAnnouncements.length === 0) return null\n  return <MenuItem tone=\"default\" text={text} onClick={handleOpenDialog} />\n}\n","import {Box, MenuDivider, Text} from '@sanity/ui'\n\nimport {MenuItem} from '../../../../../ui-components'\nimport {LoadingBlock} from '../../../../components/loadingBlock'\nimport {hasSanityPackageInImportMap} from '../../../../environment/hasSanityPackageInImportMap'\nimport {useTranslation} from '../../../../i18n'\nimport {SANITY_VERSION} from '../../../../version'\nimport {StudioAnnouncementsMenuItem} from '../../../studioAnnouncements/StudioAnnouncementsMenuItem'\nimport {type ResourcesResponse, type Section} from './helper-functions/types'\n\ninterface ResourcesMenuItemProps {\n  error: Error | null\n  isLoading: boolean\n  value?: ResourcesResponse\n}\n\nexport function ResourcesMenuItems({error, isLoading, value}: ResourcesMenuItemProps) {\n  const sections = value?.resources?.sectionArray\n  const latestStudioVersion = value?.latestVersion\n  const isAutoUpdating = hasSanityPackageInImportMap()\n  const {t} = useTranslation()\n\n  if (isLoading) {\n    return <LoadingBlock showText />\n  }\n\n  const fallbackLinks = (\n    <>\n      <MenuItem\n        as=\"a\"\n        text={t('help-resources.action.join-our-community')}\n        href=\"https://www.sanity.io/exchange/community\"\n        target=\"_blank\"\n      />\n      <MenuItem\n        as=\"a\"\n        text={t('help-resources.action.help-and-support')}\n        href=\"https://www.sanity.io/contact/support\"\n        target=\"_blank\"\n      />\n      <MenuItem\n        as=\"a\"\n        text={t('help-resources.action.contact-sales')}\n        href=\"https://www.sanity.io/contact/sales?ref=studio\"\n        target=\"_blank\"\n      />\n      <MenuDivider />\n    </>\n  )\n\n  return (\n    <>\n      {/* Display fallback values on error / no response */}\n      {(value === undefined || error) && <div>{fallbackLinks}</div>}\n\n      {!error &&\n        sections?.map((subSection) => {\n          if (!subSection) return null\n          return <SubSection key={subSection._key} subSection={subSection} />\n        })}\n\n      {/* Studio version information */}\n      <Box padding={3}>\n        <Text size={1} muted weight=\"medium\" textOverflow=\"ellipsis\">\n          {t('help-resources.studio-version', {studioVersion: SANITY_VERSION})}\n        </Text>\n        {!error && latestStudioVersion && !isAutoUpdating && (\n          <Box paddingTop={2}>\n            <Text size={1} muted textOverflow=\"ellipsis\">\n              {t('help-resources.latest-sanity-version', {\n                latestVersion: latestStudioVersion,\n              })}\n            </Text>\n          </Box>\n        )}\n      </Box>\n    </>\n  )\n}\n\nfunction SubSection({subSection}: {subSection: Section}) {\n  return (\n    <>\n      {subSection?.items?.map((item) => {\n        if (!item || !item.title) return null\n        switch (item._type) {\n          case 'externalLink':\n            if (!item.url) return null\n            return (\n              <MenuItem\n                as=\"a\"\n                tone=\"default\"\n                key={item._key}\n                text={item.title}\n                href={item.url}\n                target=\"_blank\"\n              />\n            )\n          case 'internalAction': // TODO: Add support for internal actions (MVI-2)\n            if (!item.type) return null\n            if (item.type === 'studio-announcements-modal')\n              return <StudioAnnouncementsMenuItem key={item._key} text={item.title} />\n            return (\n              item.type === 'show-welcome-modal' && <MenuItem key={item._key} text={item.title} />\n            )\n\n          default:\n            return null\n        }\n      })}\n      <MenuDivider />\n    </>\n  )\n}\n","import {HelpCircleIcon} from '@sanity/icons'\nimport {Menu} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {Button, MenuButton} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n'\nimport {useGetHelpResources} from './helper-functions/hooks'\nimport {ResourcesMenuItems} from './ResourcesMenuItems'\n\nconst StyledMenu = styled(Menu)`\n  max-width: 300px;\n  min-width: 200px;\n`\n\nexport function ResourcesButton() {\n  const {t} = useTranslation()\n\n  const {value, error, isLoading} = useGetHelpResources()\n\n  return (\n    <MenuButton\n      button={\n        <Button\n          aria-label={t('help-resources.title')}\n          icon={HelpCircleIcon}\n          mode=\"bleed\"\n          tooltipProps={{content: t('help-resources.title')}}\n        />\n      }\n      id=\"menu-button-resources\"\n      menu={\n        <StyledMenu data-testid=\"menu-button-resources\">\n          <ResourcesMenuItems error={error} isLoading={isLoading} value={value} />\n        </StyledMenu>\n      }\n      popover={{constrainSize: true, tone: 'default'}}\n    />\n  )\n}\n","import {CheckmarkIcon} from '@sanity/icons'\nimport {MenuDivider} from '@sanity/ui'\nimport {useCallback} from 'react'\n\nimport {MenuItem} from '../../../../../ui-components'\nimport {useLocale} from '../../../../i18n/hooks/useLocale'\n\n// TODO: re-enable locale selection once schema localization is available\nconst LOCALE_SELECTION_DISABLED = true\n\nexport function LocaleMenu() {\n  const {changeLocale, currentLocale, locales} = useLocale()\n\n  if (LOCALE_SELECTION_DISABLED) {\n    return null\n  }\n\n  if (!locales || locales.length < 2) {\n    return null\n  }\n\n  return (\n    <>\n      <MenuDivider />\n\n      {locales.map((item) => (\n        <LocaleItem\n          key={item.id}\n          locale={item}\n          changeLocale={changeLocale}\n          selectedLocale={currentLocale.id}\n        />\n      ))}\n    </>\n  )\n}\n\nfunction LocaleItem(props: {\n  locale: {id: string; title: string}\n  changeLocale: (lang: string) => void\n  selectedLocale: string\n}) {\n  const {locale, changeLocale, selectedLocale: selectedLang} = props\n  const localeId = locale.id\n  const onClick = useCallback(() => changeLocale(localeId), [localeId, changeLocale])\n  const selected = selectedLang == localeId\n\n  return (\n    <MenuItem\n      aria-label={locale.title}\n      pressed={selected}\n      iconRight={selected && <CheckmarkIcon />}\n      onClick={onClick}\n      text={locale.title}\n    />\n  )\n}\n","import {CheckmarkIcon} from '@sanity/icons'\nimport {MenuDivider} from '@sanity/ui'\n\nimport {MenuItem} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n'\nimport {type StudioThemeColorSchemeKey} from '../../../../theme'\nimport {useColorSchemeOptions} from '../../../colorScheme'\n\nexport function AppearanceMenu({\n  setScheme,\n}: {\n  setScheme: (nextScheme: StudioThemeColorSchemeKey) => void\n}) {\n  const {t} = useTranslation()\n  // Subscribe to just what we need, if the menu isn't shown then we're not subscribed to these contexts\n  const options = useColorSchemeOptions(setScheme, t)\n\n  return (\n    <>\n      <MenuDivider />\n\n      {options.map(({icon, label, name, onSelect, selected, title}) => (\n        <MenuItem\n          key={name}\n          aria-label={label}\n          icon={icon}\n          onClick={onSelect}\n          pressed={selected}\n          text={title}\n          iconRight={selected && <CheckmarkIcon />}\n          data-testid={`color-scheme-${name}`}\n        />\n      ))}\n    </>\n  )\n}\n","import {SanityMonogram} from '@sanity/logos'\nimport {styled} from 'styled-components'\n\nconst Root = styled.div`\n  position: absolute;\n  width: 18px;\n  height: 18px;\n  background: var(--card-bg-color);\n  bottom: -4px;\n  right: -4px;\n  border-radius: 50%;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  border: 1px solid var(--card-bg-color);\n  box-sizing: content-box;\n\n  svg {\n    box-sizing: content-box;\n    border: 1px solid var(--card-hairline-soft-color);\n    border-radius: 50%;\n    padding: 2px;\n    width: 12px;\n    height: 12px;\n  }\n\n  &[data-logo='github'] {\n    svg {\n      path {\n        fill: var(--card-fg-color);\n      }\n    }\n  }\n\n  &[data-logo='saml'] {\n    svg {\n      path {\n        fill: var(--card-fg-color);\n      }\n    }\n  }\n`\n\nconst Google = (\n  <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <g clipPath=\"url(#clip0)\">\n      <path\n        d=\"M12 6.13764C12 5.72977 11.9663 5.31971 11.8943 4.91846H6.12036V7.22895H9.42684C9.28963 7.97412 8.84876 8.63332 8.20322 9.05221V10.5514H10.1759C11.3342 9.50637 12 7.9631 12 6.13764Z\"\n        fill=\"#4285F4\"\n      />\n      <path\n        d=\"M6.12019 12.0002C7.77118 12.0002 9.16349 11.4688 10.1779 10.5517L8.20529 9.05253C7.65646 9.41851 6.94793 9.62574 6.12244 9.62574C4.52544 9.62574 3.17136 8.56971 2.68552 7.1499H0.649902V8.69537C1.68908 10.7215 3.80567 12.0002 6.12019 12.0002V12.0002Z\"\n        fill=\"#34A853\"\n      />\n      <path\n        d=\"M2.68332 7.14986C2.4269 6.40469 2.4269 5.59778 2.68332 4.8526V3.30713H0.649951C-0.218278 5.00252 -0.218278 6.99995 0.649951 8.69533L2.68332 7.14986V7.14986Z\"\n        fill=\"#FBBC04\"\n      />\n      <path\n        d=\"M6.12019 2.37483C6.99291 2.3616 7.8364 2.68348 8.46845 3.27433L10.2161 1.56131C9.1095 0.542752 7.64071 -0.017233 6.12019 0.000404333C3.80566 0.000404333 1.68908 1.27911 0.649902 3.3074L2.68326 4.85288C3.16686 3.43087 4.52319 2.37483 6.12019 2.37483V2.37483Z\"\n        fill=\"#EA4335\"\n      />\n    </g>\n    <defs>\n      <clipPath id=\"clip0\">\n        <rect width=\"12\" height=\"12\" fill=\"white\" />\n      </clipPath>\n    </defs>\n  </svg>\n)\n\nconst GitHub = (\n  <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <g clipPath=\"url(#clip0)\">\n      <path\n        d=\"M11.195 3.13503C10.6711 2.22838 9.91808 1.47537 9.01144 0.951471C8.09222 0.414976 7.08837 0.146729 5.99987 0.146729C4.91137 0.146729 3.90752 0.414976 2.98831 0.951471C2.08163 1.47534 1.32862 2.22836 0.804744 3.13503C0.268248 4.05497 0 5.05883 0 6.14659C0 7.45399 0.381531 8.62978 1.14459 9.67394C1.90765 10.7181 2.89327 11.4408 4.10143 11.8419C4.24208 11.868 4.34624 11.8497 4.41392 11.7872C4.44666 11.7577 4.47263 11.7215 4.49006 11.681C4.50749 11.6405 4.51595 11.5967 4.51488 11.5527C4.51488 11.537 4.51361 11.3963 4.51105 11.1307C4.5085 10.8651 4.50722 10.6334 4.50722 10.4355L4.32745 10.4666C4.18407 10.4895 4.03885 10.4986 3.89375 10.494C3.71159 10.4908 3.53001 10.4725 3.35087 10.4393C3.16049 10.4045 2.98119 10.3246 2.82796 10.2064C2.66705 10.0846 2.54715 9.91661 2.48428 9.72484L2.40602 9.54506C2.34022 9.40286 2.25754 9.2691 2.15976 9.14666C2.04775 9.00072 1.93447 8.90176 1.81991 8.84977L1.76518 8.81064C1.72769 8.78356 1.6936 8.75205 1.66367 8.71679C1.63479 8.6841 1.61108 8.64719 1.59334 8.60734C1.57766 8.57085 1.5907 8.54085 1.63247 8.51731C1.67461 8.49405 1.75123 8.48256 1.86068 8.48256L2.01692 8.50582C2.12108 8.52662 2.24996 8.5891 2.40356 8.69326C2.5585 8.79876 2.68797 8.93748 2.78254 9.09932C2.90239 9.31294 3.04695 9.47575 3.21624 9.58775C3.38552 9.69976 3.55609 9.75576 3.72793 9.75576C3.87725 9.7578 4.02641 9.74479 4.17312 9.7169C4.29459 9.69195 4.41264 9.65254 4.52473 9.59952C4.57162 9.25037 4.69931 8.98212 4.90782 8.79477C4.63684 8.76849 4.36827 8.72157 4.10444 8.6544C3.84797 8.58382 3.60133 8.48141 3.37029 8.34958C3.12825 8.218 2.91442 8.04015 2.74095 7.82613C2.57421 7.6178 2.4374 7.34417 2.3305 7.00524C2.2236 6.6663 2.1707 6.27584 2.1718 5.83383C2.1718 5.20357 2.37757 4.66708 2.7891 4.22435C2.59629 3.75006 2.61453 3.21885 2.84383 2.63073C2.99487 2.58385 3.21879 2.61897 3.51559 2.73608C3.81239 2.85319 4.02983 2.95352 4.16792 3.03707C4.30601 3.12025 4.41665 3.19058 4.49983 3.24804C5.48153 2.9773 6.51821 2.9773 7.49991 3.24804L7.79679 3.0606C8.0249 2.92356 8.26549 2.80849 8.51535 2.71693C8.79135 2.61276 9.00231 2.58412 9.14825 2.63101C9.38248 3.21949 9.40327 3.7507 9.21064 4.22462C9.62199 4.66735 9.82776 5.20385 9.82795 5.83411C9.82795 6.27684 9.77459 6.66904 9.66787 7.01071C9.56116 7.35238 9.42325 7.62601 9.25415 7.8316C9.07785 8.04326 8.86311 8.21966 8.62124 8.35149C8.39008 8.48329 8.14337 8.5857 7.88682 8.65632C7.62412 8.72277 7.35674 8.76915 7.087 8.79505C7.35698 9.02927 7.49206 9.3994 7.49225 9.90543V11.5527C7.49115 11.5964 7.49929 11.6398 7.51612 11.6802C7.53295 11.7206 7.5581 11.7569 7.58993 11.7869C7.65505 11.8493 7.75794 11.8675 7.89858 11.8416C9.10693 11.4403 10.0926 10.7177 10.8557 9.67367C11.6188 8.62968 12.0003 7.4539 12.0003 6.14632C11.9997 5.05873 11.7313 4.05497 11.195 3.13503V3.13503Z\"\n        fill=\"black\"\n      />\n    </g>\n    <defs>\n      <clipPath id=\"clip0\">\n        <rect width=\"12\" height=\"12\" fill=\"white\" />\n      </clipPath>\n    </defs>\n  </svg>\n)\n\nconst Saml = (\n  <svg width=\"17\" height=\"9\" viewBox=\"0 0 17 9\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path d=\"M0.0691681 5.98162C0.115833 7.24157 1.07247 8.00221 2.59841 8.00221C4.17102 8.00221 5.12299 7.19957 5.12299 5.86962C5.12299 4.83832 4.55367 4.25501 3.25172 3.96569L2.56108 3.80703C1.8331 3.64837 1.53445 3.38704 1.53445 2.91106C1.53445 2.40708 1.94977 2.09442 2.61708 2.09442C3.27505 2.09442 3.6997 2.43508 3.75103 2.99039H5.00166C4.95966 1.78643 4.01236 0.997795 2.60308 0.997795C1.14713 0.997795 0.218496 1.79577 0.218496 3.05105C0.218496 4.04968 0.815808 4.69366 2.03376 4.96898L2.73374 5.13231C3.51304 5.30497 3.8117 5.54763 3.8117 6.00495C3.8117 6.55093 3.34972 6.90092 2.62174 6.90092C1.85644 6.90092 1.38045 6.56493 1.31979 5.98162H0.0691681Z\" />\n    <path d=\"M5.97695 5.98162C6.02362 7.24157 6.98025 8.00221 8.5062 8.00221C10.0788 8.00221 11.0308 7.19957 11.0308 5.86962C11.0308 4.83832 10.4615 4.25501 9.15951 3.96569L8.46886 3.80703C7.74089 3.64837 7.44223 3.38704 7.44223 2.91106C7.44223 2.40708 7.85755 2.09442 8.52486 2.09442C9.18284 2.09442 9.60749 2.43508 9.65882 2.99039H10.9094C10.8674 1.78643 9.92015 0.997795 8.51086 0.997795C7.05492 0.997795 6.12628 1.79577 6.12628 3.05105C6.12628 4.04968 6.72359 4.69366 7.94155 4.96898L8.64153 5.13231C9.42083 5.30497 9.71949 5.54763 9.71949 6.00495C9.71949 6.55093 9.2575 6.90092 8.52953 6.90092C7.76422 6.90092 7.28824 6.56493 7.22758 5.98162H5.97695Z\" />\n    <path d=\"M16.9852 5.01565V3.98435C16.9852 2.11309 16.0099 0.997795 14.3953 0.997795C12.7807 0.997795 11.8054 2.11309 11.8054 3.98435V5.01565C11.8054 6.88692 12.7807 8.00221 14.3953 8.00221C16.0099 8.00221 16.9852 6.88692 16.9852 5.01565ZM14.3953 6.82625C13.5833 6.82625 13.154 6.21494 13.154 5.00165V3.99835C13.154 2.78506 13.5833 2.17375 14.3953 2.17375C15.2073 2.17375 15.6366 2.78506 15.6366 3.99835V5.00165C15.6366 6.21494 15.2073 6.82625 14.3953 6.82625Z\" />\n  </svg>\n)\n\ninterface Props {\n  provider: string | undefined\n}\n\nexport const LoginProviderLogo = ({provider}: Props) => {\n  const isSaml = provider?.startsWith('saml-')\n  const logoName = isSaml ? 'saml' : provider\n\n  return (\n    <Root data-logo={logoName}>\n      {provider === 'google' && Google}\n      {provider === 'github' && GitHub}\n      {provider === 'sanity' && <SanityMonogram />}\n      {isSaml && Saml}\n    </Root>\n  )\n}\n","import {AddUserIcon, CogIcon} from '@sanity/icons'\nimport {MenuDivider} from '@sanity/ui'\n\nimport {MenuItem} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n'\nimport {userHasRole} from '../../../../util'\nimport {useWorkspace} from '../../../workspace'\n\nexport function ManageMenu() {\n  const {currentUser, projectId} = useWorkspace()\n  const isAdmin = Boolean(currentUser && userHasRole(currentUser, 'administrator'))\n\n  const {t} = useTranslation()\n\n  return (\n    <>\n      <MenuDivider />\n      <MenuItem\n        as=\"a\"\n        aria-label={t('user-menu.action.manage-project-aria-label')}\n        href={`https://sanity.io/manage/project/${projectId}`}\n        target=\"_blank\"\n        text={t('user-menu.action.manage-project')}\n        icon={CogIcon}\n      />\n      {isAdmin && (\n        <MenuItem\n          as=\"a\"\n          aria-label={t('user-menu.action.invite-members-aria-label')}\n          href={`https://www.sanity.io/manage/project/${projectId}/members?invite=true`}\n          target=\"_blank\"\n          text={t('user-menu.action.invite-members')}\n          icon={AddUserIcon}\n        />\n      )}\n    </>\n  )\n}\n","import {LeaveIcon} from '@sanity/icons'\nimport {\n  Box,\n  // eslint-disable-next-line no-restricted-imports\n  Button, // Button with specific styling, user avatar .\n  Card,\n  Flex,\n  Menu,\n  MenuDivider,\n  Stack,\n  Text,\n} from '@sanity/ui'\nimport {useMemo} from 'react'\nimport {styled} from 'styled-components'\n\nimport {MenuButton, type MenuButtonProps, MenuItem, Tooltip} from '../../../../../ui-components'\nimport {UserAvatar} from '../../../../components'\nimport {useTranslation} from '../../../../i18n'\nimport {getProviderTitle} from '../../../../store'\nimport {useColorSchemeSetValue, useColorSchemeValue} from '../../../colorScheme'\nimport {useWorkspace} from '../../../workspace'\nimport {AppearanceMenu} from './ApperanceMenu'\nimport {LocaleMenu} from './LocaleMenu'\nimport {LoginProviderLogo} from './LoginProviderLogo'\nimport {ManageMenu} from './ManageMenu'\n\nconst StyledMenu = styled(Menu)`\n  min-width: 200px;\n  max-width: 300px;\n`\n\nconst AvatarBox = styled(Box)`\n  position: relative;\n  min-width: ${({theme}) => theme.sanity.avatar.sizes[2].size}px;\n  min-height: ${({theme}) => theme.sanity.avatar.sizes[2].size}px;\n`\n\nexport function UserMenu() {\n  const {currentUser, auth} = useWorkspace()\n  const scheme = useColorSchemeValue()\n  const setScheme = useColorSchemeSetValue()\n\n  const providerTitle = getProviderTitle(currentUser?.provider)\n\n  const {t} = useTranslation()\n\n  const popoverProps: MenuButtonProps['popover'] = useMemo(\n    () => ({\n      placement: 'bottom',\n      portal: true,\n      preventOverflow: true,\n      scheme: scheme,\n      constrainSize: true,\n      tone: 'default',\n    }),\n    [scheme],\n  )\n\n  return (\n    <MenuButton\n      button={\n        <Button mode=\"bleed\" padding={0} radius=\"full\">\n          <UserAvatar size={1} user=\"me\" />\n        </Button>\n      }\n      id=\"user-menu\"\n      menu={\n        <StyledMenu data-testid=\"user-menu\">\n          <Card padding={2}>\n            <Flex align=\"center\">\n              <Tooltip\n                disabled={!providerTitle}\n                portal\n                content={t('user-menu.login-provider', {providerTitle})}\n              >\n                <AvatarBox marginRight={3}>\n                  <UserAvatar size={2} user=\"me\" />\n                  {currentUser?.provider && <LoginProviderLogo provider={currentUser.provider} />}\n                </AvatarBox>\n              </Tooltip>\n\n              <Stack space={2} flex={1}>\n                <Text size={1} weight=\"medium\" textOverflow=\"ellipsis\">\n                  {currentUser?.name}\n                </Text>\n\n                <Text size={1} muted textOverflow=\"ellipsis\">\n                  {currentUser?.email}\n                </Text>\n              </Stack>\n            </Flex>\n          </Card>\n\n          {setScheme && <AppearanceMenu setScheme={setScheme} />}\n          <LocaleMenu />\n          <ManageMenu />\n\n          {auth.logout && (\n            <>\n              <MenuDivider />\n              <MenuItem\n                iconRight={LeaveIcon}\n                text={t('user-menu.action.sign-out')}\n                disabled={!auth.logout}\n                {...(auth.logout && {onClick: auth.logout})}\n              />\n            </>\n          )}\n        </StyledMenu>\n      }\n      popover={popoverProps}\n    />\n  )\n}\n","import {MenuIcon} from '@sanity/icons'\nimport {\n  BoundaryElementProvider,\n  Box,\n  Card,\n  Flex,\n  Grid,\n  Layer,\n  LayerProvider,\n  PortalProvider,\n  useMediaIndex,\n} from '@sanity/ui'\nimport {useCallback, useContext, useEffect, useMemo, useRef, useState} from 'react'\nimport {NavbarContext} from 'sanity/_singletons'\nimport {type RouterState, useRouterState} from 'sanity/router'\nimport {styled} from 'styled-components'\n\nimport {Button, TooltipDelayGroupProvider} from '../../../../ui-components'\nimport {CapabilityGate} from '../../../components/CapabilityGate'\nimport {type NavbarProps} from '../../../config/studio/types'\nimport {isDev} from '../../../environment'\nimport {useTranslation} from '../../../i18n'\nimport {ReleasesNav} from '../../../perspective/navbar/ReleasesNav'\nimport {usePerspective} from '../../../perspective/usePerspective'\nimport {getReleaseTone} from '../../../releases/util/getReleaseTone'\nimport {useToolMenuComponent} from '../../studio-components-hooks'\nimport {useWorkspace} from '../../workspace'\nimport {ConfigIssuesButton} from './configIssues/ConfigIssuesButton'\nimport {FreeTrial} from './free-trial'\nimport {FreeTrialProvider} from './free-trial/FreeTrialProvider'\nimport {HomeButton} from './home/HomeButton'\nimport {NavDrawer} from './navDrawer'\nimport {NewDocumentButton, useNewDocumentOptions} from './new-document'\nimport {PresenceMenu} from './presence'\nimport {ResourcesButton} from './resources/ResourcesButton'\nimport {SearchButton, SearchDialog} from './search'\nimport {SearchPopover} from './search/components/SearchPopover'\nimport {SearchProvider} from './search/contexts/search/SearchProvider'\nimport {UserMenu} from './userMenu'\nimport {WorkspaceMenuButton} from './workspace'\n\nconst EMPTY_ARRAY: [] = []\n\nconst RootLayer = styled(Layer)`\n  min-height: auto;\n  position: relative;\n\n  &[data-search-open='true'] {\n    top: 0;\n    position: sticky;\n  }\n`\n\nconst RootCard = styled(Card)`\n  line-height: 0;\n`\n\nconst NavGrid = styled(Grid)`\n  grid-template-columns: auto auto auto;\n  @media screen and (min-width: ${({theme}) => `${theme.sanity.media[4]}px`}) {\n    grid-template-columns: 1fr auto 1fr;\n  }\n`\n\n/**\n * @hidden\n * @beta */\nexport function StudioNavbar(props: Omit<NavbarProps, 'renderDefault'>) {\n  const {\n    // eslint-disable-next-line camelcase\n    __internal_actions: actions = EMPTY_ARRAY,\n  } = props\n\n  const {name, tools} = useWorkspace()\n  const routerState = useRouterState()\n  const mediaIndex = useMediaIndex()\n  const activeToolName = typeof routerState.tool === 'string' ? routerState.tool : undefined\n\n  const newDocumentOptions = useNewDocumentOptions()\n  const {t} = useTranslation()\n\n  const {\n    onSearchFullscreenOpenChange,\n    onSearchOpenChange,\n    searchFullscreenOpen,\n    searchFullscreenPortalEl,\n    searchOpen,\n  } = useContext(NavbarContext)\n\n  const {selectedPerspective, perspectiveStack} = usePerspective()\n\n  const ToolMenu = useToolMenuComponent()\n\n  const [drawerOpen, setDrawerOpen] = useState<boolean>(false)\n\n  const routerStateRef = useRef<RouterState>(routerState)\n  const workspaceNameRef = useRef<string>(name)\n\n  // Close the NavDrawer when changing tool or workspace\n  useEffect(() => {\n    if (routerStateRef.current.tool !== routerState.tool || name !== workspaceNameRef.current) {\n      setDrawerOpen(false)\n    }\n\n    routerStateRef.current = routerState\n    workspaceNameRef.current = name\n  }, [name, routerState])\n\n  const [drawerButtonEl, setDrawerButtonEl] = useState<HTMLButtonElement | null>(null)\n  const [searchOpenButtonEl, setSearchOpenButtonEl] = useState<HTMLButtonElement | null>(null)\n\n  const shouldRender = useMemo(\n    () => ({\n      resources: mediaIndex > 1,\n      collapsedPresenceMenu: mediaIndex <= 1,\n      loginStatus: mediaIndex > 1,\n      searchFullscreen: mediaIndex <= 1,\n      configIssues: mediaIndex > 1 && isDev,\n      newDocumentFullscreen: mediaIndex <= 1,\n      tools: mediaIndex >= 3,\n    }),\n    [mediaIndex],\n  )\n\n  useEffect(() => {\n    onSearchFullscreenOpenChange(searchFullscreenOpen)\n  }, [searchFullscreenOpen, onSearchFullscreenOpenChange])\n\n  // On desktop: force search dialog to be hidden\n  // On mobile: force search popover to be hidden\n  // This is a bit of a micro optimisation to prevent search surfaces from remaining open\n  // when jumping between both mobile / desktop breakpoints.\n  useEffect(() => {\n    if (shouldRender.searchFullscreen) {\n      onSearchOpenChange(false)\n    } else {\n      onSearchFullscreenOpenChange(false)\n    }\n  }, [onSearchFullscreenOpenChange, onSearchOpenChange, shouldRender.searchFullscreen])\n\n  const handleOpenSearch = useCallback(() => {\n    onSearchOpenChange(true)\n  }, [onSearchOpenChange])\n\n  const handleOpenSearchFullscreen = useCallback(() => {\n    onSearchFullscreenOpenChange(true)\n  }, [onSearchFullscreenOpenChange])\n\n  const handleCloseSearch = useCallback(() => {\n    onSearchOpenChange(false)\n  }, [onSearchOpenChange])\n\n  const handleCloseSearchFullscreen = useCallback(() => {\n    onSearchFullscreenOpenChange(false)\n    searchOpenButtonEl?.focus()\n  }, [onSearchFullscreenOpenChange, searchOpenButtonEl])\n\n  const handleCloseDrawer = useCallback(() => {\n    setDrawerOpen(false)\n    drawerButtonEl?.focus()\n  }, [drawerButtonEl])\n\n  const handleOpenDrawer = useCallback(() => {\n    setDrawerOpen(true)\n  }, [])\n\n  const actionNodes = useMemo(() => {\n    if (!shouldRender.tools) return null\n\n    return actions\n      ?.filter((v) => v.location === 'topbar')\n      ?.map((action) => {\n        const {render: ActionComponent} = action\n\n        if (ActionComponent) return <ActionComponent key={action.name} />\n\n        return (\n          <Button\n            iconRight={action?.icon}\n            key={action.name}\n            mode=\"bleed\"\n            onClick={action?.onAction}\n            selected={action.selected}\n            text={action.title}\n          />\n        )\n      })\n  }, [actions, shouldRender.tools])\n\n  return (\n    <FreeTrialProvider>\n      <RootLayer zOffset={100} data-search-open={searchFullscreenOpen}>\n        <RootCard\n          tone={getReleaseTone(selectedPerspective)}\n          borderBottom\n          data-testid=\"studio-navbar\"\n          data-ui=\"Navbar\"\n          padding={3}\n          sizing=\"border\"\n        >\n          <NavGrid gap={1}>\n            {/** Left flex */}\n            <TooltipDelayGroupProvider>\n              <Flex align=\"center\" gap={2} justify=\"flex-start\">\n                <Flex align=\"center\" gap={2}>\n                  {/* Menu button */}\n                  {!shouldRender.tools && (\n                    <Button\n                      mode=\"bleed\"\n                      icon={MenuIcon}\n                      onClick={handleOpenDrawer}\n                      ref={setDrawerButtonEl}\n                      tooltipProps={{content: t('user-menu.open-menu'), placement: 'bottom'}}\n                    />\n                  )}\n\n                  {/* Home + workspace menu buttons */}\n                  <Flex gap={1}>\n                    <HomeButton />\n                    <WorkspaceMenuButton />\n                  </Flex>\n                </Flex>\n                {/* New document button */}\n                <NewDocumentButton\n                  {...newDocumentOptions}\n                  modal={shouldRender.newDocumentFullscreen ? 'dialog' : 'popover'}\n                />\n                {/* Search button (desktop) */}\n                {!shouldRender.searchFullscreen && (\n                  <SearchButton onClick={handleOpenSearch} ref={setSearchOpenButtonEl} />\n                )}\n              </Flex>\n            </TooltipDelayGroupProvider>\n\n            {/** Center flex */}\n            <Flex align=\"center\" justify=\"center\">\n              {shouldRender.tools && (\n                <ToolMenu\n                  activeToolName={activeToolName}\n                  closeSidebar={handleCloseDrawer}\n                  context=\"topbar\"\n                  isSidebarOpen={false}\n                  tools={tools}\n                />\n              )}\n            </Flex>\n\n            {/** Right flex */}\n            <TooltipDelayGroupProvider>\n              <Flex align=\"center\" gap={1} justify=\"flex-end\">\n                {/* Search */}\n                <LayerProvider>\n                  <SearchProvider fullscreen={shouldRender.searchFullscreen}>\n                    <BoundaryElementProvider element={document.body}>\n                      {shouldRender.searchFullscreen ? (\n                        <PortalProvider element={searchFullscreenPortalEl}>\n                          <SearchDialog\n                            onClose={handleCloseSearchFullscreen}\n                            onOpen={handleOpenSearchFullscreen}\n                            open={searchFullscreenOpen}\n                          />\n                        </PortalProvider>\n                      ) : (\n                        <SearchPopover\n                          onClose={handleCloseSearch}\n                          onOpen={handleOpenSearch}\n                          open={searchOpen}\n                          previewPerspective={perspectiveStack}\n                        />\n                      )}\n                    </BoundaryElementProvider>\n                  </SearchProvider>\n                </LayerProvider>\n\n                <ReleasesNav />\n                {actionNodes}\n                {shouldRender.tools && <FreeTrial type=\"topbar\" />}\n                <PresenceMenu />\n                {shouldRender.configIssues && <ConfigIssuesButton />}\n                {shouldRender.resources && <ResourcesButton />}\n\n                {/* Search button (mobile) */}\n                {shouldRender.searchFullscreen && (\n                  <SearchButton onClick={handleOpenSearchFullscreen} ref={setSearchOpenButtonEl} />\n                )}\n\n                {shouldRender.tools && (\n                  <CapabilityGate capability=\"globalUserMenu\">\n                    <Box flex=\"none\" marginLeft={1}>\n                      <UserMenu />\n                    </Box>\n                  </CapabilityGate>\n                )}\n              </Flex>\n            </TooltipDelayGroupProvider>\n          </NavGrid>\n        </RootCard>\n\n        {!shouldRender.tools && (\n          <NavDrawer\n            __internal_actions={actions}\n            activeToolName={activeToolName}\n            isOpen={drawerOpen}\n            onClose={handleCloseDrawer}\n            tools={tools}\n          />\n        )}\n      </RootLayer>\n    </FreeTrialProvider>\n  )\n}\n","import {Flex} from '@sanity/ui'\nimport {\n  Children,\n  cloneElement,\n  type ForwardedRef,\n  forwardRef,\n  type ReactNode,\n  useCallback,\n  useMemo,\n  useState,\n} from 'react'\nimport {styled} from 'styled-components'\n\nimport {type MenuButtonProps} from '../../../ui-components'\nimport {CollapseOverflowMenu} from '../collapseMenu/CollapseOverflowMenu'\nimport {ObserveElement} from '../collapseMenu/ObserveElement'\nimport {ContextMenuButton} from '../contextMenuButton'\n\nfunction _isReactElement(node: unknown): node is React.JSX.Element {\n  return Boolean(node)\n}\n\nconst OptionObserveElement = styled(ObserveElement)`\n  list-style: none;\n  white-space: nowrap;\n  flex-shrink: 0;\n  opacity: 0;\n  visibility: hidden;\n`\n\nconst HiddenRow = styled(Flex)`\n  opacity: 0;\n  height: 0.1px;\n  overflow: hidden;\n`\n\ninterface CollapseTabListProps {\n  children: ReactNode\n  gap?: number | number[]\n  menuButtonProps?: Omit<MenuButtonProps, 'id' | 'menu' | 'button'> & {\n    id?: string\n    button?: React.JSX.Element\n  }\n  onMenuClose?: () => void\n  collapsed?: boolean\n  disableRestoreFocusOnClose?: boolean\n}\n\n/**\n * Similar to `<CollapseMenu />` but instead of collapsing the inner items by removing the text\n * it shows the items that fit, and the rest are rendered in a menu.\n * @internal */\nexport const CollapseTabList = forwardRef(function CollapseTabList(\n  props: CollapseTabListProps,\n  ref: ForwardedRef<HTMLDivElement>,\n) {\n  const {\n    children: childrenProp,\n    gap,\n    menuButtonProps,\n    disableRestoreFocusOnClose,\n    onMenuClose,\n    collapsed,\n    ...rest\n  } = props\n  const [rootEl, setRootEl] = useState<HTMLDivElement | null>(null)\n  const [hiddenElements, setHiddenElements] = useState<React.JSX.Element[]>([])\n  const [showChildren, setShowChildren] = useState(false)\n\n  const children = useMemo(\n    () => Children.toArray(childrenProp).filter(_isReactElement),\n    [childrenProp],\n  )\n\n  /**\n   * Keeps track of the children that will be shown in place and not in the menu.\n   */\n  const displayChildren = useMemo(() => {\n    if (collapsed) return null // If collapsed, we don't want to show any children\n    if (!showChildren) return null // If we haven't run the intersection observer yet, we don't want to show any children\n    // eslint-disable-next-line max-nested-callbacks\n    return children.filter((c) => !hiddenElements.some((h) => h.key === c.key))\n  }, [children, collapsed, hiddenElements, showChildren])\n\n  const intersectionOptions = useMemo(\n    () => ({\n      root: rootEl,\n      threshold: 1,\n      rootMargin: '1px',\n    }),\n    [rootEl],\n  )\n\n  const menuButton = useMemo(\n    () => menuButtonProps?.button || <ContextMenuButton />,\n    [menuButtonProps],\n  )\n\n  const menuOptionsArray = useMemo(\n    () =>\n      collapsed\n        ? children\n        : children.filter(({key}) =>\n            // eslint-disable-next-line max-nested-callbacks\n            hiddenElements.find((o: React.JSX.Element) => o.key === key),\n          ),\n    [children, hiddenElements, collapsed],\n  )\n\n  const handleIntersection = useCallback(\n    (e: IntersectionObserverEntry, child: React.JSX.Element) => {\n      const isHidden = hiddenElements.some((el) => el.key === child.key)\n\n      if (!showChildren) setShowChildren(true)\n      const isIntersecting = e.isIntersecting\n      if (!isHidden && !isIntersecting) setHiddenElements((prev) => [...prev, child])\n      if (isHidden && isIntersecting)\n        // eslint-disable-next-line max-nested-callbacks\n        setHiddenElements((prev) => prev.filter((el) => el.key !== child.key))\n    },\n    [hiddenElements, showChildren, setShowChildren, setHiddenElements],\n  )\n\n  return (\n    <Flex direction=\"column\" ref={ref} sizing=\"border\" style={{position: 'relative'}} {...rest}>\n      <Flex justify=\"center\" gap={gap} flex={1}>\n        {displayChildren}\n        {(hiddenElements.length > 0 || collapsed) && (\n          <CollapseOverflowMenu\n            disableRestoreFocusOnClose={disableRestoreFocusOnClose}\n            menuButton={menuButton}\n            menuButtonProps={menuButtonProps}\n            menuOptions={menuOptionsArray}\n            onMenuClose={onMenuClose}\n          />\n        )}\n      </Flex>\n\n      {/* Element that always render all the children to keep track of their position and if the available space to render them */}\n      <HiddenRow justify=\"flex-start\" gap={gap} ref={setRootEl} data-hidden aria-hidden=\"true\">\n        {cloneElement(menuButton, {\n          'disabled': true,\n          'aria-hidden': true,\n        })}\n        {children?.map((child) => (\n          <OptionObserveElement\n            key={`${child.key}_observer`}\n            options={intersectionOptions}\n            // eslint-disable-next-line react/jsx-no-bind\n            onIntersectionChange={(e) => handleIntersection(e[0], child)}\n          >\n            {cloneElement(child, {\n              'disabled': true,\n              'aria-hidden': true,\n              'tabIndex': -1,\n            })}\n          </OptionObserveElement>\n        ))}\n      </HiddenRow>\n    </Flex>\n  )\n})\n","import {Flex} from '@sanity/ui'\nimport {startCase} from 'lodash'\nimport {forwardRef, type Ref, useMemo, useState} from 'react'\n\nimport {Button, type MenuButtonProps} from '../../../../../ui-components'\nimport {useRovingFocus} from '../../../../components'\nimport {CollapseTabList} from '../../../../components/collapseTabList/CollapseTabList'\nimport {type Tool} from '../../../../config'\nimport {useColorSchemeValue} from '../../../colorScheme'\nimport {ToolLink, type ToolLinkProps} from './ToolLink'\n\ninterface ToolCollapseMenuProps {\n  activeToolName?: string\n  tools: Tool[]\n}\n\nexport function ToolCollapseMenu(props: ToolCollapseMenuProps) {\n  const {activeToolName, tools} = props\n  const scheme = useColorSchemeValue()\n  const [collapseMenuEl, setCollapseMenuEl] = useState<HTMLDivElement | null>(null)\n\n  useRovingFocus({\n    rootElement: collapseMenuEl,\n    navigation: ['arrows'],\n  })\n\n  const menuButtonProps: Partial<MenuButtonProps> = useMemo(\n    () => ({\n      popover: {\n        constrainSize: true,\n        portal: true,\n        scheme: scheme,\n        tone: 'default',\n      },\n    }),\n    [scheme],\n  )\n  const children = useMemo(\n    () =>\n      tools.map((tool, index) => {\n        const title = tool?.title || startCase(tool.name)\n\n        const Link = forwardRef(function Link(\n          linkProps: ToolLinkProps,\n          ref: Ref<HTMLAnchorElement>,\n        ) {\n          return (\n            <ToolLink {...linkProps} ref={ref} name={tool.name}>\n              {linkProps.children}\n            </ToolLink>\n          )\n        })\n\n        return (\n          <Button\n            as={Link}\n            data-as=\"a\"\n            // eslint-disable-next-line react/no-array-index-key\n            key={`${tool.name}-${index}`}\n            mode=\"bleed\"\n            selected={activeToolName === tool.name}\n            text={title}\n          />\n        )\n      }),\n    [activeToolName, tools],\n  )\n\n  return (\n    <Flex justify=\"center\" marginX={4}>\n      <CollapseTabList\n        data-testid=\"tool-collapse-menu\"\n        gap={1}\n        menuButtonProps={menuButtonProps}\n        ref={setCollapseMenuEl}\n      >\n        {children}\n      </CollapseTabList>\n    </Flex>\n  )\n}\n","import {Stack} from '@sanity/ui'\nimport {startCase} from 'lodash'\nimport {forwardRef, type Ref, useMemo} from 'react'\n\nimport {Button} from '../../../../../ui-components'\nimport {type Tool} from '../../../../config'\nimport {ToolLink, type ToolLinkProps} from './ToolLink'\n\ninterface ToolVerticalMenuProps {\n  activeToolName?: string\n  isVisible: boolean\n  tools: Tool[]\n}\n\nexport function ToolVerticalMenu(props: ToolVerticalMenuProps) {\n  const {activeToolName, isVisible, tools} = props\n\n  return useMemo(\n    () => (\n      <Stack as=\"ul\" space={1}>\n        {tools.map((tool) => {\n          const title = tool?.title || startCase(tool.name)\n\n          const Link = forwardRef(function Link(\n            linkProps: ToolLinkProps,\n            ref: Ref<HTMLAnchorElement>,\n          ) {\n            return (\n              <ToolLink {...linkProps} ref={ref} name={tool.name}>\n                {linkProps.children}\n              </ToolLink>\n            )\n          })\n\n          return (\n            <Stack as=\"li\" key={tool.name}>\n              <Button\n                as={Link}\n                justify=\"flex-start\"\n                mode=\"bleed\"\n                selected={activeToolName === tool.name}\n                size=\"large\"\n                tabIndex={isVisible ? 0 : -1}\n                text={title}\n              />\n            </Stack>\n          )\n        })}\n      </Stack>\n    ),\n    [activeToolName, isVisible, tools],\n  )\n}\n","import {useMemo} from 'react'\n\nimport {type ToolMenuProps} from '../../../../config'\nimport {SCHEDULED_PUBLISHING_TOOL_NAME} from '../../../../scheduledPublishing/constants'\nimport {useScheduledPublishingEnabled} from '../../../../scheduledPublishing/tool/contexts/ScheduledPublishingEnabledProvider'\nimport {ToolCollapseMenu} from './ToolCollapseMenu'\nimport {ToolVerticalMenu} from './ToolVerticalMenu'\n\nconst HIDDEN_STUDIO_MENU_TOOLS = ['releases']\n\n/**\n * @hidden\n * @beta */\nexport function StudioToolMenu(props: ToolMenuProps) {\n  const {context, isSidebarOpen, tools, ...restProps} = props\n  const {enabled: scheduledPublishingEnabled} = useScheduledPublishingEnabled()\n\n  const visibleTools = useMemo(\n    () =>\n      tools.filter((tool) => {\n        if (tool.name === SCHEDULED_PUBLISHING_TOOL_NAME && !scheduledPublishingEnabled) {\n          return false\n        }\n        return !HIDDEN_STUDIO_MENU_TOOLS.includes(tool.name)\n      }),\n    [scheduledPublishingEnabled, tools],\n  )\n\n  if (visibleTools.length <= 1) {\n    return null\n  }\n  if (context === 'sidebar') {\n    return <ToolVerticalMenu isVisible={isSidebarOpen} tools={visibleTools} {...restProps} />\n  }\n\n  return <ToolCollapseMenu tools={visibleTools} {...restProps} />\n}\n","import {defineEvent} from '@sanity/telemetry'\n\ninterface FieldCopiedInfo {\n  /**\n   * The context the action was triggered from\n   */\n  context: 'fieldAction' | 'documentFieldAction' | 'keyboardShortcut' | 'arrayItem' | 'unknown'\n  /**\n   * The schema type(s) that was copied\n   */\n  schemaTypes: string[]\n}\n\ninterface FieldPastedInfo {\n  /**\n   * The context the action was triggered from\n   */\n  context: 'fieldAction' | 'documentFieldAction' | 'keyboardShortcut' | 'arrayItem' | 'unknown'\n  /**\n   * The schema(s) type that was copied\n   */\n  schemaTypes: string[]\n}\n\nexport const FieldCopied = defineEvent<FieldCopiedInfo>({\n  name: 'Field Copied',\n  version: 1,\n  description:\n    'User clicked the \"Copy field\" button in the field action menu or used the Ctrl+C shortcut',\n})\n\nexport const FieldPasted = defineEvent<FieldPastedInfo>({\n  name: 'Field Pasted',\n  version: 1,\n  description:\n    'User clicked the \"Paste field\" button in the field action menu or used the Ctrl+V shortcut',\n})\n","import {\n  type ArraySchemaType,\n  isIndexSegment,\n  isKeySegment,\n  isObjectSchemaType,\n  type ObjectField,\n  type ObjectSchemaType,\n  type Path,\n  type SchemaType,\n} from '@sanity/types'\nimport {fromString, toString} from '@sanity/util/paths'\n\nimport {getValueAtPath} from '../../field/paths/helpers'\nimport {getItemType} from '../../form/store/utils/getItemType'\nimport {type FormDocumentValue} from '../../form/types/formDocumentValue'\n\nexport function getSchemaField(\n  schemaType: SchemaType,\n  fieldPath: string,\n): ObjectField<SchemaType> | undefined {\n  if (!fieldPath) return undefined\n\n  const paths = 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 = 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\nexport function resolveSchemaTypeForPath(\n  baseType: SchemaType,\n  path: Path,\n  documentValue?: FormDocumentValue | undefined | unknown,\n): SchemaType | undefined {\n  if (!baseType) return undefined\n\n  let currentField: ObjectSchemaType | ArraySchemaType<unknown> | SchemaType = baseType\n\n  path.forEach((segment, index) => {\n    const nextPath = path.slice(0, index + 1)\n    const isArrayItem = isKeySegment(segment) || isIndexSegment(segment)\n\n    if (isArrayItem) {\n      // We know that the currentField is an array schema type\n      // if the current segment is an array item.\n      const arraySchemaType = currentField as ArraySchemaType<unknown>\n\n      // Get the value of the array item at the current path\n      const itemValue = getValueAtPath(documentValue, nextPath) as unknown[]\n\n      // Get the schema type of the array item\n      const item = getItemType(arraySchemaType, itemValue)\n\n      if (item) {\n        currentField = item as ObjectSchemaType\n\n        return\n      }\n    }\n\n    const nextField = getSchemaField(\n      currentField,\n      toString(nextPath.length > 1 ? nextPath.slice(-1) : nextPath),\n    ) as ObjectSchemaType\n\n    if (nextField?.type) {\n      currentField = nextField.type as ObjectSchemaType\n    }\n  })\n\n  return currentField\n}\n","import {type Path} from '@sanity/types'\n\nimport {isString} from '../../util/isString'\nimport {type SanityClipboardItem} from './types'\n\n/**\n * The custom mimetype used when populating a ClipboardItem. Note that this\n * uses the new `web ` prefix. This is not currently implemented in Safari and\n * Firefox as of 2024-07-08.\n *\n * https://caniuse.com/mdn-api_clipboarditem_supports_static_optional_type_web\n * https://github.com/w3c/editing/blob/gh-pages/docs/clipboard-pickling/explainer.md\n */\nconst MIMETYPE_SANITY_CLIPBOARD = 'web application/vnd.sanity-clipboard-item+json'\nconst MIMETYPE_HTML = 'text/html'\nconst MIMETYPE_PLAINTEXT = 'text/plain'\n\n/**\n * Reports whether or not the current browser supports custom mimetype types\n * within the clipboard. Note that this uses the new ClipboardItem.supports\n * method that was released in Chrome/Edge 121 and is currently not implemented\n * in Safari and Firefox.\n *\n * https://caniuse.com/mdn-api_clipboarditem_supports_static_optional_type_web\n */\nconst SUPPORTS_SANITY_CLIPBOARD_MIMETYPE =\n  typeof ClipboardItem !== 'undefined' &&\n  'supports' in ClipboardItem &&\n  ClipboardItem.supports(MIMETYPE_SANITY_CLIPBOARD)\n\n/**\n * The name of the attributed used to store the base64 data. Note that we store\n * serialized data into a base64 data attribute because safari will mangle and\n * sanitize the HTML pasted into the clipboard, however it keeps data attributes\n * https://stackoverflow.com/a/68958287/5776910\n */\nconst BASE64_ATTR = 'sanity-clipboard-base64'\n\nexport async function getClipboardItem(): Promise<SanityClipboardItem | null> {\n  const items = await navigator.clipboard.read()\n\n  for (const item of items) {\n    const sanityClipboardItem = await parseClipboardItem(item)\n    if (!sanityClipboardItem) continue\n    return sanityClipboardItem\n  }\n\n  return null\n}\n\nexport async function writeClipboardItem(copyActionResult: SanityClipboardItem): Promise<boolean> {\n  const textValue = transformValueToText(copyActionResult.value)\n  const escapedTextValue = escapeHtml(textValue)\n  // we use a utf8-safe base64 encoded string to preserve the data as safely as\n  // possible when serializing into HTML\n  const base64SanityClipboardItem = utf8ToBase64(JSON.stringify(copyActionResult))\n\n  const clipboardItem = new ClipboardItem({\n    ...(SUPPORTS_SANITY_CLIPBOARD_MIMETYPE && {\n      [MIMETYPE_SANITY_CLIPBOARD]: new Blob([JSON.stringify(copyActionResult)], {\n        type: MIMETYPE_SANITY_CLIPBOARD,\n      }),\n    }),\n    [MIMETYPE_HTML]: new Blob(\n      // we store the data within a data attribute because safari will sanitize\n      // and mangle the HTML written to the clipboard\n      // https://stackoverflow.com/a/68958287/5776910\n      [`<p data-${BASE64_ATTR}=\"${base64SanityClipboardItem}\">${escapedTextValue}</p>`],\n      {type: MIMETYPE_HTML},\n    ),\n    [MIMETYPE_PLAINTEXT]: new Blob([textValue], {type: MIMETYPE_PLAINTEXT}),\n  })\n\n  try {\n    await navigator.clipboard.write([clipboardItem])\n    return true\n  } catch (error) {\n    console.error(`Failed to write to clipboard: ${error.message}`, error)\n    return false\n  }\n}\n\nexport async function parseClipboardItem(item: ClipboardItem): Promise<SanityClipboardItem | null> {\n  if (item.types.includes(MIMETYPE_SANITY_CLIPBOARD)) {\n    const blob = await item.getType(MIMETYPE_SANITY_CLIPBOARD)\n    const text = await blob.text()\n    return JSON.parse(text)\n  }\n\n  if (!item.types.includes(MIMETYPE_HTML)) return null\n  const blob = await item.getType(MIMETYPE_HTML)\n  const html = await blob.text()\n\n  const parser = new DOMParser()\n  const doc = parser.parseFromString(html, 'text/html')\n\n  try {\n    const el = doc.querySelector(`[data-${BASE64_ATTR}]`) as HTMLParagraphElement\n    if (!el) return null\n\n    type CamelCase<S extends string> = S extends `${infer P1}-${infer P2}${infer P3}`\n      ? `${P1}${Capitalize<P2>}${CamelCase<P3>}`\n      : S\n\n    const {sanityClipboardBase64} = el.dataset as Record<CamelCase<typeof BASE64_ATTR>, string>\n    if (!sanityClipboardBase64) return null\n\n    return JSON.parse(base64ToUtf8(sanityClipboardBase64))\n  } catch {\n    return null\n  }\n}\n\n/**\n * allows for a safe conversion of utf-8 text to a base64 string\n */\nfunction utf8ToBase64(text: string) {\n  const encoder = new TextEncoder()\n  const uint8Array = encoder.encode(text)\n  let binary = ''\n  for (let i = 0; i < uint8Array.byteLength; i++) {\n    binary += String.fromCharCode(uint8Array[i])\n  }\n  return btoa(binary)\n}\n\nfunction base64ToUtf8(base64String: string) {\n  const binary = atob(base64String)\n  const uint8Array = new Uint8Array(binary.length)\n  for (let i = 0; i < binary.length; i++) {\n    uint8Array[i] = binary.charCodeAt(i)\n  }\n  const decoder = new TextDecoder()\n  return decoder.decode(uint8Array)\n}\n\nfunction escapeHtml(text: string) {\n  const parser = new DOMParser()\n  const doc = parser.parseFromString(text, 'text/html')\n  return doc.documentElement.textContent\n}\n\nexport function transformValueToText(value: unknown): string {\n  if (!value) return ''\n  if (isString(value)) return value\n  if (Number.isFinite(value)) return value.toString()\n\n  if (Array.isArray(value)) {\n    return value.map(transformValueToText).filter(Boolean).join(', ')\n  }\n\n  if (typeof value === 'object') {\n    return Object.entries(value)\n      .map(([key, subValue]) => (key.startsWith('_') ? '' : transformValueToText(subValue)))\n      .filter(Boolean)\n      .join(', ')\n  }\n\n  return ''\n}\n\nexport function isEmptyValue(value: unknown): boolean {\n  if (value === null || value === undefined) return true\n  if (Array.isArray(value) && value.length === 0) return true\n  return false\n}\n\nexport function isNativeEditableElement(el: EventTarget): boolean {\n  if (el instanceof HTMLElement && el.isContentEditable) return true\n  if (el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement) return true\n  return false\n}\n\nexport function hasSelection(): boolean {\n  if (typeof window === 'undefined' || !window.getSelection) return false\n\n  const selection = window.getSelection()\n  return selection !== null && !selection.isCollapsed\n}\n\n/** @internal */\nexport function isEmptyFocusPath(path: Path): boolean {\n  return path.length === 0 || (path.length === 1 && path[0] === '')\n}\n","import {type Path, type ReferenceOptions, type SanityDocument} from '@sanity/types'\nimport {evaluate, parse} from 'groq-js'\n\nimport {type Source} from '../../config'\nimport {resolveUserDefinedFilter} from '../../form/studio/inputs/reference/resolveUserDefinedFilter'\nimport {isEmptyValue} from './utils'\n\nexport async function documentMatchesGroqFilter(\n  rootDocumentValue: unknown,\n  referencedDocument: SanityDocument,\n  schemaTypeOptions: ReferenceOptions,\n  targetRootPath: Path,\n  getClient: Source['getClient'],\n): Promise<boolean> {\n  // If no filter is provided, all documents match\n  if (!schemaTypeOptions.filter) {\n    return true\n  }\n\n  const options = await resolveUserDefinedFilter(\n    schemaTypeOptions,\n    rootDocumentValue as SanityDocument,\n    targetRootPath,\n    getClient,\n  )\n\n  if (!options.filter) {\n    return true\n  }\n\n  try {\n    const params = options.params || {}\n    const query = `*[${options.filter}]`\n\n    const tree = parse(query, params)\n    const value = await evaluate(tree, {\n      params,\n      dataset: [referencedDocument],\n    })\n\n    const result = await value.get()\n\n    return !isEmptyValue(result)\n  } catch (error) {\n    console.error('Error evaluating GROQ filter:', error)\n    return false\n  }\n}\n","/* eslint-disable max-statements */\n/* eslint-disable complexity */\nimport {isAssetObjectStub, isFileAssetId, isImageAssetId} from '@sanity/asset-utils'\nimport {type SanityClient} from '@sanity/client'\nimport {\n  type ArraySchemaType,\n  type BooleanSchemaType,\n  type ConditionalPropertyCallbackContext,\n  type CurrentUser,\n  isArrayOfObjectsSchemaType,\n  isArrayOfPrimitivesSchemaType,\n  isArraySchemaType,\n  isBlockSchemaType,\n  isFileSchemaType,\n  isImageSchemaType,\n  isIndexSegment,\n  isIndexTuple,\n  isKeySegment,\n  isNumberSchemaType,\n  isObjectSchemaType,\n  isPortableTextSpan,\n  isPortableTextTextBlock,\n  isPrimitiveSchemaType,\n  isReference,\n  isReferenceSchemaType,\n  isStringSchemaType,\n  isTypedObject,\n  type NumberSchemaType,\n  type ObjectSchemaType,\n  type Path,\n  type SanityDocument,\n  type SchemaType,\n  type StringSchemaType,\n  type TypedObject,\n} from '@sanity/types'\nimport {last} from 'lodash'\n\nimport {getValueAtPath} from '../../field/paths/helpers'\nimport {type FIXME} from '../../FIXME'\nimport {resolveConditionalProperty} from '../../form/store/conditional-property/resolveConditionalProperty'\nimport {accepts} from '../../form/studio/uploads/accepts'\nimport {randomKey} from '../../form/utils/randomKey'\nimport {getIdPair} from '../../util/draftUtils'\nimport {isRecord} from '../../util/isRecord'\nimport {documentMatchesGroqFilter} from './documentMatchesGroqFilter'\nimport {resolveSchemaTypeForPath} from './resolveSchemaTypeForPath'\nimport {isEmptyValue} from './utils'\n\nexport interface TransferValueError {\n  level: 'warning' | 'error'\n  sourceValue: unknown\n\n  i18n: {\n    key: string\n    args?: Record<string, unknown>\n  }\n}\n\nfunction getObjectTypeFromPath(path: Path): string {\n  if (path.length === 0) {\n    return 'object'\n  }\n\n  const lastPathSegment = path[path.length - 1]\n\n  if (\n    isKeySegment(lastPathSegment) ||\n    isIndexSegment(lastPathSegment) ||\n    isIndexTuple(lastPathSegment)\n  ) {\n    return 'object'\n  }\n\n  return lastPathSegment\n}\n\nfunction isCompatiblePrimitiveType(value: unknown, targetJsonTypes: string[]): boolean {\n  if (typeof value === 'string' && targetJsonTypes.includes('string')) {\n    return true\n  }\n\n  // We allow putting numbers into string fields\n  if (\n    typeof value === 'number' &&\n    (targetJsonTypes.includes('number') || targetJsonTypes.includes('string'))\n  ) {\n    return true\n  }\n\n  if (typeof value === 'boolean' && targetJsonTypes.includes('boolean')) {\n    return true\n  }\n\n  return false\n}\n\nfunction isNumberToStringSchemaType(a: unknown, b: unknown): boolean {\n  return (\n    isRecord(a) &&\n    isRecord(b) &&\n    ((a.jsonType === 'number' && b.jsonType === 'string') ||\n      isNumberToStringSchemaType(a.type, b.type))\n  )\n}\n\nfunction arrayJsonTypes(schemaType: ArraySchemaType): string[] {\n  return schemaType.of.map((type) => type.jsonType)\n}\n\nfunction isNumberToArrayOfStrings(a: unknown, b: unknown): boolean {\n  return (\n    isRecord(a) &&\n    isRecord(b) &&\n    ((a.jsonType === 'number' &&\n      isArrayOfPrimitivesSchemaType(b) &&\n      arrayJsonTypes(b).includes('string')) ||\n      isNumberToArrayOfStrings(a.type, b.type))\n  )\n}\n\nconst defaultKeyGenerator = () => randomKey(12)\n\ninterface ClientWithFetch {\n  fetch: <R = FIXME, Q = Record<string, unknown>>(query: string, params?: Q) => Promise<R>\n}\n\nexport interface TransferValueOptions {\n  validateReferences?: boolean\n  validateAssets?: boolean\n  client?: ClientWithFetch\n}\n\n/**\n * Takes the path and checks if any ancestor is read-only\n * [\"a\", \"b\", \"c\"] - [\"a\"], [\"a\", \"b\"], [\"a\", \"b\", \"c\"],\n */\nfunction resolveReadOnlyAncestor({\n  path,\n  value,\n  schemaType,\n  currentUser,\n}: {\n  path: Path\n  value?: unknown\n  schemaType: SchemaType\n  currentUser: CurrentUser | null\n}): boolean {\n  const isReadOnly = path.find((_, index) => {\n    // Iterates on each of the path segments and checks if the current path is read-only\n    const currentPath = path.slice(0, index + 1)\n    const schemaTypeAtPath = resolveSchemaTypeForPath(schemaType, currentPath, value)\n    if (!schemaTypeAtPath) {\n      throw new Error(`Could not find target schema type at path ${path.join('.')}`)\n    }\n    return resolveConditionalProperty(schemaTypeAtPath.readOnly, {\n      value,\n      parent: null,\n      document: value as ConditionalPropertyCallbackContext['document'],\n      currentUser,\n    })\n  })\n\n  return Boolean(isReadOnly)\n}\n\n// eslint-disable-next-line complexity, max-statements\nexport async function transferValue({\n  sourceRootSchemaType,\n  sourcePath,\n  sourceValue,\n  sourceRootPath = [],\n  targetRootSchemaType,\n  targetRootValue,\n  targetRootPath,\n  targetValue,\n  targetPath,\n  keyGenerator = defaultKeyGenerator,\n  targetDocumentSchemaType,\n  currentUser,\n  options = {\n    validateReferences: true,\n    validateAssets: true,\n    client: undefined,\n  },\n}: {\n  sourceRootSchemaType: SchemaType\n  sourcePath: Path\n  sourceRootPath?: Path\n  sourceValue: unknown\n  targetRootSchemaType: SchemaType\n  targetPath: Path\n  targetRootValue?: unknown\n  targetRootPath: Path\n  targetValue?: unknown\n  keyGenerator?: () => string\n  currentUser: CurrentUser | null\n  options?: TransferValueOptions\n  targetDocumentSchemaType: SchemaType\n}): Promise<{\n  targetValue: unknown\n  errors: TransferValueError[]\n}> {\n  const errors: TransferValueError[] = []\n\n  if (!sourceRootSchemaType) {\n    throw new Error('Source root schema type is not defined')\n  }\n  if (!targetRootSchemaType) {\n    throw new Error('Target root schema type is not defined')\n  }\n\n  const sourceSchemaTypeAtPath = resolveSchemaTypeForPath(\n    sourceRootSchemaType,\n    sourcePath,\n    sourceValue,\n  )\n  const targetSchemaTypeAtPath = resolveSchemaTypeForPath(\n    targetRootSchemaType,\n    targetPath,\n    targetValue,\n  )\n\n  if (!sourceSchemaTypeAtPath) {\n    throw new Error('Could not find source schema type at path')\n  }\n  if (!targetSchemaTypeAtPath) {\n    throw new Error('Could not find target schema type at path')\n  }\n\n  const targetRootSchemaTypeReadOnly = resolveConditionalProperty(targetRootSchemaType.readOnly, {\n    value: targetRootValue,\n    parent: null,\n    document: targetRootValue as ConditionalPropertyCallbackContext['document'],\n    currentUser,\n  })\n  const targetSchemaTypeAtPathReadOnly = resolveConditionalProperty(\n    targetSchemaTypeAtPath.readOnly,\n    {\n      value: targetValue,\n      parent: null,\n      document: targetRootValue as ConditionalPropertyCallbackContext['document'],\n      currentUser,\n    },\n  )\n\n  const isAncestorReadOnly = resolveReadOnlyAncestor({\n    path: targetRootPath,\n    value: targetRootValue,\n    schemaType: targetDocumentSchemaType,\n    currentUser,\n  })\n\n  if (targetRootSchemaTypeReadOnly || targetSchemaTypeAtPathReadOnly || isAncestorReadOnly) {\n    return {\n      targetValue: undefined,\n      errors: [\n        {\n          level: 'error',\n          sourceValue,\n\n          i18n: {\n            key: 'copy-paste.on-paste.validation.read-only-target.description',\n          },\n        },\n      ],\n    }\n  }\n\n  const isIncompatibleAssetSchemaType =\n    (isFileSchemaType(sourceSchemaTypeAtPath) && isImageSchemaType(targetSchemaTypeAtPath)) ||\n    (isImageSchemaType(sourceSchemaTypeAtPath) && isFileSchemaType(targetSchemaTypeAtPath))\n\n  if (isIncompatibleAssetSchemaType) {\n    return {\n      targetValue: undefined,\n      errors: [\n        {\n          level: 'error',\n          sourceValue,\n\n          i18n: {\n            key: 'copy-paste.on-paste.validation.image-file-incompatible.description',\n            args: {\n              sourceSchemaType: sourceRootSchemaType.name,\n              targetSchemaType: targetRootSchemaType.name,\n            },\n          },\n        },\n      ],\n    }\n  }\n\n  // Generally we test that the target schema types are compatible with the source schema types\n  // However we want to make some exceptions:\n  // - Number to string is allowed\n  // - Primitive values to array of primitives is allowed\n  const sourceJsonType = sourceSchemaTypeAtPath.jsonType\n  const targetJsonType = targetSchemaTypeAtPath.jsonType\n  const lastSourcePathSegment = last(sourceRootPath)\n  const isIndexSourcePathSegmentKey =\n    typeof lastSourcePathSegment !== 'undefined' && isIndexSegment(lastSourcePathSegment)\n\n  // Special handling for single primitive array items\n  const isSourceSinglePrimitiveArrayItem =\n    sourcePath.length === 0 &&\n    sourceJsonType === 'array' &&\n    !Array.isArray(sourceValue) &&\n    isIndexSourcePathSegmentKey\n  const isSourcePrimitive = ['number', 'string', 'boolean'].includes(sourceJsonType)\n  const isPrimitiveSourceAndPrimitiveArrayTarget =\n    (isSourcePrimitive || isSourceSinglePrimitiveArrayItem) &&\n    isArrayOfPrimitivesSchemaType(targetSchemaTypeAtPath)\n  const isObjectSourceAndArrayOfObjectsTarget =\n    sourceJsonType === 'object' && isArrayOfObjectsSchemaType(targetSchemaTypeAtPath)\n  const isCompatibleSchemaTypes =\n    sourceJsonType === targetJsonType ||\n    isNumberToStringSchemaType(sourceSchemaTypeAtPath, targetSchemaTypeAtPath) ||\n    isNumberToArrayOfStrings(sourceSchemaTypeAtPath, targetSchemaTypeAtPath) ||\n    isPrimitiveSourceAndPrimitiveArrayTarget ||\n    isObjectSourceAndArrayOfObjectsTarget\n\n  // Test that the target schematypes are compatible\n  if (!isCompatibleSchemaTypes) {\n    return {\n      targetValue: undefined,\n      errors: [\n        {\n          level: 'error',\n          sourceValue,\n\n          i18n: {\n            key: 'copy-paste.on-paste.validation.schema-type-incompatible.description',\n          },\n        },\n      ],\n    }\n  }\n\n  const sourceValueAtPath = getValueAtPath(sourceValue as TypedObject, sourcePath)\n\n  // Objects\n  if (\n    sourceSchemaTypeAtPath.jsonType === 'object' &&\n    targetSchemaTypeAtPath.jsonType === 'object'\n  ) {\n    return collateObjectValue({\n      sourceValue: sourceValueAtPath as TypedObject,\n      targetSchemaType: targetSchemaTypeAtPath as ObjectSchemaType,\n      targetRootValue,\n      targetRootPath,\n      targetPath: [],\n      errors,\n      keyGenerator,\n      options,\n    })\n  }\n\n  // Arrays\n  if (sourceSchemaTypeAtPath.jsonType === 'array' && targetSchemaTypeAtPath.jsonType === 'array') {\n    // There will be a mismatch between the sourceSchemaTypeAtPath (uses []) vs sourceValueAtPath (returns 'String')\n    // when copying a single array item that is a primitive value. We will do an extra check here to make sure we\n    // allow for this conversion\n    // @todo Refactor sourcePath to allways be the relative or complete path\n    const wrappedSourceValueAtPath =\n      isSourceSinglePrimitiveArrayItem && !Array.isArray(sourceValueAtPath)\n        ? [sourceValueAtPath]\n        : sourceValueAtPath\n\n    return collateArrayValue({\n      sourceValue: wrappedSourceValueAtPath,\n      targetSchemaType: targetSchemaTypeAtPath as ArraySchemaType,\n      targetRootValue,\n      targetRootPath,\n      errors,\n      options,\n      keyGenerator,\n    })\n  }\n\n  // If this is a primitive source and primitive array target OR an object source and array of objects target, we need to wrap the source value in an array\n  if (isPrimitiveSourceAndPrimitiveArrayTarget || isObjectSourceAndArrayOfObjectsTarget) {\n    // Here we check if the source value does not contain a type for some reason, or its the type \"object\". This happens if you copy a object into a array\n    // Then we need to get the type from the path\n    let objectType\n\n    // Check if it's an object source with array of objects target\n    // and the source value is a typed object with '_type' of 'object',\n    // OR if the source value is not a typed object. This handles inline objects\n    // where we need to pull the type from the path vs objects that includes a `_type` property\n    // See test case: ./transferValue.test.ts#L771\n    if (\n      (isObjectSourceAndArrayOfObjectsTarget &&\n        isTypedObject(sourceValueAtPath) &&\n        sourceValueAtPath._type === 'object') ||\n      !isTypedObject(sourceValueAtPath)\n    ) {\n      // In this case, determine the object type from the source root path\n      objectType = getObjectTypeFromPath(sourceRootPath)\n    } else if (isTypedObject(sourceValueAtPath)) {\n      // If the source value is a typed object, use its '_type' property\n      objectType = sourceValueAtPath._type\n    } else {\n      // Default case: if none of the above conditions are met, set type to 'object'\n      objectType = 'object'\n    }\n\n    // If the source value is an object, we wrap it in an array\n    const wrappedSourceValue =\n      isObjectSourceAndArrayOfObjectsTarget && !Array.isArray(sourceValueAtPath)\n        ? [{...(sourceValueAtPath as TypedObject), _type: objectType, _key: keyGenerator()}]\n        : ([sourceValueAtPath] as unknown[])\n\n    return collateArrayValue({\n      sourceValue: Array.isArray(sourceValueAtPath) ? sourceValueAtPath : wrappedSourceValue,\n      targetSchemaType: targetSchemaTypeAtPath as ArraySchemaType,\n      targetRootValue,\n      targetRootPath,\n      errors,\n      options,\n      keyGenerator,\n    })\n  }\n\n  // Primitives\n  const primitiveSchemaType = targetSchemaTypeAtPath as\n    | NumberSchemaType\n    | StringSchemaType\n    | BooleanSchemaType\n\n  return collatePrimitiveValue({\n    sourceValue: sourceValueAtPath as unknown,\n    targetSchemaType: primitiveSchemaType,\n    errors,\n  })\n}\n\nasync function collateObjectValue({\n  sourceValue,\n  targetSchemaType,\n  targetPath,\n  targetRootValue,\n  targetRootPath,\n  errors,\n  keyGenerator,\n  options,\n}: {\n  sourceValue: unknown\n  targetSchemaType: ObjectSchemaType\n  targetRootValue: unknown\n  targetRootPath: Path\n  targetPath: Path\n  errors: TransferValueError[]\n  keyGenerator: () => string\n  options: TransferValueOptions\n}) {\n  if (isEmptyValue(sourceValue)) {\n    return {\n      targetValue: undefined,\n      errors,\n    }\n  }\n  const targetValue = {\n    _type: targetSchemaType.name,\n    ...(sourceValue && typeof sourceValue === 'object' && '_key' in sourceValue\n      ? {_key: keyGenerator()}\n      : {}),\n  } as TypedObject\n\n  const sourceValueRef =\n    isAssetObjectStub(sourceValue) && isReference(sourceValue.asset)\n      ? sourceValue.asset._ref\n      : undefined\n  const sourceValueType = isTypedObject(sourceValue) ? sourceValue._type : undefined\n  const isImageRef = sourceValueRef && isImageAssetId(sourceValueRef)\n  const isFileRef = sourceValueRef && isFileAssetId(sourceValueRef)\n  const isIncompatibleImageRef =\n    (sourceValueType === 'image' || isImageRef) && !isImageSchemaType(targetSchemaType)\n  const isIncompatibleFileRef =\n    (sourceValueType === 'file' || isFileRef) && !isFileSchemaType(targetSchemaType)\n  // Special handling for image/file objects to ensure that you can't copy image into file and vice versa\n  if (isTypedObject(sourceValue) && (isIncompatibleImageRef || isIncompatibleFileRef)) {\n    errors.push({\n      level: 'error',\n      sourceValue,\n\n      i18n: {\n        key: 'copy-paste.on-paste.validation.image-file-incompatible.description',\n        args: {\n          sourceSchemaType: sourceValueType,\n          targetSchemaType: targetSchemaType.name,\n        },\n      },\n    })\n    return {\n      targetValue: undefined,\n      errors,\n    }\n  }\n\n  if (\n    options?.validateAssets &&\n    options.client &&\n    (isImageSchemaType(targetSchemaType) || isFileSchemaType(targetSchemaType)) &&\n    targetSchemaType.options?.accept &&\n    isAssetObjectStub(sourceValue) &&\n    isReference(sourceValue.asset)\n  ) {\n    const sourceRef = sourceValue.asset?._ref\n    if (!sourceRef) {\n      return {\n        targetValue: undefined,\n        errors,\n      }\n    }\n\n    try {\n      const assetType = isImageSchemaType(targetSchemaType)\n        ? 'sanity.imageAsset'\n        : 'sanity.fileAsset'\n      const asset = await options.client.fetch(\n        `*[_type == $type &&_id == $ref][0]{mimeType, originalFilename}`,\n        {\n          ref: sourceRef,\n          type: assetType,\n        },\n      )\n\n      if (!asset) {\n        return {\n          targetValue: undefined,\n          errors,\n        }\n      }\n\n      const fileLike = {\n        type: asset.mimeType,\n        name: asset.originalFilename,\n      }\n      const mimeType = asset.mimeType\n\n      if (!accepts(fileLike, targetSchemaType.options.accept)) {\n        errors.push({\n          level: 'error',\n          sourceValue,\n          i18n: {\n            key: 'copy-paste.on-paste.validation.mime-type-incompatible.description',\n            args: {\n              mimeType,\n            },\n          },\n        })\n        return {\n          targetValue: undefined,\n          errors,\n        }\n      }\n    } catch (error) {\n      console.error('Error fetching asset document:', error)\n      errors.push({\n        level: 'error',\n        sourceValue,\n\n        i18n: {\n          key: 'copy-paste.on-paste.validation.mime-type-validation-failed.description',\n        },\n      })\n\n      return {\n        targetValue: undefined,\n        errors,\n      }\n    }\n  }\n\n  // Validate reference types\n  if (isReferenceSchemaType(targetSchemaType)) {\n    const targetReferenceTypes = targetSchemaType.to.map((type) => type.name)\n\n    // Validate the actual reference value\n    if (options?.validateReferences && options.client && isReference(sourceValue)) {\n      try {\n        // We need to fetch the whole reference document if a filter is defined\n        const query = targetSchemaType.options?.filter\n          ? `*[_id in $ids]|order(_updatedAt)[0]`\n          : `*[_id in $ids]|order(_updatedAt)[0]{_id, _type}`\n        const {publishedId, draftId} = getIdPair(sourceValue._ref)\n        const reference = await (options.client as SanityClient).fetch(query, {\n          ids: [publishedId, draftId],\n        })\n\n        // Test that we have an actual referenced object if this is not a weak reference\n        if (!reference && !targetSchemaType.weak) {\n          errors.push({\n            level: 'error',\n            sourceValue: sourceValue,\n\n            i18n: {\n              key: 'copy-paste.on-paste.validation.reference-validation-failed.description',\n              args: {\n                ref: sourceValue._ref,\n              },\n            },\n          })\n\n          return {\n            targetValue: undefined,\n            errors,\n          }\n        }\n\n        // Test that the actual referenced type is allowed by the schema.\n        // This will not trigger if the reference does not exist\n        if (reference && !targetReferenceTypes.includes(reference._type)) {\n          errors.push({\n            level: 'error',\n            sourceValue: sourceValue,\n\n            i18n: {\n              key: 'copy-paste.on-paste.validation.reference-type-incompatible.description',\n              args: {\n                sourceReferenceType: reference._type,\n                targetReferenceTypes: targetReferenceTypes.join(', '),\n              },\n            },\n          })\n\n          return {\n            targetValue: undefined,\n            errors,\n          }\n        }\n\n        // Validate references against filter set on the target schema type\n        if (options.client && targetSchemaType.options?.filter) {\n          const getClient = (clientOptions: {apiVersion: string}) =>\n            (options.client as SanityClient).withConfig(clientOptions)\n          const isMatch = await documentMatchesGroqFilter(\n            (targetRootValue || {}) as SanityDocument,\n            reference,\n            targetSchemaType.options,\n            targetRootPath,\n            getClient,\n          )\n\n          // eslint-disable-next-line max-depth\n          if (!isMatch) {\n            errors.push({\n              level: 'error',\n              sourceValue: sourceValue,\n\n              i18n: {\n                key: 'copy-paste.on-paste.validation.reference-filter-incompatible.description',\n              },\n            })\n\n            return {\n              targetValue: undefined,\n              errors,\n            }\n          }\n        }\n      } catch (error) {\n        console.error('Error fetching reference document:', error)\n        errors.push({\n          level: 'error',\n          sourceValue: targetValue,\n\n          i18n: {\n            key: 'copy-paste.on-paste.validation.reference-validation-failed.description',\n            args: {\n              ref: sourceValue._ref,\n            },\n          },\n        })\n\n        return {\n          targetValue: undefined,\n          errors,\n        }\n      }\n    }\n  }\n\n  const markDefKeyMap: Record<string, string> = {}\n  const isPortableTextBlockWithMarkdefs =\n    isBlockSchemaType(targetSchemaType) &&\n    isPortableTextTextBlock(sourceValue) &&\n    !isEmptyValue(sourceValue.markDefs)\n\n  // Special handling for markDefs on block objects\n  if (isPortableTextBlockWithMarkdefs) {\n    // We want to generate a new key for each markDef preempetively\n    const markDefs = sourceValue.markDefs || []\n\n    // Map old to new markDef key\n    markDefs\n      .filter((item) => item._key)\n      .forEach((item) => {\n        markDefKeyMap[item._key] = keyGenerator()\n      })\n\n    targetValue.markDefs = markDefs.map((item) => ({\n      ...item,\n      _key: markDefKeyMap[item._key],\n    }))\n  }\n\n  const objectMembers = targetSchemaType.fields\n\n  for (const member of objectMembers) {\n    const memberSchemaType = member.type\n    const memberIsArray = isArraySchemaType(memberSchemaType)\n    const memberIsObject = isObjectSchemaType(memberSchemaType)\n    const memberIsPrimitive = isPrimitiveSchemaType(memberSchemaType)\n\n    // Primitive field\n    if (memberIsPrimitive) {\n      const genericValue = sourceValue\n        ? ((sourceValue as TypedObject)[member.name] as unknown)\n        : undefined\n      const collated = collatePrimitiveValue({\n        sourceValue: genericValue,\n        targetSchemaType: memberSchemaType,\n        errors,\n      })\n\n      if (!isEmptyValue(collated.targetValue)) {\n        targetValue[member.name] = collated.targetValue\n      }\n\n      // Object field\n    } else if (memberIsObject) {\n      const collated = await collateObjectValue({\n        sourceValue: getValueAtPath(\n          sourceValue as TypedObject,\n          targetPath.concat(member.name),\n        ) as TypedObject,\n        targetPath: [],\n        targetSchemaType: memberSchemaType,\n        targetRootValue,\n        targetRootPath,\n        errors,\n        options,\n        keyGenerator,\n      })\n\n      if (!isEmptyValue(collated.targetValue)) {\n        targetValue[member.name] = cleanObjectKeys(collated.targetValue as TypedObject)\n      }\n\n      // Array field\n    } else if (memberIsArray) {\n      const genericValue = sourceValue\n        ? ((sourceValue as TypedObject)[member.name] as unknown)\n        : undefined\n      const collated = await collateArrayValue({\n        sourceValue: genericValue,\n        targetSchemaType: memberSchemaType as ArraySchemaType,\n        targetRootValue,\n        targetRootPath,\n        errors,\n        options,\n        keyGenerator,\n      })\n\n      // Return early because we have set the markDefs one level up\n      if (\n        isPortableTextBlockWithMarkdefs &&\n        member.name === 'markDefs' &&\n        !isEmptyValue(targetValue.markDefs)\n      ) {\n        continue\n      }\n\n      if (!isEmptyValue(collated.targetValue)) {\n        targetValue[member.name] = collated.targetValue\n      }\n    }\n  }\n\n  const valueAtTargetPath = getValueAtPath(targetValue, targetPath)\n  const resultingValue = cleanObjectKeys(valueAtTargetPath as TypedObject)\n\n  if (Object.keys(markDefKeyMap).length > 0 && isPortableTextTextBlock(resultingValue)) {\n    // Now we need to update the _key references in the spans\n    resultingValue.children = resultingValue.children.map((child) => {\n      if (isPortableTextSpan(child) && child.marks) {\n        return {\n          ...child,\n          marks: [...child.marks.map((markKey: string) => markDefKeyMap[markKey] || markKey)],\n        }\n      }\n      return child\n    })\n  }\n\n  // Special handling to avoid reference strength mismatches\n  if (isReferenceSchemaType(targetSchemaType)) {\n    if (targetSchemaType.weak) {\n      resultingValue._weak = true\n    } else {\n      delete resultingValue._weak\n    }\n  }\n\n  // Special handling for weak references that will be strengthened on publish\n  if (\n    isReferenceSchemaType(targetSchemaType) &&\n    isReference(sourceValue) &&\n    sourceValue._strengthenOnPublish\n  ) {\n    resultingValue._weak = true\n    resultingValue._strengthenOnPublish = sourceValue._strengthenOnPublish\n  }\n\n  return {\n    targetValue: resultingValue,\n    errors,\n  }\n}\n\nasync function collateArrayValue({\n  sourceValue,\n  targetSchemaType,\n  targetRootValue,\n  targetRootPath,\n  errors,\n  options,\n  keyGenerator,\n}: {\n  sourceValue: unknown\n  targetRootValue: unknown\n  targetRootPath: Path\n  targetSchemaType: ArraySchemaType\n  errors: TransferValueError[]\n  options: TransferValueOptions\n  keyGenerator: () => string\n}): Promise<{\n  targetValue: unknown\n  errors: TransferValueError[]\n}> {\n  let targetValue: unknown[] | undefined = undefined\n\n  const genericValue = sourceValue as unknown[]\n\n  if (!genericValue || !Array.isArray(genericValue)) {\n    return {\n      targetValue: undefined,\n      errors: [\n        {\n          level: 'error',\n          sourceValue,\n\n          i18n: {\n            key: 'copy-paste.on-paste.validation.array-type-incompatible.description',\n            args: {\n              type: typeof genericValue,\n            },\n          },\n        },\n      ],\n    }\n  }\n\n  const isArrayOfPrimitivesMember = isArrayOfPrimitivesSchemaType(targetSchemaType)\n  const isArrayOfObjectsMember = isArrayOfObjectsSchemaType(targetSchemaType)\n\n  // Primitive array\n  if (isArrayOfPrimitivesMember) {\n    const jsonTypes = targetSchemaType.of.map((type) => type.jsonType)\n\n    // We allow converting numbers to string arrays\n    const isNumberCompatible = jsonTypes.includes('number')\n    const transferredItems = genericValue\n      .filter((item) => isCompatiblePrimitiveType(item, jsonTypes))\n      .map((item) => (!isNumberCompatible && typeof item === 'number' ? `${item}` : item))\n    const nonTransferredItems = genericValue.filter(\n      (item) =>\n        !transferredItems.includes(\n          !isNumberCompatible && typeof item === 'number' ? `${item}` : item,\n        ),\n    )\n    if (nonTransferredItems.length > 0) {\n      nonTransferredItems.forEach((item) => {\n        errors.push({\n          level: transferredItems.length > 0 ? 'warning' : 'error',\n          sourceValue: item,\n\n          i18n: {\n            key: 'copy-paste.on-paste.validation.array-value-incompatible.description',\n            args: {\n              type: typeof item,\n            },\n          },\n        })\n      })\n    }\n\n    if (transferredItems.length > 0) {\n      targetValue = transferredItems\n    }\n  }\n\n  // Object array\n  if (isArrayOfObjectsMember) {\n    const value = sourceValue as TypedObject[]\n    const transferredItems = value.filter((item) =>\n      targetSchemaType.of.some((type) => type.name === item._type),\n    )\n    const nonTransferredItems = value.filter(\n      (item) => !targetSchemaType.of.some((type) => type.name === item._type),\n    )\n\n    if (transferredItems.length === 0) {\n      targetValue = undefined\n    } else {\n      const collatedItems = await Promise.all(\n        transferredItems.map((item) =>\n          collateObjectValue({\n            sourceValue: item,\n            targetSchemaType: targetSchemaType.of.find(\n              (type) => type.name === item._type,\n            )! as ObjectSchemaType,\n            targetPath: [],\n            targetRootValue,\n            targetRootPath,\n            errors,\n            options,\n            keyGenerator,\n          }),\n        ),\n      )\n      targetValue = collatedItems\n        .map((item) => item.targetValue as TypedObject)\n        .filter((item) => !isEmptyValue(item))\n    }\n\n    if (nonTransferredItems.length > 0) {\n      nonTransferredItems.forEach((item) => {\n        errors.push({\n          level: transferredItems.length > 0 ? 'warning' : 'error',\n          sourceValue: item,\n\n          i18n: {\n            key: 'copy-paste.on-paste.validation.array-value-incompatible.description',\n            args: {\n              type: item._type || typeof item,\n            },\n          },\n        })\n      })\n    }\n  }\n\n  return {\n    targetValue,\n    errors,\n  }\n}\n\nfunction collatePrimitiveValue({\n  sourceValue,\n  targetSchemaType,\n  errors,\n}: {\n  sourceValue: unknown\n  targetSchemaType: NumberSchemaType | StringSchemaType | BooleanSchemaType\n  errors: TransferValueError[]\n}): {\n  targetValue: unknown\n  errors: TransferValueError[]\n} {\n  let targetValue: unknown\n\n  const primitiveValue = sourceValue as unknown\n  if (typeof primitiveValue === 'undefined') {\n    return {\n      targetValue: undefined,\n      errors,\n    }\n  }\n\n  const isSamePrimitiveType = targetSchemaType.jsonType === typeof primitiveValue\n\n  // We also allow numbers to be transferred to string fields\n  const isNumberToString =\n    typeof primitiveValue === 'number' && targetSchemaType.jsonType === 'string'\n\n  if (isSamePrimitiveType || isNumberToString) {\n    const isNumberOrString =\n      typeof primitiveValue === 'string' || typeof primitiveValue === 'number'\n    // Test that the primitive value is allowed if this is a string list schema type\n    if (\n      (isNumberSchemaType(targetSchemaType) || isStringSchemaType(targetSchemaType)) &&\n      isNumberOrString\n    ) {\n      const allowedStrings =\n        targetSchemaType.options?.list?.map((item) =>\n          typeof item === 'string' || typeof item === 'number' ? item : item.value,\n        ) || []\n\n      if (allowedStrings.length > 0 && !allowedStrings.includes(primitiveValue)) {\n        errors.push({\n          level: 'error',\n          sourceValue: primitiveValue,\n\n          i18n: {\n            key: 'copy-paste.on-paste.validation.string-value-incompatible.description',\n            args: {\n              value: primitiveValue,\n              allowedStrings,\n            },\n          },\n        })\n      }\n    }\n\n    // Convert number to string if needed\n    targetValue = isNumberToString ? `${primitiveValue}` : primitiveValue\n  } else {\n    errors.push({\n      level: 'error',\n      sourceValue: primitiveValue,\n\n      i18n: {\n        key: 'copy-paste.on-paste.validation.primitive-type-incompatible.description',\n        args: {\n          type: typeof primitiveValue,\n        },\n      },\n    })\n  }\n\n  return {\n    targetValue,\n    errors,\n  }\n}\n\nfunction cleanObjectKeys(obj: TypedObject): TypedObject {\n  const disallowedKeys = ['_id', '_createdAt', '_updatedAt', '_rev']\n  return Object.keys(obj).reduce((acc, key) => {\n    if (disallowedKeys.includes(key)) {\n      return acc\n    }\n    return {...acc, [key]: obj[key]}\n  }, {}) as TypedObject\n}\n","/* eslint-disable max-statements */\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {isIndexSegment, isKeySegment, type Path, type PathSegment} from '@sanity/types'\nimport {useToast} from '@sanity/ui'\nimport * as PathUtils from '@sanity/util/paths'\nimport {flatten, isEqual, last} from 'lodash'\nimport {type ReactNode, useCallback, useContext, useMemo, useState} from 'react'\nimport {CopyPasteContext} from 'sanity/_singletons'\n\nimport {\n  type FormDocumentValue,\n  type FormPatch,\n  getPublishedId,\n  getValueAtPath,\n  insert,\n  PatchEvent,\n  set,\n  setIfMissing,\n  useClient,\n  useCurrentUser,\n  useSchema,\n  useTranslation,\n} from '../..'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../studioClient'\nimport {FieldCopied, FieldPasted} from './__telemetry__/copyPaste.telemetry'\nimport {resolveSchemaTypeForPath} from './resolveSchemaTypeForPath'\nimport {transferValue, type TransferValueOptions} from './transferValue'\nimport {\n  type CopyOptions,\n  type DocumentMeta,\n  type PasteOptions,\n  type SanityClipboardItem,\n} from './types'\nimport {getClipboardItem, isEmptyValue, writeClipboardItem} from './utils'\n/**\n * @beta\n * @hidden\n */\nexport const CopyPasteProvider: React.FC<{\n  children: ReactNode\n}> = ({children}) => {\n  const toast = useToast()\n  const telemetry = useTelemetry()\n  const schema = useSchema()\n  const currentUser = useCurrentUser()\n\n  const {t} = useTranslation('copy-paste')\n  const client = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n\n  const [documentMeta, setDocumentMetaState] = useState<DocumentMeta | null>(null)\n\n  const setDocumentMeta = useCallback(\n    ({documentId, documentType, schemaType, onChange}: DocumentMeta) => {\n      const processedMeta = {\n        documentId: getPublishedId(documentId),\n        documentType,\n        schemaType,\n        onChange,\n      }\n\n      setDocumentMetaState((prevMeta) => {\n        if (isEqual(prevMeta, processedMeta)) {\n          return prevMeta // No update if the new meta is the same as the current\n        }\n        return processedMeta\n      })\n    },\n    [],\n  )\n\n  const onCopy = useCallback(\n    async (path: Path, value: FormDocumentValue | undefined, options: CopyOptions) => {\n      // guard against `documentMeta` having not been set yet\n      if (!documentMeta) return\n\n      const {documentId, documentType, schemaType} = documentMeta\n\n      const schemaTypeAtPath = resolveSchemaTypeForPath(schemaType, path, value)\n      if (!schemaTypeAtPath) {\n        toast.push({\n          status: 'error',\n          title: t('copy-paste.on-copy.validation.schema-type-incompatible.title', {\n            path: PathUtils.toString(path),\n          }),\n        })\n        return\n      }\n\n      const isDocument = schemaTypeAtPath.type?.name === 'document'\n      const valueAtPath = getValueAtPath(value, path)\n\n      // Test if the value is empty (undefined, empty object or empty array)\n      if (isEmptyValue(valueAtPath)) {\n        toast.push({\n          status: 'warning',\n          title: t('copy-paste.on-copy.validation.no-value.title'),\n        })\n        return\n      }\n\n      const lastSegment = path.length > 0 ? (last(path) as PathSegment) : undefined\n      const isLastSegmentKeyOrIndex =\n        lastSegment && (isKeySegment(lastSegment) || isIndexSegment(lastSegment))\n\n      // If copying an array item, we always set the patch type to append\n      // This only means that it will be appended IF the target schema type is an array\n      const isAppend =\n        options.context.source === 'arrayItem' ||\n        isLastSegmentKeyOrIndex ||\n        options.patchType === 'append'\n      const normalizedPath = isAppend && isLastSegmentKeyOrIndex ? path.slice(0, -1) : path\n      const patchType = isAppend ? 'append' : 'replace'\n\n      // If append and the last path segment is a key or index segment, remove it and wrap in array\n      // This simplifies the logic when we want to paste into another document that can't look up existing\n      // value by key or index\n      const shouldWrapInArray = isLastSegmentKeyOrIndex && !Array.isArray(valueAtPath)\n\n      const isArrayItem = options.context.source === 'arrayItem'\n      const payloadValue: SanityClipboardItem = {\n        type: 'sanityClipboardItem',\n        documentId,\n        documentType,\n        isDocument,\n        schemaTypeName: schemaTypeAtPath.name,\n        valuePath: normalizedPath,\n        value: shouldWrapInArray ? [valueAtPath] : valueAtPath,\n        patchType,\n      }\n\n      telemetry.log(FieldCopied, {\n        context: options?.context?.source || 'unknown',\n        schemaTypes: [schemaTypeAtPath.jsonType],\n      })\n\n      const isWrittenToClipboard = await writeClipboardItem(payloadValue)\n\n      if (!isWrittenToClipboard) {\n        toast.push({\n          status: 'error',\n          title: t('copy-paste.on-copy.validation.clipboard-not-supported.title'),\n        })\n      }\n    },\n    [documentMeta, telemetry, toast, t],\n  )\n\n  const onPaste = useCallback(\n    async (targetPath: Path, value: FormDocumentValue | undefined, options: PasteOptions) => {\n      // guard against `documentMeta` having not been set yet\n      if (!documentMeta) return\n\n      const {schemaType: targetDocumentSchemaType, onChange} = documentMeta\n      const targetSchemaType = resolveSchemaTypeForPath(\n        targetDocumentSchemaType,\n        targetPath,\n        value,\n      )!\n\n      const clipboardItem = await getClipboardItem()\n\n      // Return early if no clipboard item or if clipboard item is invalid\n      if (!clipboardItem) {\n        toast.push({\n          status: 'info',\n          title: t('copy-paste.on-paste.validation.clipboard-empty.title'),\n        })\n        return\n      }\n\n      if (!clipboardItem.documentType) {\n        toast.push({\n          status: 'error',\n          title: t('copy-paste.on-paste.validation.clipboard-invalid.title'),\n        })\n        return\n      }\n\n      const sourceDocumentSchemaType = schema.get(clipboardItem.documentType)\n\n      if (!sourceDocumentSchemaType) {\n        toast.push({\n          status: 'error',\n          title: t('copy-paste.on-paste.validation.clipboard-invalid.title'),\n        })\n        return\n      }\n\n      const updateItems: {patches: FormPatch[]; targetSchemaTypeTitle: string}[] = []\n      const copiedJsonTypes: string[] = []\n\n      const sourceSchemaType = resolveSchemaTypeForPath(\n        sourceDocumentSchemaType,\n        clipboardItem.valuePath,\n        value,\n      )\n\n      if (!sourceSchemaType) {\n        toast.push({\n          status: 'error',\n          title: t('copy-paste.on-paste.validation.schema-type-incompatible.title', {\n            path: PathUtils.toString(clipboardItem.valuePath),\n          }),\n        })\n        return\n      }\n\n      if (!targetDocumentSchemaType) {\n        toast.push({\n          status: 'error',\n          title: t('copy-paste.on-paste.validation.schema-type-incompatible.title', {\n            path: PathUtils.toString(targetPath),\n          }),\n        })\n        return\n      }\n\n      const targetSchemaTypeTitle = targetSchemaType.title || targetSchemaType.name\n      const transferValueOptions = {\n        targetDocumentSchemaType: targetDocumentSchemaType,\n        sourceRootSchemaType: sourceSchemaType,\n        sourcePath: [],\n        sourceRootPath: clipboardItem.valuePath,\n        sourceValue: clipboardItem.value,\n        targetRootSchemaType: targetSchemaType,\n        targetPath: [],\n        // This will mainly be used for validating references with filter callback that\n        // needs the document and absolute path to the field\n        targetRootPath: targetPath,\n        targetRootValue: value,\n        currentUser,\n        options: {\n          validateAssets: true,\n          validateReferences: true,\n          client,\n        } as TransferValueOptions,\n      }\n      copiedJsonTypes.push(sourceSchemaType.jsonType)\n\n      try {\n        const {targetValue, errors} = await transferValue(transferValueOptions)\n        const nonWarningErrors = errors.filter((error) => error.level !== 'warning')\n        const _isEmptyValue = isEmptyValue(targetValue)\n\n        if (nonWarningErrors.length > 0) {\n          const description = t(nonWarningErrors[0].i18n.key, nonWarningErrors[0].i18n.args)\n\n          toast.push({\n            status: 'error',\n            title: t('copy-paste.on-paste.validation.clipboard-invalid.title'),\n            description,\n          })\n          return\n        }\n\n        if (errors.length > 0 && !_isEmptyValue) {\n          const description = errors.map((error) => t(error.i18n.key, error.i18n.args)).join(', ')\n\n          toast.push({\n            status: 'warning',\n            title: t('copy-paste.on-paste.validation.partial-warning.title'),\n            description,\n          })\n        }\n\n        if (_isEmptyValue) {\n          toast.push({\n            status: 'warning',\n            title: t('copy-paste.on-paste.validation.clipboard-empty.title'),\n          })\n          return\n        }\n\n        const patchType = clipboardItem?.patchType || 'replace'\n\n        // If transferring a non-array value into an array, we need to append to it instead\n        const isAppendable =\n          (clipboardItem.schemaTypeName !== 'array' && targetSchemaType.jsonType === 'array') ||\n          patchType === 'append'\n\n        // When pasting into an array, we need to insert the value at the correct index\n        const isAppendPath = isAppendable && targetPath.length > 0\n        const isAppendArray = isAppendPath && targetSchemaType.jsonType === 'array'\n        const insertPath =\n          isAppendable && targetPath.length > 0\n            ? [...targetPath.slice(0, -1), `${targetPath.slice(-1)?.[0]}[-1]`]\n            : targetPath\n\n        // Always ensure the array exists\n        const prefixPatches =\n          targetSchemaType.jsonType === 'array' ? [setIfMissing([], targetPath)] : []\n\n        updateItems.push({\n          patches: isAppendArray\n            ? [...prefixPatches, insert(targetValue as unknown[], 'after', insertPath)]\n            : [...prefixPatches, set(targetValue, targetPath)],\n          targetSchemaTypeTitle,\n        })\n      } catch (error) {\n        toast.push({\n          status: 'error',\n          title: error.message,\n        })\n        return\n      }\n\n      telemetry.log(FieldPasted, {\n        context: options?.context?.source || 'unknown',\n        schemaTypes: copiedJsonTypes,\n      })\n\n      if (updateItems.length) {\n        const allPatches = flatten(updateItems.map(({patches}) => patches))\n        onChange(PatchEvent.from(allPatches))\n        // TODO: missing case with multiple updated items?\n      }\n    },\n    [documentMeta, schema, currentUser, client, telemetry, toast, t],\n  )\n\n  const contextValue = useMemo(\n    () => ({\n      setDocumentMeta,\n      onCopy,\n      onPaste,\n    }),\n    [onCopy, onPaste, setDocumentMeta],\n  )\n\n  return <CopyPasteContext.Provider value={contextValue}>{children}</CopyPasteContext.Provider>\n}\n\n/**\n * @beta\n * @hidden\n */\nexport const useCopyPaste = () => {\n  const context = useContext(CopyPasteContext)\n  if (!context) {\n    throw new Error('useCopyPaste must be used within a CopyPasteProvider')\n  }\n  return context\n}\n","/* eslint-disable camelcase */\n\nimport {getTheme_v2, rgba} from '@sanity/ui/theme'\nimport {createGlobalStyle, css} from 'styled-components'\n\nconst SCROLLBAR_SIZE = 12 // px\nconst SCROLLBAR_BORDER_SIZE = 4 // px\n\n// Construct a resize handle icon as a data URI, to be displayed in browsers that support the `::-webkit-resizer` selector.\nfunction buildResizeHandleDataUri(hexColor: string) {\n  const encodedStrokeColor = encodeURIComponent(hexColor)\n  const encodedSvg = `%3Csvg width='9' height='9' viewBox='0 0 9 9' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 8L8 1' stroke='${encodedStrokeColor}' stroke-linecap='round'/%3E%3Cpath d='M5 8L8 5' stroke='${encodedStrokeColor}' stroke-linecap='round'/%3E%3C/svg%3E%0A`\n  return `url(\"data:image/svg+xml,${encodedSvg}\")`\n}\n\nexport const GlobalStyle = createGlobalStyle((props) => {\n  const {color, font} = getTheme_v2(props.theme)\n\n  return css`\n    ::-webkit-resizer {\n      background-image: ${buildResizeHandleDataUri(color.icon)};\n      background-repeat: no-repeat;\n      background-position: bottom right;\n    }\n\n    ::-webkit-scrollbar {\n      width: ${SCROLLBAR_SIZE}px;\n      height: ${SCROLLBAR_SIZE}px;\n    }\n\n    ::-webkit-scrollbar-corner {\n      background-color: transparent;\n    }\n\n    ::-webkit-scrollbar-thumb {\n      background-clip: content-box;\n      background-color: var(--card-border-color, ${color.border});\n      border: ${SCROLLBAR_BORDER_SIZE}px solid transparent;\n    }\n\n    ::-webkit-scrollbar-thumb:hover {\n      background-color: var(--card-muted-fg-color, ${color.muted.fg});\n    }\n\n    ::-webkit-scrollbar-track {\n      background: transparent;\n    }\n\n    *::selection {\n      background-color: ${rgba(color.focusRing, 0.3)};\n    }\n\n    html {\n      background-color: ${color.bg};\n    }\n\n    body {\n      scrollbar-gutter: stable;\n    }\n\n    #sanity {\n      font-family: ${font.text.family};\n    }\n\n    b {\n      font-weight: ${font.text.weights.medium};\n    }\n\n    strong {\n      font-weight: ${font.text.weights.medium};\n    }\n  `\n})\n","import {useToast} from '@sanity/ui'\nimport {isObject} from 'lodash'\nimport {useEffect} from 'react'\n\nimport {ConfigResolutionError, SchemaError} from '../config'\nimport {CorsOriginError} from '../store'\nimport {globalScope} from '../util'\n\nconst errorChannel = globalScope.__sanityErrorChannel\n\n/**\n * Attaches a listener to the global error channel and displays a toast when a (unknown)\n * error occurs. Compares the last displayed error message with the current\n *\n * @internal\n */\nexport function ErrorLogger(): null {\n  const {push: pushToast} = useToast()\n\n  useEffect(() => {\n    if (!errorChannel) return undefined\n\n    // errorChannel.subscribe() returns a unsubscriber function.\n    // By returning it from this `useEffect`, it'll unsubscribe on unmount.\n    return errorChannel.subscribe((msg) => {\n      // NOTE: Certain errors (such as the `ResizeObserver loop limit exceeded` error) is thrown\n      // by the browser, and does not include an `error` property. We ignore these errors.\n      if (!msg.error) {\n        return\n      }\n\n      // For errors that we \"expect\", eg have specific error screens for, do not push a toast\n      if (isKnownError(msg.error)) {\n        return\n      }\n\n      console.error(msg.error)\n\n      pushToast({\n        // Use the error message as the ID in order to prevent duplicates from showing\n        // A bit of a hack, but serves\n        id: msg.error.message,\n        closable: true,\n        description: msg.error.message,\n        duration: 5000,\n        title: 'Uncaught error',\n        status: 'error',\n      })\n    })\n  }, [pushToast])\n\n  return null\n}\n\nexport function isKnownError(err: Error): boolean {\n  if (err instanceof SchemaError) {\n    return true\n  }\n\n  if (err instanceof CorsOriginError) {\n    return true\n  }\n\n  if (err instanceof ConfigResolutionError) {\n    return true\n  }\n\n  // This is a special case for the Vite dev server stopping error\n  if (isObject(err) && 'ViteDevServerStoppedError' in err && err.ViteDevServerStoppedError) {\n    return true\n  }\n\n  return false\n}\n","import {useMemo} from 'react'\nimport {PerspectiveContext} from 'sanity/_singletons'\n\nimport {getReleasesPerspectiveStack} from '../releases/hooks/utils'\nimport {useActiveReleases} from '../releases/store/useActiveReleases'\nimport {isSystemBundleName} from '../util/draftUtils'\nimport {EMPTY_ARRAY} from '../util/empty'\nimport {getSelectedPerspective} from './getSelectedPerspective'\nimport {type PerspectiveContextValue, type ReleaseId, type SelectedPerspective} from './types'\n\n/**\n * @internal\n */\nexport function PerspectiveProvider({\n  children,\n  selectedPerspectiveName,\n  excludedPerspectives = EMPTY_ARRAY,\n}: {\n  children: React.ReactNode\n  selectedPerspectiveName: 'published' | ReleaseId | undefined\n  excludedPerspectives?: string[]\n}) {\n  const {data: releases} = useActiveReleases()\n\n  const selectedPerspective: SelectedPerspective = useMemo(\n    () => getSelectedPerspective(selectedPerspectiveName, releases),\n    [selectedPerspectiveName, releases],\n  )\n\n  const perspectiveStack = useMemo(\n    () =>\n      getReleasesPerspectiveStack({\n        releases,\n        selectedPerspectiveName,\n        excludedPerspectives,\n      }),\n    [releases, selectedPerspectiveName, excludedPerspectives],\n  )\n\n  const value: PerspectiveContextValue = useMemo(\n    () => ({\n      selectedPerspective,\n      selectedPerspectiveName,\n      selectedReleaseId: isSystemBundleName(selectedPerspectiveName)\n        ? undefined\n        : selectedPerspectiveName,\n      perspectiveStack,\n      excludedPerspectives,\n    }),\n    [selectedPerspective, selectedPerspectiveName, perspectiveStack, excludedPerspectives],\n  )\n  return <PerspectiveContext.Provider value={value}>{children}</PerspectiveContext.Provider>\n}\n","import {Text, useToast} from '@sanity/ui'\nimport {type ReactNode, useEffect, useMemo} from 'react'\nimport {useRouter} from 'sanity/router'\n\nimport {useTranslation} from '../i18n/hooks/useTranslation'\nimport {Translate} from '../i18n/Translate'\nimport {useActiveReleases} from '../releases/store/useActiveReleases'\nimport {useArchivedReleases} from '../releases/store/useArchivedReleases'\nimport {LATEST} from '../releases/util/const'\nimport {getReleaseIdFromReleaseDocumentId} from '../releases/util/getReleaseIdFromReleaseDocumentId'\nimport {isPublishedPerspective} from '../releases/util/util'\nimport {EMPTY_ARRAY} from '../util/empty'\nimport {PerspectiveProvider} from './PerspectiveProvider'\nimport {type ReleaseId} from './types'\nimport {usePerspective} from './usePerspective'\nimport {useSetPerspective} from './useSetPerspective'\n\nconst ResetPerspectiveHandler = () => {\n  const toast = useToast()\n  const {t} = useTranslation()\n  const {data: releases, loading: releasesLoading} = useActiveReleases()\n  const {data: archivedReleases} = useArchivedReleases()\n  const {selectedPerspectiveName} = usePerspective()\n  const setPerspective = useSetPerspective()\n\n  useEffect(() => {\n    // clear the perspective param when it is not an active release\n    if (\n      releasesLoading ||\n      !selectedPerspectiveName ||\n      isPublishedPerspective(selectedPerspectiveName)\n    )\n      return\n    const isCurrentPerspectiveValid = releases.some(\n      (release) => getReleaseIdFromReleaseDocumentId(release._id) === selectedPerspectiveName,\n    )\n    if (!isCurrentPerspectiveValid) {\n      setPerspective(LATEST)\n      const archived = archivedReleases.find(\n        (r) => getReleaseIdFromReleaseDocumentId(r._id) === selectedPerspectiveName,\n      )\n\n      toast.push({\n        id: `bundle-deleted-toast-${selectedPerspectiveName}`,\n        status: 'warning',\n        title: (\n          <Text muted size={1}>\n            <Translate\n              t={t}\n              i18nKey={\n                archived\n                  ? 'release.toast.archived-release.title'\n                  : 'release.toast.not-found-release.title'\n              }\n              values={{title: archived?.metadata?.title || selectedPerspectiveName}}\n            />\n          </Text>\n        ),\n        duration: 10000,\n      })\n    }\n  }, [\n    archivedReleases,\n    selectedPerspectiveName,\n    releases,\n    releasesLoading,\n    setPerspective,\n    toast,\n    t,\n  ])\n  return null\n}\n\n/**\n * This component is not meant to be exported by `sanity`, it's meant only for internal use from the `<StudioProvider>` file.\n * It sets the `<PerspectiveProvider>` listening to the changes happening in the router.\n *\n * If you need to add the PerspectiveProvider you should use that component directly.\n * It's up to you to define how the selectedPerspectiveName and excludedPerspectives should worl.\n */\nexport function GlobalPerspectiveProvider({children}: {children: ReactNode}) {\n  const router = useRouter()\n\n  const selectedPerspectiveName = router.stickyParams.perspective as\n    | 'published'\n    | ReleaseId\n    | undefined\n\n  const excludedPerspectives = useMemo(\n    () => router.stickyParams.excludedPerspectives?.split(',') || EMPTY_ARRAY,\n    [router.stickyParams.excludedPerspectives],\n  )\n  return (\n    <PerspectiveProvider\n      selectedPerspectiveName={selectedPerspectiveName}\n      excludedPerspectives={excludedPerspectives}\n    >\n      {children}\n      <ResetPerspectiveHandler />\n    </PerspectiveProvider>\n  )\n}\n","import {type ComponentType, type ReactNode, useEffect, useState} from 'react'\n\nimport {LoadingBlock} from '../components/loadingBlock'\nimport {useActiveWorkspace} from './activeWorkspaceMatcher'\nimport {AuthenticateScreen, NotAuthenticatedScreen, RequestAccessScreen} from './screens'\n\ninterface AuthBoundaryProps {\n  children: ReactNode\n  AuthenticateComponent?: ComponentType\n  LoadingComponent?: ComponentType\n  NotAuthenticatedComponent?: ComponentType\n}\n\nexport function AuthBoundary({\n  children,\n  AuthenticateComponent = AuthenticateScreen,\n  LoadingComponent = LoadingBlock,\n  NotAuthenticatedComponent = NotAuthenticatedScreen,\n}: AuthBoundaryProps) {\n  const [error, handleError] = useState<unknown>(null)\n  if (error) throw error\n\n  const [loggedIn, setLoggedIn] = useState<'logged-in' | 'logged-out' | 'loading' | 'unauthorized'>(\n    'loading',\n  )\n  const [loginProvider, setLoginProvider] = useState<string | undefined>()\n  const {activeWorkspace} = useActiveWorkspace()\n\n  useEffect(() => {\n    activeWorkspace.auth.handleCallbackUrl?.().catch(handleError)\n  }, [activeWorkspace.auth])\n\n  useEffect(() => {\n    const subscription = activeWorkspace.auth.state.subscribe({\n      next: ({authenticated, currentUser}) => {\n        if (currentUser?.roles?.length === 0) {\n          setLoggedIn('unauthorized')\n          if (currentUser?.provider) setLoginProvider(currentUser.provider)\n          return\n        }\n\n        setLoggedIn(authenticated ? 'logged-in' : 'logged-out')\n      },\n      error: handleError,\n    })\n\n    return () => {\n      subscription.unsubscribe()\n    }\n  }, [activeWorkspace])\n\n  if (loggedIn === 'loading') return <LoadingComponent />\n\n  if (loggedIn === 'unauthorized') {\n    // If using unverified `sanity` login provider, send them\n    // to basic NotAuthorized component.\n    if (!loginProvider || loginProvider === 'sanity') return <NotAuthenticatedComponent />\n    // Otherwise, send user to request access screen\n    return <RequestAccessScreen />\n  }\n\n  // NOTE: there is currently a bug where the `AuthenticateComponent` will\n  // flash after the first login with cookieless mode. See `createAuthStore`\n  // for details\n  if (loggedIn === 'logged-out') return <AuthenticateComponent />\n\n  return <>{children}</>\n}\n","export const Z_OFFSET = {\n  toast: [100, 11000],\n}\n","import {useEffect} from 'react'\n\nimport {type ErrorReporter} from '../error/errorReporter'\nimport {useClient} from '../hooks'\n\nconst CONSENT_CLIENT_OPTIONS = {apiVersion: '2023-12-18'}\n\n/**\n * React component that checks for the users' telemetry consent, enabling or disabling error reporting\n * on the passed error reporter accordingly. Reporter should default to being disabled/buffer\n * events until the consent status is checked.\n *\n * Needs to be mounted within a SourceProvider to work correctly.\n *\n * @param props - Takes an error reporting instance to enable or disable based on the users' consent\n * @returns Explicitly return null. Component only has side effects.\n */\nexport function MaybeEnableErrorReporting(props: {errorReporter: ErrorReporter}): null {\n  const {errorReporter} = props\n  const client = useClient(CONSENT_CLIENT_OPTIONS)\n\n  useEffect(() => {\n    const request = client.observable\n      .request({uri: '/intake/telemetry-status', tag: 'telemetry-consent.error-reporting'})\n      .subscribe({\n        next: (res) => {\n          if (res?.status === 'granted') {\n            errorReporter.enable()\n          } else {\n            errorReporter.disable()\n          }\n        },\n        error: (err) => {\n          console.error('Error fetching telemetry status', err)\n        },\n      })\n\n    return () => request.unsubscribe()\n  }, [client, errorReporter])\n\n  return null\n}\n","// object like {sanity: '3.40.1'}\ninterface VersionMap {\n  [key: string]: string | undefined\n}\n\n// @ts-expect-error: __SANITY_STAGING__ is a global env variable set by the vite config\nconst isStaging = typeof __SANITY_STAGING__ !== 'undefined' && __SANITY_STAGING__ === true\n\n// e2e tests also check for this URL pattern -- please update if it changes!\nconst MODULES_URL_VERSION = 'v1'\nconst MODULES_HOST = isStaging ? 'https://sanity-cdn.work' : 'https://sanity-cdn.com'\nconst MODULES_URL = `${MODULES_HOST}/${MODULES_URL_VERSION}/modules/`\n\nconst fetchLatestVersionForPackage = async (pkg: string, version: string) => {\n  try {\n    // On every request it should be a new timestamp, so we can actually get a new version notification\n    const timestamp = `t${Math.floor(Date.now() / 1000)}`\n    const res = await fetch(`${MODULES_URL}${pkg}/default/^${version}/${timestamp}`, {\n      headers: {\n        accept: 'application/json',\n      },\n    })\n    return res.json().then((data) => data.packageVersion)\n  } catch (err) {\n    console.error('Failed to fetch latest version for package', pkg, 'Error:', err)\n    return undefined\n  }\n}\n\n/*\n *\n */\nexport const checkForLatestVersions = async (\n  packages: Record<string, string>,\n): Promise<VersionMap | undefined> => {\n  const results = await Promise.all(\n    Object.entries(packages).map(async ([pkg, version]) => [\n      pkg,\n      await fetchLatestVersionForPackage(pkg, version),\n    ]),\n  )\n  const packageVersions: VersionMap = Object.fromEntries(results)\n  return packageVersions\n}\n","import {Box, useToast} from '@sanity/ui'\nimport {type ReactNode, useCallback, useEffect, useRef} from 'react'\nimport semver from 'semver'\n\nimport {Button} from '../../../ui-components'\nimport {hasSanityPackageInImportMap} from '../../environment/hasSanityPackageInImportMap'\nimport {useTranslation} from '../../i18n'\nimport {SANITY_VERSION} from '../../version'\nimport {checkForLatestVersions} from './checkForLatestVersions'\n\n// How often to to check last timestamp. at 30 min, should fetch new version\nconst REFRESH_INTERVAL = 1000 * 30 // every 30 seconds\nconst SHOW_TOAST_FREQUENCY = 1000 * 60 * 30 // half hour\n\nconst currentPackageVersions: Record<string, string> = {\n  sanity: SANITY_VERSION,\n}\n\nexport function PackageVersionStatusProvider({children}: {children: ReactNode}) {\n  const toast = useToast()\n  const {t} = useTranslation()\n  const lastCheckedTimeRef = useRef<number | null>(null)\n\n  const autoUpdatingPackages = hasSanityPackageInImportMap()\n\n  const showNewPackageAvailableToast = useCallback(() => {\n    const onClick = () => {\n      window.location.reload()\n    }\n\n    toast.push({\n      id: 'new-package-available',\n      title: t('package-version.new-package-available.title'),\n      description: (\n        <Box paddingTop={2}>\n          <Button\n            size=\"large\"\n            aria-label={t('package-version.new-package-available.reload-button')}\n            onClick={onClick}\n            text={t('package-version.new-package-available.reload-button')}\n            tone={'primary'}\n          />\n        </Box>\n      ),\n      closable: true,\n      status: 'info',\n      /*\n       * We want to show the toast until the user closes it.\n       * Because of the toast ID, we should never see it twice.\n       * https://developer.mozilla.org/en-US/docs/Web/API/setTimeout#maximum_delay_value\n       */\n      duration: 1000 * 60 * 60 * 24 * 24,\n    })\n  }, [toast, t])\n\n  useEffect(() => {\n    if (!autoUpdatingPackages) return undefined\n\n    const fetchLatestVersions = () => {\n      if (\n        lastCheckedTimeRef.current &&\n        lastCheckedTimeRef.current + SHOW_TOAST_FREQUENCY > Date.now()\n      ) {\n        return\n      }\n\n      checkForLatestVersions(currentPackageVersions).then((latestPackageVersions) => {\n        lastCheckedTimeRef.current = Date.now()\n\n        if (!latestPackageVersions) return\n\n        const foundNewVersion = Object.entries(latestPackageVersions).some(([pkg, version]) => {\n          if (!version || !currentPackageVersions[pkg]) return false\n          return semver.gt(version, currentPackageVersions[pkg])\n        })\n\n        if (foundNewVersion) {\n          showNewPackageAvailableToast()\n        }\n      })\n    }\n\n    // Run on first render\n    fetchLatestVersions()\n\n    // Set interval for subsequent runs\n    const intervalId = setInterval(fetchLatestVersions, REFRESH_INTERVAL)\n\n    return () => clearInterval(intervalId)\n  }, [autoUpdatingPackages, showNewPackageAvailableToast])\n\n  return <>{children}</>\n}\n","/* eslint-disable camelcase */\nimport {CloseIcon} from '@sanity/icons'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {Box, Card, Stack, Text} from '@sanity/ui'\n// eslint-disable-next-line camelcase\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {useEffect} from 'react'\nimport {css, keyframes, styled} from 'styled-components'\n\nimport {Button, Popover} from '../../../ui-components'\nimport {useTranslation} from '../../i18n/hooks/useTranslation'\nimport {SANITY_VERSION} from '../../version'\nimport {ProductAnnouncementCardSeen} from './__telemetry__/studioAnnouncements.telemetry'\n\nconst keyframe = keyframes`\n  0% {\n    background-position: 100%;\n  }\n  100% {\n    background-position: -100%;\n  }\n`\n\nconst Root = styled.div((props) => {\n  const theme = getTheme_v2(props.theme)\n  const cardHoverBg = theme.color.selectable.default.hovered.bg\n  const cardNormalBg = theme.color.selectable.default.enabled.bg\n\n  return css`\n    position: relative;\n    cursor: pointer;\n    // hide the close button\n    #close-floating-button {\n      opacity: 0;\n      transition: opacity 0.2s;\n    }\n\n    &:hover {\n      > [data-ui='whats-new-card'] {\n        --card-bg-color: ${cardHoverBg};\n        box-shadow: inset 0 0 2px 1px var(--card-skeleton-color-to);\n        background-image: linear-gradient(\n          to right,\n          var(--card-bg-color),\n          var(--card-bg-color),\n          ${cardNormalBg},\n          var(--card-bg-color),\n          var(--card-bg-color),\n          var(--card-bg-color)\n        );\n        background-position: 100%;\n        background-size: 200% 100%;\n        background-attachment: fixed;\n        animation-name: ${keyframe};\n        animation-timing-function: ease-in;\n        animation-iteration-count: infinite;\n        animation-duration: 2000ms;\n      }\n      #close-floating-button {\n        opacity: 1;\n        background: transparent;\n\n        &:hover {\n          transition: all 0.2s;\n          box-shadow: 0 0 0 1px ${theme.color.selectable.default.hovered.border};\n        }\n      }\n    }\n  `\n})\n\nconst ButtonRoot = styled.div`\n  z-index: 1;\n  position: absolute;\n  top: 0px;\n  right: 6px;\n`\n\ninterface StudioAnnouncementCardProps {\n  title: string\n  id: string\n  name: string\n  isOpen: boolean\n  preHeader: string\n  onCardClick: () => void\n  onCardDismiss: () => void\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function StudioAnnouncementsCard({\n  title,\n  id,\n  isOpen,\n  name,\n  preHeader,\n  onCardClick,\n  onCardDismiss,\n}: StudioAnnouncementCardProps) {\n  const {t} = useTranslation()\n  const telemetry = useTelemetry()\n\n  useEffect(() => {\n    if (isOpen) {\n      telemetry.log(ProductAnnouncementCardSeen, {\n        announcement_id: id,\n        announcement_title: title,\n        announcement_internal_name: name,\n        source: 'studio',\n        studio_version: SANITY_VERSION,\n      })\n    }\n  }, [telemetry, id, title, isOpen, name])\n\n  return (\n    <Popover\n      open={isOpen}\n      shadow={3}\n      portal\n      style={{\n        bottom: 12,\n        left: 12,\n        top: 'none',\n      }}\n      width={0}\n      placement=\"bottom-start\"\n      content={\n        <Root data-ui=\"whats-new-root\">\n          <Card\n            data-ui=\"whats-new-card\"\n            padding={3}\n            radius={3}\n            onClick={onCardClick}\n            role=\"button\"\n            aria-label={t('announcement.floating-button.open-label')}\n          >\n            <Stack space={3}>\n              <Box marginRight={6}>\n                <Text as={'h3'} size={1} muted>\n                  {preHeader}\n                </Text>\n              </Box>\n              <Text size={1} weight=\"medium\">\n                {title}\n              </Text>\n            </Stack>\n          </Card>\n          <ButtonRoot>\n            <Button\n              id=\"close-floating-button\"\n              mode=\"bleed\"\n              onClick={onCardDismiss}\n              icon={CloseIcon}\n              tone=\"default\"\n              aria-label={t('announcement.floating-button.dismiss-label')}\n              tooltipProps={{\n                content: t('announcement.floating-button.dismiss'),\n              }}\n            />\n          </ButtonRoot>\n        </Root>\n      }\n    />\n  )\n}\n","import {Box} from '@sanity/ui'\nimport {useEffect, useRef, useState} from 'react'\nimport {styled} from 'styled-components'\n\nconst Hr = styled.hr<{$show: boolean}>`\n  height: 1px;\n  background: var(--card-border-color);\n  width: 100%;\n  opacity: ${({$show}) => ($show ? 1 : 0)};\n  transition: opacity 0.3s ease;\n  margin: 0;\n  border: none;\n`\n\ninterface DividerProps {\n  parentRef: React.RefObject<HTMLDivElement | null>\n}\n\n/**\n * This is the threshold for the divider to start fading\n * uses a negative value to start fading before reaching the top\n * of the parent.\n * We want to fade out the divider so it doesn't overlap with the close icon when reaching the top.\n * It's the sum of the title height (48px) and the divider padding top (12px)\n */\nconst DIVIDER_FADE_THRESHOLD = '-60px 0px 0px 0px'\n\n/**\n * A divider that fades when reaching the top of the parent.\n */\nexport function Divider({parentRef}: DividerProps): React.JSX.Element {\n  const itemRef = useRef<HTMLHRElement | null>(null)\n  const [show, setShow] = useState(true)\n\n  useEffect(() => {\n    const item = itemRef.current\n    const parent = parentRef.current\n\n    if (!item || !parent) return\n    const observer = new IntersectionObserver(\n      ([entry]) => {\n        setShow(entry.isIntersecting)\n      },\n      {root: parent, threshold: 0, rootMargin: DIVIDER_FADE_THRESHOLD},\n    )\n\n    observer.observe(item)\n\n    // eslint-disable-next-line consistent-return\n    return () => {\n      observer.disconnect()\n    }\n  }, [parentRef])\n\n  return (\n    <Box paddingBottom={4}>\n      <Box paddingY={3} paddingX={3}>\n        <Hr ref={itemRef} $show={show} />\n      </Box>\n    </Box>\n  )\n}\n","/* eslint-disable camelcase */\nimport {CloseIcon} from '@sanity/icons'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {Box, Flex, Grid, Text} from '@sanity/ui'\nimport {Fragment, useCallback, useEffect, useMemo, useRef} from 'react'\nimport {useTranslation} from 'react-i18next'\nimport {styled} from 'styled-components'\n\nimport {Button, Dialog} from '../../../ui-components'\nimport {useDateTimeFormat, type UseDateTimeFormatOptions} from '../../hooks'\nimport {SANITY_VERSION} from '../../version'\nimport {UpsellDescriptionSerializer} from '../upsell'\nimport {\n  ProductAnnouncementLinkClicked,\n  ProductAnnouncementViewed,\n} from './__telemetry__/studioAnnouncements.telemetry'\nimport {Divider} from './Divider'\nimport {type DialogMode, type StudioAnnouncementDocument} from './types'\n\nconst DATE_FORMAT_OPTIONS: UseDateTimeFormatOptions = {\n  month: 'short',\n  day: '2-digit',\n}\n\nconst Root = styled(Box)`\n  overflow: auto;\n  max-height: 75vh;\n`\n\nconst DialogHeader = styled(Grid)`\n  position: sticky;\n  display: grid;\n  grid-template-columns: 64px 1fr 64px;\n  top: 0;\n  z-index: 1;\n  background: var(--card-bg-color);\n`\n\nconst FloatingButtonBox = styled(Box)`\n  position: absolute;\n  top: 12px;\n  right: 24px;\n  z-index: 2;\n`\nconst FloatingButton = styled(Button)``\n\ninterface AnnouncementProps {\n  announcement: StudioAnnouncementDocument\n  mode: DialogMode\n  isFirst: boolean\n  parentRef: React.RefObject<HTMLDivElement | null>\n}\n\n/**\n * Renders the unseen document in the dialog.\n * Has a sticky header with the date and title, and a body with the content.\n */\nfunction Announcement({announcement, mode, isFirst, parentRef}: AnnouncementProps) {\n  const telemetry = useTelemetry()\n  const dateFormatter = useDateTimeFormat(DATE_FORMAT_OPTIONS)\n  const logViewedItemRef = useRef<HTMLDivElement | null>(null)\n\n  const formattedDate = useMemo(() => {\n    if (!announcement.publishedDate) return ''\n    return dateFormatter.format(new Date(announcement.publishedDate))\n  }, [announcement.publishedDate, dateFormatter])\n\n  const handleLinkClick = useCallback(\n    ({url, linkTitle}: {url: string; linkTitle: string}) => {\n      telemetry.log(ProductAnnouncementLinkClicked, {\n        announcement_id: announcement._id,\n        announcement_title: announcement.title,\n        announcement_internal_name: announcement.name,\n        source: 'studio',\n        studio_version: SANITY_VERSION,\n        origin: mode,\n        link_url: url,\n        link_title: linkTitle,\n      })\n    },\n    [telemetry, announcement, mode],\n  )\n  const logViewed = useCallback(\n    (scrolledIntoView: boolean) => {\n      telemetry.log(ProductAnnouncementViewed, {\n        announcement_id: announcement._id,\n        announcement_title: announcement.title,\n        announcement_internal_name: announcement.name,\n        source: 'studio',\n        studio_version: SANITY_VERSION,\n        scrolled_into_view: scrolledIntoView,\n        origin: mode,\n      })\n    },\n    [announcement._id, announcement.title, mode, telemetry, announcement.name],\n  )\n\n  useEffect(() => {\n    if (isFirst) {\n      // If it's the first announcement we want to log that the user has seen it.\n      // The rest will be logged when they scroll into view.\n      logViewed(false)\n      return\n    }\n    const item = logViewedItemRef.current\n    const parent = parentRef.current\n\n    if (!item || !parent) return\n    const observer = new IntersectionObserver(\n      ([entry]) => {\n        if (entry.isIntersecting) {\n          logViewed(true)\n          // Disconnect the observer after it's been viewed\n          observer.disconnect()\n        }\n      },\n      {root: parent, threshold: 1, rootMargin: '0px 0px -100px 0px'},\n    )\n\n    observer.observe(item)\n\n    // eslint-disable-next-line consistent-return\n    return () => {\n      observer.disconnect()\n    }\n  }, [logViewed, parentRef, isFirst])\n\n  return (\n    <Box>\n      <DialogHeader padding={3}>\n        <Box flex={'none'} padding={2} paddingRight={0}>\n          <Box paddingLeft={2}>\n            <Text size={1} muted>\n              {formattedDate}\n            </Text>\n          </Box>\n        </Box>\n        <Flex flex={1} padding={2} justify=\"center\" ref={logViewedItemRef}>\n          <Text as=\"h2\" size={1} weight=\"semibold\">\n            {announcement.title}\n          </Text>\n        </Flex>\n      </DialogHeader>\n      <Box padding={4}>\n        <UpsellDescriptionSerializer\n          blocks={announcement.body || []}\n          onLinkClick={handleLinkClick}\n        />\n      </Box>\n    </Box>\n  )\n}\n\ninterface StudioAnnouncementDialogProps {\n  announcements: StudioAnnouncementDocument[]\n  onClose: () => void\n  mode: DialogMode\n}\n\n/**\n * Renders the studio announcement dialog displaying unseen announcements.\n * @internal\n * @hidden\n */\nexport function StudioAnnouncementsDialog({\n  announcements = [],\n  onClose,\n  mode,\n}: StudioAnnouncementDialogProps) {\n  const dialogRef = useRef(null)\n  const {t} = useTranslation()\n\n  return (\n    <Dialog\n      id=\"in-app-communication-dialog\"\n      onClose={onClose}\n      onClickOutside={onClose}\n      width={1}\n      bodyHeight=\"fill\"\n      padding={false}\n      __unstable_hideCloseButton\n      __unstable_autoFocus={false}\n    >\n      <Root ref={dialogRef} height=\"fill\">\n        {announcements.map((announcement, index) => (\n          <Fragment key={announcement._id}>\n            <Announcement\n              announcement={announcement}\n              mode={mode}\n              isFirst={index === 0}\n              parentRef={dialogRef}\n            />\n            {/* Add a divider between each dialog if it's not the last one */}\n            {index < announcements.length - 1 && <Divider parentRef={dialogRef} />}\n          </Fragment>\n        ))}\n        <FloatingButtonBox>\n          <FloatingButton\n            aria-label={t('announcement.dialog.close-label')}\n            icon={CloseIcon}\n            mode=\"bleed\"\n            onClick={onClose}\n            tooltipProps={{\n              content: t('announcement.dialog.close'),\n            }}\n          />\n        </FloatingButtonBox>\n      </Root>\n    </Dialog>\n  )\n}\n","import {useCallback, useEffect, useMemo} from 'react'\nimport {catchError, map, type Observable, of, startWith} from 'rxjs'\nimport {useRouter} from 'sanity/router'\n\nimport {useKeyValueStore} from '../../store/_legacy/datastores'\n\nconst KEY = 'studio.announcement.seen'\nconst RESET_PARAM = 'reset-announcements'\n\nexport interface SeenAnnouncementsState {\n  value: string[] | null\n  error: Error | null\n  loading: boolean\n}\nconst INITIAL_STATE: SeenAnnouncementsState = {\n  value: null,\n  error: null,\n  loading: true,\n}\n\nexport function useSeenAnnouncements(): [\n  Observable<SeenAnnouncementsState>,\n  (seen: string[]) => void,\n] {\n  const router = useRouter()\n  const keyValueStore = useKeyValueStore()\n  const seenAnnouncements$: Observable<SeenAnnouncementsState> = useMemo(\n    () =>\n      keyValueStore.getKey(KEY).pipe(\n        map((value) => ({value: value as string[] | null, error: null, loading: false})),\n        startWith(INITIAL_STATE),\n        catchError((error) => of({value: null, error: error, loading: false})),\n      ),\n    [keyValueStore],\n  )\n\n  const setSeenAnnouncements = useCallback(\n    (seen: string[]) => {\n      keyValueStore.setKey(KEY, seen)\n    },\n    [keyValueStore],\n  )\n  const params = new URLSearchParams(router.state._searchParams)\n  const resetAnnouncementsParams = params?.get(RESET_PARAM)\n\n  useEffect(() => {\n    // For testing purposes, reset the seen params.\n    // e.g. /structure?reset-announcements=foo,bar\n    // Will reset the values of the seen announcement to: ['foo', 'bar']\n    if (resetAnnouncementsParams !== null) {\n      const resetValue = resetAnnouncementsParams ? resetAnnouncementsParams.split(',') : []\n      setSeenAnnouncements(resetValue)\n    }\n  }, [resetAnnouncementsParams, setSeenAnnouncements])\n\n  return [seenAnnouncements$, setSeenAnnouncements]\n}\n","import {type PortableTextBlock} from '@sanity/types'\n\nexport const audienceRoles = [\n  'administrator',\n  'editor',\n  'viewer',\n  'contributor',\n  'developer',\n  'custom',\n] as const\n\nexport type AudienceRole = (typeof audienceRoles)[number]\n\nexport interface StudioAnnouncementDocument {\n  _id: string\n  _type: 'productAnnouncement'\n  _rev: string\n  _createdAt: string\n  _updatedAt: string\n  title: string\n  name: string\n  body: PortableTextBlock[]\n  announcementType: 'whats-new'\n  publishedDate: string\n  expiryDate?: string\n  audience:\n    | 'everyone'\n    | 'specific-version'\n    | 'greater-than-or-equal-version'\n    | 'less-than-or-equal-version'\n  audienceRole?: AudienceRole[] | undefined\n  studioVersion?: string\n  preHeader: string\n}\n\nexport interface StudioAnnouncementsContextValue {\n  studioAnnouncements: StudioAnnouncementDocument[]\n  unseenAnnouncements: StudioAnnouncementDocument[]\n  onDialogOpen: (mode: DialogMode) => void\n}\n\n// Decides weather to show all the announcements or only the unseen ones\nexport type DialogMode = 'card' | 'help_menu'\n","import {type Role} from '@sanity/types'\nimport {satisfies} from 'semver'\n\nimport {type AudienceRole, audienceRoles, type StudioAnnouncementDocument} from './types'\n\n/**\n * @internal\n * @hidden\n */\nexport function isValidAnnouncementAudience(\n  document: {\n    audience: StudioAnnouncementDocument['audience']\n    studioVersion: StudioAnnouncementDocument['studioVersion']\n  },\n  sanityVersion: string,\n): boolean {\n  switch (document.audience) {\n    case 'everyone':\n      return true\n    case 'specific-version':\n      return satisfies(sanityVersion, `= ${document.studioVersion}`, {\n        includePrerelease: true,\n      })\n    case 'greater-than-or-equal-version':\n      return satisfies(sanityVersion, `>= ${document.studioVersion}`, {\n        includePrerelease: true,\n      })\n    case 'less-than-or-equal-version':\n      return satisfies(sanityVersion, `<= ${document.studioVersion}`, {\n        includePrerelease: true,\n      })\n    default:\n      return true\n  }\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function isValidAnnouncementRole(\n  audience: StudioAnnouncementDocument['audienceRole'] | undefined,\n  userRoles: Role[] | undefined,\n): boolean {\n  if (!audience || !audience.length) return true\n  if (!userRoles || !userRoles.length) return false\n\n  if (userRoles.some((role) => audience.includes(role.name as AudienceRole))) return true\n\n  // Check if the user has a custom role\n  if (userRoles.some((role) => !audienceRoles.includes(role.name as AudienceRole))) {\n    return audience.includes('custom')\n  }\n  return false\n}\n","/* eslint-disable camelcase */\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {useCallback, useMemo, useState} from 'react'\nimport {useObservable} from 'react-rx'\nimport {catchError, combineLatest, map, type Observable, startWith} from 'rxjs'\nimport {StudioAnnouncementContext} from 'sanity/_singletons'\n\nimport {useClient} from '../../hooks/useClient'\nimport {useSource} from '../../studio/source'\nimport {useWorkspace} from '../../studio/workspace'\nimport {SANITY_VERSION} from '../../version'\nimport {\n  ProductAnnouncementCardClicked,\n  ProductAnnouncementCardDismissed,\n  ProductAnnouncementModalDismissed,\n} from './__telemetry__/studioAnnouncements.telemetry'\nimport {StudioAnnouncementsCard} from './StudioAnnouncementsCard'\nimport {StudioAnnouncementsDialog} from './StudioAnnouncementsDialog'\nimport {\n  type DialogMode,\n  type StudioAnnouncementDocument,\n  type StudioAnnouncementsContextValue,\n} from './types'\nimport {useSeenAnnouncements} from './useSeenAnnouncements'\nimport {isValidAnnouncementAudience, isValidAnnouncementRole} from './utils'\n\ninterface StudioAnnouncementsProviderProps {\n  children: React.ReactNode\n}\nconst CLIENT_OPTIONS = {apiVersion: 'v2024-09-19'}\n\nfunction StudioAnnouncementsProviderInner({children}: StudioAnnouncementsProviderProps) {\n  const telemetry = useTelemetry()\n  const [dialogMode, setDialogMode] = useState<DialogMode | null>(null)\n  const [isCardDismissed, setIsCardDismissed] = useState(false)\n  const [seenAnnouncements$, setSeenAnnouncements] = useSeenAnnouncements()\n  const {currentUser} = useWorkspace()\n  const client = useClient(CLIENT_OPTIONS)\n\n  const getAnnouncements$: Observable<{\n    unseen: StudioAnnouncementDocument[]\n    all: StudioAnnouncementDocument[]\n  }> = useMemo(() => {\n    const allAnnouncements$ = client.observable\n      .request<StudioAnnouncementDocument[] | null>({url: '/journey/announcements'})\n      .pipe(\n        map((docs) => {\n          if (!docs) return []\n          const validDocs = docs.filter(\n            (doc) =>\n              isValidAnnouncementAudience(\n                {audience: doc.audience, studioVersion: doc.studioVersion},\n                SANITY_VERSION,\n              ) && isValidAnnouncementRole(doc.audienceRole, currentUser?.roles),\n          )\n          return validDocs\n        }),\n        catchError(() => []),\n        startWith([]),\n      )\n\n    return combineLatest([allAnnouncements$, seenAnnouncements$]).pipe(\n      map(([all, seen]) => {\n        if (seen.loading || seen.error) return {unseen: [], all: all}\n        if (!seen.value) return {unseen: all, all: all}\n        const unseen = all.filter((doc) => !seen.value?.includes(doc._id))\n        return {unseen: unseen, all: all}\n      }),\n    )\n  }, [client.observable, currentUser?.roles, seenAnnouncements$])\n\n  const announcements = useObservable(getAnnouncements$, {unseen: [], all: []})\n  const unseenAnnouncements = announcements.unseen\n  const studioAnnouncements = announcements.all\n\n  const saveSeenAnnouncements = useCallback(() => {\n    // Mark all the announcements as seen\n    setSeenAnnouncements(studioAnnouncements.map((doc) => doc._id))\n  }, [setSeenAnnouncements, studioAnnouncements])\n\n  const handleOpenDialog = useCallback((mode: DialogMode) => {\n    setDialogMode(mode)\n    setIsCardDismissed(true)\n  }, [])\n\n  const handleCardDismiss = useCallback(() => {\n    saveSeenAnnouncements()\n    setIsCardDismissed(true)\n    telemetry.log(ProductAnnouncementCardDismissed, {\n      announcement_id: unseenAnnouncements[0]?._id,\n      announcement_title: unseenAnnouncements[0]?.title,\n      announcement_internal_name: unseenAnnouncements[0]?.name,\n      source: 'studio',\n      studio_version: SANITY_VERSION,\n    })\n  }, [saveSeenAnnouncements, telemetry, unseenAnnouncements])\n\n  const handleCardClick = useCallback(() => {\n    handleOpenDialog('card')\n    telemetry.log(ProductAnnouncementCardClicked, {\n      announcement_id: unseenAnnouncements[0]?._id,\n      announcement_title: unseenAnnouncements[0]?.title,\n      announcement_internal_name: unseenAnnouncements[0]?.name,\n      source: 'studio',\n      studio_version: SANITY_VERSION,\n    })\n  }, [handleOpenDialog, telemetry, unseenAnnouncements])\n\n  const handleDialogClose = useCallback(() => {\n    const firstAnnouncement =\n      dialogMode === 'help_menu' ? studioAnnouncements[0] : unseenAnnouncements[0]\n\n    telemetry.log(ProductAnnouncementModalDismissed, {\n      announcement_id: firstAnnouncement?._id,\n      announcement_title: firstAnnouncement?.title,\n      announcement_internal_name: firstAnnouncement?.name,\n      source: 'studio',\n      studio_version: SANITY_VERSION,\n      origin: dialogMode ?? 'card',\n    })\n\n    setDialogMode(null)\n    saveSeenAnnouncements()\n  }, [dialogMode, studioAnnouncements, unseenAnnouncements, telemetry, saveSeenAnnouncements])\n\n  const contextValue: StudioAnnouncementsContextValue = useMemo(\n    () => ({\n      studioAnnouncements,\n      unseenAnnouncements,\n      onDialogOpen: handleOpenDialog,\n    }),\n    [handleOpenDialog, unseenAnnouncements, studioAnnouncements],\n  )\n\n  return (\n    <StudioAnnouncementContext.Provider value={contextValue}>\n      {children}\n      {unseenAnnouncements.length > 0 && (\n        <StudioAnnouncementsCard\n          preHeader={unseenAnnouncements[0].preHeader}\n          title={unseenAnnouncements[0].title}\n          name={unseenAnnouncements[0].name}\n          id={unseenAnnouncements[0]._id}\n          onCardClick={handleCardClick}\n          isOpen={!isCardDismissed}\n          onCardDismiss={handleCardDismiss}\n        />\n      )}\n      {dialogMode && (\n        <StudioAnnouncementsDialog\n          mode={dialogMode}\n          announcements={dialogMode === 'help_menu' ? studioAnnouncements : unseenAnnouncements}\n          onClose={handleDialogClose}\n        />\n      )}\n    </StudioAnnouncementContext.Provider>\n  )\n}\n\n/**\n * @internal\n * @hidden\n */\nexport function StudioAnnouncementsProvider(props: StudioAnnouncementsProviderProps) {\n  const source = useSource()\n\n  if (source.announcements?.enabled) {\n    return <StudioAnnouncementsProviderInner {...props} />\n  }\n  return props.children\n}\n","import {multiply, parseColor, rgbToHex, screen} from '@sanity/ui/theme'\nimport {getLuminance, mix, parseToRgb, rgb} from 'polished'\n\nimport {type LegacyThemeTints} from './types'\n\n/**\n * @internal\n */\nexport function _buildTints(bg: string, mid: string, fg: string): LegacyThemeTints {\n  return {\n    50: mix(0.1, mid, bg),\n    100: mix(0.2, mid, bg),\n    200: mix(0.4, mid, bg),\n    300: mix(0.6, mid, bg),\n    400: mix(0.8, mid, bg),\n    500: mid,\n    600: mix(0.8, mid, fg),\n    700: mix(0.6, mid, fg),\n    800: mix(0.4, mid, fg),\n    900: mix(0.2, mid, fg),\n    950: mix(0.1, mid, fg),\n  }\n}\n\n/**\n * @internal\n */\nexport function _toHex(color: string): string {\n  const {red, green, blue} = parseToRgb(color)\n  return rgb(red, green, blue)\n}\n\n/**\n * @internal\n */\nexport function _isDark(bg: string, fg: string): boolean {\n  return getLuminance(bg) < getLuminance(fg)\n}\n\n/**\n * Blend two colors using the \"screen\" blend mode\n * @internal\n */\nexport function _multiply(bg: string, fg: string): string {\n  const b = parseColor(bg)\n  const s = parseColor(fg)\n  const hex = rgbToHex(multiply(b, s))\n\n  return hex\n}\n\n/**\n * Blend two colors using the \"screen\" blend mode\n * @internal\n */\nexport function _screen(bg: string, fg: string): string {\n  const b = parseColor(bg)\n  const s = parseColor(fg)\n  const hex = rgbToHex(screen(b, s))\n\n  return hex\n}\n","import {hues} from '@sanity/color'\nimport {createColorTheme, rgba, type ThemeColorSchemes} from '@sanity/ui/theme'\n\nimport {_isDark, _multiply, _screen} from './helpers'\nimport {type LegacyPalette} from './palette'\nimport {type LegacyTones} from './tones'\nimport {type LegacyThemeTints} from './types'\n\nconst NEUTRAL_TONES = ['default', 'transparent']\n\nexport function buildColor(\n  legacyPalette: LegacyPalette,\n  legacyTones: LegacyTones,\n): ThemeColorSchemes {\n  return createColorTheme({\n    base: ({dark: navbar, name}) => {\n      const stateTones = navbar ? legacyTones.state.navbar : legacyTones.state.default\n      const dark = stateTones.dark\n      const blend = navbar ? _screen : _multiply\n      const tints = stateTones[name] || stateTones.default\n\n      if (name === 'default') {\n        const skeletonFrom = stateTones.default[100]\n\n        return {\n          fg: stateTones.fg,\n          bg: stateTones.bg,\n          border: stateTones.default[200],\n          focusRing: legacyPalette.focus.base,\n          shadow: {\n            outline: rgba(stateTones.default[500], 0.4),\n            umbra: rgba(dark ? legacyPalette.black : stateTones.default[500], 0.2),\n            penumbra: rgba(dark ? legacyPalette.black : stateTones.default[500], 0.14),\n            ambient: rgba(dark ? legacyPalette.black : stateTones.default[500], 0.12),\n          },\n          skeleton: {\n            from: skeletonFrom,\n            to: rgba(skeletonFrom, 0.5),\n          },\n        }\n      }\n\n      if (name === 'transparent') {\n        const bg = tints[50]\n        const skeletonFrom = blend(bg, tints[100])\n\n        return {\n          fg: tints[900],\n          bg,\n          border: tints[300],\n          focusRing: legacyPalette.focus.base,\n          shadow: {\n            outline: rgba(tints[500], dark ? 0.2 : 0.4),\n            umbra: rgba(dark ? legacyPalette.black : tints[500], 0.2),\n            penumbra: rgba(dark ? legacyPalette.black : tints[500], 0.14),\n            ambient: rgba(dark ? legacyPalette.black : tints[500], 0.12),\n          },\n          skeleton: {\n            from: skeletonFrom,\n            to: rgba(skeletonFrom, 0.5),\n          },\n        }\n      }\n\n      const bg = tints[50]\n      const skeletonFrom = blend(bg, tints[100])\n\n      return {\n        fg: tints[900],\n        bg,\n        border: tints[200],\n        focusRing: tints[500],\n        shadow: {\n          outline: rgba(tints[500], dark ? 0.2 : 0.4),\n          umbra: rgba(dark ? legacyPalette.black : tints[500], 0.2),\n          penumbra: rgba(dark ? legacyPalette.black : tints[500], 0.14),\n          ambient: rgba(dark ? legacyPalette.black : tints[500], 0.12),\n        },\n        skeleton: {\n          from: skeletonFrom,\n          to: rgba(skeletonFrom, 0.5),\n        },\n      }\n    },\n\n    solid: ({base, dark: navbar, name, state, tone}) => {\n      const buttonTones = navbar ? legacyTones.button.navbar : legacyTones.button.default\n      const dark = buttonTones.dark\n      const blend = dark ? _screen : _multiply\n      const blendInvert = dark ? _multiply : _screen\n      const defaultTints = buttonTones[name] || buttonTones.default\n      const isNeutral = NEUTRAL_TONES.includes(name) && NEUTRAL_TONES.includes(tone)\n      let tints = buttonTones[tone === 'default' ? name : tone] || defaultTints\n\n      if (state === 'disabled') {\n        tints = defaultTints\n\n        const bg = blend(base.bg, tints[200])\n        const skeletonFrom = blendInvert(bg, tints[800])\n\n        return {\n          bg,\n          border: blend(base.bg, tints[200]),\n          fg: blend(base.bg, buttonTones.bg),\n          icon: blend(base.bg, buttonTones.bg),\n          muted: {\n            fg: blend(base.bg, tints[50]),\n          },\n          accent: {\n            fg: blend(base.bg, tints[50]),\n          },\n          link: {\n            fg: blend(base.bg, tints[50]),\n          },\n          code: {\n            bg,\n            fg: blend(base.bg, tints[50]),\n          },\n          skeleton: {\n            from: skeletonFrom,\n            to: rgba(skeletonFrom, 0.5),\n          },\n        }\n      }\n\n      if (state === 'hovered') {\n        const bg = blend(base.bg, tints[600])\n        const skeletonFrom = blendInvert(bg, tints[800])\n\n        return {\n          bg,\n          border: blend(base.bg, tints[600]),\n          fg: blend(base.bg, buttonTones.bg),\n          icon: blend(base.bg, buttonTones.bg),\n          muted: {\n            fg: blend(base.bg, tints[200]),\n          },\n          accent: {\n            fg: blendInvert(bg, buttonTones.critical[300]),\n          },\n          link: {\n            fg: blendInvert(bg, buttonTones.primary[200]),\n          },\n          code: {\n            bg: blend(bg, tints[50]),\n            fg: blend(base.bg, tints[200]),\n          },\n          skeleton: {\n            from: skeletonFrom,\n            to: rgba(skeletonFrom, 0.5),\n          },\n        }\n      }\n\n      if (state === 'pressed') {\n        const bg = blend(base.bg, tints[800])\n        const skeletonFrom = blendInvert(bg, tints[800])\n\n        return {\n          bg,\n          border: blend(base.bg, tints[800]),\n          fg: blend(base.bg, buttonTones.bg),\n          icon: blend(base.bg, buttonTones.bg),\n          muted: {\n            fg: blend(base.bg, tints[200]),\n          },\n          accent: {\n            fg: blendInvert(bg, buttonTones.critical[300]),\n          },\n          link: {\n            fg: blendInvert(bg, buttonTones.primary[200]),\n          },\n          code: {\n            bg: blend(bg, tints[50]),\n            fg: blend(base.bg, tints[200]),\n          },\n          skeleton: {\n            from: skeletonFrom,\n            to: rgba(skeletonFrom, 0.5),\n          },\n        }\n      }\n\n      if (state === 'selected') {\n        if (isNeutral) {\n          tints = buttonTones.primary\n        }\n\n        const bg = blend(base.bg, tints[800])\n        const skeletonFrom = blendInvert(bg, tints[800])\n\n        return {\n          bg,\n          border: blend(base.bg, tints[800]),\n          fg: blend(base.bg, buttonTones.bg),\n          icon: blend(base.bg, buttonTones.bg),\n          muted: {\n            fg: blend(base.bg, tints[200]),\n          },\n          accent: {\n            fg: blendInvert(bg, buttonTones.critical[300]),\n          },\n          link: {\n            fg: blendInvert(bg, buttonTones.primary[200]),\n          },\n          code: {\n            bg: blend(bg, tints[50]),\n            fg: blend(base.bg, tints[200]),\n          },\n          skeleton: {\n            from: skeletonFrom,\n            to: rgba(skeletonFrom, 0.5),\n          },\n        }\n      }\n\n      const bg = blend(base.bg, tints[500])\n      const skeletonFrom = blendInvert(bg, tints[800])\n\n      return {\n        bg,\n        border: blend(base.bg, tints[500]),\n        fg: blend(base.bg, buttonTones.bg),\n        icon: blend(base.bg, buttonTones.bg),\n        muted: {\n          fg: blend(base.bg, tints[100]),\n        },\n        accent: {\n          fg: blendInvert(bg, buttonTones.critical[200]),\n        },\n        link: {\n          fg: blendInvert(bg, buttonTones.primary[100]),\n        },\n        code: {\n          bg: blend(bg, tints[50]),\n          fg: blend(base.bg, tints[100]),\n        },\n        skeleton: {\n          from: skeletonFrom,\n          to: rgba(skeletonFrom, 0.5),\n        },\n      }\n    },\n\n    muted: ({base, dark: navbar, name, state, tone}) => {\n      const stateTones = navbar ? legacyTones.state.navbar : legacyTones.state.default\n      const dark = stateTones.dark\n      const blend = dark ? _screen : _multiply\n      const defaultTints = stateTones[name] || stateTones.default\n      const isNeutral = NEUTRAL_TONES.includes(name) && NEUTRAL_TONES.includes(tone)\n\n      let tints: LegacyThemeTints = stateTones[tone === 'default' ? name : tone] || defaultTints\n\n      if (state === 'disabled') {\n        tints = defaultTints\n\n        const bg = base.bg\n        const skeletonFrom = blend(bg, tints[100])\n\n        return {\n          bg,\n          border: blend(base.bg, tints[50]),\n          fg: blend(base.bg, tints[200]),\n          icon: blend(base.bg, tints[200]),\n          muted: {\n            fg: blend(bg, tints[100]),\n          },\n          accent: {\n            fg: blend(bg, tints[100]),\n          },\n          link: {\n            fg: blend(bg, tints[100]),\n          },\n          code: {\n            bg,\n            fg: blend(bg, tints[100]),\n          },\n          skeleton: {\n            from: skeletonFrom,\n            to: rgba(skeletonFrom, 0.5),\n          },\n        }\n      }\n\n      if (state === 'hovered') {\n        const bg = blend(base.bg, tints[50])\n        const skeletonFrom = blend(bg, tints[100])\n\n        return {\n          bg,\n          border: blend(bg, tints[100]),\n          fg: blend(base.bg, tints[900]),\n          icon: blend(base.bg, tints[900]),\n          muted: {\n            fg: blend(base.bg, tints[600]),\n          },\n          accent: {\n            fg: blend(base.bg, stateTones.critical[500]),\n          },\n          link: {\n            fg: blend(base.bg, stateTones.primary[600]),\n          },\n          code: {\n            bg: blend(bg, tints[50]),\n            fg: blend(base.bg, tints[600]),\n          },\n          skeleton: {\n            from: skeletonFrom,\n            to: rgba(skeletonFrom, 0.5),\n          },\n        }\n      }\n\n      if (state === 'pressed') {\n        if (isNeutral) {\n          tints = stateTones.primary\n        }\n\n        const bg = blend(base.bg, tints[100])\n        const skeletonFrom = blend(bg, tints[100])\n\n        return {\n          bg,\n          border: blend(bg, tints[100]),\n          fg: blend(base.bg, tints[800]),\n          icon: blend(base.bg, tints[800]),\n          muted: {\n            fg: blend(base.bg, tints[600]),\n          },\n          accent: {\n            fg: blend(bg, stateTones.critical[500]),\n          },\n          link: {\n            fg: blend(bg, stateTones.primary[600]),\n          },\n          code: {\n            bg: blend(bg, tints[50]),\n            fg: blend(bg, tints[600]),\n          },\n          skeleton: {\n            from: skeletonFrom,\n            to: rgba(skeletonFrom, 0.5),\n          },\n        }\n      }\n\n      if (state === 'selected') {\n        if (isNeutral) {\n          tints = stateTones.primary\n        }\n\n        const bg = blend(base.bg, tints[100])\n        const skeletonFrom = blend(bg, tints[100])\n\n        return {\n          bg,\n          border: blend(bg, tints[100]),\n          fg: blend(bg, tints[800]),\n          icon: blend(bg, tints[800]),\n          muted: {\n            fg: blend(bg, tints[600]),\n          },\n          accent: {\n            fg: blend(bg, stateTones.critical[500]),\n          },\n          link: {\n            fg: blend(bg, stateTones.primary[600]),\n          },\n          code: {\n            bg: blend(bg, tints[50]),\n            fg: blend(bg, tints[600]),\n          },\n          skeleton: {\n            from: skeletonFrom,\n            to: rgba(skeletonFrom, 0.5),\n          },\n        }\n      }\n\n      const bg = base.bg\n      const skeletonFrom = blend(base.bg, tints[100])\n\n      return {\n        bg,\n        border: blend(bg, tints[100]),\n        fg: blend(bg, tints[700]),\n        icon: blend(bg, tints[700]),\n        muted: {\n          fg: blend(bg, tints[600]),\n        },\n        accent: {\n          fg: blend(bg, stateTones.critical[500]),\n        },\n        link: {\n          fg: blend(bg, stateTones.primary[600]),\n        },\n        code: {\n          bg: blend(bg, tints[50]),\n          fg: blend(bg, tints[600]),\n        },\n        skeleton: {\n          from: skeletonFrom,\n          to: rgba(skeletonFrom, 0.5),\n        },\n      }\n    },\n\n    button: ({base, mode, muted, solid}) => {\n      if (mode === 'bleed') {\n        return {\n          enabled: {\n            ...muted.enabled,\n            border: muted.enabled.bg,\n          },\n          hovered: {\n            ...muted.hovered,\n            border: muted.hovered.bg,\n          },\n          pressed: {\n            ...muted.pressed,\n            border: muted.pressed.bg,\n          },\n          selected: {\n            ...muted.selected,\n            border: muted.selected.bg,\n          },\n          disabled: {\n            ...muted.disabled,\n            border: muted.disabled.bg,\n          },\n        }\n      }\n\n      if (mode === 'ghost') {\n        return {\n          ...solid,\n          enabled: {\n            ...muted.enabled,\n            border: base.border,\n          },\n          disabled: muted.disabled,\n        }\n      }\n\n      return solid\n    },\n\n    card: ({base, dark: navbar, muted, name, solid, state}) => {\n      if (state === 'hovered') {\n        return muted[name].hovered\n      }\n\n      if (state === 'disabled') {\n        return muted[name].disabled\n      }\n\n      const isNeutral = NEUTRAL_TONES.includes(name)\n      const stateTones = navbar ? legacyTones.state.navbar : legacyTones.state.default\n      const tints: LegacyThemeTints = stateTones[name] || stateTones.default\n\n      const dark = stateTones.dark\n      const blend = dark ? _screen : _multiply\n\n      if (state === 'pressed') {\n        if (isNeutral) {\n          return muted.primary.pressed\n        }\n\n        return muted[name].pressed\n      }\n\n      if (state === 'selected') {\n        if (isNeutral) {\n          return solid.primary.enabled\n        }\n\n        return solid[name].enabled\n      }\n\n      const bg = base.bg\n      const skeletonFrom = blend(base.bg, tints[dark ? 900 : 100])\n\n      return {\n        bg,\n        fg: base.fg,\n        icon: base.fg,\n        border: base.border,\n        muted: {\n          fg: blend(base.bg, tints[dark ? 400 : 600]),\n        },\n        accent: {\n          fg: blend(base.bg, stateTones.critical[dark ? 400 : 500]),\n        },\n        link: {\n          fg: blend(base.bg, stateTones.primary[dark ? 400 : 600]),\n        },\n        code: {\n          bg: blend(base.bg, tints[dark ? 950 : 50]),\n          fg: tints[dark ? 400 : 600],\n        },\n        skeleton: {\n          from: skeletonFrom,\n          to: rgba(skeletonFrom, 0.5),\n        },\n      }\n    },\n\n    input: ({base, dark: navbar, mode, state}) => {\n      const stateTones = navbar ? legacyTones.state.navbar : legacyTones.state.default\n      const dark = stateTones.dark\n      const blend = dark ? _screen : _multiply\n\n      if (mode === 'invalid') {\n        const tints = stateTones.critical\n\n        return {\n          bg: blend(base.bg, tints[50]),\n          bg2: blend(base.bg, tints[50]),\n          fg: blend(base.bg, tints[700]),\n          border: blend(base.bg, tints[200]),\n          placeholder: blend(base.bg, tints[400]),\n        }\n      }\n\n      if (state === 'hovered') {\n        return {\n          bg: base.bg,\n          bg2: base.bg,\n          fg: base.fg,\n          border: blend(base.bg, hues.gray[300].hex),\n          placeholder: blend(base.bg, hues.gray[400].hex),\n        }\n      }\n\n      if (state === 'disabled') {\n        return {\n          bg: blend(base.bg, hues.gray[50].hex),\n          bg2: blend(base.bg, hues.gray[50].hex),\n          fg: blend(base.bg, hues.gray[200].hex),\n          border: blend(base.bg, hues.gray[100].hex),\n          placeholder: blend(base.bg, hues.gray[100].hex),\n        }\n      }\n\n      if (state === 'readOnly') {\n        return {\n          bg: blend(base.bg, hues.gray[50].hex),\n          bg2: blend(base.bg, hues.gray[50].hex),\n          fg: blend(base.bg, hues.gray[800].hex),\n          border: blend(base.bg, hues.gray[200].hex),\n          placeholder: blend(base.bg, hues.gray[400].hex),\n        }\n      }\n\n      return {\n        bg: base.bg,\n        bg2: base.bg,\n        fg: base.fg,\n        border: base.border,\n        placeholder: blend(base.bg, hues.gray[700].hex),\n      }\n    },\n\n    selectable: ({base, muted, tone, solid, state}) => {\n      if (state === 'enabled') {\n        return {\n          ...muted[tone].enabled,\n          bg: base.bg,\n        }\n      }\n\n      if (state === 'pressed') {\n        if (tone === 'default') {\n          return muted.primary.pressed\n        }\n\n        return muted[tone].pressed\n      }\n\n      if (state === 'selected') {\n        if (tone === 'default') {\n          return solid.primary.enabled\n        }\n\n        return solid[tone].enabled\n      }\n\n      if (state === 'disabled') {\n        return {\n          ...muted[tone].disabled,\n          bg: base.bg,\n        }\n      }\n\n      return muted[tone][state]\n    },\n\n    spot: ({base, key}) => {\n      const dark = _isDark(base.bg, base.fg)\n      const blend = dark ? _screen : _multiply\n\n      return blend(base.bg, hues[key][dark ? 400 : 500].hex)\n    },\n\n    syntax: ({base, dark: navbar}) => {\n      const stateTones = navbar ? legacyTones.state.navbar : legacyTones.state.default\n      const dark = stateTones.dark\n      const blend = dark ? _screen : _multiply\n      const mainShade = 600\n      const secondaryShade = 400\n\n      return {\n        atrule: blend(base.bg, hues.purple[mainShade].hex),\n        attrName: blend(base.bg, stateTones.positive[mainShade]),\n        attrValue: blend(base.bg, stateTones.caution[mainShade]),\n        attribute: blend(base.bg, stateTones.caution[mainShade]),\n        boolean: blend(base.bg, hues.purple[mainShade].hex),\n        builtin: blend(base.bg, hues.purple[mainShade].hex),\n        cdata: blend(base.bg, stateTones.caution[mainShade]),\n        char: blend(base.bg, stateTones.caution[mainShade]),\n        class: blend(base.bg, hues.orange[mainShade].hex),\n        className: blend(base.bg, hues.cyan[mainShade].hex),\n        comment: blend(base.bg, stateTones.default[secondaryShade]),\n        constant: blend(base.bg, hues.purple[mainShade].hex),\n        deleted: blend(base.bg, stateTones.critical[mainShade]),\n        doctype: blend(base.bg, stateTones.default[secondaryShade]),\n        entity: blend(base.bg, stateTones.critical[mainShade]),\n        function: blend(base.bg, stateTones.positive[mainShade]),\n        hexcode: blend(base.bg, stateTones.primary[mainShade]),\n        id: blend(base.bg, hues.purple[mainShade].hex),\n        important: blend(base.bg, hues.purple[mainShade].hex),\n        inserted: blend(base.bg, stateTones.caution[mainShade]),\n        keyword: blend(base.bg, hues.magenta[mainShade].hex),\n        number: blend(base.bg, hues.purple[mainShade].hex),\n        operator: blend(base.bg, hues.magenta[mainShade].hex),\n        prolog: blend(base.bg, stateTones.default[secondaryShade]),\n        property: blend(base.bg, stateTones.primary[mainShade]),\n        pseudoClass: blend(base.bg, stateTones.caution[mainShade]),\n        pseudoElement: blend(base.bg, stateTones.caution[mainShade]),\n        punctuation: blend(base.bg, stateTones.default[mainShade]),\n        regex: blend(base.bg, stateTones.primary[mainShade]),\n        selector: blend(base.bg, stateTones.critical[mainShade]),\n        string: blend(base.bg, stateTones.caution[mainShade]),\n        symbol: blend(base.bg, hues.purple[mainShade].hex),\n        tag: blend(base.bg, stateTones.critical[mainShade]),\n        unit: blend(base.bg, hues.orange[mainShade].hex),\n        url: blend(base.bg, stateTones.critical[mainShade]),\n        variable: blend(base.bg, stateTones.critical[mainShade]),\n      }\n    },\n  })\n}\n","import {studioTheme as defaults, type ThemeFonts} from '@sanity/ui'\n\nimport {type LegacyThemeProps} from './types'\n\nexport function buildFonts(cssCustomProperties: LegacyThemeProps): ThemeFonts {\n  return {\n    ...defaults.fonts,\n    code: {\n      ...defaults.fonts.code,\n      family: cssCustomProperties['--font-family-monospace'] || defaults.fonts.code.family,\n    },\n    heading: {\n      ...defaults.fonts.heading,\n      family: cssCustomProperties['--font-family-base'] || defaults.fonts.code.family,\n    },\n    label: {\n      ...defaults.fonts.label,\n      family: cssCustomProperties['--font-family-base'] || defaults.fonts.code.family,\n    },\n    text: {\n      ...defaults.fonts.text,\n      family: cssCustomProperties['--font-family-base'] || defaults.fonts.code.family,\n    },\n  }\n}\n","import {_toHex} from './helpers'\nimport {type LegacyThemeProps} from './types'\n\nexport interface LegacyPalette {\n  black: string\n  component: {\n    bg: string\n    fg: string\n  }\n  defaultButton: {\n    default: {\n      base: string\n    }\n    primary: {\n      base: string\n    }\n    success: {\n      base: string\n    }\n    warning: {\n      base: string\n    }\n    danger: {\n      base: string\n    }\n  }\n  focus: {\n    base: string\n  }\n  gray: {\n    base: string\n  }\n  mainNavigation: {\n    bg: string\n    fg: string\n  }\n  state: {\n    info: {\n      fg: string\n    }\n    success: {\n      fg: string\n    }\n    warning: {\n      fg: string\n    }\n    danger: {\n      fg: string\n    }\n  }\n}\n\nexport function buildLegacyPalette(cssCustomProperties: LegacyThemeProps): LegacyPalette {\n  return {\n    black: _toHex(cssCustomProperties['--black']),\n    component: {\n      bg: _toHex(cssCustomProperties['--component-bg']),\n      fg: _toHex(cssCustomProperties['--component-text-color']),\n    },\n    defaultButton: {\n      default: {\n        base: _toHex(cssCustomProperties['--default-button-color']),\n      },\n      primary: {\n        base: _toHex(cssCustomProperties['--default-button-primary-color']),\n      },\n      success: {\n        base: _toHex(cssCustomProperties['--default-button-success-color']),\n      },\n      warning: {\n        base: _toHex(cssCustomProperties['--default-button-warning-color']),\n      },\n      danger: {\n        base: _toHex(cssCustomProperties['--default-button-danger-color']),\n      },\n    },\n    focus: {\n      base: _toHex(cssCustomProperties['--focus-color']),\n    },\n    gray: {\n      base: _toHex(cssCustomProperties['--gray-base']),\n    },\n    mainNavigation: {\n      bg: _toHex(cssCustomProperties['--main-navigation-color']),\n      fg: _toHex(cssCustomProperties['--main-navigation-color--inverted']),\n    },\n    state: {\n      info: {\n        fg: _toHex(cssCustomProperties['--state-info-color']),\n      },\n      success: {\n        fg: _toHex(cssCustomProperties['--state-success-color']),\n      },\n      warning: {\n        fg: _toHex(cssCustomProperties['--state-warning-color']),\n      },\n      danger: {\n        fg: _toHex(cssCustomProperties['--state-danger-color']),\n      },\n    },\n  }\n}\n","import {_buildTints, _isDark} from './helpers'\nimport {type LegacyPalette} from './palette'\nimport {type LegacyThemeTints} from './types'\n\nexport interface LegacyTones {\n  button: {\n    default: {\n      bg: string\n      fg: string\n      dark: boolean\n\n      default: LegacyThemeTints\n      transparent: LegacyThemeTints\n      primary: LegacyThemeTints\n      positive: LegacyThemeTints\n      caution: LegacyThemeTints\n      critical: LegacyThemeTints\n    }\n\n    navbar: {\n      bg: string\n      fg: string\n      dark: boolean\n\n      default: LegacyThemeTints\n      transparent: LegacyThemeTints\n      primary: LegacyThemeTints\n      positive: LegacyThemeTints\n      caution: LegacyThemeTints\n      critical: LegacyThemeTints\n    }\n  }\n\n  state: {\n    default: {\n      bg: string\n      fg: string\n      dark: boolean\n\n      default: LegacyThemeTints\n      transparent: LegacyThemeTints\n      primary: LegacyThemeTints\n      positive: LegacyThemeTints\n      caution: LegacyThemeTints\n      critical: LegacyThemeTints\n    }\n\n    navbar: {\n      bg: string\n      fg: string\n      dark: boolean\n\n      default: LegacyThemeTints\n      transparent: LegacyThemeTints\n      primary: LegacyThemeTints\n      positive: LegacyThemeTints\n      caution: LegacyThemeTints\n      critical: LegacyThemeTints\n    }\n  }\n}\n\nexport function buildLegacyTones(legacyPalette: LegacyPalette): LegacyTones {\n  return {\n    state: {\n      default: {\n        bg: legacyPalette.component.bg,\n        fg: legacyPalette.component.fg,\n        dark: _isDark(legacyPalette.component.bg, legacyPalette.component.fg),\n        default: _buildTints(\n          legacyPalette.component.bg,\n          legacyPalette.gray.base,\n          legacyPalette.component.fg,\n        ),\n        transparent: _buildTints(\n          legacyPalette.component.bg,\n          legacyPalette.gray.base,\n          legacyPalette.component.fg,\n        ),\n        primary: _buildTints(\n          legacyPalette.component.bg,\n          legacyPalette.state.info.fg,\n          legacyPalette.component.fg,\n        ),\n        positive: _buildTints(\n          legacyPalette.component.bg,\n          legacyPalette.state.success.fg,\n          legacyPalette.component.fg,\n        ),\n        caution: _buildTints(\n          legacyPalette.component.bg,\n          legacyPalette.state.warning.fg,\n          legacyPalette.component.fg,\n        ),\n        critical: _buildTints(\n          legacyPalette.component.bg,\n          legacyPalette.state.danger.fg,\n          legacyPalette.component.fg,\n        ),\n      },\n      navbar: {\n        bg: legacyPalette.mainNavigation.bg,\n        fg: legacyPalette.mainNavigation.fg,\n        dark: _isDark(legacyPalette.mainNavigation.bg, legacyPalette.mainNavigation.fg),\n\n        default: _buildTints(\n          legacyPalette.mainNavigation.bg,\n          legacyPalette.gray.base,\n          legacyPalette.mainNavigation.fg,\n        ),\n        transparent: _buildTints(\n          legacyPalette.mainNavigation.bg,\n          legacyPalette.gray.base,\n          legacyPalette.mainNavigation.fg,\n        ),\n        primary: _buildTints(\n          legacyPalette.mainNavigation.bg,\n          legacyPalette.state.info.fg,\n          legacyPalette.mainNavigation.fg,\n        ),\n        positive: _buildTints(\n          legacyPalette.mainNavigation.bg,\n          legacyPalette.state.success.fg,\n          legacyPalette.mainNavigation.fg,\n        ),\n        caution: _buildTints(\n          legacyPalette.mainNavigation.bg,\n          legacyPalette.state.warning.fg,\n          legacyPalette.mainNavigation.fg,\n        ),\n        critical: _buildTints(\n          legacyPalette.mainNavigation.bg,\n          legacyPalette.state.danger.fg,\n          legacyPalette.mainNavigation.fg,\n        ),\n      },\n    },\n    button: {\n      default: {\n        bg: legacyPalette.component.bg,\n        fg: legacyPalette.component.fg,\n        dark: _isDark(legacyPalette.component.bg, legacyPalette.component.fg),\n\n        default: _buildTints(\n          legacyPalette.component.bg,\n          legacyPalette.defaultButton.default.base,\n          legacyPalette.component.fg,\n        ),\n        transparent: _buildTints(\n          legacyPalette.component.bg,\n          legacyPalette.defaultButton.default.base,\n          legacyPalette.component.fg,\n        ),\n        primary: _buildTints(\n          legacyPalette.component.bg,\n          legacyPalette.defaultButton.primary.base,\n          legacyPalette.component.fg,\n        ),\n        positive: _buildTints(\n          legacyPalette.component.bg,\n          legacyPalette.defaultButton.success.base,\n          legacyPalette.component.fg,\n        ),\n        caution: _buildTints(\n          legacyPalette.component.bg,\n          legacyPalette.defaultButton.warning.base,\n          legacyPalette.component.fg,\n        ),\n        critical: _buildTints(\n          legacyPalette.component.bg,\n          legacyPalette.defaultButton.danger.base,\n          legacyPalette.component.fg,\n        ),\n      },\n      navbar: {\n        bg: legacyPalette.mainNavigation.bg,\n        fg: legacyPalette.mainNavigation.fg,\n        dark: _isDark(legacyPalette.mainNavigation.bg, legacyPalette.mainNavigation.fg),\n\n        default: _buildTints(\n          legacyPalette.mainNavigation.bg,\n          legacyPalette.defaultButton.default.base,\n          legacyPalette.mainNavigation.fg,\n        ),\n        transparent: _buildTints(\n          legacyPalette.mainNavigation.bg,\n          legacyPalette.defaultButton.default.base,\n          legacyPalette.mainNavigation.fg,\n        ),\n        primary: _buildTints(\n          legacyPalette.mainNavigation.bg,\n          legacyPalette.defaultButton.primary.base,\n          legacyPalette.mainNavigation.fg,\n        ),\n        positive: _buildTints(\n          legacyPalette.mainNavigation.bg,\n          legacyPalette.defaultButton.success.base,\n          legacyPalette.mainNavigation.fg,\n        ),\n        caution: _buildTints(\n          legacyPalette.mainNavigation.bg,\n          legacyPalette.defaultButton.warning.base,\n          legacyPalette.mainNavigation.fg,\n        ),\n        critical: _buildTints(\n          legacyPalette.mainNavigation.bg,\n          legacyPalette.defaultButton.danger.base,\n          legacyPalette.mainNavigation.fg,\n        ),\n      },\n    },\n  }\n}\n","import {black, blue, gray, green, red, white, yellow} from '@sanity/color'\nimport {studioTheme as defaults} from '@sanity/ui'\n\nimport {type StudioTheme} from '../types'\nimport {buildColor} from './color'\nimport {buildFonts} from './fonts'\nimport {_isDark} from './helpers'\nimport {buildLegacyPalette} from './palette'\nimport {buildLegacyTones} from './tones'\nimport {type LegacyThemeProps} from './types'\n\n/**\n * Build a Sanity UI theme from legacy CSS properties.\n *\n * @example\n * ```tsx\n * import {buildLegacyTheme, defineConfig} from 'sanity'\n *\n * export default defineConfig({\n *   // project configuration ...\n *\n *   // Customize theming\n *   theme: buildLegacyTheme({\n *     '--black': '#000',\n *     '--gray': '#777',\n *     '--focus-color': '#00f',\n *   })\n * })\n * ```\n *\n * @param partialLegacyTheme - Properties to override the theme with. See {@link LegacyThemeProps}\n * @public\n * @deprecated Legacy theming will be deprecated in a future version of Sanity Studio\n */\nexport function buildLegacyTheme(partialLegacyTheme: Partial<LegacyThemeProps>): StudioTheme {\n  const legacyTheme = resolveLegacyTheme(partialLegacyTheme)\n  const legacyPalette = buildLegacyPalette(legacyTheme)\n  const legacyTones = buildLegacyTones(legacyPalette)\n\n  const color = buildColor(legacyPalette, legacyTones)\n  const fonts = buildFonts(legacyTheme)\n\n  return {\n    __dark: _isDark(color.light.default.base.bg, color.light.default.base.fg),\n    __legacy: true,\n    color,\n    fonts,\n  }\n}\n\nconst defaultCustomProperties: LegacyThemeProps = {\n  '--font-family-monospace': defaults.fonts.code.family,\n  '--font-family-base': defaults.fonts.text.family,\n\n  '--black': black.hex,\n  '--white': white.hex,\n\n  // Brand\n  '--brand-primary': blue[500].hex,\n\n  // Component\n  '--component-bg': white.hex,\n  '--component-text-color': black.hex,\n\n  // Gray\n  '--gray': gray[500].hex,\n  '--gray-base': gray[500].hex,\n\n  // Default button\n  '--default-button-color': gray[500].hex,\n  '--default-button-danger-color': red[500].hex,\n  '--default-button-primary-color': blue[500].hex,\n  '--default-button-success-color': green[500].hex,\n  '--default-button-warning-color': yellow[500].hex,\n\n  // Focus\n  '--focus-color': blue[500].hex,\n\n  // Screen\n  '--screen-medium-break': '512px',\n  '--screen-default-break': '640px',\n  '--screen-large-break': '960px',\n  '--screen-xlarge-break': '1600px',\n\n  // State\n  '--state-info-color': blue[500].hex,\n  '--state-success-color': green[500].hex,\n  '--state-warning-color': yellow[500].hex,\n  '--state-danger-color': red[500].hex,\n\n  // Navbar\n  '--main-navigation-color': black.hex,\n  '--main-navigation-color--inverted': white.hex,\n}\n\nfunction resolveLegacyTheme(legacyTheme: Partial<LegacyThemeProps>): LegacyThemeProps {\n  const props: LegacyThemeProps = {\n    ...defaultCustomProperties,\n    ...legacyTheme,\n  }\n\n  // Update properties (order matters)\n  props['--focus-color'] = legacyTheme['--focus-color'] || props['--brand-primary']\n  props['--default-button-primary-color'] =\n    legacyTheme['--default-button-primary-color'] || props['--brand-primary']\n  props['--main-navigation-color'] = legacyTheme['--main-navigation-color'] || props['--black']\n  props['--main-navigation-color--inverted'] =\n    legacyTheme['--main-navigation-color--inverted'] || props['--white']\n  props['--state-info-color'] = legacyTheme['--brand-primary'] || props['--brand-primary']\n\n  return props\n}\n","import {buildTheme, type RootTheme} from '@sanity/ui/theme'\n\nexport * from './_legacy'\nexport * from './types'\n\n/** @internal */\nexport const defaultTheme: RootTheme = buildTheme()\n","/* eslint-disable no-nested-ternary */\n\nimport {LayerProvider, ThemeProvider} from '@sanity/ui'\nimport {type RootTheme} from '@sanity/ui/theme'\nimport {type ReactNode} from 'react'\nimport {ColorSchemeSetValueContext, ColorSchemeValueContext} from 'sanity/_singletons'\n\nimport {defaultTheme, type StudioTheme} from '../theme'\nimport {useActiveWorkspace} from './activeWorkspaceMatcher'\n\ninterface StudioThemeProviderProps {\n  children: ReactNode\n}\n\n// Temporary fix for fonts generated by Themer, once Themer is updated to use sanity v2 this can be removed\n// It won't work for locally imported themes from themer, as they won't be updated with a new api call.\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nconst isThemerTheme = (theme: StudioTheme): boolean => theme.__themer === true\n\nfunction getThemeValues(theme: StudioTheme): RootTheme {\n  return {\n    ...defaultTheme,\n    v2: theme.v2,\n    fonts: isThemerTheme(theme) ? defaultTheme.fonts : (theme.fonts ?? defaultTheme.fonts),\n    color: theme.color ?? defaultTheme.color,\n  }\n}\n\n/** @internal */\nexport function StudioThemeProvider({children}: StudioThemeProviderProps) {\n  const theme = useActiveWorkspace().activeWorkspace.theme\n\n  if (theme.__legacy) {\n    const scheme = theme.__dark ? 'dark' : 'light'\n    return (\n      <ColorSchemeSetValueContext.Provider value={false}>\n        <ColorSchemeValueContext.Provider value={scheme}>\n          <ThemeProvider scheme={scheme} theme={getThemeValues(theme)}>\n            <LayerProvider>{children}</LayerProvider>\n          </ThemeProvider>\n        </ColorSchemeValueContext.Provider>\n      </ColorSchemeSetValueContext.Provider>\n    )\n  }\n\n  return (\n    <ThemeProvider theme={getThemeValues(theme)}>\n      <LayerProvider>{children}</LayerProvider>\n    </ThemeProvider>\n  )\n}\n","import {defineEvent} from '@sanity/telemetry'\n\nexport interface PerformanceINPMeasuredData {\n  target: string | null\n  attrs?: {\n    ui?: string\n    testId?: string\n  }\n  duration: number\n  interaction: string\n}\n\nexport const PerformanceINPMeasured = defineEvent<PerformanceINPMeasuredData>({\n  name: 'Performance INP Measured',\n  // Sample at most every minute\n  maxSampleRate: 60_000,\n  version: 1,\n  description: 'Performance INP (Interaction to Next Paint) measurement happened',\n})\n","import {useTelemetry} from '@sanity/telemetry/react'\nimport {useCallback, useEffect} from 'react'\n\nimport {PerformanceINPMeasured} from '../__telemetry__/performance.telemetry'\n\nfunction getInterestingAttrs(node: Node | null): undefined | {ui?: string; testId?: string} {\n  if (!node || !(node instanceof Element)) {\n    return undefined\n  }\n  const ui = node.getAttribute('data-ui') || undefined\n  const testId = node.getAttribute('data-testid') || undefined\n  return ui || testId ? {ui, testId} : undefined\n}\n\nfunction getElementIdentifier(node: Node | null) {\n  if (!node) {\n    return null\n  }\n  if (!(node instanceof Element)) {\n    return node.nodeName\n  }\n  // Note: Deliberately using classList instead of className here since className isn't always a string\n  // See https://developer.mozilla.org/en-US/docs/Web/API/Element/className#notes\n  const {nodeName, classList, id} = node\n  return (\n    nodeName.toLowerCase() +\n    (id ? `#${id}` : '') +\n    (classList ? `.${classList.value.replaceAll(' ', '.')}` : '')\n  )\n}\n\nfunction isPerformanceEventTiming(entry: PerformanceEntry): entry is PerformanceEventTiming {\n  return entry.entryType === 'event'\n}\n\n/**\n * @internal\n */\nexport function useMeasurePerformanceTelemetry() {\n  const telemetry = useTelemetry()\n  const onEvent = useCallback(\n    (list: PerformanceObserverEntryList, observer: PerformanceObserver) => {\n      const entries = list.getEntries()\n\n      let maxEntry: PerformanceEventTiming | undefined = undefined\n      for (const entry of entries) {\n        if (!isPerformanceEventTiming(entry)) continue\n        if (entry.duration > (maxEntry?.duration || 0)) {\n          maxEntry = entry\n        }\n      }\n      if (!maxEntry) {\n        return\n      }\n      telemetry.log(PerformanceINPMeasured, {\n        target: getElementIdentifier(maxEntry.target),\n        attrs: getInterestingAttrs(maxEntry.target),\n        interaction: maxEntry.name,\n        duration: maxEntry.duration,\n      })\n    },\n    [telemetry],\n  )\n  useEffect(() => {\n    if (!('PerformanceObserver' in globalThis)) {\n      return\n    }\n    const observer = new PerformanceObserver(onEvent)\n    observer.observe({type: 'event', buffered: true})\n    // eslint-disable-next-line consistent-return\n    return () => {\n      observer.disconnect()\n    }\n  }, [onEvent])\n}\n","// Tracks performance metrics from the field\nimport {type PropsWithChildren} from 'react'\n\nimport {useMeasurePerformanceTelemetry} from './useMeasurePerformanceTelemetry'\n\n/**\n * @internal\n */\nexport function PerformanceTelemetryTracker(props: PropsWithChildren) {\n  useMeasurePerformanceTelemetry()\n  return props.children\n}\n","import {\n  createBatchedStore,\n  type CreateBatchedStoreOptions,\n  createSessionId,\n} from '@sanity/telemetry'\nimport {TelemetryProvider} from '@sanity/telemetry/react'\nimport arrify from 'arrify'\nimport {type ReactNode, useEffect, useMemo} from 'react'\n\nimport {type Config} from '../../config'\nimport {useClient} from '../../hooks'\nimport {SANITY_VERSION} from '../../version'\nimport {PerformanceTelemetryTracker} from './PerformanceTelemetry'\n\nconst sessionId = createSessionId()\n\nconst DEBUG_TELEMETRY = !!(\n  typeof process !== 'undefined' && process.env?.SANITY_STUDIO_DEBUG_TELEMETRY\n)\n\n/* eslint-disable no-console */\nconst debugLoggingStore: CreateBatchedStoreOptions = {\n  // submit any pending events every <n> ms\n  flushInterval: 1000,\n\n  // implements user consent resolving\n  resolveConsent: () => Promise.resolve({status: 'granted'}),\n\n  // implements sending events to backend\n  sendEvents: async (batch) => {\n    console.log('[telemetry] submit events (noop): %O', batch)\n  },\n  // opts into a different strategy for sending events when the browser close, reload or navigate away from the current page\n  sendBeacon: (batch) => {\n    console.log('[telemetry] submit events (noop): %O', batch)\n    return true\n  },\n}\n/* eslint-enable no-console */\n\n// Wrap the app in a TelemetryProvider\n// This will enable usage of the `useTelemetry()` hook\nexport function StudioTelemetryProvider(props: {children: ReactNode; config: Config}) {\n  const client = useClient({apiVersion: 'v2023-12-18'})\n\n  const projectId = client.config().projectId\n\n  const storeOptions = useMemo((): CreateBatchedStoreOptions => {\n    if (DEBUG_TELEMETRY) {\n      return debugLoggingStore\n    }\n    return {\n      // submit any pending events every <n> ms\n      flushInterval: 30000,\n\n      // implements user consent resolving\n      resolveConsent: () =>\n        client.request({uri: '/intake/telemetry-status', tag: 'telemetry-consent.studio'}),\n\n      // implements sending events to backend\n      sendEvents: (batch) =>\n        client.request({\n          uri: '/intake/batch',\n          method: 'POST',\n          json: true,\n          body: {projectId, batch},\n        }),\n      // opts into a different strategy for sending events when the browser close, reload or navigate away from the current page\n      sendBeacon: (batch) =>\n        navigator.sendBeacon(client.getUrl('/intake/batch'), JSON.stringify({projectId, batch})),\n    }\n  }, [client, projectId])\n\n  const store = useMemo(() => createBatchedStore(sessionId, storeOptions), [storeOptions])\n\n  useEffect(() => {\n    const workspaces = arrify(props.config)\n    const projectIds: string[] = []\n    const datasetNames: string[] = []\n    const workspaceNames: string[] = []\n    workspaces.forEach((workspace) => {\n      projectIds.push(workspace.projectId)\n      datasetNames.push(workspace.dataset)\n      workspaceNames.push(workspace.name || '<unnamed>')\n    })\n    store.logger.updateUserProperties({\n      userAgent: navigator.userAgent,\n      screen: {\n        density: window.devicePixelRatio,\n        height: window.screen.height,\n        width: window.screen.width,\n        innerHeight: window.innerHeight,\n        innerWidth: window.innerWidth,\n      },\n      studioVersion: SANITY_VERSION,\n      plugins: workspaces.flatMap(\n        (workspace) =>\n          workspace.plugins?.flatMap((plugin) => ({\n            name: plugin.name || '<unnamed>',\n          })) || [],\n      ),\n      uniqueWorkspaceNames: new Set(workspaceNames).size,\n      uniqueDatasetNames: new Set(datasetNames).size,\n      workspaceNames,\n      datasetNames,\n    })\n  }, [props.config, store.logger])\n\n  return (\n    <TelemetryProvider store={store}>\n      <PerformanceTelemetryTracker>{props.children}</PerformanceTelemetryTracker>\n    </TelemetryProvider>\n  )\n}\n","/* eslint-disable i18next/no-literal-string,@sanity/i18n/no-attribute-string-literals */\nimport {Box, Card, Code, Flex, Text} from '@sanity/ui'\nimport {startCase} from 'lodash'\nimport {useEffect} from 'react'\nimport {styled} from 'styled-components'\n\nconst ListItem = styled(Flex)``\n\nconst ErrorMessageRoot = styled(Box).attrs({padding: 4})``\n\n/**\n * @internal\n */\nexport interface ErrorMessageProps {\n  message: string\n  stack?: string\n  error: unknown\n  path: Array<{name: string; type: string}>\n}\n\n/**\n * @internal\n */\nexport function ErrorMessage({error, message, path, stack}: ErrorMessageProps) {\n  useEffect(() => {\n    console.error(error)\n  }, [error])\n\n  const last = path[path.length - 1]\n\n  return (\n    <ErrorMessageRoot forwardedAs={Flex} direction=\"column\" gap={4}>\n      <Flex direction=\"column\" gap={2}>\n        <Text weight=\"medium\" size={3}>\n          {startCase(last.type)} Error\n        </Text>\n      </Flex>\n\n      <Card tone=\"critical\" overflow=\"auto\" padding={4}>\n        <Code>{message}</Code>\n      </Card>\n\n      <Flex as=\"ul\" direction=\"column\" gap={2}>\n        {path.map(({name, type}, index) => (\n          <ListItem forwardedAs=\"li\" gap={2} align=\"center\" key={index}>\n            <Box>\n              <Code>{name}</Code>\n            </Box>\n            <Box>\n              <Text muted size={1}>\n                {type}\n              </Text>\n            </Box>\n          </ListItem>\n        ))}\n      </Flex>\n\n      {stack && (\n        <details>\n          <Text as=\"summary\">Stack Trace</Text>\n\n          <Box overflow=\"auto\" marginTop={4}>\n            <Code>{stack}</Code>\n          </Box>\n        </details>\n      )}\n    </ErrorMessageRoot>\n  )\n}\n","import {route, type Router} from 'sanity/router'\n\nimport {type Tool} from '../../config'\n\nexport function createRouter(opts: {basePath?: string; tools: Tool[]}): Router {\n  const {basePath = '/', tools} = opts\n\n  const toolRoute = route.create('/:tool', (toolParams) => {\n    let tool = tools.find((current) => current.name === toolParams.tool)\n\n    // If the URL is targeting the `desk` tool, but no such tool exists, check if we have a\n    // `structure` tool instead. If so, this is likely a legacy URL, so we'll redirect to\n    // the new one (structure). Note that this is not enough to make the legacy URL work,\n    // it will still trigger a \"Tool not found\" condition in the layout component, but it\n    // will be handled there with a redirect. Open to suggestions for better solutions.\n    if (!tool && toolParams.tool === 'desk') {\n      tool = tools.find((current) => current.name === 'structure')\n    }\n\n    return tool ? route.scope(tool.name, '/', tool.router) : route.create('/')\n  })\n\n  return route.create(basePath, [route.intents('/intent'), toolRoute])\n}\n","import {type Tool} from '../../../config'\n\nexport function getOrderedTools(tools: Tool[]): Tool[] {\n  const pluginConfig: {toolSwitcher?: {order?: string[]; hidden?: string[]}} = {}\n  const config = pluginConfig.toolSwitcher || {}\n  const order = config.order || []\n  const hidden = config.hidden || []\n\n  if (!order.length && !hidden.length) {\n    return tools\n  }\n\n  const keyed = tools.reduce<Record<string, {index: number; tool: Tool}>>((target, tool) => {\n    const title = tool.title || '<unknown>'\n\n    if (!tool.name) {\n      console.warn(`Tool \"${title}\" does not have the required \"name\" property`)\n      return target\n    }\n\n    if (target[tool.name]) {\n      const existing = target[tool.name].tool.title\n      console.warn(`Tools with duplicate name \"${tool.name}\" found (\"${title}\" and \"${existing}\")`)\n      return target\n    }\n\n    const toolIndex = order.indexOf(tool.name)\n\n    target[tool.name] = {\n      tool: tool,\n      index: toolIndex === -1 ? +Infinity : toolIndex,\n    }\n\n    return target\n  }, {})\n\n  const isVisible = (tool: Tool) => hidden.indexOf(tool.name) === -1\n\n  const ret = tools.filter(isVisible)\n\n  ret.sort((tool1, tool2) => {\n    const toolA = keyed[tool1.name]\n    const toolB = keyed[tool2.name]\n\n    const indexA = toolA ? toolA.index : +Infinity\n    const indexB = toolB ? toolB.index : +Infinity\n\n    if (indexA === indexB) {\n      return 0\n    }\n\n    return indexA - indexB\n  })\n\n  return ret\n}\n","import {type Router, type RouterState, STICKY_PARAMS} from 'sanity/router'\n\nimport {type Tool} from '../../config'\nimport {isRecord} from '../../util/isRecord'\nimport {type RouterEvent, type RouterStateEvent} from './types'\nimport {getOrderedTools} from './util/getOrderedTools'\n\nconst WEIGHTED_CREATE_INTENT_PARAMS = ['template']\nconst WEIGHTED_EDIT_INTENT_PARAMS = ['mode']\n\nfunction resolveUrlStateWithDefaultTool(tools: Tool[], state: Record<string, unknown> | null) {\n  const orderedTools = getOrderedTools(tools)\n  const defaultTool = orderedTools[0]\n\n  if (!state || state.tool || !defaultTool) {\n    return state\n  }\n\n  return Object.assign({}, state, {\n    tool: defaultTool.name,\n  })\n}\n\nfunction makeBackwardsCompatible(\n  tools: Tool[],\n  state: Record<string, unknown> | null,\n): Record<string, unknown> | null {\n  if (!state) {\n    return state\n  }\n\n  if (getOrderedTools(tools).find((tool) => tool.name === state.space)) {\n    return {...state, tool: state.space, space: undefined}\n  }\n\n  return state\n}\n\nexport function resolveDefaultState(\n  tools: Tool[],\n  state: Record<string, unknown> | null,\n): RouterState | null {\n  const urlStateWithDefaultTool = resolveUrlStateWithDefaultTool(\n    tools,\n    makeBackwardsCompatible(tools, state),\n  )\n\n  return urlStateWithDefaultTool\n}\n\nexport function resolveIntentState(\n  tools: Tool[],\n  prevState: RouterState | null,\n  nextState: RouterState,\n): RouterEvent {\n  const {intent, params, payload} = nextState\n\n  if (typeof intent !== 'string') {\n    throw new Error('intent must be a string')\n  }\n\n  if (!isRecord(params)) {\n    throw new Error('intent params must be a string')\n  }\n\n  const orderedTools = getOrderedTools(tools)\n\n  const currentTool = prevState?.tool\n    ? orderedTools.find((tool) => tool.name === prevState.tool)\n    : null\n\n  const otherTools = currentTool\n    ? orderedTools.filter((tool) => tool !== currentTool)\n    : orderedTools\n\n  let weightedParams: string[] = []\n  if (intent === 'create') {\n    weightedParams = WEIGHTED_CREATE_INTENT_PARAMS\n  } else if (intent === 'edit') {\n    weightedParams = WEIGHTED_EDIT_INTENT_PARAMS\n  }\n\n  // Rank tools by how well they can handle the intent, based on the params they support.\n  // Only the ones defined in `WEIGHTED_*_INTENT_PARAMS` are considered, and on ties in score,\n  // the first tool wins. Any active tool is considered first, then the rest.\n  const initialMatch: {score: number; tool: Tool<any> | null} = {score: -1, tool: null}\n  const {tool: matchingTool} = (currentTool ? [currentTool, ...otherTools] : orderedTools).reduce(\n    (prev, tool) => {\n      if (!tool || typeof tool.canHandleIntent !== 'function') {\n        return prev\n      }\n\n      const canHandle = tool.canHandleIntent(intent, params, prevState && prevState[tool.name])\n      if (typeof canHandle === 'boolean') {\n        // Treat `true` as a score of `0`, since an empty object also has that score\n        return canHandle && prev.score < 0 ? {score: 0, tool} : prev\n      }\n\n      // Skip unknown return values\n      if (!isRecord(canHandle)) {\n        return prev\n      }\n\n      // Rank by number of supported, weighted values\n      const score = weightedParams.reduce((prevScore, weightedParam) => {\n        return weightedParam in params && canHandle[weightedParam] === true\n          ? prevScore + 1\n          : prevScore\n      }, 0)\n\n      return score > prev.score ? {score, tool} : prev\n    },\n    initialMatch,\n  )\n\n  if (matchingTool?.getIntentState) {\n    const _toolState = matchingTool.getIntentState(\n      intent,\n      params as any,\n      prevState && (prevState[matchingTool.name] as any),\n      payload,\n    ) as Record<string, unknown>\n\n    const {_searchParams, ...toolState} = _toolState\n\n    const nextUrlState: Record<string, unknown> = {\n      ...prevState,\n      _searchParams: nextState._searchParams,\n      tool: matchingTool.name,\n      [matchingTool.name]: toolState,\n    }\n    if (matchingTool.router?.__unsafe_disableScopedSearchParams) {\n      const stickyParams = nextState._searchParams?.filter(([key]) => STICKY_PARAMS.includes(key))\n      nextUrlState._searchParams = [\n        ...(stickyParams || []),\n        ...(Array.isArray(_searchParams) ? _searchParams : []),\n      ]\n    } else {\n      toolState._searchParams = _searchParams\n    }\n    return {\n      type: 'state',\n      isNotFound: false,\n      state: nextUrlState,\n    }\n  }\n\n  return {\n    type: 'intent',\n    isNotFound: true,\n    intent: {name: intent, params},\n  }\n}\n\nexport function decodeUrlState(rootRouter: Router, pathname: string): RouterStateEvent {\n  return {\n    type: 'state',\n    state: rootRouter.decode(pathname) || {},\n    isNotFound: rootRouter.isNotFound(pathname),\n  }\n}\n\nexport function isNonNullable<T>(value: T): value is NonNullable<T> {\n  return value !== null && value !== undefined\n}\n","import {escapeRegExp, isEqual} from 'lodash'\nimport {\n  type ComponentType,\n  type MutableRefObject,\n  type ReactNode,\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n} from 'react'\nimport {type Router, RouterProvider, type RouterState} from 'sanity/router'\nimport {useSyncExternalStoreWithSelector} from 'use-sync-external-store/with-selector.js'\n\nimport {ErrorBoundary} from '../../../ui-components'\nimport {type Tool, type Workspace} from '../../config'\nimport {createRouter, type RouterHistory, type RouterStateEvent} from '../router'\nimport {decodeUrlState, resolveDefaultState, resolveIntentState} from '../router/helpers'\nimport {useRouterHistory} from '../router/RouterHistoryContext'\n\ninterface WorkspaceRouterProviderProps {\n  children: ReactNode\n  LoadingComponent: ComponentType\n  workspace: Workspace\n}\n\nexport function WorkspaceRouterProvider({\n  children,\n  LoadingComponent,\n  workspace,\n}: WorkspaceRouterProviderProps) {\n  const {basePath, tools} = workspace\n  const history = useRouterHistory()\n  const router = useMemo(() => createRouter({basePath, tools}), [basePath, tools])\n  const [state, onNavigate] = useRouterFromWorkspaceHistory(history, router, tools)\n\n  const handleCatchError = useCallback(({error}: {error: Error}) => {\n    /** catches errors in studio that bubble up, throwing the error */\n    throw error\n  }, [])\n\n  // `state` is only null if the Studio is somehow rendering in SSR or using hydrateRoot in combination with `unstable_noAuthBoundary`.\n  // Which makes this loading condition extremely rare, most of the time it'll render `RouteProvider` right away.\n  if (!state) return <LoadingComponent />\n\n  return (\n    <ErrorBoundary onCatch={handleCatchError}>\n      <RouterProvider onNavigate={onNavigate} router={router} state={state}>\n        {children}\n      </RouterProvider>\n    </ErrorBoundary>\n  )\n}\n\ntype HandleNavigate = (opts: {path: string; replace?: boolean}) => void\n\n/**\n * @internal\n */\nfunction useRouterFromWorkspaceHistory(\n  history: RouterHistory,\n  router: Router,\n  tools: Tool[],\n): [RouterState | null, HandleNavigate] {\n  // React will only re-subscribe if store.subscribe changes identity, so by memoizing the whole store\n  // we ensure that if any of the dependencies used by store.selector changes, we'll re-subscribe.\n  // If we don't, we risk hot reload seeing stale workspace configs as the user is editing them.\n  const store = useMemo(() => {\n    const routerBasePath = router.getBasePath()\n    // this regex ends with a `(\\\\/|$)` (forward slash or end) to prevent false\n    // matches where the pathname is a false subset of the current pathname.\n    const routerBasePathRegex = new RegExp(`^${escapeRegExp(routerBasePath)}(\\\\/|$)`, 'i')\n    const shouldHandle = (pathname: string) =>\n      // this is necessary to prevent emissions intended for other workspaces.\n      routerBasePath === '/' ? true : routerBasePathRegex.test(pathname)\n    return {\n      subscribe: (onStoreChange: () => void) => history.listen(onStoreChange),\n      getSnapshot: () => `${history.location.pathname}${history.location.search || ''}`,\n      // Always return null for the server snapshot, as we can't know how to resolve intents until after authentication is done, which is browser-only\n      getServerSnapshot: () => null,\n      selector: (pathname: string | null) =>\n        typeof pathname === 'string' && shouldHandle(pathname)\n          ? decodeUrlState(router, pathname)\n          : null,\n    }\n  }, [history, router])\n\n  const event = useSyncExternalStoreWithSelector(\n    store.subscribe,\n    store.getSnapshot,\n    store.getServerSnapshot,\n    store.selector,\n    isEqual,\n  )\n  /**\n   * As `prevEvent` needs to be referenced in `onNavigate`, it's important to use a React Ref when reading from it.\n   * The `onNavigate` callback is the backbone which all the router operations are built upon, implemented in `RouterProvider`.\n   * This includes `navigateUrl`, 'mavigate' and 'navigateIntent'. If we didn't use a React Ref, for example maybe use `useState` instead, then this would mean that every time `prevEvent` got a new value\n   * it would trigger a React re-render, which would give `onNavigate` a new identity. Which means all components that use `useRouter` would re-render just so that\n   * the callback will \"see\" the latest `preEvent` value. This is a very expensive operation, and we want to avoid it.\n   */\n  const prevEvent = useRef(event)\n\n  // Handles redirects from the root base path to the default tool, e.g. `/` -> `/structure`\n  useEffect(() => {\n    if (event?.type === 'state' && !event.state?.intent) {\n      const defaultState = resolveDefaultState(tools, event.state)\n      if (defaultState && defaultState !== event.state) {\n        history.replace(router.encode(defaultState))\n      }\n    }\n  }, [event?.state, event?.type, history, router, tools])\n\n  // Handles redirects to intents, e.g. `/test/intent/create/template=codeTest;type=codeTest/` -> `/test/content/input-plugin;codeTest;c7e1aa3e-5555-40f5-b0af-c7309df6edcc%2Ctemplate%3DcodeTest`\n  // eslint-disable-next-line consistent-return\n  useEffect(() => {\n    const resolvedIntent = maybeResolveIntent(event, router, tools, prevEvent)\n    // If resolvedIntent is truthy then we have a redirect to perform. Most of the time it'll be `null`\n    if (resolvedIntent) {\n      // console.debug('useEffect about to resolve intent URL to %o', resolvedIntent)\n      history.replace(resolvedIntent)\n    } else {\n      // console.debug('Syncing prevEvent.current to %o', event)\n      /**\n       * Sync the prevEvent ref with the current event, in a way that ensures the above side-effect is idemptotent.\n       * Idempotent means that if this hook is called multiple times, before the `history` state updates with the result of calling `history.replace` above,\n       * then the `prevEvent` ref remains the same until the `history` state has updated.\n       */\n      prevEvent.current = event\n    }\n  }, [event, history, router, tools])\n\n  const handleNavigate = useMemo<HandleNavigate>(() => {\n    // This is using useMemo instead of useCallback just so we can track if it's called an abnormal amount of times\n    // console.debug('handleNavigate useMemo called (should optimally only happen once)')\n    // console.count('handleNavigate')\n    return ({path, replace}) => {\n      // Handle intent resolving early, so we avoid rendering intermediate states in the workspace root, as it otherwise resolves intents in useEffect handlers\n      const predictedEvent = store.selector(path)\n      const resolvedIntent = maybeResolveIntent(predictedEvent, router, tools, prevEvent)\n      const resolvedPath = typeof resolvedIntent === 'string' ? resolvedIntent : path\n\n      if (replace) {\n        history.replace(resolvedPath)\n      } else {\n        history.push(resolvedPath)\n      }\n    }\n  }, [history, router, store, tools])\n\n  return [event?.state ?? null, handleNavigate]\n}\n\n// Handles intent resolving, both on navigate events (onClick and such), as well as onLoad by useEffect\nfunction maybeResolveIntent(\n  event: RouterStateEvent | null,\n  router: Router,\n  tools: Tool[],\n  prevEvent: MutableRefObject<RouterStateEvent | null>,\n): string | null {\n  if (event?.type === 'state' && event.state?.intent) {\n    const redirectState = resolveIntentState(\n      tools,\n      prevEvent.current?.type === 'state' ? prevEvent.current.state : {},\n      event.state,\n    )\n\n    if (redirectState?.type === 'state') {\n      return router.encode(redirectState.state)\n    }\n  }\n\n  return null\n}\n","import {type ComponentType, type ReactNode, useEffect, useState} from 'react'\nimport {combineLatest, of} from 'rxjs'\nimport {catchError, map} from 'rxjs/operators'\n\nimport {ErrorBoundary} from '../../../ui-components'\nimport {\n  ConfigResolutionError,\n  type Source,\n  type Workspace,\n  type WorkspaceSummary,\n} from '../../config'\nimport {useActiveWorkspace} from '../activeWorkspaceMatcher'\nimport {SourceProvider} from '../source'\nimport {WorkspaceProvider} from '../workspace'\nimport {WorkspaceRouterProvider} from './WorkspaceRouterProvider'\n\n// TODO: work on error handler\n// import {flattenErrors} from './flattenErrors'\n\ninterface WorkspaceLoaderProps {\n  children: ReactNode\n  ConfigErrorsComponent: ComponentType\n  LoadingComponent: ComponentType\n}\n\n/**\n * @internal\n */\nexport function useWorkspaceLoader(activeWorkspace: WorkspaceSummary) {\n  const [error, handleError] = useState<unknown>(null)\n  if (error) throw error\n\n  const [workspace, setWorkspace] = useState<Workspace | null>(null)\n\n  useEffect(() => {\n    const subscription = combineLatest(\n      activeWorkspace.__internal.sources.map(({source}) =>\n        source.pipe(\n          catchError((err) => {\n            if (err instanceof ConfigResolutionError) return of(err)\n            throw err\n          }),\n        ),\n      ),\n    )\n      .pipe(\n        map((results): Source[] => {\n          const errors = results.filter((result) => result instanceof ConfigResolutionError)\n          if (errors.length) {\n            throw new ConfigResolutionError({\n              name: activeWorkspace.name,\n              causes: errors,\n              type: 'workspace',\n            })\n          }\n\n          return results as Source[]\n        }),\n        map(\n          ([rootSource, ...restOfSources]): Workspace => ({\n            ...activeWorkspace,\n            ...rootSource,\n            unstable_sources: [rootSource, ...restOfSources],\n            type: 'workspace',\n          }),\n        ),\n      )\n      .subscribe({\n        next: setWorkspace,\n        error: handleError,\n      })\n\n    return () => subscription.unsubscribe()\n  }, [activeWorkspace])\n\n  return workspace\n}\n\nfunction WorkspaceLoader({\n  children,\n  LoadingComponent,\n}: Omit<WorkspaceLoaderProps, 'ConfigErrorsComponent'>) {\n  const {activeWorkspace} = useActiveWorkspace()\n  const workspace = useWorkspaceLoader(activeWorkspace)\n  if (!workspace) return <LoadingComponent />\n\n  // TODO: may need a screen if one of the sources is not logged in. e.g. it\n  // is currently possible for the user to be logged into the current workspace\n  // but not all of its nested sources.\n  // if (!allSourcesLoggedIn) return <NotAllSourcesAuthenticatedComponent />\n\n  return (\n    <WorkspaceProvider workspace={workspace}>\n      <SourceProvider\n        // the first source is always the root source and is always present\n        source={workspace.unstable_sources[0]}\n      >\n        <WorkspaceRouterProvider LoadingComponent={LoadingComponent} workspace={workspace}>\n          {children}\n        </WorkspaceRouterProvider>\n      </SourceProvider>\n    </WorkspaceProvider>\n  )\n}\n\n/**\n * @internal\n */\nfunction WorkspaceLoaderBoundary({ConfigErrorsComponent, ...props}: WorkspaceLoaderProps) {\n  const [{error}, setError] = useState<{error: unknown}>({error: null})\n\n  // TODO: implement this\n  // const errors = useMemo(() => flattenErrors(error, []), [error])\n\n  //TODO: implement config error screen - a story has been created for this\n  // if (error instanceof ConfigResolutionError) return <ConfigErrorsComponent />\n\n  // otherwise hand off to other boundaries\n  if (error) throw error\n\n  return (\n    <ErrorBoundary onCatch={setError}>\n      <WorkspaceLoader {...props} />\n    </ErrorBoundary>\n  )\n}\n\nexport {WorkspaceLoaderBoundary as WorkspaceLoader}\n","import {ToastProvider} from '@sanity/ui'\nimport {type ReactNode, useMemo} from 'react'\nimport Refractor from 'react-refractor'\nimport bash from 'refractor/lang/bash.js'\nimport javascript from 'refractor/lang/javascript.js'\nimport json from 'refractor/lang/json.js'\nimport jsx from 'refractor/lang/jsx.js'\nimport typescript from 'refractor/lang/typescript.js'\n\nimport {LoadingBlock} from '../components/loadingBlock'\nimport {ErrorLogger} from '../error/ErrorLogger'\nimport {errorReporter} from '../error/errorReporter'\nimport {LocaleProvider} from '../i18n'\nimport {GlobalPerspectiveProvider} from '../perspective/GlobalPerspectiveProvider'\nimport {ResourceCacheProvider} from '../store'\nimport {UserColorManagerProvider} from '../user-color'\nimport {ActiveWorkspaceMatcher} from './activeWorkspaceMatcher'\nimport {AuthBoundary} from './AuthBoundary'\nimport {ColorSchemeProvider} from './colorScheme'\nimport {Z_OFFSET} from './constants'\nimport {MaybeEnableErrorReporting} from './MaybeEnableErrorReporting'\nimport {PackageVersionStatusProvider} from './packageVersionStatus/PackageVersionStatusProvider'\nimport {\n  AuthenticateScreen,\n  ConfigErrorsScreen,\n  NotAuthenticatedScreen,\n  NotFoundScreen,\n} from './screens'\nimport {type StudioProps} from './Studio'\nimport {StudioAnnouncementsProvider} from './studioAnnouncements/StudioAnnouncementsProvider'\nimport {StudioErrorBoundary} from './StudioErrorBoundary'\nimport {StudioThemeProvider} from './StudioThemeProvider'\nimport {StudioTelemetryProvider} from './telemetry/StudioTelemetryProvider'\nimport {WorkspaceLoader} from './workspaceLoader'\nimport {WorkspacesProvider} from './workspaces'\n\nRefractor.registerLanguage(bash)\nRefractor.registerLanguage(javascript)\nRefractor.registerLanguage(json)\nRefractor.registerLanguage(jsx)\nRefractor.registerLanguage(typescript)\n\n/**\n * @hidden\n * @beta */\nexport interface StudioProviderProps extends StudioProps {\n  children: ReactNode\n}\n\n/**\n * @hidden\n * @beta */\nexport function StudioProvider({\n  children,\n  config,\n  basePath,\n  onSchemeChange,\n  scheme,\n  unstable_history: history,\n  unstable_noAuthBoundary: noAuthBoundary,\n}: StudioProviderProps) {\n  // We initialize the error reporter as early as possible in order to catch anything that could\n  // occur during configuration loading, React rendering etc. StudioProvider is often the highest\n  // mounted React component that is shared across embedded and standalone studios.\n  errorReporter.initialize()\n\n  const _children = useMemo(\n    () => (\n      <WorkspaceLoader LoadingComponent={LoadingBlock} ConfigErrorsComponent={ConfigErrorsScreen}>\n        <StudioTelemetryProvider config={config}>\n          <LocaleProvider>\n            <PackageVersionStatusProvider>\n              <MaybeEnableErrorReporting errorReporter={errorReporter} />\n              <ResourceCacheProvider>\n                <StudioAnnouncementsProvider>\n                  <GlobalPerspectiveProvider>{children}</GlobalPerspectiveProvider>\n                </StudioAnnouncementsProvider>\n              </ResourceCacheProvider>\n            </PackageVersionStatusProvider>\n          </LocaleProvider>\n        </StudioTelemetryProvider>\n      </WorkspaceLoader>\n    ),\n    [children, config],\n  )\n\n  return (\n    <ColorSchemeProvider onSchemeChange={onSchemeChange} scheme={scheme}>\n      <ToastProvider paddingY={7} zOffset={Z_OFFSET.toast}>\n        <ErrorLogger />\n        <StudioErrorBoundary>\n          <WorkspacesProvider config={config} basePath={basePath} LoadingComponent={LoadingBlock}>\n            <ActiveWorkspaceMatcher\n              unstable_history={history}\n              NotFoundComponent={NotFoundScreen}\n              LoadingComponent={LoadingBlock}\n            >\n              <StudioThemeProvider>\n                <UserColorManagerProvider>\n                  {noAuthBoundary ? (\n                    _children\n                  ) : (\n                    <AuthBoundary\n                      LoadingComponent={LoadingBlock}\n                      AuthenticateComponent={AuthenticateScreen}\n                      NotAuthenticatedComponent={NotAuthenticatedScreen}\n                    >\n                      {_children}\n                    </AuthBoundary>\n                  )}\n                </UserColorManagerProvider>\n              </StudioThemeProvider>\n            </ActiveWorkspaceMatcher>\n          </WorkspacesProvider>\n        </StudioErrorBoundary>\n      </ToastProvider>\n    </ColorSchemeProvider>\n  )\n}\n","/* eslint-disable simple-import-sort/imports */\n/* disabling for now because the imports trigger side effects causing test snapshots to update */\nimport {type Config} from '../config'\nimport {type StudioThemeColorSchemeKey} from '../theme/types'\nimport {GlobalStyle} from './GlobalStyle'\nimport {type RouterHistory} from './router'\nimport {StudioLayout} from './StudioLayout'\nimport {StudioProvider} from './StudioProvider'\n\n/**\n * @hidden\n * @beta */\nexport interface StudioProps {\n  config: Config\n  basePath?: string\n  /**\n   * Useful for scenarios where the Studio is embedded in another app,\n   * and the surrounding app also implements light and dark color schemes.\n   *\n   * The callback is fired whenever the user selects a new color scheme in the \"Appearance\" menu in the top-right dropdown.\n   * It also fires on first render with its initial value if you don't provide a `scheme` prop.\n   *\n   * If the user selects \"System\" in the \"Appearance\" menu, the callback will be fired with `\"system\"` as the scheme.\n   * To resolve `\"system\"` to the same color scheme as the Studio use the `usePrefersDark` hook from `@sanity/ui`:\n   *\n   * ```tsx\n   * import {usePrefersDark} from '@sanity/ui'\n   * import {Studio} from 'sanity'\n   *\n   * export default function StudioPage() {\n   *   const prefersDark = usePrefersDark()\n   *   const [_scheme, setScheme] = useState('system')\n   *   const prefersScheme = prefersDark ? 'dark' : 'light'\n   *   const scheme = _scheme === 'system' ? prefersScheme : _scheme\n   *\n   *   return (\n   *     <AppLayout scheme={scheme}>\n   *       <Studio config={config} onSchemeChange={setScheme} />\n   *     </AppLayout>\n   *   )\n   * }\n   * ```\n   *\n   *\n   * @hidden\n   * @beta\n   */\n  onSchemeChange?: (nextScheme: StudioThemeColorSchemeKey) => void\n  /**\n   * By default the Studio handles the color scheme itself, but you can provide a color scheme to use.\n   * If you only define `scheme` then the top-right \"Appearance\" dropdown menu will be hidden,\n   * and the Studio will stay in sync with the `scheme` prop.\n   *\n   * You may setup two-way sync and re-enable the \"Appearance\" dropdown menu by also providing an `onSchemeChange` callback:\n   * ```tsx\n   * import {Studio} from 'sanity'\n   * import {useSession} from 'your-app'\n   *\n   * export default function StudioPage() {\n   *   const session = useSession()\n   *   // Overrides the default scheme to be what's in the app user session\n   *   const [_scheme, setScheme] = useState(session.scheme)\n   *   const scheme = _scheme === 'system' ? session.scheme : _scheme\n   *\n   *   return (\n   *     <AppLayout scheme={scheme}>\n   *       <Studio config={config} scheme={scheme} onSchemeChange={setScheme} />\n   *     </AppLayout>\n   *   )\n   * }\n   * ```\n   *\n   *\n   * @hidden\n   * @beta\n   */\n  scheme?: StudioThemeColorSchemeKey\n  /**\n   * @hidden\n   * @beta */\n  unstable_history?: RouterHistory\n  /**\n   * @hidden\n   * @beta */\n  unstable_globalStyles?: boolean\n  /**\n   * @hidden\n   * @beta */\n  unstable_noAuthBoundary?: boolean\n}\n\n/**\n * @hidden\n * @beta */\nexport function Studio(props: StudioProps): React.JSX.Element {\n  const {\n    basePath,\n    config,\n    onSchemeChange,\n    scheme,\n    unstable_globalStyles: globalStyles,\n    unstable_history,\n    unstable_noAuthBoundary,\n  } = props\n\n  return (\n    <StudioProvider\n      basePath={basePath}\n      config={config}\n      onSchemeChange={onSchemeChange}\n      scheme={scheme}\n      unstable_history={unstable_history}\n      unstable_noAuthBoundary={unstable_noAuthBoundary}\n    >\n      {globalStyles && <GlobalStyle />}\n      <StudioLayout />\n    </StudioProvider>\n  )\n}\n","import {StrictMode} from 'react'\nimport {createRoot} from 'react-dom/client'\n\nimport {type Config} from '../config'\nimport {Studio} from './Studio'\n\ninterface RenderStudioOptions {\n  basePath?: string\n  reactStrictMode?: boolean\n}\n\n/**\n * @internal\n * @deprecated Use `renderStudio(rootElement, config, {reactStrictMode: true})` instead\n */\nexport function renderStudio(\n  rootElement: HTMLElement | null,\n  config: Config,\n  options: boolean,\n): () => void\n\n/** @internal */\nexport function renderStudio(rootElement: HTMLElement | null, config: Config): () => void\n\n/** @internal */\nexport function renderStudio(\n  rootElement: HTMLElement | null,\n  config: Config,\n  options: RenderStudioOptions,\n): () => void\n\n/** @internal */\nexport function renderStudio(\n  rootElement: HTMLElement | null,\n  config: Config,\n  options: RenderStudioOptions | boolean = false,\n): () => void {\n  if (!rootElement) {\n    throw new Error('Missing root element to mount application into')\n  }\n\n  const opts = typeof options === 'boolean' ? {reactStrictMode: options} : options\n  const {reactStrictMode = false, basePath} = opts\n\n  const root = createRoot(rootElement)\n\n  root.render(\n    reactStrictMode ? (\n      <StrictMode>\n        <Studio config={config} basePath={basePath} unstable_globalStyles />\n      </StrictMode>\n    ) : (\n      <Studio config={config} basePath={basePath} unstable_globalStyles />\n    ),\n  )\n\n  return () => root.unmount()\n}\n","import {type SanityClient} from '@sanity/client'\n\nimport {type SourceClientOptions} from '../config'\nimport {useSource} from '../studio'\n\n/**\n * React hook that returns a configured Sanity client instance based on the given configuration.\n * Automatically uses the correct project and dataset based on the current active workspace.\n *\n * @public\n * @param clientOptions - Options for the client. Specifying\n *   {@link https://www.sanity.io/docs/api-versioning | apiVersion} is required in order to\n *   prevent breaking changes if studio changes the API version used in other places.\n *   See {@link SourceClientOptions}\n * @returns A configured Sanity client instance\n * @remarks The client instance is automatically memoized based on API version\n * @example Instantiating a client\n * ```ts\n * function MyComponent() {\n *   const client = useClient({apiVersion: '2021-06-07'})\n *   // ... do something with client instance ...\n * }\n * ```\n */\nexport function useClient(clientOptions?: SourceClientOptions): SanityClient {\n  const source = useSource()\n  if (!clientOptions) {\n    console.warn(\n      'Calling `useClient()` without specifying an API version is deprecated and will stop working in the next major version - please specify a date, e.g. `useClient({apiVersion: \"2025-02-10\"})`.',\n    )\n    return source.getClient({apiVersion: 'v2025-02-07'})\n  }\n\n  return source.getClient(clientOptions)\n}\n","import {useSource} from '../studio'\n\n/**\n * React hook that returns the name of the current dataset\n *\n * @public\n * @returns The name of the current dataset\n * @example Using the `useDataset` hook\n * ```ts\n * function MyComponent() {\n *   const dataset = useDataset()\n *   // ... do something with the dataset name ...\n * }\n * ```\n */\nexport function useDataset(): string {\n  return useSource().dataset\n}\n","import {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\n\nimport {useDocumentStore} from '../store'\n\n/** @internal */\nexport function useDocumentOperationEvent(publishedDocId: string, docTypeName: string) {\n  const documentStore = useDocumentStore()\n\n  const observable = useMemo(\n    () => documentStore.pair.operationEvents(publishedDocId, docTypeName),\n    [docTypeName, documentStore.pair, publishedDocId],\n  )\n  return useObservable(observable)\n}\n","import {useMemo} from 'react'\n\nimport {useCurrentLocale} from '../i18n/hooks/useLocale'\nimport {intlCache} from '../i18n/intlCache'\nimport {useListFormat} from './useListFormat'\n\ntype Duration = {\n  days: number\n  hours: number\n  minutes: number\n  seconds: number\n  milliseconds: number\n}\ntype DurationUnit = keyof Duration\n\nconst PERIODS = ['days', 'hours', 'minutes', 'seconds', 'milliseconds'] as const\n\n/**\n * Options for the duration formatter\n *\n * @public\n */\nexport interface UseFormattedDurationOptions {\n  /**\n   * The formatting style to use in unit and list formatting. The default is \"short\".\n   */\n  style?: 'short' | 'long' | 'narrow'\n\n  /**\n   * The resolution of the duration. The default is \"seconds\".\n   */\n  resolution?: 'seconds' | 'milliseconds'\n}\n\n/**\n * The result of the duration formatter\n *\n * @public\n */\nexport interface FormattedDuration {\n  /** The human-readable, formatted duration as a string, eg \"2 days, 3 hr, and 20 sec\" */\n  formatted: string\n\n  /** The machine-readable, formatted ISO-8601 duration string, eg \"P2DT3H20S\" */\n  iso8601: string\n}\n\n/**\n * Formats a duration (in milliseconds) to a more user friendly string eg `1h 30m` or `1t 29m 15s`.\n * Can be configured to output full units, eg `1 hour 30 minutes` or `1 hour 3 minutes 15 seconds`.\n * Uses the current locale, which also applies to the division of units.\n *\n * @example English (en-US) locale formatting\n * ```ts\n * useFormattedDuration(5589000)\n * // {\"formatted\": \"1 hour, 33 minutes, and 9 seconds\", \"iso8601\": \"PT1H33M9S\"}\n * ```\n *\n * @example Norwegian (no-NB) locale formatting\n * ```ts\n * useFormattedDuration(5589000)\n * // {\"formatted\": \"1 time, 33 minutter og 9 sekunder\", \"iso8601\": \"PT1H33M9S\"}\n * ```\n *\n * @param options - Optional options for the number formatter\n * @returns An object with `formatted` and `iso8601` properties\n * @public\n */\nexport function useFormattedDuration(\n  durationMs: number,\n  options?: UseFormattedDurationOptions,\n): FormattedDuration {\n  const {style = 'short', resolution = 'seconds'} = options || {}\n  const unitDisplay = style\n  const locale = useCurrentLocale().id\n  const listFormat = useListFormat({type: 'unit', style})\n  const isNegative = durationMs < 0\n  const duration = parseMilliseconds(Math.abs(durationMs))\n  const formatters: Record<DurationUnit, Intl.NumberFormat> = useMemo(\n    () => ({\n      days: intlCache.numberFormat(locale, {style: 'unit', unit: 'day', unitDisplay}),\n      hours: intlCache.numberFormat(locale, {style: 'unit', unit: 'hour', unitDisplay}),\n      minutes: intlCache.numberFormat(locale, {style: 'unit', unit: 'minute', unitDisplay}),\n      seconds: intlCache.numberFormat(locale, {style: 'unit', unit: 'second', unitDisplay}),\n      milliseconds: intlCache.numberFormat(locale, {\n        style: 'unit',\n        unit: 'millisecond',\n        unitDisplay,\n      }),\n    }),\n    [locale, unitDisplay],\n  )\n\n  const parts: string[] = []\n  for (const period of PERIODS) {\n    const value = duration[period]\n    if (!value || (resolution === 'seconds' && period === 'milliseconds')) {\n      continue\n    }\n\n    const prefix = isNegative && parts.length === 0 ? '-' : ''\n    parts.push(`${prefix}${formatters[period].format(value)}`)\n  }\n\n  const formatted =\n    parts.length === 0\n      ? // If passing duration 0, we still want to show something\n        formatters[resolution].format(0)\n      : // Usually, we want to join the parts with the locales list formatter\n        listFormat.format(parts)\n\n  const iso8601 = durationToISO8601(duration, isNegative)\n\n  return {formatted, iso8601}\n}\n\n/**\n * Parse milliseconds to durations. We stop at days because months are not a fixed unit,\n * nor are years (365.25 strictly speaking, but people may expact calendar days). If we\n * wanted to include those, we'd want to use `intervalToDuration` from date-fns, and base\n * it on two specific dates.\n *\n * @param milliseconds - Milliseconds to parse\n * @returns Object of duration parts\n * @internal\n */\nfunction parseMilliseconds(milliseconds: number): Duration {\n  return {\n    days: Math.trunc(milliseconds / 86400000),\n    hours: Math.trunc(milliseconds / 3600000) % 24,\n    minutes: Math.trunc(milliseconds / 60000) % 60,\n    seconds: Math.trunc(milliseconds / 1000) % 60,\n    milliseconds: Math.trunc(milliseconds) % 1000,\n  }\n}\n\n/**\n * Format the given duration to an {@link https://en.wikipedia.org/wiki/ISO_8601#Durations | ISO-8601 duration}\n * string, eg `P1DT2H3M4.005S` meaning \"1 day, 2 hours, 3 minutes, 4 seconds and 5 milliseconds\".\n *\n * If days are zero, it will skip straight to the time part, eg `PT2H3M4.005S`.\n * If milliseconds are zero, it will skip the milliseconds part, eg `PT2H3M4S`.\n *\n * @param dur - The duration to format\n * @returns The formatted duration\n * @internal\n */\nfunction durationToISO8601(dur: Duration, isNegative: boolean): string {\n  const date = dur.days ? `${dur.days}D` : ''\n\n  let time = ''\n  if (dur.hours) time += `${dur.hours}H`\n  if (dur.minutes) time += `${dur.minutes}M`\n\n  if (dur.milliseconds) {\n    time += `${((dur.seconds * 1000 + dur.milliseconds) / 1000).toFixed(3)}S`\n  } else if (dur.seconds) {\n    time += `${dur.seconds}S`\n  }\n\n  if (!date && !time) {\n    return 'PT0S'\n  }\n\n  const parts = time ? [date, time] : [date]\n  const duration = `P${parts.join('T')}`\n  return isNegative ? `-${duration}` : duration\n}\n","import {type Path} from '@sanity/types'\nimport {isHotkey} from 'is-hotkey-esm'\nimport {useEffect} from 'react'\nimport {useEffectEvent} from 'use-effect-event'\n\nimport {isFileTargetElement} from '../form/inputs/common/fileTarget/fileTarget'\nimport {type FormDocumentValue} from '../form/types/formDocumentValue'\nimport {useCopyPaste} from '../studio/copyPaste'\nimport {hasSelection, isEmptyFocusPath, isNativeEditableElement} from '../studio/copyPaste/utils'\n\n/** @internal */\nexport interface GlobalCopyPasteElementHandler {\n  value: FormDocumentValue | undefined\n  element: HTMLElement | null\n  focusPath?: Path\n}\n\nconst isCopyHotKey = isHotkey(`mod+c`)\nconst isPasteHotKey = isHotkey(`mod+v`)\n\n/** @internal */\nexport function useGlobalCopyPasteElementHandler({\n  value,\n  element,\n  focusPath,\n}: GlobalCopyPasteElementHandler): void {\n  const {onCopy, onPaste} = useCopyPaste()\n\n  const handleKeydown = useEffectEvent((event: KeyboardEvent) => {\n    const targetElement = event.target\n\n    if (isCopyHotKey(event)) {\n      // We will skip handling this event if you have focus on an native editable element\n      if (\n        isNativeEditableElement(targetElement as HTMLElement) ||\n        hasSelection() ||\n        isEmptyFocusPath(focusPath!)\n      ) {\n        return\n      }\n\n      event.preventDefault()\n      event.stopPropagation()\n      onCopy(focusPath!, value, {\n        context: {source: 'keyboardShortcut'},\n      })\n    }\n\n    if (isPasteHotKey(event)) {\n      if (\n        isNativeEditableElement(targetElement as HTMLElement) ||\n        isEmptyFocusPath(focusPath!) ||\n        isFileTargetElement(targetElement as HTMLElement)\n      ) {\n        return\n      }\n\n      event.stopPropagation()\n      event.preventDefault()\n      onPaste(focusPath!, value, {\n        context: {source: 'keyboardShortcut'},\n      })\n    }\n  })\n\n  useEffect(() => {\n    element?.addEventListener('keydown', handleKeydown)\n\n    return () => {\n      element?.removeEventListener('keydown', handleKeydown)\n    }\n  }, [element, onPaste])\n}\n","import {useCurrentLocale} from '../i18n/hooks/useLocale'\nimport {intlCache} from '../i18n/intlCache'\n\n/**\n * Options for the `useNumberFormat` hook\n *\n * @public\n */\nexport type UseNumberFormatOptions = Intl.NumberFormatOptions\n\n/**\n * Returns an instance of `Intl.NumberFormat` that uses the currently selected locale,\n * and enables locale/language-sensitive number formatting.\n *\n * @param options - Optional options for the number formatter\n * @returns Instance of `Intl.NumberFormat`\n * @public\n */\nexport function useNumberFormat(options: UseNumberFormatOptions = {}): Intl.NumberFormat {\n  const currentLocale = useCurrentLocale().id\n  return intlCache.numberFormat(currentLocale, options)\n}\n","import {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {type Observable} from 'rxjs'\nimport {map} from 'rxjs/operators'\n\nimport {useDocumentStore} from '../store'\n\n/** @internal */\nexport interface SyncState {\n  isSyncing: boolean\n}\n\nconst SYNCING = {isSyncing: true}\nconst NOT_SYNCING = {isSyncing: false}\n\n/** @internal */\nexport function useSyncState(\n  publishedDocId: string,\n  documentType: string,\n  version?: string,\n): SyncState {\n  const documentStore = useDocumentStore()\n\n  const observable = useMemo(\n    () =>\n      documentStore.pair\n        .consistencyStatus(publishedDocId, documentType, version)\n        .pipe(map((isConsistent) => (isConsistent ? NOT_SYNCING : SYNCING))),\n    [documentStore.pair, documentType, publishedDocId, version],\n  )\n  return useObservable<Observable<SyncState>>(observable, NOT_SYNCING)\n}\n","import {useSource} from '../studio'\nimport {type Template} from '../templates'\n\n/**\n *\n * @hidden\n * @beta\n */\nexport function useTemplates(): Template[] {\n  return useSource().templates\n}\n","import {useRelativeTime} from './useRelativeTime'\n\n/** @internal */\nexport interface TimeAgoOpts {\n  minimal?: boolean\n  agoSuffix?: boolean\n}\n\n/**\n * @deprecated - Use {@link useRelativeTime} instead\n * @internal\n */\nexport function useTimeAgo(time: Date | string, options: TimeAgoOpts = {}): string {\n  return useRelativeTime(time, {\n    minimal: options.minimal,\n    useTemporalPhrase: options.agoSuffix,\n  })\n}\n","import {type Tool} from '../config'\nimport {useSource} from '../studio'\n\n/**\n *\n * @hidden\n * @beta\n */\nexport function useTools(): Tool[] {\n  return useSource().tools\n}\n","/* eslint-disable max-nested-callbacks */\nimport {type SanityDocument} from '@sanity/client'\nimport {type User} from '@sanity/types'\nimport {sortBy} from 'lodash'\nimport {useEffect, useMemo, useState} from 'react'\nimport {concat, forkJoin, map, mergeMap, type Observable, of, shareReplay, switchMap} from 'rxjs'\n\nimport {\n  type DocumentValuePermission,\n  grantsPermissionOn,\n  type ProjectData,\n  useProjectStore,\n  useUserStore,\n} from '../store'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../studioClient'\nimport {useClient} from './useClient'\n\ntype Loadable<T> = {\n  data: T | null\n  error: Error | null\n  loading: boolean\n}\n\n/**\n * @beta\n * @hidden\n */\nexport type UserListWithPermissionsHookValue = Loadable<UserWithPermission[]> & {\n  /** when true, comments has mention feature disabled\n   * @internal\n   * */\n  disabled?: boolean\n}\n\n/**\n * @beta\n * @hidden\n */\nexport interface UserWithPermission extends User {\n  granted: boolean\n}\n\nconst INITIAL_STATE: UserListWithPermissionsHookValue = {\n  data: [],\n  error: null,\n  loading: true,\n}\n\n/**\n * @beta\n */\nexport interface UserListWithPermissionsOptions {\n  documentValue: SanityDocument | null\n  permission: DocumentValuePermission\n}\n\n/**\n * @beta\n * Returns a list of users with the specified permission on the document.\n * If no document is provided it will return all as `granted: true`\n */\nexport function useUserListWithPermissions(\n  opts: UserListWithPermissionsOptions,\n): UserListWithPermissionsHookValue {\n  const {documentValue, permission} = opts\n\n  const projectStore = useProjectStore()\n  const userStore = useUserStore()\n  const client = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n\n  const [state, setState] = useState<UserListWithPermissionsHookValue>(INITIAL_STATE)\n\n  const [users$, systemGroup$] = 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      .pipe(shareReplay(1))\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<UserWithPermission[]> = 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          granted: 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 _systemGroup$ = client.observable.fetch('*[_type == \"system.group\"]').pipe(shareReplay(1))\n    return [_users$, _systemGroup$]\n  }, [client.observable, projectStore, userStore])\n\n  const list$ = useMemo(() => {\n    // 4. Check if the user has read permission on the document and set the `granted` property\n    const grants$: Observable<UserWithPermission[]> = forkJoin([users$, systemGroup$]).pipe(\n      mergeMap(async ([users, groups]) => {\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            permission,\n            documentValue,\n          )\n\n          return {\n            ...user,\n            granted: granted,\n          }\n        })\n\n        return await Promise.all(grantPromises || [])\n      }),\n    )\n\n    // 5. Sort the users alphabetically\n    const $alphabetical: Observable<Loadable<UserWithPermission[]>> = grants$.pipe(\n      map((res) => ({\n        error: null,\n        loading: false,\n        data: sortBy(res, 'displayName'),\n      })),\n    )\n\n    return $alphabetical\n  }, [documentValue, permission, users$, systemGroup$])\n\n  useEffect(() => {\n    const initial$ = of(INITIAL_STATE)\n    const state$ = concat(initial$, list$)\n\n    const sub = state$.subscribe({\n      next: setState,\n      error: (error) => {\n        setState({data: [], error, loading: false})\n      },\n    })\n\n    return () => {\n      sub.unsubscribe()\n    }\n  }, [list$])\n\n  return state\n}\n","import {type PreviewValue, type SanityDocument} from '@sanity/types'\nimport {type BadgeTone, Flex, Text} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nimport {useRelativeTime} from '../../hooks'\nimport {useTranslation} from '../../i18n'\nimport {\n  getReleaseIdFromReleaseDocumentId,\n  getReleaseTone,\n  ReleaseAvatar,\n  useActiveReleases,\n  type VersionInfoDocumentStub,\n} from '../../releases'\n\ninterface DocumentStatusProps {\n  draft?: PreviewValue | Partial<SanityDocument> | null\n  published?: PreviewValue | Partial<SanityDocument> | null\n  versions?: Record<string, VersionInfoDocumentStub | undefined>\n  singleLine?: boolean\n}\n\n/**\n * Displays document status indicating both last published and edited dates in either relative (the default)\n * or absolute formats.\n *\n * These can be displayed in a single or multi-line (the default) lockups.\n *\n * Example: `**Published Oct 16 2023** Edited 8m ago`\n *\n * @internal\n */\nexport function DocumentStatus({draft, published, versions, singleLine}: DocumentStatusProps) {\n  const {data: releases} = useActiveReleases()\n  const versionsList = useMemo(() => Object.entries(versions ?? {}), [versions])\n  const {t} = useTranslation()\n\n  return (\n    <Flex\n      align={singleLine ? 'center' : 'flex-start'}\n      direction={singleLine ? 'row' : 'column'}\n      gap={3}\n      wrap=\"nowrap\"\n    >\n      {published && (\n        <VersionStatus\n          title={t('release.chip.published')}\n          mode=\"published\"\n          timestamp={published._updatedAt}\n          tone={'positive'}\n        />\n      )}\n      {draft && (\n        <VersionStatus\n          title={t('release.chip.draft')}\n          mode=\"draft\"\n          timestamp={draft._updatedAt}\n          tone=\"caution\"\n        />\n      )}\n      {versionsList.map(([versionName, snapshot]) => {\n        if (!snapshot) {\n          return null\n        }\n        const release = releases?.find(\n          (r) => getReleaseIdFromReleaseDocumentId(r._id) === versionName,\n        )\n        return (\n          <VersionStatus\n            key={versionName}\n            mode={snapshot?._updatedAt === snapshot?._createdAt ? 'created' : 'edited'}\n            title={release?.metadata.title || t('release.placeholder-untitled-release')}\n            timestamp={snapshot?._updatedAt}\n            tone={release ? getReleaseTone(release) : 'default'}\n          />\n        )\n      })}\n    </Flex>\n  )\n}\n\ntype Mode = 'edited' | 'created' | 'draft' | 'published'\n\nconst labels: Record<Mode, string> = {\n  draft: 'document-status.edited',\n  published: 'document-status.date',\n  edited: 'document-status.edited',\n  created: 'document-status.created',\n}\n\nconst VersionStatus = ({\n  title,\n  timestamp,\n  mode,\n  tone,\n}: {\n  title: string | undefined\n  mode: Mode\n  timestamp?: string\n  tone: BadgeTone\n}) => {\n  const {t} = useTranslation()\n\n  const relativeTime = useRelativeTime(timestamp || '', {\n    minimal: true,\n    useTemporalPhrase: true,\n  })\n\n  return (\n    <Flex align=\"center\" gap={2}>\n      <ReleaseAvatar tone={tone} padding={0} />\n      <Text size={1}>\n        {title || t('release.placeholder-untitled-release')}{' '}\n        <span style={{color: 'var(--card-muted-fg-color)'}}>\n          {t(labels[mode], {date: relativeTime})}\n        </span>\n      </Text>\n    </Flex>\n  )\n}\n","import {type HookCollectionActionHook} from './types'\n\nconst actionIds = new WeakMap<HookCollectionActionHook<any, any>, string>()\n\nlet counter = 0\n\n/** @internal */\nexport function getHookId<T, K>(actionHook: HookCollectionActionHook<T, K>): string {\n  const cachedId = actionIds.get(actionHook)\n\n  if (cachedId) return cachedId\n\n  const id = `${actionHook.name || (actionHook as any).displayName || '<anonymous>'}-${counter++}`\n\n  actionIds.set(actionHook, id)\n\n  return id\n}\n","import {memo, useEffect} from 'react'\n\nimport {type HookCollectionActionHook} from './types'\n\nexport function defineHookStateComponent<Args, State>({\n  hook: useHook,\n  id,\n}: {\n  hook: HookCollectionActionHook<\n    Args & {\n      onComplete: () => void\n    },\n    State\n  >\n  id: string\n}) {\n  const HookStateComponent = ({\n    args,\n    handleNext,\n    handleReset,\n  }: {\n    args: Args\n    handleNext: (id: string, hookState: any) => void\n    handleReset: (id: string) => void\n  }) => {\n    const hookState = useHook({\n      ...args,\n      onComplete: () => {\n        handleReset(id)\n      },\n    })\n\n    useEffect(() => {\n      handleNext(id, hookState)\n      return () => {\n        handleNext(id, null)\n      }\n    }, [handleNext, hookState])\n\n    return null\n  }\n  // Massively helps debugging and profiling by setting the display name\n  const {displayName = 'HookState'} = useHook\n  HookStateComponent.displayName = displayName\n  return memo(\n    HookStateComponent,\n    // Only re-render if the args prop changes, ignore other prop changes\n    (prev, next) => prev.args === next.args,\n  )\n}\n","import {memo, useMemo} from 'react'\n\nimport {getHookId} from './actionId'\nimport {defineHookStateComponent} from './defineHookStateComponent'\nimport {type HookCollectionActionHook} from './types'\n\nexport const HookCollectionState = memo(\n  <T, K>({\n    hooks,\n    keys,\n    args,\n    handleNext,\n    handleReset,\n  }: {\n    hooks: HookCollectionActionHook<T & {onComplete: () => void}, K>[]\n    keys: Record<string, number>\n    args: T\n    handleNext: (id: string, hookState: any) => void\n    handleReset: (id: string) => void\n  }) => {\n    const HooksState = useMemo(() => {\n      return hooks.map((hook) => {\n        const id = getHookId(hook)\n        const key = keys[id] || 0\n\n        return [\n          defineHookStateComponent<T, K>({\n            hook,\n            id,\n          }),\n          `${id}-${key}`,\n        ] as const\n      })\n    }, [hooks, keys])\n\n    return (\n      <>\n        {HooksState.map(([HookState, key]) => (\n          <HookState key={key} args={args} handleNext={handleNext} handleReset={handleReset} />\n        ))}\n      </>\n    )\n  },\n)\nHookCollectionState.displayName = 'Memo(HookCollectionState)'\n","import {useCallback, useState} from 'react'\n\nexport function useHookCollectionKeys(onReset: (() => void) | undefined) {\n  const [keys, setKeys] = useState<Record<string, number>>({})\n\n  const handleReset = useCallback(\n    (id: string) => {\n      setKeys((currentKeys) => ({...currentKeys, [id]: (currentKeys[id] || 0) + 1}))\n      onReset?.()\n    },\n    [onReset],\n  )\n\n  return {keys, handleReset}\n}\n","const requestIdleCallbackShim: Window['requestIdleCallback'] = (callback) => {\n  const start = Date.now()\n\n  return setTimeout(() => {\n    callback({\n      didTimeout: false,\n      timeRemaining() {\n        return Math.max(0, Date.now() - start)\n      },\n    })\n  }, 1) as unknown as ReturnType<Window['requestIdleCallback']>\n}\n\nconst cancelIdleCallbackShim: Window['cancelIdleCallback'] = (handle: unknown) => {\n  return clearTimeout(handle as any)\n}\n\nconst _requestIdleCallback =\n  typeof requestIdleCallback === 'undefined' ? requestIdleCallbackShim : requestIdleCallback\nconst _cancelIdleCallback =\n  typeof cancelIdleCallback === 'undefined' ? cancelIdleCallbackShim : cancelIdleCallback\n\nexport {_requestIdleCallback as requestIdleCallback}\nexport {_cancelIdleCallback as cancelIdleCallback}\n","import {type ThrottleSettings} from 'lodash'\nimport {useCallback, useRef, useState} from 'react'\nimport deepCompare from 'react-fast-compare'\n\nimport {isNonNullable, useThrottledCallback} from '../../util'\nimport {getHookId} from './actionId'\nimport {cancelIdleCallback, requestIdleCallback} from './requestIdleCallback'\nimport {type GetHookCollectionStateProps} from './types'\n\nconst throttleOptions: ThrottleSettings = {trailing: true}\n\nfunction mapHooksToStates<Args, State>(\n  states: Map<string, State>,\n  {hooks}: Pick<GetHookCollectionStateProps<Args, State>, 'hooks'>,\n) {\n  return hooks\n    .map((hook) => {\n      const id = getHookId(hook)\n      return states.get(id)\n    })\n    .filter(isNonNullable)\n}\n\nexport function useHookCollectionStates<Args, State>({\n  hooks,\n  group,\n}: Pick<GetHookCollectionStateProps<Args, State>, 'hooks' | 'group'>) {\n  const [states] = useState(() => new Map<string, State>())\n  const [snapshot, setSnapshot] = useState<NonNullable<State>[]>(() =>\n    mapHooksToStates(states, {hooks}),\n  )\n\n  const timeoutRef = useRef(0)\n  const updateSnapshot = useCallback(() => {\n    cancelIdleCallback(timeoutRef.current)\n\n    timeoutRef.current = requestIdleCallback(() => {\n      setSnapshot(mapHooksToStates(states, {hooks}))\n    })\n  }, [hooks, states])\n\n  const requestUpdateSnapshot = useThrottledCallback(\n    updateSnapshot,\n    60,\n    throttleOptions,\n  ) as typeof updateSnapshot\n\n  const handleNext = useCallback(\n    (id: string, hookState: any) => {\n      let shouldUpdateSnapshot = true\n\n      const hookGroup = hookState?.group || ['default']\n      if (hookState === null || (group && !hookGroup.includes(group))) {\n        states.delete(id)\n      } else {\n        if (states.has(id)) {\n          const prev = states.get(id)\n          shouldUpdateSnapshot = !deepCompare(prev, hookState)\n        }\n        states.set(id, hookState)\n      }\n\n      if (shouldUpdateSnapshot) {\n        requestUpdateSnapshot()\n      }\n    },\n    [group, requestUpdateSnapshot, states],\n  )\n\n  return {states: snapshot, handleNext}\n}\n","import {memo, useMemo} from 'react'\n\nimport {HookCollectionState} from './HookCollectionState'\nimport {type GetHookCollectionStateProps} from './types'\nimport {useHookCollectionKeys} from './useHookCollectionKeys'\nimport {useHookCollectionStates} from './useHookCollectionStates'\n\nconst GetHookCollectionStateComponent = memo(\n  <Args, State>(props: GetHookCollectionStateProps<Args, State>) => {\n    const {hooks, args, children, group, onReset} = props\n\n    const {handleReset, keys} = useHookCollectionKeys(onReset)\n    const {states, handleNext} = useHookCollectionStates({hooks, group})\n\n    const result = useMemo(() => children({states}), [children, states])\n\n    return (\n      <>\n        <HookCollectionState\n          hooks={hooks as any}\n          keys={keys}\n          args={args}\n          handleNext={handleNext}\n          handleReset={handleReset}\n        />\n        {result}\n      </>\n    )\n  },\n)\nGetHookCollectionStateComponent.displayName = 'Memo(GetHookCollectionState)'\n\n/** @internal */\nexport const GetHookCollectionState = GetHookCollectionStateComponent as <Args, State>(\n  props: GetHookCollectionStateProps<Args, State>,\n) => React.JSX.Element\n","import {type HTMLProps} from 'react'\nimport {IntentLink, type IntentLinkProps} from 'sanity/router'\n\nimport {Button, type ButtonProps} from '../../ui-components'\n\n/**\n *\n * @hidden\n * @beta\n */\nexport function IntentButton(\n  props: IntentLinkProps & ButtonProps & Omit<HTMLProps<HTMLButtonElement>, 'ref' | 'size' | 'as'>,\n) {\n  return props.disabled ? (\n    <Button {...props} as=\"a\" role=\"link\" aria-disabled=\"true\" />\n  ) : (\n    <Button {...props} as={IntentLink} />\n  )\n}\n","import {\n  _responsive,\n  Container,\n  type ContainerProps,\n  rem,\n  type ResponsiveWidthStyleProps,\n  useArrayProp,\n} from '@sanity/ui'\nimport {forwardRef, type ReactNode, type Ref} from 'react'\nimport {styled} from 'styled-components'\n\n// This is a workaround to make sure that the Container gets the correct width when used inside a popover.\n// The default Container uses `maxWidth` which doesn't work well with popovers because the popover\n// calculates its width based on the content width.\nconst StyledContainer = styled(Container)<ResponsiveWidthStyleProps>((props) => {\n  const {theme} = props\n  const {container, media} = theme.sanity\n\n  return _responsive(media, props.$width, (val) => ({\n    // Make sure that the Container gets the correct width when used inside a popover.\n    width: val === 'auto' ? 'none' : rem(container[val]),\n    // Make sure that the Container width is constrained by available space.\n    maxWidth: '100%',\n  }))\n})\n\ninterface PopoverContainerProps extends ContainerProps {\n  children: ReactNode\n}\n\nexport const PopoverContainer = forwardRef(function PopoverContainer(\n  props: PopoverContainerProps,\n  ref: Ref<HTMLDivElement>,\n) {\n  const {width, ...restProps} = props\n  const widthArr = useArrayProp(width)\n\n  return <StyledContainer {...restProps} data-ui=\"PopoverContainer\" $width={widthArr} ref={ref} />\n})\n","import {CloseIcon} from '@sanity/icons'\nimport {Box, Flex, Layer, type ResponsiveWidthProps, Stack, Text, type Theme} from '@sanity/ui'\nimport {type Dispatch, type ReactNode, type SetStateAction, useCallback} from 'react'\nimport TrapFocus from 'react-focus-lock'\nimport {css, styled} from 'styled-components'\n\nimport {Button, Popover, type PopoverProps} from '../../../ui-components'\nimport {PopoverContainer} from './PopoverContainer'\n\nconst StyledPopover = styled(Popover)(() => {\n  return css`\n    // Make the popover scrollable if it overflows the viewport\n    [data-ui='Popover__wrapper'] {\n      overflow: auto;\n    }\n  `\n})\n\n// This layer is sticky so that the header is always visible when scrolling\nconst StickyLayer = styled(Layer)((props: {theme: Theme}) => {\n  const radii = props.theme.sanity.radius[3]\n\n  return css`\n    position: sticky;\n    top: 0;\n    width: 100%;\n    background: var(--card-bg-color);\n    border-bottom: 1px solid var(--card-border-color);\n    border-top-left-radius: ${radii}px;\n    border-top-right-radius: ${radii}px;\n  `\n})\n\ninterface PopoverDialogProps {\n  children: ReactNode\n  header?: ReactNode\n  onClose: () => void\n  referenceElement: PopoverProps['referenceElement']\n  width: ResponsiveWidthProps['width']\n  containerRef?: Dispatch<SetStateAction<HTMLDivElement | null>>\n}\n\n/** @internal */\nexport function PopoverDialog(props: PopoverDialogProps) {\n  const {children, header, onClose, referenceElement, containerRef, width} = props\n\n  const handleClose = useCallback(() => {\n    onClose()\n\n    // Set focus to the reference element when closing\n    referenceElement?.focus()\n  }, [onClose, referenceElement])\n\n  // @todo: these use the same styles as dialogs, can this be shared?\n  const content = (\n    <PopoverContainer width={width}>\n      <TrapFocus autoFocus>\n        <Stack ref={containerRef}>\n          <StickyLayer>\n            <Box padding={2} paddingLeft={4}>\n              <Flex align=\"center\" gap={2}>\n                <Box flex={1}>\n                  <Text size={1} textOverflow=\"ellipsis\" weight=\"medium\">\n                    {header}\n                  </Text>\n                </Box>\n                <Button\n                  icon={CloseIcon}\n                  mode=\"bleed\"\n                  onClick={handleClose}\n                  tooltipProps={{content: 'Close'}}\n                />\n              </Flex>\n            </Box>\n          </StickyLayer>\n          <Box padding={4}>{children}</Box>\n        </Stack>\n      </TrapFocus>\n    </PopoverContainer>\n  )\n\n  // Note: if you come here to attempt to add support for Escape to close and/or clickOutside to close, please read this first:\n  //  - Escape must work with nested dialogs/popover. So if you have an array inside here that opens its items in another a popover,\n  //    hitting escape should only close the topmost dialog\n  //  - clickOutside needs to work through portals. So if you have an array inside here that opens its items in a dialog/portal,\n  //    any clicks inside such dialogs or portals should not cause _this_ popover to close\n  return (\n    <StyledPopover\n      portal\n      constrainSize\n      content={content}\n      open\n      referenceElement={referenceElement}\n    />\n  )\n}\n","import {Card, type CardProps} from '@sanity/ui'\nimport {type ForwardedRef, forwardRef, type HTMLProps, useContext, useMemo} from 'react'\nimport {PreviewCardContext} from 'sanity/_singletons'\nimport {css, styled} from 'styled-components'\n\n/** @internal */\nconst StyledCard = styled(Card)(() => {\n  return css`\n    /* TextWithTone uses its own logic to set color, and we therefore need */\n    /* to override this logic in order to set the correct color in different states */\n    &[data-selected],\n    &[data-pressed],\n    &:active {\n      [data-ui='TextWithTone'] {\n        color: inherit;\n      }\n    }\n  `\n})\n\n/** @internal */\nexport interface PreviewCardContextValue {\n  selected?: boolean\n}\n\n/** @internal */\nexport function usePreviewCard(): PreviewCardContextValue {\n  const context = useContext(PreviewCardContext)\n\n  if (!context) {\n    throw new Error('PreviewCard: missing context value')\n  }\n\n  return context\n}\n\n/** @internal */\nexport const PreviewCard = forwardRef(function PreviewCard(\n  props: CardProps & Omit<HTMLProps<HTMLDivElement>, 'height'>,\n  ref: ForwardedRef<HTMLDivElement>,\n) {\n  const {children, selected, as, ...restProps} = props\n\n  const value = useMemo(() => ({selected}), [selected])\n\n  return (\n    <StyledCard data-ui=\"PreviewCard\" {...restProps} forwardedAs={as} ref={ref} selected={selected}>\n      <PreviewCardContext.Provider value={value}>{children}</PreviewCardContext.Provider>\n    </StyledCard>\n  )\n})\n\n/**\n *  This is a workaround for a circular import issue.\n * Calling `styled(PreviewCard)` at program load time triggered a build error with the commonjs bundle because it tried\n * to access the PreviewCard variable/symbol before it was initialized.\n * The workaround is to colocate the styled component with the component itself.\n * @internal\n */\nexport const ReferenceInputPreviewCard = styled(PreviewCard)`\n  /* this is a hack to avoid layout jumps while previews are loading\nthere's probably better ways of solving this */\n  min-height: 36px;\n`\n","import {rem} from '@sanity/ui'\nimport {css, styled} from 'styled-components'\n\nimport {PREVIEW_SIZES} from '../constants'\nimport {type PreviewLayoutKey, type PreviewMediaDimensions} from '../types'\n\nexport const MediaWrapper = styled.span<{\n  $dimensions: PreviewMediaDimensions\n  $layout: PreviewLayoutKey\n  $radius: number\n  $responsive: boolean\n}>((props) => {\n  const {$dimensions, $layout, $radius, $responsive} = props\n  const width = $dimensions.width || 0\n  const height = $dimensions.width || 0\n  const iconSize = PREVIEW_SIZES[$layout].icon\n\n  return css`\n    position: relative;\n    width: ${$responsive ? '100%' : rem(width)};\n    height: ${$responsive ? '100%' : rem(height)};\n    min-width: ${$responsive ? undefined : rem(width)};\n    border-radius: ${({theme}) => rem(theme.sanity.radius[$radius])};\n    display: flex;\n    overflow: hidden;\n    overflow: clip;\n    align-items: center;\n    justify-content: center;\n\n    & img {\n      position: absolute;\n      left: 0;\n      top: 0;\n      width: 100%;\n      height: 100%;\n      object-fit: contain;\n      border-radius: inherit;\n    }\n\n    & svg {\n      // Shared styles for SVG icons\n      color: var(--card-icon-color);\n      display: block;\n      flex: 1;\n\n      // Specific styles for non Sanity icons\n      &:not([data-sanity-icon]) {\n        height: 1em;\n        width: 1em;\n        max-width: 1em;\n        max-height: 1em;\n      }\n\n      // Specific styles for Sanity icons\n      &[data-sanity-icon] {\n        display: block;\n        font-size: calc(${iconSize} / 16 * 1em);\n      }\n    }\n\n    & > span[data-border] {\n      display: block;\n      position: absolute;\n      left: 0;\n      top: 0;\n      right: 0;\n      bottom: 0;\n      box-shadow: inset 0 0 0 1px var(--card-fg-color);\n      opacity: 0.1;\n      border-radius: inherit;\n      pointer-events: none;\n    }\n  `\n})\n\nMediaWrapper.displayName = 'Styled(MediaWrapper)'\n","import {Text} from '@sanity/ui'\nimport {isValidElement, type ReactNode} from 'react'\nimport {isValidElementType} from 'react-is'\n\nimport {type PreviewLayoutKey, type PreviewMediaDimensions, type PreviewProps} from '../types'\nimport {MediaWrapper} from './Media.styled'\n\nexport interface MediaProps {\n  border?: boolean\n  dimensions: PreviewMediaDimensions\n  layout: PreviewLayoutKey\n  media: PreviewProps['media']\n  radius?: number\n  responsive?: boolean\n  styles?: {\n    media?: string\n    mediaString?: string\n  }\n}\n\nexport function Media(props: MediaProps) {\n  const {border = true, dimensions, layout, media, radius = 1, responsive = false, styles} = props\n\n  return (\n    <MediaWrapper\n      $dimensions={dimensions}\n      $layout={layout}\n      $radius={radius}\n      $responsive={responsive}\n      className={styles?.media}\n      data-testid=\"Media\"\n    >\n      {renderMedia({dimensions, layout, media})}\n      {border && <span data-border />}\n    </MediaWrapper>\n  )\n}\n\nfunction renderMedia(props: {\n  dimensions: PreviewMediaDimensions\n  layout: PreviewLayoutKey\n  media: PreviewProps['media']\n  styles?: {\n    media?: string\n    mediaString?: string\n  }\n}): ReactNode {\n  const {dimensions, layout, media, styles} = props\n\n  if (isValidElementType(media)) {\n    const MediaComponent = media\n    return <MediaComponent dimensions={dimensions} layout={layout} />\n  }\n\n  if (typeof media === 'string') {\n    return (\n      <Text as=\"span\" className={styles?.mediaString} size={1}>\n        {media}\n      </Text>\n    )\n  }\n\n  if (isValidElement(media)) {\n    return media\n  }\n\n  return null\n}\n","import {type ElementType, type ReactNode} from 'react'\nimport {isValidElementType} from 'react-is'\n\nimport {type PreviewLayoutKey, type PreviewMediaDimensions} from './types'\n\nexport function renderPreviewMedia<Layout = PreviewLayoutKey>(\n  value: ReactNode | ElementType<{layout: Layout; dimensions: PreviewMediaDimensions}>,\n  layout: Layout,\n  dimensions: PreviewMediaDimensions,\n): ReactNode {\n  if (isValidElementType(value)) {\n    const Value = value\n    return <Value layout={layout} dimensions={dimensions} />\n  }\n\n  if (typeof value === 'string') {\n    return <div>{value}</div>\n  }\n\n  // @todo: find out why `value` isn't infered as `ReactNode` here\n  return value as any\n}\n\nexport function renderPreviewNode<Layout = PreviewLayoutKey>(\n  value: ReactNode | ElementType<{layout: Layout}>,\n  layout: Layout,\n  fallbackNode?: ReactNode,\n): ReactNode {\n  if (typeof value === 'string') {\n    return value\n  }\n\n  if (isValidElementType(value)) {\n    const Value = value\n    return <Value layout={layout} />\n  }\n\n  // @todo: find out why `value` isn't infered as `ReactNode` here\n  return (value as any) || fallbackNode\n}\n","import {Box, Flex, rem, Skeleton, Stack, Text, TextSkeleton} from '@sanity/ui'\nimport {styled} from 'styled-components'\nimport {getDevicePixelRatio} from 'use-device-pixel-ratio'\n\nimport {useTranslation} from '../../../i18n'\nimport {Media} from '../_common/Media'\nimport {PREVIEW_SIZES} from '../constants'\nimport {renderPreviewNode} from '../helpers'\nimport {type PreviewMediaDimensions, type PreviewProps} from '../types'\n\n/**\n * @hidden\n * @beta */\nexport type CompactPreviewProps = Omit<PreviewProps<'compact'>, 'renderDefault'>\n\nconst DEFAULT_MEDIA_DIMENSIONS: PreviewMediaDimensions = {\n  ...PREVIEW_SIZES.compact.media,\n  aspect: 1,\n  fit: 'crop',\n  dpr: getDevicePixelRatio(),\n}\n\nconst Root = styled(Flex)`\n  height: ${rem(PREVIEW_SIZES.compact.media.height)};\n  box-sizing: content-box;\n`\n\nconst TitleSkeleton = styled(TextSkeleton).attrs({animated: true, radius: 1, size: 1})`\n  max-width: ${rem(160)};\n  width: 80%;\n`\n\n/**\n * @hidden\n * @beta */\nexport function CompactPreview(props: CompactPreviewProps) {\n  const {children, isPlaceholder, media, status, title} = props\n\n  const {t} = useTranslation()\n\n  const statusNode = status && (\n    <Box data-testid=\"compact-preview__status\" paddingLeft={4} paddingRight={1}>\n      {renderPreviewNode(status, 'compact')}\n    </Box>\n  )\n\n  if (isPlaceholder) {\n    return (\n      <Root\n        align=\"center\"\n        data-testid=\"default-preview\"\n        paddingLeft={media ? 1 : 2}\n        paddingRight={2}\n        paddingY={1}\n      >\n        <Flex align=\"center\" flex={1} gap={2}>\n          {media && <Skeleton animated radius={2} style={PREVIEW_SIZES.compact.media} />}\n\n          <Stack data-testid=\"compact-preview__heading\" flex={1} space={2}>\n            <TitleSkeleton />\n          </Stack>\n\n          {statusNode}\n        </Flex>\n      </Root>\n    )\n  }\n\n  return (\n    <Root\n      align=\"center\"\n      data-testid=\"compact-preview\"\n      paddingLeft={media ? 1 : 2}\n      paddingRight={2}\n      paddingY={1}\n    >\n      <Flex align=\"center\" flex={1} gap={2}>\n        {media && (\n          <Media\n            border={false}\n            dimensions={DEFAULT_MEDIA_DIMENSIONS}\n            layout=\"compact\"\n            media={media as any}\n          />\n        )}\n        <Stack data-testid=\"compact-preview__header\" flex={1} space={2}>\n          <Text size={1} style={{color: 'inherit'}} textOverflow=\"ellipsis\" weight=\"medium\">\n            {title && renderPreviewNode(title, 'compact')}\n            {!title && (\n              <span style={{color: 'var(--card-muted-fg-color)'}}>\n                {t('preview.default.title-fallback')}\n              </span>\n            )}\n          </Text>\n        </Stack>\n\n        {statusNode}\n      </Flex>\n\n      {children && <Box marginLeft={1}>{children}</Box>}\n    </Root>\n  )\n}\n","import {Box, Flex, rem, Skeleton, Stack, Text, TextSkeleton} from '@sanity/ui'\nimport classNames from 'classnames'\nimport {styled} from 'styled-components'\nimport {getDevicePixelRatio} from 'use-device-pixel-ratio'\n\nimport {useTranslation} from '../../../i18n'\nimport {Media} from '../_common/Media'\nimport {PREVIEW_SIZES} from '../constants'\nimport {renderPreviewNode} from '../helpers'\nimport {type PreviewMediaDimensions, type PreviewProps} from '../types'\n\n/**\n * @hidden\n * @beta */\nexport interface DefaultPreviewProps extends Omit<PreviewProps<'default'>, 'renderDefault'> {\n  styles?: {\n    root?: string\n    placeholder?: string\n    media?: string\n    heading?: string\n    title?: string\n    subtitle?: string\n    hasSubtitle?: string\n    mediaString?: string\n    status?: string\n    children?: string\n  }\n}\n\nconst DEFAULT_MEDIA_DIMENSIONS: PreviewMediaDimensions = {\n  ...PREVIEW_SIZES.default.media,\n  aspect: 1,\n  fit: 'crop',\n  dpr: getDevicePixelRatio(),\n}\n\nconst Root = styled(Flex)`\n  height: ${rem(PREVIEW_SIZES.default.media.height)};\n  box-sizing: content-box;\n`\n\nconst TitleSkeleton = styled(TextSkeleton).attrs({animated: true, radius: 1, size: 1})`\n  max-width: ${rem(160)};\n  width: 80%;\n`\n\nconst SubtitleSkeleton = styled(TextSkeleton).attrs({animated: true, radius: 1, size: 1})`\n  max-width: ${rem(120)};\n  width: 60%;\n`\nconst SKELETON_DELAY = 300\n/**\n * @hidden\n * @beta */\nexport function DefaultPreview(props: DefaultPreviewProps) {\n  const {title, subtitle, media, status, isPlaceholder, children, styles} = props\n  const {t} = useTranslation()\n  const rootClassName = classNames(styles?.root, Boolean(subtitle) && styles?.hasSubtitle)\n\n  const statusNode = status && (\n    <Box className={styles?.status} data-testid=\"default-preview__status\">\n      {renderPreviewNode(status, 'default')}\n    </Box>\n  )\n\n  if (isPlaceholder) {\n    return (\n      <Root\n        align=\"center\"\n        className={styles?.placeholder}\n        data-testid=\"default-preview\"\n        padding={2}\n        paddingLeft={media ? 2 : 3}\n      >\n        <Flex align=\"center\" flex={1} gap={2}>\n          {media && (\n            <Box flex=\"none\">\n              <Skeleton\n                animated\n                delay={SKELETON_DELAY}\n                radius={1}\n                style={PREVIEW_SIZES.default.media}\n              />\n            </Box>\n          )}\n\n          <Stack data-testid=\"default-preview__heading\" flex={1} space={2}>\n            <TitleSkeleton delay={SKELETON_DELAY} />\n            <SubtitleSkeleton delay={SKELETON_DELAY} />\n          </Stack>\n\n          <Box flex=\"none\" padding={1}>\n            {statusNode}\n          </Box>\n        </Flex>\n      </Root>\n    )\n  }\n\n  return (\n    <Root\n      align=\"center\"\n      className={rootClassName}\n      data-testid=\"default-preview\"\n      padding={2}\n      paddingLeft={media ? 2 : 3}\n    >\n      <Flex align=\"center\" flex={1} gap={2}>\n        {media && (\n          <Box flex=\"none\">\n            <Media\n              dimensions={DEFAULT_MEDIA_DIMENSIONS}\n              layout=\"default\"\n              media={media as any}\n              styles={styles}\n            />\n          </Box>\n        )}\n\n        <Stack className={styles?.heading} data-testid=\"default-preview__header\" flex={1} space={2}>\n          <Text\n            className={styles?.title}\n            size={1}\n            style={{color: 'inherit'}}\n            textOverflow=\"ellipsis\"\n            weight=\"medium\"\n          >\n            {title && renderPreviewNode(title, 'default')}\n            {!title && (\n              <span style={{color: 'var(--card-muted-fg-color)'}}>\n                {t('preview.default.title-fallback')}\n              </span>\n            )}\n          </Text>\n\n          {subtitle && (\n            <Text muted size={1} textOverflow=\"ellipsis\" className={styles?.subtitle}>\n              {renderPreviewNode(subtitle, 'default')}\n            </Text>\n          )}\n        </Stack>\n\n        <Box flex=\"none\" padding={1}>\n          {statusNode}\n        </Box>\n\n        {children && <div className={styles?.children}>{children}</div>}\n      </Flex>\n    </Root>\n  )\n}\n","import {Box, Flex, Stack, Text} from '@sanity/ui'\nimport {getDevicePixelRatio} from 'use-device-pixel-ratio'\n\nimport {useTranslation} from '../../../i18n'\nimport {Media} from '../_common/Media'\nimport {PREVIEW_SIZES} from '../constants'\nimport {renderPreviewNode} from '../helpers'\nimport {type PreviewMediaDimensions, type PreviewProps} from '../types'\nimport {\n  DescriptionSkeleton,\n  DescriptionText,\n  MediaSkeleton,\n  RootFlex,\n  StatusBox,\n  SubtitleSkeleton,\n  TitleSkeleton,\n} from './DetailPreview.styled'\n\n/**\n * @hidden\n * @beta */\nexport type DetailPreviewProps = PreviewProps<'detail'>\n\nconst DEFAULT_MEDIA_DIMENSIONS: PreviewMediaDimensions = {\n  ...PREVIEW_SIZES.detail.media,\n  fit: 'crop',\n  aspect: 1,\n  dpr: getDevicePixelRatio(),\n}\n\n/**\n * @hidden\n * @beta */\nexport function DetailPreview(props: DetailPreviewProps) {\n  const {\n    title,\n    subtitle,\n    description,\n    mediaDimensions = DEFAULT_MEDIA_DIMENSIONS,\n    media,\n    status,\n    children,\n    isPlaceholder,\n  } = props\n  const {t} = useTranslation()\n\n  const statusNode = status && (\n    <StatusBox marginLeft={3} paddingRight={1}>\n      {renderPreviewNode(status, 'detail')}\n    </StatusBox>\n  )\n\n  if (isPlaceholder) {\n    return (\n      <RootFlex\n        data-testid=\"detail-preview\"\n        paddingLeft={media ? 2 : 3}\n        paddingRight={2}\n        paddingY={2}\n      >\n        <Flex align=\"center\" flex={1} gap={3}>\n          {media && <MediaSkeleton data-testid=\"detail-preview__media\" />}\n\n          <Flex align=\"center\" data-testid=\"detail-preview__header\" flex={1}>\n            <Stack flex={1} space={2}>\n              <TitleSkeleton />\n              <SubtitleSkeleton />\n              {description && (\n                <Box marginTop={1}>\n                  <DescriptionSkeleton />\n                </Box>\n              )}\n            </Stack>\n          </Flex>\n\n          {statusNode}\n        </Flex>\n      </RootFlex>\n    )\n  }\n\n  return (\n    <RootFlex\n      data-testid=\"detail-preview\"\n      paddingLeft={media ? 2 : 3}\n      paddingRight={2}\n      paddingY={2}\n    >\n      <Flex align=\"center\" flex={1} gap={3}>\n        {media && <Media dimensions={mediaDimensions} layout=\"detail\" media={media as any} />}\n\n        <Flex align=\"center\" data-testid=\"detail-preview__header\" flex={1}>\n          <Stack flex={1} space={2}>\n            <Text textOverflow=\"ellipsis\" size={1} style={{color: 'inherit'}} weight=\"medium\">\n              {title && renderPreviewNode(title, 'detail')}\n              {!title && <>{t('preview.default.title-fallback')}</>}\n            </Text>\n\n            {subtitle && (\n              <Text muted size={1} textOverflow=\"ellipsis\">\n                {renderPreviewNode(subtitle, 'detail')}\n              </Text>\n            )}\n\n            {description && (\n              <Box marginTop={1}>\n                <DescriptionText muted size={1}>\n                  {renderPreviewNode(description, 'detail')}\n                </DescriptionText>\n              </Box>\n            )}\n          </Stack>\n\n          {statusNode}\n        </Flex>\n\n        {children}\n      </Flex>\n    </RootFlex>\n  )\n}\n","import {hues} from '@sanity/color'\nimport {type Theme} from '@sanity/ui'\nimport {css, styled} from 'styled-components'\n\nconst SIZE = 43\nconst STROKE_WIDTH = 3\n\nconst Root = styled.svg`\n  width: ${SIZE}px;\n  height: ${SIZE}px;\n  transform: rotate(-90deg);\n`\n\nconst BgCircle = styled.circle(({theme}: {theme: Theme}) => {\n  const {color} = theme.sanity\n\n  return css`\n    fill: none;\n    stroke: ${hues.gray[color.dark ? 900 : 100].hex};\n    stroke-width: ${STROKE_WIDTH}px;\n  `\n})\n\nconst ProgressCircle = styled.circle(({theme}: {theme: Theme}) => {\n  const {color} = theme.sanity\n\n  return css`\n    fill: none;\n    stroke: ${hues.blue[color.dark ? 400 : 500].hex};\n    stroke-width: ${STROKE_WIDTH}px;\n    transition: stroke-dashoffset 75ms;\n  `\n})\n\n/**\n * @hidden\n * @beta */\nexport function CircularProgress(props: {\n  /** Percentage */\n  value: number\n}) {\n  const {value: valueProp} = props\n  const value = Math.min(Math.max(valueProp, 0), 100)\n  const radius = SIZE / 2 - STROKE_WIDTH / 2\n  const circ = 2 * Math.PI * radius\n  const offset = ((100 - value) / 100) * circ\n  const viewBox = `${SIZE / 2} ${SIZE / 2} ${SIZE} ${SIZE}`\n\n  return (\n    <Root viewBox={viewBox}>\n      <BgCircle cx={SIZE} cy={SIZE} r={radius} />\n      <ProgressCircle\n        cx={SIZE}\n        cy={SIZE}\n        r={radius}\n        style={{\n          strokeDasharray: circ,\n          strokeDashoffset: `${offset}px`,\n        }}\n      />\n    </Root>\n  )\n}\n","import {hues} from '@sanity/color'\nimport {Card, type Theme} from '@sanity/ui'\nimport {css, styled} from 'styled-components'\n\nconst STROKE_WIDTH = 0.5\n\nconst Root = styled(Card)`\n  overflow: hidden;\n  overflow: clip;\n`\n\nconst Bar = styled(Card)(({theme}: {theme: Theme}) => {\n  const {color} = theme.sanity\n\n  return css`\n    height: ${STROKE_WIDTH}rem;\n    background: ${hues.blue[color.dark ? 400 : 500].hex};\n    transition: transform 75ms;\n  `\n})\n\n/**\n * @hidden\n * @beta */\nexport function LinearProgress(props: {\n  /** Percentage */\n  value: number\n}) {\n  const {value} = props\n\n  return (\n    <Root radius={5}>\n      <Bar radius={5} style={{transform: `translate3d(${value - 100}%, 0, 0)`}} />\n    </Root>\n  )\n}\n","import {Box, Flex, rem, Skeleton, Stack} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const RootBox = styled(Box)`\n  position: relative;\n`\n\nexport const MediaFlex = styled(Flex).attrs({align: 'center', justify: 'center'})`\n  position: absolute;\n  left: 0;\n  top: 0;\n  right: 0;\n  bottom: 0;\n`\n\nexport const MediaSkeleton = styled(Skeleton).attrs({animated: true, radius: 2})`\n  width: 100%;\n  height: 100%;\n`\n\nexport const ProgressFlex = styled(Flex).attrs({align: 'center', justify: 'center'})`\n  position: absolute;\n  left: 0;\n  top: 0;\n  right: 0;\n  bottom: 0;\n\n  &:before {\n    background-color: var(--card-bg-color);\n    opacity: 0.75;\n    content: '';\n    display: block;\n    position: absolute;\n    left: 0;\n    top: 0;\n    right: 0;\n    bottom: 0;\n  }\n\n  > svg {\n    position: relative;\n    z-index: 2;\n  }\n`\n\nexport const TooltipContentStack = styled(Stack).attrs({space: 2})`\n  max-width: ${rem(200)};\n`\n","import {Box, Text} from '@sanity/ui'\nimport {useMemo} from 'react'\nimport {getDevicePixelRatio} from 'use-device-pixel-ratio'\n\nimport {Tooltip} from '../../../../ui-components'\nimport {CircularProgress} from '../../progress'\nimport {Media} from '../_common/Media'\nimport {PREVIEW_SIZES} from '../constants'\nimport {renderPreviewNode} from '../helpers'\nimport {type PreviewMediaDimensions, type PreviewProps} from '../types'\nimport {\n  MediaFlex,\n  MediaSkeleton,\n  ProgressFlex,\n  RootBox,\n  TooltipContentStack,\n} from './MediaPreview.styled'\n\n/**\n * @hidden\n * @beta */\nexport type MediaPreviewProps = Omit<PreviewProps<'media'>, 'renderDefault'>\n\nconst DEFAULT_MEDIA_DIMENSIONS: PreviewMediaDimensions = {\n  ...PREVIEW_SIZES.media.media,\n  aspect: 1,\n  fit: 'crop',\n  dpr: getDevicePixelRatio(),\n}\n\n/**\n * @hidden\n * @beta */\nexport function MediaPreview(props: MediaPreviewProps) {\n  const {\n    media,\n    mediaDimensions = DEFAULT_MEDIA_DIMENSIONS,\n    children,\n    isPlaceholder,\n    progress = -1,\n    subtitle,\n    title,\n    withBorder = true,\n    withRadius = true,\n  } = props\n\n  const aspect = mediaDimensions.aspect || 1\n\n  const STYLES_PADDER = useMemo(() => ({paddingBottom: `${100 / aspect}%`}), [aspect])\n\n  const tooltipContent = useMemo(() => {\n    if (!title || !subtitle) {\n      return null\n    }\n\n    return (\n      <TooltipContentStack>\n        {title && (\n          <Text align=\"center\" size={1} weight=\"medium\">\n            {renderPreviewNode(title, 'media')}\n          </Text>\n        )}\n\n        {subtitle && (\n          <Text align=\"center\" muted size={1}>\n            {renderPreviewNode(subtitle, 'media')}\n          </Text>\n        )}\n      </TooltipContentStack>\n    )\n  }, [subtitle, title])\n\n  return (\n    <Box padding={2}>\n      <RootBox data-testid=\"media-preview\" flex={1} overflow=\"hidden\">\n        <div style={STYLES_PADDER} />\n\n        <Tooltip content={tooltipContent} disabled={!tooltipContent} placement=\"top\" portal>\n          <MediaFlex>\n            {isPlaceholder ? (\n              <MediaSkeleton />\n            ) : (\n              <Media\n                border={withBorder}\n                dimensions={mediaDimensions}\n                layout=\"media\"\n                media={media as any}\n                radius={withRadius ? 1 : 0}\n                responsive\n              />\n            )}\n\n            {typeof progress === 'number' && progress > -1 && (\n              <ProgressFlex>\n                <CircularProgress value={progress} />\n              </ProgressFlex>\n            )}\n          </MediaFlex>\n        </Tooltip>\n\n        {children}\n      </RootBox>\n    </Box>\n  )\n}\n","import {Box, Card, Flex, rem} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {PREVIEW_SIZES} from '../constants'\n\nexport const HeaderFlex = styled(Flex).attrs({align: 'center'})`\n  height: ${rem(PREVIEW_SIZES.block.media.height)};\n  white-space: nowrap;\n  position: relative;\n  z-index: 1;\n`\n\nexport const MediaCard = styled(Card)<{$ratio: number}>`\n  overflow: hidden;\n  position: relative;\n  padding-bottom: ${({$ratio}) => $ratio}%;\n\n  & > span {\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n  }\n`\n\nexport const RootBox = styled(Box).attrs({overflow: 'hidden'})`\n  border-radius: ${({theme}) => theme.sanity.radius[1]}px;\n`\n","import {Box, Flex, Stack, Text} from '@sanity/ui'\nimport {getDevicePixelRatio} from 'use-device-pixel-ratio'\n\nimport {Media} from '../_common/Media'\nimport {PREVIEW_SIZES} from '../constants'\nimport {renderPreviewNode} from '../helpers'\nimport {type PreviewMediaDimensions, type PreviewProps} from '../types'\nimport {HeaderFlex, MediaCard, RootBox} from './BlockImagePreview.styled'\n\n/**\n * @hidden\n * @beta */\nexport type BlockImagePreviewProps = Omit<PreviewProps<'blockImage'>, 'renderDefault'>\n\nconst DEFAULT_MEDIA_DIMENSIONS: PreviewMediaDimensions = {\n  ...PREVIEW_SIZES.blockImage.media,\n  fit: 'fillmax',\n  dpr: getDevicePixelRatio(),\n}\n\nconst getRatio = (dimensions: PreviewMediaDimensions) => {\n  const {height, width} = dimensions\n\n  if (!height || !width) {\n    return 1\n  }\n\n  return (height / width) * 100\n}\n\n/**\n * @hidden\n * @beta */\nexport function BlockImagePreview(props: BlockImagePreviewProps) {\n  const {\n    actions,\n    title,\n    subtitle,\n    description,\n    fallbackTitle = 'Untitled',\n    mediaDimensions = DEFAULT_MEDIA_DIMENSIONS,\n    media,\n    children,\n    status,\n  } = props\n\n  return (\n    <RootBox>\n      <Stack>\n        <HeaderFlex paddingBottom={3} paddingLeft={2} paddingRight={1} paddingTop={1}>\n          <Stack flex={1} space={2}>\n            {(title || fallbackTitle) && (\n              <Text size={1} textOverflow=\"ellipsis\" weight=\"medium\">\n                {title ? renderPreviewNode(title as any, 'block') : fallbackTitle}\n              </Text>\n            )}\n\n            {subtitle && (\n              <Text muted size={1} textOverflow=\"ellipsis\">\n                {renderPreviewNode(subtitle as any, 'block')}\n              </Text>\n            )}\n          </Stack>\n\n          <Flex gap={1} paddingLeft={1}>\n            {status && (\n              <Box paddingX={2} paddingY={3}>\n                {renderPreviewNode(status as any, 'block')}\n              </Box>\n            )}\n\n            {actions as any}\n          </Flex>\n        </HeaderFlex>\n\n        <MediaCard\n          $ratio={getRatio(mediaDimensions)}\n          __unstable_checkered\n          display=\"flex\"\n          sizing=\"border\"\n          radius={2}\n          tone=\"inherit\"\n        >\n          <Media\n            border={false}\n            dimensions={mediaDimensions}\n            layout=\"blockImage\"\n            media={media as any}\n            radius={0}\n            responsive\n          />\n        </MediaCard>\n      </Stack>\n\n      {description && (\n        <Box paddingX={2} paddingY={3}>\n          <Text muted size={1}>\n            {renderPreviewNode(description as any, 'block')}\n          </Text>\n        </Box>\n      )}\n\n      {children && <div>{children}</div>}\n    </RootBox>\n  )\n}\n","import {Box, Flex, rem, Stack, Text} from '@sanity/ui'\nimport {styled} from 'styled-components'\nimport {getDevicePixelRatio} from 'use-device-pixel-ratio'\n\nimport {Media} from '../_common/Media'\nimport {PREVIEW_SIZES} from '../constants'\nimport {renderPreviewNode} from '../helpers'\nimport {type PreviewMediaDimensions, type PreviewProps} from '../types'\n\nconst DEFAULT_MEDIA_DIMENSIONS: PreviewMediaDimensions = {\n  ...PREVIEW_SIZES.block.media,\n  aspect: 1,\n  fit: 'crop',\n  dpr: getDevicePixelRatio(),\n}\n\nconst HeaderFlex = styled(Flex).attrs({align: 'center'})`\n  min-height: ${rem(PREVIEW_SIZES.block.media.height)};\n`\n\n/**\n * @hidden\n * @beta */\nexport function BlockPreview(props: Omit<PreviewProps<'block'>, 'renderDefault'>) {\n  const {\n    actions,\n    title,\n    subtitle,\n    description,\n    mediaDimensions = DEFAULT_MEDIA_DIMENSIONS,\n    media,\n    status,\n    children,\n  } = props\n\n  return (\n    <Stack data-testid=\"block-preview\" space={1}>\n      <HeaderFlex data-testid=\"block-preview__header\">\n        {media && <Media dimensions={mediaDimensions} layout=\"block\" media={media as any} />}\n\n        <Box flex={1} paddingLeft={media ? 2 : 1}>\n          <Text size={1} textOverflow=\"ellipsis\" weight=\"medium\">\n            {title ? renderPreviewNode(title, 'block') : 'Untitled'}\n          </Text>\n\n          {subtitle && (\n            <Box marginTop={2}>\n              <Text muted size={1} textOverflow=\"ellipsis\">\n                {renderPreviewNode(subtitle, 'block')}\n              </Text>\n            </Box>\n          )}\n\n          {description && (\n            <Box marginTop={3}>\n              <Text muted size={1} textOverflow=\"ellipsis\">\n                {renderPreviewNode(description, 'block')}\n              </Text>\n            </Box>\n          )}\n        </Box>\n\n        <Flex gap={1} paddingLeft={1}>\n          {status && (\n            <Box paddingX={2} paddingY={3}>\n              {renderPreviewNode(status, 'block')}\n            </Box>\n          )}\n\n          {actions as any}\n        </Flex>\n      </HeaderFlex>\n\n      {children && <div data-testid=\"block-preview__children\">{children}</div>}\n    </Stack>\n  )\n}\n","import {rem, Text, type Theme} from '@sanity/ui'\nimport {css, styled} from 'styled-components'\n\nexport const RootSpan = styled.span`\n  display: inline-flex;\n  align-items: center;\n  vertical-align: top;\n  height: calc(1em - 1px);\n  max-width: 100%;\n`\n\nexport const MediaSpan = styled.span`\n  position: relative;\n  display: inline-block;\n  width: calc(1em - 1px);\n  height: calc(1em - 1px);\n  min-width: calc(1em - 1px);\n\n  & img {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n    border-radius: ${({theme}) => rem(theme.sanity.radius[1])};\n  }\n\n  & img + span {\n    position: absolute;\n    left: 0;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    box-shadow: inset 0 0 0 1px var(--card-fg-color);\n    opacity: 0.2;\n    border-radius: ${({theme}) => rem(theme.sanity.radius[1])};\n  }\n\n  & svg {\n    display: block;\n    font-size: calc(14 / 16 * 1em);\n    margin: 1px 0;\n\n    &[data-sanity-icon] {\n      font-size: calc(18 / 16 * 1em);\n      margin: calc(1px + (2 / 18 * -1em)) 0;\n    }\n  }\n`\n\nexport const TextSpan = styled(Text).attrs({forwardedAs: 'span'})(({theme}: {theme: Theme}) => {\n  const textFont = theme.sanity.fonts.text\n  const textSize = textFont.sizes[1]\n\n  return css`\n    font-size: calc(${textSize.fontSize} / 16 * 1em);\n    font-weight: ${textFont.weights.medium};\n    box-sizing: border-box;\n    display: inline-block;\n    vertical-align: top;\n    line-height: ${textSize.lineHeight / textSize.fontSize};\n    padding-left: 0.5em;\n    padding-right: calc(0.5em - 2px);\n    min-width: 0;\n\n    & > span {\n      display: block;\n      white-space: nowrap;\n      text-overflow: ellipsis;\n      overflow: hidden;\n      overflow: clip;\n    }\n  `\n})\n","import {getDevicePixelRatio} from 'use-device-pixel-ratio'\n\nimport {PREVIEW_SIZES} from '../constants'\nimport {renderPreviewMedia, renderPreviewNode} from '../helpers'\nimport {type PreviewMediaDimensions, type PreviewProps} from '../types'\nimport {MediaSpan, RootSpan, TextSpan} from './InlinePreview.styled'\n\n/**\n * @hidden\n * @beta */\nexport type InlinePreviewProps = Omit<PreviewProps<'inline'>, 'renderDefault'>\n\nconst DEFAULT_MEDIA_DIMENSIONS: PreviewMediaDimensions = {\n  ...PREVIEW_SIZES.inline.media,\n  fit: 'crop',\n  aspect: 1,\n  dpr: getDevicePixelRatio(),\n}\n\n/**\n * @hidden\n * @beta */\nexport function InlinePreview(props: InlinePreviewProps) {\n  const {\n    title,\n    fallbackTitle = 'Untitled',\n    media,\n    mediaDimensions = DEFAULT_MEDIA_DIMENSIONS,\n  } = props\n\n  return (\n    <RootSpan data-testid=\"inline-preview\">\n      {media && (\n        <MediaSpan data-testid=\"inline-preview-media\">\n          {renderPreviewMedia(media, 'inline', mediaDimensions)}\n          <span />\n        </MediaSpan>\n      )}\n\n      <TextSpan data-testid=\"inline-preview-title\" size={1}>\n        {renderPreviewNode(title, 'inline', fallbackTitle)}\n      </TextSpan>\n    </RootSpan>\n  )\n}\n","import {Box, Flex, rem, Stack, Text, TextSkeleton} from '@sanity/ui'\nimport {type ElementType, isValidElement, type ReactNode} from 'react'\nimport {isValidElementType} from 'react-is'\nimport {styled} from 'styled-components'\nimport {getDevicePixelRatio} from 'use-device-pixel-ratio'\n\nimport {Media, type MediaProps} from '../_common/Media'\nimport {PREVIEW_SIZES} from '../constants'\nimport {type PreviewMediaDimensions} from '../types'\n\n/**\n * @hidden\n * @beta */\nexport interface TemplatePreviewProps {\n  description?: ReactNode\n  isPlaceholder?: boolean\n  media?: MediaProps['media']\n  mediaDimensions?: PreviewMediaDimensions\n  subtitle?: ElementType<{layout: 'default'}> | ReactNode\n  title?: ElementType<{layout: 'default'}> | ReactNode\n}\n\nconst DEFAULT_MEDIA_DIMENSION: PreviewMediaDimensions = {\n  ...PREVIEW_SIZES.default.media,\n  aspect: 1,\n  fit: 'crop',\n  dpr: getDevicePixelRatio(),\n}\n\nconst Root = styled(Box)`\n  height: 100%;\n\n  a {\n    color: currentColor;\n    text-decoration: none;\n  }\n\n  svg[data-sanity-icon] {\n    margin: 0;\n  }\n`\n\nconst HeaderFlex = styled(Flex).attrs({align: 'center'})`\n  height: ${rem(PREVIEW_SIZES.default.media.height)};\n`\n\nconst TitleSkeleton = styled(TextSkeleton).attrs({animated: true, radius: 1})`\n  max-width: ${rem(160)};\n  width: 80%;\n`\n\nconst SubtitleSkeleton = styled(TextSkeleton).attrs({animated: true, radius: 1, size: 1})`\n  max-width: ${rem(120)};\n  width: 60%;\n`\n\n/**\n * @hidden\n * @beta */\nexport function TemplatePreview(props: TemplatePreviewProps) {\n  const {\n    description,\n    isPlaceholder,\n    media,\n    mediaDimensions = DEFAULT_MEDIA_DIMENSION,\n    subtitle: Subtitle,\n    title: Title = 'Untitled',\n  } = props\n\n  if (isPlaceholder) {\n    return (\n      <Root>\n        <HeaderFlex>\n          <Stack flex={1} space={2}>\n            <TitleSkeleton />\n            <SubtitleSkeleton />\n          </Stack>\n        </HeaderFlex>\n      </Root>\n    )\n  }\n\n  return (\n    <Root>\n      <HeaderFlex>\n        <Stack flex={1} space={2}>\n          {isValidElementType(Title) && (\n            <Text textOverflow=\"ellipsis\">\n              <Title layout=\"default\" />\n            </Text>\n          )}\n          {isValidElement(Title) && <Text textOverflow=\"ellipsis\">{Title}</Text>}\n\n          {isValidElementType(Subtitle) && (\n            <Text muted size={1} textOverflow=\"ellipsis\">\n              <Subtitle layout=\"default\" />\n            </Text>\n          )}\n          {isValidElement(Subtitle) && (\n            <Text muted size={1} textOverflow=\"ellipsis\">\n              {Subtitle}\n            </Text>\n          )}\n        </Stack>\n\n        {media && (\n          <Flex align=\"flex-start\" paddingLeft={2}>\n            <Media dimensions={mediaDimensions} layout=\"default\" media={media} />\n          </Flex>\n        )}\n      </HeaderFlex>\n\n      {description && (\n        <Box marginTop={3}>\n          <Text muted size={1} style={{whiteSpace: 'break-spaces'}}>\n            {description}\n          </Text>\n        </Box>\n      )}\n    </Root>\n  )\n}\n","import {useCallback, useEffect, useState} from 'react'\n\nimport {type RovingFocusProps} from './types'\n\nconst MUTATION_ATTRIBUTE_FILTER = ['aria-hidden', 'disabled', 'href']\n\nconst FOCUSABLE =\n  'a[href], button, input, textarea, select, details, [tabindex]:not([tabindex=\"-1\"])'\n\nfunction getFocusableElements(element: HTMLElement) {\n  return [...(element.querySelectorAll(FOCUSABLE) as any)].filter(\n    (el) => !el.hasAttribute('disabled') && el.getAttribute('aria-hidden') !== 'true',\n  ) as HTMLElement[]\n}\n\n/**\n * This hook handles focus with the keyboard arrows.\n *\n * @see {@link https://a11y-solutions.stevenwoodson.com/solutions/focus/roving-focus/ | Roving focus definition}\n *\n * @example\n * ```tsx\n * function MyComponent() {\n *   const [rootElement, setRootElement] = setRootElement(null)\n *\n *   useRovingFocus({\n *     rootElement: rootElement,\n *   })\n *\n *   return (\n *     <div ref={setRootElement}>\n *       <button>Button</button>\n *       <button>Button</button>\n *       <button>Button</button>\n *     </div>\n *   )\n * }\n * ```\n *\n *\n * @hidden\n * @beta\n */\nexport function useRovingFocus(props: RovingFocusProps): undefined {\n  const {\n    direction = 'horizontal',\n    initialFocus,\n    loop = true,\n    navigation = ['arrows'],\n    pause = false,\n    rootElement,\n  } = props\n  const [focusedIndex, setFocusedIndex] = useState<number>(-1)\n  const [focusableElements, setFocusableElements] = useState<HTMLElement[]>([])\n\n  const focusableLen = focusableElements.length\n  const lastFocusableIndex = focusableLen - 1\n\n  /**\n   * Determine what keys to listen to depending on direction\n   */\n  const nextKey = direction === 'horizontal' ? 'ArrowRight' : 'ArrowDown'\n  const prevKey = direction === 'horizontal' ? 'ArrowLeft' : 'ArrowUp'\n\n  /**\n   * Set focusable elements in state\n   */\n  const handleSetElements = useCallback(() => {\n    if (rootElement) {\n      const els = getFocusableElements(rootElement)\n\n      setFocusableElements(els)\n    }\n  }, [rootElement])\n\n  /**\n   * Set focused index\n   */\n  const handleFocus = useCallback((index: number) => {\n    setFocusedIndex(index)\n  }, [])\n\n  /**\n   * Handle increment/decrement of focusedIndex\n   */\n  const handleKeyDown = useCallback(\n    (event: any) => {\n      if (pause) {\n        return\n      }\n\n      const focusPrev = () => {\n        event.preventDefault()\n        setFocusedIndex((prevIndex) => {\n          const next = (prevIndex + lastFocusableIndex) % focusableLen\n\n          if (!loop && next === lastFocusableIndex) {\n            return prevIndex\n          }\n\n          return next\n        })\n      }\n\n      const focusNext = () => {\n        event.preventDefault()\n        setFocusedIndex((prevIndex) => {\n          const next = (prevIndex + 1) % focusableLen\n\n          if (!loop && next === 0) {\n            return prevIndex\n          }\n\n          return next\n        })\n      }\n\n      if (event.key === 'Tab' && navigation.includes('tab')) {\n        if (event.shiftKey) {\n          focusPrev()\n        } else {\n          focusNext()\n        }\n      }\n\n      if (navigation.includes('arrows')) {\n        if (event.key === prevKey) {\n          focusPrev()\n        }\n\n        if (event.key === nextKey) {\n          focusNext()\n        }\n      }\n    },\n    [pause, prevKey, navigation, nextKey, lastFocusableIndex, focusableLen, loop],\n  )\n\n  /**\n   * Set focusable elements on mount\n   */\n  useEffect(() => {\n    handleSetElements()\n  }, [handleSetElements, initialFocus, direction])\n\n  /**\n   * Listen to DOM mutations to update focusableElements with latest state\n   */\n  useEffect(() => {\n    const mo = new MutationObserver(handleSetElements)\n\n    if (rootElement) {\n      mo.observe(rootElement, {\n        childList: true,\n        subtree: true,\n        attributeFilter: MUTATION_ATTRIBUTE_FILTER,\n      })\n    }\n\n    return () => {\n      mo.disconnect()\n    }\n  }, [focusableElements, handleSetElements, rootElement])\n\n  /**\n   * Set focus on elements in focusableElements depending on focusedIndex\n   */\n  useEffect(() => {\n    focusableElements.forEach((el, index) => {\n      if (index === focusedIndex) {\n        el.setAttribute('tabIndex', '0')\n        el.setAttribute('aria-selected', 'true')\n        el.focus()\n        el.onfocus = () => handleFocus(index)\n        el.onblur = () => handleFocus(-1)\n      } else {\n        el.setAttribute('tabIndex', '-1')\n        el.setAttribute('aria-selected', 'false')\n        el.onfocus = () => handleFocus(index)\n      }\n    })\n\n    if (focusedIndex === -1 && focusableElements) {\n      const initialIndex = initialFocus === 'last' ? lastFocusableIndex : 0\n      focusableElements[initialIndex]?.setAttribute('tabIndex', '0')\n    }\n  }, [focusableElements, focusedIndex, handleFocus, initialFocus, lastFocusableIndex])\n\n  /**\n   * Listen to key down events on rootElement\n   */\n  useEffect(() => {\n    rootElement?.addEventListener('keydown', handleKeyDown)\n\n    return () => {\n      rootElement?.removeEventListener('keydown', handleKeyDown)\n    }\n  }, [handleKeyDown, rootElement])\n\n  return undefined\n}\n","import {type ForwardedRef, forwardRef, type HTMLProps, type ReactNode, useMemo} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Button, type ButtonProps} from '../../ui-components'\n\n/** @hidden @beta */\nexport type StatusButtonProps = ButtonProps & {\n  ['aria-label']: HTMLProps<HTMLButtonElement>['aria-label']\n  forwardedAs?: string\n  disabled?: boolean | {reason: ReactNode}\n  mode?: ButtonProps['mode']\n  iconRight?: undefined\n}\n\nconst StyledButton = styled(Button)`\n  position: relative;\n  // The children in button is rendered inside a span, we need to absolutely position it.\n  & > span:nth-child(2) {\n    position: absolute;\n    top: 6px;\n    right: 6px;\n    padding: 0;\n  }\n`\n\nconst Dot = styled.div({\n  width: 4,\n  height: 4,\n  borderRadius: 3,\n  boxShadow: '0 0 0 1px var(--card-bg-color)',\n})\n\n/** @hidden @beta */\nexport const StatusButton = forwardRef(function StatusButton(\n  props: StatusButtonProps &\n    Omit<HTMLProps<HTMLButtonElement>, 'disabled' | 'ref' | 'size' | 'title'>,\n  ref: ForwardedRef<HTMLButtonElement>,\n) {\n  const {\n    'disabled': disabledProp,\n    icon,\n    'aria-label': label,\n    mode = 'bleed',\n    text,\n    tone,\n    ...restProps\n  } = props\n\n  const dotStyle = useMemo(() => ({backgroundColor: `var(--card-badge-${tone}-dot-color)`}), [tone])\n  const disabled = Boolean(disabledProp)\n\n  return (\n    <StyledButton\n      data-ui=\"StatusButton\"\n      {...restProps}\n      aria-label={label}\n      disabled={disabled}\n      mode={mode}\n      ref={ref}\n      text={text}\n      icon={icon}\n    >\n      {tone && <Dot style={dotStyle} />}\n    </StyledButton>\n  )\n})\n","import {forwardRef} from 'react'\n\nimport {Tooltip, type TooltipProps} from '../../ui-components'\n\n/** @internal */\nexport const TooltipOfDisabled = forwardRef<HTMLDivElement, TooltipProps>(function DisabledTooltip(\n  {children, content, disabled, ...restProps},\n  ref,\n) {\n  return (\n    <Tooltip {...restProps} content={content} disabled={disabled || !content} ref={ref}>\n      <div>{children}</div>\n    </Tooltip>\n  )\n})\n","import {useToast} from '@sanity/ui'\nimport {forwardRef, type ReactNode, useImperativeHandle} from 'react'\n\n/** @internal */\nexport interface ToastParams {\n  closable?: boolean\n  description?: ReactNode\n  duration?: number\n  onClose?: () => void\n  title?: ReactNode\n  status?: 'error' | 'warning' | 'success' | 'info'\n}\n\n/**\n * @internal\n * @deprecated -- Refactor the component so it can call `useToast` instead\n */\nexport const ImperativeToast = forwardRef((_, ref) => {\n  const {push} = useToast()\n\n  useImperativeHandle(ref, () => ({push}))\n\n  return null\n})\n\nImperativeToast.displayName = 'ForwardRef(ImperativeToast)'\n","import {useContext} from 'react'\nimport {ZIndexContext} from 'sanity/_singletons'\n\nimport {type ZIndexContextValue} from './types'\n\n/**\n * TODO: Rename to `useZOffsets`\n *\n * @internal\n */\nexport function useZIndex(): ZIndexContextValue {\n  return useContext(ZIndexContext)\n}\n","import {LayerProvider} from '@sanity/ui'\nimport {type ReactNode} from 'react'\n\nimport {type ZIndexContextValue} from '../zOffsets/types'\nimport {useZIndex} from '../zOffsets/useZIndex'\n\n/** @internal */\nexport type ZIndexContextValueKey = keyof ZIndexContextValue\n\n/**\n * This component should only be used by core Sanity packages.\n * @internal\n */\nexport function LegacyLayerProvider({\n  children,\n  zOffset: zOffsetKey,\n}: {\n  children: ReactNode\n  zOffset: ZIndexContextValueKey\n}) {\n  const zIndex = useZIndex()\n  const zOffset = zIndex[zOffsetKey]\n\n  return <LayerProvider zOffset={zOffset}>{children}</LayerProvider>\n}\n","import {type SanityDocument} from '@sanity/types'\n\nimport {useReferringDocuments} from '../hooks/useReferringDocuments'\nimport {type DocumentStore} from '../store'\n\nconst EMPTY: never[] = []\n\n/**\n * @internal\n * @deprecated - Will be removed in 4.0.0, use the `useReferringDocuments(<documentId>)` hook instead\n */\nexport function WithReferringDocuments({\n  children,\n  id,\n}: {\n  children: (props: {isLoading: boolean; referringDocuments: SanityDocument[]}) => React.JSX.Element\n  /**\n   * @deprecated - no longer required\n   */\n  documentStore?: DocumentStore\n  id: string\n}) {\n  return children(useReferringDocuments(id, EMPTY))\n}\n","import {type ReactNode} from 'react'\nimport {ZIndexContext, zIndexContextDefaults} from 'sanity/_singletons'\n\n/**\n * TODO: Rename to `ZOffsetsProvider`\n *\n * @internal\n */\nexport function ZIndexProvider({children}: {children?: ReactNode}): React.JSX.Element {\n  return <ZIndexContext.Provider value={zIndexContextDefaults}>{children}</ZIndexContext.Provider>\n}\n","import {Stack, Text} from '@sanity/ui'\nimport {useCallback} from 'react'\n\nimport {Dialog} from '../../../ui-components'\nimport {TextWithTone} from '../../components'\nimport {type TFunction, useTranslation} from '../../i18n'\nimport {commentsLocaleNamespace} from '../i18n'\n\nfunction getDialogCopy(\n  t: TFunction,\n): Record<'thread' | 'comment', {title: string; body: string; confirmButtonText: string}> {\n  return {\n    thread: {\n      title: t('delete-thread.title'),\n      body: t('delete-thread.body'),\n      confirmButtonText: t('delete-thread.confirm'),\n    },\n    comment: {\n      title: t('delete-comment.title'),\n      body: t('delete-comment.body'),\n      confirmButtonText: t('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('delete-dialog.error')}</TextWithTone>}\n      </Stack>\n    </Dialog>\n  )\n}\n","import {forwardRef, type Ref, type SVGProps} from 'react'\n\n/**\n * @internal\n */\nexport const CommentDisabledIcon = forwardRef(function Icon(\n  props: SVGProps<SVGSVGElement>,\n  ref: Ref<SVGSVGElement>,\n) {\n  return (\n    <svg\n      data-sanity-icon=\"comment-disabled\"\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=\"M5.92627 14.5381H7.92627V18.5381L11.9263 14.5381H15.9263C17.0308 14.5381 17.9263 13.6427 17.9263 12.5381V6.53809C17.9263 5.43352 17.0308 4.53809 15.9263 4.53809H5.92627C4.8217 4.53809 3.92627 5.43352 3.92627 6.53809V12.5381C3.92627 13.6427 4.8217 14.5381 5.92627 14.5381Z\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.2\"\n        strokeLinejoin=\"round\"\n      />\n      <path\n        d=\"M2.77256 2.66835C2.54413 2.51319 2.23317 2.57259 2.07802 2.80103L1.40378 3.7937C1.32927 3.9034 1.30139 4.0382 1.32627 4.16845C1.35115 4.29871 1.42676 4.41374 1.53646 4.48825L19.5861 16.7479C19.8146 16.903 20.1255 16.8436 20.2807 16.6152L20.9549 15.6225C21.0294 15.5128 21.0573 15.378 21.0324 15.2478C21.0076 15.1175 20.9319 15.0025 20.8222 14.928L2.77256 2.66835Z\"\n        fill=\"currentColor\"\n        strokeLinejoin=\"round\"\n      />\n    </svg>\n  )\n})\n","import {forwardRef, type Ref, type SVGProps} 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: SVGProps<SVGSVGElement>,\n  ref: 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 {forwardRef, type Ref, type SVGProps} from 'react'\n\nexport const MentionIcon = forwardRef(function Icon(\n  props: SVGProps<SVGSVGElement>,\n  ref: 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 {forwardRef, type Ref, type SVGProps} from 'react'\n\nexport const ReactionIcon = forwardRef(function Icon(\n  props: SVGProps<SVGSVGElement>,\n  ref: 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 {forwardRef, type Ref, type SVGProps} from 'react'\n\nexport const SendIcon = forwardRef(function Icon(\n  props: SVGProps<SVGSVGElement>,\n  ref: 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 {type User} from '@sanity/types'\nimport {Avatar, type AvatarProps} from '@sanity/ui'\nimport {useMemo} from 'react'\nimport {styled} from 'styled-components'\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 {type AvatarSize} from '@sanity/ui'\n// eslint-disable-next-line camelcase\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {css, styled} from 'styled-components'\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 const SpacerAvatar = styled.div<{$size?: AvatarSize}>((props) => {\n  const theme = getTheme_v2(props.theme)\n  const {$size = 1} = props\n  return css`\n    min-width: ${theme.avatar.sizes[$size]?.size}px;\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 {Flex, Text, TextSkeleton} from '@sanity/ui'\nimport {css, styled} from 'styled-components'\n\nimport {Tooltip} from '../../../../../ui-components'\nimport {useCurrentUser, useUser} from '../../../../store'\nimport {CommentsAvatar} from '../../avatars'\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 {Text} from '@sanity/ui'\nimport {type ReactNode} from 'react'\nimport {styled} from 'styled-components'\n\nconst NormalText = styled(Text)`\n  word-break: break-word;\n`\n\ninterface NormalBlockProps {\n  children: ReactNode\n}\n\nexport function NormalBlock(props: NormalBlockProps): React.JSX.Element {\n  const {children} = props\n\n  return <NormalText size={1}>{children}</NormalText>\n}\n","import {type RenderBlockFunction} from '@portabletext/editor'\n\nimport {NormalBlock} from '../blocks'\n\nexport const renderBlock: RenderBlockFunction = (blockProps) => {\n  const {children} = blockProps\n\n  return <NormalBlock>{children}</NormalBlock>\n}\n","import {type BlockChildRenderProps, type RenderChildFunction} from '@portabletext/editor'\n\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 {DialogProvider, Text, ThemeColorProvider} from '@sanity/ui'\nimport {type MouseEvent, useCallback} from 'react'\n\nimport {Dialog} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n'\nimport {commentsLocaleNamespace} from '../../../i18n'\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: MouseEvent<HTMLButtonElement>) => {\n      e.stopPropagation()\n      onClose()\n    },\n    [onClose],\n  )\n\n  const handleConfirmClick = useCallback(\n    (e: 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('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('discard.button-confirm'),\n              tone: 'critical',\n            },\n          }}\n        >\n          <Text size={1}>{t('discard.text')}</Text>\n        </Dialog>\n      </DialogProvider>\n    </ThemeColorProvider>\n  )\n}\n","import {Badge, Box, Card, Flex, Text, TextSkeleton} from '@sanity/ui'\nimport {type CSSProperties, useCallback} from 'react'\nimport {styled} from 'styled-components'\n\nimport {type UserWithPermission} from '../../../hooks'\nimport {useTranslation} from '../../../i18n'\nimport {useUser} from '../../../store'\nimport {commentsLocaleNamespace} from '../../i18n'\nimport {CommentsAvatar} from '../avatars'\n\nconst InnerFlex = styled(Flex)``\n\nconst SKELETON_INLINE_STYLE: CSSProperties = {width: '50%'}\n\ninterface MentionsItemProps {\n  user: UserWithPermission\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 = <CommentsAvatar user={loadedUser} status={user.granted ? undefined : 'inactive'} />\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.granted} 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.granted && (\n          <Badge fontSize={1} mode=\"outline\">\n            {t('mentions.unauthorized-user')}\n          </Badge>\n        )}\n      </Flex>\n    </Card>\n  )\n}\n","import {Box, Flex, Stack, Text} from '@sanity/ui'\nimport {deburr} from 'lodash'\nimport {\n  forwardRef,\n  type Ref,\n  useCallback,\n  useImperativeHandle,\n  useMemo,\n  useRef,\n  useState,\n} from 'react'\nimport {styled} from 'styled-components'\n\nimport {CommandList, type CommandListHandle, LoadingBlock} from '../../../components'\nimport {type UserWithPermission} from '../../../hooks'\nimport {useTranslation} from '../../../i18n'\nimport {commentsLocaleNamespace} from '../../i18n'\nimport {MentionsMenuItem} from './MentionsMenuItem'\n\nconst EMPTY_ARRAY: UserWithPermission[] = []\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: UserWithPermission[] | null\n}\n\nexport const MentionsMenu = forwardRef(function MentionsMenu(\n  props: MentionsMenuProps,\n  ref: 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(ref, () => {\n    return {\n      setSearchTerm(term: string) {\n        setSearchTerm(term)\n      },\n    }\n  }, [])\n\n  const renderItem = useCallback(\n    (itemProps: UserWithPermission) => {\n      return <MentionsMenuItem user={itemProps} onSelect={onSelect} />\n    },\n    [onSelect],\n  )\n\n  const getItemDisabled = useCallback(\n    (index: number) => {\n      return !options?.[index]?.granted\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('mentions.no-users-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('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 {useContext} from 'react'\nimport {CommentInputContext} from 'sanity/_singletons'\n\nimport {type 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 {useCallback, useEffect, useMemo, useState} 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 {\n  type EditorSelection,\n  PortableTextEditable,\n  type RenderBlockFunction,\n  usePortableTextEditorSelection,\n} from '@portabletext/editor'\nimport {isPortableTextSpan, isPortableTextTextBlock} from '@sanity/types'\nimport {useClickOutsideEvent} from '@sanity/ui'\n// eslint-disable-next-line camelcase\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {isEqual} from 'lodash'\nimport {type KeyboardEvent, useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {Popover, type PopoverProps} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n'\nimport {commentsLocaleNamespace} from '../../../i18n'\nimport {MentionsMenu, type MentionsMenuHandle} from '../../mentions'\nimport {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((props) => {\n  const {color} = getTheme_v2(props.theme)\n  return css`\n    color: ${color.input.default.enabled.placeholder};\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  renderBlock: RenderBlockFunction\n}\n\nexport interface EditableHandle {\n  setShowMentionOptions: (show: boolean) => void\n}\n\nexport function Editable(props: EditableProps) {\n  const {t} = useTranslation(commentsLocaleNamespace)\n  const {\n    focusLock,\n    onFocus,\n    onBlur,\n    onKeyDown,\n    onSubmit,\n    placeholder = t('compose.create-comment-placeholder'),\n    renderBlock,\n  } = props\n  const popoverRef = useRef<HTMLDivElement | null>(null)\n  const [rootElement, setRootElement] = useState<HTMLDivElement | null>(null)\n  const [inputElement, setInputElement] = useState<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: rootElement,\n  })\n\n  const renderPlaceholder = useCallback(\n    () => <PlaceholderWrapper>{placeholder}</PlaceholderWrapper>,\n    [placeholder],\n  )\n\n  useClickOutsideEvent(mentionsMenuOpen && closeMentions, () => [popoverRef.current])\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\n          // If the mention menu is open close it, but don't submit.\n          if (mentionsMenuOpen) {\n            // Enter is being used both to select something from the mentionsMenu, prevent the default behavior.\n            event.preventDefault()\n            event.stopPropagation()\n            closeMentions()\n            break\n          }\n\n          // Submit the comment if eligible for submission\n          if (onSubmit && canSubmit) {\n            // Enter is being used to submit the comment, prevent the default behavior.\n            event.preventDefault()\n            event.stopPropagation()\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={inputElement}\n      loading={mentionOptions.loading}\n      onSelect={insertMention}\n      options={mentionOptions.data || EMPTY_ARRAY}\n      ref={mentionsMenuRef}\n    />\n  )\n\n  return (\n    <div ref={setRootElement}>\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={popoverRef}\n        referenceElement={cursorElement}\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={setInputElement}\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}\nEditable.displayName = 'Editable'\n","import {type RenderBlockFunction} from '@portabletext/editor'\nimport {type CurrentUser} from '@sanity/types'\nimport {type AvatarSize, Box, Card, Flex, MenuDivider, Stack} from '@sanity/ui'\n// eslint-disable-next-line camelcase\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {useCallback} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {Button, TooltipDelayGroupProvider} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n'\nimport {useUser} from '../../../../store'\nimport {commentsLocaleNamespace} from '../../../i18n'\nimport {CommentsAvatar} from '../../avatars'\nimport {MentionIcon, SendIcon} from '../../icons'\nimport {Editable} from './Editable'\nimport {useCommentInput} from './useCommentInput'\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\nfunction focusRingBorderStyle(border: {color: string; width: number}): string {\n  return `inset 0 0 0 ${border.width}px ${border.color}`\n}\n\nconst RootCard = styled(Card)(({theme}) => {\n  const {color, input, radius} = getTheme_v2(theme)\n  const radii = radius[2]\n\n  return css`\n    border-radius: ${radii}px;\n    box-shadow: var(--input-box-shadow);\n\n    --input-box-shadow: ${focusRingBorderStyle({\n      color: color.input.default.enabled.border,\n      width: input.border.width,\n    })};\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      --input-box-shadow: ${focusRingBorderStyle({\n        color: 'var(--card-focus-ring-color)',\n        width: input.border.width,\n      })};\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    &:hover {\n      --input-box-shadow: ${focusRingBorderStyle({\n        color: color.input.default.hovered.border,\n        width: input.border.width,\n      })};\n    }\n  `\n})\n\nconst AvatarContainer = styled.div((props) => {\n  const theme = getTheme_v2(props.theme)\n  return `\n    min-height: ${theme.avatar.sizes[1]?.size}px;\n    display: flex;\n    align-items: center;\n  `\n})\n\ninterface CommentInputInnerProps {\n  avatarSize?: AvatarSize\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  renderBlock: RenderBlockFunction\n  withAvatar?: boolean\n}\n\nexport function CommentInputInner(props: CommentInputInnerProps) {\n  const {\n    avatarSize = 1,\n    currentUser,\n    focusLock,\n    onBlur,\n    onFocus,\n    onKeyDown,\n    onSubmit,\n    placeholder,\n    renderBlock,\n    withAvatar,\n  } = props\n\n  const [user] = useUser(currentUser.id)\n  const {\n    canSubmit,\n    expandOnFocus,\n    focused,\n    hasChanges,\n    insertAtChar,\n    openMentions,\n    readOnly,\n    mentionOptions,\n  } = useCommentInput()\n\n  const {t} = useTranslation(commentsLocaleNamespace)\n  const avatar = withAvatar ? (\n    <AvatarContainer>\n      <CommentsAvatar user={user} size={avatarSize} />\n    </AvatarContainer>\n  ) : 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        id=\"comment-input-root\"\n        data-expand-on-focus={expandOnFocus && !canSubmit ? 'true' : 'false'}\n        data-focused={focused ? 'true' : 'false'}\n        flex={1}\n        sizing=\"border\"\n        tone={readOnly ? 'transparent' : 'default'}\n      >\n        <Stack>\n          <EditableWrap\n            data-ui=\"CommentInputEditableWrap\"\n            paddingX={1}\n            paddingY={2}\n            sizing=\"border\"\n          >\n            <Editable\n              focusLock={focusLock}\n              onBlur={onBlur}\n              onFocus={onFocus}\n              onKeyDown={onKeyDown}\n              onSubmit={onSubmit}\n              placeholder={placeholder}\n              renderBlock={renderBlock}\n            />\n          </EditableWrap>\n\n          <Flex align=\"center\" data-ui=\"CommentInputActions\" gap={1} justify=\"flex-end\" padding={1}>\n            <TooltipDelayGroupProvider>\n              {!mentionOptions.disabled && (\n                <Button\n                  aria-label={t('compose.mention-user-aria-label')}\n                  data-testid=\"comment-input-mention-button\"\n                  disabled={readOnly}\n                  icon={MentionIcon}\n                  mode=\"bleed\"\n                  type=\"button\"\n                  onClick={handleMentionButtonClicked}\n                  tooltipProps={{content: t('compose.mention-user-tooltip')}}\n                />\n              )}\n              {onSubmit && (\n                <>\n                  {!mentionOptions.disabled && <ButtonDivider />}\n\n                  <Button\n                    aria-label={t('compose.send-comment-aria-label')}\n                    data-testid=\"comment-input-send-button\"\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('compose.send-comment-tooltip')}}\n                  />\n                </>\n              )}\n            </TooltipDelayGroupProvider>\n          </Flex>\n        </Stack>\n      </RootCard>\n    </Flex>\n  )\n}\n","import {type EditorSelection, PortableTextEditor, usePortableTextEditor} from '@portabletext/editor'\nimport {isPortableTextSpan, type Path} from '@sanity/types'\nimport {type ReactNode, useCallback, useMemo, useState} from 'react'\nimport {CommentInputContext} from 'sanity/_singletons'\n\nimport {useDidUpdate} from '../../../../form'\nimport {type UserListWithPermissionsHookValue} from '../../../../hooks'\nimport {hasCommentMessageValue, useCommentHasChanged} from '../../../helpers'\nimport {type CommentMessage} from '../../../types'\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: UserListWithPermissionsHookValue\n  mentionsMenuOpen: boolean\n  mentionsSearchTerm: string\n  onBeforeInput: (event: InputEvent) => void\n  openMentions: () => void\n  readOnly: boolean\n  value: CommentMessage\n}\n\ninterface CommentInputProviderProps {\n  children: ReactNode\n  expandOnFocus?: boolean\n  focused: boolean\n  focusOnMount?: boolean\n  mentionOptions: UserListWithPermissionsHookValue\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    if (mentionOptions?.disabled) {\n      return\n    }\n    setMentionsMenuOpen(true)\n    setMentionsSearchTerm('')\n    setMentionsMenuOpen(true)\n    setSelectionAtMentionInsert(PortableTextEditor.getSelection(editor))\n  }, [editor, mentionOptions?.disabled])\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      if (mentionOptions?.disabled) {\n        return\n      }\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 =\n        focusSpan?.text.slice(0, Math.max(0, cursorOffset)).lastIndexOf('@') || 0\n\n      const isWhitespaceCharBeforeCursorPosition =\n        focusSpan?.text.slice(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.slice(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.slice(0, Math.max(0, term.length - 1))\n        }\n        // Set the updated mentions search term\n        setMentionsSearchTerm(term)\n      }\n    },\n    [closeMentions, editor, mentionsSearchTerm, openMentions, mentionOptions?.disabled],\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 {\n  type EditorChange,\n  keyGenerator,\n  PortableTextEditor,\n  type RenderBlockFunction,\n} from '@portabletext/editor'\nimport {type CurrentUser, type PortableTextBlock} from '@sanity/types'\nimport {type AvatarSize, focusFirstDescendant, focusLastDescendant, Stack} from '@sanity/ui'\nimport {\n  type FocusEvent,\n  type FormEvent,\n  forwardRef,\n  type KeyboardEvent,\n  type ReactNode,\n  useCallback,\n  useImperativeHandle,\n  useMemo,\n  useRef,\n  useState,\n} from 'react'\n\nimport {type UserListWithPermissionsHookValue} from '../../../../hooks'\nimport {editorSchemaType} from '../config'\nimport {renderBlock as defaultRenderBlock} from '../render'\nimport {CommentInputDiscardDialog} from './CommentInputDiscardDialog'\nimport {CommentInputInner} from './CommentInputInner'\nimport {CommentInputProvider} from './CommentInputProvider'\n\nconst EMPTY_ARRAY: [] = []\n\nconst SCROLL_INTO_VIEW_OPTIONS: ScrollIntoViewOptions = {\n  behavior: 'smooth',\n  block: 'center',\n  inline: 'center',\n}\n\n/**\n * @internal\n */\nexport interface CommentInputProps {\n  currentUser: CurrentUser\n  expandOnFocus?: boolean\n  focusLock?: boolean\n  focusOnMount?: boolean\n  mentionOptions: UserListWithPermissionsHookValue\n  onBlur?: (e: FormEvent<HTMLDivElement>) => void\n  onChange: (value: PortableTextBlock[]) => void\n  onDiscardCancel?: () => void\n  onDiscardConfirm: () => void\n  onFocus?: (e: FormEvent<HTMLDivElement>) => void\n  onKeyDown?: (e: KeyboardEvent<Element>) => void\n  onMentionMenuOpenChange?: (open: boolean) => void\n  onSubmit?: () => void\n  placeholder?: ReactNode\n  readOnly?: boolean\n  renderBlock?: RenderBlockFunction\n  value: PortableTextBlock[] | null\n  withAvatar?: boolean\n  avatarSize?: AvatarSize\n}\n\ninterface CommentDiscardDialogController {\n  open: () => void\n  close: () => void\n}\n\n/**\n * @internal\n */\nexport interface CommentInputHandle {\n  blur: () => void\n  discardDialogController: CommentDiscardDialogController\n  focus: () => void\n  scrollTo: () => void\n  reset: () => void\n}\n\n/**\n * @internal\n * @hidden\n */\nexport const CommentInput = forwardRef<CommentInputHandle, CommentInputProps>(\n  function CommentInput(props, ref) {\n    const {\n      avatarSize,\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      renderBlock = defaultRenderBlock,\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(ref, () => {\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    }, [discardDialogController, requestFocus, resetEditorInstance, scrollToEditor])\n\n    const handleFocus = useCallback(\n      (event: 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 && onDiscardCancel && (\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                  avatarSize={avatarSize}\n                  currentUser={currentUser}\n                  focusLock={focusLock}\n                  onBlur={onBlur}\n                  onFocus={onFocus}\n                  onKeyDown={onKeyDown}\n                  onSubmit={onSubmit && handleSubmit}\n                  placeholder={placeholder}\n                  renderBlock={renderBlock}\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 {hues} from '@sanity/color'\nimport {type Theme} from '@sanity/ui'\nimport {forwardRef} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {COMMENTS_HIGHLIGHT_HUE_KEY} from '../../constants'\n\nexport const HighlightSpan = styled.span(({theme}: {theme: Theme}) => {\n  const isDark = theme.sanity.v2?.color._dark\n\n  // Colors used when a comment is added\n  const addedBg = hues[COMMENTS_HIGHLIGHT_HUE_KEY][isDark ? 800 : 100].hex\n  const addedBorder = hues[COMMENTS_HIGHLIGHT_HUE_KEY][isDark ? 700 : 300].hex\n\n  const addedHoverBg = hues[COMMENTS_HIGHLIGHT_HUE_KEY][isDark ? 700 : 200].hex\n  const addedHoverBorder = hues[COMMENTS_HIGHLIGHT_HUE_KEY][isDark ? 600 : 400].hex\n\n  // Colors used when a comment is added and it is a nested comment\n  const addedNestedBg = hues[COMMENTS_HIGHLIGHT_HUE_KEY][isDark ? 700 : 200].hex\n  const addedNesterBorder = hues[COMMENTS_HIGHLIGHT_HUE_KEY][isDark ? 600 : 400].hex\n\n  // Colors used when a comment is being authored.\n  // For now, we use the same colors as when a comment is added.\n  const authoringBg = addedBg\n  const authoringBorder = addedBorder\n\n  return css`\n    box-sizing: border-box;\n    transition:\n      background-color 100ms ease,\n      border-color 100ms ease;\n\n    // Make sure that child elements appropriately blend with the\n    // background of the highlight span\n    * {\n      mix-blend-mode: ${isDark ? 'screen' : 'multiply'};\n    }\n\n    &[data-inline-comment-state='added'][data-inline-comment-nested='false'] {\n      background-color: ${addedBg};\n      border-bottom: 2px solid ${addedBorder};\n    }\n\n    &[data-inline-comment-state='added'][data-inline-comment-nested='true'] {\n      background-color: ${addedNestedBg};\n      border-bottom: 2px solid ${addedNesterBorder};\n    }\n\n    &[data-inline-comment-state='added'][data-inline-comment-nested='false'][data-hovered='true'] {\n      background-color: ${addedHoverBg};\n      border-bottom: 2px solid ${addedHoverBorder};\n    }\n\n    &[data-inline-comment-state='authoring'] {\n      background-color: ${authoringBg};\n      border-bottom: 2px solid ${authoringBorder};\n    }\n  `\n})\n\ninterface CommentInlineHighlightSpanProps {\n  children: React.ReactNode\n  isAdded?: boolean\n  isAuthoring?: boolean\n  isHovered?: boolean\n  isNested?: boolean\n}\n\n/**\n * @internal\n */\nexport const CommentInlineHighlightSpan = forwardRef(function CommentInlineHighlightSpan(\n  props: CommentInlineHighlightSpanProps & React.HTMLProps<HTMLSpanElement>,\n  ref: React.Ref<HTMLSpanElement>,\n) {\n  const {children, isAdded, isAuthoring, isHovered, isNested, ...rest} = props\n\n  // eslint-disable-next-line no-nested-ternary\n  const state = isAdded ? 'added' : isAuthoring ? 'authoring' : undefined\n\n  return (\n    <HighlightSpan\n      {...rest}\n      data-hovered={isHovered ? 'true' : 'false'}\n      data-inline-comment-nested={isNested ? 'true' : 'false'}\n      data-inline-comment-state={state}\n      ref={ref}\n    >\n      {children}\n    </HighlightSpan>\n  )\n})\n","import {PortableText, type PortableTextComponents} from '@portabletext/react'\nimport {Stack} from '@sanity/ui'\nimport {Fragment, type PropsWithChildren, useMemo} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {type CommentMessage} from '../../types'\nimport {transformChildren} from '../../utils'\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\nfunction NormalBlockTransformed(props: PropsWithChildren) {\n  const children = useMemo(() => transformChildren(props.children), [props.children])\n\n  return <NormalBlock>{children}</NormalBlock>\n}\n\nconst components: PortableTextComponents = {\n  // Since we do not offer any formatting options, we can just use the normal block for all of these.\n  block: {\n    normal: NormalBlockTransformed,\n    h1: NormalBlockTransformed,\n    h2: NormalBlockTransformed,\n    h3: NormalBlockTransformed,\n    h4: NormalBlockTransformed,\n    h5: NormalBlockTransformed,\n    h6: NormalBlockTransformed,\n    blockquote: NormalBlockTransformed,\n    code: NormalBlockTransformed,\n  },\n\n  list: {\n    bullet: Fragment,\n    number: Fragment,\n    checkmarks: Fragment,\n  },\n\n  listItem: {\n    bullet: NormalBlockTransformed,\n    number: NormalBlockTransformed,\n    checkmarks: NormalBlockTransformed,\n  },\n\n  // Since we do not offer any formatting options, we can just use the normal block for all of these.\n  marks: {\n    strong: Fragment,\n    em: Fragment,\n    code: Fragment,\n    underline: Fragment,\n    strikeThrough: Fragment,\n    link: Fragment,\n  },\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): React.JSX.Element {\n  const {blocks} = props\n\n  return (\n    <PortableTextWrap>\n      <PortableText value={blocks || EMPTY_ARRAY} components={components} />\n    </PortableTextWrap>\n  )\n}\n","import {type FlexProps} from '@sanity/ui'\n\nexport const FLEX_GAP: FlexProps['gap'] = 3\n","import {Text} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const EmojiText = styled(Text)`\n  font-family:\n    'Twemoji Mozilla', 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji',\n    'EmojiOne Color', 'Android Emoji', sans-serif;\n`\n","// eslint-disable-next-line no-restricted-imports\nimport {Button as UIButton, Grid} from '@sanity/ui'\nimport {useCallback, useEffect, useState} from 'react'\n\nimport {useTranslation} from '../../../i18n'\nimport {COMMENT_REACTION_EMOJIS} from '../../constants'\nimport {commentsLocaleNamespace} from '../../i18n'\nimport {type CommentReactionOption} from '../../types'\nimport {EmojiText} from './EmojiText.styled'\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('reactions.react-with-aria-label', {\n              reactionName: 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 {Card, useClickOutsideEvent} from '@sanity/ui'\nimport {cloneElement, useCallback, useMemo, useRef, useState} from 'react'\n\nimport {Popover, type PopoverProps} from '../../../../ui-components'\nimport {type TFunction, useTranslation} from '../../../i18n'\nimport {commentsLocaleNamespace} from '../../i18n'\nimport {type CommentReactionOption, type CommentsUIMode} from '../../types'\nimport {CommentReactionsMenu} from './CommentReactionsMenu'\n\nconst POPOVER_FALLBACK_PLACEMENTS: PopoverProps['fallbackPlacements'] = ['top', 'bottom']\n\nexport interface CommentReactionsMenuButtonProps {\n  mode: CommentsUIMode\n  onMenuClose?: () => void\n  onMenuOpen?: () => void\n  onSelect: (option: CommentReactionOption) => void\n  options: CommentReactionOption[]\n  readOnly?: boolean\n  renderMenuButton: (props: {\n    open: boolean\n    tooltipContent: string\n    t: TFunction\n  }) => React.JSX.Element\n}\n\nexport function CommentReactionsMenuButton(props: CommentReactionsMenuButtonProps) {\n  const {onMenuClose, onMenuOpen, onSelect, options, readOnly, renderMenuButton, mode} = props\n  const [buttonElement, setButtonElement] = useState<HTMLButtonElement | null>(null)\n  const popoverRef = useRef<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  }, [open, onMenuClose])\n\n  const handleCloseAndFocus = useCallback(() => {\n    if (!open) return\n\n    handleClose()\n    buttonElement?.focus()\n  }, [buttonElement, handleClose, open])\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        handleCloseAndFocus()\n      }\n    },\n    [handleCloseAndFocus],\n  )\n\n  useClickOutsideEvent(handleClose, () => [popoverRef.current, 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({\n      open,\n      tooltipContent:\n        mode === 'upsell'\n          ? t('list-item.context-menu-add-reaction-upsell')\n          : t('list-item.context-menu-add-reaction'),\n      t,\n    })\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 || mode === 'upsell',\n      'id': 'reactions-menu-button',\n      'onClick': handleClick,\n      'ref': setButtonElement,\n    })\n  }, [handleClick, open, readOnly, renderMenuButton, t, mode])\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={popoverRef}\n      tone=\"default\"\n    >\n      {button}\n    </Popover>\n  )\n}\n","import {type CurrentUser} from '@sanity/types'\nimport {Box, Flex, Stack, Text} from '@sanity/ui'\nimport {useCallback} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Tooltip} from '../../../../ui-components'\nimport {useListFormat} from '../../../hooks'\nimport {Translate, useTranslation} from '../../../i18n'\nimport {useUser} from '../../../store'\nimport {COMMENT_REACTION_EMOJIS} from '../../constants'\nimport {commentsLocaleNamespace} from '../../i18n'\nimport {type CommentReactionShortNames} from '../../types'\nimport {EmojiText} from './EmojiText.styled'\n\nconst TEXT_SIZE: number | number[] = 1\n\nconst ContentStack = styled(Stack)`\n  max-width: 180px;\n`\n\nconst TextGroup = styled.div`\n  display: inline-block;\n`\n\nconst InlineText = styled(Text).attrs({size: TEXT_SIZE})`\n  display: inline-block !important;\n\n  & > span {\n    white-space: break-spaces;\n  }\n`\n\nconst TextBox = styled(Box)`\n  line-height: 1;\n  text-align: center;\n`\n\nconst LEADING_NON_WHITESPACE_RE = /^\\S+/\n\ninterface UserDisplayNameProps {\n  currentUserId: string\n  isFirst?: boolean\n  userId: string\n}\n\nfunction UserDisplayName(props: UserDisplayNameProps): string {\n  const {currentUserId, isFirst, userId} = props\n  const [user] = useUser(userId)\n  const {t} = useTranslation(commentsLocaleNamespace)\n\n  const isCurrentUser = currentUserId === userId\n  if (isCurrentUser) {\n    const context = isFirst ? 'leading' : undefined\n    return t('reactions.user-list.you', {context, replace: {name: user?.displayName}})\n  }\n\n  return user?.displayName || t('reactions.user-list.unknown-user-fallback-name')\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\nfunction FormattedUserList({currentUserId, userIds}: {currentUserId: string; userIds: string[]}) {\n  const listFormat = useListFormat({style: 'long', type: 'conjunction'})\n  if (userIds.length === 0) return null\n\n  /**\n   * We need to do some surgery on the list: in some locales (such as en-US), the literal segments\n   * can contain oxford commas, which we want to include as the part of the element preceeding it.\n   * This ensures that we do not wrap to a new line that starts with a comma. In general, we should\n   * not special case on _comma_ per se, but rather by the presence of a non-whitespace character.\n   */\n  const parts = listFormat.formatToParts(userIds)\n  const elements: React.JSX.Element[] = []\n  for (let i = 0; i < parts.length; i++) {\n    const item = parts[i]\n\n    if (item.type === 'literal') {\n      // Add literals as-is - the next case will rewrite literals to exclude leading non-whitespace\n      elements.push(<InlineText key={`literal-${i}`}>{item.value}</InlineText>)\n      continue\n    }\n\n    const nextItem = parts[i + 1]\n    const nextLeadsWithNonWhitespace =\n      nextItem && nextItem.type === 'literal' && LEADING_NON_WHITESPACE_RE.test(nextItem.value)\n    if (nextLeadsWithNonWhitespace) {\n      // This is the 'oxford comma' case, where we want to include any leading non-whitespace from\n      // the literal as trailing characters to the element we are currently adding.\n      const [nonWhitespace = ''] = nextItem.value.match(LEADING_NON_WHITESPACE_RE) || []\n\n      elements.push(\n        // Key (value) is user ID, thus unique\n        <TextGroup key={item.value}>\n          <InlineText weight=\"medium\">\n            <UserDisplayName currentUserId={currentUserId} isFirst={i === 0} userId={item.value} />\n          </InlineText>\n          <InlineText>{nonWhitespace}</InlineText>\n        </TextGroup>,\n      )\n\n      // Rewrite the next item to not contain this leading non-whitespace\n      nextItem.value = nextItem.value.slice(nonWhitespace.length)\n      continue\n    }\n\n    // Literals have been taken care of and returns early, so the only remaining case is that we're\n    // in an element that does _not_ have a leading non-whitespace literal following it.\n    elements.push(\n      // Key (value) is user ID, thus unique\n      <InlineText weight=\"medium\" key={item.value}>\n        <UserDisplayName currentUserId={currentUserId} isFirst={i === 0} userId={item.value} />\n      </InlineText>,\n    )\n  }\n\n  return elements\n}\n\nexport function CommentReactionsUsersTooltipContent(\n  props: Omit<CommentReactionsUsersTooltipProps, 'children'>,\n) {\n  const {currentUser, reactionName, userIds} = props\n  const {t} = useTranslation(commentsLocaleNamespace)\n\n  const UserList = useCallback(() => {\n    if (!currentUser) return null\n    return <FormattedUserList currentUserId={currentUser.id} userIds={userIds} />\n  }, [currentUser, userIds])\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=\"reactions.users-reacted-with-reaction\"\n          values={{reactionName}}\n          components={{\n            UserList,\n            ReactionName: () => <InlineText muted>{reactionName}</InlineText>,\n            Text: ({children}) => (\n              <>\n                <InlineText muted>{children}</InlineText> <wbr />{' '}\n              </>\n            ),\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 {type 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 {memo, useCallback, useMemo, useState} from 'react'\n\nimport {Tooltip, TooltipDelayGroupProvider} from '../../../../ui-components'\nimport {COMMENT_REACTION_EMOJIS, COMMENT_REACTION_OPTIONS} from '../../constants'\nimport {\n  type CommentReactionItem,\n  type CommentReactionOption,\n  type CommentReactionShortNames,\n  type CommentsUIMode,\n} from '../../types'\nimport {ReactionIcon} from '../icons'\nimport {CommentReactionsMenuButton} from './CommentReactionsMenuButton'\nimport {CommentReactionsUsersTooltip} from './CommentReactionsUsersTooltip'\nimport {EmojiText} from './EmojiText.styled'\nimport {TransparentCard} from './TransparentCard.styled'\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, tooltipContent}: {open: boolean; tooltipContent: string}) => {\n  return (\n    <UIButton fontSize={1} mode=\"ghost\" padding={0} radius=\"full\" selected={open}>\n      <Flex paddingX={3} paddingY={2}>\n        <Tooltip animate content={tooltipContent} 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  mode: CommentsUIMode\n}\n\nexport const CommentReactionsBar = memo(function CommentReactionsBar(\n  props: CommentReactionsBarProps,\n) {\n  const {currentUser, onSelect, reactions, readOnly, mode} = props\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  const [sortedGroupedReactions, setSortedGroupedReactions] = useState(() => ({\n    // An array of the initial order of the reactions. This is used to sort the reactions.\n    // E.g. [':+1:', ':heart:']\n    sortOrder: Object.keys(Object.fromEntries(groupedReactions)),\n    // We cache the groupedReactions to know when we should update the sortedReactions, ensuring we don't run into an infinite render loop.\n    groupedReactions: [] as typeof groupedReactions,\n    sortedReactions: [] as typeof 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  let {sortedReactions} = sortedGroupedReactions\n  if (sortedGroupedReactions.groupedReactions !== groupedReactions) {\n    const {sortOrder} = sortedGroupedReactions\n    sortedReactions = groupedReactions.sort(([nameA], [nameB]) => {\n      const indexA = sortOrder.indexOf(nameA)\n      const indexB = sortOrder.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    setSortedGroupedReactions({\n      groupedReactions,\n      sortOrder: sortedReactions.map(([name]) => name),\n      sortedReactions,\n    })\n  }\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 || mode === 'upsell'}\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            mode={mode}\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})\nCommentReactionsBar.displayName = 'Memo(CommentReactionsBar)'\n","import {CheckmarkCircleIcon, EditIcon, LinkIcon, TrashIcon, UndoIcon} from '@sanity/icons'\nimport {Card, Flex, Menu, MenuDivider} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {\n  Button,\n  MenuButton,\n  type MenuButtonProps,\n  MenuItem,\n  TooltipDelayGroupProvider,\n} from '../../../../ui-components'\nimport {ContextMenuButton} from '../../../components'\nimport {type TFunction, useTranslation} from '../../../i18n'\nimport {COMMENT_REACTION_OPTIONS} from '../../constants'\nimport {commentsLocaleNamespace} from '../../i18n'\nimport {type CommentReactionOption, type CommentStatus, type CommentsUIMode} from '../../types'\nimport {ReactionIcon} from '../icons'\nimport {CommentReactionsMenuButton} from '../reactions'\n\nconst renderMenuButton = ({\n  open,\n  tooltipContent,\n  t,\n}: {\n  open: boolean\n  tooltipContent: string\n  t: TFunction\n}) => (\n  <Button\n    aria-label={t('list-item.context-menu-add-reaction-aria-label')}\n    icon={ReactionIcon}\n    mode=\"bleed\"\n    selected={open}\n    tooltipProps={{content: tooltipContent}}\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  mode: CommentsUIMode\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    mode,\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  const hasContextMenuOptions = Boolean(canDelete || canEdit || onCopyLink)\n  return (\n    <TooltipDelayGroupProvider>\n      <Flex>\n        <FloatingCard display=\"flex\" shadow={2} padding={1} radius={2} sizing=\"border\">\n          {onReactionSelect && (\n            <CommentReactionsMenuButton\n              mode={mode}\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 && onStatusChange && (\n            <Button\n              aria-label={\n                status === 'open'\n                  ? t('list-item.resolved-tooltip-aria-label')\n                  : t('list-item.re-open-resolved-aria-label')\n              }\n              data-testid=\"comments-list-item-status-button\"\n              disabled={readOnly}\n              icon={status === 'open' ? CheckmarkCircleIcon : UndoIcon}\n              mode=\"bleed\"\n              onClick={onStatusChange}\n              tooltipProps={{\n                content:\n                  status === 'open'\n                    ? t('list-item.resolved-tooltip-content')\n                    : t('list-item.re-open-resolved'),\n              }}\n            />\n          )}\n\n          {hasContextMenuOptions && (\n            <MenuButton\n              id=\"comment-actions-menu\"\n              button={\n                <ContextMenuButton\n                  aria-label={t('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('list-item.edit-comment')}\n                    tooltipProps={\n                      mode === 'upsell' ? {content: t('list-item.edit-comment-upsell')} : undefined\n                    }\n                    disabled={mode === 'upsell'}\n                  />\n\n                  <MenuItem\n                    hidden={!canDelete}\n                    icon={TrashIcon}\n                    onClick={onDeleteStart}\n                    text={t('list-item.delete-comment')}\n                    tone=\"critical\"\n                  />\n\n                  {onCopyLink && <MenuDivider hidden={!canDelete && !canEdit} />}\n\n                  <MenuItem\n                    hidden={!onCopyLink}\n                    icon={LinkIcon}\n                    onClick={onCopyLink}\n                    text={t('list-item.copy-link')}\n                  />\n                </Menu>\n              }\n              popover={POPOVER_PROPS}\n            />\n          )}\n        </FloatingCard>\n      </Flex>\n    </TooltipDelayGroupProvider>\n  )\n}\n","import {toPlainText} from '@portabletext/react'\nimport {hues} from '@sanity/color'\nimport {LinkRemovedIcon} from '@sanity/icons'\nimport {isPortableTextTextBlock} from '@sanity/types'\nimport {Box, Flex, Stack, Text, type Theme} from '@sanity/ui'\nimport {useMemo} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {Tooltip} from '../../../../ui-components'\nimport {useTranslation} from '../../../i18n'\nimport {COMMENTS_HIGHLIGHT_HUE_KEY} from '../../constants'\nimport {commentsLocaleNamespace} from '../../i18n'\nimport {type CommentDocument} from '../../types'\n\nfunction truncate(str: string, length = 250) {\n  if (str.length <= length) return str\n  return `${str.slice(0, length)}...`\n}\n\ninterface BlockQuoteStackProps {\n  $hasReferencedValue: boolean\n  theme: Theme\n}\n\nconst InlineBox = styled(Box).attrs({marginLeft: 1, marginRight: 2})`\n  &:not([data-hidden]) {\n    display: inline;\n  }\n`\n\nconst BlockQuoteStack = styled(Stack)<BlockQuoteStackProps>(({theme, $hasReferencedValue}) => {\n  const isDark = theme.sanity.v2?.color._dark\n\n  const hue = $hasReferencedValue ? COMMENTS_HIGHLIGHT_HUE_KEY : 'gray'\n  const borderColor = isDark ? hues[hue][700].hex : hues[hue][300].hex\n\n  return css`\n    border-left: 2px solid ${borderColor};\n    word-break: break-word;\n  `\n})\n\ninterface CommentsListItemReferencedValueProps {\n  hasReferencedValue: boolean | undefined\n  value: CommentDocument['contentSnapshot']\n}\n\nexport function CommentsListItemReferencedValue(props: CommentsListItemReferencedValueProps) {\n  const {hasReferencedValue, value} = props\n\n  const {t} = useTranslation(commentsLocaleNamespace)\n  const tooltipText = t('list-item.missing-referenced-value-tooltip-content')\n\n  const resolvedValue = useMemo(() => {\n    if (Array.isArray(value) && value?.filter(isPortableTextTextBlock).length > 0) {\n      const text = value?.map(toPlainText).join(' ')\n      const truncated = truncate(text)\n\n      return truncated\n    }\n\n    return null\n  }, [value])\n\n  if (!resolvedValue) return null\n\n  return (\n    <BlockQuoteStack\n      $hasReferencedValue={Boolean(hasReferencedValue)}\n      data-testid=\"comments-list-item-referenced-value\"\n      flex={1}\n      forwardedAs=\"blockquote\"\n      padding={1}\n      paddingLeft={2}\n      sizing=\"border\"\n    >\n      <Flex align=\"flex-start\">\n        <Text size={1} muted>\n          {!hasReferencedValue && (\n            <Tooltip content={tooltipText}>\n              <InlineBox>\n                <LinkRemovedIcon />\n              </InlineBox>\n            </Tooltip>\n          )}\n\n          {resolvedValue}\n        </Text>\n      </Flex>\n    </BlockQuoteStack>\n  )\n}\n","/* eslint-disable complexity */\nimport {hues} from '@sanity/color'\nimport {type CurrentUser} from '@sanity/types'\nimport {\n  type AvatarSize,\n  Box,\n  Card,\n  Flex,\n  Stack,\n  Text,\n  TextSkeleton,\n  useClickOutsideEvent,\n} from '@sanity/ui'\n// eslint-disable-next-line camelcase\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {IntentLink} from 'sanity/router'\nimport {css, styled} from 'styled-components'\n\nimport {useDidUpdate} from '../../../form'\nimport {\n  type RelativeTimeOptions,\n  useDateTimeFormat,\n  useRelativeTime,\n  type UserListWithPermissionsHookValue,\n} from '../../../hooks'\nimport {Translate, useTranslation} from '../../../i18n'\nimport {useUser} from '../../../store'\nimport {hasCommentMessageValue, isTextSelectionComment, useCommentHasChanged} from '../../helpers'\nimport {commentsLocaleNamespace} from '../../i18n'\nimport {\n  type CommentContext,\n  type CommentDocument,\n  type CommentMessage,\n  type CommentReactionOption,\n  type CommentStatus,\n  type CommentsUIMode,\n  type CommentUpdatePayload,\n} from '../../types'\nimport {CommentsAvatar, SpacerAvatar} from '../avatars'\nimport {FLEX_GAP} from '../constants'\nimport {CommentMessageSerializer} from '../pte'\nimport {CommentInput, type CommentInputHandle} from '../pte/comment-input'\nimport {CommentReactionsBar} from '../reactions'\nimport {CommentsListItemContextMenu} from './CommentsListItemContextMenu'\nimport {CommentsListItemReferencedValue} from './CommentsListItemReferencedValue'\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 HeaderFlex = styled(Flex)<{$size: AvatarSize}>((props) => {\n  const theme = getTheme_v2(props.theme)\n\n  return css`\n    min-height: ${theme.avatar.sizes[props.$size]?.size}px;\n  `\n})\n\nconst IntentText = styled(Text)(({theme}) => {\n  const isDark = theme.sanity.color.dark\n  const fg = hues.gray[isDark ? 200 : 800].hex\n\n  return css`\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)<{$size: AvatarSize}>((props) => {\n  const theme = getTheme_v2(props.theme)\n\n  return css`\n    min-height: ${theme.avatar.sizes[props.$size]?.size}px;\n  `\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  avatarSize?: AvatarSize\n  canDelete?: boolean\n  canEdit?: boolean\n  comment: CommentDocument\n  currentUser: CurrentUser\n  hasError?: boolean\n  hasReferencedValue?: boolean\n  intent?: CommentContext['intent']\n  isParent?: boolean\n  isRetrying?: boolean\n  mentionOptions: UserListWithPermissionsHookValue\n  mode: CommentsUIMode\n  onCopyLink?: (id: string) => void\n  onCreateRetry?: (id: string) => void\n  onDelete: (id: string) => void\n  onEdit: (id: string, message: CommentUpdatePayload) => 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  withAvatar?: boolean\n}\n\nconst RELATIVE_TIME_OPTIONS: RelativeTimeOptions = {useTemporalPhrase: true}\n\nexport function CommentsListItemLayout(props: CommentsListItemLayoutProps) {\n  const {\n    avatarSize = 1,\n    canDelete,\n    canEdit,\n    comment,\n    currentUser,\n    hasError,\n    hasReferencedValue,\n    intent,\n    isParent,\n    isRetrying,\n    mentionOptions,\n    mode,\n    onCopyLink,\n    onCreateRetry,\n    onDelete,\n    onEdit,\n    onInputKeyDown,\n    onReactionSelect,\n    onStatusChange,\n    readOnly,\n    withAvatar = true,\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 rootElementRef = useRef<HTMLDivElement | null>(null)\n  const startMessage = useRef<CommentMessage>(message)\n  const [menuOpen, setMenuOpen] = useState<boolean>(false)\n\n  const commentInputRef = useRef<CommentInputHandle>(null)\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 createdDate = _createdAt ? new Date(_createdAt) : new Date()\n  const editedDate = lastEditedAt ? new Date(lastEditedAt) : null\n  const createdTimeAgo = useRelativeTime(createdDate, RELATIVE_TIME_OPTIONS)\n  const dateTimeFormat = useDateTimeFormat({dateStyle: 'full', timeStyle: 'medium'})\n  const formattedCreatedAt = dateTimeFormat.format(createdDate)\n  const formattedLastEditAt = editedDate ? dateTimeFormat.format(editedDate) : null\n  const displayError = hasError || isRetrying\n\n  // If the message has changed we need to update the value in the state\n  // so that, when the user starts editing, the input is populated with the\n  // latest message value.\n  useEffect(() => {\n    if (isEditing) return\n\n    startMessage.current = message\n    setValue(message)\n  }, [isEditing, message])\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 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  useClickOutsideEvent(!hasChanges && cancelEdit, () => [rootElementRef.current])\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      data-testid=\"comments-list-item-layout\"\n      onKeyDown={handleRootKeyDown}\n      ref={rootElementRef}\n      space={4}\n    >\n      <InnerStack space={1} data-muted={displayError}>\n        <HeaderFlex align=\"center\" gap={FLEX_GAP} flex={1} $size={avatarSize}>\n          {withAvatar && <CommentsAvatar user={user} size={avatarSize} />}\n\n          <Flex direction=\"column\" gap={2} paddingY={intent ? 2 : 0}>\n            <Flex\n              align=\"center\"\n              paddingBottom={comment.context?.intent ? 0 : 1}\n              sizing=\"border\"\n              flex={1}\n            >\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}>\n                      <time dateTime={createdDate.toISOString()} title={formattedCreatedAt}>\n                        {createdTimeAgo}\n                      </time>\n                    </TimeText>\n\n                    {formattedLastEditAt && editedDate && (\n                      <TimeText muted size={0} title={formattedLastEditAt}>\n                        <time dateTime={editedDate.toISOString()} title={formattedLastEditAt}>\n                          ({t('list-item.layout-edited')})\n                        </time>\n                      </TimeText>\n                    )}\n                  </Flex>\n                )}\n              </Flex>\n            </Flex>\n\n            {intent && (\n              <Box flex={1}>\n                <IntentText muted size={0} textOverflow=\"ellipsis\">\n                  <Translate\n                    t={t}\n                    i18nKey=\"list-item.layout-context\"\n                    values={{title: intent.title, intent: 'edit'}}\n                    components={{\n                      IntentLink: ({children}) =>\n                        intent ? (\n                          <IntentLink params={intent.params} intent={intent.name}>\n                            {children}\n                          </IntentLink>\n                        ) : undefined,\n                    }}\n                  />\n                </IntentText>\n              </Box>\n            )}\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                mode={mode}\n                onCopyLink={onCopyLink ? handleCopyLink : undefined}\n                onDeleteStart={handleDelete}\n                onEditStart={toggleEdit}\n                onMenuClose={handleMenuClose}\n                onMenuOpen={handleMenuOpen}\n                onReactionSelect={handleReactionSelect}\n                onStatusChange={onStatusChange ? handleOpenStatusChange : undefined}\n                readOnly={readOnly}\n                status={comment.status}\n              />\n            </ContextMenuBox>\n          )}\n        </HeaderFlex>\n\n        {isTextSelectionComment(comment) && Boolean(comment?.contentSnapshot) && (\n          <Flex gap={FLEX_GAP} marginBottom={3}>\n            {withAvatar && <SpacerAvatar $size={avatarSize} />}\n\n            <CommentsListItemReferencedValue\n              hasReferencedValue={hasReferencedValue}\n              value={comment?.contentSnapshot}\n            />\n          </Flex>\n        )}\n\n        {isEditing && (\n          <Flex align=\"flex-start\" gap={2}>\n            {withAvatar && <SpacerAvatar $size={avatarSize} />}\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            {withAvatar && <SpacerAvatar $size={avatarSize} />}\n\n            <CommentMessageSerializer blocks={message} />\n          </Flex>\n        )}\n\n        {hasReactions && (\n          <Flex gap={FLEX_GAP} marginTop={2}>\n            {withAvatar && <SpacerAvatar $size={avatarSize} />}\n\n            <Box onClick={stopPropagation}>\n              <CommentReactionsBar\n                currentUser={currentUser}\n                mode={mode}\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} $size={avatarSize}>\n          {withAvatar && <SpacerAvatar $size={avatarSize} />}\n\n          <Flex align=\"center\" gap={1} flex={1}>\n            <Text muted size={1}>\n              {hasError && t('list-item.layout-failed-sent')}\n              {isRetrying && t('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('list-item.layout-retry')}\n                </Text>\n              </RetryCardButton>\n            </Flex>\n          </Flex>\n        </ErrorFlex>\n      )}\n    </RootStack>\n  )\n}\n","import {hues} from '@sanity/color'\nimport {Card, type CardProps} from '@sanity/ui'\nimport {type Theme} from '@sanity/ui/theme'\nimport {css, styled} from 'styled-components'\n\nimport {COMMENTS_HIGHLIGHT_HUE_KEY} from '../../constants'\n\ninterface ThreadCardProps extends Omit<CardProps, 'tone'> {\n  theme: Theme\n}\n\nexport const ThreadCard = styled(Card).attrs({padding: 3, radius: 3, sizing: 'border'})(\n  (props: ThreadCardProps) => {\n    const {theme} = props\n    const isDark = theme.sanity.color.dark\n    const activeBg = hues[COMMENTS_HIGHLIGHT_HUE_KEY][isDark ? 900 : 50].hex\n    const defaultBg = hues.gray[isDark ? 900 : 50].hex\n\n    return css`\n      background-color: ${defaultBg};\n\n      &[data-active='true'] {\n        background-color: ${activeBg};\n      }\n    `\n  },\n)\n","import {ChevronDownIcon} from '@sanity/icons'\nimport {type CurrentUser} from '@sanity/types'\nimport {type AvatarSize, Flex, Stack, type StackProps, useLayer} from '@sanity/ui'\nimport {\n  type KeyboardEvent,\n  memo,\n  type MouseEvent,\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {Button} from '../../../../ui-components'\nimport {type UserListWithPermissionsHookValue} from '../../../hooks'\nimport {useTranslation} from '../../../i18n'\nimport {type CommentsSelectedPath} from '../../context'\nimport {commentIntentIfDiffers, hasCommentMessageValue} from '../../helpers'\nimport {applyCommentIdAttr} from '../../hooks'\nimport {commentsLocaleNamespace} from '../../i18n'\nimport {\n  type CommentBaseCreatePayload,\n  type CommentDocument,\n  type CommentMessage,\n  type CommentReactionOption,\n  type CommentStatus,\n  type CommentsUIMode,\n  type CommentUpdatePayload,\n} from '../../types'\nimport {SpacerAvatar} from '../avatars'\nimport {CommentInput, type CommentInputHandle} from '../pte'\nimport {CommentsListItemLayout} from './CommentsListItemLayout'\nimport {ThreadCard} from './styles'\n\nconst EMPTY_ARRAY: [] = []\n\nconst MAX_COLLAPSED_REPLIES = 5\n\nconst DEFAULT_AVATAR_CONFIG: CommentsListItemProps['avatarConfig'] = {\n  avatarSize: 1,\n  parentCommentAvatar: true,\n  replyAvatar: true,\n  threadCommentsAvatar: true,\n}\n\n// data-active = when the comment is selected\n// data-hovered = when the mouse is over the comment\nconst StyledThreadCard = styled(ThreadCard)(() => {\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    // 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          [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\nexport interface CommentsListItemProps {\n  avatarConfig?: {\n    avatarSize: AvatarSize\n    parentCommentAvatar: boolean\n    replyAvatar: boolean\n    threadCommentsAvatar: boolean\n  }\n  canReply?: boolean\n  currentUser: CurrentUser\n  hasReferencedValue?: boolean\n  innerPadding?: StackProps['padding']\n  isSelected: boolean\n  mentionOptions: UserListWithPermissionsHookValue\n  mode: CommentsUIMode\n  onCopyLink?: (id: string) => void\n  onCreateRetry: (id: string) => void\n  onDelete: (id: string) => void\n  onEdit: (id: string, payload: CommentUpdatePayload) => void\n  onKeyDown?: (event: KeyboardEvent<Element>) => void\n  onPathSelect?: (nextPath: CommentsSelectedPath) => void\n  onReactionSelect?: (id: string, reaction: CommentReactionOption) => void\n  onReply: (payload: CommentBaseCreatePayload) => void\n  onStatusChange?: (id: string, status: CommentStatus) => void\n  parentComment: CommentDocument\n  readOnly?: boolean\n  replies: CommentDocument[] | undefined\n}\n\nexport const CommentsListItem = memo(function CommentsListItem(props: CommentsListItemProps) {\n  const {\n    avatarConfig = DEFAULT_AVATAR_CONFIG,\n    canReply,\n    currentUser,\n    hasReferencedValue,\n    innerPadding,\n    isSelected,\n    mentionOptions,\n    mode,\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, setDidExpand] = useState(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: CommentBaseCreatePayload = {\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      payload: {\n        fieldPath: parentComment.target.path?.field || '',\n      },\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: 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: 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: MouseEvent<HTMLButtonElement>) => {\n    e.stopPropagation()\n    setCollapsed(false)\n    setDidExpand(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) {\n      setCollapsed(true)\n    }\n  }, [didExpand, replies])\n\n  const renderedReplies = useMemo(\n    () =>\n      splicedReplies.map((reply) => (\n        <Stack as=\"li\" key={reply._id} {...applyCommentIdAttr(reply._id)}>\n          <CommentsListItemLayout\n            avatarSize={avatarConfig.avatarSize}\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            intent={commentIntentIfDiffers(parentComment, reply)}\n            mentionOptions={mentionOptions}\n            mode={mode}\n            onCopyLink={onCopyLink}\n            onCreateRetry={onCreateRetry}\n            onDelete={onDelete}\n            onEdit={onEdit}\n            onInputKeyDown={handleInputKeyDown}\n            onReactionSelect={onReactionSelect}\n            readOnly={readOnly}\n            withAvatar={avatarConfig.threadCommentsAvatar}\n          />\n        </Stack>\n      )),\n    [\n      avatarConfig.threadCommentsAvatar,\n      avatarConfig.avatarSize,\n      currentUser,\n      handleInputKeyDown,\n      mentionOptions,\n      onCopyLink,\n      onCreateRetry,\n      onDelete,\n      onEdit,\n      onReactionSelect,\n      parentComment,\n      readOnly,\n      splicedReplies,\n      mode,\n    ],\n  )\n\n  return (\n    <StyledThreadCard\n      data-active={isSelected ? 'true' : 'false'}\n      data-hovered={mouseOver ? 'true' : 'false'}\n      data-testid=\"comments-list-item\"\n      data-ui=\"CommentsListItem\"\n      onClick={handleThreadRootClick}\n      onMouseEnter={handleMouseEnter}\n      onMouseLeave={handleMouseLeave}\n    >\n      <GhostButton\n        data-ui=\"GhostButton\"\n        aria-label={t('list-item.go-to-field-button.aria-label')}\n      />\n\n      <Stack\n        as=\"ul\"\n        padding={innerPadding}\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\" {...applyCommentIdAttr(parentComment._id)}>\n          <CommentsListItemLayout\n            avatarSize={avatarConfig.avatarSize}\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            hasReferencedValue={hasReferencedValue}\n            intent={parentComment.context?.intent}\n            isParent\n            isRetrying={parentComment._state?.type === 'createRetrying'}\n            mentionOptions={mentionOptions}\n            mode={mode}\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            withAvatar={avatarConfig.parentCommentAvatar}\n          />\n        </Stack>\n\n        {showCollapseButton && !didExpand && (\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            avatarSize={avatarConfig.avatarSize}\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={\n              mode === 'upsell'\n                ? t('compose.reply-placeholder-upsell')\n                : t('compose.reply-placeholder')\n            }\n            readOnly={readOnly || mode === 'upsell'}\n            ref={replyInputRef}\n            value={value}\n            withAvatar={avatarConfig.replyAvatar}\n          />\n        )}\n      </Stack>\n    </StyledThreadCard>\n  )\n})\nCommentsListItem.displayName = 'Memo(CommentsListItem)'\n","import {Container, Flex, Stack, Text} from '@sanity/ui'\n\nimport {LoadingBlock} from '../../../components'\nimport {type TFunction, useTranslation} from '../../../i18n'\nimport {commentsLocaleNamespace} from '../../i18n'\nimport {type CommentStatus} from '../../types'\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('list-status.empty-state-open-title'),\n      message: t('list-status.empty-state-open-text'),\n    },\n    resolved: {\n      title: t('list-status.empty-state-resolved-title'),\n      message: t('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('list-status.error')}\n          </Text>\n        </Flex>\n      </Flex>\n    )\n  }\n\n  if (loading) {\n    return <LoadingBlock showText title={t('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 {type CurrentUser, type PortableTextBlock} from '@sanity/types'\nimport {useCallback, useMemo, useRef, useState} from 'react'\n\nimport {type UserListWithPermissionsHookValue} from '../../../hooks'\nimport {Translate, useTranslation} from '../../../i18n'\nimport {hasCommentMessageValue} from '../../helpers'\nimport {commentsLocaleNamespace} from '../../i18n'\nimport {type CommentMessage, type CommentsUIMode} from '../../types'\nimport {CommentInput, type CommentInputHandle, type CommentInputProps} from '../pte'\n\nconst EMPTY_PT_ARRAY: PortableTextBlock[] = []\n\ninterface CreateNewThreadInputProps {\n  currentUser: CurrentUser\n  fieldTitle: string\n  mentionOptions: UserListWithPermissionsHookValue\n  mode: CommentsUIMode\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    fieldTitle,\n    mentionOptions,\n    mode,\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_PT_ARRAY)\n  const commentInputHandle = useRef<CommentInputHandle | null>(null)\n\n  const handleSubmit = useCallback(() => {\n    onNewThreadCreate?.(value)\n    setValue(EMPTY_PT_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_PT_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    mode === 'upsell' ? (\n      t('compose.add-comment-input-placeholder-upsell')\n    ) : (\n      <Translate\n        t={t}\n        i18nKey=\"compose.add-comment-input-placeholder\"\n        values={{field: fieldTitle}}\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 || mode === 'upsell'}\n      ref={commentInputHandle}\n      value={value}\n    />\n  )\n}\n","import {type CurrentUser} from '@sanity/types'\nimport {\n  // eslint-disable-next-line no-restricted-imports\n  Button, // Button with specific styling and children behavior.\n  Flex,\n  Stack,\n} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {type MouseEvent, type ReactNode, useCallback, useMemo} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {type UserListWithPermissionsHookValue} from '../../../hooks'\nimport {useTranslation} from '../../../i18n'\nimport {type CommentsSelectedPath} from '../../context'\nimport {commentsLocaleNamespace} from '../../i18n'\nimport {\n  type CommentBaseCreatePayload,\n  type CommentListBreadcrumbs,\n  type CommentMessage,\n  type CommentsUIMode,\n} from '../../types'\nimport {CommentBreadcrumbs} from '../CommentBreadcrumbs'\nimport {CreateNewThreadInput} from './CreateNewThreadInput'\nimport {ThreadCard} from './styles'\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: ReactNode\n  currentUser: CurrentUser\n  fieldPath: string\n  isSelected: boolean\n  mentionOptions: UserListWithPermissionsHookValue\n  mode: CommentsUIMode\n  onNewThreadCreate: (payload: CommentBaseCreatePayload) => 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    mode,\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: CommentBaseCreatePayload = {\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        payload: {\n          fieldPath,\n        },\n      }\n\n      onNewThreadCreate?.(nextComment)\n    },\n    [onNewThreadCreate, fieldPath],\n  )\n\n  const handleBreadcrumbsClick = useCallback(\n    (e: 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: 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('list-item.breadcrumb-button-go-to-field-aria-label', {\n                field: lastCrumb,\n              })}\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} data-active={isSelected}>\n          <CreateNewThreadInput\n            currentUser={currentUser}\n            fieldTitle={lastCrumb}\n            mentionOptions={mentionOptions}\n            mode={mode}\n            onNewThreadCreate={handleNewThreadCreate}\n            readOnly={readOnly}\n          />\n        </ThreadCard>\n      )}\n\n      <Stack space={2}>{children}</Stack>\n    </Stack>\n  )\n}\n","import {type CurrentUser} from '@sanity/types'\nimport {BoundaryElementProvider, Flex, Stack} from '@sanity/ui'\nimport {forwardRef, memo, useMemo, useState} from 'react'\n\nimport {type UserListWithPermissionsHookValue} from '../../../hooks'\nimport {type CommentsSelectedPath} from '../../context'\nimport {applyCommentsGroupAttr} from '../../hooks'\nimport {\n  type CommentBaseCreatePayload,\n  type CommentReactionOption,\n  type CommentStatus,\n  type CommentsUIMode,\n  type CommentThreadItem,\n  type CommentUpdatePayload,\n} from '../../types'\nimport {CommentsListItem} from './CommentsListItem'\nimport {CommentsListStatus} from './CommentsListStatus'\nimport {CommentThreadLayout} from './CommentThreadLayout'\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  beforeListNode?: React.ReactNode\n  comments: CommentThreadItem[]\n  currentUser: CurrentUser\n  error: Error | null\n  loading: boolean\n  mentionOptions: UserListWithPermissionsHookValue\n  mode: CommentsUIMode\n  onCopyLink?: (id: string) => void\n  onCreateRetry: (id: string) => void\n  onDelete: (id: string) => void\n  onEdit: (id: string, payload: CommentUpdatePayload) => void\n  onNewThreadCreate: (payload: CommentBaseCreatePayload) => void\n  /**\n   * @internal\n   */\n  onPathSelect?: (nextPath: CommentsSelectedPath) => void\n  onReactionSelect?: (id: string, reaction: CommentReactionOption) => void\n  onReply: (payload: CommentBaseCreatePayload) => void\n  onStatusChange?: (id: string, status: CommentStatus) => void\n  readOnly?: boolean\n  /**\n   * @internal\n   */\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(function CommentsListInner(\n  props: CommentsListProps,\n  ref: React.Ref<HTMLDivElement>,\n) {\n  const {\n    beforeListNode,\n    comments,\n    currentUser,\n    error,\n    loading,\n    mentionOptions,\n    mode,\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 groupedThreads = useMemo(() => Object.entries(groupThreads(comments)), [comments])\n\n  const showComments = !loading && !error && groupedThreads.length > 0\n\n  return (\n    <Flex\n      data-testid=\"comments-list\"\n      direction=\"column\"\n      flex={1}\n      height=\"fill\"\n      overflow=\"hidden\"\n      ref={setBoundaryElement}\n      sizing=\"border\"\n    >\n      {mode !== 'upsell' && (\n        <CommentsListStatus\n          error={error}\n          hasNoComments={groupedThreads.length === 0}\n          loading={loading}\n          status={status}\n        />\n      )}\n\n      {(showComments || beforeListNode) && (\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          ref={ref}\n        >\n          {beforeListNode}\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\n                  as=\"li\"\n                  key={fieldPath}\n                  paddingTop={3}\n                  {...applyCommentsGroupAttr(firstThreadId)}\n                >\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                    mode={mode}\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                          hasReferencedValue={item.hasReferencedValue}\n                          isSelected={threadIsSelected}\n                          key={item.parentComment._id}\n                          mentionOptions={mentionOptions}\n                          mode={mode}\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 * @beta\n * @hidden\n */\nexport const CommentsList = memo(CommentsListInner)\n","import {Box, Flex, Stack, Text} from '@sanity/ui'\nimport {keyframes, styled} from 'styled-components'\n\nimport {Button, Popover, type PopoverProps} from '../../../../ui-components'\nimport {useTranslation} from '../../../i18n'\nimport {commentsLocaleNamespace} from '../../i18n'\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, ...rest} = 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('onboarding.header')}\n            </Text>\n\n            <Text size={1}>{t('onboarding.body')}</Text>\n\n            <Flex justify=\"flex-end\" marginTop={2}>\n              <Button text={t('onboarding.dismiss')} tone=\"primary\" onClick={onDismiss} />\n            </Flex>\n          </Stack>\n        </Root>\n      }\n      open\n      portal\n      {...rest}\n    />\n  )\n}\n","import {Box, Container} from '@sanity/ui'\n\nimport {type UpsellData} from '../../../studio/upsell/types'\nimport {UpsellPanel} from '../../../studio/upsell/UpsellPanel'\n\ninterface CommentsUpsellPanelProps {\n  data: UpsellData\n  onPrimaryClick: () => void\n  onSecondaryClick: () => void\n}\n\nexport function CommentsUpsellPanel(props: CommentsUpsellPanelProps) {\n  const {data, onPrimaryClick, onSecondaryClick} = props\n  return (\n    <Container width={1}>\n      <Box marginBottom={6}>\n        <UpsellPanel\n          data={data}\n          onPrimaryClick={onPrimaryClick}\n          onSecondaryClick={onSecondaryClick}\n        />\n      </Box>\n    </Container>\n  )\n}\n"],"names":["createStore","reportedValues","publish","add","id","value","has","set","update","remove","delete","useTrackerStore","useState","Map","snapshot","updateSnapshot","useReducer","Array","from","entries","debouncedUpdateSnapshot","useMemo","debounce","trailing","store","useTrackerStoreReporter","t0","$","_c","isEqual","undefined","Object","is","idRef","useRef","previousRef","t1","t2","nextValue","current","useLayoutEffect","t3","nextValue_0","ChangeIndicatorsTrackerComponent","props","children","ChangeIndicatorsTracker","memo","EMPTY_ARRAY","useChangeIndicatorsReportedValues","useContext","ChangeIndicatorTrackerContextGetSnapshot","console","warn","Error","useChangeIndicatorsReporter","ChangeIndicatorTrackerContextStore","ChangeFieldWrapper","path","hasHover","onSetFocus","ConnectorContext","isHover","setHover","Symbol","for","onMouseEnter","onMouseLeave","element","setElement","PathUtils","toString","reporterId","isChanged","hasFocus","hasRevertHover","deepCompare","t4","event","handleClick","t5","setFocusWithStopPropagation","stopPropagation","createHookFromObservableFactory","observableFactory","initialValue","initialLoadingTuple","initialResult","type","tuple","arg","observable","of","pipe","switchMap","_arg","concat","map","scan","prevValue","next","distinctUntilChanged","prevIsLoading","nextIsLoading","catchError","error","result","useObservable","isNonNullable","DRAFTS_FOLDER","VERSION_FOLDER","PATH_SEPARATOR","DRAFTS_PREFIX","VERSION_PREFIX","documentIdEquals","documentId","equalsDocumentId","getPublishedId","isDraft","document","isDraftId","_id","startsWith","isVersionId","getIdPair","version","publishedId","draftId","getDraftId","versionId","getVersionId","isPublishedId","systemBundles","isSystemBundle","maybeSystemBundle","includes","systemBundleNames","isSystemBundleName","maybeSystemBundleName","idMatchesPerspective","perspectiveStack","some","perspective","getVersionFromId","_versionPrefix","_publishedId","split","slice","join","length","createDraftFrom","newDraftFrom","createPublishedFrom","collate","documents","byId","reduce","res","doc","entry","get","_type","published","draft","versions","push","values","removeDupes","filter","EMPTY_OBJECT","freeze","formatRelativeLocale","args","dateFnsRelative","formatRelative","isValid","parse","Date","dateTime","toLocaleDateString","getDocumentVariantType","getGlobalScope","globalThis","window","self","global","globalScope","isArray","isRecord","Boolean","isString","isTruthy","ResizeObserver","Polyfill","createSharedResizeObserver","createPubSub","resizeObserver","observe","observer","options","unsubscribe","subscribe","find","e","target","unobserve","createSWRCache","createLRUCache","createSWR","cache","key","input$","defer","fromCache","EMPTY","tap","lru","QuickLRU","BUNDLED_DOC_TYPES","_isSanityDocumentTypeDefinition","def","name","_isCustomDocumentTypeDefinition","GROQ_KEYWORDS","VALID_FIELD","fieldNeedsEscape","fieldName","test","escapeField","escapeFirst","isEmptyArray","joinPath","pathArray","i","pathSegment","isFirst","supportsTouch","isTouchDevice","navigator","maxTouchPoints","msMaxTouchPoints","FONT_SANS_SERIF","FONT_MONOSPACE","uncaughtErrorHandler","segmenter","Intl","Segmenter","sliceString","str","start","end","sliced","segment","truncateString","maxLength","truncated","LOADING_STATE","isLoading","useLoadable","value$","initial","asLoadable","userHasRole","user","roleId","roles","role","useThrottledCallback","callback","wait","throttle","useUnique","previous","setPrevious","DEBUG_MODE","process","env","SANITY_STUDIO_DEBUG_I18N","DEBUG_I18N","debugWrappers","reverse","triangles","maybeWrapT","t","wrapper","translationOptionOverrides","bindI18n","useTranslation","ns","keyPrefix","lng","useOriginalTranslation","animationSpeed","ChangeBarWrapper","styled","div","$changed","$disabled","$hasFocus","$isReviewChangeOpen","css","ChangeBarMarker","ChangeBarButton","FieldWrapper","ChangeBar","$zIndex","media","getTheme_v2","theme","button","$withHoverEffect","$isInteractive","ElementWithChangeBar","disabled","withHoverEffect","isInteractive","onOpenReviewChanges","isReviewChangesOpen","zIndex","useLayer","changeBar","onMouseEnterProp","onMouseLeaveProp","restProps","layer","event_0","t6","ChangeIndicator","useOnScroll","parentContext","ScrollContext","useEffect","ScrollContainerComponent","forwardRef","forwardedRef","onScroll","rest","as","As","ref","useImperativeHandle","childContext","_temp","t7","handleScroll","el","addEventListener","passive","capture","removeEventListener","t8","t9","ScrollContainer","displayName","CORNER_RADIUS","INTERACTIVE_STROKE_WIDTH","CONNECTOR_MARGIN","ARROW_MARGIN_X","ARROW_MARGIN_Y","ARROW_SIZE","ARROW_THRESHOLD","STROKE_WIDTH","DEBUG","DEBUG_LAYER_BOUNDS","findMostSpecificTarget","targetType","pathString","indexOf","fromString","exactId","mostSpecific","targetId","numEqual","numEqualSegments","lastPathSegment","pathOnlyDiffersByKey","isKeyedObject","hasOverflowScroll","overflow","getComputedStyle","isScrollable","scrollHeight","offsetHeight","scrollWidth","offsetWidth","getOffsetsTo","source","bounds","top","left","height","width","rect","foundScrollContainer","contains","offsetTop","offsetLeft","scrollTop","scrollLeft","offsetParent","isChangeBar","v","SCROLL_INTO_VIEW_TOP_PADDING","scrollIntoView","field","parentElementWithScroll","parentElement","scroll","behavior","ClampedRect","x","Math","max","y","ConnectorPath","InteractivePath","RightBarWrapper","arrowPath","dir","moveTo","lineTo","strings","delim","quadCurve","x1","y1","generateConnectorPath","line","to","fromX","fromY","toX","toY","cmds","r1","min","abs","isAbove","isBelow","getConnectorLinePoint","centerY","startY","endY","outOfBounds","mapConnectorToLine","connector","fromBounds","bottom","right","toBounds","maxStartY","Connector","bb0","linePathDescription","t10","t11","t12","SvgWrapper","svg","useResizeObserver","onResize","getState","allReportedValues","hovered","rootElement","changeBarsWithHover","changeBarsWithFocus","reportedChangeBar","isHoverConnector","connectors","change","ConnectorsOverlay","setHovered","setState","visibleConnectors","sortBy","c","handleScrollOrResize","useCallback","ConnectorGroup","onConnectorClick","handleMouseEnter","handleMouseLeave","t13","t14","ChangeConnectorRoot","className","setRootElement","contextValue","separator","Text","renderItem","item","index","CommentBreadcrumbs","titlePath","len","beforeLength","ceil","afterLength","floor","items","showSeparator","Fragment","nodes","BetaBadge","fontSize","focusRingBorderStyle","border","color","AlignedBottomGrid","Grid","focusRingStyle","opts","base","focusRing","focusRingOutsetWidth","offset","focusRingInsetWidth","bgColor","bg","LIST_ITEM_DATA_ATTR_ACTIVE","LIST_ITEM_INTERACTIVE_SELECTOR","FocusOverlayDiv","rem","sanity","radius","VirtualListBox","PointerOverlayDiv","Box","VirtualListChildBox","attrs","$height","style","CommandListComponent","activeItemDataAttr","ariaLabel","ariaMultiselectable","autoFocus","canReceiveFocus","fixedHeight","focusRingOffset","getItemDisabled","getItemKey","getItemSelected","initialIndex","initialScrollAlign","inputElement","itemHeight","onEndReached","onEndReachedIndexOffset","onlyShowSelectionWhenActive","overscan","testId","wrapAround","responsivePaddingProps","isMountedRef","commandListId","useId","activeIndexRef","childContainerElement","setChildContainerElement","pointerOverlayElement","setPointerOverlayElement","virtualListElement","setVirtualListElement","handleChange","lastItem","getVirtualItems","virtualizer","useVirtualizer","count","getScrollElement","estimateSize","onChange","itemIndices","acc","_","selected","activeIndex","activeItemCount","enableChildContainerPointerEvents","enabled","setAttribute","getChildDescendantId","getCommandListChildrenId","showChildrenActiveState","activeElement","forEach","child","virtualIndex","Number","dataset","targetIndex","querySelector","toggleAttribute","hideChildrenActiveState","refreshChildrenActiveStateThrottled","handleUpdateActiveDescendant","removeAttribute","handleGetTopIndex","childContainerParentElement","getBoundingClientRect","getVirtualItemForOffset","setActiveIndex","scrollAlign","virtualListIndex","findIndex","scrollToIndex","align","selectAdjacentItemIndex","direction","nextIndex","lastIndex","wrapAroundIndex","focusElement","focus","focusInputElement","focusListElement","handleChildMouseEnter","handleFocus","handleKeyDown","childElements","preventDefault","currentElement","click","handleKeyDownInput","handleKeyDownList","handleVirtualListMouseEnter","handleVirtualListMouseLeave","getTopIndex","handleMouseEvent","mutationObserver","MutationObserver","childList","subtree","disconnect","rootTabIndex","getTotalSize","virtualRow","itemToRender","clonedItem","isValidElement","cloneElement","tabIndex","CommandListItem","measureElement","size","CommandList","CommandListItemComponent","virtualRowStart","activeAriaAttributes","flex","position","transform","ContextMenuButton","tone","tooltipProps","mode","content","EllipsisHorizontalIcon","Favicons","_props","errorHandlerScript","GlobalErrorHandler","__html","NoJsStyles","NoJavascript","globalStyles","DefaultDocument","entryPath","t15","href","getWorkspaceIdentifier","title","trim","getNamelessWorkspaceIdentifier","withTitle","useWorkspaces","workspaces","WorkspacesContext","WorkspaceValidationError","constructor","message","identifier","workspace","validateWorkspaces","validateBasePaths","validateNames","isSingleWorkspace","names","rawName","thisIdentifier","normalized","toLowerCase","existingWorkspace","prevIdentifier","every","hasBasePath","validateBasePath","firstWorkspace","restOfWorkspaces","firstWorkspaceSegmentCount","basePath","workspaceSegmentCount","basePaths","SPINNER_DELAY","TEXT_DELAY","StyledCard","Card","$fill","StyledSpinner","Spinner","$animatePosition","StyledText","LoadingBlock","fill","showText","Layer","LoadingText","defineLocaleResourceBundle","bundle","defineLocale","locale","isStaticResourceBundle","resources","then","defineLocalesResources","namespace","removeUndefinedLocaleResources","studioLocaleNamespace","validationLocaleNamespace","copyPasteLocalNamespace","copyPasteLocaleStrings","copyPasteLocaleResources","studioLocaleStrings","studioDefaultLocaleResources","validationLocaleStrings","validationLocaleResources","usEnglishLocale","bundles","weekInfo","firstDay","weekend","minimalDays","defaultLocale","supportsLocalStorage","localStorage","setItem","removeItem","LOCAL_STORAGE_PREFIX","getPreferredLocale","projectId","sourceId","getItem","storePreferredLocale","LocaleProvider","i18n","__internal","useSource","locales","i18next","LocaleProviderBase","on","off","language","candidate","currentLocale","useSyncExternalStore","newLocale","changeLanguage","changeLocale","context","useGetI18nText","input","stableNamespaces","JSON","stringify","flatMap","sort","namespaces","node","Proxy","property","defaultValue","useI18nText","Set","useCurrentLocale","useLocale","LocaleContext","intlCache","caches","dateTimeFormat","createCache","listFormat","numberFormat","relativeTimeFormat","getCacheId","instance","DateTimeFormat","ListFormat","NumberFormat","RelativeTimeFormat","create","orderedProps","obj","segments","useListFormat","OPEN_TAG_RE","CLOSE_TAG_RE","SELF_CLOSING_RE","VALID_COMPONENT_NAME_RE","VALID_HTML_TAG_NAME_RE","TEMPLATE_RE","simpleParser","tokens","text","openTag","remainder","match","matchOpenTag","tagName","groups","tag","validateTagName","textTokenWithInterpolation","isSelfClosing","selfClosing","matchCloseTag","interpolations","matchAll","pre","parseInterpolation","interpolation","variable","formatters","replace","COMPONENT_NAME_RE","RECOGNIZED_HTML_TAGS","Translate","translated","i18nKey","skipInterpolation","list","listValues","format","render","components","componentMap","head","tail","formattedValue","applyFormatters","Component","nextCloseIdx","token","nextClose","remaining","formatterFns","formatter","isDev","NODE_ENV","isProd","DEFAULT_API_VERSION","DEPLOYED_FRONTEND_HOST_STAGING","CDN_HOST_STAGING","API_HOST_STAGING","DEPLOYED_FRONTEND_HOST_PRODUCTION","CDN_HOST_PRODUCTION","API_HOST_PRODUCTION","IS_LOCAL_DEV","useToken","apiVersion","client","useClient","config","useAuthType","usePluginPostMessage","origin","handleMessage","iframeRef","contentWindow","postMessage","postFn","handler","data","iframe","setIframe","useSanityMediaLibraryConfig","isStaging","apiHost","endsWith","appHost","cdn","app","api","appBasePath","pluginApiVersion","hosts","isLocalDev","internalConfig","AppDialog","Dialog","Iframe","src","display","flexDirection","flexGrow","margin","padding","SelectAssetsDialog","useTheme","dark","mediaLibraryConfig","authType","dialogHeaderTitle","libraryId","onClose","onSelect","selectionType","selectAssetType","assetSelection","setAssetSelection","selection","didSelect","setDidSelect","iframeUrl","handleClose","handleSelect","handlePluginMessage","fetchedLibraryIdCache","MediaLibraryAssetSource","assetType","libraryIdProp","toast","useToast","cachedFetchedLibraryId","fetchedLibraryId","setFetchedLibraryId","request","uri","query","libraryIdFromResult","resolvedLibraryId","asset","assetsFromSource","kind","method","url","withCredentials","body","mediaLibraryId","assetInstanceId","assetId","mediaLibraryProps","closable","status","MediaLibrarySource","createSanityMediaLibraryImageSource","component","sourceProps","icon","ImageIcon","createSanityMediaLibraryFileSource","DocumentIcon","emptyRender","_createMiddlewareComponent","DefaultComponent","middlewareComponents","outerProps","Middleware","renderDefault","useMiddlewareComponents","defaultComponent","pick","flattened","flattenConfig","ConfigPropertyError","propertyName","cause","ConfigResolutionError","causes","messages","String","pseudoRandomNumber","seed","hashCode","prevHash","currVal","charCodeAt","SvgText","fonts","family","weights","medium","sizes","createDefaultIcon","subtitle","rng1","huesWithoutGray","COLOR_HUES","hue","colorHue","possibleTints","rng2","tint","hues","hex","letters","word","charAt","toUpperCase","darkened","darken","lightened","lighten","textColor","hasBadContrast","readableColor","defineConfig","createConfig","validatePlugin","pluginResult","definePlugin","pluginFactory","createPlugin","defineDocumentFieldAction","fieldAction","rePropName","reKeySegment","pathToString","isIndexSegment","isKeySegment","_key","isIndexTuple","getValueAtPath","rootValue","array","stringToPath","normalizePathSegment","normalizeIndexSegment","normalizeKeySegment","normalizeIndexTupleSegment","seg","pathsAreEqual","pathA","pathB","segmentA","segmentB","arrayItem","getItemKeySegment","isEmptyObject","keys","getAnnotationColor","colorManager","annotation","author","getAnnotationAtPath","diff","diffPath","getAnnotationAt","getDiffAtPath","getDiffAt","diffAt","action","parentPath","location","itemDiff","toIndex","itemMatchesKey","fieldDiff","fields","toValue","visitDiff","visitor","visitStringDiff","visitArrayDiff","getItemDiffIndex","visitObjectDiff","fromIndex","useUserColorManager","userColorManager","UserColorManagerContext","useUserColor","userId","manager","listen","DEFAULT_CURRENT_USER_HUE","USER_COLOR_EXCLUDE_HUES","defaultHues","getTints","scheme","isDarkScheme","background","getDefaultColors","colors","tints","getAnonymousColor","gray","createUserColorManager","anonymousColor","anonymousColorProp","currentUserColor","currentUserColorProp","userColors","hasOwnProperty","userColorKeys","subscriptions","previouslyAssigned","assignedCounts","counts","assigned","currentUserId","userStore","me","setCurrentUser","getUserHue","assignedHue","prevHue","hasUnusedColor","assignHue","preferredHue","getPreferredHue","getLeastUsedHue","subscription","getObservableColor","unassignHue","getUnusedColor","tieBreakerPreference","leastUses","leastUsed","uses","Observable","subscriber","userColor","shareReplay","refCount","hash","UserColorManagerProvider","managerFromProps","useColorSchemeValue","useAnnotationColor","useDiffAnnotationColor","createMemoryStorage","DB","getKey","setKey","tryParse","val","err","createLocalStoreStorage","localStoreStorage","withLocalStorageSWR","wrappedStore","merge","wrappedStoreValue","DEFAULT_STUDIO_CLIENT_OPTIONS","versionedClient","withConfig","createServerStorage","_client","keyValueLoader","DataLoader","keyValuePairs","catch","load","response","pair","clear","prime","createServerKeyValueStore","serverStorage","events$","Subject","storedValue","createKeyValueStore","CorsOriginError","memStore","createBroadcastChannel","storageEvents$","fromEvent","storageKey","broadcastedMessages$","messages$","newValue","broadcast","storage","GithubRootSvg","fg","CustomImage","img","GithubLogo","GoogleLogo","CustomLogo","provider","logo","providerLogos","google","github","getProviders","providers","customProviders","official","createHrefForProvider","loginMethod","redirectPath","params","URLSearchParams","createLoginComponent","getClient","redirectOnSingle","providerOptions","LoginComponent","setProviders","setError","redirectUrlForRedirectOnSingle","loading","sidPattern","consumeSessionId","sidParam","newHash","newUrl","URL","history","replaceState","sessionId","getSessionId","isAuthStore","maybeStore","state","isCookielessCompatibleLoginMethod","getStorageKey","getToken","clearToken","saveToken","time","toISOString","getCurrentUser","broadcastToken","statusCode","isNetworkError","host","_createAuthStore","clientFactory","clientFactoryOption","createSanityClient","token$","startWith","hostOptions","__SANITY_STAGING__","state$","useCdn","requestTagPrefix","ignoreBrowserTokenWarning","allowReconfigure","currentUser","authenticated","prev","handleCallbackUrl","requestClient","tradeSessionForToken","sid","logout","fromEntries","a","b","localeCompare","k","createAuthStore","memoize","createMockAuthStore","getProviderTitle","catchWithCount","selector","errors","errorOp","caught","onOnline$","onOffline$","expBackoff","retryCount","pow","CONNECTING","_callback","observableCallback","onRetry$","onRetry","createErrorStatus","isOffline","attemptNo","retryAt","createConnectionStatusStore","bifur","connectionStatus$","heartbeats","mergeMapTo","throwError","ts","lastHeartbeat","successiveErrorsCount","timeUntilRetry","getTime","expiry$","timer","onLine","initialErrorStatus","triggerRetry$","NEVER","takeUntil","take","isBlockType","isArrayOfObjectsFieldMember","member","schemaType","jsonType","IGNORE_KEYS","isEmptyItem","isPlainObject","isSchemaType","identity","createImmutableReconcile","decorator","immutableReconcile","curr","reconciled","prevObj","currObj","changed","enumerableKeys","getOwnPropertyNames","reconciledValue","defineProperty","enumerable","PresenceProvider","presence","useFormFieldPresence","ctx","PresenceContext","useChildPresence","inclusive","useFormBuilder","formBuilder","FormBuilderContext","getIcon","level","IconText","muted","primary","caution","critical","DefaultMarkers","markers","validation","renderCustomMarkers","CustomMarkers","ValidationProvider","useValidationMarkers","ValidationContext","useChildValidation","marker","NONEXISTENT_PATH","useMemberValidation","memberValidation","childValidation","hasError","hasWarning","hasInfo","usePortableTextMarkers","PortableTextMarkersContext","m","PRESENCE_MENU_POPOVER_PROPS","portal","AvatarStackBox","space","getTooltipText","DocumentPreviewPresence","uniqueUsers","tooltipContent","AvatarSkeleton","Skeleton","$size","avatar","symbols","whitespace","LEGACY_TO_UI_AVATAR_SIZES","small","large","nameToInitials","fullName","namesArray","UserAvatar","withTooltip","TooltipUserAvatar","StaticUserAvatar","animateArrowFrom","imageLoadError","setImageLoadError","imageUrl","UserAvatarLoader","loadedProps","useUser","MAX_AVATARS_DOCK","DEFAULT_MAX_AVATARS_FIELDS","AVATAR_DISTANCE","AVATAR_SIZE","AVATAR_ARROW_HEIGHT","INTERSECTION_THRESHOLDS","INTERSECTION_ELEMENT_PADDING","SNAP_TO_DOCK_DISTANCE_TOP","SNAP_TO_DOCK_DISTANCE_BOTTOM","SLIDE_RIGHT_THRESHOLD_TOP","SLIDE_RIGHT_THRESHOLD_BOTTOM","FlexWrapper","Flex","InnerBox","PresenceTrackerComponent","PresenceTracker","usePresenceReportedValues","PresenceTrackerContextGetSnapshot","usePresenceReporter","PresenceTrackerContextStore","PresenceTooltip","splitRight","indexFromMax","idx","calcAvatarStackWidth","FieldPresenceInner","maxAvatars","stack","uniquePresence","uniqBy","sorted","_temp2","hidden","visible","_visible","avatars","_temp3","FieldPresence","contextPresence","FormFieldPresenceContext","_temp4","minHeight","minWidth","FieldPresenceWithOverlay","_presence","lastActiveAt","av","transitionProperty","transitionDuration","transitionTimingFunction","createIntersectionObserver","entries$","intersectionObserver","IntersectionObserver","WithIntersection","io","onIntersection","RootWrapper","OverlayWrapper","RegionWrapper","TopRegionWrapper","$debug","margins","MiddleRegionWrapper","BottomRegionWrapper","toPx","num","negate","RegionsWithIntersections","regions","mt","mr","mb","ml","overlayRef","rootMargin","threshold","intersections","setIntersections","overlayWidth","setOverlayWidth","contentRect","regionsWithIntersectionDetails","region","intersection","boundsBottom","boundsTop","boundingClientRect","aboveTop","belowBottom","distanceTop","isIntersecting","intersectionRect","distanceBottom","forceWidth","ITEM_TRANSITION","withSpacerHeight","withIntersection","_regionsWithIntersectionDetails","prevRect","prevBottom","spacerHeight","orderByTop","orderBy","plus","sum","group","regionsWithSpacerHeight","grouped","inside","groupBy","_withSpacerHeight","grp","indent","w","_withIntersection","Spacer","DEFAULT_MARGINS","HTMLElement","getRelativeRect","parent","regionsWithComputedRects","StickyOverlay","containerWidth","topSpacing","bottomSpacing","nearTop","nearBottom","renderCallback","_counts","n_0","n","PresenceDock","closeCount","r","flatten","_temp5","allPresenceItems","topMargin","rightMargin","bottomMargin","leftMargin","leftOffset","alignItems","PresenceInside","originalLeft","diffRight","PassThrough","DebugValue","PresenceOverlay","trimChildPath","childPath","trimLeft","PresenceScope","readOnly","presence_0","childPresence","VirtualizerScrollInstanceProvider","scrollElement","containerElement","PRESENCE_MARGINS","onDragEnter","onDrop","EditPortal","header","documentScrollElement","setDocumentScrollElement","contents","autofocus","legacy_referenceElement","POPOVER_PROPS","placement","fallbackPlacements","FieldActionMenuGroup","expanded","item_0","idx_0","FieldActionMenuItem","onAction","reason","disabledTooltipContent","iconRight","CheckmarkIcon","FieldActionMenuNode","prevIsGroup","STATUS_BUTTON_TOOLTIP_PROPS","renderAsButton","FieldActionMenu","onMenuOpenChange","open","setOpen","handleOpen","buttonNodes","menuNodesProp","menuNodes","rootNodes","RootFieldActionMenuNode","onOpen","ROOT_MENU_BUTTON_POPOVER_PROPS","constrainSize","RootFieldActionMenuGroup","MenuButton","useHoveredField","HoveredFieldContext","FieldActionsProvider","actions","focused","onFieldMouseEnter","onFieldMouseLeave","hoveredStore","hoveredPath","getSnapshot","filterActions","FieldActionsResolver","documentType","onActions","lenRef","fieldActions","setFieldActions","fieldActionsRef","setFieldAction","newFieldActions","FieldActions","defineFieldActionComponent","FieldAction","useAction","_action","useFieldActions","FieldActionsContext","HoveredFieldProvider","listeners","hoveredStackRef","listener","path_0","pathString_0","listener_0","onStoreChange","Root","$floatingCardWidth","$slotWidth","$floatingCardVisible","ContentBox","$presenceMaxWidth","SlotBox","$right","$fieldActionsVisible","FieldActionsFloatingCard","FieldActionsFlex","MAX_AVATARS","FormFieldBaseHeader","__internal_comments","comments","__internal_slot","slot","fieldFocused","fieldHovered","inputId","setFocused","menuOpen","setMenuOpen","floatingCardElement","setFloatingCardElement","floatingCardWidth","setFloatingCardWidth","slotElement","setSlotElement","slotWidth","setSlotWidth","hasComments","isAddingComment","commentButton","hasActions","showFieldActions","hasCommentsButtonOrActions","shouldShowFloatingCard","handleSetFloatingCardElementWidth","handleFocusCapture","handleBlurCapture","width_0","slotEl","t16","createDescriptionId","description","StatusIconWrapper","VALIDATION_ICONS","ValidationErrorIcon","warning","ValidationWarningIcon","info","ValidationInfoIcon","StyledStack","Stack","StatusText","$status","FormFieldValidationStatus","__unstable_showSummary","showSummary","hasErrors","hasWarnings","StatusIcon","itemIndex","v_0","FormFieldValidationStatusItem","FormFieldValidationSummary","listFormatter","errorCount","warningCount","errorText","warningText","count_0","LabelSuffix","FormFieldHeaderText","deprecated","hasValidations","hasLabelSuffix","FormField","__unstable_headerActions","__unstable_presence","legend","ToggleButton","forwardedAs","ToggleIconBox","FormFieldSetLegend","collapsed","collapsible","onClick","getChildren","Content","$borderLeft","$focused","FormFieldSet","columns","onCollapse","onExpand","onFocus","hasValidationMarkers","handleToggle","t17","t18","t19","t20","t21","t22","t23","t24","FormFieldStatus","useDidUpdate","didUpdate","compare","shallowEquals","SANITY_PATCH_TYPE","setIfMissing","patchType","insert","unset","diffMatchPatch","inc","amount","dec","prefixPath","patch","createPatchChannel","_subscribers","msg","splice","PatchEvent","patches","prepend","append","prefixAll","FormCallbacksProvider","transformPatches","patchEvent","payload","onPathFocus","onPathBlur","path_1","onPathOpen","path_2","onSetPathCollapsed","path_3","collapsed_0","onSetFieldSetCollapsed","path_4","fieldGroupName","onFieldGroupSelect","useFormCallbacks","FormCallbacksContext","createProtoValue","isObjectSchemaType","isArraySchemaType","whatwgRNG","rnds8","Uint8Array","getRandomValues","getByteHexTable","table","randomKey","hasKey","ensureKey","getMemberTypeOfItem","itemTypeName","resolveTypeName","memberType","assign","resolveInitialArrayValues","resolver","mergeMap","itemPathSegment","ArrayOfObjectsItem","focusRef","renderAnnotation","renderBlock","renderField","renderInlineBlock","renderInput","renderPreview","resolveInitialValue","useResolveInitialValueForType","getFormValue","useGetFormValue","onCopy","useCopyPaste","hadFocus","onRemove","handleOpenItem","handleInsert","itemsWithKeys","focusItemKey","itemPath","shouldOpen","skipInitialValue","parentSchemaType","schemaTypeTitle","errorMessage","complete","handleCopy","documentValue","handleBlur","handleFocusChildPath","handleCollapse","handleExpand","handleCollapseField","handleExpandField","handleCloseField","handleOpenField","handleExpandFieldSet","fieldsetName","handleCollapseFieldSet","isEmptyValue","handleSelectFieldGroup","groupName","elementProps","inputProps","focusPath","members","onFieldClose","onFieldCollapse","onFieldSetCollapse","onFieldExpand","onFieldSetExpand","onFieldOpen","renderedInput","itemProps","onInsert","onBlur","PopoverCard","container","IncompatibleItemType","vertical","showDetails","setShowDetails","popoverRef","useClickOutsideEvent","handleShowDetails","typeName","MemberItemError","ArrayOfObjectsInputMember","ArrayOfObjectsInputMembers","getEmptyValue","resolveNativeNumberInputValue","localValue","isNumberSchemaType","ArrayOfPrimitivesItem","setLocalValue","handleNativeChange","inputValue","currentTarget","valueAsNumber","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","isBooleanSchemaType","checked","hasEmptyValue","isNaN","resolveNativeInputValue","placeholder","createProtoArrayValue","BEFORE","AFTER","arrayInsert","normalizedIdx","copy","hasOwn","prototype","call","move","arr","findTargetIndex","_arrayApply","applyPatch","_objectApply","clone","isObject","omit","OPERATIONS","currentValue","SUPPORTED_PATCH_TYPES","_primitiveApply","dmpPatch","applyPatches","parsePatch","allowExceedingIndices","_stringApply","applyAll","_applyPatch","DocumentFieldActionsProvider","useDocumentFieldActions","DocumentFieldActionsContext","accepts","file","acceptedFiles","acceptedFilesArray","fileName","mimeType","baseMimeType","validType","DEFAULT_CONCURRENCY","withMaxConcurrency","func","concurrency","throttler","createThrottler","observableFrom","currentSubscriptions","pendingObservables","ready$","scheduleAndWait","check","asObservable","first","obs","shift","MAX_CONCURRENT_UPLOADS","uploadSanityAsset","extract","metadata","preserveFilename","storeOriginalFilename","label","creditLine","hashFile","observableOf","fetchExisting","existing","assets","upload","uploadAsset","uploadImageAsset","uploadFileAsset","observeAssetDoc","documentPreviewStore","observePaths","_ref","observeImageAsset","observeFileAsset","fetch","readFile","reader","FileReader","onload","onerror","readAsArrayBuffer","abort","crypto","subtle","arrayBuffer","digest","hexFromBuffer","buffer","UPLOAD_STATUS_KEY","UNSET_UPLOAD_PATCH","createUploadEvent","CLEANUP_EVENT","createInitialUploadEvent","now","progress","createdAt","updatedAt","uploadFile","upload$","percent","rotated","rotate","radians","degrees","PI","translate","flip","canvas","getContext","scale","ORIENTATION_OPS","op","ORIENTATIONS","DEFAULT_ORIENTATION","THUMB_SIZE","_orient","orientationNumber","orientation","ratio","createElement","d","drawImage","orient","image","orientationId","toDataURL","readFileAsArrayBuffer","SKIP_EXIF_ERROR_RE","EXIF_BUFFER_LENGTH","readExif","buf","exif","loadImage","Image","rotateImage","createObjectURL","uploadImage","stage","setPreviewUrl$","exifData","UPLOAD_IMAGE","UPLOAD_FILE","UPLOAD_TEXT","uploaders","uploader","priority","resolveUploader","accept","ArrayOfObjectsField","uploadSubscriptions","valueRef","handleCollapseItem","itemKey","handleExpandItem","handleCloseItem","referenceItem","handleMoveItem","refItem","handleItemPrepend","handleItemAppend","handleRemoveItem","supportsImageUploads","directUploads","supportsFileUploads","defaultResolveUploader","handleUpload","uploadProgressEvent","onItemExpand","onItemCollapse","onItemClose","onItemOpen","onItemMove","onItemRemove","onItemAppend","onItemPrepend","onUpload","fieldProps","readAsText","encoding","insertAfter","isStringNumeric","convertToSchemaType","candidates","acceptsBooleans","acceptsNumbers","acceptsStrings","isStringSchemaType","createPlainTextUploader","itemTypes","textContent","lines","ArrayOfPrimitivesField","handleSetCollapsed","setValue","handleAppend","itemValue","handlePrepend","insertIndex","referenceIndex","handleFocusIndex","plainTextUploader","onSetCollapsed","onMoveItem","onIndexFocus","isMemberObject","isMemberArrayOfPrimitives","ofType","isPrimitiveSchemaType","isMemberArrayOfObjects","ObjectField","pendingValue","isShallowEmptyObject","PrimitiveField","validationError","MemberField","STATUS_TONES","SuffixBox","Alert","suffix","HeaderButton","ToggleArrow","ToggleArrowRightIcon","Header","IconBox","Details","openProp","TRUTHY_STRINGS","FALSEY_STRINGS","BOOL_STRINGS","TRUE","prop","toLocalDate","newDate","getTimezoneOffset","hours","getHours","setHours","getTZName","resolvedOptions","timeZone","converters","string","number","convert","boolean","richDate","isValidDate","local","toJSON","utc","timezone","date","datetime","SetMissingTypeButton","UnsetItemButton","validTypes","UntypedValueInput","schema","useSchema","isSingleValidType","isHoistedType","getConverters","actualType","CONVERTERS","converter","InvalidValueInput","handleClearClick","handleConvertTo","converted","ConvertButton","onConvert","DuplicateKeysAlert","duplicates","handleFixDuplicateKeys","MissingKeysAlert","handleFixMissingKeys","MixedArrayAlert","handleRemoveNonObjectValues","index_0","MemberFieldError","expectedSchemaType","resolvedValueType","MemberFieldSet","fieldSet","capitalize","fieldsetMember","ObjectInputMember","ObjectInputMembers","renderMembers","ObjectMembers","isObjectInputProps","isArrayInputProps","pass","hasAbsolutePath","FormInput","absolutePath","relativePath","nullRender","FormInputInner","destinationRenderAnnotation","destinationRenderBlock","destinationRenderField","destinationRenderInlineBlock","destinationRenderInput","destinationRenderItem","destinationRenderPreview","includeField","includeItem","blockProps","annotationProps","itemMember","fieldMember","fieldSetMember","usePortableTextMemberItem","PortableTextMemberItemsContext","usePortableTextMemberItems","usePortableTextMemberItemsFromProps","portableTextMemberItemsRef","childrenField","f","markDefArrayMember","existingItem","_elementProps","renderInputProps","_onPathFocus","fullPath","_onChangeDisableRemoveSelf","objectFormRenderInputProps","_renderInput","pathFor","span","$toneKey","selectable","purple","TooltipBox","POPOVER_FALLBACK_PLACEMENTS","AnnotationToolbarPopover","annotationOpen","annotationTextSelected","floatingBoundary","onOpenAnnotation","onRemoveAnnotation","referenceBoundary","referenceElement","popoverOpen","setPopoverOpen","cursorRect","setCursorRect","rangeRef","editButtonRef","deleteButtonRef","focusTrappedRef","popoverScheme","editor","usePortableTextEditor","cursorElement","PortableTextEditor","handleClosePopover","contentEditable","useGlobalKeyDown","sel","getSelection","rangeCount","range","getRangeAt","commonAncestorContainer","handleSelectionChange","handleEditButtonClicked","handleRemoveButtonClicked","sel_0","EditIcon","TrashIcon","Annotation","editorNodeFocused","setElementRef","Markers","markDefPath","spanElement","setSpanElement","memberItem","blur","removeAnnotation","markersToolTip","rootPresence","p","isOpen","nodePath","componentProps","__unstable_floatingBoundary","__unstable_referenceBoundary","__unstable_referenceElement","__unstable_textElementFocus","schemaTypes","block","DefaultAnnotationComponent","textElement","CustomComponent","setRef","elm","elementRef","debugRender","isLink","hasMarkers","isReady","toneKey","i18nTitleKey","useReferenceInputOptions","ReferenceInputOptionsContext","ReferenceInputOptionsProvider","activePath","EditReferenceLinkComponent","onEditReference","initialValueTemplateItems","disableNew","useReviewChanges","reviewChanges","ReviewChangesContext","DocumentIdProvider","useGivenDocumentId","DocumentIdContext","usePublishedId","usePerspective","PerspectiveContext","useScrollIntoViewOnFocusWithin","hasFocusWithin","scrollMode","AddedVersion","defineEvent","CreatedRelease","DeletedRelease","PublishedRelease","ScheduledRelease","UnscheduledRelease","ArchivedRelease","UnarchivedRelease","RevertRelease","RELEASES_STUDIO_CLIENT_OPTIONS","isReleasePerspective","swr","maxSize","useDocumentVersions","useDocumentPreviewStore","unstable_observeDocumentIdSet","documentIds","RELEASE_DOCUMENT_TYPE","RELEASE_DOCUMENTS_PATH","PATH_ID_PREFIX","getReleaseIdFromReleaseDocumentId","releaseDocumentId","sortReleases","releases","releaseType","_createdAt","aPublishAt","publishAt","intendedPublishAt","bPublishAt","getReleasesPerspectiveStack","selectedPerspectiveName","excludedPerspectives","release","selectedIndex","LATEST","DEFAULT_RELEASE_TYPE","ARCHIVED_RELEASE_STATES","RELEASE_TYPES_TONES","asap","scheduled","undecided","getFetchQuery","releaseIds","getSafeKey","replaceAll","subquery","accSubquery","projection","accProjection","releaseId","bundleId","safeId","createReleaseMetadataAggregator","aggregatorFetch$","isInitialLoad","queryAllDocumentsInReleases","projectionToBundleMetadata","fetchData$","releaseDocumentIdResponse","documentCount","iif","aggregatorListener$","accQuery","includeResult","includeAllVersions","visibility","events","bufferTime","entriesArray","mutatedReleaseIds","accReleaseIds","createReleasesSet","releasesReducer","releasesById","SORT_FIELD","SORT_ORDER","QUERY_FILTER","QUERY_PROJECTION","QUERY_SORT_ORDER","QUERY","INITIAL_STATE","createReleaseStore","dispatch$","fetchPending$","BehaviorSubject","dispatch","listFetch$","concatWith","listenQuery","errorCount$","releaseStoreErrorCount","getMetadataStateForSlugs$","useReleasesStore","resourceCache","useResourceCache","useWorkspace","previewStore","studioClient","releaseStore","dependencies","useActiveReleases","releasesAsArray","orderedReleaseTypes","useDocumentVersionTypeSortedList","documentVersions","sortedDocumentList","releasesList","compareReleasesList","releaseTypes","isReleaseType","maybeReleaseType","isReleaseDocument","createBundleId","customAlphabet","createReleaseId","getPublishDateFromRelease","dateString","publishedAt","formatRelativeLocalePublishDate","publishDate","isPublishedPerspective","isDraftPerspective","isReleaseScheduledOrScheduling","getReleaseDefaults","isNotArchivedRelease","useIsReleaseActive","selectedPerspective","useOnlyHasVersions","useSetPerspective","router","useRouter","navigate","stickyParams","useReleasesUpsell","ReleasesUpsellContext","FALLBACK_CONTEXT_VALUE","upsellDialogOpen","onReleaseLimitReached","guardWithReleaseLimitUpsell","telemetryLogs","dialogSecondaryClicked","dialogPrimaryClicked","panelViewed","panelDismissed","panelPrimaryClicked","panelSecondaryClicked","prepareVersionReferences","isReference","isStrengthenOnPublish","_strengthenOnPublish","isSchemaMandatedWeakReference","weak","isErrorWithDetails","details","isReleaseLimitError","METADATA_PROPERTY_NAME","createReleaseOperationsStore","requestAction","createRequestAction","handleCreateRelease","actionType","handleUpdateRelease","unsetKeys","handlePublishRelease","handleScheduleRelease","handleUnscheduleRelease","handleArchiveRelease","handleUnarchiveRelease","handleDeleteRelease","handleCreateVersion","getDocument","versionDocument","archive","unarchive","schedule","unschedule","createRelease","updateRelease","publishRelease","deleteRelease","revertRelease","revertReleaseId","releaseDocuments","releaseMetadata","revertType","Promise","allSettled","createVersion","discardVersion","handleDiscardVersion","purge","unpublishVersion","dryRun","limit","useReleaseOperations","useVersionOperations","telemetry","useTelemetry","setPerspective","log","documentOrigin","releaseId_0","documentId_0","documentId_1","handleUnpublishVersion","releasesLocaleNamespace","releasesUsEnglishLocaleBundle","DiscardVersionDialog","fromPerspective","coreT","discardChanges","useDocumentOperation","isDiscarding","setIsDiscarding","discardType","releaseName","execute","releaseTitle","cancelButton","confirmButton","Preview","alternativeName","mainCities","rawOffsetInMinutes","currentTimeOffsetInMinutes","useCurrentOffset","getOffsetString","padStart","offsetInMinutes","absOffsetInMinutes","minutes","durationInHoursMinutes","ianaRegex","typeToPos","year","month","day","hour","minute","second","isValidIanaSpecifier","s","hackyOffset","dtf","formatted","parsed","exec","fMonth","fDay","fYear","fHour","fMinute","fSecond","partsOffset","formatToParts","filled","pos","parseInt","makeDTF","zone","hourCycle","objToLocalTS","UTC","millisecond","setUTCFullYear","getUTCFullYear","getZoneOffset","timeZoneName","asUTC","asTS","over","getTimeZones","rawTimeZones","currentOffset","timeZoneWithCurrentTimeData","currentTimeFormat","formatTimeZone","compareNumbers","compareStrings","tzIntlTimeZoneName","getDTF","partsTimeZone","hackyTimeZone","tzNameMatch","substr","code","tzTokenizeDate","getDateTimeFormat","RangeError","NaN","dtfCache","testDateFormatted","hourCycleSupported","hour12","newDateUTC","fullYear","utcDate","setUTCHours","MILLISECONDS_IN_HOUR","MILLISECONDS_IN_MINUTE","patterns","timezoneZ","timezoneHH","timezoneHHMM","tzParseTimezone","timezoneString","isUtcDate","absoluteOffset","validateTimezone","isValidTimezoneIANAString","toUtcDate","calcOffset","fixedOffset","fixOffset","getFullYear","getMonth","getDate","getMinutes","getSeconds","getMilliseconds","localTS","utcGuess","o2","o3","validIANATimezoneCache","timeZoneString","X","localize","timezoneOffset","getTimeZoneOffset","formatTimezoneWithOptionalMinutes","formatTimezone","O","formatTimezoneShort","z","originalDate","timeZoneOffset","addLeadingZeros","targetLength","sign","output","dirtyDelimeter","delimeter","absOffset","dirtyDelimiter","delimiter","tzPattern","DEFAULT_ADDITIONAL_DIGITS","dateTimePattern","datePattern","YY","YYY","YYYY","YYYYY","MM","DDD","MMDD","Www","WwwD","HH","HHMM","HHMMSS","toDate","argument","dirtyOptions","arguments","TypeError","additionalDigits","toInteger","dateStrings","splitDateString","parseYearResult","parseYear","restDateString","parseDate","timestamp","parseTime","getTimezoneOffsetInMilliseconds","parts","timeString","patternYYY","patternYYYYY","yearString","centuryString","week","validateDate","dayOfYear","validateDayOfYearDate","validateWeekDate","dayOfISOWeekYear","dayOfWeek","parseFloat","validateTime","seconds","isoWeekYear","fourthOfJanuaryDay","getUTCDay","setUTCDate","getUTCDate","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP_YEAR","isLeapYearIndex","isLeapYear","tzFormattingTokensRegExp","dirtyDate","dirtyFormatStr","formatStr","matches","precededByQuotedSection","replaced","substring","dateFnsFormat","utcToZonedTime","offsetMilliseconds","resultDate","setFullYear","getUTCMonth","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","formatInTimeZone","extendedOptions","cloneObject","zonedTimeToUtc","ToastDescription","LOCAL_STORAGE_TZ_KEY","SCHEDULE_ACTION_DICTIONARY","actionName","badgeColor","badgeTone","unpublish","SCHEDULE_STATE_DICTIONARY","succeeded","cancelled","SCHEDULE_FILTERS","TOOL_HEADER_HEIGHT","DOCUMENT_HAS_WARNINGS_TEXT","DOCUMENT_HAS_ERRORS_TEXT","SCHEDULE_FAILED_TEXT","FORBIDDEN_RESPONSE_TEXT","DATE_FORMAT","SMALL","MEDIUM","LARGE","DEFAULT_SCHEDULED_PUBLISH_PLUGIN_OPTIONS","inputDateTimeFormat","showReleasesBanner","SCHEDULED_PUBLISHING_TOOL_NAME","TOOL_TITLE","RELEASES_DOCS_URL","rootName","debug","debugWithName","isClientError","getErrorMessage","TimeZoneEvents","allTimeZones","tz","abbreviation","namePretty","getLocalTimeZone","getStoredTimeZone","storedTimeZone","useTimeZone","setTimeZone","formatDateTz","includeTimeZone","prefix","dateFormat","getCurrentZoneDate","handleNewValue","prevTz","dispatchEvent","Event","utcToCurrentZoneDate","zoneDateToUtc","ReleaseAvatarIcon","ReleaseAvatar","borderRadius","TimeZoneAlternativeNameSpan","TimeZoneMainCitiesSpan","default","DialogTimeZone","selectedTz","setSelectedTz","handleTimeZoneChange","handleTimeZoneSelectLocal","handleTimeZoneUpdate","isDirty","isLocalTzSelected","renderOption","renderValue","cursor","boundaryElement","SearchIcon","option","_value","option_0","useDialogVisible","dialogVisible","setDialogVisible","hide","show","useDialogTimeZone","dialogProps","dialogTimeZoneShow","LazyTextInput","onKeyPress","setInputValue","checkEvent","e_0","handleKeyPress","TextInput","TimeInput","CalendarDay","isCurrentMonth","isToday","isPastDisabled","toDateString","isPast","textAlign","DEFAULT_MONTH_NAMES","DEFAULT_WEEK_DAY_NAMES","ARROW_KEYS","TAIL_WEEKDAYS","getWeekStartsOfMonth","weekStartsOn","startOfMonth","eachWeekOfInterval","lastDayOfMonth","getWeekDaysFromWeekStarts","weekStarts","weekStart","addDays","useWeeksOfMonth","days","getWeek","CalendarMonth","weekStartDay","weekDayNames","gridTemplateColumns","weekIdx","dayIdx","isSameDay","isSameMonth","weekday","features","dayPresets","timePresets","YearInput","numericValue","MONTH_PICKER_VARIANT","carousel","PRESERVE_FOCUS_ELEMENT","outline","CALENDAR_ICON_BUTTON_PROPS","Calendar","selectTime","onFocusedDateChange","selectedDate","focusedDate","timeStep","labels","monthPickerVariant","showTimezone","setFocusedDate","setFocusedDateMonth","setDate","setMonth","handleFocusedMonthChange","moveFocusedDate","by","addMonths","setFocusedDateYear","setYear","handleDateChange","setMinutes","handleTimeChange","mins","handleTimeChangeInputChange","focusCurrentWeekDay","hasAttribute","monthPicker","borderBottom","monthNames","ChevronLeftIcon","ChevronRightIcon","CalendarMonthSelect","CalendarYearSelect","goToNextYear","goToPreviousYear","handleNowClick","weekDayNamesShort","borderTop","setToCurrentTime","EarthGlobeIcon","monthName","handlePrevYearClick","handleNextYearClick","DatePicker","calendarLabels","setFocusedDay","nextDate","DateTimeInput","disableInput","onInputChange","buttonRef","setReferenceElement","isPickerOpen","setPickerOpen","select","handleDeactivation","handleKeyUp","isDateInPastWarningShown","CalendarIcon","tooltipText","DEFAULT_PLACEHOLDER_TIME","CommonDateTimeInput","deserialize","formatInputValue","parseInputValue","serialize","nextInputValue","handleDatePickerInputChange","handleDatePickerChange","parseResult","example","valueOf","getCalendarLabels","goToTomorrow","goToToday","goToYesterday","goToNextMonth","goToPreviousMonth","setToTimePreset","DEFAULT_DATE_FORMAT","DateInput","parseOptions","timeFormat","DEFAULT_TIME_FORMAT","isoString","deserialized","enforceTimeStep","parseISO","leftOver","date_0","inputDateFormat","ScheduleDatePicker","T0","T1","T2","timezoneAdjustedValue","handlePublishAtCalendarChange","parsedDate","handlePublishAtInputChange","MAX_DESCRIPTION_HEIGHT","TitleInput","font","bold","lineHeight","DescriptionTextArea","textarea","regular","getIsReleaseOpen","TitleDescriptionForm","isReleaseOpen","descriptionRef","setScrollHeight","handleTitleChange","handleDescriptionChange","shouldShowDescription","maxHeight","ReleaseForm","currentTimezone","setCurrentTimezone","buttonReleaseType","setButtonReleaseType","setIntendedPublishAt","handleBundlePublishAtCalendarChange","pickedReleaseType","startOfHour","addHours","handleButtonReleaseTypeChange","updatedRelease","handleTitleDescriptionChange","currentZoneDate","menuButtonId","menuButton","setMenuButton","maxWidth","Button","matchReferenceWidth","t25","t26","MenuItem","t27","t28","t29","t30","t31","t32","ReleaseTypeOption","getUpdatedSnapshot","bufferedDocument","LOCAL","HEAD","_rev","_updatedAt","toSnapshotEvent","createObservableBufferedDocument","listenerEvent$","actions$","consistency$","mutations$","rebase$","remoteMutations","commitRequests","createInitialBufferedDocument","initialSnapshot","BufferedDocument","onMutation","mutation","remote","mutations","onRemoteMutation","transactionId","effects","onRebase","edge","nextRemoteMutations","localMutations","onConsistencyChanged","isConsistent","commitHandler","commitArg","currentBufferedDocument$","listenerEvent","commit","publishReplay","snapshotAfterSync$","ev","withLatestFrom","mutationEvent","arrive","Mutation","actionHandler$","share","emitAction","addMutations","addMutation","snapshot$","remoteSnapshot$","updates$","commitRequest$","prepare","createBufferedDocument","prepareDoc","DELETE","createIfNotExists","createOrReplace","mutate","shareReplayLatest","configOrPredicate","_shareReplayLatest","predicate","latest","emitted","shareConfig","wrapped","finalize","emitLatest","createDebug","discardChainTo","chain","revision","revisionIndex","resultRev","toOrderedChains","parents","other","previousRev","orphan","headRev","sortedList","DEFAULT_MAX_BUFFER_SIZE","DEFAULT_DEADLINE_MS","sequentializeListenerEvents","resolveChainDeadline","maxBufferSize","emitEvents","orderedChains","discarded","applicableChains","_nextBuffer","partition","nextBuffer","flat","lastMutation","at","transition","__sanity_debug_maxBufferSize","MaxBufferExceededError","deadline","__sanity_debug_resolveChainDeadline","DeadlineExceededError","OutOfSyncError","PENDING_START","phase","PENDING_END","isMutationEvent","isMultiTransactionEvent","transactionTotalEvents","allPendingTransactionEventsReceived","listenerEvents","groupedMutations","getPairListener","idPair","pairEvents$","ids","effectFormat","concatMap","fetchInitialDocumentSnapshots","createSnapshotEvent","isBuffering","isMulti","draftEvents$","publishedEvents$","versionEvents$","caught$","onSyncErrorRecovery","getDocuments","ACTIONS_API_MINIMUM_VERSION","actionsApiClient","operationsApiClient","FETCH_SHARD_TIMEOUT","isMutationEventForDocId","setVersion","requireId","isLiveEditMutation","mutationParams","mut","mutationPayloads","toActions","attributes","ifExists","commitActions","commitMutations","dataRequest","returnDocuments","skipCrossDatasetReferenceValidation","submitCommitRequest","serverActionsEnabled","cancel","failure","success","checkoutPair","onReportLatency","listenerEvents$","reconnect$","transactionsPendingEvents$","commits$","commitRequest","canUseServerActions","combinedEvents","reportLatency","shardInfo","getUrl","getDataUrl","signal","AbortSignal","timeout","headers","submittedMutations","receivedMutations","matchingIndex","pending","matching","submitEvent","receiveEvent","submittedAt","receivedAt","deltaMs","toSpliced","shard","latencyMs","fn","keyGen","MEMO","memoizedFn","memoizeKeyGen","LISTENER_RESET_DELAY","memoizedPair","_typeName","pairListenerOptions","ReplaySubject","resetOnComplete","resetOnRefCountZero","isSnapshotEvent","withSnapshots","snapshots$","snapshotPair","isLiveEditEnabled","liveEdit","LOCKED","NOT_LOCKED","editState","liveEditSchemaType","extraOptions","combineLatest","draftSnapshot","publishedSnapshot","transactionSyncLock","versionSnapshot","ready","consistencyStatus","draftIsConsistent","publishedIsConsistent","operationArgs","snapshots","del","tx","transaction","omitProps","getDocumentToDuplicateId","dupeId","duplicate","initialDocument","strengthenOnPublish","ifRevisionID","restore","historyStore","fromRevision","includeDrafts","patchMutation","ensureVersion","ensureDraft","ifPublishedRevisionId","fromDeleted","useServerDocumentActions","maybeObservable","operationImpls","serverOperationImpls","serverDel","serverRestore","operationName","operationArguments","extraArgs","operation","last","operationCalls$","emitOperation","REQUIRES_CONSISTENCY","operationEvents","result$","groups$","requiresConsistency","isConsistent$","autoCommit$","throttleTime","asyncScheduler","leading","SLOW","remoteSnapshots","segmentType","convertToValidationMarker","validatorResult","normalizedPaths","paths","escapeRegex","localizeMessage","en","isLocalizedMessages","deepEqualsIgnoreKey","RegExp","_toString","builtIns","Function","isBuiltIn","_constructor","typeString","stringType","constructorType","SLOW_VALIDATOR_TIMEOUT","formatValidationErrors","results","formatParams","genericValidators","expectedType","expected","all","validate","either","resolved","valid","allowedValues","actual","valueType","strValue","hint","custom","slowTimer","setTimeout","environment","clearTimeout","arrayValidators","minLength","isArrayOfBlocksSchemaType","wantedLength","flag","sharedMessage","unique","_unused","dupeIndices","itemA","itemB","booleanValidators","isoDate","getFormattedDate","legacyDateFormat","throwOnError","isInvalid","dateValidators","minDate","dateVal","minDateVal","dateTimeOptions","providedMinDate","maxDate","maxDateVal","providedMaxDate","precisionRx","numberValidators","integer","isInteger","precision","places","minNumber","maxNumber","greaterThan","lessThan","metaKeys","objectValidators","reference","getDocumentExists","assetRequired","DUMMY_ORIGIN","isRelativeUrl","emailRegex","stringValidators","constraints","allowCredentials","relativeOnly","allowRelative","username","password","urlScheme","protocol","stringCasing","casing","toLocaleUpperCase","toLocaleLowerCase","regex","pattern","invert","regName","email","typeValidators","getBaseType","isFieldRef","constraint","Rule","FIELD_REF","ruleConstraintTypes","object","valueOfField","_level","_required","_typeDef","_message","_rules","_fieldRules","typeDef","reset","_mergeRequired","bind","rule","isRequired","cloneDeep","cloneWithRules","rules","newRules","disallowDuplicate","isDuplicate","newRule","optional","required","bypassConcurrencyLimit","positive","negative","uppercase","lowercase","optsScheme","schemes","customValidationConcurrencyLimiter","valueIsEmpty","validators","validator","forType","specConstraint","customValidator","memoizedWarnOnArraySlug","warnOnArraySlug","serializePath","part","isIndex","isKey","defaultIsUnique","slug","schemaOptions","disableArrayWarning","docType","atPath","serializedPath","slugValidator","isSlug","isUnique","slugContext","isRuleConstraint","getTypeChain","visited","baseRuleReducer","inputRule","baseRule","typeOptionsList","extractValueFromListOption","hasValueField","normalizeValidationRules","RuleClass","inferFromSchemaType","traverse","annotations","inferFromSchema","typeNames","getTypeNames","shouldEscape","fallbackLocales","getFallbackLocaleSource","getFallbackI18nInstance","init","loadNamespaces","staticResources","staticBundles","createInstance","defaultNS","initImmediate","partialBundledLanguages","fallbackLng","supportedLngs","escapeValue","BUFFER_TIME","MAX_BUFFER_SIZE","MAX_REQUEST_CONCURRENCY","createBatchedGetDocumentExists","id$","limiter","ConcurrencyLimiter","existence$","json","excludeContent","availability","omittedIds","omitted","exists","firstValueFrom","requestIdleCallbackShim","didTimeout","timeRemaining","cancelIdleCallbackShim","handle","win","requestIdleCallback","cancelIdleCallback","unknownFieldsValidator","fieldNames","unknownField","DEFAULT_MAX_FETCH_CONCURRENCY","DEFAULT_MAX_CUSTOM_VALIDATION_CONCURRENCY","_limitConcurrency","getConcurrencyLimiter","maxConcurrency","createClientConcurrencyLimiter","maybeRecord","resolveTypeForArrayItem","itemType","isTypedObject","primitive","validateDocument","maxFetchConcurrency","limitConcurrency","lastValueFrom","validateDocumentObservable","clientOptions","customValidationConcurrencyLimiters","WeakMap","maxCustomValidationConcurrency","validationOptions","validateItemObservable","restOfContext","addUnknownFieldsValidator","selfChecks","nestedChecks","selfIsRequired","fieldTypes","fieldResults","fieldType","subRule","nestedValue","validateNode","idle","mergeAll","toArray","INITIAL_VALIDATION_STATUS","isValidating","findReferenceIds","reduceJSON","isGlobalDocumentReference","EMPTY_VALIDATION","listenDocumentExists","observeDocumentAvailability","available","REF_UPDATE_DELAY","shareLatestWithRefCount","bufferSize","validateDocumentWithReferences","document$","referenceIds$","versionId$","referenceExistence$","duration","distinct","observeDocumentPairAvailability","referenceExistence","referenceDocumentUpdates$","skip","exhaustMapWithTrailing","validationMarkers","DOC_UPDATE_DELAY","documentEvents","createOperationGuard","opName","GUARDED","createEmitter","executeArgs","wrap","createOperationsAPI","operationsAPI","serverDiscardChanges","serverPatch","serverPublish","serverUnpublish","editOperations","operationEvents$","operations$","deepAssign","sourceVal","targetVal","ALLOWED_REF_PROPS","REQUIRED_TEMPLATE_PROPS","templateId","template","quote","validateTemplates","templates","idMap","missing","parameters","param","j","validateParameter","dupeIndex","dupe","validateInitialObjectValue","contextError","validateValue","parentIsArray","validateReference","parameter","disallowed","plural","isBuilder","resolveValue","initialValueOpt","useCache","cached","schemaTypeName","resolvedValue","resolveInitialValueForType","DEFAULT_MAX_RECURSION_DEPTH","getItemType","arrayType","memoizeResolveInitialValueForType","resolveInitialValueForTypeCache","stableStringify","hashParameters","schemaName","maxDepth","typeCache","cachedResult","resolve","postTask","resolveInitialObjectValue","resolveInitialArrayValue","initialArray","initialItem","initialObject","fieldValues","initialFieldValue","merged","isDeepEmpty","scheduler","maybeSerialize","prepareTemplates","initialValueTemplates","serialized","defaultTemplateForType","defaultTemplatesForSchema","LOADING_MSG","getInitialValueStream","draft$","published$","debounceTime","templateName","isResolving","initialValueWithParams$","templateParams","resolveError","groupEnd","filterResponse","isWelcomeEvent","fetchQuery","listenerQuery","welcome$","mutationAndReconnect$","isRelevantEvent","transitions","doFetch","resolveTypeForDocument","specifiedType","getIdPairFromPublished","createDocumentStore","unstable_observeDocumentPairAvailability","listenQueryOptions","isLoaded","useDocumentType","documentStore","useDocumentStore","isResolved","SYNC_RESOLVED_STATE","resolvedState","setDocumentType","sub","useDocumentValues","useUserViaUserStore","getUser","useUserStore","useCurrentUser","useInitialValue","templateParamsRaw","useInitialValueResolverContext","initialValueOptions","useProjectId","useDataset","initialValueContext","CACHE","REFRESH_INTERVAL","RESET_TIMER","createFeatureToggle","mapResponse","with","satisfies","SANITY_VERSION","compatibleStudioVersions","includePrerelease","fetchFeatureToggle","getSchemaType","getPairPermissions","grantsStore","permission","effectiveVersion","effectiveVersionType","checkDocumentPermission","getDocumentPairPermissions","granted","pairPermissions","permissionResults","permissionResult","useDocumentPairPermissionsFromHookFactory","useDocumentPairPermissions","overrideClient","overrideSchema","overrideGrantsStore","defaultClient","defaultSchema","defaultGrantsStore","useGrantsStore","__internal_serverDocumentActions","configFlag","INITIAL_LOADING_STATE","fetchFeatures","cachedFeatureRequest","useFeatureEnabled","featureKey","features_0","createMultiKeyWeakMap","rootMap","idCache","randomId","random","assignId","cachedId","arrangeKeys","getDeep","firstKey","restOfKeys","setDeep","ResourceCacheProvider","nullReplacer","emptyDependenciesReplacer","removeNullDependencies","dep","dependencies_0","dependenciesWithoutNull","namespace_0","dependencies_1","namespaceMap_0","dependenciesWithoutNull_0","namespaceMap","ResourceCacheContext","isReleasePermissionError","createReleasePermissionsStore","isContentReleasesEnabled","permissions","checkWithPermissionGuard","RELEASE_PERMISSIONS_RESOURCE_CACHE_NAMESPACE","useReleasePermissions","contentReleasesFeature","releasePermissionsStore","getReleaseTone","VersionContextMenuItem","isScheduled","ReleasesList","VersionContextMenu","releasesLoading","fromRelease","isVersion","onDiscard","onCreateRelease","onCreateVersion","locked","isPublished","optionsReleaseList","hasCreatePermission","setHasCreatePermission","isPermissionsLoading","hasDiscardPermission","isMounted","hasPermission","Menu","textDecoration","MenuGroup","CopyIcon","release_0","AddIcon","useCreateReleaseMetadata","getIsScheduledDateInPast","CopyToNewReleaseDialog","tRelease","createReleaseMetadata","newReleaseId","setRelease","isSubmitting","setIsSubmitting","setRerenderDialog","displayTitle","isScheduledDateInPast","handleOnChange","handleAddVersion","cur","releaseValue","whiteSpace","textOverflow","ChipButtonContainer","ChipButton","VersionChip","contextValues","menuReleaseId","contextMenuDisabled","contextMenuPoint","setContextMenuPoint","isDiscardDialogOpen","setIsDiscardDialogOpen","isCreateReleaseDialogOpen","setIsCreateReleaseDialogOpen","chipRef","inline","docId","close","clientX","clientY","handleContextMenu","openDiscardDialog","openCreateReleaseDialog","targetRelease","contextMenuHandler","StyledVersionInlineBadge","$tone","VersionInlineBadge","getVersionInlineBadge","useAllReleases","useArchivedReleases","archivedReleases","getJsonStream","Authorization","credentials","getStream","ReadableStream","controller","getReader","decoder","TextDecoder","read","processResult","done","enqueue","decode","stream","useReleaseHistory","releaseDocumentsIds","setHistory","queryParams","versionIds","transactionsUrl","fetchAndParseAll","transactions","collaborators","documentsHistory","documentIDs","documentHistory","createdBy","editors","lastEditedBy","WorkspaceProvider","WorkspaceContext","SourceProvider","parentSource","SourceContext","unstable_sources","sources","source_0","getReleaseDocumentIdFromReleaseId","INITIAL_VALUE","nextCursor","noDupes","addEventData","getReleaseActivityEvents","refetchEventsTrigger$","fetchEvents","reloadEvents","loadMore","lastCursorUsed","getValue","getTransactionsLogs","clientConfig","includeIdentifiedDocumentsOnly","omitRev","applyMendozaPatch","baseRev","applyMutationEventEffects","apply","buildReleaseEditEvents","releaseEditEvents","currentDocument","effect","before","revert","intendedPublishDate","TRANSLOG_ENTRY_LIMIT","documentTransactionsCache","newTransactions","oldTransactions","seen","getReleaseTransactions","toTransaction","cacheKey","cachedTransactions","fetchLogs","fromTransaction","expand","allTransactions","batch","editEvents","getReleaseEditEvents","observeDocument$","isCreateReleaseEvent","isScheduleReleaseEvent","isPublishReleaseEvent","isArchiveReleaseEvent","isUnarchiveReleaseEvent","isAddDocumentToReleaseEvent","isDiscardDocumentFromReleaseEvent","isEditReleaseEvent","isTranslogEvent","isEventsAPIEvent","EVENTS_INITIAL_VALUE","hasMore","notEnabledActivityEvents","getReleaseEvents","releasesState$","eventsAPIEnabled","unstable_observeDocument","editEvents$","releaseRev$","activityEvents","groqFilter","documentsCount$","sideEffects$","activity","edit","creationEvent","deduplicateEvents","nextEvent","areTheSameDate","date1","date2","time1","time2","useReleaseEvents","beta","eventsAPI","releaseEvents","Resizer","onResizeStart","mouseXRef","pageX","handleMouseMove","handleMouseUp","handleMouseDown","Resizable","initialWidth","resizerPosition","elementWidthRef","targetWidth","setTargetWidth","handleResizeStart","deltaX","handleResize","FIVE_SECONDS","TWENTY_SECONDS","ONE_MINUTE","ONE_HOUR","NO_YEAR_DATE_ONLY_FORMAT","DATE_ONLY_FORMAT","FULL_DATE_FORMAT","useRelativeTime","updateNow","useFormatRelativeTime","relativeTo","refreshInterval","timerId","tick","interval","minimal","useTemporalPhrase","formatWithUnit","unit","isNextOrPrevDay","isNextOrPrevWeek","numeric","unitDisplay","diffMonths","differenceInMonths","diffYears","differenceInYears","diffWeeks","differenceInWeeks","diffDays","differenceInDays","bb1","diffHours","differenceInHours","bb2","diffMins","differenceInMinutes","bb3","diffSeconds","differenceInSeconds","bb4","RelativeTime","timeAgo","useDateTimeFormat","FIELDS_TO_GROUP","groupChanges","changes","groupedChanges","lastChangeProcessed","lastChangeDate","changeDate","GROUP_TIME","trackFieldChanges","newestDocument","fieldsToTrack","previousDocument","changesSortedByTimestamp","createdByUserIndex","API_VERSION","TASK_STATUS","useActivityLog","task","setChanges","newestTaskDocument","parsedChanges","fetchAndParse","rev","handleFetchAndParse","useEffectEvent","useDocumentPreviewValues","previewStateObservable","getPreviewStateObservable","previewState","documentTitle","useTaskOperations","createAddonDataset","useAddonDataset","handleCreate","authorId","newCreatedClient","handleEdit","handleRemove","useRemoveTask","onError","onRemoved","removeStatus","setRemoveStatus","showDialog","setShowDialog","operations","handleOpenDialog","handleCloseDialog","_previewComponents","BlockPreview","blockImage","BlockImagePreview","compact","CompactPreview","DefaultPreview","detail","DetailPreview","InlinePreview","MediaPreview","FallbackIcon","SanityDefaultPreview","Icon","layout","mediaProp","tooltip","imageUrlBuilder","imageBuilder","dimensions","fit","dpr","renderMedia","renderIcon","isValidElementType","isImageSource","previewProps","LayoutComponent","fallback","useDocumentPresence","mounted","mount","startTransition","presenceStore","usePresenceStore","documentPresence","isArchivedRelease","releaseState","ReleaseDocumentPreview","documentTypeName","previewValues","documentRevision","inspect","historyEvent","historyVersion","archivedRelease","intentParams","linkProps","LinkComponent","previewPresence","ACTIVITY_TEXT_118N","addDocumentToRelease","archiveRelease","discardDocumentFromRelease","scheduleRelease","unarchiveRelease","unscheduleRelease","editRelease","ReleaseEventDocumentPreview","ScheduleTarget","dateStyle","timeStyle","formattedDate","FadeInCard","motion","ReleaseActivityListItem","opacity","bounce","prevProps","nextProps","VirtualContainer","ReleaseActivityList","virtualizerContainerRef","listEvents","lastEventFromEventsAPI","lastEventDate","paddingEnd","virtualItems","isLoaderRow","MotionFlex","FillHeight","ReleaseDashboardActivityPanel","tCore","ToneIcon","TextWithToneStyle","TextWithTone","dimmed","projectSubscriptions","fetchProjectSubscriptions","cachedProjectSubscriptionsRequest","useProjectSubscriptions","projectSubscriptions$","cachedSubscriptions","ReleaseDetailsEditor","setTimer","hasUpdatePermission","setHasUpdatePermission","changedValue","newTimer","useReleaseTime","localeTimeZoneAbbreviation","getTimezoneAbbreviation","ReleaseTime","getReleaseTime","dateInputFormat","ReleaseTypePicker","inputRef","datePickerRef","setReleaseType","isUpdating","setIsUpdating","isIntendedScheduleDateInPast","setIsIntendedScheduleDateInPast","isBefore","updatedDate","intendedPublishAtTimezoneAdjusted","dialog","newRelease","finally","isPublishDateInPast","isReleaseScheduled","publishDateLabel","nextPublishAt","startOfMinute","cleanDate","handleOnPickerClick","PopoverContent","releaseTypeIcon","labelContent","ReleaseDashboardDetails","selectedReleaseId","retentionDays","featureTypes","retention","maxRetentionDays","isSelected","isAtTimeRelease","isActive","shouldDisplayError","shouldDisplayPermissionWarning","setShouldDisplayPermissionWarning","shouldDisplayWarnings","hasPermission_0","handlePinRelease","PinFilledIcon","PinIcon","ErrorOutlineIcon","WarningOutlineIcon","Container","ReleasePublishAllButton","isMenuItem","onConfirmDialogOpen","onConfirmDialogClose","publishBundleStatus","setPublishBundleStatus","publishPermission","setPublishPermission","isValidatingDocuments","hasDocumentValidationErrors","isPublishButtonDisabled","handleConfirmPublishAll","publishingError","confirmPublishDialog","releaseDocumentsLength","publishTooltipContent","handleInitialPublish","sharedProps","PublishIcon","handleOnClick","isErrorAtLimits","fetchReleaseLimits","storeOrigin","RELEASE_LIMITS_RESOURCE_CACHE_NAMESPACE","createReleaseLimitsStore","releaseLimits$","defaultOrgActiveReleaseLimit","datasetReleaseLimit","orgActiveReleaseLimit","useReleaseLimits","releaseLimitsStore","useIsReleasesPlus","isReleasesFeatureEnabled","releaseLimit","useDocumentRevertStates","observableClient","resultPromiseRef","resolvedDocumentRevertStatesPromiseRef","resolvedDocumentRevertStatesResultRef","promise","withResolvers","publishedDocuments","getDocumentTransaction","document_1","revisionId","docRevisionPairs","forkJoin","docId_0","publishedDocumentExists","unpublishDocument","document_2","_system","_temp6","documentRevertStatesResult","document_0","revertDocument","err_0","usePostPublishTransactions","ConfirmReleaseDialog","revertReleaseStatus","setRevertReleaseStatus","hasPostPublishTransactions","getDocumentRevertStates","stageNewRevertRelease","setStageNewRevertRelease","navigateToRevertRelease","handleRevertRelease","documentRevertStates","Link","marginBottom","revertError","Checkbox","ReleaseRevertButton","isPendingGuardResponse","setIsPendingGuardResponse","handleMoveToConfirmStatus","isReleasesPlus","hasPermissions","RestoreIcon","ReleaseScheduleButton","schedulePermission","setSchedulePermission","setStatus","setPublishAt","rerenderDialog","timezoneAdjustedPublishAt","isScheduleButtonDisabled","handleConfirmSchedule","schedulingError","handleBundleInputChange","handleOnDialogClose","confirmScheduleDialog","_isScheduledDateInPast","documentsLength","handleOnInitialSchedule","scheduleTooltipContent","ClockIcon","ReleaseUnscheduleButton","CloseCircleIcon","RELEASE_ACTION_MAP","confirmDialog","dialogId","dialogHeaderI18nKey","dialogDescriptionI18nKey","dialogConfirmButtonI18nKey","confirmButtonTone","toastSuccessI18nKey","toastFailureI18nKey","useReleasesIds","releasesIds","DOCUMENT_STUB_PATHS","NO_VERSIONS","useDocumentVersionInfo","releaseVersions","ReleaseMenu","ignoreCTA","setSelectedAction","releaseMenuDisabled","hasArchivePermission","setHasArchivePermission","hasUnarchivePermission","setHasUnarchivePermission","hasDeletePermission","setHasDeletePermission","hasPublishPermission","setHasPublishPermission","hasSchedulePermission","setHasSchedulePermission","hasPermission_1","hasPermission_2","hasPermission_3","getAttribute","handleOnInitiateAction","UnarchiveIcon","ArchiveIcon","archiveUnarchiveMenuItem","deleteMenuItem","unscheduleMenuItem","scheduleMenuItem","publishMenuItem","bb5","ActionsOrder","ReleasePreviewCard","ReleaseMenuButton","documentsCount","isPerformingOperation","setIsPerformingOperation","selectedAction","releaseMenuRef","openPopover","setOpenPopover","isActionPublishOrSchedule","handleDelete","handleUnarchive","handleAction","actionLookup","actionValues","actionError","confirmActionDialog","handleOnButtonClick","closePopover","handleSetSelectedAction","StatusItem","STATUS_TITLE_I18N","ReleaseStatusItems","createEvent","extraEvent","footerEvents","ReleaseDashboardFooter","releaseActionButton","DATE_SEARCH_PARAM_KEY","GROUP_SEARCH_PARAM_KEY","getInitialFilterDate","activeFilterDate","_searchParams","getInitialReleaseGroupMode","ReleaseDashboardHeader","inspector","setInspector","handleNavigateToReleasesList","handleActivityClick","TableProvider","defaultSort","searchTerm","setSearchTerm","setSort","newColumn","column","setSortColumn","useTableContext","TableContext","MotionIcon","ArrowUpIcon","BasicHeader","SortHeaderButton","ease","sortIcon","sorting","TableHeaderSearch","headerProps","searchDisabled","TableHeader","paddingInline","Headers","ITEM_HEIGHT","LOADING_ROW_COUNT","withVirtualizerOffset","scrollContainerRef","parentOffset","virtualizerScrollMargin","topItemsOffset","startIndexWithOffset","startIndex","defaultRangeExtractor","TableInner","columnDefs","emptyState","searchFilter","rowId","rowActions","rowProps","hideTableInlinePadding","filteredData","filteredResult","sortColumn","order","aValue","bValue","sortValue","sortTransform","datum","aDate","bDate","rowVirtualizer","rangeExtractor","rowActionColumnDef","cell","cellProps","amalgamatedColumnDefs","renderRow","cardRowProps","cardKey","Cell","emptyContent","justifyContent","maxInlineSize","v2","renderLoadingRows","rowRenderer","lane","isLast","tableContent","Table","IS_MAC","platform","DEBUG_FRAGMENT","SEARCH_LIMIT","GLOBAL_SEARCH_KEY","GLOBAL_SEARCH_KEY_MODIFIER","POPOVER_INPUT_PADDING","studioTheme","POPOVER_MAX_HEIGHT","POPOVER_MAX_WIDTH","POPOVER_VERTICAL_MARGIN","POPOVER_RADIUS","useSearchState","SearchContext","hasSearchableTerms","allowEmptyQueries","terms","hasQuery","hasFilter","hasSelectedTypes","types","isSearchHotKey","isHotkey","isEscape","useSearchHotkeys","isTopLayer","SearchWrapper","hasValidTerms","searchCommandList","setOnClose","loaded","createFilterDefinitionDictionary","filterDefinitions","defineSearchFilter","filterDef","defineSearchFilterOperators","operators","getFilterDefinition","definitions","filterName","getSupportedFieldTypes","filterDefs","createOperatorDefinitionDictionary","operatorDefinitions","getOperatorDefinition","operatorType","getOperatorInitialValue","buildSearchFilter","filterDefinition","fieldId","operator","generateFilterQuery","fieldDefinitions","filters","validateFilter","fieldPath","resolveFieldPath","isEmpty","getFieldFromFilter","getFilterKey","narrowDocumentTypes","selectedDocumentTypes","filteredDocumentTypes","documentTypes","intersectingDocumentTypes","fieldDefinition","operatorDef","fieldDef","MAX_HEIGHT","HiddenOverlay","FilterPopoverWrapper","anchorElement","popoverOffset","usePopoverOffset","calcPopoverOffset","setOffset","handleWindowResize","CustomTextInputBox","$background","$smallClearButton","card","bg2","CustomTextInput","SearchHeaderBox","SearchHeaderContentFlex","FilterPopoverContentHeader","ariaInputLabel","onClear","typeFilter","fullscreen","createFilterMenuItems","documentTypesNarrowed","titleFilter","fieldFilters","includesTitleInFieldDefinition","pinnedItems","buildPinnedMenuItems","filterGroup","headerTitle","buildFieldMenuItemsNarrowed","filterItems","sharedFilters","sharesDocumentTypes","sharedItems","groupedItems","startCase","groupFilters","includesDocumentTypes","ungroupedPinnedFilters","isPinnedFilterDefWithoutGroup","includesTitleInPinnedFilterDefinition","groupedPinnedFilters","isPinnedFilterDefWithGroup","groupTitle","currentTitle","difference","FilterTitle","FilterIcon","FilterDetails","pathTitle","paddingLeft","paddingRight","flexShrink","getSchemaField","firstPath","nextPath","sanitizeFieldValue","stripHtmlTags","renderToString","DOMParser","parseFromString","MAX_VISIBLE_TYPES","FilterTooltip","fieldDefinitionDocumentTypeTitles","defType","fieldDefinitionDescription","descriptions","uniqueDescriptions","uniq","fontFamily","MenuItemFilter","isAlreadyActive","tooltipEnabled","MenuItemHeader","POPOVER_STYLES","AddFilterPopoverContent","setInputElement","setTitleFilter","handleFilterChange","handleFilterClear","filteredMenuItems","filterItem","menuItem","AddFilterButton","buttonElement","setButtonElement","getDocumentTypesTruncated","availableCharacters","DEFAULT_AVAILABLE_CHARS","remainingCount","visibleTypes","typeTitle","documentTypesTruncated","PREVIEW_FIELD_WEIGHT_MAP","BASE_WEIGHTS","weight","ignoredBuiltInObjectTypes","isPtField","arrType","isStringField","isSlugField","isSearchConfiguration","search","getFullyQualifiedPath","getLeafWeights","getWeight","depth","accumulator","typeChain","recursiveResult","arrayItemType","getUserSetWeight","searchOptions","getHiddenWeight","getDefaultWeights","getPreviewWeights","isCrossDataset","preview","selectionKeysBySelectionPath","selectionKey","selectionPath","defaultWeights","nestedWeightsBySelectionPath","previewFieldName","nested","deriveSearchWeightsFromType","processPaths","userSetWeights","hiddenWeights","previewWeights","mapWith","deriveSearchWeightsFromType2024","isDocumentType","isObjectType","isIgnoredType","getSearchableTypes","explicitlyAllowedTypes","isPerspectiveRaw","WILDCARD_TOKEN","NEGATION_TOKEN","TOKEN_REGEX","isNegationToken","isPrefixToken","isExactMatchToken","character","prefixLast","finalIncrementalTokenIndex","findLastIndex","finalIncrementalToken","prefixedTokens","FINDABILITY_MVI","DEFAULT_LIMIT","maybeSchemaType","toOrderClause","wrapFieldWithFn","ordering","createSearchQuery","searchTerms","searchParams","flattenedSpecs","DEFAULT_MAX_FIELD_DEPTH","groupedSpecs","baseMatch","score","sortOrder","isScored","activePerspective","isRaw","__types","__limit","__query","getNextCursor","lastResult","hasIdSort","sortEntry","nextPredicate","previousSortEntry","getCursorPredicate","sortComparators","asc","desc","lastEntry","comparator","getSearchTerms","createGroq2024Search","typesFromFactory","factoryOptions","mergedOptions","hits","hasNextPage","hit","calculateScore","phrases","uniqueSearchPhrases","words","uniqueSearchWords","partitionAndSanitizeSearchTerms","phraseScore","phraseWhy","calculatePhraseScore","wordScore","wordWhy","calculateWordScore","applyWeights","searchSpec","specByType","keyBy","spec","stories","pathSpec","why","totalScore","rank","resultIndex","sanitizedValue","fieldScore","matchCount","term","uniqueSearchTerms","uniqueValueTerms","toLower","union","searchPhrases","searchWords","stripWrappingQuotes","combinePaths","flow","pathWithMapper","createConstraints","specs","combinedSearchPaths","configForType","opt","_term","joinedPath","SPECIAL_CHARS","STRIP_EDGE_CHARS","tokenize","extractTermsFromQuery","quotedQueries","unquotedQuery","quotedTerms","remainingTerms","searchOpts","selections","cfg","projectionFields","finalProjection","__unstable_extendedProjection","extendedProjection","firstProjection","groqComments","updatedQuery","toGroqParams","createWeightedSearch","skipSortByScore","searchStrategies","groqLegacy","groq2024","DEFAULT_SEARCH_STRATEGY","createSearch","searchableTypes","factory","strategy","getSelectableOmnisearchTypes","getSearchableOmnisearchTypes","inTypeFilter","sortTypes","__experimental_omnisearch_visibility","DocumentTypeFilterItem","handleTypeAdd","handleTypeRemove","ClearButtonBox","DocumentTypesPopoverContent","setTypeFilter","commandListRef","selectedTypes","selectedTypesSnapshot","setSelectedTypesSnapshot","documentTypeItems","useGetDocumentTypeItems","handleTypesClear","virtualItem","index_1","item_1","ClearButton","itemsSelected","itemsUnselected","hasSelectedItems","hasUnselectedItems","FALLBACK_PLACEMENTS","DocumentTypesButton","ChevronDownIcon","CustomBox","$flexShrink","FilterLabel","showContent","ButtonValue","buttonValueComponent","filterValue","children_0","Field","Operator","Value","descriptionKey","getFilterValues","isStringOrNumber","FilterError","CustomMenuItem","nameKey","OperatorsMenuButton","operatorItems","filterKey","Inline","menuOperator","FilterForm","errorParams","setErrorParams","handleValueChange","handleCatchError","inputComponent","ContainerFlex","FilterPopoverContent","CloseButton","CloseCard","ContainerDiv","LabelButton","FilterButton","initialOpen","CloseIcon","Filters","showTypeFilter","lastAddedFilter","setIsMounted","handleClear","clearFiltersButtonVisible","lastAddedFilterKey","ClearFiltersButton","MAX_OBJECT_TRAVERSAL_DEPTH","createFieldDefinitions","searchableDocumentTypeNames","objectTypes","_original","isDocumentObjectDefinition","isObjectDefinition","supportedFieldTypes","getDocumentFieldDefinitions","createFieldDefinitionDictionary","generateFieldId","addFieldDefinitionRecursive","prevFieldPath","prevTitlePath","continueRecursion","isInternalField","existingObject","existingDocument","inlineObject","targetObject","resolveFilterName","documentFields","prevIndex","addFieldDefinitionId","sortFieldDefinitions","isArrayOfPrimitives","isArrayDefinition","isStringDefinition","isStringListDefinition","aTitlePath","bTitlePath","RECENT_SEARCH_VERSION","STORED_SEARCHES_NAMESPACE","recentSearches","useStoredSearch","keyValueStore","useKeyValueStore","keyValueStoreKey","settings","MAX_RECENT_SEARCHES","useRecentSearchesStore","storedSearch","setStoredSearch","addSearch","searchFilters","validStoredFilters","filter_0","newSearchItem","created","newRecent","getRecentSearchTerms","getRecentSearches","removeSearch","newRecent_0","removeSearchAtIndex","newRecent_1","sanitizeStoredSearch","studioSchema","__recent","searchableTypeNames","filteredSearch","recentSearch","newStoredSearch","Instructions","ControlsIcon","DocumentTypesPill","FilterPillCard","FilterPill","DEFAULT_COMBINED_TYPE_COUNT","RecentSearchItemButton","SearchItemPillsBox","SearchItemQueryFlex","CloseButtonDiv","RecentSearchItem","maxVisibleTypePillChars","recentSearchesStore","VIRTUAL_LIST_RECENT_SEARCH_ITEM_HEIGHT","MAX_COMBINED_TYPE_COUNT_SMALL","MAX_COMBINED_TYPE_COUNT_LARGE","RecentSearchesBox","RecentSearches","filtersVisible","handleClearRecentSearchesClick","mediaIndex","useMediaIndex","hasRecentSearches","keyframes","AnimatedSpinnerIcon","SpinnerIcon","FilterDiv","SearchHeader","handleFiltersToggle","handleQueryChange","handleQueryClear","notificationBadgeVisible","ArrowLeftIcon","NoResults","SearchError","getOrderings","searchStrategy","createdAsc","ignoreScore","titleKey","createdDesc","relevance","customMeasurementLabel","updatedAsc","updatedDesc","SortMenuContentFlex","isSearchDivider","currentOrdering","SortMenu","menuOrderings","orderings","currentMenuItem","SortIcon","DebugScoreCard","DebugOverlay","matchingStories","Tooltip","story_0","story","IDLE_STATE","useDocumentPreview","previewValue","observeForPreview","viewOptions","SearchResultItemPreviewBox","SearchResultItemPreview","showBadge","documentStub","original","versionsInfo","getPreviewValueWithFallback","SearchResultItem","disableIntentLink","onItemSelect","previewPerspective","intent","onIntentClick","useIntentLink","createPermission","setCreatePermission","canDisableAction","disabledDocumentIds","existsInRelease","disabledAction","useValuePreview","pointerEvents","VIRTUAL_LIST_SEARCH_RESULT_ITEM_HEIGHT","VIRTUAL_LIST_OVERSCAN","SearchResultsInnerFlex","$loadingFirstPage","SearchResults","setSearchCommandList","lastActiveIndex","hasSearchResults","hasNoSearchResults","metaKey","ctrlKey","handleSearchResultClick","handleEndReached","ANIMATION_TRANSITION","CARD_VARIANTS","closed","OVERLAY_VARIANTS","Y_POSITION","MotionOverlay","SearchMotionCard","SearchPopover","disableFocusLock","popoverElement","onSearchClose","DEFAULT_API_FIELD_DEPTH","partialIndexSettings","maxFieldDepth","fetchMaxDepth","cachedSettings","useSearchMaxFieldDepth","isEnabled","unstable_partialIndexing","workspaceClient","indexSettingsObservable","isFinite","DEFAULT_DEBOUNCE_TIME","INITIAL_SEARCH_STATE","nonNullable","sanitizeRequest","useSearch","initialState","onComplete","onStart","searchState","setSearchState","inputValue$","request_0","useObservableEvent","searchRequest","handleSearch","prevState","nextState","isRecentSearchTerms","isDebugMode","initialSearchState","pagination","hasLocal","searchReducer","stripRecent","newFilter","matchedFilter","currentOperator","nextOperator","nextInitialValue","inputComponentChanged","SearchProvider","currentFilters","previousOrderingRef","previousCursorRef","previousTermsRef","searchResult","completeFilters","orderingChanged","cursorChanged","termsChanged","sortLabel","getActiveReleaseDocumentsObservable","mergeMapArray","validation$","validationStatus","isValidationErrorMarker","previewValues$","switchAll","memoKey","uuid","getPublishedArchivedReleaseDocumentsObservable","finalDocumentStates","batchRequestDocumentFromHistory","finalIndex","prepareForPreview","getReleaseDocumentsObservable","releasesState","useBundleDocuments","releaseDocumentsObservable","AddDocumentSearch","idsInRelease","UnpublishVersionDialog","documentVersionId","isUnpublishing","setIsUnpublishing","handleUnpublish","Label","backgroundColor","fontWeight","isGoingToUnpublish","DocumentActionsInner","showDiscardDialog","setShowDiscardDialog","showUnpublishDialog","setShowUnpublishDialog","isAlreadyUnpublished","discardVersionPermission","isDiscardVersionPermissionsLoading","unpublishPermission","isUnpublishPermissionsLoading","isDiscardVersionActionDisabled","noPermissionToUnpublish","unPublishTooltipContent","isUnpublishActionDisabled","UnpublishIcon","DocumentActions","MemoReleaseDocumentPreview","MemoDocumentType","documentActionColumn","actionBadge","isPending","getDocumentTableColumnDefs","validationErrorCount","isBundleDocumentRow","maybeBundleDocumentRow","ReleaseSummary","openAddDocumentDialog","setAddDocumentDialog","pendingAddedDocument","setPendingAddedDocument","aggregatedData","renderRowActions","documentTableColumnDefs","filterRows","closeAddDialog","documentToAdd","versionDocumentId","pendingAddedDocumentId","pendingDocumentRow","documentsNoLongerPending","pendingDocument","tableData","MotionCard","ReleaseDetail","releaseIdRaw","decodeURIComponent","documentsLoading","bundleDocumentsError","releaseInDetail","detailContent","dateStyles","isWeekend","renderCalendarDay","DefaultCalendarDay","weeksOfMonth","gridGap","dayDate","CalendarFilter","handleOnFocusedDateChange","providedFocusedDate","_focusedDate","_setFocusedDate","date_1","targetDate","handlePrevMonthClick","handleNextMonthClick","CreateReleaseDialog","onCancel","onSubmit","handleOnSubmit","dialogTitle","dialogConfirm","DEFAULT_METADATA_STATE","ReleasesMetadataProviderInner","listenerReleaseIds","setListenerReleaseIds","releasesMetadata","setReleasesMetadata","observedResult","prevReleaseMetadata","addReleaseIds","prevSlugs","addReleaseIdsToListener","prevSlugs_0","nextSlugs","slug_0","removedSlugs","accNextSlugs","removeReleaseIdsFromListener","ReleasesMetadataProvider","ReleasesMetadataContext","useReleasesMetadataProvider","useReleasesMetadata","addBundleIdsToListener","removeBundleIdsFromListener","responseData","setResponseData","nextResponseData","ReleaseIllustration","CalendarPopover","isCalendarOpen","setIsCalendarOpen","useTimezoneAdjustedDateTimeRange","startOfDay","endOfDay","ReleaseCalendarFilterDay","getTimezoneAdjustedDateTimeRange","startOfDayForTimeZone","endOfDayForTimeZone","releasePublishAt","publishDateUTC","dayHasReleases","MotionButton","DateFilterButton","filterDate","isExiting","setIsExiting","handleOnExitComplete","ReleaseMenuButtonWrapper","ReleaseDocumentsCounter","PREVIEW_SIZES","RootFlex","StatusBox","MediaSkeleton","animated","TitleSkeleton","TextSkeleton","SubtitleSkeleton","DescriptionSkeleton","DescriptionText","textSize1","maxLines","ReleaseNameCell","isArchived","isReleasePinned","WrapperBox","isDeleted","cardProps","pinButtonIcon","enableColumnFormMode","currentMode","expectedMode","releasesOverviewColumnDefs","releaseGroupMode","checkColumnMode","Infinity","lastActivity","documentsMetadata","updatedAtDate","DATE_SEARCH_PARAM_VALUE_FORMAT","DEFAULT_RELEASES_OVERVIEW_SORT","DEFAULT_ARCHIVED_RELEASES_OVERVIEW_SORT","ReleasesOverview","loadingReleases","setReleaseGroupMode","releaseFilterDate","setReleaseFilterDate","loadingReleasesMetadata","loadingTableData","getRowProps","hasReleases","loadingOrHasReleases","hasNoReleases","tableReleases","handleReleaseGroupModeChange","groupMode","handleSelectFilterDate","prevFilterDate","timeZoneAdjustedDate","clearFilterDate","getSearchParams","hasMounted","setHasMounted","showCalendar","currentArchivedPicker","groupModeButtonBaseProps","animate","handleOnClickCreateRelease","createReleaseButton","handleOnCreateRelease","createdReleaseId","renderCreateReleaseDialog","filteredReleases","renderCalendarFilter","tableColumns","NoRelease","ReleasesTool","InsufficientPermissionsMessage","Roles","DiscardVersionAction","dialogOpen","setDialogOpen","handleDialogOpen","onHandle","UnpublishVersionAction","resolveDocumentActions","existingActions","duplicateAction","versionType","TEMPLATE_OPTIONS","interpolate","TRANSFORMATIONS","inlineIcon","isPortableTextTextBlock","hasTextLeft","hasTextRight","transformBlocks","blocks","Divider","SerializerContainer","IconTextContainer","accent","AccentSpan","SemiboldSpan","semibold","InlineIcon","$hasTextLeft","$hasTextRight","$useTextColor","DynamicIconContainer","$inline","accentSpanWrapper","DynamicIcon","setHtml","AbortController","NormalBlock","H2Block","H3Block","ImageBlock","interpolateChildrenText","createComponents","onLinkClick","interpolateChildren","normal","h2","h3","bullet","checkmarks","listItem","marks","strong","link","useTextColor","linkTitle","showIcon","marginLeft","sanityIcon","divider","iconAndText","imageBlock","UpsellDescriptionSerializer","PortableText","ok","StyledButton","white","UpsellDialog","onPrimaryClick","onSecondaryClick","secondaryButton","LaunchIcon","rel","ctaButton","altText","descriptionText","STATE_TTL_MS","ORG_ACTIVE_RELEASE_COUNT_RESOURCE_CACHE_NAMESPACE","createOrgActiveReleaseCountStore","activeReleasesCount","latestFetchState","staleFlag$","activeReleaseCountAtFetch","orgActiveReleaseCount$","orgActiveReleaseCount","useOrgActiveReleaseCount","activeReleases","StudioReleaseLimitExceededError","FEATURE","BASE_URL","ReleasesUpsellProvider","setUpsellDialogOpen","upsellData","setUpsellData","UpsellDialogLearnMoreCtaClicked","feature","UpsellDialogUpgradeCtaClicked","UpsellDialogViewed","UpsellDialogDismissed","handlePrimaryButtonClick","handleSecondaryButtonClick","ctaUrl","baseUrl","secondaryUrl","releaseCount","setReleaseCount","cb","doUpsell","orgActiveReleaseCount_0","releaseLimits","isCurrentDatasetAtAboveDatasetLimit","isCurrentDatasetAtAboveOrgLimit","isOrgAtAboveOrgLimit","ctxValue","releasesToolAvailable","tools","RELEASES_TOOL_NAME","useReleasesToolAvailable","ReleasesStudioLayout","RELEASES_NAME","RELEASES_INTENT","studio","route","canHandleIntent","getIntentState","Dot","$index","DocumentStatusIndicator","versionsList","versionName","indicators","ReferencePreview","refType","showTypeLabel","previewStub","PreviewReferenceValue","referenceInfo","toType","stub","skipVisibilityCheck","notFound","insufficientPermissions","HelpCircleIcon","AccessDeniedIcon","refTypeName","toType_1","refType_0","toType_2","toType_0","UnavailableMessage","InvalidType","declaredTypes","AllowedTypes","HumanizedList","STATUS_ICONS","AlertStrip","ReferenceFinalizeAlertStrip","handleRemoveStrengthenOnPublish","ReferenceLinkCard","ReferenceMetadataLoadErrorAlertStrip","onHandleRetry","ReferenceStrengthMismatchAlertStrip","actualStrength","handleFixStrengthMismatch","shouldBe","noop","retry","EMPTY_STATE","useReferenceInfo","getReferenceInfo","refId","FormValueProvider","useFormValue","uniquePath","FormValueContext","READABLE","PERMISSION_DENIED","NOT_FOUND","referenceType","pairAvailability","observeDocumentTypeFromId","draftTypeName","publishedTypeName","versionTypeName","refSchemaType","publishedDocumentExists$","previewState$","getCounterpartIds","collatedHits","collatedHit","getExistingCounterparts","referenceSearch","textTerm","docs","_originalId","collated","existingCounterpartIds","useValueRef","useReferenceInput","inheritedOptions","isCurrentDocumentLiveEdit","EditReferenceLink","handleEditReference","parentRefPath","selectedState","createOptions","adapter","getTone","MENU_POPOVER_PROPS","ReferenceField","fieldActionsNodes","setFieldActionNodes","loadableReferenceInfo","pressed","hasRef","publishedReferenceExists","handleReplace","_weak","weakShouldBe","weakWarningOverride","showWeakRefMismatch","isEditing","footer","OpenLink","ReplaceIcon","OpenInNewTabIcon","menu","getOption","optionName","PSEUDO_OBJECTS","HIDDEN_FIELDS","NO_LEVEL_LAYOUTS","NO_LEVEL_TYPES","getFieldLevel","currentLevel","getArrayFieldLevel","getObjectFieldLevel","typeIfRelevant","asType","isPseudoObject","hasVisibleFields","hasListOptions","isNoLevelLayout","asOneOfTypes","BooleanField","ObjectOrArrayField","disableActions","ImageOrFileField","hotspotField","defaultResolveFieldComponent","isCrossDatasetReferenceSchemaType","isReferenceSchemaType","NARROW_LAYOUT","WIDE_LAYOUT","$narrow","AutocompleteContainer","setForwardedRef","handleNewRef","useElementRect","INLINE_BLOCK_STYLE","FULL_WIDTH","preventOverflow","CreateButton","menuRef","onCreate","getI18nText","createOption","OptionPreview","returnedType","StyledPopover","Popover","ReferenceAutocomplete","portalRef","searchString","hasResults","contentRef","renderPopover","useReferenceItemRef","ReferenceItemRefContext","menuButtonRef","containerRef","NO_FILTER","ReferenceInput","onSearch","newDocumentId","strengthenOnPublishPatches","createInPlaceMetadataPatches","handleCreateNew","nextId","h","patches_0","handleAutocompleteKeyDown","autocompletePopoverReferenceElement","setAutocompletePopoverReferenceElement","handleAutocompleteOpenButtonClick","handleCreateButtonKeyDown","relatedTarget","isWeakRefToNonexistent","hadFocusAtRef","hasFocusAtRef","hits_0","clickOutsideBoundaryRef","autoCompletePortalRef","createButtonMenuPortalRef","hit_0","resolveUserDefinedFilter","valuePath","filterParams","StudioReferenceInput","searchClient","documentRef","isDocumentLiveEdit","isQueryError","_refType","isObjectItemProps","isStringInputProps","isNumberInputProps","isBooleanInputProps","isArrayOfObjectsInputProps","isArrayOfObjectsSchemaType","isArrayOfBlocksInputProps","isArrayOfPrimitivesInputProps","isArrayOfPrimitivesSchemaType","restrictToBoundingRect","boundingRect","marginY","marginX","restrictToParentElementWithMargins","containerNodeRect","draggingNodeRect","MOVING_ITEM_CLASS_NAME","ListItem","$moving","AUTO_SCROLL_OPTIONS","SENSOR_OPTIONS","coordinateGetter","sortableKeyboardCoordinates","TRANSITION","easing","restrictToAxis","axis","restrictToHorizontalAxis","restrictToVerticalAxis","sortingStrategy","horizontalListSortingStrategy","verticalListSortingStrategy","SortableList","onItemMoveEnd","onItemMoveStart","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","active","sortable","handleDragEnd","modifiers","closestCenter","SortableListItem","disableTransition","setNodeRef","useSortable","CSS","List","handleSortEnd","Item","withFocusRing","$border","$radius","extractPastedFiles","dataTransfer","files","normalizeItems","extractDroppedFiles","webkitGetAsEntry","getAsFile","isDirectory","walk","isFile","reject","createReader","readEntries","entr","isPortableTextItem","imageUrlToBlob","quality","loader","crossOrigin","referrerPolicy","toBlob","fileTargetAttributeName","fileTargetDataAttribute","isFileTargetElement","PASTE_INPUT_STYLE","fileTarget","onFiles","onFilesOut","onFilesOver","showPasteInput","setShowPasteInput","pasteInput","enteredElements","emitFiles","clipboardData","files_0","convertImagesToFilesAndClearContentEditable","files_1","handlePaste","event_1","nativeEvent","files_2","handleDrop","event_2","handleDragOver","event_3","fileTypes_1","fileTypes","handleDragEnter","event_4","_temp7","_temp8","handleDragLeave","prevShowPasteInput","targetFormat","isContentEditable","querySelectorAll","imageElements","innerHTML","images","imageBlobs","blob","File","createRange","selectNodeContents","removeAllRanges","addRange","item_2","item_3","item_4","item_5","item_6","DropMessage","hoveringFiles","rejectedFilesCount","multiple","Overlay","getUploadCandidates","uploadTarget","FileTarget","pushToast","resolvedUploader","tasks","file_0","uploaderCandidates","rejected","task_2","handleFiles","setHoveringFiles","handleFilesOut","task_0","task_1","UploadTargetCard","popoverReducer","useInsertMenuPopover","send","popoverProps","insertMenuProps","handleOnSelect","InsertMenu","popover","SanityInsertMenu","ArrayOfObjectsFunctions","onValueCreate","gridElement","setGridElement","popoverToggleElement","setPopoverToggleElement","insertItem","handleAddBtnClick","addItemI18nKey","insertButtonProps","insertMenu","views","view","DragHandleButton","$grid","DragHandle","SortableItemIdContext","delay","DragHandleIcon","FooterFlex","PresenceFlex","DragHandleCard","CellLayout","dragHandle","ErrorItem","fieldsets","fieldset","toFixed","collapsable","isError","problem","severity","builtinTypes","assetSourceData","geopoint","imageAsset","fileAsset","imageCrop","imageHotspot","imageMetadata","imageDimensions","imagePalette","imagePaletteSwatch","createSchema","schemaDef","validated","validateSchema","getTypes","groupProblems","problems","compiled","SchemaBuilder","compile","_validation","inferValidation","getSchemaTypeTitle","flattenItems","treeEditingSearch","flattenItemsList","deburredQuery","deburr","matchA","matchB","useSearchableList","searchableList","setSearchableList","flatList","prevItem","prevItem_0","handleResult","useValuePreviewWithFallback","MAX_DISPLAYED_ITEMS","BreadcrumbsItem","onPathSelect","renderMenuItemTitle","TreeEditingBreadcrumbsMenu","selectedPath","handleRenderMenuItemTitle","TitleCard","PopoverListFlex","$maxDisplayedItems","$itemHeight","TreeEditingBreadcrumbsMenuButton","menuTitle","rootElementRef","closeAndFocus","shiftKey","handlePopoverKeyDown","handleButtonClick","handlePathSelect","ReactFocusLock","clonedButton","MAX_LENGTH","SEPARATOR","hasChildren","SeparatorItem","TreeEditingBreadcrumbs","itemsProp","useElementSize","FixedHeightFlex","sizing","ResultItem","TreeEditingSearchMenu","textInputElement","StyledTextInput","TreeEditingSearch","setTextInputElement","setQuery","hasSearchQuery","filteredList","resetSearch","handleSearchChange","handleSearchKeyDown","requestAnimationFrame","handleSearchBlur","isArrayItemSelected","isArrayItemPath","shouldBeInBreadcrumb","getRelativePath","getSiblingHasChildren","sibling","hasOpenChild","SCROLL_BEHAVIOR_OPTIONS","AnimateChevronIcon","ChildStack","isDark","_dark","borderColor","ItemFlex","defaultHoverBg","bleed","selectedHoverBg","selectedBg","TreeEditingMenuItem","siblingHasChildren","isArrayParent","stringPath","handleExpandClick","scrollIntoViewIfNeeded","childSiblingHasChildren","TreeEditingMenu","ANIMATION_VARIANTS","exit","SidebarCard","SidebarStack","SearchStack","TreeEditingLayoutSidebar","onOpenToggle","PanelLeftIcon","TreeEditingLayout","breadcrumbs","setScrollElement","setParentScrollElement","containerElementRef","toggleOpen","handleSetScrollElementRef","getRootPath","keyedSegmentIndex","getPrimitiveItemType","findArrayTypePaths","arrayPaths","currentPath","checkFields","nestedFields","newPath","buildBreadcrumbsState","arraySchemaType","arrayValue","nestedItemPath","selectedItem","buildArrayState","openPath","rootPath","recursive","menuItems","treeEditing","rootTitle","itemSchemaField","childrenFields","childrenMenuItems","breadcrumbsResult","childField","childValue","arrayPath","nestedArrayField","arrayFieldValue_","arrayFieldValue","nestedArrayState","isPortableText","childState","EMPTY_TREE_STATE","buildTreeEditingState","rootField","recursiveProps","arrayState","unshift","StyledDialog","spacing","TreeEditingDialog","rootInputProps","treeState","setTreeState","layoutScrollElement","setLayoutScrollElement","openPathRef","scrollTo","handleAnimationExitComplete","builtRelativePath","nextRelativePath","handleBuildTreeEditingState","debouncedBuildTreeEditingState","firstKeySegmentIndex","rootFocusPath","onHandlePathSelect","valueChanged","openPathChanged","useTreeEditingEnabled","TreeEditingEnabledContext","TreeEditingEnabledProvider","legacyEditing","legacyEditingProp","parentContextValue","useInsertMenuMenuItems","insertType","insertMenuOptions","insertBefore","insertType_0","handleToggleInsertBefore","handleToggleInsertAfter","InsertAboveIcon","insertBeforeMenuItem","InsertBelowIcon","insertAfterMenuItem","PreviewCard","GridItem","treeEditingDisabledByOption","openPortal","insertableTypes","previewCardElement","setPreviewCardElement","previewCardRef","resolvingInitialValue","_resolvingInitialValue","handleDuplicate","contextMenuButtonElement","setContextMenuButtonElement","AddDocumentIcon","withBorder","withShadow","itemTypeTitle","modal","GridArrayInput","arrayFunctions","ArrayFunctions","memberKeys","member_0","RowLayout","useMemoCompare","useVirtualizerScrollInstance","VirtualizerScrollInstanceContext","ListArrayInput","activeDragItemIndex","setActiveDragItemIndex","parentRef","focusPathKey","newRange","endIndex","observeElementOffset","evt","containerElementTop","parentElementTop","itemOffset","scrollToFn","scrollOffset","elementScroll","handleItemMoveStart","handleItemMoveEnd","listGridGap","paddingY","boxSizing","ArrayOfObjectsInput","isGrid","otherItem","it","otherKeys","keyName","inArray","ArrayOfObjectOptionsInput","isChecked","changedOption","handleItemFocus","optionType","isPrimitiveOption","normalizeOptions","ArrayOfPrimitiveOptionsInput","optionValue","ArrayOfOptionsInput","ArrayOfPrimitivesFunctions","memberDef","referenceIcon","InsertMenuGroup","insertableType","MENU_BUTTON_POPOVER_PROPS","ItemRow","NoItemsPlaceholder","nearestIndexOf","startIdx","searchElement","nearestIndex","lowerIdx","upperIdx","upper","lower","ArrayOfPrimitivesInput","PureComponent","_element","getSnapshotBeforeUpdate","prevFocusPath","focusIndex","focusNode","HTMLInputElement","prevFocusedIndex","restoreSelection","selectionStart","selectionEnd","componentDidUpdate","prevFocusedValue","newInput","setSelectionRange","renderArrayItem","isSortable","membersWithSortIds","UniversalArrayInput","CenterAlignedBox","ZeroLineHeightBox","BooleanInput","indeterminate","LayoutSpecificInput","Switch","EmailInput","normalizeRules","getValidationRule","ruleName","ruleSpec","getScrollableParent","Element","overflowY","clientHeight","preventWheel","scrollContainer","scrollBy","deltaY","NumberInput","minRule","integerRule","precisionRule","onlyPositiveNumber","onlyIntegers","inputMode","inputElementRef","GroupTab","GroupOption","ElementQuery","GroupTabs","shouldAutoFocus","GroupSelect","FieldGroupTabs","g","FieldGroupTabsWrapper","$level","UnknownFields","fieldsLen","handleUnsetClick","fieldName_0","UnknownField","onUnsetClick","RootStack","ObjectInput","__internal_arrayEditingModal","arrayEditingModal","wrapperRef","isFocusable","knownFieldNames","unknownFields","renderedUnknownFields","selectedGroup","renderObjectMembers","defaultSlugify","speakingurl","truncate","slugify","sourceValue","useAsync","lastId","asyncId","wrappedCallback","useSlugContext","getSlugSourceContext","getNewFromSource","SlugInput","sourceField","nextSlug","updateSlug","sourceContext","newFromSource","newSlug","handleAsyncGenerateSlug","generateState","handleGenerateSlug","StringInput","StyledTextArea","TextArea","rows","UrlInput","inputType","DisabledFeatureWarning","onClearValue","DocumentationLink","ResetIcon","StyledPreviewFlex","CrossDatasetReferencePreview","showStudioUrlIcon","hasStudioUrl","previewMedia","isValidImageAsset","ReactIsValidElement","withOptions","retryAttempt","setRetryAttempt","docInfo","referenceInfoObservable","toEntry","JsonValue","REF_PATH","CROSS_DATASET_FEATUREKEY","CrossDatasetReferenceInput","_projectId","_dataset","getReferenceInfoMemo","refDoc","featureInfo","focusElementRef","hasFocusAt","refUpdated","handleAutocompleteFocus","studioUrl","autocompletePortalRef","ClearIcon","REQUEST_TAG_BASE","AVAILABILITY_READABLE","AVAILABILITY_PERMISSION_DENIED","AVAILABILITY_NOT_FOUND","createGetReferenceInfo","apiConfig","resolvedDoc","fetchDocumentAvailability","previewPaths","getPreviewPaths","publishedPreview$","publishedPreview","requestOptions","omittedEntry","StudioCrossDatasetReferenceInput","crossDatasetClient","resolveProjectDataset","resourceType","resourceId","GlobalDocumentReferencePreview","projectDataset","GlobalDocumentReferenceInput","globalDocumentReferenceApiVersion","globalDatasetApiVersion","getReferenceClient","datasetName","useProjectHostname","useGlobalApi","allParams","paramsString","connectEventSource","EventSource","keysOf","keyObservables","isObservable","pairs","createEmpty","resolveMissingHeads","getDocumentId","observeFields","pathsWithMissingHeads","nextHeads","refApiConfig","isCrossDatasetReference","leads","tails","normalizePaths","createPathObserver","createObserveFields","doSearch","StudioGlobalDocumentReferenceInput","referenceClient","WithReferencedAsset","observeAsset","waitPlaceholder","FileMenuItem","FileInputMenuItem","idProp","renderMenuItem","ActionsMenu","onReset","browse","downloadUrl","copyUrl","clipboard","writeText","handleCopyURL","UploadIcon","DownloadIcon","urlToFile","filename","xhr","XMLHttpRequest","onloadend","base64Index","ext","dataURLtoFile","readAsDataURL","responseType","base64ToFile","base64Data","dataurl","mime","bstr","atob","u8arr","handleSelectAssetFromSource","assetFromSource","uploadWith","isImage","firstAsset","assetProps","assetDocumentProps","originalFilename","assetPatches","assetContainerRef","PlaceholderText","isFileType","messageIcon","messageText","FileButton","FileInputButton","UploadPlaceholderComponent","UploadPlaceholder","STALE_UPLOAD_MS","RatioBox","FlexOverlay","CardWrapper","LeftSection","CodeWrapper","Code","elapsedMs","UploadProgress","uploadState","onStale","FileName","UploadWarning","onClearStale","staleThresholdMinutes","formatBytes","bytes","decimals","dm","FileActionsMenu","isMenuOpen","onMenuOpen","setMenuButtonElement","menuElement","setMenuElement","setOptionsButtonRef","FileSkeleton","InvalidFileWarning","CardOverlay","FlexContainer","passThrough","ASSET_FIELD_PATH","BaseFileInput","uploadSubscription","browseButtonElement","isUploading","selectedAssetSource","isStale","_assetFieldPath","handleRemoveButtonClick","isArrayElement","allKeys","removeKeys","clearUploadStatus","_upload","cancelUpload","handleCancelUpload","handleClearUploadState","handleStaleUpload","handleClearField","handleSelectFiles","uploadFirstAccepted","handleSelectFileFromAssetSource","handleAssetSourceClosed","setBrowseButtonElement","uploadEvent","renderUploadState","renderAssetSource","handleFileTargetFocus","handleFilesOver","fileInfo","renderAsset","hasValueOrUpload","isFileSource","getFileTone","renderUploadPlaceholder","renderAssetMenu","assetSources","browseMenuItem","assetSource","extension","renderBrowser","borderStyle","setToast","StudioFileInput","sourcesFromSchema","fileConfig","usePreviewImageSource","useDevicePixelRatio","auto","getImageDimensions","aspectRatio","customProperties","ImageInputAssetComponent","ImageInputAsset","MenuActionsWrapper","ImageActionsMenuWaitPlaceholder","ImageActionsMenu","onEdit","showEdit","setHotspotButtonElement","CropIcon","ImageInputAssetMenuComponent","handleSelectImageFromAssetSource","isImageToolEnabled","showAdvancedEditButton","ImageInputAssetMenu","ImageInputAssetMenuWithReferenceAssetComponent","forceDownload","ImageInputAssetMenuWithReferenceAsset","ImageInputAssetSourceComponent","ImageInputAssetSource","ASSET_IMAGE_MENU_POPOVER","ImageInputBrowserComponent","ImageInputBrowser","DEFAULT_HOTSPOT","DEFAULT_CROP","calculateStyles","imageAspect","readAspectRatio","hotspot","crop","containerAspect","readCropAspect","calculateHotSpotCrop","aspect","containerHeight","styleFormat","round","marginTop","toStylePercentage","multiplier","sourceAspect","descriptor","viewportAspect","alignment","netWidth","netHeight","outImg","cropAspect","maxHotspotXScale","maxHotspotYScale","maxScale","minFullBleedScale","cropIsTaller","outCrop","letterboxScale","hotspotLeft","hotspotTop","HotspotImageContainer","Debug","getCropAspect","srcAspect","origHeight","origWidth","cropWidth","cropHeight","HotspotImage","alignX","alignY","alt","onLoad","srcAspectRatio","srcSet","setContainerAspect","imageElementRef","parentNode","updateContainerAspect","imageElement","naturalWidth","targetAspect","targetStyles","ImageLoader","setIsLoading","setImage","image_0","Resize","setCanvas","hasCanvas","canvasElement","appendChild","removeChild","landscape","targetHeight","Point","HLine","_left","_right","Corners","Rect","fromEdges","setTopLeft","setSize","setCenter","center","corners","multiply","grow","delta","shrink","cropRelative","clamp","isPointInEllipse","point","ellipse","xradius","yradius","isPointInCircle","circle","isPointInRect","getPointAtCircumference","cos","sin","OPEN_HAND","CLOSE_HAND","DragAwareCanvasComponent","onDrag","onDragEnd","onDragStart","domNode","currentPos","isDragging","nextPos","getPos","getPositionRelativeToRect","handleDragStart","nextPos_0","diffPos","handleDrag","handleDragCancel","nextPos_1","DragAwareCanvas","StyledCanvas","otherPos","paintBackground","MARGIN_PX","inner","save","fillStyle","clearRect","globalAlpha","paintHotspot","clampedValue","HOTSPOT_HANDLE_SIZE","imageRect","drawBackdrop","drawEllipse","clip","drawHole","drawDragHandle","dest","scaleY","beginPath","arc","strokeStyle","lineWidth","stroke","closePath","srcLeft","srcTop","srcWidth","srcHeight","destLeft","destTop","destWidth","destHeight","fillRect","utils2d","printGuidelines","hotspotRect","setLineDash","vline","hline","x2","y2","paintCropBorder","cropRect","highlightCropHandles","cropHandles","cropping","cropHandleKeys","paint","pointerPosition","RootContainer","useActualCanvasSizeObserver","setHeight","setWidth","clientWidth","CROP_HANDLE_SIZE","normalizeRect","flippedY","flippedX","checkCropBoundaries","limitToBoundaries","newDelta","getCropCursorForHandle","ToolCanvasComponent","onChangeEnd","actualSize","setCanvasObserver","handleSize","halfCropHandleSize","cropHandle","topLeft","topRight","bottomLeft","bottomRight","hotspot_0","hotspotRect_0","ToolCanvas","ToolCanvasLegacy","cropMoving","moving","resizing","getActiveCropHandleFor","emitMove","applyHotspotMoveBy","emitCropMove","applyCropMoveBy","emitCrop","side","emitResize","applyHotspotResizeBy","getDragHandleCoords","bbox","getCursor","activeCropArea","pointerOverDragHandle","cursors","pointerOverHotspot","pointerOverCropRect","componentDidMount","draw","currentCursor","newCursor","inHotspot","inDragHandle","activeCropHandle","inCropRect","rawCrop","finalValue","handlePointerOut","handlePointerMove","clientRect","currentHotspot","currentCrop","ImageTool","PROBABLY_THE_TINIEST_GIF_EVER","isBlob","completed","useLoadImage","HOTSPOT_PATH","PREVIEW_ASPECT_RATIOS","DEFAULT_VALUE","Placeholder","LoadStatus","overflowWrap","ImageToolInput","isImageLoading","cropField","handleChangeEnd","isSvg","ImageUrlDocumentationLink","ImageUrlPackageDocumentationLink","field_0","ImageInputHotspotInput","imageInputProps","withImageTool","ImagePreview","drag","isRejected","setLoaded","onLoadChange","getHoverTextTranslationKey","HoverIcon","OverlayComponent","cardTone","ImageInputPreview","RenderImageInputPreview","ImageInputUploadPlaceholderComponent","ImageInputUploadPlaceholder","InvalidImageWarning","BaseImageInputComponent","renderPreviewProp","setSelectedAssetSource","setIsUploading","setIsStale","hotspotButtonElement","menuButtonElement","valueIsArrayElement","_handleSelectAssetFromSource","nextHoveringFiles","renderHotspotInput","BaseImageInput","StudioImageInput","builder","defaultInputs","crossDatasetReference","globalDocumentReference","PortableTextInputExpanded","PortableTextInputCollapsed","PortableTextInvalidValueIgnore","PortableTextInvalidValueResolve","CreatedDraft","OverlayContainer","ContentContainer","CardContainer","ActivateOnFocus","onActivate","isOverlayActive","handleOnFocus","isTouch","messageContext","ExpandedLayer","usePortableTextMemberItemElementRefs","behaviorSubject","PortableTextMemberItemElementRefsContext","useSetPortableTextMemberItemElementRef","TEXT_LEVELS","TEXT_BULLET_MARKERS","TEXT_NUMBER_FORMATS","TEXT_DECORATOR_TAGS","TEXT_STYLE_PADDING","h1","paddingTop","paddingBottom","h4","h5","h6","blockquote","Decorator","defaultComponentProps","createListName","ReviewChangesHighlightBlock","rgba","spot","yellow","StyledChangeIndicatorWithProvidedFullPath","createInsertCallback","allowedDecorators","toInsert","givenBlock","blk","normalizeBlock","createSetCallback","createUnsetCallback","BlockActions","renderBlockActions","decoratorValues","decorators","blockActions","blockActionProps","textBlockStyle","numberMarker","bulletMarker","ghost","TextRoot","TextBlockFlexWrapper","ListPrefixWrapper","BlockActionsOuter","BlockActionsInner","textSize2","capHeight1","ascenderHeight","descenderHeight","capHeight2","negativeTop","TextFlex","ChangeIndicatorWrapper","$hasChanges","TextContainer","Normal","Heading1","Heading2","Heading3","Heading4","Heading5","Heading6","BlockQuoteRoot","BlockQuote","TEXT_STYLES","TextBlock","isFullscreen","spellCheck","reviewChangesHovered","setReviewChangesHovered","divElement","setDivElement","textPresence","handleChangeIndicatorMouseEnter","handleChangeIndicatorMouseLeave","anchor","innerPaddingProps","paddingX","outerPaddingProps","portableText","toolTipContent","blockActionsEnabled","changeIndicatorVisible","ToolbarCard","EditableCard","Scroller","EditableWrapper","l","$isFullscreen","useScrollSelectionIntoView","domRange","leafEl","startContainer","boundary","useSpellCheck","spellCheckOption","isChrome96","userAgent","dProps","Style","DefaultComponentWithFallback","FallbackComponent","DividerDiv","CollapseMenuDivider","CollapseOverflowMenu","disableRestoreFocusOnClose","menuButtonProps","menuOptions","onMenuClose","collapsedProps","expandedProps","dividerBefore","ObserveElement","onIntersectionChange","setEl","closest","FOCUS_RING_PADDING","OPTION_STYLE","OuterFlex","RowFlex","OptionObserveElement","_isReactElement","CollapseMenu","Children","AutoCollapseMenu","collapseText","gap","rootEl","setRootEl","expandedIntersections","setExpandedIntersections","collapsedIntersections","setCollapsedIntersections","intersectionOptions","root","menuOptionKeys","pendingIntersections","overflowingExpandedElements","optionElement","intersects","handleExpandedIntersection","currentState","handleCollapsedIntersection","currentElementIntersection","nextElementIntersection","collapsedElements","modeProps","overflowingCollapsedOptionElements","visibleMenuOptions","RenderHidden","elements","CollapseMenuButton","CustomIconDiv","CustomIcon","backgroundImage","inlineStyle","getPTEFormatActions","hotkeyOpts","shortCutKey","hotkeys","toggleMark","getPTEListActions","lists","toggleList","getAnnotationIcon","getPTEAnnotationActions","focusChild","hasText","aType","getPTEToolbarActionGroups","onInsertAnnotation","getBlockStyles","styles","styleComponent","getInsertMenuIcon","fallbackIcon","getInsertMenuItems","onInsertBlock","onInsertInline","blockItems","blockObjects","BlockElementIcon","inlineItems","inlineObjects","InlineElementIcon","annotationIcons","LinkIcon","formatIcons","BoldIcon","ItalicIcon","StrikethroughIcon","UnderlineIcon","CodeIcon","listStyleIcons","OlistIcon","UlistIcon","getActionIcon","UnknownIcon","useFocusBlock","usePortableTextEditorSelection","focusBlock","useActionGroups","onMemberOpen","addAnnotation","handleInsertAnnotation","useActiveActionKeys","isAnnotationActive","hasListStyle","isMarkActive","a_0","useActiveStyleKeys","hasBlockStyle","i_0","CollapseMenuMemo","ActionMenu","disabledProp","isSelectingMultipleBlocks","isVoidBlock","isEmptyTextBlock","actionIndex","firstInGroup","activeKeys","handleMenuClose","tooltipPlacement","annotationDisabled","annotationDisabledText","MenuButtonMemo","StyledMenuItem","TEXT_STYLE_OPTIONS","emptyStyle","BlockStyleSelect","popoverProperties","_disabled","activeItems","_activeItems","_items","menuButtonText","toggleBlockStyle","renderStyle","isVoidFocus","upperFirst","StyleSelectBox","StyleSelectFlex","ActionMenuBox","$withInsertMenu","FullscreenButtonBox","SLOW_INITIAL_VALUE_LIMIT","InnerToolbar","actionGroups","blockStyles","insertMenuItems","onToggleFullscreen","showActionMenu","showInsertMenu","rootElementRect","showBlockStyleSelect","useRovingFocus","preventEditorBlurOnToolbarMouseDown","CollapseIcon","ExpandIcon","Toolbar","isSlow","type_0","insertBlock","handleInsertBlock","type_1","initialValue_0","insertChild","handleInsertInline","noOutlineStyle","FORM_BUILDER_DEFAULT_ID","PlaceholderWrapper","renderDecorator","renderListItem","Editor","hideToolbar","initialSelection","onPaste","rangeDecorations","renderChild","renderEditable","setPortalElement","ariaDescribedBy","useBoundaryElement","renderPlaceholder","scrollSelectionIntoView","editableProps","defaultRender","defaultRenderProps","editable","handleToolBarOnMemberOpen","collapsibleToolbar","useHotkeys","initialHotkeys","defaultHotkeys","bb7","useTrackFocusPath","portableTextMemberItems","elementRefs","focusedItem","openItem","relatedEditorItem","isTextBlock","isBlockFocusPath","textBlockChildKey","isSpanTextFocusPath","isTextChildFocusPath","m_0","rootStyle","PreviewSpan","invalid","InlineObjectToolbarPopover","inlineObjectFocused","inlineObjectOpen","onOpenInlineObject","onRemoveInlineObject","parseResponsiveWidth","parseModalType","_getModalOption","raw","DefaultEditDialog","contentElement","setContentElement","RootPopover","ContentScrollerBox","ContentHeaderBox","PopoverEditDialog","isClosedRef","handleFocusLockWhiteList","ObjectEditModal","defaultType","schemaModalOption","modalType","modalTitle","modalWidth","InlineObject","selfSelection","DefaultInlineObjectComponent","popoverTitle","fallbackTitle","AnnotationObjectEditModal","openAnnotation","Compositor","wrapperElement","setWrapperElement","handleToggleFullscreen","editorHotkeys","_renderBlockActions","_renderCustomMarkers","portalElement","blockFocused","blockPath","blockSchemaType","renderTextBlock","blockProps_0","blockFocused_0","blockPath_0","blockSelected","blockSchemaType_0","blockValue","renderObjectBlock","blockProps_1","block_0","editorRenderBlock","childProps","childFocused","selected_0","childSchemaType","editorRenderChild","children_1","aPath","selected_1","aSchemaType","editorRenderAnnotation","editorNode","usePortal","portalElements","editorFocused","PortableTextMarkersProvider","PortableTextMemberItemsProvider","memberItems","InvalidValue","onIgnore","resolution","PTEInvalidValueId","PTEInvalidValueDescription","handleOnIgnore","DOT_SIZE","CONTENT_BOX_VARIANTS","scaleX","CONTENT_BOX_TRANSITION","CONTENT_TEXT_VARIANTS","CONTENT_TEXT_TRANSITION","CursorLine","$tints","CursorDot","UserBox","UserText","UserPresenceCursor","usePresenceCursorDecorations","fieldPresence","currentPresence","setCurrentPresence","presenceCursorDecorations","setPresenceCursorDecorations","previousPresence","rangeDecoration","newSelection","handleRangeDecorationMoved","nextPresence","p_0","filteredNext","filteredPrevious","decorations","cursorPoint","onMoved","d_0","parentType","usePatches","patchChannel","filteredPatches","_startsWith","patch_0","shouldReset","_shouldReset","_getValueAtPath","_isSegmentEqual","segment1","segment2","segment1Type","subjectPath","checkPath","_isAncestor","path1","path2","keyGenerator","EditorRefPlugin","portableTextEditor","portableTextEditorRef","PortableTextInput","editorRef","editorRefProp","initialActive","initialFullscreen","onEditorChange","onFullScreenChange","rangeDecorationsProp","defaultEditorRef","ignoreValidationError","setIgnoreValidationError","invalidValue","setInvalidValue","setIsFullscreen","setIsActive","setHasFocusWithin","setReady","setFocusPathFromEditorSelection","nextSelection","nextFocusPath","handleEditorChange","toFormPatches","handleIgnoreInvalidValue","respondToInvalidContent","RespondToInvalidContent","handleActivate","previousRangeDecorations","readyTasks","eventType","hasHtml","getData","boldDecorator","codeDecorator","italicDecorator","strikeThroughDecorator","defaultStyle","blockquoteStyle","headingStyle","orderedListStyle","unorderedListStyle","EditorChangePlugin","handleEditorEvent","PatchesPlugin","useEditor","UpdateValuePlugin","UpdateReadOnlyPlugin","verticalAlign","boxShadow","Input","TagBox","TagInput","placeholderProp","rootRef","isHTMLElement","handleRootPointerDown","handleInputBlur","handleInputChange","handleInputFocus","handleInputKeyDown","newValue_0","handleTagRemove","inputElement_0","tagIndex","Tag","handleRemoveClick","TagsArrayInput","tagInputValue","PRIMITIVES","isStringArray","isTagsArray","resolveArrayInput","toSelectItem","isTitledListValue","EMPTY_ITEM","SelectInput","currentItem","isRadio","itemFromOptionValue","optionValueFromItem","nextItem","handleSelectChange","RadioSelect","customValidity","Layout","RadioSelectItem","resolveNumberInput","resolveStringInput","resolveComponentFromTypeVariants","defaultResolveInputComponent","componentFromTypeVariants","deduped","subType","defaultResolvePreviewComponent","BUTTON_CARD_STYLE","PreviewItem","ReferenceItemRefProvider","ReferenceItem","setMenuButtonRef","issues","defaultResolveItemComponent","defaultRenderAnnotation","defaultResolveAnnotationComponent","defaultRenderBlock","Block","defaultResolveBlockComponent","defaultRenderInlineBlock","InlineBlock","defaultResolveInlineBlockComponent","defaultRenderField","defaultRenderInput","defaultRenderItem","defaultRenderPreview","FormBuilderInputErrorBoundary","handleRetry","ErrorCard","SchemaError","callStack","componentStack","useHotModuleReload","orientationChange$","resize$","scroll$","ROOT_MARGIN_PX","isIntersectionObserverSupported","IntersectionObserverEntry","intersectionRatio","intersectionObservableFor","createIntersectionObserverBased","createLegacyBased","intersectionObserverEntriesSubject","getViewport","innerWidth","innerHeight","viewport","inViewport","isElementInViewport","visibilityChange$","useVisibility","hideDelay","setVisible","checkVisibility","isDocumentVisible$","inViewport$","isDocumentVisible","isVisible","Document","_HIDE_DELAY","_extractUploadState","_resolveUploadValue","getStringOrUndefined","initiated","updated","fileType","previewImage","PreviewLoader","styleProp","DefaultCustomMarkers","missingPatchChannel","FormBuilderProvider","__internal_fieldActions","__internal_patchChannel","changesOpen","collapsedFieldSets","collapsedPaths","filterField","unstable","FormProvider","form","useInputComponent","useFieldComponent","usePreviewComponent","useItemComponent","useBlockComponent","useInlineBlockComponent","useAnnotationComponent","FormBuilder","fieldName_1","fieldSetName","fieldSetName_0","RootInput","isRoot","overlay","PreviewContainer","BlockObjectActionsMenu","isTabbing","ReferenceLink","referenceLink","EyeOpenIcon","BlockObject","isDeleting","DefaultBlockObjectComponent","isImagePreview","handleDoubleClickToOpen","DefaultBlockTextComponent","inlineBlock","useResolveDefaultComponent","componentResolver","DefaultResolvedComponent","parentTypeProps","restSchemaType","ParentTypeResolvedComponent","DefaultInput","DefaultField","DefaultItem","DefaultBlock","DefaultInlineBlock","DefaultAnnotation","pickInputComponent","plugin","pickFieldComponent","pickPreviewComponent","pickItemComponent","pickBlockComponent","pickInlineBlockComponent","pickAnnotationComponent","PreviewComponent","INCLUDE_FIELDS_QUERY","INCLUDE_FIELDS","INVALID_PREVIEW_FALLBACK","debounceCollect","queue","flush","queueItem","currentlyFlushingQueue","queueItemIds","collectedArgs","MAX_DOCUMENT_ID_CHUNK_SIZE","chunkDocumentIds","chunk","chunkSize","chunks","mutConcat","createPreviewAvailabilityObserver","hasRev","fetchDocumentReadability","uniqueIds","fetchDocumentReadabilityChunked","draftReadability","publishedReadability","versionReadability","createGlobalListener","includePreviousRevision","includeMutations","createObserveDocument","mutationChannel","getBatchFetcher","batchFetchDocuments","observeDocument","_apiConfig","fetchDocument","applyMutationEvent","DEFAULT_PREVIEW_PATHS","isPortableTextPreviewValue","extractTextFromBlocks","firstBlock","isPortableTextSpan","PRESERVE_KEYS","errorCollector","errorsByType","getAll","reportErrors","groupCollapsed","hasPrepare","isRenderable","assignType","FIELD_NAME_VALIDATORS","prefixType","validateFieldValue","fieldValue","validatePreparedValue","preparedValue","validateReturnedPreview","returnValue","defaultPrepare","invokePrepare","withErrors","selectedValue","hasEnumListOptions","listOptions","getListOptions","rawValue","hasCustomPrepare","typeWithFields","targetFieldName","valueField","selectedOption","prepareResult","returnValueResult","createPreviewObserver","createObservePathsDocumentPair","ALWAYS_INCLUDED_SNAPSHOT_PATHS","snapshotPaths","createDocumentIdSetObserver","queryFilter","insertOption","fetchFilter","sortedIndex","hasEqualFields","otherObject","isUniqueBy","itemSelector","currItem","combineSelections","stringifyId","maybeEscape","toSubQuery","allFields","toQuery","combinedSelections","reassemble","queryResult","reprojected","subResult","resultIdx","found","currentDatasetClient","invalidationChannel","fetchAllDocumentPathsWith","useReleaseVersion","batchFetchersCache","getBatchFetchersForPerspective","batchFetchers","fast","slow","currentDatasetListenFields","fetchDocumentPathsFast","fetchDocumentPathsSlow","hasPerspective","fetchId","getBatchFetcherForDataset","fetchAll","CROSS_DATASET_PREVIEW_POLL_INTERVAL","visiblePoll$","visibilityState","crossDatasetListenFields","createCachedFieldObserver","changes$","cachedObserveFields","existingObservers","cachedFieldObserver","cachedFieldObservers","pickFrom","objects","getFirstFieldValue","createDocumentPreviewStore","globalListener","observeDocumentIdSet","observePathsDocumentPair","unstable_observeDocuments","unstable_observePathsDocumentPair","useObserveDocument","perspectiveSnapshot","versionOrDraftId","preparedVersionSnapshot","main","getMissingDocumentFallback","isCoreUiRenderingContext","maybeCoreUiRenderingContext","INITIAL_URL_SEARCH","CORE_UI_MODE_NAME","CORE_UI_CONTEXT_SEARCH_PARAM","coreUiRenderingContext","urlSearch","renderingContext","serializedContext","coreUirenderingContext","DEFAULT_RENDERING_CONTEXT","defaultRenderingContext","capabilitiesByRenderingContext","coreUi","globalUserMenu","globalWorkspaceControl","listCapabilities","createRenderingContextStore","capabilities","DocumentDesynced","HighListenerLatencyOccurred","getDocumentValuePermissions","stateReducer","prevResult","useDocumentValuePermissions","specifiedGrantsStore","subscriptionRef","permissions$","refCountDelay","asapScheduler","connectable","connectableSubscription","connectorSubscription","notifier","step","connect","using","DEBUG_PREFIX","hashchange$","debugParams$","debugRolesParam$","administrator","developer","contributor","viewer","requiresApproval","restricted","DEBUG_ROLE_GRANTS_MAP","grants","write","debugGrants$","roleName","getDatasetGrants","getParams","PARSED_FILTERS_MEMO","matchesFilter","evalParams","evaluate","createGrantsStore","datasetGrants$","currentUserDatasetGrants","debugGrants","grantsPermissionOn","matchingGrants","grant","foundMatch","getTemplatePermissions","templateItems","serializedItem","resolvedInitialValue","initialDocumentId","observables","useTemplatePermissionsFromHookFactory","useTemplatePermissions","useTemplates","canMergeEdit","CHUNK_WINDOW","isWithinMergeWindow","mergeChunk","draftState","combineState","publishedState","endTimestamp","startTimestamp","authors","getChunkState","modified","isDeletePatch","getChunkType","draftEffect","publishedEffect","chunkFromTransaction","modifiedDraft","modifiedPublished","draftDeleted","publishedDeleted","isSameAnnotation","getAttrs","ArrayContentWrapper","extractor","wrapValue","annotationAt","meta","metas","fromMeta","ObjectContentWrapper","StringContentWrapper","sliceAnnotation","lst","subStart","subEnd","fromValue","extractAnnotationForFromInput","timeline","firstChunk","annotationForTransactionIndex","transactionIndex","extractAnnotationForToInput","chunkIdx","transactionByIndex","chunkByTransactionIndex","diffValue","fromRaw","toRaw","fromInput","endMeta","toInput","startMeta","diffInput","TwoEndedArray","_postive","_negative","addToEnd","elem","addToBeginning","mergeAtEnd","merger","lastIdx","mergeAtBeginning","firstIdx","removeFromEnd","pop","Timeline","reachedEarliestEntry","_transactions","_chunks","_possiblePendingTransactions","enableTrace","_trace","__sanityTimelineTrace","chunkCount","mapChunks","mapper","_recreateTransactionsFrom","addRemoteMutation","_invalidateTransactionFrom","addTranslogEntry","didReachEarliestEntry","updateChunks","_removeInvalidatedChunks","_addChunksFromTransactions","_createInitialChunk","nextTransactionToChunk","firstTransactionChunked","firstTx","initialChunk","parseTimeId","idSegments","timestampStr","chunkId","findLastPublishedBefore","currentChunk","isLatestChunk","createTimeId","lastChunk","startChunkIdx","replayBackwardsBetween","replayBackwardsUntil","calculateDiff","initialDoc","finalDoc","draftValue","incremental","publishedValue","initialAttributes","preDraftValue","prePublishedValue","didHaveDriaft","getType","haveDraft","rebaseValue","finalAttributes","emptyVersionState","hasAttrs","aligned","startFromSnapshot","Aligner","earliestTransactionId","_states","appendRemoteSnapshotEvent","_maybeInvalidateHistory","_apply","prependHistoryEvent","acceptsHistory","_alignAtIndex","isAligned","_isComplete","mutEvt","Reconstruction","same","endAttributes","endDocument","_endDocument","startAttributes","startDocument","_startDocument","_diff","TimelineController","selectionState","_aligner","markChange","_fetchMore","_fetchAtLeast","_isRunning","_isSuspended","_didErr","_since","_sinceTime","_revTime","clearRange","setRange","since","setRevTime","setSinceTime","targetRev","setReconstruction","setLoadMore","sinceTime","revTime","realRevChunk","onOlderRevision","findRangeForNewRev","revTimeId","sinceChunk","findRangeForNewSince","revChunk","sinceAttributes","_reconstruction","displayed","currentDiff","currentObjectDiff","handleRemoteMutation","resume","suspend","fetchMoreTransactions","tid","documentRevisionCache","getHistory","getDocumentAtRevision","getTimelineController","getTransactions","getAllRefIds","jsonReduce","jsonMap","mapFn","mappedValue","mapRefNodes","removeMissingReferences","existingIds","refNode","targetDocumentId","documentAtRevision","existingIdsQuery","restoredDraft","replaceDraftAction","createHistoryStore","useTimelineSelector","timelineStore","useSyncExternalStoreWithSelector","INITIAL_TIMELINE_STATE","hasMoreChunks","isPristine","lastNonDeletedRevId","timelineDisplayed","timelineReady","useTimelineStore","useHistoryStore","snapshotsSubscriptionRef","timelineStateRef","timelineController$","innerController","findRangeForRev","findRangeForSince","lastNonDeletedChunk","deepEquals","timelineState","handleIncomingMessage","session","locations","createBifurTransport","incomingEvents$","dispatchMessage","USERIDS","PATHS","mock$","sample","KEY","generate","nanoid","sessionStorage","setSessionId","SESSION_ID","createPresenceStore","connectionStatusStore","presenceEvents$","sendMessage","currentLocation$","locationChange$","setLocation","nextLocation","reportLocations","requestRollCall","rollCallRequests$","reportLocationInterval$","reportLocation$","auditTime","myRollCall$","connectionChange$","statusType","debugPresenceParam$","useMock$","switchMapTo","debugIntrospect$","syncEvent$","stateEventToSession","stateEvent","states$","keyed","allSessions$","keyedSessions","sessions","userIds","sess","getUsers","users","userSessionPairHasUser","globalPresence$","userAndSessions","debugIntrospect","userAndSession","allDocumentsPresence$","allPresence","createProjectStore","getDatasets","useProject","projectStore","useProjectStore","useProjectDatasets","INTERNAL_USER_IDS","createUserStore","userLoader","batchScheduleFn","raf","maxBatchSize","userFromCurrentUser","profileImage","loadMany","IGNORE_LATENCY_BELOW_MS","handleSyncErrorRecovery","errorName","handleReportLatency","latency","useConnectionStatusStore","useRenderingContextStore","renderingContextStore","useGlobalPresence","EventsProvider","useEvents","EventsContext","isCreateDocumentVersionEvent","isDeleteDocumentVersionEvent","isPublishDocumentVersionEvent","isUnpublishDocumentEvent","isScheduleDocumentVersionEvent","isUnscheduleDocumentVersionEvent","isDeleteDocumentGroupEvent","isCreateLiveDocumentEvent","isUpdateLiveDocumentEvent","isEditDocumentVersionEvent","newEvents","existingEvent","addEventId","documentVariantType","versionRevisionId","addParentToEvents","eventsWithParent","parentId","MERGE_WINDOW","squashLiveEditEvents","previousEvent","remoteMutationToTransaction","updateVersionEvents","updatePublishedEvents","sortEvents","remoteEdits","expandedEvents","createEventsObservable","releases$","remoteEdits$","expandedEvents$","eventsWithRemoteEdits","getDocumentTransactions","skipFromTransaction","nextTransactions","buildDocumentForDiffInput","finalDocument","removeDuplicatedTransactions","getDocumentChanges","eventsObservable$","to$","since$","remoteTransactions$","lastResolvedSince","lastResolvedTo","lastTransactions","toObs","sinceDoc","selectedToEvent","remoteTx","getEffectState","deleted","getEditTransaction","getEditEvents","editTransactions","contributors","lastEvent","getExpandEvents","expandedEventsMap$","expandedEventsMap","handleExpandEvent","editEvent","getInitialFetchEvents","fetchTransactions","eventWithRevision","getRemoteTransactionsSubscription","isLiveEdit","onRefetch","onMutationReceived","remoteMutation","variant","effectState","createEventsStore","initialEvents","revision$","loadMoreEvents","remoteTransactionsListener","useEventsStore","eventsStore","releaseEvent","sinceId","lastPublishedId","revisionEventIndex","getChangesList","sinceRevision","findRangeForRevision","nextRev","currentRevisionIndex","sinceIndex","nextSince","expandEvent","TIMELINE_ICON_COMPONENTS","createDocumentVersion","AddCircleIcon","createLiveDocument","deleteDocumentGroup","deleteDocumentVersion","editDocumentVersion","updateLiveDocument","publishDocumentVersion","scheduleDocumentVersion","unscheduleDocumentVersion","CircleIcon","TIMELINE_ITEM_EVENT_TONE","TIMELINE_ITEM_I18N_KEY_MAPPING","UserAvatarStack","$color","RELATIVE_TIME_OPTIONS","NameSkeleton","UserLine","ChangesBy","showChangesBy","IconComponent","updatedTimeAgo","formattedTimestamp","DiffTooltip","DiffTooltipWithAnnotation","AnnotationItem","$annotationColor","EMPTY_PATH","DiffCard","annotationProp","disableHoverEffect","RoundedCard","AnnotationText","ChangeTitleSegment","hasMoved","readableIndex","CreatedTitleSegment","DeletedTitleSegment","MovedTitleSegment","indexDiff","indexSymbol","positions","ChangeBreadcrumb","titleSegment","showIndex","isThenable","useCheckCondition","checkProperty","checkPropertyName","isTrueIsh","useConditionalProperty","checkPropertyKey","valueProp","resolveJSType","getArrayDiffItemType","resolveArrayMemberType","fromType","declared","ANNOTATION_SYMBOLS","CHILD_SYMBOL","DECORATOR_SYMBOLS","EMPTY_BLOCK_SYMBOL","INLINE_SYMBOLS","TRAILING_SPACE_SYMBOL","SEGMENT_START_SYMBOL","hasPTMemberType","isPTSchemaType","startMarkSymbols","TextSymbols","endMarkSymbols","allSymbols","symbolRegex","segmentRegex","isHeader","findChildDiff","childDiff","getChildSchemaType","getDecorators","spanSchemaType","isDecorator","blockToSymbolizedText","decoratorMap","annotationMap","inlineMap","returned","textDiff","findSpanDiffFromChild","mark","createPortableTextDiff","displayValue","getAllMarkDefs","markDef","getInlineObjects","fromText","toText","toPseudoValue","fromPseudoValue","buildSegments","dmpDiffs","cleanupEfficiency","makeDiff","fromIdx","toIdx","DIFF_EQUAL","DIFF_DELETE","DIFF_INSERT","newSegments","markMatches","allChildren","cld","previousChildren","oCld","findAnnotationDiff","markDefKey","markDefs","escapeRegExp","allDefs","oDef","getPrintableType","nativeType","getValueError","messageKey","isObjectValue","fieldError","isFieldChange","isGroupChange","isAddedItemDiff","isRemovedItemDiff","isUnchangedDiff","diffResolvers","BooleanFieldDiff","showFromValue","useDocumentChange","showToValue","DatetimeWrapper","DatetimePreview","formatDateTime","DatetimeFieldDiff","documentChange","DocumentChangeContext","useRefValue","getSizeDiff","increase","getHumanFriendlyBytes","SizeDiff","solid","FileFieldDiff","fromAsset","toAsset","maximumFractionDigits","formatUnit","useUnitFormatter","ignoredFields","didAssetChange","changedFields","pctDiff","prevSize","nextSize","cardStyles","name_0","field_1","hexToRgba","simpleHash","char","getDeviceDpr","devicePixelRatio","HotspotCropSVG","cropColor","hotspotColor","CropSVG","rectProps","vectorEffect","HotspotSVG","cx","cy","rx","ry","ellipseProps","ASSET_FIELDS","NoImagePreview","ImageWrapper","HotspotDiff","imageError","setImageError","assetIsDeleted","imageSource","assetChanged","printAction","metaAction","isDefaultCrop","isDefaultHotspot","IMAGE_META_FIELDS","BASE_IMAGE_FIELDS","CARD_STYLES","ImageFieldDiff","fromRef","toRef","assetAnnotation","assetAction","didCropChange","didHotspotChange","didMetaChange","showImageDiff","showMetaChange","imageDiff","getChangeDescription","NumberWrapper","NumberPreview","NumberFieldDiff","InlineBox","InlineText","PopoverContainer","AnnotationWrapper","AnnnotationWithDiff","DiffContext","isRemoved","emptyObject","annotationPath","myPath","myValue","handleOpenPopup","popoverContent","annotationType","Quote","Blockquote","headingSizes","StyledHeading","Heading","StyledParagraph","Paragraph","fromStyle","toStyle","DecoratorWrapper","decoration","InlineObjectWrapper","InlineObjectWithDiff","FOCUS_TERMINATOR","inlineObjectType","diffWithFallback","TextWithDiff","spanSegment","rSeg","diffCard","decoratorSymbolsStart","decoratorSymbolsEnd","annotationSymbolsStart","annotationSymbolsEnd","allSymbolsStart","allSymbolsEnd","allDecoratorSymbols","markRegex","ptDiffChild","decoratorTypes","childrenDiff","returnedChildren","annotationSegments","isEmptyTextChange","childToIndex","segIndex","activeAnnotations","endedAnnotation","allMarkDefs","isInline","isMarkStart","isMarkEnd","isChildStart","indexOfSymbol","sym","originChild","objectSchemaType","objectDiff","getChildFromFromValue","renderTextSegment","lastChild","annotationDiff","spanDiff","activeMarks","renderDecorators","fromPtDiffText","indirectMarksAnnotation","marksDiff","marksAnnotation","marksChanged","ptDiffMatchString","controlString","toTest","aSet","lastIndexOf","xor","PTDiff","ptDiff","ReferenceWrapper","ReferenceFieldDiff","StringWrapper","StringPreview","StringFieldDiff","defaultComponents","showHeader","resolveDiffComponent","itType","tryResolve","defaultComponentKey","resolvers","buildChangeList","parentSchema","buildObjectChangeList","buildArrayChangeList","getFieldChange","diffContext","fieldSets","single","buildFieldChange","buildFieldsetChangeList","reduceTitlePaths","fieldFilter","fieldTitlePath","fieldSetHidden","fieldsetReadOnly","fieldSetTitlePath","changedOrMoved","memberTypes","itemContext","parentDiff","itemTitlePath","attachItemDiff","siblings","diffComponent","byLength","isAddedAction","flattenChangeNode","changeNode","newSubChanges","cChange","isSubpathOf","subPath","pathSegmentOfCorrectType","diffOptions","lengthThresholdAbsolute","lengthThresholdRelative","undoChange","rootDiff","documentOperations","allChanges","unsetChanges","buildUnsetPatches","unsetChange","buildMovePatches","buildUndoPatches","buildUnsetPatch","concurrentUnsetPaths","previousValue","furthestEmptyAncestor","ignorePaths","initialPath","ancestorPath","ancestorValue","updatedIgnorePaths","isStub","parentValue","getFromItem","insertLocation","prevSegment","after","diffItem","inserts","unsets","stubbedPaths","stubs","hasSets","sets","getParentStubs","stubbed","pathStr","nextSegment","nextIsArrayElement","getStubValue","indexAtPrev","prevSeg","onlyContainsStubs","isIgnoredPath","ignorePath","ChangeListWrapper","DiffErrorBoundary","getDerivedStateFromError","componentDidCatch","arrowComponents","down","ArrowDownIcon","ArrowRightIcon","FromToArrow","ArrowComponent","Meta","DiffInspectWrapper","isHovering","isInspecting","setIsInspecting","toggleInspect","onKeyDown","MetaLabel","DiffInspector","printMeta","jsonify","useChangeVerb","hadPrevValue","hasValue","hasNextValue","INLINE_COLUMN_STYLES","BLOCK_COLUMN_STYLES","FLEX_ALIGN","FromTo","layoutStyles","columnStyles","DiffFromTo","cardClassName","previewComponent","changeVerb","FallbackPreview","FallbackDiff","FieldChangeContainer","DiffBorder","RevertChangesButton","changeCount","RevertIcon","ValueError","FieldChange","DiffComponent","isComparingCurrent","ops","confirmRevertOpen","setConfirmRevertOpen","revertHovered","setRevertHovered","handleRevertChanges","handleRevertChangesConfirm","closeRevertChangesConfirmDialog","handleRevertButtonMouseEnter","handleRevertButtonMouseLeave","useHover","handleMouseOver","handleMouseOut","GroupChangeContainer","GroupChange","groupPath","isNestedInDiff","revertButtonRef","isRevertButtonHovered","docOperations","change_0","ChangeResolver","isHidden","isReadOnly","NoChanges","ChangeList","confirmRevertAllOpen","setConfirmRevertAllOpen","confirmRevertAllHover","setConfirmRevertAllHover","maybeFlatten","rootChange","revertAllChanges","handleRevertAllChangesClick","handleRevertAllChangesMouseEnter","handleRevertAllChangesMouseLeave","closeRevertAllChangesConfirmDialog","revertAllContainerElementRef","showFooter","ChangesError","ChangeSegment","DiffStringSegment","DiffString","segmentIndex","MetaText","MetaInfo","markRemoved","otherObj","ArrayOfOptionsFieldDiff","isPresent","sortItems","wasPresent","isInArray","getItemTitle","resolveMemberType","getOptionIndex","ItemPreview","jsType","isNamedOption","SlugWrapper","SlugPreview","SlugFieldDiff","UrlFieldDiff","diffResolver","GetFormValueProvider","GetFormValueContext","copyAction","isDocument","fieldTitle","pasteAction","ClipboardIcon","documentFieldActionsReducer","documentFieldActions","unstable_fieldActions","initialDocumentFieldActions","defineDocumentInspector","SchedulePublishingStudioLayout","deprecatedScheduledPublishingPlugin","DEPRECATED_PLUGINS","plugins","currentConfig","rootConfig","allPlugins","deprecatedScheduledPublishing","referringDocuments","DEFAULT_FIELDS","useReferringDocuments","EMPTY_FIELDS","useLegacyReferringDocuments","AssetUsageList","DocumentLink","STYLE_ASSET_IMAGE","objectFit","objectPosition","STYLE_CONFIRM_CARD","gridColumn","alignSelf","STYLE_IMAGE_WRAPPER","ConfirmMessage","AssetDeleteDialog","onDelete","drafts","doc_0","AssetMenu","triggerButtonMode","triggerButtonTone","AssetUsageDialog","MIME_TYPES","convertMimeTypeToSomethingNice","formatMimeType","CardIconWrapper","CustomFlex","CustomCard","RowButton","TypeText","STYLES_ROW_CARD","STYLES_ICON_CARD","STYLES_BUTTON_TEXT","STYLES_ASSETMENU_WRAPPER","AssetRow","deleteRef$","showUsageDialog","setShowUsageDialog","showDeleteDialog","setShowDeleteDialog","setIsDeleting","setIsOpen","onDeleteFinished","isMobile","formattedTime","formattedMimeType","formattedSize","showTooltip","handleConfirmDelete","handleDeleteError","handleDeleteSuccess","handleDeleteAsset","handleDialogClose","handleToggleUsageDialog","handleToggleOpen","handleMenuAction","usageDialog","deleteDialog","ChevronUpIcon","STYLES_FILENAME","STYLES_GRID","FileListView","selectedAssets","DPI","MenuContainer","AssetThumb","imgH","ThumbGrid","ImageListView","onItemClick","onItemKeyPress","PER_PAGE","ASSET_TYPE_IMAGE","ASSET_TYPE_FILE","buildFilterQuery","acceptParam","WILDCARD_ACCEPT","typesForFilter","acceptTypes","acceptValue","wildcards","extensions","mimes","buildQuery","filterCondition","CardLoadMore","DefaultAssetSource","_elementId","currentPageNumber","fetch$","setAssets","isLastPage","setIsLastPage","hasResetAutoFocus","setHasResetFocus","isImageOnlyWildCard","pageNumber","isImageAssetType","assetTypeParam","fetchPage","prevState_0","handleDeleteFinished","id_0","id_1","handleItemClick","id_2","handleItemKeyPress","handleFetchNextPage","DefaultSource","uniqueId","FileSource","DocumentsIcon","ImageSource","initialDocumentBadges","initialDocumentActions","initialLanguageFilter","schemaTypesReducer","resolveProductionUrlReducer","resolveProductionUrl","productionUrl","toolsReducer","schemaTemplatesReducer","schemaTemplates","localeDefReducer","localeBundlesReducer","documentBadgesReducer","documentBadges","badges","documentActionsReducer","documentActions","newDocumentOptionsResolver","resolveNewDocumentOptions","newDocumentOptions","fileAssetSourceResolver","imageAssetSourceResolver","documentLanguageFilterReducer","resolveDocumentLanguageFilter","unstable_languageFilter","documentInspectorsReducer","resolveInspectorsFilter","inspectors","documentCommentsEnabledReducer","innerConfig","unstable_comments","onUncaughtErrorResolver","pluginConfig","onUncaughtError","errorInfo","internalTasksReducer","__internal_tasks","footerAction","eventsAPIReducer","mediaLibraryEnabledReducer","mediaLibrary","mediaLibraryLibraryIdReducer","serverDocumentActionsReducer","partialIndexingEnabledReducer","legacySearchEnabledReducer","enableLegacySearch","searchStrategyReducer","flattenedConfig","implicit","explicit","currentImplicit","currentExplicit","isSearchStrategy","received","startInCreateEnabledReducer","startInCreateEnabled","createFallbackOriginReducer","fallbackStudioOrigin","announcementsEnabledReducer","announcements","resolveConfigProperty","inputConfig","reducers","configs","reducer","asyncReducer","createSanityI18nBackend","loadable","loadBundles","loadBundleResources","deep","overwrite","deepExtend","maybeUnwrapModule","targetLeaf","sourceLeaf","targetIsString","isStringLeaf","sourceIsString","sourceIsArray","targetIsArray","maybeModule","isWrappedModule","mod","prepareI18n","sourceName","normalizeResourceBundles","createI18nApi","namespaceNames","getI18NextOptions","i18nInstance","createI18nInstance","use","initReactI18next","reducedLocales","reduceLocaleDefinition","hasLoadedNamespace","lang","defaultOptions","react","bindI18nStore","preferredLocaleId","preferredLocale","lastLocale","definition","CheckmarkCircleIcon","StringIcon","NumberIcon","BlockContentIcon","ReferencePreviewTitle","SearchButtonValueDate","includeTime","SearchButtonValueDateLast","unitValue","SearchButtonValueDateRange","startDate","endDate","SearchButtonValueReference","SearchFilterNumberInput","uncontrolledValue","setUncontrolledValue","numValue","SearchFilterNumberRangeInput","setTo","setFrom","handleToChange","numValue_0","handleFromChange","autocompletePopoverReferenceElementRef","autocompleteId","setHits","placeholderText","searchQuery","SearchFilterReferenceInput","referenceValue","menuItemText","SearchFilterStringListInput","o","GteIcon","GtIcon","LteIcon","LtIcon","defineSearchOperator","arrayOperators","arrayCountEqual","arrayCountGt","arrayCountGte","arrayCountLt","arrayCountLte","arrayCountNotEqual","arrayCountRange","arrayListIncludes","arrayListNotIncludes","arrayReferenceIncludes","arrayReferenceNotIncludes","AssetSourceError","FileReferencePreview","FilePreview","ImageReferencePreview","handleLoad","AssetPreview","ASSET_TYPE","ContainerBox","SearchFilterAssetInput","selectedAssetFromSource","setSelectedAssetFromSource","handleCloseAssetSource","handleSelectAssetSource","AssetSourceComponent","buttonText","UndoIcon","assetOperators","assetFileEqual","assetFileNotEqual","assetImageEqual","assetImageNotEqual","SearchFilterBooleanInput","booleanOperators","booleanEqual","TimeLabelText","DateIncludeTimeFooter","useCalendar","CalendarContext","CalendarHeader","monthFormatter","onNowClick","CircleSvg","selectedEndDate","selectRange","isStartDate","isEndDate","isFocused","isWithinRange","isAfter","MONTH_NAME_KEYS","SHORT_WEEK_DAY_KEYS","WEEK_DAY_NAME_KEYS","CustomGrid","firstWeekDay","weekdayDay","weekDayDate","calendarElement","setCalendarElement","selectEndValue","setSelectEndValue","previousDate","previousEndDate","milliseconds","dateIsBeforeStartDate","dateIsAfterEndDate","dateChanged","endDateChanged","onlyDateChanged","onlyEndDateChanged","dateIsAfterEndDate_0","dates","getDateISOString","dateOnly","roundDay","adjustedDate","FORMAT","exampleDate","ParsedDateTextInput","isDateTime","isDateTimeFormat","placeholderDate","setCustomValidity","inputValueDate","formattedPlaceholder","triggerOnChange","dateParsed","validDate","processInputString","handleTextInputBlur","handleTextInputChange","handleTextInputClear","handleTextInputKeyDown","CommonDateDirectionInput","dateISOString","dateISOString_0","handleIncludeTimeChange","handleTextDateChange","SearchFilterDateAfterInput","SearchFilterDateBeforeInput","CommonDateEqualInput","SearchFilterDateEqualInput","UNIT_CHOICES","SearchFilterDateLastInput","dateUnit","dateValue","handleUnitChange","choice","PLACEHOLDER_START_DATE_OFFSET","CommonDateRangeInput","placeholderStartDate","placeholderEndDate","getStartAndEndDate","handleTextEndDateChange","handleTextStartDateChange","SearchFilterDateRangeInput","SearchFilterDateTimeAfterInput","SearchFilterDateTimeBeforeInput","SearchFilterDateTimeEqualInput","SearchFilterDateTimeRangeInput","COMMON","dateAfter","dateBefore","dateEqual","dateLast","dateNotEqual","dateRange","dateOperators","flooredValue","timestampAgo","months","years","startOfToday","dateTimeAfter","dateTimeBefore","dateTimeEqual","dateStart","dateEnd","endOfMinute","dateTimeLast","dateTimeNotEqual","dateTimeRange","definedOperators","defined","notDefined","numberOperators","numberEqual","numberGt","numberGte","numberLt","numberLte","numberNotEqual","numberRange","SearchFilterStringInput","portableTextOperators","portableTextEqual","portableTextMatches","portableTextNotEqual","portableTextNotMatches","referenceOperators","referenceEqual","referenceNotEqual","referencesAssetFile","referencesAssetImage","referencesDocument","slugOperators","slugEqual","slugMatches","slugNotEqual","slugNotMatches","stringOperators","stringEqual","stringListEqual","stringListNotEqual","stringMatches","stringNotEqual","stringNotMatches","searchOperators","commentsLocaleNamespace","commentsUsEnglishLocaleBundle","CommentsAuthoringPathProvider","authoringPath","setAuthoringPath","nextAuthoringPath","handleSetAuthoringPath","useCommentsIntent","CommentsIntentContext","useNotificationTarget","getCommentLink","workspaceTitle","getNotificationValue","commentId","TelephoneInput","resolveConditionalProperty","setAtPath","currentTree","MAX_FIELD_DEPTH","AUTO_COLLAPSE_DEPTH","ALL_FIELDS_GROUP","undefinedKey","nullKey","getId","resolveCallbackState","selfValue","normalizedSchemaMembers","childResult","fieldsetValue","groupResult","createCallbackResolver","stableTrue","callbackResult","serializedHash","createMemoizer","getPath","hashInput","memoizer","hashed","getCollapsedWithDefaults","isFieldEnabledByGroupFilter","groupsConfig","fieldGroup","castArray","isAcceptedObjectValue","isValidArrayOfObjectsValue","isValidArrayOfPrimitivesValue","everyItemIsObject","findDuplicateKeyEntries","seenKeys","everyItemHasKey","isChangedValue","comparisonValue","_isEqual","createPrepareFormState","memoizePrepareFieldMember","prepareFieldMember","fieldGroupState","memoizePrepareObjectInputState","prepareObjectInputState","memoizePrepareArrayOfPrimitivesInputState","prepareArrayOfPrimitivesInputState","memoizePrepareArrayOfObjectsInputState","prepareArrayOfObjectsInputState","memoizePrepareArrayOfObjectsMember","prepareArrayOfObjectsMember","memoizePrepareArrayOfPrimitivesMember","prepareArrayOfPrimitivesMember","memoizePreparePrimitiveInputState","preparePrimitiveInputState","fieldLevel","parentComparisonValue","normalizedFieldGroupNames","inSelectedGroup","fieldComparisonValue","scopedCollapsedPaths","scopedCollapsedFieldsets","scopedHidden","scopedReadOnly","inputState","defaultCollapsedState","duplicateKeyEntries","scopedCollapsedFieldSets","fieldState","enableHiddenCheck","schemaTypeGroupConfig","defaultGroupName","groupHidden","fieldsetHidden","fieldsetMembers","_inSelectedGroup","hasFieldGroups","filteredPresence","visibleMembers","visibleGroups","filtereredMembers","filteredFieldsetMembers","itemLevel","itemState","itemComparisonValue","prepareFormState","_prepareFieldMember","_prepareObjectInputState","_prepareArrayOfPrimitivesInputState","_prepareArrayOfObjectsInputState","_prepareArrayOfObjectsMember","_prepareArrayOfPrimitivesMember","_preparePrimitiveInputState","useFormState","inputReadOnly","prepareHiddenState","prepareReadOnlyState","reconcileFieldGroupState","reconciledFieldGroupState","reconcileCollapsedPaths","reconciledCollapsedPaths","reconcileCollapsedFieldsets","reconciledCollapsedFieldsets","isObjectFormNode","formNode","isArrayOfObjectsFormNode","hasAllMembers","_allMembers","getExpandOperations","getFieldsetAndFieldGroupOperations","getObjectFieldsetAndFieldGroupOperations","getArrayFieldsetAndFieldGroupOperations","schemaField","selectedGroupName","schemaFieldGroup","foundMember","getSanityCreateLinkMetadata","_create","isSanityCreateLinked","ejected","isSanityCreateLinkedDocument","isSanityCreateExcludedType","sanityCreate","exclude","isSanityCreateStartCompatibleDoc","INITIAL","useConnectionState","publishedDocId","docTypeName","isConnected","mapTo","useEditState","useValidationStatus","getSelectedPerspective","useDocumentForm","getFormDocumentValue","comparisonValueRaw","initialFocusPath","readOnlyProp","onFocusPath","validationRaw","onlyHasVersions","firstVersion","activeDocumentReleaseId","connectionState","useConnectionToast","setFocusPath","baseValue","setPresence","onSetOpenPath","onSetFieldGroupState","onSetCollapsedPath","onSetCollapsedFieldSets","handleOnSetCollapsedPath","handleOnSetCollapsedFieldSet","handleSetActiveFieldGroup","requiredPermission","docPermissionsInput","isNonExistent","isCreateLinked","isReleaseLocked","hasNoPermission","updateActionDisabled","isActionEnabled","createActionDisabled","reconnecting","isLocked","willBeUnpublished","patchRef","useInsertionEffect","toMutationPatches","formDocumentValue","formState","formStateRef","handleSetOpenPath","updatePresence","updatePresenceThrottled","focusPathRef","_nextFocusPath","disableBlurRef","_blurredPath","handleProgrammaticFocus","onProgrammaticFocus","onSetActiveFieldGroup","onSetCollapsedFieldSet","IS_NUMERIC","unquote","splitAttr","attr","coerce","parseGradientPath","focusPathStr","encodePath","formBuilderPath","arrayToJSONMatchPath","decodePath","gradientPath","toMutationPatch","fromMutationPatches","toFormBuilderPatches","notIn","matchPath","TransformPatches","callbacks","transformedPatches","findArrayItemIndex","buildCommentBreadcrumbs","fieldPaths","currentSchemaType","previousPath","conditionalContext","arrayItemIndex","isNumber","isArrayItem","objectType","objectField","currentField","anonymousField","objectFieldHidden","currentFieldHidden","useCommentHasChanged","prevMessage","hasCommentMessageValue","commentIntentIfDiffers","comment","parentIntent","isTextSelectionComment","buildCommentThreadItems","parentComments","parentCommentId","parentComment","replies","commentsCount","threadId","hasReferencedValue","crumbs","hasTextSelection","bc","DMP_MARGIN","diffText","diffs","levenshtein","diffsLevenshtein","makePatches","diffApply","toPlainTextWithChildSeparators","inputBlock","COMMENT_INDICATORS","COMMENT_INDICATORS_REGEX","buildRangeDecorationSelectionsFromComments","textSelections","selectionMember","matchedBlock","selectionText","textWithChildSeparators","diffedText","textWithoutCommentTags","oldCommentedText","newCommentedText","nullSelection","childIndexAnchor","anchorOffset","childIndexFocus","focusOffset","insertions","deletions","CommentRangeDecoration","currentHoveredCommentId","onHoverEnd","onHoverStart","selectedThreadId","decoratorRef","isNested","setIsNested","setParentCommentId","prevEl","previousSibling","nextEl","nextSibling","applyInlineCommentIdAttr","prevId","isNestedDecorator","buildCommentRangeDecorations","onDecorationClick","onDecorationHoverEnd","onDecorationHoverStart","onDecorationMoved","buildTextSelectionFromFragment","fragment","normalizedSelection","backward","fragmentBlock","originalBlock","anchorBlockKey","focusBlockKey","fragmentBlockText","toPlainText","fragmentStartSpan","fragmentEndSpan","originalTextBeforeSelection","startChildIndex","originalTextAfterSelection","mergeCommentReactions","reactionsA","reactionsB","mergedReactions","reaction","URL_REGEX","createLinkElement","linkMiddleware","middlewares","transformChildren","transformedItem","middleware","weakenReferences","weakenReferencesInContentSnapshot","createOperation","activeTool","documentRevisionId","getIntent","getThreadLength","onCreateError","currentThreadLength","nextComment","lastEditedAt","reactions","notification","tool","contentSnapshot","newAddonClient","createReactionKey","shortName","reactOperation","getComment","onUpdate","currentUserReactions","currentReaction","_optimisticState","reactionItem","addedAt","optimisticReactionItem","removeOperation","THROTTLE_TIME_MS","THROTTLE_SETTINGS","throttleFunctionsMap","getThrottledFunction","throttledFunction","postCommentUpdate","transactionIdProp","updateOperation","throttled","throttledProp","hasEditedMessage","editedComment","useCommentOperations","onTransactionStart","activeToolName","useRouterState","useTools","comment_0","updateOpts","nextTransactionId","handleUpdate","handleReact","routerState","useComments","CommentsContext","useCommentsAuthoringPath","CommentsAuthoringPathContext","useCommentsEnabled","CommentsEnabledContext","useCommentsOnboarding","CommentsOnboardingContext","BASE_SCROLL_OPTIONS","GROUP_SCROLL_OPTIONS","INLINE_COMMENT_SCROLL_OPTIONS","SCROLL_TO_FIELD_OPTIONS","SCROLL_TO_COMMENT_OPTIONS","SCROLL_OPTIONS_BY_TYPE","generateValidAttrValue","symbolsToRemove","applyCommentIdAttr","applyCommentsFieldAttr","applyCommentsGroupAttr","useCommentsScroll","scrollTarget","setScrollTarget","scrollOpts","handleScrollToComment","handleScrollToGroup","handleScrollToField","commentId_0","handleScrollToInlineComment","cancelAnimationFrame","scrollToComment","scrollToField","scrollToGroup","scrollToInlineComment","useCommentsSelectedPath","CommentsSelectedPathContext","CommentLinkCopied","CommentViewedFromLink","CommentListViewChanged","useCommentsTelemetry","commentLinkCopied","commentViewedFromLink","commentListViewChanged","useCommentsUpsell","CommentsUpsellContext","useResolveCommentsEnabled","featureEnabled","enabledFromConfig","createCommentsSet","commentsReducer","commentsById","nextCommentResult","nextCommentValue","_state","restComments","updatedComment","optimisticReactions","incomingReactions","nextReactions","LISTEN_OPTIONS","QUERY_FILTERS","VERSION_FILTER","NO_VERSION_FILTER","useCommentsStore","onLatestTransactionIdReceived","transactionsIdMap","setLoading","didInitialFetch","initialFetch","handleListenerEvent","latestTransactionId","isLatestTransaction","listener$","EMPTY_COMMENTS_DATA","CommentsProvider","isCommentsOpen","onCommentsOpen","onClearSelectedComment","selectedCommentId","isConnecting","mentionsDisabled","commentsEnabled","isCreatingDataset","workspaceName","handleOnLatestTransactionIdReceived","commentDocumentId","handleOnTransactionStart","handleSetStatus","newStatus","mentionOptions","useUserListWithPermissions","threadItemsByStatus","handleOnCreate","handleOnUpdate","handleOnCreateError","CommentsEnabledProvider","CommentsIntentProvider","VERSION","LOCAL_STORAGE_KEY","setLocalStorage","getLocalStorage","CommentsOnboardingProvider","dismissed","setDismissed","handleDismiss","isDismissed","CommentsSelectedPathProvider","setSelectedPath","handleSelectPath","CommentsUpsellProvider","CommentsDocumentLayout","CommentsDocumentLayoutInner","COMMENTS_INSPECTOR_NAME","COMMENTS_HIGHLIGHT_HUE_KEY","COMMENT_REACTION_OPTIONS","COMMENT_REACTION_EMOJIS","ContentStack","CommentsFieldButton","onCommentAdd","onInputKeyDown","addCommentButtonElement","setAddCommentButtonElement","commentInputHandle","handleSubmit","discardDialogController","startDiscard","isDefaultPrevented","handleDiscardCancel","handleDiscardConfirm","AddCommentIcon","SanityUIButton","messageCache","HIGHLIGHT_BLOCK_VARIANTS","CommentsField","HighlightDiv","FieldStack","CommentFieldInner","cachedValue","isInlineCommentThread","resetMessageValue","scrollToThreadId","handleCommentAdd","newThreadId","internalComments","createDomRectFromElements","rects","minX","minY","maxRight","maxBottom","useRectFromElements","setRect","nextRect","handleSetRect","useAuthoringReferenceElement","getSelectionBoundingRect","MotionPopover","VARIANTS","FloatingButtonPopover","onClickOutside","disabledText","CommentDisabledIcon","InlineCommentInputPopover","onDiscardConfirm","commentInputRef","contentElementRef","AI_ASSIST_TYPE","CommentsPortableTextInput","isAiAssist","CommentsPortableTextInputInner","mouseDownRef","authoringDecorationElement","setAuthoringDecorationElement","setNextCommentValue","nextCommentSelection","setNextCommentSelection","currentSelection","setCurrentSelection","currentSelectionRect","setCurrenSelectionRect","setCurrentHoveredCommentId","canSubmit","setCanSubmit","isFullScreen","setIsFullScreen","addedCommentsDecorations","setAddedCommentsDecorations","stringFieldPath","handleSetCurrentSelectionRect","resetStates","handleSelectCurrentSelection","handleCommentDiscardConfirm","textComments","getFragment","editorValue","textSelection","handleDecoratorClick","blurred","isRangeSelected","debounceSelectionChange","dirty","updateCommentRange","decoratorsToUpdate","updatedDecoration","nextRange","handleBuildRangeDecorations","commentsToDecorate","authoringDecoration","currentSelectionIsOverlapping","testA","isSelectionsOverlapping","testB","popoverAuthoringReferenceElement","selectionReferenceElement","nextDecorations","nextDecoration","prevDecoration","showFloatingButton","showFloatingInput","isPortableTextInputProps","CommentsInput","FEEDBACK_FORM_LINK","Span","FooterCard","CommentsInspectorFeedbackFooter","CommentsInspectorHeader","onViewChange","handleSetOpenView","handleSetResolvedView","RootLayer","CommentsInspector","CommentsInspectorInner","commentToDelete","setCommentToDelete","deleteLoading","setDeleteLoading","deleteError","setDeleteError","commentIdParamRef","didScrollToCommentFromParam","upsellTelemetryLogs","currentComments","handleChangeView","nextView","handleCloseInspector","handleCopyLink","handleCreateRetry","closeDeleteDialog","handleNewThreadCreate","handleReply","onDeleteStart","isParent","handleDeleteConfirm","handleStatusChange","nextStatus","handleReactionSelect","handleDeselectPath","loggedTelemetry","setLoggedTelemetry","commentToScrollTo","beforeListNode","useMenuItem","CommentIcon","showAsAction","commentsInspector","CommentsStudioLayout","unstable_layout","getCreateBaseUrl","customHost","getCreateLinkUrl","appId","getCreateDocumentUrl","createLocaleNamespace","createUsEnglishLocaleBundle","CreateDocumentLinkCtaClicked","CreateDocumentLinkAccepted","CreateDocumentUnlinkCtaClicked","CreateDocumentUnlinkApproved","CreateDocumentOpened","useSanityCreateTelemetry","startInCreateClicked","startInCreateAccepted","unlinkClicked","unlinkAccepted","editInCreateClicked","linkCtaClicked","linkAccepted","unlinkCtaClicked","unlinkApproved","documentOpened","CreateUnlinkConfirmDialog","onDocumentChange","unlinking","setUnlinking","unlink","DialogPortalProvider","portalElementId","CreateLinkedActions","panelPortalElementId","onEditInCreateClicked","unlinkConfirm","setUnlinkConfirm","confirmUnlink","cancelUnlink","createUserDocumentationUrl","CreateLearnMoreButton","CreateSvg","CreateLinkedDocumentBannerContent","infoOpen","setInfoOpen","infoButtonRef","InfoOutlineIcon","useSanityCreateConfig","SanityCreateConfigContext","CreateLinkingDialog","troubleshootingOpen","setTroubleshootingOpen","handleToggleTroubleshooting","checkStudioManifestExists","studioHostUrl","internalUrlSuffix","fetchStudiosWithUrl","internalSuffix","getStudioUrl","fetchCreateCompatibleAppId","fallbackOrigin","checkStudioManifest","appsWithStudioUrl","appMatchingOrigin","studioApps","urlType","useStudioAppIdStore","pId","appIdFetcher","useStudioAppIdStoreInner","studioApp","setStudioApp","getAppId","WrapperCard","StartInCreateDevInfoButton","defaultStudio","noFallbackOrigin","invalidFallbackOrigin","activeFallbackOrigin","DeployedApps","StartInCreateBanner","isInitialValueLoading","appIdCache","isExcludedByOption","isNewPristineDoc","isStartCreateCompatible","StartInCreateBannerInner","documentReady","StartInCreateBannerStudioApp","isLinking","setLinking","createLinkId","createUrl","startLinking","createAppIdCache","cacheElement","SanityCreateConfigProvider","documentLinkedBannerContent","documentLinkedActions","startInCreateBanner","CreateIntegrationWrapper","createIntegration","ErrorCallout","InfoCallout","ButtonTimeZone","useElementQueries","EarthAmericasIcon","ButtonTimeZoneElementQuery","SmallIcon","iconSize","negHeight","iconOffset","WarningBanner","counter","ReactExports","cachedData","revalidateEvents","HAS_USED_SCHEDULED_PUBLISHING","used","cachedUsedScheduledPublishing","fetchUsedScheduledPublishing","schedules","useHasUsedScheduledPublishing","explicitEnabled","isWorkspaceEnabled","hasUsed","ScheduledPublishingEnabledProvider","scheduledPublishing","__internal__workspaceEnabled","hasUsedScheduledPublishing","useScheduledPublishingEnabled","ScheduledPublishingEnabledContext","getLastExecuteDate","executedAt","executeAt","sortByExecuteDate","reverseOrder","aExecuteDate","bExecuteDate","useScheduleApi","createScheduleApi","roundedDate","setSeconds","setMilliseconds","_delete","scheduleId","_deleteMultiple","scheduleIds","requests","_publish","_update","documentSchedule","deleteMultiple","ScheduleEvents","pluralize","scheduleCustomEvent","CustomEvent","useScheduleOperation","createSchedule","displayToast","deleteSchedule","deleteSchedules","fulfilledIds","rejectedReasons","numFulfilledIds","numRejectedReasons","publishSchedule","updateSchedule","useScheduleBaseUrl","useFetcher","queryKey","NO_SCHEDULES","usePollSchedules","refreshWhenHidden","refreshWhenOffline","revalidateOnFocus","shouldRetryOnError","revalidateIfStale","revalidateOnReconnect","swrOptions","fetcher","useSWR","currentData","currentData_0","schedule_0","handleDeleteMultiple","currentData_1","currentSchedules","schedule_1","handlePublish","currentData_2","currentSchedules_0","schedule_2","sortedSchedules","isInitialLoading","EMPTY_SCHEDULE","SchedulesProvider","setSortBy","wallDate","executeDate","scheduleDate","zonedScheduleDate","filterByDate","filterByState","scheduleState","scheduleState_0","activeSchedules","wallDate_0","schedulesByDate","useSchedules","SchedulesContext","useFilteredSchedules","ScheduleFilter","hasItems","useStateLink","ScheduleFilters","onClearDate","handleMenuClick","SelectIcon","responsiveStyles","_responsive","$direction","DescriptionRoot","HORIZONTAL_PADDING_Y","UpsellPanel","SchedulePublishingUpsellProvider","useSchedulePublishingUpsell","SchedulePublishUpsellContext","BigIconComingSoon","BigIconScreen","BigIconSuccess","EmptySchedules","BigIcon","heading","getScheduledDocument","getScheduledDocumentId","usePreviewState","paneItemPreview","setPaneItemPreview","useScheduleSchemaType","firstDocument","useSchemaType","DateWithTooltipElementQuery","DocumentActionPropsProvider","useDocumentActionProps","DocumentActionPropsContext","useScheduleForm","setIsDirty","formData","setFormData","handleFormChange","equalDates","onFormChange","customValidation","MONTH_NAMES","WEEK_DAY_NAMES","HOURS_24","getWeeksOfMonth","handleMinutesChange","handleHoursChange","m_1","undefinedValue","nodeValidations","customValidationMessage","calendarTodayLabel","ScheduleForm","handleCustomValidation","EditScheduleForm","DialogHeader","DialogScheduleEdit","handleScheduleUpdate","useDialogScheduleEdit","dialogScheduleEditShow","MenuItemWithPermissionsTooltip","permissionsOperationLabel","ContextMenuItems","handleExecute","ScheduleContextMenu","EMPTY_VALIDATION_STATUS","getValidationState","isValidationWarningMarker","validationTone","useValidationState","VALIDATION_DELAY_MS","ValidateScheduleDoc","updateValidation","DelayedValidationRunner","ValidationRunner","MENU_ITEM_TONES","ValidationListItem","menuItemTone","ValidationList","warnings","isValidationInfoMarker","resolvePathTitle","_error","_warning","_info","i_1","ValidationInfo","menuHeader","publishId","navigateIntent","encodeURIComponent","DateWithTooltip","formatDistance","addSuffix","distance","dateTimeLarge","dateTimeMedium","dateTimeSmall","StateReasonFailedInfo","stateReason","red","User","StatusDotPlaceholder","PreviewWrapper","contextMenu","linkComponent","publishedDocumentId","setValidationStatus","T3","T4","T5","T6","flexBasis","t33","t34","t35","t36","t37","t38","t39","t40","t41","t42","t43","t44","t45","t46","t47","t48","t49","t50","t51","t52","t53","t54","t55","t56","t57","t58","t59","DocumentVersionsStatus","DocumentPreview","FallbackContextMenu","NoSchemaItem","ToolPreview","visibleDocument","isCompleted","ScheduleItem","invalidDocument","SCHEDULE_RENDER_DELAY_MS","VirtualListItem","DelayedScheduleItem","delayedScheduleItem","setDelayedScheduleItem","canUpdate","MonthHeading","PlaceholderScheduleItem","getLocalizedDate","toLocaleString","VirtualList","virtualList","totalSize","useVirtualizedSchedules","handleClearSchedules","listSourceItems","previousSchedule","previousExecuteDate","datePrevious","currentExecuteDate","dateCurrent","Panel","Schedules","showWarning","SchedulesContextMenu","handleSortByCreateAt","handleSortByExecuteAt","Pip","hasSchedules","failed","upcoming","TooltipContent","schedulesByState","stateSchedules","ToolCalendar","handleFocusDateChange","Column","NO_SCHEDULE","DATE_SLUG_FORMAT","Tool","lastScheduleState","useFallbackNavigation","schedulesContext","handleClearDate","handleSelectDate","DialogFooter","NewScheduleInfo","ValidationWarning","ScheduleAction","fetchError","hasExistingSchedules","documentExists","handleScheduleCreate","ScheduledBadge","upcomingSchedule","formattedDateTime","resolveDocumentBadges","existingBadges","ScheduleBanner","ScheduledDocumentInput","DocumentBannerInput","getRootType","SchedulePublishingStudioLayoutInner","SCHEDULED_PUBLISHING_NAME","__internalApplicationType","tasksLocaleNamespace","tasksUsEnglishLocaleBundle","TasksEnabledProvider","useTasksEnabled","TasksEnabledContext","IsLastPaneProvider","isLastPane","useIsLastPane","IsLastPaneContext","MentionUserProvider","selectedDocument","setSelectedDocument","useMentionUser","MentionUserContext","TaskCreated","TaskStatusChanged","TaskDuplicated","TaskRemoved","TaskLinkCopied","TaskLinkOpened","viewMode","selectedTask","activeTabId","duplicateTaskValues","TasksNavigationProvider","setViewMode","setActiveTab","tabId","handleCloseTasks","handleOpenTasks","handleCopyLinkToTask","sidebar","useTasksNavigation","TasksNavigationContext","createTasksSet","tasksReducer","tasksById","nextTaskResult","nextTaskValue","nextTask","restTasks","updatedTask","useTasksStore","TasksProvider","activeDocument","setActiveDocument","debouncedSetActiveDocument","useTasks","TasksContext","TasksUpsellProvider","useTasksUpsell","TasksUpsellContext","TaskCreateAction","handleCreateTaskFromDocument","TaskIcon","SetActiveDocumentInner","SetActiveDocument","TasksDocumentInputLayout","ButtonContainer","TasksFooterOpenTasks","pendingTasks","createdByUser","getTargetValue","getMentionedUsers","subscribers","DATE_FORMAT_OPTIONS","Strong","NoWrap","useUpdatedTimeAgo","UserName","DUE_BY_DATE_OPTIONS","DueByChange","dueBy","LinkWrapper","TargetContentChange","documentSchema","getChangeDetails","statusTitle","changeTo","EditedAt","AvatarRoot","$removeBg","TasksUserAvatar","loadedUser","ActivityChildrenRoot","ActivityItemChildrenContainer","ActivityItem","avatarPaddingTop","TasksActivityCommentInput","COMMENTS_LIST_ITEM_AVATAR_CONFIG","parentCommentAvatar","threadCommentsAvatar","replyAvatar","avatarSize","CommentListItemRoot","TasksActivityCommentItem","UserSkeleton","TasksActivityCreatedAt","TasksSubscribers","subscriberId","handleToggleSubscribe","TasksSubscriberAvatars","subscriberIds","subscriberIdsProp","translateX","MotionStack","TasksActivityLog","activityData","commentToDeleteId","setCommentToDeleteId","commentDeleteError","setCommentDeleteError","commentDeleteLoading","setCommentDeleteLoading","taskComments","handleGetNotificationValue","mentionedUsers","handleCommentCreate","handleCommentReply","handleCommentCreateRetry","handleCommentReact","handleDeleteCommentStart","handleDeleteCommentCancel","handleDeleteCommentConfirm","handleCommentEdit","taskActivity","commentsActivity","commentToDeleteIsParent","MentionUserMenuItem","StyledMenu","IGNORED_KEYS","NO_ASSIGNEE_OPTION","MentionsMenu","filteredOptions","deburredSearchTerm","searchName","UserIcon","AssigneeSelectionMenu","FocusableCard","AssigneeCreateFormField","u","mentionedUser","displayText","AssigneeEditFormField","DateEditFormField","pickerOpen","dateFormatter","dueByeDisplayValue","short","full","dueFormated","monthAndDay","deserializedValue","dueDateIsThisYear","NormalText","DescriptionInputBlock","DescriptionInputRoot","verticalPadding","$mode","$minHeight","DescriptionInput","_propValue","setRootRef","textBoxScrollHeight","setTextBoxScrollHeight","textBox","setTextboxHeight","ref_0","handleSetRootRef","FieldWrapperRoot","StatusMenuButton","StatusSelector","ConfigErrorsScreen","CurrentWorkspaceProvider","WorkspaceLoader","EmptyReferenceRoot","TargetRoot","StyledIntentLink","IntentLink","CardLink","TargetField","handleItemSelect","handleOpenSearch","handleCloseSearch","Title","TitleField","getTaskSubscribers","assignedTo","FormCreate","creating","setCreating","createMore","setCreateMore","handleCreateMore","savedTask","handleCreatingSuccess","handleCreatingTimeout","timeoutId","RemoveTaskDialog","FirstRow","FormActionsMenu","onTaskRemoved","removeTask","duplicateTask","FormEditInner","statusField","handleChangeAndSubscribe","FormEdit","newSubscribers","changeAssigneePatch","changedDescriptionPatch","prevMentionedUser","newDescription","getTaskURL","taskId","toolName","currentUrl","TasksNotificationTargetInner","previewValuesLoading","targetContentTitle","notificationTarget","contextUrl","targetContentImageUrl","TasksNotificationTarget","targetContentField","defineField","descriptionInputField","taskSchema","defineType","TasksAddonWorkspaceProviderInner","addonDataset","addonDatasetConfig","prepareConfig","addonWorkspace","useWorkspaceLoader","TasksAddonWorkspaceProvider","addonDatasetClient","FormBuilderRoot","TasksFormBuilderInner","TasksFormBuilder","HEADING_BY_STATUS","subscribed","EmptyStatusListState","EMPTY_TASK_LIST","noActiveDocument","AnimatedText","EmptyTasksListState","handleTaskCreate","TasksStatus","checkboxValue","setCheckboxValue","handleCheckboxChange","marginRight","TitleButton","UIButton","TaskDetailsRoot","getTargetDocumentMeta","TaskDueDate","fullDateFormatter","monthAndDayFormatter","dayFormatter","isThisISOWeek","fullDate","isDueByToday","isDueThisWeek","dateOptions","TasksListItem","targetDocument","getLabelForStatus","DetailsFlex","SummaryBox","TaskList","onTaskSelect","showDivider","TasksList","tasksByStatus","hasOpenTasks","hasClosedTasks","TasksUpsellPanel","TasksListFeedbackFooter","LIST_STYLES","TasksListTabs","tabs","tab","handleTabChange","tab_0","TasksActiveTabNavigation","allItems","currentItemIndex","prevTaskId","goToPreviousTask","nextTaskId","goToNextTask","t_0","TasksDraftsMenuItem","TasksHeaderDraftsMenu","draftTasks","isAuthoredByUser","hasEdits","isNotTheTaskBeingCreated","handleSelectTask","TasksSidebarHeader","handleGoBack","textTransform","RootCard","HeaderStack","ContentFlex","TasksStudioSidebarInner","TasksStudioSidebar","FULLSCREEN_MEDIA_INDEX","POSITION_ABSOLUTE_MEDIA_INDEX","SidebarMotionLayer","TasksStudioActiveToolLayoutInner","TasksStudioActiveToolLayout","TasksStudioLayoutInner","TasksStudioLayout","TasksToolbar","TasksStudioNavbarInner","renderTasksNav","__internal_actions","TasksStudioNavbar","TASKS_NAME","navbar","activeToolLayout","defaultPlugins","getDefaultPlugins","getDefaultPluginsOptions","unstable_tasks","resolveSchemaTypes","normalizeIcon","preparedWorkspaces","createMediaLibrarySources","fileSource","workspaceOptions","rawWorkspace","defaultPluginsOptions","nestedSources","rootSource","resolvedSources","validPlugin","handlesGDR","schemaValidationProblemGroups","schemaErrors","auth","getAuthStore","source$","resolveSource","workspaceSummary","joinBasePath","customIcon","unstable_clientFactory","createClient","getBifurClient","bifurVersionedClient","urlWithTag","fromUrl","clients","wrappedClient","__proto__","mediaLibrarySources","initialTemplatesResponses","templateMap","creationContext","templateResponses","templateErrors","defaultSubtitle","staticInitialValueTemplateItems","partialContext","DefaultFileSource","DefaultImageSource","treeArrayEditing","resolveConfig","createWorkspaceFromConfig","createSourceFromConfig","useConfigContextFromSource","getConfigContextFromSource","WorkspacesProvider","LoadingComponent","setWorkspaces","RouterHistoryProvider","useRouterHistory","RouterHistoryContext","ActiveWorkspaceMatcherProvider","activeWorkspace","setActiveWorkspace","createCommonBasePathRegex","commonBasePath","commonSegments","commonSegment","createCommonBasePathRegexRecursively","matchWorkspace","pathname","basePathRegex","useNormalizedWorkspaces","normalizedWorkspaces","useSyncPathnameWithWorkspace","_workspaces","serverSnapshot","getServerSnapshot","createHistory","createMemoryHistory","createBrowserHistory","ActiveWorkspaceMatcher","NotFoundComponent","unstable_history","historyProp","foundWorkspace","setActiveWorkspaceName","handleNavigateToDefaultWorkspace","useActiveWorkspace","ActiveWorkspaceMatcherContext","AddonDatasetProviderInner","originalClient","setAddonDatasetClient","setIsCreatingDataset","getAddonDatasetName","handleCreateClient","addonDatasetName","handleCreateAddonDataset","AddonDatasetProvider","AddonDatasetContext","getScheme","setSnapshot","nextScheme","useSystemScheme","usePrefersDark","ColorThemeProvider","_scheme","systemScheme","ColorSchemeProvider","onSchemeChange","schemeProp","ColorSchemeLocalStorageProvider","ColorSchemeCustomProvider","useColorSchemeSetValue","ColorSchemeSetValueContext","useColorSchemeInternalValue","ColorSchemeValueContext","useColorScheme","setScheme","useColorSchemeOptions","DesktopIcon","MoonIcon","SunIcon","SearchButton","InnerCard","SearchDialogBox","SearchDialog","StudioLogo","CapabilityGate","capability","ToolLink","oversizedButtonStyle","OversizedButton","ReleasesToolLink","AnimatedTextWidth","textRef","setContainerWidth","isAnimating","setIsAnimating","newWidth","onAnimationStart","onAnimationComplete","ReleasesLink","linkRef","intentProps","ReleasesIntentLink","CurrentGlobalPerspectiveLabel","userSelect","useExcludedPerspective","excluded","existingPerspectives","nextExcludedPerspectives","toggleExcludedPerspective","perspectiveId","isPerspectiveExcluded","INDICATOR_LEFT_OFFSET","INDICATOR_WIDTH","INDICATOR_COLOR_VAR_NAME","INDICATOR_BOTTOM_OFFSET","GlobalPerspectiveMenuItemIndicator","$inRange","$last","$first","$isDraft","GlobalPerspectiveMenuLabelIndicator","$withinRange","ToggleLayerButton","$visible","ExcludedLayerDot","getRangePosition","GlobalPerspectiveMenuItem","rangePosition","isReleasePerspectiveExcluded","handleToggleReleaseVisibility","handleOnReleaseClick","canReleaseBeExcluded","EyeClosedIcon","RELEASE_TYPE_LABELS","ReleaseTypeMenuSection","currentGlobalBundleMenuItemRef","getMenuItemRef","offsets","releaseTypeOffset","ASAP_RANGE_OFFSET","StyledBox","StyledPublishedBox","$reducePadding","$removePadding","areReleasesEnabled","setScrollContainer","isRangeVisible","setCreateBundleDialogOpen","scrollElementRef","handleCreateBundleClick","sortedReleaseTypeReleases","ReleaseTypeReleases","countAsapReleases","countScheduledReleases","adjustIndexForReleaseType","groupSubsetReleases","groupReleaseIndex","isElementVisibleInContainer","containerRect","useScrollIndicatorVisibility","setIsRangeVisible","resetRangeVisibility","GlobalPerspectiveMenu","createBundleDialogOpen","styledMenuRef","zOffset","ReleasesNavContainer","ReleasesNav","StudioActiveToolLayout","NoToolsScreen","RedirectingScreen","ToolNotFoundScreen","TOAST_ID","useCopyErrorDetails","eventId","serializeError","serializeErrorError","copyErrorError","errorDetailsString","ErrorActions","copyErrorDetails","SyncIcon","hasSanityPackageInImportMap","importMapEntries","imports","makeBufferedTransport","consentGiven","fetchTransport","makeFetchTransport","sendImmediately","setConsent","consent","flushBuffer","SANITY_DSN","IS_EMBEDDED_STUDIO","DEBUG_ERROR_REPORTING","IS_BROWSER","dsn","transport","integrations","inboundFiltersIntegration","functionToStringIntegration","browserApiErrorsIntegration","eventTarget","breadcrumbsIntegration","globalHandlersIntegration","onunhandledrejection","linkedErrorsIntegration","dedupeIntegration","sanityDedupeIntegration","httpContextIntegration","getSentryErrorReporter","scope","preInitErrors","_initialize","isSentryInitialized","sentryIsInitialized","hasThirdPartySentry","getOptions","getCurrentScope","BrowserClient","stackParser","defaultStackParser","beforeSend","Scope","setClient","defaultIntegrations","initialize","reportError","reactErrorInfo","errorBoundary","contexts","tags","handled","withScope","errorBoundaryError","setCause","captureException","mechanism","captureContext","isBufferedTransport","enable","getTransport","disable","objectToString","thing","isInstanceOf","seenErrors","recurse","subCause","setAsUnhandled","exception","previousEvents","processEvent","currentEvent","shouldDropEvent","currentMessage","getMessageFromEvent","previousMessage","currentTimestamp","previousTimestamp","errorReporter","WORKSPACES_DOCS_URL","useWorkspaceAuthStates","STATE_TITLES","Media","WorkspacePreviewIcon","createIcon","iconComponent","WorkspacePreview","iconRightComponent","LINKS","prefersDark","SanityLogo","WorkspaceAuth","authStates","selectedWorkspaceName","setSelectedWorkspaceName","selectedWorkspace","handleBack","workspace_0","handleSelectWorkspace","WorkspaceMenuButton","AuthenticateScreen","ScreenReaderLabel","CorsOriginErrorScreen","corsUrl","reload","NotAuthenticatedScreen","handleError","handleLogout","providerTitle","providerHelp","NotFoundScreen","onNavigateToDefaultWorkspace","MAX_NOTE_LENGTH","RequestAccessScreen","setProjectId","msgError","setMsgError","hasPendingRequest","setHasPendingRequest","hasExpiredPendingRequest","setExpiredHasPendingRequest","hasTooManyRequests","setHasTooManyRequests","hasBeenDenied","setHasBeenDenied","note","setNote","noteLength","setNoteLength","sanityClient","request$","projectRequests","declinedRequest","addWeeks","requestUrl","request_3","errMessage","handleSubmitRequest","request_2","request_1","renderPath","reportWarnings","groupsWithWarnings","TONES","SegmentSpan","ErrorMessageText","SchemaProblemGroups","problemGroups","ret","problemGroup","isWarning","getTypeInfo","_renderSegmentName","helpId","generateHelpUrl","SchemaErrorsScreen","groupsWithErrors","DevServerStoppedErrorScreen","lazy","DevServerStopped","View","StudioErrorBoundary","handleResetError","report","ViteDevServerStoppedError","DetectViteDevServerStopped","detectViteDevServerStopped","import","hot","SearchFullscreenPortalCard","StudioLayout","useLayoutComponent","StudioLayoutComponent","searchFullscreenOpen","setSearchFullscreenOpen","searchFullscreenPortalEl","setSearchFullscreenPortalEl","searchOpen","setSearchOpen","mainTitle","toolControlsDocumentTitle","controlsDocumentTitle","handleSearchFullscreenOpenChange","open_0","handleSearchOpenChange","onSearchFullscreenOpenChange","onSearchOpenChange","navbarContextValue","Navbar","useNavbarComponent","ActiveToolLayout","useActiveToolLayoutComponent","isLegacyDeskRedirect","navigateUrl","__unsafe_disableScopedSearchParams","tool_0","pickToolMenuComponent","toolMenu","pickNavbarComponent","pickLayoutComponent","pickActiveToolLayoutComponent","useToolMenuComponent","StudioToolMenu","StudioNavbar","ConfigIssuesButton","isDialogOpen","TrialDialogViewed","TrialDialogDismissed","TrialDialogCTAClicked","getTrialStage","showOnLoad","DialogContent","onOpenNext","onOpenUrlCallback","handleClickOutside","handleCTAClose","schemeValue","headingText","CenteredStroke","SvgFilledOutline","daysLeft","totalDays","percentage","strokeDasharray","strokeDashOffset","strokeWidth","FreeTrialButtonTopbar","toggleShowContent","FreeTrialButtonSidebar","BoltIcon","useFreeTrialContext","FreeTrialContext","handleOpenNext","FreeTrial","showPopover","setShowPopover","closeAndReOpen","toggleDialog","dialogType","showOnClick","dialogRevision","trialDaysLeft","dialogTrialStage","dialogDismissAction","handleDialogCTAClick","dialogCtaType","handlePopoverCTAClick","handleOnTrialButtonClick","dialogTrigger","dialogToRender","FreeTrialProvider","setData","setShowOnLoad","trialState","seenBefore","queryURL","LOGO_MARK_SIZE","RADIUS","LogoMarkContainer","HomeButton","rootHref","handleRootClick","multipleWorkspaces","AppearanceMenu","LocaleMenu","ManageMenu","isAdmin","CogIcon","AddUserIcon","damping","mass","stiffness","BACKDROP_VARIANTS","INNER_CARD_VARIANTS","BackdropMotion","InnerCardMotion","NavDrawer","ToolMenu","handleActionClick","action_0","ActionComponent","actionNodes","TrapFocus","LeaveIcon","isQueryMatch","lowercaseTitle","sortResultRelevance","titleA","titleB","lowercaseQuery","filterOptions","PopoverHeaderCard","DialogHeaderCard","INLINE_PREVIEW_HEIGHT","NewDocumentListOption","handleDocumentClick","NewDocumentList","onDocumentClick","hasOptions","NewDocumentButton","canCreateDocument","isReleaseActive","setSearchQuery","dialogRef","searchInputElement","setSearchInputElement","hasNewDocumentOptions","openDialogAriaLabel","validOptions","optionSchema","isDeprecatedSchemaType","handleOpenButtonKeyDown","sharedListProps","sharedTextInputProps","sharedOpenButtonProps","sharedTooltipProps","useNewDocumentOptions","optionsWithPermissions","PresenceMenuItem","menuItemElement","setMenuItemElement","hasLink","lastActiveLocation","FooterStack","PresenceMenu","hasPresence","focusedId","setFocusedId","handleClearFocusedItem","UsersIcon","getHelpResources","useGetHelpResources","ProductAnnouncementCardSeen","ProductAnnouncementCardClicked","ProductAnnouncementCardDismissed","ProductAnnouncementViewed","ProductAnnouncementLinkClicked","ProductAnnouncementModalDismissed","WhatsNewHelpMenuItemClicked","useStudioAnnouncements","StudioAnnouncementContext","studioAnnouncements","unseenAnnouncements","onDialogOpen","StudioAnnouncementsMenuItem","announcement_id","announcement_title","announcement_internal_name","studio_version","ResourcesMenuItems","sections","sectionArray","latestStudioVersion","latestVersion","isAutoUpdating","fallbackLinks","studioVersion","subSection","SubSection","ResourcesButton","Google","GitHub","Saml","LoginProviderLogo","isSaml","logoName","AvatarBox","UserMenu","NavGrid","NavbarContext","drawerOpen","setDrawerOpen","routerStateRef","workspaceNameRef","drawerButtonEl","setDrawerButtonEl","searchOpenButtonEl","setSearchOpenButtonEl","collapsedPresenceMenu","loginStatus","searchFullscreen","configIssues","newDocumentFullscreen","shouldRender","handleOpenSearchFullscreen","handleCloseSearchFullscreen","handleCloseDrawer","handleOpenDrawer","MenuIcon","HiddenRow","CollapseTabList","childrenProp","hiddenElements","setHiddenElements","showChildren","setShowChildren","displayChildren","menuOptionsArray","handleIntersection","ToolCollapseMenu","collapseMenuEl","setCollapseMenuEl","navigation","ToolVerticalMenu","HIDDEN_STUDIO_MENU_TOOLS","isSidebarOpen","scheduledPublishingEnabled","visibleTools","FieldCopied","FieldPasted","resolveSchemaTypeForPath","baseType","nextField","MIMETYPE_SANITY_CLIPBOARD","MIMETYPE_HTML","MIMETYPE_PLAINTEXT","SUPPORTS_SANITY_CLIPBOARD_MIMETYPE","ClipboardItem","supports","BASE64_ATTR","getClipboardItem","sanityClipboardItem","parseClipboardItem","writeClipboardItem","copyActionResult","textValue","transformValueToText","escapedTextValue","escapeHtml","base64SanityClipboardItem","utf8ToBase64","clipboardItem","Blob","html","sanityClipboardBase64","base64ToUtf8","uint8Array","TextEncoder","encode","binary","byteLength","fromCharCode","btoa","base64String","documentElement","subValue","isNativeEditableElement","HTMLTextAreaElement","hasSelection","isCollapsed","isEmptyFocusPath","documentMatchesGroqFilter","rootDocumentValue","referencedDocument","schemaTypeOptions","targetRootPath","tree","getObjectTypeFromPath","isCompatiblePrimitiveType","targetJsonTypes","isNumberToStringSchemaType","arrayJsonTypes","isNumberToArrayOfStrings","defaultKeyGenerator","resolveReadOnlyAncestor","schemaTypeAtPath","transferValue","sourceRootSchemaType","sourcePath","sourceRootPath","targetRootSchemaType","targetRootValue","targetValue","targetPath","targetDocumentSchemaType","validateReferences","validateAssets","sourceSchemaTypeAtPath","targetSchemaTypeAtPath","targetRootSchemaTypeReadOnly","targetSchemaTypeAtPathReadOnly","isAncestorReadOnly","isFileSchemaType","isImageSchemaType","sourceSchemaType","targetSchemaType","sourceJsonType","targetJsonType","lastSourcePathSegment","isIndexSourcePathSegmentKey","isSourceSinglePrimitiveArrayItem","isPrimitiveSourceAndPrimitiveArrayTarget","isObjectSourceAndArrayOfObjectsTarget","sourceValueAtPath","collateObjectValue","wrappedSourceValueAtPath","collateArrayValue","wrappedSourceValue","collatePrimitiveValue","sourceValueRef","isAssetObjectStub","sourceValueType","isImageRef","isImageAssetId","isFileRef","isFileAssetId","isIncompatibleImageRef","isIncompatibleFileRef","sourceRef","fileLike","targetReferenceTypes","sourceReferenceType","markDefKeyMap","isPortableTextBlockWithMarkdefs","isBlockSchemaType","objectMembers","memberSchemaType","memberIsArray","memberIsObject","genericValue","cleanObjectKeys","valueAtTargetPath","resultingValue","markKey","isArrayOfPrimitivesMember","isArrayOfObjectsMember","jsonTypes","isNumberCompatible","transferredItems","nonTransferredItems","primitiveValue","isSamePrimitiveType","isNumberToString","isNumberOrString","allowedStrings","disallowedKeys","CopyPasteProvider","documentMeta","setDocumentMetaState","setDocumentMeta","processedMeta","prevMeta","valueAtPath","lastSegment","isLastSegmentKeyOrIndex","isAppend","normalizedPath","shouldWrapInArray","payloadValue","sourceDocumentSchemaType","updateItems","copiedJsonTypes","targetSchemaTypeTitle","transferValueOptions","nonWarningErrors","_isEmptyValue","isAppendable","isAppendArray","insertPath","prefixPatches","allPatches","CopyPasteContext","SCROLLBAR_SIZE","SCROLLBAR_BORDER_SIZE","buildResizeHandleDataUri","hexColor","encodedStrokeColor","GlobalStyle","createGlobalStyle","errorChannel","__sanityErrorChannel","ErrorLogger","isKnownError","PerspectiveProvider","ResetPerspectiveHandler","archived","GlobalPerspectiveProvider","AuthBoundary","AuthenticateComponent","NotAuthenticatedComponent","loggedIn","setLoggedIn","loginProvider","setLoginProvider","Z_OFFSET","CONSENT_CLIENT_OPTIONS","MaybeEnableErrorReporting","MODULES_URL_VERSION","MODULES_HOST","MODULES_URL","fetchLatestVersionForPackage","pkg","packageVersion","checkForLatestVersions","packages","SHOW_TOAST_FREQUENCY","currentPackageVersions","PackageVersionStatusProvider","lastCheckedTimeRef","autoUpdatingPackages","showNewPackageAvailableToast","fetchLatestVersions","latestPackageVersions","intervalId","setInterval","clearInterval","semver","gt","keyframe","cardHoverBg","cardNormalBg","ButtonRoot","StudioAnnouncementsCard","preHeader","onCardClick","onCardDismiss","Hr","hr","$show","DIVIDER_FADE_THRESHOLD","itemRef","setShow","FloatingButtonBox","FloatingButton","Announcement","announcement","logViewedItemRef","publishedDate","link_url","link_title","handleLinkClick","scrolledIntoView","scrolled_into_view","logViewed","StudioAnnouncementsDialog","RESET_PARAM","useSeenAnnouncements","seenAnnouncements$","setSeenAnnouncements","resetAnnouncementsParams","resetValue","audienceRoles","isValidAnnouncementAudience","sanityVersion","audience","isValidAnnouncementRole","userRoles","CLIENT_OPTIONS","StudioAnnouncementsProviderInner","dialogMode","setDialogMode","isCardDismissed","setIsCardDismissed","audienceRole","allAnnouncements$","getAnnouncements$","unseen","saveSeenAnnouncements","handleCardDismiss","handleCardClick","firstAnnouncement","doc_1","StudioAnnouncementsProvider","_buildTints","mid","mix","_toHex","green","blue","parseToRgb","rgb","_isDark","getLuminance","_multiply","parseColor","rgbToHex","_screen","screen","NEUTRAL_TONES","buildColor","legacyPalette","legacyTones","createColorTheme","stateTones","blend","skeletonFrom","shadow","umbra","black","penumbra","ambient","skeleton","buttonTones","blendInvert","defaultTints","isNeutral","syntax","mainShade","secondaryShade","atrule","attrName","attrValue","attribute","builtin","cdata","class","orange","cyan","constant","doctype","entity","function","hexcode","important","inserted","keyword","magenta","prolog","pseudoClass","pseudoElement","punctuation","symbol","buildFonts","cssCustomProperties","defaults","buildLegacyPalette","defaultButton","danger","mainNavigation","buildLegacyTones","transparent","buildLegacyTheme","partialLegacyTheme","legacyTheme","resolveLegacyTheme","__dark","light","__legacy","defaultCustomProperties","defaultTheme","buildTheme","isThemerTheme","__themer","getThemeValues","StudioThemeProvider","PerformanceINPMeasured","maxSampleRate","getInterestingAttrs","ui","getElementIdentifier","nodeName","classList","isPerformanceEventTiming","entryType","useMeasurePerformanceTelemetry","getEntries","maxEntry","interaction","onEvent","observer_0","PerformanceObserver","buffered","PerformanceTelemetryTracker","createSessionId","DEBUG_TELEMETRY","SANITY_STUDIO_DEBUG_TELEMETRY","debugLoggingStore","flushInterval","resolveConsent","sendEvents","sendBeacon","StudioTelemetryProvider","storeOptions","createBatchedStore","arrify","datasetNames","workspaceNames","logger","updateUserProperties","density","uniqueWorkspaceNames","uniqueDatasetNames","ErrorMessageRoot","ErrorMessage","createRouter","toolRoute","toolParams","intents","getOrderedTools","toolSwitcher","toolIndex","tool1","tool2","toolA","toolB","indexA","indexB","WEIGHTED_CREATE_INTENT_PARAMS","WEIGHTED_EDIT_INTENT_PARAMS","resolveUrlStateWithDefaultTool","defaultTool","makeBackwardsCompatible","resolveDefaultState","resolveIntentState","orderedTools","currentTool","otherTools","weightedParams","initialMatch","matchingTool","canHandle","prevScore","weightedParam","_toolState","toolState","nextUrlState","STICKY_PARAMS","isNotFound","decodeUrlState","rootRouter","WorkspaceRouterProvider","onNavigate","useRouterFromWorkspaceHistory","routerBasePath","getBasePath","routerBasePathRegex","shouldHandle","prevEvent","defaultState","resolvedIntent","maybeResolveIntent","handleNavigate","predictedEvent","resolvedPath","redirectState","setWorkspace","restOfSources","WorkspaceLoaderBoundary","ConfigErrorsComponent","Refractor","registerLanguage","bash","javascript","jsx","typescript","StudioProvider","unstable_noAuthBoundary","noAuthBoundary","_children","Studio","unstable_globalStyles","renderStudio","reactStrictMode","createRoot","unmount","useDocumentOperationEvent","PERIODS","useFormattedDuration","durationMs","isNegative","parseMilliseconds","period","iso8601","durationToISO8601","trunc","dur","isCopyHotKey","isPasteHotKey","useGlobalCopyPasteElementHandler","targetElement","handleKeydown","useNumberFormat","SYNCING","isSyncing","NOT_SYNCING","useSyncState","useTimeAgo","agoSuffix","users$","systemGroup$","_users$","isRobot","_systemGroup$","list$","grantPromises","flattenedGrants","initial$","DocumentStatus","singleLine","edited","VersionStatus","relativeTime","actionIds","getHookId","actionHook","defineHookStateComponent","hook","useHook","HookStateComponent","handleNext","handleReset","hookState","HookCollectionState","hooks","HooksState","HookState","useHookCollectionKeys","setKeys","currentKeys","_requestIdleCallback","_cancelIdleCallback","throttleOptions","mapHooksToStates","states","useHookCollectionStates","timeoutRef","requestUpdateSnapshot","shouldUpdateSnapshot","hookGroup","GetHookCollectionStateComponent","GetHookCollectionState","IntentButton","StyledContainer","$width","widthArr","useArrayProp","StickyLayer","radii","PopoverDialog","usePreviewCard","PreviewCardContext","ReferenceInputPreviewCard","MediaWrapper","$dimensions","$layout","$responsive","responsive","mediaString","renderPreviewMedia","renderPreviewNode","fallbackNode","DEFAULT_MEDIA_DIMENSIONS","getDevicePixelRatio","isPlaceholder","statusNode","SKELETON_DELAY","hasSubtitle","classNames","rootClassName","mediaDimensions","SIZE","BgCircle","ProgressCircle","CircularProgress","circ","viewBox","strokeDashoffset","Bar","LinearProgress","RootBox","MediaFlex","justify","ProgressFlex","TooltipContentStack","withRadius","STYLES_PADDER","HeaderFlex","MediaCard","$ratio","getRatio","RootSpan","MediaSpan","TextSpan","textFont","textSize","DEFAULT_MEDIA_DIMENSION","TemplatePreview","Subtitle","MUTATION_ATTRIBUTE_FILTER","FOCUSABLE","getFocusableElements","initialFocus","loop","pause","focusedIndex","setFocusedIndex","focusableElements","setFocusableElements","focusableLen","lastFocusableIndex","nextKey","prevKey","els","handleSetElements","focusPrev","focusNext","prevIndex_0","next_0","mo","attributeFilter","onfocus","onblur","StatusButton","dotStyle","TooltipOfDisabled","ImperativeToast","useZIndex","ZIndexContext","LegacyLayerProvider","zOffsetKey","WithReferringDocuments","ZIndexProvider","zIndexContextDefaults","getDialogCopy","thread","confirmButtonText","CommentDeleteDialog","onConfirm","dialogCopy","MentionIcon","ReactionIcon","SendIcon","StyledAvatar","Avatar","SYMBOLS","WHITESPACE","CommentsAvatar","userProp","initials","SpacerAvatar","mentionObject","blockType","portableTextType","defineArrayMember","Schema","editorSchemaType","MentionInlineBlock","CommentInputDiscardDialog","handleCancelClick","handleConfirmClick","InnerFlex","SKELETON_INLINE_STYLE","MentionsMenuItem","LIST_PADDING","MAX_ITEMS","FlexWrap","_inputElement","useCommentInput","CommentInputContext","EVENT_LISTENER_OPTIONS","useCursorElement","INLINE_STYLE","Editable","focusLock","mentionsMenuRef","closeMentions","insertMention","mentionsMenuOpen","mentionsSearchTerm","onBeforeInput","bb14","lastBlock","initialSelectionAtEndOfContent","EditableWrap","ButtonDivider","MenuDivider","AvatarContainer","CommentInputInner","withAvatar","expandOnFocus","hasChanges","insertAtChar","openMentions","handleMentionButtonClicked","CommentInputProvider","focusOnMount","onMentionMenuOpenChange","setMentionsMenuOpen","setMentionsSearchTerm","selectionAtMentionInsert","setSelectionAtMentionInsert","focusEditor","cursorOffset","focusSpan","isInsertText","isDeleteText","isInsertingAtChar","lastIndexOfAt","isWhitespaceCharBeforeCursorPosition","filterStartsWithSpaceChar","mentionSchemaType","spanPath","findByPath","SCROLL_INTO_VIEW_OPTIONS","CommentInput","onDiscardCancel","editorContainerRef","preDivRef","postDivRef","innerRef","editorInstanceKey","setEditorInstanceKey","requestFocus","resetEditorInstance","editorStateValue","scrollToEditor","innerEl","focusLastDescendant","focusFirstDescendant","HighlightSpan","addedBg","addedBorder","addedHoverBg","addedHoverBorder","addedNestedBg","addedNesterBorder","CommentInlineHighlightSpan","isAdded","isAuthoring","isHovered","PortableTextWrap","NormalBlockTransformed","em","underline","strikeThrough","mention","CommentMessageSerializer","FLEX_GAP","EmojiText","GRID_COLUMNS","CommentReactionsMenu","prev_0","handleRootKeyDown","handleOptionClick","buttons","emoji","reactionName","CommentReactionsMenuButton","renderMenuButton","handleCloseAndFocus","btn","TEXT_SIZE","TextGroup","TextBox","LEADING_NON_WHITESPACE_RE","UserDisplayName","CommentReactionsUsersTooltip","FormattedUserList","nonWhitespace","CommentReactionsUsersTooltipContent","UserList","ReactionName","TransparentCard","groupReactionsByName","nameA","nameB","CommentReactionsBar","currentUserReactionNames","groupedReactions","sortedGroupedReactions","setSortedGroupedReactions","sortedReactions","reactionsList","hasReacted","FloatingCard","CommentsListItemContextMenu","canDelete","canEdit","onCopyLink","onEditStart","onReactionSelect","onStatusChange","showMenuButton","hasContextMenuOptions","BlockQuoteStack","$hasReferencedValue","CommentsListItemReferencedValue","ContextMenuBox","TimeText","IntentText","InnerStack","ErrorFlex","RetryCardButton","CommentsListItemLayout","isRetrying","onCreateRetry","setIsEditing","startMessage","hasReactions","createdDate","editedDate","createdTimeAgo","formattedCreatedAt","formattedLastEditAt","displayError","handleMenuOpen","cancelEdit","cancelDiscard","confirmDiscard","handleEditSubmit","handleOpenStatusChange","toggleEdit","handleCloseMenu","ThreadCard","activeBg","defaultBg","MAX_COLLAPSED_REPLIES","DEFAULT_AVATAR_CONFIG","StyledThreadCard","ExpandButton","GhostButton","CommentsListItem","avatarConfig","canReply","innerPadding","onReply","setCollapsed","didExpand","setDidExpand","replyInputRef","mouseOver","setMouseOver","handleReplySubmit","handleThreadRootClick","splicedReplies","showCollapseButton","expandButtonText","renderedReplies","reply","getEmptyStateMessages","CommentsListStatus","hasNoComments","emptyStateMessages","EMPTY_PT_ARRAY","CreateNewThreadInput","onNewThreadCreate","BreadcrumbsButton","CommentThreadLayout","canCreateNewThread","handleBreadcrumbsClick","handleNewThreadClick","crumbsTitlePath","lastCrumb","groupThreads","CommentsListInner","setBoundaryElement","groupedThreads","showComments","firstThreadId","newThreadSelected","threadIsSelected","CommentsList","fadeInKeyFrame","CommentsOnboardingPopover","onDismiss","CommentsUpsellPanel"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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","x_google_ignoreList":[260,261,262,263,264,265,266,267,268,269,270,271,272,273,889,1187,1188]}