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.
Files changed (105) hide show
  1. package/lib/{AddonDatasetProvider-B5npf4J4.js → AddonDatasetProvider-CfAw3oMr.js} +2 -2
  2. package/lib/{AddonDatasetProvider-B5npf4J4.js.map → AddonDatasetProvider-CfAw3oMr.js.map} +1 -1
  3. package/lib/{CalendarFilter-DYJEZDCP.js → CalendarFilter-OHGevGRx.js} +3 -3
  4. package/lib/{CalendarFilter-DYJEZDCP.js.map → CalendarFilter-OHGevGRx.js.map} +1 -1
  5. package/lib/{CommentsDocumentLayout-CTL7lt6a.js → CommentsDocumentLayout-p8p-oNuH.js} +2 -2
  6. package/lib/{CommentsDocumentLayout-CTL7lt6a.js.map → CommentsDocumentLayout-p8p-oNuH.js.map} +1 -1
  7. package/lib/{CommentsField-BE_CI2SY.js → CommentsField-CqXs722Y.js} +3 -3
  8. package/lib/{CommentsField-BE_CI2SY.js.map → CommentsField-CqXs722Y.js.map} +1 -1
  9. package/lib/{CommentsInput-D_EM-t5a.js → CommentsInput-B3rd8HlF.js} +5 -5
  10. package/lib/{CommentsInput-D_EM-t5a.js.map → CommentsInput-B3rd8HlF.js.map} +1 -1
  11. package/lib/{CommentsInspector-DtBIUadl.js → CommentsInspector-DTHmjTFc.js} +5 -5
  12. package/lib/{CommentsInspector-DtBIUadl.js.map → CommentsInspector-DTHmjTFc.js.map} +1 -1
  13. package/lib/{CommentsListItem-BFRqZMJ6.js → CommentsListItem-C2Ac0esL.js} +3 -3
  14. package/lib/{CommentsListItem-BFRqZMJ6.js.map → CommentsListItem-C2Ac0esL.js.map} +1 -1
  15. package/lib/{CommentsSelectedPathProvider-CIKpHpK3.js → CommentsSelectedPathProvider-DwDw8s-s.js} +3 -3
  16. package/lib/{CommentsSelectedPathProvider-CIKpHpK3.js.map → CommentsSelectedPathProvider-DwDw8s-s.js.map} +1 -1
  17. package/lib/{CommentsStudioLayout-Dx0jIDle.js → CommentsStudioLayout-e2hCA_5z.js} +4 -4
  18. package/lib/{CommentsStudioLayout-Dx0jIDle.js.map → CommentsStudioLayout-e2hCA_5z.js.map} +1 -1
  19. package/lib/{ReleasesMetadataProvider-hILX90V4.js → ReleasesMetadataProvider-BWsmHWkh.js} +2 -2
  20. package/lib/{ReleasesMetadataProvider-hILX90V4.js.map → ReleasesMetadataProvider-BWsmHWkh.js.map} +1 -1
  21. package/lib/{ReleasesNav-DIv-1iR7.js → ReleasesNav-DPSjEs29.js} +14 -14
  22. package/lib/{ReleasesNav-DIv-1iR7.js.map → ReleasesNav-DPSjEs29.js.map} +1 -1
  23. package/lib/{ReleasesStudioLayout-DW7fJSfG.js → ReleasesStudioLayout-CtyE88nI.js} +8 -8
  24. package/lib/{ReleasesStudioLayout-DW7fJSfG.js.map → ReleasesStudioLayout-CtyE88nI.js.map} +1 -1
  25. package/lib/{ReleasesTool-BQjO7osC.js → ReleasesTool-BjbRMZlc.js} +15 -15
  26. package/lib/{ReleasesTool-BQjO7osC.js.map → ReleasesTool-BjbRMZlc.js.map} +1 -1
  27. package/lib/{SchedulePublishingStudioLayout-Cwmdz7HZ.js → SchedulePublishingStudioLayout-gZWH97ZL.js} +3 -3
  28. package/lib/{SchedulePublishingStudioLayout-Cwmdz7HZ.js.map → SchedulePublishingStudioLayout-gZWH97ZL.js.map} +1 -1
  29. package/lib/{SchedulePublishingUpsellProvider-C5B21VDh.js → SchedulePublishingUpsellProvider-DsI8OUg-.js} +2 -2
  30. package/lib/{SchedulePublishingUpsellProvider-C5B21VDh.js.map → SchedulePublishingUpsellProvider-DsI8OUg-.js.map} +1 -1
  31. package/lib/{ScheduledPublishingEnabledProvider-BNMAVqrS.js → ScheduledPublishingEnabledProvider-BDRtV8OB.js} +3 -3
  32. package/lib/{ScheduledPublishingEnabledProvider-BNMAVqrS.js.map → ScheduledPublishingEnabledProvider-BDRtV8OB.js.map} +1 -1
  33. package/lib/{SearchProvider-DkGUk8a6.js → SearchProvider-Hk7IMQqR.js} +4 -4
  34. package/lib/{SearchProvider-DkGUk8a6.js.map → SearchProvider-Hk7IMQqR.js.map} +1 -1
  35. package/lib/{SingleDocReleaseLayout-fW8U-ktp.js → SingleDocReleaseLayout-evCp37zs.js} +2 -2
  36. package/lib/{SingleDocReleaseLayout-fW8U-ktp.js.map → SingleDocReleaseLayout-evCp37zs.js.map} +1 -1
  37. package/lib/{SingleDocReleaseUpsellProvider-BNF2Rj3j.js → SingleDocReleaseUpsellProvider-BOe2BACb.js} +4 -4
  38. package/lib/{SingleDocReleaseUpsellProvider-BNF2Rj3j.js.map → SingleDocReleaseUpsellProvider-BOe2BACb.js.map} +1 -1
  39. package/lib/{TasksStudioActiveToolLayout-CHazNA61.js → TasksStudioActiveToolLayout-Dbs-1GX6.js} +11 -11
  40. package/lib/{TasksStudioActiveToolLayout-CHazNA61.js.map → TasksStudioActiveToolLayout-Dbs-1GX6.js.map} +1 -1
  41. package/lib/{TasksStudioLayout-B7bCL28Q.js → TasksStudioLayout-Pn-RwtPi.js} +5 -5
  42. package/lib/{TasksStudioLayout-B7bCL28Q.js.map → TasksStudioLayout-Pn-RwtPi.js.map} +1 -1
  43. package/lib/{Tool-rkq_tjXo.js → Tool-D4-WLZtb.js} +12 -12
  44. package/lib/{Tool-rkq_tjXo.js.map → Tool-D4-WLZtb.js.map} +1 -1
  45. package/lib/{UnpublishVersionDialog-DWYCXGkz.js → UnpublishVersionDialog-DmFHVqhI.js} +4 -4
  46. package/lib/{UnpublishVersionDialog-DWYCXGkz.js.map → UnpublishVersionDialog-DmFHVqhI.js.map} +1 -1
  47. package/lib/{UpsellDialog-BiDSVmne.js → UpsellDialog-DRhOCOce.js} +2 -2
  48. package/lib/{UpsellDialog-BiDSVmne.js.map → UpsellDialog-DRhOCOce.js.map} +1 -1
  49. package/lib/{VariantsStudioNavbar-Bae9LOIN.js → VariantsStudioNavbar-CXpr7UUl.js} +7 -7
  50. package/lib/{VariantsStudioNavbar-Bae9LOIN.js.map → VariantsStudioNavbar-CXpr7UUl.js.map} +1 -1
  51. package/lib/{VariantsTool-E4ptTHik.js → VariantsTool-BCtrSWfP.js} +7 -7
  52. package/lib/{VariantsTool-E4ptTHik.js.map → VariantsTool-BCtrSWfP.js.map} +1 -1
  53. package/lib/{WorkspaceLoader-sdFQ9rkh.js → WorkspaceLoader-_w6NnbDb.js} +21 -21
  54. package/lib/{WorkspaceLoader-sdFQ9rkh.js.map → WorkspaceLoader-_w6NnbDb.js.map} +1 -1
  55. package/lib/_createContext.js +1 -1
  56. package/lib/{buildTextSelectionFromFragment-CuXpitEZ.js → buildTextSelectionFromFragment-Egmw5rNs.js} +3 -3
  57. package/lib/{buildTextSelectionFromFragment-CuXpitEZ.js.map → buildTextSelectionFromFragment-Egmw5rNs.js.map} +1 -1
  58. package/lib/{datastores-XTDIa3jc.js → datastores-DpJ5Y313.js} +2 -2
  59. package/lib/{datastores-XTDIa3jc.js.map → datastores-DpJ5Y313.js.map} +1 -1
  60. package/lib/index.js +28 -28
  61. package/lib/{inputResolver-DLP8YZcM.js → inputResolver-BX-VuloN.js} +4 -4
  62. package/lib/{inputResolver-DLP8YZcM.js.map → inputResolver-BX-VuloN.js.map} +1 -1
  63. package/lib/{navigation.telemetry-4pppJENG.js → navigation.telemetry-VbqjOek0.js} +7 -7
  64. package/lib/{navigation.telemetry-4pppJENG.js.map → navigation.telemetry-VbqjOek0.js.map} +1 -1
  65. package/lib/{plugin-BmARoHKH.js → plugin-DGOEvpWT.js} +4 -4
  66. package/lib/{plugin-BmARoHKH.js.map → plugin-DGOEvpWT.js.map} +1 -1
  67. package/lib/{plugin-BUox1zeI.js → plugin-Da_fKb0U.js} +3 -3
  68. package/lib/{plugin-BUox1zeI.js.map → plugin-Da_fKb0U.js.map} +1 -1
  69. package/lib/{plugin-CjN39wwt.js → plugin-DqqaZdOH.js} +5 -5
  70. package/lib/{plugin-CjN39wwt.js.map → plugin-DqqaZdOH.js.map} +1 -1
  71. package/lib/{plugin-BRnqEpCl.js → plugin-qHXYpO99.js} +6 -6
  72. package/lib/{plugin-BRnqEpCl.js.map → plugin-qHXYpO99.js.map} +1 -1
  73. package/lib/{scheduleItem-Dtb26ejO.js → scheduleItem-DcC1HE9G.js} +8 -8
  74. package/lib/{scheduleItem-Dtb26ejO.js.map → scheduleItem-DcC1HE9G.js.map} +1 -1
  75. package/lib/{schedules-6qsR7E_I.js → schedules-CbnXaXM9.js} +3 -3
  76. package/lib/{schedules-6qsR7E_I.js.map → schedules-CbnXaXM9.js.map} +1 -1
  77. package/lib/{searchDocumentRelease-CUk7BiST.js → searchDocumentRelease-C5sClmGF.js} +4 -4
  78. package/lib/{searchDocumentRelease-CUk7BiST.js.map → searchDocumentRelease-C5sClmGF.js.map} +1 -1
  79. package/lib/{studioClient-D1Z2zK3C.js → studioClient-CwMJwOTd.js} +2 -2
  80. package/lib/{studioClient-D1Z2zK3C.js.map → studioClient-CwMJwOTd.js.map} +1 -1
  81. package/lib/{useBundleDocuments-BnCBcbdJ.js → useBundleDocuments-DvVAF6cf.js} +7 -7
  82. package/lib/{useBundleDocuments-BnCBcbdJ.js.map → useBundleDocuments-DvVAF6cf.js.map} +1 -1
  83. package/lib/{useComments-Bm-0CwNH.js → useComments-DuEOnDkA.js} +2 -2
  84. package/lib/{useComments-Bm-0CwNH.js.map → useComments-DuEOnDkA.js.map} +1 -1
  85. package/lib/{useCommentsTelemetry-D1kYRuPU.js → useCommentsTelemetry-BgNdQdz5.js} +3 -3
  86. package/lib/{useCommentsTelemetry-D1kYRuPU.js.map → useCommentsTelemetry-BgNdQdz5.js.map} +1 -1
  87. package/lib/{useDocumentPreviewValues-DJvES8Wi.js → useDocumentPreviewValues-B1zNjl_D.js} +3 -3
  88. package/lib/{useDocumentPreviewValues-DJvES8Wi.js.map → useDocumentPreviewValues-B1zNjl_D.js.map} +1 -1
  89. package/lib/{useFeatureEnabled-g8eZoiLM.js → useFeatureEnabled-4qCpV_mX.js} +2 -2
  90. package/lib/{useFeatureEnabled-g8eZoiLM.js.map → useFeatureEnabled-4qCpV_mX.js.map} +1 -1
  91. package/lib/{useFieldActions-BV_qfe65.js → useFieldActions-uDe2qh98.js} +2 -2
  92. package/lib/{useFieldActions-BV_qfe65.js.map → useFieldActions-uDe2qh98.js.map} +1 -1
  93. package/lib/{useReleasesToolAvailable-Duu10qV0.js → useReleasesToolAvailable-DDuNc6HV.js} +3 -3
  94. package/lib/{useReleasesToolAvailable-Duu10qV0.js.map → useReleasesToolAvailable-DDuNc6HV.js.map} +1 -1
  95. package/lib/{useScheduledDraftMenuActions-Byiy3-k3.js → useScheduledDraftMenuActions-DqkHlC0c.js} +5 -5
  96. package/lib/{useScheduledDraftMenuActions-Byiy3-k3.js.map → useScheduledDraftMenuActions-DqkHlC0c.js.map} +1 -1
  97. package/lib/{useStudioUrl-BEb30_UK.js → useStudioUrl-B4w58A2i.js} +5 -5
  98. package/lib/{useStudioUrl-BEb30_UK.js.map → useStudioUrl-B4w58A2i.js.map} +1 -1
  99. package/lib/{useTimeZone-zs0ybzXu.js → useTimeZone-8Wd1UR4j.js} +2 -2
  100. package/lib/{useTimeZone-zs0ybzXu.js.map → useTimeZone-8Wd1UR4j.js.map} +1 -1
  101. package/lib/{validationUtils-LdwtMTh5.js → validationUtils-Cuk0jhWJ.js} +4 -4
  102. package/lib/{validationUtils-LdwtMTh5.js.map → validationUtils-Cuk0jhWJ.js.map} +1 -1
  103. package/lib/{version-XEmBTnIh.js → version-BVcB_xWL.js} +2 -2
  104. package/lib/{version-XEmBTnIh.js.map → version-BVcB_xWL.js.map} +1 -1
  105. package/package.json +10 -10
@@ -1,6 +1,6 @@
1
1
  import { l as getPublishedId } from "./draftUtils-D3HJGQaW.js";
2
- import { o as useSource } from "./studioClient-D1Z2zK3C.js";
3
- import { n as useFeatureEnabled, t as FEATURES } from "./useFeatureEnabled-g8eZoiLM.js";
2
+ import { o as useSource } from "./studioClient-CwMJwOTd.js";
3
+ import { n as useFeatureEnabled, t as FEATURES } from "./useFeatureEnabled-4qCpV_mX.js";
4
4
  import { memo, useState } from "react";
5
5
  import { c } from "react/compiler-runtime";
6
6
  import { jsx } from "react/jsx-runtime";
@@ -87,4 +87,4 @@ const CommentsEnabledProvider = memo(function CommentsEnabledProvider(props) {
87
87
  });
88
88
  export { CommentsEnabledProvider as n, CommentsAuthoringPathProvider as r, CommentsSelectedPathProvider as t };
89
89
 
90
- //# sourceMappingURL=CommentsSelectedPathProvider-CIKpHpK3.js.map
90
+ //# sourceMappingURL=CommentsSelectedPathProvider-DwDw8s-s.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CommentsSelectedPathProvider-CIKpHpK3.js","names":["ReactNode","useCallback","useMemo","useState","CommentsAuthoringPathContext","CommentsAuthoringPathContextValue","CommentsAuthoringPathProviderProps","children","CommentsAuthoringPathProvider","props","$","_c","authoringPath","setAuthoringPath","t0","Symbol","for","nextAuthoringPath","handleSetAuthoringPath","t1","value","t2","useMemo","useFeatureEnabled","FEATURES","useSource","getPublishedId","CommentsUIMode","ResolveCommentsEnabled","enabled","mode","useResolveCommentsEnabled","documentId","documentType","$","_c","featureEnabled","isLoading","error","studioComments","document","comments","enabledFromConfig","t0","bb0","t1","Symbol","for","t2","value","memo","ReactNode","CommentsEnabledContext","useResolveCommentsEnabled","CommentsEnabledProviderProps","children","documentId","documentType","CommentsEnabledProvider","props","$","_c","value","t0","isEqual","memo","useCallback","useMemo","useState","CommentsSelectedPathContext","CommentsSelectedPath","CommentsSelectedPathContextValue","CommentsSelectedPathProviderProps","children","React","ReactNode","CommentsSelectedPathProvider","props","$","_c","selectedPath","setSelectedPath","t0","nextPath","handleSelectPath","t1","ctxValue","t2"],"sources":["../src/core/comments/context/authoring-path/CommentsAuthoringPathProvider.tsx","../src/core/comments/hooks/useResolveCommentsEnabled.ts","../src/core/comments/context/enabled/CommentsEnabledProvider.tsx","../src/core/comments/context/selected-path/CommentsSelectedPathProvider.tsx"],"sourcesContent":["import {type ReactNode, useCallback, useMemo, useState} from 'react'\nimport {CommentsAuthoringPathContext} from 'sanity/_singletons'\n\nimport {type CommentsAuthoringPathContextValue} from './types'\n\ninterface CommentsAuthoringPathProviderProps {\n children: ReactNode\n}\n\n/**\n * @beta\n * @hidden\n * This provider keeps track of the path that the user is currently authoring a comment for.\n * This is needed to make sure that we consistently keep the editor open when the user is\n * authoring a comment. The state is kept in a context to make sure that it is preserved\n * across re-renders. If this state was kept in a component, it would be reset every time\n * the component re-renders, for example, when the form is temporarily set to `readOnly`\n * while reconnecting.\n */\nexport function CommentsAuthoringPathProvider(props: CommentsAuthoringPathProviderProps) {\n const {children} = props\n const [authoringPath, setAuthoringPath] = useState<string | null>(null)\n\n const handleSetAuthoringPath = useCallback((nextAuthoringPath: string | null) => {\n setAuthoringPath(nextAuthoringPath)\n }, [])\n\n const value = useMemo(\n (): CommentsAuthoringPathContextValue => ({\n authoringPath,\n setAuthoringPath: handleSetAuthoringPath,\n }),\n [authoringPath, handleSetAuthoringPath],\n )\n\n return (\n <CommentsAuthoringPathContext.Provider value={value}>\n {children}\n </CommentsAuthoringPathContext.Provider>\n )\n}\n","import {useMemo} from 'react'\n\nimport {useFeatureEnabled, FEATURES} from '../../hooks/useFeatureEnabled'\nimport {useSource} from '../../studio/source'\nimport {getPublishedId} from '../../util/draftUtils'\nimport {type CommentsUIMode} from '../types'\n\ntype ResolveCommentsEnabled =\n | {\n enabled: false\n mode: null\n }\n | {\n enabled: true\n mode: CommentsUIMode\n }\n\n/**\n * @internal\n * A hook that resolves if comments are enabled for the current document and document type\n * and if the feature is enabled for the current project.\n */\nexport function useResolveCommentsEnabled(\n documentId: string,\n documentType: string,\n): ResolveCommentsEnabled {\n // Check if the projects plan has the feature enabled\n const {enabled: featureEnabled, isLoading, error} = useFeatureEnabled(FEATURES.studioComments)\n\n // oxlint-disable-next-line no-deprecated -- will fix in follow up PR\n const {enabled} = useSource().document.comments\n // Check if the feature is enabled for the current document in the config\n const enabledFromConfig = useMemo(\n () => enabled({documentType, documentId: getPublishedId(documentId)}),\n [documentId, documentType, enabled],\n )\n\n const value: ResolveCommentsEnabled = useMemo(() => {\n // The feature is not enabled if:\n // - the feature is loading (`isLoading` is true)\n // - the feature is not enabled in the project (`enabledFromConfig` is false)\n // - there's an error when fetching the list of enabled features (`error` is set)\n if (isLoading || !enabledFromConfig || error) {\n return {enabled: false, mode: null}\n }\n\n return {\n enabled: true,\n mode: featureEnabled ? 'default' : 'upsell',\n }\n }, [isLoading, enabledFromConfig, error, featureEnabled])\n\n return value\n}\n","import {memo, type ReactNode} from 'react'\nimport {CommentsEnabledContext} from 'sanity/_singletons'\n\nimport {useResolveCommentsEnabled} from '../../hooks/useResolveCommentsEnabled'\n\ninterface CommentsEnabledProviderProps {\n children: ReactNode\n documentId: string\n documentType: string\n}\n\n/**\n * @beta\n * @hidden\n */\nexport const CommentsEnabledProvider = memo(function CommentsEnabledProvider(\n props: CommentsEnabledProviderProps,\n) {\n const {children, documentId, documentType} = props\n\n const value = useResolveCommentsEnabled(documentId, documentType)\n\n return <CommentsEnabledContext.Provider value={value}>{children}</CommentsEnabledContext.Provider>\n})\n","import isEqual from 'lodash-es/isEqual.js'\nimport {memo, useCallback, useMemo, useState} from 'react'\nimport {CommentsSelectedPathContext} from 'sanity/_singletons'\n\nimport {type CommentsSelectedPath, type CommentsSelectedPathContextValue} from './types'\n\ninterface CommentsSelectedPathProviderProps {\n children: React.ReactNode\n}\n\n/**\n * @internal\n */\nexport const CommentsSelectedPathProvider = memo(function CommentsSelectedPathProvider(\n props: CommentsSelectedPathProviderProps,\n) {\n const {children} = props\n const [selectedPath, setSelectedPath] = useState<CommentsSelectedPath | null>(null)\n\n const handleSelectPath = useCallback(\n (nextPath: CommentsSelectedPath | null) => {\n if (isEqual(selectedPath, nextPath)) return\n\n setSelectedPath(nextPath)\n },\n [selectedPath],\n )\n\n const ctxValue = useMemo(\n (): CommentsSelectedPathContextValue => ({\n selectedPath,\n setSelectedPath: handleSelectPath,\n }),\n [selectedPath, handleSelectPath],\n )\n\n return (\n <CommentsSelectedPathContext.Provider value={ctxValue}>\n {children}\n </CommentsSelectedPathContext.Provider>\n )\n})\n"],"mappings":"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"}
1
+ {"version":3,"file":"CommentsSelectedPathProvider-DwDw8s-s.js","names":["ReactNode","useCallback","useMemo","useState","CommentsAuthoringPathContext","CommentsAuthoringPathContextValue","CommentsAuthoringPathProviderProps","children","CommentsAuthoringPathProvider","props","$","_c","authoringPath","setAuthoringPath","t0","Symbol","for","nextAuthoringPath","handleSetAuthoringPath","t1","value","t2","useMemo","useFeatureEnabled","FEATURES","useSource","getPublishedId","CommentsUIMode","ResolveCommentsEnabled","enabled","mode","useResolveCommentsEnabled","documentId","documentType","$","_c","featureEnabled","isLoading","error","studioComments","document","comments","enabledFromConfig","t0","bb0","t1","Symbol","for","t2","value","memo","ReactNode","CommentsEnabledContext","useResolveCommentsEnabled","CommentsEnabledProviderProps","children","documentId","documentType","CommentsEnabledProvider","props","$","_c","value","t0","isEqual","memo","useCallback","useMemo","useState","CommentsSelectedPathContext","CommentsSelectedPath","CommentsSelectedPathContextValue","CommentsSelectedPathProviderProps","children","React","ReactNode","CommentsSelectedPathProvider","props","$","_c","selectedPath","setSelectedPath","t0","nextPath","handleSelectPath","t1","ctxValue","t2"],"sources":["../src/core/comments/context/authoring-path/CommentsAuthoringPathProvider.tsx","../src/core/comments/hooks/useResolveCommentsEnabled.ts","../src/core/comments/context/enabled/CommentsEnabledProvider.tsx","../src/core/comments/context/selected-path/CommentsSelectedPathProvider.tsx"],"sourcesContent":["import {type ReactNode, useCallback, useMemo, useState} from 'react'\nimport {CommentsAuthoringPathContext} from 'sanity/_singletons'\n\nimport {type CommentsAuthoringPathContextValue} from './types'\n\ninterface CommentsAuthoringPathProviderProps {\n children: ReactNode\n}\n\n/**\n * @beta\n * @hidden\n * This provider keeps track of the path that the user is currently authoring a comment for.\n * This is needed to make sure that we consistently keep the editor open when the user is\n * authoring a comment. The state is kept in a context to make sure that it is preserved\n * across re-renders. If this state was kept in a component, it would be reset every time\n * the component re-renders, for example, when the form is temporarily set to `readOnly`\n * while reconnecting.\n */\nexport function CommentsAuthoringPathProvider(props: CommentsAuthoringPathProviderProps) {\n const {children} = props\n const [authoringPath, setAuthoringPath] = useState<string | null>(null)\n\n const handleSetAuthoringPath = useCallback((nextAuthoringPath: string | null) => {\n setAuthoringPath(nextAuthoringPath)\n }, [])\n\n const value = useMemo(\n (): CommentsAuthoringPathContextValue => ({\n authoringPath,\n setAuthoringPath: handleSetAuthoringPath,\n }),\n [authoringPath, handleSetAuthoringPath],\n )\n\n return (\n <CommentsAuthoringPathContext.Provider value={value}>\n {children}\n </CommentsAuthoringPathContext.Provider>\n )\n}\n","import {useMemo} from 'react'\n\nimport {useFeatureEnabled, FEATURES} from '../../hooks/useFeatureEnabled'\nimport {useSource} from '../../studio/source'\nimport {getPublishedId} from '../../util/draftUtils'\nimport {type CommentsUIMode} from '../types'\n\ntype ResolveCommentsEnabled =\n | {\n enabled: false\n mode: null\n }\n | {\n enabled: true\n mode: CommentsUIMode\n }\n\n/**\n * @internal\n * A hook that resolves if comments are enabled for the current document and document type\n * and if the feature is enabled for the current project.\n */\nexport function useResolveCommentsEnabled(\n documentId: string,\n documentType: string,\n): ResolveCommentsEnabled {\n // Check if the projects plan has the feature enabled\n const {enabled: featureEnabled, isLoading, error} = useFeatureEnabled(FEATURES.studioComments)\n\n // oxlint-disable-next-line no-deprecated -- will fix in follow up PR\n const {enabled} = useSource().document.comments\n // Check if the feature is enabled for the current document in the config\n const enabledFromConfig = useMemo(\n () => enabled({documentType, documentId: getPublishedId(documentId)}),\n [documentId, documentType, enabled],\n )\n\n const value: ResolveCommentsEnabled = useMemo(() => {\n // The feature is not enabled if:\n // - the feature is loading (`isLoading` is true)\n // - the feature is not enabled in the project (`enabledFromConfig` is false)\n // - there's an error when fetching the list of enabled features (`error` is set)\n if (isLoading || !enabledFromConfig || error) {\n return {enabled: false, mode: null}\n }\n\n return {\n enabled: true,\n mode: featureEnabled ? 'default' : 'upsell',\n }\n }, [isLoading, enabledFromConfig, error, featureEnabled])\n\n return value\n}\n","import {memo, type ReactNode} from 'react'\nimport {CommentsEnabledContext} from 'sanity/_singletons'\n\nimport {useResolveCommentsEnabled} from '../../hooks/useResolveCommentsEnabled'\n\ninterface CommentsEnabledProviderProps {\n children: ReactNode\n documentId: string\n documentType: string\n}\n\n/**\n * @beta\n * @hidden\n */\nexport const CommentsEnabledProvider = memo(function CommentsEnabledProvider(\n props: CommentsEnabledProviderProps,\n) {\n const {children, documentId, documentType} = props\n\n const value = useResolveCommentsEnabled(documentId, documentType)\n\n return <CommentsEnabledContext.Provider value={value}>{children}</CommentsEnabledContext.Provider>\n})\n","import isEqual from 'lodash-es/isEqual.js'\nimport {memo, useCallback, useMemo, useState} from 'react'\nimport {CommentsSelectedPathContext} from 'sanity/_singletons'\n\nimport {type CommentsSelectedPath, type CommentsSelectedPathContextValue} from './types'\n\ninterface CommentsSelectedPathProviderProps {\n children: React.ReactNode\n}\n\n/**\n * @internal\n */\nexport const CommentsSelectedPathProvider = memo(function CommentsSelectedPathProvider(\n props: CommentsSelectedPathProviderProps,\n) {\n const {children} = props\n const [selectedPath, setSelectedPath] = useState<CommentsSelectedPath | null>(null)\n\n const handleSelectPath = useCallback(\n (nextPath: CommentsSelectedPath | null) => {\n if (isEqual(selectedPath, nextPath)) return\n\n setSelectedPath(nextPath)\n },\n [selectedPath],\n )\n\n const ctxValue = useMemo(\n (): CommentsSelectedPathContextValue => ({\n selectedPath,\n setSelectedPath: handleSelectPath,\n }),\n [selectedPath, handleSelectPath],\n )\n\n return (\n <CommentsSelectedPathContext.Provider value={ctxValue}>\n {children}\n </CommentsSelectedPathContext.Provider>\n )\n})\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { n as useFeatureEnabled, t as FEATURES } from "./useFeatureEnabled-g8eZoiLM.js";
2
- import { n as getDialogPropsFromContext, r as useUpsellContext, t as UpsellDialog } from "./UpsellDialog-BiDSVmne.js";
3
- import { t as AddonDatasetProvider } from "./AddonDatasetProvider-B5npf4J4.js";
1
+ import { n as useFeatureEnabled, t as FEATURES } from "./useFeatureEnabled-4qCpV_mX.js";
2
+ import { n as getDialogPropsFromContext, r as useUpsellContext, t as UpsellDialog } from "./UpsellDialog-DRhOCOce.js";
3
+ import { t as AddonDatasetProvider } from "./AddonDatasetProvider-CfAw3oMr.js";
4
4
  import { useState } from "react";
5
5
  import { c } from "react/compiler-runtime";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -65,4 +65,4 @@ function CommentsStudioLayout(props) {
65
65
  }
66
66
  export { CommentsStudioLayout };
67
67
 
68
- //# sourceMappingURL=CommentsStudioLayout-Dx0jIDle.js.map
68
+ //# sourceMappingURL=CommentsStudioLayout-e2hCA_5z.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CommentsStudioLayout-Dx0jIDle.js","names":["ReactNode","useCallback","useMemo","useState","CommentsOnboardingContext","CommentsOnboardingContextValue","VERSION","LOCAL_STORAGE_KEY","setLocalStorage","value","window","localStorage","setItem","JSON","stringify","getLocalStorage","getItem","parse","CommentsOnboardingProviderProps","children","CommentsOnboardingProvider","props","$","_c","t0","Symbol","for","dismissed","setDismissed","t1","handleDismiss","t2","isDismissed","ctxValue","t3","CommentsUpsellContext","getDialogPropsFromContext","useUpsellContext","UpsellDialog","CommentsUpsellProvider","props","$","_c","t0","Symbol","for","dataUri","feature","contextValue","t1","children","t2","t3","t4","LayoutProps","useFeatureEnabled","FEATURES","AddonDatasetProvider","CommentsOnboardingProvider","CommentsUpsellProvider","CommentsStudioLayout","props","$","_c","enabled","isLoading","studioComments","t0","renderDefault","children","t1","t2"],"sources":["../src/core/comments/context/onboarding/CommentsOnboardingProvider.tsx","../src/core/comments/context/upsell/CommentsUpsellProvider.tsx","../src/core/comments/plugin/studio-layout/CommentsStudioLayout.tsx"],"sourcesContent":["import {type ReactNode, useCallback, useMemo, useState} from 'react'\nimport {CommentsOnboardingContext} from 'sanity/_singletons'\n\nimport {type CommentsOnboardingContextValue} from './types'\n\nconst VERSION = 1\nconst LOCAL_STORAGE_KEY = `sanityStudio:comments:inspector:onboarding:dismissed:v${VERSION}`\n\nconst setLocalStorage = (value: boolean) => {\n try {\n window.localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(value))\n } catch {\n // Fail silently\n }\n}\n\nconst getLocalStorage = (): boolean => {\n try {\n const value = window.localStorage.getItem(LOCAL_STORAGE_KEY)\n return value ? JSON.parse(value) : false\n } catch {\n return false\n }\n}\n\ninterface CommentsOnboardingProviderProps {\n children: ReactNode\n}\n\nexport function CommentsOnboardingProvider(props: CommentsOnboardingProviderProps) {\n const {children} = props\n const [dismissed, setDismissed] = useState<boolean>(getLocalStorage())\n\n const handleDismiss = useCallback(() => {\n setDismissed(true)\n setLocalStorage(true)\n }, [setDismissed])\n\n const ctxValue = useMemo(\n (): CommentsOnboardingContextValue => ({\n setDismissed: handleDismiss,\n isDismissed: dismissed,\n }),\n [handleDismiss, dismissed],\n )\n\n return (\n <CommentsOnboardingContext.Provider value={ctxValue}>\n {children}\n </CommentsOnboardingContext.Provider>\n )\n}\n","import {CommentsUpsellContext} from 'sanity/_singletons'\n\nimport {getDialogPropsFromContext, useUpsellContext} from '../../../hooks/useUpsellContext'\nimport {UpsellDialog} from '../../../studio/upsell/UpsellDialog'\n\n/**\n * @beta\n * @hidden\n */\nexport function CommentsUpsellProvider(props: {children: React.ReactNode}) {\n const contextValue = useUpsellContext({\n dataUri: '/journey/comments',\n feature: 'comments',\n })\n\n return (\n <CommentsUpsellContext.Provider value={contextValue}>\n {props.children}\n <UpsellDialog {...getDialogPropsFromContext(contextValue)} />\n </CommentsUpsellContext.Provider>\n )\n}\n","import {type LayoutProps} from '../../../config/studio/types'\nimport {useFeatureEnabled, FEATURES} from '../../../hooks/useFeatureEnabled'\nimport {AddonDatasetProvider} from '../../../studio/addonDataset/AddonDatasetProvider'\nimport {CommentsOnboardingProvider} from '../../context/onboarding/CommentsOnboardingProvider'\nimport {CommentsUpsellProvider} from '../../context/upsell/CommentsUpsellProvider'\n\nexport function CommentsStudioLayout(props: LayoutProps) {\n const {enabled, isLoading} = useFeatureEnabled(FEATURES.studioComments)\n const children = props.renderDefault(props)\n\n return (\n <AddonDatasetProvider>\n <CommentsOnboardingProvider>\n {!enabled && !isLoading ? (\n <CommentsUpsellProvider>{children}</CommentsUpsellProvider>\n ) : (\n children\n )}\n </CommentsOnboardingProvider>\n </AddonDatasetProvider>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"CommentsStudioLayout-e2hCA_5z.js","names":["ReactNode","useCallback","useMemo","useState","CommentsOnboardingContext","CommentsOnboardingContextValue","VERSION","LOCAL_STORAGE_KEY","setLocalStorage","value","window","localStorage","setItem","JSON","stringify","getLocalStorage","getItem","parse","CommentsOnboardingProviderProps","children","CommentsOnboardingProvider","props","$","_c","t0","Symbol","for","dismissed","setDismissed","t1","handleDismiss","t2","isDismissed","ctxValue","t3","CommentsUpsellContext","getDialogPropsFromContext","useUpsellContext","UpsellDialog","CommentsUpsellProvider","props","$","_c","t0","Symbol","for","dataUri","feature","contextValue","t1","children","t2","t3","t4","LayoutProps","useFeatureEnabled","FEATURES","AddonDatasetProvider","CommentsOnboardingProvider","CommentsUpsellProvider","CommentsStudioLayout","props","$","_c","enabled","isLoading","studioComments","t0","renderDefault","children","t1","t2"],"sources":["../src/core/comments/context/onboarding/CommentsOnboardingProvider.tsx","../src/core/comments/context/upsell/CommentsUpsellProvider.tsx","../src/core/comments/plugin/studio-layout/CommentsStudioLayout.tsx"],"sourcesContent":["import {type ReactNode, useCallback, useMemo, useState} from 'react'\nimport {CommentsOnboardingContext} from 'sanity/_singletons'\n\nimport {type CommentsOnboardingContextValue} from './types'\n\nconst VERSION = 1\nconst LOCAL_STORAGE_KEY = `sanityStudio:comments:inspector:onboarding:dismissed:v${VERSION}`\n\nconst setLocalStorage = (value: boolean) => {\n try {\n window.localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(value))\n } catch {\n // Fail silently\n }\n}\n\nconst getLocalStorage = (): boolean => {\n try {\n const value = window.localStorage.getItem(LOCAL_STORAGE_KEY)\n return value ? JSON.parse(value) : false\n } catch {\n return false\n }\n}\n\ninterface CommentsOnboardingProviderProps {\n children: ReactNode\n}\n\nexport function CommentsOnboardingProvider(props: CommentsOnboardingProviderProps) {\n const {children} = props\n const [dismissed, setDismissed] = useState<boolean>(getLocalStorage())\n\n const handleDismiss = useCallback(() => {\n setDismissed(true)\n setLocalStorage(true)\n }, [setDismissed])\n\n const ctxValue = useMemo(\n (): CommentsOnboardingContextValue => ({\n setDismissed: handleDismiss,\n isDismissed: dismissed,\n }),\n [handleDismiss, dismissed],\n )\n\n return (\n <CommentsOnboardingContext.Provider value={ctxValue}>\n {children}\n </CommentsOnboardingContext.Provider>\n )\n}\n","import {CommentsUpsellContext} from 'sanity/_singletons'\n\nimport {getDialogPropsFromContext, useUpsellContext} from '../../../hooks/useUpsellContext'\nimport {UpsellDialog} from '../../../studio/upsell/UpsellDialog'\n\n/**\n * @beta\n * @hidden\n */\nexport function CommentsUpsellProvider(props: {children: React.ReactNode}) {\n const contextValue = useUpsellContext({\n dataUri: '/journey/comments',\n feature: 'comments',\n })\n\n return (\n <CommentsUpsellContext.Provider value={contextValue}>\n {props.children}\n <UpsellDialog {...getDialogPropsFromContext(contextValue)} />\n </CommentsUpsellContext.Provider>\n )\n}\n","import {type LayoutProps} from '../../../config/studio/types'\nimport {useFeatureEnabled, FEATURES} from '../../../hooks/useFeatureEnabled'\nimport {AddonDatasetProvider} from '../../../studio/addonDataset/AddonDatasetProvider'\nimport {CommentsOnboardingProvider} from '../../context/onboarding/CommentsOnboardingProvider'\nimport {CommentsUpsellProvider} from '../../context/upsell/CommentsUpsellProvider'\n\nexport function CommentsStudioLayout(props: LayoutProps) {\n const {enabled, isLoading} = useFeatureEnabled(FEATURES.studioComments)\n const children = props.renderDefault(props)\n\n return (\n <AddonDatasetProvider>\n <CommentsOnboardingProvider>\n {!enabled && !isLoading ? (\n <CommentsUpsellProvider>{children}</CommentsUpsellProvider>\n ) : (\n children\n )}\n </CommentsOnboardingProvider>\n </AddonDatasetProvider>\n )\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { To as useReleasesStore } from "./useBundleDocuments-BnCBcbdJ.js";
1
+ import { To as useReleasesStore } from "./useBundleDocuments-DvVAF6cf.js";
2
2
  import { useContext, useEffect, useState } from "react";
3
3
  import { c } from "react/compiler-runtime";
4
4
  import { jsx } from "react/jsx-runtime";
@@ -82,4 +82,4 @@ function _temp4() {
82
82
  }
83
83
  export { useReleasesMetadataProvider as n, ReleasesMetadataProvider as t };
84
84
 
85
- //# sourceMappingURL=ReleasesMetadataProvider-hILX90V4.js.map
85
+ //# sourceMappingURL=ReleasesMetadataProvider-BWsmHWkh.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReleasesMetadataProvider-hILX90V4.js","names":["useCallback","useContext","useEffect","useMemo","useState","useObservable","ReleasesMetadataContext","MetadataWrapper","ReleasesMetadata","useReleasesStore","ReleasesMetadataContextValue","state","addReleaseIdsToListener","slugs","removeReleaseIdsFromListener","DEFAULT_METADATA_STATE","data","error","loading","ReleasesMetadataProviderInner","t0","$","_c","children","t1","Symbol","for","listenerReleaseIds","setListenerReleaseIds","getMetadataStateForSlugs$","releasesMetadata","setReleasesMetadata","t2","map","_temp","memoObservable","observedResult","t3","t4","prevReleaseMetadata","t5","addReleaseIds","prevSlugs","filter","_temp2","t6","releaseIds","prevSlugs_0","nextSlugs","reduce","acc","slug_0","removedSlugs","accNextSlugs","includes","slug","t7","context","t8","ReleasesMetadataProvider","useReleasesMetadataProvider","contextValue","_temp3","_temp4","releaseId"],"sources":["../src/core/releases/contexts/ReleasesMetadataProvider.tsx"],"sourcesContent":["import {useCallback, useContext, useEffect, useMemo, useState} from 'react'\nimport {useObservable} from 'react-rx'\nimport {ReleasesMetadataContext} from 'sanity/_singletons'\n\nimport {type MetadataWrapper} from '../store/createReleaseMetadataAggregator'\nimport {type ReleasesMetadata} from '../store/useReleasesMetadata'\nimport {useReleasesStore} from '../store/useReleasesStore'\n\n/**\n * @internal\n */\nexport interface ReleasesMetadataContextValue {\n state: MetadataWrapper\n addReleaseIdsToListener: (slugs: string[]) => void\n removeReleaseIdsFromListener: (slugs: string[]) => void\n}\n\nconst DEFAULT_METADATA_STATE: MetadataWrapper = {\n data: null,\n error: null,\n loading: false,\n}\n\nconst ReleasesMetadataProviderInner = ({children}: {children: React.ReactNode}) => {\n const [listenerReleaseIds, setListenerReleaseIds] = useState<string[]>([])\n const {getMetadataStateForSlugs$} = useReleasesStore()\n const [releasesMetadata, setReleasesMetadata] = useState<Record<string, ReleasesMetadata> | null>(\n null,\n )\n\n const memoObservable = useMemo(\n () => getMetadataStateForSlugs$(listenerReleaseIds.map((slug) => slug)),\n [getMetadataStateForSlugs$, listenerReleaseIds],\n )\n\n const observedResult = useObservable(memoObservable) || DEFAULT_METADATA_STATE\n\n // patch metadata in local state\n useEffect(\n () =>\n // oxlint-disable-next-line react/react-compiler\n setReleasesMetadata((prevReleaseMetadata) => {\n if (!observedResult.data) return prevReleaseMetadata\n\n return {...prevReleaseMetadata, ...observedResult.data}\n }),\n [observedResult.data],\n )\n\n const addReleaseIdsToListener = useCallback((addReleaseIds: (string | undefined)[]) => {\n setListenerReleaseIds((prevSlugs) => [\n ...prevSlugs,\n ...addReleaseIds.filter((releaseId): releaseId is string => typeof releaseId === 'string'),\n ])\n }, [])\n\n const removeReleaseIdsFromListener = useCallback((releaseIds: string[]) => {\n setListenerReleaseIds((prevSlugs) => {\n const {nextSlugs} = prevSlugs.reduce<{removedSlugs: string[]; nextSlugs: string[]}>(\n (acc, slug) => {\n const {removedSlugs, nextSlugs: accNextSlugs} = acc\n /**\n * In cases where multiple consumers are listening to the same release id\n * the release id will appear multiple times in listenerReleaseIds array\n * removing should only remove 1 instance of the slug and retain all others\n */\n if (releaseIds.includes(slug) && !removedSlugs.includes(slug)) {\n return {removedSlugs: [...removedSlugs, slug], nextSlugs: accNextSlugs}\n }\n return {removedSlugs, nextSlugs: [...accNextSlugs, slug]}\n },\n {removedSlugs: [], nextSlugs: []},\n )\n return nextSlugs\n })\n }, [])\n\n const context = useMemo<{\n addReleaseIdsToListener: (slugs: string[]) => void\n removeReleaseIdsFromListener: (slugs: string[]) => void\n state: MetadataWrapper\n }>(\n () => ({\n addReleaseIdsToListener: addReleaseIdsToListener,\n removeReleaseIdsFromListener: removeReleaseIdsFromListener,\n state: {...observedResult, data: releasesMetadata},\n }),\n [addReleaseIdsToListener, releasesMetadata, observedResult, removeReleaseIdsFromListener],\n )\n\n return (\n <ReleasesMetadataContext.Provider value={context}>{children}</ReleasesMetadataContext.Provider>\n )\n}\n\nexport const ReleasesMetadataProvider = ({children}: {children: React.ReactNode}) => {\n const context = useContext(ReleasesMetadataContext)\n\n // Avoid mounting the provider if it's already provided by a parent\n if (context) return children\n return <ReleasesMetadataProviderInner>{children}</ReleasesMetadataProviderInner>\n}\n\nexport const useReleasesMetadataProvider = (): ReleasesMetadataContextValue => {\n const contextValue = useContext(ReleasesMetadataContext)\n\n return (\n contextValue || {\n state: DEFAULT_METADATA_STATE,\n addReleaseIdsToListener: () => null,\n removeReleaseIdsFromListener: () => null,\n }\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ReleasesMetadataProvider-BWsmHWkh.js","names":["useCallback","useContext","useEffect","useMemo","useState","useObservable","ReleasesMetadataContext","MetadataWrapper","ReleasesMetadata","useReleasesStore","ReleasesMetadataContextValue","state","addReleaseIdsToListener","slugs","removeReleaseIdsFromListener","DEFAULT_METADATA_STATE","data","error","loading","ReleasesMetadataProviderInner","t0","$","_c","children","t1","Symbol","for","listenerReleaseIds","setListenerReleaseIds","getMetadataStateForSlugs$","releasesMetadata","setReleasesMetadata","t2","map","_temp","memoObservable","observedResult","t3","t4","prevReleaseMetadata","t5","addReleaseIds","prevSlugs","filter","_temp2","t6","releaseIds","prevSlugs_0","nextSlugs","reduce","acc","slug_0","removedSlugs","accNextSlugs","includes","slug","t7","context","t8","ReleasesMetadataProvider","useReleasesMetadataProvider","contextValue","_temp3","_temp4","releaseId"],"sources":["../src/core/releases/contexts/ReleasesMetadataProvider.tsx"],"sourcesContent":["import {useCallback, useContext, useEffect, useMemo, useState} from 'react'\nimport {useObservable} from 'react-rx'\nimport {ReleasesMetadataContext} from 'sanity/_singletons'\n\nimport {type MetadataWrapper} from '../store/createReleaseMetadataAggregator'\nimport {type ReleasesMetadata} from '../store/useReleasesMetadata'\nimport {useReleasesStore} from '../store/useReleasesStore'\n\n/**\n * @internal\n */\nexport interface ReleasesMetadataContextValue {\n state: MetadataWrapper\n addReleaseIdsToListener: (slugs: string[]) => void\n removeReleaseIdsFromListener: (slugs: string[]) => void\n}\n\nconst DEFAULT_METADATA_STATE: MetadataWrapper = {\n data: null,\n error: null,\n loading: false,\n}\n\nconst ReleasesMetadataProviderInner = ({children}: {children: React.ReactNode}) => {\n const [listenerReleaseIds, setListenerReleaseIds] = useState<string[]>([])\n const {getMetadataStateForSlugs$} = useReleasesStore()\n const [releasesMetadata, setReleasesMetadata] = useState<Record<string, ReleasesMetadata> | null>(\n null,\n )\n\n const memoObservable = useMemo(\n () => getMetadataStateForSlugs$(listenerReleaseIds.map((slug) => slug)),\n [getMetadataStateForSlugs$, listenerReleaseIds],\n )\n\n const observedResult = useObservable(memoObservable) || DEFAULT_METADATA_STATE\n\n // patch metadata in local state\n useEffect(\n () =>\n // oxlint-disable-next-line react/react-compiler\n setReleasesMetadata((prevReleaseMetadata) => {\n if (!observedResult.data) return prevReleaseMetadata\n\n return {...prevReleaseMetadata, ...observedResult.data}\n }),\n [observedResult.data],\n )\n\n const addReleaseIdsToListener = useCallback((addReleaseIds: (string | undefined)[]) => {\n setListenerReleaseIds((prevSlugs) => [\n ...prevSlugs,\n ...addReleaseIds.filter((releaseId): releaseId is string => typeof releaseId === 'string'),\n ])\n }, [])\n\n const removeReleaseIdsFromListener = useCallback((releaseIds: string[]) => {\n setListenerReleaseIds((prevSlugs) => {\n const {nextSlugs} = prevSlugs.reduce<{removedSlugs: string[]; nextSlugs: string[]}>(\n (acc, slug) => {\n const {removedSlugs, nextSlugs: accNextSlugs} = acc\n /**\n * In cases where multiple consumers are listening to the same release id\n * the release id will appear multiple times in listenerReleaseIds array\n * removing should only remove 1 instance of the slug and retain all others\n */\n if (releaseIds.includes(slug) && !removedSlugs.includes(slug)) {\n return {removedSlugs: [...removedSlugs, slug], nextSlugs: accNextSlugs}\n }\n return {removedSlugs, nextSlugs: [...accNextSlugs, slug]}\n },\n {removedSlugs: [], nextSlugs: []},\n )\n return nextSlugs\n })\n }, [])\n\n const context = useMemo<{\n addReleaseIdsToListener: (slugs: string[]) => void\n removeReleaseIdsFromListener: (slugs: string[]) => void\n state: MetadataWrapper\n }>(\n () => ({\n addReleaseIdsToListener: addReleaseIdsToListener,\n removeReleaseIdsFromListener: removeReleaseIdsFromListener,\n state: {...observedResult, data: releasesMetadata},\n }),\n [addReleaseIdsToListener, releasesMetadata, observedResult, removeReleaseIdsFromListener],\n )\n\n return (\n <ReleasesMetadataContext.Provider value={context}>{children}</ReleasesMetadataContext.Provider>\n )\n}\n\nexport const ReleasesMetadataProvider = ({children}: {children: React.ReactNode}) => {\n const context = useContext(ReleasesMetadataContext)\n\n // Avoid mounting the provider if it's already provided by a parent\n if (context) return children\n return <ReleasesMetadataProviderInner>{children}</ReleasesMetadataProviderInner>\n}\n\nexport const useReleasesMetadataProvider = (): ReleasesMetadataContextValue => {\n const contextValue = useContext(ReleasesMetadataContext)\n\n return (\n contextValue || {\n state: DEFAULT_METADATA_STATE,\n addReleaseIdsToListener: () => null,\n removeReleaseIdsFromListener: () => null,\n }\n )\n}\n"],"mappings":"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"}
@@ -1,19 +1,19 @@
1
1
  import { o as Tooltip$1, r as MenuButton$1, t as MenuItem$1 } from "./MenuItem-BWdL61CI.js";
2
- import { c as useWorkspace, i as useClient } from "./studioClient-D1Z2zK3C.js";
3
- import { _ as useResourceCache, kt as getVariantId, l as useProjectStore, lt as getReleaseIdFromReleaseDocumentId } from "./datastores-XTDIa3jc.js";
2
+ import { c as useWorkspace, i as useClient } from "./studioClient-CwMJwOTd.js";
3
+ import { _ as useResourceCache, kt as getVariantId, l as useProjectStore, lt as getReleaseIdFromReleaseDocumentId } from "./datastores-DpJ5Y313.js";
4
4
  import { t as useTranslation } from "./useTranslation-Cqs6Itwv.js";
5
- import { Fo as getReleaseDefaults, Go as LATEST, Io as isDraftPerspective, Ko as PUBLISHED, Mo as formatRelativeLocalePublishDate, Ro as isPublishedPerspective, To as useReleasesStore, Yo as isCardinalityOneRelease, Zo as isReleaseDocument, bi as usePerspective, i as useReleaseOperations, ji as ReleaseTitle, ko as ReleaseAvatarIcon, s as useReleasesUpsell, wo as useActiveReleases, zo as isReleaseScheduledOrScheduling } from "./useBundleDocuments-BnCBcbdJ.js";
6
- import { n as useFeatureEnabled, t as FEATURES } from "./useFeatureEnabled-g8eZoiLM.js";
5
+ import { Fo as getReleaseDefaults, Go as LATEST, Io as isDraftPerspective, Ko as PUBLISHED, Mo as formatRelativeLocalePublishDate, Ro as isPublishedPerspective, To as useReleasesStore, Yo as isCardinalityOneRelease, Zo as isReleaseDocument, bi as usePerspective, i as useReleaseOperations, ji as ReleaseTitle, ko as ReleaseAvatarIcon, s as useReleasesUpsell, wo as useActiveReleases, zo as isReleaseScheduledOrScheduling } from "./useBundleDocuments-DvVAF6cf.js";
6
+ import { n as useFeatureEnabled, t as FEATURES } from "./useFeatureEnabled-4qCpV_mX.js";
7
7
  import { n as createAgentBundlesStore, r as isAgentBundleName, t as INITIAL_STATE } from "./createAgentBundlesStore-BJwwD0vJ.js";
8
- import { t as useTimeZone } from "./useTimeZone-zs0ybzXu.js";
9
- import { b as useGetDefaultPerspective, v as getPerspectiveParam, y as useSetPerspective } from "./UnpublishVersionDialog-DWYCXGkz.js";
10
- import { t as RELEASES_INTENT } from "./plugin-BmARoHKH.js";
11
- import { t as RELEASES_SCHEDULED_DRAFTS_INTENT } from "./plugin-BRnqEpCl.js";
12
- import { r as CONTENT_RELEASES_TIME_ZONE_SCOPE } from "./useScheduledDraftMenuActions-Byiy3-k3.js";
13
- import { a as useScheduledDraftsEnabled } from "./SingleDocReleaseUpsellProvider-BNF2Rj3j.js";
14
- import { n as SCHEDULES_TOOL_NAME } from "./plugin-CjN39wwt.js";
15
- import { n as NavigatedToScheduledDrafts, o as useReleasePermissions, p as useCreateReleaseMetadata, r as CreateReleaseDialog, t as NavigatedToReleasesOverview } from "./navigation.telemetry-4pppJENG.js";
16
- import { t as useReleasesToolAvailable } from "./useReleasesToolAvailable-Duu10qV0.js";
8
+ import { t as useTimeZone } from "./useTimeZone-8Wd1UR4j.js";
9
+ import { b as useGetDefaultPerspective, v as getPerspectiveParam, y as useSetPerspective } from "./UnpublishVersionDialog-DmFHVqhI.js";
10
+ import { t as RELEASES_INTENT } from "./plugin-DGOEvpWT.js";
11
+ import { t as RELEASES_SCHEDULED_DRAFTS_INTENT } from "./plugin-qHXYpO99.js";
12
+ import { r as CONTENT_RELEASES_TIME_ZONE_SCOPE } from "./useScheduledDraftMenuActions-DqkHlC0c.js";
13
+ import { a as useScheduledDraftsEnabled } from "./SingleDocReleaseUpsellProvider-BOe2BACb.js";
14
+ import { n as SCHEDULES_TOOL_NAME } from "./plugin-DqqaZdOH.js";
15
+ import { n as NavigatedToScheduledDrafts, o as useReleasePermissions, p as useCreateReleaseMetadata, r as CreateReleaseDialog, t as NavigatedToReleasesOverview } from "./navigation.telemetry-VbqjOek0.js";
16
+ import { t as useReleasesToolAvailable } from "./useReleasesToolAvailable-DDuNc6HV.js";
17
17
  import { t as ToneIcon } from "./ToneIcon-DgovBh2L.js";
18
18
  import { memo, useEffect, useLayoutEffect, useRef, useState } from "react";
19
19
  import { from } from "rxjs";
@@ -985,4 +985,4 @@ const ReleasesNavContainer = styled(Card).withConfig({
985
985
  };
986
986
  export { ToolLink as a, useFormatRelativeLocalePublishDate as c, oversizedButtonStyle as i, CreateReleaseMenuItem as l, useExcludedPerspective as n, useAgentBundles as o, AnimatedTextWidth as r, useAgentBundlesStore as s, ReleasesNav as t, useSetVariant as u };
987
987
 
988
- //# sourceMappingURL=ReleasesNav-DIv-1iR7.js.map
988
+ //# sourceMappingURL=ReleasesNav-DPSjEs29.js.map