sanity 6.9.2-next.21 → 6.9.2-next.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/{AddonDatasetProvider-B5npf4J4.js → AddonDatasetProvider-CfAw3oMr.js} +2 -2
- package/lib/{AddonDatasetProvider-B5npf4J4.js.map → AddonDatasetProvider-CfAw3oMr.js.map} +1 -1
- package/lib/{CalendarFilter-DYJEZDCP.js → CalendarFilter-OHGevGRx.js} +3 -3
- package/lib/{CalendarFilter-DYJEZDCP.js.map → CalendarFilter-OHGevGRx.js.map} +1 -1
- package/lib/{CommentsDocumentLayout-CTL7lt6a.js → CommentsDocumentLayout-p8p-oNuH.js} +2 -2
- package/lib/{CommentsDocumentLayout-CTL7lt6a.js.map → CommentsDocumentLayout-p8p-oNuH.js.map} +1 -1
- package/lib/{CommentsField-BE_CI2SY.js → CommentsField-CqXs722Y.js} +3 -3
- package/lib/{CommentsField-BE_CI2SY.js.map → CommentsField-CqXs722Y.js.map} +1 -1
- package/lib/{CommentsInput-D_EM-t5a.js → CommentsInput-B3rd8HlF.js} +5 -5
- package/lib/{CommentsInput-D_EM-t5a.js.map → CommentsInput-B3rd8HlF.js.map} +1 -1
- package/lib/{CommentsInspector-DtBIUadl.js → CommentsInspector-DTHmjTFc.js} +5 -5
- package/lib/{CommentsInspector-DtBIUadl.js.map → CommentsInspector-DTHmjTFc.js.map} +1 -1
- package/lib/{CommentsListItem-BFRqZMJ6.js → CommentsListItem-C2Ac0esL.js} +3 -3
- package/lib/{CommentsListItem-BFRqZMJ6.js.map → CommentsListItem-C2Ac0esL.js.map} +1 -1
- package/lib/{CommentsSelectedPathProvider-CIKpHpK3.js → CommentsSelectedPathProvider-DwDw8s-s.js} +3 -3
- package/lib/{CommentsSelectedPathProvider-CIKpHpK3.js.map → CommentsSelectedPathProvider-DwDw8s-s.js.map} +1 -1
- package/lib/{CommentsStudioLayout-Dx0jIDle.js → CommentsStudioLayout-e2hCA_5z.js} +4 -4
- package/lib/{CommentsStudioLayout-Dx0jIDle.js.map → CommentsStudioLayout-e2hCA_5z.js.map} +1 -1
- package/lib/{ReleasesMetadataProvider-hILX90V4.js → ReleasesMetadataProvider-BWsmHWkh.js} +2 -2
- package/lib/{ReleasesMetadataProvider-hILX90V4.js.map → ReleasesMetadataProvider-BWsmHWkh.js.map} +1 -1
- package/lib/{ReleasesNav-DIv-1iR7.js → ReleasesNav-DPSjEs29.js} +14 -14
- package/lib/{ReleasesNav-DIv-1iR7.js.map → ReleasesNav-DPSjEs29.js.map} +1 -1
- package/lib/{ReleasesStudioLayout-DW7fJSfG.js → ReleasesStudioLayout-CtyE88nI.js} +8 -8
- package/lib/{ReleasesStudioLayout-DW7fJSfG.js.map → ReleasesStudioLayout-CtyE88nI.js.map} +1 -1
- package/lib/{ReleasesTool-BQjO7osC.js → ReleasesTool-BjbRMZlc.js} +15 -15
- package/lib/{ReleasesTool-BQjO7osC.js.map → ReleasesTool-BjbRMZlc.js.map} +1 -1
- package/lib/{SchedulePublishingStudioLayout-Cwmdz7HZ.js → SchedulePublishingStudioLayout-gZWH97ZL.js} +3 -3
- package/lib/{SchedulePublishingStudioLayout-Cwmdz7HZ.js.map → SchedulePublishingStudioLayout-gZWH97ZL.js.map} +1 -1
- package/lib/{SchedulePublishingUpsellProvider-C5B21VDh.js → SchedulePublishingUpsellProvider-DsI8OUg-.js} +2 -2
- package/lib/{SchedulePublishingUpsellProvider-C5B21VDh.js.map → SchedulePublishingUpsellProvider-DsI8OUg-.js.map} +1 -1
- package/lib/{ScheduledPublishingEnabledProvider-BNMAVqrS.js → ScheduledPublishingEnabledProvider-BDRtV8OB.js} +3 -3
- package/lib/{ScheduledPublishingEnabledProvider-BNMAVqrS.js.map → ScheduledPublishingEnabledProvider-BDRtV8OB.js.map} +1 -1
- package/lib/{SearchProvider-DkGUk8a6.js → SearchProvider-Hk7IMQqR.js} +4 -4
- package/lib/{SearchProvider-DkGUk8a6.js.map → SearchProvider-Hk7IMQqR.js.map} +1 -1
- package/lib/{SingleDocReleaseLayout-fW8U-ktp.js → SingleDocReleaseLayout-evCp37zs.js} +2 -2
- package/lib/{SingleDocReleaseLayout-fW8U-ktp.js.map → SingleDocReleaseLayout-evCp37zs.js.map} +1 -1
- package/lib/{SingleDocReleaseUpsellProvider-BNF2Rj3j.js → SingleDocReleaseUpsellProvider-BOe2BACb.js} +4 -4
- package/lib/{SingleDocReleaseUpsellProvider-BNF2Rj3j.js.map → SingleDocReleaseUpsellProvider-BOe2BACb.js.map} +1 -1
- package/lib/{TasksStudioActiveToolLayout-CHazNA61.js → TasksStudioActiveToolLayout-Dbs-1GX6.js} +11 -11
- package/lib/{TasksStudioActiveToolLayout-CHazNA61.js.map → TasksStudioActiveToolLayout-Dbs-1GX6.js.map} +1 -1
- package/lib/{TasksStudioLayout-B7bCL28Q.js → TasksStudioLayout-Pn-RwtPi.js} +5 -5
- package/lib/{TasksStudioLayout-B7bCL28Q.js.map → TasksStudioLayout-Pn-RwtPi.js.map} +1 -1
- package/lib/{Tool-rkq_tjXo.js → Tool-D4-WLZtb.js} +12 -12
- package/lib/{Tool-rkq_tjXo.js.map → Tool-D4-WLZtb.js.map} +1 -1
- package/lib/{UnpublishVersionDialog-DWYCXGkz.js → UnpublishVersionDialog-DmFHVqhI.js} +4 -4
- package/lib/{UnpublishVersionDialog-DWYCXGkz.js.map → UnpublishVersionDialog-DmFHVqhI.js.map} +1 -1
- package/lib/{UpsellDialog-BiDSVmne.js → UpsellDialog-DRhOCOce.js} +2 -2
- package/lib/{UpsellDialog-BiDSVmne.js.map → UpsellDialog-DRhOCOce.js.map} +1 -1
- package/lib/{VariantsStudioNavbar-Bae9LOIN.js → VariantsStudioNavbar-CXpr7UUl.js} +7 -7
- package/lib/{VariantsStudioNavbar-Bae9LOIN.js.map → VariantsStudioNavbar-CXpr7UUl.js.map} +1 -1
- package/lib/{VariantsTool-E4ptTHik.js → VariantsTool-BCtrSWfP.js} +7 -7
- package/lib/{VariantsTool-E4ptTHik.js.map → VariantsTool-BCtrSWfP.js.map} +1 -1
- package/lib/{WorkspaceLoader-sdFQ9rkh.js → WorkspaceLoader-_w6NnbDb.js} +21 -21
- package/lib/{WorkspaceLoader-sdFQ9rkh.js.map → WorkspaceLoader-_w6NnbDb.js.map} +1 -1
- package/lib/_createContext.js +1 -1
- package/lib/{buildTextSelectionFromFragment-CuXpitEZ.js → buildTextSelectionFromFragment-Egmw5rNs.js} +3 -3
- package/lib/{buildTextSelectionFromFragment-CuXpitEZ.js.map → buildTextSelectionFromFragment-Egmw5rNs.js.map} +1 -1
- package/lib/{datastores-XTDIa3jc.js → datastores-DpJ5Y313.js} +2 -2
- package/lib/{datastores-XTDIa3jc.js.map → datastores-DpJ5Y313.js.map} +1 -1
- package/lib/index.js +28 -28
- package/lib/{inputResolver-DLP8YZcM.js → inputResolver-BX-VuloN.js} +4 -4
- package/lib/{inputResolver-DLP8YZcM.js.map → inputResolver-BX-VuloN.js.map} +1 -1
- package/lib/{navigation.telemetry-4pppJENG.js → navigation.telemetry-VbqjOek0.js} +7 -7
- package/lib/{navigation.telemetry-4pppJENG.js.map → navigation.telemetry-VbqjOek0.js.map} +1 -1
- package/lib/{plugin-BmARoHKH.js → plugin-DGOEvpWT.js} +4 -4
- package/lib/{plugin-BmARoHKH.js.map → plugin-DGOEvpWT.js.map} +1 -1
- package/lib/{plugin-BUox1zeI.js → plugin-Da_fKb0U.js} +3 -3
- package/lib/{plugin-BUox1zeI.js.map → plugin-Da_fKb0U.js.map} +1 -1
- package/lib/{plugin-CjN39wwt.js → plugin-DqqaZdOH.js} +5 -5
- package/lib/{plugin-CjN39wwt.js.map → plugin-DqqaZdOH.js.map} +1 -1
- package/lib/{plugin-BRnqEpCl.js → plugin-qHXYpO99.js} +6 -6
- package/lib/{plugin-BRnqEpCl.js.map → plugin-qHXYpO99.js.map} +1 -1
- package/lib/{scheduleItem-Dtb26ejO.js → scheduleItem-DcC1HE9G.js} +8 -8
- package/lib/{scheduleItem-Dtb26ejO.js.map → scheduleItem-DcC1HE9G.js.map} +1 -1
- package/lib/{schedules-6qsR7E_I.js → schedules-CbnXaXM9.js} +3 -3
- package/lib/{schedules-6qsR7E_I.js.map → schedules-CbnXaXM9.js.map} +1 -1
- package/lib/{searchDocumentRelease-CUk7BiST.js → searchDocumentRelease-C5sClmGF.js} +4 -4
- package/lib/{searchDocumentRelease-CUk7BiST.js.map → searchDocumentRelease-C5sClmGF.js.map} +1 -1
- package/lib/{studioClient-D1Z2zK3C.js → studioClient-CwMJwOTd.js} +2 -2
- package/lib/{studioClient-D1Z2zK3C.js.map → studioClient-CwMJwOTd.js.map} +1 -1
- package/lib/{useBundleDocuments-BnCBcbdJ.js → useBundleDocuments-DvVAF6cf.js} +7 -7
- package/lib/{useBundleDocuments-BnCBcbdJ.js.map → useBundleDocuments-DvVAF6cf.js.map} +1 -1
- package/lib/{useComments-Bm-0CwNH.js → useComments-DuEOnDkA.js} +2 -2
- package/lib/{useComments-Bm-0CwNH.js.map → useComments-DuEOnDkA.js.map} +1 -1
- package/lib/{useCommentsTelemetry-D1kYRuPU.js → useCommentsTelemetry-BgNdQdz5.js} +3 -3
- package/lib/{useCommentsTelemetry-D1kYRuPU.js.map → useCommentsTelemetry-BgNdQdz5.js.map} +1 -1
- package/lib/{useDocumentPreviewValues-DJvES8Wi.js → useDocumentPreviewValues-B1zNjl_D.js} +3 -3
- package/lib/{useDocumentPreviewValues-DJvES8Wi.js.map → useDocumentPreviewValues-B1zNjl_D.js.map} +1 -1
- package/lib/{useFeatureEnabled-g8eZoiLM.js → useFeatureEnabled-4qCpV_mX.js} +2 -2
- package/lib/{useFeatureEnabled-g8eZoiLM.js.map → useFeatureEnabled-4qCpV_mX.js.map} +1 -1
- package/lib/{useFieldActions-BV_qfe65.js → useFieldActions-uDe2qh98.js} +2 -2
- package/lib/{useFieldActions-BV_qfe65.js.map → useFieldActions-uDe2qh98.js.map} +1 -1
- package/lib/{useReleasesToolAvailable-Duu10qV0.js → useReleasesToolAvailable-DDuNc6HV.js} +3 -3
- package/lib/{useReleasesToolAvailable-Duu10qV0.js.map → useReleasesToolAvailable-DDuNc6HV.js.map} +1 -1
- package/lib/{useScheduledDraftMenuActions-Byiy3-k3.js → useScheduledDraftMenuActions-DqkHlC0c.js} +5 -5
- package/lib/{useScheduledDraftMenuActions-Byiy3-k3.js.map → useScheduledDraftMenuActions-DqkHlC0c.js.map} +1 -1
- package/lib/{useStudioUrl-BEb30_UK.js → useStudioUrl-B4w58A2i.js} +5 -5
- package/lib/{useStudioUrl-BEb30_UK.js.map → useStudioUrl-B4w58A2i.js.map} +1 -1
- package/lib/{useTimeZone-zs0ybzXu.js → useTimeZone-8Wd1UR4j.js} +2 -2
- package/lib/{useTimeZone-zs0ybzXu.js.map → useTimeZone-8Wd1UR4j.js.map} +1 -1
- package/lib/{validationUtils-LdwtMTh5.js → validationUtils-Cuk0jhWJ.js} +4 -4
- package/lib/{validationUtils-LdwtMTh5.js.map → validationUtils-Cuk0jhWJ.js.map} +1 -1
- package/lib/{version-XEmBTnIh.js → version-BVcB_xWL.js} +2 -2
- package/lib/{version-XEmBTnIh.js.map → version-BVcB_xWL.js.map} +1 -1
- package/package.json +10 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation.telemetry-4pppJENG.js","names":["EditableReleaseDocument","useCallback","useTimeZone","CONTENT_RELEASES_TIME_ZONE_SCOPE","useCreateReleaseMetadata","$","_c","zoneDateToUtc","t0","release","metadata","intendedPublishAt","Date","toISOString","undefined","title","trim","createReleaseMetadata","noop","useEffect","useState","useReleasesUpsell","useGuardWithReleaseLimitUpsell","$","_c","isPendingGuardResponse","setIsPendingGuardResponse","releasePromise","setReleasePromise","guardWithReleaseLimitUpsell","t0","promise","Promise","resolve","hasPassed","t1","t2","ReleaseType","useCallback","RELEASE_FORM_STORAGE_KEY","ReleaseFormDraft","title","description","releaseType","intendedPublishAt","useReleaseFormStorage","$","_c","getStoredReleaseData","_temp","saveReleaseDataToStorage","_temp2","clearReleaseDataFromStorage","_temp3","t0","Symbol","for","localStorage","removeItem","data","setItem","JSON","stringify","stored","getItem","parse","undefined","EditableReleaseDocument","getIsReleaseInvalid","release","metadata","releaseType","intendedPublishAt","EarthGlobeIcon","Flex","format","isValid","parse","useCallback","useMemo","Button","MONTH_PICKER_VARIANT","CalendarLabels","DateTimeInput","getCalendarLabels","useDialogTimeZone","TimeZoneScope","useTimeZone","useTranslation","ScheduleDatePickerProps","value","Date","onChange","date","timeZoneScope","inputDateFormat","ScheduleDatePicker","t0","$","_c","t","timeZone","utcToCurrentZoneDate","zoneDateToUtc","dialogTimeZoneShow","DialogTimeZone","dialogProps","T0","T1","t1","t2","t3","t4","t5","t6","t7","t8","t9","timeZoneAdjustedValue","undefined","t10","handlePublishAtCalendarChange","t11","event","date_0","currentTarget","parsedDate","handlePublishAtInputChange","t12","calendarLabels","carousel","abbreviation","t13","t14","EditableReleaseDocument","useCallback","useEffect","useMemo","useRef","useState","ReleaseFormFields","Pick","UseReleaseFormOptimisticUpdatingOptions","externalValue","id","extractData","value","useReleaseFormOptimisticUpdating","t0","$","_c","t1","incomingFormData","t2","localData","setLocalData","focusedField","setFocusedField","previousIdRef","t3","currentFormData","formFieldNames","Object","keys","Array","unfocusedFieldUpdates","filter","field","reduce","fieldUpdates","field_0","updateUnfocusedFields","t4","t5","_createdAt","isEditingExistingRelease","Boolean","current","t6","Symbol","for","fieldName","createFocusHandler","t7","handleBlur","t8","formDataUpdates","currentFormData_0","updateLocalData","t9","EditableReleaseDocument","Stack","getTheme_v2","ChangeEvent","useCallback","useEffect","useRef","useState","css","styled","useTranslation","useReleaseFormOptimisticUpdating","MAX_DESCRIPTION_HEIGHT","TitleTextArea","textarea","props","color","font","theme","text","family","weights","bold","sizes","fontSize","lineHeight","input","default","enabled","fg","placeholder","DescriptionTextArea","regular","getIsReleaseOpen","release","state","resizeTextarea","element","HTMLTextAreaElement","style","height","scrollHeight","TitleDescriptionForm","t0","$","_c","onChange","disabled","t1","isReleaseOpen","titleRef","descriptionRef","setScrollHeight","t","t2","externalValue","id","_id","extractData","_temp","localData","updateLocalData","createFocusHandler","handleBlur","t3","Symbol","for","current","t4","metadata","title","t5","t6","description","t7","event","preventDefault","target","value","handleTitleChange","t8","event_0","currentTarget","handleDescriptionChange","shouldShowDescription","t9","t10","t11","t12","t13","t14","maxHeight","overflowY","t15","EditableReleaseDocument","ReleaseType","ChevronDownIcon","InfoOutlineIcon","Button","Flex","Menu","MenuItem","Stack","TabPanel","Text","addHours","startOfHour","ComponentType","MouseEventHandler","useCallback","useEffect","useId","useState","MenuButton","Tooltip","useTranslation","CONTENT_RELEASES_TIME_ZONE_SCOPE","useReleaseFormStorage","isReleaseType","DEFAULT_RELEASE_TYPE","RELEASE_TYPES_TONES","ReleaseAvatar","ScheduleDatePicker","TitleDescriptionForm","ReleaseForm","props","$","_c","onChange","value","t0","metadata","releaseType","t1","intendedPublishAt","undefined","t","getStoredReleaseData","saveReleaseDataToStorage","id","_id","t2","t3","storedData","updatedValue","title","description","t4","updatedValue_0","handleOnChangeAndStorage","t5","date","toISOString","handleBundlePublishAtCalendarChange","t6","event","pickedReleaseType","currentTarget","dataset","nextInputValue","Date","handleReleaseTypeChange","t7","updatedRelease","handleTitleDescriptionChange","menuButtonId","menuButton","setMenuButton","t8","t9","t10","Symbol","for","maxWidth","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","placement","matchReferenceWidth","boundaryElement","t25","Object","keys","t26","map","type","t27","t28","outline","t29","t30","t31","t32","t33","ReleaseTypeOption","text","SingleActionResult","isErrorWithDetails","useReleasePermissionsValue","ReleasePermissionError","details","type","isReleasePermissionError","error","createReleasePermissionsStore","isContentReleasesEnabled","permissions","key","checkWithPermissionGuard","args","Promise","action","T","Parameters","name","undefined","dryRun","skipCrossDatasetReferenceValidation","e","SingleActionResult","useMemo","FEATURES","useFeatureEnabled","useResourceCache","createReleasePermissionsStore","RELEASE_PERMISSIONS_RESOURCE_CACHE_NAMESPACE","useReleasePermissionsValue","checkWithPermissionGuard","args","Promise","action","T","Parameters","permissions","key","useReleasePermissions","$","_c","resourceCache","contentReleasesFeature","contentReleases","releasePermissionsStore","get","dependencies","namespace","enabled","set","value","ComponentType","RefAttributes","SVGProps","RhombusIcon","props","$","_c","ref","rest","t0","Symbol","for","t1","CreateVariantIcon","t2","EditableReleaseDocument","useTelemetry","Box","Card","Flex","useToast","FormEvent","useCallback","useState","Button","Dialog","useTranslation","useSetPerspective","CreatedRelease","OriginInfo","useCreateReleaseMetadata","useGuardWithReleaseLimitUpsell","useReleaseFormStorage","isReleaseLimitError","useReleaseOperations","getIsReleaseInvalid","getReleaseIdFromReleaseDocumentId","getReleaseDefaults","ReleaseForm","CreateReleaseDialogProps","onCancel","onSubmit","createdReleaseId","origin","CreateReleaseDialog","props","$","_c","toast","createRelease","setPerspective","t","telemetry","createReleaseMetadata","clearReleaseDataFromStorage","release","setRelease","isSubmitting","setIsSubmitting","t0","invalid","releasePromise","t1","event","preventDefault","inQuota","releaseValue","log","Promise","_temp","_id","t2","err","console","error","push","closable","status","title","handleOnSubmit","Symbol","for","releaseMetadata","handleOnChange","t3","dialogTitle","t4","dialogConfirm","t5","handleOnClose","t6","t7","t8","t9","t10","resolve","setTimeout","defineEvent","NavigationSourceInfo","source","NavigatedToReleasesOverview","name","version","description","NavigatedToScheduledDrafts"],"sources":["../src/core/releases/hooks/useCreateReleaseMetadata.ts","../src/core/releases/hooks/useGuardWithReleaseLimitUpsell.ts","../src/core/releases/hooks/useReleaseFormStorage.ts","../src/core/releases/util/getIsReleaseInvalid.ts","../src/core/releases/components/ScheduleDatePicker.tsx","../src/core/releases/hooks/useReleaseFormOptimisticUpdating.ts","../src/core/releases/components/dialog/TitleDescriptionForm.tsx","../src/core/releases/components/dialog/ReleaseForm.tsx","../src/core/releases/store/createReleasePermissionsStore.ts","../src/core/releases/store/useReleasePermissions.ts","../src/core/variants/plugin/components/PersonalizationIcons.tsx","../src/core/releases/components/dialog/CreateReleaseDialog.tsx","../src/core/releases/__telemetry__/navigation.telemetry.ts"],"sourcesContent":["import {type EditableReleaseDocument} from '@sanity/client'\nimport {useCallback} from 'react'\n\nimport {useTimeZone} from '../../hooks/useTimeZone'\nimport {CONTENT_RELEASES_TIME_ZONE_SCOPE} from '../../studio/constants'\n\nexport const useCreateReleaseMetadata = () => {\n const {zoneDateToUtc} = useTimeZone(CONTENT_RELEASES_TIME_ZONE_SCOPE)\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 noop from 'lodash-es/noop.js'\nimport {useEffect, useState} from 'react'\n\nimport {useReleasesUpsell} from '../contexts/upsell/useReleasesUpsell'\n\nexport function useGuardWithReleaseLimitUpsell() {\n const [isPendingGuardResponse, setIsPendingGuardResponse] = useState<boolean>(true)\n const [releasePromise, setReleasePromise] = useState<Promise<boolean> | null>(null)\n const {guardWithReleaseLimitUpsell} = useReleasesUpsell()\n\n useEffect(() => {\n // oxlint-disable-next-line react/react-compiler\n setIsPendingGuardResponse(true)\n\n const promise = new Promise<boolean>((resolve) => {\n void guardWithReleaseLimitUpsell(noop, false, (hasPassed: boolean) => {\n resolve(hasPassed)\n })\n })\n\n setReleasePromise(promise)\n }, [guardWithReleaseLimitUpsell, isPendingGuardResponse])\n\n return {\n releasePromise,\n }\n}\n","import {type ReleaseType} from '@sanity/client'\nimport {useCallback} from 'react'\n\nconst RELEASE_FORM_STORAGE_KEY = 'studio.release-form.recovery'\n\ninterface ReleaseFormDraft {\n title?: string\n description?: string\n releaseType?: ReleaseType\n intendedPublishAt?: string\n}\n\n/**\n * This hook is used to store the release form data in localStorage.\n * The main use case is when a user accidentally closes the dialog for a release before it is created .\n *\n * @returns an object with the following methods:\n * - getStoredReleaseData: a function that returns the stored release form data\n * - saveReleaseDataToStorage: a function that saves the release form data to localStorage\n * - clearReleaseDataFromStorage: a function that clears the release form data from localStorage\n */\nexport function useReleaseFormStorage() {\n const getStoredReleaseData = useCallback((): ReleaseFormDraft | undefined => {\n const stored = localStorage.getItem(RELEASE_FORM_STORAGE_KEY)\n return stored ? JSON.parse(stored) : undefined\n }, [])\n\n const saveReleaseDataToStorage = useCallback((data: ReleaseFormDraft) => {\n localStorage.setItem(RELEASE_FORM_STORAGE_KEY, JSON.stringify(data))\n }, [])\n\n const clearReleaseDataFromStorage = useCallback(() => {\n localStorage.removeItem(RELEASE_FORM_STORAGE_KEY)\n }, [])\n\n return {getStoredReleaseData, saveReleaseDataToStorage, clearReleaseDataFromStorage}\n}\n","import {type EditableReleaseDocument} from '@sanity/client'\n\nexport function getIsReleaseInvalid(release: EditableReleaseDocument) {\n return release.metadata?.releaseType === 'scheduled' && !release.metadata?.intendedPublishAt\n}\n","import {EarthGlobeIcon} from '@sanity/icons/EarthGlobe'\nimport {Flex} from '@sanity/ui'\nimport {format} from 'date-fns/format'\nimport {isValid} from 'date-fns/isValid'\nimport {parse} from 'date-fns/parse'\nimport {useCallback, useMemo} from 'react'\n\nimport {Button} from '../../../ui-components/button/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 useDialogTimeZone from '../../hooks/useDialogTimeZone'\nimport {type TimeZoneScope, useTimeZone} from '../../hooks/useTimeZone'\nimport {useTranslation} from '../../i18n/hooks/useTranslation'\n\ninterface ScheduleDatePickerProps {\n value: Date | undefined\n onChange: (date: Date) => void\n timeZoneScope: TimeZoneScope\n}\n\nconst inputDateFormat = 'PP HH:mm'\n\nexport const ScheduleDatePicker = ({value, onChange, timeZoneScope}: ScheduleDatePickerProps) => {\n const {t} = useTranslation()\n const {timeZone, utcToCurrentZoneDate, zoneDateToUtc} = useTimeZone(timeZoneScope)\n const {dialogTimeZoneShow, DialogTimeZone, dialogProps} = useDialogTimeZone(timeZoneScope)\n\n const timeZoneAdjustedValue = value ? utcToCurrentZoneDate(value) : undefined\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 flex={1} justify=\"space-between\">\n <DateTimeInput\n selectTime\n monthPickerVariant={MONTH_PICKER_VARIANT.carousel}\n onChange={handlePublishAtCalendarChange}\n onInputChange={handlePublishAtInputChange}\n calendarLabels={calendarLabels}\n value={timeZoneAdjustedValue}\n inputValue={timeZoneAdjustedValue ? format(timeZoneAdjustedValue, inputDateFormat) : ''}\n constrainSize={false}\n padding={0}\n isPastDisabled\n timeZoneScope={timeZoneScope}\n />\n\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 {type EditableReleaseDocument} from '@sanity/client'\nimport {useCallback, useEffect, useMemo, useRef, useState} from 'react'\n\ntype ReleaseFormFields = Pick<EditableReleaseDocument['metadata'], 'title' | 'description'>\n\ninterface UseReleaseFormOptimisticUpdatingOptions {\n /** The external value from props/server */\n externalValue: EditableReleaseDocument\n id: string\n extractData: (value: EditableReleaseDocument) => ReleaseFormFields\n}\n\n/**\n * Hook for managing release form state that syncs with server data while respecting per-field focus.\n *\n * This prevents server updates from overriding user input during typing.\n * Local state syncs with server data on a per-field basis only when the field is not focused.\n *\n * @internal\n */\nexport function useReleaseFormOptimisticUpdating({\n externalValue,\n id,\n extractData,\n}: UseReleaseFormOptimisticUpdatingOptions) {\n const incomingFormData = useMemo(() => extractData(externalValue), [externalValue, extractData])\n const [localData, setLocalData] = useState(() => incomingFormData)\n const [focusedField, setFocusedField] = useState<string | null>(null)\n const previousIdRef = useRef(id)\n\n const updateUnfocusedFields = useCallback(\n (currentFormData: ReleaseFormFields) => {\n const formFieldNames = Object.keys(incomingFormData) as Array<keyof ReleaseFormFields>\n const unfocusedFieldUpdates = formFieldNames\n .filter((field) => field !== focusedField)\n .reduce<Partial<ReleaseFormFields>>((fieldUpdates, field) => {\n fieldUpdates[field] = incomingFormData[field]\n\n return fieldUpdates\n }, {})\n\n return {...currentFormData, ...unfocusedFieldUpdates}\n },\n [incomingFormData, focusedField],\n )\n\n useEffect(() => {\n // New releases don't have _createdAt and should always sync to support local storage\n const isEditingExistingRelease = Boolean(externalValue._createdAt)\n\n // if tracking a new ID\n\n if (previousIdRef.current === id) {\n setLocalData(isEditingExistingRelease ? updateUnfocusedFields : incomingFormData)\n } else {\n previousIdRef.current = id\n setLocalData(incomingFormData)\n setFocusedField(null)\n }\n }, [incomingFormData, id, externalValue._createdAt, updateUnfocusedFields])\n\n const createFocusHandler = useCallback(\n (fieldName: string) => () => setFocusedField(fieldName),\n [],\n )\n\n const handleBlur = useCallback(() => setFocusedField(null), [])\n\n const updateLocalData = useCallback((formDataUpdates: Partial<ReleaseFormFields>) => {\n setLocalData((currentFormData) => ({...currentFormData, ...formDataUpdates}))\n }, [])\n\n return {\n localData,\n updateLocalData,\n createFocusHandler,\n handleBlur,\n focusedField,\n }\n}\n","import {type EditableReleaseDocument} from '@sanity/client'\nimport {Stack} from '@sanity/ui'\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 {useReleaseFormOptimisticUpdating} from '../../hooks/useReleaseFormOptimisticUpdating'\n\n// Cap the description height and let it scroll internally past this point, so the dialog stays a\n// sensible size regardless of how long the description is.\nconst MAX_DESCRIPTION_HEIGHT = 200\n\nconst TitleTextArea = styled.textarea((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 min-height: ${font.text.sizes[4].lineHeight}px;\n margin: 0;\n position: relative;\n z-index: 1;\n display: block;\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\nfunction resizeTextarea(element: HTMLTextAreaElement): void {\n element.style.height = 'auto'\n element.style.height = `${element.scrollHeight}px`\n}\n\n/**\n * The editable title + description form for a release. Used inside the create/edit dialogs — the\n * release detail page itself is a read-only display surface (see ReleaseDetailsEditor), and routes\n * edits here through a dialog so editing is an explicit, intentional action.\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 titleRef = useRef<HTMLTextAreaElement>(null)\n const descriptionRef = useRef<HTMLTextAreaElement>(null)\n const [scrollHeight, setScrollHeight] = useState(46)\n const {t} = useTranslation()\n\n const {localData, updateLocalData, createFocusHandler, handleBlur} =\n useReleaseFormOptimisticUpdating({\n externalValue: release,\n id: release._id,\n extractData: useCallback(\n ({metadata}: EditableReleaseDocument) => ({\n title: metadata.title,\n description: metadata.description,\n }),\n [],\n ),\n })\n\n useEffect(() => {\n if (titleRef.current) {\n resizeTextarea(titleRef.current)\n }\n }, [release.metadata.title])\n\n useEffect(() => {\n if (descriptionRef.current) {\n resizeTextarea(descriptionRef.current)\n setScrollHeight(descriptionRef.current.scrollHeight)\n }\n }, [release.metadata.description])\n\n const handleTitleChange = useCallback(\n (event: ChangeEvent<HTMLTextAreaElement>) => {\n event.preventDefault()\n const title = event.target.value\n updateLocalData({title})\n onChange({...release, metadata: {...release.metadata, title}})\n if (titleRef.current) {\n resizeTextarea(titleRef.current)\n }\n },\n [onChange, release, updateLocalData],\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 updateLocalData({description})\n onChange({...release, metadata: {...release.metadata, description}})\n\n // Reset to 'auto' first so the textarea can shrink when text is removed\n if (descriptionRef.current) {\n resizeTextarea(descriptionRef.current)\n }\n\n setScrollHeight(event.currentTarget.scrollHeight)\n },\n [isReleaseOpen, onChange, release, updateLocalData],\n )\n\n const shouldShowDescription = isReleaseOpen || localData.description\n\n return (\n <Stack gap={3}>\n <TitleTextArea\n ref={titleRef}\n onChange={handleTitleChange}\n onFocus={createFocusHandler('title')}\n onBlur={handleBlur}\n value={localData.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={!localData.title}\n value={localData.description}\n placeholder={t('release.form.placeholder-describe-release')}\n onChange={handleDescriptionChange}\n onFocus={createFocusHandler('description')}\n onBlur={handleBlur}\n style={{\n height: `${scrollHeight}px`,\n maxHeight: MAX_DESCRIPTION_HEIGHT,\n overflowY: scrollHeight > MAX_DESCRIPTION_HEIGHT ? 'auto' : 'hidden',\n }}\n data-testid=\"release-form-description\"\n disabled={disabled}\n readOnly={!isReleaseOpen}\n />\n )}\n </Stack>\n )\n}\n","import {type EditableReleaseDocument, type ReleaseType} from '@sanity/client'\nimport {ChevronDownIcon} from '@sanity/icons/ChevronDown'\nimport {InfoOutlineIcon} from '@sanity/icons/InfoOutline'\nimport {\n // oxlint-disable-next-line no-restricted-imports -- fine-grained control needed\n Button,\n Flex,\n Menu,\n // oxlint-disable-next-line no-restricted-imports -- fine-grained control needed\n MenuItem,\n Stack,\n TabPanel,\n Text,\n} from '@sanity/ui'\nimport {addHours} from 'date-fns/addHours'\nimport {startOfHour} from 'date-fns/startOfHour'\nimport {\n type ComponentType,\n type MouseEventHandler,\n useCallback,\n useEffect,\n useId,\n useState,\n} from 'react'\n\nimport {MenuButton} from '../../../../ui-components/menuButton/MenuButton'\nimport {Tooltip} from '../../../../ui-components/tooltip/Tooltip'\nimport {useTranslation} from '../../../i18n/hooks/useTranslation'\nimport {CONTENT_RELEASES_TIME_ZONE_SCOPE} from '../../../studio/constants'\nimport {useReleaseFormStorage} from '../../hooks/useReleaseFormStorage'\nimport {isReleaseType} from '../../store/types'\nimport {DEFAULT_RELEASE_TYPE, 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 = DEFAULT_RELEASE_TYPE, intendedPublishAt} = value.metadata || {}\n const {t} = useTranslation()\n const {getStoredReleaseData, saveReleaseDataToStorage} = useReleaseFormStorage()\n\n const id = value._id\n\n useEffect(() => {\n const storedData = getStoredReleaseData()\n if (storedData) {\n const updatedValue = {\n metadata: {\n title: storedData.title,\n description: storedData.description,\n releaseType: storedData.releaseType ?? DEFAULT_RELEASE_TYPE,\n intendedPublishAt: storedData.intendedPublishAt,\n },\n }\n onChange({_id: id, ...updatedValue})\n }\n }, [getStoredReleaseData, id, onChange])\n\n const handleOnChangeAndStorage = useCallback(\n (updatedValue: EditableReleaseDocument) => {\n onChange(updatedValue)\n saveReleaseDataToStorage({\n ...updatedValue.metadata,\n })\n },\n [onChange, saveReleaseDataToStorage],\n )\n\n const handleBundlePublishAtCalendarChange = useCallback(\n (date: Date) => {\n handleOnChangeAndStorage({\n ...value,\n metadata: {...value.metadata, intendedPublishAt: date.toISOString()},\n })\n },\n [handleOnChangeAndStorage, value],\n )\n\n const handleReleaseTypeChange = useCallback<MouseEventHandler<HTMLButtonElement>>(\n (event) => {\n const pickedReleaseType = event.currentTarget.dataset.value\n\n if (!isReleaseType(pickedReleaseType)) {\n return\n }\n\n // select the start of the next hour\n const nextInputValue = startOfHour(addHours(new Date(), 1))\n\n handleOnChangeAndStorage({\n ...value,\n metadata: {\n ...value.metadata,\n releaseType: pickedReleaseType,\n intendedPublishAt:\n (pickedReleaseType === 'scheduled' && nextInputValue.toISOString()) || undefined,\n },\n })\n },\n [handleOnChangeAndStorage, value],\n )\n\n const handleTitleDescriptionChange = useCallback(\n (updatedRelease: EditableReleaseDocument) => {\n handleOnChangeAndStorage({\n ...value,\n metadata: {\n ...value.metadata,\n title: updatedRelease.metadata.title,\n description: updatedRelease.metadata.description,\n },\n })\n },\n [handleOnChangeAndStorage, value],\n )\n\n const menuButtonId = useId()\n const [menuButton, setMenuButton] = useState<HTMLElement | null>(null)\n\n return (\n <Stack gap={5}>\n <Stack gap={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 gap={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 gap={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.${releaseType}`)}\n releaseType={releaseType}\n />\n <Text size={1}>\n <ChevronDownIcon />\n </Text>\n </Flex>\n </Button>\n }\n popover={{\n placement: 'bottom',\n matchReferenceWidth: true,\n // oxlint-disable-next-line no-deprecated -- will fix in follow up PR\n boundaryElement: menuButton,\n }}\n menu={\n <Menu>\n {/* oxlint-disable-next-line typescript/no-unsafe-type-assertion */}\n {(Object.keys(RELEASE_TYPES_TONES) as ReleaseType[]).map((type) => (\n <MenuItem key={type} data-value={type} onClick={handleReleaseTypeChange}>\n <ReleaseTypeOption text={t(`release.type.${type}`)} releaseType={type} />\n </MenuItem>\n ))}\n </Menu>\n }\n />\n <Flex gap={1}>\n {releaseType === '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 value={intendedPublishAt ? new Date(intendedPublishAt) : undefined}\n onChange={handleBundlePublishAtCalendarChange}\n timeZoneScope={CONTENT_RELEASES_TIME_ZONE_SCOPE}\n />\n </TabPanel>\n )}\n </Flex>\n </Stack>\n </Stack>\n <TitleDescriptionForm release={value} onChange={handleTitleDescriptionChange} />\n </Stack>\n )\n}\n\nconst ReleaseTypeOption: ComponentType<{\n text: string\n releaseType: ReleaseType\n}> = ({releaseType, text}) => (\n <Flex gap={3} align=\"center\">\n <ReleaseAvatar padding={1} releaseType={releaseType} />\n <Text>{text}</Text>\n </Flex>\n)\n","import {type SingleActionResult} from '@sanity/client'\n\nimport {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 */\nconst 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 <\n T extends (...args: any[]) => Promise<void | SingleActionResult>,\n >(\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 {type SingleActionResult} from '@sanity/client'\nimport {useMemo} from 'react'\n\nimport {FEATURES, useFeatureEnabled} from '../../hooks/useFeatureEnabled'\nimport {useResourceCache} from '../../store/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 | SingleActionResult>>(\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(FEATURES.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 ComponentType, type RefAttributes, type SVGProps} from 'react'\n\nexport function RhombusIcon(props: SVGProps<SVGSVGElement> & RefAttributes<SVGSVGElement>) {\n const {ref, ...rest} = props\n return (\n <svg\n data-sanity-icon=\"rhombus\"\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 21 21\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...rest}\n ref={ref}\n >\n <path\n d=\"M10.5 3.78L17.22 10.5L10.5 17.22L3.78 10.5L10.5 3.78Z\"\n stroke=\"currentColor\"\n strokeWidth={1.2}\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n}\n\nexport const CreateVariantIcon: ComponentType = (props) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 21 21\"\n fill=\"none\"\n {...props}\n >\n <path\n d=\"M17.22 10.5L10.5 3.78003L3.78003 10.5L10.5 17.22\"\n stroke=\"currentColor\"\n strokeWidth={1.2}\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M16.7999 13.86H13.8599M13.8599 13.86H10.9199M13.8599 13.86V10.92M13.8599 13.86V16.8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.2\"\n strokeLinejoin=\"round\"\n />\n </svg>\n)\n","import {type EditableReleaseDocument} from '@sanity/client'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {Box, Card, Flex, useToast} from '@sanity/ui'\nimport {type FormEvent, useCallback, useState} from 'react'\n\nimport {Button} from '../../../../ui-components/button/Button'\nimport {Dialog} from '../../../../ui-components/dialog/Dialog'\nimport {useTranslation} from '../../../i18n/hooks/useTranslation'\nimport {useSetPerspective} from '../../../perspective/useSetPerspective'\nimport {CreatedRelease, type OriginInfo} from '../../__telemetry__/releases.telemetry'\nimport {useCreateReleaseMetadata} from '../../hooks/useCreateReleaseMetadata'\nimport {useGuardWithReleaseLimitUpsell} from '../../hooks/useGuardWithReleaseLimitUpsell'\nimport {useReleaseFormStorage} from '../../hooks/useReleaseFormStorage'\nimport {isReleaseLimitError} from '../../store/isReleaseLimitError'\nimport {useReleaseOperations} from '../../store/useReleaseOperations'\nimport {getIsReleaseInvalid} from '../../util/getIsReleaseInvalid'\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 const {clearReleaseDataFromStorage} = useReleaseFormStorage()\n\n const [release, setRelease] = useState(getReleaseDefaults)\n const [isSubmitting, setIsSubmitting] = useState(false)\n const invalid = getIsReleaseInvalid(release)\n\n const {releasePromise} = useGuardWithReleaseLimitUpsell()\n\n const handleOnSubmit = useCallback(\n // oxlint-disable-next-line no-deprecated -- will fix in follow up PR\n async (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault()\n\n setIsSubmitting(true)\n const inQuota = await releasePromise\n\n if (!inQuota) {\n setIsSubmitting(false)\n return\n }\n\n try {\n const releaseValue = createReleaseMetadata(release)\n\n await createRelease(releaseValue)\n // Close the dialog after creating the release.\n onCancel()\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 clearReleaseDataFromStorage()\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 }\n setIsSubmitting(false)\n clearReleaseDataFromStorage()\n },\n [\n releasePromise,\n createReleaseMetadata,\n release,\n createRelease,\n telemetry,\n origin,\n setPerspective,\n onSubmit,\n onCancel,\n toast,\n t,\n clearReleaseDataFromStorage,\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 const handleOnClose = useCallback(() => {\n clearReleaseDataFromStorage()\n onCancel()\n }, [clearReleaseDataFromStorage, onCancel])\n\n return (\n <Dialog\n onClickOutside={onCancel}\n header={dialogTitle}\n id=\"create-release-dialog\"\n onClose={handleOnClose}\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 || invalid}\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 {defineEvent} from '@sanity/telemetry'\n\n// Parameter interface to distinguish navigation source\ninterface NavigationSourceInfo {\n source: 'menu' | 'view-picker'\n}\n\n// Event when user navigates to releases overview\nexport const NavigatedToReleasesOverview = defineEvent<NavigationSourceInfo>({\n name: 'Navigated to Content Releases',\n version: 1,\n description: 'User navigated to the content releases list view',\n})\n\n// Event when user navigates to scheduled drafts view\nexport const NavigatedToScheduledDrafts = defineEvent<NavigationSourceInfo>({\n name: 'Navigated to Scheduled Drafts',\n version: 1,\n description: 'User navigated to the scheduled drafts list view',\n})\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"navigation.telemetry-VbqjOek0.js","names":["EditableReleaseDocument","useCallback","useTimeZone","CONTENT_RELEASES_TIME_ZONE_SCOPE","useCreateReleaseMetadata","$","_c","zoneDateToUtc","t0","release","metadata","intendedPublishAt","Date","toISOString","undefined","title","trim","createReleaseMetadata","noop","useEffect","useState","useReleasesUpsell","useGuardWithReleaseLimitUpsell","$","_c","isPendingGuardResponse","setIsPendingGuardResponse","releasePromise","setReleasePromise","guardWithReleaseLimitUpsell","t0","promise","Promise","resolve","hasPassed","t1","t2","ReleaseType","useCallback","RELEASE_FORM_STORAGE_KEY","ReleaseFormDraft","title","description","releaseType","intendedPublishAt","useReleaseFormStorage","$","_c","getStoredReleaseData","_temp","saveReleaseDataToStorage","_temp2","clearReleaseDataFromStorage","_temp3","t0","Symbol","for","localStorage","removeItem","data","setItem","JSON","stringify","stored","getItem","parse","undefined","EditableReleaseDocument","getIsReleaseInvalid","release","metadata","releaseType","intendedPublishAt","EarthGlobeIcon","Flex","format","isValid","parse","useCallback","useMemo","Button","MONTH_PICKER_VARIANT","CalendarLabels","DateTimeInput","getCalendarLabels","useDialogTimeZone","TimeZoneScope","useTimeZone","useTranslation","ScheduleDatePickerProps","value","Date","onChange","date","timeZoneScope","inputDateFormat","ScheduleDatePicker","t0","$","_c","t","timeZone","utcToCurrentZoneDate","zoneDateToUtc","dialogTimeZoneShow","DialogTimeZone","dialogProps","T0","T1","t1","t2","t3","t4","t5","t6","t7","t8","t9","timeZoneAdjustedValue","undefined","t10","handlePublishAtCalendarChange","t11","event","date_0","currentTarget","parsedDate","handlePublishAtInputChange","t12","calendarLabels","carousel","abbreviation","t13","t14","EditableReleaseDocument","useCallback","useEffect","useMemo","useRef","useState","ReleaseFormFields","Pick","UseReleaseFormOptimisticUpdatingOptions","externalValue","id","extractData","value","useReleaseFormOptimisticUpdating","t0","$","_c","t1","incomingFormData","t2","localData","setLocalData","focusedField","setFocusedField","previousIdRef","t3","currentFormData","formFieldNames","Object","keys","Array","unfocusedFieldUpdates","filter","field","reduce","fieldUpdates","field_0","updateUnfocusedFields","t4","t5","_createdAt","isEditingExistingRelease","Boolean","current","t6","Symbol","for","fieldName","createFocusHandler","t7","handleBlur","t8","formDataUpdates","currentFormData_0","updateLocalData","t9","EditableReleaseDocument","Stack","getTheme_v2","ChangeEvent","useCallback","useEffect","useRef","useState","css","styled","useTranslation","useReleaseFormOptimisticUpdating","MAX_DESCRIPTION_HEIGHT","TitleTextArea","textarea","props","color","font","theme","text","family","weights","bold","sizes","fontSize","lineHeight","input","default","enabled","fg","placeholder","DescriptionTextArea","regular","getIsReleaseOpen","release","state","resizeTextarea","element","HTMLTextAreaElement","style","height","scrollHeight","TitleDescriptionForm","t0","$","_c","onChange","disabled","t1","isReleaseOpen","titleRef","descriptionRef","setScrollHeight","t","t2","externalValue","id","_id","extractData","_temp","localData","updateLocalData","createFocusHandler","handleBlur","t3","Symbol","for","current","t4","metadata","title","t5","t6","description","t7","event","preventDefault","target","value","handleTitleChange","t8","event_0","currentTarget","handleDescriptionChange","shouldShowDescription","t9","t10","t11","t12","t13","t14","maxHeight","overflowY","t15","EditableReleaseDocument","ReleaseType","ChevronDownIcon","InfoOutlineIcon","Button","Flex","Menu","MenuItem","Stack","TabPanel","Text","addHours","startOfHour","ComponentType","MouseEventHandler","useCallback","useEffect","useId","useState","MenuButton","Tooltip","useTranslation","CONTENT_RELEASES_TIME_ZONE_SCOPE","useReleaseFormStorage","isReleaseType","DEFAULT_RELEASE_TYPE","RELEASE_TYPES_TONES","ReleaseAvatar","ScheduleDatePicker","TitleDescriptionForm","ReleaseForm","props","$","_c","onChange","value","t0","metadata","releaseType","t1","intendedPublishAt","undefined","t","getStoredReleaseData","saveReleaseDataToStorage","id","_id","t2","t3","storedData","updatedValue","title","description","t4","updatedValue_0","handleOnChangeAndStorage","t5","date","toISOString","handleBundlePublishAtCalendarChange","t6","event","pickedReleaseType","currentTarget","dataset","nextInputValue","Date","handleReleaseTypeChange","t7","updatedRelease","handleTitleDescriptionChange","menuButtonId","menuButton","setMenuButton","t8","t9","t10","Symbol","for","maxWidth","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","placement","matchReferenceWidth","boundaryElement","t25","Object","keys","t26","map","type","t27","t28","outline","t29","t30","t31","t32","t33","ReleaseTypeOption","text","SingleActionResult","isErrorWithDetails","useReleasePermissionsValue","ReleasePermissionError","details","type","isReleasePermissionError","error","createReleasePermissionsStore","isContentReleasesEnabled","permissions","key","checkWithPermissionGuard","args","Promise","action","T","Parameters","name","undefined","dryRun","skipCrossDatasetReferenceValidation","e","SingleActionResult","useMemo","FEATURES","useFeatureEnabled","useResourceCache","createReleasePermissionsStore","RELEASE_PERMISSIONS_RESOURCE_CACHE_NAMESPACE","useReleasePermissionsValue","checkWithPermissionGuard","args","Promise","action","T","Parameters","permissions","key","useReleasePermissions","$","_c","resourceCache","contentReleasesFeature","contentReleases","releasePermissionsStore","get","dependencies","namespace","enabled","set","value","ComponentType","RefAttributes","SVGProps","RhombusIcon","props","$","_c","ref","rest","t0","Symbol","for","t1","CreateVariantIcon","t2","EditableReleaseDocument","useTelemetry","Box","Card","Flex","useToast","FormEvent","useCallback","useState","Button","Dialog","useTranslation","useSetPerspective","CreatedRelease","OriginInfo","useCreateReleaseMetadata","useGuardWithReleaseLimitUpsell","useReleaseFormStorage","isReleaseLimitError","useReleaseOperations","getIsReleaseInvalid","getReleaseIdFromReleaseDocumentId","getReleaseDefaults","ReleaseForm","CreateReleaseDialogProps","onCancel","onSubmit","createdReleaseId","origin","CreateReleaseDialog","props","$","_c","toast","createRelease","setPerspective","t","telemetry","createReleaseMetadata","clearReleaseDataFromStorage","release","setRelease","isSubmitting","setIsSubmitting","t0","invalid","releasePromise","t1","event","preventDefault","inQuota","releaseValue","log","Promise","_temp","_id","t2","err","console","error","push","closable","status","title","handleOnSubmit","Symbol","for","releaseMetadata","handleOnChange","t3","dialogTitle","t4","dialogConfirm","t5","handleOnClose","t6","t7","t8","t9","t10","resolve","setTimeout","defineEvent","NavigationSourceInfo","source","NavigatedToReleasesOverview","name","version","description","NavigatedToScheduledDrafts"],"sources":["../src/core/releases/hooks/useCreateReleaseMetadata.ts","../src/core/releases/hooks/useGuardWithReleaseLimitUpsell.ts","../src/core/releases/hooks/useReleaseFormStorage.ts","../src/core/releases/util/getIsReleaseInvalid.ts","../src/core/releases/components/ScheduleDatePicker.tsx","../src/core/releases/hooks/useReleaseFormOptimisticUpdating.ts","../src/core/releases/components/dialog/TitleDescriptionForm.tsx","../src/core/releases/components/dialog/ReleaseForm.tsx","../src/core/releases/store/createReleasePermissionsStore.ts","../src/core/releases/store/useReleasePermissions.ts","../src/core/variants/plugin/components/PersonalizationIcons.tsx","../src/core/releases/components/dialog/CreateReleaseDialog.tsx","../src/core/releases/__telemetry__/navigation.telemetry.ts"],"sourcesContent":["import {type EditableReleaseDocument} from '@sanity/client'\nimport {useCallback} from 'react'\n\nimport {useTimeZone} from '../../hooks/useTimeZone'\nimport {CONTENT_RELEASES_TIME_ZONE_SCOPE} from '../../studio/constants'\n\nexport const useCreateReleaseMetadata = () => {\n const {zoneDateToUtc} = useTimeZone(CONTENT_RELEASES_TIME_ZONE_SCOPE)\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 noop from 'lodash-es/noop.js'\nimport {useEffect, useState} from 'react'\n\nimport {useReleasesUpsell} from '../contexts/upsell/useReleasesUpsell'\n\nexport function useGuardWithReleaseLimitUpsell() {\n const [isPendingGuardResponse, setIsPendingGuardResponse] = useState<boolean>(true)\n const [releasePromise, setReleasePromise] = useState<Promise<boolean> | null>(null)\n const {guardWithReleaseLimitUpsell} = useReleasesUpsell()\n\n useEffect(() => {\n // oxlint-disable-next-line react/react-compiler\n setIsPendingGuardResponse(true)\n\n const promise = new Promise<boolean>((resolve) => {\n void guardWithReleaseLimitUpsell(noop, false, (hasPassed: boolean) => {\n resolve(hasPassed)\n })\n })\n\n setReleasePromise(promise)\n }, [guardWithReleaseLimitUpsell, isPendingGuardResponse])\n\n return {\n releasePromise,\n }\n}\n","import {type ReleaseType} from '@sanity/client'\nimport {useCallback} from 'react'\n\nconst RELEASE_FORM_STORAGE_KEY = 'studio.release-form.recovery'\n\ninterface ReleaseFormDraft {\n title?: string\n description?: string\n releaseType?: ReleaseType\n intendedPublishAt?: string\n}\n\n/**\n * This hook is used to store the release form data in localStorage.\n * The main use case is when a user accidentally closes the dialog for a release before it is created .\n *\n * @returns an object with the following methods:\n * - getStoredReleaseData: a function that returns the stored release form data\n * - saveReleaseDataToStorage: a function that saves the release form data to localStorage\n * - clearReleaseDataFromStorage: a function that clears the release form data from localStorage\n */\nexport function useReleaseFormStorage() {\n const getStoredReleaseData = useCallback((): ReleaseFormDraft | undefined => {\n const stored = localStorage.getItem(RELEASE_FORM_STORAGE_KEY)\n return stored ? JSON.parse(stored) : undefined\n }, [])\n\n const saveReleaseDataToStorage = useCallback((data: ReleaseFormDraft) => {\n localStorage.setItem(RELEASE_FORM_STORAGE_KEY, JSON.stringify(data))\n }, [])\n\n const clearReleaseDataFromStorage = useCallback(() => {\n localStorage.removeItem(RELEASE_FORM_STORAGE_KEY)\n }, [])\n\n return {getStoredReleaseData, saveReleaseDataToStorage, clearReleaseDataFromStorage}\n}\n","import {type EditableReleaseDocument} from '@sanity/client'\n\nexport function getIsReleaseInvalid(release: EditableReleaseDocument) {\n return release.metadata?.releaseType === 'scheduled' && !release.metadata?.intendedPublishAt\n}\n","import {EarthGlobeIcon} from '@sanity/icons/EarthGlobe'\nimport {Flex} from '@sanity/ui'\nimport {format} from 'date-fns/format'\nimport {isValid} from 'date-fns/isValid'\nimport {parse} from 'date-fns/parse'\nimport {useCallback, useMemo} from 'react'\n\nimport {Button} from '../../../ui-components/button/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 useDialogTimeZone from '../../hooks/useDialogTimeZone'\nimport {type TimeZoneScope, useTimeZone} from '../../hooks/useTimeZone'\nimport {useTranslation} from '../../i18n/hooks/useTranslation'\n\ninterface ScheduleDatePickerProps {\n value: Date | undefined\n onChange: (date: Date) => void\n timeZoneScope: TimeZoneScope\n}\n\nconst inputDateFormat = 'PP HH:mm'\n\nexport const ScheduleDatePicker = ({value, onChange, timeZoneScope}: ScheduleDatePickerProps) => {\n const {t} = useTranslation()\n const {timeZone, utcToCurrentZoneDate, zoneDateToUtc} = useTimeZone(timeZoneScope)\n const {dialogTimeZoneShow, DialogTimeZone, dialogProps} = useDialogTimeZone(timeZoneScope)\n\n const timeZoneAdjustedValue = value ? utcToCurrentZoneDate(value) : undefined\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 flex={1} justify=\"space-between\">\n <DateTimeInput\n selectTime\n monthPickerVariant={MONTH_PICKER_VARIANT.carousel}\n onChange={handlePublishAtCalendarChange}\n onInputChange={handlePublishAtInputChange}\n calendarLabels={calendarLabels}\n value={timeZoneAdjustedValue}\n inputValue={timeZoneAdjustedValue ? format(timeZoneAdjustedValue, inputDateFormat) : ''}\n constrainSize={false}\n padding={0}\n isPastDisabled\n timeZoneScope={timeZoneScope}\n />\n\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 {type EditableReleaseDocument} from '@sanity/client'\nimport {useCallback, useEffect, useMemo, useRef, useState} from 'react'\n\ntype ReleaseFormFields = Pick<EditableReleaseDocument['metadata'], 'title' | 'description'>\n\ninterface UseReleaseFormOptimisticUpdatingOptions {\n /** The external value from props/server */\n externalValue: EditableReleaseDocument\n id: string\n extractData: (value: EditableReleaseDocument) => ReleaseFormFields\n}\n\n/**\n * Hook for managing release form state that syncs with server data while respecting per-field focus.\n *\n * This prevents server updates from overriding user input during typing.\n * Local state syncs with server data on a per-field basis only when the field is not focused.\n *\n * @internal\n */\nexport function useReleaseFormOptimisticUpdating({\n externalValue,\n id,\n extractData,\n}: UseReleaseFormOptimisticUpdatingOptions) {\n const incomingFormData = useMemo(() => extractData(externalValue), [externalValue, extractData])\n const [localData, setLocalData] = useState(() => incomingFormData)\n const [focusedField, setFocusedField] = useState<string | null>(null)\n const previousIdRef = useRef(id)\n\n const updateUnfocusedFields = useCallback(\n (currentFormData: ReleaseFormFields) => {\n const formFieldNames = Object.keys(incomingFormData) as Array<keyof ReleaseFormFields>\n const unfocusedFieldUpdates = formFieldNames\n .filter((field) => field !== focusedField)\n .reduce<Partial<ReleaseFormFields>>((fieldUpdates, field) => {\n fieldUpdates[field] = incomingFormData[field]\n\n return fieldUpdates\n }, {})\n\n return {...currentFormData, ...unfocusedFieldUpdates}\n },\n [incomingFormData, focusedField],\n )\n\n useEffect(() => {\n // New releases don't have _createdAt and should always sync to support local storage\n const isEditingExistingRelease = Boolean(externalValue._createdAt)\n\n // if tracking a new ID\n\n if (previousIdRef.current === id) {\n setLocalData(isEditingExistingRelease ? updateUnfocusedFields : incomingFormData)\n } else {\n previousIdRef.current = id\n setLocalData(incomingFormData)\n setFocusedField(null)\n }\n }, [incomingFormData, id, externalValue._createdAt, updateUnfocusedFields])\n\n const createFocusHandler = useCallback(\n (fieldName: string) => () => setFocusedField(fieldName),\n [],\n )\n\n const handleBlur = useCallback(() => setFocusedField(null), [])\n\n const updateLocalData = useCallback((formDataUpdates: Partial<ReleaseFormFields>) => {\n setLocalData((currentFormData) => ({...currentFormData, ...formDataUpdates}))\n }, [])\n\n return {\n localData,\n updateLocalData,\n createFocusHandler,\n handleBlur,\n focusedField,\n }\n}\n","import {type EditableReleaseDocument} from '@sanity/client'\nimport {Stack} from '@sanity/ui'\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 {useReleaseFormOptimisticUpdating} from '../../hooks/useReleaseFormOptimisticUpdating'\n\n// Cap the description height and let it scroll internally past this point, so the dialog stays a\n// sensible size regardless of how long the description is.\nconst MAX_DESCRIPTION_HEIGHT = 200\n\nconst TitleTextArea = styled.textarea((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 min-height: ${font.text.sizes[4].lineHeight}px;\n margin: 0;\n position: relative;\n z-index: 1;\n display: block;\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\nfunction resizeTextarea(element: HTMLTextAreaElement): void {\n element.style.height = 'auto'\n element.style.height = `${element.scrollHeight}px`\n}\n\n/**\n * The editable title + description form for a release. Used inside the create/edit dialogs — the\n * release detail page itself is a read-only display surface (see ReleaseDetailsEditor), and routes\n * edits here through a dialog so editing is an explicit, intentional action.\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 titleRef = useRef<HTMLTextAreaElement>(null)\n const descriptionRef = useRef<HTMLTextAreaElement>(null)\n const [scrollHeight, setScrollHeight] = useState(46)\n const {t} = useTranslation()\n\n const {localData, updateLocalData, createFocusHandler, handleBlur} =\n useReleaseFormOptimisticUpdating({\n externalValue: release,\n id: release._id,\n extractData: useCallback(\n ({metadata}: EditableReleaseDocument) => ({\n title: metadata.title,\n description: metadata.description,\n }),\n [],\n ),\n })\n\n useEffect(() => {\n if (titleRef.current) {\n resizeTextarea(titleRef.current)\n }\n }, [release.metadata.title])\n\n useEffect(() => {\n if (descriptionRef.current) {\n resizeTextarea(descriptionRef.current)\n setScrollHeight(descriptionRef.current.scrollHeight)\n }\n }, [release.metadata.description])\n\n const handleTitleChange = useCallback(\n (event: ChangeEvent<HTMLTextAreaElement>) => {\n event.preventDefault()\n const title = event.target.value\n updateLocalData({title})\n onChange({...release, metadata: {...release.metadata, title}})\n if (titleRef.current) {\n resizeTextarea(titleRef.current)\n }\n },\n [onChange, release, updateLocalData],\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 updateLocalData({description})\n onChange({...release, metadata: {...release.metadata, description}})\n\n // Reset to 'auto' first so the textarea can shrink when text is removed\n if (descriptionRef.current) {\n resizeTextarea(descriptionRef.current)\n }\n\n setScrollHeight(event.currentTarget.scrollHeight)\n },\n [isReleaseOpen, onChange, release, updateLocalData],\n )\n\n const shouldShowDescription = isReleaseOpen || localData.description\n\n return (\n <Stack gap={3}>\n <TitleTextArea\n ref={titleRef}\n onChange={handleTitleChange}\n onFocus={createFocusHandler('title')}\n onBlur={handleBlur}\n value={localData.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={!localData.title}\n value={localData.description}\n placeholder={t('release.form.placeholder-describe-release')}\n onChange={handleDescriptionChange}\n onFocus={createFocusHandler('description')}\n onBlur={handleBlur}\n style={{\n height: `${scrollHeight}px`,\n maxHeight: MAX_DESCRIPTION_HEIGHT,\n overflowY: scrollHeight > MAX_DESCRIPTION_HEIGHT ? 'auto' : 'hidden',\n }}\n data-testid=\"release-form-description\"\n disabled={disabled}\n readOnly={!isReleaseOpen}\n />\n )}\n </Stack>\n )\n}\n","import {type EditableReleaseDocument, type ReleaseType} from '@sanity/client'\nimport {ChevronDownIcon} from '@sanity/icons/ChevronDown'\nimport {InfoOutlineIcon} from '@sanity/icons/InfoOutline'\nimport {\n // oxlint-disable-next-line no-restricted-imports -- fine-grained control needed\n Button,\n Flex,\n Menu,\n // oxlint-disable-next-line no-restricted-imports -- fine-grained control needed\n MenuItem,\n Stack,\n TabPanel,\n Text,\n} from '@sanity/ui'\nimport {addHours} from 'date-fns/addHours'\nimport {startOfHour} from 'date-fns/startOfHour'\nimport {\n type ComponentType,\n type MouseEventHandler,\n useCallback,\n useEffect,\n useId,\n useState,\n} from 'react'\n\nimport {MenuButton} from '../../../../ui-components/menuButton/MenuButton'\nimport {Tooltip} from '../../../../ui-components/tooltip/Tooltip'\nimport {useTranslation} from '../../../i18n/hooks/useTranslation'\nimport {CONTENT_RELEASES_TIME_ZONE_SCOPE} from '../../../studio/constants'\nimport {useReleaseFormStorage} from '../../hooks/useReleaseFormStorage'\nimport {isReleaseType} from '../../store/types'\nimport {DEFAULT_RELEASE_TYPE, 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 = DEFAULT_RELEASE_TYPE, intendedPublishAt} = value.metadata || {}\n const {t} = useTranslation()\n const {getStoredReleaseData, saveReleaseDataToStorage} = useReleaseFormStorage()\n\n const id = value._id\n\n useEffect(() => {\n const storedData = getStoredReleaseData()\n if (storedData) {\n const updatedValue = {\n metadata: {\n title: storedData.title,\n description: storedData.description,\n releaseType: storedData.releaseType ?? DEFAULT_RELEASE_TYPE,\n intendedPublishAt: storedData.intendedPublishAt,\n },\n }\n onChange({_id: id, ...updatedValue})\n }\n }, [getStoredReleaseData, id, onChange])\n\n const handleOnChangeAndStorage = useCallback(\n (updatedValue: EditableReleaseDocument) => {\n onChange(updatedValue)\n saveReleaseDataToStorage({\n ...updatedValue.metadata,\n })\n },\n [onChange, saveReleaseDataToStorage],\n )\n\n const handleBundlePublishAtCalendarChange = useCallback(\n (date: Date) => {\n handleOnChangeAndStorage({\n ...value,\n metadata: {...value.metadata, intendedPublishAt: date.toISOString()},\n })\n },\n [handleOnChangeAndStorage, value],\n )\n\n const handleReleaseTypeChange = useCallback<MouseEventHandler<HTMLButtonElement>>(\n (event) => {\n const pickedReleaseType = event.currentTarget.dataset.value\n\n if (!isReleaseType(pickedReleaseType)) {\n return\n }\n\n // select the start of the next hour\n const nextInputValue = startOfHour(addHours(new Date(), 1))\n\n handleOnChangeAndStorage({\n ...value,\n metadata: {\n ...value.metadata,\n releaseType: pickedReleaseType,\n intendedPublishAt:\n (pickedReleaseType === 'scheduled' && nextInputValue.toISOString()) || undefined,\n },\n })\n },\n [handleOnChangeAndStorage, value],\n )\n\n const handleTitleDescriptionChange = useCallback(\n (updatedRelease: EditableReleaseDocument) => {\n handleOnChangeAndStorage({\n ...value,\n metadata: {\n ...value.metadata,\n title: updatedRelease.metadata.title,\n description: updatedRelease.metadata.description,\n },\n })\n },\n [handleOnChangeAndStorage, value],\n )\n\n const menuButtonId = useId()\n const [menuButton, setMenuButton] = useState<HTMLElement | null>(null)\n\n return (\n <Stack gap={5}>\n <Stack gap={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 gap={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 gap={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.${releaseType}`)}\n releaseType={releaseType}\n />\n <Text size={1}>\n <ChevronDownIcon />\n </Text>\n </Flex>\n </Button>\n }\n popover={{\n placement: 'bottom',\n matchReferenceWidth: true,\n // oxlint-disable-next-line no-deprecated -- will fix in follow up PR\n boundaryElement: menuButton,\n }}\n menu={\n <Menu>\n {/* oxlint-disable-next-line typescript/no-unsafe-type-assertion */}\n {(Object.keys(RELEASE_TYPES_TONES) as ReleaseType[]).map((type) => (\n <MenuItem key={type} data-value={type} onClick={handleReleaseTypeChange}>\n <ReleaseTypeOption text={t(`release.type.${type}`)} releaseType={type} />\n </MenuItem>\n ))}\n </Menu>\n }\n />\n <Flex gap={1}>\n {releaseType === '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 value={intendedPublishAt ? new Date(intendedPublishAt) : undefined}\n onChange={handleBundlePublishAtCalendarChange}\n timeZoneScope={CONTENT_RELEASES_TIME_ZONE_SCOPE}\n />\n </TabPanel>\n )}\n </Flex>\n </Stack>\n </Stack>\n <TitleDescriptionForm release={value} onChange={handleTitleDescriptionChange} />\n </Stack>\n )\n}\n\nconst ReleaseTypeOption: ComponentType<{\n text: string\n releaseType: ReleaseType\n}> = ({releaseType, text}) => (\n <Flex gap={3} align=\"center\">\n <ReleaseAvatar padding={1} releaseType={releaseType} />\n <Text>{text}</Text>\n </Flex>\n)\n","import {type SingleActionResult} from '@sanity/client'\n\nimport {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 */\nconst 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 <\n T extends (...args: any[]) => Promise<void | SingleActionResult>,\n >(\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 {type SingleActionResult} from '@sanity/client'\nimport {useMemo} from 'react'\n\nimport {FEATURES, useFeatureEnabled} from '../../hooks/useFeatureEnabled'\nimport {useResourceCache} from '../../store/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 | SingleActionResult>>(\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(FEATURES.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 ComponentType, type RefAttributes, type SVGProps} from 'react'\n\nexport function RhombusIcon(props: SVGProps<SVGSVGElement> & RefAttributes<SVGSVGElement>) {\n const {ref, ...rest} = props\n return (\n <svg\n data-sanity-icon=\"rhombus\"\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 21 21\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...rest}\n ref={ref}\n >\n <path\n d=\"M10.5 3.78L17.22 10.5L10.5 17.22L3.78 10.5L10.5 3.78Z\"\n stroke=\"currentColor\"\n strokeWidth={1.2}\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n}\n\nexport const CreateVariantIcon: ComponentType = (props) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 21 21\"\n fill=\"none\"\n {...props}\n >\n <path\n d=\"M17.22 10.5L10.5 3.78003L3.78003 10.5L10.5 17.22\"\n stroke=\"currentColor\"\n strokeWidth={1.2}\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M16.7999 13.86H13.8599M13.8599 13.86H10.9199M13.8599 13.86V10.92M13.8599 13.86V16.8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.2\"\n strokeLinejoin=\"round\"\n />\n </svg>\n)\n","import {type EditableReleaseDocument} from '@sanity/client'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {Box, Card, Flex, useToast} from '@sanity/ui'\nimport {type FormEvent, useCallback, useState} from 'react'\n\nimport {Button} from '../../../../ui-components/button/Button'\nimport {Dialog} from '../../../../ui-components/dialog/Dialog'\nimport {useTranslation} from '../../../i18n/hooks/useTranslation'\nimport {useSetPerspective} from '../../../perspective/useSetPerspective'\nimport {CreatedRelease, type OriginInfo} from '../../__telemetry__/releases.telemetry'\nimport {useCreateReleaseMetadata} from '../../hooks/useCreateReleaseMetadata'\nimport {useGuardWithReleaseLimitUpsell} from '../../hooks/useGuardWithReleaseLimitUpsell'\nimport {useReleaseFormStorage} from '../../hooks/useReleaseFormStorage'\nimport {isReleaseLimitError} from '../../store/isReleaseLimitError'\nimport {useReleaseOperations} from '../../store/useReleaseOperations'\nimport {getIsReleaseInvalid} from '../../util/getIsReleaseInvalid'\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 const {clearReleaseDataFromStorage} = useReleaseFormStorage()\n\n const [release, setRelease] = useState(getReleaseDefaults)\n const [isSubmitting, setIsSubmitting] = useState(false)\n const invalid = getIsReleaseInvalid(release)\n\n const {releasePromise} = useGuardWithReleaseLimitUpsell()\n\n const handleOnSubmit = useCallback(\n // oxlint-disable-next-line no-deprecated -- will fix in follow up PR\n async (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault()\n\n setIsSubmitting(true)\n const inQuota = await releasePromise\n\n if (!inQuota) {\n setIsSubmitting(false)\n return\n }\n\n try {\n const releaseValue = createReleaseMetadata(release)\n\n await createRelease(releaseValue)\n // Close the dialog after creating the release.\n onCancel()\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 clearReleaseDataFromStorage()\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 }\n setIsSubmitting(false)\n clearReleaseDataFromStorage()\n },\n [\n releasePromise,\n createReleaseMetadata,\n release,\n createRelease,\n telemetry,\n origin,\n setPerspective,\n onSubmit,\n onCancel,\n toast,\n t,\n clearReleaseDataFromStorage,\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 const handleOnClose = useCallback(() => {\n clearReleaseDataFromStorage()\n onCancel()\n }, [clearReleaseDataFromStorage, onCancel])\n\n return (\n <Dialog\n onClickOutside={onCancel}\n header={dialogTitle}\n id=\"create-release-dialog\"\n onClose={handleOnClose}\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 || invalid}\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 {defineEvent} from '@sanity/telemetry'\n\n// Parameter interface to distinguish navigation source\ninterface NavigationSourceInfo {\n source: 'menu' | 'view-picker'\n}\n\n// Event when user navigates to releases overview\nexport const NavigatedToReleasesOverview = defineEvent<NavigationSourceInfo>({\n name: 'Navigated to Content Releases',\n version: 1,\n description: 'User navigated to the content releases list view',\n})\n\n// Event when user navigates to scheduled drafts view\nexport const NavigatedToScheduledDrafts = defineEvent<NavigationSourceInfo>({\n name: 'Navigated to Scheduled Drafts',\n version: 1,\n description: 'User navigated to the scheduled drafts list view',\n})\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { p as useCurrentUser } from "./datastores-
|
|
1
|
+
import { p as useCurrentUser } from "./datastores-DpJ5Y313.js";
|
|
2
2
|
import { t as useTranslation } from "./useTranslation-Cqs6Itwv.js";
|
|
3
|
-
import { Sn as releasesLocaleNamespace, Xa as definePlugin, Xn as isGoingToUnpublish, bi as usePerspective, ci as useDocumentPairPermissions, fi as getTargetScopeId, pi as useTargetDocumentState, xo as InsufficientPermissionsMessage } from "./useBundleDocuments-
|
|
4
|
-
import { i as useVersionOperations, r as DiscardVersionDialog, t as UnpublishVersionDialog } from "./UnpublishVersionDialog-
|
|
3
|
+
import { Sn as releasesLocaleNamespace, Xa as definePlugin, Xn as isGoingToUnpublish, bi as usePerspective, ci as useDocumentPairPermissions, fi as getTargetScopeId, pi as useTargetDocumentState, xo as InsufficientPermissionsMessage } from "./useBundleDocuments-DvVAF6cf.js";
|
|
4
|
+
import { i as useVersionOperations, r as DiscardVersionDialog, t as UnpublishVersionDialog } from "./UnpublishVersionDialog-DmFHVqhI.js";
|
|
5
5
|
import { useState } from "react";
|
|
6
6
|
import { c } from "react/compiler-runtime";
|
|
7
7
|
import { jsx } from "react/jsx-runtime";
|
|
@@ -144,4 +144,4 @@ const RELEASES_NAME = "sanity/releases", RELEASES_INTENT = "release", releases =
|
|
|
144
144
|
});
|
|
145
145
|
export { RELEASES_NAME as n, releases as r, RELEASES_INTENT as t };
|
|
146
146
|
|
|
147
|
-
//# sourceMappingURL=plugin-
|
|
147
|
+
//# sourceMappingURL=plugin-DGOEvpWT.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-BmARoHKH.js","names":["TrashIcon","useCallback","useState","InsufficientPermissionsMessage","DocumentActionComponent","DocumentActionDescription","DocumentActionProps","getTargetScopeId","useTargetDocumentState","useTranslation","usePerspective","useDocumentPairPermissions","useCurrentUser","DiscardVersionDialog","isGoingToUnpublish","useDiscardVersionAction","props","$","_c","id","type","version","currentUser","t","selectedPerspective","t0","willUnpublish","targetDocumentState","isTargetReady","status","t1","scopeId","t2","permission","permissions","isPermissionsLoading","dialogOpen","setDialogOpen","t3","Symbol","for","handleDialogOpen","insufficientPermissions","granted","t4","disabled","icon","label","title","t5","component","_id","t6","t7","t8","dialog","onHandle","action","displayName","RevertIcon","TrashIcon","UnpublishIcon","useToast","useCallback","useState","InsufficientPermissionsMessage","DocumentActionComponent","DocumentActionDescription","DocumentActionProps","getTargetScopeId","useTargetDocumentState","useTranslation","useDocumentPairPermissions","useCurrentUser","UnpublishVersionDialog","useVersionOperations","releasesLocaleNamespace","isGoingToUnpublish","useUnpublishVersionAction","props","$","_c","id","type","release","published","version","currentUser","t","t0","isAlreadyUnpublished","revertUnpublishVersion","toast","coreT","targetDocumentState","isTargetReady","status","t1","scopeId","isVariantTarget","variant","undefined","isPublished","publishedSibling","t2","permission","permissions","isPermissionsLoading","dialogOpen","setDialogOpen","t3","_id","push","closable","title","description","handleOnClick","insufficientPermissions","granted","t4","disabled","icon","label","component","t5","t6","t7","t8","t9","dialog","onHandle","action","displayName","DocumentActionComponent","DocumentActionsContext","useDiscardVersionAction","useUnpublishVersionAction","Action","resolveDocumentActions","existingActions","context","duplicateAction","filter","action","versionType","concat","definePlugin","resolveDocumentActions","RELEASES_NAME","RELEASES_INTENT","releases","name","document","actions","context"],"sources":["../src/core/releases/plugin/documentActions/DiscardVersionAction.tsx","../src/core/releases/plugin/documentActions/UnpublishVersionAction.tsx","../src/core/releases/plugin/documentActions/index.ts","../src/core/releases/plugin/index.ts"],"sourcesContent":["import {TrashIcon} from '@sanity/icons/Trash'\nimport {useCallback, useState} from 'react'\n\nimport {InsufficientPermissionsMessage} from '../../../components/InsufficientPermissionsMessage'\nimport {\n type DocumentActionComponent,\n type DocumentActionDescription,\n type DocumentActionProps,\n} from '../../../config/document/actions'\nimport {getTargetScopeId, useTargetDocumentState} from '../../../hooks/useTargetDocumentState'\nimport {useTranslation} from '../../../i18n/hooks/useTranslation'\nimport {usePerspective} from '../../../perspective/usePerspective'\nimport {useDocumentPairPermissions} from '../../../store/grants/documentPairPermissions'\nimport {useCurrentUser} from '../../../store/user/hooks'\nimport {DiscardVersionDialog} from '../../components/dialog/DiscardVersionDialog'\nimport {isGoingToUnpublish} from '../../util/isGoingToUnpublish'\n\n// React Compiler needs functions that are hooks to have the `use` prefix, pascal case are treated as a component, these are hooks even though they're confusingly named `DocumentActionComponent`\n/** @internal */\nexport const useDiscardVersionAction: DocumentActionComponent = (\n props: DocumentActionProps,\n): DocumentActionDescription | null => {\n const {id, type, version} = props\n const currentUser = useCurrentUser()\n const {t} = useTranslation()\n const {selectedPerspective} = usePerspective()\n const willUnpublish = version ? isGoingToUnpublish(version) : false\n const targetDocumentState = useTargetDocumentState(id)\n // The scope of the document targeted by the selected perspective (undefined when the target is\n // still resolving or the draft/published pair applies). While resolving, the action is disabled\n // below instead of silently operating on the base pair.\n const isTargetReady = targetDocumentState.status === 'ready'\n const scopeId = getTargetScopeId(targetDocumentState)\n\n const [permissions, isPermissionsLoading] = useDocumentPairPermissions({\n id,\n type,\n version: scopeId,\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 || !isTargetReady,\n dialog: dialogOpen && {\n type: 'custom',\n component: (\n <DiscardVersionDialog\n isGoingToUnpublish={willUnpublish}\n versionId={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\nuseDiscardVersionAction.action = 'discardVersion'\nuseDiscardVersionAction.displayName = 'DiscardVersionAction'\n","import {RevertIcon} from '@sanity/icons/Revert'\nimport {TrashIcon} from '@sanity/icons/Trash'\nimport {UnpublishIcon} from '@sanity/icons/Unpublish'\nimport {useToast} from '@sanity/ui'\nimport {useCallback, useState} from 'react'\n\nimport {InsufficientPermissionsMessage} from '../../../components/InsufficientPermissionsMessage'\nimport {\n type DocumentActionComponent,\n type DocumentActionDescription,\n type DocumentActionProps,\n} from '../../../config/document/actions'\nimport {getTargetScopeId, useTargetDocumentState} from '../../../hooks/useTargetDocumentState'\nimport {useTranslation} from '../../../i18n/hooks/useTranslation'\nimport {useDocumentPairPermissions} from '../../../store/grants/documentPairPermissions'\nimport {useCurrentUser} from '../../../store/user/hooks'\nimport {UnpublishVersionDialog} from '../../components/dialog/UnpublishVersionDialog'\nimport {useVersionOperations} from '../../hooks/useVersionOperations'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {isGoingToUnpublish} from '../../util/isGoingToUnpublish'\n\n// React Compiler needs functions that are hooks to have the `use` prefix, pascal case are treated as a component, these are hooks even though they're confusingly named `DocumentActionComponent`\n/** @internal */\nexport const useUnpublishVersionAction: DocumentActionComponent = (\n props: DocumentActionProps,\n): DocumentActionDescription | null => {\n const {id, type, release, published, version} = props\n const currentUser = useCurrentUser()\n const {t} = useTranslation(releasesLocaleNamespace)\n const isAlreadyUnpublished = version ? isGoingToUnpublish(version) : false\n const {revertUnpublishVersion} = useVersionOperations()\n const toast = useToast()\n const {t: coreT} = useTranslation()\n\n const targetDocumentState = useTargetDocumentState(id)\n // The scope of the document targeted by the selected perspective (undefined when the target is\n // still resolving or the draft/published pair applies). While resolving, the action is disabled\n // below instead of silently operating on the base pair.\n const isTargetReady = targetDocumentState.status === 'ready'\n const scopeId = getTargetScopeId(targetDocumentState)\n const isVariantTarget = isTargetReady && targetDocumentState.variant !== undefined\n // For variant release versions, \"is there something published to unpublish\" is answered by the\n // variant-of-published sibling — the base `published` document says nothing about the variant.\n const isPublished = isVariantTarget\n ? targetDocumentState.publishedSibling !== undefined\n : published !== null\n\n const [permissions, isPermissionsLoading] = useDocumentPairPermissions({\n id,\n type,\n version: scopeId,\n permission: 'unpublish',\n })\n\n const [dialogOpen, setDialogOpen] = useState(false)\n\n const handleOnClick = useCallback(async () => {\n // if the document is already unpublished, revert the unpublish\n if (isAlreadyUnpublished && version) {\n try {\n await revertUnpublishVersion(version._id)\n } catch {\n toast.push({\n closable: true,\n status: 'error',\n title: coreT('release.action.revert-unpublish-version.failure.title'),\n description: coreT('release.action.revert-unpublish-version.failure.description'),\n })\n }\n } else {\n setDialogOpen(true)\n }\n }, [isAlreadyUnpublished, version, revertUnpublishVersion, toast, coreT])\n\n if (!release || !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 !isAlreadyUnpublished && {\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: isAlreadyUnpublished\n ? t('action.revert-unpublish-actions')\n : t('action.unpublish-doc-actions'),\n icon: isAlreadyUnpublished ? RevertIcon : UnpublishIcon,\n onHandle: handleOnClick,\n disabled: !isPublished || !isTargetReady,\n /** @todo should be switched once we have the document actions updated */\n title: isAlreadyUnpublished\n ? t('action.revert-unpublish-actions')\n : t('action.unpublish-doc-actions'),\n }\n}\n\nuseUnpublishVersionAction.action = 'unpublishVersion'\nuseUnpublishVersionAction.displayName = 'UnpublishVersionAction'\n","import {type DocumentActionComponent} from '../../../config/document/actions'\nimport {type DocumentActionsContext} from '../../../config/types'\nimport {useDiscardVersionAction} from './DiscardVersionAction'\nimport {useUnpublishVersionAction} 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 // For regular version documents, show traditional version actions\n return duplicateAction.concat(useDiscardVersionAction, useUnpublishVersionAction)\n }\n\n return existingActions\n}\n","import {definePlugin} from '../../config/definePlugin'\nimport resolveDocumentActions from './documentActions'\n\n/**\n * @internal\n */\nexport const RELEASES_NAME = 'sanity/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 document: {\n actions: (actions, context) => resolveDocumentActions(actions, context),\n },\n})\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin-DGOEvpWT.js","names":["TrashIcon","useCallback","useState","InsufficientPermissionsMessage","DocumentActionComponent","DocumentActionDescription","DocumentActionProps","getTargetScopeId","useTargetDocumentState","useTranslation","usePerspective","useDocumentPairPermissions","useCurrentUser","DiscardVersionDialog","isGoingToUnpublish","useDiscardVersionAction","props","$","_c","id","type","version","currentUser","t","selectedPerspective","t0","willUnpublish","targetDocumentState","isTargetReady","status","t1","scopeId","t2","permission","permissions","isPermissionsLoading","dialogOpen","setDialogOpen","t3","Symbol","for","handleDialogOpen","insufficientPermissions","granted","t4","disabled","icon","label","title","t5","component","_id","t6","t7","t8","dialog","onHandle","action","displayName","RevertIcon","TrashIcon","UnpublishIcon","useToast","useCallback","useState","InsufficientPermissionsMessage","DocumentActionComponent","DocumentActionDescription","DocumentActionProps","getTargetScopeId","useTargetDocumentState","useTranslation","useDocumentPairPermissions","useCurrentUser","UnpublishVersionDialog","useVersionOperations","releasesLocaleNamespace","isGoingToUnpublish","useUnpublishVersionAction","props","$","_c","id","type","release","published","version","currentUser","t","t0","isAlreadyUnpublished","revertUnpublishVersion","toast","coreT","targetDocumentState","isTargetReady","status","t1","scopeId","isVariantTarget","variant","undefined","isPublished","publishedSibling","t2","permission","permissions","isPermissionsLoading","dialogOpen","setDialogOpen","t3","_id","push","closable","title","description","handleOnClick","insufficientPermissions","granted","t4","disabled","icon","label","component","t5","t6","t7","t8","t9","dialog","onHandle","action","displayName","DocumentActionComponent","DocumentActionsContext","useDiscardVersionAction","useUnpublishVersionAction","Action","resolveDocumentActions","existingActions","context","duplicateAction","filter","action","versionType","concat","definePlugin","resolveDocumentActions","RELEASES_NAME","RELEASES_INTENT","releases","name","document","actions","context"],"sources":["../src/core/releases/plugin/documentActions/DiscardVersionAction.tsx","../src/core/releases/plugin/documentActions/UnpublishVersionAction.tsx","../src/core/releases/plugin/documentActions/index.ts","../src/core/releases/plugin/index.ts"],"sourcesContent":["import {TrashIcon} from '@sanity/icons/Trash'\nimport {useCallback, useState} from 'react'\n\nimport {InsufficientPermissionsMessage} from '../../../components/InsufficientPermissionsMessage'\nimport {\n type DocumentActionComponent,\n type DocumentActionDescription,\n type DocumentActionProps,\n} from '../../../config/document/actions'\nimport {getTargetScopeId, useTargetDocumentState} from '../../../hooks/useTargetDocumentState'\nimport {useTranslation} from '../../../i18n/hooks/useTranslation'\nimport {usePerspective} from '../../../perspective/usePerspective'\nimport {useDocumentPairPermissions} from '../../../store/grants/documentPairPermissions'\nimport {useCurrentUser} from '../../../store/user/hooks'\nimport {DiscardVersionDialog} from '../../components/dialog/DiscardVersionDialog'\nimport {isGoingToUnpublish} from '../../util/isGoingToUnpublish'\n\n// React Compiler needs functions that are hooks to have the `use` prefix, pascal case are treated as a component, these are hooks even though they're confusingly named `DocumentActionComponent`\n/** @internal */\nexport const useDiscardVersionAction: DocumentActionComponent = (\n props: DocumentActionProps,\n): DocumentActionDescription | null => {\n const {id, type, version} = props\n const currentUser = useCurrentUser()\n const {t} = useTranslation()\n const {selectedPerspective} = usePerspective()\n const willUnpublish = version ? isGoingToUnpublish(version) : false\n const targetDocumentState = useTargetDocumentState(id)\n // The scope of the document targeted by the selected perspective (undefined when the target is\n // still resolving or the draft/published pair applies). While resolving, the action is disabled\n // below instead of silently operating on the base pair.\n const isTargetReady = targetDocumentState.status === 'ready'\n const scopeId = getTargetScopeId(targetDocumentState)\n\n const [permissions, isPermissionsLoading] = useDocumentPairPermissions({\n id,\n type,\n version: scopeId,\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 || !isTargetReady,\n dialog: dialogOpen && {\n type: 'custom',\n component: (\n <DiscardVersionDialog\n isGoingToUnpublish={willUnpublish}\n versionId={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\nuseDiscardVersionAction.action = 'discardVersion'\nuseDiscardVersionAction.displayName = 'DiscardVersionAction'\n","import {RevertIcon} from '@sanity/icons/Revert'\nimport {TrashIcon} from '@sanity/icons/Trash'\nimport {UnpublishIcon} from '@sanity/icons/Unpublish'\nimport {useToast} from '@sanity/ui'\nimport {useCallback, useState} from 'react'\n\nimport {InsufficientPermissionsMessage} from '../../../components/InsufficientPermissionsMessage'\nimport {\n type DocumentActionComponent,\n type DocumentActionDescription,\n type DocumentActionProps,\n} from '../../../config/document/actions'\nimport {getTargetScopeId, useTargetDocumentState} from '../../../hooks/useTargetDocumentState'\nimport {useTranslation} from '../../../i18n/hooks/useTranslation'\nimport {useDocumentPairPermissions} from '../../../store/grants/documentPairPermissions'\nimport {useCurrentUser} from '../../../store/user/hooks'\nimport {UnpublishVersionDialog} from '../../components/dialog/UnpublishVersionDialog'\nimport {useVersionOperations} from '../../hooks/useVersionOperations'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {isGoingToUnpublish} from '../../util/isGoingToUnpublish'\n\n// React Compiler needs functions that are hooks to have the `use` prefix, pascal case are treated as a component, these are hooks even though they're confusingly named `DocumentActionComponent`\n/** @internal */\nexport const useUnpublishVersionAction: DocumentActionComponent = (\n props: DocumentActionProps,\n): DocumentActionDescription | null => {\n const {id, type, release, published, version} = props\n const currentUser = useCurrentUser()\n const {t} = useTranslation(releasesLocaleNamespace)\n const isAlreadyUnpublished = version ? isGoingToUnpublish(version) : false\n const {revertUnpublishVersion} = useVersionOperations()\n const toast = useToast()\n const {t: coreT} = useTranslation()\n\n const targetDocumentState = useTargetDocumentState(id)\n // The scope of the document targeted by the selected perspective (undefined when the target is\n // still resolving or the draft/published pair applies). While resolving, the action is disabled\n // below instead of silently operating on the base pair.\n const isTargetReady = targetDocumentState.status === 'ready'\n const scopeId = getTargetScopeId(targetDocumentState)\n const isVariantTarget = isTargetReady && targetDocumentState.variant !== undefined\n // For variant release versions, \"is there something published to unpublish\" is answered by the\n // variant-of-published sibling — the base `published` document says nothing about the variant.\n const isPublished = isVariantTarget\n ? targetDocumentState.publishedSibling !== undefined\n : published !== null\n\n const [permissions, isPermissionsLoading] = useDocumentPairPermissions({\n id,\n type,\n version: scopeId,\n permission: 'unpublish',\n })\n\n const [dialogOpen, setDialogOpen] = useState(false)\n\n const handleOnClick = useCallback(async () => {\n // if the document is already unpublished, revert the unpublish\n if (isAlreadyUnpublished && version) {\n try {\n await revertUnpublishVersion(version._id)\n } catch {\n toast.push({\n closable: true,\n status: 'error',\n title: coreT('release.action.revert-unpublish-version.failure.title'),\n description: coreT('release.action.revert-unpublish-version.failure.description'),\n })\n }\n } else {\n setDialogOpen(true)\n }\n }, [isAlreadyUnpublished, version, revertUnpublishVersion, toast, coreT])\n\n if (!release || !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 !isAlreadyUnpublished && {\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: isAlreadyUnpublished\n ? t('action.revert-unpublish-actions')\n : t('action.unpublish-doc-actions'),\n icon: isAlreadyUnpublished ? RevertIcon : UnpublishIcon,\n onHandle: handleOnClick,\n disabled: !isPublished || !isTargetReady,\n /** @todo should be switched once we have the document actions updated */\n title: isAlreadyUnpublished\n ? t('action.revert-unpublish-actions')\n : t('action.unpublish-doc-actions'),\n }\n}\n\nuseUnpublishVersionAction.action = 'unpublishVersion'\nuseUnpublishVersionAction.displayName = 'UnpublishVersionAction'\n","import {type DocumentActionComponent} from '../../../config/document/actions'\nimport {type DocumentActionsContext} from '../../../config/types'\nimport {useDiscardVersionAction} from './DiscardVersionAction'\nimport {useUnpublishVersionAction} 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 // For regular version documents, show traditional version actions\n return duplicateAction.concat(useDiscardVersionAction, useUnpublishVersionAction)\n }\n\n return existingActions\n}\n","import {definePlugin} from '../../config/definePlugin'\nimport resolveDocumentActions from './documentActions'\n\n/**\n * @internal\n */\nexport const RELEASES_NAME = 'sanity/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 document: {\n actions: (actions, context) => resolveDocumentActions(actions, context),\n },\n})\n"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Xa as definePlugin } from "./useBundleDocuments-
|
|
1
|
+
import { Xa as definePlugin } from "./useBundleDocuments-DvVAF6cf.js";
|
|
2
2
|
import { n as variantsUsEnglishLocaleBundle } from "./i18n-BWMyMJpf.js";
|
|
3
3
|
import { lazy } from "react";
|
|
4
4
|
import { route } from "sanity/router";
|
|
5
|
-
const VariantsTool = lazy(() => import("./VariantsTool-
|
|
5
|
+
const VariantsTool = lazy(() => import("./VariantsTool-BCtrSWfP.js").then((module) => ({ default: module.VariantsTool }))), VariantsStudioNavbar = lazy(() => import("./VariantsStudioNavbar-CXpr7UUl.js").then((module) => ({ default: module.VariantsStudioNavbar }))), VARIANTS_NAME = "sanity/variants", VARIANTS_INTENT = "variant", variants = definePlugin({
|
|
6
6
|
name: VARIANTS_NAME,
|
|
7
7
|
studio: { components: { navbar: VariantsStudioNavbar } },
|
|
8
8
|
tools: [{
|
|
@@ -20,4 +20,4 @@ const VariantsTool = lazy(() => import("./VariantsTool-E4ptTHik.js").then((modul
|
|
|
20
20
|
});
|
|
21
21
|
export { VARIANTS_NAME as n, variants as r, VARIANTS_INTENT as t };
|
|
22
22
|
|
|
23
|
-
//# sourceMappingURL=plugin-
|
|
23
|
+
//# sourceMappingURL=plugin-Da_fKb0U.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-
|
|
1
|
+
{"version":3,"file":"plugin-Da_fKb0U.js","names":["lazy","route","definePlugin","variantsUsEnglishLocaleBundle","VariantsTool","then","module","default","VariantsStudioNavbar","VARIANTS_NAME","VARIANTS_INTENT","VARIANTS_TOOL_NAME","variants","name","studio","components","navbar","tools","title","component","router","create","__internalApplicationType","canHandleIntent","intent","getIntentState","params","variantId","id","i18n","bundles"],"sources":["../src/core/variants/plugin/index.tsx"],"sourcesContent":["import {lazy} from 'react'\nimport {route} from 'sanity/router'\n\nimport {definePlugin} from '../../config/definePlugin'\nimport {variantsUsEnglishLocaleBundle} from '../i18n'\n\nconst VariantsTool = lazy(() =>\n import('../tool/VariantsTool').then((module) => ({default: module.VariantsTool})),\n)\nconst VariantsStudioNavbar = lazy(() =>\n import('./components/VariantsStudioNavbar').then((module) => ({\n default: module.VariantsStudioNavbar,\n })),\n)\n\n/**\n * @internal\n */\nexport const VARIANTS_NAME = 'sanity/variants'\n\n/**\n * @internal\n */\nexport const VARIANTS_INTENT = 'variant'\n\nconst VARIANTS_TOOL_NAME = 'variants'\n\n/**\n * @internal\n */\nexport const variants = definePlugin({\n name: VARIANTS_NAME,\n studio: {\n components: {\n navbar: VariantsStudioNavbar,\n },\n },\n tools: [\n {\n name: VARIANTS_TOOL_NAME,\n title: 'Variants',\n component: VariantsTool,\n router: route.create('/', [route.create('/:variantId')]),\n __internalApplicationType: VARIANTS_NAME,\n canHandleIntent: (intent) => intent === VARIANTS_INTENT,\n getIntentState(intent, params) {\n if (intent === VARIANTS_INTENT) {\n return {variantId: params.id}\n }\n return null\n },\n },\n ],\n i18n: {\n bundles: [variantsUsEnglishLocaleBundle],\n },\n})\n"],"mappings":";;;;AAMA,MAAMI,eAAeJ,WACnB,OAAO,6BAAuB,CAACK,MAAMC,YAAY,EAACC,SAASD,OAAOF,aAAY,EAAE,CAClF,GACMI,uBAAuBR,WAC3B,OAAO,qCAAoC,CAACK,MAAMC,YAAY,EAC5DC,SAASD,OAAOE,qBAClB,EAAE,CACJ,GAKaC,gBAAgB,mBAKhBC,kBAAkB,WAOlBE,WAAWV,aAAa;CACnCW,MAAMJ;CACNK,QAAQ,EACNC,YAAY,EACVC,QAAQR,qBACV,EACF;CACAS,OAAO,CACL;EACEJ,MAAMF;EACNO,OAAO;EACPC,WAAWf;EACXgB,QAAQnB,MAAMoB,OAAO,KAAK,CAACpB,MAAMoB,OAAO,aAAa,CAAC,CAAC;EACvDC,2BAA2Bb;EAC3Bc,kBAAkBC,WAAWA,WAAWd;EACxCe,eAAeD,QAAQE,QAAQ;GAI7B,OAHIF,WAAAA,YACK,EAACG,WAAWD,OAAOE,GAAE,IAEvB;EACT;CACF,CAAC;CAEHC,MAAM,EACJC,SAAS,CAAC3B,6BAA6B,EACzC;AACF,CAAC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { Cn as releasesUsEnglishLocaleBundle, Xa as definePlugin } from "./useBundleDocuments-
|
|
2
|
-
import "./plugin-
|
|
3
|
-
import "./plugin-
|
|
1
|
+
import { Cn as releasesUsEnglishLocaleBundle, Xa as definePlugin } from "./useBundleDocuments-DvVAF6cf.js";
|
|
2
|
+
import "./plugin-DGOEvpWT.js";
|
|
3
|
+
import "./plugin-qHXYpO99.js";
|
|
4
4
|
import { lazy } from "react";
|
|
5
5
|
import { route } from "sanity/router";
|
|
6
|
-
const ReleasesStudioLayout = lazy(() => import("./ReleasesStudioLayout-
|
|
6
|
+
const ReleasesStudioLayout = lazy(() => import("./ReleasesStudioLayout-CtyE88nI.js").then((module) => ({ default: module.ReleasesStudioLayout }))), ReleasesTool = lazy(() => import("./ReleasesTool-BjbRMZlc.js").then((module) => ({ default: module.ReleasesTool }))), SCHEDULES_NAME = "sanity/schedules", SCHEDULES_TOOL_NAME = "releases", schedules = definePlugin((options) => ({
|
|
7
7
|
name: SCHEDULES_NAME,
|
|
8
8
|
studio: { components: { layout: ReleasesStudioLayout } },
|
|
9
9
|
tools: [{
|
|
@@ -26,4 +26,4 @@ const ReleasesStudioLayout = lazy(() => import("./ReleasesStudioLayout-DW7fJSfG.
|
|
|
26
26
|
}));
|
|
27
27
|
export { SCHEDULES_TOOL_NAME as n, schedules as r, SCHEDULES_NAME as t };
|
|
28
28
|
|
|
29
|
-
//# sourceMappingURL=plugin-
|
|
29
|
+
//# sourceMappingURL=plugin-DqqaZdOH.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-
|
|
1
|
+
{"version":3,"file":"plugin-DqqaZdOH.js","names":["lazy","route","definePlugin","DefaultPluginsWorkspaceOptions","releasesUsEnglishLocaleBundle","RELEASES_INTENT","RELEASES_SCHEDULED_DRAFTS_INTENT","ReleasesStudioLayout","then","module","default","ReleasesTool","SCHEDULES_NAME","SCHEDULES_TOOL_NAME","schedules","options","name","studio","components","layout","tools","title","releases","enabled","component","router","create","__internalApplicationType","canHandleIntent","intent","Boolean","getIntentState","params","releaseId","id","searchParams","view","push","_searchParams","i18n","bundles"],"sources":["../src/core/schedules/plugin/index.ts"],"sourcesContent":["import {lazy} from 'react'\nimport {route} from 'sanity/router'\n\nimport {definePlugin} from '../../config/definePlugin'\nimport {type DefaultPluginsWorkspaceOptions} from '../../config/types'\nimport {releasesUsEnglishLocaleBundle} from '../../releases/i18n'\nimport {RELEASES_INTENT} from '../../releases/plugin'\nimport {RELEASES_SCHEDULED_DRAFTS_INTENT} from '../../singleDocRelease/plugin'\n\nconst ReleasesStudioLayout = lazy(() =>\n import('../../releases/plugin/ReleasesStudioLayout').then((module) => ({\n default: module.ReleasesStudioLayout,\n })),\n)\nconst ReleasesTool = lazy(() =>\n import('../../releases/tool/ReleasesTool').then((module) => ({default: module.ReleasesTool})),\n)\n\n/**\n * @internal\n */\nexport const SCHEDULES_NAME = 'sanity/schedules'\n\n/**\n * @internal\n */\nexport const SCHEDULES_TOOL_NAME = 'releases'\n\n/**\n * @internal\n */\nexport const schedules = definePlugin((options: DefaultPluginsWorkspaceOptions) => ({\n name: SCHEDULES_NAME,\n studio: {\n components: {\n layout: ReleasesStudioLayout,\n },\n },\n tools: [\n {\n name: SCHEDULES_TOOL_NAME,\n title: options.releases.enabled ? 'Releases' : 'Scheduled Drafts',\n component: ReleasesTool,\n router: route.create('/', [route.create('/:releaseId')]),\n __internalApplicationType: 'sanity/schedules',\n canHandleIntent: (intent) =>\n Boolean(intent === RELEASES_INTENT || intent === RELEASES_SCHEDULED_DRAFTS_INTENT),\n getIntentState(intent, params) {\n if (intent === RELEASES_INTENT) {\n return {releaseId: params.id}\n }\n if (intent === RELEASES_SCHEDULED_DRAFTS_INTENT) {\n // Handle view parameter and convert to search params\n const searchParams = []\n if (params.view) {\n searchParams.push(['view', params.view])\n }\n return {\n _searchParams: searchParams,\n }\n }\n return null\n },\n },\n ],\n i18n: {\n bundles: [releasesUsEnglishLocaleBundle],\n },\n}))\n"],"mappings":";;;;;AASA,MAAMO,uBAAuBP,WAC3B,OAAO,qCAA6C,CAACQ,MAAMC,YAAY,EACrEC,SAASD,OAAOF,qBAClB,EAAE,CACJ,GACMI,eAAeX,WACnB,OAAO,6BAAmC,CAACQ,MAAMC,YAAY,EAACC,SAASD,OAAOE,aAAY,EAAE,CAC9F,GAKaC,iBAAiB,oBAKjBC,sBAAsB,YAKtBC,YAAYZ,cAAca,aAA6C;CAClFC,MAAMJ;CACNK,QAAQ,EACNC,YAAY,EACVC,QAAQZ,qBACV,EACF;CACAa,OAAO,CACL;EACEJ,MAAMH;EACNQ,OAAON,QAAQO,SAASC,UAAU,aAAa;EAC/CC,WAAWb;EACXc,QAAQxB,MAAMyB,OAAO,KAAK,CAACzB,MAAMyB,OAAO,aAAa,CAAC,CAAC;EACvDC,2BAA2B;EAC3BC,kBAAkBC,WACRA,WAAAA,aAA8BA,WAAAA;EACxCE,eAAeF,QAAQG,QAAQ;GAC7B,IAAIH,WAAAA,WACF,OAAO,EAACI,WAAWD,OAAOE,GAAE;GAE9B,IAAIL,WAAAA,6BAA6C;IAE/C,IAAMM,eAAe,CAAA;IAIrB,OAHIH,OAAOI,QACTD,aAAaE,KAAK,CAAC,QAAQL,OAAOI,IAAI,CAAC,GAElC,EACLE,eAAeH,aACjB;GACF;GACA,OAAO;EACT;CACF,CAAC;CAEHI,MAAM,EACJC,SAAS,CAACpC,6BAA6B,EACzC;AACF,EAAE"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { s as getDraftId, u as getVersionFromId } from "./draftUtils-D3HJGQaW.js";
|
|
2
|
-
import { i as useDocumentStore, lt as getReleaseIdFromReleaseDocumentId } from "./datastores-
|
|
2
|
+
import { i as useDocumentStore, lt as getReleaseIdFromReleaseDocumentId } from "./datastores-DpJ5Y313.js";
|
|
3
3
|
import { t as useTranslation } from "./useTranslation-Cqs6Itwv.js";
|
|
4
|
-
import { Xa as definePlugin, Xo as isPausedCardinalityOneRelease, Yo as isCardinalityOneRelease, bi as usePerspective, r as useAllReleases, vi as useDocumentVersions, wo as useActiveReleases } from "./useBundleDocuments-
|
|
5
|
-
import { d as singleDocReleaseUsEnglishLocaleBundle, n as ScheduleDraftDialog, o as useScheduleDraftOperations, t as useScheduledDraftMenuActions, u as singleDocReleaseNamespace } from "./useScheduledDraftMenuActions-
|
|
6
|
-
import { i as useSingleDocReleaseEnabled, n as useSingleDocReleaseUpsell } from "./SingleDocReleaseUpsellProvider-
|
|
4
|
+
import { Xa as definePlugin, Xo as isPausedCardinalityOneRelease, Yo as isCardinalityOneRelease, bi as usePerspective, r as useAllReleases, vi as useDocumentVersions, wo as useActiveReleases } from "./useBundleDocuments-DvVAF6cf.js";
|
|
5
|
+
import { d as singleDocReleaseUsEnglishLocaleBundle, n as ScheduleDraftDialog, o as useScheduleDraftOperations, t as useScheduledDraftMenuActions, u as singleDocReleaseNamespace } from "./useScheduledDraftMenuActions-DqkHlC0c.js";
|
|
6
|
+
import { i as useSingleDocReleaseEnabled, n as useSingleDocReleaseUpsell } from "./SingleDocReleaseUpsellProvider-BOe2BACb.js";
|
|
7
7
|
import { lazy, useContext, useState } from "react";
|
|
8
8
|
import { c } from "react/compiler-runtime";
|
|
9
9
|
import { jsx } from "react/jsx-runtime";
|
|
@@ -245,7 +245,7 @@ function resolveDocumentActions(existingActions, context) {
|
|
|
245
245
|
}
|
|
246
246
|
return existingActions;
|
|
247
247
|
}
|
|
248
|
-
const SingleDocReleaseLayout = lazy(() => import("./SingleDocReleaseLayout-
|
|
248
|
+
const SingleDocReleaseLayout = lazy(() => import("./SingleDocReleaseLayout-evCp37zs.js").then((module) => ({ default: module.SingleDocReleaseLayout }))), SINGLE_DOC_RELEASE_NAME = "sanity/singleDocRelease", RELEASES_SCHEDULED_DRAFTS_INTENT = "releases-scheduled-drafts", singleDocRelease = definePlugin({
|
|
249
249
|
name: SINGLE_DOC_RELEASE_NAME,
|
|
250
250
|
studio: { components: { layout: SingleDocReleaseLayout } },
|
|
251
251
|
i18n: { bundles: [singleDocReleaseUsEnglishLocaleBundle] },
|
|
@@ -253,4 +253,4 @@ const SingleDocReleaseLayout = lazy(() => import("./SingleDocReleaseLayout-fW8U-
|
|
|
253
253
|
});
|
|
254
254
|
export { SingleDocReleaseProvider as a, useClearScheduledDraftPerspectiveOnDelete as i, SINGLE_DOC_RELEASE_NAME as n, useSingleDocRelease as o, singleDocRelease as r, useValidationStatus as s, RELEASES_SCHEDULED_DRAFTS_INTENT as t };
|
|
255
255
|
|
|
256
|
-
//# sourceMappingURL=plugin-
|
|
256
|
+
//# sourceMappingURL=plugin-qHXYpO99.js.map
|