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.
- package/lib/{AddonDatasetProvider-CIq0vehp.js → AddonDatasetProvider-DDQrh5ob.js} +2 -2
- package/lib/{AddonDatasetProvider-CIq0vehp.js.map → AddonDatasetProvider-DDQrh5ob.js.map} +1 -1
- package/lib/{CalendarFilter-DRKSPTWd.js → CalendarFilter-DYbHmp_x.js} +3 -3
- package/lib/{CalendarFilter-DRKSPTWd.js.map → CalendarFilter-DYbHmp_x.js.map} +1 -1
- package/lib/{CommentsDocumentLayout-NGghzPWZ.js → CommentsDocumentLayout-qdF_HKSC.js} +2 -2
- package/lib/{CommentsDocumentLayout-NGghzPWZ.js.map → CommentsDocumentLayout-qdF_HKSC.js.map} +1 -1
- package/lib/{CommentsField-_QkW9aLe.js → CommentsField-i8xs45PB.js} +3 -3
- package/lib/{CommentsField-_QkW9aLe.js.map → CommentsField-i8xs45PB.js.map} +1 -1
- package/lib/{CommentsInput-DdtI0Naj.js → CommentsInput-B9iSSi8A.js} +6 -6
- package/lib/{CommentsInput-DdtI0Naj.js.map → CommentsInput-B9iSSi8A.js.map} +1 -1
- package/lib/{CommentsInspector-BQtqxGsK.js → CommentsInspector-rGGP9buL.js} +5 -5
- package/lib/{CommentsInspector-BQtqxGsK.js.map → CommentsInspector-rGGP9buL.js.map} +1 -1
- package/lib/{CommentsListItem-B0yR0R5a.js → CommentsListItem-DKS6V_TV.js} +3 -3
- package/lib/{CommentsListItem-B0yR0R5a.js.map → CommentsListItem-DKS6V_TV.js.map} +1 -1
- package/lib/{CommentsSelectedPathProvider-BYZ2OmJ9.js → CommentsSelectedPathProvider-BnZ6GdNc.js} +3 -3
- package/lib/{CommentsSelectedPathProvider-BYZ2OmJ9.js.map → CommentsSelectedPathProvider-BnZ6GdNc.js.map} +1 -1
- package/lib/{CommentsStudioLayout-DK4W-hTe.js → CommentsStudioLayout-YlpSH_2Y.js} +4 -4
- package/lib/{CommentsStudioLayout-DK4W-hTe.js.map → CommentsStudioLayout-YlpSH_2Y.js.map} +1 -1
- package/lib/{DateInputs-enUB1fG8.js → DateInputs-DioSKqY0.js} +7 -7
- package/lib/{DateInputs-enUB1fG8.js.map → DateInputs-DioSKqY0.js.map} +1 -1
- package/lib/{DocumentStatusIndicator-BP3N2GwG.js → DocumentStatusIndicator-BPBTH84U.js} +5 -5
- package/lib/{DocumentStatusIndicator-BP3N2GwG.js.map → DocumentStatusIndicator-BPBTH84U.js.map} +1 -1
- package/lib/{FormValue-4tVuOoGw.js → FormValue-CJg43LyM.js} +2 -2
- package/lib/{FormValue-4tVuOoGw.js.map → FormValue-CJg43LyM.js.map} +1 -1
- package/lib/{LoadingBlock-Cy2Pckab.js → LoadingBlock-DPTVJ58M.js} +3 -3
- package/lib/{LoadingBlock-Cy2Pckab.js.map → LoadingBlock-DPTVJ58M.js.map} +1 -1
- package/lib/{ReleaseTitle-CkEMIfmx.js → ReleaseTitle-ln13W3P1.js} +4 -4
- package/lib/{ReleaseTitle-CkEMIfmx.js.map → ReleaseTitle-ln13W3P1.js.map} +1 -1
- package/lib/{ReleasesMetadataProvider-DuAzHgpz.js → ReleasesMetadataProvider-DbxROVyw.js} +2 -2
- package/lib/{ReleasesMetadataProvider-DuAzHgpz.js.map → ReleasesMetadataProvider-DbxROVyw.js.map} +1 -1
- package/lib/{ReleasesNav-DozstCwb.js → ReleasesNav-DNwncim0.js} +15 -15
- package/lib/{ReleasesNav-DozstCwb.js.map → ReleasesNav-DNwncim0.js.map} +1 -1
- package/lib/{ReleasesStudioLayout-CXoRbIpf.js → ReleasesStudioLayout-gzl7rMMp.js} +8 -8
- package/lib/{ReleasesStudioLayout-CXoRbIpf.js.map → ReleasesStudioLayout-gzl7rMMp.js.map} +1 -1
- package/lib/{ReleasesTool-Bxru9khS.js → ReleasesTool-CsHniZCP.js} +20 -20
- package/lib/{ReleasesTool-Bxru9khS.js.map → ReleasesTool-CsHniZCP.js.map} +1 -1
- package/lib/{SchedulePublishingStudioLayout-CjJ-nu3Q.js → SchedulePublishingStudioLayout-BzSSDp9x.js} +3 -3
- package/lib/{SchedulePublishingStudioLayout-CjJ-nu3Q.js.map → SchedulePublishingStudioLayout-BzSSDp9x.js.map} +1 -1
- package/lib/{SchedulePublishingUpsellProvider-CxpMXwyA.js → SchedulePublishingUpsellProvider-DQqIZsCc.js} +2 -2
- package/lib/{SchedulePublishingUpsellProvider-CxpMXwyA.js.map → SchedulePublishingUpsellProvider-DQqIZsCc.js.map} +1 -1
- package/lib/{ScheduledPublishingEnabledProvider-Bvx140h2.js → ScheduledPublishingEnabledProvider-BcWaBJw5.js} +3 -3
- package/lib/{ScheduledPublishingEnabledProvider-Bvx140h2.js.map → ScheduledPublishingEnabledProvider-BcWaBJw5.js.map} +1 -1
- package/lib/{SearchProvider-DSLbCdgY.js → SearchProvider-D3w4Bvul.js} +10 -10
- package/lib/{SearchProvider-DSLbCdgY.js.map → SearchProvider-D3w4Bvul.js.map} +1 -1
- package/lib/{SingleDocReleaseLayout-DQicfsKs.js → SingleDocReleaseLayout-CQCkL8-0.js} +2 -2
- package/lib/{SingleDocReleaseLayout-DQicfsKs.js.map → SingleDocReleaseLayout-CQCkL8-0.js.map} +1 -1
- package/lib/{SingleDocReleaseUpsellProvider-DXNTZGTk.js → SingleDocReleaseUpsellProvider-YDBCGrHT.js} +4 -4
- package/lib/{SingleDocReleaseUpsellProvider-DXNTZGTk.js.map → SingleDocReleaseUpsellProvider-YDBCGrHT.js.map} +1 -1
- package/lib/{TasksStudioActiveToolLayout-CNpB5xLh.js → TasksStudioActiveToolLayout-DAmh3t6t.js} +16 -16
- package/lib/{TasksStudioActiveToolLayout-CNpB5xLh.js.map → TasksStudioActiveToolLayout-DAmh3t6t.js.map} +1 -1
- package/lib/{TasksStudioLayout-CnsvBNfw.js → TasksStudioLayout-6qNY69FD.js} +5 -5
- package/lib/{TasksStudioLayout-CnsvBNfw.js.map → TasksStudioLayout-6qNY69FD.js.map} +1 -1
- package/lib/{TimeZoneButton-DMd-M_ri.js → TimeZoneButton-TmrFye13.js} +4 -4
- package/lib/{TimeZoneButton-DMd-M_ri.js.map → TimeZoneButton-TmrFye13.js.map} +1 -1
- package/lib/{Tool-VgnYCwyZ.js → Tool-tpq9K4o7.js} +14 -14
- package/lib/{Tool-VgnYCwyZ.js.map → Tool-tpq9K4o7.js.map} +1 -1
- package/lib/{UnpublishVersionDialog-Fow5nBrc.js → UnpublishVersionDialog-6zyP9rCr.js} +5 -5
- package/lib/{UnpublishVersionDialog-Fow5nBrc.js.map → UnpublishVersionDialog-6zyP9rCr.js.map} +1 -1
- package/lib/{UpsellDialog-BqP2wmnt.js → UpsellDialog-CM238V3B.js} +3 -3
- package/lib/{UpsellDialog-BqP2wmnt.js.map → UpsellDialog-CM238V3B.js.map} +1 -1
- package/lib/{VariantsStudioNavbar-CvwRIsWJ.js → VariantsStudioNavbar-lFO2yrMq.js} +7 -7
- package/lib/{VariantsStudioNavbar-CvwRIsWJ.js.map → VariantsStudioNavbar-lFO2yrMq.js.map} +1 -1
- package/lib/{VariantsTool-CmQqDiwU.js → VariantsTool-B0OS4fku.js} +9 -9
- package/lib/{VariantsTool-CmQqDiwU.js.map → VariantsTool-B0OS4fku.js.map} +1 -1
- package/lib/{WorkspaceLoader-Ailj0PR9.js → WorkspaceLoader-CiJ6lGBu.js} +32 -32
- package/lib/{WorkspaceLoader-Ailj0PR9.js.map → WorkspaceLoader-CiJ6lGBu.js.map} +1 -1
- package/lib/_createContext.js +1 -1
- package/lib/{buildTextSelectionFromFragment-QpFfw3b7.js → buildTextSelectionFromFragment-CFZdgjpp.js} +3 -3
- package/lib/{buildTextSelectionFromFragment-QpFfw3b7.js.map → buildTextSelectionFromFragment-CFZdgjpp.js.map} +1 -1
- package/lib/{datastores-D4iZNSXV.js → datastores-wbjstxMt.js} +2 -2
- package/lib/{datastores-D4iZNSXV.js.map → datastores-wbjstxMt.js.map} +1 -1
- package/lib/{getTransactionsLogs-C-_o7nGx.js → getTransactionsLogs-Di50JBPB.js} +2 -2
- package/lib/{getTransactionsLogs-C-_o7nGx.js.map → getTransactionsLogs-Di50JBPB.js.map} +1 -1
- package/lib/index.js +35 -35
- package/lib/{inputResolver-Dpo4FxTy.js → inputResolver-DuUEGuH5.js} +4 -4
- package/lib/{inputResolver-Dpo4FxTy.js.map → inputResolver-DuUEGuH5.js.map} +1 -1
- package/lib/{navigation.telemetry-syjEPEw-.js → navigation.telemetry-EsdzXa34.js} +9 -9
- package/lib/{navigation.telemetry-syjEPEw-.js.map → navigation.telemetry-EsdzXa34.js.map} +1 -1
- package/lib/{plugin-B8Op6DFi.js → plugin-C_6lw0l3.js} +3 -3
- package/lib/{plugin-B8Op6DFi.js.map → plugin-C_6lw0l3.js.map} +1 -1
- package/lib/{plugin-CmF53OT5.js → plugin-ClT8-pVM.js} +4 -4
- package/lib/{plugin-CmF53OT5.js.map → plugin-ClT8-pVM.js.map} +1 -1
- package/lib/{plugin-Bk41RRuC.js → plugin-DRuKGgrO.js} +6 -6
- package/lib/{plugin-Bk41RRuC.js.map → plugin-DRuKGgrO.js.map} +1 -1
- package/lib/{plugin-BhEK2rZ8.js → plugin-wJP1ECFq.js} +6 -6
- package/lib/{plugin-BhEK2rZ8.js.map → plugin-wJP1ECFq.js.map} +1 -1
- package/lib/{scheduleItem-sJhB8YzX.js → scheduleItem-9PFIH7_h.js} +15 -15
- package/lib/{scheduleItem-sJhB8YzX.js.map → scheduleItem-9PFIH7_h.js.map} +1 -1
- package/lib/{schedules-CLC2KygL.js → schedules-DniNrpFJ.js} +3 -3
- package/lib/{schedules-CLC2KygL.js.map → schedules-DniNrpFJ.js.map} +1 -1
- package/lib/{searchDocumentRelease-CtPYZAZk.js → searchDocumentRelease-TrunKdQg.js} +5 -5
- package/lib/{searchDocumentRelease-CtPYZAZk.js.map → searchDocumentRelease-TrunKdQg.js.map} +1 -1
- package/lib/{studioClient-WYiCwgfZ.js → studioClient-BpYJ_yYC.js} +2 -2
- package/lib/{studioClient-WYiCwgfZ.js.map → studioClient-BpYJ_yYC.js.map} +1 -1
- package/lib/{useBundleDocuments-CiRQnzQh.js → useBundleDocuments-C58ExRpX.js} +5 -5
- package/lib/{useBundleDocuments-CiRQnzQh.js.map → useBundleDocuments-C58ExRpX.js.map} +1 -1
- package/lib/{useComments-CxUK5MNb.js → useComments-BcMCyjIE.js} +2 -2
- package/lib/{useComments-CxUK5MNb.js.map → useComments-BcMCyjIE.js.map} +1 -1
- package/lib/{useCommentsTelemetry-BWqcsQ1u.js → useCommentsTelemetry-CL97yuwT.js} +4 -4
- package/lib/{useCommentsTelemetry-BWqcsQ1u.js.map → useCommentsTelemetry-CL97yuwT.js.map} +1 -1
- package/lib/{useDocumentPreviewValues-B4jUnACZ.js → useDocumentPreviewValues-Cy9aUMu2.js} +5 -5
- package/lib/{useDocumentPreviewValues-B4jUnACZ.js.map → useDocumentPreviewValues-Cy9aUMu2.js.map} +1 -1
- package/lib/{useFeatureEnabled-sRpDeLLJ.js → useFeatureEnabled-C5qTffLc.js} +2 -2
- package/lib/{useFeatureEnabled-sRpDeLLJ.js.map → useFeatureEnabled-C5qTffLc.js.map} +1 -1
- package/lib/{useFieldActions-CrPgIiyl.js → useFieldActions-MFJIkobn.js} +2 -2
- package/lib/{useFieldActions-CrPgIiyl.js.map → useFieldActions-MFJIkobn.js.map} +1 -1
- package/lib/{useProjectId-bGwoCAuz.js → useProjectId-BRSQ8kIo.js} +2 -2
- package/lib/{useProjectId-bGwoCAuz.js.map → useProjectId-BRSQ8kIo.js.map} +1 -1
- package/lib/{useReleasesToolAvailable-BevhFmt9.js → useReleasesToolAvailable-BOlw1HWL.js} +3 -3
- package/lib/{useReleasesToolAvailable-BevhFmt9.js.map → useReleasesToolAvailable-BOlw1HWL.js.map} +1 -1
- package/lib/{useScheduledDraftMenuActions-DqsFlU0p.js → useScheduledDraftMenuActions-DIQYFw0x.js} +6 -6
- package/lib/{useScheduledDraftMenuActions-DqsFlU0p.js.map → useScheduledDraftMenuActions-DIQYFw0x.js.map} +1 -1
- package/lib/{useStudioUrl-DbfIwS1P.js → useStudioUrl-Dc5LnOvR.js} +5 -5
- package/lib/{useStudioUrl-DbfIwS1P.js.map → useStudioUrl-Dc5LnOvR.js.map} +1 -1
- package/lib/{useTimeZone-DnxQlCGS.js → useTimeZone-Da8WK1q-.js} +2 -2
- package/lib/{useTimeZone-DnxQlCGS.js.map → useTimeZone-Da8WK1q-.js.map} +1 -1
- package/lib/{validationUtils-Bcu-PkHm.js → validationUtils-B9CLn9F7.js} +4 -4
- package/lib/{validationUtils-Bcu-PkHm.js.map → validationUtils-B9CLn9F7.js.map} +1 -1
- package/lib/{version-DTqx_kFw.js → version-D7qSwBVE.js} +2 -2
- package/lib/{version-DTqx_kFw.js.map → version-D7qSwBVE.js.map} +1 -1
- package/package.json +11 -11
package/lib/{DocumentStatusIndicator-BP3N2GwG.js.map → DocumentStatusIndicator-BPBTH84U.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DocumentStatusIndicator-BP3N2GwG.js","names":["PreviewValue","SanityDocument","Flex","Text","useMemo","useRelativeTime","useTranslation","TargetPerspective","ReleaseAvatar","VersionInfoDocumentStub","useActiveReleases","LATEST","PUBLISHED","getReleaseIdFromReleaseDocumentId","useWorkspace","DocumentStatusProps","draft","Partial","published","versions","Record","singleLine","DocumentStatus","t0","$","_c","data","releases","t1","Object","entries","versionsList","t","document","t2","drafts","t3","enabled","isDraftModelEnabled","t4","t5","t6","_updatedAt","t7","t8","map","t9","versionName","snapshot","release","find","r","_id","_createdAt","metadata","title","Mode","labels","edited","created","VersionStatus","timestamp","mode","Symbol","for","minimal","useTemporalPhrase","relativeTime","color","date","Flex","useMemo","css","styled","VersionInfoDocumentStub","useActiveReleases","RELEASE_TYPES_TONES","getReleaseIdFromReleaseDocumentId","useWorkspace","DocumentStatusProps","draft","published","versions","Record","Dot","div","$index","props","tone","asap","scheduled","undecided","Status","DocumentStatusIndicator","t0","$","_c","data","releases","document","t1","drafts","t2","enabled","isDraftModelEnabled","t3","Object","entries","map","t4","versionName","snapshot","release","find","r","_id","metadata","releaseType","versionsList","Boolean","t5","status","show","t6","t7","const","t8","includes","t9","t10","t11","t12","t13","t14","indicators","t15","filter","_temp","_temp2","index"],"sources":["../src/core/components/documentStatus/DocumentStatus.tsx","../src/core/components/documentStatusIndicator/DocumentStatusIndicator.tsx"],"sourcesContent":["import {type PreviewValue, type SanityDocument} from '@sanity/types'\nimport {Flex, Text} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nimport {useRelativeTime} from '../../hooks/useRelativeTime'\nimport {useTranslation} from '../../i18n/hooks/useTranslation'\nimport {type TargetPerspective} from '../../perspective/types'\nimport {ReleaseAvatar} from '../../releases/components/ReleaseAvatar'\nimport {type VersionInfoDocumentStub} from '../../releases/store/types'\nimport {useActiveReleases} from '../../releases/store/useActiveReleases'\nimport {LATEST, PUBLISHED} from '../../releases/util/const'\nimport {getReleaseIdFromReleaseDocumentId} from '../../releases/util/getReleaseIdFromReleaseDocumentId'\nimport {useWorkspace} from '../../studio/workspace'\n\ninterface DocumentStatusProps {\n draft?: PreviewValue | Partial<SanityDocument> | null\n published?: PreviewValue | Partial<SanityDocument> | null\n versions?: Record<string, VersionInfoDocumentStub | undefined>\n singleLine?: boolean\n}\n\n/**\n * Displays document status indicating both last published and edited dates in either relative (the default)\n * or absolute formats.\n *\n * These can be displayed in a single or multi-line (the default) lockups.\n *\n * Example: `**Published Oct 16 2023** Edited 8m ago`\n *\n * @internal\n */\nexport function DocumentStatus({draft, published, versions, singleLine}: DocumentStatusProps) {\n const {data: releases} = useActiveReleases()\n const versionsList = useMemo(() => Object.entries(versions ?? {}), [versions])\n const {t} = useTranslation()\n\n const {\n document: {\n drafts: {enabled: isDraftModelEnabled},\n },\n } = useWorkspace()\n\n return (\n <Flex\n align={singleLine ? 'center' : 'flex-start'}\n direction={singleLine ? 'row' : 'column'}\n gap={3}\n wrap=\"nowrap\"\n >\n {published && (\n <VersionStatus\n title={t('release.chip.published')}\n mode=\"published\"\n timestamp={published._updatedAt}\n release={PUBLISHED}\n />\n )}\n {isDraftModelEnabled && draft && (\n <VersionStatus\n title={t('release.chip.draft')}\n mode=\"draft\"\n timestamp={draft._updatedAt}\n release={LATEST}\n />\n )}\n {versionsList.map(([versionName, snapshot]) => {\n if (!snapshot) {\n return null\n }\n const release = releases?.find(\n (r) => getReleaseIdFromReleaseDocumentId(r._id) === versionName,\n )\n if (!release) {\n return null\n }\n return (\n <VersionStatus\n key={versionName}\n mode={snapshot._updatedAt === snapshot._createdAt ? 'created' : 'edited'}\n title={release?.metadata.title || t('release.placeholder-untitled-release')}\n timestamp={snapshot?._updatedAt}\n release={release}\n />\n )\n })}\n </Flex>\n )\n}\n\ntype Mode = 'edited' | 'created' | 'draft' | 'published'\n\nconst labels: Record<Mode, string> = {\n draft: 'document-status.edited',\n published: 'document-status.published',\n edited: 'document-status.edited',\n created: 'document-status.created',\n}\n\nconst VersionStatus = ({\n title,\n timestamp,\n mode,\n release,\n}: {\n title: string\n mode: Mode\n timestamp?: string\n release: TargetPerspective\n}) => {\n const {t} = useTranslation()\n\n const relativeTime = useRelativeTime(timestamp || '', {\n minimal: true,\n useTemporalPhrase: true,\n })\n\n return (\n <Flex align=\"center\" gap={2}>\n <ReleaseAvatar release={release} padding={0} />\n <Text size={1}>\n {title} -{' '}\n <span style={{color: 'var(--card-muted-fg-color)'}}>\n {t(labels[mode], {date: relativeTime})}\n </span>\n </Text>\n </Flex>\n )\n}\n","import {Flex} from '@sanity/ui'\nimport {useMemo} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {type VersionInfoDocumentStub} from '../../releases/store/types'\nimport {useActiveReleases} from '../../releases/store/useActiveReleases'\nimport {RELEASE_TYPES_TONES} from '../../releases/util/const'\nimport {getReleaseIdFromReleaseDocumentId} from '../../releases/util/getReleaseIdFromReleaseDocumentId'\nimport {useWorkspace} from '../../studio/workspace'\n\ninterface DocumentStatusProps {\n draft?: VersionInfoDocumentStub | undefined\n published?: VersionInfoDocumentStub | undefined\n versions?: Record<string, VersionInfoDocumentStub | undefined>\n}\n\nconst Dot = styled.div<{$index: number}>((props) => {\n const {$index} = props\n const tone = {\n asap: RELEASE_TYPES_TONES.asap.tone,\n scheduled: RELEASE_TYPES_TONES.scheduled.tone,\n undecided: RELEASE_TYPES_TONES.undecided.tone,\n }\n\n return css`\n width: 5px;\n height: 5px;\n background-color: var(--card-icon-color);\n border-radius: 999px;\n box-shadow: 0 0 0 1px var(--card-bg-color);\n z-index: ${$index};\n &[data-status='published'] {\n --card-icon-color: var(--card-badge-positive-dot-color);\n }\n &[data-status='draft'] {\n --card-icon-color: var(--card-badge-caution-dot-color);\n }\n &[data-status='asap'] {\n --card-icon-color: var(--card-badge-${tone.asap}-dot-color);\n }\n &[data-status='undecided'] {\n --card-icon-color: var(--card-badge-${tone.undecided}-dot-color);\n }\n &[data-status='scheduled'] {\n --card-icon-color: var(--card-badge-${tone.scheduled}-dot-color);\n }\n `\n})\n\ntype Status = 'published' | 'draft' | 'asap' | 'scheduled' | 'undecided'\n\n/**\n * Renders a dot indicating the current document status.\n *\n * @internal\n */\nexport function DocumentStatusIndicator({draft, published, versions}: DocumentStatusProps) {\n const {data: releases} = useActiveReleases()\n\n const {\n document: {\n drafts: {enabled: isDraftModelEnabled},\n },\n } = useWorkspace()\n\n const versionsList = useMemo(\n () =>\n versions\n ? Object.entries(versions).map(([versionName, snapshot]) => {\n if (!snapshot) {\n return undefined\n }\n const release = releases?.find(\n (r) => getReleaseIdFromReleaseDocumentId(r._id) === versionName,\n )\n return release?.metadata.releaseType\n })\n : [],\n [releases, versions],\n )\n\n const indicators: {\n status: Status\n show: boolean\n }[] = [\n {\n status: 'published',\n show: Boolean(published),\n },\n {\n status: 'draft' as const,\n show: isDraftModelEnabled && Boolean(draft),\n },\n {\n status: 'asap',\n show: versionsList.includes('asap'),\n },\n {\n status: 'scheduled',\n show: versionsList.includes('scheduled'),\n },\n {\n status: 'undecided',\n show: versionsList.includes('undecided'),\n },\n ]\n\n return (\n <Flex>\n {indicators\n .filter(({show}) => show)\n .map(({status}, index) => (\n <Dot key={status} data-status={status} $index={index + 1} />\n ))}\n </Flex>\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DocumentStatusIndicator-BPBTH84U.js","names":["PreviewValue","SanityDocument","Flex","Text","useMemo","useRelativeTime","useTranslation","TargetPerspective","ReleaseAvatar","VersionInfoDocumentStub","useActiveReleases","LATEST","PUBLISHED","getReleaseIdFromReleaseDocumentId","useWorkspace","DocumentStatusProps","draft","Partial","published","versions","Record","singleLine","DocumentStatus","t0","$","_c","data","releases","t1","Object","entries","versionsList","t","document","t2","drafts","t3","enabled","isDraftModelEnabled","t4","t5","t6","_updatedAt","t7","t8","map","t9","versionName","snapshot","release","find","r","_id","_createdAt","metadata","title","Mode","labels","edited","created","VersionStatus","timestamp","mode","Symbol","for","minimal","useTemporalPhrase","relativeTime","color","date","Flex","useMemo","css","styled","VersionInfoDocumentStub","useActiveReleases","RELEASE_TYPES_TONES","getReleaseIdFromReleaseDocumentId","useWorkspace","DocumentStatusProps","draft","published","versions","Record","Dot","div","$index","props","tone","asap","scheduled","undecided","Status","DocumentStatusIndicator","t0","$","_c","data","releases","document","t1","drafts","t2","enabled","isDraftModelEnabled","t3","Object","entries","map","t4","versionName","snapshot","release","find","r","_id","metadata","releaseType","versionsList","Boolean","t5","status","show","t6","t7","const","t8","includes","t9","t10","t11","t12","t13","t14","indicators","t15","filter","_temp","_temp2","index"],"sources":["../src/core/components/documentStatus/DocumentStatus.tsx","../src/core/components/documentStatusIndicator/DocumentStatusIndicator.tsx"],"sourcesContent":["import {type PreviewValue, type SanityDocument} from '@sanity/types'\nimport {Flex, Text} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nimport {useRelativeTime} from '../../hooks/useRelativeTime'\nimport {useTranslation} from '../../i18n/hooks/useTranslation'\nimport {type TargetPerspective} from '../../perspective/types'\nimport {ReleaseAvatar} from '../../releases/components/ReleaseAvatar'\nimport {type VersionInfoDocumentStub} from '../../releases/store/types'\nimport {useActiveReleases} from '../../releases/store/useActiveReleases'\nimport {LATEST, PUBLISHED} from '../../releases/util/const'\nimport {getReleaseIdFromReleaseDocumentId} from '../../releases/util/getReleaseIdFromReleaseDocumentId'\nimport {useWorkspace} from '../../studio/workspace'\n\ninterface DocumentStatusProps {\n draft?: PreviewValue | Partial<SanityDocument> | null\n published?: PreviewValue | Partial<SanityDocument> | null\n versions?: Record<string, VersionInfoDocumentStub | undefined>\n singleLine?: boolean\n}\n\n/**\n * Displays document status indicating both last published and edited dates in either relative (the default)\n * or absolute formats.\n *\n * These can be displayed in a single or multi-line (the default) lockups.\n *\n * Example: `**Published Oct 16 2023** Edited 8m ago`\n *\n * @internal\n */\nexport function DocumentStatus({draft, published, versions, singleLine}: DocumentStatusProps) {\n const {data: releases} = useActiveReleases()\n const versionsList = useMemo(() => Object.entries(versions ?? {}), [versions])\n const {t} = useTranslation()\n\n const {\n document: {\n drafts: {enabled: isDraftModelEnabled},\n },\n } = useWorkspace()\n\n return (\n <Flex\n align={singleLine ? 'center' : 'flex-start'}\n direction={singleLine ? 'row' : 'column'}\n gap={3}\n wrap=\"nowrap\"\n >\n {published && (\n <VersionStatus\n title={t('release.chip.published')}\n mode=\"published\"\n timestamp={published._updatedAt}\n release={PUBLISHED}\n />\n )}\n {isDraftModelEnabled && draft && (\n <VersionStatus\n title={t('release.chip.draft')}\n mode=\"draft\"\n timestamp={draft._updatedAt}\n release={LATEST}\n />\n )}\n {versionsList.map(([versionName, snapshot]) => {\n if (!snapshot) {\n return null\n }\n const release = releases?.find(\n (r) => getReleaseIdFromReleaseDocumentId(r._id) === versionName,\n )\n if (!release) {\n return null\n }\n return (\n <VersionStatus\n key={versionName}\n mode={snapshot._updatedAt === snapshot._createdAt ? 'created' : 'edited'}\n title={release?.metadata.title || t('release.placeholder-untitled-release')}\n timestamp={snapshot?._updatedAt}\n release={release}\n />\n )\n })}\n </Flex>\n )\n}\n\ntype Mode = 'edited' | 'created' | 'draft' | 'published'\n\nconst labels: Record<Mode, string> = {\n draft: 'document-status.edited',\n published: 'document-status.published',\n edited: 'document-status.edited',\n created: 'document-status.created',\n}\n\nconst VersionStatus = ({\n title,\n timestamp,\n mode,\n release,\n}: {\n title: string\n mode: Mode\n timestamp?: string\n release: TargetPerspective\n}) => {\n const {t} = useTranslation()\n\n const relativeTime = useRelativeTime(timestamp || '', {\n minimal: true,\n useTemporalPhrase: true,\n })\n\n return (\n <Flex align=\"center\" gap={2}>\n <ReleaseAvatar release={release} padding={0} />\n <Text size={1}>\n {title} -{' '}\n <span style={{color: 'var(--card-muted-fg-color)'}}>\n {t(labels[mode], {date: relativeTime})}\n </span>\n </Text>\n </Flex>\n )\n}\n","import {Flex} from '@sanity/ui'\nimport {useMemo} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {type VersionInfoDocumentStub} from '../../releases/store/types'\nimport {useActiveReleases} from '../../releases/store/useActiveReleases'\nimport {RELEASE_TYPES_TONES} from '../../releases/util/const'\nimport {getReleaseIdFromReleaseDocumentId} from '../../releases/util/getReleaseIdFromReleaseDocumentId'\nimport {useWorkspace} from '../../studio/workspace'\n\ninterface DocumentStatusProps {\n draft?: VersionInfoDocumentStub | undefined\n published?: VersionInfoDocumentStub | undefined\n versions?: Record<string, VersionInfoDocumentStub | undefined>\n}\n\nconst Dot = styled.div<{$index: number}>((props) => {\n const {$index} = props\n const tone = {\n asap: RELEASE_TYPES_TONES.asap.tone,\n scheduled: RELEASE_TYPES_TONES.scheduled.tone,\n undecided: RELEASE_TYPES_TONES.undecided.tone,\n }\n\n return css`\n width: 5px;\n height: 5px;\n background-color: var(--card-icon-color);\n border-radius: 999px;\n box-shadow: 0 0 0 1px var(--card-bg-color);\n z-index: ${$index};\n &[data-status='published'] {\n --card-icon-color: var(--card-badge-positive-dot-color);\n }\n &[data-status='draft'] {\n --card-icon-color: var(--card-badge-caution-dot-color);\n }\n &[data-status='asap'] {\n --card-icon-color: var(--card-badge-${tone.asap}-dot-color);\n }\n &[data-status='undecided'] {\n --card-icon-color: var(--card-badge-${tone.undecided}-dot-color);\n }\n &[data-status='scheduled'] {\n --card-icon-color: var(--card-badge-${tone.scheduled}-dot-color);\n }\n `\n})\n\ntype Status = 'published' | 'draft' | 'asap' | 'scheduled' | 'undecided'\n\n/**\n * Renders a dot indicating the current document status.\n *\n * @internal\n */\nexport function DocumentStatusIndicator({draft, published, versions}: DocumentStatusProps) {\n const {data: releases} = useActiveReleases()\n\n const {\n document: {\n drafts: {enabled: isDraftModelEnabled},\n },\n } = useWorkspace()\n\n const versionsList = useMemo(\n () =>\n versions\n ? Object.entries(versions).map(([versionName, snapshot]) => {\n if (!snapshot) {\n return undefined\n }\n const release = releases?.find(\n (r) => getReleaseIdFromReleaseDocumentId(r._id) === versionName,\n )\n return release?.metadata.releaseType\n })\n : [],\n [releases, versions],\n )\n\n const indicators: {\n status: Status\n show: boolean\n }[] = [\n {\n status: 'published',\n show: Boolean(published),\n },\n {\n status: 'draft' as const,\n show: isDraftModelEnabled && Boolean(draft),\n },\n {\n status: 'asap',\n show: versionsList.includes('asap'),\n },\n {\n status: 'scheduled',\n show: versionsList.includes('scheduled'),\n },\n {\n status: 'undecided',\n show: versionsList.includes('undecided'),\n },\n ]\n\n return (\n <Flex>\n {indicators\n .filter(({show}) => show)\n .map(({status}, index) => (\n <Dot key={status} data-status={status} $index={index + 1} />\n ))}\n </Flex>\n )\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as getValueAtPath } from "./useFieldActions-
|
|
1
|
+
import { a as getValueAtPath } from "./useFieldActions-MFJIkobn.js";
|
|
2
2
|
import { useContext } from "react";
|
|
3
3
|
import { c } from "react/compiler-runtime";
|
|
4
4
|
import { jsx } from "react/jsx-runtime";
|
|
@@ -46,4 +46,4 @@ function useFormValue(path) {
|
|
|
46
46
|
}
|
|
47
47
|
export { useFormValue as n, FormValueProvider as t };
|
|
48
48
|
|
|
49
|
-
//# sourceMappingURL=FormValue-
|
|
49
|
+
//# sourceMappingURL=FormValue-CJg43LyM.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormValue-
|
|
1
|
+
{"version":3,"file":"FormValue-CJg43LyM.js","names":["Path","pathFor","ReactNode","useContext","useMemo","FormValueContext","getValueAtPath","FormDocumentValue","FormValueContextValue","value","FormValueProvider","props","$","_c","t0","t1","children","useFormValue","path","uniquePath","ctx","Error"],"sources":["../src/core/form/contexts/FormValue.tsx"],"sourcesContent":["import {type Path} from '@sanity/types'\nimport {pathFor} from '@sanity/util/paths'\nimport {type ReactNode, useContext, useMemo} from 'react'\nimport {FormValueContext} from 'sanity/_singletons'\n\nimport {getValueAtPath} from '../../field/paths/helpers'\nimport {type FormDocumentValue} from '../types/formDocumentValue'\n\n/**\n * @internal\n * @hidden\n */\nexport interface FormValueContextValue {\n value: FormDocumentValue | undefined\n}\n\n/**\n *\n * @internal\n * @hidden\n */\nexport function FormValueProvider(props: {\n value: FormDocumentValue | undefined\n children: ReactNode\n}) {\n const value = useMemo(() => ({value: props.value}), [props.value])\n return <FormValueContext.Provider value={value}>{props.children}</FormValueContext.Provider>\n}\n\n/**\n * React hook that returns the value of the field specified by a path.\n * @public\n *\n * @param path - An array notation with segments that are either strings representing field names, index integers for arrays with simple values, or objects with a _key for arrays containing objects\n *\n * @returns The value of the field specified by the path\n *\n * @example Using the `useFormValue` hook\n * ```ts\n * function MyComponent() {\n * // get value of field 'name' in object 'author'\n * const authorName = useFormValue(['author', 'name'])\n * // get value of the second item in array 'tags' of type 'string'\n * const secondTag = useFormValue(['tags', 1])\n * // get value of the reference with the matching key in an array of references\n * const specificBook = useFormValue([ 'bibliography', {_key: '<key>'} ])\n * // ... do something with the form values ...\n * }\n * ```\n */\n\nexport function useFormValue(path: Path): unknown {\n const uniquePath = pathFor(path)\n const ctx = useContext(FormValueContext)\n if (!ctx) {\n throw new Error('useFormValue must be used within a FormValueProvider')\n }\n\n return getValueAtPath(ctx?.value, uniquePath)\n}\n"],"mappings":";;;;;;;;;;;AAqBA,SAAOU,kBAAAC,OAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GAAAC;CAAA,AAAAF,EAAA,OAAAD,MAAAF,QAI4CK,KAAAF,EAAA,MAApBE,KAAA,EAAAL,OAAQE,MAAKF,MAAM,GAACG,EAAA,KAAAD,MAAAF,OAAAG,EAAA,KAAAE;CAAjD,IAAAL,QAA6BK,IAAqCC;CAC0B,OAD1BH,EAAA,OAAAD,MAAAK,YAAAJ,EAAA,OAAAH,SAC3DM,KAAA,oBAAA,iBAAA,UAAA;EAAkCN;EAAQE,UAAAA,MAAKK;CAAU,CAAA,GAA4BJ,EAAA,KAAAD,MAAAK,UAAAJ,EAAA,KAAAH,OAAAG,EAAA,KAAAG,MAAAA,KAAAH,EAAA,IAArFG;AAAqF;;;;;;;;;;;;;;;;;;;;;;AAyB9F,SAAOE,aAAAC,MAAA;CACL,IAAAC,aAAmBlB,QAAQiB,IAAI,GAC/BE,MAAYjB,WAAWE,gBAAgB;CACvC,IAAI,CAACe,KACH,MAAUC,MAAM,sDAAsD;CACvE,OAEMf,eAAec,KAAGX,OAASU,UAAU;AAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { o as useSource } from "./studioClient-
|
|
2
|
-
import { d as useUserStore } from "./datastores-
|
|
1
|
+
import { o as useSource } from "./studioClient-BpYJ_yYC.js";
|
|
2
|
+
import { d as useUserStore } from "./datastores-wbjstxMt.js";
|
|
3
3
|
import { t as useTranslation } from "./useTranslation-Cqs6Itwv.js";
|
|
4
4
|
import { useMemo } from "react";
|
|
5
5
|
import { concat, from, of } from "rxjs";
|
|
@@ -114,4 +114,4 @@ function LoadingText(t0) {
|
|
|
114
114
|
}
|
|
115
115
|
export { createHookFromObservableFactory as i, useCurrentUser as n, useUser as r, LoadingBlock as t };
|
|
116
116
|
|
|
117
|
-
//# sourceMappingURL=LoadingBlock-
|
|
117
|
+
//# sourceMappingURL=LoadingBlock-DPTVJ58M.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoadingBlock-Cy2Pckab.js","names":["useMemo","useObservable","useSyncObservable","concat","Observable","of","catchError","distinctUntilChanged","map","scan","switchMap","LoadingTuple","T","ReactHook","args","TArgs","TResult","createHookFromObservableFactory","observableFactory","arg","TArg","initialValue","initialLoadingTuple","initialResult","type","tuple","const","useLoadableFromCreateLoadable","observable","pipe","_arg","value","prevValue","next","prevIsLoading","nextValue","nextIsLoading","error","result","liveResult","CurrentUser","User","useMemo","from","useSource","createHookFromObservableFactory","LoadingTuple","useUserStore","UserStore","useUserViaUserStore","userStore","userId","getUser","catch","err","console","error","useUser","$","_c","t0","useCurrentUser","currentUser","Card","Layer","Spinner","Text","css","styled","useTranslation","DEBUG_MODE","SPINNER_DELAY","TEXT_DELAY","LoadingTestProps","fill","showText","title","StyledCard","$fill","StyledSpinner","$animatePosition","StyledText","LoadingBlock","t0","$","_c","t1","t2","t3","t4","t5","LoadingText","t"],"sources":["../src/core/util/createHookFromObservableFactory.ts","../src/core/store/user/hooks.ts","../src/core/components/loadingBlock/LoadingBlock.tsx"],"sourcesContent":["import {useMemo} from 'react'\nimport {useObservable, useSyncObservable} from 'react-rx'\nimport {concat, type Observable, of} from 'rxjs'\nimport {catchError, distinctUntilChanged, map, scan, switchMap} from 'rxjs/operators'\n\n/** @internal */\nexport type LoadingTuple<T> = [T, boolean]\n\n/** @internal */\nexport type ReactHook<TArgs, TResult> = (args: TArgs) => TResult\n\n/** @internal */\n// overloads to handle types where an initial value is passed\nexport function createHookFromObservableFactory<T, TArg = void>(\n observableFactory: (arg: TArg) => Observable<T>,\n initialValue: T,\n): ReactHook<TArg, LoadingTuple<T>>\n/** @internal */\nexport function createHookFromObservableFactory<T, TArg = void>(\n observableFactory: (arg: TArg) => Observable<T>,\n initialValue?: T,\n): ReactHook<TArg, LoadingTuple<T | undefined>>\n\n/**\n * A function that will create a hook from a function that returns an\n * observable. The parameters of the hook will be the parameters of the function\n * and the return of the hook will be a loading tuple with the value of the\n * observable at the first index and a boolean with the loading state as the\n * second index.\n *\n * The loading state will become true as soon as new incoming args are given and\n * will flip to false when the observable from the function emits the next\n * value.\n *\n * @internal\n */\nexport function createHookFromObservableFactory<T, TArg = void>(\n observableFactory: (arg: TArg) => Observable<T>,\n initialValue?: T,\n): ReactHook<TArg, LoadingTuple<T | undefined>> {\n const initialLoadingTuple: LoadingTuple<T | undefined> = [initialValue, true]\n const initialResult = {type: 'tuple', tuple: initialLoadingTuple} as const\n\n return function useLoadableFromCreateLoadable(arg: TArg) {\n const observable = useMemo(\n () =>\n of(arg).pipe(\n switchMap((_arg) =>\n concat(\n of({type: 'loading'} as const),\n observableFactory(_arg).pipe(map((value) => ({type: 'value', value}) as const)),\n ),\n ),\n scan(([prevValue], next): LoadingTuple<T | undefined> => {\n if (next.type === 'loading') return [prevValue, true]\n return [next.value, false]\n }, initialLoadingTuple),\n distinctUntilChanged(([prevValue, prevIsLoading], [nextValue, nextIsLoading]) => {\n if (prevValue !== nextValue) return false\n if (prevIsLoading !== nextIsLoading) return false\n return true\n }),\n map((tuple) => ({type: 'tuple', tuple}) as const),\n catchError((error) => of({type: 'error', error} as const)),\n ),\n [arg],\n )\n // react-rx v5 defers updates and keeps the deferral identity-coherent: on\n // an identity change (e.g. a new document id) it falls back to the new\n // observable's live value — which synchronously resets to the loading\n // tuple — so the previous arg's value never renders as loaded state for\n // the new one.\n const result = useObservable(observable, initialResult)\n // Throw from the live snapshot so errors reach the error boundary as soon\n // as the observable errors, instead of after the deferred value catches\n // up. Both hooks share one store subscription per observable, so this\n // sync read costs no extra subscription.\n const liveResult = useSyncObservable(observable, initialResult)\n\n if (liveResult.type === 'error') throw liveResult.error\n // Unreachable within an identity (the deferred value lags the live one,\n // which threw above) and across identities (the identity-coherent\n // deferral falls back to the live value), but it narrows the type.\n if (result.type === 'error') throw result.error\n\n return result.tuple\n }\n}\n","import {type CurrentUser, type User} from '@sanity/types'\nimport {useMemo} from 'react'\nimport {from} from 'rxjs'\n\nimport {useSource} from '../../studio/source'\nimport {\n createHookFromObservableFactory,\n type LoadingTuple,\n} from '../../util/createHookFromObservableFactory'\nimport {useUserStore} from '../datastores'\nimport {type UserStore} from './userStore'\n\nconst useUserViaUserStore = createHookFromObservableFactory(\n ([userStore, userId]: [UserStore, string]) => {\n return from(\n userStore.getUser(userId).catch((err) => {\n console.error(err)\n return null\n }),\n )\n },\n)\n\n/** @internal */\nexport function useUser(userId: string): LoadingTuple<User | null | undefined> {\n const userStore = useUserStore()\n return useUserViaUserStore(useMemo(() => [userStore, userId], [userId, userStore]))\n}\n\n/**\n * Retrieves information about the currently authenticated user.\n *\n * @returns The current user or null if not available.\n *\n * @public\n *\n * @example\n * ```ts\n * const currentUser = useCurrentUser()\n *\n * if (currentUser) {\n * console.log('Logged in as', currentUser.name)\n * const department = currentUser.attributes?.find((attr) => attr.key === 'department')\n * }\n * ```\n */\nexport function useCurrentUser(): CurrentUser | null {\n // oxlint-disable-next-line no-deprecated -- will fix in follow up PR\n const {currentUser} = useSource()\n return currentUser\n}\n","import {Card, Layer, Spinner, Text} from '@sanity/ui'\nimport {css, styled} from 'styled-components'\n\nimport {useTranslation} from '../../i18n/hooks/useTranslation'\n\n// Enable to force debug background\nconst DEBUG_MODE = false\n\n// Duration to wait before initial spinner appears\nconst SPINNER_DELAY = 750 // ms\n\n// Duration to wait before text appears (if enabled)\nconst TEXT_DELAY = 2000 // ms\n\ninterface LoadingTestProps {\n /** Absolutely positions this component when `true`. */\n fill?: boolean\n /** Optionally show loading title. If `true`, both text and spinner will appear and animate after an initial delay */\n showText?: boolean\n /**\n * Text to display underneath the spinner. If omitted, will default to `'Loading'`.\n * If providing a value, avoid using trailing ellipses.\n *\n * @defaultValue `'Loading'`\n */\n title?: string | null\n}\n\nconst StyledCard = styled(Card)<{$fill?: boolean}>(({$fill}) => {\n return css`\n align-items: center;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n justify-content: center;\n\n ${\n $fill\n ? css`\n bottom: 0;\n height: 100%;\n left: 0;\n position: absolute;\n right: 0;\n top: 0;\n width: 100%;\n `\n : css`\n min-height: 75px;\n height: stretch;\n height: -webkit-fill-available;\n width: stretch;\n width: -webkit-fill-available;\n `\n }\n\n ${\n DEBUG_MODE &&\n css`\n background: linear-gradient(#5555ca, #daf9f9);\n border: 2px solid black;\n > * {\n mix-blend-mode: multiply;\n }\n `\n }\n\n > * {\n position: absolute;\n }\n `\n})\n\nconst StyledSpinner = styled(Spinner)<{$animatePosition: boolean}>(({$animatePosition = true}) => {\n return css`\n @keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n @keyframes slideUp {\n from {\n transform: translateY(0);\n }\n to {\n transform: translateY(-15px);\n }\n }\n animation: ${\n $animatePosition\n ? `500ms ease-out ${SPINNER_DELAY}ms 1 normal both running fadeIn, 750ms ease-out ${TEXT_DELAY}ms 1 normal both running slideUp`\n : `500ms ease-out ${SPINNER_DELAY}ms 1 normal both running fadeIn`\n };\n `\n})\n\nconst StyledText = styled(Text)`\n @keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n @keyframes slideDown {\n from {\n transform: translateY(0);\n }\n to {\n transform: translateY(15px);\n }\n }\n animation:\n 1500ms ease-out ${TEXT_DELAY}ms 1 normal both running fadeIn,\n 750ms ease-out ${TEXT_DELAY}ms 1 normal both running slideDown;\n`\n\n/**\n * A generic loading container which displays a spinner and text.\n * The spinner won't initially be visible and fades in after a short delay.\n *\n * @internal\n */\nexport function LoadingBlock({fill, showText, title}: LoadingTestProps) {\n return (\n <StyledCard $fill={fill} as={fill ? Layer : 'div'} data-testid=\"loading-block\">\n <StyledSpinner $animatePosition={!!showText} muted />\n {showText && <LoadingText title={title} />}\n </StyledCard>\n )\n}\n\nfunction LoadingText({title}: {title?: string | null}) {\n const {t} = useTranslation()\n\n return (\n <StyledText muted size={1}>\n {title || t('common.loading')}\n </StyledText>\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LoadingBlock-DPTVJ58M.js","names":["useMemo","useObservable","useSyncObservable","concat","Observable","of","catchError","distinctUntilChanged","map","scan","switchMap","LoadingTuple","T","ReactHook","args","TArgs","TResult","createHookFromObservableFactory","observableFactory","arg","TArg","initialValue","initialLoadingTuple","initialResult","type","tuple","const","useLoadableFromCreateLoadable","observable","pipe","_arg","value","prevValue","next","prevIsLoading","nextValue","nextIsLoading","error","result","liveResult","CurrentUser","User","useMemo","from","useSource","createHookFromObservableFactory","LoadingTuple","useUserStore","UserStore","useUserViaUserStore","userStore","userId","getUser","catch","err","console","error","useUser","$","_c","t0","useCurrentUser","currentUser","Card","Layer","Spinner","Text","css","styled","useTranslation","DEBUG_MODE","SPINNER_DELAY","TEXT_DELAY","LoadingTestProps","fill","showText","title","StyledCard","$fill","StyledSpinner","$animatePosition","StyledText","LoadingBlock","t0","$","_c","t1","t2","t3","t4","t5","LoadingText","t"],"sources":["../src/core/util/createHookFromObservableFactory.ts","../src/core/store/user/hooks.ts","../src/core/components/loadingBlock/LoadingBlock.tsx"],"sourcesContent":["import {useMemo} from 'react'\nimport {useObservable, useSyncObservable} from 'react-rx'\nimport {concat, type Observable, of} from 'rxjs'\nimport {catchError, distinctUntilChanged, map, scan, switchMap} from 'rxjs/operators'\n\n/** @internal */\nexport type LoadingTuple<T> = [T, boolean]\n\n/** @internal */\nexport type ReactHook<TArgs, TResult> = (args: TArgs) => TResult\n\n/** @internal */\n// overloads to handle types where an initial value is passed\nexport function createHookFromObservableFactory<T, TArg = void>(\n observableFactory: (arg: TArg) => Observable<T>,\n initialValue: T,\n): ReactHook<TArg, LoadingTuple<T>>\n/** @internal */\nexport function createHookFromObservableFactory<T, TArg = void>(\n observableFactory: (arg: TArg) => Observable<T>,\n initialValue?: T,\n): ReactHook<TArg, LoadingTuple<T | undefined>>\n\n/**\n * A function that will create a hook from a function that returns an\n * observable. The parameters of the hook will be the parameters of the function\n * and the return of the hook will be a loading tuple with the value of the\n * observable at the first index and a boolean with the loading state as the\n * second index.\n *\n * The loading state will become true as soon as new incoming args are given and\n * will flip to false when the observable from the function emits the next\n * value.\n *\n * @internal\n */\nexport function createHookFromObservableFactory<T, TArg = void>(\n observableFactory: (arg: TArg) => Observable<T>,\n initialValue?: T,\n): ReactHook<TArg, LoadingTuple<T | undefined>> {\n const initialLoadingTuple: LoadingTuple<T | undefined> = [initialValue, true]\n const initialResult = {type: 'tuple', tuple: initialLoadingTuple} as const\n\n return function useLoadableFromCreateLoadable(arg: TArg) {\n const observable = useMemo(\n () =>\n of(arg).pipe(\n switchMap((_arg) =>\n concat(\n of({type: 'loading'} as const),\n observableFactory(_arg).pipe(map((value) => ({type: 'value', value}) as const)),\n ),\n ),\n scan(([prevValue], next): LoadingTuple<T | undefined> => {\n if (next.type === 'loading') return [prevValue, true]\n return [next.value, false]\n }, initialLoadingTuple),\n distinctUntilChanged(([prevValue, prevIsLoading], [nextValue, nextIsLoading]) => {\n if (prevValue !== nextValue) return false\n if (prevIsLoading !== nextIsLoading) return false\n return true\n }),\n map((tuple) => ({type: 'tuple', tuple}) as const),\n catchError((error) => of({type: 'error', error} as const)),\n ),\n [arg],\n )\n // react-rx v5 defers updates and keeps the deferral identity-coherent: on\n // an identity change (e.g. a new document id) it falls back to the new\n // observable's live value — which synchronously resets to the loading\n // tuple — so the previous arg's value never renders as loaded state for\n // the new one.\n const result = useObservable(observable, initialResult)\n // Throw from the live snapshot so errors reach the error boundary as soon\n // as the observable errors, instead of after the deferred value catches\n // up. Both hooks share one store subscription per observable, so this\n // sync read costs no extra subscription.\n const liveResult = useSyncObservable(observable, initialResult)\n\n if (liveResult.type === 'error') throw liveResult.error\n // Unreachable within an identity (the deferred value lags the live one,\n // which threw above) and across identities (the identity-coherent\n // deferral falls back to the live value), but it narrows the type.\n if (result.type === 'error') throw result.error\n\n return result.tuple\n }\n}\n","import {type CurrentUser, type User} from '@sanity/types'\nimport {useMemo} from 'react'\nimport {from} from 'rxjs'\n\nimport {useSource} from '../../studio/source'\nimport {\n createHookFromObservableFactory,\n type LoadingTuple,\n} from '../../util/createHookFromObservableFactory'\nimport {useUserStore} from '../datastores'\nimport {type UserStore} from './userStore'\n\nconst useUserViaUserStore = createHookFromObservableFactory(\n ([userStore, userId]: [UserStore, string]) => {\n return from(\n userStore.getUser(userId).catch((err) => {\n console.error(err)\n return null\n }),\n )\n },\n)\n\n/** @internal */\nexport function useUser(userId: string): LoadingTuple<User | null | undefined> {\n const userStore = useUserStore()\n return useUserViaUserStore(useMemo(() => [userStore, userId], [userId, userStore]))\n}\n\n/**\n * Retrieves information about the currently authenticated user.\n *\n * @returns The current user or null if not available.\n *\n * @public\n *\n * @example\n * ```ts\n * const currentUser = useCurrentUser()\n *\n * if (currentUser) {\n * console.log('Logged in as', currentUser.name)\n * const department = currentUser.attributes?.find((attr) => attr.key === 'department')\n * }\n * ```\n */\nexport function useCurrentUser(): CurrentUser | null {\n // oxlint-disable-next-line no-deprecated -- will fix in follow up PR\n const {currentUser} = useSource()\n return currentUser\n}\n","import {Card, Layer, Spinner, Text} from '@sanity/ui'\nimport {css, styled} from 'styled-components'\n\nimport {useTranslation} from '../../i18n/hooks/useTranslation'\n\n// Enable to force debug background\nconst DEBUG_MODE = false\n\n// Duration to wait before initial spinner appears\nconst SPINNER_DELAY = 750 // ms\n\n// Duration to wait before text appears (if enabled)\nconst TEXT_DELAY = 2000 // ms\n\ninterface LoadingTestProps {\n /** Absolutely positions this component when `true`. */\n fill?: boolean\n /** Optionally show loading title. If `true`, both text and spinner will appear and animate after an initial delay */\n showText?: boolean\n /**\n * Text to display underneath the spinner. If omitted, will default to `'Loading'`.\n * If providing a value, avoid using trailing ellipses.\n *\n * @defaultValue `'Loading'`\n */\n title?: string | null\n}\n\nconst StyledCard = styled(Card)<{$fill?: boolean}>(({$fill}) => {\n return css`\n align-items: center;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n justify-content: center;\n\n ${\n $fill\n ? css`\n bottom: 0;\n height: 100%;\n left: 0;\n position: absolute;\n right: 0;\n top: 0;\n width: 100%;\n `\n : css`\n min-height: 75px;\n height: stretch;\n height: -webkit-fill-available;\n width: stretch;\n width: -webkit-fill-available;\n `\n }\n\n ${\n DEBUG_MODE &&\n css`\n background: linear-gradient(#5555ca, #daf9f9);\n border: 2px solid black;\n > * {\n mix-blend-mode: multiply;\n }\n `\n }\n\n > * {\n position: absolute;\n }\n `\n})\n\nconst StyledSpinner = styled(Spinner)<{$animatePosition: boolean}>(({$animatePosition = true}) => {\n return css`\n @keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n @keyframes slideUp {\n from {\n transform: translateY(0);\n }\n to {\n transform: translateY(-15px);\n }\n }\n animation: ${\n $animatePosition\n ? `500ms ease-out ${SPINNER_DELAY}ms 1 normal both running fadeIn, 750ms ease-out ${TEXT_DELAY}ms 1 normal both running slideUp`\n : `500ms ease-out ${SPINNER_DELAY}ms 1 normal both running fadeIn`\n };\n `\n})\n\nconst StyledText = styled(Text)`\n @keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n @keyframes slideDown {\n from {\n transform: translateY(0);\n }\n to {\n transform: translateY(15px);\n }\n }\n animation:\n 1500ms ease-out ${TEXT_DELAY}ms 1 normal both running fadeIn,\n 750ms ease-out ${TEXT_DELAY}ms 1 normal both running slideDown;\n`\n\n/**\n * A generic loading container which displays a spinner and text.\n * The spinner won't initially be visible and fades in after a short delay.\n *\n * @internal\n */\nexport function LoadingBlock({fill, showText, title}: LoadingTestProps) {\n return (\n <StyledCard $fill={fill} as={fill ? Layer : 'div'} data-testid=\"loading-block\">\n <StyledSpinner $animatePosition={!!showText} muted />\n {showText && <LoadingText title={title} />}\n </StyledCard>\n )\n}\n\nfunction LoadingText({title}: {title?: string | null}) {\n const {t} = useTranslation()\n\n return (\n <StyledText muted size={1}>\n {title || t('common.loading')}\n </StyledText>\n )\n}\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { n as Tooltip } from "./Button-CGZ3ETwD.js";
|
|
2
|
-
import { dn as isRecord } from "./datastores-
|
|
3
|
-
import { r as useUser } from "./LoadingBlock-
|
|
4
|
-
import { Bt as isReleaseDocument, It as RELEASE_TYPES_TONES, Tt as isDraftPerspective, yt as getReleaseTone, zt as isPausedCardinalityOneRelease } from "./useBundleDocuments-
|
|
2
|
+
import { dn as isRecord } from "./datastores-wbjstxMt.js";
|
|
3
|
+
import { r as useUser } from "./LoadingBlock-DPTVJ58M.js";
|
|
4
|
+
import { Bt as isReleaseDocument, It as RELEASE_TYPES_TONES, Tt as isDraftPerspective, yt as getReleaseTone, zt as isPausedCardinalityOneRelease } from "./useBundleDocuments-C58ExRpX.js";
|
|
5
5
|
import { useContext, useState } from "react";
|
|
6
6
|
import { EMPTY } from "rxjs";
|
|
7
7
|
import { c } from "react/compiler-runtime";
|
|
@@ -281,4 +281,4 @@ function ReleaseTitle(props) {
|
|
|
281
281
|
}
|
|
282
282
|
export { UserAvatar as a, ReleaseAvatar as c, AvatarSkeleton as i, ReleaseAvatarIcon as l, sliceString as n, useUserColor as o, truncateString as r, useUserColorManager as s, ReleaseTitle as t };
|
|
283
283
|
|
|
284
|
-
//# sourceMappingURL=ReleaseTitle-
|
|
284
|
+
//# sourceMappingURL=ReleaseTitle-ln13W3P1.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReleaseTitle-CkEMIfmx.js","names":["ReleaseType","BoltIcon","ClockIcon","DotIcon","BadgeTone","Box","Text","CSSProperties","TargetPerspective","isPausedCardinalityOneRelease","isReleaseDocument","RELEASE_TYPES_TONES","getReleaseTone","isDraftPerspective","IconProps","renderReleaseTypeIcon","releaseType","iconProps","ReleaseAvatarIconProps","release","tone","ReleaseAvatarIcon","t0","$","_c","t1","resolvedTone","t2","t3","t4","t5","Symbol","for","bb0","metadata","ReleaseAvatar","fontSize","padding","undefined","borderRadius","t6","useContext","useMemo","useObservable","EMPTY","UserColorManagerContext","UserColor","UserColorManager","useUserColorManager","userColorManager","Error","useUserColor","userId","$","_c","manager","t0","listen","observable","t1","get","User","Avatar","AvatarPosition","AvatarProps","AvatarSize","AvatarStatus","Skeleton","getTheme_v2","useState","RefAttributes","css","styled","Tooltip","useUser","useUserColor","isRecord","AvatarSkeletonProps","$size","AvatarSkeleton","props","theme","size","avatar","sizes","UserAvatarProps","__unstable_hideInnerStroke","animateArrowFrom","position","status","tone","user","withTooltip","symbols","whitespace","LEGACY_TO_UI_AVATAR_SIZES","key","small","medium","large","nameToInitials","fullName","namesArray","replace","split","length","charAt","toUpperCase","UserAvatar","$","_c","restProps","t0","t1","TooltipUserAvatar","displayName","Symbol","for","display","t2","t3","StaticUserAvatar","ref","imageLoadError","setImageLoadError","userColor","id","imageUrl","undefined","name","UserAvatarLoader","loadedProps","value","loading","segmenter","Intl","Segmenter","undefined","sliceString","str","start","end","Error","slice","i","sliced","value","segment","truncateString","maxLength","truncated","truncateString","DEFAULT_RELEASE_TITLE_CHARACTER_LIMIT","getReleaseTitleDetails","title","fallback","displayTitle","fullTitle","isTruncated","length","Box","Text","TextProps","CSSProperties","ReactElement","ReactNode","Tooltip","getReleaseTitleDetails","ReleaseTitleDetails","displayTitle","fullTitle","isTruncated","ReleaseTitleProps","title","fallback","enableTooltip","tooltipMaxWidth","children","details","textProps","Omit","style","DEFAULT_TOOLTIP_MAX_WIDTH","ReleaseTitle","props","$","_c","t0","undefined","t1","t2","t3","renderedContent","maxWidth","t4","t5","t6"],"sources":["../src/core/releases/components/ReleaseAvatar.tsx","../src/core/user-color/hooks.ts","../src/core/components/userAvatar/UserAvatar.tsx","../src/core/util/unicodeString.ts","../src/core/releases/util/getReleaseTitleDetails.ts","../src/core/releases/components/ReleaseTitle.tsx"],"sourcesContent":["import {type ReleaseType} from '@sanity/client'\nimport {BoltIcon} from '@sanity/icons/Bolt'\nimport {ClockIcon} from '@sanity/icons/Clock'\nimport {DotIcon} from '@sanity/icons/Dot'\nimport {type BadgeTone, Box, Text} from '@sanity/ui'\nimport {type CSSProperties} from 'react'\n\nimport {type TargetPerspective} from '../../perspective/types'\nimport {isPausedCardinalityOneRelease} from '../../util/releaseUtils'\nimport {isReleaseDocument} from '../store/types'\nimport {RELEASE_TYPES_TONES} from '../util/const'\nimport {getReleaseTone} from '../util/getReleaseTone'\nimport {isDraftPerspective} from '../util/util'\n\ninterface IconProps {\n 'data-testid': string\n 'style': CSSProperties & {'--card-icon-color': string}\n}\nfunction renderReleaseTypeIcon(releaseType: ReleaseType, iconProps: IconProps) {\n if (releaseType === 'asap') return <BoltIcon {...iconProps} />\n if (releaseType === 'scheduled') return <ClockIcon {...iconProps} />\n return <DotIcon {...iconProps} />\n}\n\n/** @internal */\ntype ReleaseAvatarIconProps =\n | {\n release: TargetPerspective\n tone?: never\n releaseType?: never\n }\n | {\n releaseType: ReleaseType\n tone?: never\n release?: never\n }\n | {\n /**\n * @deprecated - Prefer `release` or `releaseType`.\n */\n tone: BadgeTone\n release?: never\n releaseType?: never\n }\n\n// oxlint-disable-next-line no-deprecated -- will fix in follow up PR\nexport const ReleaseAvatarIcon = ({tone, release, releaseType}: ReleaseAvatarIconProps) => {\n const resolvedTone =\n tone ??\n (releaseType\n ? RELEASE_TYPES_TONES[releaseType]?.tone\n : release\n ? isDraftPerspective(release)\n ? // special case for draft perspective, the icon needs to be caution tone\n 'caution'\n : getReleaseTone(release)\n : 'default')\n\n const iconProps: IconProps = {\n 'data-testid': `release-avatar-${resolvedTone}`,\n 'style': {\n '--card-icon-color': `var(--card-badge-${resolvedTone}-icon-color)`,\n },\n }\n\n if (releaseType) {\n return renderReleaseTypeIcon(releaseType, iconProps)\n }\n\n if (isReleaseDocument(release)) {\n if (isPausedCardinalityOneRelease(release)) {\n return <ClockIcon {...iconProps} />\n }\n\n return renderReleaseTypeIcon(release.metadata.releaseType, iconProps)\n }\n return <DotIcon {...iconProps} />\n}\n\nexport function ReleaseAvatar({\n fontSize = 1,\n padding = 3,\n ...iconProps\n}: ReleaseAvatarIconProps & {\n fontSize?: number\n padding?: number\n}): React.JSX.Element {\n return (\n <Box flex=\"none\" padding={padding} style={{borderRadius: 3}}>\n <Text size={fontSize}>\n <ReleaseAvatarIcon {...iconProps} />\n </Text>\n </Box>\n )\n}\n","import {useContext, useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {EMPTY} from 'rxjs'\nimport {UserColorManagerContext} from 'sanity/_singletons'\n\nimport {type UserColor, type UserColorManager} from './types'\n\n/** @internal */\nexport function useUserColorManager(): UserColorManager {\n const userColorManager = useContext(UserColorManagerContext)\n\n if (!userColorManager) {\n throw new Error('UserColorManager: missing context value')\n }\n\n return userColorManager\n}\n\n/** @internal */\nexport function useUserColor(userId: string | null): UserColor {\n const manager = useUserColorManager()\n\n const observable = useMemo(() => (userId ? manager.listen(userId) : EMPTY), [manager, userId])\n return useObservable(observable, manager.get(null))\n}\n","import {type User} from '@sanity/types'\nimport {\n Avatar,\n type AvatarPosition,\n type AvatarProps,\n type AvatarSize,\n type AvatarStatus,\n Skeleton,\n} from '@sanity/ui'\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {useState, type RefAttributes} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {Tooltip} from '../../../ui-components/tooltip/Tooltip'\nimport {useUser} from '../../store/user/hooks'\nimport {useUserColor} from '../../user-color/hooks'\nimport {isRecord} from '../../util/isRecord'\n\ninterface AvatarSkeletonProps {\n $size?: AvatarSize\n}\n\n/**\n * A loading skeleton element representing a user avatar\n * @beta\n */\nexport const AvatarSkeleton = styled(Skeleton)<AvatarSkeletonProps>((props) => {\n const theme = getTheme_v2(props.theme)\n const size = props.$size ?? 1\n return css`\n border-radius: 50%;\n width: ${theme.avatar.sizes[size].size}px;\n height: ${theme.avatar.sizes[size].size}px;\n `\n})\n\n/**\n * @hidden\n * @beta */\nexport interface UserAvatarProps {\n __unstable_hideInnerStroke?: AvatarProps['__unstable_hideInnerStroke']\n animateArrowFrom?: AvatarPosition\n position?: AvatarPosition\n size?: AvatarSize\n status?: AvatarStatus\n tone?: 'navbar'\n user: User | string\n withTooltip?: boolean\n}\n\nconst symbols = /[^\\p{Alpha}\\p{White_Space}]/gu\nconst whitespace = /\\p{White_Space}+/u\n\nconst LEGACY_TO_UI_AVATAR_SIZES: {[key: string]: AvatarSize | undefined} = {\n small: 0,\n medium: 1,\n large: 2,\n}\n\nfunction nameToInitials(fullName: string) {\n const namesArray = fullName.replace(symbols, '').split(whitespace)\n\n if (namesArray.length === 1) {\n return `${namesArray[0].charAt(0)}`.toUpperCase()\n }\n\n return `${namesArray[0].charAt(0)}${namesArray[namesArray.length - 1].charAt(0)}`\n}\n\n/**\n * @hidden\n * @beta */\nexport function UserAvatar(props: UserAvatarProps) {\n const {user, withTooltip, ...restProps} = props\n\n if (isRecord(user)) {\n if (withTooltip) {\n return <TooltipUserAvatar {...restProps} user={user as User} />\n }\n\n return <StaticUserAvatar {...restProps} user={user as User} />\n }\n\n return <UserAvatarLoader {...props} user={user as string} />\n}\n\nfunction TooltipUserAvatar(props: Omit<UserAvatarProps, 'user'> & {user: User}) {\n const {\n user: {displayName},\n } = props\n\n return (\n <Tooltip content={displayName} placement=\"top\" portal>\n <div style={{display: 'inline-block'}}>\n <StaticUserAvatar {...props} />\n </div>\n </Tooltip>\n )\n}\n\nfunction StaticUserAvatar(\n props: Omit<UserAvatarProps, 'user'> & {user: User} & RefAttributes<HTMLDivElement>,\n) {\n const {ref, user, animateArrowFrom, position, size, status, tone, ...restProps} = props\n const [imageLoadError, setImageLoadError] = useState<null | Error>(null)\n const userColor = useUserColor(user.id)\n const imageUrl = imageLoadError ? undefined : user?.imageUrl\n\n return (\n <Avatar\n __unstable_hideInnerStroke\n animateArrowFrom={animateArrowFrom}\n arrowPosition={position}\n color={userColor.name}\n data-legacy-tone={tone}\n initials={user?.displayName && nameToInitials(user.displayName)}\n src={imageUrl}\n onImageLoadError={setImageLoadError}\n ref={ref}\n size={typeof size === 'string' ? LEGACY_TO_UI_AVATAR_SIZES[size] : size}\n status={status}\n title={user?.displayName}\n {...restProps}\n />\n )\n}\n\nfunction UserAvatarLoader({user, ...loadedProps}: Omit<UserAvatarProps, 'user'> & {user: string}) {\n const [value, loading] = useUser(user)\n\n if (loading) {\n return <AvatarSkeleton $size={loadedProps.size} animated />\n }\n if (!value) {\n return <AvatarSkeleton $size={loadedProps.size} animated={false} />\n }\n\n return <UserAvatar {...loadedProps} user={value} />\n}\n","const segmenter = typeof Intl === 'object' && 'Segmenter' in Intl ? new Intl.Segmenter() : undefined\n\n/**\n * Truncates a string to a given length, taking into account surrogate pairs and grapheme clusters\n * (using zero-width joiners). This means the resulting string may be longer in number of bytes,\n * but will be shorter in number of \"characters\". Should only be used for display purposes -\n * not for truncating strings for storage or similar.\n *\n * Examples of differences between `String.prototype.slice` and this function:\n *\n * - '👨👨👧👧'.slice(0, 1) === '�' vs sliceString('👨👨👧👧', 0, 1) === '👨👨👧👧'\n * - '👨👨👧👧'.slice(0, 2) === '👨' vs sliceString('👨👨👧👧', 0, 2) === '👨👨👧👧'\n *\n * @param str - String to slice\n * @param start - Start index\n * @param end - End index (exclusive)\n * @returns The sliced string\n * @internal\n */\nexport function sliceString(str: string, start: number, end: number): string {\n if (end < start) {\n throw new Error(\n 'End must be greater than start, use `String.prototype.slice()` for negative values',\n )\n }\n\n if (!segmenter) {\n return str.slice(start, end)\n }\n\n let i = 0\n let sliced = ''\n for (const value of segmenter.segment(str)) {\n if (i === end) {\n return sliced\n }\n\n sliced += value.segment\n i++\n }\n\n return sliced\n}\n\n/**\n * Truncates a string to a given length, taking into account surrogate pairs and grapheme clusters\n * (using zero-width joiners). This means the resulting string may be longer in number of bytes,\n * but will be shorter in number of \"characters\". Should only be used for display purposes -\n * not for truncating strings for storage or similar.\n *\n * @param str - String to truncate\n * @param maxLength - Maximum length in \"characters\"\n * @returns The truncated string\n * @internal\n */\nexport function truncateString(str: string, maxLength: number): string {\n const truncated = sliceString(str, 0, maxLength)\n return truncated === str ? truncated : `${truncated}…`\n}\n","/**\n * Utilities for handling release title display and truncation\n * @internal\n */\n\nimport {truncateString} from '../../util/unicodeString'\n\nconst DEFAULT_RELEASE_TITLE_CHARACTER_LIMIT = 50\n\n/**\n * Returns structured title details for consumers that need both\n * the truncated display title and tooltip data.\n * @param title - The release title (may be undefined or empty)\n * @param fallback - The fallback string to use when title is absent\n * @returns Object with displayTitle, fullTitle, and isTruncated flag\n */\nexport function getReleaseTitleDetails(\n title: string | undefined,\n fallback: string,\n): {displayTitle: string; fullTitle: string; isTruncated: boolean} {\n const fullTitle = title || fallback\n const isTruncated = fullTitle.length > DEFAULT_RELEASE_TITLE_CHARACTER_LIMIT\n const displayTitle = isTruncated\n ? truncateString(fullTitle, DEFAULT_RELEASE_TITLE_CHARACTER_LIMIT)\n : fullTitle\n\n return {displayTitle, fullTitle, isTruncated}\n}\n","import {Box, Text, type TextProps} from '@sanity/ui'\nimport {type CSSProperties, type ReactElement, type ReactNode} from 'react'\n\nimport {Tooltip} from '../../../ui-components/tooltip/Tooltip'\nimport {getReleaseTitleDetails} from '../util/getReleaseTitleDetails'\n\n/** @internal */\nexport interface ReleaseTitleDetails {\n displayTitle: string\n fullTitle: string\n isTruncated: boolean\n}\n\n/** @internal */\nexport interface ReleaseTitleProps {\n title: string | undefined\n fallback: string\n enableTooltip?: boolean\n tooltipMaxWidth?: string\n children?: (details: ReleaseTitleDetails) => ReactElement\n textProps?: Omit<TextProps, 'children'> & {style?: CSSProperties}\n}\n\nconst DEFAULT_TOOLTIP_MAX_WIDTH = '300px'\n\n/** @internal */\nexport function ReleaseTitle(props: ReleaseTitleProps): ReactNode {\n const {title, fallback, enableTooltip = true, tooltipMaxWidth, children, textProps} = props\n const {displayTitle, fullTitle, isTruncated} = getReleaseTitleDetails(title, fallback)\n\n const renderedContent: ReactElement = children ? (\n children({displayTitle, fullTitle, isTruncated})\n ) : (\n <Text {...textProps}>{displayTitle}</Text>\n )\n\n if (isTruncated && enableTooltip) {\n return (\n <Tooltip\n content={\n <Box style={{maxWidth: tooltipMaxWidth ?? DEFAULT_TOOLTIP_MAX_WIDTH}}>\n <Text size={1}>{fullTitle}</Text>\n </Box>\n }\n >\n {renderedContent}\n </Tooltip>\n )\n }\n\n return renderedContent\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ReleaseTitle-ln13W3P1.js","names":["ReleaseType","BoltIcon","ClockIcon","DotIcon","BadgeTone","Box","Text","CSSProperties","TargetPerspective","isPausedCardinalityOneRelease","isReleaseDocument","RELEASE_TYPES_TONES","getReleaseTone","isDraftPerspective","IconProps","renderReleaseTypeIcon","releaseType","iconProps","ReleaseAvatarIconProps","release","tone","ReleaseAvatarIcon","t0","$","_c","t1","resolvedTone","t2","t3","t4","t5","Symbol","for","bb0","metadata","ReleaseAvatar","fontSize","padding","undefined","borderRadius","t6","useContext","useMemo","useObservable","EMPTY","UserColorManagerContext","UserColor","UserColorManager","useUserColorManager","userColorManager","Error","useUserColor","userId","$","_c","manager","t0","listen","observable","t1","get","User","Avatar","AvatarPosition","AvatarProps","AvatarSize","AvatarStatus","Skeleton","getTheme_v2","useState","RefAttributes","css","styled","Tooltip","useUser","useUserColor","isRecord","AvatarSkeletonProps","$size","AvatarSkeleton","props","theme","size","avatar","sizes","UserAvatarProps","__unstable_hideInnerStroke","animateArrowFrom","position","status","tone","user","withTooltip","symbols","whitespace","LEGACY_TO_UI_AVATAR_SIZES","key","small","medium","large","nameToInitials","fullName","namesArray","replace","split","length","charAt","toUpperCase","UserAvatar","$","_c","restProps","t0","t1","TooltipUserAvatar","displayName","Symbol","for","display","t2","t3","StaticUserAvatar","ref","imageLoadError","setImageLoadError","userColor","id","imageUrl","undefined","name","UserAvatarLoader","loadedProps","value","loading","segmenter","Intl","Segmenter","undefined","sliceString","str","start","end","Error","slice","i","sliced","value","segment","truncateString","maxLength","truncated","truncateString","DEFAULT_RELEASE_TITLE_CHARACTER_LIMIT","getReleaseTitleDetails","title","fallback","displayTitle","fullTitle","isTruncated","length","Box","Text","TextProps","CSSProperties","ReactElement","ReactNode","Tooltip","getReleaseTitleDetails","ReleaseTitleDetails","displayTitle","fullTitle","isTruncated","ReleaseTitleProps","title","fallback","enableTooltip","tooltipMaxWidth","children","details","textProps","Omit","style","DEFAULT_TOOLTIP_MAX_WIDTH","ReleaseTitle","props","$","_c","t0","undefined","t1","t2","t3","renderedContent","maxWidth","t4","t5","t6"],"sources":["../src/core/releases/components/ReleaseAvatar.tsx","../src/core/user-color/hooks.ts","../src/core/components/userAvatar/UserAvatar.tsx","../src/core/util/unicodeString.ts","../src/core/releases/util/getReleaseTitleDetails.ts","../src/core/releases/components/ReleaseTitle.tsx"],"sourcesContent":["import {type ReleaseType} from '@sanity/client'\nimport {BoltIcon} from '@sanity/icons/Bolt'\nimport {ClockIcon} from '@sanity/icons/Clock'\nimport {DotIcon} from '@sanity/icons/Dot'\nimport {type BadgeTone, Box, Text} from '@sanity/ui'\nimport {type CSSProperties} from 'react'\n\nimport {type TargetPerspective} from '../../perspective/types'\nimport {isPausedCardinalityOneRelease} from '../../util/releaseUtils'\nimport {isReleaseDocument} from '../store/types'\nimport {RELEASE_TYPES_TONES} from '../util/const'\nimport {getReleaseTone} from '../util/getReleaseTone'\nimport {isDraftPerspective} from '../util/util'\n\ninterface IconProps {\n 'data-testid': string\n 'style': CSSProperties & {'--card-icon-color': string}\n}\nfunction renderReleaseTypeIcon(releaseType: ReleaseType, iconProps: IconProps) {\n if (releaseType === 'asap') return <BoltIcon {...iconProps} />\n if (releaseType === 'scheduled') return <ClockIcon {...iconProps} />\n return <DotIcon {...iconProps} />\n}\n\n/** @internal */\ntype ReleaseAvatarIconProps =\n | {\n release: TargetPerspective\n tone?: never\n releaseType?: never\n }\n | {\n releaseType: ReleaseType\n tone?: never\n release?: never\n }\n | {\n /**\n * @deprecated - Prefer `release` or `releaseType`.\n */\n tone: BadgeTone\n release?: never\n releaseType?: never\n }\n\n// oxlint-disable-next-line no-deprecated -- will fix in follow up PR\nexport const ReleaseAvatarIcon = ({tone, release, releaseType}: ReleaseAvatarIconProps) => {\n const resolvedTone =\n tone ??\n (releaseType\n ? RELEASE_TYPES_TONES[releaseType]?.tone\n : release\n ? isDraftPerspective(release)\n ? // special case for draft perspective, the icon needs to be caution tone\n 'caution'\n : getReleaseTone(release)\n : 'default')\n\n const iconProps: IconProps = {\n 'data-testid': `release-avatar-${resolvedTone}`,\n 'style': {\n '--card-icon-color': `var(--card-badge-${resolvedTone}-icon-color)`,\n },\n }\n\n if (releaseType) {\n return renderReleaseTypeIcon(releaseType, iconProps)\n }\n\n if (isReleaseDocument(release)) {\n if (isPausedCardinalityOneRelease(release)) {\n return <ClockIcon {...iconProps} />\n }\n\n return renderReleaseTypeIcon(release.metadata.releaseType, iconProps)\n }\n return <DotIcon {...iconProps} />\n}\n\nexport function ReleaseAvatar({\n fontSize = 1,\n padding = 3,\n ...iconProps\n}: ReleaseAvatarIconProps & {\n fontSize?: number\n padding?: number\n}): React.JSX.Element {\n return (\n <Box flex=\"none\" padding={padding} style={{borderRadius: 3}}>\n <Text size={fontSize}>\n <ReleaseAvatarIcon {...iconProps} />\n </Text>\n </Box>\n )\n}\n","import {useContext, useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {EMPTY} from 'rxjs'\nimport {UserColorManagerContext} from 'sanity/_singletons'\n\nimport {type UserColor, type UserColorManager} from './types'\n\n/** @internal */\nexport function useUserColorManager(): UserColorManager {\n const userColorManager = useContext(UserColorManagerContext)\n\n if (!userColorManager) {\n throw new Error('UserColorManager: missing context value')\n }\n\n return userColorManager\n}\n\n/** @internal */\nexport function useUserColor(userId: string | null): UserColor {\n const manager = useUserColorManager()\n\n const observable = useMemo(() => (userId ? manager.listen(userId) : EMPTY), [manager, userId])\n return useObservable(observable, manager.get(null))\n}\n","import {type User} from '@sanity/types'\nimport {\n Avatar,\n type AvatarPosition,\n type AvatarProps,\n type AvatarSize,\n type AvatarStatus,\n Skeleton,\n} from '@sanity/ui'\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {useState, type RefAttributes} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {Tooltip} from '../../../ui-components/tooltip/Tooltip'\nimport {useUser} from '../../store/user/hooks'\nimport {useUserColor} from '../../user-color/hooks'\nimport {isRecord} from '../../util/isRecord'\n\ninterface AvatarSkeletonProps {\n $size?: AvatarSize\n}\n\n/**\n * A loading skeleton element representing a user avatar\n * @beta\n */\nexport const AvatarSkeleton = styled(Skeleton)<AvatarSkeletonProps>((props) => {\n const theme = getTheme_v2(props.theme)\n const size = props.$size ?? 1\n return css`\n border-radius: 50%;\n width: ${theme.avatar.sizes[size].size}px;\n height: ${theme.avatar.sizes[size].size}px;\n `\n})\n\n/**\n * @hidden\n * @beta */\nexport interface UserAvatarProps {\n __unstable_hideInnerStroke?: AvatarProps['__unstable_hideInnerStroke']\n animateArrowFrom?: AvatarPosition\n position?: AvatarPosition\n size?: AvatarSize\n status?: AvatarStatus\n tone?: 'navbar'\n user: User | string\n withTooltip?: boolean\n}\n\nconst symbols = /[^\\p{Alpha}\\p{White_Space}]/gu\nconst whitespace = /\\p{White_Space}+/u\n\nconst LEGACY_TO_UI_AVATAR_SIZES: {[key: string]: AvatarSize | undefined} = {\n small: 0,\n medium: 1,\n large: 2,\n}\n\nfunction nameToInitials(fullName: string) {\n const namesArray = fullName.replace(symbols, '').split(whitespace)\n\n if (namesArray.length === 1) {\n return `${namesArray[0].charAt(0)}`.toUpperCase()\n }\n\n return `${namesArray[0].charAt(0)}${namesArray[namesArray.length - 1].charAt(0)}`\n}\n\n/**\n * @hidden\n * @beta */\nexport function UserAvatar(props: UserAvatarProps) {\n const {user, withTooltip, ...restProps} = props\n\n if (isRecord(user)) {\n if (withTooltip) {\n return <TooltipUserAvatar {...restProps} user={user as User} />\n }\n\n return <StaticUserAvatar {...restProps} user={user as User} />\n }\n\n return <UserAvatarLoader {...props} user={user as string} />\n}\n\nfunction TooltipUserAvatar(props: Omit<UserAvatarProps, 'user'> & {user: User}) {\n const {\n user: {displayName},\n } = props\n\n return (\n <Tooltip content={displayName} placement=\"top\" portal>\n <div style={{display: 'inline-block'}}>\n <StaticUserAvatar {...props} />\n </div>\n </Tooltip>\n )\n}\n\nfunction StaticUserAvatar(\n props: Omit<UserAvatarProps, 'user'> & {user: User} & RefAttributes<HTMLDivElement>,\n) {\n const {ref, user, animateArrowFrom, position, size, status, tone, ...restProps} = props\n const [imageLoadError, setImageLoadError] = useState<null | Error>(null)\n const userColor = useUserColor(user.id)\n const imageUrl = imageLoadError ? undefined : user?.imageUrl\n\n return (\n <Avatar\n __unstable_hideInnerStroke\n animateArrowFrom={animateArrowFrom}\n arrowPosition={position}\n color={userColor.name}\n data-legacy-tone={tone}\n initials={user?.displayName && nameToInitials(user.displayName)}\n src={imageUrl}\n onImageLoadError={setImageLoadError}\n ref={ref}\n size={typeof size === 'string' ? LEGACY_TO_UI_AVATAR_SIZES[size] : size}\n status={status}\n title={user?.displayName}\n {...restProps}\n />\n )\n}\n\nfunction UserAvatarLoader({user, ...loadedProps}: Omit<UserAvatarProps, 'user'> & {user: string}) {\n const [value, loading] = useUser(user)\n\n if (loading) {\n return <AvatarSkeleton $size={loadedProps.size} animated />\n }\n if (!value) {\n return <AvatarSkeleton $size={loadedProps.size} animated={false} />\n }\n\n return <UserAvatar {...loadedProps} user={value} />\n}\n","const segmenter = typeof Intl === 'object' && 'Segmenter' in Intl ? new Intl.Segmenter() : undefined\n\n/**\n * Truncates a string to a given length, taking into account surrogate pairs and grapheme clusters\n * (using zero-width joiners). This means the resulting string may be longer in number of bytes,\n * but will be shorter in number of \"characters\". Should only be used for display purposes -\n * not for truncating strings for storage or similar.\n *\n * Examples of differences between `String.prototype.slice` and this function:\n *\n * - '👨👨👧👧'.slice(0, 1) === '�' vs sliceString('👨👨👧👧', 0, 1) === '👨👨👧👧'\n * - '👨👨👧👧'.slice(0, 2) === '👨' vs sliceString('👨👨👧👧', 0, 2) === '👨👨👧👧'\n *\n * @param str - String to slice\n * @param start - Start index\n * @param end - End index (exclusive)\n * @returns The sliced string\n * @internal\n */\nexport function sliceString(str: string, start: number, end: number): string {\n if (end < start) {\n throw new Error(\n 'End must be greater than start, use `String.prototype.slice()` for negative values',\n )\n }\n\n if (!segmenter) {\n return str.slice(start, end)\n }\n\n let i = 0\n let sliced = ''\n for (const value of segmenter.segment(str)) {\n if (i === end) {\n return sliced\n }\n\n sliced += value.segment\n i++\n }\n\n return sliced\n}\n\n/**\n * Truncates a string to a given length, taking into account surrogate pairs and grapheme clusters\n * (using zero-width joiners). This means the resulting string may be longer in number of bytes,\n * but will be shorter in number of \"characters\". Should only be used for display purposes -\n * not for truncating strings for storage or similar.\n *\n * @param str - String to truncate\n * @param maxLength - Maximum length in \"characters\"\n * @returns The truncated string\n * @internal\n */\nexport function truncateString(str: string, maxLength: number): string {\n const truncated = sliceString(str, 0, maxLength)\n return truncated === str ? truncated : `${truncated}…`\n}\n","/**\n * Utilities for handling release title display and truncation\n * @internal\n */\n\nimport {truncateString} from '../../util/unicodeString'\n\nconst DEFAULT_RELEASE_TITLE_CHARACTER_LIMIT = 50\n\n/**\n * Returns structured title details for consumers that need both\n * the truncated display title and tooltip data.\n * @param title - The release title (may be undefined or empty)\n * @param fallback - The fallback string to use when title is absent\n * @returns Object with displayTitle, fullTitle, and isTruncated flag\n */\nexport function getReleaseTitleDetails(\n title: string | undefined,\n fallback: string,\n): {displayTitle: string; fullTitle: string; isTruncated: boolean} {\n const fullTitle = title || fallback\n const isTruncated = fullTitle.length > DEFAULT_RELEASE_TITLE_CHARACTER_LIMIT\n const displayTitle = isTruncated\n ? truncateString(fullTitle, DEFAULT_RELEASE_TITLE_CHARACTER_LIMIT)\n : fullTitle\n\n return {displayTitle, fullTitle, isTruncated}\n}\n","import {Box, Text, type TextProps} from '@sanity/ui'\nimport {type CSSProperties, type ReactElement, type ReactNode} from 'react'\n\nimport {Tooltip} from '../../../ui-components/tooltip/Tooltip'\nimport {getReleaseTitleDetails} from '../util/getReleaseTitleDetails'\n\n/** @internal */\nexport interface ReleaseTitleDetails {\n displayTitle: string\n fullTitle: string\n isTruncated: boolean\n}\n\n/** @internal */\nexport interface ReleaseTitleProps {\n title: string | undefined\n fallback: string\n enableTooltip?: boolean\n tooltipMaxWidth?: string\n children?: (details: ReleaseTitleDetails) => ReactElement\n textProps?: Omit<TextProps, 'children'> & {style?: CSSProperties}\n}\n\nconst DEFAULT_TOOLTIP_MAX_WIDTH = '300px'\n\n/** @internal */\nexport function ReleaseTitle(props: ReleaseTitleProps): ReactNode {\n const {title, fallback, enableTooltip = true, tooltipMaxWidth, children, textProps} = props\n const {displayTitle, fullTitle, isTruncated} = getReleaseTitleDetails(title, fallback)\n\n const renderedContent: ReactElement = children ? (\n children({displayTitle, fullTitle, isTruncated})\n ) : (\n <Text {...textProps}>{displayTitle}</Text>\n )\n\n if (isTruncated && enableTooltip) {\n return (\n <Tooltip\n content={\n <Box style={{maxWidth: tooltipMaxWidth ?? DEFAULT_TOOLTIP_MAX_WIDTH}}>\n <Text size={1}>{fullTitle}</Text>\n </Box>\n }\n >\n {renderedContent}\n </Tooltip>\n )\n }\n\n return renderedContent\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { gt as useReleasesStore } from "./useBundleDocuments-
|
|
1
|
+
import { gt as useReleasesStore } from "./useBundleDocuments-C58ExRpX.js";
|
|
2
2
|
import { useContext, useEffect, useState } from "react";
|
|
3
3
|
import { c } from "react/compiler-runtime";
|
|
4
4
|
import { jsx } from "react/jsx-runtime";
|
|
@@ -82,4 +82,4 @@ function _temp4() {
|
|
|
82
82
|
}
|
|
83
83
|
export { useReleasesMetadataProvider as n, ReleasesMetadataProvider as t };
|
|
84
84
|
|
|
85
|
-
//# sourceMappingURL=ReleasesMetadataProvider-
|
|
85
|
+
//# sourceMappingURL=ReleasesMetadataProvider-DbxROVyw.js.map
|
package/lib/{ReleasesMetadataProvider-DuAzHgpz.js.map → ReleasesMetadataProvider-DbxROVyw.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReleasesMetadataProvider-
|
|
1
|
+
{"version":3,"file":"ReleasesMetadataProvider-DbxROVyw.js","names":["useCallback","useContext","useEffect","useMemo","useState","useObservable","ReleasesMetadataContext","MetadataWrapper","ReleasesMetadata","useReleasesStore","ReleasesMetadataContextValue","state","addReleaseIdsToListener","slugs","removeReleaseIdsFromListener","DEFAULT_METADATA_STATE","data","error","loading","ReleasesMetadataProviderInner","t0","$","_c","children","t1","Symbol","for","listenerReleaseIds","setListenerReleaseIds","getMetadataStateForSlugs$","releasesMetadata","setReleasesMetadata","t2","map","_temp","memoObservable","observedResult","t3","t4","prevReleaseMetadata","t5","addReleaseIds","prevSlugs","filter","_temp2","t6","releaseIds","prevSlugs_0","nextSlugs","reduce","acc","slug_0","removedSlugs","accNextSlugs","includes","slug","t7","context","t8","ReleasesMetadataProvider","useReleasesMetadataProvider","contextValue","_temp3","_temp4","releaseId"],"sources":["../src/core/releases/contexts/ReleasesMetadataProvider.tsx"],"sourcesContent":["import {useCallback, useContext, useEffect, useMemo, useState} from 'react'\nimport {useObservable} from 'react-rx'\nimport {ReleasesMetadataContext} from 'sanity/_singletons'\n\nimport {type MetadataWrapper} from '../store/createReleaseMetadataAggregator'\nimport {type ReleasesMetadata} from '../store/useReleasesMetadata'\nimport {useReleasesStore} from '../store/useReleasesStore'\n\n/**\n * @internal\n */\nexport interface ReleasesMetadataContextValue {\n state: MetadataWrapper\n addReleaseIdsToListener: (slugs: string[]) => void\n removeReleaseIdsFromListener: (slugs: string[]) => void\n}\n\nconst DEFAULT_METADATA_STATE: MetadataWrapper = {\n data: null,\n error: null,\n loading: false,\n}\n\nconst ReleasesMetadataProviderInner = ({children}: {children: React.ReactNode}) => {\n const [listenerReleaseIds, setListenerReleaseIds] = useState<string[]>([])\n const {getMetadataStateForSlugs$} = useReleasesStore()\n const [releasesMetadata, setReleasesMetadata] = useState<Record<string, ReleasesMetadata> | null>(\n null,\n )\n\n const memoObservable = useMemo(\n () => getMetadataStateForSlugs$(listenerReleaseIds.map((slug) => slug)),\n [getMetadataStateForSlugs$, listenerReleaseIds],\n )\n\n const observedResult = useObservable(memoObservable) || DEFAULT_METADATA_STATE\n\n // patch metadata in local state\n useEffect(\n () =>\n // oxlint-disable-next-line react/react-compiler\n setReleasesMetadata((prevReleaseMetadata) => {\n if (!observedResult.data) return prevReleaseMetadata\n\n return {...prevReleaseMetadata, ...observedResult.data}\n }),\n [observedResult.data],\n )\n\n const addReleaseIdsToListener = useCallback((addReleaseIds: (string | undefined)[]) => {\n setListenerReleaseIds((prevSlugs) => [\n ...prevSlugs,\n ...addReleaseIds.filter((releaseId): releaseId is string => typeof releaseId === 'string'),\n ])\n }, [])\n\n const removeReleaseIdsFromListener = useCallback((releaseIds: string[]) => {\n setListenerReleaseIds((prevSlugs) => {\n const {nextSlugs} = prevSlugs.reduce<{removedSlugs: string[]; nextSlugs: string[]}>(\n (acc, slug) => {\n const {removedSlugs, nextSlugs: accNextSlugs} = acc\n /**\n * In cases where multiple consumers are listening to the same release id\n * the release id will appear multiple times in listenerReleaseIds array\n * removing should only remove 1 instance of the slug and retain all others\n */\n if (releaseIds.includes(slug) && !removedSlugs.includes(slug)) {\n return {removedSlugs: [...removedSlugs, slug], nextSlugs: accNextSlugs}\n }\n return {removedSlugs, nextSlugs: [...accNextSlugs, slug]}\n },\n {removedSlugs: [], nextSlugs: []},\n )\n return nextSlugs\n })\n }, [])\n\n const context = useMemo<{\n addReleaseIdsToListener: (slugs: string[]) => void\n removeReleaseIdsFromListener: (slugs: string[]) => void\n state: MetadataWrapper\n }>(\n () => ({\n addReleaseIdsToListener: addReleaseIdsToListener,\n removeReleaseIdsFromListener: removeReleaseIdsFromListener,\n state: {...observedResult, data: releasesMetadata},\n }),\n [addReleaseIdsToListener, releasesMetadata, observedResult, removeReleaseIdsFromListener],\n )\n\n return (\n <ReleasesMetadataContext.Provider value={context}>{children}</ReleasesMetadataContext.Provider>\n )\n}\n\nexport const ReleasesMetadataProvider = ({children}: {children: React.ReactNode}) => {\n const context = useContext(ReleasesMetadataContext)\n\n // Avoid mounting the provider if it's already provided by a parent\n if (context) return children\n return <ReleasesMetadataProviderInner>{children}</ReleasesMetadataProviderInner>\n}\n\nexport const useReleasesMetadataProvider = (): ReleasesMetadataContextValue => {\n const contextValue = useContext(ReleasesMetadataContext)\n\n return (\n contextValue || {\n state: DEFAULT_METADATA_STATE,\n addReleaseIdsToListener: () => null,\n removeReleaseIdsFromListener: () => null,\n }\n )\n}\n"],"mappings":";;;;;;AAiBA,MAAMe,yBAA0C;CAC9CC,MAAM;CACNC,OAAO;CACPC,SAAS;AACX,GAEMC,iCAAgCC,OAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GAAC,EAAAC,aAAAH,IAAuCI;CAAA,AAAAH,EAAA,OAAAI,OAAAC,IAAA,2BAAA,KACLF,KAAA,CAAA,GAAEH,EAAA,KAAAG,MAAAA,KAAAH,EAAA;CAAzE,IAAA,CAAAM,oBAAAC,yBAAoDxB,SAAmBoB,EAAE,GACzE,EAAAK,8BAAoCpB,iBAAiB,GACrD,CAAAqB,kBAAAC,uBAAgD3B,SAC9C,IACF,GAAC4B;CAAA,AAAAX,EAAA,OAAAQ,6BAAAR,EAAA,OAAAM,sBAGOK,KAAAH,0BAA0BF,mBAAkBM,IAAKC,KAAc,CAAC,GAACb,EAAA,KAAAQ,2BAAAR,EAAA,KAAAM,oBAAAN,EAAA,KAAAW,MAAAA,KAAAX,EAAA;CAIzE,IAAAe,iBAAuB/B,cAAc8B,EAAwC,KAAtDpB,wBAAuDsB,IAAAC;CAG9EpC,AAH8EmB,EAAA,OAAAe,eAAApB,QAWvDqB,KAAAhB,EAAA,IAAAiB,KAAAjB,EAAA,OAPrBgB,WAEEN,qBAAoBQ,wBACbH,eAAcpB,OAEZ;EAAA,GAAIuB;EAAmB,GAAKH,eAAcpB;CAAK,IAFrBuB,mBAGlC,GACHD,KAAA,CAACF,eAAcpB,IAAK,GAACK,EAAA,KAAAe,eAAApB,MAAAK,EAAA,KAAAgB,IAAAhB,EAAA,KAAAiB,KARvBpC,UACEmC,IAOAC,EACF;CAAC,IAAAE;CAAA,AAAAnB,EAAA,OAAAI,OAAAC,IAAA,2BAAA,KAE2Cc,MAAAC,kBAAA;EAC1Cb,uBAAsBc,cAAe,CAAA,GAChCA,WAAS,GACTD,cAAaE,OAAQC,MAAiE,CAAC,CAC3F;CAAC,GACHvB,EAAA,KAAAmB,MAAAA,KAAAnB,EAAA;CALD,IAAAT,0BAAgC4B,IAK1BK;CAAA,AAAAxB,EAAA,OAAAI,OAAAC,IAAA,2BAAA,KAE2CmB,MAAAC,eAAA;EAC/ClB,uBAAsBmB,gBAAA;GACpB,IAAA,EAAAC,cAAoBN,YAASO,QAC3BC,KAAAC,WAAA;IACE,IAAA,EAAAC,cAAAJ,WAAAK,iBAAgDH;IAQ/C,OAFGJ,WAAUQ,SAAUC,MAAoC,KAAxD,CAA8BH,aAAYE,SAAUC,MAAI,IACnD;KAAAH,cAAe,CAAA,GAAIA,cAAcG,MAAI;KAACP,WAAaK;IAAY,IAEjE;KAAAD;KAAAJ,WAA0B,CAAA,GAAIK,cAAcE,MAAI;IAAC;GAAC,GAE3D;IAAAH,cAAe,CAAA;IAAEJ,WAAa,CAAA;GAAE,CAClC;GAAC,OACMA;EAAS,CACjB;CAAC,GACH3B,EAAA,KAAAwB,MAAAA,KAAAxB,EAAA;CAnBD,IAAAP,+BAAqC+B,IAmB/BW;CAAA,AAAAnC,EAAA,OAAAe,kBAAAf,EAAA,QAAAS,oBAOG0B,KAAA;EAAA5C;EAAAE;EAAAH,OAGE;GAAA,GAAIyB;GAAcpB,MAAQc;EAAgB;CACnD,GAACT,EAAA,KAAAe,gBAAAf,EAAA,MAAAS,kBAAAT,EAAA,MAAAmC,MAAAA,KAAAnC,EAAA;CATH,IAAAoC,UAKSD,IAMRE;CAGgG,OAHhGrC,EAAA,QAAAE,YAAAF,EAAA,QAAAoC,WAGCC,KAAA,oBAAA,wBAAA,UAAA;EAAyCD,OAAAA;EAAUlC;CAAS,CAAA,GAAmCF,EAAA,MAAAE,UAAAF,EAAA,MAAAoC,SAAApC,EAAA,MAAAqC,MAAAA,KAAArC,EAAA,KAA/FqC;AAA+F,GAItFC,4BAA2BvC,OAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GAAC,EAAAC,aAAAH;CAIvC,IAHgBnB,WAAWK,uBAGvBmD,GAAO,OAASlC;CAAQ,IAAAC;CACoD,OADpDH,EAAA,OAAAE,WACoDC,KAAAH,EAAA,MAAzEG,KAAA,oBAAC,+BAAD,EAAgCD,SAAF,CAAA,GAA2CF,EAAA,KAAAE,UAAAF,EAAA,KAAAG,KAAzEA;AAAyE,GAGrEoC,oCAA8B;CAAA,IAAAvC,IAAAC,EAAA,CAAA,GACzCuC,eAAqB5D,WAAWK,uBAAuB,GAACc;CAOrD,OAPqDC,EAAA,OAAAwC,eAOrDzC,KAAAC,EAAA,MAJDD,KAAAyC,gBAAA;EAAAlD,OACSI;EAAsBH,yBACJkD;EAAUhD,8BACLiD;CAChC,GAAC1C,EAAA,KAAAwC,cAAAxC,EAAA,KAAAD,KAJDA;AAIC;AAxFiC,SAAAc,MAAAqB,MAAA;CAAA,OAQ+BA;AAAI;AARnC,SAAAX,OAAAoB,WAAA;CAAA,OA6B4B,OAAOA,aAAc;AAAQ;AAmDpD,SAAAF,SAAA;CAAA,OAMN;AAAI;AANE,SAAAC,SAAA;CAAA,OAOD;AAAI"}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import { n as Tooltip } from "./Button-CGZ3ETwD.js";
|
|
2
2
|
import { n as MenuButton$1, t as MenuItem$1 } from "./MenuItem-D0rtIQmn.js";
|
|
3
|
-
import { c as useWorkspace, i as useClient } from "./studioClient-
|
|
4
|
-
import { Et as getVariantId, l as useProjectStore, m as useResourceCache, ot as getReleaseIdFromReleaseDocumentId } from "./datastores-
|
|
3
|
+
import { c as useWorkspace, i as useClient } from "./studioClient-BpYJ_yYC.js";
|
|
4
|
+
import { Et as getVariantId, l as useProjectStore, m as useResourceCache, ot as getReleaseIdFromReleaseDocumentId } from "./datastores-wbjstxMt.js";
|
|
5
5
|
import { t as useTranslation } from "./useTranslation-Cqs6Itwv.js";
|
|
6
|
-
import { n as useFeatureEnabled, t as FEATURES } from "./useFeatureEnabled-
|
|
7
|
-
import { Bt as isReleaseDocument, Dt as isPublishedPerspective, Ft as PUBLISHED, Ot as isReleaseScheduledOrScheduling, Pt as LATEST, Rt as isCardinalityOneRelease, Tt as isDraftPerspective, gt as useReleasesStore, ht as useActiveReleases, i as useReleaseOperations, j as usePerspective, s as useReleasesUpsell, wt as getReleaseDefaults, xt as formatRelativeLocalePublishDate } from "./useBundleDocuments-
|
|
6
|
+
import { n as useFeatureEnabled, t as FEATURES } from "./useFeatureEnabled-C5qTffLc.js";
|
|
7
|
+
import { Bt as isReleaseDocument, Dt as isPublishedPerspective, Ft as PUBLISHED, Ot as isReleaseScheduledOrScheduling, Pt as LATEST, Rt as isCardinalityOneRelease, Tt as isDraftPerspective, gt as useReleasesStore, ht as useActiveReleases, i as useReleaseOperations, j as usePerspective, s as useReleasesUpsell, wt as getReleaseDefaults, xt as formatRelativeLocalePublishDate } from "./useBundleDocuments-C58ExRpX.js";
|
|
8
8
|
import { n as createAgentBundlesStore, r as isAgentBundleName, t as INITIAL_STATE } from "./createAgentBundlesStore-BJwwD0vJ.js";
|
|
9
|
-
import { l as ReleaseAvatarIcon, t as ReleaseTitle } from "./ReleaseTitle-
|
|
10
|
-
import { b as useGetDefaultPerspective, v as getPerspectiveParam, y as useSetPerspective } from "./UnpublishVersionDialog-
|
|
11
|
-
import { r as CONTENT_RELEASES_TIME_ZONE_SCOPE } from "./useScheduledDraftMenuActions-
|
|
12
|
-
import { t as RELEASES_INTENT } from "./plugin-
|
|
13
|
-
import { t as useTimeZone } from "./useTimeZone-
|
|
14
|
-
import { t as RELEASES_SCHEDULED_DRAFTS_INTENT } from "./plugin-
|
|
15
|
-
import { a as useScheduledDraftsEnabled } from "./SingleDocReleaseUpsellProvider-
|
|
16
|
-
import { n as SCHEDULES_TOOL_NAME } from "./plugin-
|
|
17
|
-
import { n as NavigatedToScheduledDrafts, o as useReleasePermissions, p as useCreateReleaseMetadata, r as CreateReleaseDialog, t as NavigatedToReleasesOverview } from "./navigation.telemetry-
|
|
18
|
-
import { t as useReleasesToolAvailable } from "./useReleasesToolAvailable-
|
|
9
|
+
import { l as ReleaseAvatarIcon, t as ReleaseTitle } from "./ReleaseTitle-ln13W3P1.js";
|
|
10
|
+
import { b as useGetDefaultPerspective, v as getPerspectiveParam, y as useSetPerspective } from "./UnpublishVersionDialog-6zyP9rCr.js";
|
|
11
|
+
import { r as CONTENT_RELEASES_TIME_ZONE_SCOPE } from "./useScheduledDraftMenuActions-DIQYFw0x.js";
|
|
12
|
+
import { t as RELEASES_INTENT } from "./plugin-ClT8-pVM.js";
|
|
13
|
+
import { t as useTimeZone } from "./useTimeZone-Da8WK1q-.js";
|
|
14
|
+
import { t as RELEASES_SCHEDULED_DRAFTS_INTENT } from "./plugin-DRuKGgrO.js";
|
|
15
|
+
import { a as useScheduledDraftsEnabled } from "./SingleDocReleaseUpsellProvider-YDBCGrHT.js";
|
|
16
|
+
import { n as SCHEDULES_TOOL_NAME } from "./plugin-wJP1ECFq.js";
|
|
17
|
+
import { n as NavigatedToScheduledDrafts, o as useReleasePermissions, p as useCreateReleaseMetadata, r as CreateReleaseDialog, t as NavigatedToReleasesOverview } from "./navigation.telemetry-EsdzXa34.js";
|
|
18
|
+
import { t as useReleasesToolAvailable } from "./useReleasesToolAvailable-BOlw1HWL.js";
|
|
19
19
|
import { t as ToneIcon } from "./ToneIcon-DgovBh2L.js";
|
|
20
20
|
import { memo, useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
21
21
|
import { from } from "rxjs";
|
|
@@ -988,4 +988,4 @@ const ReleasesNavContainer = styled(Card).withConfig({
|
|
|
988
988
|
};
|
|
989
989
|
export { ToolLink as a, useFormatRelativeLocalePublishDate as c, oversizedButtonStyle as i, CreateReleaseMenuItem as l, useExcludedPerspective as n, useAgentBundles as o, AnimatedTextWidth as r, useAgentBundlesStore as s, ReleasesNav as t, useSetVariant as u };
|
|
990
990
|
|
|
991
|
-
//# sourceMappingURL=ReleasesNav-
|
|
991
|
+
//# sourceMappingURL=ReleasesNav-DNwncim0.js.map
|