sanity 6.9.2 → 6.9.3-next.2

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 (121) hide show
  1. package/lib/{AddonDatasetProvider-CIq0vehp.js → AddonDatasetProvider-DDQrh5ob.js} +2 -2
  2. package/lib/{AddonDatasetProvider-CIq0vehp.js.map → AddonDatasetProvider-DDQrh5ob.js.map} +1 -1
  3. package/lib/{CalendarFilter-DRKSPTWd.js → CalendarFilter-DYbHmp_x.js} +3 -3
  4. package/lib/{CalendarFilter-DRKSPTWd.js.map → CalendarFilter-DYbHmp_x.js.map} +1 -1
  5. package/lib/{CommentsDocumentLayout-NGghzPWZ.js → CommentsDocumentLayout-qdF_HKSC.js} +2 -2
  6. package/lib/{CommentsDocumentLayout-NGghzPWZ.js.map → CommentsDocumentLayout-qdF_HKSC.js.map} +1 -1
  7. package/lib/{CommentsField-_QkW9aLe.js → CommentsField-i8xs45PB.js} +3 -3
  8. package/lib/{CommentsField-_QkW9aLe.js.map → CommentsField-i8xs45PB.js.map} +1 -1
  9. package/lib/{CommentsInput-DdtI0Naj.js → CommentsInput-B9iSSi8A.js} +6 -6
  10. package/lib/{CommentsInput-DdtI0Naj.js.map → CommentsInput-B9iSSi8A.js.map} +1 -1
  11. package/lib/{CommentsInspector-BQtqxGsK.js → CommentsInspector-rGGP9buL.js} +5 -5
  12. package/lib/{CommentsInspector-BQtqxGsK.js.map → CommentsInspector-rGGP9buL.js.map} +1 -1
  13. package/lib/{CommentsListItem-B0yR0R5a.js → CommentsListItem-DKS6V_TV.js} +3 -3
  14. package/lib/{CommentsListItem-B0yR0R5a.js.map → CommentsListItem-DKS6V_TV.js.map} +1 -1
  15. package/lib/{CommentsSelectedPathProvider-BYZ2OmJ9.js → CommentsSelectedPathProvider-BnZ6GdNc.js} +3 -3
  16. package/lib/{CommentsSelectedPathProvider-BYZ2OmJ9.js.map → CommentsSelectedPathProvider-BnZ6GdNc.js.map} +1 -1
  17. package/lib/{CommentsStudioLayout-DK4W-hTe.js → CommentsStudioLayout-YlpSH_2Y.js} +4 -4
  18. package/lib/{CommentsStudioLayout-DK4W-hTe.js.map → CommentsStudioLayout-YlpSH_2Y.js.map} +1 -1
  19. package/lib/{DateInputs-enUB1fG8.js → DateInputs-DioSKqY0.js} +7 -7
  20. package/lib/{DateInputs-enUB1fG8.js.map → DateInputs-DioSKqY0.js.map} +1 -1
  21. package/lib/{DocumentStatusIndicator-BP3N2GwG.js → DocumentStatusIndicator-BPBTH84U.js} +5 -5
  22. package/lib/{DocumentStatusIndicator-BP3N2GwG.js.map → DocumentStatusIndicator-BPBTH84U.js.map} +1 -1
  23. package/lib/{FormValue-4tVuOoGw.js → FormValue-CJg43LyM.js} +2 -2
  24. package/lib/{FormValue-4tVuOoGw.js.map → FormValue-CJg43LyM.js.map} +1 -1
  25. package/lib/{LoadingBlock-Cy2Pckab.js → LoadingBlock-DPTVJ58M.js} +3 -3
  26. package/lib/{LoadingBlock-Cy2Pckab.js.map → LoadingBlock-DPTVJ58M.js.map} +1 -1
  27. package/lib/{ReleaseTitle-CkEMIfmx.js → ReleaseTitle-ln13W3P1.js} +4 -4
  28. package/lib/{ReleaseTitle-CkEMIfmx.js.map → ReleaseTitle-ln13W3P1.js.map} +1 -1
  29. package/lib/{ReleasesMetadataProvider-DuAzHgpz.js → ReleasesMetadataProvider-DbxROVyw.js} +2 -2
  30. package/lib/{ReleasesMetadataProvider-DuAzHgpz.js.map → ReleasesMetadataProvider-DbxROVyw.js.map} +1 -1
  31. package/lib/{ReleasesNav-DozstCwb.js → ReleasesNav-DNwncim0.js} +15 -15
  32. package/lib/{ReleasesNav-DozstCwb.js.map → ReleasesNav-DNwncim0.js.map} +1 -1
  33. package/lib/{ReleasesStudioLayout-CXoRbIpf.js → ReleasesStudioLayout-gzl7rMMp.js} +8 -8
  34. package/lib/{ReleasesStudioLayout-CXoRbIpf.js.map → ReleasesStudioLayout-gzl7rMMp.js.map} +1 -1
  35. package/lib/{ReleasesTool-Bxru9khS.js → ReleasesTool-CsHniZCP.js} +20 -20
  36. package/lib/{ReleasesTool-Bxru9khS.js.map → ReleasesTool-CsHniZCP.js.map} +1 -1
  37. package/lib/{SchedulePublishingStudioLayout-CjJ-nu3Q.js → SchedulePublishingStudioLayout-BzSSDp9x.js} +3 -3
  38. package/lib/{SchedulePublishingStudioLayout-CjJ-nu3Q.js.map → SchedulePublishingStudioLayout-BzSSDp9x.js.map} +1 -1
  39. package/lib/{SchedulePublishingUpsellProvider-CxpMXwyA.js → SchedulePublishingUpsellProvider-DQqIZsCc.js} +2 -2
  40. package/lib/{SchedulePublishingUpsellProvider-CxpMXwyA.js.map → SchedulePublishingUpsellProvider-DQqIZsCc.js.map} +1 -1
  41. package/lib/{ScheduledPublishingEnabledProvider-Bvx140h2.js → ScheduledPublishingEnabledProvider-BcWaBJw5.js} +3 -3
  42. package/lib/{ScheduledPublishingEnabledProvider-Bvx140h2.js.map → ScheduledPublishingEnabledProvider-BcWaBJw5.js.map} +1 -1
  43. package/lib/{SearchProvider-DSLbCdgY.js → SearchProvider-D3w4Bvul.js} +10 -10
  44. package/lib/{SearchProvider-DSLbCdgY.js.map → SearchProvider-D3w4Bvul.js.map} +1 -1
  45. package/lib/{SingleDocReleaseLayout-DQicfsKs.js → SingleDocReleaseLayout-CQCkL8-0.js} +2 -2
  46. package/lib/{SingleDocReleaseLayout-DQicfsKs.js.map → SingleDocReleaseLayout-CQCkL8-0.js.map} +1 -1
  47. package/lib/{SingleDocReleaseUpsellProvider-DXNTZGTk.js → SingleDocReleaseUpsellProvider-YDBCGrHT.js} +4 -4
  48. package/lib/{SingleDocReleaseUpsellProvider-DXNTZGTk.js.map → SingleDocReleaseUpsellProvider-YDBCGrHT.js.map} +1 -1
  49. package/lib/{TasksStudioActiveToolLayout-CNpB5xLh.js → TasksStudioActiveToolLayout-DAmh3t6t.js} +16 -16
  50. package/lib/{TasksStudioActiveToolLayout-CNpB5xLh.js.map → TasksStudioActiveToolLayout-DAmh3t6t.js.map} +1 -1
  51. package/lib/{TasksStudioLayout-CnsvBNfw.js → TasksStudioLayout-6qNY69FD.js} +5 -5
  52. package/lib/{TasksStudioLayout-CnsvBNfw.js.map → TasksStudioLayout-6qNY69FD.js.map} +1 -1
  53. package/lib/{TimeZoneButton-DMd-M_ri.js → TimeZoneButton-TmrFye13.js} +4 -4
  54. package/lib/{TimeZoneButton-DMd-M_ri.js.map → TimeZoneButton-TmrFye13.js.map} +1 -1
  55. package/lib/{Tool-VgnYCwyZ.js → Tool-tpq9K4o7.js} +14 -14
  56. package/lib/{Tool-VgnYCwyZ.js.map → Tool-tpq9K4o7.js.map} +1 -1
  57. package/lib/{UnpublishVersionDialog-Fow5nBrc.js → UnpublishVersionDialog-6zyP9rCr.js} +5 -5
  58. package/lib/{UnpublishVersionDialog-Fow5nBrc.js.map → UnpublishVersionDialog-6zyP9rCr.js.map} +1 -1
  59. package/lib/{UpsellDialog-BqP2wmnt.js → UpsellDialog-CM238V3B.js} +3 -3
  60. package/lib/{UpsellDialog-BqP2wmnt.js.map → UpsellDialog-CM238V3B.js.map} +1 -1
  61. package/lib/{VariantsStudioNavbar-CvwRIsWJ.js → VariantsStudioNavbar-lFO2yrMq.js} +7 -7
  62. package/lib/{VariantsStudioNavbar-CvwRIsWJ.js.map → VariantsStudioNavbar-lFO2yrMq.js.map} +1 -1
  63. package/lib/{VariantsTool-CmQqDiwU.js → VariantsTool-B0OS4fku.js} +9 -9
  64. package/lib/{VariantsTool-CmQqDiwU.js.map → VariantsTool-B0OS4fku.js.map} +1 -1
  65. package/lib/{WorkspaceLoader-Ailj0PR9.js → WorkspaceLoader-CiJ6lGBu.js} +32 -32
  66. package/lib/{WorkspaceLoader-Ailj0PR9.js.map → WorkspaceLoader-CiJ6lGBu.js.map} +1 -1
  67. package/lib/_createContext.js +1 -1
  68. package/lib/{buildTextSelectionFromFragment-QpFfw3b7.js → buildTextSelectionFromFragment-CFZdgjpp.js} +3 -3
  69. package/lib/{buildTextSelectionFromFragment-QpFfw3b7.js.map → buildTextSelectionFromFragment-CFZdgjpp.js.map} +1 -1
  70. package/lib/{datastores-D4iZNSXV.js → datastores-wbjstxMt.js} +2 -2
  71. package/lib/{datastores-D4iZNSXV.js.map → datastores-wbjstxMt.js.map} +1 -1
  72. package/lib/{getTransactionsLogs-C-_o7nGx.js → getTransactionsLogs-Di50JBPB.js} +2 -2
  73. package/lib/{getTransactionsLogs-C-_o7nGx.js.map → getTransactionsLogs-Di50JBPB.js.map} +1 -1
  74. package/lib/index.js +35 -35
  75. package/lib/{inputResolver-Dpo4FxTy.js → inputResolver-DuUEGuH5.js} +4 -4
  76. package/lib/{inputResolver-Dpo4FxTy.js.map → inputResolver-DuUEGuH5.js.map} +1 -1
  77. package/lib/{navigation.telemetry-syjEPEw-.js → navigation.telemetry-EsdzXa34.js} +9 -9
  78. package/lib/{navigation.telemetry-syjEPEw-.js.map → navigation.telemetry-EsdzXa34.js.map} +1 -1
  79. package/lib/{plugin-B8Op6DFi.js → plugin-C_6lw0l3.js} +3 -3
  80. package/lib/{plugin-B8Op6DFi.js.map → plugin-C_6lw0l3.js.map} +1 -1
  81. package/lib/{plugin-CmF53OT5.js → plugin-ClT8-pVM.js} +4 -4
  82. package/lib/{plugin-CmF53OT5.js.map → plugin-ClT8-pVM.js.map} +1 -1
  83. package/lib/{plugin-Bk41RRuC.js → plugin-DRuKGgrO.js} +6 -6
  84. package/lib/{plugin-Bk41RRuC.js.map → plugin-DRuKGgrO.js.map} +1 -1
  85. package/lib/{plugin-BhEK2rZ8.js → plugin-wJP1ECFq.js} +6 -6
  86. package/lib/{plugin-BhEK2rZ8.js.map → plugin-wJP1ECFq.js.map} +1 -1
  87. package/lib/{scheduleItem-sJhB8YzX.js → scheduleItem-9PFIH7_h.js} +15 -15
  88. package/lib/{scheduleItem-sJhB8YzX.js.map → scheduleItem-9PFIH7_h.js.map} +1 -1
  89. package/lib/{schedules-CLC2KygL.js → schedules-DniNrpFJ.js} +3 -3
  90. package/lib/{schedules-CLC2KygL.js.map → schedules-DniNrpFJ.js.map} +1 -1
  91. package/lib/{searchDocumentRelease-CtPYZAZk.js → searchDocumentRelease-TrunKdQg.js} +5 -5
  92. package/lib/{searchDocumentRelease-CtPYZAZk.js.map → searchDocumentRelease-TrunKdQg.js.map} +1 -1
  93. package/lib/{studioClient-WYiCwgfZ.js → studioClient-BpYJ_yYC.js} +2 -2
  94. package/lib/{studioClient-WYiCwgfZ.js.map → studioClient-BpYJ_yYC.js.map} +1 -1
  95. package/lib/{useBundleDocuments-CiRQnzQh.js → useBundleDocuments-C58ExRpX.js} +5 -5
  96. package/lib/{useBundleDocuments-CiRQnzQh.js.map → useBundleDocuments-C58ExRpX.js.map} +1 -1
  97. package/lib/{useComments-CxUK5MNb.js → useComments-BcMCyjIE.js} +2 -2
  98. package/lib/{useComments-CxUK5MNb.js.map → useComments-BcMCyjIE.js.map} +1 -1
  99. package/lib/{useCommentsTelemetry-BWqcsQ1u.js → useCommentsTelemetry-CL97yuwT.js} +4 -4
  100. package/lib/{useCommentsTelemetry-BWqcsQ1u.js.map → useCommentsTelemetry-CL97yuwT.js.map} +1 -1
  101. package/lib/{useDocumentPreviewValues-B4jUnACZ.js → useDocumentPreviewValues-Cy9aUMu2.js} +5 -5
  102. package/lib/{useDocumentPreviewValues-B4jUnACZ.js.map → useDocumentPreviewValues-Cy9aUMu2.js.map} +1 -1
  103. package/lib/{useFeatureEnabled-sRpDeLLJ.js → useFeatureEnabled-C5qTffLc.js} +2 -2
  104. package/lib/{useFeatureEnabled-sRpDeLLJ.js.map → useFeatureEnabled-C5qTffLc.js.map} +1 -1
  105. package/lib/{useFieldActions-CrPgIiyl.js → useFieldActions-MFJIkobn.js} +2 -2
  106. package/lib/{useFieldActions-CrPgIiyl.js.map → useFieldActions-MFJIkobn.js.map} +1 -1
  107. package/lib/{useProjectId-bGwoCAuz.js → useProjectId-BRSQ8kIo.js} +2 -2
  108. package/lib/{useProjectId-bGwoCAuz.js.map → useProjectId-BRSQ8kIo.js.map} +1 -1
  109. package/lib/{useReleasesToolAvailable-BevhFmt9.js → useReleasesToolAvailable-BOlw1HWL.js} +3 -3
  110. package/lib/{useReleasesToolAvailable-BevhFmt9.js.map → useReleasesToolAvailable-BOlw1HWL.js.map} +1 -1
  111. package/lib/{useScheduledDraftMenuActions-DqsFlU0p.js → useScheduledDraftMenuActions-DIQYFw0x.js} +6 -6
  112. package/lib/{useScheduledDraftMenuActions-DqsFlU0p.js.map → useScheduledDraftMenuActions-DIQYFw0x.js.map} +1 -1
  113. package/lib/{useStudioUrl-DbfIwS1P.js → useStudioUrl-Dc5LnOvR.js} +5 -5
  114. package/lib/{useStudioUrl-DbfIwS1P.js.map → useStudioUrl-Dc5LnOvR.js.map} +1 -1
  115. package/lib/{useTimeZone-DnxQlCGS.js → useTimeZone-Da8WK1q-.js} +2 -2
  116. package/lib/{useTimeZone-DnxQlCGS.js.map → useTimeZone-Da8WK1q-.js.map} +1 -1
  117. package/lib/{validationUtils-Bcu-PkHm.js → validationUtils-B9CLn9F7.js} +4 -4
  118. package/lib/{validationUtils-Bcu-PkHm.js.map → validationUtils-B9CLn9F7.js.map} +1 -1
  119. package/lib/{version-DTqx_kFw.js → version-D7qSwBVE.js} +2 -2
  120. package/lib/{version-DTqx_kFw.js.map → version-D7qSwBVE.js.map} +1 -1
  121. package/package.json +11 -11
@@ -1,4 +1,4 @@
1
- import { c as useWorkspace, i as useClient, n as DEFAULT_STUDIO_CLIENT_OPTIONS } from "./studioClient-WYiCwgfZ.js";
1
+ import { c as useWorkspace, i as useClient, n as DEFAULT_STUDIO_CLIENT_OPTIONS } from "./studioClient-BpYJ_yYC.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";
@@ -79,4 +79,4 @@ function AddonDatasetProvider(props) {
79
79
  }
80
80
  export { AddonDatasetProvider as t };
81
81
 
82
- //# sourceMappingURL=AddonDatasetProvider-CIq0vehp.js.map
82
+ //# sourceMappingURL=AddonDatasetProvider-DDQrh5ob.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AddonDatasetProvider-CIq0vehp.js","names":["SanityClient","useCallback","useContext","useEffect","useMemo","useState","AddonDatasetContext","useClient","DEFAULT_STUDIO_CLIENT_OPTIONS","useWorkspace","AddonDatasetContextValue","AddonDatasetSetupProviderProps","children","React","ReactNode","AddonDatasetProviderInner","props","$","_c","dataset","projectId","originalClient","addonDatasetClient","setAddonDatasetClient","isCreatingDataset","setIsCreatingDataset","ready","setReady","error","setError","t0","res","request","uri","tag","name","getAddonDatasetName","t1","addonDatasetName","client","withConfig","requestTagPrefix","useCdn","handleCreateClient","t2","addonDatasetName_0","client_0","run","res_0","method","datasetName","client_1","finally","handleCreateAddonDataset","t3","t4","then","addonDatasetName_1","client_2","catch","err","t5","createAddonDataset","ctxValue","t6","AddonDatasetProvider","context"],"sources":["../src/core/studio/addonDataset/AddonDatasetProvider.tsx"],"sourcesContent":["import {type SanityClient} from '@sanity/client'\nimport {useCallback, useContext, useEffect, useMemo, useState} from 'react'\nimport {AddonDatasetContext} from 'sanity/_singletons'\n\nimport {useClient} from '../../hooks/useClient'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../studioClient'\nimport {useWorkspace} from '../workspace'\nimport {type AddonDatasetContextValue} from './types'\n\ninterface AddonDatasetSetupProviderProps {\n children: React.ReactNode\n}\n\nfunction AddonDatasetProviderInner(props: AddonDatasetSetupProviderProps) {\n const {children} = props\n const {dataset, projectId} = useWorkspace()\n const originalClient = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n const [addonDatasetClient, setAddonDatasetClient] = useState<SanityClient | null>(null)\n const [isCreatingDataset, setIsCreatingDataset] = useState<boolean>(false)\n const [ready, setReady] = useState<boolean>(false)\n const [error, setError] = useState<Error | null>(null)\n\n const getAddonDatasetName = useCallback(async (): Promise<string | undefined> => {\n const res = await originalClient.request({\n uri: `/projects/${projectId}/datasets?datasetProfile=comments&addonFor=${dataset}`,\n tag: 'sanity.studio',\n })\n\n // The response is an array containing the addon dataset. We only expect\n // one addon dataset to be returned, so we return the name of the first\n // addon dataset in the array.\n return res?.[0]?.name\n }, [dataset, originalClient, projectId])\n\n const handleCreateClient = useCallback(\n (addonDatasetName: string) => {\n const client = originalClient.withConfig({\n dataset: addonDatasetName,\n projectId,\n requestTagPrefix: 'sanity.studio',\n useCdn: false,\n })\n\n return client\n },\n [originalClient, projectId],\n )\n\n const handleCreateAddonDataset = useCallback(async (): Promise<SanityClient | null> => {\n setIsCreatingDataset(true)\n\n // Before running the setup, we check if the addon dataset already exists.\n // The addon dataset might already exist if another user has already run\n // the setup, but the current user has not refreshed the page yet and\n // therefore don't have a client for the addon dataset yet.\n try {\n const addonDatasetName = await getAddonDatasetName()\n\n if (addonDatasetName) {\n const client = handleCreateClient(addonDatasetName)\n setAddonDatasetClient(client)\n setIsCreatingDataset(false)\n return client\n }\n } catch {\n // If the dataset does not exist we will get an error, but we can ignore\n // it since we will create the dataset in the next step.\n }\n\n // Workaround for React Compiler not yet fully supporting try/catch/finally syntax\n const run = async () => {\n // 1. Create the addon dataset\n const res = await originalClient.request({\n uri: `/comments/${dataset}/setup`,\n method: 'POST',\n })\n\n const datasetName = res?.datasetName\n\n // 2. We can't continue if the addon dataset name is not returned\n if (!datasetName) {\n setIsCreatingDataset(false)\n return null\n }\n\n // 3. Create a client for the addon dataset and set it in the context value\n // so that the consumers can use it to execute comment operations and set up\n // the real time listener for the addon dataset.\n const client = handleCreateClient(datasetName)\n setAddonDatasetClient(client)\n\n // 4. Return the client so that the caller can use it to execute operations\n return client\n }\n return run().finally(() => {\n setIsCreatingDataset(false)\n })\n }, [dataset, getAddonDatasetName, handleCreateClient, originalClient])\n\n useEffect(() => {\n // On mount, we check if the addon dataset already exists. If it does, we create\n // a client for it and set it in the context value so that the consumers can use\n // it to execute comment operations and set up the real time listener for the addon\n // dataset.\n getAddonDatasetName()\n .then((addonDatasetName) => {\n if (!addonDatasetName) return\n const client = handleCreateClient(addonDatasetName)\n setAddonDatasetClient(client)\n })\n .catch((err) => {\n // If the addon dataset does not exist or we don't have permission to access it,\n // We can ignore this error.\n setError(err)\n })\n .finally(() => {\n setReady(true)\n })\n }, [getAddonDatasetName, handleCreateClient])\n\n const ctxValue = useMemo(\n (): AddonDatasetContextValue => ({\n client: addonDatasetClient,\n createAddonDataset: handleCreateAddonDataset,\n isCreatingDataset,\n ready,\n error,\n }),\n [addonDatasetClient, error, handleCreateAddonDataset, isCreatingDataset, ready],\n )\n\n return <AddonDatasetContext.Provider value={ctxValue}>{children}</AddonDatasetContext.Provider>\n}\n\n/**\n * This provider sets the addon dataset client, currently called `comments` dataset.\n * It also exposes a `createAddonDataset` function that can be used to create the addon dataset if it does not exist.\n * @beta\n * @hidden\n */\nexport function AddonDatasetProvider(props: AddonDatasetSetupProviderProps) {\n const context = useContext(AddonDatasetContext)\n // Avoid mounting the provider if it's already provided by a parent\n if (context) return props.children\n return <AddonDatasetProviderInner {...props} />\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"AddonDatasetProvider-DDQrh5ob.js","names":["SanityClient","useCallback","useContext","useEffect","useMemo","useState","AddonDatasetContext","useClient","DEFAULT_STUDIO_CLIENT_OPTIONS","useWorkspace","AddonDatasetContextValue","AddonDatasetSetupProviderProps","children","React","ReactNode","AddonDatasetProviderInner","props","$","_c","dataset","projectId","originalClient","addonDatasetClient","setAddonDatasetClient","isCreatingDataset","setIsCreatingDataset","ready","setReady","error","setError","t0","res","request","uri","tag","name","getAddonDatasetName","t1","addonDatasetName","client","withConfig","requestTagPrefix","useCdn","handleCreateClient","t2","addonDatasetName_0","client_0","run","res_0","method","datasetName","client_1","finally","handleCreateAddonDataset","t3","t4","then","addonDatasetName_1","client_2","catch","err","t5","createAddonDataset","ctxValue","t6","AddonDatasetProvider","context"],"sources":["../src/core/studio/addonDataset/AddonDatasetProvider.tsx"],"sourcesContent":["import {type SanityClient} from '@sanity/client'\nimport {useCallback, useContext, useEffect, useMemo, useState} from 'react'\nimport {AddonDatasetContext} from 'sanity/_singletons'\n\nimport {useClient} from '../../hooks/useClient'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../studioClient'\nimport {useWorkspace} from '../workspace'\nimport {type AddonDatasetContextValue} from './types'\n\ninterface AddonDatasetSetupProviderProps {\n children: React.ReactNode\n}\n\nfunction AddonDatasetProviderInner(props: AddonDatasetSetupProviderProps) {\n const {children} = props\n const {dataset, projectId} = useWorkspace()\n const originalClient = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n const [addonDatasetClient, setAddonDatasetClient] = useState<SanityClient | null>(null)\n const [isCreatingDataset, setIsCreatingDataset] = useState<boolean>(false)\n const [ready, setReady] = useState<boolean>(false)\n const [error, setError] = useState<Error | null>(null)\n\n const getAddonDatasetName = useCallback(async (): Promise<string | undefined> => {\n const res = await originalClient.request({\n uri: `/projects/${projectId}/datasets?datasetProfile=comments&addonFor=${dataset}`,\n tag: 'sanity.studio',\n })\n\n // The response is an array containing the addon dataset. We only expect\n // one addon dataset to be returned, so we return the name of the first\n // addon dataset in the array.\n return res?.[0]?.name\n }, [dataset, originalClient, projectId])\n\n const handleCreateClient = useCallback(\n (addonDatasetName: string) => {\n const client = originalClient.withConfig({\n dataset: addonDatasetName,\n projectId,\n requestTagPrefix: 'sanity.studio',\n useCdn: false,\n })\n\n return client\n },\n [originalClient, projectId],\n )\n\n const handleCreateAddonDataset = useCallback(async (): Promise<SanityClient | null> => {\n setIsCreatingDataset(true)\n\n // Before running the setup, we check if the addon dataset already exists.\n // The addon dataset might already exist if another user has already run\n // the setup, but the current user has not refreshed the page yet and\n // therefore don't have a client for the addon dataset yet.\n try {\n const addonDatasetName = await getAddonDatasetName()\n\n if (addonDatasetName) {\n const client = handleCreateClient(addonDatasetName)\n setAddonDatasetClient(client)\n setIsCreatingDataset(false)\n return client\n }\n } catch {\n // If the dataset does not exist we will get an error, but we can ignore\n // it since we will create the dataset in the next step.\n }\n\n // Workaround for React Compiler not yet fully supporting try/catch/finally syntax\n const run = async () => {\n // 1. Create the addon dataset\n const res = await originalClient.request({\n uri: `/comments/${dataset}/setup`,\n method: 'POST',\n })\n\n const datasetName = res?.datasetName\n\n // 2. We can't continue if the addon dataset name is not returned\n if (!datasetName) {\n setIsCreatingDataset(false)\n return null\n }\n\n // 3. Create a client for the addon dataset and set it in the context value\n // so that the consumers can use it to execute comment operations and set up\n // the real time listener for the addon dataset.\n const client = handleCreateClient(datasetName)\n setAddonDatasetClient(client)\n\n // 4. Return the client so that the caller can use it to execute operations\n return client\n }\n return run().finally(() => {\n setIsCreatingDataset(false)\n })\n }, [dataset, getAddonDatasetName, handleCreateClient, originalClient])\n\n useEffect(() => {\n // On mount, we check if the addon dataset already exists. If it does, we create\n // a client for it and set it in the context value so that the consumers can use\n // it to execute comment operations and set up the real time listener for the addon\n // dataset.\n getAddonDatasetName()\n .then((addonDatasetName) => {\n if (!addonDatasetName) return\n const client = handleCreateClient(addonDatasetName)\n setAddonDatasetClient(client)\n })\n .catch((err) => {\n // If the addon dataset does not exist or we don't have permission to access it,\n // We can ignore this error.\n setError(err)\n })\n .finally(() => {\n setReady(true)\n })\n }, [getAddonDatasetName, handleCreateClient])\n\n const ctxValue = useMemo(\n (): AddonDatasetContextValue => ({\n client: addonDatasetClient,\n createAddonDataset: handleCreateAddonDataset,\n isCreatingDataset,\n ready,\n error,\n }),\n [addonDatasetClient, error, handleCreateAddonDataset, isCreatingDataset, ready],\n )\n\n return <AddonDatasetContext.Provider value={ctxValue}>{children}</AddonDatasetContext.Provider>\n}\n\n/**\n * This provider sets the addon dataset client, currently called `comments` dataset.\n * It also exposes a `createAddonDataset` function that can be used to create the addon dataset if it does not exist.\n * @beta\n * @hidden\n */\nexport function AddonDatasetProvider(props: AddonDatasetSetupProviderProps) {\n const context = useContext(AddonDatasetContext)\n // Avoid mounting the provider if it's already provided by a parent\n if (context) return props.children\n return <AddonDatasetProviderInner {...props} />\n}\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { t as Button$1 } from "./Button-CGZ3ETwD.js";
2
2
  import { t as TooltipDelayGroupProvider } from "./TooltipDelayGroupProvider-whJet8vQ.js";
3
3
  import { t as useTranslation } from "./useTranslation-Cqs6Itwv.js";
4
- import { d as useWeeksOfMonth, f as ARROW_KEYS, m as DEFAULT_WEEK_DAY_NAMES, p as DEFAULT_MONTH_NAMES } from "./useScheduledDraftMenuActions-DqsFlU0p.js";
5
- import { t as useTimeZone } from "./useTimeZone-DnxQlCGS.js";
4
+ import { d as useWeeksOfMonth, f as ARROW_KEYS, m as DEFAULT_WEEK_DAY_NAMES, p as DEFAULT_MONTH_NAMES } from "./useScheduledDraftMenuActions-DIQYFw0x.js";
5
+ import { t as useTimeZone } from "./useTimeZone-Da8WK1q-.js";
6
6
  import { useEffect, useImperativeHandle, useRef, useState } from "react";
7
7
  import { c } from "react/compiler-runtime";
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -298,4 +298,4 @@ function CalendarFilter(props) {
298
298
  }
299
299
  export { CalendarDay as n, CalendarFilter as t };
300
300
 
301
- //# sourceMappingURL=CalendarFilter-DRKSPTWd.js.map
301
+ //# sourceMappingURL=CalendarFilter-DYbHmp_x.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CalendarFilter-DRKSPTWd.js","names":["CloseIcon","Card","CardTone","Text","isWeekend","useCallback","CalendarDayProps","date","Date","focused","onSelect","isCurrentMonth","isToday","selected","dateStyles","React","CSSProperties","disabled","CalendarDay","props","$","_c","t0","t1","undefined","t2","handleClick","tone","t3","toDateString","t4","t5","getDate","getMonth","t6","Symbol","for","position","t7","t8","opacity","textAlign","t9","t10","t11","t12","Box","Card","Grid","Label","isSameDay","isSameMonth","TimeZoneScope","useTimeZone","DEFAULT_WEEK_DAY_NAMES","useWeeksOfMonth","CalendarDay","DefaultCalendarDay","CalendarProps","CalendarMonthProps","date","Date","focused","selected","onSelect","hidden","renderCalendarDay","disabled","timeZoneScope","CalendarMonth","props","$","_c","getCurrentZoneDate","weeksOfMonth","t0","t1","t2","Symbol","for","gap","gridTemplateColumns","map","_temp","t3","t4","week","weekIdx","days","dayDate","dayIdx","isToday","isCurrentMonth","t5","weekday","textAlign","slice","ChevronLeftIcon","ChevronRightIcon","Box","Flex","Text","addDays","addMonths","setHours","setMinutes","ComponentProps","KeyboardEvent","useCallback","useEffect","useImperativeHandle","useRef","useState","RefAttributes","Button","TooltipDelayGroupProvider","TimeZoneScope","useTimeZone","useTranslation","ARROW_KEYS","DEFAULT_MONTH_NAMES","CalendarDayProps","CalendarMonth","CalendarProps","Omit","focusedDate","Date","onSelect","date","onFocusedDateChange","index","selectedDate","renderCalendarDay","props","React","ReactNode","disabled","timeZoneScope","PRESERVE_FOCUS_ELEMENT","overflow","position","outline","CalendarFilter","$","_c","forwardedRef","handleOnFocusedDateChange","providedFocusedDate","restProps","ref","t0","Symbol","for","_focusedDate","_setFocusedDate","t","tCore","zoneDateToUtc","t1","t2","date_0","setFocusedDate","t3","by","moveFocusedDate","t4","date_1","targetDate","getHours","getMinutes","undefined","handleDateChange","t5","current","t6","querySelector","focus","focusCurrentWeekDay","t7","event","includes","key","preventDefault","currentTarget","hasAttribute","handleKeyDown","t8","t9","t10","currentFocusInCalendarGrid","document","activeElement","matches","t11","t12","now","handleNowClick","t13","handlePrevMonthClick","t14","handleNextMonthClick","t15","borderBottom","minHeight","top","t16","getMonth","t17","getFullYear","t18","t19","content","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","t31","t32"],"sources":["../src/core/components/inputs/DateFilters/calendar/CalendarDay.tsx","../src/core/components/inputs/DateFilters/calendar/CalendarMonth.tsx","../src/core/components/inputs/DateFilters/calendar/CalendarFilter.tsx"],"sourcesContent":["import {CloseIcon} from '@sanity/icons/Close'\nimport {Card, type CardTone, Text} from '@sanity/ui'\nimport {isWeekend} from 'date-fns/isWeekend'\nimport {useCallback} from 'react'\n\nexport interface CalendarDayProps {\n date: Date // clock time\n focused?: boolean\n onSelect: (date?: Date) => void\n isCurrentMonth?: boolean\n isToday: boolean\n selected?: boolean\n dateStyles?: React.CSSProperties\n disabled?: boolean\n}\n\nexport function CalendarDay(props: CalendarDayProps) {\n const {\n date,\n focused,\n isCurrentMonth,\n isToday,\n onSelect,\n selected,\n disabled,\n dateStyles = {},\n } = props\n\n const handleClick = useCallback(() => {\n if (selected) {\n onSelect(undefined)\n } else {\n onSelect(date)\n }\n }, [date, onSelect, selected])\n\n let tone: CardTone\n if (isToday || selected) {\n tone = 'primary'\n } else if (isWeekend(date)) {\n // tone = 'transparent'\n tone = 'default'\n } else {\n tone = 'default'\n }\n\n return (\n <div aria-selected={selected} data-ui=\"CalendarDay\">\n <Card\n aria-label={date.toDateString()}\n aria-pressed={selected}\n as=\"button\"\n __unstable_focusRing\n data-weekday\n data-focused={focused ? 'true' : ''}\n data-testid={isToday ? 'day-tile-today' : `day-tile-${date.getDate()}-${date.getMonth()}`}\n role=\"button\"\n tabIndex={-1}\n onClick={handleClick}\n paddingX={3}\n paddingY={4}\n radius={2}\n selected={selected}\n style={{position: 'relative'}}\n tone={tone}\n disabled={disabled}\n >\n <Text\n size={1}\n style={{\n opacity: !selected && !isCurrentMonth ? 0.35 : 1,\n textAlign: 'center',\n ...dateStyles,\n }}\n >\n {selected ? <CloseIcon /> : date.getDate()}\n </Text>\n </Card>\n </div>\n )\n}\n","import {Box, Card, Grid, Label} from '@sanity/ui'\nimport {isSameDay} from 'date-fns/isSameDay'\nimport {isSameMonth} from 'date-fns/isSameMonth'\n\nimport {type TimeZoneScope, useTimeZone} from '../../../../hooks/useTimeZone'\nimport {DEFAULT_WEEK_DAY_NAMES} from '../../DateInputs/calendar/constants'\nimport {useWeeksOfMonth} from '../../DateInputs/calendar/utils'\nimport {CalendarDay as DefaultCalendarDay} from './CalendarDay'\nimport {type CalendarProps} from './CalendarFilter'\n\ninterface CalendarMonthProps {\n date: Date\n focused?: Date\n selected?: Date\n onSelect: (date?: Date) => void\n hidden?: boolean\n renderCalendarDay?: CalendarProps['renderCalendarDay']\n disabled?: boolean\n timeZoneScope: TimeZoneScope\n}\n\nexport function CalendarMonth(props: CalendarMonthProps) {\n const {date, renderCalendarDay, hidden, disabled, timeZoneScope} = props\n const {getCurrentZoneDate} = useTimeZone(timeZoneScope)\n const CalendarDay = renderCalendarDay || DefaultCalendarDay\n const weeksOfMonth = useWeeksOfMonth(date)\n\n return (\n <Box aria-hidden={hidden || false} data-ui=\"CalendarMonth\">\n <Grid\n style={{\n gap: '1px',\n gridTemplateColumns: 'repeat(7, 1fr)',\n }}\n >\n {/* Header */}\n {DEFAULT_WEEK_DAY_NAMES.map((weekday) => (\n <Card key={weekday} paddingY={3}>\n <Label size={1} style={{textAlign: 'center'}}>\n {weekday.slice(0, 1)}\n </Label>\n </Card>\n ))}\n\n {weeksOfMonth.map((week, weekIdx) =>\n week.days.map((dayDate, dayIdx) => {\n const focused = props.focused && isSameDay(dayDate, props.focused)\n const selected = props.selected && isSameDay(dayDate, props.selected)\n const isToday = isSameDay(dayDate, getCurrentZoneDate())\n const isCurrentMonth = isSameMonth(dayDate, props.focused || date)\n\n return (\n <CalendarDay\n key={`${weekIdx}-${dayIdx}`}\n date={dayDate}\n focused={focused}\n isCurrentMonth={isCurrentMonth}\n isToday={isToday}\n onSelect={props.onSelect}\n selected={selected}\n disabled={disabled}\n />\n )\n }),\n )}\n </Grid>\n </Box>\n )\n}\n","import {ChevronLeftIcon} from '@sanity/icons/ChevronLeft'\nimport {ChevronRightIcon} from '@sanity/icons/ChevronRight'\nimport {Box, Flex, Text} from '@sanity/ui'\nimport {addDays} from 'date-fns/addDays'\nimport {addMonths} from 'date-fns/addMonths'\nimport {setHours} from 'date-fns/setHours'\nimport {setMinutes} from 'date-fns/setMinutes'\nimport {\n type ComponentProps,\n type KeyboardEvent,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n type RefAttributes,\n} from 'react'\n\nimport {Button} from '../../../../../ui-components/button/Button'\nimport {TooltipDelayGroupProvider} from '../../../../../ui-components/tooltipDelayGroupProvider/TooltipDelayGroupProvider'\nimport {type TimeZoneScope, useTimeZone} from '../../../../hooks/useTimeZone'\nimport {useTranslation} from '../../../../i18n/hooks/useTranslation'\nimport {ARROW_KEYS, DEFAULT_MONTH_NAMES} from '../../DateInputs/calendar/constants'\nimport {type CalendarDayProps} from './CalendarDay'\nimport {CalendarMonth} from './CalendarMonth'\n\nexport type CalendarProps = Omit<ComponentProps<'div'>, 'onSelect'> & {\n focusedDate?: Date\n onSelect: (date?: Date) => void\n onFocusedDateChange?: (index: Date) => void\n selectedDate?: Date\n renderCalendarDay?: (props: CalendarDayProps) => React.ReactNode\n disabled?: boolean\n timeZoneScope: TimeZoneScope\n}\n\n// This is used to maintain focus on a child element of the calendar-grid between re-renders\n// When using arrow keys to move focus from a day in one month to another we are setting focus at the button for the day\n// after it has changed but *only* if we *already* had focus inside the calendar grid (e.g not if focus was on the \"next\n// year\" button, or any of the other controls)\n// When moving from the last day of a month that displays 6 weeks in the grid to a month that displays 5 weeks, current\n// focus gets lost on render, so this provides us with a stable element to help us preserve focus on a child element of\n// the calendar grid between re-renders\nconst PRESERVE_FOCUS_ELEMENT = (\n <span\n data-preserve-focus\n style={{overflow: 'hidden', position: 'absolute', outline: 'none'}}\n tabIndex={-1}\n />\n)\n\nexport function CalendarFilter(props: CalendarProps & RefAttributes<HTMLDivElement>) {\n const {\n ref: forwardedRef,\n focusedDate: providedFocusedDate,\n onFocusedDateChange: handleOnFocusedDateChange,\n onSelect,\n selectedDate,\n renderCalendarDay,\n timeZoneScope,\n ...restProps\n } = props\n const [_focusedDate, _setFocusedDate] = useState<Date>(new Date())\n const {t: tCore} = useTranslation()\n const {zoneDateToUtc} = useTimeZone(timeZoneScope)\n\n const focusedDate = providedFocusedDate || _focusedDate\n\n const onFocusedDateChange = useCallback(\n (date: Date) => {\n if (handleOnFocusedDateChange && providedFocusedDate) {\n handleOnFocusedDateChange(date)\n } else {\n _setFocusedDate(date)\n }\n },\n [handleOnFocusedDateChange, providedFocusedDate],\n )\n\n const setFocusedDate = useCallback(\n (date: Date) => {\n onFocusedDateChange(zoneDateToUtc(date))\n },\n [onFocusedDateChange, zoneDateToUtc],\n )\n\n const moveFocusedDate = useCallback(\n (by: number) => setFocusedDate(addMonths(focusedDate, by)),\n [focusedDate, setFocusedDate],\n )\n\n const handleDateChange = useCallback(\n (date?: Date) => {\n if (date) {\n const targetDate = zoneDateToUtc(\n setMinutes(setHours(date, date.getHours()), date.getMinutes()),\n )\n onSelect(targetDate)\n onFocusedDateChange(targetDate)\n } else {\n onSelect(undefined)\n }\n },\n [onSelect, zoneDateToUtc, onFocusedDateChange],\n )\n\n const ref = useRef<HTMLDivElement | null>(null)\n useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(forwardedRef, () => ref.current)\n\n const focusCurrentWeekDay = useCallback(() => {\n ref.current?.querySelector<HTMLElement>(`[data-focused=\"true\"]`)?.focus()\n }, [ref])\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n if (!ARROW_KEYS.includes(event.key)) {\n return\n }\n event.preventDefault()\n if (event.currentTarget.hasAttribute('data-calendar-grid')) {\n focusCurrentWeekDay()\n return\n }\n if (event.key === 'ArrowUp') {\n onFocusedDateChange(zoneDateToUtc(addDays(focusedDate, -7)))\n }\n if (event.key === 'ArrowDown') {\n onFocusedDateChange(zoneDateToUtc(addDays(focusedDate, 7)))\n }\n if (event.key === 'ArrowLeft') {\n onFocusedDateChange(zoneDateToUtc(addDays(focusedDate, -1)))\n }\n if (event.key === 'ArrowRight') {\n onFocusedDateChange(zoneDateToUtc(addDays(focusedDate, 1)))\n }\n // set focus temporarily on this element to make sure focus is still inside the calendar-grid after re-render\n ref.current?.querySelector<HTMLElement>('[data-preserve-focus]')?.focus()\n },\n [ref, focusCurrentWeekDay, onFocusedDateChange, focusedDate, zoneDateToUtc],\n )\n\n useEffect(() => {\n focusCurrentWeekDay()\n }, [focusCurrentWeekDay])\n\n useEffect(() => {\n const currentFocusInCalendarGrid = document.activeElement?.matches(\n '[data-calendar-grid], [data-calendar-grid] [data-preserve-focus]',\n )\n if (\n // Only move focus if it's currently in the calendar grid\n currentFocusInCalendarGrid\n ) {\n focusCurrentWeekDay()\n }\n }, [ref, focusCurrentWeekDay, focusedDate])\n\n // Select AND focus current date when 'today' is pressed\n const handleNowClick = useCallback(() => {\n const now = new Date()\n onSelect(now)\n onFocusedDateChange(now)\n }, [onSelect, onFocusedDateChange])\n\n const handlePrevMonthClick = useCallback(() => moveFocusedDate(-1), [moveFocusedDate])\n\n const handleNextMonthClick = useCallback(() => moveFocusedDate(1), [moveFocusedDate])\n\n return (\n <Box data-ui=\"Calendar\" {...restProps} ref={ref}>\n {/* Month + Year header */}\n <Flex\n align=\"center\"\n paddingLeft={4}\n style={{\n borderBottom: '1px solid var(--card-border-color)',\n minHeight: `55px`,\n position: 'sticky',\n top: 0,\n }}\n >\n <Flex align=\"center\" flex={1} justify=\"space-between\">\n <Text weight=\"medium\" size={1}>\n {DEFAULT_MONTH_NAMES[focusedDate?.getMonth()]} {focusedDate?.getFullYear()}\n </Text>\n <Flex paddingRight={3} gap={2}>\n <TooltipDelayGroupProvider>\n <Button\n icon={ChevronLeftIcon}\n mode=\"bleed\"\n onClick={handlePrevMonthClick}\n tooltipProps={{content: 'Previous month'}}\n disabled={restProps.disabled}\n />\n <Button\n icon={ChevronRightIcon}\n mode=\"bleed\"\n onClick={handleNextMonthClick}\n tooltipProps={{content: 'Next month'}}\n disabled={restProps.disabled}\n />\n </TooltipDelayGroupProvider>\n </Flex>\n </Flex>\n </Flex>\n\n {/* Select date */}\n <Box>\n {/* Selected month (grid of days) */}\n <Box\n data-calendar-grid\n onKeyDown={handleKeyDown}\n overflow=\"hidden\"\n paddingBottom={1}\n paddingX={1}\n tabIndex={0}\n >\n <CalendarMonth\n date={focusedDate}\n focused={providedFocusedDate}\n onSelect={handleDateChange}\n selected={selectedDate}\n renderCalendarDay={renderCalendarDay}\n disabled={restProps.disabled}\n timeZoneScope={timeZoneScope}\n />\n {PRESERVE_FOCUS_ELEMENT}\n </Box>\n </Box>\n\n {/* Today button */}\n <Box flex={1} style={{borderBottom: '1px solid var(--card-border-color)'}}>\n <Button\n disabled={restProps.disabled}\n mode=\"bleed\"\n onClick={handleNowClick}\n width=\"fill\"\n aria-label={tCore('calendar.action.go-to-today-aria-label')}\n text={tCore('calendar.action.go-to-today')}\n />\n </Box>\n </Box>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"CalendarFilter-DYbHmp_x.js","names":["CloseIcon","Card","CardTone","Text","isWeekend","useCallback","CalendarDayProps","date","Date","focused","onSelect","isCurrentMonth","isToday","selected","dateStyles","React","CSSProperties","disabled","CalendarDay","props","$","_c","t0","t1","undefined","t2","handleClick","tone","t3","toDateString","t4","t5","getDate","getMonth","t6","Symbol","for","position","t7","t8","opacity","textAlign","t9","t10","t11","t12","Box","Card","Grid","Label","isSameDay","isSameMonth","TimeZoneScope","useTimeZone","DEFAULT_WEEK_DAY_NAMES","useWeeksOfMonth","CalendarDay","DefaultCalendarDay","CalendarProps","CalendarMonthProps","date","Date","focused","selected","onSelect","hidden","renderCalendarDay","disabled","timeZoneScope","CalendarMonth","props","$","_c","getCurrentZoneDate","weeksOfMonth","t0","t1","t2","Symbol","for","gap","gridTemplateColumns","map","_temp","t3","t4","week","weekIdx","days","dayDate","dayIdx","isToday","isCurrentMonth","t5","weekday","textAlign","slice","ChevronLeftIcon","ChevronRightIcon","Box","Flex","Text","addDays","addMonths","setHours","setMinutes","ComponentProps","KeyboardEvent","useCallback","useEffect","useImperativeHandle","useRef","useState","RefAttributes","Button","TooltipDelayGroupProvider","TimeZoneScope","useTimeZone","useTranslation","ARROW_KEYS","DEFAULT_MONTH_NAMES","CalendarDayProps","CalendarMonth","CalendarProps","Omit","focusedDate","Date","onSelect","date","onFocusedDateChange","index","selectedDate","renderCalendarDay","props","React","ReactNode","disabled","timeZoneScope","PRESERVE_FOCUS_ELEMENT","overflow","position","outline","CalendarFilter","$","_c","forwardedRef","handleOnFocusedDateChange","providedFocusedDate","restProps","ref","t0","Symbol","for","_focusedDate","_setFocusedDate","t","tCore","zoneDateToUtc","t1","t2","date_0","setFocusedDate","t3","by","moveFocusedDate","t4","date_1","targetDate","getHours","getMinutes","undefined","handleDateChange","t5","current","t6","querySelector","focus","focusCurrentWeekDay","t7","event","includes","key","preventDefault","currentTarget","hasAttribute","handleKeyDown","t8","t9","t10","currentFocusInCalendarGrid","document","activeElement","matches","t11","t12","now","handleNowClick","t13","handlePrevMonthClick","t14","handleNextMonthClick","t15","borderBottom","minHeight","top","t16","getMonth","t17","getFullYear","t18","t19","content","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","t31","t32"],"sources":["../src/core/components/inputs/DateFilters/calendar/CalendarDay.tsx","../src/core/components/inputs/DateFilters/calendar/CalendarMonth.tsx","../src/core/components/inputs/DateFilters/calendar/CalendarFilter.tsx"],"sourcesContent":["import {CloseIcon} from '@sanity/icons/Close'\nimport {Card, type CardTone, Text} from '@sanity/ui'\nimport {isWeekend} from 'date-fns/isWeekend'\nimport {useCallback} from 'react'\n\nexport interface CalendarDayProps {\n date: Date // clock time\n focused?: boolean\n onSelect: (date?: Date) => void\n isCurrentMonth?: boolean\n isToday: boolean\n selected?: boolean\n dateStyles?: React.CSSProperties\n disabled?: boolean\n}\n\nexport function CalendarDay(props: CalendarDayProps) {\n const {\n date,\n focused,\n isCurrentMonth,\n isToday,\n onSelect,\n selected,\n disabled,\n dateStyles = {},\n } = props\n\n const handleClick = useCallback(() => {\n if (selected) {\n onSelect(undefined)\n } else {\n onSelect(date)\n }\n }, [date, onSelect, selected])\n\n let tone: CardTone\n if (isToday || selected) {\n tone = 'primary'\n } else if (isWeekend(date)) {\n // tone = 'transparent'\n tone = 'default'\n } else {\n tone = 'default'\n }\n\n return (\n <div aria-selected={selected} data-ui=\"CalendarDay\">\n <Card\n aria-label={date.toDateString()}\n aria-pressed={selected}\n as=\"button\"\n __unstable_focusRing\n data-weekday\n data-focused={focused ? 'true' : ''}\n data-testid={isToday ? 'day-tile-today' : `day-tile-${date.getDate()}-${date.getMonth()}`}\n role=\"button\"\n tabIndex={-1}\n onClick={handleClick}\n paddingX={3}\n paddingY={4}\n radius={2}\n selected={selected}\n style={{position: 'relative'}}\n tone={tone}\n disabled={disabled}\n >\n <Text\n size={1}\n style={{\n opacity: !selected && !isCurrentMonth ? 0.35 : 1,\n textAlign: 'center',\n ...dateStyles,\n }}\n >\n {selected ? <CloseIcon /> : date.getDate()}\n </Text>\n </Card>\n </div>\n )\n}\n","import {Box, Card, Grid, Label} from '@sanity/ui'\nimport {isSameDay} from 'date-fns/isSameDay'\nimport {isSameMonth} from 'date-fns/isSameMonth'\n\nimport {type TimeZoneScope, useTimeZone} from '../../../../hooks/useTimeZone'\nimport {DEFAULT_WEEK_DAY_NAMES} from '../../DateInputs/calendar/constants'\nimport {useWeeksOfMonth} from '../../DateInputs/calendar/utils'\nimport {CalendarDay as DefaultCalendarDay} from './CalendarDay'\nimport {type CalendarProps} from './CalendarFilter'\n\ninterface CalendarMonthProps {\n date: Date\n focused?: Date\n selected?: Date\n onSelect: (date?: Date) => void\n hidden?: boolean\n renderCalendarDay?: CalendarProps['renderCalendarDay']\n disabled?: boolean\n timeZoneScope: TimeZoneScope\n}\n\nexport function CalendarMonth(props: CalendarMonthProps) {\n const {date, renderCalendarDay, hidden, disabled, timeZoneScope} = props\n const {getCurrentZoneDate} = useTimeZone(timeZoneScope)\n const CalendarDay = renderCalendarDay || DefaultCalendarDay\n const weeksOfMonth = useWeeksOfMonth(date)\n\n return (\n <Box aria-hidden={hidden || false} data-ui=\"CalendarMonth\">\n <Grid\n style={{\n gap: '1px',\n gridTemplateColumns: 'repeat(7, 1fr)',\n }}\n >\n {/* Header */}\n {DEFAULT_WEEK_DAY_NAMES.map((weekday) => (\n <Card key={weekday} paddingY={3}>\n <Label size={1} style={{textAlign: 'center'}}>\n {weekday.slice(0, 1)}\n </Label>\n </Card>\n ))}\n\n {weeksOfMonth.map((week, weekIdx) =>\n week.days.map((dayDate, dayIdx) => {\n const focused = props.focused && isSameDay(dayDate, props.focused)\n const selected = props.selected && isSameDay(dayDate, props.selected)\n const isToday = isSameDay(dayDate, getCurrentZoneDate())\n const isCurrentMonth = isSameMonth(dayDate, props.focused || date)\n\n return (\n <CalendarDay\n key={`${weekIdx}-${dayIdx}`}\n date={dayDate}\n focused={focused}\n isCurrentMonth={isCurrentMonth}\n isToday={isToday}\n onSelect={props.onSelect}\n selected={selected}\n disabled={disabled}\n />\n )\n }),\n )}\n </Grid>\n </Box>\n )\n}\n","import {ChevronLeftIcon} from '@sanity/icons/ChevronLeft'\nimport {ChevronRightIcon} from '@sanity/icons/ChevronRight'\nimport {Box, Flex, Text} from '@sanity/ui'\nimport {addDays} from 'date-fns/addDays'\nimport {addMonths} from 'date-fns/addMonths'\nimport {setHours} from 'date-fns/setHours'\nimport {setMinutes} from 'date-fns/setMinutes'\nimport {\n type ComponentProps,\n type KeyboardEvent,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n type RefAttributes,\n} from 'react'\n\nimport {Button} from '../../../../../ui-components/button/Button'\nimport {TooltipDelayGroupProvider} from '../../../../../ui-components/tooltipDelayGroupProvider/TooltipDelayGroupProvider'\nimport {type TimeZoneScope, useTimeZone} from '../../../../hooks/useTimeZone'\nimport {useTranslation} from '../../../../i18n/hooks/useTranslation'\nimport {ARROW_KEYS, DEFAULT_MONTH_NAMES} from '../../DateInputs/calendar/constants'\nimport {type CalendarDayProps} from './CalendarDay'\nimport {CalendarMonth} from './CalendarMonth'\n\nexport type CalendarProps = Omit<ComponentProps<'div'>, 'onSelect'> & {\n focusedDate?: Date\n onSelect: (date?: Date) => void\n onFocusedDateChange?: (index: Date) => void\n selectedDate?: Date\n renderCalendarDay?: (props: CalendarDayProps) => React.ReactNode\n disabled?: boolean\n timeZoneScope: TimeZoneScope\n}\n\n// This is used to maintain focus on a child element of the calendar-grid between re-renders\n// When using arrow keys to move focus from a day in one month to another we are setting focus at the button for the day\n// after it has changed but *only* if we *already* had focus inside the calendar grid (e.g not if focus was on the \"next\n// year\" button, or any of the other controls)\n// When moving from the last day of a month that displays 6 weeks in the grid to a month that displays 5 weeks, current\n// focus gets lost on render, so this provides us with a stable element to help us preserve focus on a child element of\n// the calendar grid between re-renders\nconst PRESERVE_FOCUS_ELEMENT = (\n <span\n data-preserve-focus\n style={{overflow: 'hidden', position: 'absolute', outline: 'none'}}\n tabIndex={-1}\n />\n)\n\nexport function CalendarFilter(props: CalendarProps & RefAttributes<HTMLDivElement>) {\n const {\n ref: forwardedRef,\n focusedDate: providedFocusedDate,\n onFocusedDateChange: handleOnFocusedDateChange,\n onSelect,\n selectedDate,\n renderCalendarDay,\n timeZoneScope,\n ...restProps\n } = props\n const [_focusedDate, _setFocusedDate] = useState<Date>(new Date())\n const {t: tCore} = useTranslation()\n const {zoneDateToUtc} = useTimeZone(timeZoneScope)\n\n const focusedDate = providedFocusedDate || _focusedDate\n\n const onFocusedDateChange = useCallback(\n (date: Date) => {\n if (handleOnFocusedDateChange && providedFocusedDate) {\n handleOnFocusedDateChange(date)\n } else {\n _setFocusedDate(date)\n }\n },\n [handleOnFocusedDateChange, providedFocusedDate],\n )\n\n const setFocusedDate = useCallback(\n (date: Date) => {\n onFocusedDateChange(zoneDateToUtc(date))\n },\n [onFocusedDateChange, zoneDateToUtc],\n )\n\n const moveFocusedDate = useCallback(\n (by: number) => setFocusedDate(addMonths(focusedDate, by)),\n [focusedDate, setFocusedDate],\n )\n\n const handleDateChange = useCallback(\n (date?: Date) => {\n if (date) {\n const targetDate = zoneDateToUtc(\n setMinutes(setHours(date, date.getHours()), date.getMinutes()),\n )\n onSelect(targetDate)\n onFocusedDateChange(targetDate)\n } else {\n onSelect(undefined)\n }\n },\n [onSelect, zoneDateToUtc, onFocusedDateChange],\n )\n\n const ref = useRef<HTMLDivElement | null>(null)\n useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(forwardedRef, () => ref.current)\n\n const focusCurrentWeekDay = useCallback(() => {\n ref.current?.querySelector<HTMLElement>(`[data-focused=\"true\"]`)?.focus()\n }, [ref])\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n if (!ARROW_KEYS.includes(event.key)) {\n return\n }\n event.preventDefault()\n if (event.currentTarget.hasAttribute('data-calendar-grid')) {\n focusCurrentWeekDay()\n return\n }\n if (event.key === 'ArrowUp') {\n onFocusedDateChange(zoneDateToUtc(addDays(focusedDate, -7)))\n }\n if (event.key === 'ArrowDown') {\n onFocusedDateChange(zoneDateToUtc(addDays(focusedDate, 7)))\n }\n if (event.key === 'ArrowLeft') {\n onFocusedDateChange(zoneDateToUtc(addDays(focusedDate, -1)))\n }\n if (event.key === 'ArrowRight') {\n onFocusedDateChange(zoneDateToUtc(addDays(focusedDate, 1)))\n }\n // set focus temporarily on this element to make sure focus is still inside the calendar-grid after re-render\n ref.current?.querySelector<HTMLElement>('[data-preserve-focus]')?.focus()\n },\n [ref, focusCurrentWeekDay, onFocusedDateChange, focusedDate, zoneDateToUtc],\n )\n\n useEffect(() => {\n focusCurrentWeekDay()\n }, [focusCurrentWeekDay])\n\n useEffect(() => {\n const currentFocusInCalendarGrid = document.activeElement?.matches(\n '[data-calendar-grid], [data-calendar-grid] [data-preserve-focus]',\n )\n if (\n // Only move focus if it's currently in the calendar grid\n currentFocusInCalendarGrid\n ) {\n focusCurrentWeekDay()\n }\n }, [ref, focusCurrentWeekDay, focusedDate])\n\n // Select AND focus current date when 'today' is pressed\n const handleNowClick = useCallback(() => {\n const now = new Date()\n onSelect(now)\n onFocusedDateChange(now)\n }, [onSelect, onFocusedDateChange])\n\n const handlePrevMonthClick = useCallback(() => moveFocusedDate(-1), [moveFocusedDate])\n\n const handleNextMonthClick = useCallback(() => moveFocusedDate(1), [moveFocusedDate])\n\n return (\n <Box data-ui=\"Calendar\" {...restProps} ref={ref}>\n {/* Month + Year header */}\n <Flex\n align=\"center\"\n paddingLeft={4}\n style={{\n borderBottom: '1px solid var(--card-border-color)',\n minHeight: `55px`,\n position: 'sticky',\n top: 0,\n }}\n >\n <Flex align=\"center\" flex={1} justify=\"space-between\">\n <Text weight=\"medium\" size={1}>\n {DEFAULT_MONTH_NAMES[focusedDate?.getMonth()]} {focusedDate?.getFullYear()}\n </Text>\n <Flex paddingRight={3} gap={2}>\n <TooltipDelayGroupProvider>\n <Button\n icon={ChevronLeftIcon}\n mode=\"bleed\"\n onClick={handlePrevMonthClick}\n tooltipProps={{content: 'Previous month'}}\n disabled={restProps.disabled}\n />\n <Button\n icon={ChevronRightIcon}\n mode=\"bleed\"\n onClick={handleNextMonthClick}\n tooltipProps={{content: 'Next month'}}\n disabled={restProps.disabled}\n />\n </TooltipDelayGroupProvider>\n </Flex>\n </Flex>\n </Flex>\n\n {/* Select date */}\n <Box>\n {/* Selected month (grid of days) */}\n <Box\n data-calendar-grid\n onKeyDown={handleKeyDown}\n overflow=\"hidden\"\n paddingBottom={1}\n paddingX={1}\n tabIndex={0}\n >\n <CalendarMonth\n date={focusedDate}\n focused={providedFocusedDate}\n onSelect={handleDateChange}\n selected={selectedDate}\n renderCalendarDay={renderCalendarDay}\n disabled={restProps.disabled}\n timeZoneScope={timeZoneScope}\n />\n {PRESERVE_FOCUS_ELEMENT}\n </Box>\n </Box>\n\n {/* Today button */}\n <Box flex={1} style={{borderBottom: '1px solid var(--card-border-color)'}}>\n <Button\n disabled={restProps.disabled}\n mode=\"bleed\"\n onClick={handleNowClick}\n width=\"fill\"\n aria-label={tCore('calendar.action.go-to-today-aria-label')}\n text={tCore('calendar.action.go-to-today')}\n />\n </Box>\n </Box>\n )\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { n as CommentsEnabledProvider, r as CommentsAuthoringPathProvider, t as CommentsSelectedPathProvider } from "./CommentsSelectedPathProvider-BYZ2OmJ9.js";
1
+ import { n as CommentsEnabledProvider, r as CommentsAuthoringPathProvider, t as CommentsSelectedPathProvider } from "./CommentsSelectedPathProvider-BnZ6GdNc.js";
2
2
  import { t as useCommentsEnabled } from "./useCommentsEnabled-BPc3788v.js";
3
3
  import { c } from "react/compiler-runtime";
4
4
  import { jsx } from "react/jsx-runtime";
@@ -30,4 +30,4 @@ function CommentsDocumentLayoutInner(props) {
30
30
  }
31
31
  export { CommentsDocumentLayout };
32
32
 
33
- //# sourceMappingURL=CommentsDocumentLayout-NGghzPWZ.js.map
33
+ //# sourceMappingURL=CommentsDocumentLayout-qdF_HKSC.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CommentsDocumentLayout-NGghzPWZ.js","names":["DocumentLayoutProps","CommentsAuthoringPathProvider","CommentsEnabledProvider","CommentsSelectedPathProvider","useCommentsEnabled","CommentsDocumentLayout","props","$","_c","documentId","documentType","parentContext","mode","t0","t1","CommentsDocumentLayoutInner","commentsEnabled","enabled","renderDefault"],"sources":["../src/core/comments/plugin/document-layout/CommentsDocumentLayout.tsx"],"sourcesContent":["import {type DocumentLayoutProps} from '../../../config/types'\nimport {CommentsAuthoringPathProvider} from '../../context/authoring-path/CommentsAuthoringPathProvider'\nimport {CommentsEnabledProvider} from '../../context/enabled/CommentsEnabledProvider'\nimport {CommentsSelectedPathProvider} from '../../context/selected-path/CommentsSelectedPathProvider'\nimport {useCommentsEnabled} from '../../hooks/useCommentsEnabled'\n\nexport function CommentsDocumentLayout(props: DocumentLayoutProps) {\n const {documentId, documentType} = props\n const parentContext = useCommentsEnabled()\n\n // If there is a parent context and the mode is not null, a parent provider is\n // already checking if comments are enabled. In such cases, additional wrapping\n // of the document layout in the `CommentsEnabledProvider` is unnecessary.\n // The `DocumentPane` component within the `structureTool` handles this wrapping.\n // However, as this plugin may be used in contexts outside of the `structureTool`,\n // we must check for a parent context that checks if comments are enabled and\n // conditionally apply the `CommentsEnabledProvider` wrapping if it is not present.\n if (parentContext.mode !== null) {\n return <CommentsDocumentLayoutInner {...props} />\n }\n\n return (\n <CommentsEnabledProvider documentId={documentId} documentType={documentType}>\n <CommentsDocumentLayoutInner {...props} />\n </CommentsEnabledProvider>\n )\n}\n\nfunction CommentsDocumentLayoutInner(props: DocumentLayoutProps) {\n const commentsEnabled = useCommentsEnabled()\n\n // If comments are not enabled, render the default document layout\n if (!commentsEnabled.enabled) {\n return props.renderDefault(props)\n }\n\n return (\n <CommentsSelectedPathProvider>\n <CommentsAuthoringPathProvider>{props.renderDefault(props)}</CommentsAuthoringPathProvider>\n </CommentsSelectedPathProvider>\n )\n}\n"],"mappings":";;;;AAMA,SAAOK,uBAAAC,OAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GACL,EAAAC,YAAAC,iBAAmCJ;CAUnC,IATsBF,mBASlBO,CAAa,CAAAC,SAAU,MAAI;EAAA,IAAAC;EACoB,OADpBN,EAAA,OAAAD,QACoBO,KAAAN,EAAA,MAA1CM,KAAA,oBAAC,6BAAD,EAA4B,GAAKP,MAAK,CAAA,GAAIC,EAAA,KAAAD,OAAAC,EAAA,KAAAM,KAA1CA;CAA0C;CAClD,IAAAA;CAAA,AAAAN,EAAA,OAAAD,QAI6CO,KAAAN,EAAA,MAA1CM,KAAA,oBAAC,6BAAD,EAA4B,GAAKP,MAAK,CAAA,GAAIC,EAAA,KAAAD,OAAAC,EAAA,KAAAM;CAAA,IAAAC;CAClB,OADkBP,EAAA,OAAAE,cAAAF,EAAA,OAAAG,gBAAAH,EAAA,OAAAM,MAD5CC,KAAA,oBAAC,yBAAD;EAAqCL;EAA0BC;EAC7DG,UAAAA;CADsB,CAAA,GAEEN,EAAA,KAAAE,YAAAF,EAAA,KAAAG,cAAAH,EAAA,KAAAM,IAAAN,EAAA,KAAAO,MAAAA,KAAAP,EAAA,IAF1BO;AAE0B;AAI9B,SAAAC,4BAAAT,OAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA;CAIE,IAAI,CAHoBJ,mBAGnBY,CAAe,CAAAC,SAAQ;EAAA,IAAAJ;EACO,OADPN,EAAA,OAAAD,QACOO,KAAAN,EAAA,MAA1BM,KAAAP,MAAKY,cAAeZ,KAAK,GAACC,EAAA,KAAAD,OAAAC,EAAA,KAAAM,KAA1BA;CAA0B;CAClC,IAAAA;CAAA,AAAAN,EAAA,OAAAD,QAI6DO,KAAAN,EAAA,MAA1BM,KAAAP,MAAKY,cAAeZ,KAAK,GAACC,EAAA,KAAAD,OAAAC,EAAA,KAAAM;CAAA,IAAAC;CAC7B,OAD6BP,EAAA,OAAAM,KAC7BC,KAAAP,EAAA,MAF/BO,KAAA,oBAAC,8BAAD,EAAA,UACE,oBAAC,+BAAD,EAAA,UAAgCD,GAAF,CAAA,EADH,CAAA,GAEEN,EAAA,KAAAM,IAAAN,EAAA,KAAAO,KAF/BA;AAE+B"}
1
+ {"version":3,"file":"CommentsDocumentLayout-qdF_HKSC.js","names":["DocumentLayoutProps","CommentsAuthoringPathProvider","CommentsEnabledProvider","CommentsSelectedPathProvider","useCommentsEnabled","CommentsDocumentLayout","props","$","_c","documentId","documentType","parentContext","mode","t0","t1","CommentsDocumentLayoutInner","commentsEnabled","enabled","renderDefault"],"sources":["../src/core/comments/plugin/document-layout/CommentsDocumentLayout.tsx"],"sourcesContent":["import {type DocumentLayoutProps} from '../../../config/types'\nimport {CommentsAuthoringPathProvider} from '../../context/authoring-path/CommentsAuthoringPathProvider'\nimport {CommentsEnabledProvider} from '../../context/enabled/CommentsEnabledProvider'\nimport {CommentsSelectedPathProvider} from '../../context/selected-path/CommentsSelectedPathProvider'\nimport {useCommentsEnabled} from '../../hooks/useCommentsEnabled'\n\nexport function CommentsDocumentLayout(props: DocumentLayoutProps) {\n const {documentId, documentType} = props\n const parentContext = useCommentsEnabled()\n\n // If there is a parent context and the mode is not null, a parent provider is\n // already checking if comments are enabled. In such cases, additional wrapping\n // of the document layout in the `CommentsEnabledProvider` is unnecessary.\n // The `DocumentPane` component within the `structureTool` handles this wrapping.\n // However, as this plugin may be used in contexts outside of the `structureTool`,\n // we must check for a parent context that checks if comments are enabled and\n // conditionally apply the `CommentsEnabledProvider` wrapping if it is not present.\n if (parentContext.mode !== null) {\n return <CommentsDocumentLayoutInner {...props} />\n }\n\n return (\n <CommentsEnabledProvider documentId={documentId} documentType={documentType}>\n <CommentsDocumentLayoutInner {...props} />\n </CommentsEnabledProvider>\n )\n}\n\nfunction CommentsDocumentLayoutInner(props: DocumentLayoutProps) {\n const commentsEnabled = useCommentsEnabled()\n\n // If comments are not enabled, render the default document layout\n if (!commentsEnabled.enabled) {\n return props.renderDefault(props)\n }\n\n return (\n <CommentsSelectedPathProvider>\n <CommentsAuthoringPathProvider>{props.renderDefault(props)}</CommentsAuthoringPathProvider>\n </CommentsSelectedPathProvider>\n )\n}\n"],"mappings":";;;;AAMA,SAAOK,uBAAAC,OAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GACL,EAAAC,YAAAC,iBAAmCJ;CAUnC,IATsBF,mBASlBO,CAAa,CAAAC,SAAU,MAAI;EAAA,IAAAC;EACoB,OADpBN,EAAA,OAAAD,QACoBO,KAAAN,EAAA,MAA1CM,KAAA,oBAAC,6BAAD,EAA4B,GAAKP,MAAK,CAAA,GAAIC,EAAA,KAAAD,OAAAC,EAAA,KAAAM,KAA1CA;CAA0C;CAClD,IAAAA;CAAA,AAAAN,EAAA,OAAAD,QAI6CO,KAAAN,EAAA,MAA1CM,KAAA,oBAAC,6BAAD,EAA4B,GAAKP,MAAK,CAAA,GAAIC,EAAA,KAAAD,OAAAC,EAAA,KAAAM;CAAA,IAAAC;CAClB,OADkBP,EAAA,OAAAE,cAAAF,EAAA,OAAAG,gBAAAH,EAAA,OAAAM,MAD5CC,KAAA,oBAAC,yBAAD;EAAqCL;EAA0BC;EAC7DG,UAAAA;CADsB,CAAA,GAEEN,EAAA,KAAAE,YAAAF,EAAA,KAAAG,cAAAH,EAAA,KAAAM,IAAAN,EAAA,KAAAO,MAAAA,KAAAP,EAAA,IAF1BO;AAE0B;AAI9B,SAAAC,4BAAAT,OAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA;CAIE,IAAI,CAHoBJ,mBAGnBY,CAAe,CAAAC,SAAQ;EAAA,IAAAJ;EACO,OADPN,EAAA,OAAAD,QACOO,KAAAN,EAAA,MAA1BM,KAAAP,MAAKY,cAAeZ,KAAK,GAACC,EAAA,KAAAD,OAAAC,EAAA,KAAAM,KAA1BA;CAA0B;CAClC,IAAAA;CAAA,AAAAN,EAAA,OAAAD,QAI6DO,KAAAN,EAAA,MAA1BM,KAAAP,MAAKY,cAAeZ,KAAK,GAACC,EAAA,KAAAD,OAAAC,EAAA,KAAAM;CAAA,IAAAC;CAC7B,OAD6BP,EAAA,OAAAM,KAC7BC,KAAAP,EAAA,MAF/BO,KAAA,oBAAC,8BAAD,EAAA,UACE,oBAAC,+BAAD,EAAA,UAAgCD,GAAF,CAAA,EADH,CAAA,GAEEN,EAAA,KAAAM,IAAAN,EAAA,KAAAO,KAF/BA;AAE+B"}
@@ -1,8 +1,8 @@
1
1
  import { n as Tooltip, t as Button$1 } from "./Button-CGZ3ETwD.js";
2
2
  import { t as Popover } from "./Popover-DRCM1MS-.js";
3
3
  import { t as useTranslation } from "./useTranslation-Cqs6Itwv.js";
4
- import { _ as applyCommentsFieldAttr, b as useCommentsScroll, f as hasCommentMessageValue, m as parseCommentFieldPath, n as COMMENTS_HIGHLIGHT_HUE_KEY, o as CommentInput, p as isTextSelectionComment, t as useComments, x as commentsLocaleNamespace } from "./useComments-CxUK5MNb.js";
5
- import { n as useCurrentUser } from "./LoadingBlock-Cy2Pckab.js";
4
+ import { _ as applyCommentsFieldAttr, b as useCommentsScroll, f as hasCommentMessageValue, m as parseCommentFieldPath, n as COMMENTS_HIGHLIGHT_HUE_KEY, o as CommentInput, p as isTextSelectionComment, t as useComments, x as commentsLocaleNamespace } from "./useComments-BcMCyjIE.js";
5
+ import { n as useCurrentUser } from "./LoadingBlock-DPTVJ58M.js";
6
6
  import { t as Translate } from "./Translate-0HIWr1eF.js";
7
7
  import { t as useAddonDataset } from "./useAddonDataset-BvCgByG6.js";
8
8
  import { t as useCommentsEnabled } from "./useCommentsEnabled-BPc3788v.js";
@@ -327,4 +327,4 @@ function belongsToField(fieldPath, path) {
327
327
  }
328
328
  export { CommentsField };
329
329
 
330
- //# sourceMappingURL=CommentsField-_QkW9aLe.js.map
330
+ //# sourceMappingURL=CommentsField-i8xs45PB.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CommentsField-_QkW9aLe.js","names":["useContext","CommentsAuthoringPathContext","CommentsAuthoringPathContextValue","useCommentsAuthoringPath","value","Error","AddCommentIcon","CommentIcon","CurrentUser","PortableTextBlock","Button","SanityUIButton","Flex","Stack","Text","useClickOutsideEvent","useCallback","useMemo","useRef","useState","styled","Popover","Tooltip","UserListWithPermissionsHookValue","useTranslation","Translate","useAddonDataset","CommentInput","CommentInputHandle","hasCommentMessageValue","commentsLocaleNamespace","CommentMessage","ContentStack","CommentsFieldButtonProps","count","currentUser","fieldTitle","isCreatingDataset","mentionOptions","onChange","value","onClick","onClose","onCommentAdd","onDiscard","onInputKeyDown","event","React","KeyboardEvent","open","CommentsFieldButton","props","$","_c","t","error","addonDatasetError","popoverRef","addCommentButtonElement","setAddCommentButtonElement","commentInputHandle","hasComments","Boolean","t0","focus","closePopover","t1","nextValue","handleSubmit","t2","hasValue","t3","current","discardDialogController","startDiscard","t4","isDefaultPrevented","handleInputKeyDown","t5","Symbol","for","close","handleDiscardCancel","t6","handleDiscardConfirm","t7","event_0","key","preventDefault","stopPropagation","handlePopoverKeyDown","t8","t9","field","t10","placeholder","t11","content","t12","t13","t14","t15","t16","placement","t17","t18","hues","Path","PortableTextBlock","Stack","useBoundaryElement","PathUtils","uuid","AnimatePresence","motion","Variants","useCallback","useMemo","useRef","useState","css","styled","FieldProps","getSchemaTypeTitle","useCurrentUser","COMMENTS_HIGHLIGHT_HUE_KEY","isTextSelectionComment","parseCommentFieldPath","useComments","useCommentsAuthoringPath","useCommentsEnabled","applyCommentsFieldAttr","useCommentsScroll","useCommentsSelectedPath","useCommentsUpsell","CommentCreatePayload","CommentMessage","CommentsUIMode","CommentsFieldButton","messageCache","Map","EMPTY_ARRAY","HIGHLIGHT_BLOCK_VARIANTS","initial","opacity","animate","exit","CommentsField","props","$","_c","enabled","mode","t0","renderDefault","HighlightDiv","div","theme","radius","space","color","sanity","bg","dark","hex","FieldStack","CommentFieldInner","currentUser","element","boundaryElement","rootRef","comments","isCommentsOpen","isCreatingDataset","mentionOptions","onCommentsOpen","operation","setStatus","status","upsellData","handleOpenDialog","selectedPath","setSelectedPath","authoringPath","setAuthoringPath","scrollToGroup","t1","schemaType","fieldTitle","t2","path","toString","stringPath","t3","get","cachedValue","value","setValue","isOpen","t4","fieldPath","origin","belongsToField","t5","isSelected","threadId","t6","data","open","t7","c","filter","some","_temp","isInlineCommentThread","t8","c_0","commentsCount","map","reduce","_temp2","count","hasComments","Boolean","delete","resetMessageValue","t9","latestThread","find","c_1","handleClick","t10","nextValue","newThreadId","nextComment","type","message","parentCommentId","undefined","reactions","create","handleCommentAdd","t11","handleClose","t12","nextValue_0","set","handleOnChange","t13","Number","t14","button","isAddingComment","internalComments","t15","t16","__internal_comments","t17","t18","t19","acc","val","x","parentComment","commentFieldPath","startsWith"],"sources":["../src/core/comments/hooks/useCommentsAuthoringPath.ts","../src/core/comments/plugin/field/CommentsFieldButton.tsx","../src/core/comments/plugin/field/CommentsField.tsx"],"sourcesContent":["import {useContext} from 'react'\nimport {CommentsAuthoringPathContext} from 'sanity/_singletons'\n\nimport {type CommentsAuthoringPathContextValue} from '../context/authoring-path/types'\n\n/**\n * @beta\n * @hidden\n */\nexport function useCommentsAuthoringPath(): CommentsAuthoringPathContextValue {\n const value = useContext(CommentsAuthoringPathContext)\n\n if (!value) {\n throw new Error('useCommentsAuthoringPath: missing context value')\n }\n\n return value\n}\n","import {AddCommentIcon} from '@sanity/icons/AddComment'\nimport {CommentIcon} from '@sanity/icons/Comment'\nimport {type CurrentUser, type PortableTextBlock} from '@sanity/types'\nimport {\n // oxlint-disable-next-line no-restricted-imports\n Button as SanityUIButton,\n Flex,\n Stack,\n Text,\n useClickOutsideEvent,\n} from '@sanity/ui'\nimport {useCallback, useMemo, useRef, useState} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Button} from '../../../../ui-components/button/Button'\nimport {Popover} from '../../../../ui-components/popover/Popover'\nimport {Tooltip} from '../../../../ui-components/tooltip/Tooltip'\nimport {type UserListWithPermissionsHookValue} from '../../../hooks/useUserListWithPermissions'\nimport {useTranslation} from '../../../i18n/hooks/useTranslation'\nimport {Translate} from '../../../i18n/Translate'\nimport {useAddonDataset} from '../../../studio/addonDataset/useAddonDataset'\nimport {\n CommentInput,\n type CommentInputHandle,\n} from '../../components/pte/comment-input/CommentInput'\nimport {hasCommentMessageValue} from '../../helpers'\nimport {commentsLocaleNamespace} from '../../i18n'\nimport {type CommentMessage} from '../../types'\n\nconst ContentStack = styled(Stack)`\n width: 320px;\n`\n\ninterface CommentsFieldButtonProps {\n count: number\n currentUser: CurrentUser\n fieldTitle: string\n isCreatingDataset: boolean\n mentionOptions: UserListWithPermissionsHookValue\n onChange: (value: PortableTextBlock[]) => void\n onClick?: () => void\n onClose: () => void\n onCommentAdd: (value: PortableTextBlock[]) => void\n onDiscard: () => void\n onInputKeyDown?: (event: React.KeyboardEvent) => void\n open: boolean\n value: CommentMessage\n}\n\nexport function CommentsFieldButton(props: CommentsFieldButtonProps) {\n const {\n count,\n currentUser,\n fieldTitle,\n isCreatingDataset,\n mentionOptions,\n onChange,\n onClick,\n onClose,\n onCommentAdd,\n onDiscard,\n onInputKeyDown,\n open,\n value,\n } = props\n const {t} = useTranslation(commentsLocaleNamespace)\n const {error: addonDatasetError} = useAddonDataset()\n const popoverRef = useRef<HTMLDivElement | null>(null)\n const [addCommentButtonElement, setAddCommentButtonElement] = useState<HTMLButtonElement | null>(\n null,\n )\n const commentInputHandle = useRef<CommentInputHandle | null>(null)\n const hasComments = Boolean(count > 0)\n\n const closePopover = useCallback(() => {\n if (!open) return\n onClose()\n addCommentButtonElement?.focus()\n }, [addCommentButtonElement, open, onClose])\n\n const handleSubmit = useCallback(\n (nextValue: PortableTextBlock[]) => {\n onCommentAdd(nextValue)\n closePopover()\n },\n [closePopover, onCommentAdd],\n )\n\n const hasValue = useMemo(() => hasCommentMessageValue(value), [value])\n\n const startDiscard = useCallback(() => {\n if (!hasValue) {\n closePopover()\n return\n }\n\n commentInputHandle.current?.discardDialogController.open()\n }, [closePopover, hasValue])\n\n const handleInputKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n // Don't act if the input already prevented this event\n if (event.isDefaultPrevented()) {\n return\n }\n\n // Call parent handler\n if (onInputKeyDown) onInputKeyDown(event)\n },\n [onInputKeyDown],\n )\n\n const handleDiscardCancel = useCallback(() => {\n commentInputHandle.current?.discardDialogController.close()\n }, [])\n\n const handleDiscardConfirm = useCallback(() => {\n commentInputHandle.current?.discardDialogController.close()\n closePopover()\n onDiscard()\n }, [closePopover, onDiscard])\n\n const handlePopoverKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Escape') {\n event.preventDefault()\n event.stopPropagation()\n startDiscard()\n }\n },\n [startDiscard],\n )\n\n useClickOutsideEvent(open && startDiscard, () => [popoverRef.current])\n\n if (!hasComments) {\n const placeholder = (\n <Translate\n t={t}\n i18nKey=\"compose.add-comment-input-placeholder\"\n values={{field: fieldTitle}}\n />\n )\n\n const content = (\n <ContentStack padding={2} gap={4}>\n <CommentInput\n currentUser={currentUser}\n focusLock\n focusOnMount\n mentionOptions={mentionOptions}\n onChange={onChange}\n onDiscardCancel={handleDiscardCancel}\n onDiscardConfirm={handleDiscardConfirm}\n onKeyDown={handleInputKeyDown}\n onSubmit={handleSubmit}\n placeholder={placeholder}\n readOnly={isCreatingDataset}\n ref={commentInputHandle}\n value={value}\n />\n </ContentStack>\n )\n\n return (\n <Popover\n constrainSize\n content={content}\n fallbackPlacements={['bottom-end']}\n open={open}\n placement=\"right-start\"\n portal\n ref={popoverRef}\n onKeyDown={handlePopoverKeyDown}\n >\n <div>\n <Button\n aria-label={t('field-button.aria-label-add')}\n disabled={isCreatingDataset || Boolean(addonDatasetError)}\n icon={AddCommentIcon}\n mode=\"bleed\"\n onClick={onClick}\n ref={setAddCommentButtonElement}\n selected={open}\n tooltipProps={{\n content: t('field-button.title'),\n placement: 'top',\n }}\n />\n </div>\n </Popover>\n )\n }\n\n return (\n <Tooltip portal placement=\"top\" content={t('field-button.content', {count})}>\n <SanityUIButton\n aria-label={t('field-button.aria-label-open')}\n mode=\"bleed\"\n onClick={onClick}\n padding={2}\n gap={2}\n >\n <Flex align=\"center\" gap={2}>\n <Text size={1}>\n <CommentIcon />\n </Text>\n <Text size={0}>{count > 9 ? '9+' : count}</Text>\n </Flex>\n </SanityUIButton>\n </Tooltip>\n )\n}\n","import {hues} from '@sanity/color'\nimport {type Path, type PortableTextBlock} from '@sanity/types'\nimport {Stack, useBoundaryElement} from '@sanity/ui'\nimport * as PathUtils from '@sanity/util/paths'\nimport {uuid} from '@sanity/uuid'\nimport {AnimatePresence, motion, type Variants} from 'motion/react'\nimport {useCallback, useMemo, useRef, useState} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {type FieldProps} from '../../../form/types/fieldProps'\nimport {getSchemaTypeTitle} from '../../../schema/helpers'\nimport {useCurrentUser} from '../../../store/user/hooks'\nimport {COMMENTS_HIGHLIGHT_HUE_KEY} from '../../constants'\nimport {isTextSelectionComment, parseCommentFieldPath} from '../../helpers'\nimport {useComments} from '../../hooks/useComments'\nimport {useCommentsAuthoringPath} from '../../hooks/useCommentsAuthoringPath'\nimport {useCommentsEnabled} from '../../hooks/useCommentsEnabled'\nimport {applyCommentsFieldAttr, useCommentsScroll} from '../../hooks/useCommentsScroll'\nimport {useCommentsSelectedPath} from '../../hooks/useCommentsSelectedPath'\nimport {useCommentsUpsell} from '../../hooks/useCommentsUpsell'\nimport {type CommentCreatePayload, type CommentMessage, type CommentsUIMode} from '../../types'\nimport {CommentsFieldButton} from './CommentsFieldButton'\n\n// When the form is temporarily set to `readOnly` while reconnecting, the form\n// will be re-rendered and any comment that is being authored will be lost.\n// To avoid this, we cache the comment message in a map and restore it when the\n// field is re-rendered.\nconst messageCache = new Map<string, CommentMessage>()\n\nconst EMPTY_ARRAY: [] = []\n\nconst HIGHLIGHT_BLOCK_VARIANTS: Variants = {\n initial: {\n opacity: 0,\n },\n animate: {\n opacity: 1,\n },\n exit: {\n opacity: 0,\n },\n}\n\nexport function CommentsField(props: FieldProps) {\n const {enabled, mode} = useCommentsEnabled()\n\n if (!enabled) {\n return props.renderDefault(props)\n }\n\n return <CommentFieldInner {...props} mode={mode} />\n}\n\nconst HighlightDiv = styled(motion.div)(({theme}) => {\n // oxlint-disable-next-line no-deprecated -- will fix in follow up PR\n const {radius, space, color} = theme.sanity\n const bg = hues[COMMENTS_HIGHLIGHT_HUE_KEY][color.dark ? 900 : 50].hex\n\n return css`\n mix-blend-mode: ${color.dark ? 'screen' : 'multiply'};\n border-radius: ${radius[3]}px;\n top: -${space[2]}px;\n left: -${space[2]}px;\n bottom: -${space[2]}px;\n right: -${space[2]}px;\n pointer-events: none;\n position: absolute;\n z-index: 1;\n width: calc(100% + ${space[2] * 2}px);\n height: calc(100% + ${space[2] * 2}px);\n background-color: ${bg};\n `\n})\n\nconst FieldStack = styled(Stack)`\n position: relative;\n\n // Hide when the field component renders nothing (e.g. a custom\n // field component that returns null) to avoid an empty wrapper\n // taking up space in the form.\n &:empty:not([hidden]) {\n display: none;\n }\n`\n\nfunction CommentFieldInner(\n props: FieldProps & {\n mode: CommentsUIMode\n },\n) {\n const {mode} = props\n\n const currentUser = useCurrentUser()\n const {element: boundaryElement} = useBoundaryElement()\n\n const rootRef = useRef<HTMLDivElement | null>(null)\n\n const {\n comments,\n isCommentsOpen,\n isCreatingDataset,\n mentionOptions,\n onCommentsOpen,\n operation,\n setStatus,\n status,\n } = useComments()\n const {upsellData, handleOpenDialog} = useCommentsUpsell()\n const {selectedPath, setSelectedPath} = useCommentsSelectedPath()\n const {authoringPath, setAuthoringPath} = useCommentsAuthoringPath()\n const {scrollToGroup} = useCommentsScroll({\n boundaryElement,\n })\n\n const fieldTitle = useMemo(() => getSchemaTypeTitle(props.schemaType), [props.schemaType])\n const stringPath = useMemo(() => PathUtils.toString(props.path), [props.path])\n\n // Use the cached value if it exists as the initial value\n const cachedValue = messageCache.get(stringPath) || null\n\n const [value, setValue] = useState<PortableTextBlock[] | null>(cachedValue)\n\n // If the path of the field matches the authoring path, the comment input should be open.\n const isOpen = useMemo(() => authoringPath === stringPath, [authoringPath, stringPath])\n\n // Determine if the current field is selected\n const isSelected = useMemo(() => {\n if (!isCommentsOpen) return false\n if (selectedPath?.origin === 'form' || selectedPath?.origin === 'url') return false\n return belongsToField(selectedPath?.fieldPath, props.path)\n }, [isCommentsOpen, selectedPath?.fieldPath, selectedPath?.origin, props.path])\n\n const isInlineCommentThread = useMemo(() => {\n return comments.data.open\n .filter((c) => c.threadId === selectedPath?.threadId)\n .some((x) => isTextSelectionComment(x.parentComment))\n }, [comments.data.open, selectedPath?.threadId])\n\n // Total number of comments for the current field, including comments on\n // blocks nested below it (container-nested and dialog-authored comments\n // store the block's data path as their `fieldPath`).\n const count = useMemo(() => {\n const commentsCount = comments.data.open\n .map((c) => (belongsToField(c.fieldPath, props.path) ? c.commentsCount : 0))\n .reduce((acc, val) => acc + val, 0)\n\n return commentsCount || 0\n }, [comments.data.open, props.path])\n\n const hasComments = Boolean(count > 0)\n\n const resetMessageValue = useCallback(() => {\n // Reset the value and remove the message from the cache\n setValue(null)\n messageCache.delete(stringPath)\n }, [stringPath])\n\n const handleClick = useCallback(() => {\n // When clicking a comment button when the field has comments, we want to:\n if (hasComments) {\n // 1. Change the status to 'open' if it's 'resolved'\n if (status === 'resolved') {\n setStatus('open')\n }\n\n // 2. Ensure that the authoring path is reset when clicking\n // the comment button when the field has comments.\n setAuthoringPath(null)\n\n // 3. Open the comments inspector\n onCommentsOpen?.()\n\n // 4. Find the latest comment thread for the current field\n const latestThread = comments.data.open.find((c) => belongsToField(c.fieldPath, props.path))\n\n // 5. Set the latest thread ID as the selected thread ID\n // and scroll to the it. The selected path carries the thread's own\n // `fieldPath`: the inspector marks a thread selected by comparing\n // against the stored path, which for nested threads is deeper than\n // this field's path.\n if (latestThread) {\n setSelectedPath({\n threadId: latestThread.threadId,\n origin: 'form',\n fieldPath: latestThread.fieldPath,\n })\n\n scrollToGroup(latestThread.threadId)\n }\n\n return\n }\n\n if (mode === 'upsell') {\n if (upsellData) {\n handleOpenDialog('field_action')\n } else {\n // Open the comments inspector\n onCommentsOpen?.()\n }\n return\n }\n\n // If the field is open (i.e. the authoring path is set to the current field)\n // we close the field by resetting the authoring path. If the field is not open,\n // we set the authoring path to the current field so that the comment form is opened.\n setAuthoringPath(isOpen ? null : stringPath)\n }, [\n comments.data.open,\n handleOpenDialog,\n hasComments,\n isOpen,\n mode,\n onCommentsOpen,\n props.path,\n scrollToGroup,\n setAuthoringPath,\n setSelectedPath,\n setStatus,\n status,\n stringPath,\n upsellData,\n ])\n\n const handleCommentAdd = useCallback(\n (nextValue: PortableTextBlock[]) => {\n if (nextValue) {\n // Since this is a new comment, we generate a new thread ID\n const newThreadId = uuid()\n\n // Construct the comment payload\n const nextComment: CommentCreatePayload = {\n type: 'field',\n fieldPath: PathUtils.toString(props.path),\n message: nextValue,\n parentCommentId: undefined,\n status: 'open',\n threadId: newThreadId,\n // New comments have no reactions\n reactions: EMPTY_ARRAY,\n }\n\n // Execute the create mutation\n void operation.create(nextComment)\n\n // If a comment is added to a field when viewing resolved comments, we switch\n // to open comments and scroll to the comment that was just added\n // Open the inspector when a new comment is added\n onCommentsOpen?.()\n\n if (status === 'resolved') {\n // Set the status to 'open' so that the comment is visible\n setStatus('open')\n }\n\n resetMessageValue()\n\n // Scroll to the thread\n setSelectedPath({\n threadId: newThreadId,\n origin: 'form',\n fieldPath: PathUtils.toString(props.path),\n })\n\n scrollToGroup(newThreadId)\n }\n },\n [\n onCommentsOpen,\n operation,\n props.path,\n resetMessageValue,\n scrollToGroup,\n setSelectedPath,\n setStatus,\n status,\n ],\n )\n\n const handleClose = useCallback(() => setAuthoringPath(null), [setAuthoringPath])\n\n const handleOnChange = useCallback(\n (nextValue: CommentMessage) => {\n setValue(nextValue)\n messageCache.set(stringPath, nextValue)\n },\n [stringPath],\n )\n\n const internalComments: FieldProps['__internal_comments'] = useMemo(\n () => ({\n button: currentUser && (\n <CommentsFieldButton\n count={Number(count)}\n currentUser={currentUser}\n fieldTitle={fieldTitle}\n isCreatingDataset={isCreatingDataset}\n mentionOptions={mentionOptions}\n onChange={handleOnChange}\n onClick={handleClick}\n onClose={handleClose}\n onCommentAdd={handleCommentAdd}\n onDiscard={resetMessageValue}\n open={isOpen}\n value={value}\n />\n ),\n hasComments,\n isAddingComment: isOpen,\n }),\n [\n currentUser,\n count,\n fieldTitle,\n isCreatingDataset,\n mentionOptions,\n handleOnChange,\n handleClick,\n handleClose,\n handleCommentAdd,\n resetMessageValue,\n isOpen,\n value,\n hasComments,\n ],\n )\n\n return (\n <FieldStack {...applyCommentsFieldAttr(PathUtils.toString(props.path))} ref={rootRef}>\n {props.renderDefault({\n ...props,\n // oxlint-disable-next-line no-deprecated -- will fix in follow up PR\n __internal_comments: internalComments,\n })}\n\n <AnimatePresence>\n {isSelected && !isInlineCommentThread && (\n <HighlightDiv\n animate=\"animate\"\n exit=\"exit\"\n initial=\"initial\"\n variants={HIGHLIGHT_BLOCK_VARIANTS}\n />\n )}\n </AnimatePresence>\n </FieldStack>\n )\n}\n\n/**\n * Whether a comment's stored `fieldPath` sits at or below the field's path.\n */\nfunction belongsToField(fieldPath: string | null | undefined, path: Path): boolean {\n const commentFieldPath = parseCommentFieldPath(fieldPath)\n return commentFieldPath ? PathUtils.startsWith(path, commentFieldPath) : false\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"CommentsField-i8xs45PB.js","names":["useContext","CommentsAuthoringPathContext","CommentsAuthoringPathContextValue","useCommentsAuthoringPath","value","Error","AddCommentIcon","CommentIcon","CurrentUser","PortableTextBlock","Button","SanityUIButton","Flex","Stack","Text","useClickOutsideEvent","useCallback","useMemo","useRef","useState","styled","Popover","Tooltip","UserListWithPermissionsHookValue","useTranslation","Translate","useAddonDataset","CommentInput","CommentInputHandle","hasCommentMessageValue","commentsLocaleNamespace","CommentMessage","ContentStack","CommentsFieldButtonProps","count","currentUser","fieldTitle","isCreatingDataset","mentionOptions","onChange","value","onClick","onClose","onCommentAdd","onDiscard","onInputKeyDown","event","React","KeyboardEvent","open","CommentsFieldButton","props","$","_c","t","error","addonDatasetError","popoverRef","addCommentButtonElement","setAddCommentButtonElement","commentInputHandle","hasComments","Boolean","t0","focus","closePopover","t1","nextValue","handleSubmit","t2","hasValue","t3","current","discardDialogController","startDiscard","t4","isDefaultPrevented","handleInputKeyDown","t5","Symbol","for","close","handleDiscardCancel","t6","handleDiscardConfirm","t7","event_0","key","preventDefault","stopPropagation","handlePopoverKeyDown","t8","t9","field","t10","placeholder","t11","content","t12","t13","t14","t15","t16","placement","t17","t18","hues","Path","PortableTextBlock","Stack","useBoundaryElement","PathUtils","uuid","AnimatePresence","motion","Variants","useCallback","useMemo","useRef","useState","css","styled","FieldProps","getSchemaTypeTitle","useCurrentUser","COMMENTS_HIGHLIGHT_HUE_KEY","isTextSelectionComment","parseCommentFieldPath","useComments","useCommentsAuthoringPath","useCommentsEnabled","applyCommentsFieldAttr","useCommentsScroll","useCommentsSelectedPath","useCommentsUpsell","CommentCreatePayload","CommentMessage","CommentsUIMode","CommentsFieldButton","messageCache","Map","EMPTY_ARRAY","HIGHLIGHT_BLOCK_VARIANTS","initial","opacity","animate","exit","CommentsField","props","$","_c","enabled","mode","t0","renderDefault","HighlightDiv","div","theme","radius","space","color","sanity","bg","dark","hex","FieldStack","CommentFieldInner","currentUser","element","boundaryElement","rootRef","comments","isCommentsOpen","isCreatingDataset","mentionOptions","onCommentsOpen","operation","setStatus","status","upsellData","handleOpenDialog","selectedPath","setSelectedPath","authoringPath","setAuthoringPath","scrollToGroup","t1","schemaType","fieldTitle","t2","path","toString","stringPath","t3","get","cachedValue","value","setValue","isOpen","t4","fieldPath","origin","belongsToField","t5","isSelected","threadId","t6","data","open","t7","c","filter","some","_temp","isInlineCommentThread","t8","c_0","commentsCount","map","reduce","_temp2","count","hasComments","Boolean","delete","resetMessageValue","t9","latestThread","find","c_1","handleClick","t10","nextValue","newThreadId","nextComment","type","message","parentCommentId","undefined","reactions","create","handleCommentAdd","t11","handleClose","t12","nextValue_0","set","handleOnChange","t13","Number","t14","button","isAddingComment","internalComments","t15","t16","__internal_comments","t17","t18","t19","acc","val","x","parentComment","commentFieldPath","startsWith"],"sources":["../src/core/comments/hooks/useCommentsAuthoringPath.ts","../src/core/comments/plugin/field/CommentsFieldButton.tsx","../src/core/comments/plugin/field/CommentsField.tsx"],"sourcesContent":["import {useContext} from 'react'\nimport {CommentsAuthoringPathContext} from 'sanity/_singletons'\n\nimport {type CommentsAuthoringPathContextValue} from '../context/authoring-path/types'\n\n/**\n * @beta\n * @hidden\n */\nexport function useCommentsAuthoringPath(): CommentsAuthoringPathContextValue {\n const value = useContext(CommentsAuthoringPathContext)\n\n if (!value) {\n throw new Error('useCommentsAuthoringPath: missing context value')\n }\n\n return value\n}\n","import {AddCommentIcon} from '@sanity/icons/AddComment'\nimport {CommentIcon} from '@sanity/icons/Comment'\nimport {type CurrentUser, type PortableTextBlock} from '@sanity/types'\nimport {\n // oxlint-disable-next-line no-restricted-imports\n Button as SanityUIButton,\n Flex,\n Stack,\n Text,\n useClickOutsideEvent,\n} from '@sanity/ui'\nimport {useCallback, useMemo, useRef, useState} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Button} from '../../../../ui-components/button/Button'\nimport {Popover} from '../../../../ui-components/popover/Popover'\nimport {Tooltip} from '../../../../ui-components/tooltip/Tooltip'\nimport {type UserListWithPermissionsHookValue} from '../../../hooks/useUserListWithPermissions'\nimport {useTranslation} from '../../../i18n/hooks/useTranslation'\nimport {Translate} from '../../../i18n/Translate'\nimport {useAddonDataset} from '../../../studio/addonDataset/useAddonDataset'\nimport {\n CommentInput,\n type CommentInputHandle,\n} from '../../components/pte/comment-input/CommentInput'\nimport {hasCommentMessageValue} from '../../helpers'\nimport {commentsLocaleNamespace} from '../../i18n'\nimport {type CommentMessage} from '../../types'\n\nconst ContentStack = styled(Stack)`\n width: 320px;\n`\n\ninterface CommentsFieldButtonProps {\n count: number\n currentUser: CurrentUser\n fieldTitle: string\n isCreatingDataset: boolean\n mentionOptions: UserListWithPermissionsHookValue\n onChange: (value: PortableTextBlock[]) => void\n onClick?: () => void\n onClose: () => void\n onCommentAdd: (value: PortableTextBlock[]) => void\n onDiscard: () => void\n onInputKeyDown?: (event: React.KeyboardEvent) => void\n open: boolean\n value: CommentMessage\n}\n\nexport function CommentsFieldButton(props: CommentsFieldButtonProps) {\n const {\n count,\n currentUser,\n fieldTitle,\n isCreatingDataset,\n mentionOptions,\n onChange,\n onClick,\n onClose,\n onCommentAdd,\n onDiscard,\n onInputKeyDown,\n open,\n value,\n } = props\n const {t} = useTranslation(commentsLocaleNamespace)\n const {error: addonDatasetError} = useAddonDataset()\n const popoverRef = useRef<HTMLDivElement | null>(null)\n const [addCommentButtonElement, setAddCommentButtonElement] = useState<HTMLButtonElement | null>(\n null,\n )\n const commentInputHandle = useRef<CommentInputHandle | null>(null)\n const hasComments = Boolean(count > 0)\n\n const closePopover = useCallback(() => {\n if (!open) return\n onClose()\n addCommentButtonElement?.focus()\n }, [addCommentButtonElement, open, onClose])\n\n const handleSubmit = useCallback(\n (nextValue: PortableTextBlock[]) => {\n onCommentAdd(nextValue)\n closePopover()\n },\n [closePopover, onCommentAdd],\n )\n\n const hasValue = useMemo(() => hasCommentMessageValue(value), [value])\n\n const startDiscard = useCallback(() => {\n if (!hasValue) {\n closePopover()\n return\n }\n\n commentInputHandle.current?.discardDialogController.open()\n }, [closePopover, hasValue])\n\n const handleInputKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n // Don't act if the input already prevented this event\n if (event.isDefaultPrevented()) {\n return\n }\n\n // Call parent handler\n if (onInputKeyDown) onInputKeyDown(event)\n },\n [onInputKeyDown],\n )\n\n const handleDiscardCancel = useCallback(() => {\n commentInputHandle.current?.discardDialogController.close()\n }, [])\n\n const handleDiscardConfirm = useCallback(() => {\n commentInputHandle.current?.discardDialogController.close()\n closePopover()\n onDiscard()\n }, [closePopover, onDiscard])\n\n const handlePopoverKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Escape') {\n event.preventDefault()\n event.stopPropagation()\n startDiscard()\n }\n },\n [startDiscard],\n )\n\n useClickOutsideEvent(open && startDiscard, () => [popoverRef.current])\n\n if (!hasComments) {\n const placeholder = (\n <Translate\n t={t}\n i18nKey=\"compose.add-comment-input-placeholder\"\n values={{field: fieldTitle}}\n />\n )\n\n const content = (\n <ContentStack padding={2} gap={4}>\n <CommentInput\n currentUser={currentUser}\n focusLock\n focusOnMount\n mentionOptions={mentionOptions}\n onChange={onChange}\n onDiscardCancel={handleDiscardCancel}\n onDiscardConfirm={handleDiscardConfirm}\n onKeyDown={handleInputKeyDown}\n onSubmit={handleSubmit}\n placeholder={placeholder}\n readOnly={isCreatingDataset}\n ref={commentInputHandle}\n value={value}\n />\n </ContentStack>\n )\n\n return (\n <Popover\n constrainSize\n content={content}\n fallbackPlacements={['bottom-end']}\n open={open}\n placement=\"right-start\"\n portal\n ref={popoverRef}\n onKeyDown={handlePopoverKeyDown}\n >\n <div>\n <Button\n aria-label={t('field-button.aria-label-add')}\n disabled={isCreatingDataset || Boolean(addonDatasetError)}\n icon={AddCommentIcon}\n mode=\"bleed\"\n onClick={onClick}\n ref={setAddCommentButtonElement}\n selected={open}\n tooltipProps={{\n content: t('field-button.title'),\n placement: 'top',\n }}\n />\n </div>\n </Popover>\n )\n }\n\n return (\n <Tooltip portal placement=\"top\" content={t('field-button.content', {count})}>\n <SanityUIButton\n aria-label={t('field-button.aria-label-open')}\n mode=\"bleed\"\n onClick={onClick}\n padding={2}\n gap={2}\n >\n <Flex align=\"center\" gap={2}>\n <Text size={1}>\n <CommentIcon />\n </Text>\n <Text size={0}>{count > 9 ? '9+' : count}</Text>\n </Flex>\n </SanityUIButton>\n </Tooltip>\n )\n}\n","import {hues} from '@sanity/color'\nimport {type Path, type PortableTextBlock} from '@sanity/types'\nimport {Stack, useBoundaryElement} from '@sanity/ui'\nimport * as PathUtils from '@sanity/util/paths'\nimport {uuid} from '@sanity/uuid'\nimport {AnimatePresence, motion, type Variants} from 'motion/react'\nimport {useCallback, useMemo, useRef, useState} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {type FieldProps} from '../../../form/types/fieldProps'\nimport {getSchemaTypeTitle} from '../../../schema/helpers'\nimport {useCurrentUser} from '../../../store/user/hooks'\nimport {COMMENTS_HIGHLIGHT_HUE_KEY} from '../../constants'\nimport {isTextSelectionComment, parseCommentFieldPath} from '../../helpers'\nimport {useComments} from '../../hooks/useComments'\nimport {useCommentsAuthoringPath} from '../../hooks/useCommentsAuthoringPath'\nimport {useCommentsEnabled} from '../../hooks/useCommentsEnabled'\nimport {applyCommentsFieldAttr, useCommentsScroll} from '../../hooks/useCommentsScroll'\nimport {useCommentsSelectedPath} from '../../hooks/useCommentsSelectedPath'\nimport {useCommentsUpsell} from '../../hooks/useCommentsUpsell'\nimport {type CommentCreatePayload, type CommentMessage, type CommentsUIMode} from '../../types'\nimport {CommentsFieldButton} from './CommentsFieldButton'\n\n// When the form is temporarily set to `readOnly` while reconnecting, the form\n// will be re-rendered and any comment that is being authored will be lost.\n// To avoid this, we cache the comment message in a map and restore it when the\n// field is re-rendered.\nconst messageCache = new Map<string, CommentMessage>()\n\nconst EMPTY_ARRAY: [] = []\n\nconst HIGHLIGHT_BLOCK_VARIANTS: Variants = {\n initial: {\n opacity: 0,\n },\n animate: {\n opacity: 1,\n },\n exit: {\n opacity: 0,\n },\n}\n\nexport function CommentsField(props: FieldProps) {\n const {enabled, mode} = useCommentsEnabled()\n\n if (!enabled) {\n return props.renderDefault(props)\n }\n\n return <CommentFieldInner {...props} mode={mode} />\n}\n\nconst HighlightDiv = styled(motion.div)(({theme}) => {\n // oxlint-disable-next-line no-deprecated -- will fix in follow up PR\n const {radius, space, color} = theme.sanity\n const bg = hues[COMMENTS_HIGHLIGHT_HUE_KEY][color.dark ? 900 : 50].hex\n\n return css`\n mix-blend-mode: ${color.dark ? 'screen' : 'multiply'};\n border-radius: ${radius[3]}px;\n top: -${space[2]}px;\n left: -${space[2]}px;\n bottom: -${space[2]}px;\n right: -${space[2]}px;\n pointer-events: none;\n position: absolute;\n z-index: 1;\n width: calc(100% + ${space[2] * 2}px);\n height: calc(100% + ${space[2] * 2}px);\n background-color: ${bg};\n `\n})\n\nconst FieldStack = styled(Stack)`\n position: relative;\n\n // Hide when the field component renders nothing (e.g. a custom\n // field component that returns null) to avoid an empty wrapper\n // taking up space in the form.\n &:empty:not([hidden]) {\n display: none;\n }\n`\n\nfunction CommentFieldInner(\n props: FieldProps & {\n mode: CommentsUIMode\n },\n) {\n const {mode} = props\n\n const currentUser = useCurrentUser()\n const {element: boundaryElement} = useBoundaryElement()\n\n const rootRef = useRef<HTMLDivElement | null>(null)\n\n const {\n comments,\n isCommentsOpen,\n isCreatingDataset,\n mentionOptions,\n onCommentsOpen,\n operation,\n setStatus,\n status,\n } = useComments()\n const {upsellData, handleOpenDialog} = useCommentsUpsell()\n const {selectedPath, setSelectedPath} = useCommentsSelectedPath()\n const {authoringPath, setAuthoringPath} = useCommentsAuthoringPath()\n const {scrollToGroup} = useCommentsScroll({\n boundaryElement,\n })\n\n const fieldTitle = useMemo(() => getSchemaTypeTitle(props.schemaType), [props.schemaType])\n const stringPath = useMemo(() => PathUtils.toString(props.path), [props.path])\n\n // Use the cached value if it exists as the initial value\n const cachedValue = messageCache.get(stringPath) || null\n\n const [value, setValue] = useState<PortableTextBlock[] | null>(cachedValue)\n\n // If the path of the field matches the authoring path, the comment input should be open.\n const isOpen = useMemo(() => authoringPath === stringPath, [authoringPath, stringPath])\n\n // Determine if the current field is selected\n const isSelected = useMemo(() => {\n if (!isCommentsOpen) return false\n if (selectedPath?.origin === 'form' || selectedPath?.origin === 'url') return false\n return belongsToField(selectedPath?.fieldPath, props.path)\n }, [isCommentsOpen, selectedPath?.fieldPath, selectedPath?.origin, props.path])\n\n const isInlineCommentThread = useMemo(() => {\n return comments.data.open\n .filter((c) => c.threadId === selectedPath?.threadId)\n .some((x) => isTextSelectionComment(x.parentComment))\n }, [comments.data.open, selectedPath?.threadId])\n\n // Total number of comments for the current field, including comments on\n // blocks nested below it (container-nested and dialog-authored comments\n // store the block's data path as their `fieldPath`).\n const count = useMemo(() => {\n const commentsCount = comments.data.open\n .map((c) => (belongsToField(c.fieldPath, props.path) ? c.commentsCount : 0))\n .reduce((acc, val) => acc + val, 0)\n\n return commentsCount || 0\n }, [comments.data.open, props.path])\n\n const hasComments = Boolean(count > 0)\n\n const resetMessageValue = useCallback(() => {\n // Reset the value and remove the message from the cache\n setValue(null)\n messageCache.delete(stringPath)\n }, [stringPath])\n\n const handleClick = useCallback(() => {\n // When clicking a comment button when the field has comments, we want to:\n if (hasComments) {\n // 1. Change the status to 'open' if it's 'resolved'\n if (status === 'resolved') {\n setStatus('open')\n }\n\n // 2. Ensure that the authoring path is reset when clicking\n // the comment button when the field has comments.\n setAuthoringPath(null)\n\n // 3. Open the comments inspector\n onCommentsOpen?.()\n\n // 4. Find the latest comment thread for the current field\n const latestThread = comments.data.open.find((c) => belongsToField(c.fieldPath, props.path))\n\n // 5. Set the latest thread ID as the selected thread ID\n // and scroll to the it. The selected path carries the thread's own\n // `fieldPath`: the inspector marks a thread selected by comparing\n // against the stored path, which for nested threads is deeper than\n // this field's path.\n if (latestThread) {\n setSelectedPath({\n threadId: latestThread.threadId,\n origin: 'form',\n fieldPath: latestThread.fieldPath,\n })\n\n scrollToGroup(latestThread.threadId)\n }\n\n return\n }\n\n if (mode === 'upsell') {\n if (upsellData) {\n handleOpenDialog('field_action')\n } else {\n // Open the comments inspector\n onCommentsOpen?.()\n }\n return\n }\n\n // If the field is open (i.e. the authoring path is set to the current field)\n // we close the field by resetting the authoring path. If the field is not open,\n // we set the authoring path to the current field so that the comment form is opened.\n setAuthoringPath(isOpen ? null : stringPath)\n }, [\n comments.data.open,\n handleOpenDialog,\n hasComments,\n isOpen,\n mode,\n onCommentsOpen,\n props.path,\n scrollToGroup,\n setAuthoringPath,\n setSelectedPath,\n setStatus,\n status,\n stringPath,\n upsellData,\n ])\n\n const handleCommentAdd = useCallback(\n (nextValue: PortableTextBlock[]) => {\n if (nextValue) {\n // Since this is a new comment, we generate a new thread ID\n const newThreadId = uuid()\n\n // Construct the comment payload\n const nextComment: CommentCreatePayload = {\n type: 'field',\n fieldPath: PathUtils.toString(props.path),\n message: nextValue,\n parentCommentId: undefined,\n status: 'open',\n threadId: newThreadId,\n // New comments have no reactions\n reactions: EMPTY_ARRAY,\n }\n\n // Execute the create mutation\n void operation.create(nextComment)\n\n // If a comment is added to a field when viewing resolved comments, we switch\n // to open comments and scroll to the comment that was just added\n // Open the inspector when a new comment is added\n onCommentsOpen?.()\n\n if (status === 'resolved') {\n // Set the status to 'open' so that the comment is visible\n setStatus('open')\n }\n\n resetMessageValue()\n\n // Scroll to the thread\n setSelectedPath({\n threadId: newThreadId,\n origin: 'form',\n fieldPath: PathUtils.toString(props.path),\n })\n\n scrollToGroup(newThreadId)\n }\n },\n [\n onCommentsOpen,\n operation,\n props.path,\n resetMessageValue,\n scrollToGroup,\n setSelectedPath,\n setStatus,\n status,\n ],\n )\n\n const handleClose = useCallback(() => setAuthoringPath(null), [setAuthoringPath])\n\n const handleOnChange = useCallback(\n (nextValue: CommentMessage) => {\n setValue(nextValue)\n messageCache.set(stringPath, nextValue)\n },\n [stringPath],\n )\n\n const internalComments: FieldProps['__internal_comments'] = useMemo(\n () => ({\n button: currentUser && (\n <CommentsFieldButton\n count={Number(count)}\n currentUser={currentUser}\n fieldTitle={fieldTitle}\n isCreatingDataset={isCreatingDataset}\n mentionOptions={mentionOptions}\n onChange={handleOnChange}\n onClick={handleClick}\n onClose={handleClose}\n onCommentAdd={handleCommentAdd}\n onDiscard={resetMessageValue}\n open={isOpen}\n value={value}\n />\n ),\n hasComments,\n isAddingComment: isOpen,\n }),\n [\n currentUser,\n count,\n fieldTitle,\n isCreatingDataset,\n mentionOptions,\n handleOnChange,\n handleClick,\n handleClose,\n handleCommentAdd,\n resetMessageValue,\n isOpen,\n value,\n hasComments,\n ],\n )\n\n return (\n <FieldStack {...applyCommentsFieldAttr(PathUtils.toString(props.path))} ref={rootRef}>\n {props.renderDefault({\n ...props,\n // oxlint-disable-next-line no-deprecated -- will fix in follow up PR\n __internal_comments: internalComments,\n })}\n\n <AnimatePresence>\n {isSelected && !isInlineCommentThread && (\n <HighlightDiv\n animate=\"animate\"\n exit=\"exit\"\n initial=\"initial\"\n variants={HIGHLIGHT_BLOCK_VARIANTS}\n />\n )}\n </AnimatePresence>\n </FieldStack>\n )\n}\n\n/**\n * Whether a comment's stored `fieldPath` sits at or below the field's path.\n */\nfunction belongsToField(fieldPath: string | null | undefined, path: Path): boolean {\n const commentFieldPath = parseCommentFieldPath(fieldPath)\n return commentFieldPath ? PathUtils.startsWith(path, commentFieldPath) : false\n}\n"],"mappings":"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"}
@@ -1,14 +1,14 @@
1
1
  import { t as Button$1 } from "./Button-CGZ3ETwD.js";
2
2
  import { t as Popover } from "./Popover-DRCM1MS-.js";
3
3
  import { t as useTranslation } from "./useTranslation-Cqs6Itwv.js";
4
- import { t as useFieldActions } from "./useFieldActions-CrPgIiyl.js";
5
- import { b as useCommentsScroll, f as hasCommentMessageValue, m as parseCommentFieldPath, o as CommentInput, p as isTextSelectionComment, t as useComments, x as commentsLocaleNamespace } from "./useComments-CxUK5MNb.js";
6
- import { a as CommentInlineHighlightSpan, i as buildRangeDecorationSelectionsFromComments, n as getCommentFieldPath, o as CommentDisabledIcon, r as buildCommentRangeDecorations, t as buildTextSelectionFromFragment } from "./buildTextSelectionFromFragment-QpFfw3b7.js";
7
- import { n as useCurrentUser } from "./LoadingBlock-Cy2Pckab.js";
4
+ import { t as useFieldActions } from "./useFieldActions-MFJIkobn.js";
5
+ import { b as useCommentsScroll, f as hasCommentMessageValue, m as parseCommentFieldPath, o as CommentInput, p as isTextSelectionComment, t as useComments, x as commentsLocaleNamespace } from "./useComments-BcMCyjIE.js";
6
+ import { a as CommentInlineHighlightSpan, i as buildRangeDecorationSelectionsFromComments, n as getCommentFieldPath, o as CommentDisabledIcon, r as buildCommentRangeDecorations, t as buildTextSelectionFromFragment } from "./buildTextSelectionFromFragment-CFZdgjpp.js";
7
+ import { n as useCurrentUser } from "./LoadingBlock-DPTVJ58M.js";
8
8
  import { t as useAddonDataset } from "./useAddonDataset-BvCgByG6.js";
9
9
  import { t as useCommentsEnabled } from "./useCommentsEnabled-BPc3788v.js";
10
10
  import { t as useCommentsSelectedPath } from "./useCommentsSelectedPath-D5HXM3NF.js";
11
- import { n as useFormValue } from "./FormValue-4tVuOoGw.js";
11
+ import { n as useFormValue } from "./FormValue-CJg43LyM.js";
12
12
  import { t as useCommentsUpsell } from "./useCommentsUpsell-a8ecO894.js";
13
13
  import { memo, startTransition, useEffect, useLayoutEffect, useRef, useState } from "react";
14
14
  import { c } from "react/compiler-runtime";
@@ -517,4 +517,4 @@ function CommentsInput(props) {
517
517
  }
518
518
  export { CommentsInput };
519
519
 
520
- //# sourceMappingURL=CommentsInput-DdtI0Naj.js.map
520
+ //# sourceMappingURL=CommentsInput-B9iSSi8A.js.map